Name: series-workflowbrg6g Phase: Succeeded StartedAt: 2026-07-28 20:51:08 +0000 UTC FinishedAt: 2026-07-29 01:24:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[0] Phase: Succeeded StartedAt: 2026-07-28 20:51:08 +0000 UTC FinishedAt: 2026-07-28 21:30:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[0].run-triage Phase: Succeeded StartedAt: 2026-07-28 20:51:08 +0000 UTC FinishedAt: 2026-07-28 21:30:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET" ], "series_id": "d17f82e4-ef0d-4260-8175-a7cf2a64e924" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_netns_link_update_prog" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyB0byB1c2UgZ3VhcmQobXV0ZXgpIGluc3RlYWQgb2YgbWFudWFsIGxvY2svdW5sb2NrLiBUaGlzIGNoYW5nZXMgdGhlIGxvY2sgc2NvcGUsIGFzIHRoZSBtdXRleCBpcyBub3cgYWNxdWlyZWQgYmVmb3JlIGNoZWNraW5nIGxpbmstXHUwMDNlcHJvZywgd2hpY2ggd2FzIHByZXZpb3VzbHkgZG9uZSBsb2NrbGVzcy4gVGhpcyBmdW5jdGlvbmFsIGNoYW5nZSBpbiBsb2NraW5nIGJlaGF2aW9yIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGRlYWRsb2NrcyBvciByZWdyZXNzaW9ucyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg3M2JlZGQ3ZmM5NTFjMTE3NWJlNjI4NGM2YjM3ZTYxNGZkMTNkMWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyOCAyMToyODozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYyBiL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jXG5pbmRleCAyNWYzMGY5ZWRhZWZkLi44MTAwNmEyNDI2MThkIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jXG5AQCAtMTcxLDMzICYjNDM7MTcxLDI4IEBAIHN0YXRpYyBpbnQgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFx0aW50IGlkeCwgcmV0O1xuIFxuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZuZXRuc19icGZfbXV0ZXgpO1xuJiM0MztcbiBcdGlmIChvbGRfcHJvZyBcdTAwMjZcdTAwMjYgb2xkX3Byb2cgIT0gbGluay1cdTAwM2Vwcm9nKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIFx0aWYgKG5ld19wcm9nLVx1MDAzZXR5cGUgIT0gbGluay1cdTAwM2Vwcm9nLVx1MDAzZXR5cGUpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZuZXRuc19icGZfbXV0ZXgpO1xuLVxuIFx0bmV0ID0gbmV0X2xpbmstXHUwMDNlbmV0O1xuLVx0aWYgKCFuZXQgfHwgIWNoZWNrX25ldChuZXQpKSB7XG4mIzQzO1x0aWYgKCFuZXQgfHwgIWNoZWNrX25ldChuZXQpKVxuIFx0XHQvKiBMaW5rIGF1dG8tZGV0YWNoZWQgb3IgbmV0bnMgZHlpbmcgKi9cbi1cdFx0cmV0ID0gLUVOT0xJTks7XG4tXHRcdGdvdG8gb3V0X3VubG9jaztcbi1cdH1cbiYjNDM7XHRcdHJldHVybiAtRU5PTElOSztcbiBcbiBcdHJ1bl9hcnJheSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobmV0LVx1MDAzZWJwZi5ydW5fYXJyYXlbdHlwZV0sXG4gXHRcdFx0XHRcdCAgICAgIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZuZXRuc19icGZfbXV0ZXgpKTtcbiBcdGlkeCA9IGxpbmtfaW5kZXgobmV0LCB0eXBlLCBuZXRfbGluayk7XG4gXHRyZXQgPSBicGZfcHJvZ19hcnJheV91cGRhdGVfYXQocnVuX2FycmF5LCBpZHgsIG5ld19wcm9nKTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4gXHRvbGRfcHJvZyA9IHhjaGcoXHUwMDI2bGluay1cdTAwM2Vwcm9nLCBuZXdfcHJvZyk7XG4gXHRicGZfcHJvZ19wdXQob2xkX3Byb2cpO1xuLVxuLW91dF91bmxvY2s6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2bmV0bnNfYnBmX211dGV4KTtcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYnBmX25ldG5zX2xpbmtfZmlsbF9pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nIHRvIHVzZSBndWFyZChtdXRleCkgaW5zdGVhZCBvZiBtYW51YWwgbG9jay91bmxvY2suIFRoaXMgY2hhbmdlcyB0aGUgbG9jayBzY29wZSwgYXMgdGhlIG11dGV4IGlzIG5vdyBhY3F1aXJlZCBiZWZvcmUgY2hlY2tpbmcgbGluay1cdTAwM2Vwcm9nLCB3aGljaCB3YXMgcHJldmlvdXNseSBkb25lIGxvY2tsZXNzLiBUaGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGxvY2tpbmcgYmVoYXZpb3Igc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHJlZ3Jlc3Npb25zIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODczYmVkZDdmYzk1MWMxMTc1YmU2Mjg0YzZiMzdlNjE0ZmQxM2QxYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDI4IDIxOjI4OjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMgYi9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYwppbmRleCAyNWYzMGY5ZWRhZWZkLi44MTAwNmEyNDI2MThkIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYwpAQCAtMTcxLDMzICYjNDM7MTcxLDI4IEBAIHN0YXRpYyBpbnQgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLAogCXN0cnVjdCBuZXQgKm5ldDsKIAlpbnQgaWR4LCByZXQ7CiAKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7bmV0bnNfYnBmX211dGV4KTsKJiM0MzsKIAlpZiAob2xkX3Byb2cgJmFtcDsmYW1wOyBvbGRfcHJvZyAhPSBsaW5rLSZndDtwcm9nKQogCQlyZXR1cm4gLUVQRVJNOwogCWlmIChuZXdfcHJvZy0mZ3Q7dHlwZSAhPSBsaW5rLSZndDtwcm9nLSZndDt0eXBlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJmFtcDtuZXRuc19icGZfbXV0ZXgpOwotCiAJbmV0ID0gbmV0X2xpbmstJmd0O25ldDsKLQlpZiAoIW5ldCB8fCAhY2hlY2tfbmV0KG5ldCkpIHsKJiM0MzsJaWYgKCFuZXQgfHwgIWNoZWNrX25ldChuZXQpKQogCQkvKiBMaW5rIGF1dG8tZGV0YWNoZWQgb3IgbmV0bnMgZHlpbmcgKi8KLQkJcmV0ID0gLUVOT0xJTks7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9CiYjNDM7CQlyZXR1cm4gLUVOT0xJTks7CiAKIAlydW5fYXJyYXkgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG5ldC0mZ3Q7YnBmLnJ1bl9hcnJheVt0eXBlXSwKIAkJCQkJICAgICAgbG9ja2RlcF9pc19oZWxkKCZhbXA7bmV0bnNfYnBmX211dGV4KSk7CiAJaWR4ID0gbGlua19pbmRleChuZXQsIHR5cGUsIG5ldF9saW5rKTsKIAlyZXQgPSBicGZfcHJvZ19hcnJheV91cGRhdGVfYXQocnVuX2FycmF5LCBpZHgsIG5ld19wcm9nKTsKIAlpZiAocmV0KQotCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJb2xkX3Byb2cgPSB4Y2hnKCZhbXA7bGluay0mZ3Q7cHJvZywgbmV3X3Byb2cpOwogCWJwZl9wcm9nX3B1dChvbGRfcHJvZyk7Ci0KLW91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7bmV0bnNfYnBmX211dGV4KTsKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBicGZfbmV0bnNfbGlua19maWxsX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzY3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoIEZ1enppbmcgLSBBIFJlZmFjdG9yaW5nIHdpdGggUmVhY2hhYmxlIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY2AuIEl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSB0byBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLCByZXBsYWNpbmcgdGhlIG1hbnVhbCBgbXV0ZXhfbG9ja2AgYW5kIGBtdXRleF91bmxvY2tgIHdpdGggYGd1YXJkKG11dGV4KSgmYW1wO25ldG5zX2JwZl9tdXRleClgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBqdXN0IGEgcmVmYWN0b3JpbmcsIGEgY2xlYW51cCB0byBzaW1wbGlmeSB0aGUgY29kZSBhbmQgcHJldmVudCBwb3RlbnRpYWwgbG9jay1yZWxhdGVkIGJ1Z3MsIGJ1dCB0aGVuIEkgaGF2ZSB0byBhc2sgbXlzZWxmOiBkb2VzIHRoaXMgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93PwoKSXQmIzM5O3MgdGVtcHRpbmcgdG8gZGlzbWlzcyBpdCBhcyBwdXJlbHkgZGVjb3JhdGl2ZS4gQWZ0ZXIgYWxsLCB0aGUgbG9ja2luZyBsb2dpYyAqc2hvdWxkKiBiZSBpZGVudGljYWwuIEhvd2V2ZXIsIHRoZSAqbWV0aG9kKiBvZiBsb2NraW5nIGhhcyBjaGFuZ2VkLCB3aGljaCBtZWFucyB0aGVyZSBjb3VsZCBiZSBlZGdlIGNhc2VzIHdoZXJlIHRoZSBvbGQgY29kZSBoYW5kbGVkIGFuIGVhcmx5IHJldHVybiBkaWZmZXJlbnRseSB0aGFuIHRoZSBuZXcgY29kZSwgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgbG9jayByZWxlYXNlLiBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IG9mIGEgcmVncmVzc2lvbi4gVGhlIGd1YXJkIGNvbnN0cnVjdCBjb3VsZCBoYXZlIHNvbWUgc3VidGxlIGJ1Zy4gSXQmIzM5O3MgaW4gYSByZWFjaGFibGUgcGF0aCwgYW5kIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBCUEYgbGluayB1cGRhdGUgcHJvZ3JhbXMsIGEgY3JpdGljYWwgYXJlYS4KClRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIG9ubHkgZm9yIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIG9yIG1vZGlmaWNhdGlvbnMgdG8gbnVtZXJpYyBjb25zdGFudHMvbWFjcm9zIHRoYXQgZG9uJiMzOTt0IGFmZmVjdCBleGVjdXRpb24gZmxvdy4gVGhpcyByZWZhY3RvcmluZywgd2hpbGUgc2VlbWluZ2x5IGlubm9jdW91cywgKmRvZXMqIGFsdGVyIGhvdyB0aGUgbG9jayBpcyBtYW5hZ2VkLiBXaGlsZSB0aGUgbG9naWMgc2hvdWxkIGJlIHRoZSBzYW1lLCBhIGJ1ZyBpbiB0aGUgbmV3IGxvY2tpbmcgZmxvdywgcGVyaGFwcyBhbiB1bmV4cGVjdGVkIGVhcmx5IHJldHVybiBwYXRoIHRoYXQgZmFpbHMgdG8gcmVsZWFzZSB0aGUgbG9jayBjb3JyZWN0bHkgaW4gdGhlIHJlZmFjdG9yZWQgY29kZSwgaXMgbm93IGEgcG9zc2liaWxpdHkuIFRoZSBvbGQgY29kZSBoYWQgZXhwbGljaXQgYGdvdG8gb3V0X3VubG9ja2AsIHdoZXJlYXMgdGhlIG5ldyBjb2RlIGhhcyBleHBsaWNpdCBgcmV0dXJuIC1FTk9MSU5LYCBhbmQgYHJldHVybiByZXRgLCB3aGljaCB3aWxsIHVubG9jayB2aWEgdGhlIGd1YXJkLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgY2hhbmdlLCB3aGlsZSBzZWVtaW5nbHkgc2ltcGxlLCAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHNvdXJjZSBjb2RlIHRoYXQgaW1wYWN0cyB0aGUgbG9ja2luZyBtZWNoYW5pc20gaW4gYSByZWFjaGFibGUgcGF0aCwgSSB0aGluayBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhbmQgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZnVuY3Rpb24gbmFtZSwgd2hpY2ggaXMgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCBpbiBga2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNgLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRob3NlIGNvbmZpZyBvcHRpb25zIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0X25hbWVzcGFjZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0yNj1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBvZmZsb2FkLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbmV0X25hbWVzcGFjZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTI4LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHRjeC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM3NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGVwZW5kZW5jaWVzIENoZWNrKioKCk9rYXksIHNvIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIG5lY2Vzc2FyeSBjb21wb25lbnQgaGVyZS4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24gd2l0aCBhIGZpbmUtdG9vdGhlZCBjb21iLiBUaGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIHRoaXMgZGVwZW5kZW5jeSBoYXMgYSBmZXcgaW5kaXJlY3QgaW1wbGljYXRpb25zIGFzIHdlbGwuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBsaWJyYXJpZXMsIG9yIGtlcm5lbCB2ZXJzaW9ucyB0aGF0IGFyZSBhbHNvIGltcGFjdGVkLiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2ggYW5kIHZlcmlmeSwgdG8gbWFrZSBzdXJlIGFsbCBteSBiYXNlcyBhcmUgY292ZXJlZCwgdGhhbiB0byBtYWtlIGEgY2hhbmdlIHRoYXQgaW50cm9kdWNlcyBvdGhlciBpc3N1ZXMgZG93biB0aGUgcm9hZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBub3RoaW5nIGVsc2UgbmVlZHMgbXkgYXR0ZW50aW9uIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTk1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQlBGIEtjb25maWcgSHVudCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0aGlzIHNvcnRlZC4gSSBuZWVkIHRvIGZpbmQgdGhlIEtjb25maWcgZW50cmllcyByZWxhdGVkIHRvIEJQRiB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gVGhpcyBpcyB1c3VhbGx5IHRoZSBmaXJzdCBzdGVwIHdoZW4gSSYjMzk7bSBjb25maWd1cmluZyBvciBkZWJ1Z2dpbmcgYW55dGhpbmcgQlBGLXJlbGF0ZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzPyBDb25kaXRpb25hbCBjb21waWxhdGlvbnM/IExldCYjMzk7cyBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgc3R1ZmYgbGl2ZXMgd2l0aGluIHRoZSB3aWRlciBjb25maWcgZnJhbWV3b3JrLiBJIGltYWdpbmUgaXQmIzM5O2xsIGJlIHVuZGVyIHNvbWUgdmFyaWF0aW9uIG9mICYjMzQ7QlBGJiMzNDsgb3IgJiMzNDtlQlBGLCYjMzQ7IHBvc3NpYmx5IG5lc3RlZCB1bmRlciBuZXR3b3JraW5nLCB0cmFjaW5nLCBvciBzZWN1cml0eSBzdWJzeXN0ZW1zLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgc291cmNlIGRpcmVjdG9yeS4gR290dGEgc2VlIHdoYXQgZmxhZ3MgSSBjYW4gdXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBrZXJuZWwmIzM5O3MgQlBGIEtjb25maWcsIGZvY3VzaW5nIGFyb3VuZCBsaW5lIDI3LgoKKipEaXZpbmcgaW50byB0aGUgQlBGIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlIGFuZCB6ZXJvIGluIGFyb3VuZCBsaW5lIDI3LiBJIHdhbnQgdG8gc2VlIHdoYXQmIzM5O3MgYmVpbmcgZGVmaW5lZCB0aGVyZSwgd2hhdCBmdW5kYW1lbnRhbCBCUEYgb3B0aW9ucyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIEJQRiBzdWJzeXN0ZW0gd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNvcmUgY2FwYWJpbGl0aWVzIG9yIGRlcGVuZGVuY2llcyBpdOKAmXMgc2V0dGluZyB1cC4gSXMgaXQgcmVsYXRlZCB0byB0cmFjaW5nLCBuZXR3b3JraW5nLCBzZWN1cml0eSwgb3IgcGVyaGFwcyBhIG1vcmUgZ2VuZXJhbCBlbmFibGluZyBmbGFnPyBXaGF0IGxldmVsIG9mIGdyYW51bGFyIGNvbnRyb2wgYXJlIHdlIGdldHRpbmcgYXQgdGhpcyBwb2ludCBpbiB0aGUgY29uZmlndXJhdGlvbj8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgaXQmIzM5O3MgcHJvYmFibHkgYSBjcnVjaWFsIHNldHRpbmcuIEkmIzM5O20gcmVhZHkgdG8gZGlnZXN0IHRoZSBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgaXQsIGxvb2tpbmcgZm9yIGFueSBpbW1lZGlhdGUgaW1wbGljYXRpb25zIGZvciBob3cgQlBGIGlzIHVzZWQgb3IgbWFuYWdlZCB3aXRoaW4gYSBzeXN0ZW0mIzM5O3MgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBrZWVuIHRvIHNwb3QgYW55IGdvdGNoYXMgb3Igbm9uLW9idmlvdXMgZGVmYXVsdHMgdGhhdCBtaWdodCBjYXRjaCBzb21lb25lIG91dC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHksIGxldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHQjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgd2FudCB0aGUgQlBGIEpJVCBjb21waWxlciBlbmFibGVkIGJ5XG4gIDIxOlx0IyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cbiAgMjI6XHRjb25maWcgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxuICAyMzpcdFx0Ym9vbFxuICAyNDpcdFxuICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MzUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBCUEYgU3lzdGVtIENhbGwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBkcml2ZXMgZXZlcnl0aGluZyByZWxhdGVkIHRvIEJQRiBzeXN0ZW0gY2FsbHMuIFRoYXQmIzM5O3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgYSBsaXR0bGUgZmxhZyB3ZW50IHVwIGluIG15IG1pbmQuLi4gSSByZW1lbWJlciBzZWVpbmcgYGtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jYCBtZW50aW9uZWQuIEkgbmVlZCB0byBiZSBzdXJlIGJ1dCBJIHRoaW5rIHRoYXQgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBJdCYjMzk7cyB0aW1lIHRvIGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9uLgoKSSYjMzk7bSBzdGFydGluZyB0byB3b25kZXIsIHRob3VnaCwgYXJlIHRoZXJlICpvdGhlciogY29uZmlndXJhdGlvbiBvcHRpb25zIGF0IHBsYXkgaGVyZT8gSXMgYEJQRl9TWVNDQUxMYCB0aGUgb25seSBvbmUgdGhhdCBkaWN0YXRlcyB3aGV0aGVyIHRoZSBmdW5jdGlvbmFsaXR5IGluIHRoZSBicGYgbmFtZXNwYWNlIGlzIGFjdGl2ZT8gQmVzdCB0byBlbGltaW5hdGUgYW55IGRpc3RyYWN0aW9ucyBzbyBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYGtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jYCBmb3IgYW55IGFkZGl0aW9uYWwgYCNpZmRlZmAgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGNvbnRyb2wgcGFydHMgb2YgaXRzIGNvbXBpbGF0aW9uLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJIGRvbiYjMzk7dCB3YW50IHRvIG1pc3MgYW55dGhpbmcgcG90ZW50aWFsbHkgcmVsZXZhbnQgdG8gdGhpcyBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14jaWZkZWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz0yOD1zdGF0aWMgdm9pZCBuZXRuc19icGZfYXR0YWNoX3R5cGVfdW5uZWVkKGVudW0gbmV0bnNfYnBmX2F0dGFjaF90eXBlIHR5cGUpXG4tLVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMzAtXHRzd2l0Y2ggKHR5cGUpIHtcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jOjMxOiNpZmRlZiBDT05GSUdfSU5FVFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMzItXHRjYXNlIE5FVE5TX0JQRl9TS19MT09LVVA6XG4tLVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM9NDE9c3RhdGljIHZvaWQgbmV0bnNfYnBmX2F0dGFjaF90eXBlX25lZWQoZW51bSBuZXRuc19icGZfYXR0YWNoX3R5cGUgdHlwZSlcbi0tXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy00My1cdHN3aXRjaCAodHlwZSkge1xua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6NDQ6I2lmZGVmIENPTkZJR19JTkVUXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy00NS1cdGNhc2UgTkVUTlNfQlBGX1NLX0xPT0tVUDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk5NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgdGhlIFNjb3BlIG9mIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AuIEJlZm9yZSBJIGRpdmUgaW50byBhbnkgZGV0YWlsZWQgYW5hbHlzaXMsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNvbmZpcm0gaXRzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJcyB0aGlzIGZ1bmN0aW9uIHBvdGVudGlhbGx5IG9ubHkgYWN0aXZlIHVuZGVyIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBvciBmZWF0dXJlIGZsYWdzPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgbmVzdGVkIHdpdGhpbiBhbnkgYCNpZmRlZmAgYmxvY2tzLiBUaGF0JiMzOTtzIGFsd2F5cyBteSBmaXJzdCBzdGVwIOKAkyBhdm9pZGluZyB3YXN0ZWQgZWZmb3J0IGJ5IGxvb2tpbmcgYXQgYSBmdW5jdGlvbiB0aGF0IG1pZ2h0IG5vdCBldmVuIGJlIHBhcnQgb2YgdGhlIGFjdGl2ZSBjb2RlIHBhdGguIEEgcXVpY2sgc2VhcmNoIHRocm91Z2ggdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGlzIGluIG9yZGVyLiBUaGlzIHdpbGwgaW1tZWRpYXRlbHkgY2xhcmlmeSBpdHMgc2NvcGUgYW5kIGxldCBtZSBiZXR0ZXIgdW5kZXJzdGFuZCBob3cgdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz0xNTU9c3RhdGljIHZvaWQgYnBmX25ldG5zX2xpbmtfZGVhbGxvYyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4tLVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMTYyLVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6MTYzOnN0YXRpYyBpbnQgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMTY0LVx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyxcbi0tXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz0yMzA9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX25ldG5zX2xpbmtfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTIzMy1cdC5kZXRhY2ggPSBicGZfbmV0bnNfbGlua19kZXRhY2gsXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYzoyMzQ6XHQudXBkYXRlX3Byb2cgPSBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTIzNS1cdC5maWxsX2xpbmtfaW5mbyA9IGJwZl9uZXRuc19saW5rX2ZpbGxfaW5mbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUxMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb2RlIENoYW5nZSBmb3IgRnV6emluZyBXb3J0aGluZXNzKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZCBhcyBJIGV2YWx1YXRlIHRoaXMgcGF0Y2guIEZpcnN0LCBJIHNlZSB0aGlzIGNvZGUgY2hhbmdlIGlzbiYjMzk7dCB3cmFwcGVkIGluIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzLiBHb29kLiBOb3csIHRoZSBwcm9tcHQgc2F5cyByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY2hhbmdlcyB0aGF0IGRvbiYjMzk7dCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3csIHNwZWNpZmljYWxseTogY2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MuCgpTbywgcmVwbGFjaW5nIGBtdXRleF9sb2NrYC9gbXV0ZXhfdW5sb2NrYCB3aXRoIGBndWFyZChtdXRleClg4oCUZG9lcyAqdGhhdCogZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93PyBJbml0aWFsbHksIEkmIzM5O2Qgc2F5IG5vLiBJdCYjMzk7cyBhIHJlZmFjdG9yaW5nLCB1c2luZyB0aGUgY2xlYW51cCBhdHRyaWJ1dGUgdG8gZW5zdXJlIHRoZSBtdXRleCBpcyBhdXRvbWF0aWNhbGx5IHVubG9ja2VkIG9uIHNjb3BlIGV4aXQuIFRoZSBoaWdoLWxldmVsIGV4ZWN1dGlvbiwgdGhlIGxvY2tpbmcsIGNoZWNraW5nLCB1bmxvY2tpbmcsIGFuZCByZXR1cm5pbmcsIHNob3VsZCBiZSBpZGVudGljYWwuIEJ1dCB0aGVuIEkgZ2V0IGh1bmcgdXAgb24gdGhlIHBocmFzaW5nOiAmIzM0O2RvZXMgaXQgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93PyYjMzQ7IEl0JiMzOTtzICp0ZWNobmljYWxseSogY2hhbmdpbmcgKmhvdyogdGhlIGxvY2sgaXMgcmVsZWFzZWQsIHVzaW5nIGNvbXBpbGVyLWdlbmVyYXRlZCBjb2RlIGluc3RlYWQgb2YgZXhwbGljaXQgYGdvdG9gIGFuZCBgbXV0ZXhfdW5sb2NrYC4KCkhtbS4uLiBpcyB0aGF0IHN0aWxsICYjMzQ7bm90IGZ1bmN0aW9uYWxseSBhbHRlcmluZyBleGVjdXRpb24gZmxvdz8mIzM0OyBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBjYWxscyBvdXQgKm51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyouIFRoaXMgaXMgYSBzdHJ1Y3R1cmFsIGNoYW5nZSwgdXNpbmcgYGd1YXJkYC4gTm93LCB0aGUgY3J1Y2lhbCBwYXJ0OiBJIHN0YXJ0IHRvIHRoaW5rIHRoYXQgZXZlbiB3aXRoIGEgcmVmYWN0b3JpbmcsIGJ1Z3MgKmNhbiogYmUgaW50cm9kdWNlZC4gQSBtaXNwbGFjZWQgZ3VhcmQgb3IgYSByZXR1cm4gc3RhdGVtZW50IHRoYXQgYnlwYXNzZXMgdGhlIGludGVuZGVkIHVubG9jayBjb3VsZCBjcmVhdGUgcmVhbCBwcm9ibGVtcy4KCkxldCYjMzk7cyBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGUgY29kZSBkaWZmOgoKYGBgYwotCW11dGV4X2xvY2soJmFtcDtuZXRuc19icGZfbXV0ZXgpOwotCiAJbmV0ID0gbmV0X2xpbmstJmd0O25ldDsKLQlpZiAoIW5ldCB8fCAhY2hlY2tfbmV0KG5ldCkpIHsKJiM0MzsJaWYgKCFuZXQgfHwgIWNoZWNrX25ldChuZXQpKQogCQkvKiBMaW5rIGF1dG8tZGV0YWNoZWQgb3IgbmV0bnMgZHlpbmcgKi8KLQkJcmV0ID0gLUVOT0xJTks7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9CiYjNDM7CQlyZXR1cm4gLUVOT0xJTks7CmBgYAoKQWhhISBUaGlzIGlzIGEgY29udHJvbCBmbG93IGNoYW5nZS4gSXQmIzM5O3MgbW92aW5nIGZyb20gYSBgZ290byBvdXRfdW5sb2NrYCB0byBhIGByZXR1cm4gLUVOT0xJTktgLiBUaGF0JiMzOTtzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSBpbiB0aGUgQyBjb2RlLCBldmVuIGlmIHRoZSBpbnRlbmRlZCAqYmVoYXZpb3IqIGlzIHRoZSBzYW1lLiBJdCBpcyB2ZXJ5IGxpa2VseSB0aGF0IGZ1enppbmcgaXMgdXNlZnVsIGhlcmUgdG8gZW5zdXJlIHRoZSBsb2NrIGlzIGFjdHVhbGx5IHJlbGVhc2VkLCBhbmQgbm8gZGVhZGxvY2tzIG9jY3VyLgoKSSBzaG91bGQgYWxzbyBjaGVjayBmb3IgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIG1ham9yIG9uZSwgYnV0IHdoZXJlJiMzOTtzIHRoaXMgY29kZSBsb2NhdGVkPyBBaCwgaXQmIzM5O3MgYGtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jYC4gRG9lcyB0aGF0IGltcGx5IGBDT05GSUdfTkVUYCBpcyByZXF1aXJlZD8gVGltZSB0byBjaGVjayB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIG1ha2Ugc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0X25hbWVzcGFjZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTI2PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG9mZmxvYWQub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBuZXRfbmFtZXNwYWNlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMjgtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdGN4Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjcyOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBCUEYgU3lzdGVtIENhbGwgYW5kIE5ldHdvcmsgTmFtZXNwYWNlIERlcGVuZGVuY3kqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBhIHRob3VnaHQganVzdCBwb3BwZWQgaW50byBteSBoZWFkOiBgbmV0X25hbWVzcGFjZS5jYCB1c2VzIGBzdHJ1Y3QgbmV0YCwgcmlnaHQ/IEFuZCB0aGF0JiMzOTtzIHVzdWFsbHkgYXNzb2NpYXRlZCB3aXRoIG5ldHdvcmsgZnVuY3Rpb25hbGl0eS4gRG9lcyB0aGF0IG1lYW4gdGhlIEJQRiBzeXNjYWxsLCBvciBhdCBsZWFzdCBwYXJ0cyBvZiBpdHMgaW1wbGVtZW50YXRpb24sIGltcGxpY2l0bHkgZGVwZW5kIG9uIGBDT05GSUdfTkVUYCBiZWluZyBlbmFibGVkPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGlzIGFzc3VtcHRpb24uCgpMZXQmIzM5O3MgY2hlY2sgdGhlIEtjb25maWcuIEkmIzM5O2xsIGp1bXAgb3ZlciB0byBga2VybmVsL2JwZi9LY29uZmlnYC4gUmlnaHQsIGhlcmUgd2UgYXJlLiBPa2F5LCBsZXQmIzM5O3MgbG9vayBhdCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gQWhhISBJdCBzZWxlY3RzIGBORVRfU09DS19NU0dgLCBgTkVUX1hHUkVTU2AsIGFuZCBgUEFHRV9QT09MYCBpZiBgTkVUYCBpcyBlbmFibGVkLCBidXQgdGhlICpzeXNjYWxsKiBpdHNlbGYgZG9lc24mIzM5O3QgZGlyZWN0bHkgZGVwZW5kIG9uIGBORVRgLiBJbnRlcmVzdGluZy4KCkhvd2V2ZXIsIHRoZSBxdWVzdGlvbiByZW1haW5zOiBpcyBgbmV0X25hbWVzcGFjZS5jYCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGBDT05GSUdfTkVUYD8gVGhlIGBLY29uZmlnYCBkb2VzbiYjMzk7dCBwcm92aWRlIGVub3VnaCBpbmZvcm1hdGlvbiBhbmQgdGhlIGBNYWtlZmlsZWAgbWlnaHQgYmUgd2hlcmUgdGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0YWtlcyBwbGFjZS4gVGltZSB0byBjaGVjayBga2VybmVsL2JwZi9NYWtlZmlsZWAgYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai15IDo9IGNvcmUub1xuICAgMzpcdGlmbmVxICgkKENPTkZJR19CUEZfSklUX0FMV0FZU19PTikseSlcbiAgIDQ6XHQjIF9fX2JwZl9wcm9nX3J1bigpIG5lZWRzIEdDU0UgZGlzYWJsZWQgb24geDg2OyBzZWUgMzE5M2MwODM2ZjIwMyBmb3IgZGV0YWlsc1xuICAgNTpcdGNmbGFncy1ub2djc2UtJChDT05GSUdfWDg2KSQoQ09ORklHX0NDX0lTX0dDQykgOj0gLWZuby1nY3NlXG4gICA2Olx0ZW5kaWZcbiAgIDc6XHRDRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxuICAgODpcdFxuICAgOTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xuICAxMDpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuICAxMTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXG4gIDEyOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xuICAxMzpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXG4gIDE0Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZml4dXBzLm8gY2ZnLm8gc3RhdGVzLm8gYmFja3RyYWNrLm8gY2hlY2tfYnRmLm9cbiAgMTU6XHRvYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbiAgMTY6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkaXNhc20ubyBtcHJvZy5vXG4gIDE3Olx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSB0cmFtcG9saW5lLm9cbiAgMTg6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xuICAxOTpcdGlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG4gIDIwOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYXJlbmEubyByYW5nZV90cmVlLm9cbiAgMjE6XHRlbmRpZlxuICAyMjpcdG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gZGlzcGF0Y2hlci5vXG4gIDIzOlx0aWZlcSAoJChDT05GSUdfTkVUKSx5KVxuICAyNDpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRldm1hcC5vXG4gIDI1Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY3B1bWFwLm9cbiAgMjY6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBvZmZsb2FkLm9cbiAgMjc6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBuZXRfbmFtZXNwYWNlLm9cbiAgMjg6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSB0Y3gub1xuICAyOTpcdGVuZGlmXG4gIDMwOlx0aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXG4gIDMxOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3RhY2ttYXAub1xuICAzMjpcdGVuZGlmXG4gIDMzOlx0aWZlcSAoJChDT05GSUdfQ0dST1VQUykseSlcbiAgMzQ6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xuICAzNTpcdGVuZGlmXG4gIDM2Olx0b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICYjNDM7PSBjZ3JvdXAub1xuICAzNzpcdGlmZXEgKCQoQ09ORklHX0lORVQpLHkpXG4gIDM4Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmV1c2Vwb3J0X2FycmF5Lm9cbiAgMzk6XHRlbmRpZlxuICA0MDpcdGlmZXEgKCQoQ09ORklHX1NZU0ZTKSx5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTgyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCYjMzk7cyBCUEYgTmFtZXNwYWNlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG5ldF9uYW1lc3BhY2Uub2AgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGl0JiMzOTtzIGNvbmRpdGlvbmFsIG9uIGBpZmVxICgkKENPTkZJR19ORVQpLHkpYC4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IGl0IGFsc28gbWVhbnMgd2UmIzM5O2xsIGRlZmluaXRlbHkgbmVlZCBib3RoIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgZW5hYmxlZC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgbGV0JiMzOTtzIGRpZyBhIGJpdCBkZWVwZXIuCgpJJiMzOTttIG5vdyBjaGVja2luZyBvdXQgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCBpbiBga2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNgLiBBaCwgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgLnVwZGF0ZV9wcm9nYCB3aXRoaW4gYGJwZl9uZXRuc19saW5rX29wc2AuIEhhbmcgb24uLi4gdGhpcyBpcyB3aGVuIHRoZSByZWQgZmxhZyB3ZW50IHVwLiBUaGUgcHJvbXB0IGlzIGhhbW1lcmluZyBob21lIHRoZSBwb2ludCBhYm91dCBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4gU3RhdGljIGZ1bmN0aW9ucyBnZXQgaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIGFuZCB0aGV5IGRvbiYjMzk7dCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIHdoaWNoIHRoZSBwcm9tcHQgc2VlbXMgdG8gYmUgcG9pbnRpbmcgb3V0IGFzIGEgcHJvYmxlbSBpbiB0aGUgY29udGV4dCBvZiB3aGF0IHdlIGFyZSBkb2luZy4gU28sIEkgaGF2ZSB0byBmaW5kIHdoZXJlIGBicGZfbmV0bnNfbGlua19vcHNgIGlzIHVzZWQsIHRvIHNlZSBpZiB3ZSBjYW4gdXNlIGFuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIHRoYXQgd291bGQgc29sdmUgdGhlIHByb2JsZW0gaGlnaGxpZ2h0ZWQgaW4gdGhlIHByb21wdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX25ldG5zX2xpbmtfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM9MjE3PXN0YXRpYyB2b2lkIGJwZl9uZXRuc19saW5rX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbi0tXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0yMjktXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYzoyMzA6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX25ldG5zX2xpbmtfb3BzID0ge1xua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMjMxLVx0LnJlbGVhc2UgPSBicGZfbmV0bnNfbGlua19yZWxlYXNlLFxuLS1cbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTQ3MT1pbnQgbmV0bnNfYnBmX2xpbmtfY3JlYXRlKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtNDk3LVx0YnBmX2xpbmtfaW5pdChcdTAwMjZuZXRfbGluay1cdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX05FVE5TLFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6NDk4Olx0XHQgICAgICBcdTAwMjZicGZfbmV0bnNfbGlua19vcHMsIHByb2csIHR5cGUpO1xua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtNDk5LVx0bmV0X2xpbmstXHUwMDNlbmV0ID0gbmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTQ3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC4KCioqTXkgQW5hbHlzaXMgb2YgQlBGIExpbmsgQ3JlYXRpb24gYW5kIFVwZGF0ZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGBuZXRuc19icGZfbGlua19jcmVhdGVgIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBhIEJQRiBsaW5rLCBhbmQgaXQgbGV2ZXJhZ2VzIHRoZSBgYnBmX25ldG5zX2xpbmtfb3BzYCBzdHJ1Y3R1cmUgdG8gbWFuYWdlIGl0cyBiZWhhdmlvci4gVGhhdCYjMzk7cyBmYWlybHkgc3RhbmRhcmQuIFdoYXQgSSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIGlzIHRoZSAqdGltaW5nKiBvZiB0aGUgdXBkYXRlIG9wZXJhdGlvbi4gV2hlbiBkb2VzIGAudXBkYXRlX3Byb2dgIHdpdGhpbiB0aGF0IHN0cnVjdHVyZSBhY3R1YWxseSBnZXQgY2FsbGVkPyBJdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBqdXN0IGZyb20gdGhlIG5hbWUgb2YgdGhlIGNyZWF0ZSBmdW5jdGlvbi4gTG9va2luZyBpbnRvIHRoZSBrZXJuZWwgY29kZSwgYWgsIGl0IGFwcGVhcnMgdGhhdCBgYnBmX2xpbmtfdXBkYXRlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSB0cmlnZ2VycyB0aGUgYC51cGRhdGVfcHJvZ2AgY2FsbC4gSXQgbG9va3MgbGlrZSBgYnBmX2xpbmtfdXBkYXRlYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGxpbmsgdXBkYXRlcyBpbiB0aGUgQlBGIHN5c3RlbSBjYWxsLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgdGhlIG5leHQgdGltZSBJIGhhdmUgdG8gZGVidWcgc29tZSBsaW5rIGJlaGF2aW9yLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXBkYXRlX3Byb2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz01OTgxPXN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAyMS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMjI6XHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNldXBkYXRlX3Byb2cpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDIzOlx0XHRyZXQgPSBsaW5rLVx1MDAzZW9wcy1cdTAwM2V1cGRhdGVfcHJvZyhsaW5rLCBuZXdfcHJvZywgb2xkX3Byb2cpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAyNC1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM5MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBCUEYgTGluayBVcGRhdGUgQW5hbHlzaXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBsaW5rX3VwZGF0ZWAgaXMgdGhlIGVudHJ5IHBvaW50IHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBOb3QgdW5leHBlY3RlZCwgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGxvb2suIEhvd2V2ZXIsIHRoZSBgc3RhdGljYCBkZWNsYXJhdGlvbiBvbiBgbGlua191cGRhdGVgIGlzIGltbWVkaWF0ZWx5IHJhaXNpbmcgYSBmbGFnLiBJZiBpdCYjMzk7cyBgc3RhdGljYCwgaXQmIzM5O3Mgbm90IGRpcmVjdGx5IGV4cG9zZWQgYXMgYSBzeXN0ZW0gY2FsbCBpbiB0aGUgdXN1YWwgc2Vuc2UsIHdoaWNoIG1lYW5zIHNvbWV0aGluZyAqZWxzZSogaXMgY2FsbGluZyBpdC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHN0YWNrIHRvIGZpZ3VyZSBvdXQgdGhlIGluaXRpYXRpbmcgcGF0aC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGNydWNpYWwgaGVyZSB0byBhc3Nlc3MgdGhlIHVwZGF0ZSYjMzk7cyBvdmVyYWxsIGltcGFjdCBhbmQgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8ga25vdyBob3cgdGhpcyBzcGVjaWZpYyB1cGRhdGUgZnVuY3Rpb24gaXMgZ2V0dGluZyBpbnZva2VkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hlcmUgdGhpcyBjYWxsIGlzIGNvbWluZyBmcm9tLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaW5rX3VwZGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTU4NDQ9c3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk0OS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5NTA6c3RhdGljIGludCBsaW5rX3VwZGF0ZV9tYXAoc3RydWN0IGJwZl9saW5rICpsaW5rLCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTEte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTQtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTU1Olx0bmV3X21hcCA9IGJwZl9tYXBfZ2V0KGF0dHItXHUwMDNlbGlua191cGRhdGUubmV3X21hcF9mZCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTU2LVx0aWYgKElTX0VSUihuZXdfbWFwKSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTU4LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk1OTpcdGlmIChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLmZsYWdzIFx1MDAyNiBCUEZfRl9SRVBMQUNFKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTYwOlx0XHRvbGRfbWFwID0gYnBmX21hcF9nZXQoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5vbGRfbWFwX2ZkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NjEtXHRcdGlmIChJU19FUlIob2xkX21hcCkpIHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTY0LVx0XHR9XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTY1Olx0fSBlbHNlIGlmIChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm9sZF9tYXBfZmQpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NjYtXHRcdHJldCA9IC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk3OC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5Nzk6I2RlZmluZSBCUEZfTElOS19VUERBVEVfTEFTVF9GSUVMRCBsaW5rX3VwZGF0ZS5vbGRfcHJvZ19mZFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk4MC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5ODE6c3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5ODIte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTAtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTkxOlx0ZmxhZ3MgPSBhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLmZsYWdzO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk5Mi1cdGlmIChmbGFncyBcdTAwMjYgfkJQRl9GX1JFUExBQ0UpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk5NC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5OTU6XHRsaW5rID0gYnBmX2xpbmtfZ2V0X2Zyb21fZmQoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5saW5rX2ZkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTYtXHRpZiAoSVNfRVJSKGxpbmspKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTktXHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNldXBkYXRlX21hcCkge1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAwMDpcdFx0cmV0ID0gbGlua191cGRhdGVfbWFwKGxpbmssIGF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAwMS1cdFx0Z290byBvdXRfcHV0X2xpbms7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAwMy1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMDQ6XHRuZXdfcHJvZyA9IGJwZl9wcm9nX2dldChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm5ld19wcm9nX2ZkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMDUtXHRpZiAoSVNfRVJSKG5ld19wcm9nKSkge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMTAtXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1JFUExBQ0UpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMTE6XHRcdG9sZF9wcm9nID0gYnBmX3Byb2dfZ2V0KGF0dHItXHUwMDNlbGlua191cGRhdGUub2xkX3Byb2dfZmQpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAxMi1cdFx0aWYgKElTX0VSUihvbGRfcHJvZykpIHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDE2LVx0XHR9XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDE3Olx0fSBlbHNlIGlmIChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDE4LVx0XHRyZXQgPSAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzNTQ9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0OTUtXHRjYXNlIEJQRl9MSU5LX1VQREFURTpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0OTY6XHRcdGVyciA9IGxpbmtfdXBkYXRlKFx1MDAyNmF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ5Ny1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzUxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgU3lzdGVtIENhbGwqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYF9fc3lzX2JwZmAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LCB0aGUgZmlyc3QgcGxhY2UgZXhlY3V0aW9uIGhpdHMgd2hlbiBhIEJQRiBwcm9ncmFtIGlzIGludm9rZWQuIEFuZCBmcm9tIHdoYXQgSSBzZWUgaW4gdGhlIGNvZGUsIGBsaW5rX3VwZGF0ZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZnJvbSBgX19zeXNfYnBmYC4gTm93LCBoYW5nIG9uIGEgc2Vjb25kLi4uIGlzIGBfX3N5c19icGZgIGFsc28gZGVmaW5lZCBhcyBhIGBzdGF0aWNgIGZ1bmN0aW9uPyBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlY2xhcmF0aW9uLiBTdGF0aWMgZnVuY3Rpb25zIGhhdmUgbGltaXRlZCBzY29wZSwgYW5kIHRoYXQgd2lsbCBpbXBhY3QgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSB3aWRlciBCUEYgc3lzdGVtLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBleGFjdCBkZWZpbml0aW9uLiBMZXQgbWUgZGlnIGludG8gYF9fc3lzX2JwZmAuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zeXNfYnBmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9NjMxMz1zdGF0aWMgaW50IHByb2dfYXNzb2Nfc3RydWN0X29wcyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzUzLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjM1NDpzdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzU1LVx0XHQgICAgIGJwZnB0cl90IHVhdHRyX2NvbW1vbiwgdW5zaWduZWQgaW50IHNpemVfY29tbW9uKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTY1MzQ9U1lTQ0FMTF9ERUZJTkU1KGJwZiwgaW50LCBjbWQsIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqLCB1YXR0ciwgdW5zaWduZWQgaW50LCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY1MzYte1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjUzNzpcdHJldHVybiBfX3N5c19icGYoY21kLCBVU0VSX0JQRlBUUih1YXR0ciksIHNpemUsIFVTRVJfQlBGUFRSKHVhdHRyX2NvbW1vbiksIHNpemVfY29tbW9uKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY1MzgtfVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTY1NTE9QlBGX0NBTExfMyhicGZfc3lzX2JwZiwgaW50LCBjbWQsIHVuaW9uIGJwZl9hdHRyICosIGF0dHIsIHUzMiwgYXR0cl9zaXplKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY1NjYtXHR9XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NTY3Olx0cmV0dXJuIF9fc3lzX2JwZihjbWQsIEtFUk5FTF9CUEZQVFIoYXR0ciksIGF0dHJfc2l6ZSwgS0VSTkVMX0JQRlBUUihOVUxMKSwgMCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NTY4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MTQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1ODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgQlBGIEZ1bmN0aW9uIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBCUEYgZnV6emluZyB0YXNrLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgYmVzdCBmdW5jdGlvbnMgdG8gdGFyZ2V0LCBrZWVwaW5nIHRoZSBmdXp6aW5nIGZvY3VzZWQgYW5kIGVmZmVjdGl2ZS4gVGhlIHByb21wdCBnaXZlcyBjbGVhciBndWlkYW5jZTogcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhpcyBtYWtlcyBzZW5zZTsgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBhcmUga2V5IGZvciBkaXJlY3QgZnV6emluZy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCBmb3IgYHN5c19icGZgLCBnaXZlbiBpdCYjMzk7cyB0aGUgc3lzY2FsbCBpdHNlbGYuIEJ1dCB0aGF0JiMzOTtzIHByb2JhYmx5IHRvbyBicm9hZC4gVGhlbiBJIHNlZSBgX19zeXNfYnBmYCwgd2hpY2ggaXMgc3RhdGljLCBzbyBkZWZpbml0ZWx5IG91dC4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgd2FybnMgYWdhaW5zdCB0aGVzZSBzdGF0aWMgaGVscGVycywgYXMgdGhleSYjMzk7cmUgdXN1YWxseSBpbmxpbmVkLgoKVGhlbiwgdGhlcmUmIzM5O3MgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYC4gSSBzZWUgdGhhdCBpdCBpcyBzdGF0aWMsIHdoaWNoIGlzIGEgcmVkIGZsYWcuIEJ1dCB3YWl0LCBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgKGAudXBkYXRlX3Byb2dgKS4gSWYgYSBmdW5jdGlvbiYjMzk7cyBhZGRyZXNzIGlzIHRha2VuIGxpa2UgdGhpcywgdGhlIGNvbXBpbGVyICpjYW4mIzM5O3QqIGlubGluZSBpdCwgcmlnaHQ/IEl0IG5lZWRzIGEgZGlzdGluY3Qgc3ltYm9sLiBTbywgZXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgIG1pZ2h0IGJlIGZ1enphYmxlLiBUaGlzIGNvdWxkIGJlIG15IG1haW4gdGFyZ2V0LgoKVGhlIHByb21wdCBkb2VzIHNheSB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCBpcyBhIGRpcmVjdCBtb2RpZmljYXRpb24gcmVsYXRlZCB0byB0aGUgcGF0Y2gsIHNvIHRoaXMgd291bGQgYmUgaWRlYWwuCgpMZXQmIzM5O3MgY2hlY2sgZm9yIGFsdGVybmF0aXZlcy4gYGJwZl9saW5rX3VwZGF0ZWAgaXMgc3RhdGljLCB3aGljaCBlbGltaW5hdGVzIGl0LiBgc3lzX2JwZmAgaXMgZmFyIHRvbyBnZW5lcmljLiBJJiMzOTtsbCBzdGljayB3aXRoIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AuCgpJIGNvbnNpZGVyZWQgYG5ldG5zX2JwZl9saW5rX2NyZWF0ZWAgd2hpY2ggYWN0dWFsbHkgY3JlYXRlcyB0aGUgbGluay4gQnV0LCBpdCBzZWVtcyB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgIHdoaWNoIGxlYWRzIG1lIGJhY2sgdG8gaXQgYXMgdGhlIGJldHRlciBjaG9pY2UuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgIGlzIGRlZmluaXRlbHkgKm5vdCogaW5saW5lZC4gSSBjYW4gY2hlY2sgYnkgdmVyaWZ5aW5nIHRoYXQgdGhlIGNvbXBpbGVyIGRpZCBub3QgY3JlYXRlIGEgY2xvbmUsIHNvIHRoYXQgdGhlIGFkZHJlc3MgaXMgY29uc2lzdGVudC4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBrZXJuZWwgY29uZmlnIHJlcXVpcmVtZW50cy4gSSBrbm93IHRoaXMgaXMgcmVsYXRlZCB0byBuZXR3b3JraW5nIGFuZCBCUEYsIHNvIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYXJlIHByb2JhYmx5IHJlcXVpcmVkLiBBIHF1aWNrIHBlZWsgYXQgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBjb25maXJtcyB0aGlzLiBXZSYjMzk7cmUgZ29vZCB0aGVyZS4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O2xsIHNjYW4gYGtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jYCBmb3IgYW55IG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMsIGJ1dCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSBpbml0aWFsIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTI4PXN0YXRpYyB2b2lkIG5ldG5zX2JwZl9hdHRhY2hfdHlwZV91bm5lZWQoZW51bSBuZXRuc19icGZfYXR0YWNoX3R5cGUgdHlwZSlcbi0tXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0zMC1cdHN3aXRjaCAodHlwZSkge1xua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6MzE6I2lmZGVmIENPTkZJR19JTkVUXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0zMi1cdGNhc2UgTkVUTlNfQlBGX1NLX0xPT0tVUDpcbi0tXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz00MT1zdGF0aWMgdm9pZCBuZXRuc19icGZfYXR0YWNoX3R5cGVfbmVlZChlbnVtIG5ldG5zX2JwZl9hdHRhY2hfdHlwZSB0eXBlKVxuLS1cbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTQzLVx0c3dpdGNoICh0eXBlKSB7XG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYzo0NDojaWZkZWYgQ09ORklHX0lORVRcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTQ1LVx0Y2FzZSBORVROU19CUEZfU0tfTE9PS1VQOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgyNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AuIFRoZSBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyB0aGF0IHRoZSBmdW5jdGlvbiBpdHNlbGYgaXNuJiMzOTt0IGd1YXJkZWQgYnkgYW55IGAjaWZkZWYgQ09ORklHX0lORVRgIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBUaGF0JiMzOTtzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLCBhcyBpdCBtZWFucyBpdCYjMzk7cyBub3Qgc3BlY2lmaWMgdG8gSVB2NCBvciBJUHY2LgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGNoYW5nZSBpdHNlbGYuIFRoZSBrZXkgYWx0ZXJhdGlvbiBoZXJlIGlzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIGBuZXRuc19icGZfbXV0ZXhgIGxvY2suIEJlZm9yZSwgdGhlIGBtdXRleF9sb2NrYCB3YXMgY2FsbGVkICphZnRlciogc29tZSBpbml0aWFsIGNoZWNrczogYG9sZF9wcm9nYCBhbmQgYG5ld19wcm9nLSZndDt0eXBlYC4gTm93LCB3ZSBoYXZlIGBndWFyZChtdXRleCkoJmFtcDtuZXRuc19icGZfbXV0ZXgpYCBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLiBUaGlzIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rLCAmIzM0O0Z1bmN0aW9uYWwgY2hhbmdlISYjMzQ7IGFuZCB0aGF0IHRoaXMgbmVlZHMgc2VyaW91cyBmdXp6aW5nLCBiZWNhdXNlIGxvY2tpbmcgY2hhbmdlcyBjYW4gYmUgc28gaW1wYWN0ZnVsLgoKTXkgdGhvdWdodCBwcm9jZXNzIGlzOiBUaGlzIGxvY2sgaXMgbm93IGhlbGQgKmR1cmluZyogdGhvc2UgYG9sZF9wcm9nYCBhbmQgYG5ld19wcm9nLSZndDt0eXBlYCBjaGVja3MuIFByZXZpb3VzbHksIHdlIHdlcmUgcG90ZW50aWFsbHkgYWNjZXNzaW5nIGBsaW5rLSZndDtwcm9nYCB3aXRob3V0IGhvbGRpbmcgdGhlIG11dGV4LiBOb3cgd2UmIzM5O3JlIG5vdC4gVGhpcyBjb3VsZCBiZSBhIGRlYWRsb2NrIG9wcG9ydHVuaXR5IGlmIHNvbWV0aGluZyBlbHNlIGlzIGhvbGRpbmcgdGhpcyBsb2NrIGFuZCBzdWJzZXF1ZW50bHkgY2FsbHMgdGhpcyBmdW5jdGlvbi4gSXQgY291bGQgYWxzbyBoYXZlIGJlZW4gYSByYWNlIGNvbmRpdGlvbiwgd2hlcmUgdGhlIGBsaW5rLSZndDtwcm9nYCBkYXRhIG1pZ2h0IGhhdmUgYmVlbiBtb2RpZmllZCBvdXRzaWRlIHRoZSBwcm90ZWN0aW9uIG9mIHRoZSBsb2NrLgoKU3BlY2lmaWNhbGx5LCBgbGluay0mZ3Q7cHJvZ2AgaXMgYWNjZXNzZWQgaW4gYm90aCB0aG9zZSBjaGVja3MuIFNvLCB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYSBwb3RlbnRpYWwgZGF0YSByYWNlIG9uIGBsaW5rLSZndDtwcm9nYCwgd2hpY2ggaXMgZml4ZWQgYnkgdGhpcyBwYXRjaC4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3MgYWx0ZXJpbmcgdGhlIGxvY2tpbmcgYmVoYXZpb3IgYW5kIHRoZXJlZm9yZSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93LCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBjb25jdXJyZW50IGFjY2Vzcy4gSXQmIzM5O3MgYSBjcml0aWNhbCBjaGFuZ2Ugd29ydGggZnV6emluZyB0byBkZXRlY3QgYW55IG5ld2x5IGludHJvZHVjZWQgZGVhZGxvY2tzIG9yIHVuaW50ZW5kZWQgcmFjZSBjb25kaXRpb25zLgoKSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQmIzM5O3MgbW9kaWZpZWQsIHdoaWNoIGl0IGlzLiBBbmQgSSYjMzk7bSBzZWVpbmcgdGhpcyBjb2RlIGlzIHJlbGF0ZWQgdG8gYEJQRl9TWVNDQUxMYCBhbmQgYE5FVGAsIHNvIHRoYXQgZ2l2ZXMgbWUgYW4gaW5pdGlhbCBpZGVhIG9mIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQW5kIGZpbmFsbHksIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBkZXBlbmRlbmNpZXMgZm9yIGBCUEZfU1lTQ0FMTGAuIEkmIzM5O2xsIHNjYW4gdGhyb3VnaCBgaW5pdC9LY29uZmlnYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE5MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBjb25maWd1cmF0aW9uIGlzIHN0cnVjdHVyZWQuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAyNy4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBwcm9iYWJseSBkZWZpbmVkIHNvbWV3aGVyZSBpbiB0aGF0IGFyZWEuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGZvdW5kYXRpb25hbCBzZXR0aW5ncyByZWxhdGVkIHRvIGVuYWJsaW5nIG9yIGRpc2FibGluZyBCUEYgZnVuY3Rpb25hbGl0eSwgbWF5YmUgc29tZSBvZiB0aGUgY29yZSBmZWF0dXJlIHRvZ2dsZXMsIG9yIHBlcmhhcHMgdGhlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB3aGF0JiMzOTtzICpjb25maWd1cmFibGUqIGFuZCBob3cgdGhhdCBjb25maWd1cmFiaWxpdHkgaXMgcHJlc2VudGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIwOlx0IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHdhbnQgdGhlIEJQRiBKSVQgY29tcGlsZXIgZW5hYmxlZCBieVxuICAyMTpcdCMgZGVmYXVsdCBmb3Iga2VybmVscyB0aGF0IHdlcmUgY29tcGlsZWQgd2l0aCBCUEYgSklUIHN1cHBvcnQuXG4gIDIyOlx0Y29uZmlnIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcbiAgMjM6XHRcdGJvb2xcbiAgMjQ6XHRcbiAgMjU6XHRtZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgQlBGX1NZU0NBTExcbiAgMjg6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4gIDI5Olx0XHRzZWxlY3QgQlBGXG4gIDMwOlx0XHRzZWxlY3QgSVJRX1dPUktcbiAgMzE6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuICAzMjpcdFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxuICAzMzpcdFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbiAgMzQ6XHRcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG4gIDM1Olx0XHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbiAgMzY6XHRcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG4gIDM3Olx0XHRkZWZhdWx0IG5cbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY4NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgVW5jaGFydGVkIFRlcnJpdG9yeSoqCgpBbHJpZ2h0LCBubyAmIzM0O2RlcGVuZHMgb24mIzM0OyBoZXJlLCB0aGF0JiMzOTtzIGdvb2QuIFRoYXQmIzM5O3MgYSBjbGVhbiBzbGF0ZS4gTm93LCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgZ2l2ZW4gdGhpcyBhYnNlbmNlIG9mIGRlcGVuZGVuY2llcywgaXMgdG8gaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGBORVRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgbmV0d29yay4gVGhpcyBpbnZvbHZlcyBsb29raW5nIGZvciBhbnkgaW1tZWRpYXRlIHNpZ25hbHMuIFRoZSBgTkVUYCBzdGF0ZSBpcyBwYXJhbW91bnQgYW5kIHdpbGwgZ3VpZGUgbWUgYXMgSSBtb3ZlIGZvcndhcmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGJlZm9yZSBJIGNhbiBwcm9ncmVzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVCQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZy01LVxubmV0L0tjb25maWc6NjptZW51Y29uZmlnIE5FVFxubmV0L0tjb25maWctNy1cdGJvb2wgXCYjMzQ7TmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODkxCgkJCQkJCQlvdXRwdXQ6IDEzMAoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIExvY2tpbmcgQ2hhbmdlIGluIEJQRiBOZXRsaW5rIFVwZGF0ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoZSBrZXkgY29uZmlncyBhcmUgYE5FVGAgYW5kIGBCUEZfU1lTQ0FMTGAuIFRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBxdWl0ZSBhIGJpdCwgd2hpY2ggaXMgZ29vZC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIG15IGZvY3VzIG5lZWRzIHRvIGJlLgoKVGhlIG1lYXQgb2YgdGhlIGNoYW5nZSBpcyB0aGlzIHNoaWZ0IGZyb20gbWFudWFsbHkgbWFuYWdpbmcgdGhlIGxvY2svdW5sb2NrIGFyb3VuZCB0aGF0IGZ1bmN0aW9uIHRvIHVzaW5nIGEgYGd1YXJkKG11dGV4KWAuIFJpZ2h0IGF3YXksIEkgcmVjb2duaXplIHRoaXMgaXMgYSBjaGFuZ2UgdG8gdGhlIGxvY2tpbmcgc2NvcGUuIFNwZWNpZmljYWxseSwgdGhlIG11dGV4IGlzIG5vdyBhY3F1aXJlZCAqYmVmb3JlKiBjaGVja2luZyBgbGluay0mZ3Q7cHJvZ2AsIHdoaWNoIHdhcyBoYW5kbGVkIHdpdGhvdXQgYSBsb2NrIHByZXZpb3VzbHkuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIHRob3NlIGFyZSB0aGUgb25lcyB0aGF0IGRlbWFuZCB0aGUgbW9zdCBzY3J1dGlueS4KCkdpdmVuIHRoaXMsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyByZXZpc2VkIGxvY2tpbmcgc3RyYXRlZ3kgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgZGVhZGxvY2tzIG9yIHJlZ3Jlc3Npb25zLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZyB0byBleHBsb3JlIHRoZSBiZWhhdmlvciB1bmRlciBzdHJlc3MuCgpMZXQmIzM5O3MgY2FsbCB0aGlzIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgb24gdG8gdGhlIG5leHQgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nIHRvIHVzZSBndWFyZChtdXRleCkgaW5zdGVhZCBvZiBtYW51YWwgbG9jay91bmxvY2suIFRoaXMgY2hhbmdlcyB0aGUgbG9jayBzY29wZSwgYXMgdGhlIG11dGV4IGlzIG5vdyBhY3F1aXJlZCBiZWZvcmUgY2hlY2tpbmcgbGluay1cdTAwM2Vwcm9nLCB3aGljaCB3YXMgcHJldmlvdXNseSBkb25lIGxvY2tsZXNzLiBUaGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGxvY2tpbmcgYmVoYXZpb3Igc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHJlZ3Jlc3Npb25zIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cgdG8gdXNlIGd1YXJkKG11dGV4KSBpbnN0ZWFkIG9mIG1hbnVhbCBsb2NrL3VubG9jay4gVGhpcyBjaGFuZ2VzIHRoZSBsb2NrIHNjb3BlLCBhcyB0aGUgbXV0ZXggaXMgbm93IGFjcXVpcmVkIGJlZm9yZSBjaGVja2luZyBsaW5rLVx1MDAzZXByb2csIHdoaWNoIHdhcyBwcmV2aW91c2x5IGRvbmUgbG9ja2xlc3MuIFRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbG9ja2luZyBiZWhhdmlvciBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgcmVncmVzc2lvbnMgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyODozMS4yNjM3MzAzMjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjY2NTMwMDEwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cgdG8gdXNlIGd1YXJkKG11dGV4KSBpbnN0ZWFkIG9mIG1hbnVhbCBsb2NrL3VubG9jay4gVGhpcyBjaGFuZ2VzIHRoZSBsb2NrIHNjb3BlLCBhcyB0aGUgbXV0ZXggaXMgbm93IGFjcXVpcmVkIGJlZm9yZSBjaGVja2luZyBsaW5rLVxcdTAwM2Vwcm9nLCB3aGljaCB3YXMgcHJldmlvdXNseSBkb25lIGxvY2tsZXNzLiBUaGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGxvY2tpbmcgYmVoYXZpb3Igc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHJlZ3Jlc3Npb25zIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyODozMS4yNjM3NDQ3NjNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDYzMjg4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg3M2JlZGQ3ZmM5NTFjMTE3NWJlNjI4NGM2YjM3ZTYxNGZkMTNkMWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMjggMjE6Mjg6MzAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMgYi9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1xcbmluZGV4IDI1ZjMwZjllZGFlZmQuLjgxMDA2YTI0MjYxOGQgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNcXG4rKysgYi9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1xcbkBAIC0xNzEsMzMgKzE3MSwyOCBAQCBzdGF0aWMgaW50IGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nKHN0cnVjdCBicGZfbGluayAqbGluayxcXG4gXFx0c3RydWN0IG5ldCAqbmV0O1xcbiBcXHRpbnQgaWR4LCByZXQ7XFxuIFxcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNm5ldG5zX2JwZl9tdXRleCk7XFxuK1xcbiBcXHRpZiAob2xkX3Byb2cgXFx1MDAyNlxcdTAwMjYgb2xkX3Byb2cgIT0gbGluay1cXHUwMDNlcHJvZylcXG4gXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gXFx0aWYgKG5ld19wcm9nLVxcdTAwM2V0eXBlICE9IGxpbmstXFx1MDAzZXByb2ctXFx1MDAzZXR5cGUpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2bmV0bnNfYnBmX211dGV4KTtcXG4tXFxuIFxcdG5ldCA9IG5ldF9saW5rLVxcdTAwM2VuZXQ7XFxuLVxcdGlmICghbmV0IHx8ICFjaGVja19uZXQobmV0KSkge1xcbitcXHRpZiAoIW5ldCB8fCAhY2hlY2tfbmV0KG5ldCkpXFxuIFxcdFxcdC8qIExpbmsgYXV0by1kZXRhY2hlZCBvciBuZXRucyBkeWluZyAqL1xcbi1cXHRcXHRyZXQgPSAtRU5PTElOSztcXG4tXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbi1cXHR9XFxuK1xcdFxcdHJldHVybiAtRU5PTElOSztcXG4gXFxuIFxcdHJ1bl9hcnJheSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobmV0LVxcdTAwM2VicGYucnVuX2FycmF5W3R5cGVdLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNm5ldG5zX2JwZl9tdXRleCkpO1xcbiBcXHRpZHggPSBsaW5rX2luZGV4KG5ldCwgdHlwZSwgbmV0X2xpbmspO1xcbiBcXHRyZXQgPSBicGZfcHJvZ19hcnJheV91cGRhdGVfYXQocnVuX2FycmF5LCBpZHgsIG5ld19wcm9nKTtcXG4gXFx0aWYgKHJldClcXG4tXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0b2xkX3Byb2cgPSB4Y2hnKFxcdTAwMjZsaW5rLVxcdTAwM2Vwcm9nLCBuZXdfcHJvZyk7XFxuIFxcdGJwZl9wcm9nX3B1dChvbGRfcHJvZyk7XFxuLVxcbi1vdXRfdW5sb2NrOlxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNm5ldG5zX2JwZl9tdXRleCk7XFxuLVxcdHJldHVybiByZXQ7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGJwZl9uZXRuc19saW5rX2ZpbGxfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjI4OjMxLjczNTQxMTA0NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg2MTkzNjA5MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyB0byB1c2UgZ3VhcmQobXV0ZXgpIGluc3RlYWQgb2YgbWFudWFsIGxvY2svdW5sb2NrLiBUaGlzIGNoYW5nZXMgdGhlIGxvY2sgc2NvcGUsIGFzIHRoZSBtdXRleCBpcyBub3cgYWNxdWlyZWQgYmVmb3JlIGNoZWNraW5nIGxpbmstXFx1MDAzZXByb2csIHdoaWNoIHdhcyBwcmV2aW91c2x5IGRvbmUgbG9ja2xlc3MuIFRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbG9ja2luZyBiZWhhdmlvciBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgcmVncmVzc2lvbnMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg3M2JlZGQ3ZmM5NTFjMTE3NWJlNjI4NGM2YjM3ZTYxNGZkMTNkMWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyOCAyMToyODozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jIGIva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNcbmluZGV4IDI1ZjMwZjllZGFlZmQuLjgxMDA2YTI0MjYxOGQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1xuKysrIGIva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNcbkBAIC0xNzEsMzMgKzE3MSwyOCBAQCBzdGF0aWMgaW50IGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nKHN0cnVjdCBicGZfbGluayAqbGluayxcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbiBcdGludCBpZHgsIHJldDtcbiBcbitcdGd1YXJkKG11dGV4KShcdTAwMjZuZXRuc19icGZfbXV0ZXgpO1xuK1xuIFx0aWYgKG9sZF9wcm9nIFx1MDAyNlx1MDAyNiBvbGRfcHJvZyAhPSBsaW5rLVx1MDAzZXByb2cpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXHRpZiAobmV3X3Byb2ctXHUwMDNldHlwZSAhPSBsaW5rLVx1MDAzZXByb2ctXHUwMDNldHlwZSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNm5ldG5zX2JwZl9tdXRleCk7XG4tXG4gXHRuZXQgPSBuZXRfbGluay1cdTAwM2VuZXQ7XG4tXHRpZiAoIW5ldCB8fCAhY2hlY2tfbmV0KG5ldCkpIHtcbitcdGlmICghbmV0IHx8ICFjaGVja19uZXQobmV0KSlcbiBcdFx0LyogTGluayBhdXRvLWRldGFjaGVkIG9yIG5ldG5zIGR5aW5nICovXG4tXHRcdHJldCA9IC1FTk9MSU5LO1xuLVx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHR9XG4rXHRcdHJldHVybiAtRU5PTElOSztcbiBcbiBcdHJ1bl9hcnJheSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobmV0LVx1MDAzZWJwZi5ydW5fYXJyYXlbdHlwZV0sXG4gXHRcdFx0XHRcdCAgICAgIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZuZXRuc19icGZfbXV0ZXgpKTtcbiBcdGlkeCA9IGxpbmtfaW5kZXgobmV0LCB0eXBlLCBuZXRfbGluayk7XG4gXHRyZXQgPSBicGZfcHJvZ19hcnJheV91cGRhdGVfYXQocnVuX2FycmF5LCBpZHgsIG5ld19wcm9nKTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdG9sZF9wcm9nID0geGNoZyhcdTAwMjZsaW5rLVx1MDAzZXByb2csIG5ld19wcm9nKTtcbiBcdGJwZl9wcm9nX3B1dChvbGRfcHJvZyk7XG4tXG4tb3V0X3VubG9jazpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZuZXRuc19icGZfbXV0ZXgpO1xuLVx0cmV0dXJuIHJldDtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGJwZl9uZXRuc19saW5rX2ZpbGxfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyODozMS43MzU0MTM5ODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTU1ODE3NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoIEZ1enppbmcgLSBBIFJlZmFjdG9yaW5nIHdpdGggUmVhY2hhYmxlIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBga2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNgLiBJdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSB0byBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLCByZXBsYWNpbmcgdGhlIG1hbnVhbCBgbXV0ZXhfbG9ja2AgYW5kIGBtdXRleF91bmxvY2tgIHdpdGggYGd1YXJkKG11dGV4KShcdTAwMjZuZXRuc19icGZfbXV0ZXgpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBqdXN0IGEgcmVmYWN0b3JpbmcsIGEgY2xlYW51cCB0byBzaW1wbGlmeSB0aGUgY29kZSBhbmQgcHJldmVudCBwb3RlbnRpYWwgbG9jay1yZWxhdGVkIGJ1Z3MsIGJ1dCB0aGVuIEkgaGF2ZSB0byBhc2sgbXlzZWxmOiBkb2VzIHRoaXMgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93P1xuXG5JdCdzIHRlbXB0aW5nIHRvIGRpc21pc3MgaXQgYXMgcHVyZWx5IGRlY29yYXRpdmUuIEFmdGVyIGFsbCwgdGhlIGxvY2tpbmcgbG9naWMgKnNob3VsZCogYmUgaWRlbnRpY2FsLiBIb3dldmVyLCB0aGUgKm1ldGhvZCogb2YgbG9ja2luZyBoYXMgY2hhbmdlZCwgd2hpY2ggbWVhbnMgdGhlcmUgY291bGQgYmUgZWRnZSBjYXNlcyB3aGVyZSB0aGUgb2xkIGNvZGUgaGFuZGxlZCBhbiBlYXJseSByZXR1cm4gZGlmZmVyZW50bHkgdGhhbiB0aGUgbmV3IGNvZGUsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIGxvY2sgcmVsZWFzZS4gSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBwb3NzaWJpbGl0eSBvZiBhIHJlZ3Jlc3Npb24uIFRoZSBndWFyZCBjb25zdHJ1Y3QgY291bGQgaGF2ZSBzb21lIHN1YnRsZSBidWcuIEl0J3MgaW4gYSByZWFjaGFibGUgcGF0aCwgYW5kIGl0J3MgZGVhbGluZyB3aXRoIEJQRiBsaW5rIHVwZGF0ZSBwcm9ncmFtcywgYSBjcml0aWNhbCBhcmVhLlxuXG5UaGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBvbmx5IGZvciBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBvciBtb2RpZmljYXRpb25zIHRvIG51bWVyaWMgY29uc3RhbnRzL21hY3JvcyB0aGF0IGRvbid0IGFmZmVjdCBleGVjdXRpb24gZmxvdy4gVGhpcyByZWZhY3RvcmluZywgd2hpbGUgc2VlbWluZ2x5IGlubm9jdW91cywgKmRvZXMqIGFsdGVyIGhvdyB0aGUgbG9jayBpcyBtYW5hZ2VkLiBXaGlsZSB0aGUgbG9naWMgc2hvdWxkIGJlIHRoZSBzYW1lLCBhIGJ1ZyBpbiB0aGUgbmV3IGxvY2tpbmcgZmxvdywgcGVyaGFwcyBhbiB1bmV4cGVjdGVkIGVhcmx5IHJldHVybiBwYXRoIHRoYXQgZmFpbHMgdG8gcmVsZWFzZSB0aGUgbG9jayBjb3JyZWN0bHkgaW4gdGhlIHJlZmFjdG9yZWQgY29kZSwgaXMgbm93IGEgcG9zc2liaWxpdHkuIFRoZSBvbGQgY29kZSBoYWQgZXhwbGljaXQgYGdvdG8gb3V0X3VubG9ja2AsIHdoZXJlYXMgdGhlIG5ldyBjb2RlIGhhcyBleHBsaWNpdCBgcmV0dXJuIC1FTk9MSU5LYCBhbmQgYHJldHVybiByZXRgLCB3aGljaCB3aWxsIHVubG9jayB2aWEgdGhlIGd1YXJkLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBjaGFuZ2UsIHdoaWxlIHNlZW1pbmdseSBzaW1wbGUsICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc291cmNlIGNvZGUgdGhhdCBpbXBhY3RzIHRoZSBsb2NraW5nIG1lY2hhbmlzbSBpbiBhIHJlYWNoYWJsZSBwYXRoLCBJIHRoaW5rIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhbmQgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZnVuY3Rpb24gbmFtZSwgd2hpY2ggaXMgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCBpbiBga2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNgLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhvc2UgY29uZmlnIG9wdGlvbnMgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjI4OjM5LjI5MTIzNTQyMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMwNDI2OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0X25hbWVzcGFjZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MjY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBvZmZsb2FkLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbmV0X25hbWVzcGFjZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHRjeC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjI4OjM5LjQyNDI4OTc2OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODI2Mjk5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGVwZW5kZW5jaWVzIENoZWNrKipcblxuT2theSwgc28gSSd2ZSBpZGVudGlmaWVkIHRoYXQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBuZWNlc3NhcnkgY29tcG9uZW50IGhlcmUuIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiB3aXRoIGEgZmluZS10b290aGVkIGNvbWIuIFRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGlzIGRlcGVuZGVuY3kgaGFzIGEgZmV3IGluZGlyZWN0IGltcGxpY2F0aW9ucyBhcyB3ZWxsLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBsaWJyYXJpZXMsIG9yIGtlcm5lbCB2ZXJzaW9ucyB0aGF0IGFyZSBhbHNvIGltcGFjdGVkLiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2ggYW5kIHZlcmlmeSwgdG8gbWFrZSBzdXJlIGFsbCBteSBiYXNlcyBhcmUgY292ZXJlZCwgdGhhbiB0byBtYWtlIGEgY2hhbmdlIHRoYXQgaW50cm9kdWNlcyBvdGhlciBpc3N1ZXMgZG93biB0aGUgcm9hZC4gTGV0J3MgbWFrZSBzdXJlIG5vdGhpbmcgZWxzZSBuZWVkcyBteSBhdHRlbnRpb24hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNzUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyODo0Mi4zMDY5MjI4ODFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0ODE3OTg0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyODo0Mi41OTE3NTQwOTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQ5OTk5NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipCUEYgS2NvbmZpZyBIdW50KipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdGhpcyBzb3J0ZWQuIEkgbmVlZCB0byBmaW5kIHRoZSBLY29uZmlnIGVudHJpZXMgcmVsYXRlZCB0byBCUEYgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuIFRoaXMgaXMgdXN1YWxseSB0aGUgZmlyc3Qgc3RlcCB3aGVuIEknbSBjb25maWd1cmluZyBvciBkZWJ1Z2dpbmcgYW55dGhpbmcgQlBGLXJlbGF0ZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzPyBDb25kaXRpb25hbCBjb21waWxhdGlvbnM/IExldCdzIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBzdHVmZiBsaXZlcyB3aXRoaW4gdGhlIHdpZGVyIGNvbmZpZyBmcmFtZXdvcmsuIEkgaW1hZ2luZSBpdCdsbCBiZSB1bmRlciBzb21lIHZhcmlhdGlvbiBvZiBcIkJQRlwiIG9yIFwiZUJQRixcIiBwb3NzaWJseSBuZXN0ZWQgdW5kZXIgbmV0d29ya2luZywgdHJhY2luZywgb3Igc2VjdXJpdHkgc3Vic3lzdGVtcy4gVGltZSB0byBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhlIHNvdXJjZSBkaXJlY3RvcnkuIEdvdHRhIHNlZSB3aGF0IGZsYWdzIEkgY2FuIHVzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjI4OjQ1LjY0MTc1NjIzNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU0MTcyOTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyODo0Ny40OTU5MzQ4NjZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE4NjI0NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUga2VybmVsJ3MgQlBGIEtjb25maWcsIGZvY3VzaW5nIGFyb3VuZCBsaW5lIDI3LlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBwdWxsIHVwIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlIGFuZCB6ZXJvIGluIGFyb3VuZCBsaW5lIDI3LiBJIHdhbnQgdG8gc2VlIHdoYXQncyBiZWluZyBkZWZpbmVkIHRoZXJlLCB3aGF0IGZ1bmRhbWVudGFsIEJQRiBvcHRpb25zIHdlJ3JlIHRhbGtpbmcgYWJvdXQsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBCUEYgc3Vic3lzdGVtIHdpdGhpbiB0aGUga2VybmVsLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNvcmUgY2FwYWJpbGl0aWVzIG9yIGRlcGVuZGVuY2llcyBpdOKAmXMgc2V0dGluZyB1cC4gSXMgaXQgcmVsYXRlZCB0byB0cmFjaW5nLCBuZXR3b3JraW5nLCBzZWN1cml0eSwgb3IgcGVyaGFwcyBhIG1vcmUgZ2VuZXJhbCBlbmFibGluZyBmbGFnPyBXaGF0IGxldmVsIG9mIGdyYW51bGFyIGNvbnRyb2wgYXJlIHdlIGdldHRpbmcgYXQgdGhpcyBwb2ludCBpbiB0aGUgY29uZmlndXJhdGlvbj8gSSdtIGFudGljaXBhdGluZyBpdCdzIHByb2JhYmx5IGEgY3J1Y2lhbCBzZXR0aW5nLiBJJ20gcmVhZHkgdG8gZGlnZXN0IHRoZSBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgaXQsIGxvb2tpbmcgZm9yIGFueSBpbW1lZGlhdGUgaW1wbGljYXRpb25zIGZvciBob3cgQlBGIGlzIHVzZWQgb3IgbWFuYWdlZCB3aXRoaW4gYSBzeXN0ZW0ncyBjb25maWd1cmF0aW9uLiBJJ20ga2VlbiB0byBzcG90IGFueSBnb3RjaGFzIG9yIG5vbi1vYnZpb3VzIGRlZmF1bHRzIHRoYXQgbWlnaHQgY2F0Y2ggc29tZW9uZSBvdXQuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LCBsZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzIVxuXG5cbiIsIklucHV0VG9rZW5zIjozODc5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6Mjg6NTAuNjE0NTYyMDk0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHQjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgd2FudCB0aGUgQlBGIEpJVCBjb21waWxlciBlbmFibGVkIGJ5XFxuICAyMTpcXHQjIGRlZmF1bHQgZm9yIGtlcm5lbHMgdGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGggQlBGIEpJVCBzdXBwb3J0LlxcbiAgMjI6XFx0Y29uZmlnIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcXG4gIDIzOlxcdFxcdGJvb2xcXG4gIDI0OlxcdFxcbiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyODo1MC42MTQ2MzMxMTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxNjIyMTEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBCUEYgU3lzdGVtIENhbGwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYEJQRl9TWVNDQUxMYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGRyaXZlcyBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gQlBGIHN5c3RlbSBjYWxscy4gVGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIGEgbGl0dGxlIGZsYWcgd2VudCB1cCBpbiBteSBtaW5kLi4uIEkgcmVtZW1iZXIgc2VlaW5nIGBrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY2AgbWVudGlvbmVkLiBJIG5lZWQgdG8gYmUgc3VyZSBidXQgSSB0aGluayB0aGF0IGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gSXQncyB0aW1lIHRvIGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9uLlxuXG5JJ20gc3RhcnRpbmcgdG8gd29uZGVyLCB0aG91Z2gsIGFyZSB0aGVyZSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdCBwbGF5IGhlcmU/IElzIGBCUEZfU1lTQ0FMTGAgdGhlIG9ubHkgb25lIHRoYXQgZGljdGF0ZXMgd2hldGhlciB0aGUgZnVuY3Rpb25hbGl0eSBpbiB0aGUgYnBmIG5hbWVzcGFjZSBpcyBhY3RpdmU/IEJlc3QgdG8gZWxpbWluYXRlIGFueSBkaXN0cmFjdGlvbnMgc28gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYGtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jYCBmb3IgYW55IGFkZGl0aW9uYWwgYCNpZmRlZmAgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGNvbnRyb2wgcGFydHMgb2YgaXRzIGNvbXBpbGF0aW9uLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJIGRvbid0IHdhbnQgdG8gbWlzcyBhbnl0aGluZyBwb3RlbnRpYWxseSByZWxldmFudCB0byB0aGlzIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQzNSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6Mjg6NTQuMzMwODU4MjA5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk5MDI3NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXiNpZmRlZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz0yOD1zdGF0aWMgdm9pZCBuZXRuc19icGZfYXR0YWNoX3R5cGVfdW5uZWVkKGVudW0gbmV0bnNfYnBmX2F0dGFjaF90eXBlIHR5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0zMC1cXHRzd2l0Y2ggKHR5cGUpIHtcXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYzozMTojaWZkZWYgQ09ORklHX0lORVRcXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0zMi1cXHRjYXNlIE5FVE5TX0JQRl9TS19MT09LVVA6XFxuLS1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz00MT1zdGF0aWMgdm9pZCBuZXRuc19icGZfYXR0YWNoX3R5cGVfbmVlZChlbnVtIG5ldG5zX2JwZl9hdHRhY2hfdHlwZSB0eXBlKVxcbi0tXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtNDMtXFx0c3dpdGNoICh0eXBlKSB7XFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6NDQ6I2lmZGVmIENPTkZJR19JTkVUXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtNDUtXFx0Y2FzZSBORVROU19CUEZfU0tfTE9PS1VQOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyODo1NC41NDA3NjY5NTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1NDM3NzYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyB0aGUgU2NvcGUgb2YgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AuIEJlZm9yZSBJIGRpdmUgaW50byBhbnkgZGV0YWlsZWQgYW5hbHlzaXMsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNvbmZpcm0gaXRzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJcyB0aGlzIGZ1bmN0aW9uIHBvdGVudGlhbGx5IG9ubHkgYWN0aXZlIHVuZGVyIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBvciBmZWF0dXJlIGZsYWdzPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgaXQncyBuZXN0ZWQgd2l0aGluIGFueSBgI2lmZGVmYCBibG9ja3MuIFRoYXQncyBhbHdheXMgbXkgZmlyc3Qgc3RlcCDigJMgYXZvaWRpbmcgd2FzdGVkIGVmZm9ydCBieSBsb29raW5nIGF0IGEgZnVuY3Rpb24gdGhhdCBtaWdodCBub3QgZXZlbiBiZSBwYXJ0IG9mIHRoZSBhY3RpdmUgY29kZSBwYXRoLiBBIHF1aWNrIHNlYXJjaCB0aHJvdWdoIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBpcyBpbiBvcmRlci4gVGhpcyB3aWxsIGltbWVkaWF0ZWx5IGNsYXJpZnkgaXRzIHNjb3BlIGFuZCBsZXQgbWUgYmV0dGVyIHVuZGVyc3RhbmQgaG93IHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5OTQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyODo1Ny45OTUxNDg5MzVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzQyNjQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz0xNTU9c3RhdGljIHZvaWQgYnBmX25ldG5zX2xpbmtfZGVhbGxvYyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuLS1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0xNjItXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6MTYzOnN0YXRpYyBpbnQgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTE2NC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLFxcbi0tXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM9MjMwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9uZXRuc19saW5rX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTIzMy1cXHQuZGV0YWNoID0gYnBmX25ldG5zX2xpbmtfZGV0YWNoLFxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jOjIzNDpcXHQudXBkYXRlX3Byb2cgPSBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyxcXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0yMzUtXFx0LmZpbGxfbGlua19pbmZvID0gYnBmX25ldG5zX2xpbmtfZmlsbF9pbmZvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyODo1OC4xMDg1ODE5OTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY5NDEzOTA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb2RlIENoYW5nZSBmb3IgRnV6emluZyBXb3J0aGluZXNzKipcblxuT2theSwgaGVyZSdzIHdoYXQncyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZCBhcyBJIGV2YWx1YXRlIHRoaXMgcGF0Y2guIEZpcnN0LCBJIHNlZSB0aGlzIGNvZGUgY2hhbmdlIGlzbid0IHdyYXBwZWQgaW4gYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMuIEdvb2QuIE5vdywgdGhlIHByb21wdCBzYXlzIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjaGFuZ2VzIHRoYXQgZG9uJ3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LCBzcGVjaWZpY2FsbHk6IGNoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zLlxuXG5TbywgcmVwbGFjaW5nIGBtdXRleF9sb2NrYC9gbXV0ZXhfdW5sb2NrYCB3aXRoIGBndWFyZChtdXRleClg4oCUZG9lcyAqdGhhdCogZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93PyBJbml0aWFsbHksIEknZCBzYXkgbm8uIEl0J3MgYSByZWZhY3RvcmluZywgdXNpbmcgdGhlIGNsZWFudXAgYXR0cmlidXRlIHRvIGVuc3VyZSB0aGUgbXV0ZXggaXMgYXV0b21hdGljYWxseSB1bmxvY2tlZCBvbiBzY29wZSBleGl0LiBUaGUgaGlnaC1sZXZlbCBleGVjdXRpb24sIHRoZSBsb2NraW5nLCBjaGVja2luZywgdW5sb2NraW5nLCBhbmQgcmV0dXJuaW5nLCBzaG91bGQgYmUgaWRlbnRpY2FsLiBCdXQgdGhlbiBJIGdldCBodW5nIHVwIG9uIHRoZSBwaHJhc2luZzogXCJkb2VzIGl0IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdz9cIiBJdCdzICp0ZWNobmljYWxseSogY2hhbmdpbmcgKmhvdyogdGhlIGxvY2sgaXMgcmVsZWFzZWQsIHVzaW5nIGNvbXBpbGVyLWdlbmVyYXRlZCBjb2RlIGluc3RlYWQgb2YgZXhwbGljaXQgYGdvdG9gIGFuZCBgbXV0ZXhfdW5sb2NrYC5cblxuSG1tLi4uIGlzIHRoYXQgc3RpbGwgXCJub3QgZnVuY3Rpb25hbGx5IGFsdGVyaW5nIGV4ZWN1dGlvbiBmbG93P1wiIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGNhbGxzIG91dCAqbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zKi4gVGhpcyBpcyBhIHN0cnVjdHVyYWwgY2hhbmdlLCB1c2luZyBgZ3VhcmRgLiBOb3csIHRoZSBjcnVjaWFsIHBhcnQ6IEkgc3RhcnQgdG8gdGhpbmsgdGhhdCBldmVuIHdpdGggYSByZWZhY3RvcmluZywgYnVncyAqY2FuKiBiZSBpbnRyb2R1Y2VkLiBBIG1pc3BsYWNlZCBndWFyZCBvciBhIHJldHVybiBzdGF0ZW1lbnQgdGhhdCBieXBhc3NlcyB0aGUgaW50ZW5kZWQgdW5sb2NrIGNvdWxkIGNyZWF0ZSByZWFsIHByb2JsZW1zLlxuXG5MZXQncyBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGUgY29kZSBkaWZmOlxuXG5gYGBjXG4tXHRtdXRleF9sb2NrKFx1MDAyNm5ldG5zX2JwZl9tdXRleCk7XG4tXG4gXHRuZXQgPSBuZXRfbGluay1cdTAwM2VuZXQ7XG4tXHRpZiAoIW5ldCB8fCAhY2hlY2tfbmV0KG5ldCkpIHtcbitcdGlmICghbmV0IHx8ICFjaGVja19uZXQobmV0KSlcbiBcdFx0LyogTGluayBhdXRvLWRldGFjaGVkIG9yIG5ldG5zIGR5aW5nICovXG4tXHRcdHJldCA9IC1FTk9MSU5LO1xuLVx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHR9XG4rXHRcdHJldHVybiAtRU5PTElOSztcbmBgYFxuXG5BaGEhIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgY2hhbmdlLiBJdCdzIG1vdmluZyBmcm9tIGEgYGdvdG8gb3V0X3VubG9ja2AgdG8gYSBgcmV0dXJuIC1FTk9MSU5LYC4gVGhhdCdzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSBpbiB0aGUgQyBjb2RlLCBldmVuIGlmIHRoZSBpbnRlbmRlZCAqYmVoYXZpb3IqIGlzIHRoZSBzYW1lLiBJdCBpcyB2ZXJ5IGxpa2VseSB0aGF0IGZ1enppbmcgaXMgdXNlZnVsIGhlcmUgdG8gZW5zdXJlIHRoZSBsb2NrIGlzIGFjdHVhbGx5IHJlbGVhc2VkLCBhbmQgbm8gZGVhZGxvY2tzIG9jY3VyLlxuXG5JIHNob3VsZCBhbHNvIGNoZWNrIGZvciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgbWFqb3Igb25lLCBidXQgd2hlcmUncyB0aGlzIGNvZGUgbG9jYXRlZD8gQWgsIGl0J3MgYGtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jYC4gRG9lcyB0aGF0IGltcGx5IGBDT05GSUdfTkVUYCBpcyByZXF1aXJlZD8gVGltZSB0byBjaGVjayB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIG1ha2Ugc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUxMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyOTowNi44MDI3MjU4NjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0ODU4NDA3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRfbmFtZXNwYWNlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTI2PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gb2ZmbG9hZC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG5ldF9uYW1lc3BhY2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjgtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSB0Y3gub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyOTowNy4xNTEzMTc2NjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM1MTUwNjU1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBCUEYgU3lzdGVtIENhbGwgYW5kIE5ldHdvcmsgTmFtZXNwYWNlIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgYSB0aG91Z2h0IGp1c3QgcG9wcGVkIGludG8gbXkgaGVhZDogYG5ldF9uYW1lc3BhY2UuY2AgdXNlcyBgc3RydWN0IG5ldGAsIHJpZ2h0PyBBbmQgdGhhdCdzIHVzdWFsbHkgYXNzb2NpYXRlZCB3aXRoIG5ldHdvcmsgZnVuY3Rpb25hbGl0eS4gRG9lcyB0aGF0IG1lYW4gdGhlIEJQRiBzeXNjYWxsLCBvciBhdCBsZWFzdCBwYXJ0cyBvZiBpdHMgaW1wbGVtZW50YXRpb24sIGltcGxpY2l0bHkgZGVwZW5kIG9uIGBDT05GSUdfTkVUYCBiZWluZyBlbmFibGVkPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGlzIGFzc3VtcHRpb24uXG5cbkxldCdzIGNoZWNrIHRoZSBLY29uZmlnLiBJJ2xsIGp1bXAgb3ZlciB0byBga2VybmVsL2JwZi9LY29uZmlnYC4gUmlnaHQsIGhlcmUgd2UgYXJlLiBPa2F5LCBsZXQncyBsb29rIGF0IGBDT05GSUdfQlBGX1NZU0NBTExgLiBBaGEhIEl0IHNlbGVjdHMgYE5FVF9TT0NLX01TR2AsIGBORVRfWEdSRVNTYCwgYW5kIGBQQUdFX1BPT0xgIGlmIGBORVRgIGlzIGVuYWJsZWQsIGJ1dCB0aGUgKnN5c2NhbGwqIGl0c2VsZiBkb2Vzbid0IGRpcmVjdGx5IGRlcGVuZCBvbiBgTkVUYC4gSW50ZXJlc3RpbmcuXG5cbkhvd2V2ZXIsIHRoZSBxdWVzdGlvbiByZW1haW5zOiBpcyBgbmV0X25hbWVzcGFjZS5jYCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGBDT05GSUdfTkVUYD8gVGhlIGBLY29uZmlnYCBkb2Vzbid0IHByb3ZpZGUgZW5vdWdoIGluZm9ybWF0aW9uIGFuZCB0aGUgYE1ha2VmaWxlYCBtaWdodCBiZSB3aGVyZSB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRha2VzIHBsYWNlLiBUaW1lIHRvIGNoZWNrIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBhZ2Fpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MjksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6Mjk6MTEuNTAyODI3NzIzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0b2JqLXkgOj0gY29yZS5vXFxuICAgMzpcXHRpZm5lcSAoJChDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04pLHkpXFxuICAgNDpcXHQjIF9fX2JwZl9wcm9nX3J1bigpIG5lZWRzIEdDU0UgZGlzYWJsZWQgb24geDg2OyBzZWUgMzE5M2MwODM2ZjIwMyBmb3IgZGV0YWlsc1xcbiAgIDU6XFx0Y2ZsYWdzLW5vZ2NzZS0kKENPTkZJR19YODYpJChDT05GSUdfQ0NfSVNfR0NDKSA6PSAtZm5vLWdjc2VcXG4gICA2OlxcdGVuZGlmXFxuICAgNzpcXHRDRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxuICAgODpcXHRcXG4gICA5OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXFxuICAxMDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbiAgMTE6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbiAgMTI6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxuICAxMzpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXFxuICAxNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXFxuICAxNTpcXHRvYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG4gIDE2OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGlzYXNtLm8gbXByb2cub1xcbiAgMTc6XFx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbiAgMTg6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbiAgMTk6XFx0aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG4gIDIwOlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG4gIDIxOlxcdGVuZGlmXFxuICAyMjpcXHRvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gZGlzcGF0Y2hlci5vXFxuICAyMzpcXHRpZmVxICgkKENPTkZJR19ORVQpLHkpXFxuICAyNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRldm1hcC5vXFxuICAyNTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hcC5vXFxuICAyNjpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG9mZmxvYWQub1xcbiAgMjc6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBuZXRfbmFtZXNwYWNlLm9cXG4gIDI4OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdGN4Lm9cXG4gIDI5OlxcdGVuZGlmXFxuICAzMDpcXHRpZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSlcXG4gIDMxOlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3RhY2ttYXAub1xcbiAgMzI6XFx0ZW5kaWZcXG4gIDMzOlxcdGlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXFxuICAzNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXFxuICAzNTpcXHRlbmRpZlxcbiAgMzY6XFx0b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICs9IGNncm91cC5vXFxuICAzNzpcXHRpZmVxICgkKENPTkZJR19JTkVUKSx5KVxcbiAgMzg6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSByZXVzZXBvcnRfYXJyYXkub1xcbiAgMzk6XFx0ZW5kaWZcXG4gIDQwOlxcdGlmZXEgKCQoQ09ORklHX1NZU0ZTKSx5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyOToxMS41MDI5NDg3MDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyOTc4ODM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwncyBCUEYgTmFtZXNwYWNlIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgaGVyZSdzIHdoYXQncyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZC4gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbmV0X25hbWVzcGFjZS5vYCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoYXQgaXQncyBjb25kaXRpb25hbCBvbiBgaWZlcSAoJChDT05GSUdfTkVUKSx5KWAuIFRoYXQgbWFrZXMgc2Vuc2UsIGJ1dCBpdCBhbHNvIG1lYW5zIHdlJ2xsIGRlZmluaXRlbHkgbmVlZCBib3RoIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgZW5hYmxlZC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgbGV0J3MgZGlnIGEgYml0IGRlZXBlci5cblxuSSdtIG5vdyBjaGVja2luZyBvdXQgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCBpbiBga2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNgLiBBaCwgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgYW5kIGl0J3MgYXNzaWduZWQgdG8gYC51cGRhdGVfcHJvZ2Agd2l0aGluIGBicGZfbmV0bnNfbGlua19vcHNgLiBIYW5nIG9uLi4uIHRoaXMgaXMgd2hlbiB0aGUgcmVkIGZsYWcgd2VudCB1cC4gVGhlIHByb21wdCBpcyBoYW1tZXJpbmcgaG9tZSB0aGUgcG9pbnQgYWJvdXQgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIFN0YXRpYyBmdW5jdGlvbnMgZ2V0IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBhbmQgdGhleSBkb24ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIHdoaWNoIHRoZSBwcm9tcHQgc2VlbXMgdG8gYmUgcG9pbnRpbmcgb3V0IGFzIGEgcHJvYmxlbSBpbiB0aGUgY29udGV4dCBvZiB3aGF0IHdlIGFyZSBkb2luZy4gU28sIEkgaGF2ZSB0byBmaW5kIHdoZXJlIGBicGZfbmV0bnNfbGlua19vcHNgIGlzIHVzZWQsIHRvIHNlZSBpZiB3ZSBjYW4gdXNlIGFuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIHRoYXQgd291bGQgc29sdmUgdGhlIHByb2JsZW0gaGlnaGxpZ2h0ZWQgaW4gdGhlIHByb21wdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE4MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjI5OjE1LjgzMjc0MDE5NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2Nzc2MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9uZXRuc19saW5rX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz0yMTc9c3RhdGljIHZvaWQgYnBmX25ldG5zX2xpbmtfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMjI5LVxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jOjIzMDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfbmV0bnNfbGlua19vcHMgPSB7XFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMjMxLVxcdC5yZWxlYXNlID0gYnBmX25ldG5zX2xpbmtfcmVsZWFzZSxcXG4tLVxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTQ3MT1pbnQgbmV0bnNfYnBmX2xpbmtfY3JlYXRlKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy00OTctXFx0YnBmX2xpbmtfaW5pdChcXHUwMDI2bmV0X2xpbmstXFx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfTkVUTlMsXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6NDk4OlxcdFxcdCAgICAgIFxcdTAwMjZicGZfbmV0bnNfbGlua19vcHMsIHByb2csIHR5cGUpO1xcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTQ5OS1cXHRuZXRfbGluay1cXHUwMDNlbmV0ID0gbmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyOToxNS45Mzk1MjA0NzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3NjM2ODM4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuXG5cbioqTXkgQW5hbHlzaXMgb2YgQlBGIExpbmsgQ3JlYXRpb24gYW5kIFVwZGF0ZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBgbmV0bnNfYnBmX2xpbmtfY3JlYXRlYCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYSBCUEYgbGluaywgYW5kIGl0IGxldmVyYWdlcyB0aGUgYGJwZl9uZXRuc19saW5rX29wc2Agc3RydWN0dXJlIHRvIG1hbmFnZSBpdHMgYmVoYXZpb3IuIFRoYXQncyBmYWlybHkgc3RhbmRhcmQuIFdoYXQgSSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIGlzIHRoZSAqdGltaW5nKiBvZiB0aGUgdXBkYXRlIG9wZXJhdGlvbi4gV2hlbiBkb2VzIGAudXBkYXRlX3Byb2dgIHdpdGhpbiB0aGF0IHN0cnVjdHVyZSBhY3R1YWxseSBnZXQgY2FsbGVkPyBJdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIGp1c3QgZnJvbSB0aGUgbmFtZSBvZiB0aGUgY3JlYXRlIGZ1bmN0aW9uLiBMb29raW5nIGludG8gdGhlIGtlcm5lbCBjb2RlLCBhaCwgaXQgYXBwZWFycyB0aGF0IGBicGZfbGlua191cGRhdGVgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IHRyaWdnZXJzIHRoZSBgLnVwZGF0ZV9wcm9nYCBjYWxsLiBJdCBsb29rcyBsaWtlIGBicGZfbGlua191cGRhdGVgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgbGluayB1cGRhdGVzIGluIHRoZSBCUEYgc3lzdGVtIGNhbGwuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB0aGUgbmV4dCB0aW1lIEkgaGF2ZSB0byBkZWJ1ZyBzb21lIGxpbmsgYmVoYXZpb3IuIFRoYXQncyBnb29kIHRvIGtub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NDcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyOToxOS44MTU4OTI1MTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NjQ3NDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVwZGF0ZV9wcm9nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTU5ODE9c3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMjEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAyMjpcXHRpZiAobGluay1cXHUwMDNlb3BzLVxcdTAwM2V1cGRhdGVfcHJvZylcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDIzOlxcdFxcdHJldCA9IGxpbmstXFx1MDAzZW9wcy1cXHUwMDNldXBkYXRlX3Byb2cobGluaywgbmV3X3Byb2csIG9sZF9wcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDI0LVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6Mjk6MTkuOTAwNTQ2NDY0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjcwODkxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBCUEYgTGluayBVcGRhdGUgQW5hbHlzaXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgbGlua191cGRhdGVgIGlzIHRoZSBlbnRyeSBwb2ludCB3aXRoaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gTm90IHVuZXhwZWN0ZWQsIHRoYXQncyB3aGVyZSBJJ2QgbG9vay4gSG93ZXZlciwgdGhlIGBzdGF0aWNgIGRlY2xhcmF0aW9uIG9uIGBsaW5rX3VwZGF0ZWAgaXMgaW1tZWRpYXRlbHkgcmFpc2luZyBhIGZsYWcuIElmIGl0J3MgYHN0YXRpY2AsIGl0J3Mgbm90IGRpcmVjdGx5IGV4cG9zZWQgYXMgYSBzeXN0ZW0gY2FsbCBpbiB0aGUgdXN1YWwgc2Vuc2UsIHdoaWNoIG1lYW5zIHNvbWV0aGluZyAqZWxzZSogaXMgY2FsbGluZyBpdC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHN0YWNrIHRvIGZpZ3VyZSBvdXQgdGhlIGluaXRpYXRpbmcgcGF0aC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGNydWNpYWwgaGVyZSB0byBhc3Nlc3MgdGhlIHVwZGF0ZSdzIG92ZXJhbGwgaW1wYWN0IGFuZCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBrbm93IGhvdyB0aGlzIHNwZWNpZmljIHVwZGF0ZSBmdW5jdGlvbiBpcyBnZXR0aW5nIGludm9rZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGVyZSB0aGlzIGNhbGwgaXMgY29taW5nIGZyb20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzOTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyOToyMy41Mjc2Mzg3NjFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNDQ3MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxpbmtfdXBkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTU4NDQ9c3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTQ5LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5NTA6c3RhdGljIGludCBsaW5rX3VwZGF0ZV9tYXAoc3RydWN0IGJwZl9saW5rICpsaW5rLCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTUxLXtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTQtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk1NTpcXHRuZXdfbWFwID0gYnBmX21hcF9nZXQoYXR0ci1cXHUwMDNlbGlua191cGRhdGUubmV3X21hcF9mZCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk1Ni1cXHRpZiAoSVNfRVJSKG5ld19tYXApKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk1OC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTU5OlxcdGlmIChhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5mbGFncyBcXHUwMDI2IEJQRl9GX1JFUExBQ0UpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTYwOlxcdFxcdG9sZF9tYXAgPSBicGZfbWFwX2dldChhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5vbGRfbWFwX2ZkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTYxLVxcdFxcdGlmIChJU19FUlIob2xkX21hcCkpIHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NjQtXFx0XFx0fVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5NjU6XFx0fSBlbHNlIGlmIChhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5vbGRfbWFwX2ZkKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk2Ni1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk3OC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTc5OiNkZWZpbmUgQlBGX0xJTktfVVBEQVRFX0xBU1RfRklFTEQgbGlua191cGRhdGUub2xkX3Byb2dfZmRcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTgwLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5ODE6c3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTgyLXtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTAtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk5MTpcXHRmbGFncyA9IGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLmZsYWdzO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTItXFx0aWYgKGZsYWdzIFxcdTAwMjYgfkJQRl9GX1JFUExBQ0UpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTk0LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5OTU6XFx0bGluayA9IGJwZl9saW5rX2dldF9mcm9tX2ZkKGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLmxpbmtfZmQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTYtXFx0aWYgKElTX0VSUihsaW5rKSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTktXFx0aWYgKGxpbmstXFx1MDAzZW9wcy1cXHUwMDNldXBkYXRlX21hcCkge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMDA6XFx0XFx0cmV0ID0gbGlua191cGRhdGVfbWFwKGxpbmssIGF0dHIpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMDEtXFx0XFx0Z290byBvdXRfcHV0X2xpbms7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDAzLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMDQ6XFx0bmV3X3Byb2cgPSBicGZfcHJvZ19nZXQoYXR0ci1cXHUwMDNlbGlua191cGRhdGUubmV3X3Byb2dfZmQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMDUtXFx0aWYgKElTX0VSUihuZXdfcHJvZykpIHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMTAtXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfUkVQTEFDRSkge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMTE6XFx0XFx0b2xkX3Byb2cgPSBicGZfcHJvZ19nZXQoYXR0ci1cXHUwMDNlbGlua191cGRhdGUub2xkX3Byb2dfZmQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMTItXFx0XFx0aWYgKElTX0VSUihvbGRfcHJvZykpIHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMTYtXFx0XFx0fVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMTc6XFx0fSBlbHNlIGlmIChhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5vbGRfcHJvZ19mZCkge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMTgtXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzNTQ9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ5NS1cXHRjYXNlIEJQRl9MSU5LX1VQREFURTpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NDk2OlxcdFxcdGVyciA9IGxpbmtfdXBkYXRlKFxcdTAwMjZhdHRyKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDk3LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyOToyMy42MjEwOTI3NzlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMDEzMzE1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgU3lzdGVtIENhbGwqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGBfX3N5c19icGZgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LCB0aGUgZmlyc3QgcGxhY2UgZXhlY3V0aW9uIGhpdHMgd2hlbiBhIEJQRiBwcm9ncmFtIGlzIGludm9rZWQuIEFuZCBmcm9tIHdoYXQgSSBzZWUgaW4gdGhlIGNvZGUsIGBsaW5rX3VwZGF0ZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZnJvbSBgX19zeXNfYnBmYC4gTm93LCBoYW5nIG9uIGEgc2Vjb25kLi4uIGlzIGBfX3N5c19icGZgIGFsc28gZGVmaW5lZCBhcyBhIGBzdGF0aWNgIGZ1bmN0aW9uPyBUaGF0J3MgaW50ZXJlc3RpbmcsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVjbGFyYXRpb24uIFN0YXRpYyBmdW5jdGlvbnMgaGF2ZSBsaW1pdGVkIHNjb3BlLCBhbmQgdGhhdCB3aWxsIGltcGFjdCBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgd2lkZXIgQlBGIHN5c3RlbS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZXhhY3QgZGVmaW5pdGlvbi4gTGV0IG1lIGRpZyBpbnRvIGBfX3N5c19icGZgLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzUxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6Mjk6MjYuOTMxMjI4NzMyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjY2NDI2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3N5c19icGZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9NjMxMz1zdGF0aWMgaW50IHByb2dfYXNzb2Nfc3RydWN0X29wcyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzNTMtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjM1NDpzdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM1NS1cXHRcXHQgICAgIGJwZnB0cl90IHVhdHRyX2NvbW1vbiwgdW5zaWduZWQgaW50IHNpemVfY29tbW9uKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjUzND1TWVNDQUxMX0RFRklORTUoYnBmLCBpbnQsIGNtZCwgdW5pb24gYnBmX2F0dHIgX191c2VyICosIHVhdHRyLCB1bnNpZ25lZCBpbnQsIHNpemUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NTM2LXtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NTM3OlxcdHJldHVybiBfX3N5c19icGYoY21kLCBVU0VSX0JQRlBUUih1YXR0ciksIHNpemUsIFVTRVJfQlBGUFRSKHVhdHRyX2NvbW1vbiksIHNpemVfY29tbW9uKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NTM4LX1cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTY1NTE9QlBGX0NBTExfMyhicGZfc3lzX2JwZiwgaW50LCBjbWQsIHVuaW9uIGJwZl9hdHRyICosIGF0dHIsIHUzMiwgYXR0cl9zaXplKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjU2Ni1cXHR9XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjU2NzpcXHRyZXR1cm4gX19zeXNfYnBmKGNtZCwgS0VSTkVMX0JQRlBUUihhdHRyKSwgYXR0cl9zaXplLCBLRVJORUxfQlBGUFRSKE5VTEwpLCAwKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NTY4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6Mjk6MjcuMDE3OTAyNDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTI4MTAyNzIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCUEYgRnVuY3Rpb24gRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBCUEYgZnV6emluZyB0YXNrLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgYmVzdCBmdW5jdGlvbnMgdG8gdGFyZ2V0LCBrZWVwaW5nIHRoZSBmdXp6aW5nIGZvY3VzZWQgYW5kIGVmZmVjdGl2ZS4gVGhlIHByb21wdCBnaXZlcyBjbGVhciBndWlkYW5jZTogcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhpcyBtYWtlcyBzZW5zZTsgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBhcmUga2V5IGZvciBkaXJlY3QgZnV6emluZy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IGZvciBgc3lzX2JwZmAsIGdpdmVuIGl0J3MgdGhlIHN5c2NhbGwgaXRzZWxmLiBCdXQgdGhhdCdzIHByb2JhYmx5IHRvbyBicm9hZC4gVGhlbiBJIHNlZSBgX19zeXNfYnBmYCwgd2hpY2ggaXMgc3RhdGljLCBzbyBkZWZpbml0ZWx5IG91dC4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgd2FybnMgYWdhaW5zdCB0aGVzZSBzdGF0aWMgaGVscGVycywgYXMgdGhleSdyZSB1c3VhbGx5IGlubGluZWQuXG5cblRoZW4sIHRoZXJlJ3MgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYC4gSSBzZWUgdGhhdCBpdCBpcyBzdGF0aWMsIHdoaWNoIGlzIGEgcmVkIGZsYWcuIEJ1dCB3YWl0LCBpdCdzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciAoYC51cGRhdGVfcHJvZ2ApLiBJZiBhIGZ1bmN0aW9uJ3MgYWRkcmVzcyBpcyB0YWtlbiBsaWtlIHRoaXMsIHRoZSBjb21waWxlciAqY2FuJ3QqIGlubGluZSBpdCwgcmlnaHQ/IEl0IG5lZWRzIGEgZGlzdGluY3Qgc3ltYm9sLiBTbywgZXZlbiB0aG91Z2ggaXQncyBzdGF0aWMsIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AgbWlnaHQgYmUgZnV6emFibGUuIFRoaXMgY291bGQgYmUgbXkgbWFpbiB0YXJnZXQuXG5cblRoZSBwcm9tcHQgZG9lcyBzYXkgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AgaXMgYSBkaXJlY3QgbW9kaWZpY2F0aW9uIHJlbGF0ZWQgdG8gdGhlIHBhdGNoLCBzbyB0aGlzIHdvdWxkIGJlIGlkZWFsLlxuXG5MZXQncyBjaGVjayBmb3IgYWx0ZXJuYXRpdmVzLiBgYnBmX2xpbmtfdXBkYXRlYCBpcyBzdGF0aWMsIHdoaWNoIGVsaW1pbmF0ZXMgaXQuIGBzeXNfYnBmYCBpcyBmYXIgdG9vIGdlbmVyaWMuIEknbGwgc3RpY2sgd2l0aCBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLlxuXG5JIGNvbnNpZGVyZWQgYG5ldG5zX2JwZl9saW5rX2NyZWF0ZWAgd2hpY2ggYWN0dWFsbHkgY3JlYXRlcyB0aGUgbGluay4gQnV0LCBpdCBzZWVtcyB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgIHdoaWNoIGxlYWRzIG1lIGJhY2sgdG8gaXQgYXMgdGhlIGJldHRlciBjaG9pY2UuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AgaXMgZGVmaW5pdGVseSAqbm90KiBpbmxpbmVkLiBJIGNhbiBjaGVjayBieSB2ZXJpZnlpbmcgdGhhdCB0aGUgY29tcGlsZXIgZGlkIG5vdCBjcmVhdGUgYSBjbG9uZSwgc28gdGhhdCB0aGUgYWRkcmVzcyBpcyBjb25zaXN0ZW50LlxuXG5Ob3csIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBrZXJuZWwgY29uZmlnIHJlcXVpcmVtZW50cy4gSSBrbm93IHRoaXMgaXMgcmVsYXRlZCB0byBuZXR3b3JraW5nIGFuZCBCUEYsIHNvIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYXJlIHByb2JhYmx5IHJlcXVpcmVkLiBBIHF1aWNrIHBlZWsgYXQgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBjb25maXJtcyB0aGlzLiBXZSdyZSBnb29kIHRoZXJlLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJJ2xsIHNjYW4gYGtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jYCBmb3IgYW55IG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMsIGJ1dCBJJ20gY29uZmlkZW50IGluIG15IGluaXRpYWwgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0MTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6Mjk6MzYuMjk4OTMzODAzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE5MjIzMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTI4PXN0YXRpYyB2b2lkIG5ldG5zX2JwZl9hdHRhY2hfdHlwZV91bm5lZWQoZW51bSBuZXRuc19icGZfYXR0YWNoX3R5cGUgdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTMwLVxcdHN3aXRjaCAodHlwZSkge1xcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jOjMxOiNpZmRlZiBDT05GSUdfSU5FVFxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTMyLVxcdGNhc2UgTkVUTlNfQlBGX1NLX0xPT0tVUDpcXG4tLVxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTQxPXN0YXRpYyB2b2lkIG5ldG5zX2JwZl9hdHRhY2hfdHlwZV9uZWVkKGVudW0gbmV0bnNfYnBmX2F0dGFjaF90eXBlIHR5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy00My1cXHRzd2l0Y2ggKHR5cGUpIHtcXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYzo0NDojaWZkZWYgQ09ORklHX0lORVRcXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy00NS1cXHRjYXNlIE5FVE5TX0JQRl9TS19MT09LVVA6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjI5OjM2LjQzMDg2MzQyMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjY5MzIzMTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AuIFRoZSBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyB0aGF0IHRoZSBmdW5jdGlvbiBpdHNlbGYgaXNuJ3QgZ3VhcmRlZCBieSBhbnkgYCNpZmRlZiBDT05GSUdfSU5FVGAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIFRoYXQncyBnb29kIHRvIGtlZXAgaW4gbWluZCwgYXMgaXQgbWVhbnMgaXQncyBub3Qgc3BlY2lmaWMgdG8gSVB2NCBvciBJUHY2LlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZSBjaGFuZ2UgaXRzZWxmLiBUaGUga2V5IGFsdGVyYXRpb24gaGVyZSBpcyB0aGUgcGxhY2VtZW50IG9mIHRoZSBgbmV0bnNfYnBmX211dGV4YCBsb2NrLiBCZWZvcmUsIHRoZSBgbXV0ZXhfbG9ja2Agd2FzIGNhbGxlZCAqYWZ0ZXIqIHNvbWUgaW5pdGlhbCBjaGVja3M6IGBvbGRfcHJvZ2AgYW5kIGBuZXdfcHJvZy1cdTAwM2V0eXBlYC4gTm93LCB3ZSBoYXZlIGBndWFyZChtdXRleCkoXHUwMDI2bmV0bnNfYnBmX211dGV4KWAgYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbi4gVGhpcyBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluaywgXCJGdW5jdGlvbmFsIGNoYW5nZSFcIiBhbmQgdGhhdCB0aGlzIG5lZWRzIHNlcmlvdXMgZnV6emluZywgYmVjYXVzZSBsb2NraW5nIGNoYW5nZXMgY2FuIGJlIHNvIGltcGFjdGZ1bC5cblxuTXkgdGhvdWdodCBwcm9jZXNzIGlzOiBUaGlzIGxvY2sgaXMgbm93IGhlbGQgKmR1cmluZyogdGhvc2UgYG9sZF9wcm9nYCBhbmQgYG5ld19wcm9nLVx1MDAzZXR5cGVgIGNoZWNrcy4gUHJldmlvdXNseSwgd2Ugd2VyZSBwb3RlbnRpYWxseSBhY2Nlc3NpbmcgYGxpbmstXHUwMDNlcHJvZ2Agd2l0aG91dCBob2xkaW5nIHRoZSBtdXRleC4gTm93IHdlJ3JlIG5vdC4gVGhpcyBjb3VsZCBiZSBhIGRlYWRsb2NrIG9wcG9ydHVuaXR5IGlmIHNvbWV0aGluZyBlbHNlIGlzIGhvbGRpbmcgdGhpcyBsb2NrIGFuZCBzdWJzZXF1ZW50bHkgY2FsbHMgdGhpcyBmdW5jdGlvbi4gSXQgY291bGQgYWxzbyBoYXZlIGJlZW4gYSByYWNlIGNvbmRpdGlvbiwgd2hlcmUgdGhlIGBsaW5rLVx1MDAzZXByb2dgIGRhdGEgbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkIG91dHNpZGUgdGhlIHByb3RlY3Rpb24gb2YgdGhlIGxvY2suXG5cblNwZWNpZmljYWxseSwgYGxpbmstXHUwMDNlcHJvZ2AgaXMgYWNjZXNzZWQgaW4gYm90aCB0aG9zZSBjaGVja3MuIFNvLCB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYSBwb3RlbnRpYWwgZGF0YSByYWNlIG9uIGBsaW5rLVx1MDAzZXByb2dgLCB3aGljaCBpcyBmaXhlZCBieSB0aGlzIHBhdGNoLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0J3MgYWx0ZXJpbmcgdGhlIGxvY2tpbmcgYmVoYXZpb3IgYW5kIHRoZXJlZm9yZSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93LCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBjb25jdXJyZW50IGFjY2Vzcy4gSXQncyBhIGNyaXRpY2FsIGNoYW5nZSB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCBhbnkgbmV3bHkgaW50cm9kdWNlZCBkZWFkbG9ja3Mgb3IgdW5pbnRlbmRlZCByYWNlIGNvbmRpdGlvbnMuXG5cbkknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQncyBtb2RpZmllZCwgd2hpY2ggaXQgaXMuIEFuZCBJJ20gc2VlaW5nIHRoaXMgY29kZSBpcyByZWxhdGVkIHRvIGBCUEZfU1lTQ0FMTGAgYW5kIGBORVRgLCBzbyB0aGF0IGdpdmVzIG1lIGFuIGluaXRpYWwgaWRlYSBvZiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEFuZCBmaW5hbGx5LCBJIHNob3VsZCBkb3VibGUgY2hlY2sgZGVwZW5kZW5jaWVzIGZvciBgQlBGX1NZU0NBTExgLiBJJ2xsIHNjYW4gdGhyb3VnaCBgaW5pdC9LY29uZmlnYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODI1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjI5OjQ1LjcwMDE5MDI3NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2Njc2MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyOTo0NS45MTY4Nzk0NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjIzNDkxMTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGNvbmZpZ3VyYXRpb24gaXMgc3RydWN0dXJlZC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAyNy4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBwcm9iYWJseSBkZWZpbmVkIHNvbWV3aGVyZSBpbiB0aGF0IGFyZWEuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZm91bmRhdGlvbmFsIHNldHRpbmdzIHJlbGF0ZWQgdG8gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIEJQRiBmdW5jdGlvbmFsaXR5LCBtYXliZSBzb21lIG9mIHRoZSBjb3JlIGZlYXR1cmUgdG9nZ2xlcywgb3IgcGVyaGFwcyB0aGUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHdoYXQncyAqY29uZmlndXJhYmxlKiBhbmQgaG93IHRoYXQgY29uZmlndXJhYmlsaXR5IGlzIHByZXNlbnRlZC4gTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE5MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjI5OjQ5LjE0MDM3MzQwNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjA6XFx0IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHdhbnQgdGhlIEJQRiBKSVQgY29tcGlsZXIgZW5hYmxlZCBieVxcbiAgMjE6XFx0IyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cXG4gIDIyOlxcdGNvbmZpZyBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUXFxuICAyMzpcXHRcXHRib29sXFxuICAyNDpcXHRcXG4gIDI1OlxcdG1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMjg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMjk6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzA6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzMTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDMyOlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDMzOlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzNDpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzU6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICAzNjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgMzc6XFx0XFx0ZGVmYXVsdCBuXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6Mjk6NDkuMTQwNDM3NzU1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTE1MjU1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgVW5jaGFydGVkIFRlcnJpdG9yeSoqXG5cbkFscmlnaHQsIG5vIFwiZGVwZW5kcyBvblwiIGhlcmUsIHRoYXQncyBnb29kLiBUaGF0J3MgYSBjbGVhbiBzbGF0ZS4gTm93LCBsZXQncyBzZWUuLi4gdGhlIG5leHQgbG9naWNhbCBzdGVwLCBnaXZlbiB0aGlzIGFic2VuY2Ugb2YgZGVwZW5kZW5jaWVzLCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgYE5FVGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBuZXR3b3JrLiBUaGlzIGludm9sdmVzIGxvb2tpbmcgZm9yIGFueSBpbW1lZGlhdGUgc2lnbmFscy4gVGhlIGBORVRgIHN0YXRlIGlzIHBhcmFtb3VudCBhbmQgd2lsbCBndWlkZSBtZSBhcyBJIG1vdmUgZm9yd2FyZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgYmVmb3JlIEkgY2FuIHByb2dyZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY4NywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6Mjk6NTIuMjkxOTcwNTIxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjcyMDM0OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVCRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWctNS1cXG5uZXQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUXFxubmV0L0tjb25maWctNy1cXHRib29sIFxcXCJOZXR3b3JraW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjI5OjUyLjYxOTE4NzUyNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTQzNjgxNzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgTG9ja2luZyBDaGFuZ2UgaW4gQlBGIE5ldGxpbmsgVXBkYXRlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoZSBrZXkgY29uZmlncyBhcmUgYE5FVGAgYW5kIGBCUEZfU1lTQ0FMTGAuIFRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBxdWl0ZSBhIGJpdCwgd2hpY2ggaXMgZ29vZC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLCBzbyB0aGF0J3Mgd2hlcmUgbXkgZm9jdXMgbmVlZHMgdG8gYmUuXG5cblRoZSBtZWF0IG9mIHRoZSBjaGFuZ2UgaXMgdGhpcyBzaGlmdCBmcm9tIG1hbnVhbGx5IG1hbmFnaW5nIHRoZSBsb2NrL3VubG9jayBhcm91bmQgdGhhdCBmdW5jdGlvbiB0byB1c2luZyBhIGBndWFyZChtdXRleClgLiBSaWdodCBhd2F5LCBJIHJlY29nbml6ZSB0aGlzIGlzIGEgY2hhbmdlIHRvIHRoZSBsb2NraW5nIHNjb3BlLiBTcGVjaWZpY2FsbHksIHRoZSBtdXRleCBpcyBub3cgYWNxdWlyZWQgKmJlZm9yZSogY2hlY2tpbmcgYGxpbmstXHUwMDNlcHJvZ2AsIHdoaWNoIHdhcyBoYW5kbGVkIHdpdGhvdXQgYSBsb2NrIHByZXZpb3VzbHkuIFRoYXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgdGhvc2UgYXJlIHRoZSBvbmVzIHRoYXQgZGVtYW5kIHRoZSBtb3N0IHNjcnV0aW55LlxuXG5HaXZlbiB0aGlzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcmV2aXNlZCBsb2NraW5nIHN0cmF0ZWd5IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgZGVhZGxvY2tzIG9yIHJlZ3Jlc3Npb25zLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZyB0byBleHBsb3JlIHRoZSBiZWhhdmlvciB1bmRlciBzdHJlc3MuXG5cbkxldCdzIGNhbGwgdGhpcyBgc2V0LXJlc3VsdHNgIGFuZCBtb3ZlIG9uIHRvIHRoZSBuZXh0IG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4OTEsIk91dHB1dFRva2VucyI6MTMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjI5OjU3Ljc2Mjg3MzcwMVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjE0MTgzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nIHRvIHVzZSBndWFyZChtdXRleCkgaW5zdGVhZCBvZiBtYW51YWwgbG9jay91bmxvY2suIFRoaXMgY2hhbmdlcyB0aGUgbG9jayBzY29wZSwgYXMgdGhlIG11dGV4IGlzIG5vdyBhY3F1aXJlZCBiZWZvcmUgY2hlY2tpbmcgbGluay1cXHUwMDNlcHJvZywgd2hpY2ggd2FzIHByZXZpb3VzbHkgZG9uZSBsb2NrbGVzcy4gVGhpcyBmdW5jdGlvbmFsIGNoYW5nZSBpbiBsb2NraW5nIGJlaGF2aW9yIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGRlYWRsb2NrcyBvciByZWdyZXNzaW9ucyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cgdG8gdXNlIGd1YXJkKG11dGV4KSBpbnN0ZWFkIG9mIG1hbnVhbCBsb2NrL3VubG9jay4gVGhpcyBjaGFuZ2VzIHRoZSBsb2NrIHNjb3BlLCBhcyB0aGUgbXV0ZXggaXMgbm93IGFjcXVpcmVkIGJlZm9yZSBjaGVja2luZyBsaW5rLVxcdTAwM2Vwcm9nLCB3aGljaCB3YXMgcHJldmlvdXNseSBkb25lIGxvY2tsZXNzLiBUaGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGxvY2tpbmcgYmVoYXZpb3Igc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHJlZ3Jlc3Npb25zIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbrg6g[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-28 20:51:08 +0000 UTC FinishedAt: 2026-07-28 21:29:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET" ], "series_id": "d17f82e4-ef0d-4260-8175-a7cf2a64e924" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_netns_link_update_prog" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyB0byB1c2UgZ3VhcmQobXV0ZXgpIGluc3RlYWQgb2YgbWFudWFsIGxvY2svdW5sb2NrLiBUaGlzIGNoYW5nZXMgdGhlIGxvY2sgc2NvcGUsIGFzIHRoZSBtdXRleCBpcyBub3cgYWNxdWlyZWQgYmVmb3JlIGNoZWNraW5nIGxpbmstXHUwMDNlcHJvZywgd2hpY2ggd2FzIHByZXZpb3VzbHkgZG9uZSBsb2NrbGVzcy4gVGhpcyBmdW5jdGlvbmFsIGNoYW5nZSBpbiBsb2NraW5nIGJlaGF2aW9yIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGRlYWRsb2NrcyBvciByZWdyZXNzaW9ucyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg3M2JlZGQ3ZmM5NTFjMTE3NWJlNjI4NGM2YjM3ZTYxNGZkMTNkMWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyOCAyMToyODozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYyBiL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jXG5pbmRleCAyNWYzMGY5ZWRhZWZkLi44MTAwNmEyNDI2MThkIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jXG5AQCAtMTcxLDMzICYjNDM7MTcxLDI4IEBAIHN0YXRpYyBpbnQgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFx0aW50IGlkeCwgcmV0O1xuIFxuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZuZXRuc19icGZfbXV0ZXgpO1xuJiM0MztcbiBcdGlmIChvbGRfcHJvZyBcdTAwMjZcdTAwMjYgb2xkX3Byb2cgIT0gbGluay1cdTAwM2Vwcm9nKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIFx0aWYgKG5ld19wcm9nLVx1MDAzZXR5cGUgIT0gbGluay1cdTAwM2Vwcm9nLVx1MDAzZXR5cGUpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZuZXRuc19icGZfbXV0ZXgpO1xuLVxuIFx0bmV0ID0gbmV0X2xpbmstXHUwMDNlbmV0O1xuLVx0aWYgKCFuZXQgfHwgIWNoZWNrX25ldChuZXQpKSB7XG4mIzQzO1x0aWYgKCFuZXQgfHwgIWNoZWNrX25ldChuZXQpKVxuIFx0XHQvKiBMaW5rIGF1dG8tZGV0YWNoZWQgb3IgbmV0bnMgZHlpbmcgKi9cbi1cdFx0cmV0ID0gLUVOT0xJTks7XG4tXHRcdGdvdG8gb3V0X3VubG9jaztcbi1cdH1cbiYjNDM7XHRcdHJldHVybiAtRU5PTElOSztcbiBcbiBcdHJ1bl9hcnJheSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobmV0LVx1MDAzZWJwZi5ydW5fYXJyYXlbdHlwZV0sXG4gXHRcdFx0XHRcdCAgICAgIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZuZXRuc19icGZfbXV0ZXgpKTtcbiBcdGlkeCA9IGxpbmtfaW5kZXgobmV0LCB0eXBlLCBuZXRfbGluayk7XG4gXHRyZXQgPSBicGZfcHJvZ19hcnJheV91cGRhdGVfYXQocnVuX2FycmF5LCBpZHgsIG5ld19wcm9nKTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4gXHRvbGRfcHJvZyA9IHhjaGcoXHUwMDI2bGluay1cdTAwM2Vwcm9nLCBuZXdfcHJvZyk7XG4gXHRicGZfcHJvZ19wdXQob2xkX3Byb2cpO1xuLVxuLW91dF91bmxvY2s6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2bmV0bnNfYnBmX211dGV4KTtcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYnBmX25ldG5zX2xpbmtfZmlsbF9pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nIHRvIHVzZSBndWFyZChtdXRleCkgaW5zdGVhZCBvZiBtYW51YWwgbG9jay91bmxvY2suIFRoaXMgY2hhbmdlcyB0aGUgbG9jayBzY29wZSwgYXMgdGhlIG11dGV4IGlzIG5vdyBhY3F1aXJlZCBiZWZvcmUgY2hlY2tpbmcgbGluay1cdTAwM2Vwcm9nLCB3aGljaCB3YXMgcHJldmlvdXNseSBkb25lIGxvY2tsZXNzLiBUaGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGxvY2tpbmcgYmVoYXZpb3Igc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHJlZ3Jlc3Npb25zIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODczYmVkZDdmYzk1MWMxMTc1YmU2Mjg0YzZiMzdlNjE0ZmQxM2QxYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDI4IDIxOjI4OjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMgYi9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYwppbmRleCAyNWYzMGY5ZWRhZWZkLi44MTAwNmEyNDI2MThkIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYwpAQCAtMTcxLDMzICYjNDM7MTcxLDI4IEBAIHN0YXRpYyBpbnQgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLAogCXN0cnVjdCBuZXQgKm5ldDsKIAlpbnQgaWR4LCByZXQ7CiAKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7bmV0bnNfYnBmX211dGV4KTsKJiM0MzsKIAlpZiAob2xkX3Byb2cgJmFtcDsmYW1wOyBvbGRfcHJvZyAhPSBsaW5rLSZndDtwcm9nKQogCQlyZXR1cm4gLUVQRVJNOwogCWlmIChuZXdfcHJvZy0mZ3Q7dHlwZSAhPSBsaW5rLSZndDtwcm9nLSZndDt0eXBlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJmFtcDtuZXRuc19icGZfbXV0ZXgpOwotCiAJbmV0ID0gbmV0X2xpbmstJmd0O25ldDsKLQlpZiAoIW5ldCB8fCAhY2hlY2tfbmV0KG5ldCkpIHsKJiM0MzsJaWYgKCFuZXQgfHwgIWNoZWNrX25ldChuZXQpKQogCQkvKiBMaW5rIGF1dG8tZGV0YWNoZWQgb3IgbmV0bnMgZHlpbmcgKi8KLQkJcmV0ID0gLUVOT0xJTks7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9CiYjNDM7CQlyZXR1cm4gLUVOT0xJTks7CiAKIAlydW5fYXJyYXkgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG5ldC0mZ3Q7YnBmLnJ1bl9hcnJheVt0eXBlXSwKIAkJCQkJICAgICAgbG9ja2RlcF9pc19oZWxkKCZhbXA7bmV0bnNfYnBmX211dGV4KSk7CiAJaWR4ID0gbGlua19pbmRleChuZXQsIHR5cGUsIG5ldF9saW5rKTsKIAlyZXQgPSBicGZfcHJvZ19hcnJheV91cGRhdGVfYXQocnVuX2FycmF5LCBpZHgsIG5ld19wcm9nKTsKIAlpZiAocmV0KQotCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJb2xkX3Byb2cgPSB4Y2hnKCZhbXA7bGluay0mZ3Q7cHJvZywgbmV3X3Byb2cpOwogCWJwZl9wcm9nX3B1dChvbGRfcHJvZyk7Ci0KLW91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7bmV0bnNfYnBmX211dGV4KTsKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBicGZfbmV0bnNfbGlua19maWxsX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzY3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoIEZ1enppbmcgLSBBIFJlZmFjdG9yaW5nIHdpdGggUmVhY2hhYmxlIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY2AuIEl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSB0byBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLCByZXBsYWNpbmcgdGhlIG1hbnVhbCBgbXV0ZXhfbG9ja2AgYW5kIGBtdXRleF91bmxvY2tgIHdpdGggYGd1YXJkKG11dGV4KSgmYW1wO25ldG5zX2JwZl9tdXRleClgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBqdXN0IGEgcmVmYWN0b3JpbmcsIGEgY2xlYW51cCB0byBzaW1wbGlmeSB0aGUgY29kZSBhbmQgcHJldmVudCBwb3RlbnRpYWwgbG9jay1yZWxhdGVkIGJ1Z3MsIGJ1dCB0aGVuIEkgaGF2ZSB0byBhc2sgbXlzZWxmOiBkb2VzIHRoaXMgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93PwoKSXQmIzM5O3MgdGVtcHRpbmcgdG8gZGlzbWlzcyBpdCBhcyBwdXJlbHkgZGVjb3JhdGl2ZS4gQWZ0ZXIgYWxsLCB0aGUgbG9ja2luZyBsb2dpYyAqc2hvdWxkKiBiZSBpZGVudGljYWwuIEhvd2V2ZXIsIHRoZSAqbWV0aG9kKiBvZiBsb2NraW5nIGhhcyBjaGFuZ2VkLCB3aGljaCBtZWFucyB0aGVyZSBjb3VsZCBiZSBlZGdlIGNhc2VzIHdoZXJlIHRoZSBvbGQgY29kZSBoYW5kbGVkIGFuIGVhcmx5IHJldHVybiBkaWZmZXJlbnRseSB0aGFuIHRoZSBuZXcgY29kZSwgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgbG9jayByZWxlYXNlLiBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IG9mIGEgcmVncmVzc2lvbi4gVGhlIGd1YXJkIGNvbnN0cnVjdCBjb3VsZCBoYXZlIHNvbWUgc3VidGxlIGJ1Zy4gSXQmIzM5O3MgaW4gYSByZWFjaGFibGUgcGF0aCwgYW5kIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBCUEYgbGluayB1cGRhdGUgcHJvZ3JhbXMsIGEgY3JpdGljYWwgYXJlYS4KClRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIG9ubHkgZm9yIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIG9yIG1vZGlmaWNhdGlvbnMgdG8gbnVtZXJpYyBjb25zdGFudHMvbWFjcm9zIHRoYXQgZG9uJiMzOTt0IGFmZmVjdCBleGVjdXRpb24gZmxvdy4gVGhpcyByZWZhY3RvcmluZywgd2hpbGUgc2VlbWluZ2x5IGlubm9jdW91cywgKmRvZXMqIGFsdGVyIGhvdyB0aGUgbG9jayBpcyBtYW5hZ2VkLiBXaGlsZSB0aGUgbG9naWMgc2hvdWxkIGJlIHRoZSBzYW1lLCBhIGJ1ZyBpbiB0aGUgbmV3IGxvY2tpbmcgZmxvdywgcGVyaGFwcyBhbiB1bmV4cGVjdGVkIGVhcmx5IHJldHVybiBwYXRoIHRoYXQgZmFpbHMgdG8gcmVsZWFzZSB0aGUgbG9jayBjb3JyZWN0bHkgaW4gdGhlIHJlZmFjdG9yZWQgY29kZSwgaXMgbm93IGEgcG9zc2liaWxpdHkuIFRoZSBvbGQgY29kZSBoYWQgZXhwbGljaXQgYGdvdG8gb3V0X3VubG9ja2AsIHdoZXJlYXMgdGhlIG5ldyBjb2RlIGhhcyBleHBsaWNpdCBgcmV0dXJuIC1FTk9MSU5LYCBhbmQgYHJldHVybiByZXRgLCB3aGljaCB3aWxsIHVubG9jayB2aWEgdGhlIGd1YXJkLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgY2hhbmdlLCB3aGlsZSBzZWVtaW5nbHkgc2ltcGxlLCAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHNvdXJjZSBjb2RlIHRoYXQgaW1wYWN0cyB0aGUgbG9ja2luZyBtZWNoYW5pc20gaW4gYSByZWFjaGFibGUgcGF0aCwgSSB0aGluayBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhbmQgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZnVuY3Rpb24gbmFtZSwgd2hpY2ggaXMgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCBpbiBga2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNgLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRob3NlIGNvbmZpZyBvcHRpb25zIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0X25hbWVzcGFjZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0yNj1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBvZmZsb2FkLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbmV0X25hbWVzcGFjZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTI4LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHRjeC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM3NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGVwZW5kZW5jaWVzIENoZWNrKioKCk9rYXksIHNvIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIG5lY2Vzc2FyeSBjb21wb25lbnQgaGVyZS4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24gd2l0aCBhIGZpbmUtdG9vdGhlZCBjb21iLiBUaGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIHRoaXMgZGVwZW5kZW5jeSBoYXMgYSBmZXcgaW5kaXJlY3QgaW1wbGljYXRpb25zIGFzIHdlbGwuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBsaWJyYXJpZXMsIG9yIGtlcm5lbCB2ZXJzaW9ucyB0aGF0IGFyZSBhbHNvIGltcGFjdGVkLiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2ggYW5kIHZlcmlmeSwgdG8gbWFrZSBzdXJlIGFsbCBteSBiYXNlcyBhcmUgY292ZXJlZCwgdGhhbiB0byBtYWtlIGEgY2hhbmdlIHRoYXQgaW50cm9kdWNlcyBvdGhlciBpc3N1ZXMgZG93biB0aGUgcm9hZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBub3RoaW5nIGVsc2UgbmVlZHMgbXkgYXR0ZW50aW9uIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTk1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQlBGIEtjb25maWcgSHVudCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0aGlzIHNvcnRlZC4gSSBuZWVkIHRvIGZpbmQgdGhlIEtjb25maWcgZW50cmllcyByZWxhdGVkIHRvIEJQRiB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gVGhpcyBpcyB1c3VhbGx5IHRoZSBmaXJzdCBzdGVwIHdoZW4gSSYjMzk7bSBjb25maWd1cmluZyBvciBkZWJ1Z2dpbmcgYW55dGhpbmcgQlBGLXJlbGF0ZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzPyBDb25kaXRpb25hbCBjb21waWxhdGlvbnM/IExldCYjMzk7cyBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgc3R1ZmYgbGl2ZXMgd2l0aGluIHRoZSB3aWRlciBjb25maWcgZnJhbWV3b3JrLiBJIGltYWdpbmUgaXQmIzM5O2xsIGJlIHVuZGVyIHNvbWUgdmFyaWF0aW9uIG9mICYjMzQ7QlBGJiMzNDsgb3IgJiMzNDtlQlBGLCYjMzQ7IHBvc3NpYmx5IG5lc3RlZCB1bmRlciBuZXR3b3JraW5nLCB0cmFjaW5nLCBvciBzZWN1cml0eSBzdWJzeXN0ZW1zLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgc291cmNlIGRpcmVjdG9yeS4gR290dGEgc2VlIHdoYXQgZmxhZ3MgSSBjYW4gdXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBrZXJuZWwmIzM5O3MgQlBGIEtjb25maWcsIGZvY3VzaW5nIGFyb3VuZCBsaW5lIDI3LgoKKipEaXZpbmcgaW50byB0aGUgQlBGIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlIGFuZCB6ZXJvIGluIGFyb3VuZCBsaW5lIDI3LiBJIHdhbnQgdG8gc2VlIHdoYXQmIzM5O3MgYmVpbmcgZGVmaW5lZCB0aGVyZSwgd2hhdCBmdW5kYW1lbnRhbCBCUEYgb3B0aW9ucyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIEJQRiBzdWJzeXN0ZW0gd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNvcmUgY2FwYWJpbGl0aWVzIG9yIGRlcGVuZGVuY2llcyBpdOKAmXMgc2V0dGluZyB1cC4gSXMgaXQgcmVsYXRlZCB0byB0cmFjaW5nLCBuZXR3b3JraW5nLCBzZWN1cml0eSwgb3IgcGVyaGFwcyBhIG1vcmUgZ2VuZXJhbCBlbmFibGluZyBmbGFnPyBXaGF0IGxldmVsIG9mIGdyYW51bGFyIGNvbnRyb2wgYXJlIHdlIGdldHRpbmcgYXQgdGhpcyBwb2ludCBpbiB0aGUgY29uZmlndXJhdGlvbj8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgaXQmIzM5O3MgcHJvYmFibHkgYSBjcnVjaWFsIHNldHRpbmcuIEkmIzM5O20gcmVhZHkgdG8gZGlnZXN0IHRoZSBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgaXQsIGxvb2tpbmcgZm9yIGFueSBpbW1lZGlhdGUgaW1wbGljYXRpb25zIGZvciBob3cgQlBGIGlzIHVzZWQgb3IgbWFuYWdlZCB3aXRoaW4gYSBzeXN0ZW0mIzM5O3MgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBrZWVuIHRvIHNwb3QgYW55IGdvdGNoYXMgb3Igbm9uLW9idmlvdXMgZGVmYXVsdHMgdGhhdCBtaWdodCBjYXRjaCBzb21lb25lIG91dC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHksIGxldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHQjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgd2FudCB0aGUgQlBGIEpJVCBjb21waWxlciBlbmFibGVkIGJ5XG4gIDIxOlx0IyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cbiAgMjI6XHRjb25maWcgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxuICAyMzpcdFx0Ym9vbFxuICAyNDpcdFxuICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MzUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBCUEYgU3lzdGVtIENhbGwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBkcml2ZXMgZXZlcnl0aGluZyByZWxhdGVkIHRvIEJQRiBzeXN0ZW0gY2FsbHMuIFRoYXQmIzM5O3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgYSBsaXR0bGUgZmxhZyB3ZW50IHVwIGluIG15IG1pbmQuLi4gSSByZW1lbWJlciBzZWVpbmcgYGtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jYCBtZW50aW9uZWQuIEkgbmVlZCB0byBiZSBzdXJlIGJ1dCBJIHRoaW5rIHRoYXQgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBJdCYjMzk7cyB0aW1lIHRvIGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9uLgoKSSYjMzk7bSBzdGFydGluZyB0byB3b25kZXIsIHRob3VnaCwgYXJlIHRoZXJlICpvdGhlciogY29uZmlndXJhdGlvbiBvcHRpb25zIGF0IHBsYXkgaGVyZT8gSXMgYEJQRl9TWVNDQUxMYCB0aGUgb25seSBvbmUgdGhhdCBkaWN0YXRlcyB3aGV0aGVyIHRoZSBmdW5jdGlvbmFsaXR5IGluIHRoZSBicGYgbmFtZXNwYWNlIGlzIGFjdGl2ZT8gQmVzdCB0byBlbGltaW5hdGUgYW55IGRpc3RyYWN0aW9ucyBzbyBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYGtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jYCBmb3IgYW55IGFkZGl0aW9uYWwgYCNpZmRlZmAgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGNvbnRyb2wgcGFydHMgb2YgaXRzIGNvbXBpbGF0aW9uLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJIGRvbiYjMzk7dCB3YW50IHRvIG1pc3MgYW55dGhpbmcgcG90ZW50aWFsbHkgcmVsZXZhbnQgdG8gdGhpcyBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14jaWZkZWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz0yOD1zdGF0aWMgdm9pZCBuZXRuc19icGZfYXR0YWNoX3R5cGVfdW5uZWVkKGVudW0gbmV0bnNfYnBmX2F0dGFjaF90eXBlIHR5cGUpXG4tLVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMzAtXHRzd2l0Y2ggKHR5cGUpIHtcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jOjMxOiNpZmRlZiBDT05GSUdfSU5FVFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMzItXHRjYXNlIE5FVE5TX0JQRl9TS19MT09LVVA6XG4tLVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM9NDE9c3RhdGljIHZvaWQgbmV0bnNfYnBmX2F0dGFjaF90eXBlX25lZWQoZW51bSBuZXRuc19icGZfYXR0YWNoX3R5cGUgdHlwZSlcbi0tXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy00My1cdHN3aXRjaCAodHlwZSkge1xua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6NDQ6I2lmZGVmIENPTkZJR19JTkVUXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy00NS1cdGNhc2UgTkVUTlNfQlBGX1NLX0xPT0tVUDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk5NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgdGhlIFNjb3BlIG9mIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AuIEJlZm9yZSBJIGRpdmUgaW50byBhbnkgZGV0YWlsZWQgYW5hbHlzaXMsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNvbmZpcm0gaXRzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJcyB0aGlzIGZ1bmN0aW9uIHBvdGVudGlhbGx5IG9ubHkgYWN0aXZlIHVuZGVyIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBvciBmZWF0dXJlIGZsYWdzPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgbmVzdGVkIHdpdGhpbiBhbnkgYCNpZmRlZmAgYmxvY2tzLiBUaGF0JiMzOTtzIGFsd2F5cyBteSBmaXJzdCBzdGVwIOKAkyBhdm9pZGluZyB3YXN0ZWQgZWZmb3J0IGJ5IGxvb2tpbmcgYXQgYSBmdW5jdGlvbiB0aGF0IG1pZ2h0IG5vdCBldmVuIGJlIHBhcnQgb2YgdGhlIGFjdGl2ZSBjb2RlIHBhdGguIEEgcXVpY2sgc2VhcmNoIHRocm91Z2ggdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGlzIGluIG9yZGVyLiBUaGlzIHdpbGwgaW1tZWRpYXRlbHkgY2xhcmlmeSBpdHMgc2NvcGUgYW5kIGxldCBtZSBiZXR0ZXIgdW5kZXJzdGFuZCBob3cgdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz0xNTU9c3RhdGljIHZvaWQgYnBmX25ldG5zX2xpbmtfZGVhbGxvYyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4tLVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMTYyLVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6MTYzOnN0YXRpYyBpbnQgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMTY0LVx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyxcbi0tXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz0yMzA9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX25ldG5zX2xpbmtfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTIzMy1cdC5kZXRhY2ggPSBicGZfbmV0bnNfbGlua19kZXRhY2gsXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYzoyMzQ6XHQudXBkYXRlX3Byb2cgPSBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTIzNS1cdC5maWxsX2xpbmtfaW5mbyA9IGJwZl9uZXRuc19saW5rX2ZpbGxfaW5mbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUxMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb2RlIENoYW5nZSBmb3IgRnV6emluZyBXb3J0aGluZXNzKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZCBhcyBJIGV2YWx1YXRlIHRoaXMgcGF0Y2guIEZpcnN0LCBJIHNlZSB0aGlzIGNvZGUgY2hhbmdlIGlzbiYjMzk7dCB3cmFwcGVkIGluIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzLiBHb29kLiBOb3csIHRoZSBwcm9tcHQgc2F5cyByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY2hhbmdlcyB0aGF0IGRvbiYjMzk7dCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3csIHNwZWNpZmljYWxseTogY2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MuCgpTbywgcmVwbGFjaW5nIGBtdXRleF9sb2NrYC9gbXV0ZXhfdW5sb2NrYCB3aXRoIGBndWFyZChtdXRleClg4oCUZG9lcyAqdGhhdCogZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93PyBJbml0aWFsbHksIEkmIzM5O2Qgc2F5IG5vLiBJdCYjMzk7cyBhIHJlZmFjdG9yaW5nLCB1c2luZyB0aGUgY2xlYW51cCBhdHRyaWJ1dGUgdG8gZW5zdXJlIHRoZSBtdXRleCBpcyBhdXRvbWF0aWNhbGx5IHVubG9ja2VkIG9uIHNjb3BlIGV4aXQuIFRoZSBoaWdoLWxldmVsIGV4ZWN1dGlvbiwgdGhlIGxvY2tpbmcsIGNoZWNraW5nLCB1bmxvY2tpbmcsIGFuZCByZXR1cm5pbmcsIHNob3VsZCBiZSBpZGVudGljYWwuIEJ1dCB0aGVuIEkgZ2V0IGh1bmcgdXAgb24gdGhlIHBocmFzaW5nOiAmIzM0O2RvZXMgaXQgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93PyYjMzQ7IEl0JiMzOTtzICp0ZWNobmljYWxseSogY2hhbmdpbmcgKmhvdyogdGhlIGxvY2sgaXMgcmVsZWFzZWQsIHVzaW5nIGNvbXBpbGVyLWdlbmVyYXRlZCBjb2RlIGluc3RlYWQgb2YgZXhwbGljaXQgYGdvdG9gIGFuZCBgbXV0ZXhfdW5sb2NrYC4KCkhtbS4uLiBpcyB0aGF0IHN0aWxsICYjMzQ7bm90IGZ1bmN0aW9uYWxseSBhbHRlcmluZyBleGVjdXRpb24gZmxvdz8mIzM0OyBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBjYWxscyBvdXQgKm51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyouIFRoaXMgaXMgYSBzdHJ1Y3R1cmFsIGNoYW5nZSwgdXNpbmcgYGd1YXJkYC4gTm93LCB0aGUgY3J1Y2lhbCBwYXJ0OiBJIHN0YXJ0IHRvIHRoaW5rIHRoYXQgZXZlbiB3aXRoIGEgcmVmYWN0b3JpbmcsIGJ1Z3MgKmNhbiogYmUgaW50cm9kdWNlZC4gQSBtaXNwbGFjZWQgZ3VhcmQgb3IgYSByZXR1cm4gc3RhdGVtZW50IHRoYXQgYnlwYXNzZXMgdGhlIGludGVuZGVkIHVubG9jayBjb3VsZCBjcmVhdGUgcmVhbCBwcm9ibGVtcy4KCkxldCYjMzk7cyBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGUgY29kZSBkaWZmOgoKYGBgYwotCW11dGV4X2xvY2soJmFtcDtuZXRuc19icGZfbXV0ZXgpOwotCiAJbmV0ID0gbmV0X2xpbmstJmd0O25ldDsKLQlpZiAoIW5ldCB8fCAhY2hlY2tfbmV0KG5ldCkpIHsKJiM0MzsJaWYgKCFuZXQgfHwgIWNoZWNrX25ldChuZXQpKQogCQkvKiBMaW5rIGF1dG8tZGV0YWNoZWQgb3IgbmV0bnMgZHlpbmcgKi8KLQkJcmV0ID0gLUVOT0xJTks7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9CiYjNDM7CQlyZXR1cm4gLUVOT0xJTks7CmBgYAoKQWhhISBUaGlzIGlzIGEgY29udHJvbCBmbG93IGNoYW5nZS4gSXQmIzM5O3MgbW92aW5nIGZyb20gYSBgZ290byBvdXRfdW5sb2NrYCB0byBhIGByZXR1cm4gLUVOT0xJTktgLiBUaGF0JiMzOTtzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSBpbiB0aGUgQyBjb2RlLCBldmVuIGlmIHRoZSBpbnRlbmRlZCAqYmVoYXZpb3IqIGlzIHRoZSBzYW1lLiBJdCBpcyB2ZXJ5IGxpa2VseSB0aGF0IGZ1enppbmcgaXMgdXNlZnVsIGhlcmUgdG8gZW5zdXJlIHRoZSBsb2NrIGlzIGFjdHVhbGx5IHJlbGVhc2VkLCBhbmQgbm8gZGVhZGxvY2tzIG9jY3VyLgoKSSBzaG91bGQgYWxzbyBjaGVjayBmb3IgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIG1ham9yIG9uZSwgYnV0IHdoZXJlJiMzOTtzIHRoaXMgY29kZSBsb2NhdGVkPyBBaCwgaXQmIzM5O3MgYGtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jYC4gRG9lcyB0aGF0IGltcGx5IGBDT05GSUdfTkVUYCBpcyByZXF1aXJlZD8gVGltZSB0byBjaGVjayB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIG1ha2Ugc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0X25hbWVzcGFjZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTI2PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG9mZmxvYWQub1xua2VybmVsL2JwZi9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBuZXRfbmFtZXNwYWNlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMjgtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdGN4Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjcyOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBCUEYgU3lzdGVtIENhbGwgYW5kIE5ldHdvcmsgTmFtZXNwYWNlIERlcGVuZGVuY3kqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBhIHRob3VnaHQganVzdCBwb3BwZWQgaW50byBteSBoZWFkOiBgbmV0X25hbWVzcGFjZS5jYCB1c2VzIGBzdHJ1Y3QgbmV0YCwgcmlnaHQ/IEFuZCB0aGF0JiMzOTtzIHVzdWFsbHkgYXNzb2NpYXRlZCB3aXRoIG5ldHdvcmsgZnVuY3Rpb25hbGl0eS4gRG9lcyB0aGF0IG1lYW4gdGhlIEJQRiBzeXNjYWxsLCBvciBhdCBsZWFzdCBwYXJ0cyBvZiBpdHMgaW1wbGVtZW50YXRpb24sIGltcGxpY2l0bHkgZGVwZW5kIG9uIGBDT05GSUdfTkVUYCBiZWluZyBlbmFibGVkPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGlzIGFzc3VtcHRpb24uCgpMZXQmIzM5O3MgY2hlY2sgdGhlIEtjb25maWcuIEkmIzM5O2xsIGp1bXAgb3ZlciB0byBga2VybmVsL2JwZi9LY29uZmlnYC4gUmlnaHQsIGhlcmUgd2UgYXJlLiBPa2F5LCBsZXQmIzM5O3MgbG9vayBhdCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gQWhhISBJdCBzZWxlY3RzIGBORVRfU09DS19NU0dgLCBgTkVUX1hHUkVTU2AsIGFuZCBgUEFHRV9QT09MYCBpZiBgTkVUYCBpcyBlbmFibGVkLCBidXQgdGhlICpzeXNjYWxsKiBpdHNlbGYgZG9lc24mIzM5O3QgZGlyZWN0bHkgZGVwZW5kIG9uIGBORVRgLiBJbnRlcmVzdGluZy4KCkhvd2V2ZXIsIHRoZSBxdWVzdGlvbiByZW1haW5zOiBpcyBgbmV0X25hbWVzcGFjZS5jYCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGBDT05GSUdfTkVUYD8gVGhlIGBLY29uZmlnYCBkb2VzbiYjMzk7dCBwcm92aWRlIGVub3VnaCBpbmZvcm1hdGlvbiBhbmQgdGhlIGBNYWtlZmlsZWAgbWlnaHQgYmUgd2hlcmUgdGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0YWtlcyBwbGFjZS4gVGltZSB0byBjaGVjayBga2VybmVsL2JwZi9NYWtlZmlsZWAgYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai15IDo9IGNvcmUub1xuICAgMzpcdGlmbmVxICgkKENPTkZJR19CUEZfSklUX0FMV0FZU19PTikseSlcbiAgIDQ6XHQjIF9fX2JwZl9wcm9nX3J1bigpIG5lZWRzIEdDU0UgZGlzYWJsZWQgb24geDg2OyBzZWUgMzE5M2MwODM2ZjIwMyBmb3IgZGV0YWlsc1xuICAgNTpcdGNmbGFncy1ub2djc2UtJChDT05GSUdfWDg2KSQoQ09ORklHX0NDX0lTX0dDQykgOj0gLWZuby1nY3NlXG4gICA2Olx0ZW5kaWZcbiAgIDc6XHRDRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxuICAgODpcdFxuICAgOTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xuICAxMDpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuICAxMTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXG4gIDEyOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xuICAxMzpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXG4gIDE0Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZml4dXBzLm8gY2ZnLm8gc3RhdGVzLm8gYmFja3RyYWNrLm8gY2hlY2tfYnRmLm9cbiAgMTU6XHRvYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbiAgMTY6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkaXNhc20ubyBtcHJvZy5vXG4gIDE3Olx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSB0cmFtcG9saW5lLm9cbiAgMTg6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xuICAxOTpcdGlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG4gIDIwOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYXJlbmEubyByYW5nZV90cmVlLm9cbiAgMjE6XHRlbmRpZlxuICAyMjpcdG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gZGlzcGF0Y2hlci5vXG4gIDIzOlx0aWZlcSAoJChDT05GSUdfTkVUKSx5KVxuICAyNDpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRldm1hcC5vXG4gIDI1Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY3B1bWFwLm9cbiAgMjY6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBvZmZsb2FkLm9cbiAgMjc6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBuZXRfbmFtZXNwYWNlLm9cbiAgMjg6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSB0Y3gub1xuICAyOTpcdGVuZGlmXG4gIDMwOlx0aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXG4gIDMxOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3RhY2ttYXAub1xuICAzMjpcdGVuZGlmXG4gIDMzOlx0aWZlcSAoJChDT05GSUdfQ0dST1VQUykseSlcbiAgMzQ6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xuICAzNTpcdGVuZGlmXG4gIDM2Olx0b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICYjNDM7PSBjZ3JvdXAub1xuICAzNzpcdGlmZXEgKCQoQ09ORklHX0lORVQpLHkpXG4gIDM4Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmV1c2Vwb3J0X2FycmF5Lm9cbiAgMzk6XHRlbmRpZlxuICA0MDpcdGlmZXEgKCQoQ09ORklHX1NZU0ZTKSx5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTgyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCYjMzk7cyBCUEYgTmFtZXNwYWNlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG5ldF9uYW1lc3BhY2Uub2AgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGl0JiMzOTtzIGNvbmRpdGlvbmFsIG9uIGBpZmVxICgkKENPTkZJR19ORVQpLHkpYC4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IGl0IGFsc28gbWVhbnMgd2UmIzM5O2xsIGRlZmluaXRlbHkgbmVlZCBib3RoIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgZW5hYmxlZC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgbGV0JiMzOTtzIGRpZyBhIGJpdCBkZWVwZXIuCgpJJiMzOTttIG5vdyBjaGVja2luZyBvdXQgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCBpbiBga2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNgLiBBaCwgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgLnVwZGF0ZV9wcm9nYCB3aXRoaW4gYGJwZl9uZXRuc19saW5rX29wc2AuIEhhbmcgb24uLi4gdGhpcyBpcyB3aGVuIHRoZSByZWQgZmxhZyB3ZW50IHVwLiBUaGUgcHJvbXB0IGlzIGhhbW1lcmluZyBob21lIHRoZSBwb2ludCBhYm91dCBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4gU3RhdGljIGZ1bmN0aW9ucyBnZXQgaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIGFuZCB0aGV5IGRvbiYjMzk7dCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIHdoaWNoIHRoZSBwcm9tcHQgc2VlbXMgdG8gYmUgcG9pbnRpbmcgb3V0IGFzIGEgcHJvYmxlbSBpbiB0aGUgY29udGV4dCBvZiB3aGF0IHdlIGFyZSBkb2luZy4gU28sIEkgaGF2ZSB0byBmaW5kIHdoZXJlIGBicGZfbmV0bnNfbGlua19vcHNgIGlzIHVzZWQsIHRvIHNlZSBpZiB3ZSBjYW4gdXNlIGFuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIHRoYXQgd291bGQgc29sdmUgdGhlIHByb2JsZW0gaGlnaGxpZ2h0ZWQgaW4gdGhlIHByb21wdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX25ldG5zX2xpbmtfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM9MjE3PXN0YXRpYyB2b2lkIGJwZl9uZXRuc19saW5rX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbi0tXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0yMjktXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYzoyMzA6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX25ldG5zX2xpbmtfb3BzID0ge1xua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMjMxLVx0LnJlbGVhc2UgPSBicGZfbmV0bnNfbGlua19yZWxlYXNlLFxuLS1cbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTQ3MT1pbnQgbmV0bnNfYnBmX2xpbmtfY3JlYXRlKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtNDk3LVx0YnBmX2xpbmtfaW5pdChcdTAwMjZuZXRfbGluay1cdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX05FVE5TLFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6NDk4Olx0XHQgICAgICBcdTAwMjZicGZfbmV0bnNfbGlua19vcHMsIHByb2csIHR5cGUpO1xua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtNDk5LVx0bmV0X2xpbmstXHUwMDNlbmV0ID0gbmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTQ3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC4KCioqTXkgQW5hbHlzaXMgb2YgQlBGIExpbmsgQ3JlYXRpb24gYW5kIFVwZGF0ZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGBuZXRuc19icGZfbGlua19jcmVhdGVgIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBhIEJQRiBsaW5rLCBhbmQgaXQgbGV2ZXJhZ2VzIHRoZSBgYnBmX25ldG5zX2xpbmtfb3BzYCBzdHJ1Y3R1cmUgdG8gbWFuYWdlIGl0cyBiZWhhdmlvci4gVGhhdCYjMzk7cyBmYWlybHkgc3RhbmRhcmQuIFdoYXQgSSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIGlzIHRoZSAqdGltaW5nKiBvZiB0aGUgdXBkYXRlIG9wZXJhdGlvbi4gV2hlbiBkb2VzIGAudXBkYXRlX3Byb2dgIHdpdGhpbiB0aGF0IHN0cnVjdHVyZSBhY3R1YWxseSBnZXQgY2FsbGVkPyBJdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBqdXN0IGZyb20gdGhlIG5hbWUgb2YgdGhlIGNyZWF0ZSBmdW5jdGlvbi4gTG9va2luZyBpbnRvIHRoZSBrZXJuZWwgY29kZSwgYWgsIGl0IGFwcGVhcnMgdGhhdCBgYnBmX2xpbmtfdXBkYXRlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSB0cmlnZ2VycyB0aGUgYC51cGRhdGVfcHJvZ2AgY2FsbC4gSXQgbG9va3MgbGlrZSBgYnBmX2xpbmtfdXBkYXRlYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGxpbmsgdXBkYXRlcyBpbiB0aGUgQlBGIHN5c3RlbSBjYWxsLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgdGhlIG5leHQgdGltZSBJIGhhdmUgdG8gZGVidWcgc29tZSBsaW5rIGJlaGF2aW9yLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXBkYXRlX3Byb2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz01OTgxPXN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAyMS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMjI6XHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNldXBkYXRlX3Byb2cpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDIzOlx0XHRyZXQgPSBsaW5rLVx1MDAzZW9wcy1cdTAwM2V1cGRhdGVfcHJvZyhsaW5rLCBuZXdfcHJvZywgb2xkX3Byb2cpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAyNC1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM5MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBCUEYgTGluayBVcGRhdGUgQW5hbHlzaXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBsaW5rX3VwZGF0ZWAgaXMgdGhlIGVudHJ5IHBvaW50IHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBOb3QgdW5leHBlY3RlZCwgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGxvb2suIEhvd2V2ZXIsIHRoZSBgc3RhdGljYCBkZWNsYXJhdGlvbiBvbiBgbGlua191cGRhdGVgIGlzIGltbWVkaWF0ZWx5IHJhaXNpbmcgYSBmbGFnLiBJZiBpdCYjMzk7cyBgc3RhdGljYCwgaXQmIzM5O3Mgbm90IGRpcmVjdGx5IGV4cG9zZWQgYXMgYSBzeXN0ZW0gY2FsbCBpbiB0aGUgdXN1YWwgc2Vuc2UsIHdoaWNoIG1lYW5zIHNvbWV0aGluZyAqZWxzZSogaXMgY2FsbGluZyBpdC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHN0YWNrIHRvIGZpZ3VyZSBvdXQgdGhlIGluaXRpYXRpbmcgcGF0aC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGNydWNpYWwgaGVyZSB0byBhc3Nlc3MgdGhlIHVwZGF0ZSYjMzk7cyBvdmVyYWxsIGltcGFjdCBhbmQgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8ga25vdyBob3cgdGhpcyBzcGVjaWZpYyB1cGRhdGUgZnVuY3Rpb24gaXMgZ2V0dGluZyBpbnZva2VkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hlcmUgdGhpcyBjYWxsIGlzIGNvbWluZyBmcm9tLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaW5rX3VwZGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTU4NDQ9c3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk0OS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5NTA6c3RhdGljIGludCBsaW5rX3VwZGF0ZV9tYXAoc3RydWN0IGJwZl9saW5rICpsaW5rLCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTEte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTQtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTU1Olx0bmV3X21hcCA9IGJwZl9tYXBfZ2V0KGF0dHItXHUwMDNlbGlua191cGRhdGUubmV3X21hcF9mZCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTU2LVx0aWYgKElTX0VSUihuZXdfbWFwKSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTU4LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk1OTpcdGlmIChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLmZsYWdzIFx1MDAyNiBCUEZfRl9SRVBMQUNFKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTYwOlx0XHRvbGRfbWFwID0gYnBmX21hcF9nZXQoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5vbGRfbWFwX2ZkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NjEtXHRcdGlmIChJU19FUlIob2xkX21hcCkpIHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTY0LVx0XHR9XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTY1Olx0fSBlbHNlIGlmIChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm9sZF9tYXBfZmQpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NjYtXHRcdHJldCA9IC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk3OC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5Nzk6I2RlZmluZSBCUEZfTElOS19VUERBVEVfTEFTVF9GSUVMRCBsaW5rX3VwZGF0ZS5vbGRfcHJvZ19mZFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk4MC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5ODE6c3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5ODIte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTAtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTkxOlx0ZmxhZ3MgPSBhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLmZsYWdzO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk5Mi1cdGlmIChmbGFncyBcdTAwMjYgfkJQRl9GX1JFUExBQ0UpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk5NC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5OTU6XHRsaW5rID0gYnBmX2xpbmtfZ2V0X2Zyb21fZmQoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5saW5rX2ZkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTYtXHRpZiAoSVNfRVJSKGxpbmspKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTktXHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNldXBkYXRlX21hcCkge1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAwMDpcdFx0cmV0ID0gbGlua191cGRhdGVfbWFwKGxpbmssIGF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAwMS1cdFx0Z290byBvdXRfcHV0X2xpbms7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAwMy1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMDQ6XHRuZXdfcHJvZyA9IGJwZl9wcm9nX2dldChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm5ld19wcm9nX2ZkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMDUtXHRpZiAoSVNfRVJSKG5ld19wcm9nKSkge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMTAtXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1JFUExBQ0UpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMTE6XHRcdG9sZF9wcm9nID0gYnBmX3Byb2dfZ2V0KGF0dHItXHUwMDNlbGlua191cGRhdGUub2xkX3Byb2dfZmQpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAxMi1cdFx0aWYgKElTX0VSUihvbGRfcHJvZykpIHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDE2LVx0XHR9XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDE3Olx0fSBlbHNlIGlmIChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDE4LVx0XHRyZXQgPSAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzNTQ9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0OTUtXHRjYXNlIEJQRl9MSU5LX1VQREFURTpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0OTY6XHRcdGVyciA9IGxpbmtfdXBkYXRlKFx1MDAyNmF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ5Ny1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzUxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgU3lzdGVtIENhbGwqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYF9fc3lzX2JwZmAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LCB0aGUgZmlyc3QgcGxhY2UgZXhlY3V0aW9uIGhpdHMgd2hlbiBhIEJQRiBwcm9ncmFtIGlzIGludm9rZWQuIEFuZCBmcm9tIHdoYXQgSSBzZWUgaW4gdGhlIGNvZGUsIGBsaW5rX3VwZGF0ZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZnJvbSBgX19zeXNfYnBmYC4gTm93LCBoYW5nIG9uIGEgc2Vjb25kLi4uIGlzIGBfX3N5c19icGZgIGFsc28gZGVmaW5lZCBhcyBhIGBzdGF0aWNgIGZ1bmN0aW9uPyBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlY2xhcmF0aW9uLiBTdGF0aWMgZnVuY3Rpb25zIGhhdmUgbGltaXRlZCBzY29wZSwgYW5kIHRoYXQgd2lsbCBpbXBhY3QgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSB3aWRlciBCUEYgc3lzdGVtLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBleGFjdCBkZWZpbml0aW9uLiBMZXQgbWUgZGlnIGludG8gYF9fc3lzX2JwZmAuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zeXNfYnBmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9NjMxMz1zdGF0aWMgaW50IHByb2dfYXNzb2Nfc3RydWN0X29wcyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzUzLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjM1NDpzdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzU1LVx0XHQgICAgIGJwZnB0cl90IHVhdHRyX2NvbW1vbiwgdW5zaWduZWQgaW50IHNpemVfY29tbW9uKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTY1MzQ9U1lTQ0FMTF9ERUZJTkU1KGJwZiwgaW50LCBjbWQsIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqLCB1YXR0ciwgdW5zaWduZWQgaW50LCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY1MzYte1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjUzNzpcdHJldHVybiBfX3N5c19icGYoY21kLCBVU0VSX0JQRlBUUih1YXR0ciksIHNpemUsIFVTRVJfQlBGUFRSKHVhdHRyX2NvbW1vbiksIHNpemVfY29tbW9uKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY1MzgtfVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTY1NTE9QlBGX0NBTExfMyhicGZfc3lzX2JwZiwgaW50LCBjbWQsIHVuaW9uIGJwZl9hdHRyICosIGF0dHIsIHUzMiwgYXR0cl9zaXplKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY1NjYtXHR9XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NTY3Olx0cmV0dXJuIF9fc3lzX2JwZihjbWQsIEtFUk5FTF9CUEZQVFIoYXR0ciksIGF0dHJfc2l6ZSwgS0VSTkVMX0JQRlBUUihOVUxMKSwgMCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NTY4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MTQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1ODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgQlBGIEZ1bmN0aW9uIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBCUEYgZnV6emluZyB0YXNrLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgYmVzdCBmdW5jdGlvbnMgdG8gdGFyZ2V0LCBrZWVwaW5nIHRoZSBmdXp6aW5nIGZvY3VzZWQgYW5kIGVmZmVjdGl2ZS4gVGhlIHByb21wdCBnaXZlcyBjbGVhciBndWlkYW5jZTogcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhpcyBtYWtlcyBzZW5zZTsgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBhcmUga2V5IGZvciBkaXJlY3QgZnV6emluZy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCBmb3IgYHN5c19icGZgLCBnaXZlbiBpdCYjMzk7cyB0aGUgc3lzY2FsbCBpdHNlbGYuIEJ1dCB0aGF0JiMzOTtzIHByb2JhYmx5IHRvbyBicm9hZC4gVGhlbiBJIHNlZSBgX19zeXNfYnBmYCwgd2hpY2ggaXMgc3RhdGljLCBzbyBkZWZpbml0ZWx5IG91dC4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgd2FybnMgYWdhaW5zdCB0aGVzZSBzdGF0aWMgaGVscGVycywgYXMgdGhleSYjMzk7cmUgdXN1YWxseSBpbmxpbmVkLgoKVGhlbiwgdGhlcmUmIzM5O3MgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYC4gSSBzZWUgdGhhdCBpdCBpcyBzdGF0aWMsIHdoaWNoIGlzIGEgcmVkIGZsYWcuIEJ1dCB3YWl0LCBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgKGAudXBkYXRlX3Byb2dgKS4gSWYgYSBmdW5jdGlvbiYjMzk7cyBhZGRyZXNzIGlzIHRha2VuIGxpa2UgdGhpcywgdGhlIGNvbXBpbGVyICpjYW4mIzM5O3QqIGlubGluZSBpdCwgcmlnaHQ/IEl0IG5lZWRzIGEgZGlzdGluY3Qgc3ltYm9sLiBTbywgZXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgIG1pZ2h0IGJlIGZ1enphYmxlLiBUaGlzIGNvdWxkIGJlIG15IG1haW4gdGFyZ2V0LgoKVGhlIHByb21wdCBkb2VzIHNheSB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCBpcyBhIGRpcmVjdCBtb2RpZmljYXRpb24gcmVsYXRlZCB0byB0aGUgcGF0Y2gsIHNvIHRoaXMgd291bGQgYmUgaWRlYWwuCgpMZXQmIzM5O3MgY2hlY2sgZm9yIGFsdGVybmF0aXZlcy4gYGJwZl9saW5rX3VwZGF0ZWAgaXMgc3RhdGljLCB3aGljaCBlbGltaW5hdGVzIGl0LiBgc3lzX2JwZmAgaXMgZmFyIHRvbyBnZW5lcmljLiBJJiMzOTtsbCBzdGljayB3aXRoIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AuCgpJIGNvbnNpZGVyZWQgYG5ldG5zX2JwZl9saW5rX2NyZWF0ZWAgd2hpY2ggYWN0dWFsbHkgY3JlYXRlcyB0aGUgbGluay4gQnV0LCBpdCBzZWVtcyB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgIHdoaWNoIGxlYWRzIG1lIGJhY2sgdG8gaXQgYXMgdGhlIGJldHRlciBjaG9pY2UuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgIGlzIGRlZmluaXRlbHkgKm5vdCogaW5saW5lZC4gSSBjYW4gY2hlY2sgYnkgdmVyaWZ5aW5nIHRoYXQgdGhlIGNvbXBpbGVyIGRpZCBub3QgY3JlYXRlIGEgY2xvbmUsIHNvIHRoYXQgdGhlIGFkZHJlc3MgaXMgY29uc2lzdGVudC4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBrZXJuZWwgY29uZmlnIHJlcXVpcmVtZW50cy4gSSBrbm93IHRoaXMgaXMgcmVsYXRlZCB0byBuZXR3b3JraW5nIGFuZCBCUEYsIHNvIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYXJlIHByb2JhYmx5IHJlcXVpcmVkLiBBIHF1aWNrIHBlZWsgYXQgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBjb25maXJtcyB0aGlzLiBXZSYjMzk7cmUgZ29vZCB0aGVyZS4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O2xsIHNjYW4gYGtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jYCBmb3IgYW55IG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMsIGJ1dCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSBpbml0aWFsIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTI4PXN0YXRpYyB2b2lkIG5ldG5zX2JwZl9hdHRhY2hfdHlwZV91bm5lZWQoZW51bSBuZXRuc19icGZfYXR0YWNoX3R5cGUgdHlwZSlcbi0tXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0zMC1cdHN3aXRjaCAodHlwZSkge1xua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6MzE6I2lmZGVmIENPTkZJR19JTkVUXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0zMi1cdGNhc2UgTkVUTlNfQlBGX1NLX0xPT0tVUDpcbi0tXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz00MT1zdGF0aWMgdm9pZCBuZXRuc19icGZfYXR0YWNoX3R5cGVfbmVlZChlbnVtIG5ldG5zX2JwZl9hdHRhY2hfdHlwZSB0eXBlKVxuLS1cbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTQzLVx0c3dpdGNoICh0eXBlKSB7XG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYzo0NDojaWZkZWYgQ09ORklHX0lORVRcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTQ1LVx0Y2FzZSBORVROU19CUEZfU0tfTE9PS1VQOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgyNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AuIFRoZSBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyB0aGF0IHRoZSBmdW5jdGlvbiBpdHNlbGYgaXNuJiMzOTt0IGd1YXJkZWQgYnkgYW55IGAjaWZkZWYgQ09ORklHX0lORVRgIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBUaGF0JiMzOTtzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLCBhcyBpdCBtZWFucyBpdCYjMzk7cyBub3Qgc3BlY2lmaWMgdG8gSVB2NCBvciBJUHY2LgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGNoYW5nZSBpdHNlbGYuIFRoZSBrZXkgYWx0ZXJhdGlvbiBoZXJlIGlzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIGBuZXRuc19icGZfbXV0ZXhgIGxvY2suIEJlZm9yZSwgdGhlIGBtdXRleF9sb2NrYCB3YXMgY2FsbGVkICphZnRlciogc29tZSBpbml0aWFsIGNoZWNrczogYG9sZF9wcm9nYCBhbmQgYG5ld19wcm9nLSZndDt0eXBlYC4gTm93LCB3ZSBoYXZlIGBndWFyZChtdXRleCkoJmFtcDtuZXRuc19icGZfbXV0ZXgpYCBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLiBUaGlzIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rLCAmIzM0O0Z1bmN0aW9uYWwgY2hhbmdlISYjMzQ7IGFuZCB0aGF0IHRoaXMgbmVlZHMgc2VyaW91cyBmdXp6aW5nLCBiZWNhdXNlIGxvY2tpbmcgY2hhbmdlcyBjYW4gYmUgc28gaW1wYWN0ZnVsLgoKTXkgdGhvdWdodCBwcm9jZXNzIGlzOiBUaGlzIGxvY2sgaXMgbm93IGhlbGQgKmR1cmluZyogdGhvc2UgYG9sZF9wcm9nYCBhbmQgYG5ld19wcm9nLSZndDt0eXBlYCBjaGVja3MuIFByZXZpb3VzbHksIHdlIHdlcmUgcG90ZW50aWFsbHkgYWNjZXNzaW5nIGBsaW5rLSZndDtwcm9nYCB3aXRob3V0IGhvbGRpbmcgdGhlIG11dGV4LiBOb3cgd2UmIzM5O3JlIG5vdC4gVGhpcyBjb3VsZCBiZSBhIGRlYWRsb2NrIG9wcG9ydHVuaXR5IGlmIHNvbWV0aGluZyBlbHNlIGlzIGhvbGRpbmcgdGhpcyBsb2NrIGFuZCBzdWJzZXF1ZW50bHkgY2FsbHMgdGhpcyBmdW5jdGlvbi4gSXQgY291bGQgYWxzbyBoYXZlIGJlZW4gYSByYWNlIGNvbmRpdGlvbiwgd2hlcmUgdGhlIGBsaW5rLSZndDtwcm9nYCBkYXRhIG1pZ2h0IGhhdmUgYmVlbiBtb2RpZmllZCBvdXRzaWRlIHRoZSBwcm90ZWN0aW9uIG9mIHRoZSBsb2NrLgoKU3BlY2lmaWNhbGx5LCBgbGluay0mZ3Q7cHJvZ2AgaXMgYWNjZXNzZWQgaW4gYm90aCB0aG9zZSBjaGVja3MuIFNvLCB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYSBwb3RlbnRpYWwgZGF0YSByYWNlIG9uIGBsaW5rLSZndDtwcm9nYCwgd2hpY2ggaXMgZml4ZWQgYnkgdGhpcyBwYXRjaC4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3MgYWx0ZXJpbmcgdGhlIGxvY2tpbmcgYmVoYXZpb3IgYW5kIHRoZXJlZm9yZSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93LCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBjb25jdXJyZW50IGFjY2Vzcy4gSXQmIzM5O3MgYSBjcml0aWNhbCBjaGFuZ2Ugd29ydGggZnV6emluZyB0byBkZXRlY3QgYW55IG5ld2x5IGludHJvZHVjZWQgZGVhZGxvY2tzIG9yIHVuaW50ZW5kZWQgcmFjZSBjb25kaXRpb25zLgoKSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQmIzM5O3MgbW9kaWZpZWQsIHdoaWNoIGl0IGlzLiBBbmQgSSYjMzk7bSBzZWVpbmcgdGhpcyBjb2RlIGlzIHJlbGF0ZWQgdG8gYEJQRl9TWVNDQUxMYCBhbmQgYE5FVGAsIHNvIHRoYXQgZ2l2ZXMgbWUgYW4gaW5pdGlhbCBpZGVhIG9mIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQW5kIGZpbmFsbHksIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBkZXBlbmRlbmNpZXMgZm9yIGBCUEZfU1lTQ0FMTGAuIEkmIzM5O2xsIHNjYW4gdGhyb3VnaCBgaW5pdC9LY29uZmlnYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE5MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBjb25maWd1cmF0aW9uIGlzIHN0cnVjdHVyZWQuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAyNy4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBwcm9iYWJseSBkZWZpbmVkIHNvbWV3aGVyZSBpbiB0aGF0IGFyZWEuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGZvdW5kYXRpb25hbCBzZXR0aW5ncyByZWxhdGVkIHRvIGVuYWJsaW5nIG9yIGRpc2FibGluZyBCUEYgZnVuY3Rpb25hbGl0eSwgbWF5YmUgc29tZSBvZiB0aGUgY29yZSBmZWF0dXJlIHRvZ2dsZXMsIG9yIHBlcmhhcHMgdGhlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB3aGF0JiMzOTtzICpjb25maWd1cmFibGUqIGFuZCBob3cgdGhhdCBjb25maWd1cmFiaWxpdHkgaXMgcHJlc2VudGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIwOlx0IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHdhbnQgdGhlIEJQRiBKSVQgY29tcGlsZXIgZW5hYmxlZCBieVxuICAyMTpcdCMgZGVmYXVsdCBmb3Iga2VybmVscyB0aGF0IHdlcmUgY29tcGlsZWQgd2l0aCBCUEYgSklUIHN1cHBvcnQuXG4gIDIyOlx0Y29uZmlnIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcbiAgMjM6XHRcdGJvb2xcbiAgMjQ6XHRcbiAgMjU6XHRtZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgQlBGX1NZU0NBTExcbiAgMjg6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4gIDI5Olx0XHRzZWxlY3QgQlBGXG4gIDMwOlx0XHRzZWxlY3QgSVJRX1dPUktcbiAgMzE6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuICAzMjpcdFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxuICAzMzpcdFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbiAgMzQ6XHRcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG4gIDM1Olx0XHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbiAgMzY6XHRcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG4gIDM3Olx0XHRkZWZhdWx0IG5cbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY4NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgVW5jaGFydGVkIFRlcnJpdG9yeSoqCgpBbHJpZ2h0LCBubyAmIzM0O2RlcGVuZHMgb24mIzM0OyBoZXJlLCB0aGF0JiMzOTtzIGdvb2QuIFRoYXQmIzM5O3MgYSBjbGVhbiBzbGF0ZS4gTm93LCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgZ2l2ZW4gdGhpcyBhYnNlbmNlIG9mIGRlcGVuZGVuY2llcywgaXMgdG8gaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGBORVRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgbmV0d29yay4gVGhpcyBpbnZvbHZlcyBsb29raW5nIGZvciBhbnkgaW1tZWRpYXRlIHNpZ25hbHMuIFRoZSBgTkVUYCBzdGF0ZSBpcyBwYXJhbW91bnQgYW5kIHdpbGwgZ3VpZGUgbWUgYXMgSSBtb3ZlIGZvcndhcmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGJlZm9yZSBJIGNhbiBwcm9ncmVzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVCQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZy01LVxubmV0L0tjb25maWc6NjptZW51Y29uZmlnIE5FVFxubmV0L0tjb25maWctNy1cdGJvb2wgXCYjMzQ7TmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODkxCgkJCQkJCQlvdXRwdXQ6IDEzMAoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIExvY2tpbmcgQ2hhbmdlIGluIEJQRiBOZXRsaW5rIFVwZGF0ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoZSBrZXkgY29uZmlncyBhcmUgYE5FVGAgYW5kIGBCUEZfU1lTQ0FMTGAuIFRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBxdWl0ZSBhIGJpdCwgd2hpY2ggaXMgZ29vZC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIG15IGZvY3VzIG5lZWRzIHRvIGJlLgoKVGhlIG1lYXQgb2YgdGhlIGNoYW5nZSBpcyB0aGlzIHNoaWZ0IGZyb20gbWFudWFsbHkgbWFuYWdpbmcgdGhlIGxvY2svdW5sb2NrIGFyb3VuZCB0aGF0IGZ1bmN0aW9uIHRvIHVzaW5nIGEgYGd1YXJkKG11dGV4KWAuIFJpZ2h0IGF3YXksIEkgcmVjb2duaXplIHRoaXMgaXMgYSBjaGFuZ2UgdG8gdGhlIGxvY2tpbmcgc2NvcGUuIFNwZWNpZmljYWxseSwgdGhlIG11dGV4IGlzIG5vdyBhY3F1aXJlZCAqYmVmb3JlKiBjaGVja2luZyBgbGluay0mZ3Q7cHJvZ2AsIHdoaWNoIHdhcyBoYW5kbGVkIHdpdGhvdXQgYSBsb2NrIHByZXZpb3VzbHkuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIHRob3NlIGFyZSB0aGUgb25lcyB0aGF0IGRlbWFuZCB0aGUgbW9zdCBzY3J1dGlueS4KCkdpdmVuIHRoaXMsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyByZXZpc2VkIGxvY2tpbmcgc3RyYXRlZ3kgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgZGVhZGxvY2tzIG9yIHJlZ3Jlc3Npb25zLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZyB0byBleHBsb3JlIHRoZSBiZWhhdmlvciB1bmRlciBzdHJlc3MuCgpMZXQmIzM5O3MgY2FsbCB0aGlzIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgb24gdG8gdGhlIG5leHQgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nIHRvIHVzZSBndWFyZChtdXRleCkgaW5zdGVhZCBvZiBtYW51YWwgbG9jay91bmxvY2suIFRoaXMgY2hhbmdlcyB0aGUgbG9jayBzY29wZSwgYXMgdGhlIG11dGV4IGlzIG5vdyBhY3F1aXJlZCBiZWZvcmUgY2hlY2tpbmcgbGluay1cdTAwM2Vwcm9nLCB3aGljaCB3YXMgcHJldmlvdXNseSBkb25lIGxvY2tsZXNzLiBUaGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGxvY2tpbmcgYmVoYXZpb3Igc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHJlZ3Jlc3Npb25zIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cgdG8gdXNlIGd1YXJkKG11dGV4KSBpbnN0ZWFkIG9mIG1hbnVhbCBsb2NrL3VubG9jay4gVGhpcyBjaGFuZ2VzIHRoZSBsb2NrIHNjb3BlLCBhcyB0aGUgbXV0ZXggaXMgbm93IGFjcXVpcmVkIGJlZm9yZSBjaGVja2luZyBsaW5rLVx1MDAzZXByb2csIHdoaWNoIHdhcyBwcmV2aW91c2x5IGRvbmUgbG9ja2xlc3MuIFRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbG9ja2luZyBiZWhhdmlvciBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgcmVncmVzc2lvbnMgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyODozMS4yNjM3MzAzMjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjY2NTMwMDEwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cgdG8gdXNlIGd1YXJkKG11dGV4KSBpbnN0ZWFkIG9mIG1hbnVhbCBsb2NrL3VubG9jay4gVGhpcyBjaGFuZ2VzIHRoZSBsb2NrIHNjb3BlLCBhcyB0aGUgbXV0ZXggaXMgbm93IGFjcXVpcmVkIGJlZm9yZSBjaGVja2luZyBsaW5rLVxcdTAwM2Vwcm9nLCB3aGljaCB3YXMgcHJldmlvdXNseSBkb25lIGxvY2tsZXNzLiBUaGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGxvY2tpbmcgYmVoYXZpb3Igc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHJlZ3Jlc3Npb25zIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyODozMS4yNjM3NDQ3NjNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDYzMjg4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg3M2JlZGQ3ZmM5NTFjMTE3NWJlNjI4NGM2YjM3ZTYxNGZkMTNkMWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMjggMjE6Mjg6MzAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMgYi9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1xcbmluZGV4IDI1ZjMwZjllZGFlZmQuLjgxMDA2YTI0MjYxOGQgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNcXG4rKysgYi9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1xcbkBAIC0xNzEsMzMgKzE3MSwyOCBAQCBzdGF0aWMgaW50IGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nKHN0cnVjdCBicGZfbGluayAqbGluayxcXG4gXFx0c3RydWN0IG5ldCAqbmV0O1xcbiBcXHRpbnQgaWR4LCByZXQ7XFxuIFxcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNm5ldG5zX2JwZl9tdXRleCk7XFxuK1xcbiBcXHRpZiAob2xkX3Byb2cgXFx1MDAyNlxcdTAwMjYgb2xkX3Byb2cgIT0gbGluay1cXHUwMDNlcHJvZylcXG4gXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gXFx0aWYgKG5ld19wcm9nLVxcdTAwM2V0eXBlICE9IGxpbmstXFx1MDAzZXByb2ctXFx1MDAzZXR5cGUpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2bmV0bnNfYnBmX211dGV4KTtcXG4tXFxuIFxcdG5ldCA9IG5ldF9saW5rLVxcdTAwM2VuZXQ7XFxuLVxcdGlmICghbmV0IHx8ICFjaGVja19uZXQobmV0KSkge1xcbitcXHRpZiAoIW5ldCB8fCAhY2hlY2tfbmV0KG5ldCkpXFxuIFxcdFxcdC8qIExpbmsgYXV0by1kZXRhY2hlZCBvciBuZXRucyBkeWluZyAqL1xcbi1cXHRcXHRyZXQgPSAtRU5PTElOSztcXG4tXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbi1cXHR9XFxuK1xcdFxcdHJldHVybiAtRU5PTElOSztcXG4gXFxuIFxcdHJ1bl9hcnJheSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobmV0LVxcdTAwM2VicGYucnVuX2FycmF5W3R5cGVdLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNm5ldG5zX2JwZl9tdXRleCkpO1xcbiBcXHRpZHggPSBsaW5rX2luZGV4KG5ldCwgdHlwZSwgbmV0X2xpbmspO1xcbiBcXHRyZXQgPSBicGZfcHJvZ19hcnJheV91cGRhdGVfYXQocnVuX2FycmF5LCBpZHgsIG5ld19wcm9nKTtcXG4gXFx0aWYgKHJldClcXG4tXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0b2xkX3Byb2cgPSB4Y2hnKFxcdTAwMjZsaW5rLVxcdTAwM2Vwcm9nLCBuZXdfcHJvZyk7XFxuIFxcdGJwZl9wcm9nX3B1dChvbGRfcHJvZyk7XFxuLVxcbi1vdXRfdW5sb2NrOlxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNm5ldG5zX2JwZl9tdXRleCk7XFxuLVxcdHJldHVybiByZXQ7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGJwZl9uZXRuc19saW5rX2ZpbGxfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjI4OjMxLjczNTQxMTA0NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg2MTkzNjA5MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyB0byB1c2UgZ3VhcmQobXV0ZXgpIGluc3RlYWQgb2YgbWFudWFsIGxvY2svdW5sb2NrLiBUaGlzIGNoYW5nZXMgdGhlIGxvY2sgc2NvcGUsIGFzIHRoZSBtdXRleCBpcyBub3cgYWNxdWlyZWQgYmVmb3JlIGNoZWNraW5nIGxpbmstXFx1MDAzZXByb2csIHdoaWNoIHdhcyBwcmV2aW91c2x5IGRvbmUgbG9ja2xlc3MuIFRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbG9ja2luZyBiZWhhdmlvciBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgcmVncmVzc2lvbnMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg3M2JlZGQ3ZmM5NTFjMTE3NWJlNjI4NGM2YjM3ZTYxNGZkMTNkMWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyOCAyMToyODozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jIGIva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNcbmluZGV4IDI1ZjMwZjllZGFlZmQuLjgxMDA2YTI0MjYxOGQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1xuKysrIGIva2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNcbkBAIC0xNzEsMzMgKzE3MSwyOCBAQCBzdGF0aWMgaW50IGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nKHN0cnVjdCBicGZfbGluayAqbGluayxcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbiBcdGludCBpZHgsIHJldDtcbiBcbitcdGd1YXJkKG11dGV4KShcdTAwMjZuZXRuc19icGZfbXV0ZXgpO1xuK1xuIFx0aWYgKG9sZF9wcm9nIFx1MDAyNlx1MDAyNiBvbGRfcHJvZyAhPSBsaW5rLVx1MDAzZXByb2cpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXHRpZiAobmV3X3Byb2ctXHUwMDNldHlwZSAhPSBsaW5rLVx1MDAzZXByb2ctXHUwMDNldHlwZSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNm5ldG5zX2JwZl9tdXRleCk7XG4tXG4gXHRuZXQgPSBuZXRfbGluay1cdTAwM2VuZXQ7XG4tXHRpZiAoIW5ldCB8fCAhY2hlY2tfbmV0KG5ldCkpIHtcbitcdGlmICghbmV0IHx8ICFjaGVja19uZXQobmV0KSlcbiBcdFx0LyogTGluayBhdXRvLWRldGFjaGVkIG9yIG5ldG5zIGR5aW5nICovXG4tXHRcdHJldCA9IC1FTk9MSU5LO1xuLVx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHR9XG4rXHRcdHJldHVybiAtRU5PTElOSztcbiBcbiBcdHJ1bl9hcnJheSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobmV0LVx1MDAzZWJwZi5ydW5fYXJyYXlbdHlwZV0sXG4gXHRcdFx0XHRcdCAgICAgIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZuZXRuc19icGZfbXV0ZXgpKTtcbiBcdGlkeCA9IGxpbmtfaW5kZXgobmV0LCB0eXBlLCBuZXRfbGluayk7XG4gXHRyZXQgPSBicGZfcHJvZ19hcnJheV91cGRhdGVfYXQocnVuX2FycmF5LCBpZHgsIG5ld19wcm9nKTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdG9sZF9wcm9nID0geGNoZyhcdTAwMjZsaW5rLVx1MDAzZXByb2csIG5ld19wcm9nKTtcbiBcdGJwZl9wcm9nX3B1dChvbGRfcHJvZyk7XG4tXG4tb3V0X3VubG9jazpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZuZXRuc19icGZfbXV0ZXgpO1xuLVx0cmV0dXJuIHJldDtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGJwZl9uZXRuc19saW5rX2ZpbGxfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyODozMS43MzU0MTM5ODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTU1ODE3NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoIEZ1enppbmcgLSBBIFJlZmFjdG9yaW5nIHdpdGggUmVhY2hhYmxlIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBga2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNgLiBJdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSB0byBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLCByZXBsYWNpbmcgdGhlIG1hbnVhbCBgbXV0ZXhfbG9ja2AgYW5kIGBtdXRleF91bmxvY2tgIHdpdGggYGd1YXJkKG11dGV4KShcdTAwMjZuZXRuc19icGZfbXV0ZXgpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBqdXN0IGEgcmVmYWN0b3JpbmcsIGEgY2xlYW51cCB0byBzaW1wbGlmeSB0aGUgY29kZSBhbmQgcHJldmVudCBwb3RlbnRpYWwgbG9jay1yZWxhdGVkIGJ1Z3MsIGJ1dCB0aGVuIEkgaGF2ZSB0byBhc2sgbXlzZWxmOiBkb2VzIHRoaXMgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93P1xuXG5JdCdzIHRlbXB0aW5nIHRvIGRpc21pc3MgaXQgYXMgcHVyZWx5IGRlY29yYXRpdmUuIEFmdGVyIGFsbCwgdGhlIGxvY2tpbmcgbG9naWMgKnNob3VsZCogYmUgaWRlbnRpY2FsLiBIb3dldmVyLCB0aGUgKm1ldGhvZCogb2YgbG9ja2luZyBoYXMgY2hhbmdlZCwgd2hpY2ggbWVhbnMgdGhlcmUgY291bGQgYmUgZWRnZSBjYXNlcyB3aGVyZSB0aGUgb2xkIGNvZGUgaGFuZGxlZCBhbiBlYXJseSByZXR1cm4gZGlmZmVyZW50bHkgdGhhbiB0aGUgbmV3IGNvZGUsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIGxvY2sgcmVsZWFzZS4gSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBwb3NzaWJpbGl0eSBvZiBhIHJlZ3Jlc3Npb24uIFRoZSBndWFyZCBjb25zdHJ1Y3QgY291bGQgaGF2ZSBzb21lIHN1YnRsZSBidWcuIEl0J3MgaW4gYSByZWFjaGFibGUgcGF0aCwgYW5kIGl0J3MgZGVhbGluZyB3aXRoIEJQRiBsaW5rIHVwZGF0ZSBwcm9ncmFtcywgYSBjcml0aWNhbCBhcmVhLlxuXG5UaGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBvbmx5IGZvciBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBvciBtb2RpZmljYXRpb25zIHRvIG51bWVyaWMgY29uc3RhbnRzL21hY3JvcyB0aGF0IGRvbid0IGFmZmVjdCBleGVjdXRpb24gZmxvdy4gVGhpcyByZWZhY3RvcmluZywgd2hpbGUgc2VlbWluZ2x5IGlubm9jdW91cywgKmRvZXMqIGFsdGVyIGhvdyB0aGUgbG9jayBpcyBtYW5hZ2VkLiBXaGlsZSB0aGUgbG9naWMgc2hvdWxkIGJlIHRoZSBzYW1lLCBhIGJ1ZyBpbiB0aGUgbmV3IGxvY2tpbmcgZmxvdywgcGVyaGFwcyBhbiB1bmV4cGVjdGVkIGVhcmx5IHJldHVybiBwYXRoIHRoYXQgZmFpbHMgdG8gcmVsZWFzZSB0aGUgbG9jayBjb3JyZWN0bHkgaW4gdGhlIHJlZmFjdG9yZWQgY29kZSwgaXMgbm93IGEgcG9zc2liaWxpdHkuIFRoZSBvbGQgY29kZSBoYWQgZXhwbGljaXQgYGdvdG8gb3V0X3VubG9ja2AsIHdoZXJlYXMgdGhlIG5ldyBjb2RlIGhhcyBleHBsaWNpdCBgcmV0dXJuIC1FTk9MSU5LYCBhbmQgYHJldHVybiByZXRgLCB3aGljaCB3aWxsIHVubG9jayB2aWEgdGhlIGd1YXJkLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBjaGFuZ2UsIHdoaWxlIHNlZW1pbmdseSBzaW1wbGUsICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc291cmNlIGNvZGUgdGhhdCBpbXBhY3RzIHRoZSBsb2NraW5nIG1lY2hhbmlzbSBpbiBhIHJlYWNoYWJsZSBwYXRoLCBJIHRoaW5rIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhbmQgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZnVuY3Rpb24gbmFtZSwgd2hpY2ggaXMgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCBpbiBga2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNgLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhvc2UgY29uZmlnIG9wdGlvbnMgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjI4OjM5LjI5MTIzNTQyMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMwNDI2OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0X25hbWVzcGFjZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MjY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBvZmZsb2FkLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbmV0X25hbWVzcGFjZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHRjeC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjI4OjM5LjQyNDI4OTc2OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODI2Mjk5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGVwZW5kZW5jaWVzIENoZWNrKipcblxuT2theSwgc28gSSd2ZSBpZGVudGlmaWVkIHRoYXQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBuZWNlc3NhcnkgY29tcG9uZW50IGhlcmUuIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiB3aXRoIGEgZmluZS10b290aGVkIGNvbWIuIFRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGlzIGRlcGVuZGVuY3kgaGFzIGEgZmV3IGluZGlyZWN0IGltcGxpY2F0aW9ucyBhcyB3ZWxsLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBsaWJyYXJpZXMsIG9yIGtlcm5lbCB2ZXJzaW9ucyB0aGF0IGFyZSBhbHNvIGltcGFjdGVkLiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2ggYW5kIHZlcmlmeSwgdG8gbWFrZSBzdXJlIGFsbCBteSBiYXNlcyBhcmUgY292ZXJlZCwgdGhhbiB0byBtYWtlIGEgY2hhbmdlIHRoYXQgaW50cm9kdWNlcyBvdGhlciBpc3N1ZXMgZG93biB0aGUgcm9hZC4gTGV0J3MgbWFrZSBzdXJlIG5vdGhpbmcgZWxzZSBuZWVkcyBteSBhdHRlbnRpb24hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNzUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyODo0Mi4zMDY5MjI4ODFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0ODE3OTg0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyODo0Mi41OTE3NTQwOTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQ5OTk5NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipCUEYgS2NvbmZpZyBIdW50KipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdGhpcyBzb3J0ZWQuIEkgbmVlZCB0byBmaW5kIHRoZSBLY29uZmlnIGVudHJpZXMgcmVsYXRlZCB0byBCUEYgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuIFRoaXMgaXMgdXN1YWxseSB0aGUgZmlyc3Qgc3RlcCB3aGVuIEknbSBjb25maWd1cmluZyBvciBkZWJ1Z2dpbmcgYW55dGhpbmcgQlBGLXJlbGF0ZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzPyBDb25kaXRpb25hbCBjb21waWxhdGlvbnM/IExldCdzIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBzdHVmZiBsaXZlcyB3aXRoaW4gdGhlIHdpZGVyIGNvbmZpZyBmcmFtZXdvcmsuIEkgaW1hZ2luZSBpdCdsbCBiZSB1bmRlciBzb21lIHZhcmlhdGlvbiBvZiBcIkJQRlwiIG9yIFwiZUJQRixcIiBwb3NzaWJseSBuZXN0ZWQgdW5kZXIgbmV0d29ya2luZywgdHJhY2luZywgb3Igc2VjdXJpdHkgc3Vic3lzdGVtcy4gVGltZSB0byBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhlIHNvdXJjZSBkaXJlY3RvcnkuIEdvdHRhIHNlZSB3aGF0IGZsYWdzIEkgY2FuIHVzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjI4OjQ1LjY0MTc1NjIzNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU0MTcyOTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyODo0Ny40OTU5MzQ4NjZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE4NjI0NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUga2VybmVsJ3MgQlBGIEtjb25maWcsIGZvY3VzaW5nIGFyb3VuZCBsaW5lIDI3LlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBwdWxsIHVwIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlIGFuZCB6ZXJvIGluIGFyb3VuZCBsaW5lIDI3LiBJIHdhbnQgdG8gc2VlIHdoYXQncyBiZWluZyBkZWZpbmVkIHRoZXJlLCB3aGF0IGZ1bmRhbWVudGFsIEJQRiBvcHRpb25zIHdlJ3JlIHRhbGtpbmcgYWJvdXQsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBCUEYgc3Vic3lzdGVtIHdpdGhpbiB0aGUga2VybmVsLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNvcmUgY2FwYWJpbGl0aWVzIG9yIGRlcGVuZGVuY2llcyBpdOKAmXMgc2V0dGluZyB1cC4gSXMgaXQgcmVsYXRlZCB0byB0cmFjaW5nLCBuZXR3b3JraW5nLCBzZWN1cml0eSwgb3IgcGVyaGFwcyBhIG1vcmUgZ2VuZXJhbCBlbmFibGluZyBmbGFnPyBXaGF0IGxldmVsIG9mIGdyYW51bGFyIGNvbnRyb2wgYXJlIHdlIGdldHRpbmcgYXQgdGhpcyBwb2ludCBpbiB0aGUgY29uZmlndXJhdGlvbj8gSSdtIGFudGljaXBhdGluZyBpdCdzIHByb2JhYmx5IGEgY3J1Y2lhbCBzZXR0aW5nLiBJJ20gcmVhZHkgdG8gZGlnZXN0IHRoZSBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgaXQsIGxvb2tpbmcgZm9yIGFueSBpbW1lZGlhdGUgaW1wbGljYXRpb25zIGZvciBob3cgQlBGIGlzIHVzZWQgb3IgbWFuYWdlZCB3aXRoaW4gYSBzeXN0ZW0ncyBjb25maWd1cmF0aW9uLiBJJ20ga2VlbiB0byBzcG90IGFueSBnb3RjaGFzIG9yIG5vbi1vYnZpb3VzIGRlZmF1bHRzIHRoYXQgbWlnaHQgY2F0Y2ggc29tZW9uZSBvdXQuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LCBsZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzIVxuXG5cbiIsIklucHV0VG9rZW5zIjozODc5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6Mjg6NTAuNjE0NTYyMDk0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHQjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgd2FudCB0aGUgQlBGIEpJVCBjb21waWxlciBlbmFibGVkIGJ5XFxuICAyMTpcXHQjIGRlZmF1bHQgZm9yIGtlcm5lbHMgdGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGggQlBGIEpJVCBzdXBwb3J0LlxcbiAgMjI6XFx0Y29uZmlnIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcXG4gIDIzOlxcdFxcdGJvb2xcXG4gIDI0OlxcdFxcbiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyODo1MC42MTQ2MzMxMTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxNjIyMTEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBCUEYgU3lzdGVtIENhbGwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYEJQRl9TWVNDQUxMYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGRyaXZlcyBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gQlBGIHN5c3RlbSBjYWxscy4gVGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIGEgbGl0dGxlIGZsYWcgd2VudCB1cCBpbiBteSBtaW5kLi4uIEkgcmVtZW1iZXIgc2VlaW5nIGBrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY2AgbWVudGlvbmVkLiBJIG5lZWQgdG8gYmUgc3VyZSBidXQgSSB0aGluayB0aGF0IGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gSXQncyB0aW1lIHRvIGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9uLlxuXG5JJ20gc3RhcnRpbmcgdG8gd29uZGVyLCB0aG91Z2gsIGFyZSB0aGVyZSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdCBwbGF5IGhlcmU/IElzIGBCUEZfU1lTQ0FMTGAgdGhlIG9ubHkgb25lIHRoYXQgZGljdGF0ZXMgd2hldGhlciB0aGUgZnVuY3Rpb25hbGl0eSBpbiB0aGUgYnBmIG5hbWVzcGFjZSBpcyBhY3RpdmU/IEJlc3QgdG8gZWxpbWluYXRlIGFueSBkaXN0cmFjdGlvbnMgc28gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYGtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jYCBmb3IgYW55IGFkZGl0aW9uYWwgYCNpZmRlZmAgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGNvbnRyb2wgcGFydHMgb2YgaXRzIGNvbXBpbGF0aW9uLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJIGRvbid0IHdhbnQgdG8gbWlzcyBhbnl0aGluZyBwb3RlbnRpYWxseSByZWxldmFudCB0byB0aGlzIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQzNSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6Mjg6NTQuMzMwODU4MjA5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk5MDI3NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXiNpZmRlZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz0yOD1zdGF0aWMgdm9pZCBuZXRuc19icGZfYXR0YWNoX3R5cGVfdW5uZWVkKGVudW0gbmV0bnNfYnBmX2F0dGFjaF90eXBlIHR5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0zMC1cXHRzd2l0Y2ggKHR5cGUpIHtcXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYzozMTojaWZkZWYgQ09ORklHX0lORVRcXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0zMi1cXHRjYXNlIE5FVE5TX0JQRl9TS19MT09LVVA6XFxuLS1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz00MT1zdGF0aWMgdm9pZCBuZXRuc19icGZfYXR0YWNoX3R5cGVfbmVlZChlbnVtIG5ldG5zX2JwZl9hdHRhY2hfdHlwZSB0eXBlKVxcbi0tXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtNDMtXFx0c3dpdGNoICh0eXBlKSB7XFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6NDQ6I2lmZGVmIENPTkZJR19JTkVUXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtNDUtXFx0Y2FzZSBORVROU19CUEZfU0tfTE9PS1VQOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyODo1NC41NDA3NjY5NTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1NDM3NzYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyB0aGUgU2NvcGUgb2YgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AuIEJlZm9yZSBJIGRpdmUgaW50byBhbnkgZGV0YWlsZWQgYW5hbHlzaXMsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNvbmZpcm0gaXRzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJcyB0aGlzIGZ1bmN0aW9uIHBvdGVudGlhbGx5IG9ubHkgYWN0aXZlIHVuZGVyIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBvciBmZWF0dXJlIGZsYWdzPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgaXQncyBuZXN0ZWQgd2l0aGluIGFueSBgI2lmZGVmYCBibG9ja3MuIFRoYXQncyBhbHdheXMgbXkgZmlyc3Qgc3RlcCDigJMgYXZvaWRpbmcgd2FzdGVkIGVmZm9ydCBieSBsb29raW5nIGF0IGEgZnVuY3Rpb24gdGhhdCBtaWdodCBub3QgZXZlbiBiZSBwYXJ0IG9mIHRoZSBhY3RpdmUgY29kZSBwYXRoLiBBIHF1aWNrIHNlYXJjaCB0aHJvdWdoIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBpcyBpbiBvcmRlci4gVGhpcyB3aWxsIGltbWVkaWF0ZWx5IGNsYXJpZnkgaXRzIHNjb3BlIGFuZCBsZXQgbWUgYmV0dGVyIHVuZGVyc3RhbmQgaG93IHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5OTQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyODo1Ny45OTUxNDg5MzVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzQyNjQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz0xNTU9c3RhdGljIHZvaWQgYnBmX25ldG5zX2xpbmtfZGVhbGxvYyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuLS1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0xNjItXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6MTYzOnN0YXRpYyBpbnQgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTE2NC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLFxcbi0tXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM9MjMwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9uZXRuc19saW5rX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTIzMy1cXHQuZGV0YWNoID0gYnBmX25ldG5zX2xpbmtfZGV0YWNoLFxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jOjIzNDpcXHQudXBkYXRlX3Byb2cgPSBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZyxcXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy0yMzUtXFx0LmZpbGxfbGlua19pbmZvID0gYnBmX25ldG5zX2xpbmtfZmlsbF9pbmZvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyODo1OC4xMDg1ODE5OTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY5NDEzOTA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb2RlIENoYW5nZSBmb3IgRnV6emluZyBXb3J0aGluZXNzKipcblxuT2theSwgaGVyZSdzIHdoYXQncyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZCBhcyBJIGV2YWx1YXRlIHRoaXMgcGF0Y2guIEZpcnN0LCBJIHNlZSB0aGlzIGNvZGUgY2hhbmdlIGlzbid0IHdyYXBwZWQgaW4gYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMuIEdvb2QuIE5vdywgdGhlIHByb21wdCBzYXlzIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjaGFuZ2VzIHRoYXQgZG9uJ3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LCBzcGVjaWZpY2FsbHk6IGNoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zLlxuXG5TbywgcmVwbGFjaW5nIGBtdXRleF9sb2NrYC9gbXV0ZXhfdW5sb2NrYCB3aXRoIGBndWFyZChtdXRleClg4oCUZG9lcyAqdGhhdCogZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93PyBJbml0aWFsbHksIEknZCBzYXkgbm8uIEl0J3MgYSByZWZhY3RvcmluZywgdXNpbmcgdGhlIGNsZWFudXAgYXR0cmlidXRlIHRvIGVuc3VyZSB0aGUgbXV0ZXggaXMgYXV0b21hdGljYWxseSB1bmxvY2tlZCBvbiBzY29wZSBleGl0LiBUaGUgaGlnaC1sZXZlbCBleGVjdXRpb24sIHRoZSBsb2NraW5nLCBjaGVja2luZywgdW5sb2NraW5nLCBhbmQgcmV0dXJuaW5nLCBzaG91bGQgYmUgaWRlbnRpY2FsLiBCdXQgdGhlbiBJIGdldCBodW5nIHVwIG9uIHRoZSBwaHJhc2luZzogXCJkb2VzIGl0IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdz9cIiBJdCdzICp0ZWNobmljYWxseSogY2hhbmdpbmcgKmhvdyogdGhlIGxvY2sgaXMgcmVsZWFzZWQsIHVzaW5nIGNvbXBpbGVyLWdlbmVyYXRlZCBjb2RlIGluc3RlYWQgb2YgZXhwbGljaXQgYGdvdG9gIGFuZCBgbXV0ZXhfdW5sb2NrYC5cblxuSG1tLi4uIGlzIHRoYXQgc3RpbGwgXCJub3QgZnVuY3Rpb25hbGx5IGFsdGVyaW5nIGV4ZWN1dGlvbiBmbG93P1wiIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGNhbGxzIG91dCAqbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zKi4gVGhpcyBpcyBhIHN0cnVjdHVyYWwgY2hhbmdlLCB1c2luZyBgZ3VhcmRgLiBOb3csIHRoZSBjcnVjaWFsIHBhcnQ6IEkgc3RhcnQgdG8gdGhpbmsgdGhhdCBldmVuIHdpdGggYSByZWZhY3RvcmluZywgYnVncyAqY2FuKiBiZSBpbnRyb2R1Y2VkLiBBIG1pc3BsYWNlZCBndWFyZCBvciBhIHJldHVybiBzdGF0ZW1lbnQgdGhhdCBieXBhc3NlcyB0aGUgaW50ZW5kZWQgdW5sb2NrIGNvdWxkIGNyZWF0ZSByZWFsIHByb2JsZW1zLlxuXG5MZXQncyBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGUgY29kZSBkaWZmOlxuXG5gYGBjXG4tXHRtdXRleF9sb2NrKFx1MDAyNm5ldG5zX2JwZl9tdXRleCk7XG4tXG4gXHRuZXQgPSBuZXRfbGluay1cdTAwM2VuZXQ7XG4tXHRpZiAoIW5ldCB8fCAhY2hlY2tfbmV0KG5ldCkpIHtcbitcdGlmICghbmV0IHx8ICFjaGVja19uZXQobmV0KSlcbiBcdFx0LyogTGluayBhdXRvLWRldGFjaGVkIG9yIG5ldG5zIGR5aW5nICovXG4tXHRcdHJldCA9IC1FTk9MSU5LO1xuLVx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHR9XG4rXHRcdHJldHVybiAtRU5PTElOSztcbmBgYFxuXG5BaGEhIFRoaXMgaXMgYSBjb250cm9sIGZsb3cgY2hhbmdlLiBJdCdzIG1vdmluZyBmcm9tIGEgYGdvdG8gb3V0X3VubG9ja2AgdG8gYSBgcmV0dXJuIC1FTk9MSU5LYC4gVGhhdCdzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSBpbiB0aGUgQyBjb2RlLCBldmVuIGlmIHRoZSBpbnRlbmRlZCAqYmVoYXZpb3IqIGlzIHRoZSBzYW1lLiBJdCBpcyB2ZXJ5IGxpa2VseSB0aGF0IGZ1enppbmcgaXMgdXNlZnVsIGhlcmUgdG8gZW5zdXJlIHRoZSBsb2NrIGlzIGFjdHVhbGx5IHJlbGVhc2VkLCBhbmQgbm8gZGVhZGxvY2tzIG9jY3VyLlxuXG5JIHNob3VsZCBhbHNvIGNoZWNrIGZvciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgbWFqb3Igb25lLCBidXQgd2hlcmUncyB0aGlzIGNvZGUgbG9jYXRlZD8gQWgsIGl0J3MgYGtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jYC4gRG9lcyB0aGF0IGltcGx5IGBDT05GSUdfTkVUYCBpcyByZXF1aXJlZD8gVGltZSB0byBjaGVjayB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIG1ha2Ugc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUxMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyOTowNi44MDI3MjU4NjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0ODU4NDA3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRfbmFtZXNwYWNlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTI2PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gb2ZmbG9hZC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG5ldF9uYW1lc3BhY2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjgtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSB0Y3gub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyOTowNy4xNTEzMTc2NjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM1MTUwNjU1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBCUEYgU3lzdGVtIENhbGwgYW5kIE5ldHdvcmsgTmFtZXNwYWNlIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgYSB0aG91Z2h0IGp1c3QgcG9wcGVkIGludG8gbXkgaGVhZDogYG5ldF9uYW1lc3BhY2UuY2AgdXNlcyBgc3RydWN0IG5ldGAsIHJpZ2h0PyBBbmQgdGhhdCdzIHVzdWFsbHkgYXNzb2NpYXRlZCB3aXRoIG5ldHdvcmsgZnVuY3Rpb25hbGl0eS4gRG9lcyB0aGF0IG1lYW4gdGhlIEJQRiBzeXNjYWxsLCBvciBhdCBsZWFzdCBwYXJ0cyBvZiBpdHMgaW1wbGVtZW50YXRpb24sIGltcGxpY2l0bHkgZGVwZW5kIG9uIGBDT05GSUdfTkVUYCBiZWluZyBlbmFibGVkPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGlzIGFzc3VtcHRpb24uXG5cbkxldCdzIGNoZWNrIHRoZSBLY29uZmlnLiBJJ2xsIGp1bXAgb3ZlciB0byBga2VybmVsL2JwZi9LY29uZmlnYC4gUmlnaHQsIGhlcmUgd2UgYXJlLiBPa2F5LCBsZXQncyBsb29rIGF0IGBDT05GSUdfQlBGX1NZU0NBTExgLiBBaGEhIEl0IHNlbGVjdHMgYE5FVF9TT0NLX01TR2AsIGBORVRfWEdSRVNTYCwgYW5kIGBQQUdFX1BPT0xgIGlmIGBORVRgIGlzIGVuYWJsZWQsIGJ1dCB0aGUgKnN5c2NhbGwqIGl0c2VsZiBkb2Vzbid0IGRpcmVjdGx5IGRlcGVuZCBvbiBgTkVUYC4gSW50ZXJlc3RpbmcuXG5cbkhvd2V2ZXIsIHRoZSBxdWVzdGlvbiByZW1haW5zOiBpcyBgbmV0X25hbWVzcGFjZS5jYCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGBDT05GSUdfTkVUYD8gVGhlIGBLY29uZmlnYCBkb2Vzbid0IHByb3ZpZGUgZW5vdWdoIGluZm9ybWF0aW9uIGFuZCB0aGUgYE1ha2VmaWxlYCBtaWdodCBiZSB3aGVyZSB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRha2VzIHBsYWNlLiBUaW1lIHRvIGNoZWNrIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBhZ2Fpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MjksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6Mjk6MTEuNTAyODI3NzIzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0b2JqLXkgOj0gY29yZS5vXFxuICAgMzpcXHRpZm5lcSAoJChDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04pLHkpXFxuICAgNDpcXHQjIF9fX2JwZl9wcm9nX3J1bigpIG5lZWRzIEdDU0UgZGlzYWJsZWQgb24geDg2OyBzZWUgMzE5M2MwODM2ZjIwMyBmb3IgZGV0YWlsc1xcbiAgIDU6XFx0Y2ZsYWdzLW5vZ2NzZS0kKENPTkZJR19YODYpJChDT05GSUdfQ0NfSVNfR0NDKSA6PSAtZm5vLWdjc2VcXG4gICA2OlxcdGVuZGlmXFxuICAgNzpcXHRDRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxuICAgODpcXHRcXG4gICA5OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXFxuICAxMDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbiAgMTE6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbiAgMTI6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxuICAxMzpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXFxuICAxNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXFxuICAxNTpcXHRvYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG4gIDE2OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGlzYXNtLm8gbXByb2cub1xcbiAgMTc6XFx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbiAgMTg6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbiAgMTk6XFx0aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG4gIDIwOlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG4gIDIxOlxcdGVuZGlmXFxuICAyMjpcXHRvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gZGlzcGF0Y2hlci5vXFxuICAyMzpcXHRpZmVxICgkKENPTkZJR19ORVQpLHkpXFxuICAyNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRldm1hcC5vXFxuICAyNTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hcC5vXFxuICAyNjpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG9mZmxvYWQub1xcbiAgMjc6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBuZXRfbmFtZXNwYWNlLm9cXG4gIDI4OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdGN4Lm9cXG4gIDI5OlxcdGVuZGlmXFxuICAzMDpcXHRpZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSlcXG4gIDMxOlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3RhY2ttYXAub1xcbiAgMzI6XFx0ZW5kaWZcXG4gIDMzOlxcdGlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXFxuICAzNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXFxuICAzNTpcXHRlbmRpZlxcbiAgMzY6XFx0b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICs9IGNncm91cC5vXFxuICAzNzpcXHRpZmVxICgkKENPTkZJR19JTkVUKSx5KVxcbiAgMzg6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSByZXVzZXBvcnRfYXJyYXkub1xcbiAgMzk6XFx0ZW5kaWZcXG4gIDQwOlxcdGlmZXEgKCQoQ09ORklHX1NZU0ZTKSx5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyOToxMS41MDI5NDg3MDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyOTc4ODM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwncyBCUEYgTmFtZXNwYWNlIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgaGVyZSdzIHdoYXQncyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZC4gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbmV0X25hbWVzcGFjZS5vYCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoYXQgaXQncyBjb25kaXRpb25hbCBvbiBgaWZlcSAoJChDT05GSUdfTkVUKSx5KWAuIFRoYXQgbWFrZXMgc2Vuc2UsIGJ1dCBpdCBhbHNvIG1lYW5zIHdlJ2xsIGRlZmluaXRlbHkgbmVlZCBib3RoIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgZW5hYmxlZC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgbGV0J3MgZGlnIGEgYml0IGRlZXBlci5cblxuSSdtIG5vdyBjaGVja2luZyBvdXQgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCBpbiBga2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmNgLiBBaCwgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgYW5kIGl0J3MgYXNzaWduZWQgdG8gYC51cGRhdGVfcHJvZ2Agd2l0aGluIGBicGZfbmV0bnNfbGlua19vcHNgLiBIYW5nIG9uLi4uIHRoaXMgaXMgd2hlbiB0aGUgcmVkIGZsYWcgd2VudCB1cC4gVGhlIHByb21wdCBpcyBoYW1tZXJpbmcgaG9tZSB0aGUgcG9pbnQgYWJvdXQgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIFN0YXRpYyBmdW5jdGlvbnMgZ2V0IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBhbmQgdGhleSBkb24ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIHdoaWNoIHRoZSBwcm9tcHQgc2VlbXMgdG8gYmUgcG9pbnRpbmcgb3V0IGFzIGEgcHJvYmxlbSBpbiB0aGUgY29udGV4dCBvZiB3aGF0IHdlIGFyZSBkb2luZy4gU28sIEkgaGF2ZSB0byBmaW5kIHdoZXJlIGBicGZfbmV0bnNfbGlua19vcHNgIGlzIHVzZWQsIHRvIHNlZSBpZiB3ZSBjYW4gdXNlIGFuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIHRoYXQgd291bGQgc29sdmUgdGhlIHByb2JsZW0gaGlnaGxpZ2h0ZWQgaW4gdGhlIHByb21wdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE4MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjI5OjE1LjgzMjc0MDE5NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2Nzc2MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9uZXRuc19saW5rX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYz0yMTc9c3RhdGljIHZvaWQgYnBmX25ldG5zX2xpbmtfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMjI5LVxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jOjIzMDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfbmV0bnNfbGlua19vcHMgPSB7XFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmMtMjMxLVxcdC5yZWxlYXNlID0gYnBmX25ldG5zX2xpbmtfcmVsZWFzZSxcXG4tLVxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTQ3MT1pbnQgbmV0bnNfYnBmX2xpbmtfY3JlYXRlKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy00OTctXFx0YnBmX2xpbmtfaW5pdChcXHUwMDI2bmV0X2xpbmstXFx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfTkVUTlMsXFxua2VybmVsL2JwZi9uZXRfbmFtZXNwYWNlLmM6NDk4OlxcdFxcdCAgICAgIFxcdTAwMjZicGZfbmV0bnNfbGlua19vcHMsIHByb2csIHR5cGUpO1xcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTQ5OS1cXHRuZXRfbGluay1cXHUwMDNlbmV0ID0gbmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyOToxNS45Mzk1MjA0NzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3NjM2ODM4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuXG5cbioqTXkgQW5hbHlzaXMgb2YgQlBGIExpbmsgQ3JlYXRpb24gYW5kIFVwZGF0ZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBgbmV0bnNfYnBmX2xpbmtfY3JlYXRlYCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYSBCUEYgbGluaywgYW5kIGl0IGxldmVyYWdlcyB0aGUgYGJwZl9uZXRuc19saW5rX29wc2Agc3RydWN0dXJlIHRvIG1hbmFnZSBpdHMgYmVoYXZpb3IuIFRoYXQncyBmYWlybHkgc3RhbmRhcmQuIFdoYXQgSSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIGlzIHRoZSAqdGltaW5nKiBvZiB0aGUgdXBkYXRlIG9wZXJhdGlvbi4gV2hlbiBkb2VzIGAudXBkYXRlX3Byb2dgIHdpdGhpbiB0aGF0IHN0cnVjdHVyZSBhY3R1YWxseSBnZXQgY2FsbGVkPyBJdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIGp1c3QgZnJvbSB0aGUgbmFtZSBvZiB0aGUgY3JlYXRlIGZ1bmN0aW9uLiBMb29raW5nIGludG8gdGhlIGtlcm5lbCBjb2RlLCBhaCwgaXQgYXBwZWFycyB0aGF0IGBicGZfbGlua191cGRhdGVgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IHRyaWdnZXJzIHRoZSBgLnVwZGF0ZV9wcm9nYCBjYWxsLiBJdCBsb29rcyBsaWtlIGBicGZfbGlua191cGRhdGVgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgbGluayB1cGRhdGVzIGluIHRoZSBCUEYgc3lzdGVtIGNhbGwuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB0aGUgbmV4dCB0aW1lIEkgaGF2ZSB0byBkZWJ1ZyBzb21lIGxpbmsgYmVoYXZpb3IuIFRoYXQncyBnb29kIHRvIGtub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NDcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyOToxOS44MTU4OTI1MTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NjQ3NDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVwZGF0ZV9wcm9nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTU5ODE9c3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMjEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAyMjpcXHRpZiAobGluay1cXHUwMDNlb3BzLVxcdTAwM2V1cGRhdGVfcHJvZylcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDIzOlxcdFxcdHJldCA9IGxpbmstXFx1MDAzZW9wcy1cXHUwMDNldXBkYXRlX3Byb2cobGluaywgbmV3X3Byb2csIG9sZF9wcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDI0LVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6Mjk6MTkuOTAwNTQ2NDY0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjcwODkxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBCUEYgTGluayBVcGRhdGUgQW5hbHlzaXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgbGlua191cGRhdGVgIGlzIHRoZSBlbnRyeSBwb2ludCB3aXRoaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gTm90IHVuZXhwZWN0ZWQsIHRoYXQncyB3aGVyZSBJJ2QgbG9vay4gSG93ZXZlciwgdGhlIGBzdGF0aWNgIGRlY2xhcmF0aW9uIG9uIGBsaW5rX3VwZGF0ZWAgaXMgaW1tZWRpYXRlbHkgcmFpc2luZyBhIGZsYWcuIElmIGl0J3MgYHN0YXRpY2AsIGl0J3Mgbm90IGRpcmVjdGx5IGV4cG9zZWQgYXMgYSBzeXN0ZW0gY2FsbCBpbiB0aGUgdXN1YWwgc2Vuc2UsIHdoaWNoIG1lYW5zIHNvbWV0aGluZyAqZWxzZSogaXMgY2FsbGluZyBpdC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHN0YWNrIHRvIGZpZ3VyZSBvdXQgdGhlIGluaXRpYXRpbmcgcGF0aC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGNydWNpYWwgaGVyZSB0byBhc3Nlc3MgdGhlIHVwZGF0ZSdzIG92ZXJhbGwgaW1wYWN0IGFuZCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBrbm93IGhvdyB0aGlzIHNwZWNpZmljIHVwZGF0ZSBmdW5jdGlvbiBpcyBnZXR0aW5nIGludm9rZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGVyZSB0aGlzIGNhbGwgaXMgY29taW5nIGZyb20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzOTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyOToyMy41Mjc2Mzg3NjFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNDQ3MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxpbmtfdXBkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTU4NDQ9c3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTQ5LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5NTA6c3RhdGljIGludCBsaW5rX3VwZGF0ZV9tYXAoc3RydWN0IGJwZl9saW5rICpsaW5rLCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTUxLXtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTQtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk1NTpcXHRuZXdfbWFwID0gYnBmX21hcF9nZXQoYXR0ci1cXHUwMDNlbGlua191cGRhdGUubmV3X21hcF9mZCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk1Ni1cXHRpZiAoSVNfRVJSKG5ld19tYXApKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk1OC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTU5OlxcdGlmIChhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5mbGFncyBcXHUwMDI2IEJQRl9GX1JFUExBQ0UpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTYwOlxcdFxcdG9sZF9tYXAgPSBicGZfbWFwX2dldChhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5vbGRfbWFwX2ZkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTYxLVxcdFxcdGlmIChJU19FUlIob2xkX21hcCkpIHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NjQtXFx0XFx0fVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5NjU6XFx0fSBlbHNlIGlmIChhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5vbGRfbWFwX2ZkKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk2Ni1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk3OC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTc5OiNkZWZpbmUgQlBGX0xJTktfVVBEQVRFX0xBU1RfRklFTEQgbGlua191cGRhdGUub2xkX3Byb2dfZmRcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTgwLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5ODE6c3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTgyLXtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTAtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk5MTpcXHRmbGFncyA9IGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLmZsYWdzO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTItXFx0aWYgKGZsYWdzIFxcdTAwMjYgfkJQRl9GX1JFUExBQ0UpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTk0LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5OTU6XFx0bGluayA9IGJwZl9saW5rX2dldF9mcm9tX2ZkKGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLmxpbmtfZmQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTYtXFx0aWYgKElTX0VSUihsaW5rKSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTktXFx0aWYgKGxpbmstXFx1MDAzZW9wcy1cXHUwMDNldXBkYXRlX21hcCkge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMDA6XFx0XFx0cmV0ID0gbGlua191cGRhdGVfbWFwKGxpbmssIGF0dHIpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMDEtXFx0XFx0Z290byBvdXRfcHV0X2xpbms7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDAzLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMDQ6XFx0bmV3X3Byb2cgPSBicGZfcHJvZ19nZXQoYXR0ci1cXHUwMDNlbGlua191cGRhdGUubmV3X3Byb2dfZmQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMDUtXFx0aWYgKElTX0VSUihuZXdfcHJvZykpIHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMTAtXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfUkVQTEFDRSkge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMTE6XFx0XFx0b2xkX3Byb2cgPSBicGZfcHJvZ19nZXQoYXR0ci1cXHUwMDNlbGlua191cGRhdGUub2xkX3Byb2dfZmQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMTItXFx0XFx0aWYgKElTX0VSUihvbGRfcHJvZykpIHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMTYtXFx0XFx0fVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMTc6XFx0fSBlbHNlIGlmIChhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5vbGRfcHJvZ19mZCkge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMTgtXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzNTQ9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ5NS1cXHRjYXNlIEJQRl9MSU5LX1VQREFURTpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NDk2OlxcdFxcdGVyciA9IGxpbmtfdXBkYXRlKFxcdTAwMjZhdHRyKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDk3LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyOToyMy42MjEwOTI3NzlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMDEzMzE1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgU3lzdGVtIENhbGwqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGBfX3N5c19icGZgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LCB0aGUgZmlyc3QgcGxhY2UgZXhlY3V0aW9uIGhpdHMgd2hlbiBhIEJQRiBwcm9ncmFtIGlzIGludm9rZWQuIEFuZCBmcm9tIHdoYXQgSSBzZWUgaW4gdGhlIGNvZGUsIGBsaW5rX3VwZGF0ZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZnJvbSBgX19zeXNfYnBmYC4gTm93LCBoYW5nIG9uIGEgc2Vjb25kLi4uIGlzIGBfX3N5c19icGZgIGFsc28gZGVmaW5lZCBhcyBhIGBzdGF0aWNgIGZ1bmN0aW9uPyBUaGF0J3MgaW50ZXJlc3RpbmcsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVjbGFyYXRpb24uIFN0YXRpYyBmdW5jdGlvbnMgaGF2ZSBsaW1pdGVkIHNjb3BlLCBhbmQgdGhhdCB3aWxsIGltcGFjdCBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgd2lkZXIgQlBGIHN5c3RlbS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZXhhY3QgZGVmaW5pdGlvbi4gTGV0IG1lIGRpZyBpbnRvIGBfX3N5c19icGZgLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzUxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6Mjk6MjYuOTMxMjI4NzMyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjY2NDI2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3N5c19icGZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9NjMxMz1zdGF0aWMgaW50IHByb2dfYXNzb2Nfc3RydWN0X29wcyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzNTMtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjM1NDpzdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM1NS1cXHRcXHQgICAgIGJwZnB0cl90IHVhdHRyX2NvbW1vbiwgdW5zaWduZWQgaW50IHNpemVfY29tbW9uKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjUzND1TWVNDQUxMX0RFRklORTUoYnBmLCBpbnQsIGNtZCwgdW5pb24gYnBmX2F0dHIgX191c2VyICosIHVhdHRyLCB1bnNpZ25lZCBpbnQsIHNpemUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NTM2LXtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NTM3OlxcdHJldHVybiBfX3N5c19icGYoY21kLCBVU0VSX0JQRlBUUih1YXR0ciksIHNpemUsIFVTRVJfQlBGUFRSKHVhdHRyX2NvbW1vbiksIHNpemVfY29tbW9uKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NTM4LX1cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTY1NTE9QlBGX0NBTExfMyhicGZfc3lzX2JwZiwgaW50LCBjbWQsIHVuaW9uIGJwZl9hdHRyICosIGF0dHIsIHUzMiwgYXR0cl9zaXplKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjU2Ni1cXHR9XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjU2NzpcXHRyZXR1cm4gX19zeXNfYnBmKGNtZCwgS0VSTkVMX0JQRlBUUihhdHRyKSwgYXR0cl9zaXplLCBLRVJORUxfQlBGUFRSKE5VTEwpLCAwKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NTY4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6Mjk6MjcuMDE3OTAyNDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTI4MTAyNzIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCUEYgRnVuY3Rpb24gRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBCUEYgZnV6emluZyB0YXNrLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgYmVzdCBmdW5jdGlvbnMgdG8gdGFyZ2V0LCBrZWVwaW5nIHRoZSBmdXp6aW5nIGZvY3VzZWQgYW5kIGVmZmVjdGl2ZS4gVGhlIHByb21wdCBnaXZlcyBjbGVhciBndWlkYW5jZTogcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhpcyBtYWtlcyBzZW5zZTsgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBhcmUga2V5IGZvciBkaXJlY3QgZnV6emluZy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IGZvciBgc3lzX2JwZmAsIGdpdmVuIGl0J3MgdGhlIHN5c2NhbGwgaXRzZWxmLiBCdXQgdGhhdCdzIHByb2JhYmx5IHRvbyBicm9hZC4gVGhlbiBJIHNlZSBgX19zeXNfYnBmYCwgd2hpY2ggaXMgc3RhdGljLCBzbyBkZWZpbml0ZWx5IG91dC4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgd2FybnMgYWdhaW5zdCB0aGVzZSBzdGF0aWMgaGVscGVycywgYXMgdGhleSdyZSB1c3VhbGx5IGlubGluZWQuXG5cblRoZW4sIHRoZXJlJ3MgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYC4gSSBzZWUgdGhhdCBpdCBpcyBzdGF0aWMsIHdoaWNoIGlzIGEgcmVkIGZsYWcuIEJ1dCB3YWl0LCBpdCdzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciAoYC51cGRhdGVfcHJvZ2ApLiBJZiBhIGZ1bmN0aW9uJ3MgYWRkcmVzcyBpcyB0YWtlbiBsaWtlIHRoaXMsIHRoZSBjb21waWxlciAqY2FuJ3QqIGlubGluZSBpdCwgcmlnaHQ/IEl0IG5lZWRzIGEgZGlzdGluY3Qgc3ltYm9sLiBTbywgZXZlbiB0aG91Z2ggaXQncyBzdGF0aWMsIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AgbWlnaHQgYmUgZnV6emFibGUuIFRoaXMgY291bGQgYmUgbXkgbWFpbiB0YXJnZXQuXG5cblRoZSBwcm9tcHQgZG9lcyBzYXkgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AgaXMgYSBkaXJlY3QgbW9kaWZpY2F0aW9uIHJlbGF0ZWQgdG8gdGhlIHBhdGNoLCBzbyB0aGlzIHdvdWxkIGJlIGlkZWFsLlxuXG5MZXQncyBjaGVjayBmb3IgYWx0ZXJuYXRpdmVzLiBgYnBmX2xpbmtfdXBkYXRlYCBpcyBzdGF0aWMsIHdoaWNoIGVsaW1pbmF0ZXMgaXQuIGBzeXNfYnBmYCBpcyBmYXIgdG9vIGdlbmVyaWMuIEknbGwgc3RpY2sgd2l0aCBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLlxuXG5JIGNvbnNpZGVyZWQgYG5ldG5zX2JwZl9saW5rX2NyZWF0ZWAgd2hpY2ggYWN0dWFsbHkgY3JlYXRlcyB0aGUgbGluay4gQnV0LCBpdCBzZWVtcyB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgIHdoaWNoIGxlYWRzIG1lIGJhY2sgdG8gaXQgYXMgdGhlIGJldHRlciBjaG9pY2UuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AgaXMgZGVmaW5pdGVseSAqbm90KiBpbmxpbmVkLiBJIGNhbiBjaGVjayBieSB2ZXJpZnlpbmcgdGhhdCB0aGUgY29tcGlsZXIgZGlkIG5vdCBjcmVhdGUgYSBjbG9uZSwgc28gdGhhdCB0aGUgYWRkcmVzcyBpcyBjb25zaXN0ZW50LlxuXG5Ob3csIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBrZXJuZWwgY29uZmlnIHJlcXVpcmVtZW50cy4gSSBrbm93IHRoaXMgaXMgcmVsYXRlZCB0byBuZXR3b3JraW5nIGFuZCBCUEYsIHNvIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYXJlIHByb2JhYmx5IHJlcXVpcmVkLiBBIHF1aWNrIHBlZWsgYXQgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBjb25maXJtcyB0aGlzLiBXZSdyZSBnb29kIHRoZXJlLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJJ2xsIHNjYW4gYGtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jYCBmb3IgYW55IG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMsIGJ1dCBJJ20gY29uZmlkZW50IGluIG15IGluaXRpYWwgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0MTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6Mjk6MzYuMjk4OTMzODAzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE5MjIzMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTI4PXN0YXRpYyB2b2lkIG5ldG5zX2JwZl9hdHRhY2hfdHlwZV91bm5lZWQoZW51bSBuZXRuc19icGZfYXR0YWNoX3R5cGUgdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTMwLVxcdHN3aXRjaCAodHlwZSkge1xcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jOjMxOiNpZmRlZiBDT05GSUdfSU5FVFxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jLTMyLVxcdGNhc2UgTkVUTlNfQlBGX1NLX0xPT0tVUDpcXG4tLVxcbmtlcm5lbC9icGYvbmV0X25hbWVzcGFjZS5jPTQxPXN0YXRpYyB2b2lkIG5ldG5zX2JwZl9hdHRhY2hfdHlwZV9uZWVkKGVudW0gbmV0bnNfYnBmX2F0dGFjaF90eXBlIHR5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy00My1cXHRzd2l0Y2ggKHR5cGUpIHtcXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYzo0NDojaWZkZWYgQ09ORklHX0lORVRcXG5rZXJuZWwvYnBmL25ldF9uYW1lc3BhY2UuYy00NS1cXHRjYXNlIE5FVE5TX0JQRl9TS19MT09LVVA6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjI5OjM2LjQzMDg2MzQyMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjY5MzIzMTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBicGZfbmV0bnNfbGlua191cGRhdGVfcHJvZ2AuIFRoZSBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyB0aGF0IHRoZSBmdW5jdGlvbiBpdHNlbGYgaXNuJ3QgZ3VhcmRlZCBieSBhbnkgYCNpZmRlZiBDT05GSUdfSU5FVGAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIFRoYXQncyBnb29kIHRvIGtlZXAgaW4gbWluZCwgYXMgaXQgbWVhbnMgaXQncyBub3Qgc3BlY2lmaWMgdG8gSVB2NCBvciBJUHY2LlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZSBjaGFuZ2UgaXRzZWxmLiBUaGUga2V5IGFsdGVyYXRpb24gaGVyZSBpcyB0aGUgcGxhY2VtZW50IG9mIHRoZSBgbmV0bnNfYnBmX211dGV4YCBsb2NrLiBCZWZvcmUsIHRoZSBgbXV0ZXhfbG9ja2Agd2FzIGNhbGxlZCAqYWZ0ZXIqIHNvbWUgaW5pdGlhbCBjaGVja3M6IGBvbGRfcHJvZ2AgYW5kIGBuZXdfcHJvZy1cdTAwM2V0eXBlYC4gTm93LCB3ZSBoYXZlIGBndWFyZChtdXRleCkoXHUwMDI2bmV0bnNfYnBmX211dGV4KWAgYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbi4gVGhpcyBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluaywgXCJGdW5jdGlvbmFsIGNoYW5nZSFcIiBhbmQgdGhhdCB0aGlzIG5lZWRzIHNlcmlvdXMgZnV6emluZywgYmVjYXVzZSBsb2NraW5nIGNoYW5nZXMgY2FuIGJlIHNvIGltcGFjdGZ1bC5cblxuTXkgdGhvdWdodCBwcm9jZXNzIGlzOiBUaGlzIGxvY2sgaXMgbm93IGhlbGQgKmR1cmluZyogdGhvc2UgYG9sZF9wcm9nYCBhbmQgYG5ld19wcm9nLVx1MDAzZXR5cGVgIGNoZWNrcy4gUHJldmlvdXNseSwgd2Ugd2VyZSBwb3RlbnRpYWxseSBhY2Nlc3NpbmcgYGxpbmstXHUwMDNlcHJvZ2Agd2l0aG91dCBob2xkaW5nIHRoZSBtdXRleC4gTm93IHdlJ3JlIG5vdC4gVGhpcyBjb3VsZCBiZSBhIGRlYWRsb2NrIG9wcG9ydHVuaXR5IGlmIHNvbWV0aGluZyBlbHNlIGlzIGhvbGRpbmcgdGhpcyBsb2NrIGFuZCBzdWJzZXF1ZW50bHkgY2FsbHMgdGhpcyBmdW5jdGlvbi4gSXQgY291bGQgYWxzbyBoYXZlIGJlZW4gYSByYWNlIGNvbmRpdGlvbiwgd2hlcmUgdGhlIGBsaW5rLVx1MDAzZXByb2dgIGRhdGEgbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkIG91dHNpZGUgdGhlIHByb3RlY3Rpb24gb2YgdGhlIGxvY2suXG5cblNwZWNpZmljYWxseSwgYGxpbmstXHUwMDNlcHJvZ2AgaXMgYWNjZXNzZWQgaW4gYm90aCB0aG9zZSBjaGVja3MuIFNvLCB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYSBwb3RlbnRpYWwgZGF0YSByYWNlIG9uIGBsaW5rLVx1MDAzZXByb2dgLCB3aGljaCBpcyBmaXhlZCBieSB0aGlzIHBhdGNoLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0J3MgYWx0ZXJpbmcgdGhlIGxvY2tpbmcgYmVoYXZpb3IgYW5kIHRoZXJlZm9yZSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93LCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBjb25jdXJyZW50IGFjY2Vzcy4gSXQncyBhIGNyaXRpY2FsIGNoYW5nZSB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCBhbnkgbmV3bHkgaW50cm9kdWNlZCBkZWFkbG9ja3Mgb3IgdW5pbnRlbmRlZCByYWNlIGNvbmRpdGlvbnMuXG5cbkknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQncyBtb2RpZmllZCwgd2hpY2ggaXQgaXMuIEFuZCBJJ20gc2VlaW5nIHRoaXMgY29kZSBpcyByZWxhdGVkIHRvIGBCUEZfU1lTQ0FMTGAgYW5kIGBORVRgLCBzbyB0aGF0IGdpdmVzIG1lIGFuIGluaXRpYWwgaWRlYSBvZiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEFuZCBmaW5hbGx5LCBJIHNob3VsZCBkb3VibGUgY2hlY2sgZGVwZW5kZW5jaWVzIGZvciBgQlBGX1NZU0NBTExgLiBJJ2xsIHNjYW4gdGhyb3VnaCBgaW5pdC9LY29uZmlnYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODI1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjI5OjQ1LjcwMDE5MDI3NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2Njc2MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMToyOTo0NS45MTY4Nzk0NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjIzNDkxMTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGNvbmZpZ3VyYXRpb24gaXMgc3RydWN0dXJlZC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAyNy4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBwcm9iYWJseSBkZWZpbmVkIHNvbWV3aGVyZSBpbiB0aGF0IGFyZWEuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZm91bmRhdGlvbmFsIHNldHRpbmdzIHJlbGF0ZWQgdG8gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIEJQRiBmdW5jdGlvbmFsaXR5LCBtYXliZSBzb21lIG9mIHRoZSBjb3JlIGZlYXR1cmUgdG9nZ2xlcywgb3IgcGVyaGFwcyB0aGUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHdoYXQncyAqY29uZmlndXJhYmxlKiBhbmQgaG93IHRoYXQgY29uZmlndXJhYmlsaXR5IGlzIHByZXNlbnRlZC4gTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE5MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjI5OjQ5LjE0MDM3MzQwNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjA6XFx0IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHdhbnQgdGhlIEJQRiBKSVQgY29tcGlsZXIgZW5hYmxlZCBieVxcbiAgMjE6XFx0IyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cXG4gIDIyOlxcdGNvbmZpZyBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUXFxuICAyMzpcXHRcXHRib29sXFxuICAyNDpcXHRcXG4gIDI1OlxcdG1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMjg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMjk6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzA6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzMTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDMyOlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDMzOlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzNDpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzU6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICAzNjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgMzc6XFx0XFx0ZGVmYXVsdCBuXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6Mjk6NDkuMTQwNDM3NzU1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTE1MjU1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgVW5jaGFydGVkIFRlcnJpdG9yeSoqXG5cbkFscmlnaHQsIG5vIFwiZGVwZW5kcyBvblwiIGhlcmUsIHRoYXQncyBnb29kLiBUaGF0J3MgYSBjbGVhbiBzbGF0ZS4gTm93LCBsZXQncyBzZWUuLi4gdGhlIG5leHQgbG9naWNhbCBzdGVwLCBnaXZlbiB0aGlzIGFic2VuY2Ugb2YgZGVwZW5kZW5jaWVzLCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgYE5FVGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBuZXR3b3JrLiBUaGlzIGludm9sdmVzIGxvb2tpbmcgZm9yIGFueSBpbW1lZGlhdGUgc2lnbmFscy4gVGhlIGBORVRgIHN0YXRlIGlzIHBhcmFtb3VudCBhbmQgd2lsbCBndWlkZSBtZSBhcyBJIG1vdmUgZm9yd2FyZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgYmVmb3JlIEkgY2FuIHByb2dyZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY4NywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6Mjk6NTIuMjkxOTcwNTIxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjcyMDM0OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVCRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWctNS1cXG5uZXQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUXFxubmV0L0tjb25maWctNy1cXHRib29sIFxcXCJOZXR3b3JraW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjI5OjUyLjYxOTE4NzUyNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTQzNjgxNzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgTG9ja2luZyBDaGFuZ2UgaW4gQlBGIE5ldGxpbmsgVXBkYXRlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoZSBrZXkgY29uZmlncyBhcmUgYE5FVGAgYW5kIGBCUEZfU1lTQ0FMTGAuIFRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBxdWl0ZSBhIGJpdCwgd2hpY2ggaXMgZ29vZC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dgLCBzbyB0aGF0J3Mgd2hlcmUgbXkgZm9jdXMgbmVlZHMgdG8gYmUuXG5cblRoZSBtZWF0IG9mIHRoZSBjaGFuZ2UgaXMgdGhpcyBzaGlmdCBmcm9tIG1hbnVhbGx5IG1hbmFnaW5nIHRoZSBsb2NrL3VubG9jayBhcm91bmQgdGhhdCBmdW5jdGlvbiB0byB1c2luZyBhIGBndWFyZChtdXRleClgLiBSaWdodCBhd2F5LCBJIHJlY29nbml6ZSB0aGlzIGlzIGEgY2hhbmdlIHRvIHRoZSBsb2NraW5nIHNjb3BlLiBTcGVjaWZpY2FsbHksIHRoZSBtdXRleCBpcyBub3cgYWNxdWlyZWQgKmJlZm9yZSogY2hlY2tpbmcgYGxpbmstXHUwMDNlcHJvZ2AsIHdoaWNoIHdhcyBoYW5kbGVkIHdpdGhvdXQgYSBsb2NrIHByZXZpb3VzbHkuIFRoYXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgdGhvc2UgYXJlIHRoZSBvbmVzIHRoYXQgZGVtYW5kIHRoZSBtb3N0IHNjcnV0aW55LlxuXG5HaXZlbiB0aGlzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcmV2aXNlZCBsb2NraW5nIHN0cmF0ZWd5IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgZGVhZGxvY2tzIG9yIHJlZ3Jlc3Npb25zLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZyB0byBleHBsb3JlIHRoZSBiZWhhdmlvciB1bmRlciBzdHJlc3MuXG5cbkxldCdzIGNhbGwgdGhpcyBgc2V0LXJlc3VsdHNgIGFuZCBtb3ZlIG9uIHRvIHRoZSBuZXh0IG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4OTEsIk91dHB1dFRva2VucyI6MTMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjI5OjU3Ljc2Mjg3MzcwMVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjE0MTgzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGJwZl9uZXRuc19saW5rX3VwZGF0ZV9wcm9nIHRvIHVzZSBndWFyZChtdXRleCkgaW5zdGVhZCBvZiBtYW51YWwgbG9jay91bmxvY2suIFRoaXMgY2hhbmdlcyB0aGUgbG9jayBzY29wZSwgYXMgdGhlIG11dGV4IGlzIG5vdyBhY3F1aXJlZCBiZWZvcmUgY2hlY2tpbmcgbGluay1cXHUwMDNlcHJvZywgd2hpY2ggd2FzIHByZXZpb3VzbHkgZG9uZSBsb2NrbGVzcy4gVGhpcyBmdW5jdGlvbmFsIGNoYW5nZSBpbiBsb2NraW5nIGJlaGF2aW9yIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGRlYWRsb2NrcyBvciByZWdyZXNzaW9ucyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgYnBmX25ldG5zX2xpbmtfdXBkYXRlX3Byb2cgdG8gdXNlIGd1YXJkKG11dGV4KSBpbnN0ZWFkIG9mIG1hbnVhbCBsb2NrL3VubG9jay4gVGhpcyBjaGFuZ2VzIHRoZSBsb2NrIHNjb3BlLCBhcyB0aGUgbXV0ZXggaXMgbm93IGFjcXVpcmVkIGJlZm9yZSBjaGVja2luZyBsaW5rLVxcdTAwM2Vwcm9nLCB3aGljaCB3YXMgcHJldmlvdXNseSBkb25lIGxvY2tsZXNzLiBUaGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGxvY2tpbmcgYmVoYXZpb3Igc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHJlZ3Jlc3Npb25zIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbrg6g[1] Phase: Succeeded StartedAt: 2026-07-28 21:30:08 +0000 UTC FinishedAt: 2026-07-28 21:30:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-28 21:30:08 +0000 UTC FinishedAt: 2026-07-28 21:30:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[2] Phase: Succeeded StartedAt: 2026-07-28 21:30:08 +0000 UTC FinishedAt: 2026-07-29 01:24:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-28 21:30:08 +0000 UTC FinishedAt: 2026-07-29 01:24:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-28 21:30:08 +0000 UTC FinishedAt: 2026-07-28 21:30:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-28 21:30:08 +0000 UTC FinishedAt: 2026-07-28 21:30:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbrg6g/series-workflowbrg6g-convert-artifact-2287321333/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-28 21:30:19 +0000 UTC FinishedAt: 2026-07-28 21:54:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-28 21:30:19 +0000 UTC FinishedAt: 2026-07-28 21:54:27 +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:*eb64345d-035d-4eba-9f4d-ebb2cf1cad83,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-workflowbrg6g/series-workflowbrg6g-convert-artifact-2287321333/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": "e99e5d03-c2d7-4a3e-a814-183fcbba847e", "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-workflowbrg6g/series-workflowbrg6g-build-action-3430488795/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-28 21:30:19 +0000 UTC FinishedAt: 2026-07-28 21:54:17 +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:*eb64345d-035d-4eba-9f4d-ebb2cf1cad83,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-workflowbrg6g/series-workflowbrg6g-convert-artifact-2287321333/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": "e99e5d03-c2d7-4a3e-a814-183fcbba847e", "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-workflowbrg6g/series-workflowbrg6g-build-action-3430488795/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-28 21:54:27 +0000 UTC FinishedAt: 2026-07-28 21:54:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-28 21:54:27 +0000 UTC FinishedAt: 2026-07-28 21:54:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-28 21:54:27 +0000 UTC FinishedAt: 2026-07-28 21:54:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-28 21:54:27 +0000 UTC FinishedAt: 2026-07-28 21:54:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbrg6g/series-workflowbrg6g-convert-artifact-1191707728/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-28 21:54:37 +0000 UTC FinishedAt: 2026-07-28 21:56:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-28 21:54:37 +0000 UTC FinishedAt: 2026-07-28 21:56:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e99e5d03-c2d7-4a3e-a814-183fcbba847e,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-workflowbrg6g/series-workflowbrg6g-build-action-3430488795/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-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-28 21:56:47 +0000 UTC FinishedAt: 2026-07-28 21:56:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-28 21:56:47 +0000 UTC FinishedAt: 2026-07-28 21:56:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-28 21:56:47 +0000 UTC FinishedAt: 2026-07-28 22:18:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-28 21:56:47 +0000 UTC FinishedAt: 2026-07-28 22:18:53 +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:*eb64345d-035d-4eba-9f4d-ebb2cf1cad83,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-workflowbrg6g/series-workflowbrg6g-convert-artifact-1191707728/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": "866521ed-e6e3-4335-87fe-8401cef682ca", "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-workflowbrg6g/series-workflowbrg6g-build-action-2393686476/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-28 21:56:47 +0000 UTC FinishedAt: 2026-07-28 22:18:43 +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:*eb64345d-035d-4eba-9f4d-ebb2cf1cad83,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-workflowbrg6g/series-workflowbrg6g-convert-artifact-1191707728/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": "866521ed-e6e3-4335-87fe-8401cef682ca", "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-workflowbrg6g/series-workflowbrg6g-build-action-2393686476/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-28 22:18:53 +0000 UTC FinishedAt: 2026-07-28 22:18:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-28 22:18:53 +0000 UTC FinishedAt: 2026-07-28 22:18:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-28 22:18:53 +0000 UTC FinishedAt: 2026-07-28 22:20:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-28 22:18:53 +0000 UTC FinishedAt: 2026-07-28 22:20:49 +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:*866521ed-e6e3-4335-87fe-8401cef682ca,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-workflowbrg6g/series-workflowbrg6g-build-action-2393686476/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-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-28 22:20:58 +0000 UTC FinishedAt: 2026-07-29 01:24:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-28 22:20:58 +0000 UTC FinishedAt: 2026-07-29 01:24:44 +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"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"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:*e99e5d03-c2d7-4a3e-a814-183fcbba847e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*866521ed-e6e3-4335-87fe-8401cef682ca,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-workflowbrg6g/series-workflowbrg6g-build-action-3430488795/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-workflowbrg6g/series-workflowbrg6g-build-action-2393686476/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-28 22:20:58 +0000 UTC FinishedAt: 2026-07-28 22:21:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-28 22:20:58 +0000 UTC FinishedAt: 2026-07-28 22:21:03 +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"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"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-workflowbrg6g/series-workflowbrg6g-convert-artifact-3669020745/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-28 22:20:58 +0000 UTC FinishedAt: 2026-07-28 22:20:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-28 22:20:58 +0000 UTC FinishedAt: 2026-07-28 22:20:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-28 22:20:58 +0000 UTC FinishedAt: 2026-07-28 22:20:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-28 22:21:09 +0000 UTC FinishedAt: 2026-07-29 01:24:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrg6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_netns_link_update_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"d17f82e4-ef0d-4260-8175-a7cf2a64e924","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-28 22:21:09 +0000 UTC FinishedAt: 2026-07-29 01:24:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e99e5d03-c2d7-4a3e-a814-183fcbba847e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*866521ed-e6e3-4335-87fe-8401cef682ca,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-workflowbrg6g/series-workflowbrg6g-build-action-3430488795/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-workflowbrg6g/series-workflowbrg6g-build-action-2393686476/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-workflowbrg6g/series-workflowbrg6g-convert-artifact-3669020745/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,}