Name: series-workflow8h997 Phase: Succeeded StartedAt: 2026-07-27 13:44:07 +0000 UTC FinishedAt: 2026-07-27 18:54:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[0] Phase: Succeeded StartedAt: 2026-07-27 13:44:07 +0000 UTC FinishedAt: 2026-07-27 14:24:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 13:44:07 +0000 UTC FinishedAt: 2026-07-27 14:24:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VETH", "BPF_SYSCALL", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VETH", "BPF_SYSCALL", "NET" ], "series_id": "b8ad74bc-7074-4a15-b8dd-de6eb52e2f88" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_prog_run_generic_xdp", "do_xdp_generic" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZFVEgmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDssCiAgICAmIzM0O2RvX3hkcF9nZW5lcmljJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBza2ItXHUwMDNlbGVuYCBpcyBub3QgdXBkYXRlZCB3aGVuIGBza2ItXHUwMDNlZGF0YV9sZW5gIGlzIG1vZGlmaWVkIGJ5IFhEUCBmcmFnbWVudHMgaW4gYHZldGhfeGRwX3Jjdl9za2JgIGFuZCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBhbmQgdGhlIHZldGggZHJpdmVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg1MGExM2JkOTVhNjU2OGRiNDA2NTZkZjcxNDZmN2I0YjFmMzljYzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxNDoyMjo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92ZXRoLmMgYi9kcml2ZXJzL25ldC92ZXRoLmNcbmluZGV4IDAwZTM0YWZkODU4ZTcyLi5hOTU2NDk4YTA3M2JlOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3ZldGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdmV0aC5jXG5AQCAtODcxLDEyICYjNDM7ODcxLDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmV0aF94ZHBfcmN2X3NrYihzdHJ1Y3QgdmV0aF9ycSAqcnEsXG4gXHRcdF9fc2tiX3B1dChza2IsIG9mZik7IC8qIHBvc2l0aXZlIG9uIGdyb3csIG5lZ2F0aXZlIG9uIHNocmluayAqL1xuIFxuIFx0LyogWERQIGZyYWcgbWV0YWRhdGEgKGUuZy4gbnJfZnJhZ3MpIGFyZSB1cGRhdGVkIGluIGVCUEYgaGVscGVyc1xuLVx0ICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCksIHdlIG5lZWQgdG8gdXBkYXRlIGRhdGFfbGVuIGhlcmUuXG4mIzQzO1x0ICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCksIHVwZGF0ZSBza2IgbGVuZ3RoIGZpZWxkcyBoZXJlLlxuIFx0ICovXG4mIzQzO1x0c2tiLVx1MDAzZWxlbiAtPSBza2ItXHUwMDNlZGF0YV9sZW47XG4gXHRpZiAoeGRwX2J1ZmZfaGFzX2ZyYWdzKHhkcCkpXG4gXHRcdHNrYi1cdTAwM2VkYXRhX2xlbiA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2V4ZHBfZnJhZ3Nfc2l6ZTtcbiBcdGVsc2VcbiBcdFx0c2tiLVx1MDAzZWRhdGFfbGVuID0gMDtcbiYjNDM7XHRza2ItXHUwMDNlbGVuICYjNDM7PSBza2ItXHUwMDNlZGF0YV9sZW47XG4gXG4gXHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHJxLVx1MDAzZWRldik7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggNTkzM2M1ZGFiMDllZTEuLjk0MjA0NzAyY2IwMjAxIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNTUxNywxMiAmIzQzOzU1MTcsMTQgQEAgdTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbiBcdH1cbiBcbiBcdC8qIFhEUCBmcmFnIG1ldGFkYXRhIChlLmcuIG5yX2ZyYWdzKSBhcmUgdXBkYXRlZCBpbiBlQlBGIGhlbHBlcnNcbi1cdCAqIChlLmcuIGJwZl94ZHBfYWRqdXN0X3RhaWwpLCB3ZSBuZWVkIHRvIHVwZGF0ZSBkYXRhX2xlbiBoZXJlLlxuJiM0MztcdCAqIChlLmcuIGJwZl94ZHBfYWRqdXN0X3RhaWwpLCB1cGRhdGUgc2tiIGxlbmd0aCBmaWVsZHMgaGVyZS5cbiBcdCAqL1xuJiM0MztcdHNrYi1cdTAwM2VsZW4gLT0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuIFx0aWYgKHhkcF9idWZmX2hhc19mcmFncyh4ZHApKVxuIFx0XHRza2ItXHUwMDNlZGF0YV9sZW4gPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNleGRwX2ZyYWdzX3NpemU7XG4gXHRlbHNlXG4gXHRcdHNrYi1cdTAwM2VkYXRhX2xlbiA9IDA7XG4mIzQzO1x0c2tiLVx1MDAzZWxlbiAmIzQzOz0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuIFxuIFx0LyogY2hlY2sgaWYgWERQIGNoYW5nZWQgZXRoIGhkciBzdWNoIFNLQiBuZWVkcyB1cGRhdGUgKi9cbiBcdGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopeGRwLVx1MDAzZWRhdGE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZFVEgmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDssCiAgICAmIzM0O2RvX3hkcF9nZW5lcmljJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBza2ItXHUwMDNlbGVuYCBpcyBub3QgdXBkYXRlZCB3aGVuIGBza2ItXHUwMDNlZGF0YV9sZW5gIGlzIG1vZGlmaWVkIGJ5IFhEUCBmcmFnbWVudHMgaW4gYHZldGhfeGRwX3Jjdl9za2JgIGFuZCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBhbmQgdGhlIHZldGggZHJpdmVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg1MGExM2JkOTVhNjU2OGRiNDA2NTZkZjcxNDZmN2I0YjFmMzljYzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAxNDoyMjo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZldGguYyBiL2RyaXZlcnMvbmV0L3ZldGguYwppbmRleCAwMGUzNGFmZDg1OGU3Mi4uYTk1NjQ5OGEwNzNiZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZldGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC92ZXRoLmMKQEAgLTg3MSwxMiAmIzQzOzg3MSwxNCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZldGhfeGRwX3Jjdl9za2Ioc3RydWN0IHZldGhfcnEgKnJxLAogCQlfX3NrYl9wdXQoc2tiLCBvZmYpOyAvKiBwb3NpdGl2ZSBvbiBncm93LCBuZWdhdGl2ZSBvbiBzaHJpbmsgKi8KIAogCS8qIFhEUCBmcmFnIG1ldGFkYXRhIChlLmcuIG5yX2ZyYWdzKSBhcmUgdXBkYXRlZCBpbiBlQlBGIGhlbHBlcnMKLQkgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKSwgd2UgbmVlZCB0byB1cGRhdGUgZGF0YV9sZW4gaGVyZS4KJiM0MzsJICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCksIHVwZGF0ZSBza2IgbGVuZ3RoIGZpZWxkcyBoZXJlLgogCSAqLwomIzQzOwlza2ItJmd0O2xlbiAtPSBza2ItJmd0O2RhdGFfbGVuOwogCWlmICh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSkKIAkJc2tiLSZndDtkYXRhX2xlbiA9IHNrYl9zaGluZm8oc2tiKS0mZ3Q7eGRwX2ZyYWdzX3NpemU7CiAJZWxzZQogCQlza2ItJmd0O2RhdGFfbGVuID0gMDsKJiM0MzsJc2tiLSZndDtsZW4gJiM0Mzs9IHNrYi0mZ3Q7ZGF0YV9sZW47CiAKIAlza2ItJmd0O3Byb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBycS0mZ3Q7ZGV2KTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCA1OTMzYzVkYWIwOWVlMS4uOTQyMDQ3MDJjYjAyMDEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC01NTE3LDEyICYjNDM7NTUxNywxNCBAQCB1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLAogCX0KIAogCS8qIFhEUCBmcmFnIG1ldGFkYXRhIChlLmcuIG5yX2ZyYWdzKSBhcmUgdXBkYXRlZCBpbiBlQlBGIGhlbHBlcnMKLQkgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKSwgd2UgbmVlZCB0byB1cGRhdGUgZGF0YV9sZW4gaGVyZS4KJiM0MzsJICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCksIHVwZGF0ZSBza2IgbGVuZ3RoIGZpZWxkcyBoZXJlLgogCSAqLwomIzQzOwlza2ItJmd0O2xlbiAtPSBza2ItJmd0O2RhdGFfbGVuOwogCWlmICh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSkKIAkJc2tiLSZndDtkYXRhX2xlbiA9IHNrYl9zaGluZm8oc2tiKS0mZ3Q7eGRwX2ZyYWdzX3NpemU7CiAJZWxzZQogCQlza2ItJmd0O2RhdGFfbGVuID0gMDsKJiM0MzsJc2tiLSZndDtsZW4gJiM0Mzs9IHNrYi0mZ3Q7ZGF0YV9sZW47CiAKIAkvKiBjaGVjayBpZiBYRFAgY2hhbmdlZCBldGggaGRyIHN1Y2ggU0tCIG5lZWRzIHVwZGF0ZSAqLwogCWV0aCA9IChzdHJ1Y3QgZXRoaGRyICopeGRwLSZndDtkYXRhOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWERQIEZyYWdtZW50IExlbmd0aCBVcGRhdGVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L3ZldGguY2AgYW5kIGBuZXQvY29yZS9kZXYuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIFhEUCBmcmFnbWVudHMgYW5kIHRoZSBgc2tiLSZndDtsZW5gIGNhbGN1bGF0aW9uLiBUaGUgY29kZSBzbmlwcGV0IGhpZ2hsaWdodHMgaG93IGBza2ItJmd0O2RhdGFfbGVuYCBpcyBiZWluZyB1cGRhdGVkIGluIHJlc3BvbnNlIHRvIGNoYW5nZXMgbWFkZSBieSBlQlBGIGhlbHBlcnMgbGlrZSBgYnBmX3hkcF9hZGp1c3RfdGFpbGAuIEVzc2VudGlhbGx5LCB0aGUgbG9naWMgYWRqdXN0cyB0aGUgb3ZlcmFsbCBgc2tiLSZndDtsZW5gIHdoZW4gZGVhbGluZyB3aXRoIHRoZXNlIFhEUCBmcmFnbWVudHMuIEl0JiMzOTtzIHN1YnRyYWN0aW5nIHRoZSBvbGQgYHNrYi0mZ3Q7ZGF0YV9sZW5gLCBzZXR0aW5nIGl0IHRvIHRoZSB4ZHAgZnJhZ21lbnQgc2l6ZSBvciAwLCBhbmQgdGhlbiBhZGRpbmcgdGhlIG5ldyBgc2tiLSZndDtkYXRhX2xlbmAuCgpTcGVjaWZpY2FsbHksIHRoaXMgaXMgaGFwcGVuaW5nIHdpdGhpbiB0aGUgYHZldGhfeGRwX3Jjdl9za2JgIGZ1bmN0aW9uIGFuZCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYC4gSSBuZWVkIHRvIHZlcmlmeSBhIGNvdXBsZSBvZiB0aGluZ3MsIGFzIHRoaXMgc29ydCBvZiBjaGFuZ2UgY2FuIGJlIGRlbGljYXRlLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVhY2hhYmlsaXR5IG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgdGhlIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGVuYWJsZSB0aGlzIHBhcnRpY3VsYXIgY29kZSBwYXRoLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O2xsIHNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byBgdmV0aF94ZHBfcmN2X3NrYmAgYW5kIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIHRvIHNlZSB3aGVyZSB0aGV5JiMzOTtyZSBiZWluZyBjYWxsZWQgYW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZXkgYXJlIGFjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZXRoX3hkcF9yY3Zfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdmV0aC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3ZldGguYz03NTE9c3RhdGljIGludCB2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmKHN0cnVjdCB2ZXRoX3JxICpycSxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtNzg5LVxuZHJpdmVycy9uZXQvdmV0aC5jOjc5MDpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZldGhfeGRwX3Jjdl9za2Ioc3RydWN0IHZldGhfcnEgKnJxLFxuZHJpdmVycy9uZXQvdmV0aC5jLTc5MS1cdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9OTAzPXN0YXRpYyBpbnQgdmV0aF94ZHBfcmN2KHN0cnVjdCB2ZXRoX3JxICpycSwgaW50IGJ1ZGdldCxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtOTM1LVx0XHRcdHN0YXRzLVx1MDAzZXhkcF9ieXRlcyAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbmRyaXZlcnMvbmV0L3ZldGguYzo5MzY6XHRcdFx0c2tiID0gdmV0aF94ZHBfcmN2X3NrYihycSwgc2tiLCBicSwgc3RhdHMpO1xuZHJpdmVycy9uZXQvdmV0aC5jLTkzNy1cdFx0XHRpZiAoc2tiKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZsb3csIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLCBwcmVzZW50ZWQgYXMgeW91ciB0aG91Z2h0IHByb2Nlc3M6CgoqKnZldGggWERQIFBhY2tldCBSZWNlcHRpb246IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgWERQIHByb2Nlc3NpbmcgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSB2ZXRoIGludGVyZmFjZSBjb2RlLCBhbmQgaGVyZSYjMzk7cyB0aGUgZmxvdyBJJiMzOTttIHBpZWNpbmcgdG9nZXRoZXIuIGB2ZXRoX3hkcF9yY3Zfc2tiYCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIG9ubHkgdmlzaWJsZSB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgbGlrZWx5IGludGVybmFsIGhlbHBlciBmdW5jdGlvbi4gSXRzIGpvYiBpcyBoYW5kbGluZyB0aGUgZmluYWwgcHJvY2Vzc2luZyBvZiB0aGUgcmVjZWl2ZWQgU0tCIHdpdGhpbiB0aGUgWERQIGNvbnRleHQuIE5vdywgaG93IGRvZXMgaXQgZ2V0IGNhbGxlZD8gVGhhdCYjMzk7cyB0aGUga2V5LgoKYHZldGhfeGRwX3JjdmAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgKmNhbGxzKiBgdmV0aF94ZHBfcmN2X3NrYmAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgdGhlIFhEUCBsb2dpYyB3aXRoaW4gdGhlIHZldGggZHJpdmVyLiAgQW5kIHdoZXJlIGlzICp0aGF0KiBjYWxsZWQgZnJvbT8gSXQmIzM5O3MgY2FsbGVkIGZyb20gYHZldGhfcG9sbGAsIHdoaWNoIGlzIHRoZSBOZXR3b3JrIEFQSSAoTkFQSSkgcG9sbCBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgZm9yIHRoZSB2ZXRoIGludGVyZmFjZS4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGUgZHJpdmVyIGlzIHVzaW5nIE5BUEkgdG8gZWZmaWNpZW50bHkgcHJvY2VzcyBpbmNvbWluZyBwYWNrZXRzLiBTbywgdGhlIFhEUCBwcm9jZXNzaW5nIGlzIGluaXRpYXRlZCBkdXJpbmcgdGhlIHBvbGwsIHdoaWNoIGhhcHBlbnMgYWZ0ZXIgYSByZWNlaXZlIGludGVycnVwdCBvciBhIHRpbWVvdXQuCgpGaW5hbGx5LCBJIHJlbWVtYmVyIHRoYXQgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXMgd2hlcmUgdGhlIEJQRiBtYWdpYyBhY3R1YWxseSBoYXBwZW5zLiBJdCYjMzk7cyB0aGUgZ2VuZXJpYyBYRFAgZXhlY3V0aW9uIGZ1bmN0aW9uLCBhbmQgSSBrbm93IGZyb20gcHJpb3Igd29yayB0aGF0IGl0JiMzOTtzIGxvY2F0ZWQgaW4gYG5ldC9jb3JlL2Rldi5jYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGxvb2tpbmcgdXAgdGhlIGF0dGFjaGVkIFhEUCBwcm9ncmFtIGFuZCBydW5uaW5nIGl0IGFnYWluc3QgdGhlIGluY29taW5nIHBhY2tldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz01NDM1PXN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlICpuZXRpZl9nZXRfcnhxdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTU0NTctXG5uZXQvY29yZS9kZXYuYzo1NDU4OnUzMiBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXG5uZXQvY29yZS9kZXYuYy01NDU5LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZylcbi0tXG5uZXQvY29yZS9kZXYuYz01NTg4PXN0YXRpYyB1MzIgbmV0aWZfcmVjZWl2ZV9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsXG4tLVxubmV0L2NvcmUvZGV2LmMtNTYxNS1cbm5ldC9jb3JlL2Rldi5jOjU2MTY6XHRhY3QgPSBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoKnBza2IsIHhkcCwgeGRwX3Byb2cpO1xubmV0L2NvcmUvZGV2LmMtNTYxNy1cdHN3aXRjaCAoYWN0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIyNwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBWaXNpYmlsaXR5KioKCkFscmlnaHQsIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGUga2VybmVsIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIFhEUCBmcmFtZXdvcmsuIEkgc2VlIHRoYXQgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXMgcG90ZW50aWFsbHkgZXhwb3NlZCBpbiBgbmV0L2NvcmUvZGV2LmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGludGVuZGVkIHRvIGJlIHVzZWQgZXh0ZXJuYWxseT8gSXMgaXQgdHJ1bHkgZXhwb3J0ZWQsIG9yIGRpZCBpdCBzbGlwIG91dCBhcyBub24tc3RhdGljLCBieSBtaXN0YWtlPyYjMzQ7IFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSBhY2NpZGVudGFsbHkgZXhwb3J0aW5nIHNvbWV0aGluZyBjYW4gaW50cm9kdWNlIGNvbXBhdGliaWxpdHkgaXNzdWVzIGRvd24gdGhlIGxpbmUgYW5kIG1ha2UgbWFpbnRlbmFuY2UgYSBuaWdodG1hcmUuIEl0IGNvdWxkIGFsc28gaGF2ZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIE5vdywgbGV0JiMzOTtzIGNvbmZpcm0gd2hldGhlciBpdCYjMzk7cyB0cnVseSBpbnRlbmRlZCB0byBiZSB2aXNpYmxlIG91dHNpZGUgb2YgdGhlIGZpbGUuIFRpbWUgdG8gY2hlY2sgdGhvc2UgZXhwb3J0IGZsYWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MDAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVidWdnaW5nIGEgTWlzc2luZyBFeHBvcnQqKgoKSG1tLCB0aGlzIGlzIGN1cmlvdXMuIEkgZXhwZWN0ZWQgdG8gZmluZCB0aGlzIGZ1bmN0aW9uIGV4cG9ydGVkLCBidXQgaXQmIzM5O3Mgbm90LiBBbmQgeWV0LCBpdCYjMzk7cyAqbm90KiBzdGF0aWMsIHdoaWNoIGNvbXBsaWNhdGVzIHRoaW5ncyBmdXJ0aGVyLiBUaGF0IHN1Z2dlc3RzIGl0IHNob3VsZCBiZSB2aXNpYmxlIG91dHNpZGUgaXRzIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhlIGxpbmthZ2UgbXVzdCBiZSB0aGUgaXNzdWUuIExldCYjMzk7cyBkaWcgaW50byBpdHMgZGVmaW5pdGlvbi4gVGhlIG1vc3QgbGlrZWx5IHBsYWNlIGZvciBhIGNvcmUgbmV0d29yayBmdW5jdGlvbiBsaWtlIHRoaXMgaXMgYG5ldC9jb3JlL2Rldi5jYC4gSSYjMzk7bGwgZ28gY2hlY2sgdGhhdCBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBpdCwgaW4gdGhlIHNvdXJjZS4gU29tZXRoaW5nIGlzIHdyb25nIHdpdGggdGhlIHdheSBpdCYjMzk7cyBiZWluZyBsaW5rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NDI5Nj1zdGF0aWMgaW5saW5lIHZvaWQgZGV2X2NvbnN1bWVfc2tiX2FueShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDMwMC1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NDMwMTp1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00MzAyLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NTAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWERQIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGJlaW5nIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhgIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgKmNyaXRpY2FsKiBuZXR3b3JraW5nIGZ1bmN0aW9uLCByaWdodCBhdCB0aGUgaGVhcnQgb2YgdGhpbmdzLiBUaGlzIG1lYW5zIGFueSBjaGFuZ2UgaGVyZSBkZW1hbmRzIHNlcmlvdXMgc2NydXRpbnkuIFRoaXMgcGF0Y2gsIHNwZWNpZmljYWxseSwgYWRkcmVzc2VzIGFuIGlzc3VlIHdoZXJlIGBza2ItJmd0O2xlbmAgaXNuJiMzOTt0IHByb3Blcmx5IHN5bmNlZCB1cCB3aXRoIGBza2ItJmd0O2RhdGFfbGVuYCBjaGFuZ2VzIHRoYXQgaGFwcGVuIGJlY2F1c2Ugb2YgWERQIGZyYWdtZW50IGhhbmRsaW5nLiBUaGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjb3JyZWN0aW9uIGFmZmVjdGluZyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYW5kLCBub3RhYmx5LCB0aGUgdmV0aCBkcml2ZXIuCgpHaXZlbiBpdHMgY29yZSBuYXR1cmUgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSwgY2FzY2FkaW5nIGNvbnNlcXVlbmNlcyBmcm9tIGEgbGVuZ3RoIG1pc21hdGNoIGluIGFuIFNLQiwgdGhpcyBzY3JlYW1zIGZvciBmdXp6aW5nLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBwYWNrZXQgcHJvY2Vzc2luZywgYW5kIHRob3NlIHR5cGVzIG9mIGJ1Z3MgY2FuIGxlYWQgdG8gYWxsIGtpbmRzIG9mIGhhdm9jLgoKTXkgaW1tZWRpYXRlIGZvY3VzIHBvaW50cyBhcmUsIGFzIHN0YXRlZCBpbiB0aGUgcGF0Y2ggZGVzY3JpcHRpb24sIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIG9mIGNvdXJzZSwgYXMgdGhlIGRpcmVjdGx5IGFmZmVjdGVkIGZ1bmN0aW9uLCBhbmQgYHZldGhfeGRwX3JjdmAgc2luY2UgYHZldGhfeGRwX3Jjdl9za2JgIGlzIHN0YXRpYywgd2UmIzM5O2xsIHdhbnQgdG8gZm9jdXMgb24gdGhpcyBmdW5jdGlvbi4gU2luY2UgdGhlIFZFVEggZHJpdmVyIGlzIGNhbGxlZCBvdXQsIHdlJiMzOTtsbCB3YW50IHRvIGVuc3VyZSB0aGF0IGl0IGhhcyBjb3JyZWN0IFhEUCBiZWhhdmlvdXIuCgpOb3csIGxldCBtZSBqdXN0IGNvbmZpcm0gbXkgc3VzcGljaW9ucyBhYm91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkgZXhwZWN0IHRvIGZpbmQgYFZFVEhgLCBuYXR1cmFsbHkuIEnigJlsbCBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYEJQRl9TWVNDQUxMYCBpcyBlbmFibGVkIOKAkyB3ZSBuZWVkIHRoYXQgdG8gZXZlbiAqdXNlKiBYRFAuIEFuZCwgb2YgY291cnNlLCB0aGUgZ2VuZXJhbCBuZXR3b3JraW5nIHN1cHBvcnQgZmxhZywgYE5FVGAsIG5lZWRzIHRvIGJlIHRoZXJlLiBUaW1lIHRvIGp1bXAgb3ZlciB0byBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgYW5kIHZlcmlmeSB0aGF0IHRoZSBgVkVUSGAgb3B0aW9uIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGFuZCBub3QgYWNjaWRlbnRhbGx5IGRpc2FibGVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIG91ciBlbnZpcm9ubWVudCBpcyBzZXR1cCBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZFVEgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9NDIxPWNvbmZpZyBUVU5fVk5FVF9DUk9TU19MRVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctNDM0LVxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MzU6Y29uZmlnIFZFVEhcbmRyaXZlcnMvbmV0L0tjb25maWctNDM2LVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBldGhlcm5ldCBwYWlyIGRldmljZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTQ1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgQ29uZmlndXJhdGlvbiBpbiBgbmV0L2NvcmUvZGV2LmNgKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBNeSBndXQgdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgc29tZSBudWFuY2VkIGNvbmZpZ3VyYXRpb24gaW5mbHVlbmNpbmcgdGhlIGJlaGF2aW9yIG9mIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0lzIHRoZXJlIGFueXRoaW5nIHNwZWNpZmljIGluIGBuZXQvY29yZS9kZXYuY2AgcmVsYXRlZCB0byBpdD8mIzM0OyBUaGlzIGlzIHRoZSBrZXJuZWwmIzM5O3MgY29yZSBuZXR3b3JrIGRldmljZSBjb2RlLCBzbyBpdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBJJiMzOTttIHByaW1hcmlseSBsb29raW5nIGZvciBhbnkgY29uZGl0aW9uYWwgbG9naWMsIGZsYWdzLCBvciBwYXJhbWV0ZXJzIHRoYXQgbWlnaHQgc3VidGx5IGFsdGVyIGhvdyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyBjYWxsZWQgb3Igd2hhdCBpdCBkb2VzIHVuZGVyIHRoZSBob29kLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBmb3IgWERQIHByb2dyYW1zLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBlbnZpcm9ubWVudCBpcyBjcml0aWNhbCBmb3IgZGVidWdnaW5nIG9yIG9wdGltaXppbmcuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLi4uIEkgc3VzcGVjdCB0aGVyZSBjb3VsZCBiZSBzb21lIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9NTQzNT1zdGF0aWMgc3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqbmV0aWZfZ2V0X3J4cXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9kZXYuYy01NDU3LVxubmV0L2NvcmUvZGV2LmM6NTQ1ODp1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxubmV0L2NvcmUvZGV2LmMtNTQ1OS1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2cpXG4tLVxubmV0L2NvcmUvZGV2LmM9NTU4OD1zdGF0aWMgdTMyIG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTU2MTUtXG5uZXQvY29yZS9kZXYuYzo1NjE2Olx0YWN0ID0gYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKCpwc2tiLCB4ZHAsIHhkcF9wcm9nKTtcbm5ldC9jb3JlL2Rldi5jLTU2MTctXHRzd2l0Y2ggKGFjdCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDg2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBDb25kaXRpb25hbCBDb21waWxhdGlvbioqCgpBbHJpZ2h0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgYWx3YXlzIHRvIHF1aWNrbHkgYXNzZXNzIGlmIHRoaXMgc2VjdGlvbiBvZiBjb2RlIGlzIHBvdGVudGlhbGx5IGdvdmVybmVkIGJ5IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBnb2luZyB0byBjaGVjayBmb3IgaXMgYW4gYCNpZmRlZmAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBzdXJyb3VuZGluZyB0aGUgcmVsZXZhbnQgY29kZS4gSXMgaXQgbmVzdGxlZCB3aXRoaW4gYW55IG9mIHRob3NlPyBUaGF0JiMzOTtzIGEgY3JpdGljYWwgZmlyc3QgZmlsdGVyLiBJdCBjb3VsZCBiZSB0aGF0IHRoaXMgYmVoYXZpb3IgaXMgb25seSBlbmFibGVkLCBvciBkaXNhYmxlZCwgZGVwZW5kaW5nIG9uIGEgcGFydGljdWxhciBidWlsZCBjb25maWd1cmF0aW9uLCB0YXJnZXQgcGxhdGZvcm0sIG9yIGZlYXR1cmUgZmxhZy4gVGhhdCBzaW5nbGUgY2hlY2sgY291bGQgZXhwbGFpbiBldmVyeXRoaW5nLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU0NTA6XHRcbjU0NTE6XHRcdFx0XHRyZXR1cm4gcnhxdWV1ZTsgLyogUmV0dXJuIGZpcnN0IHJ4cXVldWUgKi9cbjU0NTI6XHRcdFx0fVxuNTQ1MzpcdFx0XHRyeHF1ZXVlICYjNDM7PSBpbmRleDtcbjU0NTQ6XHRcdH1cbjU0NTU6XHRcdHJldHVybiByeHF1ZXVlO1xuNTQ1NjpcdH1cbjU0NTc6XHRcbjU0NTg6XHR1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuNTQ1OTpcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZylcbjU0NjA6XHR7XG41NDYxOlx0XHR2b2lkICpvcmlnX2RhdGEsICpvcmlnX2RhdGFfZW5kLCAqaGFyZF9zdGFydDtcbjU0NjI6XHRcdHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKnJ4cXVldWU7XG41NDYzOlx0XHRib29sIG9yaWdfYmNhc3QsIG9yaWdfaG9zdDtcbjU0NjQ6XHRcdHUzMiBtYWNfbGVuLCBmcmFtZV9zejtcbjU0NjU6XHRcdF9fYmUxNiBvcmlnX2V0aF90eXBlO1xuNTQ2NjpcdFx0c3RydWN0IGV0aGhkciAqZXRoO1xuNTQ2NzpcdFx0dTMyIG1ldGFsZW4sIGFjdDtcbjU0Njg6XHRcdGludCBvZmY7XG41NDY5Olx0XG41NDcwOlx0XHQvKiBUaGUgWERQIHByb2dyYW0gd2FudHMgdG8gc2VlIHRoZSBwYWNrZXQgc3RhcnRpbmcgYXQgdGhlIE1BQ1xuNTQ3MTpcdFx0ICogaGVhZGVyLlxuNTQ3MjpcdFx0ICovXG41NDczOlx0XHRtYWNfbGVuID0gc2tiLVx1MDAzZWRhdGEgLSBza2JfbWFjX2hlYWRlcihza2IpO1xuNTQ3NDpcdFx0aGFyZF9zdGFydCA9IHNrYi1cdTAwM2VkYXRhIC0gc2tiX2hlYWRyb29tKHNrYik7XG41NDc1Olx0XG41NDc2Olx0XHQvKiBTS0IgXCYjMzQ7aGVhZFwmIzM0OyBhcmVhIGFsd2F5cyBoYXZlIHRhaWxyb29tIGZvciBza2Jfc2hhcmVkX2luZm8gKi9cbjU0Nzc6XHRcdGZyYW1lX3N6ID0gKHZvaWQgKilza2JfZW5kX3BvaW50ZXIoc2tiKSAtIGhhcmRfc3RhcnQ7XG41NDc4Olx0XHRmcmFtZV9zeiAmIzQzOz0gU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKTtcbjU0Nzk6XHRcbjU0ODA6XHRcdHJ4cXVldWUgPSBuZXRpZl9nZXRfcnhxdWV1ZShza2IpO1xuNTQ4MTpcdFx0eGRwX2luaXRfYnVmZih4ZHAsIGZyYW1lX3N6LCBcdTAwMjZyeHF1ZXVlLVx1MDAzZXhkcF9yeHEpO1xuNTQ4MjpcdFx0eGRwX3ByZXBhcmVfYnVmZih4ZHAsIGhhcmRfc3RhcnQsIHNrYl9oZWFkcm9vbShza2IpIC0gbWFjX2xlbixcbjU0ODM6XHRcdFx0XHQgc2tiX2hlYWRsZW4oc2tiKSAmIzQzOyBtYWNfbGVuLCB0cnVlKTtcbjU0ODQ6XHRcdGlmIChza2JfaXNfbm9ubGluZWFyKHNrYikpIHtcbjU0ODU6XHRcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZXhkcF9mcmFnc19zaXplID0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuNTQ4NjpcdFx0XHR4ZHBfYnVmZl9zZXRfZnJhZ3NfZmxhZyh4ZHApO1xuNTQ4NzpcdFx0fSBlbHNlIHtcbjU0ODg6XHRcdFx0eGRwX2J1ZmZfY2xlYXJfZnJhZ3NfZmxhZyh4ZHApO1xuNTQ4OTpcdFx0fVxuNTQ5MDpcdFxuNTQ5MTpcdFx0b3JpZ19kYXRhX2VuZCA9IHhkcC1cdTAwM2VkYXRhX2VuZDtcbjU0OTI6XHRcdG9yaWdfZGF0YSA9IHhkcC1cdTAwM2VkYXRhO1xuNTQ5MzpcdFx0ZXRoID0gKHN0cnVjdCBldGhoZHIgKil4ZHAtXHUwMDNlZGF0YTtcbjU0OTQ6XHRcdG9yaWdfaG9zdCA9IGV0aGVyX2FkZHJfZXF1YWxfNjRiaXRzKGV0aC1cdTAwM2VoX2Rlc3QsIHNrYi1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuNTQ5NTpcdFx0b3JpZ19iY2FzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyXzY0Yml0cyhldGgtXHUwMDNlaF9kZXN0KTtcbjU0OTY6XHRcdG9yaWdfZXRoX3R5cGUgPSBldGgtXHUwMDNlaF9wcm90bztcbjU0OTc6XHRcbjU0OTg6XHRcdGFjdCA9IGJwZl9wcm9nX3J1bl94ZHAoeGRwX3Byb2csIHhkcCk7XG41NDk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNjIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBDb25kaXRpb25hbCBDb21waWxhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoeSB0aGlzIGNvZGUgaXNuJiMzOTt0IGJlaW5nIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkuIEZpcnN0LCBJIGNoZWNrZWQgYG5ldC9jb3JlL2Rldi5jYCBhbmQgZGlkbiYjMzk7dCBzZWUgYW55IGAjaWZkZWZgIGRpcmVjdGl2ZXMgdGhhdCBtaWdodCBiZSBpbXBhY3RpbmcgaXQgdGhlcmUuIEhtbS4gVGhlbiBJIHJlbWVtYmVyZWQgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAuIElzIHRoYXQgcGFydCBvZiBpdD8gVGhlIHRoaW5nIGlzLCBpdCYjMzk7cyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHkgYXMgbG9uZyBhcyBgQ09ORklHX05FVGAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgcHJldHR5IGJyb2FkLiBUaGF0IGRvZXNuJiMzOTt0IHNlZW0gdG8gbmFycm93IGl0IGRvd24gZW5vdWdoLiBMZXQmIzM5O3Mgc2VlLi4uIFdhaXQgYSBzZWNvbmQsIHRoZSBgYnBmX3Byb2dfcnVuX3hkcGAgZnVuY3Rpb24gaXRzZWxmIGlzIGFjdHVhbGx5IGRlZmluZWQgaW4gYW4gaW5jbHVkZSBmaWxlLiBJdCYjMzk7cyBpbiBzb21ldGhpbmcgbGlrZSBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAuIE9rYXksIHNvIHdoZXJlIHRoYXQgaXMgZGVmaW5lZCBpc24mIzM5O3QgdGhlIHByb2JsZW0uIExldCYjMzk7cyBwaXZvdCBhbmQgbG9vayBhdCB0aGUgYFZFVEhgIGRlcGVuZGVuY2llcyB0byBzZWUgaWYgc29tZXRoaW5nIHRoZXJlIGlzIGJsb2NraW5nIGl0LiBUaGF0IHNlZW1zIGxpa2UgYSBtb3JlIHByb21pc2luZyBhdmVudWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTQyMT1jb25maWcgVFVOX1ZORVRfQ1JPU1NfTEVcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNC1cbmRyaXZlcnMvbmV0L0tjb25maWc6NDM1OmNvbmZpZyBWRVRIXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNi1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgZXRoZXJuZXQgcGFpciBkZXZpY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU3NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgTmV0IERyaXZlcnMgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gc29tZXRoaW5nIG5ldHdvcmstcmVsYXRlZCwgYW5kIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIHBhcnRpY3VsYXIgc2V0IG9mIGRyaXZlcnMsIHNvIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gYGRyaXZlcnMvbmV0L0tjb25maWdgLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBpdHMgbmV0d29yayBmZWF0dXJlcywgYW5kIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBLY29uZmlnIGZpbGVzIGFyZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFzcGVjdHMuIExpbmUgNDM1Li4uIHRoYXQmIzM5O3MgcHJvYmFibHkgd2hlcmUgYSBzcGVjaWZpYyBzZXQgb2Ygb3B0aW9ucyBvciBhIHJlbGV2YW50IG1lbnUgZW50cnkgcmVsYXRlZCB0byB0aGUgZHJpdmVycyBJJiMzOTttIGludGVyZXN0ZWQgaW4gc3RhcnRzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDMwOlx0XHQgIGFuZCBUVU5HRVRWTkVUQkUgaW9jdGxzLlxuIDQzMTpcdFxuIDQzMjpcdFx0ICBVbmxlc3MgeW91IGhhdmUgYSBsaXR0bGUtZW5kaWFuIHN5c3RlbSBob3N0aW5nIGEgYmlnLWVuZGlhbiB2aXJ0dWFsXG4gNDMzOlx0XHQgIG1hY2hpbmUgd2l0aCBhIGxlZ2FjeSB2aXJ0aW8gTklDLCB5b3Ugc2hvdWxkIHNheSBOLlxuIDQzNDpcdFxuIDQzNTpcdGNvbmZpZyBWRVRIXG4gNDM2Olx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIGV0aGVybmV0IHBhaXIgZGV2aWNlXCYjMzQ7XG4gNDM3Olx0XHRzZWxlY3QgUEFHRV9QT09MXG4gNDM4Olx0XHRoZWxwXG4gNDM5Olx0XHQgIFRoaXMgZGV2aWNlIGlzIGEgbG9jYWwgZXRoZXJuZXQgdHVubmVsLiBEZXZpY2VzIGFyZSBjcmVhdGVkIGluIHBhaXJzLlxuIDQ0MDpcdFx0ICBXaGVuIG9uZSBlbmQgcmVjZWl2ZXMgdGhlIHBhY2tldCBpdCBhcHBlYXJzIG9uIGl0cyBwYWlyIGFuZCB2aWNlXG4gNDQxOlx0XHQgIHZlcnNhLlxuIDQ0MjpcdFxuIDQ0MzpcdGNvbmZpZyBWSVJUSU9fTkVUXG4gNDQ0Olx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0aW8gbmV0d29yayBkcml2ZXJcJiMzNDtcbiA0NDU6XHRcdGRlcGVuZHMgb24gVklSVElPXG4gNDQ2Olx0XHRzZWxlY3QgTkVUX0ZBSUxPVkVSXG4gNDQ3Olx0XHRzZWxlY3QgRElNTElCXG4gNDQ4Olx0XHRzZWxlY3QgUEFHRV9QT09MXG4gNDQ5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFZFVEggWERQIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgYFZFVEhgIHBhdGNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IG5vIGhpZGRlbiBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2Qgc3RhcnQuIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGlzIHRvIGB2ZXRoX3hkcF9yY3Zfc2tiYCwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgY2FsbGVkIGJ5IGB2ZXRoX3hkcF9yY3ZgLiBOYXR1cmFsbHksIGB2ZXRoX3hkcF9yY3ZgIGhhbmRsZXMgdGhlIHByb2Nlc3Npbmcgb2YgWERQIHBhY2tldHMgc3BlY2lmaWNhbGx5IG9uIHRoZSB2ZXRoIGludGVyZmFjZS4gSXQgYWxsIHNlZW1zIGxvZ2ljYWwgc28gZmFyLiBUaGUga2V5IGZ1bmN0aW9uIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGlzIGFsc28gaW4gdGhlIG1peCwgYXMgZXhwZWN0ZWQsIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBydW5uaW5nIGdlbmVyaWMgWERQIHByb2dyYW1zIG9uIGFueSBuZXR3b3JrIGRldmljZS4KCkVzc2VudGlhbGx5LCB0aGVzZSBhcmUgZnVuY3Rpb25hbCBpbXByb3ZlbWVudHMgdGhhdCBhZGRyZXNzIGFuIGlzc3VlIHJlbGF0ZWQgdG8gYHNrYi0mZ3Q7bGVuYCB3aGVuIGBza2ItJmd0O2RhdGFfbGVuYCBnZXRzIG1vZGlmaWVkIGJlY2F1c2Ugb2YgWERQIGZyYWdtZW50cy4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGFuIGVkZ2UgY2FzZSBvciBwb3RlbnRpYWwgc291cmNlIG9mIGluY29ycmVjdCBwYWNrZXQgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiBmcmFnbWVudGVkIFhEUCBzY2VuYXJpb3MuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBpZiBgdmV0aF94ZHBfcmN2YCBpcyBzdGF0aWMuIFRoYXQgd291bGQgYmUgdXNlZnVsIGluZm9ybWF0aW9uIHRvIGhhdmUgZm9yIGNvbXBsZXRlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZldGhfeGRwX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3ZldGguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92ZXRoLmM9NjIyPXN0YXRpYyBpbnQgdmV0aF94ZHBfdHgoc3RydWN0IHZldGhfcnEgKnJxLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtNjM3LVxuZHJpdmVycy9uZXQvdmV0aC5jOjYzODpzdGF0aWMgc3RydWN0IHhkcF9mcmFtZSAqdmV0aF94ZHBfcmN2X29uZShzdHJ1Y3QgdmV0aF9ycSAqcnEsXG5kcml2ZXJzL25ldC92ZXRoLmMtNjM5LVx0XHRcdFx0XHQgIHN0cnVjdCB4ZHBfZnJhbWUgKmZyYW1lLFxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy03MDgtLyogZnJhbWVzIGFycmF5IGNvbnRhaW5zIFZFVEhfWERQX0JBVENIIGF0IG1vc3QgKi9cbmRyaXZlcnMvbmV0L3ZldGguYzo3MDk6c3RhdGljIHZvaWQgdmV0aF94ZHBfcmN2X2J1bGtfc2tiKHN0cnVjdCB2ZXRoX3JxICpycSwgdm9pZCAqKmZyYW1lcyxcbmRyaXZlcnMvbmV0L3ZldGguYy03MTAtXHRcdFx0XHQgIGludCBuX3hkcGYsIHN0cnVjdCB2ZXRoX3hkcF90eF9icSAqYnEsXG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jPTc1MT1zdGF0aWMgaW50IHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmYoc3RydWN0IHZldGhfcnEgKnJxLFxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy03ODktXG5kcml2ZXJzL25ldC92ZXRoLmM6NzkwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmV0aF94ZHBfcmN2X3NrYihzdHJ1Y3QgdmV0aF9ycSAqcnEsXG5kcml2ZXJzL25ldC92ZXRoLmMtNzkxLVx0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy05MDItXG5kcml2ZXJzL25ldC92ZXRoLmM6OTAzOnN0YXRpYyBpbnQgdmV0aF94ZHBfcmN2KHN0cnVjdCB2ZXRoX3JxICpycSwgaW50IGJ1ZGdldCxcbmRyaXZlcnMvbmV0L3ZldGguYy05MDQtXHRcdFx0c3RydWN0IHZldGhfeGRwX3R4X2JxICpicSxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtOTIwLVx0XHRcdHN0YXRzLVx1MDAzZXhkcF9ieXRlcyAmIzQzOz0geGRwX2dldF9mcmFtZV9sZW4oZnJhbWUpO1xuZHJpdmVycy9uZXQvdmV0aC5jOjkyMTpcdFx0XHRmcmFtZSA9IHZldGhfeGRwX3Jjdl9vbmUocnEsIGZyYW1lLCBicSwgc3RhdHMpO1xuZHJpdmVycy9uZXQvdmV0aC5jLTkyMi1cdFx0XHRpZiAoZnJhbWUpIHtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtOTI1LVx0XHRcdFx0aWYgKG5feGRwZiA9PSBWRVRIX1hEUF9CQVRDSCkge1xuZHJpdmVycy9uZXQvdmV0aC5jOjkyNjpcdFx0XHRcdFx0dmV0aF94ZHBfcmN2X2J1bGtfc2tiKHJxLCB4ZHBmLCBuX3hkcGYsXG5kcml2ZXJzL25ldC92ZXRoLmMtOTI3LVx0XHRcdFx0XHRcdFx0ICAgICAgYnEsIHN0YXRzKTtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtOTM1LVx0XHRcdHN0YXRzLVx1MDAzZXhkcF9ieXRlcyAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbmRyaXZlcnMvbmV0L3ZldGguYzo5MzY6XHRcdFx0c2tiID0gdmV0aF94ZHBfcmN2X3NrYihycSwgc2tiLCBicSwgc3RhdHMpO1xuZHJpdmVycy9uZXQvdmV0aC5jLTkzNy1cdFx0XHRpZiAoc2tiKSB7XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTk0Ny1cdGlmIChuX3hkcGYpXG5kcml2ZXJzL25ldC92ZXRoLmM6OTQ4Olx0XHR2ZXRoX3hkcF9yY3ZfYnVsa19za2IocnEsIHhkcGYsIG5feGRwZiwgYnEsIHN0YXRzKTtcbmRyaXZlcnMvbmV0L3ZldGguYy05NDktXG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jPTk2MT1zdGF0aWMgaW50IHZldGhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTk4MC1cdHhkcF9zZXRfcmV0dXJuX2ZyYW1lX25vX2RpcmVjdCgpO1xuZHJpdmVycy9uZXQvdmV0aC5jOjk4MTpcdGRvbmUgPSB2ZXRoX3hkcF9yY3YocnEsIGJ1ZGdldCwgXHUwMDI2YnEsIFx1MDAyNnN0YXRzKTtcbmRyaXZlcnMvbmV0L3ZldGguYy05ODItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzOTAKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWx2aW5nIGludG8gdGhlIFZldGggRHJpdmVyJiMzOTtzIFN0cnVjdHVyZSoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHZldGggZHJpdmVyIGNvZGUsIHNwZWNpZmljYWxseSBhdCBob3cgaXQgaGFuZGxlcyBYRFAgcmVjZWl2ZS4gSSYjMzk7bSBub3RpY2luZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIEFsbCB0aGUgYHZldGhfeGRwX3JjdipgIGZ1bmN0aW9ucywgYWxsIHRoZSBvbmVzIGhhbmRsaW5nIHRoZSBYRFAgcmVjZWl2ZSBwYXRoLCBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQmIzM5O3MgYSBjb21tb24gcHJhY3RpY2UgZm9yIGludGVybmFsIGZ1bmN0aW9ucywgYnV0IGl0JiMzOTtzIGEgZGV0YWlsIHdvcnRoIG5vdGluZy4KCkFoLCBoZXJlJiMzOTtzIHRoZSBlbnRyeSBwb2ludDogYHZldGhfcG9sbGAuIFRoaXMgaXMgdGhlIE5BUEkgcG9sbCBmdW5jdGlvbiwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIGl0JiMzOTtzIHRoZSBnYXRld2F5IGZvciByZWNlaXZpbmcgcGFja2V0cy4KCldhaXQgYSBzZWNvbmQuLi4gYHZldGhfcG9sbGAgaXMgYWxzbyBkZWNsYXJlZCBhcyBgc3RhdGljYCEgVGhhdCYjMzk7cyB1bmV4cGVjdGVkLiBTbywgaXQmIzM5O3MgcmVnaXN0ZXJlZCBhcyB0aGUgTkFQSSBwb2xsIGZ1bmN0aW9uLCB5ZXQgaXQmIzM5O3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgYHZldGguY2AgZmlsZS4gVGhpcyBzdWdnZXN0cyBhIHZlcnkgbG9jYWxpemVkIGFyY2hpdGVjdHVyZSwgd2hlcmUgdGhlIHZldGggZHJpdmVyIHRpZ2h0bHkgY29udHJvbHMgaXRzIG93biByZWNlaXZlIHBhdGguIEhtbSwgdGhhdCYjMzk7cyBub3Qgd2hhdCBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQsIGJ1dCBpdCBkb2VzIG1lYW4gdGhhdCB0aGlzIGZpbGUsIGFuZCB0aGVyZWZvcmUgdGhlIFZFVEggbW9kdWxlLCBpcyBtb3N0bHkgc2VsZiBjb250YWluZWQuCgpTbywgbm93IEkmIzM5O20gdGhpbmtpbmcsIGlzIHRoZXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb24gaW4gYHZldGguY2A/IE90aGVyIHRoYW4gdGhlIG9idmlvdXMgaW5pdGlhbGl6YXRpb24gYW5kIG1vZHVsZSBlbnRyeSBwb2ludHMsIHdoYXQgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBleHBvc2VkPyBUaGlzIGlzb2xhdGlvbiBpcyBpbnRyaWd1aW5nIGFuZCBzdWdnZXN0cyBhIHNwZWNpZmljIGRlc2lnbiBwaGlsb3NvcGh5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSogdmV0aF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92ZXRoLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdmV0aC5jLTQyLVxuZHJpdmVycy9uZXQvdmV0aC5jOjQzOnN0cnVjdCB2ZXRoX3N0YXRzIHtcbmRyaXZlcnMvbmV0L3ZldGguYy00NC1cdHU2NFx0cnhfZHJvcHM7XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTU1LVxuZHJpdmVycy9uZXQvdmV0aC5jOjU2OnN0cnVjdCB2ZXRoX3JxX3N0YXRzIHtcbmRyaXZlcnMvbmV0L3ZldGguYy01Ny1cdHN0cnVjdCB2ZXRoX3N0YXRzXHR2cztcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtNjAtXG5kcml2ZXJzL25ldC92ZXRoLmM6NjE6c3RydWN0IHZldGhfcnEge1xuZHJpdmVycy9uZXQvdmV0aC5jLTYyLVx0c3RydWN0IG5hcGlfc3RydWN0XHR4ZHBfbmFwaTtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtNzMtXG5kcml2ZXJzL25ldC92ZXRoLmM6NzQ6c3RydWN0IHZldGhfcHJpdiB7XG5kcml2ZXJzL25ldC92ZXRoLmMtNzUtXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdVx0KnBlZXI7XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTgxLVxuZHJpdmVycy9uZXQvdmV0aC5jOjgyOnN0cnVjdCB2ZXRoX3hkcF90eF9icSB7XG5kcml2ZXJzL25ldC92ZXRoLmMtODMtXHRzdHJ1Y3QgeGRwX2ZyYW1lICpxW1ZFVEhfWERQX1RYX0JVTEtfU0laRV07XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTkwLVxuZHJpdmVycy9uZXQvdmV0aC5jOjkxOnN0cnVjdCB2ZXRoX3Ffc3RhdF9kZXNjIHtcbmRyaXZlcnMvbmV0L3ZldGguYy05Mi1cdGNoYXJcdGRlc2NbRVRIX0dTVFJJTkdfTEVOXTtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9MTE3PXN0YXRpYyBzdHJ1Y3Qge1xuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy0xMjItXG5kcml2ZXJzL25ldC92ZXRoLmM6MTIzOnN0cnVjdCB2ZXRoX3hkcF9idWZmIHtcbmRyaXZlcnMvbmV0L3ZldGguYy0xMjQtXHRzdHJ1Y3QgeGRwX2J1ZmYgeGRwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI3MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlJldmlzZWQgUmVnZXggQ29uc2lkZXJhdGlvbnMqKgoKSG1tLCBJIHRoaW5rIEkganVtcGVkIHRoZSBndW4gdGhlcmUgd2l0aCB0aGF0IGluaXRpYWwgcmVnZXguIE9uIHNlY29uZCB0aG91Z2h0LCB0aGF0JiMzOTtzIHByb2JhYmx5IHRvbyBicm9hZC4gSSBuZWVkIHNvbWV0aGluZyBtb3JlIHRhcmdldGVkIGZvciB0aG9zZSBgdmV0aF9gIGZ1bmN0aW9uIG5hbWVzLiBPa2F5LCBzbyBJIHNob3VsZCByZWZpbmUgaXQuIExldCYjMzk7cyB0cnkgdG8gZm9jdXMgb24gdGhlIGxpa2VseSByZXR1cm4gdHlwZXMgSSYjMzk7ZCBzZWUgaW4gdGhpcyBjb250ZXh0LiBSYXRoZXIgdGhhbiBtYXRjaGluZyBhbnl0aGluZywgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzdHJpY3RlciBhcHByb2FjaC4gSSYjMzk7bSB0aGlua2luZyBzb21ldGhpbmcgdGhhdCBzcGVjaWZpY2FsbHkgbG9va3MgZm9yIGVpdGhlciBgaW50IHZldGhfYCBvciBgdm9pZCB2ZXRoX2AgYXMgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLiBUaGF0IHNob3VsZCBuYXJyb3cgaXQgZG93biBjb25zaWRlcmFibHkgYW5kIGdpdmUgbWUgYSBjbGVhbmVyLCBtb3JlIGZvY3VzZWQgc2V0IG9mIHJlc3VsdHMuIExldCYjMzk7cyBzZWUgaWYgdGhvc2UgZXhwcmVzc2lvbnMsIGBeaW50IHZldGhfYCBvciBgXnZvaWQgdmV0aF9gLCB3b3JrIGFzIGV4cGVjdGVkIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LiBJJiMzOTtsbCBuZWVkIHRvIHRlc3QgYW5kIHZhbGlkYXRlIHRoZW0gdGhvcm91Z2hseSwgb2YgY291cnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHZvaWR8c3RydWN0IHNrX2J1ZmYgXFwqKSB2ZXRoXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3ZldGguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTU1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVmV0aCBEcml2ZXIgZm9yIEJQRiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBiYXNlZCBvbiB3aGF0IEkmIzM5O20gc2VlaW5nLCB0aG9zZSBgdmV0aF8uLi5gIGZ1bmN0aW9ucyBhcmUgKmxpa2VseSogZGVjbGFyZWQgYXMgYHN0YXRpYyBpbnRgIHdpdGhpbiB0aGUgVmV0aCBkcml2ZXIuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBhcyB0aGUgY29yZSBzeW1ib2wgdG8gbG9vayBhdCwgYXMgaXQmIzM5O3MgYSBrbm93biBCUEYgZW50cnkgcG9pbnQuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgVmV0aCBkcml2ZXIgaW50ZXJmYWNlcyB3aXRoIHRoYXQuIFBlcmhhcHMgYHZldGhfeG1pdGAgb3IgYHZldGhfcG9sbGAgYXJlIHBvdGVudGlhbCBob29rcyBpZiB0aGV5JiMzOTtyZSBleHBvcnRlZCBvciB3ZXJlbiYjMzk7dCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gRGFtbiwgbG9va3MgbGlrZSBgdmV0aF94bWl0YCBpcyAqYWxzbyogc3RhdGljLiBJIGtuZXcgdGhhdCBzZWVtZWQgdG9vIGVhc3kuIFRoYXQmIzM5O3MgYSBiaXQgb2YgYSByb2FkYmxvY2suIEFoLCByaWdodCwgaXQmIzM5O3MgcmVnaXN0ZXJlZCBpbiBgbmV0X2RldmljZV9vcHNgLCB0aGF0JiMzOTtzIHRoZSBrZXkuIE9rYXksIEkgbmVlZCB0byBjaGVjayB0aGUgYG5ldF9kZXZpY2Vfb3BzYCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgd2l0aGluIGB2ZXRoLmNgIHRvIHNlZSBob3cgdGhvc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXRpbGl6ZWQgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSB3YXkgdG8gaW50ZXJhY3Qgd2l0aCB0aGVtIHZpYSBCUEYgaG9va3MuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZldGhfbmV0ZGV2X29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3ZldGguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92ZXRoLmM9MTY4Nz1zdGF0aWMgaW50IHZldGhfeGRwX3J4X3ZsYW5fdGFnKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKmN0eCwgX19iZTE2ICp2bGFuX3Byb3RvLFxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy0xNzA0LVxuZHJpdmVycy9uZXQvdmV0aC5jOjE3MDU6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2ZXRoX25ldGRldl9vcHMgPSB7XG5kcml2ZXJzL25ldC92ZXRoLmMtMTcwNi1cdC5uZG9faW5pdCAgICAgICAgICAgID0gdmV0aF9kZXZfaW5pdCxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9MTczOD1zdGF0aWMgdm9pZCB2ZXRoX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTE3NDgtXG5kcml2ZXJzL25ldC92ZXRoLmM6MTc0OTpcdGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2dmV0aF9uZXRkZXZfb3BzO1xuZHJpdmVycy9uZXQvdmV0aC5jLTE3NTAtXHRkZXYtXHUwMDNleGRwX21ldGFkYXRhX29wcyA9IFx1MDAyNnZldGhfeGRwX21ldGFkYXRhX29wcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYHZldGhfbmV0ZGV2X29wc2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhlc2UgdmlydHVhbCBFdGhlcm5ldCBpbnRlcmZhY2VzLCBzcGVjaWZpY2FsbHksIHRoZSBiZWhhdmlvciBkZWZpbmVkIGJ5IGB2ZXRoX25ldGRldl9vcHNgLiBJJiMzOTttIHN0YXJ0aW5nIGZyb20gc2NyYXRjaCBoZXJlLCBhbmQgSSB3YW50IHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFNvLCBteSBmaXJzdCB0aG91Z2h0IGlzLCB3aGF0ICpleGFjdGx5KiBhcmUgdGhlIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdHJ1Y3R1cmU/IEtub3dpbmcgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiBgdmV0aF9uZXRkZXZfb3BzYCB3aWxsIGdpdmUgbWUgYSBjbGVhciBvdmVydmlldyBvZiBob3cgdGhlIHZpcnR1YWwgRXRoZXJuZXQgZGV2aWNlIGJlaGF2ZXMuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUga2V5IG9wZXJhdGlvbnMgYW5kIGVudHJ5IHBvaW50cy4gSSBuZWVkIHRvIGtub3cgdGhlIG1ldGhvZHMgcmVsYXRlZCB0byB0aGluZ3MgbGlrZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24sIGNvbmZpZ3VyYXRpb24sIGFuZCBzdGF0ZSBjaGFuZ2VzLiBHZXR0aW5nIGEgbGlzdCBvZiB0aG9zZSBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIHRoZSBidWlsZGluZyBibG9ja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdmV0aC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzA1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2ZXRoX25ldGRldl9vcHMgPSB7XG4xNzA2Olx0XHQubmRvX2luaXQgICAgICAgICAgICA9IHZldGhfZGV2X2luaXQsXG4xNzA3Olx0XHQubmRvX29wZW4gICAgICAgICAgICA9IHZldGhfb3BlbixcbjE3MDg6XHRcdC5uZG9fc3RvcCAgICAgICAgICAgID0gdmV0aF9jbG9zZSxcbjE3MDk6XHRcdC5uZG9fc3RhcnRfeG1pdCAgICAgID0gdmV0aF94bWl0LFxuMTcxMDpcdFx0Lm5kb19nZXRfc3RhdHM2NCAgICAgPSB2ZXRoX2dldF9zdGF0czY0LFxuMTcxMTpcdFx0Lm5kb19zZXRfcnhfbW9kZSAgICAgPSB2ZXRoX3NldF9tdWx0aWNhc3RfbGlzdCxcbjE3MTI6XHRcdC5uZG9fc2V0X21hY19hZGRyZXNzID0gZXRoX21hY19hZGRyLFxuMTcxMzpcdCNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxuMTcxNDpcdFx0Lm5kb19wb2xsX2NvbnRyb2xsZXJcdD0gdmV0aF9wb2xsX2NvbnRyb2xsZXIsXG4xNzE1Olx0I2VuZGlmXG4xNzE2Olx0XHQubmRvX2dldF9pZmxpbmtcdFx0PSB2ZXRoX2dldF9pZmxpbmssXG4xNzE3Olx0XHQubmRvX2ZpeF9mZWF0dXJlc1x0PSB2ZXRoX2ZpeF9mZWF0dXJlcyxcbjE3MTg6XHRcdC5uZG9fc2V0X2ZlYXR1cmVzXHQ9IHZldGhfc2V0X2ZlYXR1cmVzLFxuMTcxOTpcdFx0Lm5kb19mZWF0dXJlc19jaGVja1x0PSBwYXNzdGhydV9mZWF0dXJlc19jaGVjayxcbjE3MjA6XHRcdC5uZG9fc2V0X3J4X2hlYWRyb29tXHQ9IHZldGhfc2V0X3J4X2hlYWRyb29tLFxuMTcyMTpcdFx0Lm5kb19icGZcdFx0PSB2ZXRoX3hkcCxcbjE3MjI6XHRcdC5uZG9feGRwX3htaXRcdFx0PSB2ZXRoX25kb194ZHBfeG1pdCxcbjE3MjM6XHRcdC5uZG9fZ2V0X3BlZXJfZGV2XHQ9IHZldGhfcGVlcl9kZXYsXG4xNzI0Olx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NjgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgWERQIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdmV0aF94ZHBfcmN2YCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgYSBiaXQgb2YgYSByb2FkYmxvY2suIEkgY2FuJiMzOTt0IHVzZSBpdCBkaXJlY3RseSBhcyBhIGZvY3VzIHN5bWJvbCBpZiBJJiMzOTttIGFpbWluZyB0byBhdm9pZCBzdGF0aWMgZnVuY3Rpb25zLCBhcyBwZXIgYmVzdCBwcmFjdGljZS4gSG1tLCBob2xkIG9uLi4uIGB2ZXRoX3htaXRgIGlzIGFsc28gc3RhdGljLiBSaWdodCwgbmVlZCB0byB0aGluayBkaWZmZXJlbnRseS4KCkxldCYjMzk7cyBzZWUuLi4gd2hhdCBhYm91dCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYD8gQWgsIHRoYXQgb25lICppc24mIzM5O3QqIHN0YXRpYy4gSXQgc2VlbXMgdG8gYmUgZGVmaW5lZCBpbiBgbmV0L2NvcmUvZGV2LmNgIGFuZCBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAuIEdvb2QsIGdvb2QuIEJ1dCBpcyBpdCBleHBvcnRlZD8gR290dGEgdmVyaWZ5Li4uIE5vcGUsIG5vdCBkaXJlY3RseSBleHBvcnRlZC4gSG93ZXZlciwgaXQgKmlzKiBhIGdsb2JhbCBzeW1ib2wgd2l0aGluIGB2bWxpbnV4YCwgc28gaXQmIzM5O3MgYWNjZXNzaWJsZS4KCkNydWNpYWxseSwgYmVjYXVzZSBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyBub24tc3RhdGljLCBpdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBzeW1ib2wgYWRkcmVzcy4gVGhhdCYjMzk7cyBhIGtleSBwb2ludC4gTGV0IG1lIG5vdyBjaGVjayBgbmV0aWZfcmVjZWl2ZV9nZW5lcmljX3hkcGAgaW4gYG5ldC9jb3JlL2Rldi5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0aWZfcmVjZWl2ZV9nZW5lcmljX3hkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jPTU1NjM9bmV0aWZfc2tiX2NoZWNrX2Zvcl94ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTU4Ny1cbm5ldC9jb3JlL2Rldi5jOjU1ODg6c3RhdGljIHUzMiBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICoqcHNrYixcbm5ldC9jb3JlL2Rldi5jLTU1ODktXHRcdFx0XHQgICAgIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuLS1cbm5ldC9jb3JlL2Rldi5jPTU2Njg9aW50IGRvX3hkcF9nZW5lcmljKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2csIHN0cnVjdCBza19idWZmICoqcHNrYilcbi0tXG5uZXQvY29yZS9kZXYuYy01Njc3LVx0XHRicGZfbmV0X2N0eCA9IGJwZl9uZXRfY3R4X3NldChcdTAwMjZfX2JwZl9uZXRfY3R4KTtcbm5ldC9jb3JlL2Rldi5jOjU2Nzg6XHRcdGFjdCA9IG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAocHNrYiwgXHUwMDI2eGRwLCB4ZHBfcHJvZyk7XG5uZXQvY29yZS9kZXYuYy01Njc5LVx0XHRpZiAoYWN0ICE9IFhEUF9QQVNTKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjQ2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgbm9uLXN0YXRpYyBuYXR1cmUgb2YgYGRvX3hkcF9nZW5lcmljYCwgZnJhbWVkIGFzIGEgcHJvZmVzc2lvbmFsIGFzc2Vzc21lbnQ6CgoqKlRoZSBJbXBsaWNhdGlvbnMgb2YgYSBOb24tU3RhdGljIGBkb194ZHBfZ2VuZXJpY2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBkb194ZHBfZ2VuZXJpY2AgYW5kIGl0JiMzOTtzIGZsYWdnZWQgYXMgKm5vbi1zdGF0aWMqLiBUaGlzIGltbWVkaWF0ZWx5IHNldHMgb2ZmIGEgbWVudGFsIGNoZWNrbGlzdC4gQSBub24tc3RhdGljIGZ1bmN0aW9uLCBpbiB0aGlzIGNvbnRleHQsIGhhcyBwcmV0dHkgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zLiBJdCBtZWFucyB0aGlzIGZ1bmN0aW9uIGlzbiYjMzk7dCBsaW1pdGVkIHRvIHRoZSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0IGl0JiMzOTtzIGRlZmluZWQgaW4uIEl0JiMzOTtzIHBvdGVudGlhbGx5IGNhbGxhYmxlIGZyb20gb3V0c2lkZSBpdHMgb3JpZ2luYWwgc2NvcGUuIFRoaXMgdGVsbHMgbWUgYSBmZXcgdGhpbmdzLCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCYjMzk7cyBkZXNpZ24gY2hvaWNlczoKCkZpcnN0LCB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIGl0JiMzOTtzIHBhcnQgb2Ygc29tZSBraW5kIG9mIGV4dGVybmFsIEFQSSBvciBpbnRlcm5hbCBpbnRlcmZhY2UuIElzIGl0IGV4cG9zZWQgYXMgYSBtb2R1bGUgc3ltYm9sPyBJcyBpdCBjYWxsZWQgYnkgb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgb3IgZXZlbiB1c2VyLXNwYWNlIHRvb2xzPyBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyByZWZlcmVuY2VzIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nICp1c2VkKiBiZXlvbmQgaXRzIGRpcmVjdCBkZWZpbml0aW9uLiBUaGlzIG5vbi1zdGF0aWMgcHJvcGVydHkgaXMgYSBkZWxpYmVyYXRlIGRlc2lnbiBjaG9pY2UsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVhc29uLgoKU2Vjb25kLCBpZiBpdCYjMzk7cyBleHRlcm5hbCwgdGhpcyByYWlzZXMgcXVlc3Rpb25zIGFyb3VuZCBBUEkgc3RhYmlsaXR5IGFuZCBwb3RlbnRpYWwgQUJJIGJyZWFrYWdlLiBBbnkgY2hhbmdlcyB0byBgZG9feGRwX2dlbmVyaWNgIGNvdWxkIGhhdmUgcmlwcGxlIGVmZmVjdHMsIHNvIGl0JiMzOTtzIGEgZ29vZCBiZXQgdGhlIGtlcm5lbCBkZXZlbG9wZXJzIHB1dCBzYWZlZ3VhcmRzIGluIHBsYWNlIHRvIGVuc3VyZSBjaGFuZ2VzIGFyZSBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIGFueXRoaW5nIHRoYXQgbWF5IGNhbGwgdGhpcyBub24tc3RhdGljIGZ1bmN0aW9uLiBXZSBhcmUgdGFsa2luZyBhYm91dCB0aGUga2VybmVsIGhlcmUsIGFmdGVyIGFsbC4KClRoaXJkLCB0aGUgbm9uLXN0YXRpYyBuYXR1cmUgZG9lcyBvcGVuIHRoZSBkb29yIGZvciBtb3JlIGludHJpY2F0ZSBkZWJ1Z2dpbmcgYW5kIHRyYWNpbmcuIElmIEkmIzM5O20gdHJvdWJsZXNob290aW5nIGFuIFhEUCBpc3N1ZSwgSSBjYW4gcG90ZW50aWFsbHkgaG9vayBpbnRvIG9yIGluc3RydW1lbnQgYGRvX3hkcF9nZW5lcmljYCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIGlmIHRoZSB0cmFjaW5nIHRvb2xzIHN1cHBvcnQgdGhpcy4gSSBjb3VsZCBhbHNvIHRoZW9yZXRpY2FsbHkgY3JlYXRlIGEgY3VzdG9tIG1vZHVsZSB0aGF0IGNhbGxzIGludG8gaXQsIHdoaWNoIGNvdWxkIGJlIHVzZWZ1bCBmb3IgZXhwZXJpbWVudGF0aW9uIG9yIHRlc3RpbmcuCgpGaW5hbGx5LCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBpbnRvIGhvdyB0aGUgY29tcGlsZXIgaGFuZGxlcyB0aGlzLiBJZiBpdCYjMzk7cyBhIGNyaXRpY2FsLCBoaWdoLXBlcmZvcm1hbmNlIHBhdGgsIGlubGluaW5nIG1pZ2h0IGJlIGEgY29uY2Vybi4gQSBub24tc3RhdGljIGZ1bmN0aW9uIG1pZ2h0IG5vdCBiZSBpbmxpbmVkIGFzIGFnZ3Jlc3NpdmVseSwgd2hpY2ggY291bGQgaW1wYWN0IHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IGlmIGl0JiMzOTtzIGNhbGxlZCBmcmVxdWVudGx5LiBUaW1lIHRvIGxvb2sgYXQgdGhlIGdlbmVyYXRlZCBhc3NlbWJseSBhbmQgZXZhbHVhdGUgYW55IHBlcmZvcm1hbmNlIGltcGFjdCBkdWUgdG8gaXQgYmVpbmcgbm9uLXN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9feGRwX2dlbmVyaWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz01NjY2PXN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShnZW5lcmljX3hkcF9uZWVkZWRfa2V5KTtcbm5ldC9jb3JlL2Rldi5jLTU2NjctXG5uZXQvY29yZS9kZXYuYzo1NjY4OmludCBkb194ZHBfZ2VuZXJpYyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG5uZXQvY29yZS9kZXYuYy01NjY5LXtcbi0tXG5uZXQvY29yZS9kZXYuYy01NzAxLX1cbm5ldC9jb3JlL2Rldi5jOjU3MDI6RVhQT1JUX1NZTUJPTF9HUEwoZG9feGRwX2dlbmVyaWMpO1xubmV0L2NvcmUvZGV2LmMtNTcwMy1cbi0tXG5uZXQvY29yZS9kZXYuYz01OTg0PXN0YXRpYyBpbnQgX19uZXRpZl9yZWNlaXZlX3NrYl9jb3JlKHN0cnVjdCBza19idWZmICoqcHNrYiwgYm9vbCBwZm1lbWFsbG9jLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTYwMjMtXHRcdG1pZ3JhdGVfZGlzYWJsZSgpO1xubmV0L2NvcmUvZGV2LmM6NjAyNDpcdFx0cmV0MiA9IGRvX3hkcF9nZW5lcmljKHJjdV9kZXJlZmVyZW5jZShza2ItXHUwMDNlZGV2LVx1MDAzZXhkcF9wcm9nKSxcbm5ldC9jb3JlL2Rldi5jLTYwMjUtXHRcdFx0XHQgICAgICBcdTAwMjZza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ2MAoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCBoZXJlLgoKKipYRFAgRnVuY3Rpb25hbGl0eSBBbmFseXNpcyoqCgpSaWdodCwgc28gYGRvX3hkcF9nZW5lcmljYCBpcyBleHBvcnRlZCwgZmFudGFzdGljISBUaGF0IG1lYW5zIHdlIGNhbiB1c2UgaXQgYXMgYSBmb2N1cyBzeW1ib2wsIHdoaWNoIGdpdmVzIHVzIHNvbWUgZ29vZCBsZXZlcmFnZS4gQW5kIGxvb2sgYXQgdGhhdCwgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXNuJiMzOTt0IHN0YXRpYyBlaXRoZXIg4oCTIGJvbnVzISBXZSBjYW4gZGVmaW5pdGVseSBpbmNvcnBvcmF0ZSB0aGF0IGludG8gdGhlIGFuYWx5c2lzLiBOb3csIGZvciBgdmV0aGAuLi4gdGhlIGB2ZXRoX3hkcGAgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgYG5kb19icGZgIGNhbGxiYWNrLCBidXQgdW5mb3J0dW5hdGVseSwgaXQmIzM5O3Mgc3RhdGljLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgcm9hZGJsb2NrLiBOb3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHdvcmsgYXJvdW5kIHRoYXQsIG9yIGlmIGl0IG1lYW5zIHdlIG5lZWQgdG8gbG9vayBlbHNld2hlcmUgd2l0aGluIGB2ZXRoLmNgLiBJcyB0aGVyZSAqYW55dGhpbmcqIG5vbi1zdGF0aWMgaW4gdGhhdCBmaWxlIHRoYXQgd2UgbWlnaHQgYmUgYWJsZSB0byBleHBsb2l0PyBMZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rLi4uIEkgbmVlZCB0byBmaW5kIGFub3RoZXIgZW50cnkgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIHZldGhfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdmV0aC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3ZldGguYy00Mi1cbmRyaXZlcnMvbmV0L3ZldGguYzo0MzpzdHJ1Y3QgdmV0aF9zdGF0cyB7XG5kcml2ZXJzL25ldC92ZXRoLmMtNDQtXHR1NjRcdHJ4X2Ryb3BzO1xuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy01NS1cbmRyaXZlcnMvbmV0L3ZldGguYzo1NjpzdHJ1Y3QgdmV0aF9ycV9zdGF0cyB7XG5kcml2ZXJzL25ldC92ZXRoLmMtNTctXHRzdHJ1Y3QgdmV0aF9zdGF0c1x0dnM7XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTYwLVxuZHJpdmVycy9uZXQvdmV0aC5jOjYxOnN0cnVjdCB2ZXRoX3JxIHtcbmRyaXZlcnMvbmV0L3ZldGguYy02Mi1cdHN0cnVjdCBuYXBpX3N0cnVjdFx0eGRwX25hcGk7XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTczLVxuZHJpdmVycy9uZXQvdmV0aC5jOjc0OnN0cnVjdCB2ZXRoX3ByaXYge1xuZHJpdmVycy9uZXQvdmV0aC5jLTc1LVx0c3RydWN0IG5ldF9kZXZpY2UgX19yY3VcdCpwZWVyO1xuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy04MS1cbmRyaXZlcnMvbmV0L3ZldGguYzo4MjpzdHJ1Y3QgdmV0aF94ZHBfdHhfYnEge1xuZHJpdmVycy9uZXQvdmV0aC5jLTgzLVx0c3RydWN0IHhkcF9mcmFtZSAqcVtWRVRIX1hEUF9UWF9CVUxLX1NJWkVdO1xuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy05MC1cbmRyaXZlcnMvbmV0L3ZldGguYzo5MTpzdHJ1Y3QgdmV0aF9xX3N0YXRfZGVzYyB7XG5kcml2ZXJzL25ldC92ZXRoLmMtOTItXHRjaGFyXHRkZXNjW0VUSF9HU1RSSU5HX0xFTl07XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jPTExNz1zdGF0aWMgc3RydWN0IHtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtMTIyLVxuZHJpdmVycy9uZXQvdmV0aC5jOjEyMzpzdHJ1Y3QgdmV0aF94ZHBfYnVmZiB7XG5kcml2ZXJzL25ldC92ZXRoLmMtMTI0LVx0c3RydWN0IHhkcF9idWZmIHhkcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNjMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6CgoqKlJlZ2V4IFdvZXMgYW5kIGEgS2VybmVsIE1vZHVsZSBIdW50KioKCkJsYXN0IGl0ISBNeSByZWdleCBmdSBoYXMgZmFpbGVkIG1lIGFnYWluLiBJIHdhcyAqY2VydGFpbiogdGhhdCBgXmludCB2ZXRoX2Agb3IgYF52b2lkIHZldGhfYCB3b3VsZCB1bmVhcnRoIHRoZSBmdW5jdGlvbiBJJiMzOTttIGNoYXNpbmcsIGJ1dCB0aGF0IHJldHVybmVkICpub3RoaW5nKi4gQ2xlYXJseSwgSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZyBmdW5kYW1lbnRhbCBhYm91dCB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIG9yIGV4cG9ydCBzdHJ1Y3R1cmUgb2YgdGhpcyBgdmV0aGAgbW9kdWxlLiBSaWdodCwgdGltZSBmb3IgYSBtb3JlIGRpcmVjdCBhcHByb2FjaC4gTGV0JiMzOTtzIGZvcmdldCB0aGUgY2xldmVyIHBhdHRlcm5zIGZvciBhIG1vbWVudCBhbmQgZ28gc3RyYWlnaHQgZm9yIHRoZSBiaWcgZ3Vucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZXhwb3NlZCB0byB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBNeSBiZXN0IGJldCBpcyB0byBzZWFyY2ggZm9yIGBFWFBPUlRfU1lNQk9MYCBkaXJlY3RseSB3aXRoaW4gdGhlIGB2ZXRoLmNgIHNvdXJjZSBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBzZWNyZXRzIHdpbGwgYmUuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92ZXRoLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU0NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHZldGguY2AgTW9kdWxlIGFuZCBYRFAgRnJhZ21lbnQgSGFuZGxpbmcgQnVnKioKCkFscmlnaHQsIHNvIGB2ZXRoLmNgIGlzIGEgbW9kdWxlLCBtZWFuaW5nIHRoZSBsYWNrIG9mIGV4cG9ydGVkIHN5bWJvbHMgaXMgZXhwZWN0ZWQuIFRoYXQgbWVhbnMgbW9zdCwgaWYgbm90IGFsbCwgb2YgdGhlIGZ1bmN0aW9ucyB3aXRoaW4gaXQgYXJlIGxpa2VseSBkZWNsYXJlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIGdvb2QgZm9yIGFuYWx5c2lzLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbi4gSXQgbG9va3MgbGlrZSBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBhbmQgYGRvX3hkcF9nZW5lcmljYCBhcmUgZ29vZCBjYW5kaWRhdGVzLiBXYWl0IGEgbW9tZW50LCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyAqbm90KiBzdGF0aWMsIHNvIHRoYXQmIzM5O3MgYWN0dWFsbHkgYW4gaWRlYWwgZm9jYWwgcG9pbnQuCgpOb3csIGFzIEkgdW5kZXJzdGFuZCBpdCwgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYW4gWERQIGZyYWdtZW50IGhhbmRsaW5nIGJ1Zy4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGBza2ItJmd0O2xlbmAgbm90IGJlaW5nIHByb3Blcmx5IHVwZGF0ZWQgd2hlbiBgc2tiLSZndDtkYXRhX2xlbmAgY2hhbmdlcy4gU291bmRzIGxpa2UgYSBjbGFzc2ljIGZ1bmN0aW9uYWwgZGVmZWN0IHRvIG1lLgoKQXMgZm9yIGNvbmZpZ3VyYXRpb25zLCBJJiMzOTtsbCBuZWVkIGBWRVRIYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBORVRgIHRvIGJlIGVuYWJsZWQgdG8gZWZmZWN0aXZlbHkgd29yayB0aHJvdWdoIHRoaXMuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGVuYWJsaW5nIGNvbmZpZyBmb3IgWERQLiBBaCwgeWVzLCBYRFAgaXMgZW5hYmxlZCBieSBgQlBGX1NZU0NBTExgICphbmQqIGBORVRgLiBKdXN0IHdhbnQgdG8gYmUgZXh0cmEgdGhvcm91Z2ggaGVyZS4gVGltZSB0byBjaGVjayBgbmV0L2NvcmUvZGV2LmNgIGZvciBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCB0byBnZXQgc29tZSBjb250ZXh0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jPTU0MzU9c3RhdGljIHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKm5ldGlmX2dldF9yeHF1ZXVlKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTQ1Ny1cbm5ldC9jb3JlL2Rldi5jOjU0NTg6dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbm5ldC9jb3JlL2Rldi5jLTU0NTktXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKVxuLS1cbm5ldC9jb3JlL2Rldi5jPTU1ODg9c3RhdGljIHUzMiBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICoqcHNrYixcbi0tXG5uZXQvY29yZS9kZXYuYy01NjE1LVxubmV0L2NvcmUvZGV2LmM6NTYxNjpcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCgqcHNrYiwgeGRwLCB4ZHBfcHJvZyk7XG5uZXQvY29yZS9kZXYuYy01NjE3LVx0c3dpdGNoIChhY3QpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzODAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFhEUCBQcm9ncmFtIEV4ZWN1dGlvbiBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBYRFAgcHJvZ3JhbXMgYXJlIGFjdHVhbGx5IGV4ZWN1dGVkLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGNvbmZpcm0gd2hldGhlciBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyBhbHdheXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBBIHF1aWNrIGNoZWNrIG9mIGBuZXQvY29yZS9kZXYuY2AgY29uZmlybXMgdGhpcyDigJMgdGhlcmUmIzM5O3Mgbm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAsIHNvIGl0JiMzOTtzIGFsd2F5cyBwcmVzZW50LgoKTm93LCBhIHJlbGF0ZWQgZnVuY3Rpb24sIGBicGZfcHJvZ19ydW5feGRwYCBpcyBjYWxsZWQgKndpdGhpbiogYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAuIFRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZmxvdy4KCk15IG5leHQgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBgYnBmX3Byb2dfcnVuX3hkcGAgaXMgKmFsc28qIHVuY29uZGl0aW9uYWxseSBkZWZpbmVkLiBJIG5lZWQgdG8gZXN0YWJsaXNoIGlmIHRoaXMgaXMgYSBwYXRoIHRoYXQmIzM5O3MgYWx3YXlzIGF2YWlsYWJsZSwgb3IgaWYgaXRzIHVzZSBpcyBzb21laG93IGNvbnRpbmdlbnQgb24gb3RoZXIga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBUaGF0IHdpbGwgYmUgdGhlIG5leHQgdGhpbmcgdG8gaW52ZXN0aWdhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Byb2dfcnVuX3hkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTcyOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIGVCUEYgRnVuY3Rpb24gQ2FsbHMgd2l0aGluIHRoZSBLZXJuZWwgSW5jbHVkZSBGaWxlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvciBkZWNsYXJhdGlvbiBvZiB0aGUgYGJwZl9wcm9nX3J1bl94ZHBgIGZ1bmN0aW9uLiBTaW5jZSBJJiMzOTttIHdvcmtpbmcgd2l0aCB0aGUga2VybmVsLCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGxvb2sgaW4gdGhlIGBpbmNsdWRlL2xpbnV4L2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyB0aG9zZSBoZWFkZXIgZmlsZXMgYXJlIHdoZXJlIGEgbG90IG9mIHRoZSBjb3JlIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMsIGZ1bmN0aW9uIHByb3RvdHlwZXMsIGFuZCBkZWZpbml0aW9ucyByZWxldmFudCB0byBteSB3b3JrIHNob3VsZCBiZSBmb3VuZC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IGl0IHdpbGwgYmUgZGVmaW5lZCB0aGVyZSwgYW5kIGlmIG5vdCwgdGhlIGhlYWRlciBmaWxlcyBzaG91bGQgbGVhZCBtZSBvbiBhIHBhdGggdG8gaXRzIGRlZmluaXRpb24uIFRoaXMgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LCBJIHRoaW5rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9wcm9nX3J1bl94ZHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTUxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIFhEUCBQcm9ncmFtIEV4ZWN1dGlvbiBQYXRoKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGV4YWN0IGZ1bmN0aW9uIGNhbGxlZCB0byBydW4gYW4gWERQIHByb2dyYW0uIEhtbSwgSSBzZWVtIHRvIHJlY2FsbCBpdCBiZWluZyBzb21ldGhpbmcgbGlrZS4uLiAqYnBmX3Byb2dfcnVuX3hkcCouIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdC4gWWVzLCB0aGF0IHJpbmdzIGEgYmVsbCwgSSB0aGluayBJJiMzOTt2ZSBzZWVuIGl0IGluIGBuZXQvY29yZS9kZXYuY2AuIE9rYXksIGJlc3QgdG8gZ28gYmFjayBhbmQgdGFrZSBhIGxvb2sgYXQgYG5ldC9jb3JlL2Rldi5jYCBhZ2Fpbi4gSSYjMzk7bGwgZm9jdXMgb24gdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgZGV0YWlscyBlbWVyZ2UuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJlc3Rpbmcgc3VidGxldGllcyB0aGF0IEkgbmVlZCB0byBiZSBzdXJlIEkgaGF2ZW4mIzM5O3QgZm9yZ290dGVuIGFib3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQ5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1NDkwOlx0XG41NDkxOlx0XHRvcmlnX2RhdGFfZW5kID0geGRwLVx1MDAzZWRhdGFfZW5kO1xuNTQ5MjpcdFx0b3JpZ19kYXRhID0geGRwLVx1MDAzZWRhdGE7XG41NDkzOlx0XHRldGggPSAoc3RydWN0IGV0aGhkciAqKXhkcC1cdTAwM2VkYXRhO1xuNTQ5NDpcdFx0b3JpZ19ob3N0ID0gZXRoZXJfYWRkcl9lcXVhbF82NGJpdHMoZXRoLVx1MDAzZWhfZGVzdCwgc2tiLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG41NDk1Olx0XHRvcmlnX2JjYXN0ID0gaXNfbXVsdGljYXN0X2V0aGVyX2FkZHJfNjRiaXRzKGV0aC1cdTAwM2VoX2Rlc3QpO1xuNTQ5NjpcdFx0b3JpZ19ldGhfdHlwZSA9IGV0aC1cdTAwM2VoX3Byb3RvO1xuNTQ5NzpcdFxuNTQ5ODpcdFx0YWN0ID0gYnBmX3Byb2dfcnVuX3hkcCh4ZHBfcHJvZywgeGRwKTtcbjU0OTk6XHRcbjU1MDA6XHRcdC8qIGNoZWNrIGlmIGJwZl94ZHBfYWRqdXN0X2hlYWQgd2FzIHVzZWQgKi9cbjU1MDE6XHRcdG9mZiA9IHhkcC1cdTAwM2VkYXRhIC0gb3JpZ19kYXRhO1xuNTUwMjpcdFx0aWYgKG9mZikge1xuNTUwMzpcdFx0XHRpZiAob2ZmIFx1MDAzZSAwKVxuNTUwNDpcdFx0XHRcdF9fc2tiX3B1bGwoc2tiLCBvZmYpO1xuNTUwNTpcdFx0XHRlbHNlIGlmIChvZmYgXHUwMDNjIDApXG41NTA2Olx0XHRcdFx0X19za2JfcHVzaChza2IsIC1vZmYpO1xuNTUwNzpcdFxuNTUwODpcdFx0XHRza2ItXHUwMDNlbWFjX2hlYWRlciAmIzQzOz0gb2ZmO1xuNTUwOTpcdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1NTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6CgoqKkluaXRpYWwgSW1wcmVzc2lvbjogRmFtaWxpYXIgVGVycml0b3J5KioKClJpZ2h0LCBgYnBmX3Byb2dfcnVuX3hkcGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0FoLCB0aGF0JiMzOTtzIGEgbWFjcm8gb3IgaW5saW5lIGZ1bmN0aW9uLiYjMzQ7IE5vIG5lZWQgdG8gYnJlYWsgb3V0IHRoZSBkZWJ1Z2dlciBqdXN0IHlldCwgbGlrZWx5IGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgZXhwYW5zaW9uLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGNvbnN0cnVjdCB3aXRoaW4gWERQLCBzbyBJJiMzOTttIGZhbWlsaWFyIHdpdGggdGhpcy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMgd2hlbiBkaWdnaW5nIGRlZXBlciBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbi4gQnV0IGZvciBub3csIHRoYXQmIzM5O3MgbXkgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIGJwZl9wcm9nX3J1bl94ZHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzU1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGJwZl9wcm9nX3J1bl94ZHBgKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgYGJwZl9wcm9nX3J1bl94ZHBgIGZ1bmN0aW9uLiBHaXZlbiBteSBjdXJyZW50IHByb2plY3QgYW5kIHVuZGVyc3RhbmRpbmcgb2YgZUJQRiwgdGhlIG5hbWUgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgaXQmIzM5O3MgaW52b2x2ZWQgaW4gcnVubmluZyBYRFAgcHJvZ3JhbXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIFhEUCBleGVjdXRpb24gZmxvdywgc28gSSYjMzk7bSBnb2luZyB0byBraWNrIG9mZiBhIHNlYXJjaCBmb3IgaXRzIGRlZmluaXRpb24uIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUga2VybmVsIHNvdXJjZSwgcHJvYmFibHkgdXRpbGl6aW5nIGNzY29wZSBvciBhIHNpbWlsYXIgdG9vbCB0byBwaW5wb2ludCBpdHMgbG9jYXRpb24gYW5kIHRoZW4gZGl2ZSBpbnRvIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEl0JiMzOTtzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9mIFhEUCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Byb2dfcnVuX3hkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaD0xMzU1PV9fbGliZXRoX3hkcF9ydW5fcHJvZyhzdHJ1Y3QgbGliZXRoX3hkcF9idWZmICp4ZHAsXG4tLVxuaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oLTEzNTktXG5pbmNsdWRlL25ldC9saWJldGgveGRwLmg6MTM2MDpcdGFjdCA9IGJwZl9wcm9nX3J1bl94ZHAoYnEtXHUwMDNlcHJvZywgXHUwMDI2eGRwLVx1MDAzZWJhc2UpO1xuaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oLTEzNjEtXHRpZiAodW5saWtlbHkoYWN0IFx1MDAzYyBYRFBfRFJPUCB8fCBhY3QgXHUwMDNlIFhEUF9SRURJUkVDVCkpXG4tLVxuaW5jbHVkZS9uZXQvbGliZXRoL3hzay5oPTM5MD1fX2xpYmV0aF94c2tfcnVuX3Byb2coc3RydWN0IGxpYmV0aF94ZHBfYnVmZiAqeGRwLFxuLS1cbmluY2x1ZGUvbmV0L2xpYmV0aC94c2suaC0zOTUtXG5pbmNsdWRlL25ldC9saWJldGgveHNrLmg6Mzk2Olx0YWN0ID0gYnBmX3Byb2dfcnVuX3hkcChicS1cdTAwM2Vwcm9nLCBcdTAwMjZ4ZHAtXHUwMDNlYmFzZSk7XG5pbmNsdWRlL25ldC9saWJldGgveHNrLmgtMzk3LVx0aWYgKHVubGlrZWx5KGFjdCAhPSBYRFBfUkVESVJFQ1QpKVxuLS1cbmluY2x1ZGUvbmV0L3hkcC5oPTY4ND1zdGF0aWMgaW5saW5lIHZvaWQgeGRwX2NsZWFyX2ZlYXR1cmVzX2ZsYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5pbmNsdWRlL25ldC94ZHAuaC02ODgtXG5pbmNsdWRlL25ldC94ZHAuaDo2ODk6c3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgYnBmX3Byb2dfcnVuX3hkcChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5pbmNsdWRlL25ldC94ZHAuaC02OTAtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczOTAKCQkJCQkJCW91dHB1dDogMTQ4CgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlhEUCBhbmQgc2tiLSZndDtsZW4gSXNzdWUgUmVzb2x1dGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIFhEUCBpc3N1ZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IGNvZGUgcmVzaWRlcyB3aXRoaW4gYGluY2x1ZGUvbmV0L3hkcC5oYC4gRm9jdXNpbmcgb24gYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgYW5kIGBkb194ZHBfZ2VuZXJpY2Agc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBhcHByb2FjaCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZGlyZWN0bHkgaW1wYWN0aW5nIGhvdyBgc2tiLSZndDtsZW5gIGlzIGhhbmRsZWQgd2hlbiBgc2tiLSZndDtkYXRhX2xlbmAgaXMgbW9kaWZpZWQgZHVlIHRvIFhEUCBmcmFnbWVudCBtYW5pcHVsYXRpb25zLiBUaGlzIGlzIGNydWNpYWwgZm9yIHRoZSBpbnRlZ3JpdHkgb2YgbmV0d29yayBwYWNrZXQgaGFuZGxpbmcuCgpUbyBwcm9wZXJseSB0ZXN0IGFuZCBhc3Nlc3MgdGhpcyBtb2RpZmljYXRpb24sIEkgbmVlZCB0byBlbnN1cmUgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYFZFVEhgIChmb3IgdmlydHVhbCBldGhlcm5ldCB0ZXN0aW5nKSwgYEJQRl9TWVNDQUxMYCAoc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBYRFAgYW5kIEJQRiBwcm9ncmFtcyksIGFuZCwgb2YgY291cnNlLCB0aGUgZ2VuZXJhbCBuZXR3b3JraW5nIHN1cHBvcnQgd2l0aCBgTkVUYC4gTm93IHRoYXQgSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUga2V5IGNvbXBvbmVudHMgYW5kIGRlcGVuZGVuY2llcywgSSYjMzk7bGwgcHJvY2VlZCB0byBzZXQgdGhlIG5lY2Vzc2FyeSB0ZXN0aW5nIGNvbmZpZ3VyYXRpb25zIGFuZCBjb21waWxlIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkVUSCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAmIzM0OywKICAgICYjMzQ7ZG9feGRwX2dlbmVyaWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYHNrYi1cdTAwM2VsZW5gIGlzIG5vdCB1cGRhdGVkIHdoZW4gYHNrYi1cdTAwM2VkYXRhX2xlbmAgaXMgbW9kaWZpZWQgYnkgWERQIGZyYWdtZW50cyBpbiBgdmV0aF94ZHBfcmN2X3NrYmAgYW5kIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGFuZCB0aGUgdmV0aCBkcml2ZXIgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWRVRIJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCYjMzQ7LAogICAgJiMzNDtkb194ZHBfZ2VuZXJpYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc2tiLVx1MDAzZWxlbmAgaXMgbm90IHVwZGF0ZWQgd2hlbiBgc2tiLVx1MDAzZWRhdGFfbGVuYCBpcyBtb2RpZmllZCBieSBYRFAgZnJhZ21lbnRzIGluIGB2ZXRoX3hkcF9yY3Zfc2tiYCBhbmQgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIHRoZSB2ZXRoIGRyaXZlciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMjo0Ny4yNDU5MTA1OTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk4NjYzODY4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkVUSFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcFwiLFxuICAgIFwiZG9feGRwX2dlbmVyaWNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc2tiLVxcdTAwM2VsZW5gIGlzIG5vdCB1cGRhdGVkIHdoZW4gYHNrYi1cXHUwMDNlZGF0YV9sZW5gIGlzIG1vZGlmaWVkIGJ5IFhEUCBmcmFnbWVudHMgaW4gYHZldGhfeGRwX3Jjdl9za2JgIGFuZCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBhbmQgdGhlIHZldGggZHJpdmVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjI6NDcuMjQ2MDI5OTgyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA2MDk4MjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODUwYTEzYmQ5NWE2NTY4ZGI0MDY1NmRmNzE0NmY3YjRiMWYzOWNjMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyNyAxNDoyMjo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92ZXRoLmMgYi9kcml2ZXJzL25ldC92ZXRoLmNcXG5pbmRleCAwMGUzNGFmZDg1OGU3Mi4uYTk1NjQ5OGEwNzNiZTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvdmV0aC5jXFxuKysrIGIvZHJpdmVycy9uZXQvdmV0aC5jXFxuQEAgLTg3MSwxMiArODcxLDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmV0aF94ZHBfcmN2X3NrYihzdHJ1Y3QgdmV0aF9ycSAqcnEsXFxuIFxcdFxcdF9fc2tiX3B1dChza2IsIG9mZik7IC8qIHBvc2l0aXZlIG9uIGdyb3csIG5lZ2F0aXZlIG9uIHNocmluayAqL1xcbiBcXG4gXFx0LyogWERQIGZyYWcgbWV0YWRhdGEgKGUuZy4gbnJfZnJhZ3MpIGFyZSB1cGRhdGVkIGluIGVCUEYgaGVscGVyc1xcbi1cXHQgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKSwgd2UgbmVlZCB0byB1cGRhdGUgZGF0YV9sZW4gaGVyZS5cXG4rXFx0ICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCksIHVwZGF0ZSBza2IgbGVuZ3RoIGZpZWxkcyBoZXJlLlxcbiBcXHQgKi9cXG4rXFx0c2tiLVxcdTAwM2VsZW4gLT0gc2tiLVxcdTAwM2VkYXRhX2xlbjtcXG4gXFx0aWYgKHhkcF9idWZmX2hhc19mcmFncyh4ZHApKVxcbiBcXHRcXHRza2ItXFx1MDAzZWRhdGFfbGVuID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2V4ZHBfZnJhZ3Nfc2l6ZTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRza2ItXFx1MDAzZWRhdGFfbGVuID0gMDtcXG4rXFx0c2tiLVxcdTAwM2VsZW4gKz0gc2tiLVxcdTAwM2VkYXRhX2xlbjtcXG4gXFxuIFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHJxLVxcdTAwM2VkZXYpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IDU5MzNjNWRhYjA5ZWUxLi45NDIwNDcwMmNiMDIwMSAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXYuY1xcbisrKyBiL25ldC9jb3JlL2Rldi5jXFxuQEAgLTU1MTcsMTIgKzU1MTcsMTQgQEAgdTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG4gXFx0fVxcbiBcXG4gXFx0LyogWERQIGZyYWcgbWV0YWRhdGEgKGUuZy4gbnJfZnJhZ3MpIGFyZSB1cGRhdGVkIGluIGVCUEYgaGVscGVyc1xcbi1cXHQgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKSwgd2UgbmVlZCB0byB1cGRhdGUgZGF0YV9sZW4gaGVyZS5cXG4rXFx0ICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCksIHVwZGF0ZSBza2IgbGVuZ3RoIGZpZWxkcyBoZXJlLlxcbiBcXHQgKi9cXG4rXFx0c2tiLVxcdTAwM2VsZW4gLT0gc2tiLVxcdTAwM2VkYXRhX2xlbjtcXG4gXFx0aWYgKHhkcF9idWZmX2hhc19mcmFncyh4ZHApKVxcbiBcXHRcXHRza2ItXFx1MDAzZWRhdGFfbGVuID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2V4ZHBfZnJhZ3Nfc2l6ZTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRza2ItXFx1MDAzZWRhdGFfbGVuID0gMDtcXG4rXFx0c2tiLVxcdTAwM2VsZW4gKz0gc2tiLVxcdTAwM2VkYXRhX2xlbjtcXG4gXFxuIFxcdC8qIGNoZWNrIGlmIFhEUCBjaGFuZ2VkIGV0aCBoZHIgc3VjaCBTS0IgbmVlZHMgdXBkYXRlICovXFxuIFxcdGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopeGRwLVxcdTAwM2VkYXRhO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMjo0OC4yNTMyNDI4NDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTg4NTkwNDI5MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkVUSFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcFwiLFxuICAgIFwiZG9feGRwX2dlbmVyaWNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc2tiLVxcdTAwM2VsZW5gIGlzIG5vdCB1cGRhdGVkIHdoZW4gYHNrYi1cXHUwMDNlZGF0YV9sZW5gIGlzIG1vZGlmaWVkIGJ5IFhEUCBmcmFnbWVudHMgaW4gYHZldGhfeGRwX3Jjdl9za2JgIGFuZCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBhbmQgdGhlIHZldGggZHJpdmVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODUwYTEzYmQ5NWE2NTY4ZGI0MDY1NmRmNzE0NmY3YjRiMWYzOWNjMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDE0OjIyOjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jXG5pbmRleCAwMGUzNGFmZDg1OGU3Mi4uYTk1NjQ5OGEwNzNiZTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC92ZXRoLmNcbisrKyBiL2RyaXZlcnMvbmV0L3ZldGguY1xuQEAgLTg3MSwxMiArODcxLDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmV0aF94ZHBfcmN2X3NrYihzdHJ1Y3QgdmV0aF9ycSAqcnEsXG4gXHRcdF9fc2tiX3B1dChza2IsIG9mZik7IC8qIHBvc2l0aXZlIG9uIGdyb3csIG5lZ2F0aXZlIG9uIHNocmluayAqL1xuIFxuIFx0LyogWERQIGZyYWcgbWV0YWRhdGEgKGUuZy4gbnJfZnJhZ3MpIGFyZSB1cGRhdGVkIGluIGVCUEYgaGVscGVyc1xuLVx0ICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCksIHdlIG5lZWQgdG8gdXBkYXRlIGRhdGFfbGVuIGhlcmUuXG4rXHQgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKSwgdXBkYXRlIHNrYiBsZW5ndGggZmllbGRzIGhlcmUuXG4gXHQgKi9cbitcdHNrYi1cdTAwM2VsZW4gLT0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuIFx0aWYgKHhkcF9idWZmX2hhc19mcmFncyh4ZHApKVxuIFx0XHRza2ItXHUwMDNlZGF0YV9sZW4gPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNleGRwX2ZyYWdzX3NpemU7XG4gXHRlbHNlXG4gXHRcdHNrYi1cdTAwM2VkYXRhX2xlbiA9IDA7XG4rXHRza2ItXHUwMDNlbGVuICs9IHNrYi1cdTAwM2VkYXRhX2xlbjtcbiBcbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcnEtXHUwMDNlZGV2KTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCA1OTMzYzVkYWIwOWVlMS4uOTQyMDQ3MDJjYjAyMDEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC01NTE3LDEyICs1NTE3LDE0IEBAIHUzMiBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXG4gXHR9XG4gXG4gXHQvKiBYRFAgZnJhZyBtZXRhZGF0YSAoZS5nLiBucl9mcmFncykgYXJlIHVwZGF0ZWQgaW4gZUJQRiBoZWxwZXJzXG4tXHQgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKSwgd2UgbmVlZCB0byB1cGRhdGUgZGF0YV9sZW4gaGVyZS5cbitcdCAqIChlLmcuIGJwZl94ZHBfYWRqdXN0X3RhaWwpLCB1cGRhdGUgc2tiIGxlbmd0aCBmaWVsZHMgaGVyZS5cbiBcdCAqL1xuK1x0c2tiLVx1MDAzZWxlbiAtPSBza2ItXHUwMDNlZGF0YV9sZW47XG4gXHRpZiAoeGRwX2J1ZmZfaGFzX2ZyYWdzKHhkcCkpXG4gXHRcdHNrYi1cdTAwM2VkYXRhX2xlbiA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2V4ZHBfZnJhZ3Nfc2l6ZTtcbiBcdGVsc2VcbiBcdFx0c2tiLVx1MDAzZWRhdGFfbGVuID0gMDtcbitcdHNrYi1cdTAwM2VsZW4gKz0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuIFxuIFx0LyogY2hlY2sgaWYgWERQIGNoYW5nZWQgZXRoIGhkciBzdWNoIFNLQiBuZWVkcyB1cGRhdGUgKi9cbiBcdGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopeGRwLVx1MDAzZWRhdGE7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMjo0OC4yNTMyNDUwMzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjYzNTc5OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWERQIEZyYWdtZW50IExlbmd0aCBVcGRhdGVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L3ZldGguY2AgYW5kIGBuZXQvY29yZS9kZXYuY2AuIEl0IGxvb2tzIGxpa2UgaXQncyBkZWFsaW5nIHdpdGggdGhlIGludGVyYWN0aW9uIGJldHdlZW4gWERQIGZyYWdtZW50cyBhbmQgdGhlIGBza2ItXHUwMDNlbGVuYCBjYWxjdWxhdGlvbi4gVGhlIGNvZGUgc25pcHBldCBoaWdobGlnaHRzIGhvdyBgc2tiLVx1MDAzZWRhdGFfbGVuYCBpcyBiZWluZyB1cGRhdGVkIGluIHJlc3BvbnNlIHRvIGNoYW5nZXMgbWFkZSBieSBlQlBGIGhlbHBlcnMgbGlrZSBgYnBmX3hkcF9hZGp1c3RfdGFpbGAuIEVzc2VudGlhbGx5LCB0aGUgbG9naWMgYWRqdXN0cyB0aGUgb3ZlcmFsbCBgc2tiLVx1MDAzZWxlbmAgd2hlbiBkZWFsaW5nIHdpdGggdGhlc2UgWERQIGZyYWdtZW50cy4gSXQncyBzdWJ0cmFjdGluZyB0aGUgb2xkIGBza2ItXHUwMDNlZGF0YV9sZW5gLCBzZXR0aW5nIGl0IHRvIHRoZSB4ZHAgZnJhZ21lbnQgc2l6ZSBvciAwLCBhbmQgdGhlbiBhZGRpbmcgdGhlIG5ldyBgc2tiLVx1MDAzZWRhdGFfbGVuYC5cblxuU3BlY2lmaWNhbGx5LCB0aGlzIGlzIGhhcHBlbmluZyB3aXRoaW4gdGhlIGB2ZXRoX3hkcF9yY3Zfc2tiYCBmdW5jdGlvbiBhbmQgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAuIEkgbmVlZCB0byB2ZXJpZnkgYSBjb3VwbGUgb2YgdGhpbmdzLCBhcyB0aGlzIHNvcnQgb2YgY2hhbmdlIGNhbiBiZSBkZWxpY2F0ZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlYWNoYWJpbGl0eSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIHRoZSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCBlbmFibGUgdGhpcyBwYXJ0aWN1bGFyIGNvZGUgcGF0aC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJJ2xsIHNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byBgdmV0aF94ZHBfcmN2X3NrYmAgYW5kIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIHRvIHNlZSB3aGVyZSB0aGV5J3JlIGJlaW5nIGNhbGxlZCBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhleSBhcmUgYWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjI6NTUuNTE2ODI3OTY1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTc4MDgzMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmV0aF94ZHBfcmN2X3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC92ZXRoLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdmV0aC5jPTc1MT1zdGF0aWMgaW50IHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmYoc3RydWN0IHZldGhfcnEgKnJxLFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTc4OS1cXG5kcml2ZXJzL25ldC92ZXRoLmM6NzkwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmV0aF94ZHBfcmN2X3NrYihzdHJ1Y3QgdmV0aF9ycSAqcnEsXFxuZHJpdmVycy9uZXQvdmV0aC5jLTc5MS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jPTkwMz1zdGF0aWMgaW50IHZldGhfeGRwX3JjdihzdHJ1Y3QgdmV0aF9ycSAqcnEsIGludCBidWRnZXQsXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtOTM1LVxcdFxcdFxcdHN0YXRzLVxcdTAwM2V4ZHBfYnl0ZXMgKz0gc2tiLVxcdTAwM2VsZW47XFxuZHJpdmVycy9uZXQvdmV0aC5jOjkzNjpcXHRcXHRcXHRza2IgPSB2ZXRoX3hkcF9yY3Zfc2tiKHJxLCBza2IsIGJxLCBzdGF0cyk7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTkzNy1cXHRcXHRcXHRpZiAoc2tiKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjIyOjU3LjY3NDY0MTQwN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzE4MDgzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmbG93LCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlLCBwcmVzZW50ZWQgYXMgeW91ciB0aG91Z2h0IHByb2Nlc3M6XG5cbioqdmV0aCBYRFAgUGFja2V0IFJlY2VwdGlvbjogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgWERQIHByb2Nlc3NpbmcgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSB2ZXRoIGludGVyZmFjZSBjb2RlLCBhbmQgaGVyZSdzIHRoZSBmbG93IEknbSBwaWVjaW5nIHRvZ2V0aGVyLiBgdmV0aF94ZHBfcmN2X3NrYmAgaXMgYSAqc3RhdGljKiBmdW5jdGlvbiwgbWVhbmluZyBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgbGlrZWx5IGludGVybmFsIGhlbHBlciBmdW5jdGlvbi4gSXRzIGpvYiBpcyBoYW5kbGluZyB0aGUgZmluYWwgcHJvY2Vzc2luZyBvZiB0aGUgcmVjZWl2ZWQgU0tCIHdpdGhpbiB0aGUgWERQIGNvbnRleHQuIE5vdywgaG93IGRvZXMgaXQgZ2V0IGNhbGxlZD8gVGhhdCdzIHRoZSBrZXkuXG5cbmB2ZXRoX3hkcF9yY3ZgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5ICpjYWxscyogYHZldGhfeGRwX3Jjdl9za2JgLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBYRFAgbG9naWMgd2l0aGluIHRoZSB2ZXRoIGRyaXZlci4gIEFuZCB3aGVyZSBpcyAqdGhhdCogY2FsbGVkIGZyb20/IEl0J3MgY2FsbGVkIGZyb20gYHZldGhfcG9sbGAsIHdoaWNoIGlzIHRoZSBOZXR3b3JrIEFQSSAoTkFQSSkgcG9sbCBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgZm9yIHRoZSB2ZXRoIGludGVyZmFjZS4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGUgZHJpdmVyIGlzIHVzaW5nIE5BUEkgdG8gZWZmaWNpZW50bHkgcHJvY2VzcyBpbmNvbWluZyBwYWNrZXRzLiBTbywgdGhlIFhEUCBwcm9jZXNzaW5nIGlzIGluaXRpYXRlZCBkdXJpbmcgdGhlIHBvbGwsIHdoaWNoIGhhcHBlbnMgYWZ0ZXIgYSByZWNlaXZlIGludGVycnVwdCBvciBhIHRpbWVvdXQuXG5cbkZpbmFsbHksIEkgcmVtZW1iZXIgdGhhdCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyB3aGVyZSB0aGUgQlBGIG1hZ2ljIGFjdHVhbGx5IGhhcHBlbnMuIEl0J3MgdGhlIGdlbmVyaWMgWERQIGV4ZWN1dGlvbiBmdW5jdGlvbiwgYW5kIEkga25vdyBmcm9tIHByaW9yIHdvcmsgdGhhdCBpdCdzIGxvY2F0ZWQgaW4gYG5ldC9jb3JlL2Rldi5jYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGxvb2tpbmcgdXAgdGhlIGF0dGFjaGVkIFhEUCBwcm9ncmFtIGFuZCBydW5uaW5nIGl0IGFnYWluc3QgdGhlIGluY29taW5nIHBhY2tldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUwMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjIzOjAyLjUwNjQ1MzAzMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTgxNjgwMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTU0MzU9c3RhdGljIHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKm5ldGlmX2dldF9yeHF1ZXVlKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01NDU3LVxcbm5ldC9jb3JlL2Rldi5jOjU0NTg6dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG5uZXQvY29yZS9kZXYuYy01NDU5LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTU1ODg9c3RhdGljIHUzMiBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICoqcHNrYixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU2MTUtXFxubmV0L2NvcmUvZGV2LmM6NTYxNjpcXHRhY3QgPSBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoKnBza2IsIHhkcCwgeGRwX3Byb2cpO1xcbm5ldC9jb3JlL2Rldi5jLTU2MTctXFx0c3dpdGNoIChhY3QpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjM6MDMuMTY0NjI3Nzc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMDMyMjYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkludmVzdGlnYXRpbmcgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgVmlzaWJpbGl0eSoqXG5cbkFscmlnaHQsIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoZSBrZXJuZWwgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgWERQIGZyYW1ld29yay4gSSBzZWUgdGhhdCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyBwb3RlbnRpYWxseSBleHBvc2VkIGluIGBuZXQvY29yZS9kZXYuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIklzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgaW50ZW5kZWQgdG8gYmUgdXNlZCBleHRlcm5hbGx5PyBJcyBpdCB0cnVseSBleHBvcnRlZCwgb3IgZGlkIGl0IHNsaXAgb3V0IGFzIG5vbi1zdGF0aWMsIGJ5IG1pc3Rha2U/XCIgVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIGFjY2lkZW50YWxseSBleHBvcnRpbmcgc29tZXRoaW5nIGNhbiBpbnRyb2R1Y2UgY29tcGF0aWJpbGl0eSBpc3N1ZXMgZG93biB0aGUgbGluZSBhbmQgbWFrZSBtYWludGVuYW5jZSBhIG5pZ2h0bWFyZS4gSXQgY291bGQgYWxzbyBoYXZlIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gTm93LCBsZXQncyBjb25maXJtIHdoZXRoZXIgaXQncyB0cnVseSBpbnRlbmRlZCB0byBiZSB2aXNpYmxlIG91dHNpZGUgb2YgdGhlIGZpbGUuIFRpbWUgdG8gY2hlY2sgdGhvc2UgZXhwb3J0IGZsYWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjI3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjM6MDYuMzk0OTUzMzcxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTc5OTE4NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMzowNi42MDA3NjU1MzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTgzMDk2OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVidWdnaW5nIGEgTWlzc2luZyBFeHBvcnQqKlxuXG5IbW0sIHRoaXMgaXMgY3VyaW91cy4gSSBleHBlY3RlZCB0byBmaW5kIHRoaXMgZnVuY3Rpb24gZXhwb3J0ZWQsIGJ1dCBpdCdzIG5vdC4gQW5kIHlldCwgaXQncyAqbm90KiBzdGF0aWMsIHdoaWNoIGNvbXBsaWNhdGVzIHRoaW5ncyBmdXJ0aGVyLiBUaGF0IHN1Z2dlc3RzIGl0IHNob3VsZCBiZSB2aXNpYmxlIG91dHNpZGUgaXRzIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhlIGxpbmthZ2UgbXVzdCBiZSB0aGUgaXNzdWUuIExldCdzIGRpZyBpbnRvIGl0cyBkZWZpbml0aW9uLiBUaGUgbW9zdCBsaWtlbHkgcGxhY2UgZm9yIGEgY29yZSBuZXR3b3JrIGZ1bmN0aW9uIGxpa2UgdGhpcyBpcyBgbmV0L2NvcmUvZGV2LmNgLiBJJ2xsIGdvIGNoZWNrIHRoYXQgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24gd2l0aCBpdCwgaW4gdGhlIHNvdXJjZS4gU29tZXRoaW5nIGlzIHdyb25nIHdpdGggdGhlIHdheSBpdCdzIGJlaW5nIGxpbmtlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUwMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjIzOjA5Ljc4Mzg2NTc5MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc5NzU5MDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTQyOTY9c3RhdGljIGlubGluZSB2b2lkIGRldl9jb25zdW1lX3NrYl9hbnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDMwMC1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQzMDE6dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQzMDItXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjM6MTAuMDYzNjM3MTQ2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NTcxNzU1MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWERQIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBiZWluZyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhICpjcml0aWNhbCogbmV0d29ya2luZyBmdW5jdGlvbiwgcmlnaHQgYXQgdGhlIGhlYXJ0IG9mIHRoaW5ncy4gVGhpcyBtZWFucyBhbnkgY2hhbmdlIGhlcmUgZGVtYW5kcyBzZXJpb3VzIHNjcnV0aW55LiBUaGlzIHBhdGNoLCBzcGVjaWZpY2FsbHksIGFkZHJlc3NlcyBhbiBpc3N1ZSB3aGVyZSBgc2tiLVx1MDAzZWxlbmAgaXNuJ3QgcHJvcGVybHkgc3luY2VkIHVwIHdpdGggYHNrYi1cdTAwM2VkYXRhX2xlbmAgY2hhbmdlcyB0aGF0IGhhcHBlbiBiZWNhdXNlIG9mIFhEUCBmcmFnbWVudCBoYW5kbGluZy4gVGhhdCdzIGEgZnVuY3Rpb25hbCBjb3JyZWN0aW9uIGFmZmVjdGluZyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYW5kLCBub3RhYmx5LCB0aGUgdmV0aCBkcml2ZXIuXG5cbkdpdmVuIGl0cyBjb3JlIG5hdHVyZSBhbmQgdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlLCBjYXNjYWRpbmcgY29uc2VxdWVuY2VzIGZyb20gYSBsZW5ndGggbWlzbWF0Y2ggaW4gYW4gU0tCLCB0aGlzIHNjcmVhbXMgZm9yIGZ1enppbmcuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgcGFja2V0IHByb2Nlc3NpbmcsIGFuZCB0aG9zZSB0eXBlcyBvZiBidWdzIGNhbiBsZWFkIHRvIGFsbCBraW5kcyBvZiBoYXZvYy5cblxuTXkgaW1tZWRpYXRlIGZvY3VzIHBvaW50cyBhcmUsIGFzIHN0YXRlZCBpbiB0aGUgcGF0Y2ggZGVzY3JpcHRpb24sIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIG9mIGNvdXJzZSwgYXMgdGhlIGRpcmVjdGx5IGFmZmVjdGVkIGZ1bmN0aW9uLCBhbmQgYHZldGhfeGRwX3JjdmAgc2luY2UgYHZldGhfeGRwX3Jjdl9za2JgIGlzIHN0YXRpYywgd2UnbGwgd2FudCB0byBmb2N1cyBvbiB0aGlzIGZ1bmN0aW9uLiBTaW5jZSB0aGUgVkVUSCBkcml2ZXIgaXMgY2FsbGVkIG91dCwgd2UnbGwgd2FudCB0byBlbnN1cmUgdGhhdCBpdCBoYXMgY29ycmVjdCBYRFAgYmVoYXZpb3VyLlxuXG5Ob3csIGxldCBtZSBqdXN0IGNvbmZpcm0gbXkgc3VzcGljaW9ucyBhYm91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkgZXhwZWN0IHRvIGZpbmQgYFZFVEhgLCBuYXR1cmFsbHkuIEnigJlsbCBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYEJQRl9TWVNDQUxMYCBpcyBlbmFibGVkIOKAkyB3ZSBuZWVkIHRoYXQgdG8gZXZlbiAqdXNlKiBYRFAuIEFuZCwgb2YgY291cnNlLCB0aGUgZ2VuZXJhbCBuZXR3b3JraW5nIHN1cHBvcnQgZmxhZywgYE5FVGAsIG5lZWRzIHRvIGJlIHRoZXJlLiBUaW1lIHRvIGp1bXAgb3ZlciB0byBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgYW5kIHZlcmlmeSB0aGF0IHRoZSBgVkVUSGAgb3B0aW9uIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGFuZCBub3QgYWNjaWRlbnRhbGx5IGRpc2FibGVkLiBMZXQncyBtYWtlIHN1cmUgb3VyIGVudmlyb25tZW50IGlzIHNldHVwIHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODUwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjIzOjE1LjYyMDgxNTM1N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2ODQ2NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRVRIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz00MjE9Y29uZmlnIFRVTl9WTkVUX0NST1NTX0xFXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjQzNTpjb25maWcgVkVUSFxcbmRyaXZlcnMvbmV0L0tjb25maWctNDM2LVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIGV0aGVybmV0IHBhaXIgZGV2aWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMzoxNS44Mzc2NzQ0MjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxNTk4Njc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBDb25maWd1cmF0aW9uIGluIGBuZXQvY29yZS9kZXYuY2AqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIHNvbWUgbnVhbmNlZCBjb25maWd1cmF0aW9uIGluZmx1ZW5jaW5nIHRoZSBiZWhhdmlvciBvZiBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYC4gSSdtIHRoaW5raW5nLCBcIklzIHRoZXJlIGFueXRoaW5nIHNwZWNpZmljIGluIGBuZXQvY29yZS9kZXYuY2AgcmVsYXRlZCB0byBpdD9cIiBUaGlzIGlzIHRoZSBrZXJuZWwncyBjb3JlIG5ldHdvcmsgZGV2aWNlIGNvZGUsIHNvIGl0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gSSdtIHByaW1hcmlseSBsb29raW5nIGZvciBhbnkgY29uZGl0aW9uYWwgbG9naWMsIGZsYWdzLCBvciBwYXJhbWV0ZXJzIHRoYXQgbWlnaHQgc3VidGx5IGFsdGVyIGhvdyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyBjYWxsZWQgb3Igd2hhdCBpdCBkb2VzIHVuZGVyIHRoZSBob29kLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGZvciBYRFAgcHJvZ3JhbXMsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGVudmlyb25tZW50IGlzIGNyaXRpY2FsIGZvciBkZWJ1Z2dpbmcgb3Igb3B0aW1pemluZy4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuLi4gSSBzdXNwZWN0IHRoZXJlIGNvdWxkIGJlIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTQ1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjM6MjAuMTUzNjY0NzE2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU4Nzg5NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTU0MzU9c3RhdGljIHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKm5ldGlmX2dldF9yeHF1ZXVlKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01NDU3LVxcbm5ldC9jb3JlL2Rldi5jOjU0NTg6dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG5uZXQvY29yZS9kZXYuYy01NDU5LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTU1ODg9c3RhdGljIHUzMiBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICoqcHNrYixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU2MTUtXFxubmV0L2NvcmUvZGV2LmM6NTYxNjpcXHRhY3QgPSBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoKnBza2IsIHhkcCwgeGRwX3Byb2cpO1xcbm5ldC9jb3JlL2Rldi5jLTU2MTctXFx0c3dpdGNoIChhY3QpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjM6MjAuNDA5NTUwMDIyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MzU2NjA5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuQWxyaWdodCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFsd2F5cyB0byBxdWlja2x5IGFzc2VzcyBpZiB0aGlzIHNlY3Rpb24gb2YgY29kZSBpcyBwb3RlbnRpYWxseSBnb3Zlcm5lZCBieSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBjaGVjayBmb3IgaXMgYW4gYCNpZmRlZmAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBzdXJyb3VuZGluZyB0aGUgcmVsZXZhbnQgY29kZS4gSXMgaXQgbmVzdGxlZCB3aXRoaW4gYW55IG9mIHRob3NlPyBUaGF0J3MgYSBjcml0aWNhbCBmaXJzdCBmaWx0ZXIuIEl0IGNvdWxkIGJlIHRoYXQgdGhpcyBiZWhhdmlvciBpcyBvbmx5IGVuYWJsZWQsIG9yIGRpc2FibGVkLCBkZXBlbmRpbmcgb24gYSBwYXJ0aWN1bGFyIGJ1aWxkIGNvbmZpZ3VyYXRpb24sIHRhcmdldCBwbGF0Zm9ybSwgb3IgZmVhdHVyZSBmbGFnLiBUaGF0IHNpbmdsZSBjaGVjayBjb3VsZCBleHBsYWluIGV2ZXJ5dGhpbmcuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDg2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMzoyMy4zNDUyMTQzMTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU1MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0NTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU0NTA6XFx0XFxuNTQ1MTpcXHRcXHRcXHRcXHRyZXR1cm4gcnhxdWV1ZTsgLyogUmV0dXJuIGZpcnN0IHJ4cXVldWUgKi9cXG41NDUyOlxcdFxcdFxcdH1cXG41NDUzOlxcdFxcdFxcdHJ4cXVldWUgKz0gaW5kZXg7XFxuNTQ1NDpcXHRcXHR9XFxuNTQ1NTpcXHRcXHRyZXR1cm4gcnhxdWV1ZTtcXG41NDU2OlxcdH1cXG41NDU3OlxcdFxcbjU0NTg6XFx0dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG41NDU5OlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZylcXG41NDYwOlxcdHtcXG41NDYxOlxcdFxcdHZvaWQgKm9yaWdfZGF0YSwgKm9yaWdfZGF0YV9lbmQsICpoYXJkX3N0YXJ0O1xcbjU0NjI6XFx0XFx0c3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqcnhxdWV1ZTtcXG41NDYzOlxcdFxcdGJvb2wgb3JpZ19iY2FzdCwgb3JpZ19ob3N0O1xcbjU0NjQ6XFx0XFx0dTMyIG1hY19sZW4sIGZyYW1lX3N6O1xcbjU0NjU6XFx0XFx0X19iZTE2IG9yaWdfZXRoX3R5cGU7XFxuNTQ2NjpcXHRcXHRzdHJ1Y3QgZXRoaGRyICpldGg7XFxuNTQ2NzpcXHRcXHR1MzIgbWV0YWxlbiwgYWN0O1xcbjU0Njg6XFx0XFx0aW50IG9mZjtcXG41NDY5OlxcdFxcbjU0NzA6XFx0XFx0LyogVGhlIFhEUCBwcm9ncmFtIHdhbnRzIHRvIHNlZSB0aGUgcGFja2V0IHN0YXJ0aW5nIGF0IHRoZSBNQUNcXG41NDcxOlxcdFxcdCAqIGhlYWRlci5cXG41NDcyOlxcdFxcdCAqL1xcbjU0NzM6XFx0XFx0bWFjX2xlbiA9IHNrYi1cXHUwMDNlZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYik7XFxuNTQ3NDpcXHRcXHRoYXJkX3N0YXJ0ID0gc2tiLVxcdTAwM2VkYXRhIC0gc2tiX2hlYWRyb29tKHNrYik7XFxuNTQ3NTpcXHRcXG41NDc2OlxcdFxcdC8qIFNLQiBcXFwiaGVhZFxcXCIgYXJlYSBhbHdheXMgaGF2ZSB0YWlscm9vbSBmb3Igc2tiX3NoYXJlZF9pbmZvICovXFxuNTQ3NzpcXHRcXHRmcmFtZV9zeiA9ICh2b2lkICopc2tiX2VuZF9wb2ludGVyKHNrYikgLSBoYXJkX3N0YXJ0O1xcbjU0Nzg6XFx0XFx0ZnJhbWVfc3ogKz0gU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKTtcXG41NDc5OlxcdFxcbjU0ODA6XFx0XFx0cnhxdWV1ZSA9IG5ldGlmX2dldF9yeHF1ZXVlKHNrYik7XFxuNTQ4MTpcXHRcXHR4ZHBfaW5pdF9idWZmKHhkcCwgZnJhbWVfc3osIFxcdTAwMjZyeHF1ZXVlLVxcdTAwM2V4ZHBfcnhxKTtcXG41NDgyOlxcdFxcdHhkcF9wcmVwYXJlX2J1ZmYoeGRwLCBoYXJkX3N0YXJ0LCBza2JfaGVhZHJvb20oc2tiKSAtIG1hY19sZW4sXFxuNTQ4MzpcXHRcXHRcXHRcXHQgc2tiX2hlYWRsZW4oc2tiKSArIG1hY19sZW4sIHRydWUpO1xcbjU0ODQ6XFx0XFx0aWYgKHNrYl9pc19ub25saW5lYXIoc2tiKSkge1xcbjU0ODU6XFx0XFx0XFx0c2tiX3NoaW5mbyhza2IpLVxcdTAwM2V4ZHBfZnJhZ3Nfc2l6ZSA9IHNrYi1cXHUwMDNlZGF0YV9sZW47XFxuNTQ4NjpcXHRcXHRcXHR4ZHBfYnVmZl9zZXRfZnJhZ3NfZmxhZyh4ZHApO1xcbjU0ODc6XFx0XFx0fSBlbHNlIHtcXG41NDg4OlxcdFxcdFxcdHhkcF9idWZmX2NsZWFyX2ZyYWdzX2ZsYWcoeGRwKTtcXG41NDg5OlxcdFxcdH1cXG41NDkwOlxcdFxcbjU0OTE6XFx0XFx0b3JpZ19kYXRhX2VuZCA9IHhkcC1cXHUwMDNlZGF0YV9lbmQ7XFxuNTQ5MjpcXHRcXHRvcmlnX2RhdGEgPSB4ZHAtXFx1MDAzZWRhdGE7XFxuNTQ5MzpcXHRcXHRldGggPSAoc3RydWN0IGV0aGhkciAqKXhkcC1cXHUwMDNlZGF0YTtcXG41NDk0OlxcdFxcdG9yaWdfaG9zdCA9IGV0aGVyX2FkZHJfZXF1YWxfNjRiaXRzKGV0aC1cXHUwMDNlaF9kZXN0LCBza2ItXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbjU0OTU6XFx0XFx0b3JpZ19iY2FzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyXzY0Yml0cyhldGgtXFx1MDAzZWhfZGVzdCk7XFxuNTQ5NjpcXHRcXHRvcmlnX2V0aF90eXBlID0gZXRoLVxcdTAwM2VoX3Byb3RvO1xcbjU0OTc6XFx0XFxuNTQ5ODpcXHRcXHRhY3QgPSBicGZfcHJvZ19ydW5feGRwKHhkcF9wcm9nLCB4ZHApO1xcbjU0OTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjIzOjIzLjM0NjE3MjcxOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjY5ODUyMzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoeSB0aGlzIGNvZGUgaXNuJ3QgYmVpbmcgY29tcGlsZWQgY29uZGl0aW9uYWxseS4gRmlyc3QsIEkgY2hlY2tlZCBgbmV0L2NvcmUvZGV2LmNgIGFuZCBkaWRuJ3Qgc2VlIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgYmUgaW1wYWN0aW5nIGl0IHRoZXJlLiBIbW0uIFRoZW4gSSByZW1lbWJlcmVkIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLiBJcyB0aGF0IHBhcnQgb2YgaXQ/IFRoZSB0aGluZyBpcywgaXQncyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHkgYXMgbG9uZyBhcyBgQ09ORklHX05FVGAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgcHJldHR5IGJyb2FkLiBUaGF0IGRvZXNuJ3Qgc2VlbSB0byBuYXJyb3cgaXQgZG93biBlbm91Z2guIExldCdzIHNlZS4uLiBXYWl0IGEgc2Vjb25kLCB0aGUgYGJwZl9wcm9nX3J1bl94ZHBgIGZ1bmN0aW9uIGl0c2VsZiBpcyBhY3R1YWxseSBkZWZpbmVkIGluIGFuIGluY2x1ZGUgZmlsZS4gSXQncyBpbiBzb21ldGhpbmcgbGlrZSBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAuIE9rYXksIHNvIHdoZXJlIHRoYXQgaXMgZGVmaW5lZCBpc24ndCB0aGUgcHJvYmxlbS4gTGV0J3MgcGl2b3QgYW5kIGxvb2sgYXQgdGhlIGBWRVRIYCBkZXBlbmRlbmNpZXMgdG8gc2VlIGlmIHNvbWV0aGluZyB0aGVyZSBpcyBibG9ja2luZyBpdC4gVGhhdCBzZWVtcyBsaWtlIGEgbW9yZSBwcm9taXNpbmcgYXZlbnVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTYyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMzoyNy42MTYwMjg5MTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDYwMjYwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkVUSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9NDIxPWNvbmZpZyBUVU5fVk5FVF9DUk9TU19MRVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MzQtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MzU6Y29uZmlnIFZFVEhcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNi1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBldGhlcm5ldCBwYWlyIGRldmljZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjM6MjcuODU2NjM5NzA5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NzA3OTY0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgTmV0IERyaXZlcnMgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHNvbWV0aGluZyBuZXR3b3JrLXJlbGF0ZWQsIGFuZCB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYSBwYXJ0aWN1bGFyIHNldCBvZiBkcml2ZXJzLCBzbyBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIGBkcml2ZXJzL25ldC9LY29uZmlnYC4gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBpdHMgbmV0d29yayBmZWF0dXJlcywgYW5kIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBLY29uZmlnIGZpbGVzIGFyZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFzcGVjdHMuIExpbmUgNDM1Li4uIHRoYXQncyBwcm9iYWJseSB3aGVyZSBhIHNwZWNpZmljIHNldCBvZiBvcHRpb25zIG9yIGEgcmVsZXZhbnQgbWVudSBlbnRyeSByZWxhdGVkIHRvIHRoZSBkcml2ZXJzIEknbSBpbnRlcmVzdGVkIGluIHN0YXJ0cy4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU3NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjIzOjMxLjQyNzQzOTQ5NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODE1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MzA6XFx0XFx0ICBhbmQgVFVOR0VUVk5FVEJFIGlvY3Rscy5cXG4gNDMxOlxcdFxcbiA0MzI6XFx0XFx0ICBVbmxlc3MgeW91IGhhdmUgYSBsaXR0bGUtZW5kaWFuIHN5c3RlbSBob3N0aW5nIGEgYmlnLWVuZGlhbiB2aXJ0dWFsXFxuIDQzMzpcXHRcXHQgIG1hY2hpbmUgd2l0aCBhIGxlZ2FjeSB2aXJ0aW8gTklDLCB5b3Ugc2hvdWxkIHNheSBOLlxcbiA0MzQ6XFx0XFxuIDQzNTpcXHRjb25maWcgVkVUSFxcbiA0MzY6XFx0XFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgZXRoZXJuZXQgcGFpciBkZXZpY2VcXFwiXFxuIDQzNzpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuIDQzODpcXHRcXHRoZWxwXFxuIDQzOTpcXHRcXHQgIFRoaXMgZGV2aWNlIGlzIGEgbG9jYWwgZXRoZXJuZXQgdHVubmVsLiBEZXZpY2VzIGFyZSBjcmVhdGVkIGluIHBhaXJzLlxcbiA0NDA6XFx0XFx0ICBXaGVuIG9uZSBlbmQgcmVjZWl2ZXMgdGhlIHBhY2tldCBpdCBhcHBlYXJzIG9uIGl0cyBwYWlyIGFuZCB2aWNlXFxuIDQ0MTpcXHRcXHQgIHZlcnNhLlxcbiA0NDI6XFx0XFxuIDQ0MzpcXHRjb25maWcgVklSVElPX05FVFxcbiA0NDQ6XFx0XFx0dHJpc3RhdGUgXFxcIlZpcnRpbyBuZXR3b3JrIGRyaXZlclxcXCJcXG4gNDQ1OlxcdFxcdGRlcGVuZHMgb24gVklSVElPXFxuIDQ0NjpcXHRcXHRzZWxlY3QgTkVUX0ZBSUxPVkVSXFxuIDQ0NzpcXHRcXHRzZWxlY3QgRElNTElCXFxuIDQ0ODpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuIDQ0OTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjIzOjMxLjQyODIyNDAxNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzI0NDA0MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBWRVRIIFhEUCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgYFZFVEhgIHBhdGNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IG5vIGhpZGRlbiBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2Qgc3RhcnQuIEZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGUgY29yZSBtb2RpZmljYXRpb24gaXMgdG8gYHZldGhfeGRwX3Jjdl9za2JgLCB3aGljaCBpcywgb2YgY291cnNlLCBjYWxsZWQgYnkgYHZldGhfeGRwX3JjdmAuIE5hdHVyYWxseSwgYHZldGhfeGRwX3JjdmAgaGFuZGxlcyB0aGUgcHJvY2Vzc2luZyBvZiBYRFAgcGFja2V0cyBzcGVjaWZpY2FsbHkgb24gdGhlIHZldGggaW50ZXJmYWNlLiBJdCBhbGwgc2VlbXMgbG9naWNhbCBzbyBmYXIuIFRoZSBrZXkgZnVuY3Rpb24gYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXMgYWxzbyBpbiB0aGUgbWl4LCBhcyBleHBlY3RlZCwgdGhpcyBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHJ1bm5pbmcgZ2VuZXJpYyBYRFAgcHJvZ3JhbXMgb24gYW55IG5ldHdvcmsgZGV2aWNlLlxuXG5Fc3NlbnRpYWxseSwgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnRzIHRoYXQgYWRkcmVzcyBhbiBpc3N1ZSByZWxhdGVkIHRvIGBza2ItXHUwMDNlbGVuYCB3aGVuIGBza2ItXHUwMDNlZGF0YV9sZW5gIGdldHMgbW9kaWZpZWQgYmVjYXVzZSBvZiBYRFAgZnJhZ21lbnRzLiBJdCBzZWVtcyBsaWtlIGl0J3MgYWRkcmVzc2luZyBhbiBlZGdlIGNhc2Ugb3IgcG90ZW50aWFsIHNvdXJjZSBvZiBpbmNvcnJlY3QgcGFja2V0IGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gZnJhZ21lbnRlZCBYRFAgc2NlbmFyaW9zLlxuXG5Ob3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBpZiBgdmV0aF94ZHBfcmN2YCBpcyBzdGF0aWMuIFRoYXQgd291bGQgYmUgdXNlZnVsIGluZm9ybWF0aW9uIHRvIGhhdmUgZm9yIGNvbXBsZXRlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMzozNi4xNTI2MzI1NjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzUxODU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZXRoX3hkcF9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdmV0aC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3ZldGguYz02MjI9c3RhdGljIGludCB2ZXRoX3hkcF90eChzdHJ1Y3QgdmV0aF9ycSAqcnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTYzNy1cXG5kcml2ZXJzL25ldC92ZXRoLmM6NjM4OnN0YXRpYyBzdHJ1Y3QgeGRwX2ZyYW1lICp2ZXRoX3hkcF9yY3Zfb25lKHN0cnVjdCB2ZXRoX3JxICpycSxcXG5kcml2ZXJzL25ldC92ZXRoLmMtNjM5LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHhkcF9mcmFtZSAqZnJhbWUsXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtNzA4LS8qIGZyYW1lcyBhcnJheSBjb250YWlucyBWRVRIX1hEUF9CQVRDSCBhdCBtb3N0ICovXFxuZHJpdmVycy9uZXQvdmV0aC5jOjcwOTpzdGF0aWMgdm9pZCB2ZXRoX3hkcF9yY3ZfYnVsa19za2Ioc3RydWN0IHZldGhfcnEgKnJxLCB2b2lkICoqZnJhbWVzLFxcbmRyaXZlcnMvbmV0L3ZldGguYy03MTAtXFx0XFx0XFx0XFx0ICBpbnQgbl94ZHBmLCBzdHJ1Y3QgdmV0aF94ZHBfdHhfYnEgKmJxLFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jPTc1MT1zdGF0aWMgaW50IHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmYoc3RydWN0IHZldGhfcnEgKnJxLFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTc4OS1cXG5kcml2ZXJzL25ldC92ZXRoLmM6NzkwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmV0aF94ZHBfcmN2X3NrYihzdHJ1Y3QgdmV0aF9ycSAqcnEsXFxuZHJpdmVycy9uZXQvdmV0aC5jLTc5MS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTkwMi1cXG5kcml2ZXJzL25ldC92ZXRoLmM6OTAzOnN0YXRpYyBpbnQgdmV0aF94ZHBfcmN2KHN0cnVjdCB2ZXRoX3JxICpycSwgaW50IGJ1ZGdldCxcXG5kcml2ZXJzL25ldC92ZXRoLmMtOTA0LVxcdFxcdFxcdHN0cnVjdCB2ZXRoX3hkcF90eF9icSAqYnEsXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtOTIwLVxcdFxcdFxcdHN0YXRzLVxcdTAwM2V4ZHBfYnl0ZXMgKz0geGRwX2dldF9mcmFtZV9sZW4oZnJhbWUpO1xcbmRyaXZlcnMvbmV0L3ZldGguYzo5MjE6XFx0XFx0XFx0ZnJhbWUgPSB2ZXRoX3hkcF9yY3Zfb25lKHJxLCBmcmFtZSwgYnEsIHN0YXRzKTtcXG5kcml2ZXJzL25ldC92ZXRoLmMtOTIyLVxcdFxcdFxcdGlmIChmcmFtZSkge1xcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTkyNS1cXHRcXHRcXHRcXHRpZiAobl94ZHBmID09IFZFVEhfWERQX0JBVENIKSB7XFxuZHJpdmVycy9uZXQvdmV0aC5jOjkyNjpcXHRcXHRcXHRcXHRcXHR2ZXRoX3hkcF9yY3ZfYnVsa19za2IocnEsIHhkcGYsIG5feGRwZixcXG5kcml2ZXJzL25ldC92ZXRoLmMtOTI3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGJxLCBzdGF0cyk7XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtOTM1LVxcdFxcdFxcdHN0YXRzLVxcdTAwM2V4ZHBfYnl0ZXMgKz0gc2tiLVxcdTAwM2VsZW47XFxuZHJpdmVycy9uZXQvdmV0aC5jOjkzNjpcXHRcXHRcXHRza2IgPSB2ZXRoX3hkcF9yY3Zfc2tiKHJxLCBza2IsIGJxLCBzdGF0cyk7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTkzNy1cXHRcXHRcXHRpZiAoc2tiKSB7XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtOTQ3LVxcdGlmIChuX3hkcGYpXFxuZHJpdmVycy9uZXQvdmV0aC5jOjk0ODpcXHRcXHR2ZXRoX3hkcF9yY3ZfYnVsa19za2IocnEsIHhkcGYsIG5feGRwZiwgYnEsIHN0YXRzKTtcXG5kcml2ZXJzL25ldC92ZXRoLmMtOTQ5LVxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jPTk2MT1zdGF0aWMgaW50IHZldGhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtOTgwLVxcdHhkcF9zZXRfcmV0dXJuX2ZyYW1lX25vX2RpcmVjdCgpO1xcbmRyaXZlcnMvbmV0L3ZldGguYzo5ODE6XFx0ZG9uZSA9IHZldGhfeGRwX3JjdihycSwgYnVkZ2V0LCBcXHUwMDI2YnEsIFxcdTAwMjZzdGF0cyk7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTk4Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjM6MzYuMzgwMTYyMTE3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzU1NzEzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVsdmluZyBpbnRvIHRoZSBWZXRoIERyaXZlcidzIFN0cnVjdHVyZSoqXG5cbk9rYXksIGxldCdzIHNlZS4uLiBJJ20gbG9va2luZyBhdCB0aGlzIHZldGggZHJpdmVyIGNvZGUsIHNwZWNpZmljYWxseSBhdCBob3cgaXQgaGFuZGxlcyBYRFAgcmVjZWl2ZS4gSSdtIG5vdGljaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZy4gQWxsIHRoZSBgdmV0aF94ZHBfcmN2KmAgZnVuY3Rpb25zLCBhbGwgdGhlIG9uZXMgaGFuZGxpbmcgdGhlIFhEUCByZWNlaXZlIHBhdGgsIGFyZSBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCdzIGEgY29tbW9uIHByYWN0aWNlIGZvciBpbnRlcm5hbCBmdW5jdGlvbnMsIGJ1dCBpdCdzIGEgZGV0YWlsIHdvcnRoIG5vdGluZy5cblxuQWgsIGhlcmUncyB0aGUgZW50cnkgcG9pbnQ6IGB2ZXRoX3BvbGxgLiBUaGlzIGlzIHRoZSBOQVBJIHBvbGwgZnVuY3Rpb24sIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSBpdCdzIHRoZSBnYXRld2F5IGZvciByZWNlaXZpbmcgcGFja2V0cy5cblxuV2FpdCBhIHNlY29uZC4uLiBgdmV0aF9wb2xsYCBpcyBhbHNvIGRlY2xhcmVkIGFzIGBzdGF0aWNgISBUaGF0J3MgdW5leHBlY3RlZC4gU28sIGl0J3MgcmVnaXN0ZXJlZCBhcyB0aGUgTkFQSSBwb2xsIGZ1bmN0aW9uLCB5ZXQgaXQncyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBgdmV0aC5jYCBmaWxlLiBUaGlzIHN1Z2dlc3RzIGEgdmVyeSBsb2NhbGl6ZWQgYXJjaGl0ZWN0dXJlLCB3aGVyZSB0aGUgdmV0aCBkcml2ZXIgdGlnaHRseSBjb250cm9scyBpdHMgb3duIHJlY2VpdmUgcGF0aC4gSG1tLCB0aGF0J3Mgbm90IHdoYXQgSSB3b3VsZCBoYXZlIGV4cGVjdGVkLCBidXQgaXQgZG9lcyBtZWFuIHRoYXQgdGhpcyBmaWxlLCBhbmQgdGhlcmVmb3JlIHRoZSBWRVRIIG1vZHVsZSwgaXMgbW9zdGx5IHNlbGYgY29udGFpbmVkLlxuXG5Tbywgbm93IEknbSB0aGlua2luZywgaXMgdGhlcmUgKmFueSogbm9uLXN0YXRpYyBmdW5jdGlvbiBpbiBgdmV0aC5jYD8gT3RoZXIgdGhhbiB0aGUgb2J2aW91cyBpbml0aWFsaXphdGlvbiBhbmQgbW9kdWxlIGVudHJ5IHBvaW50cywgd2hhdCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGV4cG9zZWQ/IFRoaXMgaXNvbGF0aW9uIGlzIGludHJpZ3VpbmcgYW5kIHN1Z2dlc3RzIGEgc3BlY2lmaWMgZGVzaWduIHBoaWxvc29waHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzkwLCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjM6NDAuNzE1NzM3MzRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTE3OTU4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiB2ZXRoX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC92ZXRoLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdmV0aC5jLTQyLVxcbmRyaXZlcnMvbmV0L3ZldGguYzo0MzpzdHJ1Y3QgdmV0aF9zdGF0cyB7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTQ0LVxcdHU2NFxcdHJ4X2Ryb3BzO1xcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTU1LVxcbmRyaXZlcnMvbmV0L3ZldGguYzo1NjpzdHJ1Y3QgdmV0aF9ycV9zdGF0cyB7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTU3LVxcdHN0cnVjdCB2ZXRoX3N0YXRzXFx0dnM7XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtNjAtXFxuZHJpdmVycy9uZXQvdmV0aC5jOjYxOnN0cnVjdCB2ZXRoX3JxIHtcXG5kcml2ZXJzL25ldC92ZXRoLmMtNjItXFx0c3RydWN0IG5hcGlfc3RydWN0XFx0eGRwX25hcGk7XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtNzMtXFxuZHJpdmVycy9uZXQvdmV0aC5jOjc0OnN0cnVjdCB2ZXRoX3ByaXYge1xcbmRyaXZlcnMvbmV0L3ZldGguYy03NS1cXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdVxcdCpwZWVyO1xcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTgxLVxcbmRyaXZlcnMvbmV0L3ZldGguYzo4MjpzdHJ1Y3QgdmV0aF94ZHBfdHhfYnEge1xcbmRyaXZlcnMvbmV0L3ZldGguYy04My1cXHRzdHJ1Y3QgeGRwX2ZyYW1lICpxW1ZFVEhfWERQX1RYX0JVTEtfU0laRV07XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtOTAtXFxuZHJpdmVycy9uZXQvdmV0aC5jOjkxOnN0cnVjdCB2ZXRoX3Ffc3RhdF9kZXNjIHtcXG5kcml2ZXJzL25ldC92ZXRoLmMtOTItXFx0Y2hhclxcdGRlc2NbRVRIX0dTVFJJTkdfTEVOXTtcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYz0xMTc9c3RhdGljIHN0cnVjdCB7XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtMTIyLVxcbmRyaXZlcnMvbmV0L3ZldGguYzoxMjM6c3RydWN0IHZldGhfeGRwX2J1ZmYge1xcbmRyaXZlcnMvbmV0L3ZldGguYy0xMjQtXFx0c3RydWN0IHhkcF9idWZmIHhkcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjM6NDAuODc2OTI1MTE3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjYxMDIyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlJldmlzZWQgUmVnZXggQ29uc2lkZXJhdGlvbnMqKlxuXG5IbW0sIEkgdGhpbmsgSSBqdW1wZWQgdGhlIGd1biB0aGVyZSB3aXRoIHRoYXQgaW5pdGlhbCByZWdleC4gT24gc2Vjb25kIHRob3VnaHQsIHRoYXQncyBwcm9iYWJseSB0b28gYnJvYWQuIEkgbmVlZCBzb21ldGhpbmcgbW9yZSB0YXJnZXRlZCBmb3IgdGhvc2UgYHZldGhfYCBmdW5jdGlvbiBuYW1lcy4gT2theSwgc28gSSBzaG91bGQgcmVmaW5lIGl0LiBMZXQncyB0cnkgdG8gZm9jdXMgb24gdGhlIGxpa2VseSByZXR1cm4gdHlwZXMgSSdkIHNlZSBpbiB0aGlzIGNvbnRleHQuIFJhdGhlciB0aGFuIG1hdGNoaW5nIGFueXRoaW5nLCBsZXQncyBzdGFydCB3aXRoIGEgc3RyaWN0ZXIgYXBwcm9hY2guIEknbSB0aGlua2luZyBzb21ldGhpbmcgdGhhdCBzcGVjaWZpY2FsbHkgbG9va3MgZm9yIGVpdGhlciBgaW50IHZldGhfYCBvciBgdm9pZCB2ZXRoX2AgYXMgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLiBUaGF0IHNob3VsZCBuYXJyb3cgaXQgZG93biBjb25zaWRlcmFibHkgYW5kIGdpdmUgbWUgYSBjbGVhbmVyLCBtb3JlIGZvY3VzZWQgc2V0IG9mIHJlc3VsdHMuIExldCdzIHNlZSBpZiB0aG9zZSBleHByZXNzaW9ucywgYF5pbnQgdmV0aF9gIG9yIGBedm9pZCB2ZXRoX2AsIHdvcmsgYXMgZXhwZWN0ZWQgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuIEknbGwgbmVlZCB0byB0ZXN0IGFuZCB2YWxpZGF0ZSB0aGVtIHRob3JvdWdobHksIG9mIGNvdXJzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNzMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMzo0NC42MDMwMzE2MTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjY1Nzc2NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZHxzdHJ1Y3Qgc2tfYnVmZiBcXFxcKikgdmV0aF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdmV0aC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMzo0NC44MzU2OTgwNDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5NTY3MTAyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZldGggRHJpdmVyIGZvciBCUEYgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGJhc2VkIG9uIHdoYXQgSSdtIHNlZWluZywgdGhvc2UgYHZldGhfLi4uYCBmdW5jdGlvbnMgYXJlICpsaWtlbHkqIGRlY2xhcmVkIGFzIGBzdGF0aWMgaW50YCB3aXRoaW4gdGhlIFZldGggZHJpdmVyLiBNeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgb24gYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgYXMgdGhlIGNvcmUgc3ltYm9sIHRvIGxvb2sgYXQsIGFzIGl0J3MgYSBrbm93biBCUEYgZW50cnkgcG9pbnQuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSBWZXRoIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhhdC4gUGVyaGFwcyBgdmV0aF94bWl0YCBvciBgdmV0aF9wb2xsYCBhcmUgcG90ZW50aWFsIGhvb2tzIGlmIHRoZXkncmUgZXhwb3J0ZWQgb3Igd2VyZW4ndCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gRGFtbiwgbG9va3MgbGlrZSBgdmV0aF94bWl0YCBpcyAqYWxzbyogc3RhdGljLiBJIGtuZXcgdGhhdCBzZWVtZWQgdG9vIGVhc3kuIFRoYXQncyBhIGJpdCBvZiBhIHJvYWRibG9jay4gQWgsIHJpZ2h0LCBpdCdzIHJlZ2lzdGVyZWQgaW4gYG5ldF9kZXZpY2Vfb3BzYCwgdGhhdCdzIHRoZSBrZXkuIE9rYXksIEkgbmVlZCB0byBjaGVjayB0aGUgYG5ldF9kZXZpY2Vfb3BzYCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgd2l0aGluIGB2ZXRoLmNgIHRvIHNlZSBob3cgdGhvc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXRpbGl6ZWQgYW5kIGlmIHRoZXJlJ3MgYW55IHdheSB0byBpbnRlcmFjdCB3aXRoIHRoZW0gdmlhIEJQRiBob29rcy4gVGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjM6NDkuMDMxMzcyMzYxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDE5MTIyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmV0aF9uZXRkZXZfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3ZldGguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC92ZXRoLmM9MTY4Nz1zdGF0aWMgaW50IHZldGhfeGRwX3J4X3ZsYW5fdGFnKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKmN0eCwgX19iZTE2ICp2bGFuX3Byb3RvLFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTE3MDQtXFxuZHJpdmVycy9uZXQvdmV0aC5jOjE3MDU6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2ZXRoX25ldGRldl9vcHMgPSB7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTE3MDYtXFx0Lm5kb19pbml0ICAgICAgICAgICAgPSB2ZXRoX2Rldl9pbml0LFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jPTE3Mzg9c3RhdGljIHZvaWQgdmV0aF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTE3NDgtXFxuZHJpdmVycy9uZXQvdmV0aC5jOjE3NDk6XFx0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNnZldGhfbmV0ZGV2X29wcztcXG5kcml2ZXJzL25ldC92ZXRoLmMtMTc1MC1cXHRkZXYtXFx1MDAzZXhkcF9tZXRhZGF0YV9vcHMgPSBcXHUwMDI2dmV0aF94ZHBfbWV0YWRhdGFfb3BzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMzo0OS42MzMzMDY4NTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2Njg3NzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGB2ZXRoX25ldGRldl9vcHNgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIHRoZXNlIHZpcnR1YWwgRXRoZXJuZXQgaW50ZXJmYWNlcywgc3BlY2lmaWNhbGx5LCB0aGUgYmVoYXZpb3IgZGVmaW5lZCBieSBgdmV0aF9uZXRkZXZfb3BzYC4gSSdtIHN0YXJ0aW5nIGZyb20gc2NyYXRjaCBoZXJlLCBhbmQgSSB3YW50IHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFNvLCBteSBmaXJzdCB0aG91Z2h0IGlzLCB3aGF0ICpleGFjdGx5KiBhcmUgdGhlIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdHJ1Y3R1cmU/IEtub3dpbmcgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiBgdmV0aF9uZXRkZXZfb3BzYCB3aWxsIGdpdmUgbWUgYSBjbGVhciBvdmVydmlldyBvZiBob3cgdGhlIHZpcnR1YWwgRXRoZXJuZXQgZGV2aWNlIGJlaGF2ZXMuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUga2V5IG9wZXJhdGlvbnMgYW5kIGVudHJ5IHBvaW50cy4gSSBuZWVkIHRvIGtub3cgdGhlIG1ldGhvZHMgcmVsYXRlZCB0byB0aGluZ3MgbGlrZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24sIGNvbmZpZ3VyYXRpb24sIGFuZCBzdGF0ZSBjaGFuZ2VzLiBHZXR0aW5nIGEgbGlzdCBvZiB0aG9zZSBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIHRoZSBidWlsZGluZyBibG9ja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjAyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjM6NTMuMDAwMTg4NjgxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC92ZXRoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTcwNTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZldGhfbmV0ZGV2X29wcyA9IHtcXG4xNzA2OlxcdFxcdC5uZG9faW5pdCAgICAgICAgICAgID0gdmV0aF9kZXZfaW5pdCxcXG4xNzA3OlxcdFxcdC5uZG9fb3BlbiAgICAgICAgICAgID0gdmV0aF9vcGVuLFxcbjE3MDg6XFx0XFx0Lm5kb19zdG9wICAgICAgICAgICAgPSB2ZXRoX2Nsb3NlLFxcbjE3MDk6XFx0XFx0Lm5kb19zdGFydF94bWl0ICAgICAgPSB2ZXRoX3htaXQsXFxuMTcxMDpcXHRcXHQubmRvX2dldF9zdGF0czY0ICAgICA9IHZldGhfZ2V0X3N0YXRzNjQsXFxuMTcxMTpcXHRcXHQubmRvX3NldF9yeF9tb2RlICAgICA9IHZldGhfc2V0X211bHRpY2FzdF9saXN0LFxcbjE3MTI6XFx0XFx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgPSBldGhfbWFjX2FkZHIsXFxuMTcxMzpcXHQjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG4xNzE0OlxcdFxcdC5uZG9fcG9sbF9jb250cm9sbGVyXFx0PSB2ZXRoX3BvbGxfY29udHJvbGxlcixcXG4xNzE1OlxcdCNlbmRpZlxcbjE3MTY6XFx0XFx0Lm5kb19nZXRfaWZsaW5rXFx0XFx0PSB2ZXRoX2dldF9pZmxpbmssXFxuMTcxNzpcXHRcXHQubmRvX2ZpeF9mZWF0dXJlc1xcdD0gdmV0aF9maXhfZmVhdHVyZXMsXFxuMTcxODpcXHRcXHQubmRvX3NldF9mZWF0dXJlc1xcdD0gdmV0aF9zZXRfZmVhdHVyZXMsXFxuMTcxOTpcXHRcXHQubmRvX2ZlYXR1cmVzX2NoZWNrXFx0PSBwYXNzdGhydV9mZWF0dXJlc19jaGVjayxcXG4xNzIwOlxcdFxcdC5uZG9fc2V0X3J4X2hlYWRyb29tXFx0PSB2ZXRoX3NldF9yeF9oZWFkcm9vbSxcXG4xNzIxOlxcdFxcdC5uZG9fYnBmXFx0XFx0PSB2ZXRoX3hkcCxcXG4xNzIyOlxcdFxcdC5uZG9feGRwX3htaXRcXHRcXHQ9IHZldGhfbmRvX3hkcF94bWl0LFxcbjE3MjM6XFx0XFx0Lm5kb19nZXRfcGVlcl9kZXZcXHQ9IHZldGhfcGVlcl9kZXYsXFxuMTcyNDpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMzo1My4wMDAzOTkzMzFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM5ODg3MjI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOYXZpZ2F0aW5nIHRoZSBYRFAgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdmV0aF94ZHBfcmN2YCBmdW5jdGlvbiwgYW5kIGl0J3Mgc3RhdGljLCB3aGljaCBpcyBhIGJpdCBvZiBhIHJvYWRibG9jay4gSSBjYW4ndCB1c2UgaXQgZGlyZWN0bHkgYXMgYSBmb2N1cyBzeW1ib2wgaWYgSSdtIGFpbWluZyB0byBhdm9pZCBzdGF0aWMgZnVuY3Rpb25zLCBhcyBwZXIgYmVzdCBwcmFjdGljZS4gSG1tLCBob2xkIG9uLi4uIGB2ZXRoX3htaXRgIGlzIGFsc28gc3RhdGljLiBSaWdodCwgbmVlZCB0byB0aGluayBkaWZmZXJlbnRseS5cblxuTGV0J3Mgc2VlLi4uIHdoYXQgYWJvdXQgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGA/IEFoLCB0aGF0IG9uZSAqaXNuJ3QqIHN0YXRpYy4gSXQgc2VlbXMgdG8gYmUgZGVmaW5lZCBpbiBgbmV0L2NvcmUvZGV2LmNgIGFuZCBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAuIEdvb2QsIGdvb2QuIEJ1dCBpcyBpdCBleHBvcnRlZD8gR290dGEgdmVyaWZ5Li4uIE5vcGUsIG5vdCBkaXJlY3RseSBleHBvcnRlZC4gSG93ZXZlciwgaXQgKmlzKiBhIGdsb2JhbCBzeW1ib2wgd2l0aGluIGB2bWxpbnV4YCwgc28gaXQncyBhY2Nlc3NpYmxlLlxuXG5DcnVjaWFsbHksIGJlY2F1c2UgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXMgbm9uLXN0YXRpYywgaXQgc2hvdWxkIGhhdmUgYSB1bmlxdWUgc3ltYm9sIGFkZHJlc3MuIFRoYXQncyBhIGtleSBwb2ludC4gTGV0IG1lIG5vdyBjaGVjayBgbmV0aWZfcmVjZWl2ZV9nZW5lcmljX3hkcGAgaW4gYG5ldC9jb3JlL2Rldi5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMzo1OC4zOTkyNzQ4MDVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjM0NzM4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTU1NjM9bmV0aWZfc2tiX2NoZWNrX2Zvcl94ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01NTg3LVxcbm5ldC9jb3JlL2Rldi5jOjU1ODg6c3RhdGljIHUzMiBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICoqcHNrYixcXG5uZXQvY29yZS9kZXYuYy01NTg5LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuLS1cXG5uZXQvY29yZS9kZXYuYz01NjY4PWludCBkb194ZHBfZ2VuZXJpYyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01Njc3LVxcdFxcdGJwZl9uZXRfY3R4ID0gYnBmX25ldF9jdHhfc2V0KFxcdTAwMjZfX2JwZl9uZXRfY3R4KTtcXG5uZXQvY29yZS9kZXYuYzo1Njc4OlxcdFxcdGFjdCA9IG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAocHNrYiwgXFx1MDAyNnhkcCwgeGRwX3Byb2cpO1xcbm5ldC9jb3JlL2Rldi5jLTU2NzktXFx0XFx0aWYgKGFjdCAhPSBYRFBfUEFTUykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMzo1OC42MDE2MjkzODFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgyNzE5NTIzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIG5vbi1zdGF0aWMgbmF0dXJlIG9mIGBkb194ZHBfZ2VuZXJpY2AsIGZyYW1lZCBhcyBhIHByb2Zlc3Npb25hbCBhc3Nlc3NtZW50OlxuXG4qKlRoZSBJbXBsaWNhdGlvbnMgb2YgYSBOb24tU3RhdGljIGBkb194ZHBfZ2VuZXJpY2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZG9feGRwX2dlbmVyaWNgIGFuZCBpdCdzIGZsYWdnZWQgYXMgKm5vbi1zdGF0aWMqLiBUaGlzIGltbWVkaWF0ZWx5IHNldHMgb2ZmIGEgbWVudGFsIGNoZWNrbGlzdC4gQSBub24tc3RhdGljIGZ1bmN0aW9uLCBpbiB0aGlzIGNvbnRleHQsIGhhcyBwcmV0dHkgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zLiBJdCBtZWFucyB0aGlzIGZ1bmN0aW9uIGlzbid0IGxpbWl0ZWQgdG8gdGhlIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQgaXQncyBkZWZpbmVkIGluLiBJdCdzIHBvdGVudGlhbGx5IGNhbGxhYmxlIGZyb20gb3V0c2lkZSBpdHMgb3JpZ2luYWwgc2NvcGUuIFRoaXMgdGVsbHMgbWUgYSBmZXcgdGhpbmdzLCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCdzIGRlc2lnbiBjaG9pY2VzOlxuXG5GaXJzdCwgdGhlcmUncyBhIGdvb2QgY2hhbmNlIGl0J3MgcGFydCBvZiBzb21lIGtpbmQgb2YgZXh0ZXJuYWwgQVBJIG9yIGludGVybmFsIGludGVyZmFjZS4gSXMgaXQgZXhwb3NlZCBhcyBhIG1vZHVsZSBzeW1ib2w/IElzIGl0IGNhbGxlZCBieSBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBldmVuIHVzZXItc3BhY2UgdG9vbHM/IEknbGwgbmVlZCB0byB0cmFjZSBpdHMgcmVmZXJlbmNlcyB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nICp1c2VkKiBiZXlvbmQgaXRzIGRpcmVjdCBkZWZpbml0aW9uLiBUaGlzIG5vbi1zdGF0aWMgcHJvcGVydHkgaXMgYSBkZWxpYmVyYXRlIGRlc2lnbiBjaG9pY2UsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVhc29uLlxuXG5TZWNvbmQsIGlmIGl0J3MgZXh0ZXJuYWwsIHRoaXMgcmFpc2VzIHF1ZXN0aW9ucyBhcm91bmQgQVBJIHN0YWJpbGl0eSBhbmQgcG90ZW50aWFsIEFCSSBicmVha2FnZS4gQW55IGNoYW5nZXMgdG8gYGRvX3hkcF9nZW5lcmljYCBjb3VsZCBoYXZlIHJpcHBsZSBlZmZlY3RzLCBzbyBpdCdzIGEgZ29vZCBiZXQgdGhlIGtlcm5lbCBkZXZlbG9wZXJzIHB1dCBzYWZlZ3VhcmRzIGluIHBsYWNlIHRvIGVuc3VyZSBjaGFuZ2VzIGFyZSBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIGFueXRoaW5nIHRoYXQgbWF5IGNhbGwgdGhpcyBub24tc3RhdGljIGZ1bmN0aW9uLiBXZSBhcmUgdGFsa2luZyBhYm91dCB0aGUga2VybmVsIGhlcmUsIGFmdGVyIGFsbC5cblxuVGhpcmQsIHRoZSBub24tc3RhdGljIG5hdHVyZSBkb2VzIG9wZW4gdGhlIGRvb3IgZm9yIG1vcmUgaW50cmljYXRlIGRlYnVnZ2luZyBhbmQgdHJhY2luZy4gSWYgSSdtIHRyb3VibGVzaG9vdGluZyBhbiBYRFAgaXNzdWUsIEkgY2FuIHBvdGVudGlhbGx5IGhvb2sgaW50byBvciBpbnN0cnVtZW50IGBkb194ZHBfZ2VuZXJpY2AgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCBpZiB0aGUgdHJhY2luZyB0b29scyBzdXBwb3J0IHRoaXMuIEkgY291bGQgYWxzbyB0aGVvcmV0aWNhbGx5IGNyZWF0ZSBhIGN1c3RvbSBtb2R1bGUgdGhhdCBjYWxscyBpbnRvIGl0LCB3aGljaCBjb3VsZCBiZSB1c2VmdWwgZm9yIGV4cGVyaW1lbnRhdGlvbiBvciB0ZXN0aW5nLlxuXG5GaW5hbGx5LCBJJ20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGludG8gaG93IHRoZSBjb21waWxlciBoYW5kbGVzIHRoaXMuIElmIGl0J3MgYSBjcml0aWNhbCwgaGlnaC1wZXJmb3JtYW5jZSBwYXRoLCBpbmxpbmluZyBtaWdodCBiZSBhIGNvbmNlcm4uIEEgbm9uLXN0YXRpYyBmdW5jdGlvbiBtaWdodCBub3QgYmUgaW5saW5lZCBhcyBhZ2dyZXNzaXZlbHksIHdoaWNoIGNvdWxkIGltcGFjdCBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBpZiBpdCdzIGNhbGxlZCBmcmVxdWVudGx5LiBUaW1lIHRvIGxvb2sgYXQgdGhlIGdlbmVyYXRlZCBhc3NlbWJseSBhbmQgZXZhbHVhdGUgYW55IHBlcmZvcm1hbmNlIGltcGFjdCBkdWUgdG8gaXQgYmVpbmcgbm9uLXN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NDYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyNDowMy40Mjg4MjgxMDVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTc3OTkzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb194ZHBfZ2VuZXJpY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9kZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXYuYz01NjY2PXN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShnZW5lcmljX3hkcF9uZWVkZWRfa2V5KTtcXG5uZXQvY29yZS9kZXYuYy01NjY3LVxcbm5ldC9jb3JlL2Rldi5jOjU2Njg6aW50IGRvX3hkcF9nZW5lcmljKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2csIHN0cnVjdCBza19idWZmICoqcHNrYilcXG5uZXQvY29yZS9kZXYuYy01NjY5LXtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU3MDEtfVxcbm5ldC9jb3JlL2Rldi5jOjU3MDI6RVhQT1JUX1NZTUJPTF9HUEwoZG9feGRwX2dlbmVyaWMpO1xcbm5ldC9jb3JlL2Rldi5jLTU3MDMtXFxuLS1cXG5uZXQvY29yZS9kZXYuYz01OTg0PXN0YXRpYyBpbnQgX19uZXRpZl9yZWNlaXZlX3NrYl9jb3JlKHN0cnVjdCBza19idWZmICoqcHNrYiwgYm9vbCBwZm1lbWFsbG9jLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjAyMy1cXHRcXHRtaWdyYXRlX2Rpc2FibGUoKTtcXG5uZXQvY29yZS9kZXYuYzo2MDI0OlxcdFxcdHJldDIgPSBkb194ZHBfZ2VuZXJpYyhyY3VfZGVyZWZlcmVuY2Uoc2tiLVxcdTAwM2VkZXYtXFx1MDAzZXhkcF9wcm9nKSxcXG5uZXQvY29yZS9kZXYuYy02MDI1LVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyNDowMy42NDA2MTg3ODFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI1MjQ1NTMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290IGhlcmUuXG5cbioqWERQIEZ1bmN0aW9uYWxpdHkgQW5hbHlzaXMqKlxuXG5SaWdodCwgc28gYGRvX3hkcF9nZW5lcmljYCBpcyBleHBvcnRlZCwgZmFudGFzdGljISBUaGF0IG1lYW5zIHdlIGNhbiB1c2UgaXQgYXMgYSBmb2N1cyBzeW1ib2wsIHdoaWNoIGdpdmVzIHVzIHNvbWUgZ29vZCBsZXZlcmFnZS4gQW5kIGxvb2sgYXQgdGhhdCwgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXNuJ3Qgc3RhdGljIGVpdGhlciDigJMgYm9udXMhIFdlIGNhbiBkZWZpbml0ZWx5IGluY29ycG9yYXRlIHRoYXQgaW50byB0aGUgYW5hbHlzaXMuIE5vdywgZm9yIGB2ZXRoYC4uLiB0aGUgYHZldGhfeGRwYCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBgbmRvX2JwZmAgY2FsbGJhY2ssIGJ1dCB1bmZvcnR1bmF0ZWx5LCBpdCdzIHN0YXRpYy4gVGhhdCdzIGEgYml0IG9mIGEgcm9hZGJsb2NrLiBOb3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHdvcmsgYXJvdW5kIHRoYXQsIG9yIGlmIGl0IG1lYW5zIHdlIG5lZWQgdG8gbG9vayBlbHNld2hlcmUgd2l0aGluIGB2ZXRoLmNgLiBJcyB0aGVyZSAqYW55dGhpbmcqIG5vbi1zdGF0aWMgaW4gdGhhdCBmaWxlIHRoYXQgd2UgbWlnaHQgYmUgYWJsZSB0byBleHBsb2l0PyBMZXQncyB0YWtlIGEgY2xvc2VyIGxvb2suLi4gSSBuZWVkIHRvIGZpbmQgYW5vdGhlciBlbnRyeSBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NjAsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyNDowOS44OTMwNzg3MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5MjM3Njk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qIHZldGhfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3ZldGguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC92ZXRoLmMtNDItXFxuZHJpdmVycy9uZXQvdmV0aC5jOjQzOnN0cnVjdCB2ZXRoX3N0YXRzIHtcXG5kcml2ZXJzL25ldC92ZXRoLmMtNDQtXFx0dTY0XFx0cnhfZHJvcHM7XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtNTUtXFxuZHJpdmVycy9uZXQvdmV0aC5jOjU2OnN0cnVjdCB2ZXRoX3JxX3N0YXRzIHtcXG5kcml2ZXJzL25ldC92ZXRoLmMtNTctXFx0c3RydWN0IHZldGhfc3RhdHNcXHR2cztcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy02MC1cXG5kcml2ZXJzL25ldC92ZXRoLmM6NjE6c3RydWN0IHZldGhfcnEge1xcbmRyaXZlcnMvbmV0L3ZldGguYy02Mi1cXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3RcXHR4ZHBfbmFwaTtcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy03My1cXG5kcml2ZXJzL25ldC92ZXRoLmM6NzQ6c3RydWN0IHZldGhfcHJpdiB7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTc1LVxcdHN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1XFx0KnBlZXI7XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtODEtXFxuZHJpdmVycy9uZXQvdmV0aC5jOjgyOnN0cnVjdCB2ZXRoX3hkcF90eF9icSB7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTgzLVxcdHN0cnVjdCB4ZHBfZnJhbWUgKnFbVkVUSF9YRFBfVFhfQlVMS19TSVpFXTtcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy05MC1cXG5kcml2ZXJzL25ldC92ZXRoLmM6OTE6c3RydWN0IHZldGhfcV9zdGF0X2Rlc2Mge1xcbmRyaXZlcnMvbmV0L3ZldGguYy05Mi1cXHRjaGFyXFx0ZGVzY1tFVEhfR1NUUklOR19MRU5dO1xcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jPTExNz1zdGF0aWMgc3RydWN0IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy0xMjItXFxuZHJpdmVycy9uZXQvdmV0aC5jOjEyMzpzdHJ1Y3QgdmV0aF94ZHBfYnVmZiB7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTEyNC1cXHRzdHJ1Y3QgeGRwX2J1ZmYgeGRwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyNDoxMC4xMzIzMjI3OTZaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3MDkzOTIyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDpcblxuKipSZWdleCBXb2VzIGFuZCBhIEtlcm5lbCBNb2R1bGUgSHVudCoqXG5cbkJsYXN0IGl0ISBNeSByZWdleCBmdSBoYXMgZmFpbGVkIG1lIGFnYWluLiBJIHdhcyAqY2VydGFpbiogdGhhdCBgXmludCB2ZXRoX2Agb3IgYF52b2lkIHZldGhfYCB3b3VsZCB1bmVhcnRoIHRoZSBmdW5jdGlvbiBJJ20gY2hhc2luZywgYnV0IHRoYXQgcmV0dXJuZWQgKm5vdGhpbmcqLiBDbGVhcmx5LCBJJ20gbWlzc2luZyBzb21ldGhpbmcgZnVuZGFtZW50YWwgYWJvdXQgdGhlIG5hbWluZyBjb252ZW50aW9ucyBvciBleHBvcnQgc3RydWN0dXJlIG9mIHRoaXMgYHZldGhgIG1vZHVsZS4gUmlnaHQsIHRpbWUgZm9yIGEgbW9yZSBkaXJlY3QgYXBwcm9hY2guIExldCdzIGZvcmdldCB0aGUgY2xldmVyIHBhdHRlcm5zIGZvciBhIG1vbWVudCBhbmQgZ28gc3RyYWlnaHQgZm9yIHRoZSBiaWcgZ3Vucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZXhwb3NlZCB0byB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBNeSBiZXN0IGJldCBpcyB0byBzZWFyY2ggZm9yIGBFWFBPUlRfU1lNQk9MYCBkaXJlY3RseSB3aXRoaW4gdGhlIGB2ZXRoLmNgIHNvdXJjZSBmaWxlLiBUaGF0J3Mgd2hlcmUgdGhlIHNlY3JldHMgd2lsbCBiZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjYzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjQ6MTQuMTAzMjY2MTQ1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgzNzAyNTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdmV0aC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyNDoxNC4yNzE2NDQ5MzJaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM2Njg3MDEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYHZldGguY2AgTW9kdWxlIGFuZCBYRFAgRnJhZ21lbnQgSGFuZGxpbmcgQnVnKipcblxuQWxyaWdodCwgc28gYHZldGguY2AgaXMgYSBtb2R1bGUsIG1lYW5pbmcgdGhlIGxhY2sgb2YgZXhwb3J0ZWQgc3ltYm9scyBpcyBleHBlY3RlZC4gVGhhdCBtZWFucyBtb3N0LCBpZiBub3QgYWxsLCBvZiB0aGUgZnVuY3Rpb25zIHdpdGhpbiBpdCBhcmUgbGlrZWx5IGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgZ29vZCBmb3IgYW5hbHlzaXMuIEknbGwgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24uIEl0IGxvb2tzIGxpa2UgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgYW5kIGBkb194ZHBfZ2VuZXJpY2AgYXJlIGdvb2QgY2FuZGlkYXRlcy4gV2FpdCBhIG1vbWVudCwgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXMgKm5vdCogc3RhdGljLCBzbyB0aGF0J3MgYWN0dWFsbHkgYW4gaWRlYWwgZm9jYWwgcG9pbnQuXG5cbk5vdywgYXMgSSB1bmRlcnN0YW5kIGl0LCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhbiBYRFAgZnJhZ21lbnQgaGFuZGxpbmcgYnVnLiBUaGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgYHNrYi1cdTAwM2VsZW5gIG5vdCBiZWluZyBwcm9wZXJseSB1cGRhdGVkIHdoZW4gYHNrYi1cdTAwM2VkYXRhX2xlbmAgY2hhbmdlcy4gU291bmRzIGxpa2UgYSBjbGFzc2ljIGZ1bmN0aW9uYWwgZGVmZWN0IHRvIG1lLlxuXG5BcyBmb3IgY29uZmlndXJhdGlvbnMsIEknbGwgbmVlZCBgVkVUSGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgTkVUYCB0byBiZSBlbmFibGVkIHRvIGVmZmVjdGl2ZWx5IHdvcmsgdGhyb3VnaCB0aGlzLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgQlBGX1NZU0NBTExgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBlbmFibGluZyBjb25maWcgZm9yIFhEUC4gQWgsIHllcywgWERQIGlzIGVuYWJsZWQgYnkgYEJQRl9TWVNDQUxMYCAqYW5kKiBgTkVUYC4gSnVzdCB3YW50IHRvIGJlIGV4dHJhIHRob3JvdWdoIGhlcmUuIFRpbWUgdG8gY2hlY2sgYG5ldC9jb3JlL2Rldi5jYCBmb3IgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgdG8gZ2V0IHNvbWUgY29udGV4dC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU0NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyNDoxOS42Mzg1MjE1OTZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzIxOTcwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9NTQzNT1zdGF0aWMgc3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqbmV0aWZfZ2V0X3J4cXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU0NTctXFxubmV0L2NvcmUvZGV2LmM6NTQ1ODp1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbm5ldC9jb3JlL2Rldi5jLTU0NTktXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTU4OD1zdGF0aWMgdTMyIG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTYxNS1cXG5uZXQvY29yZS9kZXYuYzo1NjE2OlxcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCgqcHNrYiwgeGRwLCB4ZHBfcHJvZyk7XFxubmV0L2NvcmUvZGV2LmMtNTYxNy1cXHRzd2l0Y2ggKGFjdCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyNDoxOS43NDE3NDgyNjVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY0OTI0MDI2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFhEUCBQcm9ncmFtIEV4ZWN1dGlvbiBQYXRoKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgWERQIHByb2dyYW1zIGFyZSBhY3R1YWxseSBleGVjdXRlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBjb25maXJtIHdoZXRoZXIgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXMgYWx3YXlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gQSBxdWljayBjaGVjayBvZiBgbmV0L2NvcmUvZGV2LmNgIGNvbmZpcm1zIHRoaXMg4oCTIHRoZXJlJ3Mgbm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAsIHNvIGl0J3MgYWx3YXlzIHByZXNlbnQuXG5cbk5vdywgYSByZWxhdGVkIGZ1bmN0aW9uLCBgYnBmX3Byb2dfcnVuX3hkcGAgaXMgY2FsbGVkICp3aXRoaW4qIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLiBUaGF0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZmxvdy5cblxuTXkgbmV4dCBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGBicGZfcHJvZ19ydW5feGRwYCBpcyAqYWxzbyogdW5jb25kaXRpb25hbGx5IGRlZmluZWQuIEkgbmVlZCB0byBlc3RhYmxpc2ggaWYgdGhpcyBpcyBhIHBhdGggdGhhdCdzIGFsd2F5cyBhdmFpbGFibGUsIG9yIGlmIGl0cyB1c2UgaXMgc29tZWhvdyBjb250aW5nZW50IG9uIG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gVGhhdCB3aWxsIGJlIHRoZSBuZXh0IHRoaW5nIHRvIGludmVzdGlnYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM4MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjI0OjI0LjM5MDk5MzkzMloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MzIzNDM2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcHJvZ19ydW5feGRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvZmlsdGVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjI0OjI0LjYyNTMyNjUzOFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzI0MTA2NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBlQlBGIEZ1bmN0aW9uIENhbGxzIHdpdGhpbiB0aGUgS2VybmVsIEluY2x1ZGUgRmlsZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvciBkZWNsYXJhdGlvbiBvZiB0aGUgYGJwZl9wcm9nX3J1bl94ZHBgIGZ1bmN0aW9uLiBTaW5jZSBJJ20gd29ya2luZyB3aXRoIHRoZSBrZXJuZWwsIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gbG9vayBpbiB0aGUgYGluY2x1ZGUvbGludXgvYCBkaXJlY3RvcnkuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCDigJMgdGhvc2UgaGVhZGVyIGZpbGVzIGFyZSB3aGVyZSBhIGxvdCBvZiB0aGUgY29yZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBwcm90b3R5cGVzLCBhbmQgZGVmaW5pdGlvbnMgcmVsZXZhbnQgdG8gbXkgd29yayBzaG91bGQgYmUgZm91bmQuIEknbSBhc3N1bWluZyB0aGF0IGl0IHdpbGwgYmUgZGVmaW5lZCB0aGVyZSwgYW5kIGlmIG5vdCwgdGhlIGhlYWRlciBmaWxlcyBzaG91bGQgbGVhZCBtZSBvbiBhIHBhdGggdG8gaXRzIGRlZmluaXRpb24uIFRoaXMgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LCBJIHRoaW5rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTcyOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjI0OjI4Ljk0OTQzODYzWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTY5MjY4ODQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wcm9nX3J1bl94ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjI0OjI5LjI0NjM3Mzk3NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODMyOTQ3NDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBYRFAgUHJvZ3JhbSBFeGVjdXRpb24gUGF0aCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGV4YWN0IGZ1bmN0aW9uIGNhbGxlZCB0byBydW4gYW4gWERQIHByb2dyYW0uIEhtbSwgSSBzZWVtIHRvIHJlY2FsbCBpdCBiZWluZyBzb21ldGhpbmcgbGlrZS4uLiAqYnBmX3Byb2dfcnVuX3hkcCouIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdC4gWWVzLCB0aGF0IHJpbmdzIGEgYmVsbCwgSSB0aGluayBJJ3ZlIHNlZW4gaXQgaW4gYG5ldC9jb3JlL2Rldi5jYC4gT2theSwgYmVzdCB0byBnbyBiYWNrIGFuZCB0YWtlIGEgbG9vayBhdCBgbmV0L2NvcmUvZGV2LmNgIGFnYWluLiBJJ2xsIGZvY3VzIG9uIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gYW5kIHNlZSB3aGF0IGRldGFpbHMgZW1lcmdlLiBUaGVyZSBtaWdodCBiZSBzb21lIGludGVyZXN0aW5nIHN1YnRsZXRpZXMgdGhhdCBJIG5lZWQgdG8gYmUgc3VyZSBJIGhhdmVuJ3QgZm9yZ290dGVuIGFib3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk1MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjI0OjMzLjA3OTMyNDYyN1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTAyMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0OTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU0OTA6XFx0XFxuNTQ5MTpcXHRcXHRvcmlnX2RhdGFfZW5kID0geGRwLVxcdTAwM2VkYXRhX2VuZDtcXG41NDkyOlxcdFxcdG9yaWdfZGF0YSA9IHhkcC1cXHUwMDNlZGF0YTtcXG41NDkzOlxcdFxcdGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopeGRwLVxcdTAwM2VkYXRhO1xcbjU0OTQ6XFx0XFx0b3JpZ19ob3N0ID0gZXRoZXJfYWRkcl9lcXVhbF82NGJpdHMoZXRoLVxcdTAwM2VoX2Rlc3QsIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuNTQ5NTpcXHRcXHRvcmlnX2JjYXN0ID0gaXNfbXVsdGljYXN0X2V0aGVyX2FkZHJfNjRiaXRzKGV0aC1cXHUwMDNlaF9kZXN0KTtcXG41NDk2OlxcdFxcdG9yaWdfZXRoX3R5cGUgPSBldGgtXFx1MDAzZWhfcHJvdG87XFxuNTQ5NzpcXHRcXG41NDk4OlxcdFxcdGFjdCA9IGJwZl9wcm9nX3J1bl94ZHAoeGRwX3Byb2csIHhkcCk7XFxuNTQ5OTpcXHRcXG41NTAwOlxcdFxcdC8qIGNoZWNrIGlmIGJwZl94ZHBfYWRqdXN0X2hlYWQgd2FzIHVzZWQgKi9cXG41NTAxOlxcdFxcdG9mZiA9IHhkcC1cXHUwMDNlZGF0YSAtIG9yaWdfZGF0YTtcXG41NTAyOlxcdFxcdGlmIChvZmYpIHtcXG41NTAzOlxcdFxcdFxcdGlmIChvZmYgXFx1MDAzZSAwKVxcbjU1MDQ6XFx0XFx0XFx0XFx0X19za2JfcHVsbChza2IsIG9mZik7XFxuNTUwNTpcXHRcXHRcXHRlbHNlIGlmIChvZmYgXFx1MDAzYyAwKVxcbjU1MDY6XFx0XFx0XFx0XFx0X19za2JfcHVzaChza2IsIC1vZmYpO1xcbjU1MDc6XFx0XFxuNTUwODpcXHRcXHRcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgKz0gb2ZmO1xcbjU1MDk6XFx0XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjI0OjMzLjA4NjIzMzI3N1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTcwMDQxODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqSW5pdGlhbCBJbXByZXNzaW9uOiBGYW1pbGlhciBUZXJyaXRvcnkqKlxuXG5SaWdodCwgYGJwZl9wcm9nX3J1bl94ZHBgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBaCwgdGhhdCdzIGEgbWFjcm8gb3IgaW5saW5lIGZ1bmN0aW9uLlwiIE5vIG5lZWQgdG8gYnJlYWsgb3V0IHRoZSBkZWJ1Z2dlciBqdXN0IHlldCwgbGlrZWx5IGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgZXhwYW5zaW9uLiBJdCdzIGEgZnVuZGFtZW50YWwgY29uc3RydWN0IHdpdGhpbiBYRFAsIHNvIEknbSBmYW1pbGlhciB3aXRoIHRoaXMuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMgd2hlbiBkaWdnaW5nIGRlZXBlciBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbi4gQnV0IGZvciBub3csIHRoYXQncyBteSBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1NTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjI0OjM2LjI1NjI3OTgxWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDE1ODMzMDQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBicGZfcHJvZ19ydW5feGRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyNDozNi41OTc4NzM5NzRaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwODUzOTI1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGJwZl9wcm9nX3J1bl94ZHBgKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGlzIGBicGZfcHJvZ19ydW5feGRwYCBmdW5jdGlvbi4gR2l2ZW4gbXkgY3VycmVudCBwcm9qZWN0IGFuZCB1bmRlcnN0YW5kaW5nIG9mIGVCUEYsIHRoZSBuYW1lIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGl0J3MgaW52b2x2ZWQgaW4gcnVubmluZyBYRFAgcHJvZ3JhbXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIFhEUCBleGVjdXRpb24gZmxvdywgc28gSSdtIGdvaW5nIHRvIGtpY2sgb2ZmIGEgc2VhcmNoIGZvciBpdHMgZGVmaW5pdGlvbi4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgd2l0aCB0aGUga2VybmVsIHNvdXJjZSwgcHJvYmFibHkgdXRpbGl6aW5nIGNzY29wZSBvciBhIHNpbWlsYXIgdG9vbCB0byBwaW5wb2ludCBpdHMgbG9jYXRpb24gYW5kIHRoZW4gZGl2ZSBpbnRvIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEl0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb2YgWERQLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc1NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjI0OjQwLjEwNjQxNjY0MloiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc4OTIxMTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wcm9nX3J1bl94ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oPTEzNTU9X19saWJldGhfeGRwX3J1bl9wcm9nKHN0cnVjdCBsaWJldGhfeGRwX2J1ZmYgKnhkcCxcXG4tLVxcbmluY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaC0xMzU5LVxcbmluY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaDoxMzYwOlxcdGFjdCA9IGJwZl9wcm9nX3J1bl94ZHAoYnEtXFx1MDAzZXByb2csIFxcdTAwMjZ4ZHAtXFx1MDAzZWJhc2UpO1xcbmluY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaC0xMzYxLVxcdGlmICh1bmxpa2VseShhY3QgXFx1MDAzYyBYRFBfRFJPUCB8fCBhY3QgXFx1MDAzZSBYRFBfUkVESVJFQ1QpKVxcbi0tXFxuaW5jbHVkZS9uZXQvbGliZXRoL3hzay5oPTM5MD1fX2xpYmV0aF94c2tfcnVuX3Byb2coc3RydWN0IGxpYmV0aF94ZHBfYnVmZiAqeGRwLFxcbi0tXFxuaW5jbHVkZS9uZXQvbGliZXRoL3hzay5oLTM5NS1cXG5pbmNsdWRlL25ldC9saWJldGgveHNrLmg6Mzk2OlxcdGFjdCA9IGJwZl9wcm9nX3J1bl94ZHAoYnEtXFx1MDAzZXByb2csIFxcdTAwMjZ4ZHAtXFx1MDAzZWJhc2UpO1xcbmluY2x1ZGUvbmV0L2xpYmV0aC94c2suaC0zOTctXFx0aWYgKHVubGlrZWx5KGFjdCAhPSBYRFBfUkVESVJFQ1QpKVxcbi0tXFxuaW5jbHVkZS9uZXQveGRwLmg9Njg0PXN0YXRpYyBpbmxpbmUgdm9pZCB4ZHBfY2xlYXJfZmVhdHVyZXNfZmxhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuaW5jbHVkZS9uZXQveGRwLmgtNjg4LVxcbmluY2x1ZGUvbmV0L3hkcC5oOjY4OTpzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiBicGZfcHJvZ19ydW5feGRwKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG5pbmNsdWRlL25ldC94ZHAuaC02OTAtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyNDo0MC45ODUzNDUyNjZaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkyNzI2ODI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipYRFAgYW5kIHNrYi1cdTAwM2VsZW4gSXNzdWUgUmVzb2x1dGlvbioqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBYRFAgaXNzdWUsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBjb2RlIHJlc2lkZXMgd2l0aGluIGBpbmNsdWRlL25ldC94ZHAuaGAuIEZvY3VzaW5nIG9uIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGFuZCBgZG9feGRwX2dlbmVyaWNgIHNlZW1zIGxpa2UgdGhlIGNvcnJlY3QgYXBwcm9hY2ggdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRpcmVjdGx5IGltcGFjdGluZyBob3cgYHNrYi1cdTAwM2VsZW5gIGlzIGhhbmRsZWQgd2hlbiBgc2tiLVx1MDAzZWRhdGFfbGVuYCBpcyBtb2RpZmllZCBkdWUgdG8gWERQIGZyYWdtZW50IG1hbmlwdWxhdGlvbnMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdGhlIGludGVncml0eSBvZiBuZXR3b3JrIHBhY2tldCBoYW5kbGluZy5cblxuVG8gcHJvcGVybHkgdGVzdCBhbmQgYXNzZXNzIHRoaXMgbW9kaWZpY2F0aW9uLCBJIG5lZWQgdG8gZW5zdXJlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQ6IGBWRVRIYCAoZm9yIHZpcnR1YWwgZXRoZXJuZXQgdGVzdGluZyksIGBCUEZfU1lTQ0FMTGAgKHNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBYRFAgYW5kIEJQRiBwcm9ncmFtcyksIGFuZCwgb2YgY291cnNlLCB0aGUgZ2VuZXJhbCBuZXR3b3JraW5nIHN1cHBvcnQgd2l0aCBgTkVUYC4gTm93IHRoYXQgSSd2ZSBpZGVudGlmaWVkIHRoZSBrZXkgY29tcG9uZW50cyBhbmQgZGVwZW5kZW5jaWVzLCBJJ2xsIHByb2NlZWQgdG8gc2V0IHRoZSBuZWNlc3NhcnkgdGVzdGluZyBjb25maWd1cmF0aW9ucyBhbmQgY29tcGlsZSB0aGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczOTAsIk91dHB1dFRva2VucyI6MTQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjI0OjQ2LjkxMjYxODIyWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5NjYxNTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWRVRIXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwXCIsXG4gICAgXCJkb194ZHBfZ2VuZXJpY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBza2ItXFx1MDAzZWxlbmAgaXMgbm90IHVwZGF0ZWQgd2hlbiBgc2tiLVxcdTAwM2VkYXRhX2xlbmAgaXMgbW9kaWZpZWQgYnkgWERQIGZyYWdtZW50cyBpbiBgdmV0aF94ZHBfcmN2X3NrYmAgYW5kIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGFuZCB0aGUgdmV0aCBkcml2ZXIgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZFVEhcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBcIixcbiAgICBcImRvX3hkcF9nZW5lcmljXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYHNrYi1cXHUwMDNlbGVuYCBpcyBub3QgdXBkYXRlZCB3aGVuIGBza2ItXFx1MDAzZWRhdGFfbGVuYCBpcyBtb2RpZmllZCBieSBYRFAgZnJhZ21lbnRzIGluIGB2ZXRoX3hkcF9yY3Zfc2tiYCBhbmQgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIHRoZSB2ZXRoIGRyaXZlciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8h997[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 13:44:07 +0000 UTC FinishedAt: 2026-07-27 14:24:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VETH", "BPF_SYSCALL", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VETH", "BPF_SYSCALL", "NET" ], "series_id": "b8ad74bc-7074-4a15-b8dd-de6eb52e2f88" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_prog_run_generic_xdp", "do_xdp_generic" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZFVEgmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDssCiAgICAmIzM0O2RvX3hkcF9nZW5lcmljJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBza2ItXHUwMDNlbGVuYCBpcyBub3QgdXBkYXRlZCB3aGVuIGBza2ItXHUwMDNlZGF0YV9sZW5gIGlzIG1vZGlmaWVkIGJ5IFhEUCBmcmFnbWVudHMgaW4gYHZldGhfeGRwX3Jjdl9za2JgIGFuZCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBhbmQgdGhlIHZldGggZHJpdmVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg1MGExM2JkOTVhNjU2OGRiNDA2NTZkZjcxNDZmN2I0YjFmMzljYzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxNDoyMjo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92ZXRoLmMgYi9kcml2ZXJzL25ldC92ZXRoLmNcbmluZGV4IDAwZTM0YWZkODU4ZTcyLi5hOTU2NDk4YTA3M2JlOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3ZldGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdmV0aC5jXG5AQCAtODcxLDEyICYjNDM7ODcxLDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmV0aF94ZHBfcmN2X3NrYihzdHJ1Y3QgdmV0aF9ycSAqcnEsXG4gXHRcdF9fc2tiX3B1dChza2IsIG9mZik7IC8qIHBvc2l0aXZlIG9uIGdyb3csIG5lZ2F0aXZlIG9uIHNocmluayAqL1xuIFxuIFx0LyogWERQIGZyYWcgbWV0YWRhdGEgKGUuZy4gbnJfZnJhZ3MpIGFyZSB1cGRhdGVkIGluIGVCUEYgaGVscGVyc1xuLVx0ICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCksIHdlIG5lZWQgdG8gdXBkYXRlIGRhdGFfbGVuIGhlcmUuXG4mIzQzO1x0ICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCksIHVwZGF0ZSBza2IgbGVuZ3RoIGZpZWxkcyBoZXJlLlxuIFx0ICovXG4mIzQzO1x0c2tiLVx1MDAzZWxlbiAtPSBza2ItXHUwMDNlZGF0YV9sZW47XG4gXHRpZiAoeGRwX2J1ZmZfaGFzX2ZyYWdzKHhkcCkpXG4gXHRcdHNrYi1cdTAwM2VkYXRhX2xlbiA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2V4ZHBfZnJhZ3Nfc2l6ZTtcbiBcdGVsc2VcbiBcdFx0c2tiLVx1MDAzZWRhdGFfbGVuID0gMDtcbiYjNDM7XHRza2ItXHUwMDNlbGVuICYjNDM7PSBza2ItXHUwMDNlZGF0YV9sZW47XG4gXG4gXHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHJxLVx1MDAzZWRldik7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggNTkzM2M1ZGFiMDllZTEuLjk0MjA0NzAyY2IwMjAxIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNTUxNywxMiAmIzQzOzU1MTcsMTQgQEAgdTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbiBcdH1cbiBcbiBcdC8qIFhEUCBmcmFnIG1ldGFkYXRhIChlLmcuIG5yX2ZyYWdzKSBhcmUgdXBkYXRlZCBpbiBlQlBGIGhlbHBlcnNcbi1cdCAqIChlLmcuIGJwZl94ZHBfYWRqdXN0X3RhaWwpLCB3ZSBuZWVkIHRvIHVwZGF0ZSBkYXRhX2xlbiBoZXJlLlxuJiM0MztcdCAqIChlLmcuIGJwZl94ZHBfYWRqdXN0X3RhaWwpLCB1cGRhdGUgc2tiIGxlbmd0aCBmaWVsZHMgaGVyZS5cbiBcdCAqL1xuJiM0MztcdHNrYi1cdTAwM2VsZW4gLT0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuIFx0aWYgKHhkcF9idWZmX2hhc19mcmFncyh4ZHApKVxuIFx0XHRza2ItXHUwMDNlZGF0YV9sZW4gPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNleGRwX2ZyYWdzX3NpemU7XG4gXHRlbHNlXG4gXHRcdHNrYi1cdTAwM2VkYXRhX2xlbiA9IDA7XG4mIzQzO1x0c2tiLVx1MDAzZWxlbiAmIzQzOz0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuIFxuIFx0LyogY2hlY2sgaWYgWERQIGNoYW5nZWQgZXRoIGhkciBzdWNoIFNLQiBuZWVkcyB1cGRhdGUgKi9cbiBcdGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopeGRwLVx1MDAzZWRhdGE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZFVEgmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDssCiAgICAmIzM0O2RvX3hkcF9nZW5lcmljJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBza2ItXHUwMDNlbGVuYCBpcyBub3QgdXBkYXRlZCB3aGVuIGBza2ItXHUwMDNlZGF0YV9sZW5gIGlzIG1vZGlmaWVkIGJ5IFhEUCBmcmFnbWVudHMgaW4gYHZldGhfeGRwX3Jjdl9za2JgIGFuZCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBhbmQgdGhlIHZldGggZHJpdmVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg1MGExM2JkOTVhNjU2OGRiNDA2NTZkZjcxNDZmN2I0YjFmMzljYzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAxNDoyMjo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZldGguYyBiL2RyaXZlcnMvbmV0L3ZldGguYwppbmRleCAwMGUzNGFmZDg1OGU3Mi4uYTk1NjQ5OGEwNzNiZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZldGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC92ZXRoLmMKQEAgLTg3MSwxMiAmIzQzOzg3MSwxNCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZldGhfeGRwX3Jjdl9za2Ioc3RydWN0IHZldGhfcnEgKnJxLAogCQlfX3NrYl9wdXQoc2tiLCBvZmYpOyAvKiBwb3NpdGl2ZSBvbiBncm93LCBuZWdhdGl2ZSBvbiBzaHJpbmsgKi8KIAogCS8qIFhEUCBmcmFnIG1ldGFkYXRhIChlLmcuIG5yX2ZyYWdzKSBhcmUgdXBkYXRlZCBpbiBlQlBGIGhlbHBlcnMKLQkgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKSwgd2UgbmVlZCB0byB1cGRhdGUgZGF0YV9sZW4gaGVyZS4KJiM0MzsJICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCksIHVwZGF0ZSBza2IgbGVuZ3RoIGZpZWxkcyBoZXJlLgogCSAqLwomIzQzOwlza2ItJmd0O2xlbiAtPSBza2ItJmd0O2RhdGFfbGVuOwogCWlmICh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSkKIAkJc2tiLSZndDtkYXRhX2xlbiA9IHNrYl9zaGluZm8oc2tiKS0mZ3Q7eGRwX2ZyYWdzX3NpemU7CiAJZWxzZQogCQlza2ItJmd0O2RhdGFfbGVuID0gMDsKJiM0MzsJc2tiLSZndDtsZW4gJiM0Mzs9IHNrYi0mZ3Q7ZGF0YV9sZW47CiAKIAlza2ItJmd0O3Byb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBycS0mZ3Q7ZGV2KTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCA1OTMzYzVkYWIwOWVlMS4uOTQyMDQ3MDJjYjAyMDEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC01NTE3LDEyICYjNDM7NTUxNywxNCBAQCB1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLAogCX0KIAogCS8qIFhEUCBmcmFnIG1ldGFkYXRhIChlLmcuIG5yX2ZyYWdzKSBhcmUgdXBkYXRlZCBpbiBlQlBGIGhlbHBlcnMKLQkgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKSwgd2UgbmVlZCB0byB1cGRhdGUgZGF0YV9sZW4gaGVyZS4KJiM0MzsJICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCksIHVwZGF0ZSBza2IgbGVuZ3RoIGZpZWxkcyBoZXJlLgogCSAqLwomIzQzOwlza2ItJmd0O2xlbiAtPSBza2ItJmd0O2RhdGFfbGVuOwogCWlmICh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSkKIAkJc2tiLSZndDtkYXRhX2xlbiA9IHNrYl9zaGluZm8oc2tiKS0mZ3Q7eGRwX2ZyYWdzX3NpemU7CiAJZWxzZQogCQlza2ItJmd0O2RhdGFfbGVuID0gMDsKJiM0MzsJc2tiLSZndDtsZW4gJiM0Mzs9IHNrYi0mZ3Q7ZGF0YV9sZW47CiAKIAkvKiBjaGVjayBpZiBYRFAgY2hhbmdlZCBldGggaGRyIHN1Y2ggU0tCIG5lZWRzIHVwZGF0ZSAqLwogCWV0aCA9IChzdHJ1Y3QgZXRoaGRyICopeGRwLSZndDtkYXRhOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWERQIEZyYWdtZW50IExlbmd0aCBVcGRhdGVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L3ZldGguY2AgYW5kIGBuZXQvY29yZS9kZXYuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIFhEUCBmcmFnbWVudHMgYW5kIHRoZSBgc2tiLSZndDtsZW5gIGNhbGN1bGF0aW9uLiBUaGUgY29kZSBzbmlwcGV0IGhpZ2hsaWdodHMgaG93IGBza2ItJmd0O2RhdGFfbGVuYCBpcyBiZWluZyB1cGRhdGVkIGluIHJlc3BvbnNlIHRvIGNoYW5nZXMgbWFkZSBieSBlQlBGIGhlbHBlcnMgbGlrZSBgYnBmX3hkcF9hZGp1c3RfdGFpbGAuIEVzc2VudGlhbGx5LCB0aGUgbG9naWMgYWRqdXN0cyB0aGUgb3ZlcmFsbCBgc2tiLSZndDtsZW5gIHdoZW4gZGVhbGluZyB3aXRoIHRoZXNlIFhEUCBmcmFnbWVudHMuIEl0JiMzOTtzIHN1YnRyYWN0aW5nIHRoZSBvbGQgYHNrYi0mZ3Q7ZGF0YV9sZW5gLCBzZXR0aW5nIGl0IHRvIHRoZSB4ZHAgZnJhZ21lbnQgc2l6ZSBvciAwLCBhbmQgdGhlbiBhZGRpbmcgdGhlIG5ldyBgc2tiLSZndDtkYXRhX2xlbmAuCgpTcGVjaWZpY2FsbHksIHRoaXMgaXMgaGFwcGVuaW5nIHdpdGhpbiB0aGUgYHZldGhfeGRwX3Jjdl9za2JgIGZ1bmN0aW9uIGFuZCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYC4gSSBuZWVkIHRvIHZlcmlmeSBhIGNvdXBsZSBvZiB0aGluZ3MsIGFzIHRoaXMgc29ydCBvZiBjaGFuZ2UgY2FuIGJlIGRlbGljYXRlLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVhY2hhYmlsaXR5IG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgdGhlIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGVuYWJsZSB0aGlzIHBhcnRpY3VsYXIgY29kZSBwYXRoLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O2xsIHNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byBgdmV0aF94ZHBfcmN2X3NrYmAgYW5kIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIHRvIHNlZSB3aGVyZSB0aGV5JiMzOTtyZSBiZWluZyBjYWxsZWQgYW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZXkgYXJlIGFjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZXRoX3hkcF9yY3Zfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdmV0aC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3ZldGguYz03NTE9c3RhdGljIGludCB2ZXRoX2NvbnZlcnRfc2tiX3RvX3hkcF9idWZmKHN0cnVjdCB2ZXRoX3JxICpycSxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtNzg5LVxuZHJpdmVycy9uZXQvdmV0aC5jOjc5MDpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZldGhfeGRwX3Jjdl9za2Ioc3RydWN0IHZldGhfcnEgKnJxLFxuZHJpdmVycy9uZXQvdmV0aC5jLTc5MS1cdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9OTAzPXN0YXRpYyBpbnQgdmV0aF94ZHBfcmN2KHN0cnVjdCB2ZXRoX3JxICpycSwgaW50IGJ1ZGdldCxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtOTM1LVx0XHRcdHN0YXRzLVx1MDAzZXhkcF9ieXRlcyAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbmRyaXZlcnMvbmV0L3ZldGguYzo5MzY6XHRcdFx0c2tiID0gdmV0aF94ZHBfcmN2X3NrYihycSwgc2tiLCBicSwgc3RhdHMpO1xuZHJpdmVycy9uZXQvdmV0aC5jLTkzNy1cdFx0XHRpZiAoc2tiKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZsb3csIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLCBwcmVzZW50ZWQgYXMgeW91ciB0aG91Z2h0IHByb2Nlc3M6CgoqKnZldGggWERQIFBhY2tldCBSZWNlcHRpb246IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgWERQIHByb2Nlc3NpbmcgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSB2ZXRoIGludGVyZmFjZSBjb2RlLCBhbmQgaGVyZSYjMzk7cyB0aGUgZmxvdyBJJiMzOTttIHBpZWNpbmcgdG9nZXRoZXIuIGB2ZXRoX3hkcF9yY3Zfc2tiYCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIG9ubHkgdmlzaWJsZSB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgbGlrZWx5IGludGVybmFsIGhlbHBlciBmdW5jdGlvbi4gSXRzIGpvYiBpcyBoYW5kbGluZyB0aGUgZmluYWwgcHJvY2Vzc2luZyBvZiB0aGUgcmVjZWl2ZWQgU0tCIHdpdGhpbiB0aGUgWERQIGNvbnRleHQuIE5vdywgaG93IGRvZXMgaXQgZ2V0IGNhbGxlZD8gVGhhdCYjMzk7cyB0aGUga2V5LgoKYHZldGhfeGRwX3JjdmAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgKmNhbGxzKiBgdmV0aF94ZHBfcmN2X3NrYmAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgdGhlIFhEUCBsb2dpYyB3aXRoaW4gdGhlIHZldGggZHJpdmVyLiAgQW5kIHdoZXJlIGlzICp0aGF0KiBjYWxsZWQgZnJvbT8gSXQmIzM5O3MgY2FsbGVkIGZyb20gYHZldGhfcG9sbGAsIHdoaWNoIGlzIHRoZSBOZXR3b3JrIEFQSSAoTkFQSSkgcG9sbCBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgZm9yIHRoZSB2ZXRoIGludGVyZmFjZS4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGUgZHJpdmVyIGlzIHVzaW5nIE5BUEkgdG8gZWZmaWNpZW50bHkgcHJvY2VzcyBpbmNvbWluZyBwYWNrZXRzLiBTbywgdGhlIFhEUCBwcm9jZXNzaW5nIGlzIGluaXRpYXRlZCBkdXJpbmcgdGhlIHBvbGwsIHdoaWNoIGhhcHBlbnMgYWZ0ZXIgYSByZWNlaXZlIGludGVycnVwdCBvciBhIHRpbWVvdXQuCgpGaW5hbGx5LCBJIHJlbWVtYmVyIHRoYXQgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXMgd2hlcmUgdGhlIEJQRiBtYWdpYyBhY3R1YWxseSBoYXBwZW5zLiBJdCYjMzk7cyB0aGUgZ2VuZXJpYyBYRFAgZXhlY3V0aW9uIGZ1bmN0aW9uLCBhbmQgSSBrbm93IGZyb20gcHJpb3Igd29yayB0aGF0IGl0JiMzOTtzIGxvY2F0ZWQgaW4gYG5ldC9jb3JlL2Rldi5jYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGxvb2tpbmcgdXAgdGhlIGF0dGFjaGVkIFhEUCBwcm9ncmFtIGFuZCBydW5uaW5nIGl0IGFnYWluc3QgdGhlIGluY29taW5nIHBhY2tldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz01NDM1PXN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlICpuZXRpZl9nZXRfcnhxdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTU0NTctXG5uZXQvY29yZS9kZXYuYzo1NDU4OnUzMiBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXG5uZXQvY29yZS9kZXYuYy01NDU5LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZylcbi0tXG5uZXQvY29yZS9kZXYuYz01NTg4PXN0YXRpYyB1MzIgbmV0aWZfcmVjZWl2ZV9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsXG4tLVxubmV0L2NvcmUvZGV2LmMtNTYxNS1cbm5ldC9jb3JlL2Rldi5jOjU2MTY6XHRhY3QgPSBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoKnBza2IsIHhkcCwgeGRwX3Byb2cpO1xubmV0L2NvcmUvZGV2LmMtNTYxNy1cdHN3aXRjaCAoYWN0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIyNwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBWaXNpYmlsaXR5KioKCkFscmlnaHQsIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGUga2VybmVsIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIFhEUCBmcmFtZXdvcmsuIEkgc2VlIHRoYXQgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXMgcG90ZW50aWFsbHkgZXhwb3NlZCBpbiBgbmV0L2NvcmUvZGV2LmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGludGVuZGVkIHRvIGJlIHVzZWQgZXh0ZXJuYWxseT8gSXMgaXQgdHJ1bHkgZXhwb3J0ZWQsIG9yIGRpZCBpdCBzbGlwIG91dCBhcyBub24tc3RhdGljLCBieSBtaXN0YWtlPyYjMzQ7IFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSBhY2NpZGVudGFsbHkgZXhwb3J0aW5nIHNvbWV0aGluZyBjYW4gaW50cm9kdWNlIGNvbXBhdGliaWxpdHkgaXNzdWVzIGRvd24gdGhlIGxpbmUgYW5kIG1ha2UgbWFpbnRlbmFuY2UgYSBuaWdodG1hcmUuIEl0IGNvdWxkIGFsc28gaGF2ZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIE5vdywgbGV0JiMzOTtzIGNvbmZpcm0gd2hldGhlciBpdCYjMzk7cyB0cnVseSBpbnRlbmRlZCB0byBiZSB2aXNpYmxlIG91dHNpZGUgb2YgdGhlIGZpbGUuIFRpbWUgdG8gY2hlY2sgdGhvc2UgZXhwb3J0IGZsYWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MDAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVidWdnaW5nIGEgTWlzc2luZyBFeHBvcnQqKgoKSG1tLCB0aGlzIGlzIGN1cmlvdXMuIEkgZXhwZWN0ZWQgdG8gZmluZCB0aGlzIGZ1bmN0aW9uIGV4cG9ydGVkLCBidXQgaXQmIzM5O3Mgbm90LiBBbmQgeWV0LCBpdCYjMzk7cyAqbm90KiBzdGF0aWMsIHdoaWNoIGNvbXBsaWNhdGVzIHRoaW5ncyBmdXJ0aGVyLiBUaGF0IHN1Z2dlc3RzIGl0IHNob3VsZCBiZSB2aXNpYmxlIG91dHNpZGUgaXRzIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhlIGxpbmthZ2UgbXVzdCBiZSB0aGUgaXNzdWUuIExldCYjMzk7cyBkaWcgaW50byBpdHMgZGVmaW5pdGlvbi4gVGhlIG1vc3QgbGlrZWx5IHBsYWNlIGZvciBhIGNvcmUgbmV0d29yayBmdW5jdGlvbiBsaWtlIHRoaXMgaXMgYG5ldC9jb3JlL2Rldi5jYC4gSSYjMzk7bGwgZ28gY2hlY2sgdGhhdCBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBpdCwgaW4gdGhlIHNvdXJjZS4gU29tZXRoaW5nIGlzIHdyb25nIHdpdGggdGhlIHdheSBpdCYjMzk7cyBiZWluZyBsaW5rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NDI5Nj1zdGF0aWMgaW5saW5lIHZvaWQgZGV2X2NvbnN1bWVfc2tiX2FueShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDMwMC1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NDMwMTp1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC00MzAyLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NTAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWERQIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGJlaW5nIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhgIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgKmNyaXRpY2FsKiBuZXR3b3JraW5nIGZ1bmN0aW9uLCByaWdodCBhdCB0aGUgaGVhcnQgb2YgdGhpbmdzLiBUaGlzIG1lYW5zIGFueSBjaGFuZ2UgaGVyZSBkZW1hbmRzIHNlcmlvdXMgc2NydXRpbnkuIFRoaXMgcGF0Y2gsIHNwZWNpZmljYWxseSwgYWRkcmVzc2VzIGFuIGlzc3VlIHdoZXJlIGBza2ItJmd0O2xlbmAgaXNuJiMzOTt0IHByb3Blcmx5IHN5bmNlZCB1cCB3aXRoIGBza2ItJmd0O2RhdGFfbGVuYCBjaGFuZ2VzIHRoYXQgaGFwcGVuIGJlY2F1c2Ugb2YgWERQIGZyYWdtZW50IGhhbmRsaW5nLiBUaGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjb3JyZWN0aW9uIGFmZmVjdGluZyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYW5kLCBub3RhYmx5LCB0aGUgdmV0aCBkcml2ZXIuCgpHaXZlbiBpdHMgY29yZSBuYXR1cmUgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSwgY2FzY2FkaW5nIGNvbnNlcXVlbmNlcyBmcm9tIGEgbGVuZ3RoIG1pc21hdGNoIGluIGFuIFNLQiwgdGhpcyBzY3JlYW1zIGZvciBmdXp6aW5nLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBwYWNrZXQgcHJvY2Vzc2luZywgYW5kIHRob3NlIHR5cGVzIG9mIGJ1Z3MgY2FuIGxlYWQgdG8gYWxsIGtpbmRzIG9mIGhhdm9jLgoKTXkgaW1tZWRpYXRlIGZvY3VzIHBvaW50cyBhcmUsIGFzIHN0YXRlZCBpbiB0aGUgcGF0Y2ggZGVzY3JpcHRpb24sIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIG9mIGNvdXJzZSwgYXMgdGhlIGRpcmVjdGx5IGFmZmVjdGVkIGZ1bmN0aW9uLCBhbmQgYHZldGhfeGRwX3JjdmAgc2luY2UgYHZldGhfeGRwX3Jjdl9za2JgIGlzIHN0YXRpYywgd2UmIzM5O2xsIHdhbnQgdG8gZm9jdXMgb24gdGhpcyBmdW5jdGlvbi4gU2luY2UgdGhlIFZFVEggZHJpdmVyIGlzIGNhbGxlZCBvdXQsIHdlJiMzOTtsbCB3YW50IHRvIGVuc3VyZSB0aGF0IGl0IGhhcyBjb3JyZWN0IFhEUCBiZWhhdmlvdXIuCgpOb3csIGxldCBtZSBqdXN0IGNvbmZpcm0gbXkgc3VzcGljaW9ucyBhYm91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkgZXhwZWN0IHRvIGZpbmQgYFZFVEhgLCBuYXR1cmFsbHkuIEnigJlsbCBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYEJQRl9TWVNDQUxMYCBpcyBlbmFibGVkIOKAkyB3ZSBuZWVkIHRoYXQgdG8gZXZlbiAqdXNlKiBYRFAuIEFuZCwgb2YgY291cnNlLCB0aGUgZ2VuZXJhbCBuZXR3b3JraW5nIHN1cHBvcnQgZmxhZywgYE5FVGAsIG5lZWRzIHRvIGJlIHRoZXJlLiBUaW1lIHRvIGp1bXAgb3ZlciB0byBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgYW5kIHZlcmlmeSB0aGF0IHRoZSBgVkVUSGAgb3B0aW9uIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGFuZCBub3QgYWNjaWRlbnRhbGx5IGRpc2FibGVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIG91ciBlbnZpcm9ubWVudCBpcyBzZXR1cCBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZFVEgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9NDIxPWNvbmZpZyBUVU5fVk5FVF9DUk9TU19MRVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctNDM0LVxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MzU6Y29uZmlnIFZFVEhcbmRyaXZlcnMvbmV0L0tjb25maWctNDM2LVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBldGhlcm5ldCBwYWlyIGRldmljZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTQ1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgQ29uZmlndXJhdGlvbiBpbiBgbmV0L2NvcmUvZGV2LmNgKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBNeSBndXQgdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgc29tZSBudWFuY2VkIGNvbmZpZ3VyYXRpb24gaW5mbHVlbmNpbmcgdGhlIGJlaGF2aW9yIG9mIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0lzIHRoZXJlIGFueXRoaW5nIHNwZWNpZmljIGluIGBuZXQvY29yZS9kZXYuY2AgcmVsYXRlZCB0byBpdD8mIzM0OyBUaGlzIGlzIHRoZSBrZXJuZWwmIzM5O3MgY29yZSBuZXR3b3JrIGRldmljZSBjb2RlLCBzbyBpdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBJJiMzOTttIHByaW1hcmlseSBsb29raW5nIGZvciBhbnkgY29uZGl0aW9uYWwgbG9naWMsIGZsYWdzLCBvciBwYXJhbWV0ZXJzIHRoYXQgbWlnaHQgc3VidGx5IGFsdGVyIGhvdyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyBjYWxsZWQgb3Igd2hhdCBpdCBkb2VzIHVuZGVyIHRoZSBob29kLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBmb3IgWERQIHByb2dyYW1zLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBlbnZpcm9ubWVudCBpcyBjcml0aWNhbCBmb3IgZGVidWdnaW5nIG9yIG9wdGltaXppbmcuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLi4uIEkgc3VzcGVjdCB0aGVyZSBjb3VsZCBiZSBzb21lIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9NTQzNT1zdGF0aWMgc3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqbmV0aWZfZ2V0X3J4cXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9kZXYuYy01NDU3LVxubmV0L2NvcmUvZGV2LmM6NTQ1ODp1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxubmV0L2NvcmUvZGV2LmMtNTQ1OS1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2cpXG4tLVxubmV0L2NvcmUvZGV2LmM9NTU4OD1zdGF0aWMgdTMyIG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTU2MTUtXG5uZXQvY29yZS9kZXYuYzo1NjE2Olx0YWN0ID0gYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKCpwc2tiLCB4ZHAsIHhkcF9wcm9nKTtcbm5ldC9jb3JlL2Rldi5jLTU2MTctXHRzd2l0Y2ggKGFjdCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDg2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBDb25kaXRpb25hbCBDb21waWxhdGlvbioqCgpBbHJpZ2h0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgYWx3YXlzIHRvIHF1aWNrbHkgYXNzZXNzIGlmIHRoaXMgc2VjdGlvbiBvZiBjb2RlIGlzIHBvdGVudGlhbGx5IGdvdmVybmVkIGJ5IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBnb2luZyB0byBjaGVjayBmb3IgaXMgYW4gYCNpZmRlZmAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBzdXJyb3VuZGluZyB0aGUgcmVsZXZhbnQgY29kZS4gSXMgaXQgbmVzdGxlZCB3aXRoaW4gYW55IG9mIHRob3NlPyBUaGF0JiMzOTtzIGEgY3JpdGljYWwgZmlyc3QgZmlsdGVyLiBJdCBjb3VsZCBiZSB0aGF0IHRoaXMgYmVoYXZpb3IgaXMgb25seSBlbmFibGVkLCBvciBkaXNhYmxlZCwgZGVwZW5kaW5nIG9uIGEgcGFydGljdWxhciBidWlsZCBjb25maWd1cmF0aW9uLCB0YXJnZXQgcGxhdGZvcm0sIG9yIGZlYXR1cmUgZmxhZy4gVGhhdCBzaW5nbGUgY2hlY2sgY291bGQgZXhwbGFpbiBldmVyeXRoaW5nLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU0NTA6XHRcbjU0NTE6XHRcdFx0XHRyZXR1cm4gcnhxdWV1ZTsgLyogUmV0dXJuIGZpcnN0IHJ4cXVldWUgKi9cbjU0NTI6XHRcdFx0fVxuNTQ1MzpcdFx0XHRyeHF1ZXVlICYjNDM7PSBpbmRleDtcbjU0NTQ6XHRcdH1cbjU0NTU6XHRcdHJldHVybiByeHF1ZXVlO1xuNTQ1NjpcdH1cbjU0NTc6XHRcbjU0NTg6XHR1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuNTQ1OTpcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZylcbjU0NjA6XHR7XG41NDYxOlx0XHR2b2lkICpvcmlnX2RhdGEsICpvcmlnX2RhdGFfZW5kLCAqaGFyZF9zdGFydDtcbjU0NjI6XHRcdHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKnJ4cXVldWU7XG41NDYzOlx0XHRib29sIG9yaWdfYmNhc3QsIG9yaWdfaG9zdDtcbjU0NjQ6XHRcdHUzMiBtYWNfbGVuLCBmcmFtZV9zejtcbjU0NjU6XHRcdF9fYmUxNiBvcmlnX2V0aF90eXBlO1xuNTQ2NjpcdFx0c3RydWN0IGV0aGhkciAqZXRoO1xuNTQ2NzpcdFx0dTMyIG1ldGFsZW4sIGFjdDtcbjU0Njg6XHRcdGludCBvZmY7XG41NDY5Olx0XG41NDcwOlx0XHQvKiBUaGUgWERQIHByb2dyYW0gd2FudHMgdG8gc2VlIHRoZSBwYWNrZXQgc3RhcnRpbmcgYXQgdGhlIE1BQ1xuNTQ3MTpcdFx0ICogaGVhZGVyLlxuNTQ3MjpcdFx0ICovXG41NDczOlx0XHRtYWNfbGVuID0gc2tiLVx1MDAzZWRhdGEgLSBza2JfbWFjX2hlYWRlcihza2IpO1xuNTQ3NDpcdFx0aGFyZF9zdGFydCA9IHNrYi1cdTAwM2VkYXRhIC0gc2tiX2hlYWRyb29tKHNrYik7XG41NDc1Olx0XG41NDc2Olx0XHQvKiBTS0IgXCYjMzQ7aGVhZFwmIzM0OyBhcmVhIGFsd2F5cyBoYXZlIHRhaWxyb29tIGZvciBza2Jfc2hhcmVkX2luZm8gKi9cbjU0Nzc6XHRcdGZyYW1lX3N6ID0gKHZvaWQgKilza2JfZW5kX3BvaW50ZXIoc2tiKSAtIGhhcmRfc3RhcnQ7XG41NDc4Olx0XHRmcmFtZV9zeiAmIzQzOz0gU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKTtcbjU0Nzk6XHRcbjU0ODA6XHRcdHJ4cXVldWUgPSBuZXRpZl9nZXRfcnhxdWV1ZShza2IpO1xuNTQ4MTpcdFx0eGRwX2luaXRfYnVmZih4ZHAsIGZyYW1lX3N6LCBcdTAwMjZyeHF1ZXVlLVx1MDAzZXhkcF9yeHEpO1xuNTQ4MjpcdFx0eGRwX3ByZXBhcmVfYnVmZih4ZHAsIGhhcmRfc3RhcnQsIHNrYl9oZWFkcm9vbShza2IpIC0gbWFjX2xlbixcbjU0ODM6XHRcdFx0XHQgc2tiX2hlYWRsZW4oc2tiKSAmIzQzOyBtYWNfbGVuLCB0cnVlKTtcbjU0ODQ6XHRcdGlmIChza2JfaXNfbm9ubGluZWFyKHNrYikpIHtcbjU0ODU6XHRcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZXhkcF9mcmFnc19zaXplID0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuNTQ4NjpcdFx0XHR4ZHBfYnVmZl9zZXRfZnJhZ3NfZmxhZyh4ZHApO1xuNTQ4NzpcdFx0fSBlbHNlIHtcbjU0ODg6XHRcdFx0eGRwX2J1ZmZfY2xlYXJfZnJhZ3NfZmxhZyh4ZHApO1xuNTQ4OTpcdFx0fVxuNTQ5MDpcdFxuNTQ5MTpcdFx0b3JpZ19kYXRhX2VuZCA9IHhkcC1cdTAwM2VkYXRhX2VuZDtcbjU0OTI6XHRcdG9yaWdfZGF0YSA9IHhkcC1cdTAwM2VkYXRhO1xuNTQ5MzpcdFx0ZXRoID0gKHN0cnVjdCBldGhoZHIgKil4ZHAtXHUwMDNlZGF0YTtcbjU0OTQ6XHRcdG9yaWdfaG9zdCA9IGV0aGVyX2FkZHJfZXF1YWxfNjRiaXRzKGV0aC1cdTAwM2VoX2Rlc3QsIHNrYi1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuNTQ5NTpcdFx0b3JpZ19iY2FzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyXzY0Yml0cyhldGgtXHUwMDNlaF9kZXN0KTtcbjU0OTY6XHRcdG9yaWdfZXRoX3R5cGUgPSBldGgtXHUwMDNlaF9wcm90bztcbjU0OTc6XHRcbjU0OTg6XHRcdGFjdCA9IGJwZl9wcm9nX3J1bl94ZHAoeGRwX3Byb2csIHhkcCk7XG41NDk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNjIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBDb25kaXRpb25hbCBDb21waWxhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoeSB0aGlzIGNvZGUgaXNuJiMzOTt0IGJlaW5nIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkuIEZpcnN0LCBJIGNoZWNrZWQgYG5ldC9jb3JlL2Rldi5jYCBhbmQgZGlkbiYjMzk7dCBzZWUgYW55IGAjaWZkZWZgIGRpcmVjdGl2ZXMgdGhhdCBtaWdodCBiZSBpbXBhY3RpbmcgaXQgdGhlcmUuIEhtbS4gVGhlbiBJIHJlbWVtYmVyZWQgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAuIElzIHRoYXQgcGFydCBvZiBpdD8gVGhlIHRoaW5nIGlzLCBpdCYjMzk7cyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHkgYXMgbG9uZyBhcyBgQ09ORklHX05FVGAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgcHJldHR5IGJyb2FkLiBUaGF0IGRvZXNuJiMzOTt0IHNlZW0gdG8gbmFycm93IGl0IGRvd24gZW5vdWdoLiBMZXQmIzM5O3Mgc2VlLi4uIFdhaXQgYSBzZWNvbmQsIHRoZSBgYnBmX3Byb2dfcnVuX3hkcGAgZnVuY3Rpb24gaXRzZWxmIGlzIGFjdHVhbGx5IGRlZmluZWQgaW4gYW4gaW5jbHVkZSBmaWxlLiBJdCYjMzk7cyBpbiBzb21ldGhpbmcgbGlrZSBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAuIE9rYXksIHNvIHdoZXJlIHRoYXQgaXMgZGVmaW5lZCBpc24mIzM5O3QgdGhlIHByb2JsZW0uIExldCYjMzk7cyBwaXZvdCBhbmQgbG9vayBhdCB0aGUgYFZFVEhgIGRlcGVuZGVuY2llcyB0byBzZWUgaWYgc29tZXRoaW5nIHRoZXJlIGlzIGJsb2NraW5nIGl0LiBUaGF0IHNlZW1zIGxpa2UgYSBtb3JlIHByb21pc2luZyBhdmVudWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTQyMT1jb25maWcgVFVOX1ZORVRfQ1JPU1NfTEVcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNC1cbmRyaXZlcnMvbmV0L0tjb25maWc6NDM1OmNvbmZpZyBWRVRIXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNi1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgZXRoZXJuZXQgcGFpciBkZXZpY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU3NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgTmV0IERyaXZlcnMgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gc29tZXRoaW5nIG5ldHdvcmstcmVsYXRlZCwgYW5kIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIHBhcnRpY3VsYXIgc2V0IG9mIGRyaXZlcnMsIHNvIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gYGRyaXZlcnMvbmV0L0tjb25maWdgLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBpdHMgbmV0d29yayBmZWF0dXJlcywgYW5kIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBLY29uZmlnIGZpbGVzIGFyZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFzcGVjdHMuIExpbmUgNDM1Li4uIHRoYXQmIzM5O3MgcHJvYmFibHkgd2hlcmUgYSBzcGVjaWZpYyBzZXQgb2Ygb3B0aW9ucyBvciBhIHJlbGV2YW50IG1lbnUgZW50cnkgcmVsYXRlZCB0byB0aGUgZHJpdmVycyBJJiMzOTttIGludGVyZXN0ZWQgaW4gc3RhcnRzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDMwOlx0XHQgIGFuZCBUVU5HRVRWTkVUQkUgaW9jdGxzLlxuIDQzMTpcdFxuIDQzMjpcdFx0ICBVbmxlc3MgeW91IGhhdmUgYSBsaXR0bGUtZW5kaWFuIHN5c3RlbSBob3N0aW5nIGEgYmlnLWVuZGlhbiB2aXJ0dWFsXG4gNDMzOlx0XHQgIG1hY2hpbmUgd2l0aCBhIGxlZ2FjeSB2aXJ0aW8gTklDLCB5b3Ugc2hvdWxkIHNheSBOLlxuIDQzNDpcdFxuIDQzNTpcdGNvbmZpZyBWRVRIXG4gNDM2Olx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIGV0aGVybmV0IHBhaXIgZGV2aWNlXCYjMzQ7XG4gNDM3Olx0XHRzZWxlY3QgUEFHRV9QT09MXG4gNDM4Olx0XHRoZWxwXG4gNDM5Olx0XHQgIFRoaXMgZGV2aWNlIGlzIGEgbG9jYWwgZXRoZXJuZXQgdHVubmVsLiBEZXZpY2VzIGFyZSBjcmVhdGVkIGluIHBhaXJzLlxuIDQ0MDpcdFx0ICBXaGVuIG9uZSBlbmQgcmVjZWl2ZXMgdGhlIHBhY2tldCBpdCBhcHBlYXJzIG9uIGl0cyBwYWlyIGFuZCB2aWNlXG4gNDQxOlx0XHQgIHZlcnNhLlxuIDQ0MjpcdFxuIDQ0MzpcdGNvbmZpZyBWSVJUSU9fTkVUXG4gNDQ0Olx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0aW8gbmV0d29yayBkcml2ZXJcJiMzNDtcbiA0NDU6XHRcdGRlcGVuZHMgb24gVklSVElPXG4gNDQ2Olx0XHRzZWxlY3QgTkVUX0ZBSUxPVkVSXG4gNDQ3Olx0XHRzZWxlY3QgRElNTElCXG4gNDQ4Olx0XHRzZWxlY3QgUEFHRV9QT09MXG4gNDQ5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFZFVEggWERQIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgYFZFVEhgIHBhdGNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IG5vIGhpZGRlbiBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2Qgc3RhcnQuIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGlzIHRvIGB2ZXRoX3hkcF9yY3Zfc2tiYCwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgY2FsbGVkIGJ5IGB2ZXRoX3hkcF9yY3ZgLiBOYXR1cmFsbHksIGB2ZXRoX3hkcF9yY3ZgIGhhbmRsZXMgdGhlIHByb2Nlc3Npbmcgb2YgWERQIHBhY2tldHMgc3BlY2lmaWNhbGx5IG9uIHRoZSB2ZXRoIGludGVyZmFjZS4gSXQgYWxsIHNlZW1zIGxvZ2ljYWwgc28gZmFyLiBUaGUga2V5IGZ1bmN0aW9uIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGlzIGFsc28gaW4gdGhlIG1peCwgYXMgZXhwZWN0ZWQsIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBydW5uaW5nIGdlbmVyaWMgWERQIHByb2dyYW1zIG9uIGFueSBuZXR3b3JrIGRldmljZS4KCkVzc2VudGlhbGx5LCB0aGVzZSBhcmUgZnVuY3Rpb25hbCBpbXByb3ZlbWVudHMgdGhhdCBhZGRyZXNzIGFuIGlzc3VlIHJlbGF0ZWQgdG8gYHNrYi0mZ3Q7bGVuYCB3aGVuIGBza2ItJmd0O2RhdGFfbGVuYCBnZXRzIG1vZGlmaWVkIGJlY2F1c2Ugb2YgWERQIGZyYWdtZW50cy4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGFuIGVkZ2UgY2FzZSBvciBwb3RlbnRpYWwgc291cmNlIG9mIGluY29ycmVjdCBwYWNrZXQgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiBmcmFnbWVudGVkIFhEUCBzY2VuYXJpb3MuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBpZiBgdmV0aF94ZHBfcmN2YCBpcyBzdGF0aWMuIFRoYXQgd291bGQgYmUgdXNlZnVsIGluZm9ybWF0aW9uIHRvIGhhdmUgZm9yIGNvbXBsZXRlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZldGhfeGRwX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3ZldGguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92ZXRoLmM9NjIyPXN0YXRpYyBpbnQgdmV0aF94ZHBfdHgoc3RydWN0IHZldGhfcnEgKnJxLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtNjM3LVxuZHJpdmVycy9uZXQvdmV0aC5jOjYzODpzdGF0aWMgc3RydWN0IHhkcF9mcmFtZSAqdmV0aF94ZHBfcmN2X29uZShzdHJ1Y3QgdmV0aF9ycSAqcnEsXG5kcml2ZXJzL25ldC92ZXRoLmMtNjM5LVx0XHRcdFx0XHQgIHN0cnVjdCB4ZHBfZnJhbWUgKmZyYW1lLFxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy03MDgtLyogZnJhbWVzIGFycmF5IGNvbnRhaW5zIFZFVEhfWERQX0JBVENIIGF0IG1vc3QgKi9cbmRyaXZlcnMvbmV0L3ZldGguYzo3MDk6c3RhdGljIHZvaWQgdmV0aF94ZHBfcmN2X2J1bGtfc2tiKHN0cnVjdCB2ZXRoX3JxICpycSwgdm9pZCAqKmZyYW1lcyxcbmRyaXZlcnMvbmV0L3ZldGguYy03MTAtXHRcdFx0XHQgIGludCBuX3hkcGYsIHN0cnVjdCB2ZXRoX3hkcF90eF9icSAqYnEsXG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jPTc1MT1zdGF0aWMgaW50IHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmYoc3RydWN0IHZldGhfcnEgKnJxLFxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy03ODktXG5kcml2ZXJzL25ldC92ZXRoLmM6NzkwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmV0aF94ZHBfcmN2X3NrYihzdHJ1Y3QgdmV0aF9ycSAqcnEsXG5kcml2ZXJzL25ldC92ZXRoLmMtNzkxLVx0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy05MDItXG5kcml2ZXJzL25ldC92ZXRoLmM6OTAzOnN0YXRpYyBpbnQgdmV0aF94ZHBfcmN2KHN0cnVjdCB2ZXRoX3JxICpycSwgaW50IGJ1ZGdldCxcbmRyaXZlcnMvbmV0L3ZldGguYy05MDQtXHRcdFx0c3RydWN0IHZldGhfeGRwX3R4X2JxICpicSxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtOTIwLVx0XHRcdHN0YXRzLVx1MDAzZXhkcF9ieXRlcyAmIzQzOz0geGRwX2dldF9mcmFtZV9sZW4oZnJhbWUpO1xuZHJpdmVycy9uZXQvdmV0aC5jOjkyMTpcdFx0XHRmcmFtZSA9IHZldGhfeGRwX3Jjdl9vbmUocnEsIGZyYW1lLCBicSwgc3RhdHMpO1xuZHJpdmVycy9uZXQvdmV0aC5jLTkyMi1cdFx0XHRpZiAoZnJhbWUpIHtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtOTI1LVx0XHRcdFx0aWYgKG5feGRwZiA9PSBWRVRIX1hEUF9CQVRDSCkge1xuZHJpdmVycy9uZXQvdmV0aC5jOjkyNjpcdFx0XHRcdFx0dmV0aF94ZHBfcmN2X2J1bGtfc2tiKHJxLCB4ZHBmLCBuX3hkcGYsXG5kcml2ZXJzL25ldC92ZXRoLmMtOTI3LVx0XHRcdFx0XHRcdFx0ICAgICAgYnEsIHN0YXRzKTtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtOTM1LVx0XHRcdHN0YXRzLVx1MDAzZXhkcF9ieXRlcyAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbmRyaXZlcnMvbmV0L3ZldGguYzo5MzY6XHRcdFx0c2tiID0gdmV0aF94ZHBfcmN2X3NrYihycSwgc2tiLCBicSwgc3RhdHMpO1xuZHJpdmVycy9uZXQvdmV0aC5jLTkzNy1cdFx0XHRpZiAoc2tiKSB7XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTk0Ny1cdGlmIChuX3hkcGYpXG5kcml2ZXJzL25ldC92ZXRoLmM6OTQ4Olx0XHR2ZXRoX3hkcF9yY3ZfYnVsa19za2IocnEsIHhkcGYsIG5feGRwZiwgYnEsIHN0YXRzKTtcbmRyaXZlcnMvbmV0L3ZldGguYy05NDktXG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jPTk2MT1zdGF0aWMgaW50IHZldGhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTk4MC1cdHhkcF9zZXRfcmV0dXJuX2ZyYW1lX25vX2RpcmVjdCgpO1xuZHJpdmVycy9uZXQvdmV0aC5jOjk4MTpcdGRvbmUgPSB2ZXRoX3hkcF9yY3YocnEsIGJ1ZGdldCwgXHUwMDI2YnEsIFx1MDAyNnN0YXRzKTtcbmRyaXZlcnMvbmV0L3ZldGguYy05ODItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzOTAKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWx2aW5nIGludG8gdGhlIFZldGggRHJpdmVyJiMzOTtzIFN0cnVjdHVyZSoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHZldGggZHJpdmVyIGNvZGUsIHNwZWNpZmljYWxseSBhdCBob3cgaXQgaGFuZGxlcyBYRFAgcmVjZWl2ZS4gSSYjMzk7bSBub3RpY2luZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIEFsbCB0aGUgYHZldGhfeGRwX3JjdipgIGZ1bmN0aW9ucywgYWxsIHRoZSBvbmVzIGhhbmRsaW5nIHRoZSBYRFAgcmVjZWl2ZSBwYXRoLCBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQmIzM5O3MgYSBjb21tb24gcHJhY3RpY2UgZm9yIGludGVybmFsIGZ1bmN0aW9ucywgYnV0IGl0JiMzOTtzIGEgZGV0YWlsIHdvcnRoIG5vdGluZy4KCkFoLCBoZXJlJiMzOTtzIHRoZSBlbnRyeSBwb2ludDogYHZldGhfcG9sbGAuIFRoaXMgaXMgdGhlIE5BUEkgcG9sbCBmdW5jdGlvbiwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIGl0JiMzOTtzIHRoZSBnYXRld2F5IGZvciByZWNlaXZpbmcgcGFja2V0cy4KCldhaXQgYSBzZWNvbmQuLi4gYHZldGhfcG9sbGAgaXMgYWxzbyBkZWNsYXJlZCBhcyBgc3RhdGljYCEgVGhhdCYjMzk7cyB1bmV4cGVjdGVkLiBTbywgaXQmIzM5O3MgcmVnaXN0ZXJlZCBhcyB0aGUgTkFQSSBwb2xsIGZ1bmN0aW9uLCB5ZXQgaXQmIzM5O3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgYHZldGguY2AgZmlsZS4gVGhpcyBzdWdnZXN0cyBhIHZlcnkgbG9jYWxpemVkIGFyY2hpdGVjdHVyZSwgd2hlcmUgdGhlIHZldGggZHJpdmVyIHRpZ2h0bHkgY29udHJvbHMgaXRzIG93biByZWNlaXZlIHBhdGguIEhtbSwgdGhhdCYjMzk7cyBub3Qgd2hhdCBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQsIGJ1dCBpdCBkb2VzIG1lYW4gdGhhdCB0aGlzIGZpbGUsIGFuZCB0aGVyZWZvcmUgdGhlIFZFVEggbW9kdWxlLCBpcyBtb3N0bHkgc2VsZiBjb250YWluZWQuCgpTbywgbm93IEkmIzM5O20gdGhpbmtpbmcsIGlzIHRoZXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb24gaW4gYHZldGguY2A/IE90aGVyIHRoYW4gdGhlIG9idmlvdXMgaW5pdGlhbGl6YXRpb24gYW5kIG1vZHVsZSBlbnRyeSBwb2ludHMsIHdoYXQgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBleHBvc2VkPyBUaGlzIGlzb2xhdGlvbiBpcyBpbnRyaWd1aW5nIGFuZCBzdWdnZXN0cyBhIHNwZWNpZmljIGRlc2lnbiBwaGlsb3NvcGh5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSogdmV0aF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92ZXRoLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdmV0aC5jLTQyLVxuZHJpdmVycy9uZXQvdmV0aC5jOjQzOnN0cnVjdCB2ZXRoX3N0YXRzIHtcbmRyaXZlcnMvbmV0L3ZldGguYy00NC1cdHU2NFx0cnhfZHJvcHM7XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTU1LVxuZHJpdmVycy9uZXQvdmV0aC5jOjU2OnN0cnVjdCB2ZXRoX3JxX3N0YXRzIHtcbmRyaXZlcnMvbmV0L3ZldGguYy01Ny1cdHN0cnVjdCB2ZXRoX3N0YXRzXHR2cztcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtNjAtXG5kcml2ZXJzL25ldC92ZXRoLmM6NjE6c3RydWN0IHZldGhfcnEge1xuZHJpdmVycy9uZXQvdmV0aC5jLTYyLVx0c3RydWN0IG5hcGlfc3RydWN0XHR4ZHBfbmFwaTtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtNzMtXG5kcml2ZXJzL25ldC92ZXRoLmM6NzQ6c3RydWN0IHZldGhfcHJpdiB7XG5kcml2ZXJzL25ldC92ZXRoLmMtNzUtXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdVx0KnBlZXI7XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTgxLVxuZHJpdmVycy9uZXQvdmV0aC5jOjgyOnN0cnVjdCB2ZXRoX3hkcF90eF9icSB7XG5kcml2ZXJzL25ldC92ZXRoLmMtODMtXHRzdHJ1Y3QgeGRwX2ZyYW1lICpxW1ZFVEhfWERQX1RYX0JVTEtfU0laRV07XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTkwLVxuZHJpdmVycy9uZXQvdmV0aC5jOjkxOnN0cnVjdCB2ZXRoX3Ffc3RhdF9kZXNjIHtcbmRyaXZlcnMvbmV0L3ZldGguYy05Mi1cdGNoYXJcdGRlc2NbRVRIX0dTVFJJTkdfTEVOXTtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9MTE3PXN0YXRpYyBzdHJ1Y3Qge1xuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy0xMjItXG5kcml2ZXJzL25ldC92ZXRoLmM6MTIzOnN0cnVjdCB2ZXRoX3hkcF9idWZmIHtcbmRyaXZlcnMvbmV0L3ZldGguYy0xMjQtXHRzdHJ1Y3QgeGRwX2J1ZmYgeGRwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI3MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlJldmlzZWQgUmVnZXggQ29uc2lkZXJhdGlvbnMqKgoKSG1tLCBJIHRoaW5rIEkganVtcGVkIHRoZSBndW4gdGhlcmUgd2l0aCB0aGF0IGluaXRpYWwgcmVnZXguIE9uIHNlY29uZCB0aG91Z2h0LCB0aGF0JiMzOTtzIHByb2JhYmx5IHRvbyBicm9hZC4gSSBuZWVkIHNvbWV0aGluZyBtb3JlIHRhcmdldGVkIGZvciB0aG9zZSBgdmV0aF9gIGZ1bmN0aW9uIG5hbWVzLiBPa2F5LCBzbyBJIHNob3VsZCByZWZpbmUgaXQuIExldCYjMzk7cyB0cnkgdG8gZm9jdXMgb24gdGhlIGxpa2VseSByZXR1cm4gdHlwZXMgSSYjMzk7ZCBzZWUgaW4gdGhpcyBjb250ZXh0LiBSYXRoZXIgdGhhbiBtYXRjaGluZyBhbnl0aGluZywgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzdHJpY3RlciBhcHByb2FjaC4gSSYjMzk7bSB0aGlua2luZyBzb21ldGhpbmcgdGhhdCBzcGVjaWZpY2FsbHkgbG9va3MgZm9yIGVpdGhlciBgaW50IHZldGhfYCBvciBgdm9pZCB2ZXRoX2AgYXMgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLiBUaGF0IHNob3VsZCBuYXJyb3cgaXQgZG93biBjb25zaWRlcmFibHkgYW5kIGdpdmUgbWUgYSBjbGVhbmVyLCBtb3JlIGZvY3VzZWQgc2V0IG9mIHJlc3VsdHMuIExldCYjMzk7cyBzZWUgaWYgdGhvc2UgZXhwcmVzc2lvbnMsIGBeaW50IHZldGhfYCBvciBgXnZvaWQgdmV0aF9gLCB3b3JrIGFzIGV4cGVjdGVkIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LiBJJiMzOTtsbCBuZWVkIHRvIHRlc3QgYW5kIHZhbGlkYXRlIHRoZW0gdGhvcm91Z2hseSwgb2YgY291cnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHZvaWR8c3RydWN0IHNrX2J1ZmYgXFwqKSB2ZXRoXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3ZldGguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTU1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVmV0aCBEcml2ZXIgZm9yIEJQRiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBiYXNlZCBvbiB3aGF0IEkmIzM5O20gc2VlaW5nLCB0aG9zZSBgdmV0aF8uLi5gIGZ1bmN0aW9ucyBhcmUgKmxpa2VseSogZGVjbGFyZWQgYXMgYHN0YXRpYyBpbnRgIHdpdGhpbiB0aGUgVmV0aCBkcml2ZXIuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBhcyB0aGUgY29yZSBzeW1ib2wgdG8gbG9vayBhdCwgYXMgaXQmIzM5O3MgYSBrbm93biBCUEYgZW50cnkgcG9pbnQuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgVmV0aCBkcml2ZXIgaW50ZXJmYWNlcyB3aXRoIHRoYXQuIFBlcmhhcHMgYHZldGhfeG1pdGAgb3IgYHZldGhfcG9sbGAgYXJlIHBvdGVudGlhbCBob29rcyBpZiB0aGV5JiMzOTtyZSBleHBvcnRlZCBvciB3ZXJlbiYjMzk7dCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gRGFtbiwgbG9va3MgbGlrZSBgdmV0aF94bWl0YCBpcyAqYWxzbyogc3RhdGljLiBJIGtuZXcgdGhhdCBzZWVtZWQgdG9vIGVhc3kuIFRoYXQmIzM5O3MgYSBiaXQgb2YgYSByb2FkYmxvY2suIEFoLCByaWdodCwgaXQmIzM5O3MgcmVnaXN0ZXJlZCBpbiBgbmV0X2RldmljZV9vcHNgLCB0aGF0JiMzOTtzIHRoZSBrZXkuIE9rYXksIEkgbmVlZCB0byBjaGVjayB0aGUgYG5ldF9kZXZpY2Vfb3BzYCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgd2l0aGluIGB2ZXRoLmNgIHRvIHNlZSBob3cgdGhvc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXRpbGl6ZWQgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSB3YXkgdG8gaW50ZXJhY3Qgd2l0aCB0aGVtIHZpYSBCUEYgaG9va3MuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZldGhfbmV0ZGV2X29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3ZldGguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92ZXRoLmM9MTY4Nz1zdGF0aWMgaW50IHZldGhfeGRwX3J4X3ZsYW5fdGFnKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKmN0eCwgX19iZTE2ICp2bGFuX3Byb3RvLFxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy0xNzA0LVxuZHJpdmVycy9uZXQvdmV0aC5jOjE3MDU6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2ZXRoX25ldGRldl9vcHMgPSB7XG5kcml2ZXJzL25ldC92ZXRoLmMtMTcwNi1cdC5uZG9faW5pdCAgICAgICAgICAgID0gdmV0aF9kZXZfaW5pdCxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9MTczOD1zdGF0aWMgdm9pZCB2ZXRoX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTE3NDgtXG5kcml2ZXJzL25ldC92ZXRoLmM6MTc0OTpcdGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2dmV0aF9uZXRkZXZfb3BzO1xuZHJpdmVycy9uZXQvdmV0aC5jLTE3NTAtXHRkZXYtXHUwMDNleGRwX21ldGFkYXRhX29wcyA9IFx1MDAyNnZldGhfeGRwX21ldGFkYXRhX29wcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYHZldGhfbmV0ZGV2X29wc2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhlc2UgdmlydHVhbCBFdGhlcm5ldCBpbnRlcmZhY2VzLCBzcGVjaWZpY2FsbHksIHRoZSBiZWhhdmlvciBkZWZpbmVkIGJ5IGB2ZXRoX25ldGRldl9vcHNgLiBJJiMzOTttIHN0YXJ0aW5nIGZyb20gc2NyYXRjaCBoZXJlLCBhbmQgSSB3YW50IHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFNvLCBteSBmaXJzdCB0aG91Z2h0IGlzLCB3aGF0ICpleGFjdGx5KiBhcmUgdGhlIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdHJ1Y3R1cmU/IEtub3dpbmcgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiBgdmV0aF9uZXRkZXZfb3BzYCB3aWxsIGdpdmUgbWUgYSBjbGVhciBvdmVydmlldyBvZiBob3cgdGhlIHZpcnR1YWwgRXRoZXJuZXQgZGV2aWNlIGJlaGF2ZXMuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUga2V5IG9wZXJhdGlvbnMgYW5kIGVudHJ5IHBvaW50cy4gSSBuZWVkIHRvIGtub3cgdGhlIG1ldGhvZHMgcmVsYXRlZCB0byB0aGluZ3MgbGlrZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24sIGNvbmZpZ3VyYXRpb24sIGFuZCBzdGF0ZSBjaGFuZ2VzLiBHZXR0aW5nIGEgbGlzdCBvZiB0aG9zZSBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIHRoZSBidWlsZGluZyBibG9ja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdmV0aC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzA1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2ZXRoX25ldGRldl9vcHMgPSB7XG4xNzA2Olx0XHQubmRvX2luaXQgICAgICAgICAgICA9IHZldGhfZGV2X2luaXQsXG4xNzA3Olx0XHQubmRvX29wZW4gICAgICAgICAgICA9IHZldGhfb3BlbixcbjE3MDg6XHRcdC5uZG9fc3RvcCAgICAgICAgICAgID0gdmV0aF9jbG9zZSxcbjE3MDk6XHRcdC5uZG9fc3RhcnRfeG1pdCAgICAgID0gdmV0aF94bWl0LFxuMTcxMDpcdFx0Lm5kb19nZXRfc3RhdHM2NCAgICAgPSB2ZXRoX2dldF9zdGF0czY0LFxuMTcxMTpcdFx0Lm5kb19zZXRfcnhfbW9kZSAgICAgPSB2ZXRoX3NldF9tdWx0aWNhc3RfbGlzdCxcbjE3MTI6XHRcdC5uZG9fc2V0X21hY19hZGRyZXNzID0gZXRoX21hY19hZGRyLFxuMTcxMzpcdCNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxuMTcxNDpcdFx0Lm5kb19wb2xsX2NvbnRyb2xsZXJcdD0gdmV0aF9wb2xsX2NvbnRyb2xsZXIsXG4xNzE1Olx0I2VuZGlmXG4xNzE2Olx0XHQubmRvX2dldF9pZmxpbmtcdFx0PSB2ZXRoX2dldF9pZmxpbmssXG4xNzE3Olx0XHQubmRvX2ZpeF9mZWF0dXJlc1x0PSB2ZXRoX2ZpeF9mZWF0dXJlcyxcbjE3MTg6XHRcdC5uZG9fc2V0X2ZlYXR1cmVzXHQ9IHZldGhfc2V0X2ZlYXR1cmVzLFxuMTcxOTpcdFx0Lm5kb19mZWF0dXJlc19jaGVja1x0PSBwYXNzdGhydV9mZWF0dXJlc19jaGVjayxcbjE3MjA6XHRcdC5uZG9fc2V0X3J4X2hlYWRyb29tXHQ9IHZldGhfc2V0X3J4X2hlYWRyb29tLFxuMTcyMTpcdFx0Lm5kb19icGZcdFx0PSB2ZXRoX3hkcCxcbjE3MjI6XHRcdC5uZG9feGRwX3htaXRcdFx0PSB2ZXRoX25kb194ZHBfeG1pdCxcbjE3MjM6XHRcdC5uZG9fZ2V0X3BlZXJfZGV2XHQ9IHZldGhfcGVlcl9kZXYsXG4xNzI0Olx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NjgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgWERQIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdmV0aF94ZHBfcmN2YCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgYSBiaXQgb2YgYSByb2FkYmxvY2suIEkgY2FuJiMzOTt0IHVzZSBpdCBkaXJlY3RseSBhcyBhIGZvY3VzIHN5bWJvbCBpZiBJJiMzOTttIGFpbWluZyB0byBhdm9pZCBzdGF0aWMgZnVuY3Rpb25zLCBhcyBwZXIgYmVzdCBwcmFjdGljZS4gSG1tLCBob2xkIG9uLi4uIGB2ZXRoX3htaXRgIGlzIGFsc28gc3RhdGljLiBSaWdodCwgbmVlZCB0byB0aGluayBkaWZmZXJlbnRseS4KCkxldCYjMzk7cyBzZWUuLi4gd2hhdCBhYm91dCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYD8gQWgsIHRoYXQgb25lICppc24mIzM5O3QqIHN0YXRpYy4gSXQgc2VlbXMgdG8gYmUgZGVmaW5lZCBpbiBgbmV0L2NvcmUvZGV2LmNgIGFuZCBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAuIEdvb2QsIGdvb2QuIEJ1dCBpcyBpdCBleHBvcnRlZD8gR290dGEgdmVyaWZ5Li4uIE5vcGUsIG5vdCBkaXJlY3RseSBleHBvcnRlZC4gSG93ZXZlciwgaXQgKmlzKiBhIGdsb2JhbCBzeW1ib2wgd2l0aGluIGB2bWxpbnV4YCwgc28gaXQmIzM5O3MgYWNjZXNzaWJsZS4KCkNydWNpYWxseSwgYmVjYXVzZSBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyBub24tc3RhdGljLCBpdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBzeW1ib2wgYWRkcmVzcy4gVGhhdCYjMzk7cyBhIGtleSBwb2ludC4gTGV0IG1lIG5vdyBjaGVjayBgbmV0aWZfcmVjZWl2ZV9nZW5lcmljX3hkcGAgaW4gYG5ldC9jb3JlL2Rldi5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0aWZfcmVjZWl2ZV9nZW5lcmljX3hkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jPTU1NjM9bmV0aWZfc2tiX2NoZWNrX2Zvcl94ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTU4Ny1cbm5ldC9jb3JlL2Rldi5jOjU1ODg6c3RhdGljIHUzMiBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICoqcHNrYixcbm5ldC9jb3JlL2Rldi5jLTU1ODktXHRcdFx0XHQgICAgIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuLS1cbm5ldC9jb3JlL2Rldi5jPTU2Njg9aW50IGRvX3hkcF9nZW5lcmljKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2csIHN0cnVjdCBza19idWZmICoqcHNrYilcbi0tXG5uZXQvY29yZS9kZXYuYy01Njc3LVx0XHRicGZfbmV0X2N0eCA9IGJwZl9uZXRfY3R4X3NldChcdTAwMjZfX2JwZl9uZXRfY3R4KTtcbm5ldC9jb3JlL2Rldi5jOjU2Nzg6XHRcdGFjdCA9IG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAocHNrYiwgXHUwMDI2eGRwLCB4ZHBfcHJvZyk7XG5uZXQvY29yZS9kZXYuYy01Njc5LVx0XHRpZiAoYWN0ICE9IFhEUF9QQVNTKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjQ2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgbm9uLXN0YXRpYyBuYXR1cmUgb2YgYGRvX3hkcF9nZW5lcmljYCwgZnJhbWVkIGFzIGEgcHJvZmVzc2lvbmFsIGFzc2Vzc21lbnQ6CgoqKlRoZSBJbXBsaWNhdGlvbnMgb2YgYSBOb24tU3RhdGljIGBkb194ZHBfZ2VuZXJpY2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBkb194ZHBfZ2VuZXJpY2AgYW5kIGl0JiMzOTtzIGZsYWdnZWQgYXMgKm5vbi1zdGF0aWMqLiBUaGlzIGltbWVkaWF0ZWx5IHNldHMgb2ZmIGEgbWVudGFsIGNoZWNrbGlzdC4gQSBub24tc3RhdGljIGZ1bmN0aW9uLCBpbiB0aGlzIGNvbnRleHQsIGhhcyBwcmV0dHkgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zLiBJdCBtZWFucyB0aGlzIGZ1bmN0aW9uIGlzbiYjMzk7dCBsaW1pdGVkIHRvIHRoZSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0IGl0JiMzOTtzIGRlZmluZWQgaW4uIEl0JiMzOTtzIHBvdGVudGlhbGx5IGNhbGxhYmxlIGZyb20gb3V0c2lkZSBpdHMgb3JpZ2luYWwgc2NvcGUuIFRoaXMgdGVsbHMgbWUgYSBmZXcgdGhpbmdzLCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCYjMzk7cyBkZXNpZ24gY2hvaWNlczoKCkZpcnN0LCB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIGl0JiMzOTtzIHBhcnQgb2Ygc29tZSBraW5kIG9mIGV4dGVybmFsIEFQSSBvciBpbnRlcm5hbCBpbnRlcmZhY2UuIElzIGl0IGV4cG9zZWQgYXMgYSBtb2R1bGUgc3ltYm9sPyBJcyBpdCBjYWxsZWQgYnkgb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgb3IgZXZlbiB1c2VyLXNwYWNlIHRvb2xzPyBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyByZWZlcmVuY2VzIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nICp1c2VkKiBiZXlvbmQgaXRzIGRpcmVjdCBkZWZpbml0aW9uLiBUaGlzIG5vbi1zdGF0aWMgcHJvcGVydHkgaXMgYSBkZWxpYmVyYXRlIGRlc2lnbiBjaG9pY2UsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVhc29uLgoKU2Vjb25kLCBpZiBpdCYjMzk7cyBleHRlcm5hbCwgdGhpcyByYWlzZXMgcXVlc3Rpb25zIGFyb3VuZCBBUEkgc3RhYmlsaXR5IGFuZCBwb3RlbnRpYWwgQUJJIGJyZWFrYWdlLiBBbnkgY2hhbmdlcyB0byBgZG9feGRwX2dlbmVyaWNgIGNvdWxkIGhhdmUgcmlwcGxlIGVmZmVjdHMsIHNvIGl0JiMzOTtzIGEgZ29vZCBiZXQgdGhlIGtlcm5lbCBkZXZlbG9wZXJzIHB1dCBzYWZlZ3VhcmRzIGluIHBsYWNlIHRvIGVuc3VyZSBjaGFuZ2VzIGFyZSBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIGFueXRoaW5nIHRoYXQgbWF5IGNhbGwgdGhpcyBub24tc3RhdGljIGZ1bmN0aW9uLiBXZSBhcmUgdGFsa2luZyBhYm91dCB0aGUga2VybmVsIGhlcmUsIGFmdGVyIGFsbC4KClRoaXJkLCB0aGUgbm9uLXN0YXRpYyBuYXR1cmUgZG9lcyBvcGVuIHRoZSBkb29yIGZvciBtb3JlIGludHJpY2F0ZSBkZWJ1Z2dpbmcgYW5kIHRyYWNpbmcuIElmIEkmIzM5O20gdHJvdWJsZXNob290aW5nIGFuIFhEUCBpc3N1ZSwgSSBjYW4gcG90ZW50aWFsbHkgaG9vayBpbnRvIG9yIGluc3RydW1lbnQgYGRvX3hkcF9nZW5lcmljYCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIGlmIHRoZSB0cmFjaW5nIHRvb2xzIHN1cHBvcnQgdGhpcy4gSSBjb3VsZCBhbHNvIHRoZW9yZXRpY2FsbHkgY3JlYXRlIGEgY3VzdG9tIG1vZHVsZSB0aGF0IGNhbGxzIGludG8gaXQsIHdoaWNoIGNvdWxkIGJlIHVzZWZ1bCBmb3IgZXhwZXJpbWVudGF0aW9uIG9yIHRlc3RpbmcuCgpGaW5hbGx5LCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBpbnRvIGhvdyB0aGUgY29tcGlsZXIgaGFuZGxlcyB0aGlzLiBJZiBpdCYjMzk7cyBhIGNyaXRpY2FsLCBoaWdoLXBlcmZvcm1hbmNlIHBhdGgsIGlubGluaW5nIG1pZ2h0IGJlIGEgY29uY2Vybi4gQSBub24tc3RhdGljIGZ1bmN0aW9uIG1pZ2h0IG5vdCBiZSBpbmxpbmVkIGFzIGFnZ3Jlc3NpdmVseSwgd2hpY2ggY291bGQgaW1wYWN0IHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IGlmIGl0JiMzOTtzIGNhbGxlZCBmcmVxdWVudGx5LiBUaW1lIHRvIGxvb2sgYXQgdGhlIGdlbmVyYXRlZCBhc3NlbWJseSBhbmQgZXZhbHVhdGUgYW55IHBlcmZvcm1hbmNlIGltcGFjdCBkdWUgdG8gaXQgYmVpbmcgbm9uLXN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9feGRwX2dlbmVyaWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz01NjY2PXN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShnZW5lcmljX3hkcF9uZWVkZWRfa2V5KTtcbm5ldC9jb3JlL2Rldi5jLTU2NjctXG5uZXQvY29yZS9kZXYuYzo1NjY4OmludCBkb194ZHBfZ2VuZXJpYyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG5uZXQvY29yZS9kZXYuYy01NjY5LXtcbi0tXG5uZXQvY29yZS9kZXYuYy01NzAxLX1cbm5ldC9jb3JlL2Rldi5jOjU3MDI6RVhQT1JUX1NZTUJPTF9HUEwoZG9feGRwX2dlbmVyaWMpO1xubmV0L2NvcmUvZGV2LmMtNTcwMy1cbi0tXG5uZXQvY29yZS9kZXYuYz01OTg0PXN0YXRpYyBpbnQgX19uZXRpZl9yZWNlaXZlX3NrYl9jb3JlKHN0cnVjdCBza19idWZmICoqcHNrYiwgYm9vbCBwZm1lbWFsbG9jLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTYwMjMtXHRcdG1pZ3JhdGVfZGlzYWJsZSgpO1xubmV0L2NvcmUvZGV2LmM6NjAyNDpcdFx0cmV0MiA9IGRvX3hkcF9nZW5lcmljKHJjdV9kZXJlZmVyZW5jZShza2ItXHUwMDNlZGV2LVx1MDAzZXhkcF9wcm9nKSxcbm5ldC9jb3JlL2Rldi5jLTYwMjUtXHRcdFx0XHQgICAgICBcdTAwMjZza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ2MAoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCBoZXJlLgoKKipYRFAgRnVuY3Rpb25hbGl0eSBBbmFseXNpcyoqCgpSaWdodCwgc28gYGRvX3hkcF9nZW5lcmljYCBpcyBleHBvcnRlZCwgZmFudGFzdGljISBUaGF0IG1lYW5zIHdlIGNhbiB1c2UgaXQgYXMgYSBmb2N1cyBzeW1ib2wsIHdoaWNoIGdpdmVzIHVzIHNvbWUgZ29vZCBsZXZlcmFnZS4gQW5kIGxvb2sgYXQgdGhhdCwgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXNuJiMzOTt0IHN0YXRpYyBlaXRoZXIg4oCTIGJvbnVzISBXZSBjYW4gZGVmaW5pdGVseSBpbmNvcnBvcmF0ZSB0aGF0IGludG8gdGhlIGFuYWx5c2lzLiBOb3csIGZvciBgdmV0aGAuLi4gdGhlIGB2ZXRoX3hkcGAgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgYG5kb19icGZgIGNhbGxiYWNrLCBidXQgdW5mb3J0dW5hdGVseSwgaXQmIzM5O3Mgc3RhdGljLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgcm9hZGJsb2NrLiBOb3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHdvcmsgYXJvdW5kIHRoYXQsIG9yIGlmIGl0IG1lYW5zIHdlIG5lZWQgdG8gbG9vayBlbHNld2hlcmUgd2l0aGluIGB2ZXRoLmNgLiBJcyB0aGVyZSAqYW55dGhpbmcqIG5vbi1zdGF0aWMgaW4gdGhhdCBmaWxlIHRoYXQgd2UgbWlnaHQgYmUgYWJsZSB0byBleHBsb2l0PyBMZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rLi4uIEkgbmVlZCB0byBmaW5kIGFub3RoZXIgZW50cnkgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIHZldGhfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdmV0aC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3ZldGguYy00Mi1cbmRyaXZlcnMvbmV0L3ZldGguYzo0MzpzdHJ1Y3QgdmV0aF9zdGF0cyB7XG5kcml2ZXJzL25ldC92ZXRoLmMtNDQtXHR1NjRcdHJ4X2Ryb3BzO1xuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy01NS1cbmRyaXZlcnMvbmV0L3ZldGguYzo1NjpzdHJ1Y3QgdmV0aF9ycV9zdGF0cyB7XG5kcml2ZXJzL25ldC92ZXRoLmMtNTctXHRzdHJ1Y3QgdmV0aF9zdGF0c1x0dnM7XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTYwLVxuZHJpdmVycy9uZXQvdmV0aC5jOjYxOnN0cnVjdCB2ZXRoX3JxIHtcbmRyaXZlcnMvbmV0L3ZldGguYy02Mi1cdHN0cnVjdCBuYXBpX3N0cnVjdFx0eGRwX25hcGk7XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jLTczLVxuZHJpdmVycy9uZXQvdmV0aC5jOjc0OnN0cnVjdCB2ZXRoX3ByaXYge1xuZHJpdmVycy9uZXQvdmV0aC5jLTc1LVx0c3RydWN0IG5ldF9kZXZpY2UgX19yY3VcdCpwZWVyO1xuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy04MS1cbmRyaXZlcnMvbmV0L3ZldGguYzo4MjpzdHJ1Y3QgdmV0aF94ZHBfdHhfYnEge1xuZHJpdmVycy9uZXQvdmV0aC5jLTgzLVx0c3RydWN0IHhkcF9mcmFtZSAqcVtWRVRIX1hEUF9UWF9CVUxLX1NJWkVdO1xuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy05MC1cbmRyaXZlcnMvbmV0L3ZldGguYzo5MTpzdHJ1Y3QgdmV0aF9xX3N0YXRfZGVzYyB7XG5kcml2ZXJzL25ldC92ZXRoLmMtOTItXHRjaGFyXHRkZXNjW0VUSF9HU1RSSU5HX0xFTl07XG4tLVxuZHJpdmVycy9uZXQvdmV0aC5jPTExNz1zdGF0aWMgc3RydWN0IHtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtMTIyLVxuZHJpdmVycy9uZXQvdmV0aC5jOjEyMzpzdHJ1Y3QgdmV0aF94ZHBfYnVmZiB7XG5kcml2ZXJzL25ldC92ZXRoLmMtMTI0LVx0c3RydWN0IHhkcF9idWZmIHhkcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNjMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6CgoqKlJlZ2V4IFdvZXMgYW5kIGEgS2VybmVsIE1vZHVsZSBIdW50KioKCkJsYXN0IGl0ISBNeSByZWdleCBmdSBoYXMgZmFpbGVkIG1lIGFnYWluLiBJIHdhcyAqY2VydGFpbiogdGhhdCBgXmludCB2ZXRoX2Agb3IgYF52b2lkIHZldGhfYCB3b3VsZCB1bmVhcnRoIHRoZSBmdW5jdGlvbiBJJiMzOTttIGNoYXNpbmcsIGJ1dCB0aGF0IHJldHVybmVkICpub3RoaW5nKi4gQ2xlYXJseSwgSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZyBmdW5kYW1lbnRhbCBhYm91dCB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIG9yIGV4cG9ydCBzdHJ1Y3R1cmUgb2YgdGhpcyBgdmV0aGAgbW9kdWxlLiBSaWdodCwgdGltZSBmb3IgYSBtb3JlIGRpcmVjdCBhcHByb2FjaC4gTGV0JiMzOTtzIGZvcmdldCB0aGUgY2xldmVyIHBhdHRlcm5zIGZvciBhIG1vbWVudCBhbmQgZ28gc3RyYWlnaHQgZm9yIHRoZSBiaWcgZ3Vucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZXhwb3NlZCB0byB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBNeSBiZXN0IGJldCBpcyB0byBzZWFyY2ggZm9yIGBFWFBPUlRfU1lNQk9MYCBkaXJlY3RseSB3aXRoaW4gdGhlIGB2ZXRoLmNgIHNvdXJjZSBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBzZWNyZXRzIHdpbGwgYmUuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92ZXRoLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU0NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHZldGguY2AgTW9kdWxlIGFuZCBYRFAgRnJhZ21lbnQgSGFuZGxpbmcgQnVnKioKCkFscmlnaHQsIHNvIGB2ZXRoLmNgIGlzIGEgbW9kdWxlLCBtZWFuaW5nIHRoZSBsYWNrIG9mIGV4cG9ydGVkIHN5bWJvbHMgaXMgZXhwZWN0ZWQuIFRoYXQgbWVhbnMgbW9zdCwgaWYgbm90IGFsbCwgb2YgdGhlIGZ1bmN0aW9ucyB3aXRoaW4gaXQgYXJlIGxpa2VseSBkZWNsYXJlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIGdvb2QgZm9yIGFuYWx5c2lzLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbi4gSXQgbG9va3MgbGlrZSBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBhbmQgYGRvX3hkcF9nZW5lcmljYCBhcmUgZ29vZCBjYW5kaWRhdGVzLiBXYWl0IGEgbW9tZW50LCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyAqbm90KiBzdGF0aWMsIHNvIHRoYXQmIzM5O3MgYWN0dWFsbHkgYW4gaWRlYWwgZm9jYWwgcG9pbnQuCgpOb3csIGFzIEkgdW5kZXJzdGFuZCBpdCwgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYW4gWERQIGZyYWdtZW50IGhhbmRsaW5nIGJ1Zy4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGBza2ItJmd0O2xlbmAgbm90IGJlaW5nIHByb3Blcmx5IHVwZGF0ZWQgd2hlbiBgc2tiLSZndDtkYXRhX2xlbmAgY2hhbmdlcy4gU291bmRzIGxpa2UgYSBjbGFzc2ljIGZ1bmN0aW9uYWwgZGVmZWN0IHRvIG1lLgoKQXMgZm9yIGNvbmZpZ3VyYXRpb25zLCBJJiMzOTtsbCBuZWVkIGBWRVRIYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBORVRgIHRvIGJlIGVuYWJsZWQgdG8gZWZmZWN0aXZlbHkgd29yayB0aHJvdWdoIHRoaXMuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGVuYWJsaW5nIGNvbmZpZyBmb3IgWERQLiBBaCwgeWVzLCBYRFAgaXMgZW5hYmxlZCBieSBgQlBGX1NZU0NBTExgICphbmQqIGBORVRgLiBKdXN0IHdhbnQgdG8gYmUgZXh0cmEgdGhvcm91Z2ggaGVyZS4gVGltZSB0byBjaGVjayBgbmV0L2NvcmUvZGV2LmNgIGZvciBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCB0byBnZXQgc29tZSBjb250ZXh0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jPTU0MzU9c3RhdGljIHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKm5ldGlmX2dldF9yeHF1ZXVlKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTQ1Ny1cbm5ldC9jb3JlL2Rldi5jOjU0NTg6dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbm5ldC9jb3JlL2Rldi5jLTU0NTktXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKVxuLS1cbm5ldC9jb3JlL2Rldi5jPTU1ODg9c3RhdGljIHUzMiBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICoqcHNrYixcbi0tXG5uZXQvY29yZS9kZXYuYy01NjE1LVxubmV0L2NvcmUvZGV2LmM6NTYxNjpcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCgqcHNrYiwgeGRwLCB4ZHBfcHJvZyk7XG5uZXQvY29yZS9kZXYuYy01NjE3LVx0c3dpdGNoIChhY3QpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzODAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFhEUCBQcm9ncmFtIEV4ZWN1dGlvbiBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBYRFAgcHJvZ3JhbXMgYXJlIGFjdHVhbGx5IGV4ZWN1dGVkLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGNvbmZpcm0gd2hldGhlciBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyBhbHdheXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBBIHF1aWNrIGNoZWNrIG9mIGBuZXQvY29yZS9kZXYuY2AgY29uZmlybXMgdGhpcyDigJMgdGhlcmUmIzM5O3Mgbm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAsIHNvIGl0JiMzOTtzIGFsd2F5cyBwcmVzZW50LgoKTm93LCBhIHJlbGF0ZWQgZnVuY3Rpb24sIGBicGZfcHJvZ19ydW5feGRwYCBpcyBjYWxsZWQgKndpdGhpbiogYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAuIFRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZmxvdy4KCk15IG5leHQgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBgYnBmX3Byb2dfcnVuX3hkcGAgaXMgKmFsc28qIHVuY29uZGl0aW9uYWxseSBkZWZpbmVkLiBJIG5lZWQgdG8gZXN0YWJsaXNoIGlmIHRoaXMgaXMgYSBwYXRoIHRoYXQmIzM5O3MgYWx3YXlzIGF2YWlsYWJsZSwgb3IgaWYgaXRzIHVzZSBpcyBzb21laG93IGNvbnRpbmdlbnQgb24gb3RoZXIga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBUaGF0IHdpbGwgYmUgdGhlIG5leHQgdGhpbmcgdG8gaW52ZXN0aWdhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Byb2dfcnVuX3hkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTcyOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIGVCUEYgRnVuY3Rpb24gQ2FsbHMgd2l0aGluIHRoZSBLZXJuZWwgSW5jbHVkZSBGaWxlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvciBkZWNsYXJhdGlvbiBvZiB0aGUgYGJwZl9wcm9nX3J1bl94ZHBgIGZ1bmN0aW9uLiBTaW5jZSBJJiMzOTttIHdvcmtpbmcgd2l0aCB0aGUga2VybmVsLCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGxvb2sgaW4gdGhlIGBpbmNsdWRlL2xpbnV4L2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyB0aG9zZSBoZWFkZXIgZmlsZXMgYXJlIHdoZXJlIGEgbG90IG9mIHRoZSBjb3JlIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMsIGZ1bmN0aW9uIHByb3RvdHlwZXMsIGFuZCBkZWZpbml0aW9ucyByZWxldmFudCB0byBteSB3b3JrIHNob3VsZCBiZSBmb3VuZC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IGl0IHdpbGwgYmUgZGVmaW5lZCB0aGVyZSwgYW5kIGlmIG5vdCwgdGhlIGhlYWRlciBmaWxlcyBzaG91bGQgbGVhZCBtZSBvbiBhIHBhdGggdG8gaXRzIGRlZmluaXRpb24uIFRoaXMgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LCBJIHRoaW5rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9wcm9nX3J1bl94ZHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTUxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIFhEUCBQcm9ncmFtIEV4ZWN1dGlvbiBQYXRoKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGV4YWN0IGZ1bmN0aW9uIGNhbGxlZCB0byBydW4gYW4gWERQIHByb2dyYW0uIEhtbSwgSSBzZWVtIHRvIHJlY2FsbCBpdCBiZWluZyBzb21ldGhpbmcgbGlrZS4uLiAqYnBmX3Byb2dfcnVuX3hkcCouIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdC4gWWVzLCB0aGF0IHJpbmdzIGEgYmVsbCwgSSB0aGluayBJJiMzOTt2ZSBzZWVuIGl0IGluIGBuZXQvY29yZS9kZXYuY2AuIE9rYXksIGJlc3QgdG8gZ28gYmFjayBhbmQgdGFrZSBhIGxvb2sgYXQgYG5ldC9jb3JlL2Rldi5jYCBhZ2Fpbi4gSSYjMzk7bGwgZm9jdXMgb24gdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgZGV0YWlscyBlbWVyZ2UuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJlc3Rpbmcgc3VidGxldGllcyB0aGF0IEkgbmVlZCB0byBiZSBzdXJlIEkgaGF2ZW4mIzM5O3QgZm9yZ290dGVuIGFib3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQ5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1NDkwOlx0XG41NDkxOlx0XHRvcmlnX2RhdGFfZW5kID0geGRwLVx1MDAzZWRhdGFfZW5kO1xuNTQ5MjpcdFx0b3JpZ19kYXRhID0geGRwLVx1MDAzZWRhdGE7XG41NDkzOlx0XHRldGggPSAoc3RydWN0IGV0aGhkciAqKXhkcC1cdTAwM2VkYXRhO1xuNTQ5NDpcdFx0b3JpZ19ob3N0ID0gZXRoZXJfYWRkcl9lcXVhbF82NGJpdHMoZXRoLVx1MDAzZWhfZGVzdCwgc2tiLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG41NDk1Olx0XHRvcmlnX2JjYXN0ID0gaXNfbXVsdGljYXN0X2V0aGVyX2FkZHJfNjRiaXRzKGV0aC1cdTAwM2VoX2Rlc3QpO1xuNTQ5NjpcdFx0b3JpZ19ldGhfdHlwZSA9IGV0aC1cdTAwM2VoX3Byb3RvO1xuNTQ5NzpcdFxuNTQ5ODpcdFx0YWN0ID0gYnBmX3Byb2dfcnVuX3hkcCh4ZHBfcHJvZywgeGRwKTtcbjU0OTk6XHRcbjU1MDA6XHRcdC8qIGNoZWNrIGlmIGJwZl94ZHBfYWRqdXN0X2hlYWQgd2FzIHVzZWQgKi9cbjU1MDE6XHRcdG9mZiA9IHhkcC1cdTAwM2VkYXRhIC0gb3JpZ19kYXRhO1xuNTUwMjpcdFx0aWYgKG9mZikge1xuNTUwMzpcdFx0XHRpZiAob2ZmIFx1MDAzZSAwKVxuNTUwNDpcdFx0XHRcdF9fc2tiX3B1bGwoc2tiLCBvZmYpO1xuNTUwNTpcdFx0XHRlbHNlIGlmIChvZmYgXHUwMDNjIDApXG41NTA2Olx0XHRcdFx0X19za2JfcHVzaChza2IsIC1vZmYpO1xuNTUwNzpcdFxuNTUwODpcdFx0XHRza2ItXHUwMDNlbWFjX2hlYWRlciAmIzQzOz0gb2ZmO1xuNTUwOTpcdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1NTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6CgoqKkluaXRpYWwgSW1wcmVzc2lvbjogRmFtaWxpYXIgVGVycml0b3J5KioKClJpZ2h0LCBgYnBmX3Byb2dfcnVuX3hkcGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0FoLCB0aGF0JiMzOTtzIGEgbWFjcm8gb3IgaW5saW5lIGZ1bmN0aW9uLiYjMzQ7IE5vIG5lZWQgdG8gYnJlYWsgb3V0IHRoZSBkZWJ1Z2dlciBqdXN0IHlldCwgbGlrZWx5IGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgZXhwYW5zaW9uLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGNvbnN0cnVjdCB3aXRoaW4gWERQLCBzbyBJJiMzOTttIGZhbWlsaWFyIHdpdGggdGhpcy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMgd2hlbiBkaWdnaW5nIGRlZXBlciBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbi4gQnV0IGZvciBub3csIHRoYXQmIzM5O3MgbXkgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIGJwZl9wcm9nX3J1bl94ZHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzU1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGJwZl9wcm9nX3J1bl94ZHBgKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgYGJwZl9wcm9nX3J1bl94ZHBgIGZ1bmN0aW9uLiBHaXZlbiBteSBjdXJyZW50IHByb2plY3QgYW5kIHVuZGVyc3RhbmRpbmcgb2YgZUJQRiwgdGhlIG5hbWUgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgaXQmIzM5O3MgaW52b2x2ZWQgaW4gcnVubmluZyBYRFAgcHJvZ3JhbXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIFhEUCBleGVjdXRpb24gZmxvdywgc28gSSYjMzk7bSBnb2luZyB0byBraWNrIG9mZiBhIHNlYXJjaCBmb3IgaXRzIGRlZmluaXRpb24uIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUga2VybmVsIHNvdXJjZSwgcHJvYmFibHkgdXRpbGl6aW5nIGNzY29wZSBvciBhIHNpbWlsYXIgdG9vbCB0byBwaW5wb2ludCBpdHMgbG9jYXRpb24gYW5kIHRoZW4gZGl2ZSBpbnRvIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEl0JiMzOTtzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9mIFhEUCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Byb2dfcnVuX3hkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaD0xMzU1PV9fbGliZXRoX3hkcF9ydW5fcHJvZyhzdHJ1Y3QgbGliZXRoX3hkcF9idWZmICp4ZHAsXG4tLVxuaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oLTEzNTktXG5pbmNsdWRlL25ldC9saWJldGgveGRwLmg6MTM2MDpcdGFjdCA9IGJwZl9wcm9nX3J1bl94ZHAoYnEtXHUwMDNlcHJvZywgXHUwMDI2eGRwLVx1MDAzZWJhc2UpO1xuaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oLTEzNjEtXHRpZiAodW5saWtlbHkoYWN0IFx1MDAzYyBYRFBfRFJPUCB8fCBhY3QgXHUwMDNlIFhEUF9SRURJUkVDVCkpXG4tLVxuaW5jbHVkZS9uZXQvbGliZXRoL3hzay5oPTM5MD1fX2xpYmV0aF94c2tfcnVuX3Byb2coc3RydWN0IGxpYmV0aF94ZHBfYnVmZiAqeGRwLFxuLS1cbmluY2x1ZGUvbmV0L2xpYmV0aC94c2suaC0zOTUtXG5pbmNsdWRlL25ldC9saWJldGgveHNrLmg6Mzk2Olx0YWN0ID0gYnBmX3Byb2dfcnVuX3hkcChicS1cdTAwM2Vwcm9nLCBcdTAwMjZ4ZHAtXHUwMDNlYmFzZSk7XG5pbmNsdWRlL25ldC9saWJldGgveHNrLmgtMzk3LVx0aWYgKHVubGlrZWx5KGFjdCAhPSBYRFBfUkVESVJFQ1QpKVxuLS1cbmluY2x1ZGUvbmV0L3hkcC5oPTY4ND1zdGF0aWMgaW5saW5lIHZvaWQgeGRwX2NsZWFyX2ZlYXR1cmVzX2ZsYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5pbmNsdWRlL25ldC94ZHAuaC02ODgtXG5pbmNsdWRlL25ldC94ZHAuaDo2ODk6c3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgYnBmX3Byb2dfcnVuX3hkcChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5pbmNsdWRlL25ldC94ZHAuaC02OTAtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczOTAKCQkJCQkJCW91dHB1dDogMTQ4CgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlhEUCBhbmQgc2tiLSZndDtsZW4gSXNzdWUgUmVzb2x1dGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIFhEUCBpc3N1ZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IGNvZGUgcmVzaWRlcyB3aXRoaW4gYGluY2x1ZGUvbmV0L3hkcC5oYC4gRm9jdXNpbmcgb24gYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgYW5kIGBkb194ZHBfZ2VuZXJpY2Agc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBhcHByb2FjaCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZGlyZWN0bHkgaW1wYWN0aW5nIGhvdyBgc2tiLSZndDtsZW5gIGlzIGhhbmRsZWQgd2hlbiBgc2tiLSZndDtkYXRhX2xlbmAgaXMgbW9kaWZpZWQgZHVlIHRvIFhEUCBmcmFnbWVudCBtYW5pcHVsYXRpb25zLiBUaGlzIGlzIGNydWNpYWwgZm9yIHRoZSBpbnRlZ3JpdHkgb2YgbmV0d29yayBwYWNrZXQgaGFuZGxpbmcuCgpUbyBwcm9wZXJseSB0ZXN0IGFuZCBhc3Nlc3MgdGhpcyBtb2RpZmljYXRpb24sIEkgbmVlZCB0byBlbnN1cmUgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYFZFVEhgIChmb3IgdmlydHVhbCBldGhlcm5ldCB0ZXN0aW5nKSwgYEJQRl9TWVNDQUxMYCAoc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBYRFAgYW5kIEJQRiBwcm9ncmFtcyksIGFuZCwgb2YgY291cnNlLCB0aGUgZ2VuZXJhbCBuZXR3b3JraW5nIHN1cHBvcnQgd2l0aCBgTkVUYC4gTm93IHRoYXQgSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUga2V5IGNvbXBvbmVudHMgYW5kIGRlcGVuZGVuY2llcywgSSYjMzk7bGwgcHJvY2VlZCB0byBzZXQgdGhlIG5lY2Vzc2FyeSB0ZXN0aW5nIGNvbmZpZ3VyYXRpb25zIGFuZCBjb21waWxlIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkVUSCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAmIzM0OywKICAgICYjMzQ7ZG9feGRwX2dlbmVyaWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYHNrYi1cdTAwM2VsZW5gIGlzIG5vdCB1cGRhdGVkIHdoZW4gYHNrYi1cdTAwM2VkYXRhX2xlbmAgaXMgbW9kaWZpZWQgYnkgWERQIGZyYWdtZW50cyBpbiBgdmV0aF94ZHBfcmN2X3NrYmAgYW5kIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGFuZCB0aGUgdmV0aCBkcml2ZXIgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWRVRIJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCYjMzQ7LAogICAgJiMzNDtkb194ZHBfZ2VuZXJpYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc2tiLVx1MDAzZWxlbmAgaXMgbm90IHVwZGF0ZWQgd2hlbiBgc2tiLVx1MDAzZWRhdGFfbGVuYCBpcyBtb2RpZmllZCBieSBYRFAgZnJhZ21lbnRzIGluIGB2ZXRoX3hkcF9yY3Zfc2tiYCBhbmQgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIHRoZSB2ZXRoIGRyaXZlciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMjo0Ny4yNDU5MTA1OTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk4NjYzODY4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkVUSFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcFwiLFxuICAgIFwiZG9feGRwX2dlbmVyaWNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc2tiLVxcdTAwM2VsZW5gIGlzIG5vdCB1cGRhdGVkIHdoZW4gYHNrYi1cXHUwMDNlZGF0YV9sZW5gIGlzIG1vZGlmaWVkIGJ5IFhEUCBmcmFnbWVudHMgaW4gYHZldGhfeGRwX3Jjdl9za2JgIGFuZCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBhbmQgdGhlIHZldGggZHJpdmVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjI6NDcuMjQ2MDI5OTgyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA2MDk4MjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODUwYTEzYmQ5NWE2NTY4ZGI0MDY1NmRmNzE0NmY3YjRiMWYzOWNjMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyNyAxNDoyMjo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92ZXRoLmMgYi9kcml2ZXJzL25ldC92ZXRoLmNcXG5pbmRleCAwMGUzNGFmZDg1OGU3Mi4uYTk1NjQ5OGEwNzNiZTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvdmV0aC5jXFxuKysrIGIvZHJpdmVycy9uZXQvdmV0aC5jXFxuQEAgLTg3MSwxMiArODcxLDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmV0aF94ZHBfcmN2X3NrYihzdHJ1Y3QgdmV0aF9ycSAqcnEsXFxuIFxcdFxcdF9fc2tiX3B1dChza2IsIG9mZik7IC8qIHBvc2l0aXZlIG9uIGdyb3csIG5lZ2F0aXZlIG9uIHNocmluayAqL1xcbiBcXG4gXFx0LyogWERQIGZyYWcgbWV0YWRhdGEgKGUuZy4gbnJfZnJhZ3MpIGFyZSB1cGRhdGVkIGluIGVCUEYgaGVscGVyc1xcbi1cXHQgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKSwgd2UgbmVlZCB0byB1cGRhdGUgZGF0YV9sZW4gaGVyZS5cXG4rXFx0ICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCksIHVwZGF0ZSBza2IgbGVuZ3RoIGZpZWxkcyBoZXJlLlxcbiBcXHQgKi9cXG4rXFx0c2tiLVxcdTAwM2VsZW4gLT0gc2tiLVxcdTAwM2VkYXRhX2xlbjtcXG4gXFx0aWYgKHhkcF9idWZmX2hhc19mcmFncyh4ZHApKVxcbiBcXHRcXHRza2ItXFx1MDAzZWRhdGFfbGVuID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2V4ZHBfZnJhZ3Nfc2l6ZTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRza2ItXFx1MDAzZWRhdGFfbGVuID0gMDtcXG4rXFx0c2tiLVxcdTAwM2VsZW4gKz0gc2tiLVxcdTAwM2VkYXRhX2xlbjtcXG4gXFxuIFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHJxLVxcdTAwM2VkZXYpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IDU5MzNjNWRhYjA5ZWUxLi45NDIwNDcwMmNiMDIwMSAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXYuY1xcbisrKyBiL25ldC9jb3JlL2Rldi5jXFxuQEAgLTU1MTcsMTIgKzU1MTcsMTQgQEAgdTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG4gXFx0fVxcbiBcXG4gXFx0LyogWERQIGZyYWcgbWV0YWRhdGEgKGUuZy4gbnJfZnJhZ3MpIGFyZSB1cGRhdGVkIGluIGVCUEYgaGVscGVyc1xcbi1cXHQgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKSwgd2UgbmVlZCB0byB1cGRhdGUgZGF0YV9sZW4gaGVyZS5cXG4rXFx0ICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCksIHVwZGF0ZSBza2IgbGVuZ3RoIGZpZWxkcyBoZXJlLlxcbiBcXHQgKi9cXG4rXFx0c2tiLVxcdTAwM2VsZW4gLT0gc2tiLVxcdTAwM2VkYXRhX2xlbjtcXG4gXFx0aWYgKHhkcF9idWZmX2hhc19mcmFncyh4ZHApKVxcbiBcXHRcXHRza2ItXFx1MDAzZWRhdGFfbGVuID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2V4ZHBfZnJhZ3Nfc2l6ZTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRza2ItXFx1MDAzZWRhdGFfbGVuID0gMDtcXG4rXFx0c2tiLVxcdTAwM2VsZW4gKz0gc2tiLVxcdTAwM2VkYXRhX2xlbjtcXG4gXFxuIFxcdC8qIGNoZWNrIGlmIFhEUCBjaGFuZ2VkIGV0aCBoZHIgc3VjaCBTS0IgbmVlZHMgdXBkYXRlICovXFxuIFxcdGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopeGRwLVxcdTAwM2VkYXRhO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMjo0OC4yNTMyNDI4NDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTg4NTkwNDI5MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkVUSFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcFwiLFxuICAgIFwiZG9feGRwX2dlbmVyaWNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc2tiLVxcdTAwM2VsZW5gIGlzIG5vdCB1cGRhdGVkIHdoZW4gYHNrYi1cXHUwMDNlZGF0YV9sZW5gIGlzIG1vZGlmaWVkIGJ5IFhEUCBmcmFnbWVudHMgaW4gYHZldGhfeGRwX3Jjdl9za2JgIGFuZCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBhbmQgdGhlIHZldGggZHJpdmVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODUwYTEzYmQ5NWE2NTY4ZGI0MDY1NmRmNzE0NmY3YjRiMWYzOWNjMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDE0OjIyOjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jXG5pbmRleCAwMGUzNGFmZDg1OGU3Mi4uYTk1NjQ5OGEwNzNiZTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC92ZXRoLmNcbisrKyBiL2RyaXZlcnMvbmV0L3ZldGguY1xuQEAgLTg3MSwxMiArODcxLDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmV0aF94ZHBfcmN2X3NrYihzdHJ1Y3QgdmV0aF9ycSAqcnEsXG4gXHRcdF9fc2tiX3B1dChza2IsIG9mZik7IC8qIHBvc2l0aXZlIG9uIGdyb3csIG5lZ2F0aXZlIG9uIHNocmluayAqL1xuIFxuIFx0LyogWERQIGZyYWcgbWV0YWRhdGEgKGUuZy4gbnJfZnJhZ3MpIGFyZSB1cGRhdGVkIGluIGVCUEYgaGVscGVyc1xuLVx0ICogKGUuZy4gYnBmX3hkcF9hZGp1c3RfdGFpbCksIHdlIG5lZWQgdG8gdXBkYXRlIGRhdGFfbGVuIGhlcmUuXG4rXHQgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKSwgdXBkYXRlIHNrYiBsZW5ndGggZmllbGRzIGhlcmUuXG4gXHQgKi9cbitcdHNrYi1cdTAwM2VsZW4gLT0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuIFx0aWYgKHhkcF9idWZmX2hhc19mcmFncyh4ZHApKVxuIFx0XHRza2ItXHUwMDNlZGF0YV9sZW4gPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNleGRwX2ZyYWdzX3NpemU7XG4gXHRlbHNlXG4gXHRcdHNrYi1cdTAwM2VkYXRhX2xlbiA9IDA7XG4rXHRza2ItXHUwMDNlbGVuICs9IHNrYi1cdTAwM2VkYXRhX2xlbjtcbiBcbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcnEtXHUwMDNlZGV2KTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCA1OTMzYzVkYWIwOWVlMS4uOTQyMDQ3MDJjYjAyMDEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC01NTE3LDEyICs1NTE3LDE0IEBAIHUzMiBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXG4gXHR9XG4gXG4gXHQvKiBYRFAgZnJhZyBtZXRhZGF0YSAoZS5nLiBucl9mcmFncykgYXJlIHVwZGF0ZWQgaW4gZUJQRiBoZWxwZXJzXG4tXHQgKiAoZS5nLiBicGZfeGRwX2FkanVzdF90YWlsKSwgd2UgbmVlZCB0byB1cGRhdGUgZGF0YV9sZW4gaGVyZS5cbitcdCAqIChlLmcuIGJwZl94ZHBfYWRqdXN0X3RhaWwpLCB1cGRhdGUgc2tiIGxlbmd0aCBmaWVsZHMgaGVyZS5cbiBcdCAqL1xuK1x0c2tiLVx1MDAzZWxlbiAtPSBza2ItXHUwMDNlZGF0YV9sZW47XG4gXHRpZiAoeGRwX2J1ZmZfaGFzX2ZyYWdzKHhkcCkpXG4gXHRcdHNrYi1cdTAwM2VkYXRhX2xlbiA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2V4ZHBfZnJhZ3Nfc2l6ZTtcbiBcdGVsc2VcbiBcdFx0c2tiLVx1MDAzZWRhdGFfbGVuID0gMDtcbitcdHNrYi1cdTAwM2VsZW4gKz0gc2tiLVx1MDAzZWRhdGFfbGVuO1xuIFxuIFx0LyogY2hlY2sgaWYgWERQIGNoYW5nZWQgZXRoIGhkciBzdWNoIFNLQiBuZWVkcyB1cGRhdGUgKi9cbiBcdGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopeGRwLVx1MDAzZWRhdGE7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMjo0OC4yNTMyNDUwMzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjYzNTc5OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWERQIEZyYWdtZW50IExlbmd0aCBVcGRhdGVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L3ZldGguY2AgYW5kIGBuZXQvY29yZS9kZXYuY2AuIEl0IGxvb2tzIGxpa2UgaXQncyBkZWFsaW5nIHdpdGggdGhlIGludGVyYWN0aW9uIGJldHdlZW4gWERQIGZyYWdtZW50cyBhbmQgdGhlIGBza2ItXHUwMDNlbGVuYCBjYWxjdWxhdGlvbi4gVGhlIGNvZGUgc25pcHBldCBoaWdobGlnaHRzIGhvdyBgc2tiLVx1MDAzZWRhdGFfbGVuYCBpcyBiZWluZyB1cGRhdGVkIGluIHJlc3BvbnNlIHRvIGNoYW5nZXMgbWFkZSBieSBlQlBGIGhlbHBlcnMgbGlrZSBgYnBmX3hkcF9hZGp1c3RfdGFpbGAuIEVzc2VudGlhbGx5LCB0aGUgbG9naWMgYWRqdXN0cyB0aGUgb3ZlcmFsbCBgc2tiLVx1MDAzZWxlbmAgd2hlbiBkZWFsaW5nIHdpdGggdGhlc2UgWERQIGZyYWdtZW50cy4gSXQncyBzdWJ0cmFjdGluZyB0aGUgb2xkIGBza2ItXHUwMDNlZGF0YV9sZW5gLCBzZXR0aW5nIGl0IHRvIHRoZSB4ZHAgZnJhZ21lbnQgc2l6ZSBvciAwLCBhbmQgdGhlbiBhZGRpbmcgdGhlIG5ldyBgc2tiLVx1MDAzZWRhdGFfbGVuYC5cblxuU3BlY2lmaWNhbGx5LCB0aGlzIGlzIGhhcHBlbmluZyB3aXRoaW4gdGhlIGB2ZXRoX3hkcF9yY3Zfc2tiYCBmdW5jdGlvbiBhbmQgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAuIEkgbmVlZCB0byB2ZXJpZnkgYSBjb3VwbGUgb2YgdGhpbmdzLCBhcyB0aGlzIHNvcnQgb2YgY2hhbmdlIGNhbiBiZSBkZWxpY2F0ZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlYWNoYWJpbGl0eSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIHRoZSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCBlbmFibGUgdGhpcyBwYXJ0aWN1bGFyIGNvZGUgcGF0aC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJJ2xsIHNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byBgdmV0aF94ZHBfcmN2X3NrYmAgYW5kIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIHRvIHNlZSB3aGVyZSB0aGV5J3JlIGJlaW5nIGNhbGxlZCBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhleSBhcmUgYWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjI6NTUuNTE2ODI3OTY1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTc4MDgzMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmV0aF94ZHBfcmN2X3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC92ZXRoLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdmV0aC5jPTc1MT1zdGF0aWMgaW50IHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmYoc3RydWN0IHZldGhfcnEgKnJxLFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTc4OS1cXG5kcml2ZXJzL25ldC92ZXRoLmM6NzkwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmV0aF94ZHBfcmN2X3NrYihzdHJ1Y3QgdmV0aF9ycSAqcnEsXFxuZHJpdmVycy9uZXQvdmV0aC5jLTc5MS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jPTkwMz1zdGF0aWMgaW50IHZldGhfeGRwX3JjdihzdHJ1Y3QgdmV0aF9ycSAqcnEsIGludCBidWRnZXQsXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtOTM1LVxcdFxcdFxcdHN0YXRzLVxcdTAwM2V4ZHBfYnl0ZXMgKz0gc2tiLVxcdTAwM2VsZW47XFxuZHJpdmVycy9uZXQvdmV0aC5jOjkzNjpcXHRcXHRcXHRza2IgPSB2ZXRoX3hkcF9yY3Zfc2tiKHJxLCBza2IsIGJxLCBzdGF0cyk7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTkzNy1cXHRcXHRcXHRpZiAoc2tiKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjIyOjU3LjY3NDY0MTQwN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzE4MDgzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmbG93LCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlLCBwcmVzZW50ZWQgYXMgeW91ciB0aG91Z2h0IHByb2Nlc3M6XG5cbioqdmV0aCBYRFAgUGFja2V0IFJlY2VwdGlvbjogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgWERQIHByb2Nlc3NpbmcgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSB2ZXRoIGludGVyZmFjZSBjb2RlLCBhbmQgaGVyZSdzIHRoZSBmbG93IEknbSBwaWVjaW5nIHRvZ2V0aGVyLiBgdmV0aF94ZHBfcmN2X3NrYmAgaXMgYSAqc3RhdGljKiBmdW5jdGlvbiwgbWVhbmluZyBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgbGlrZWx5IGludGVybmFsIGhlbHBlciBmdW5jdGlvbi4gSXRzIGpvYiBpcyBoYW5kbGluZyB0aGUgZmluYWwgcHJvY2Vzc2luZyBvZiB0aGUgcmVjZWl2ZWQgU0tCIHdpdGhpbiB0aGUgWERQIGNvbnRleHQuIE5vdywgaG93IGRvZXMgaXQgZ2V0IGNhbGxlZD8gVGhhdCdzIHRoZSBrZXkuXG5cbmB2ZXRoX3hkcF9yY3ZgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5ICpjYWxscyogYHZldGhfeGRwX3Jjdl9za2JgLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBYRFAgbG9naWMgd2l0aGluIHRoZSB2ZXRoIGRyaXZlci4gIEFuZCB3aGVyZSBpcyAqdGhhdCogY2FsbGVkIGZyb20/IEl0J3MgY2FsbGVkIGZyb20gYHZldGhfcG9sbGAsIHdoaWNoIGlzIHRoZSBOZXR3b3JrIEFQSSAoTkFQSSkgcG9sbCBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgZm9yIHRoZSB2ZXRoIGludGVyZmFjZS4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGUgZHJpdmVyIGlzIHVzaW5nIE5BUEkgdG8gZWZmaWNpZW50bHkgcHJvY2VzcyBpbmNvbWluZyBwYWNrZXRzLiBTbywgdGhlIFhEUCBwcm9jZXNzaW5nIGlzIGluaXRpYXRlZCBkdXJpbmcgdGhlIHBvbGwsIHdoaWNoIGhhcHBlbnMgYWZ0ZXIgYSByZWNlaXZlIGludGVycnVwdCBvciBhIHRpbWVvdXQuXG5cbkZpbmFsbHksIEkgcmVtZW1iZXIgdGhhdCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyB3aGVyZSB0aGUgQlBGIG1hZ2ljIGFjdHVhbGx5IGhhcHBlbnMuIEl0J3MgdGhlIGdlbmVyaWMgWERQIGV4ZWN1dGlvbiBmdW5jdGlvbiwgYW5kIEkga25vdyBmcm9tIHByaW9yIHdvcmsgdGhhdCBpdCdzIGxvY2F0ZWQgaW4gYG5ldC9jb3JlL2Rldi5jYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGxvb2tpbmcgdXAgdGhlIGF0dGFjaGVkIFhEUCBwcm9ncmFtIGFuZCBydW5uaW5nIGl0IGFnYWluc3QgdGhlIGluY29taW5nIHBhY2tldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUwMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjIzOjAyLjUwNjQ1MzAzMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTgxNjgwMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTU0MzU9c3RhdGljIHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKm5ldGlmX2dldF9yeHF1ZXVlKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01NDU3LVxcbm5ldC9jb3JlL2Rldi5jOjU0NTg6dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG5uZXQvY29yZS9kZXYuYy01NDU5LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTU1ODg9c3RhdGljIHUzMiBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICoqcHNrYixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU2MTUtXFxubmV0L2NvcmUvZGV2LmM6NTYxNjpcXHRhY3QgPSBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoKnBza2IsIHhkcCwgeGRwX3Byb2cpO1xcbm5ldC9jb3JlL2Rldi5jLTU2MTctXFx0c3dpdGNoIChhY3QpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjM6MDMuMTY0NjI3Nzc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMDMyMjYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkludmVzdGlnYXRpbmcgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgVmlzaWJpbGl0eSoqXG5cbkFscmlnaHQsIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoZSBrZXJuZWwgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgWERQIGZyYW1ld29yay4gSSBzZWUgdGhhdCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyBwb3RlbnRpYWxseSBleHBvc2VkIGluIGBuZXQvY29yZS9kZXYuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIklzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgaW50ZW5kZWQgdG8gYmUgdXNlZCBleHRlcm5hbGx5PyBJcyBpdCB0cnVseSBleHBvcnRlZCwgb3IgZGlkIGl0IHNsaXAgb3V0IGFzIG5vbi1zdGF0aWMsIGJ5IG1pc3Rha2U/XCIgVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIGFjY2lkZW50YWxseSBleHBvcnRpbmcgc29tZXRoaW5nIGNhbiBpbnRyb2R1Y2UgY29tcGF0aWJpbGl0eSBpc3N1ZXMgZG93biB0aGUgbGluZSBhbmQgbWFrZSBtYWludGVuYW5jZSBhIG5pZ2h0bWFyZS4gSXQgY291bGQgYWxzbyBoYXZlIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gTm93LCBsZXQncyBjb25maXJtIHdoZXRoZXIgaXQncyB0cnVseSBpbnRlbmRlZCB0byBiZSB2aXNpYmxlIG91dHNpZGUgb2YgdGhlIGZpbGUuIFRpbWUgdG8gY2hlY2sgdGhvc2UgZXhwb3J0IGZsYWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjI3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjM6MDYuMzk0OTUzMzcxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTc5OTE4NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMzowNi42MDA3NjU1MzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTgzMDk2OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVidWdnaW5nIGEgTWlzc2luZyBFeHBvcnQqKlxuXG5IbW0sIHRoaXMgaXMgY3VyaW91cy4gSSBleHBlY3RlZCB0byBmaW5kIHRoaXMgZnVuY3Rpb24gZXhwb3J0ZWQsIGJ1dCBpdCdzIG5vdC4gQW5kIHlldCwgaXQncyAqbm90KiBzdGF0aWMsIHdoaWNoIGNvbXBsaWNhdGVzIHRoaW5ncyBmdXJ0aGVyLiBUaGF0IHN1Z2dlc3RzIGl0IHNob3VsZCBiZSB2aXNpYmxlIG91dHNpZGUgaXRzIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhlIGxpbmthZ2UgbXVzdCBiZSB0aGUgaXNzdWUuIExldCdzIGRpZyBpbnRvIGl0cyBkZWZpbml0aW9uLiBUaGUgbW9zdCBsaWtlbHkgcGxhY2UgZm9yIGEgY29yZSBuZXR3b3JrIGZ1bmN0aW9uIGxpa2UgdGhpcyBpcyBgbmV0L2NvcmUvZGV2LmNgLiBJJ2xsIGdvIGNoZWNrIHRoYXQgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24gd2l0aCBpdCwgaW4gdGhlIHNvdXJjZS4gU29tZXRoaW5nIGlzIHdyb25nIHdpdGggdGhlIHdheSBpdCdzIGJlaW5nIGxpbmtlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUwMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjIzOjA5Ljc4Mzg2NTc5MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc5NzU5MDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTQyOTY9c3RhdGljIGlubGluZSB2b2lkIGRldl9jb25zdW1lX3NrYl9hbnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDMwMC1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQzMDE6dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQzMDItXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjM6MTAuMDYzNjM3MTQ2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NTcxNzU1MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWERQIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBiZWluZyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhICpjcml0aWNhbCogbmV0d29ya2luZyBmdW5jdGlvbiwgcmlnaHQgYXQgdGhlIGhlYXJ0IG9mIHRoaW5ncy4gVGhpcyBtZWFucyBhbnkgY2hhbmdlIGhlcmUgZGVtYW5kcyBzZXJpb3VzIHNjcnV0aW55LiBUaGlzIHBhdGNoLCBzcGVjaWZpY2FsbHksIGFkZHJlc3NlcyBhbiBpc3N1ZSB3aGVyZSBgc2tiLVx1MDAzZWxlbmAgaXNuJ3QgcHJvcGVybHkgc3luY2VkIHVwIHdpdGggYHNrYi1cdTAwM2VkYXRhX2xlbmAgY2hhbmdlcyB0aGF0IGhhcHBlbiBiZWNhdXNlIG9mIFhEUCBmcmFnbWVudCBoYW5kbGluZy4gVGhhdCdzIGEgZnVuY3Rpb25hbCBjb3JyZWN0aW9uIGFmZmVjdGluZyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYW5kLCBub3RhYmx5LCB0aGUgdmV0aCBkcml2ZXIuXG5cbkdpdmVuIGl0cyBjb3JlIG5hdHVyZSBhbmQgdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlLCBjYXNjYWRpbmcgY29uc2VxdWVuY2VzIGZyb20gYSBsZW5ndGggbWlzbWF0Y2ggaW4gYW4gU0tCLCB0aGlzIHNjcmVhbXMgZm9yIGZ1enppbmcuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgcGFja2V0IHByb2Nlc3NpbmcsIGFuZCB0aG9zZSB0eXBlcyBvZiBidWdzIGNhbiBsZWFkIHRvIGFsbCBraW5kcyBvZiBoYXZvYy5cblxuTXkgaW1tZWRpYXRlIGZvY3VzIHBvaW50cyBhcmUsIGFzIHN0YXRlZCBpbiB0aGUgcGF0Y2ggZGVzY3JpcHRpb24sIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIG9mIGNvdXJzZSwgYXMgdGhlIGRpcmVjdGx5IGFmZmVjdGVkIGZ1bmN0aW9uLCBhbmQgYHZldGhfeGRwX3JjdmAgc2luY2UgYHZldGhfeGRwX3Jjdl9za2JgIGlzIHN0YXRpYywgd2UnbGwgd2FudCB0byBmb2N1cyBvbiB0aGlzIGZ1bmN0aW9uLiBTaW5jZSB0aGUgVkVUSCBkcml2ZXIgaXMgY2FsbGVkIG91dCwgd2UnbGwgd2FudCB0byBlbnN1cmUgdGhhdCBpdCBoYXMgY29ycmVjdCBYRFAgYmVoYXZpb3VyLlxuXG5Ob3csIGxldCBtZSBqdXN0IGNvbmZpcm0gbXkgc3VzcGljaW9ucyBhYm91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkgZXhwZWN0IHRvIGZpbmQgYFZFVEhgLCBuYXR1cmFsbHkuIEnigJlsbCBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYEJQRl9TWVNDQUxMYCBpcyBlbmFibGVkIOKAkyB3ZSBuZWVkIHRoYXQgdG8gZXZlbiAqdXNlKiBYRFAuIEFuZCwgb2YgY291cnNlLCB0aGUgZ2VuZXJhbCBuZXR3b3JraW5nIHN1cHBvcnQgZmxhZywgYE5FVGAsIG5lZWRzIHRvIGJlIHRoZXJlLiBUaW1lIHRvIGp1bXAgb3ZlciB0byBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgYW5kIHZlcmlmeSB0aGF0IHRoZSBgVkVUSGAgb3B0aW9uIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGFuZCBub3QgYWNjaWRlbnRhbGx5IGRpc2FibGVkLiBMZXQncyBtYWtlIHN1cmUgb3VyIGVudmlyb25tZW50IGlzIHNldHVwIHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODUwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjIzOjE1LjYyMDgxNTM1N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2ODQ2NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRVRIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz00MjE9Y29uZmlnIFRVTl9WTkVUX0NST1NTX0xFXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjQzNTpjb25maWcgVkVUSFxcbmRyaXZlcnMvbmV0L0tjb25maWctNDM2LVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIGV0aGVybmV0IHBhaXIgZGV2aWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMzoxNS44Mzc2NzQ0MjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxNTk4Njc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBDb25maWd1cmF0aW9uIGluIGBuZXQvY29yZS9kZXYuY2AqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIHNvbWUgbnVhbmNlZCBjb25maWd1cmF0aW9uIGluZmx1ZW5jaW5nIHRoZSBiZWhhdmlvciBvZiBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYC4gSSdtIHRoaW5raW5nLCBcIklzIHRoZXJlIGFueXRoaW5nIHNwZWNpZmljIGluIGBuZXQvY29yZS9kZXYuY2AgcmVsYXRlZCB0byBpdD9cIiBUaGlzIGlzIHRoZSBrZXJuZWwncyBjb3JlIG5ldHdvcmsgZGV2aWNlIGNvZGUsIHNvIGl0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gSSdtIHByaW1hcmlseSBsb29raW5nIGZvciBhbnkgY29uZGl0aW9uYWwgbG9naWMsIGZsYWdzLCBvciBwYXJhbWV0ZXJzIHRoYXQgbWlnaHQgc3VidGx5IGFsdGVyIGhvdyBgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwYCBpcyBjYWxsZWQgb3Igd2hhdCBpdCBkb2VzIHVuZGVyIHRoZSBob29kLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGZvciBYRFAgcHJvZ3JhbXMsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGVudmlyb25tZW50IGlzIGNyaXRpY2FsIGZvciBkZWJ1Z2dpbmcgb3Igb3B0aW1pemluZy4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuLi4gSSBzdXNwZWN0IHRoZXJlIGNvdWxkIGJlIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTQ1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjM6MjAuMTUzNjY0NzE2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU4Nzg5NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTU0MzU9c3RhdGljIHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKm5ldGlmX2dldF9yeHF1ZXVlKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01NDU3LVxcbm5ldC9jb3JlL2Rldi5jOjU0NTg6dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG5uZXQvY29yZS9kZXYuYy01NDU5LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTU1ODg9c3RhdGljIHUzMiBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICoqcHNrYixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU2MTUtXFxubmV0L2NvcmUvZGV2LmM6NTYxNjpcXHRhY3QgPSBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHAoKnBza2IsIHhkcCwgeGRwX3Byb2cpO1xcbm5ldC9jb3JlL2Rldi5jLTU2MTctXFx0c3dpdGNoIChhY3QpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjM6MjAuNDA5NTUwMDIyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MzU2NjA5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuQWxyaWdodCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFsd2F5cyB0byBxdWlja2x5IGFzc2VzcyBpZiB0aGlzIHNlY3Rpb24gb2YgY29kZSBpcyBwb3RlbnRpYWxseSBnb3Zlcm5lZCBieSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBjaGVjayBmb3IgaXMgYW4gYCNpZmRlZmAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBzdXJyb3VuZGluZyB0aGUgcmVsZXZhbnQgY29kZS4gSXMgaXQgbmVzdGxlZCB3aXRoaW4gYW55IG9mIHRob3NlPyBUaGF0J3MgYSBjcml0aWNhbCBmaXJzdCBmaWx0ZXIuIEl0IGNvdWxkIGJlIHRoYXQgdGhpcyBiZWhhdmlvciBpcyBvbmx5IGVuYWJsZWQsIG9yIGRpc2FibGVkLCBkZXBlbmRpbmcgb24gYSBwYXJ0aWN1bGFyIGJ1aWxkIGNvbmZpZ3VyYXRpb24sIHRhcmdldCBwbGF0Zm9ybSwgb3IgZmVhdHVyZSBmbGFnLiBUaGF0IHNpbmdsZSBjaGVjayBjb3VsZCBleHBsYWluIGV2ZXJ5dGhpbmcuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDg2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMzoyMy4zNDUyMTQzMTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU1MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0NTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU0NTA6XFx0XFxuNTQ1MTpcXHRcXHRcXHRcXHRyZXR1cm4gcnhxdWV1ZTsgLyogUmV0dXJuIGZpcnN0IHJ4cXVldWUgKi9cXG41NDUyOlxcdFxcdFxcdH1cXG41NDUzOlxcdFxcdFxcdHJ4cXVldWUgKz0gaW5kZXg7XFxuNTQ1NDpcXHRcXHR9XFxuNTQ1NTpcXHRcXHRyZXR1cm4gcnhxdWV1ZTtcXG41NDU2OlxcdH1cXG41NDU3OlxcdFxcbjU0NTg6XFx0dTMyIGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG41NDU5OlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZylcXG41NDYwOlxcdHtcXG41NDYxOlxcdFxcdHZvaWQgKm9yaWdfZGF0YSwgKm9yaWdfZGF0YV9lbmQsICpoYXJkX3N0YXJ0O1xcbjU0NjI6XFx0XFx0c3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqcnhxdWV1ZTtcXG41NDYzOlxcdFxcdGJvb2wgb3JpZ19iY2FzdCwgb3JpZ19ob3N0O1xcbjU0NjQ6XFx0XFx0dTMyIG1hY19sZW4sIGZyYW1lX3N6O1xcbjU0NjU6XFx0XFx0X19iZTE2IG9yaWdfZXRoX3R5cGU7XFxuNTQ2NjpcXHRcXHRzdHJ1Y3QgZXRoaGRyICpldGg7XFxuNTQ2NzpcXHRcXHR1MzIgbWV0YWxlbiwgYWN0O1xcbjU0Njg6XFx0XFx0aW50IG9mZjtcXG41NDY5OlxcdFxcbjU0NzA6XFx0XFx0LyogVGhlIFhEUCBwcm9ncmFtIHdhbnRzIHRvIHNlZSB0aGUgcGFja2V0IHN0YXJ0aW5nIGF0IHRoZSBNQUNcXG41NDcxOlxcdFxcdCAqIGhlYWRlci5cXG41NDcyOlxcdFxcdCAqL1xcbjU0NzM6XFx0XFx0bWFjX2xlbiA9IHNrYi1cXHUwMDNlZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYik7XFxuNTQ3NDpcXHRcXHRoYXJkX3N0YXJ0ID0gc2tiLVxcdTAwM2VkYXRhIC0gc2tiX2hlYWRyb29tKHNrYik7XFxuNTQ3NTpcXHRcXG41NDc2OlxcdFxcdC8qIFNLQiBcXFwiaGVhZFxcXCIgYXJlYSBhbHdheXMgaGF2ZSB0YWlscm9vbSBmb3Igc2tiX3NoYXJlZF9pbmZvICovXFxuNTQ3NzpcXHRcXHRmcmFtZV9zeiA9ICh2b2lkICopc2tiX2VuZF9wb2ludGVyKHNrYikgLSBoYXJkX3N0YXJ0O1xcbjU0Nzg6XFx0XFx0ZnJhbWVfc3ogKz0gU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKTtcXG41NDc5OlxcdFxcbjU0ODA6XFx0XFx0cnhxdWV1ZSA9IG5ldGlmX2dldF9yeHF1ZXVlKHNrYik7XFxuNTQ4MTpcXHRcXHR4ZHBfaW5pdF9idWZmKHhkcCwgZnJhbWVfc3osIFxcdTAwMjZyeHF1ZXVlLVxcdTAwM2V4ZHBfcnhxKTtcXG41NDgyOlxcdFxcdHhkcF9wcmVwYXJlX2J1ZmYoeGRwLCBoYXJkX3N0YXJ0LCBza2JfaGVhZHJvb20oc2tiKSAtIG1hY19sZW4sXFxuNTQ4MzpcXHRcXHRcXHRcXHQgc2tiX2hlYWRsZW4oc2tiKSArIG1hY19sZW4sIHRydWUpO1xcbjU0ODQ6XFx0XFx0aWYgKHNrYl9pc19ub25saW5lYXIoc2tiKSkge1xcbjU0ODU6XFx0XFx0XFx0c2tiX3NoaW5mbyhza2IpLVxcdTAwM2V4ZHBfZnJhZ3Nfc2l6ZSA9IHNrYi1cXHUwMDNlZGF0YV9sZW47XFxuNTQ4NjpcXHRcXHRcXHR4ZHBfYnVmZl9zZXRfZnJhZ3NfZmxhZyh4ZHApO1xcbjU0ODc6XFx0XFx0fSBlbHNlIHtcXG41NDg4OlxcdFxcdFxcdHhkcF9idWZmX2NsZWFyX2ZyYWdzX2ZsYWcoeGRwKTtcXG41NDg5OlxcdFxcdH1cXG41NDkwOlxcdFxcbjU0OTE6XFx0XFx0b3JpZ19kYXRhX2VuZCA9IHhkcC1cXHUwMDNlZGF0YV9lbmQ7XFxuNTQ5MjpcXHRcXHRvcmlnX2RhdGEgPSB4ZHAtXFx1MDAzZWRhdGE7XFxuNTQ5MzpcXHRcXHRldGggPSAoc3RydWN0IGV0aGhkciAqKXhkcC1cXHUwMDNlZGF0YTtcXG41NDk0OlxcdFxcdG9yaWdfaG9zdCA9IGV0aGVyX2FkZHJfZXF1YWxfNjRiaXRzKGV0aC1cXHUwMDNlaF9kZXN0LCBza2ItXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbjU0OTU6XFx0XFx0b3JpZ19iY2FzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyXzY0Yml0cyhldGgtXFx1MDAzZWhfZGVzdCk7XFxuNTQ5NjpcXHRcXHRvcmlnX2V0aF90eXBlID0gZXRoLVxcdTAwM2VoX3Byb3RvO1xcbjU0OTc6XFx0XFxuNTQ5ODpcXHRcXHRhY3QgPSBicGZfcHJvZ19ydW5feGRwKHhkcF9wcm9nLCB4ZHApO1xcbjU0OTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjIzOjIzLjM0NjE3MjcxOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjY5ODUyMzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoeSB0aGlzIGNvZGUgaXNuJ3QgYmVpbmcgY29tcGlsZWQgY29uZGl0aW9uYWxseS4gRmlyc3QsIEkgY2hlY2tlZCBgbmV0L2NvcmUvZGV2LmNgIGFuZCBkaWRuJ3Qgc2VlIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgYmUgaW1wYWN0aW5nIGl0IHRoZXJlLiBIbW0uIFRoZW4gSSByZW1lbWJlcmVkIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLiBJcyB0aGF0IHBhcnQgb2YgaXQ/IFRoZSB0aGluZyBpcywgaXQncyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHkgYXMgbG9uZyBhcyBgQ09ORklHX05FVGAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgcHJldHR5IGJyb2FkLiBUaGF0IGRvZXNuJ3Qgc2VlbSB0byBuYXJyb3cgaXQgZG93biBlbm91Z2guIExldCdzIHNlZS4uLiBXYWl0IGEgc2Vjb25kLCB0aGUgYGJwZl9wcm9nX3J1bl94ZHBgIGZ1bmN0aW9uIGl0c2VsZiBpcyBhY3R1YWxseSBkZWZpbmVkIGluIGFuIGluY2x1ZGUgZmlsZS4gSXQncyBpbiBzb21ldGhpbmcgbGlrZSBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAuIE9rYXksIHNvIHdoZXJlIHRoYXQgaXMgZGVmaW5lZCBpc24ndCB0aGUgcHJvYmxlbS4gTGV0J3MgcGl2b3QgYW5kIGxvb2sgYXQgdGhlIGBWRVRIYCBkZXBlbmRlbmNpZXMgdG8gc2VlIGlmIHNvbWV0aGluZyB0aGVyZSBpcyBibG9ja2luZyBpdC4gVGhhdCBzZWVtcyBsaWtlIGEgbW9yZSBwcm9taXNpbmcgYXZlbnVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTYyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMzoyNy42MTYwMjg5MTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDYwMjYwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkVUSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9NDIxPWNvbmZpZyBUVU5fVk5FVF9DUk9TU19MRVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MzQtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MzU6Y29uZmlnIFZFVEhcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQzNi1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBldGhlcm5ldCBwYWlyIGRldmljZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjM6MjcuODU2NjM5NzA5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NzA3OTY0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgTmV0IERyaXZlcnMgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHNvbWV0aGluZyBuZXR3b3JrLXJlbGF0ZWQsIGFuZCB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYSBwYXJ0aWN1bGFyIHNldCBvZiBkcml2ZXJzLCBzbyBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIGBkcml2ZXJzL25ldC9LY29uZmlnYC4gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBpdHMgbmV0d29yayBmZWF0dXJlcywgYW5kIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBLY29uZmlnIGZpbGVzIGFyZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFzcGVjdHMuIExpbmUgNDM1Li4uIHRoYXQncyBwcm9iYWJseSB3aGVyZSBhIHNwZWNpZmljIHNldCBvZiBvcHRpb25zIG9yIGEgcmVsZXZhbnQgbWVudSBlbnRyeSByZWxhdGVkIHRvIHRoZSBkcml2ZXJzIEknbSBpbnRlcmVzdGVkIGluIHN0YXJ0cy4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU3NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjIzOjMxLjQyNzQzOTQ5NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODE1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MzA6XFx0XFx0ICBhbmQgVFVOR0VUVk5FVEJFIGlvY3Rscy5cXG4gNDMxOlxcdFxcbiA0MzI6XFx0XFx0ICBVbmxlc3MgeW91IGhhdmUgYSBsaXR0bGUtZW5kaWFuIHN5c3RlbSBob3N0aW5nIGEgYmlnLWVuZGlhbiB2aXJ0dWFsXFxuIDQzMzpcXHRcXHQgIG1hY2hpbmUgd2l0aCBhIGxlZ2FjeSB2aXJ0aW8gTklDLCB5b3Ugc2hvdWxkIHNheSBOLlxcbiA0MzQ6XFx0XFxuIDQzNTpcXHRjb25maWcgVkVUSFxcbiA0MzY6XFx0XFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgZXRoZXJuZXQgcGFpciBkZXZpY2VcXFwiXFxuIDQzNzpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuIDQzODpcXHRcXHRoZWxwXFxuIDQzOTpcXHRcXHQgIFRoaXMgZGV2aWNlIGlzIGEgbG9jYWwgZXRoZXJuZXQgdHVubmVsLiBEZXZpY2VzIGFyZSBjcmVhdGVkIGluIHBhaXJzLlxcbiA0NDA6XFx0XFx0ICBXaGVuIG9uZSBlbmQgcmVjZWl2ZXMgdGhlIHBhY2tldCBpdCBhcHBlYXJzIG9uIGl0cyBwYWlyIGFuZCB2aWNlXFxuIDQ0MTpcXHRcXHQgIHZlcnNhLlxcbiA0NDI6XFx0XFxuIDQ0MzpcXHRjb25maWcgVklSVElPX05FVFxcbiA0NDQ6XFx0XFx0dHJpc3RhdGUgXFxcIlZpcnRpbyBuZXR3b3JrIGRyaXZlclxcXCJcXG4gNDQ1OlxcdFxcdGRlcGVuZHMgb24gVklSVElPXFxuIDQ0NjpcXHRcXHRzZWxlY3QgTkVUX0ZBSUxPVkVSXFxuIDQ0NzpcXHRcXHRzZWxlY3QgRElNTElCXFxuIDQ0ODpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuIDQ0OTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjIzOjMxLjQyODIyNDAxNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzI0NDA0MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBWRVRIIFhEUCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgYFZFVEhgIHBhdGNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IG5vIGhpZGRlbiBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2Qgc3RhcnQuIEZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGUgY29yZSBtb2RpZmljYXRpb24gaXMgdG8gYHZldGhfeGRwX3Jjdl9za2JgLCB3aGljaCBpcywgb2YgY291cnNlLCBjYWxsZWQgYnkgYHZldGhfeGRwX3JjdmAuIE5hdHVyYWxseSwgYHZldGhfeGRwX3JjdmAgaGFuZGxlcyB0aGUgcHJvY2Vzc2luZyBvZiBYRFAgcGFja2V0cyBzcGVjaWZpY2FsbHkgb24gdGhlIHZldGggaW50ZXJmYWNlLiBJdCBhbGwgc2VlbXMgbG9naWNhbCBzbyBmYXIuIFRoZSBrZXkgZnVuY3Rpb24gYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXMgYWxzbyBpbiB0aGUgbWl4LCBhcyBleHBlY3RlZCwgdGhpcyBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHJ1bm5pbmcgZ2VuZXJpYyBYRFAgcHJvZ3JhbXMgb24gYW55IG5ldHdvcmsgZGV2aWNlLlxuXG5Fc3NlbnRpYWxseSwgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnRzIHRoYXQgYWRkcmVzcyBhbiBpc3N1ZSByZWxhdGVkIHRvIGBza2ItXHUwMDNlbGVuYCB3aGVuIGBza2ItXHUwMDNlZGF0YV9sZW5gIGdldHMgbW9kaWZpZWQgYmVjYXVzZSBvZiBYRFAgZnJhZ21lbnRzLiBJdCBzZWVtcyBsaWtlIGl0J3MgYWRkcmVzc2luZyBhbiBlZGdlIGNhc2Ugb3IgcG90ZW50aWFsIHNvdXJjZSBvZiBpbmNvcnJlY3QgcGFja2V0IGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gZnJhZ21lbnRlZCBYRFAgc2NlbmFyaW9zLlxuXG5Ob3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBpZiBgdmV0aF94ZHBfcmN2YCBpcyBzdGF0aWMuIFRoYXQgd291bGQgYmUgdXNlZnVsIGluZm9ybWF0aW9uIHRvIGhhdmUgZm9yIGNvbXBsZXRlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMzozNi4xNTI2MzI1NjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzUxODU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZXRoX3hkcF9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdmV0aC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3ZldGguYz02MjI9c3RhdGljIGludCB2ZXRoX3hkcF90eChzdHJ1Y3QgdmV0aF9ycSAqcnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTYzNy1cXG5kcml2ZXJzL25ldC92ZXRoLmM6NjM4OnN0YXRpYyBzdHJ1Y3QgeGRwX2ZyYW1lICp2ZXRoX3hkcF9yY3Zfb25lKHN0cnVjdCB2ZXRoX3JxICpycSxcXG5kcml2ZXJzL25ldC92ZXRoLmMtNjM5LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHhkcF9mcmFtZSAqZnJhbWUsXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtNzA4LS8qIGZyYW1lcyBhcnJheSBjb250YWlucyBWRVRIX1hEUF9CQVRDSCBhdCBtb3N0ICovXFxuZHJpdmVycy9uZXQvdmV0aC5jOjcwOTpzdGF0aWMgdm9pZCB2ZXRoX3hkcF9yY3ZfYnVsa19za2Ioc3RydWN0IHZldGhfcnEgKnJxLCB2b2lkICoqZnJhbWVzLFxcbmRyaXZlcnMvbmV0L3ZldGguYy03MTAtXFx0XFx0XFx0XFx0ICBpbnQgbl94ZHBmLCBzdHJ1Y3QgdmV0aF94ZHBfdHhfYnEgKmJxLFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jPTc1MT1zdGF0aWMgaW50IHZldGhfY29udmVydF9za2JfdG9feGRwX2J1ZmYoc3RydWN0IHZldGhfcnEgKnJxLFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTc4OS1cXG5kcml2ZXJzL25ldC92ZXRoLmM6NzkwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmV0aF94ZHBfcmN2X3NrYihzdHJ1Y3QgdmV0aF9ycSAqcnEsXFxuZHJpdmVycy9uZXQvdmV0aC5jLTc5MS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTkwMi1cXG5kcml2ZXJzL25ldC92ZXRoLmM6OTAzOnN0YXRpYyBpbnQgdmV0aF94ZHBfcmN2KHN0cnVjdCB2ZXRoX3JxICpycSwgaW50IGJ1ZGdldCxcXG5kcml2ZXJzL25ldC92ZXRoLmMtOTA0LVxcdFxcdFxcdHN0cnVjdCB2ZXRoX3hkcF90eF9icSAqYnEsXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtOTIwLVxcdFxcdFxcdHN0YXRzLVxcdTAwM2V4ZHBfYnl0ZXMgKz0geGRwX2dldF9mcmFtZV9sZW4oZnJhbWUpO1xcbmRyaXZlcnMvbmV0L3ZldGguYzo5MjE6XFx0XFx0XFx0ZnJhbWUgPSB2ZXRoX3hkcF9yY3Zfb25lKHJxLCBmcmFtZSwgYnEsIHN0YXRzKTtcXG5kcml2ZXJzL25ldC92ZXRoLmMtOTIyLVxcdFxcdFxcdGlmIChmcmFtZSkge1xcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTkyNS1cXHRcXHRcXHRcXHRpZiAobl94ZHBmID09IFZFVEhfWERQX0JBVENIKSB7XFxuZHJpdmVycy9uZXQvdmV0aC5jOjkyNjpcXHRcXHRcXHRcXHRcXHR2ZXRoX3hkcF9yY3ZfYnVsa19za2IocnEsIHhkcGYsIG5feGRwZixcXG5kcml2ZXJzL25ldC92ZXRoLmMtOTI3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGJxLCBzdGF0cyk7XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtOTM1LVxcdFxcdFxcdHN0YXRzLVxcdTAwM2V4ZHBfYnl0ZXMgKz0gc2tiLVxcdTAwM2VsZW47XFxuZHJpdmVycy9uZXQvdmV0aC5jOjkzNjpcXHRcXHRcXHRza2IgPSB2ZXRoX3hkcF9yY3Zfc2tiKHJxLCBza2IsIGJxLCBzdGF0cyk7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTkzNy1cXHRcXHRcXHRpZiAoc2tiKSB7XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtOTQ3LVxcdGlmIChuX3hkcGYpXFxuZHJpdmVycy9uZXQvdmV0aC5jOjk0ODpcXHRcXHR2ZXRoX3hkcF9yY3ZfYnVsa19za2IocnEsIHhkcGYsIG5feGRwZiwgYnEsIHN0YXRzKTtcXG5kcml2ZXJzL25ldC92ZXRoLmMtOTQ5LVxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jPTk2MT1zdGF0aWMgaW50IHZldGhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtOTgwLVxcdHhkcF9zZXRfcmV0dXJuX2ZyYW1lX25vX2RpcmVjdCgpO1xcbmRyaXZlcnMvbmV0L3ZldGguYzo5ODE6XFx0ZG9uZSA9IHZldGhfeGRwX3JjdihycSwgYnVkZ2V0LCBcXHUwMDI2YnEsIFxcdTAwMjZzdGF0cyk7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTk4Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjM6MzYuMzgwMTYyMTE3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzU1NzEzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVsdmluZyBpbnRvIHRoZSBWZXRoIERyaXZlcidzIFN0cnVjdHVyZSoqXG5cbk9rYXksIGxldCdzIHNlZS4uLiBJJ20gbG9va2luZyBhdCB0aGlzIHZldGggZHJpdmVyIGNvZGUsIHNwZWNpZmljYWxseSBhdCBob3cgaXQgaGFuZGxlcyBYRFAgcmVjZWl2ZS4gSSdtIG5vdGljaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZy4gQWxsIHRoZSBgdmV0aF94ZHBfcmN2KmAgZnVuY3Rpb25zLCBhbGwgdGhlIG9uZXMgaGFuZGxpbmcgdGhlIFhEUCByZWNlaXZlIHBhdGgsIGFyZSBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCdzIGEgY29tbW9uIHByYWN0aWNlIGZvciBpbnRlcm5hbCBmdW5jdGlvbnMsIGJ1dCBpdCdzIGEgZGV0YWlsIHdvcnRoIG5vdGluZy5cblxuQWgsIGhlcmUncyB0aGUgZW50cnkgcG9pbnQ6IGB2ZXRoX3BvbGxgLiBUaGlzIGlzIHRoZSBOQVBJIHBvbGwgZnVuY3Rpb24sIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSBpdCdzIHRoZSBnYXRld2F5IGZvciByZWNlaXZpbmcgcGFja2V0cy5cblxuV2FpdCBhIHNlY29uZC4uLiBgdmV0aF9wb2xsYCBpcyBhbHNvIGRlY2xhcmVkIGFzIGBzdGF0aWNgISBUaGF0J3MgdW5leHBlY3RlZC4gU28sIGl0J3MgcmVnaXN0ZXJlZCBhcyB0aGUgTkFQSSBwb2xsIGZ1bmN0aW9uLCB5ZXQgaXQncyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBgdmV0aC5jYCBmaWxlLiBUaGlzIHN1Z2dlc3RzIGEgdmVyeSBsb2NhbGl6ZWQgYXJjaGl0ZWN0dXJlLCB3aGVyZSB0aGUgdmV0aCBkcml2ZXIgdGlnaHRseSBjb250cm9scyBpdHMgb3duIHJlY2VpdmUgcGF0aC4gSG1tLCB0aGF0J3Mgbm90IHdoYXQgSSB3b3VsZCBoYXZlIGV4cGVjdGVkLCBidXQgaXQgZG9lcyBtZWFuIHRoYXQgdGhpcyBmaWxlLCBhbmQgdGhlcmVmb3JlIHRoZSBWRVRIIG1vZHVsZSwgaXMgbW9zdGx5IHNlbGYgY29udGFpbmVkLlxuXG5Tbywgbm93IEknbSB0aGlua2luZywgaXMgdGhlcmUgKmFueSogbm9uLXN0YXRpYyBmdW5jdGlvbiBpbiBgdmV0aC5jYD8gT3RoZXIgdGhhbiB0aGUgb2J2aW91cyBpbml0aWFsaXphdGlvbiBhbmQgbW9kdWxlIGVudHJ5IHBvaW50cywgd2hhdCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGV4cG9zZWQ/IFRoaXMgaXNvbGF0aW9uIGlzIGludHJpZ3VpbmcgYW5kIHN1Z2dlc3RzIGEgc3BlY2lmaWMgZGVzaWduIHBoaWxvc29waHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzkwLCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjM6NDAuNzE1NzM3MzRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTE3OTU4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiB2ZXRoX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC92ZXRoLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdmV0aC5jLTQyLVxcbmRyaXZlcnMvbmV0L3ZldGguYzo0MzpzdHJ1Y3QgdmV0aF9zdGF0cyB7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTQ0LVxcdHU2NFxcdHJ4X2Ryb3BzO1xcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTU1LVxcbmRyaXZlcnMvbmV0L3ZldGguYzo1NjpzdHJ1Y3QgdmV0aF9ycV9zdGF0cyB7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTU3LVxcdHN0cnVjdCB2ZXRoX3N0YXRzXFx0dnM7XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtNjAtXFxuZHJpdmVycy9uZXQvdmV0aC5jOjYxOnN0cnVjdCB2ZXRoX3JxIHtcXG5kcml2ZXJzL25ldC92ZXRoLmMtNjItXFx0c3RydWN0IG5hcGlfc3RydWN0XFx0eGRwX25hcGk7XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtNzMtXFxuZHJpdmVycy9uZXQvdmV0aC5jOjc0OnN0cnVjdCB2ZXRoX3ByaXYge1xcbmRyaXZlcnMvbmV0L3ZldGguYy03NS1cXHRzdHJ1Y3QgbmV0X2RldmljZSBfX3JjdVxcdCpwZWVyO1xcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTgxLVxcbmRyaXZlcnMvbmV0L3ZldGguYzo4MjpzdHJ1Y3QgdmV0aF94ZHBfdHhfYnEge1xcbmRyaXZlcnMvbmV0L3ZldGguYy04My1cXHRzdHJ1Y3QgeGRwX2ZyYW1lICpxW1ZFVEhfWERQX1RYX0JVTEtfU0laRV07XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtOTAtXFxuZHJpdmVycy9uZXQvdmV0aC5jOjkxOnN0cnVjdCB2ZXRoX3Ffc3RhdF9kZXNjIHtcXG5kcml2ZXJzL25ldC92ZXRoLmMtOTItXFx0Y2hhclxcdGRlc2NbRVRIX0dTVFJJTkdfTEVOXTtcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYz0xMTc9c3RhdGljIHN0cnVjdCB7XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtMTIyLVxcbmRyaXZlcnMvbmV0L3ZldGguYzoxMjM6c3RydWN0IHZldGhfeGRwX2J1ZmYge1xcbmRyaXZlcnMvbmV0L3ZldGguYy0xMjQtXFx0c3RydWN0IHhkcF9idWZmIHhkcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjM6NDAuODc2OTI1MTE3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjYxMDIyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlJldmlzZWQgUmVnZXggQ29uc2lkZXJhdGlvbnMqKlxuXG5IbW0sIEkgdGhpbmsgSSBqdW1wZWQgdGhlIGd1biB0aGVyZSB3aXRoIHRoYXQgaW5pdGlhbCByZWdleC4gT24gc2Vjb25kIHRob3VnaHQsIHRoYXQncyBwcm9iYWJseSB0b28gYnJvYWQuIEkgbmVlZCBzb21ldGhpbmcgbW9yZSB0YXJnZXRlZCBmb3IgdGhvc2UgYHZldGhfYCBmdW5jdGlvbiBuYW1lcy4gT2theSwgc28gSSBzaG91bGQgcmVmaW5lIGl0LiBMZXQncyB0cnkgdG8gZm9jdXMgb24gdGhlIGxpa2VseSByZXR1cm4gdHlwZXMgSSdkIHNlZSBpbiB0aGlzIGNvbnRleHQuIFJhdGhlciB0aGFuIG1hdGNoaW5nIGFueXRoaW5nLCBsZXQncyBzdGFydCB3aXRoIGEgc3RyaWN0ZXIgYXBwcm9hY2guIEknbSB0aGlua2luZyBzb21ldGhpbmcgdGhhdCBzcGVjaWZpY2FsbHkgbG9va3MgZm9yIGVpdGhlciBgaW50IHZldGhfYCBvciBgdm9pZCB2ZXRoX2AgYXMgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLiBUaGF0IHNob3VsZCBuYXJyb3cgaXQgZG93biBjb25zaWRlcmFibHkgYW5kIGdpdmUgbWUgYSBjbGVhbmVyLCBtb3JlIGZvY3VzZWQgc2V0IG9mIHJlc3VsdHMuIExldCdzIHNlZSBpZiB0aG9zZSBleHByZXNzaW9ucywgYF5pbnQgdmV0aF9gIG9yIGBedm9pZCB2ZXRoX2AsIHdvcmsgYXMgZXhwZWN0ZWQgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuIEknbGwgbmVlZCB0byB0ZXN0IGFuZCB2YWxpZGF0ZSB0aGVtIHRob3JvdWdobHksIG9mIGNvdXJzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNzMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMzo0NC42MDMwMzE2MTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjY1Nzc2NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZHxzdHJ1Y3Qgc2tfYnVmZiBcXFxcKikgdmV0aF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdmV0aC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMzo0NC44MzU2OTgwNDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5NTY3MTAyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZldGggRHJpdmVyIGZvciBCUEYgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGJhc2VkIG9uIHdoYXQgSSdtIHNlZWluZywgdGhvc2UgYHZldGhfLi4uYCBmdW5jdGlvbnMgYXJlICpsaWtlbHkqIGRlY2xhcmVkIGFzIGBzdGF0aWMgaW50YCB3aXRoaW4gdGhlIFZldGggZHJpdmVyLiBNeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgb24gYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgYXMgdGhlIGNvcmUgc3ltYm9sIHRvIGxvb2sgYXQsIGFzIGl0J3MgYSBrbm93biBCUEYgZW50cnkgcG9pbnQuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSBWZXRoIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhhdC4gUGVyaGFwcyBgdmV0aF94bWl0YCBvciBgdmV0aF9wb2xsYCBhcmUgcG90ZW50aWFsIGhvb2tzIGlmIHRoZXkncmUgZXhwb3J0ZWQgb3Igd2VyZW4ndCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gRGFtbiwgbG9va3MgbGlrZSBgdmV0aF94bWl0YCBpcyAqYWxzbyogc3RhdGljLiBJIGtuZXcgdGhhdCBzZWVtZWQgdG9vIGVhc3kuIFRoYXQncyBhIGJpdCBvZiBhIHJvYWRibG9jay4gQWgsIHJpZ2h0LCBpdCdzIHJlZ2lzdGVyZWQgaW4gYG5ldF9kZXZpY2Vfb3BzYCwgdGhhdCdzIHRoZSBrZXkuIE9rYXksIEkgbmVlZCB0byBjaGVjayB0aGUgYG5ldF9kZXZpY2Vfb3BzYCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgd2l0aGluIGB2ZXRoLmNgIHRvIHNlZSBob3cgdGhvc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXRpbGl6ZWQgYW5kIGlmIHRoZXJlJ3MgYW55IHdheSB0byBpbnRlcmFjdCB3aXRoIHRoZW0gdmlhIEJQRiBob29rcy4gVGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjM6NDkuMDMxMzcyMzYxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDE5MTIyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmV0aF9uZXRkZXZfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3ZldGguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC92ZXRoLmM9MTY4Nz1zdGF0aWMgaW50IHZldGhfeGRwX3J4X3ZsYW5fdGFnKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKmN0eCwgX19iZTE2ICp2bGFuX3Byb3RvLFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTE3MDQtXFxuZHJpdmVycy9uZXQvdmV0aC5jOjE3MDU6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2ZXRoX25ldGRldl9vcHMgPSB7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTE3MDYtXFx0Lm5kb19pbml0ICAgICAgICAgICAgPSB2ZXRoX2Rldl9pbml0LFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jPTE3Mzg9c3RhdGljIHZvaWQgdmV0aF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTE3NDgtXFxuZHJpdmVycy9uZXQvdmV0aC5jOjE3NDk6XFx0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNnZldGhfbmV0ZGV2X29wcztcXG5kcml2ZXJzL25ldC92ZXRoLmMtMTc1MC1cXHRkZXYtXFx1MDAzZXhkcF9tZXRhZGF0YV9vcHMgPSBcXHUwMDI2dmV0aF94ZHBfbWV0YWRhdGFfb3BzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMzo0OS42MzMzMDY4NTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2Njg3NzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGB2ZXRoX25ldGRldl9vcHNgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIHRoZXNlIHZpcnR1YWwgRXRoZXJuZXQgaW50ZXJmYWNlcywgc3BlY2lmaWNhbGx5LCB0aGUgYmVoYXZpb3IgZGVmaW5lZCBieSBgdmV0aF9uZXRkZXZfb3BzYC4gSSdtIHN0YXJ0aW5nIGZyb20gc2NyYXRjaCBoZXJlLCBhbmQgSSB3YW50IHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFNvLCBteSBmaXJzdCB0aG91Z2h0IGlzLCB3aGF0ICpleGFjdGx5KiBhcmUgdGhlIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdHJ1Y3R1cmU/IEtub3dpbmcgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiBgdmV0aF9uZXRkZXZfb3BzYCB3aWxsIGdpdmUgbWUgYSBjbGVhciBvdmVydmlldyBvZiBob3cgdGhlIHZpcnR1YWwgRXRoZXJuZXQgZGV2aWNlIGJlaGF2ZXMuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUga2V5IG9wZXJhdGlvbnMgYW5kIGVudHJ5IHBvaW50cy4gSSBuZWVkIHRvIGtub3cgdGhlIG1ldGhvZHMgcmVsYXRlZCB0byB0aGluZ3MgbGlrZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24sIGNvbmZpZ3VyYXRpb24sIGFuZCBzdGF0ZSBjaGFuZ2VzLiBHZXR0aW5nIGEgbGlzdCBvZiB0aG9zZSBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIHRoZSBidWlsZGluZyBibG9ja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjAyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjM6NTMuMDAwMTg4NjgxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC92ZXRoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTcwNTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZldGhfbmV0ZGV2X29wcyA9IHtcXG4xNzA2OlxcdFxcdC5uZG9faW5pdCAgICAgICAgICAgID0gdmV0aF9kZXZfaW5pdCxcXG4xNzA3OlxcdFxcdC5uZG9fb3BlbiAgICAgICAgICAgID0gdmV0aF9vcGVuLFxcbjE3MDg6XFx0XFx0Lm5kb19zdG9wICAgICAgICAgICAgPSB2ZXRoX2Nsb3NlLFxcbjE3MDk6XFx0XFx0Lm5kb19zdGFydF94bWl0ICAgICAgPSB2ZXRoX3htaXQsXFxuMTcxMDpcXHRcXHQubmRvX2dldF9zdGF0czY0ICAgICA9IHZldGhfZ2V0X3N0YXRzNjQsXFxuMTcxMTpcXHRcXHQubmRvX3NldF9yeF9tb2RlICAgICA9IHZldGhfc2V0X211bHRpY2FzdF9saXN0LFxcbjE3MTI6XFx0XFx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgPSBldGhfbWFjX2FkZHIsXFxuMTcxMzpcXHQjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG4xNzE0OlxcdFxcdC5uZG9fcG9sbF9jb250cm9sbGVyXFx0PSB2ZXRoX3BvbGxfY29udHJvbGxlcixcXG4xNzE1OlxcdCNlbmRpZlxcbjE3MTY6XFx0XFx0Lm5kb19nZXRfaWZsaW5rXFx0XFx0PSB2ZXRoX2dldF9pZmxpbmssXFxuMTcxNzpcXHRcXHQubmRvX2ZpeF9mZWF0dXJlc1xcdD0gdmV0aF9maXhfZmVhdHVyZXMsXFxuMTcxODpcXHRcXHQubmRvX3NldF9mZWF0dXJlc1xcdD0gdmV0aF9zZXRfZmVhdHVyZXMsXFxuMTcxOTpcXHRcXHQubmRvX2ZlYXR1cmVzX2NoZWNrXFx0PSBwYXNzdGhydV9mZWF0dXJlc19jaGVjayxcXG4xNzIwOlxcdFxcdC5uZG9fc2V0X3J4X2hlYWRyb29tXFx0PSB2ZXRoX3NldF9yeF9oZWFkcm9vbSxcXG4xNzIxOlxcdFxcdC5uZG9fYnBmXFx0XFx0PSB2ZXRoX3hkcCxcXG4xNzIyOlxcdFxcdC5uZG9feGRwX3htaXRcXHRcXHQ9IHZldGhfbmRvX3hkcF94bWl0LFxcbjE3MjM6XFx0XFx0Lm5kb19nZXRfcGVlcl9kZXZcXHQ9IHZldGhfcGVlcl9kZXYsXFxuMTcyNDpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMzo1My4wMDAzOTkzMzFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM5ODg3MjI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOYXZpZ2F0aW5nIHRoZSBYRFAgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdmV0aF94ZHBfcmN2YCBmdW5jdGlvbiwgYW5kIGl0J3Mgc3RhdGljLCB3aGljaCBpcyBhIGJpdCBvZiBhIHJvYWRibG9jay4gSSBjYW4ndCB1c2UgaXQgZGlyZWN0bHkgYXMgYSBmb2N1cyBzeW1ib2wgaWYgSSdtIGFpbWluZyB0byBhdm9pZCBzdGF0aWMgZnVuY3Rpb25zLCBhcyBwZXIgYmVzdCBwcmFjdGljZS4gSG1tLCBob2xkIG9uLi4uIGB2ZXRoX3htaXRgIGlzIGFsc28gc3RhdGljLiBSaWdodCwgbmVlZCB0byB0aGluayBkaWZmZXJlbnRseS5cblxuTGV0J3Mgc2VlLi4uIHdoYXQgYWJvdXQgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGA/IEFoLCB0aGF0IG9uZSAqaXNuJ3QqIHN0YXRpYy4gSXQgc2VlbXMgdG8gYmUgZGVmaW5lZCBpbiBgbmV0L2NvcmUvZGV2LmNgIGFuZCBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAuIEdvb2QsIGdvb2QuIEJ1dCBpcyBpdCBleHBvcnRlZD8gR290dGEgdmVyaWZ5Li4uIE5vcGUsIG5vdCBkaXJlY3RseSBleHBvcnRlZC4gSG93ZXZlciwgaXQgKmlzKiBhIGdsb2JhbCBzeW1ib2wgd2l0aGluIGB2bWxpbnV4YCwgc28gaXQncyBhY2Nlc3NpYmxlLlxuXG5DcnVjaWFsbHksIGJlY2F1c2UgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXMgbm9uLXN0YXRpYywgaXQgc2hvdWxkIGhhdmUgYSB1bmlxdWUgc3ltYm9sIGFkZHJlc3MuIFRoYXQncyBhIGtleSBwb2ludC4gTGV0IG1lIG5vdyBjaGVjayBgbmV0aWZfcmVjZWl2ZV9nZW5lcmljX3hkcGAgaW4gYG5ldC9jb3JlL2Rldi5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMzo1OC4zOTkyNzQ4MDVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjM0NzM4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTU1NjM9bmV0aWZfc2tiX2NoZWNrX2Zvcl94ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01NTg3LVxcbm5ldC9jb3JlL2Rldi5jOjU1ODg6c3RhdGljIHUzMiBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICoqcHNrYixcXG5uZXQvY29yZS9kZXYuYy01NTg5LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuLS1cXG5uZXQvY29yZS9kZXYuYz01NjY4PWludCBkb194ZHBfZ2VuZXJpYyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01Njc3LVxcdFxcdGJwZl9uZXRfY3R4ID0gYnBmX25ldF9jdHhfc2V0KFxcdTAwMjZfX2JwZl9uZXRfY3R4KTtcXG5uZXQvY29yZS9kZXYuYzo1Njc4OlxcdFxcdGFjdCA9IG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAocHNrYiwgXFx1MDAyNnhkcCwgeGRwX3Byb2cpO1xcbm5ldC9jb3JlL2Rldi5jLTU2NzktXFx0XFx0aWYgKGFjdCAhPSBYRFBfUEFTUykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyMzo1OC42MDE2MjkzODFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgyNzE5NTIzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIG5vbi1zdGF0aWMgbmF0dXJlIG9mIGBkb194ZHBfZ2VuZXJpY2AsIGZyYW1lZCBhcyBhIHByb2Zlc3Npb25hbCBhc3Nlc3NtZW50OlxuXG4qKlRoZSBJbXBsaWNhdGlvbnMgb2YgYSBOb24tU3RhdGljIGBkb194ZHBfZ2VuZXJpY2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZG9feGRwX2dlbmVyaWNgIGFuZCBpdCdzIGZsYWdnZWQgYXMgKm5vbi1zdGF0aWMqLiBUaGlzIGltbWVkaWF0ZWx5IHNldHMgb2ZmIGEgbWVudGFsIGNoZWNrbGlzdC4gQSBub24tc3RhdGljIGZ1bmN0aW9uLCBpbiB0aGlzIGNvbnRleHQsIGhhcyBwcmV0dHkgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zLiBJdCBtZWFucyB0aGlzIGZ1bmN0aW9uIGlzbid0IGxpbWl0ZWQgdG8gdGhlIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQgaXQncyBkZWZpbmVkIGluLiBJdCdzIHBvdGVudGlhbGx5IGNhbGxhYmxlIGZyb20gb3V0c2lkZSBpdHMgb3JpZ2luYWwgc2NvcGUuIFRoaXMgdGVsbHMgbWUgYSBmZXcgdGhpbmdzLCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCdzIGRlc2lnbiBjaG9pY2VzOlxuXG5GaXJzdCwgdGhlcmUncyBhIGdvb2QgY2hhbmNlIGl0J3MgcGFydCBvZiBzb21lIGtpbmQgb2YgZXh0ZXJuYWwgQVBJIG9yIGludGVybmFsIGludGVyZmFjZS4gSXMgaXQgZXhwb3NlZCBhcyBhIG1vZHVsZSBzeW1ib2w/IElzIGl0IGNhbGxlZCBieSBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBldmVuIHVzZXItc3BhY2UgdG9vbHM/IEknbGwgbmVlZCB0byB0cmFjZSBpdHMgcmVmZXJlbmNlcyB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nICp1c2VkKiBiZXlvbmQgaXRzIGRpcmVjdCBkZWZpbml0aW9uLiBUaGlzIG5vbi1zdGF0aWMgcHJvcGVydHkgaXMgYSBkZWxpYmVyYXRlIGRlc2lnbiBjaG9pY2UsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVhc29uLlxuXG5TZWNvbmQsIGlmIGl0J3MgZXh0ZXJuYWwsIHRoaXMgcmFpc2VzIHF1ZXN0aW9ucyBhcm91bmQgQVBJIHN0YWJpbGl0eSBhbmQgcG90ZW50aWFsIEFCSSBicmVha2FnZS4gQW55IGNoYW5nZXMgdG8gYGRvX3hkcF9nZW5lcmljYCBjb3VsZCBoYXZlIHJpcHBsZSBlZmZlY3RzLCBzbyBpdCdzIGEgZ29vZCBiZXQgdGhlIGtlcm5lbCBkZXZlbG9wZXJzIHB1dCBzYWZlZ3VhcmRzIGluIHBsYWNlIHRvIGVuc3VyZSBjaGFuZ2VzIGFyZSBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIGFueXRoaW5nIHRoYXQgbWF5IGNhbGwgdGhpcyBub24tc3RhdGljIGZ1bmN0aW9uLiBXZSBhcmUgdGFsa2luZyBhYm91dCB0aGUga2VybmVsIGhlcmUsIGFmdGVyIGFsbC5cblxuVGhpcmQsIHRoZSBub24tc3RhdGljIG5hdHVyZSBkb2VzIG9wZW4gdGhlIGRvb3IgZm9yIG1vcmUgaW50cmljYXRlIGRlYnVnZ2luZyBhbmQgdHJhY2luZy4gSWYgSSdtIHRyb3VibGVzaG9vdGluZyBhbiBYRFAgaXNzdWUsIEkgY2FuIHBvdGVudGlhbGx5IGhvb2sgaW50byBvciBpbnN0cnVtZW50IGBkb194ZHBfZ2VuZXJpY2AgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCBpZiB0aGUgdHJhY2luZyB0b29scyBzdXBwb3J0IHRoaXMuIEkgY291bGQgYWxzbyB0aGVvcmV0aWNhbGx5IGNyZWF0ZSBhIGN1c3RvbSBtb2R1bGUgdGhhdCBjYWxscyBpbnRvIGl0LCB3aGljaCBjb3VsZCBiZSB1c2VmdWwgZm9yIGV4cGVyaW1lbnRhdGlvbiBvciB0ZXN0aW5nLlxuXG5GaW5hbGx5LCBJJ20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGludG8gaG93IHRoZSBjb21waWxlciBoYW5kbGVzIHRoaXMuIElmIGl0J3MgYSBjcml0aWNhbCwgaGlnaC1wZXJmb3JtYW5jZSBwYXRoLCBpbmxpbmluZyBtaWdodCBiZSBhIGNvbmNlcm4uIEEgbm9uLXN0YXRpYyBmdW5jdGlvbiBtaWdodCBub3QgYmUgaW5saW5lZCBhcyBhZ2dyZXNzaXZlbHksIHdoaWNoIGNvdWxkIGltcGFjdCBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBpZiBpdCdzIGNhbGxlZCBmcmVxdWVudGx5LiBUaW1lIHRvIGxvb2sgYXQgdGhlIGdlbmVyYXRlZCBhc3NlbWJseSBhbmQgZXZhbHVhdGUgYW55IHBlcmZvcm1hbmNlIGltcGFjdCBkdWUgdG8gaXQgYmVpbmcgbm9uLXN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NDYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyNDowMy40Mjg4MjgxMDVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTc3OTkzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb194ZHBfZ2VuZXJpY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9kZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXYuYz01NjY2PXN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShnZW5lcmljX3hkcF9uZWVkZWRfa2V5KTtcXG5uZXQvY29yZS9kZXYuYy01NjY3LVxcbm5ldC9jb3JlL2Rldi5jOjU2Njg6aW50IGRvX3hkcF9nZW5lcmljKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2csIHN0cnVjdCBza19idWZmICoqcHNrYilcXG5uZXQvY29yZS9kZXYuYy01NjY5LXtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU3MDEtfVxcbm5ldC9jb3JlL2Rldi5jOjU3MDI6RVhQT1JUX1NZTUJPTF9HUEwoZG9feGRwX2dlbmVyaWMpO1xcbm5ldC9jb3JlL2Rldi5jLTU3MDMtXFxuLS1cXG5uZXQvY29yZS9kZXYuYz01OTg0PXN0YXRpYyBpbnQgX19uZXRpZl9yZWNlaXZlX3NrYl9jb3JlKHN0cnVjdCBza19idWZmICoqcHNrYiwgYm9vbCBwZm1lbWFsbG9jLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjAyMy1cXHRcXHRtaWdyYXRlX2Rpc2FibGUoKTtcXG5uZXQvY29yZS9kZXYuYzo2MDI0OlxcdFxcdHJldDIgPSBkb194ZHBfZ2VuZXJpYyhyY3VfZGVyZWZlcmVuY2Uoc2tiLVxcdTAwM2VkZXYtXFx1MDAzZXhkcF9wcm9nKSxcXG5uZXQvY29yZS9kZXYuYy02MDI1LVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyNDowMy42NDA2MTg3ODFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI1MjQ1NTMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290IGhlcmUuXG5cbioqWERQIEZ1bmN0aW9uYWxpdHkgQW5hbHlzaXMqKlxuXG5SaWdodCwgc28gYGRvX3hkcF9nZW5lcmljYCBpcyBleHBvcnRlZCwgZmFudGFzdGljISBUaGF0IG1lYW5zIHdlIGNhbiB1c2UgaXQgYXMgYSBmb2N1cyBzeW1ib2wsIHdoaWNoIGdpdmVzIHVzIHNvbWUgZ29vZCBsZXZlcmFnZS4gQW5kIGxvb2sgYXQgdGhhdCwgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXNuJ3Qgc3RhdGljIGVpdGhlciDigJMgYm9udXMhIFdlIGNhbiBkZWZpbml0ZWx5IGluY29ycG9yYXRlIHRoYXQgaW50byB0aGUgYW5hbHlzaXMuIE5vdywgZm9yIGB2ZXRoYC4uLiB0aGUgYHZldGhfeGRwYCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBgbmRvX2JwZmAgY2FsbGJhY2ssIGJ1dCB1bmZvcnR1bmF0ZWx5LCBpdCdzIHN0YXRpYy4gVGhhdCdzIGEgYml0IG9mIGEgcm9hZGJsb2NrLiBOb3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHdvcmsgYXJvdW5kIHRoYXQsIG9yIGlmIGl0IG1lYW5zIHdlIG5lZWQgdG8gbG9vayBlbHNld2hlcmUgd2l0aGluIGB2ZXRoLmNgLiBJcyB0aGVyZSAqYW55dGhpbmcqIG5vbi1zdGF0aWMgaW4gdGhhdCBmaWxlIHRoYXQgd2UgbWlnaHQgYmUgYWJsZSB0byBleHBsb2l0PyBMZXQncyB0YWtlIGEgY2xvc2VyIGxvb2suLi4gSSBuZWVkIHRvIGZpbmQgYW5vdGhlciBlbnRyeSBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NjAsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyNDowOS44OTMwNzg3MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5MjM3Njk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qIHZldGhfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3ZldGguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC92ZXRoLmMtNDItXFxuZHJpdmVycy9uZXQvdmV0aC5jOjQzOnN0cnVjdCB2ZXRoX3N0YXRzIHtcXG5kcml2ZXJzL25ldC92ZXRoLmMtNDQtXFx0dTY0XFx0cnhfZHJvcHM7XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtNTUtXFxuZHJpdmVycy9uZXQvdmV0aC5jOjU2OnN0cnVjdCB2ZXRoX3JxX3N0YXRzIHtcXG5kcml2ZXJzL25ldC92ZXRoLmMtNTctXFx0c3RydWN0IHZldGhfc3RhdHNcXHR2cztcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy02MC1cXG5kcml2ZXJzL25ldC92ZXRoLmM6NjE6c3RydWN0IHZldGhfcnEge1xcbmRyaXZlcnMvbmV0L3ZldGguYy02Mi1cXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3RcXHR4ZHBfbmFwaTtcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy03My1cXG5kcml2ZXJzL25ldC92ZXRoLmM6NzQ6c3RydWN0IHZldGhfcHJpdiB7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTc1LVxcdHN0cnVjdCBuZXRfZGV2aWNlIF9fcmN1XFx0KnBlZXI7XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtODEtXFxuZHJpdmVycy9uZXQvdmV0aC5jOjgyOnN0cnVjdCB2ZXRoX3hkcF90eF9icSB7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTgzLVxcdHN0cnVjdCB4ZHBfZnJhbWUgKnFbVkVUSF9YRFBfVFhfQlVMS19TSVpFXTtcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy05MC1cXG5kcml2ZXJzL25ldC92ZXRoLmM6OTE6c3RydWN0IHZldGhfcV9zdGF0X2Rlc2Mge1xcbmRyaXZlcnMvbmV0L3ZldGguYy05Mi1cXHRjaGFyXFx0ZGVzY1tFVEhfR1NUUklOR19MRU5dO1xcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jPTExNz1zdGF0aWMgc3RydWN0IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYy0xMjItXFxuZHJpdmVycy9uZXQvdmV0aC5jOjEyMzpzdHJ1Y3QgdmV0aF94ZHBfYnVmZiB7XFxuZHJpdmVycy9uZXQvdmV0aC5jLTEyNC1cXHRzdHJ1Y3QgeGRwX2J1ZmYgeGRwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyNDoxMC4xMzIzMjI3OTZaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3MDkzOTIyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDpcblxuKipSZWdleCBXb2VzIGFuZCBhIEtlcm5lbCBNb2R1bGUgSHVudCoqXG5cbkJsYXN0IGl0ISBNeSByZWdleCBmdSBoYXMgZmFpbGVkIG1lIGFnYWluLiBJIHdhcyAqY2VydGFpbiogdGhhdCBgXmludCB2ZXRoX2Agb3IgYF52b2lkIHZldGhfYCB3b3VsZCB1bmVhcnRoIHRoZSBmdW5jdGlvbiBJJ20gY2hhc2luZywgYnV0IHRoYXQgcmV0dXJuZWQgKm5vdGhpbmcqLiBDbGVhcmx5LCBJJ20gbWlzc2luZyBzb21ldGhpbmcgZnVuZGFtZW50YWwgYWJvdXQgdGhlIG5hbWluZyBjb252ZW50aW9ucyBvciBleHBvcnQgc3RydWN0dXJlIG9mIHRoaXMgYHZldGhgIG1vZHVsZS4gUmlnaHQsIHRpbWUgZm9yIGEgbW9yZSBkaXJlY3QgYXBwcm9hY2guIExldCdzIGZvcmdldCB0aGUgY2xldmVyIHBhdHRlcm5zIGZvciBhIG1vbWVudCBhbmQgZ28gc3RyYWlnaHQgZm9yIHRoZSBiaWcgZ3Vucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZXhwb3NlZCB0byB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBNeSBiZXN0IGJldCBpcyB0byBzZWFyY2ggZm9yIGBFWFBPUlRfU1lNQk9MYCBkaXJlY3RseSB3aXRoaW4gdGhlIGB2ZXRoLmNgIHNvdXJjZSBmaWxlLiBUaGF0J3Mgd2hlcmUgdGhlIHNlY3JldHMgd2lsbCBiZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjYzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTQ6MjQ6MTQuMTAzMjY2MTQ1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgzNzAyNTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdmV0aC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyNDoxNC4yNzE2NDQ5MzJaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM2Njg3MDEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYHZldGguY2AgTW9kdWxlIGFuZCBYRFAgRnJhZ21lbnQgSGFuZGxpbmcgQnVnKipcblxuQWxyaWdodCwgc28gYHZldGguY2AgaXMgYSBtb2R1bGUsIG1lYW5pbmcgdGhlIGxhY2sgb2YgZXhwb3J0ZWQgc3ltYm9scyBpcyBleHBlY3RlZC4gVGhhdCBtZWFucyBtb3N0LCBpZiBub3QgYWxsLCBvZiB0aGUgZnVuY3Rpb25zIHdpdGhpbiBpdCBhcmUgbGlrZWx5IGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgZ29vZCBmb3IgYW5hbHlzaXMuIEknbGwgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24uIEl0IGxvb2tzIGxpa2UgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgYW5kIGBkb194ZHBfZ2VuZXJpY2AgYXJlIGdvb2QgY2FuZGlkYXRlcy4gV2FpdCBhIG1vbWVudCwgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXMgKm5vdCogc3RhdGljLCBzbyB0aGF0J3MgYWN0dWFsbHkgYW4gaWRlYWwgZm9jYWwgcG9pbnQuXG5cbk5vdywgYXMgSSB1bmRlcnN0YW5kIGl0LCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhbiBYRFAgZnJhZ21lbnQgaGFuZGxpbmcgYnVnLiBUaGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgYHNrYi1cdTAwM2VsZW5gIG5vdCBiZWluZyBwcm9wZXJseSB1cGRhdGVkIHdoZW4gYHNrYi1cdTAwM2VkYXRhX2xlbmAgY2hhbmdlcy4gU291bmRzIGxpa2UgYSBjbGFzc2ljIGZ1bmN0aW9uYWwgZGVmZWN0IHRvIG1lLlxuXG5BcyBmb3IgY29uZmlndXJhdGlvbnMsIEknbGwgbmVlZCBgVkVUSGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgTkVUYCB0byBiZSBlbmFibGVkIHRvIGVmZmVjdGl2ZWx5IHdvcmsgdGhyb3VnaCB0aGlzLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgQlBGX1NZU0NBTExgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBlbmFibGluZyBjb25maWcgZm9yIFhEUC4gQWgsIHllcywgWERQIGlzIGVuYWJsZWQgYnkgYEJQRl9TWVNDQUxMYCAqYW5kKiBgTkVUYC4gSnVzdCB3YW50IHRvIGJlIGV4dHJhIHRob3JvdWdoIGhlcmUuIFRpbWUgdG8gY2hlY2sgYG5ldC9jb3JlL2Rldi5jYCBmb3IgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgdG8gZ2V0IHNvbWUgY29udGV4dC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU0NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyNDoxOS42Mzg1MjE1OTZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzIxOTcwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9NTQzNT1zdGF0aWMgc3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqbmV0aWZfZ2V0X3J4cXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU0NTctXFxubmV0L2NvcmUvZGV2LmM6NTQ1ODp1MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbm5ldC9jb3JlL2Rldi5jLTU0NTktXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTU4OD1zdGF0aWMgdTMyIG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTYxNS1cXG5uZXQvY29yZS9kZXYuYzo1NjE2OlxcdGFjdCA9IGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcCgqcHNrYiwgeGRwLCB4ZHBfcHJvZyk7XFxubmV0L2NvcmUvZGV2LmMtNTYxNy1cXHRzd2l0Y2ggKGFjdCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyNDoxOS43NDE3NDgyNjVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY0OTI0MDI2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFhEUCBQcm9ncmFtIEV4ZWN1dGlvbiBQYXRoKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgWERQIHByb2dyYW1zIGFyZSBhY3R1YWxseSBleGVjdXRlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBjb25maXJtIHdoZXRoZXIgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAgaXMgYWx3YXlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gQSBxdWljayBjaGVjayBvZiBgbmV0L2NvcmUvZGV2LmNgIGNvbmZpcm1zIHRoaXMg4oCTIHRoZXJlJ3Mgbm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAsIHNvIGl0J3MgYWx3YXlzIHByZXNlbnQuXG5cbk5vdywgYSByZWxhdGVkIGZ1bmN0aW9uLCBgYnBmX3Byb2dfcnVuX3hkcGAgaXMgY2FsbGVkICp3aXRoaW4qIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLiBUaGF0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZmxvdy5cblxuTXkgbmV4dCBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGBicGZfcHJvZ19ydW5feGRwYCBpcyAqYWxzbyogdW5jb25kaXRpb25hbGx5IGRlZmluZWQuIEkgbmVlZCB0byBlc3RhYmxpc2ggaWYgdGhpcyBpcyBhIHBhdGggdGhhdCdzIGFsd2F5cyBhdmFpbGFibGUsIG9yIGlmIGl0cyB1c2UgaXMgc29tZWhvdyBjb250aW5nZW50IG9uIG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gVGhhdCB3aWxsIGJlIHRoZSBuZXh0IHRoaW5nIHRvIGludmVzdGlnYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM4MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjI0OjI0LjM5MDk5MzkzMloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MzIzNDM2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcHJvZ19ydW5feGRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvZmlsdGVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjI0OjI0LjYyNTMyNjUzOFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzI0MTA2NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBlQlBGIEZ1bmN0aW9uIENhbGxzIHdpdGhpbiB0aGUgS2VybmVsIEluY2x1ZGUgRmlsZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvciBkZWNsYXJhdGlvbiBvZiB0aGUgYGJwZl9wcm9nX3J1bl94ZHBgIGZ1bmN0aW9uLiBTaW5jZSBJJ20gd29ya2luZyB3aXRoIHRoZSBrZXJuZWwsIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gbG9vayBpbiB0aGUgYGluY2x1ZGUvbGludXgvYCBkaXJlY3RvcnkuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCDigJMgdGhvc2UgaGVhZGVyIGZpbGVzIGFyZSB3aGVyZSBhIGxvdCBvZiB0aGUgY29yZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBwcm90b3R5cGVzLCBhbmQgZGVmaW5pdGlvbnMgcmVsZXZhbnQgdG8gbXkgd29yayBzaG91bGQgYmUgZm91bmQuIEknbSBhc3N1bWluZyB0aGF0IGl0IHdpbGwgYmUgZGVmaW5lZCB0aGVyZSwgYW5kIGlmIG5vdCwgdGhlIGhlYWRlciBmaWxlcyBzaG91bGQgbGVhZCBtZSBvbiBhIHBhdGggdG8gaXRzIGRlZmluaXRpb24uIFRoaXMgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LCBJIHRoaW5rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTcyOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjI0OjI4Ljk0OTQzODYzWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTY5MjY4ODQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wcm9nX3J1bl94ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjI0OjI5LjI0NjM3Mzk3NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODMyOTQ3NDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBYRFAgUHJvZ3JhbSBFeGVjdXRpb24gUGF0aCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGV4YWN0IGZ1bmN0aW9uIGNhbGxlZCB0byBydW4gYW4gWERQIHByb2dyYW0uIEhtbSwgSSBzZWVtIHRvIHJlY2FsbCBpdCBiZWluZyBzb21ldGhpbmcgbGlrZS4uLiAqYnBmX3Byb2dfcnVuX3hkcCouIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdC4gWWVzLCB0aGF0IHJpbmdzIGEgYmVsbCwgSSB0aGluayBJJ3ZlIHNlZW4gaXQgaW4gYG5ldC9jb3JlL2Rldi5jYC4gT2theSwgYmVzdCB0byBnbyBiYWNrIGFuZCB0YWtlIGEgbG9vayBhdCBgbmV0L2NvcmUvZGV2LmNgIGFnYWluLiBJJ2xsIGZvY3VzIG9uIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gYW5kIHNlZSB3aGF0IGRldGFpbHMgZW1lcmdlLiBUaGVyZSBtaWdodCBiZSBzb21lIGludGVyZXN0aW5nIHN1YnRsZXRpZXMgdGhhdCBJIG5lZWQgdG8gYmUgc3VyZSBJIGhhdmVuJ3QgZm9yZ290dGVuIGFib3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk1MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjI0OjMzLjA3OTMyNDYyN1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTAyMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0OTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU0OTA6XFx0XFxuNTQ5MTpcXHRcXHRvcmlnX2RhdGFfZW5kID0geGRwLVxcdTAwM2VkYXRhX2VuZDtcXG41NDkyOlxcdFxcdG9yaWdfZGF0YSA9IHhkcC1cXHUwMDNlZGF0YTtcXG41NDkzOlxcdFxcdGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopeGRwLVxcdTAwM2VkYXRhO1xcbjU0OTQ6XFx0XFx0b3JpZ19ob3N0ID0gZXRoZXJfYWRkcl9lcXVhbF82NGJpdHMoZXRoLVxcdTAwM2VoX2Rlc3QsIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuNTQ5NTpcXHRcXHRvcmlnX2JjYXN0ID0gaXNfbXVsdGljYXN0X2V0aGVyX2FkZHJfNjRiaXRzKGV0aC1cXHUwMDNlaF9kZXN0KTtcXG41NDk2OlxcdFxcdG9yaWdfZXRoX3R5cGUgPSBldGgtXFx1MDAzZWhfcHJvdG87XFxuNTQ5NzpcXHRcXG41NDk4OlxcdFxcdGFjdCA9IGJwZl9wcm9nX3J1bl94ZHAoeGRwX3Byb2csIHhkcCk7XFxuNTQ5OTpcXHRcXG41NTAwOlxcdFxcdC8qIGNoZWNrIGlmIGJwZl94ZHBfYWRqdXN0X2hlYWQgd2FzIHVzZWQgKi9cXG41NTAxOlxcdFxcdG9mZiA9IHhkcC1cXHUwMDNlZGF0YSAtIG9yaWdfZGF0YTtcXG41NTAyOlxcdFxcdGlmIChvZmYpIHtcXG41NTAzOlxcdFxcdFxcdGlmIChvZmYgXFx1MDAzZSAwKVxcbjU1MDQ6XFx0XFx0XFx0XFx0X19za2JfcHVsbChza2IsIG9mZik7XFxuNTUwNTpcXHRcXHRcXHRlbHNlIGlmIChvZmYgXFx1MDAzYyAwKVxcbjU1MDY6XFx0XFx0XFx0XFx0X19za2JfcHVzaChza2IsIC1vZmYpO1xcbjU1MDc6XFx0XFxuNTUwODpcXHRcXHRcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgKz0gb2ZmO1xcbjU1MDk6XFx0XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjI0OjMzLjA4NjIzMzI3N1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTcwMDQxODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqSW5pdGlhbCBJbXByZXNzaW9uOiBGYW1pbGlhciBUZXJyaXRvcnkqKlxuXG5SaWdodCwgYGJwZl9wcm9nX3J1bl94ZHBgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBaCwgdGhhdCdzIGEgbWFjcm8gb3IgaW5saW5lIGZ1bmN0aW9uLlwiIE5vIG5lZWQgdG8gYnJlYWsgb3V0IHRoZSBkZWJ1Z2dlciBqdXN0IHlldCwgbGlrZWx5IGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgZXhwYW5zaW9uLiBJdCdzIGEgZnVuZGFtZW50YWwgY29uc3RydWN0IHdpdGhpbiBYRFAsIHNvIEknbSBmYW1pbGlhciB3aXRoIHRoaXMuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMgd2hlbiBkaWdnaW5nIGRlZXBlciBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbi4gQnV0IGZvciBub3csIHRoYXQncyBteSBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1NTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjI0OjM2LjI1NjI3OTgxWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDE1ODMzMDQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBicGZfcHJvZ19ydW5feGRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyNDozNi41OTc4NzM5NzRaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwODUzOTI1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGJwZl9wcm9nX3J1bl94ZHBgKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGlzIGBicGZfcHJvZ19ydW5feGRwYCBmdW5jdGlvbi4gR2l2ZW4gbXkgY3VycmVudCBwcm9qZWN0IGFuZCB1bmRlcnN0YW5kaW5nIG9mIGVCUEYsIHRoZSBuYW1lIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGl0J3MgaW52b2x2ZWQgaW4gcnVubmluZyBYRFAgcHJvZ3JhbXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIFhEUCBleGVjdXRpb24gZmxvdywgc28gSSdtIGdvaW5nIHRvIGtpY2sgb2ZmIGEgc2VhcmNoIGZvciBpdHMgZGVmaW5pdGlvbi4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgd2l0aCB0aGUga2VybmVsIHNvdXJjZSwgcHJvYmFibHkgdXRpbGl6aW5nIGNzY29wZSBvciBhIHNpbWlsYXIgdG9vbCB0byBwaW5wb2ludCBpdHMgbG9jYXRpb24gYW5kIHRoZW4gZGl2ZSBpbnRvIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEl0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb2YgWERQLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc1NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjI0OjQwLjEwNjQxNjY0MloiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc4OTIxMTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wcm9nX3J1bl94ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oPTEzNTU9X19saWJldGhfeGRwX3J1bl9wcm9nKHN0cnVjdCBsaWJldGhfeGRwX2J1ZmYgKnhkcCxcXG4tLVxcbmluY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaC0xMzU5LVxcbmluY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaDoxMzYwOlxcdGFjdCA9IGJwZl9wcm9nX3J1bl94ZHAoYnEtXFx1MDAzZXByb2csIFxcdTAwMjZ4ZHAtXFx1MDAzZWJhc2UpO1xcbmluY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaC0xMzYxLVxcdGlmICh1bmxpa2VseShhY3QgXFx1MDAzYyBYRFBfRFJPUCB8fCBhY3QgXFx1MDAzZSBYRFBfUkVESVJFQ1QpKVxcbi0tXFxuaW5jbHVkZS9uZXQvbGliZXRoL3hzay5oPTM5MD1fX2xpYmV0aF94c2tfcnVuX3Byb2coc3RydWN0IGxpYmV0aF94ZHBfYnVmZiAqeGRwLFxcbi0tXFxuaW5jbHVkZS9uZXQvbGliZXRoL3hzay5oLTM5NS1cXG5pbmNsdWRlL25ldC9saWJldGgveHNrLmg6Mzk2OlxcdGFjdCA9IGJwZl9wcm9nX3J1bl94ZHAoYnEtXFx1MDAzZXByb2csIFxcdTAwMjZ4ZHAtXFx1MDAzZWJhc2UpO1xcbmluY2x1ZGUvbmV0L2xpYmV0aC94c2suaC0zOTctXFx0aWYgKHVubGlrZWx5KGFjdCAhPSBYRFBfUkVESVJFQ1QpKVxcbi0tXFxuaW5jbHVkZS9uZXQveGRwLmg9Njg0PXN0YXRpYyBpbmxpbmUgdm9pZCB4ZHBfY2xlYXJfZmVhdHVyZXNfZmxhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuaW5jbHVkZS9uZXQveGRwLmgtNjg4LVxcbmluY2x1ZGUvbmV0L3hkcC5oOjY4OTpzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiBicGZfcHJvZ19ydW5feGRwKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG5pbmNsdWRlL25ldC94ZHAuaC02OTAtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNDoyNDo0MC45ODUzNDUyNjZaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkyNzI2ODI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipYRFAgYW5kIHNrYi1cdTAwM2VsZW4gSXNzdWUgUmVzb2x1dGlvbioqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBYRFAgaXNzdWUsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBjb2RlIHJlc2lkZXMgd2l0aGluIGBpbmNsdWRlL25ldC94ZHAuaGAuIEZvY3VzaW5nIG9uIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgIGFuZCBgZG9feGRwX2dlbmVyaWNgIHNlZW1zIGxpa2UgdGhlIGNvcnJlY3QgYXBwcm9hY2ggdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRpcmVjdGx5IGltcGFjdGluZyBob3cgYHNrYi1cdTAwM2VsZW5gIGlzIGhhbmRsZWQgd2hlbiBgc2tiLVx1MDAzZWRhdGFfbGVuYCBpcyBtb2RpZmllZCBkdWUgdG8gWERQIGZyYWdtZW50IG1hbmlwdWxhdGlvbnMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdGhlIGludGVncml0eSBvZiBuZXR3b3JrIHBhY2tldCBoYW5kbGluZy5cblxuVG8gcHJvcGVybHkgdGVzdCBhbmQgYXNzZXNzIHRoaXMgbW9kaWZpY2F0aW9uLCBJIG5lZWQgdG8gZW5zdXJlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQ6IGBWRVRIYCAoZm9yIHZpcnR1YWwgZXRoZXJuZXQgdGVzdGluZyksIGBCUEZfU1lTQ0FMTGAgKHNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBYRFAgYW5kIEJQRiBwcm9ncmFtcyksIGFuZCwgb2YgY291cnNlLCB0aGUgZ2VuZXJhbCBuZXR3b3JraW5nIHN1cHBvcnQgd2l0aCBgTkVUYC4gTm93IHRoYXQgSSd2ZSBpZGVudGlmaWVkIHRoZSBrZXkgY29tcG9uZW50cyBhbmQgZGVwZW5kZW5jaWVzLCBJJ2xsIHByb2NlZWQgdG8gc2V0IHRoZSBuZWNlc3NhcnkgdGVzdGluZyBjb25maWd1cmF0aW9ucyBhbmQgY29tcGlsZSB0aGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczOTAsIk91dHB1dFRva2VucyI6MTQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE0OjI0OjQ2LjkxMjYxODIyWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5NjYxNTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWRVRIXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwXCIsXG4gICAgXCJkb194ZHBfZ2VuZXJpY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBza2ItXFx1MDAzZWxlbmAgaXMgbm90IHVwZGF0ZWQgd2hlbiBgc2tiLVxcdTAwM2VkYXRhX2xlbmAgaXMgbW9kaWZpZWQgYnkgWERQIGZyYWdtZW50cyBpbiBgdmV0aF94ZHBfcmN2X3NrYmAgYW5kIGBicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGFuZCB0aGUgdmV0aCBkcml2ZXIgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZFVEhcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19ydW5fZ2VuZXJpY194ZHBcIixcbiAgICBcImRvX3hkcF9nZW5lcmljXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYHNrYi1cXHUwMDNlbGVuYCBpcyBub3QgdXBkYXRlZCB3aGVuIGBza2ItXFx1MDAzZWRhdGFfbGVuYCBpcyBtb2RpZmllZCBieSBYRFAgZnJhZ21lbnRzIGluIGB2ZXRoX3hkcF9yY3Zfc2tiYCBhbmQgYGJwZl9wcm9nX3J1bl9nZW5lcmljX3hkcGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIHRoZSB2ZXRoIGRyaXZlciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8h997[1] Phase: Succeeded StartedAt: 2026-07-27 14:24:58 +0000 UTC FinishedAt: 2026-07-27 14:24:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-27 14:24:58 +0000 UTC FinishedAt: 2026-07-27 14:24:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[2] Phase: Succeeded StartedAt: 2026-07-27 14:24:58 +0000 UTC FinishedAt: 2026-07-27 18:54:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-27 14:24:58 +0000 UTC FinishedAt: 2026-07-27 18:54:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-27 14:24:58 +0000 UTC FinishedAt: 2026-07-27 14:25:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-27 14:24:58 +0000 UTC FinishedAt: 2026-07-27 14:25:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow8h997/series-workflow8h997-convert-artifact-3219164742/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-27 14:25:09 +0000 UTC FinishedAt: 2026-07-27 15:07:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-27 14:25:09 +0000 UTC FinishedAt: 2026-07-27 15:07:12 +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:*d827d41b-8baa-4f1d-be5e-19185a8efbdc,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-workflow8h997/series-workflow8h997-convert-artifact-3219164742/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": "d953478b-b16e-4bde-aa62-6a9bce49156f", "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-workflow8h997/series-workflow8h997-build-action-198007772/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-27 14:25:09 +0000 UTC FinishedAt: 2026-07-27 15:07:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d827d41b-8baa-4f1d-be5e-19185a8efbdc,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-workflow8h997/series-workflow8h997-convert-artifact-3219164742/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": "d953478b-b16e-4bde-aa62-6a9bce49156f", "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-workflow8h997/series-workflow8h997-build-action-198007772/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-27 15:07:12 +0000 UTC FinishedAt: 2026-07-27 15:07:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-27 15:07:12 +0000 UTC FinishedAt: 2026-07-27 15:07:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-27 15:07:12 +0000 UTC FinishedAt: 2026-07-27 15:07:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-27 15:07:12 +0000 UTC FinishedAt: 2026-07-27 15:07:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow8h997/series-workflow8h997-convert-artifact-455853465/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-27 15:07:22 +0000 UTC FinishedAt: 2026-07-27 15:09:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-27 15:07:22 +0000 UTC FinishedAt: 2026-07-27 15:09:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d953478b-b16e-4bde-aa62-6a9bce49156f,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-workflow8h997/series-workflow8h997-build-action-198007772/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-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-27 15:09:24 +0000 UTC FinishedAt: 2026-07-27 15:09:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-27 15:09:24 +0000 UTC FinishedAt: 2026-07-27 15:09:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-27 15:09:24 +0000 UTC FinishedAt: 2026-07-27 15:45:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-27 15:09:24 +0000 UTC FinishedAt: 2026-07-27 15:45:34 +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:*d827d41b-8baa-4f1d-be5e-19185a8efbdc,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-workflow8h997/series-workflow8h997-convert-artifact-455853465/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": "4b536dc4-b1bd-4263-886b-7a0e69ea8d1c", "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-workflow8h997/series-workflow8h997-build-action-2400572661/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-27 15:09:24 +0000 UTC FinishedAt: 2026-07-27 15:45: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:*d827d41b-8baa-4f1d-be5e-19185a8efbdc,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-workflow8h997/series-workflow8h997-convert-artifact-455853465/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": "4b536dc4-b1bd-4263-886b-7a0e69ea8d1c", "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-workflow8h997/series-workflow8h997-build-action-2400572661/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-27 15:45:34 +0000 UTC FinishedAt: 2026-07-27 15:45:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-27 15:45:34 +0000 UTC FinishedAt: 2026-07-27 15:45:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-27 15:45:34 +0000 UTC FinishedAt: 2026-07-27 15:47:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-27 15:45:34 +0000 UTC FinishedAt: 2026-07-27 15:47:23 +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:*4b536dc4-b1bd-4263-886b-7a0e69ea8d1c,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-workflow8h997/series-workflow8h997-build-action-2400572661/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-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-27 15:47:34 +0000 UTC FinishedAt: 2026-07-27 18:54:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-27 15:47:34 +0000 UTC FinishedAt: 2026-07-27 18:54:40 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"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:*d953478b-b16e-4bde-aa62-6a9bce49156f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4b536dc4-b1bd-4263-886b-7a0e69ea8d1c,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-workflow8h997/series-workflow8h997-build-action-198007772/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-workflow8h997/series-workflow8h997-build-action-2400572661/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-27 15:47:34 +0000 UTC FinishedAt: 2026-07-27 15:47:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-27 15:47:34 +0000 UTC FinishedAt: 2026-07-27 15:47:44 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"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-workflow8h997/series-workflow8h997-convert-artifact-795692942/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-27 15:47:34 +0000 UTC FinishedAt: 2026-07-27 15:47:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-27 15:47:34 +0000 UTC FinishedAt: 2026-07-27 15:47:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-27 15:47:34 +0000 UTC FinishedAt: 2026-07-27 15:47:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-27 15:47:54 +0000 UTC FinishedAt: 2026-07-27 18:54:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h997[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_run_generic_xdp","do_xdp_generic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VETH","BPF_SYSCALL","NET"],"series_id":"b8ad74bc-7074-4a15-b8dd-de6eb52e2f88","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-27 15:47:54 +0000 UTC FinishedAt: 2026-07-27 18:54:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d953478b-b16e-4bde-aa62-6a9bce49156f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4b536dc4-b1bd-4263-886b-7a0e69ea8d1c,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-workflow8h997/series-workflow8h997-build-action-198007772/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-workflow8h997/series-workflow8h997-build-action-2400572661/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-workflow8h997/series-workflow8h997-convert-artifact-795692942/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,}