Name: series-workflow65nc5 Phase: Succeeded StartedAt: 2026-08-23 14:27:38 +0000 UTC FinishedAt: 2026-08-23 18:29:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[0] Phase: Succeeded StartedAt: 2026-08-23 14:27:38 +0000 UTC FinishedAt: 2026-08-23 14:47:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[0].run-triage Phase: Succeeded StartedAt: 2026-08-23 14:27:38 +0000 UTC FinishedAt: 2026-08-23 14:47:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "fedc88e38ce979a720cd2de042578cb5df3dc8de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "fedc88e38ce979a720cd2de042578cb5df3dc8de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "8ab10b28-49cb-4e3f-a435-1066a6b7a5c1" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_prog_stream_read", "bpf_stream_vprintk", "bpf_stream_stage_printk" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfc3RyZWFtX3JlYWQmIzM0OywKICAgICYjMzQ7YnBmX3N0cmVhbV92cHJpbnRrJiMzNDssCiAgICAmIzM0O2JwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNldmVyYWwgbG9naWMgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgYnVncyBpbiB0aGUgQlBGIHN0cmVhbSBpbXBsZW1lbnRhdGlvbjpcbjEuIEl0IGZpeGVzIGEgY2FwYWNpdHkgbGVhayB3aGVyZSBvdmVyc2l6ZWQgb3IgdHJ1bmNhdGVkIHN0cmluZ3Mgd291bGQgY29uc3VtZSBzdHJlYW0gY2FwYWNpdHkgYnV0IGZhaWwgdG8gYWxsb2NhdGUgYW4gZWxlbWVudCwgcGVybWFuZW50bHkgcmVkdWNpbmcgYXZhaWxhYmxlIGNhcGFjaXR5LlxuMi4gSXQgcHJldmVudHMgdGhlIGluY2x1c2lvbiBvZiB0aGUgdHJhaWxpbmcgTlVMIGJ5dGUgaW4gdGhlIHN0cmVhbSBwYXlsb2FkIHdoZW4gdGhlIGZvcm1hdHRlZCBzdHJpbmcgZXhhY3RseSBtYXRjaGVzIHRoZSBidWZmZXIgc2l6ZS5cbjMuIEl0IGZpeGVzIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgdG8gb25seSBpbmNyZW1lbnQgdGhlIHN0cmVhbSBsZW5ndGggaWYgdGhlIHN0cmluZyB3YXMgc3VjY2Vzc2Z1bGx5IHB1c2hlZC5cbjQuIEl0IGNvcnJlY3RzIHRoZSBoYW5kbGluZyBvZiBwYXJ0aWFsIGBjb3B5X3RvX3VzZXJgIGZhdWx0cyBpbiBgYnBmX3N0cmVhbV9yZWFkYCB0byBwcm9wZXJseSBhY2NvdW50IGZvciBzdWNjZXNzZnVsbHkgY29waWVkIGJ5dGVzLlxuXG5Ob25lIG9mIHRoZXNlIGlzc3VlcyBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgc3RyZWFtIGVsZW1lbnRzIGFyZSBhbGxvY2F0ZWQgd2l0aCBgX19HRlBfWkVST2AsIGFuZCB0aGUgc3RyaW5ncyBjb3BpZWQgaW50byB0aGVtIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgYnN0cl9wcmludGZgIG9yIGB2c2NucHJpbnRmYC4gVGhlIGNvcGllZCBsZW5ndGggaXMgc3RyaWN0bHkgYm91bmRlZCBieSB0aGUgaW5pdGlhbGl6ZWQgc3RyaW5nIGxlbmd0aC4gVGhlIGJ1Z3MgZml4ZWQgYXJlIGxvZ2ljIGVycm9ycywgcmVzb3VyY2UgbGVha3MsIGFuZCBpbmNvcnJlY3QgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgdGhlIGFkZGVkIHNlbGZ0ZXN0cyBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgdG9vbHMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBtdWx0aXBsZSBidWdzIGluIHRoZSBCUEYgc3RyZWFtIHN1YnN5c3RlbSwgaW5jbHVkaW5nIGFuIG9mZi1ieS1vbmUgZXJyb3IgaW4gbGVuZ3RoIGNoZWNraW5nLCBhIGNhcGFjaXR5IGxlYWsgb24gcHVzaCBmYWlsdXJlLCBpbmNvcnJlY3QgaGFuZGxpbmcgb2YgcGFydGlhbCByZWFkcyB0byB1c2VyIHNwYWNlLCBtaXNzaW5nIHRydW5jYXRpb24gY2hlY2tzIGluIHZwcmludGssIGFuZCBpbmNvcnJlY3QgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiBzdGFnZV9wcmludGsuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgKEJQRiBzeXNjYWxsIGFuZCBCUEYgcHJvZ3JhbXMpIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUyNDZhZmRlNDY5NmZjNjlmNzMyOTNhYWIzODg1MDk4MTA1M2U1MDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAxNDo0Mzo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0cmVhbS5jIGIva2VybmVsL2JwZi9zdHJlYW0uY1xuaW5kZXggYmU5Y2U5OGU5NDY5Mi4uN2E1YzNhYzg2NzZiOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3RyZWFtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3RyZWFtLmNcbkBAIC0yMiwxMSAmIzQzOzIyLDExIEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICpicGZfc3RyZWFtX2VsZW1fYWxsb2MoaW50IGxlbilcbiBcdHNpemVfdCBhbGxvY19zaXplO1xuIFxuIFx0Lypcbi1cdCAqIExlbmd0aCBkZW5vdGVzIHRoZSBhbW91bnQgb2YgZGF0YSB0byBiZSB3cml0dGVuIGFzIHBhcnQgb2Ygc3RyZWFtIGVsZW1lbnQsXG4tXHQgKiB0aHVzIGluY2x1ZGVzICYjMzk7XFwwJiMzOTsgYnl0ZS4gV2UmIzM5O3JlIGNhcHBlZCBieSBob3cgbXVjaCBicGZfYnByaW50Zl9idWZmZXJzIGNhblxuLVx0ICogYWNjb21vZGF0ZSwgdGhlcmVmb3JlIGRlbnkgYWxsb2NhdGlvbnMgdGhhdCB3b24mIzM5O3QgZml0IGludG8gdGhlbS5cbiYjNDM7XHQgKiBMZW5ndGggaXMgdGhlIHBheWxvYWQgcHVzaGVkIGludG8gdGhlIHN0cmVhbSwgZXhjbHVkaW5nIHRoZVxuJiM0MztcdCAqIHRyYWlsaW5nIE5VTCBvZiB0aGUgYnByaW50ZiBidWZmZXIuIFJlamVjdCBhbnl0aGluZyB0aGF0IGNhbm5vdFxuJiM0MztcdCAqIGZpdCB3aXRob3V0IGNvcHlpbmcgdGhhdCBOVUwgaW50byB0aGUgc3RyZWFtIGVsZW1lbnQuXG4gXHQgKi9cbi1cdGlmIChsZW4gXHUwMDNjIDAgfHwgbGVuIFx1MDAzZSBtYXhfbGVuKVxuJiM0MztcdGlmIChsZW4gXHUwMDNjIDAgfHwgbGVuIFx1MDAzZT0gbWF4X2xlbilcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRhbGxvY19zaXplID0gb2Zmc2V0b2Yoc3RydWN0IGJwZl9zdHJlYW1fZWxlbSwgc3RyW2xlbl0pO1xuQEAgLTY4LDEwICYjNDM7NjgsOCBAQCBzdGF0aWMgaW50IGJwZl9zdHJlYW1fY29uc3VtZV9jYXBhY2l0eShzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBpbnQgbGVuKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICplbGVtKVxuJiM0MztzdGF0aWMgdm9pZCBicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgaW50IGxlbilcbiB7XG4tXHRpbnQgbGVuID0gZWxlbS1cdTAwM2V0b3RhbF9sZW47XG4tXG4gXHRhdG9taWNfc3ViKGxlbiwgXHUwMDI2c3RyZWFtLVx1MDAzZWNhcGFjaXR5KTtcbiB9XG4gXG5AQCAtNzksNyAmIzQzOzc3LDE0IEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBjb25zdCBjaGFyICpzdHIsIGludCBsXG4ge1xuIFx0aW50IHJldCA9IGJwZl9zdHJlYW1fY29uc3VtZV9jYXBhY2l0eShzdHJlYW0sIGxlbik7XG4gXG4tXHRyZXR1cm4gcmV0ID86IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihcdTAwMjZzdHJlYW0tXHUwMDNlbG9nLCBzdHIsIGxlbik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihcdTAwMjZzdHJlYW0tXHUwMDNlbG9nLCBzdHIsIGxlbik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJlYW0sIGxlbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX3N0cmVhbSAqYnBmX3N0cmVhbV9nZXQoZW51bSBicGZfc3RyZWFtX2lkIHN0cmVhbV9pZCwgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxuQEAgLTE2Miw2ICYjNDM7MTY3LDcgQEAgc3RhdGljIGludCBicGZfc3RyZWFtX3JlYWQoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgdm9pZCBfX3VzZXIgKmJ1ZiwgaW50IGxlbilcbiBcbiBcdHdoaWxlIChyZW1fbGVuKSB7XG4gXHRcdGludCBwb3MgPSBsZW4gLSByZW1fbGVuO1xuJiM0MztcdFx0aW50IGNodW5rLCBuO1xuIFx0XHRib29sIGNvbnQ7XG4gXG4gXHRcdG5vZGUgPSBicGZfc3RyZWFtX2JhY2tsb2dfcGVlayhzdHJlYW0pO1xuQEAgLTE3NSwyMCAmIzQzOzE4MSwyMSBAQCBzdGF0aWMgaW50IGJwZl9zdHJlYW1fcmVhZChzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCB2b2lkIF9fdXNlciAqYnVmLCBpbnQgbGVuKVxuIFxuIFx0XHRjb25zX2xlbiA9IGVsZW0tXHUwMDNlY29uc3VtZWRfbGVuO1xuIFx0XHRjb250ID0gYnBmX3N0cmVhbV9jb25zdW1lX2VsZW0oZWxlbSwgXHUwMDI2cmVtX2xlbikgPT0gZmFsc2U7XG4tXG4tXHRcdHJldCA9IGNvcHlfdG9fdXNlcihidWYgJiM0MzsgcG9zLCBlbGVtLVx1MDAzZXN0ciAmIzQzOyBjb25zX2xlbixcbi1cdFx0XHRcdCAgIGVsZW0tXHUwMDNlY29uc3VtZWRfbGVuIC0gY29uc19sZW4pO1xuLVx0XHQvKiBSZXN0b3JlIGluIGNhc2Ugb2YgZXJyb3IuICovXG4tXHRcdGlmIChyZXQpIHtcbi1cdFx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0XHRcdGVsZW0tXHUwMDNlY29uc3VtZWRfbGVuID0gY29uc19sZW47XG4mIzQzO1x0XHRjaHVuayA9IGVsZW0tXHUwMDNlY29uc3VtZWRfbGVuIC0gY29uc19sZW47XG4mIzQzO1xuJiM0MztcdFx0biA9IGNvcHlfdG9fdXNlcihidWYgJiM0MzsgcG9zLCBlbGVtLVx1MDAzZXN0ciAmIzQzOyBjb25zX2xlbiwgY2h1bmspO1xuJiM0MztcdFx0aWYgKG4pIHtcbiYjNDM7XHRcdFx0LyogS2VlcCBhbnkgc3VjY2Vzc2Z1bGx5IGNvcGllZCBieXRlczsgLUVGQVVMVCBvbmx5IGlmIG5vbmUuICovXG4mIzQzO1x0XHRcdGVsZW0tXHUwMDNlY29uc3VtZWRfbGVuIC09IG47XG4mIzQzO1x0XHRcdHJlbV9sZW4gJiM0Mzs9IG47XG4mIzQzO1x0XHRcdHJldCA9IChsZW4gPT0gcmVtX2xlbikgPyAtRUZBVUxUIDogMDtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuIFx0XHRpZiAoY29udClcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0YnBmX3N0cmVhbV9iYWNrbG9nX3BvcChzdHJlYW0pO1xuLVx0XHRicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RyZWFtLCBlbGVtKTtcbiYjNDM7XHRcdGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJlYW0sIGVsZW0tXHUwMDNldG90YWxfbGVuKTtcbiBcdFx0YnBmX3N0cmVhbV9mcmVlX2VsZW0oZWxlbSk7XG4gXHR9XG4gXG5AQCAtMjM4LDYgJiM0MzsyNDUsMTEgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJlYW1fdnByaW50ayhpbnQgc3RyZWFtX2lkLCBjb25zdCBjaGFyICpmbXRfX3N0ciwgY29uc3Qgdm9cbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldCA9IGJzdHJfcHJpbnRmKGRhdGEuYnVmLCBNQVhfQlBSSU5URl9CVUYsIGZtdF9fc3RyLCBkYXRhLmJpbl9hcmdzKTtcbiYjNDM7XHQvKiBUcnVuY2F0aW9uOiByZWplY3QgYmVmb3JlIGNhcGFjaXR5IGNoYXJnZSAobm90IC1FTk9NRU0pLiAqL1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSBNQVhfQlBSSU5URl9CVUYpIHtcbiYjNDM7XHRcdGJwZl9icHJpbnRmX2NsZWFudXAoXHUwMDI2ZGF0YSk7XG4mIzQzO1x0XHRyZXR1cm4gLUUyQklHO1xuJiM0MztcdH1cbiBcdC8qIEV4Y2x1ZGUgTlVMTCBieXRlIGR1cmluZyBwdXNoLiAqL1xuIFx0cmV0ID0gYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJlYW0sIGRhdGEuYnVmLCByZXQpO1xuIFx0YnBmX2JwcmludGZfY2xlYW51cChcdTAwMjZkYXRhKTtcbkBAIC0zMTEsMTcgJiM0MzszMjMsMTggQEAgaW50IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXG4ge1xuIFx0c3RydWN0IGJwZl9icHJpbnRmX2J1ZmZlcnMgKmJ1ZjtcbiBcdHZhX2xpc3QgYXJncztcbi1cdGludCByZXQ7XG4mIzQzO1x0aW50IGxlbiwgcmV0O1xuIFxuIFx0aWYgKGJwZl90cnlfZ2V0X2J1ZmZlcnMoXHUwMDI2YnVmKSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiBcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XG4tXHRyZXQgPSB2c25wcmludGYoYnVmLVx1MDAzZWJ1ZiwgQVJSQVlfU0laRShidWYtXHUwMDNlYnVmKSwgZm10LCBhcmdzKTtcbiYjNDM7XHRsZW4gPSB2c2NucHJpbnRmKGJ1Zi1cdTAwM2VidWYsIEFSUkFZX1NJWkUoYnVmLVx1MDAzZWJ1ZiksIGZtdCwgYXJncyk7XG4gXHR2YV9lbmQoYXJncyk7XG4tXHRzcy1cdTAwM2VsZW4gJiM0Mzs9IHJldDtcbiBcdC8qIEV4Y2x1ZGUgTlVMTCBieXRlIGR1cmluZyBwdXNoLiAqL1xuLVx0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFx1MDAyNnNzLVx1MDAzZWxvZywgYnVmLVx1MDAzZWJ1ZiwgcmV0KTtcbiYjNDM7XHRyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXHUwMDI2c3MtXHUwMDNlbG9nLCBidWYtXHUwMDNlYnVmLCBsZW4pO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0c3MtXHUwMDNlbGVuICYjNDM7PSBsZW47XG4gXHRicGZfcHV0X2J1ZmZlcnMoKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbmluZGV4IGMzY2NlNWMyOTJiZGQuLjg3MTcwZGNhZDNhZDggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbkBAIC01OCw2ICYjNDM7NTgsNzEgQEAgdm9pZCB0ZXN0X3N0cmVhbV9zeXNjYWxsKHZvaWQpXG4gXHRzdHJlYW1fX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuJiM0Mzt2b2lkIHRlc3Rfc3RyZWFtX292ZXJzaXplKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XG4mIzQzO1x0c3RydWN0IHN0cmVhbSAqc2tlbDtcbiYjNDM7XHRpbnQgcmV0LCBwcm9nX2ZkO1xuJiM0MztcdGNoYXIgYnVmWzhdID0ge307XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBzdHJlYW1fX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c3RyZWFtX19vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9vdmVyc2l6ZSk7XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nX2ZkLCBcdTAwMjZvcHRzKTtcbiYjNDM7XHRBU1NFUlRfT0socmV0LCBcJiMzNDtvdmVyc2l6ZSBydW5cJiMzNDspO1xuJiM0MztcdEFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXCYjMzQ7b3ZlcnNpemUgcmV0dmFsXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogT3ZlcnNpemVkIHB1c2ggbXVzdCBub3QgcGVybWFuZW50bHkgY29uc3VtZSBjYXBhY2l0eSBvbiB0aGlzIHByb2cuICovXG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfc3RyZWFtX3JlYWQocHJvZ19mZCwgQlBGX1NUUkVBTV9TVERPVVQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9FUShyZXQsIDMsIFwmIzM0O2J5dGVzIGFmdGVyIG92ZXJzaXplXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfT0sobWVtY21wKGJ1ZiwgXCYjMzQ7Zm9vXCYjMzQ7LCAzKSwgXCYjMzQ7cGF5bG9hZCBhZnRlciBvdmVyc2l6ZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHN0cmVhbV9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X3N0cmVhbV9wYXJ0aWFsX3JlYWQodm9pZClcbiYjNDM7e1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbiYjNDM7XHRzdHJ1Y3Qgc3RyZWFtICpza2VsO1xuJiM0MztcdGludCByZXQsIHByb2dfZmQ7XG4mIzQzO1x0bG9uZyBwYWdlX3NpemU7XG4mIzQzO1x0Y2hhciAqcGFnZSwgKmJ1ZjtcbiYjNDM7XHRjaGFyIHJlc3RbOF0gPSB7fTtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHN0cmVhbV9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtzdHJlYW1fX29wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3Muc3RyZWFtX3N5c2NhbGwpO1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocHJvZ19mZCwgXHUwMDI2b3B0cyk7XG4mIzQzO1x0QVNTRVJUX09LKHJldCwgXCYjMzQ7cmV0XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfT0sob3B0cy5yZXR2YWwsIFwmIzM0O3JldHZhbFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTtcbiYjNDM7XHRwYWdlID0gbW1hcChOVUxMLCBwYWdlX3NpemUgKiAyLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuJiM0MztcdFx0ICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuJiM0MztcdGlmICghQVNTRVJUX05FUShwYWdlLCBNQVBfRkFJTEVELCBcJiMzNDttbWFwXCYjMzQ7KSkge1xuJiM0MztcdFx0c3RyZWFtX19kZXN0cm95KHNrZWwpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XHQvKiBMZWF2ZSBvbmx5IHRoZSBmaXJzdCBwYWdlIG1hcHBlZCBzbyBhIHN0cmFkZGxpbmcgY29weSBmYXVsdHMuICovXG4mIzQzO1x0QVNTRVJUX09LKG11bm1hcChwYWdlICYjNDM7IHBhZ2Vfc2l6ZSwgcGFnZV9zaXplKSwgXCYjMzQ7bXVubWFwIHNlY29uZCBwYWdlXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0YnVmID0gcGFnZSAmIzQzOyBwYWdlX3NpemUgLSAxO1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX3N0cmVhbV9yZWFkKHByb2dfZmQsIEJQRl9TVFJFQU1fU1RET1VULCBidWYsIDMsIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9FUShyZXQsIDEsIFwmIzM0O3BhcnRpYWwgYnl0ZXNcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShidWZbMF0sICYjMzk7ZiYjMzk7LCBcJiMzNDtmaXJzdCBieXRlXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfc3RyZWFtX3JlYWQocHJvZ19mZCwgQlBGX1NUUkVBTV9TVERPVVQsIHJlc3QsIHNpemVvZihyZXN0KSwgTlVMTCk7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgMiwgXCYjMzQ7cmVtYWluaW5nIGJ5dGVzXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfT0sobWVtY21wKHJlc3QsIFwmIzM0O29vXCYjMzQ7LCAyKSwgXCYjMzQ7cmVtYWluaW5nIGRhdGFcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRtdW5tYXAocGFnZSwgcGFnZV9zaXplKTtcbiYjNDM7XHRzdHJlYW1fX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdGVzdF9hZGRyZXNzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgdW5zaWduZWQgbG9uZyAqZmF1bHRfYWRkcl9wKVxuIHtcbiBcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbmluZGV4IDZmOTk5YmE5NTFhM2MuLjliOTdmNWUwMWI4M2EgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xuQEAgLTM2LDcgJiM0MzszNiwxMiBAQCBzdHJ1Y3Qge1xuIH0gYXJyYXkgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiBcbiAjZGVmaW5lIEVOT1NQQyAyOFxuJiM0MzsjZGVmaW5lIEUyQklHIDdcbiAjZGVmaW5lIF9TVFIgXCYjMzQ7eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4XCYjMzQ7XG4mIzQzOyNkZWZpbmUgX1g2NCBcJiMzNDt4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4XCYjMzQ7XG4mIzQzOy8qIDEwMjQgYnl0ZXM6IHRydW5jYXRlZCBieSBic3RyX3ByaW50ZiwgbXVzdCByZXR1cm4gLUUyQklHLiAqL1xuJiM0MzsjZGVmaW5lIF9CSUdfU1RSIChfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgXFxcbiYjNDM7XHRcdCAgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0KVxuIFxuIGludCBzaXplO1xuIHU2NCBmYXVsdF9hZGRyO1xuQEAgLTExNyw2ICYjNDM7MTIyLDE5IEBAIGludCBzdHJlYW1fc3lzY2FsbCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiYjNDM7aW50IHN0cmVhbV9vdmVyc2l6ZSh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBicGZfc3RyZWFtX3ByaW50ayhCUEZfU1RET1VULCBfQklHX1NUUik7XG4mIzQzO1x0aWYgKHJldCAhPSAtRTJCSUcpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYnBmX3N0cmVhbV9wcmludGsoQlBGX1NURE9VVCwgXCYjMzQ7Zm9vXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiBfX2FyY2hfeDg2XzY0XG4gX19hcmNoX2FybTY0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfc3RyZWFtX3JlYWQmIzM0OywKICAgICYjMzQ7YnBmX3N0cmVhbV92cHJpbnRrJiMzNDssCiAgICAmIzM0O2JwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIGJ1Z3MgaW4gdGhlIEJQRiBzdHJlYW0gc3Vic3lzdGVtLCBpbmNsdWRpbmcgYW4gb2ZmLWJ5LW9uZSBlcnJvciBpbiBsZW5ndGggY2hlY2tpbmcsIGEgY2FwYWNpdHkgbGVhayBvbiBwdXNoIGZhaWx1cmUsIGluY29ycmVjdCBoYW5kbGluZyBvZiBwYXJ0aWFsIHJlYWRzIHRvIHVzZXIgc3BhY2UsIG1pc3NpbmcgdHJ1bmNhdGlvbiBjaGVja3MgaW4gdnByaW50aywgYW5kIGluY29ycmVjdCBsZW5ndGggY2FsY3VsYXRpb25zIGluIHN0YWdlX3ByaW50ay4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSAoQlBGIHN5c2NhbGwgYW5kIEJQRiBwcm9ncmFtcykgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTI0NmFmZGU0Njk2ZmM2OWY3MzI5M2FhYjM4ODUwOTgxMDUzZTUwMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIzIDE0OjQzOjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdHJlYW0uYyBiL2tlcm5lbC9icGYvc3RyZWFtLmMKaW5kZXggYmU5Y2U5OGU5NDY5Mi4uN2E1YzNhYzg2NzZiOSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zdHJlYW0uYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0cmVhbS5jCkBAIC0yMiwxMSAmIzQzOzIyLDExIEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICpicGZfc3RyZWFtX2VsZW1fYWxsb2MoaW50IGxlbikKIAlzaXplX3QgYWxsb2Nfc2l6ZTsKIAogCS8qCi0JICogTGVuZ3RoIGRlbm90ZXMgdGhlIGFtb3VudCBvZiBkYXRhIHRvIGJlIHdyaXR0ZW4gYXMgcGFydCBvZiBzdHJlYW0gZWxlbWVudCwKLQkgKiB0aHVzIGluY2x1ZGVzICYjMzk7XDAmIzM5OyBieXRlLiBXZSYjMzk7cmUgY2FwcGVkIGJ5IGhvdyBtdWNoIGJwZl9icHJpbnRmX2J1ZmZlcnMgY2FuCi0JICogYWNjb21vZGF0ZSwgdGhlcmVmb3JlIGRlbnkgYWxsb2NhdGlvbnMgdGhhdCB3b24mIzM5O3QgZml0IGludG8gdGhlbS4KJiM0MzsJICogTGVuZ3RoIGlzIHRoZSBwYXlsb2FkIHB1c2hlZCBpbnRvIHRoZSBzdHJlYW0sIGV4Y2x1ZGluZyB0aGUKJiM0MzsJICogdHJhaWxpbmcgTlVMIG9mIHRoZSBicHJpbnRmIGJ1ZmZlci4gUmVqZWN0IGFueXRoaW5nIHRoYXQgY2Fubm90CiYjNDM7CSAqIGZpdCB3aXRob3V0IGNvcHlpbmcgdGhhdCBOVUwgaW50byB0aGUgc3RyZWFtIGVsZW1lbnQuCiAJICovCi0JaWYgKGxlbiAmbHQ7IDAgfHwgbGVuICZndDsgbWF4X2xlbikKJiM0MzsJaWYgKGxlbiAmbHQ7IDAgfHwgbGVuICZndDs9IG1heF9sZW4pCiAJCXJldHVybiBOVUxMOwogCiAJYWxsb2Nfc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCBicGZfc3RyZWFtX2VsZW0sIHN0cltsZW5dKTsKQEAgLTY4LDEwICYjNDM7NjgsOCBAQCBzdGF0aWMgaW50IGJwZl9zdHJlYW1fY29uc3VtZV9jYXBhY2l0eShzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBpbnQgbGVuKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqZWxlbSkKJiM0MztzdGF0aWMgdm9pZCBicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgaW50IGxlbikKIHsKLQlpbnQgbGVuID0gZWxlbS0mZ3Q7dG90YWxfbGVuOwotCiAJYXRvbWljX3N1YihsZW4sICZhbXA7c3RyZWFtLSZndDtjYXBhY2l0eSk7CiB9CiAKQEAgLTc5LDcgJiM0Mzs3NywxNCBAQCBzdGF0aWMgaW50IGJwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgY29uc3QgY2hhciAqc3RyLCBpbnQgbAogewogCWludCByZXQgPSBicGZfc3RyZWFtX2NvbnN1bWVfY2FwYWNpdHkoc3RyZWFtLCBsZW4pOwogCi0JcmV0dXJuIHJldCA/OiBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoJmFtcDtzdHJlYW0tJmd0O2xvZywgc3RyLCBsZW4pOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKCZhbXA7c3RyZWFtLSZndDtsb2csIHN0ciwgbGVuKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJlYW0sIGxlbik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYnBmX3N0cmVhbSAqYnBmX3N0cmVhbV9nZXQoZW51bSBicGZfc3RyZWFtX2lkIHN0cmVhbV9pZCwgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KQpAQCAtMTYyLDYgJiM0MzsxNjcsNyBAQCBzdGF0aWMgaW50IGJwZl9zdHJlYW1fcmVhZChzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCB2b2lkIF9fdXNlciAqYnVmLCBpbnQgbGVuKQogCiAJd2hpbGUgKHJlbV9sZW4pIHsKIAkJaW50IHBvcyA9IGxlbiAtIHJlbV9sZW47CiYjNDM7CQlpbnQgY2h1bmssIG47CiAJCWJvb2wgY29udDsKIAogCQlub2RlID0gYnBmX3N0cmVhbV9iYWNrbG9nX3BlZWsoc3RyZWFtKTsKQEAgLTE3NSwyMCAmIzQzOzE4MSwyMSBAQCBzdGF0aWMgaW50IGJwZl9zdHJlYW1fcmVhZChzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCB2b2lkIF9fdXNlciAqYnVmLCBpbnQgbGVuKQogCiAJCWNvbnNfbGVuID0gZWxlbS0mZ3Q7Y29uc3VtZWRfbGVuOwogCQljb250ID0gYnBmX3N0cmVhbV9jb25zdW1lX2VsZW0oZWxlbSwgJmFtcDtyZW1fbGVuKSA9PSBmYWxzZTsKLQotCQlyZXQgPSBjb3B5X3RvX3VzZXIoYnVmICYjNDM7IHBvcywgZWxlbS0mZ3Q7c3RyICYjNDM7IGNvbnNfbGVuLAotCQkJCSAgIGVsZW0tJmd0O2NvbnN1bWVkX2xlbiAtIGNvbnNfbGVuKTsKLQkJLyogUmVzdG9yZSBpbiBjYXNlIG9mIGVycm9yLiAqLwotCQlpZiAocmV0KSB7Ci0JCQlyZXQgPSAtRUZBVUxUOwotCQkJZWxlbS0mZ3Q7Y29uc3VtZWRfbGVuID0gY29uc19sZW47CiYjNDM7CQljaHVuayA9IGVsZW0tJmd0O2NvbnN1bWVkX2xlbiAtIGNvbnNfbGVuOwomIzQzOwomIzQzOwkJbiA9IGNvcHlfdG9fdXNlcihidWYgJiM0MzsgcG9zLCBlbGVtLSZndDtzdHIgJiM0MzsgY29uc19sZW4sIGNodW5rKTsKJiM0MzsJCWlmIChuKSB7CiYjNDM7CQkJLyogS2VlcCBhbnkgc3VjY2Vzc2Z1bGx5IGNvcGllZCBieXRlczsgLUVGQVVMVCBvbmx5IGlmIG5vbmUuICovCiYjNDM7CQkJZWxlbS0mZ3Q7Y29uc3VtZWRfbGVuIC09IG47CiYjNDM7CQkJcmVtX2xlbiAmIzQzOz0gbjsKJiM0MzsJCQlyZXQgPSAobGVuID09IHJlbV9sZW4pID8gLUVGQVVMVCA6IDA7CiAJCQlicmVhazsKIAkJfQogCiAJCWlmIChjb250KQogCQkJY29udGludWU7CiAJCWJwZl9zdHJlYW1fYmFja2xvZ19wb3Aoc3RyZWFtKTsKLQkJYnBmX3N0cmVhbV9yZWxlYXNlX2NhcGFjaXR5KHN0cmVhbSwgZWxlbSk7CiYjNDM7CQlicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RyZWFtLCBlbGVtLSZndDt0b3RhbF9sZW4pOwogCQlicGZfc3RyZWFtX2ZyZWVfZWxlbShlbGVtKTsKIAl9CiAKQEAgLTIzOCw2ICYjNDM7MjQ1LDExIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3RyZWFtX3ZwcmludGsoaW50IHN0cmVhbV9pZCwgY29uc3QgY2hhciAqZm10X19zdHIsIGNvbnN0IHZvCiAJCXJldHVybiByZXQ7CiAKIAlyZXQgPSBic3RyX3ByaW50ZihkYXRhLmJ1ZiwgTUFYX0JQUklOVEZfQlVGLCBmbXRfX3N0ciwgZGF0YS5iaW5fYXJncyk7CiYjNDM7CS8qIFRydW5jYXRpb246IHJlamVjdCBiZWZvcmUgY2FwYWNpdHkgY2hhcmdlIChub3QgLUVOT01FTSkuICovCiYjNDM7CWlmIChyZXQgJmd0Oz0gTUFYX0JQUklOVEZfQlVGKSB7CiYjNDM7CQlicGZfYnByaW50Zl9jbGVhbnVwKCZhbXA7ZGF0YSk7CiYjNDM7CQlyZXR1cm4gLUUyQklHOwomIzQzOwl9CiAJLyogRXhjbHVkZSBOVUxMIGJ5dGUgZHVyaW5nIHB1c2guICovCiAJcmV0ID0gYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJlYW0sIGRhdGEuYnVmLCByZXQpOwogCWJwZl9icHJpbnRmX2NsZWFudXAoJmFtcDtkYXRhKTsKQEAgLTMxMSwxNyAmIzQzOzMyMywxOCBAQCBpbnQgYnBmX3N0cmVhbV9zdGFnZV9wcmludGsoc3RydWN0IGJwZl9zdHJlYW1fc3RhZ2UgKnNzLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAlzdHJ1Y3QgYnBmX2JwcmludGZfYnVmZmVycyAqYnVmOwogCXZhX2xpc3QgYXJnczsKLQlpbnQgcmV0OwomIzQzOwlpbnQgbGVuLCByZXQ7CiAKIAlpZiAoYnBmX3RyeV9nZXRfYnVmZmVycygmYW1wO2J1ZikpCiAJCXJldHVybiAtRUJVU1k7CiAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCXJldCA9IHZzbnByaW50ZihidWYtJmd0O2J1ZiwgQVJSQVlfU0laRShidWYtJmd0O2J1ZiksIGZtdCwgYXJncyk7CiYjNDM7CWxlbiA9IHZzY25wcmludGYoYnVmLSZndDtidWYsIEFSUkFZX1NJWkUoYnVmLSZndDtidWYpLCBmbXQsIGFyZ3MpOwogCXZhX2VuZChhcmdzKTsKLQlzcy0mZ3Q7bGVuICYjNDM7PSByZXQ7CiAJLyogRXhjbHVkZSBOVUxMIGJ5dGUgZHVyaW5nIHB1c2guICovCi0JcmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKCZhbXA7c3MtJmd0O2xvZywgYnVmLSZndDtidWYsIHJldCk7CiYjNDM7CXJldCA9IF9fYnBmX3N0cmVhbV9wdXNoX3N0cigmYW1wO3NzLSZndDtsb2csIGJ1Zi0mZ3Q7YnVmLCBsZW4pOwomIzQzOwlpZiAoIXJldCkKJiM0MzsJCXNzLSZndDtsZW4gJiM0Mzs9IGxlbjsKIAlicGZfcHV0X2J1ZmZlcnMoKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYwppbmRleCBjM2NjZTVjMjkyYmRkLi44NzE3MGRjYWQzYWQ4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYwpAQCAtNTgsNiAmIzQzOzU4LDcxIEBAIHZvaWQgdGVzdF9zdHJlYW1fc3lzY2FsbCh2b2lkKQogCXN0cmVhbV9fZGVzdHJveShza2VsKTsKIH0KIAomIzQzO3ZvaWQgdGVzdF9zdHJlYW1fb3ZlcnNpemUodm9pZCkKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTsKJiM0MzsJc3RydWN0IHN0cmVhbSAqc2tlbDsKJiM0MzsJaW50IHJldCwgcHJvZ19mZDsKJiM0MzsJY2hhciBidWZbOF0gPSB7fTsKJiM0MzsKJiM0MzsJc2tlbCA9IHN0cmVhbV9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtzdHJlYW1fX29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3Muc3RyZWFtX292ZXJzaXplKTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nX2ZkLCAmYW1wO29wdHMpOwomIzQzOwlBU1NFUlRfT0socmV0LCAmIzM0O292ZXJzaXplIHJ1biYjMzQ7KTsKJiM0MzsJQVNTRVJUX09LKG9wdHMucmV0dmFsLCAmIzM0O292ZXJzaXplIHJldHZhbCYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogT3ZlcnNpemVkIHB1c2ggbXVzdCBub3QgcGVybWFuZW50bHkgY29uc3VtZSBjYXBhY2l0eSBvbiB0aGlzIHByb2cuICovCiYjNDM7CXJldCA9IGJwZl9wcm9nX3N0cmVhbV9yZWFkKHByb2dfZmQsIEJQRl9TVFJFQU1fU1RET1VULCBidWYsIHNpemVvZihidWYpLCBOVUxMKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgMywgJiMzNDtieXRlcyBhZnRlciBvdmVyc2l6ZSYjMzQ7KTsKJiM0MzsJQVNTRVJUX09LKG1lbWNtcChidWYsICYjMzQ7Zm9vJiMzNDssIDMpLCAmIzM0O3BheWxvYWQgYWZ0ZXIgb3ZlcnNpemUmIzM0Oyk7CiYjNDM7CiYjNDM7CXN0cmVhbV9fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X3N0cmVhbV9wYXJ0aWFsX3JlYWQodm9pZCkKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTsKJiM0MzsJc3RydWN0IHN0cmVhbSAqc2tlbDsKJiM0MzsJaW50IHJldCwgcHJvZ19mZDsKJiM0MzsJbG9uZyBwYWdlX3NpemU7CiYjNDM7CWNoYXIgKnBhZ2UsICpidWY7CiYjNDM7CWNoYXIgcmVzdFs4XSA9IHt9OwomIzQzOwomIzQzOwlza2VsID0gc3RyZWFtX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3N0cmVhbV9fb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5zdHJlYW1fc3lzY2FsbCk7CiYjNDM7CXJldCA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocHJvZ19mZCwgJmFtcDtvcHRzKTsKJiM0MzsJQVNTRVJUX09LKHJldCwgJiMzNDtyZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgJiMzNDtyZXR2YWwmIzM0Oyk7CiYjNDM7CiYjNDM7CXBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKJiM0MzsJcGFnZSA9IG1tYXAoTlVMTCwgcGFnZV9zaXplICogMiwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKJiM0MzsJCSAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfTkVRKHBhZ2UsIE1BUF9GQUlMRUQsICYjMzQ7bW1hcCYjMzQ7KSkgewomIzQzOwkJc3RyZWFtX19kZXN0cm95KHNrZWwpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CS8qIExlYXZlIG9ubHkgdGhlIGZpcnN0IHBhZ2UgbWFwcGVkIHNvIGEgc3RyYWRkbGluZyBjb3B5IGZhdWx0cy4gKi8KJiM0MzsJQVNTRVJUX09LKG11bm1hcChwYWdlICYjNDM7IHBhZ2Vfc2l6ZSwgcGFnZV9zaXplKSwgJiMzNDttdW5tYXAgc2Vjb25kIHBhZ2UmIzM0Oyk7CiYjNDM7CiYjNDM7CWJ1ZiA9IHBhZ2UgJiM0MzsgcGFnZV9zaXplIC0gMTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfc3RyZWFtX3JlYWQocHJvZ19mZCwgQlBGX1NUUkVBTV9TVERPVVQsIGJ1ZiwgMywgTlVMTCk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIDEsICYjMzQ7cGFydGlhbCBieXRlcyYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKGJ1ZlswXSwgJiMzOTtmJiMzOTssICYjMzQ7Zmlyc3QgYnl0ZSYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfc3RyZWFtX3JlYWQocHJvZ19mZCwgQlBGX1NUUkVBTV9TVERPVVQsIHJlc3QsIHNpemVvZihyZXN0KSwgTlVMTCk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIDIsICYjMzQ7cmVtYWluaW5nIGJ5dGVzJiMzNDspOwomIzQzOwlBU1NFUlRfT0sobWVtY21wKHJlc3QsICYjMzQ7b28mIzM0OywgMiksICYjMzQ7cmVtYWluaW5nIGRhdGEmIzM0Oyk7CiYjNDM7CiYjNDM7CW11bm1hcChwYWdlLCBwYWdlX3NpemUpOwomIzQzOwlzdHJlYW1fX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdGVzdF9hZGRyZXNzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgdW5zaWduZWQgbG9uZyAqZmF1bHRfYWRkcl9wKQogewogCUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYwppbmRleCA2Zjk5OWJhOTUxYTNjLi45Yjk3ZjVlMDFiODNhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jCkBAIC0zNiw3ICYjNDM7MzYsMTIgQEAgc3RydWN0IHsKIH0gYXJyYXkgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiAKICNkZWZpbmUgRU5PU1BDIDI4CiYjNDM7I2RlZmluZSBFMkJJRyA3CiAjZGVmaW5lIF9TVFIgJiMzNDt4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgmIzM0OwomIzQzOyNkZWZpbmUgX1g2NCAmIzM0O3h4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgmIzM0OwomIzQzOy8qIDEwMjQgYnl0ZXM6IHRydW5jYXRlZCBieSBic3RyX3ByaW50ZiwgbXVzdCByZXR1cm4gLUUyQklHLiAqLwomIzQzOyNkZWZpbmUgX0JJR19TVFIgKF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBcCiYjNDM7CQkgIF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCkKIAogaW50IHNpemU7CiB1NjQgZmF1bHRfYWRkcjsKQEAgLTExNyw2ICYjNDM7MTIyLDE5IEBAIGludCBzdHJlYW1fc3lzY2FsbCh2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApCiYjNDM7aW50IHN0cmVhbV9vdmVyc2l6ZSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBicGZfc3RyZWFtX3ByaW50ayhCUEZfU1RET1VULCBfQklHX1NUUik7CiYjNDM7CWlmIChyZXQgIT0gLUUyQklHKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGJwZl9zdHJlYW1fcHJpbnRrKEJQRl9TVERPVVQsICYjMzQ7Zm9vJiMzNDspOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKIF9fYXJjaF9hcm02NAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODcwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFN0cmVhbSBQYXRjaCoqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCYjMzk7cyBjbGVhcmx5IGZvY3VzZWQgb24gcmVmaW5pbmcgdGhlIEJQRiBzdHJlYW0gaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBjaGFuZ2VzIGFyZSBjb25jZW50cmF0ZWQgaW4gYGtlcm5lbC9icGYvc3RyZWFtLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGF0IGZpbGUgZXZlbiBleGlzdHMgaW4gdGhlIG1haW5saW5lIGtlcm5lbDsgYSBxdWljayBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgb3IgYGRlZmF1bHRfYXBpOmNvZGVzZWFyY2gtZGlyLWluZGV4YCBzZWFyY2ggc2hvdWxkIGNvbmZpcm0gdGhhdC4gRnJvbSB0aGUgZGVzY3JpcHRpb24sIGl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIGFkZHJlc3Npbmcgc29tZSBzdWJ0bGUgaXNzdWVzLCBtb3N0bHkgcmVsYXRlZCB0byBlZGdlIGNhc2VzIGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIHN0cmVhbSBmdW5jdGlvbmFsaXR5LgoKU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2g6CgoqICAgKipUaWdodGVucyB1cCBhbGxvY2F0aW9uIHZhbGlkYXRpb246KiogTW9kaWZ5aW5nIGBicGZfc3RyZWFtX2VsZW1fYWxsb2NgIHRvIHJlamVjdCBhbGxvY2F0aW9ucyB3aGVyZSB0aGUgcmVxdWVzdGVkIGxlbmd0aCAoYGxlbmApICplcXVhbHMqIHRoZSBtYXhpbXVtIGxlbmd0aCAoYG1heF9sZW5gKS4gVGhhdCYjMzk7cyBhIGdvb2QgcHJldmVudGF0aXZlIG1lYXN1cmU7IHRoZSBvcmlnaW5hbCBjaGVjayBiZWluZyBqdXN0IGEgZ3JlYXRlci10aGFuIGNoZWNrIChgJmd0O2ApIG1pZ2h0IGhhdmUgYWxsb3dlZCBmb3Igc3VidGxlIG92ZXJmbG93cyBvciBib3VuZGFyeSBjb25kaXRpb24gaXNzdWVzLgoKKiAgICoqSW1wcm92ZXMgcmVzb3VyY2UgbWFuYWdlbWVudCBvbiBmYWlsdXJlOioqIFRoZSBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgY2hhbmdlcyBzZWVtIGdlYXJlZCB0b3dhcmQgcmVsZWFzaW5nIGFsbG9jYXRlZCBjYXBhY2l0eSBpZiB0aGUgdW5kZXJseWluZyBwdXNoIG9wZXJhdGlvbiAoYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmApIGZhaWxzLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBwcmV2ZW50aW5nIG1lbW9yeSBsZWFrcyBhbmQgcmVzb3VyY2UgZXhoYXVzdGlvbiBpbiB0aGUgZmFjZSBvZiBlcnJvcnMuCgoqICAgKipIYW5kbGVzIHBhcnRpYWwgcmVhZCBmYWlsdXJlczoqKiBDb3JyZWN0aW5nIGBicGZfc3RyZWFtX3JlYWRgIHRvIGNvcGUgd2l0aCBzY2VuYXJpb3Mgd2hlcmUgYGNvcHlfdG9fdXNlcmAgbWlnaHQgb25seSB0cmFuc2ZlciBwYXJ0IG9mIHRoZSByZXF1ZXN0ZWQgZGF0YS4gSGFuZGxpbmcgcGFydGlhbCByZWFkcyBpcyBhIGNvbW1vbiB2dWxuZXJhYmlsaXR5LCBhbmQgdGhpcyBzaG91bGQgdGlnaHRlbiB1cCB0aGUgY29kZS4KCiogICAqKlN0cmVuZ3RoZW5zIGxhcmdlIHN0cmluZyBoYW5kbGluZzoqKiBgYnBmX3N0cmVhbV92cHJpbnRrYCBpcyBiZWluZyBtb2RpZmllZCB0byByZWplY3QgdmVyeSBsYXJnZSBzdHJpbmdzICh0aG9zZSBsYXJnZXIgdGhhbiBvciBlcXVhbCB0byBgTUFYX0JQUklOVEZfQlVGYCkgcmV0dXJuaW5nIGFuIGBFMkJJR2AgZXJyb3IsIGFuZCBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgIGlzIHN3aXRjaGluZyB0byBgdnNjbnByaW50ZmAsIGJvdGggb2YgdGhlc2UgaW1wcm92ZW1lbnRzIHBvaW50IHRvIGluY3JlYXNlZCByb2J1c3RuZXNzIGFuZCBwcmV2ZW50aW5nIG92ZXJmbG93cy4gVXNpbmcgYHZzY25wcmludGZgIGluc3RlYWQgb2YgYHZzbnByaW50ZmAgaXMgYSBzbWFydCBjaG9pY2UgZm9yIHNhZmVyIGFuZCBtb3JlIHJvYnVzdCBzdHJpbmcgZm9ybWF0dGluZy4gQWxzbywgb25seSBpbmNyZW1lbnRpbmcgdGhlIGxlbmd0aCBjb3VudGVyIHdoZW4gYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgc3VjY2VlZHMgaXMgYSBzZW5zaWJsZSBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBsZW5ndGggaW5jb25zaXN0ZW5jaWVzLgoKVGhlIGFkZGl0aW9uIG9mIHRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNgIGlzIHRoZSBtb3N0IGltcG9ydGFudCBwYXJ0IG9mIHRoZSBwYWNrYWdlLiBJdCBzaG93cyB0aGF0IHRoZXNlIGlzc3VlcyBhcmUgbm93IGNvdmVyZWQgYW5kIHRoYXQgdGhlIGtlcm5lbCBjYW4gb3BlcmF0ZSB3aXRoaW4gc2FmZXR5IG1hcmdpbnMuCgpPdmVyYWxsLCB0aGVzZSBsb29rIGxpa2Ugd2VsbC1jb25zaWRlcmVkIGNoYW5nZXMgdGhhdCBpbXByb3ZlIHJvYnVzdG5lc3MgYW5kIHByZXZlbnQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB3aXRoaW4gdGhlIEJQRiBzdHJlYW0gaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGl0c2VsZiB0byB2ZXJpZnkgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBhbmQgdGhlIHRlc3QgY292ZXJhZ2UsIGJ1dCBvbiB0aGUgc3VyZmFjZSwgdGhpcyBwYXRjaCBzZWVtcyBsaWtlIGEgcG9zaXRpdmUgc3RlcCBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDthcmVuYS5jJiMzNDssCiAgICAmIzM0O2FycmF5bWFwLmMmIzM0OywKICAgICYjMzQ7Ymxvb21fZmlsdGVyLmMmIzM0OywKICAgICYjMzQ7YnBmX2NncnBfc3RvcmFnZS5jJiMzNDssCiAgICAmIzM0O2JwZl9pbm9kZV9zdG9yYWdlLmMmIzM0OywKICAgICYjMzQ7YnBmX2luc25fYXJyYXkuYyYjMzQ7LAogICAgJiMzNDticGZfaXRlci5jJiMzNDssCiAgICAmIzM0O2JwZl9sb2NhbF9zdG9yYWdlLmMmIzM0OywKICAgICYjMzQ7YnBmX2xydV9saXN0LmMmIzM0OywKICAgICYjMzQ7YnBmX2xydV9saXN0LmgmIzM0OywKICAgICYjMzQ7YnBmX2xzbS5jJiMzNDssCiAgICAmIzM0O2JwZl9sc21fcHJvdG8uYyYjMzQ7LAogICAgJiMzNDticGZfc3RydWN0X29wcy5jJiMzNDssCiAgICAmIzM0O2JwZl90YXNrX3N0b3JhZ2UuYyYjMzQ7LAogICAgJiMzNDtidGYuYyYjMzQ7LAogICAgJiMzNDtidGZfaXRlci5jJiMzNDssCiAgICAmIzM0O2J0Zl9yZWxvY2F0ZS5jJiMzNDssCiAgICAmIzM0O2Nncm91cC5jJiMzNDssCiAgICAmIzM0O2Nncm91cF9pdGVyLmMmIzM0OywKICAgICYjMzQ7Y29yZS5jJiMzNDssCiAgICAmIzM0O2NwdW1hcC5jJiMzNDssCiAgICAmIzM0O2NwdW1hc2suYyYjMzQ7LAogICAgJiMzNDtjcnlwdG8uYyYjMzQ7LAogICAgJiMzNDtkZXZtYXAuYyYjMzQ7LAogICAgJiMzNDtkaXNhc20uYyYjMzQ7LAogICAgJiMzNDtkaXNhc20uaCYjMzQ7LAogICAgJiMzNDtkaXNwYXRjaGVyLmMmIzM0OywKICAgICYjMzQ7ZG1hYnVmX2l0ZXIuYyYjMzQ7LAogICAgJiMzNDtoYXNodGFiLmMmIzM0OywKICAgICYjMzQ7aGVscGVycy5jJiMzNDssCiAgICAmIzM0O2lub2RlLmMmIzM0OywKICAgICYjMzQ7a21lbV9jYWNoZV9pdGVyLmMmIzM0OywKICAgICYjMzQ7bGlua19pdGVyLmMmIzM0OywKICAgICYjMzQ7bGl2ZW5lc3MuYyYjMzQ7LAogICAgJiMzNDtsb2NhbF9zdG9yYWdlLmMmIzM0OywKICAgICYjMzQ7bG9nLmMmIzM0OywKICAgICYjMzQ7bHBtX3RyaWUuYyYjMzQ7LAogICAgJiMzNDttYXBfaW5fbWFwLmMmIzM0OywKICAgICYjMzQ7bWFwX2luX21hcC5oJiMzNDssCiAgICAmIzM0O21hcF9pdGVyLmMmIzM0OywKICAgICYjMzQ7bWVtYWxsb2MuYyYjMzQ7LAogICAgJiMzNDttbWFwX3VubG9ja193b3JrLmgmIzM0OywKICAgICYjMzQ7bXByb2cuYyYjMzQ7LAogICAgJiMzNDtuZXRfbmFtZXNwYWNlLmMmIzM0OywKICAgICYjMzQ7b2ZmbG9hZC5jJiMzNDssCiAgICAmIzM0O3BlcmNwdV9mcmVlbGlzdC5jJiMzNDssCiAgICAmIzM0O3BlcmNwdV9mcmVlbGlzdC5oJiMzNDssCiAgICAmIzM0O3Byb2dfaXRlci5jJiMzNDssCiAgICAmIzM0O3F1ZXVlX3N0YWNrX21hcHMuYyYjMzQ7LAogICAgJiMzNDtyYW5nZV90cmVlLmMmIzM0OywKICAgICYjMzQ7cmFuZ2VfdHJlZS5oJiMzNDssCiAgICAmIzM0O3JlbG9fY29yZS5jJiMzNDssCiAgICAmIzM0O3JldXNlcG9ydF9hcnJheS5jJiMzNDssCiAgICAmIzM0O3JpbmdidWYuYyYjMzQ7LAogICAgJiMzNDtycXNwaW5sb2NrLmMmIzM0OywKICAgICYjMzQ7cnFzcGlubG9jay5oJiMzNDssCiAgICAmIzM0O3N0YWNrbWFwLmMmIzM0OywKICAgICYjMzQ7c3RyZWFtLmMmIzM0OywKICAgICYjMzQ7c3lzY2FsbC5jJiMzNDssCiAgICAmIzM0O3N5c2ZzX2J0Zi5jJiMzNDssCiAgICAmIzM0O3Rhc2tfaXRlci5jJiMzNDssCiAgICAmIzM0O3RjeC5jJiMzNDssCiAgICAmIzM0O3RudW0uYyYjMzQ7LAogICAgJiMzNDt0b2tlbi5jJiMzNDssCiAgICAmIzM0O3RyYW1wb2xpbmUuYyYjMzQ7LAogICAgJiMzNDt2ZXJpZmllci5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBbCiAgICAmIzM0O3ByZWxvYWQmIzM0OwogIF0KfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNjAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEJQRiBTdHJlYW0gQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgQlBGIHN0cmVhbSBmdW5jdGlvbmFsaXR5LiBGaXJzdCB0aGluZ3MgZmlyc3QsIGdvb2QsIGBzdHJlYW0uY2AgaXMgc2l0dGluZyByaWdodCB3aGVyZSBJJiMzOTtkIGV4cGVjdCBpdCwgdHVja2VkIGF3YXkgaW4gYGtlcm5lbC9icGYvYC4gTm93IHRoZSByZWFsIHdvcmsgYmVnaW5zLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmU6IGBicGZfc3RyZWFtX3JlYWRgLCBgYnBmX3N0cmVhbV92cHJpbnRrYCwgYW5kIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AuIFRob3NlIG5hbWVzIHRoZW1zZWx2ZXMgZ2l2ZSBtZSBzb21lIGNsdWVzLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgZXhhY3Qgcm9sZXMgYW5kIGludGVyYWN0aW9ucy4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IHRoYXQgdGhpcyBwYXJ0aWN1bGFyIHN0cmVhbSBjb2RlIGlzIGFjdHVhbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBidWlsZC4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIGl0LiBJIGRvbiYjMzk7dCB3YW50IHRvIHdhc3RlIHRpbWUgY2hhc2luZyBkb3duIGNvZGUgdGhhdCYjMzk7cyBiZWVuIGNvbXBpbGVkIG91dC4gS25vd2luZyB0aGUgY29uZmlnIG9wdGlvbnMgd2lsbCBhbHNvIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHRoaXMgZnVuY3Rpb25hbGl0eSBoYXMgd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBlY29zeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RyZWFtXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBTdHJlYW0gRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyB0aGlzIGlzIGNvbXBpbGVkIHdpdGggYENPTkZJR19CUEZfU1lTQ0FMTGAsIHdoaWNoIGlzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBjaGFuZ2VzIGFuZCBzZWUgd2hhdCYjMzk7cyBiZWVuIG1vZGlmaWVkLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gcmVhY2hhYmlsaXR5IG9mIHRob3NlIGNoYW5nZXMuCgpMb29raW5nIGF0IHRoZSBsaXN0LCB3ZSBoYXZlIGEgZmV3IGZ1bmN0aW9ucyB0aGF0IHNlZW0gdG8gYmUga2V5LiBJIHNlZToKCiogICBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYCwgYGJwZl9zdHJlYW1fY29uc3VtZV9jYXBhY2l0eWAsIGBicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHlgLCBgYnBmX3N0cmVhbV9wdXNoX3N0cmA6IFRoZXNlIGFyZSBhbGwgc3RhdGljLCBzbyB0aGV5JiMzOTtyZSBpbnRlcm5hbGx5IHNjb3BlZCB3aXRoaW4gdGhlIEJQRiBzdHJlYW0gaW1wbGVtZW50YXRpb24uIFRoaXMgbWFrZXMgbWUgY3VyaW91cyBhYm91dCBob3cgdGhlc2UgYXJlIGJlaW5nIHVzZWQsIHdoYXQgdGhlIG92ZXJhbGwgZGVzaWduIHBhdHRlcm4gaXMuCiogICBgYnBmX3N0cmVhbV92cHJpbnRrYDogVGhpcyBpcyBpbnRlcmVzdGluZywgaXQmIzM5O3MgYSBrZnVuYy4gVGhlIGBfX2JwZl9rZnVuY2AgcHJlZml4IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGZvciBCUEYgdXNlLCBsaWtlbHkgZm9yIGxvZ2dpbmcgb3IgZGVidWdnaW5nIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIFRoZSBgaW50YCByZXR1cm4gdHlwZSBpbXBsaWVzIGl0IG1heSByZXR1cm4gc3RhdHVzIGluZm9ybWF0aW9uLgoqICAgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYDogQW5vdGhlciBgcHJpbnRrYCBmdW5jdGlvbiwgYnV0IGdsb2JhbC4gVGhpcyBtYWtlcyBtZSB3b25kZXIgYWJvdXQgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhpcyBhbmQgdGhlIGtmdW5jIHZlcnNpb24uIEl0IHdvdWxkIGJlIGltcG9ydGFudCB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIHNoYXJlZCBmdW5jdGlvbmFsaXR5IG9yIGhhcyBzcGVjaWZpYyB1c2FnZXMuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoZXJlIGlzIGBicGZfc3RyZWFtX3JlYWRgIHVzZWQ/IEZpbmRpbmcgaXRzIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBCUEYgc3RyZWFtcyBhcmUgYmVpbmcgY29uc3VtZWQgYW5kIHV0aWxpemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9zdHJlYW1fcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RyZWFtLmM9MTQ5PXN0YXRpYyBib29sIGJwZl9zdHJlYW1fY29uc3VtZV9lbGVtKHN0cnVjdCBicGZfc3RyZWFtX2VsZW0gKmVsZW0sIGludCAqbGVuKVxuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtMTU5LVxua2VybmVsL2JwZi9zdHJlYW0uYzoxNjA6c3RhdGljIGludCBicGZfc3RyZWFtX3JlYWQoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgdm9pZCBfX3VzZXIgKmJ1ZiwgaW50IGxlbilcbmtlcm5lbC9icGYvc3RyZWFtLmMtMTYxLXtcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTIwNj1pbnQgYnBmX3Byb2dfc3RyZWFtX3JlYWQoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBlbnVtIGJwZl9zdHJlYW1faWQgc3RyZWFtX2lkLCB2b2lkIF9fdXNlciAqYnVmLCBpbnQgbGVuKVxuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtMjEyLVx0XHRyZXR1cm4gLUVOT0VOVDtcbmtlcm5lbC9icGYvc3RyZWFtLmM6MjEzOlx0cmV0dXJuIGJwZl9zdHJlYW1fcmVhZChzdHJlYW0sIGJ1ZiwgbGVuKTtcbmtlcm5lbC9icGYvc3RyZWFtLmMtMjE0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTMxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGJwZl9wcm9nX3N0cmVhbV9yZWFkYCBVc2FnZSoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBicGZfcHJvZ19zdHJlYW1fcmVhZGAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHRoZSBnYXRld2F5LCBjYWxsaW5nIGBicGZfc3RyZWFtX3JlYWRgIHVuZGVyIHRoZSBob29kLiBTbywgbXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiAqd2hlcmUqIGlzIGBicGZfcHJvZ19zdHJlYW1fcmVhZGAgaXRzZWxmIGJlaW5nIGNhbGxlZD8gS25vd2luZyBpdHMgZW50cnkgcG9pbnRzIGlzIGNydWNpYWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBjb250ZXh0cyBpbiB3aGljaCB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQuIElzIGl0IGZyb20gdXNlciBzcGFjZSwga2VybmVsIHNwYWNlLCBvciBib3RoPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIEJQRiBwcm9ncmFtIHR5cGVzIHRoYXQgYXJlIHV0aWxpemluZyB0aGlzPyBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGxlcnMgdG8gZ2FpbiBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIGltcGFjdCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBkYXRhIGZsb3cuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9wcm9nX3N0cmVhbV9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdHJlYW0uYz0xNjA9c3RhdGljIGludCBicGZfc3RyZWFtX3JlYWQoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgdm9pZCBfX3VzZXIgKmJ1ZiwgaW50IGxlbilcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTIwNS1cbmtlcm5lbC9icGYvc3RyZWFtLmM6MjA2OmludCBicGZfcHJvZ19zdHJlYW1fcmVhZChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGVudW0gYnBmX3N0cmVhbV9pZCBzdHJlYW1faWQsIHZvaWQgX191c2VyICpidWYsIGludCBsZW4pXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTIwNy17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjEyNj1zdGF0aWMgaW50IHByb2dfc3RyZWFtX3JlYWQodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjEzOS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYxNDA6XHRyZXQgPSBicGZfcHJvZ19zdHJlYW1fcmVhZChwcm9nLCBhdHRyLVx1MDAzZXByb2dfc3RyZWFtX3JlYWQuc3RyZWFtX2lkLCBidWYsIGxlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MTQxLVx0YnBmX3Byb2dfcHV0KHByb2cpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYSBCUEYgU3lzdGVtIENhbGwqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoaXMgYmFjazsgdGhpcyBjYWxsIG9yaWdpbmF0ZXMgZnJvbSBgcHJvZ19zdHJlYW1fcmVhZGAgd2l0aGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIENvbnNpZGVyaW5nIHRoZSBjb250ZXh0LCBpdCYjMzk7cyBwcmV0dHkgc2FmZSB0byBhc3N1bWUgdGhpcyBpcyByZWxhdGVkIHRvIGEgQlBGIHN5c3RlbSBjYWxsIGNvbW1hbmQuIE15IGZvY3VzIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBzdHJlYW0tcmVsYXRlZCBwcmludCBmdW5jdGlvbnMsIG5hbWVseSBgYnBmX3N0cmVhbV92cHJpbnRrYCBhbmQgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRob3NlIGZ1bmN0aW9ucyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhpcyBCUEYgaW50ZXJhY3Rpb24uIExldCYjMzk7cyBkaWcgaW50byB0aG9zZSBhbmQgc2VlIHdoYXQgaW5mb3JtYXRpb24gdGhleSBjYW4gcHJvdmlkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3N0cmVhbV92cHJpbnRrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmM9NDY3OT1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2Nncm91cF9yZWFkX3hhdHRyLCBLRl9SQ1UpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjgwLSNlbmRpZlxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY4MTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmVhbV92cHJpbnRrLCBLRl9JTVBMSUNJVF9BUkdTKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY4Mi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmVhbV9wcmludF9zdGFjaywgS0ZfSU1QTElDSVRfQVJHUylcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTIxNj1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy0yMjEtICovXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjIyMjpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b2lkICphcmdzLFxua2VybmVsL2JwZi9zdHJlYW0uYy0yMjMtXHRcdFx0XHQgICB1MzIgbGVuX19zeiwgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjQ3Nj1lbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNTMxLVx0S0ZfYnBmX3Nlc3Npb25faXNfcmV0dXJuLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNTMyOlx0S0ZfYnBmX3N0cmVhbV92cHJpbnRrLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNTMzLVx0S0ZfYnBmX3N0cmVhbV9wcmludF9zdGFjayxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI2MTE9QlRGX0lEKGZ1bmMsIGJwZl9zZXNzaW9uX2lzX3JldHVybilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjYxMjpCVEZfSUQoZnVuYywgYnBmX3N0cmVhbV92cHJpbnRrKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNjEzLUJURl9JRChmdW5jLCBicGZfc3RyZWFtX3ByaW50X3N0YWNrKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzA2MT1zdGF0aWMgYm9vbCBpc19icGZfc3RyZWFtX2tmdW5jKHUzMiBidGZfaWQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMwNjIte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEzMDYzOlx0cmV0dXJuIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3N0cmVhbV92cHJpbnRrXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMDY0LVx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3N0cmVhbV9wcmludF9zdGFja107XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4OTYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgQlBGIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBCUEYgU3RyZWFtIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBicGZfc3RyZWFtX3ZwcmludGtgLiBUaGF0JiMzOTtzIGEga2Z1bmMsIHJpZ2h0PyBBbmQgaXQmIzM5O3Mgb25lIHRoYXQgY2FuIGJlIGNhbGxlZCBkaXJlY3RseSBmcm9tIHdpdGhpbiBhIEJQRiBwcm9ncmFtLiBUaGF0JiMzOTtzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLCBoZWxwZnVsIGZvciBzdHJlYW1pbmcgb3V0IG9mIEJQRiBwcm9ncmFtcy4KCk5vdywgbXkgbWluZCB3YW5kZXJzIGEgYml0Li4ud2hhdCBhYm91dCB0aGUgb3RoZXIgb25lPyBJIHdvbmRlciwgd2hhdCYjMzk7cyB0aGlzIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2A/IERvZXMgdGhhdCBoYXZlIHNpbWlsYXIgY2FwYWJpbGl0aWVzPyBJIHNob3VsZCBsb29rIGludG8gdGhpcyBtb3JlLCBzZWUgaG93IGl0IGZpdHMgaW4gdG8gdGhlIHdpZGVyIHBpY3R1cmUgb2YgQlBGIHN0cmVhbSBmdW5jdGlvbmFsaXR5LiBNYXliZSBpdCBoYXMgc2ltaWxhciBmZWF0dXJlcywgb3Igb3BlcmF0ZXMgaW4gYSBkaWZmZXJlbnQgd2F5LiBUaGF0JiMzOTtzIGEgZ29vZCBuZXh0IGxpbmUgb2YgaW5xdWlyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3N0cmVhbV9zdGFnZV9wcmludGsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0cmVhbS5jPTMxND12b2lkIGJwZl9zdHJlYW1fc3RhZ2VfZnJlZShzdHJ1Y3QgYnBmX3N0cmVhbV9zdGFnZSAqc3MpXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy0zMjEtXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjMyMjppbnQgYnBmX3N0cmVhbV9zdGFnZV9wcmludGsoc3RydWN0IGJwZl9zdHJlYW1fc3RhZ2UgKnNzLCBjb25zdCBjaGFyICpmbXQsIC4uLilcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzIzLXtcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTM3NT1zdGF0aWMgYm9vbCBkdW1wX3N0YWNrX2NiKHZvaWQgKmNvb2tpZSwgdTY0IGlwLCB1NjQgc3AsIHU2NCBicClcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTM4OC1cdFx0XHRnb3RvIGVuZDtcbmtlcm5lbC9icGYvc3RyZWFtLmM6Mzg5Olx0XHRjdHhwLVx1MDAzZWVyciA9IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKGN0eHAtXHUwMDNlc3MsIFwmIzM0OyVwU1xcbiAgJXMgQCAlczolZFxcblwmIzM0Oyxcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzkwLVx0XHRcdFx0XHRcdCAgICAodm9pZCAqKShsb25nKWlwLCBsaW5lLCBmaWxlLCBudW0pO1xuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtMzkzLWVuZDpcbmtlcm5lbC9icGYvc3RyZWFtLmM6Mzk0Olx0Y3R4cC1cdTAwM2VlcnIgPSBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhjdHhwLVx1MDAzZXNzLCBcJiMzNDslcFNcXG5cJiMzNDssICh2b2lkICopKGxvbmcpaXApO1xua2VybmVsL2JwZi9zdHJlYW0uYy0zOTUtXHRyZXR1cm4gIWN0eHAtXHUwMDNlZXJyO1xuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmM9Mzk4PWludCBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2soc3RydWN0IGJwZl9zdHJlYW1fc3RhZ2UgKnNzKVxuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtNDAyLVxua2VybmVsL2JwZi9zdHJlYW0uYzo0MDM6XHRyZXQgPSBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhzcywgXCYjMzQ7Q1BVOiAlZCBVSUQ6ICVkIFBJRDogJWQgQ29tbTogJXNcXG5cJiMzNDssXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTQwNC1cdFx0XHRcdCAgICAgIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIF9fa3VpZF92YWwoY3VycmVudF9yZWFsX2NyZWQoKS1cdTAwM2VldWlkKSxcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTQwNy1cdFx0cmV0dXJuIHJldDtcbmtlcm5lbC9icGYvc3RyZWFtLmM6NDA4Olx0cmV0ID0gYnBmX3N0cmVhbV9zdGFnZV9wcmludGsoc3MsIFwmIzM0O0NhbGwgdHJhY2U6XFxuXCYjMzQ7KTtcbmtlcm5lbC9icGYvc3RyZWFtLmMtNDA5LVx0aWYgKHJldClcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTQxMy1cdFx0cmV0dXJuIGN0eC5lcnI7XG5rZXJuZWwvYnBmL3N0cmVhbS5jOjQxNDpcdHJldHVybiBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhzcywgXCYjMzQ7XFxuXCYjMzQ7KTtcbmtlcm5lbC9icGYvc3RyZWFtLmMtNDE1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc3MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsIENoYWluIG9mIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AqKgoKQWxyaWdodCwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhlIGBicGZfc3RyZWFtX3N0YWdlYCBjb2RlLCBhbmQgSSYjMzk7dmUgaGl0IGEgbGl0dGxlIHNuYWcuIEkgc2VlIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgaXMgYmVpbmcgaW52b2tlZCBieSBgYnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrYC4gVGhhdCYjMzk7cyBub3QgZW50aXJlbHkgdW5leHBlY3RlZCwgZ2l2ZW4gdGhlIG5hbWUuIFRoZSBgcHJpbnRrYCBzdWdnZXN0cyBsb2dnaW5nIG9mIHNvbWUga2luZCwgbGlrZWx5IHJlbGF0ZWQgdG8gc3RhY2sgZHVtcHMsIGFzIHRoZSBzZWNvbmQgZnVuY3Rpb24gbmFtZSBpbmRpY2F0ZXMuIEJ1dCBub3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlICoqY2FsbCBjaGFpbioqOiB3aGVyZSBpcyBgYnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrYCAqaXRzZWxmKiBjYWxsZWQgZnJvbT8gVW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgZmxvdyBpcyBjcnVjaWFsIGZvciBkaWFnbm9zaW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRhdGEgcGF0aCwgYW5kIGhvdyB0aGlzIGxvZ2dpbmcgZnVuY3Rpb24gaXMgYWN0dWFsbHkgaW52b2tlZCB3aXRoaW4gdGhlIEJQRiBzdHJlYW0gcHJvY2Vzc2luZy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgYnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrYCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGUgc3RhY2sgZHVtcCwgYW5kIHRoZXJlZm9yZSwgdGhlIGxvZ2dpbmcgdGhhdCBvY2N1cnMgdmlhIHRoZSBgcHJpbnRrYC4gSSBuZWVkIHRvIGxvb2sgZm9yIGNhbGxzIHRvIGl0IGluIHRoZSBrZXJuZWwgc291cmNlLCBvciBwb3RlbnRpYWxseSBldmVuIGFuYWx5emUgdGhlIEJQRiBwcm9ncmFtcyB0aGF0IGFyZSBpbiB1c2UgaWYgdGhpcyBpc24mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdHJlYW0uYz0zNzU9c3RhdGljIGJvb2wgZHVtcF9zdGFja19jYih2b2lkICpjb29raWUsIHU2NCBpcCwgdTY0IHNwLCB1NjQgYnApXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy0zOTctXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjM5ODppbnQgYnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcylcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzk5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMzkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqVHJhY2luZyB0aGUgQ2FsbCBQYXRoIG9mIGBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2tgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2tgIGlzIGJlaW5nIGludm9rZWQuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgY2FsbCBzaXRlcyBpcyBjcnVjaWFsIGZvciB0cmFjaW5nIGV4ZWN1dGlvbiBmbG93IGFuZCBkZWJ1Z2dpbmcuIFRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCBpcyBhIGdsb2JhbCBzZWFyY2guIExldCYjMzk7cyBzZWUuLi4gYSBxdWljayBnbG9iYWwgc2VhcmNoIHNob3VsZCB1bmNvdmVyIGFsbCBpbnN0YW5jZXMgb2YgdGhhdCBmdW5jdGlvbiBuYW1lLiBUaGlzIHdpbGwgaW1tZWRpYXRlbHkgc2hvdyBtZSBhbGwgbG9jYXRpb25zIGluIHRoZSBjb2RlYmFzZSB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBpdHMgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGYuaD0zOTAwPWludCBicGZfc3RyZWFtX3N0YWdlX2NvbW1pdChzdHJ1Y3QgYnBmX3N0cmVhbV9zdGFnZSAqc3MsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzkwMS1cdFx0XHQgICAgZW51bSBicGZfc3RyZWFtX2lkIHN0cmVhbV9pZCk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM5MDI6aW50IGJwZl9zdHJlYW1fc3RhZ2VfZHVtcF9zdGFjayhzdHJ1Y3QgYnBmX3N0cmVhbV9zdGFnZSAqc3MpO1xuaW5jbHVkZS9saW51eC9icGYuaC0zOTAzLVxuaW5jbHVkZS9saW51eC9icGYuaC0zOTA0LSNkZWZpbmUgYnBmX3N0cmVhbV9wcmludGsoc3MsIC4uLikgYnBmX3N0cmVhbV9zdGFnZV9wcmludGsoXHUwMDI2c3MsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9icGYuaDozOTA1OiNkZWZpbmUgYnBmX3N0cmVhbV9kdW1wX3N0YWNrKHNzKSBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2soXHUwMDI2c3MpXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM5MDYtXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz0zNzU9c3RhdGljIGJvb2wgZHVtcF9zdGFja19jYih2b2lkICpjb29raWUsIHU2NCBpcCwgdTY0IHNwLCB1NjQgYnApXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy0zOTctXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjM5ODppbnQgYnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcylcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzk5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NzYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gYGJwZl9zdHJlYW1fZHVtcF9zdGFja2AqKgoKUmlnaHQsIHNvIEkmIzM5O20gaW4gdGhlIHRoaWNrIG9mIHRoaXMgYW5kIEkmIzM5O3ZlIGNvbWUgYWNyb3NzIHRoaXMgYGJwZl9zdHJlYW1fZHVtcF9zdGFja2AgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHdoZXJlIGlzICp0aGlzKiBjYWxsZWQgZnJvbT8mIzM0OyBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgZmlyc3QgcXVlc3Rpb24sIGlzbiYjMzk7dCBpdD8gR290dGEgdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgY2FsbCBncmFwaCwgdG8gZmlndXJlIG91dCB3aHkgdGhpcyB0aGluZyBpcyBldmVuIGJlaW5nIGludm9rZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGhlcmUuIElzIGl0IHBhcnQgb2YgdGhlIGluc3RydW1lbnRhdGlvbiBmb3IgZGVidWdnaW5nPyBJcyBpdCBjb3JlIHRvIHNvbWUgZGF0YSBwcm9jZXNzaW5nIHBhdGg/IElzIGl0IGNhbGxlZCBmcm9tIGEgYGJwZl9pdGVyYCBjb250ZXh0PyBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgdGhlIHBsYWNlcyB3aGVyZSB0aGlzIHRoaW5nIGlzIHVzZWQgdG8gcHJvcGVybHkgZ3JvayB0aGUgZnVuY3Rpb24gYW5kIHRoZSBkYXRhIGl0IGFjY2Vzc2VzLiBTbywgd2hlcmXigJlzIHRoZSBjYWxsIHNpdGU/IExldCYjMzk7cyBmaW5kIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3N0cmVhbV9kdW1wX3N0YWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9MzkwMj1pbnQgYnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcyk7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0zOTA0LSNkZWZpbmUgYnBmX3N0cmVhbV9wcmludGsoc3MsIC4uLikgYnBmX3N0cmVhbV9zdGFnZV9wcmludGsoXHUwMDI2c3MsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9icGYuaDozOTA1OiNkZWZpbmUgYnBmX3N0cmVhbV9kdW1wX3N0YWNrKHNzKSBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2soXHUwMDI2c3MpXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM5MDYtXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTkzMj12b2lkIGJwZl9wcm9nX3JlcG9ydF9hcmVuYV92aW9sYXRpb24oYm9vbCB3cml0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGZhdWx0X2lwKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy05NTctXHRcdFx0XHQgIHdyaXRlID8gXCYjMzQ7V1JJVEVcJiMzNDsgOiBcJiMzNDtSRUFEXCYjMzQ7LCBhZGRyKTtcbmtlcm5lbC9icGYvYXJlbmEuYzo5NTg6XHRcdGJwZl9zdHJlYW1fZHVtcF9zdGFjayhzcyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtOTU5LVx0fSkpO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTMyMjE9c3RhdGljIG5vaW5saW5lIHZvaWQgYnBmX3Byb2dfcmVwb3J0X21heV9nb3RvX3Zpb2xhdGlvbih2b2lkKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMyMzEtXHRcdGJwZl9zdHJlYW1fcHJpbnRrKHNzLCBcJiMzNDtFUlJPUjogVGltZW91dCBkZXRlY3RlZCBmb3IgbWF5X2dvdG8gaW5zdHJ1Y3Rpb25cXG5cJiMzNDspO1xua2VybmVsL2JwZi9jb3JlLmM6MzIzMjpcdFx0YnBmX3N0cmVhbV9kdW1wX3N0YWNrKHNzKTtcbmtlcm5lbC9icGYvY29yZS5jLTMyMzMtXHR9KSk7XG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM9NjcyPXN0YXRpYyB2b2lkIGJwZl9wcm9nX3JlcG9ydF9ycXNwaW5sb2NrX3Zpb2xhdGlvbihjb25zdCBjaGFyICpzdHIsIHZvaWQgKmxvY2ssIGJvb2wgaXJxc2F2ZSlcbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02ODYtXHRcdFx0YnBmX3N0cmVhbV9wcmludGsoc3MsIFwmIzM0O0hlbGQgbG9ja1slMmRdID0gMHglcHhcXG5cJiMzNDssIGksIHJxaC1cdTAwM2Vsb2Nrc1tpXSk7XG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo2ODc6XHRcdGJwZl9zdHJlYW1fZHVtcF9zdGFjayhzcyk7XG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02ODgtXHR9KSk7XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz0yNjE9X19icGZfa2Z1bmMgaW50IGJwZl9zdHJlYW1fcHJpbnRfc3RhY2soaW50IHN0cmVhbV9pZCwgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtMjcyLVx0YnBmX3N0cmVhbV9zdGFnZShzcywgcHJvZywgc3RyZWFtX2lkLCAoe1xua2VybmVsL2JwZi9zdHJlYW0uYzoyNzM6XHRcdGJwZl9zdHJlYW1fZHVtcF9zdGFjayhzcyk7XG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI3NC1cdH0pKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2OTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEJQRiBTdHJlYW0gRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGEgcGF0dGVybiBoZXJlIHdpdGggdGhlc2UgYGJwZl9zdHJlYW1gIGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgIGlzIHRoZSBiYWNrYm9uZSwgYmVpbmcgY2FsbGVkIGluZGlyZWN0bHkgdGhyb3VnaCBgYnBmX3N0cmVhbV9wcmludGtgIHdpdGhpbiB0aGUga2VybmVsIGZpbGVzIGBhcmVuYS5jYCwgYGNvcmUuY2AsIGFuZCBgcnFzcGlubG9jay5jYC4gVGhlbiwgdGhlcmUmIzM5O3MgYGJwZl9zdHJlYW1fdnByaW50a2AsIHdoaWNoLCBpbXBvcnRhbnRseSwgaXMgZXhwb3NlZCBhcyBhIGtmdW5jLCBhIGtleSBkZXRhaWwgZm9yIEJQRiBwcm9ncmFtIGludGVyYWN0aW9uLiBGaW5hbGx5LCBgYnBmX3N0cmVhbV9yZWFkYCBpcyBjbGVhcmx5IHRpZWQgdG8gdGhlIGBCUEZfUFJPR19TVFJFQU1fUkVBRGAgY29tbWFuZCBvZiB0aGUgYGJwZmAgc3lzY2FsbCwgd2hpY2ggSSBhc3N1bWUgaGFuZGxlcyByZWFkaW5nIGRhdGEgZnJvbSB0aGUgc3RyZWFtLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byBgcHJvZ19zdHJlYW1fcmVhZGAgd2l0aGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiByZWFkaW5nIHRoZSBzdHJlYW0gZGF0YSB3aWxsIGJlLiBUaGlzIHdpbGwgc2hvdyBob3cgd2UgY29udHJvbCB0aGUgdXNlIG9mIHRoZSBkYXRhIGluIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2dfc3RyZWFtX3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz02MTEyPXN0YXRpYyBpbnQgdG9rZW5fY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYxMjMtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MTI0OiNkZWZpbmUgQlBGX1BST0dfU1RSRUFNX1JFQURfQllfRkRfTEFTVF9GSUVMRCBwcm9nX3N0cmVhbV9yZWFkLnByb2dfZmRcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYxMjUtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MTI2OnN0YXRpYyBpbnQgcHJvZ19zdHJlYW1fcmVhZCh1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYxMjcte1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjEyODpcdGNoYXIgX191c2VyICpidWYgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2Vwcm9nX3N0cmVhbV9yZWFkLnN0cmVhbV9idWYpO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjEyOTpcdHUzMiBsZW4gPSBhdHRyLVx1MDAzZXByb2dfc3RyZWFtX3JlYWQuc3RyZWFtX2J1Zl9sZW47XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MTMwLVx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYxMzUtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MTM2Olx0cHJvZyA9IGJwZl9wcm9nX2dldChhdHRyLVx1MDAzZXByb2dfc3RyZWFtX3JlYWQucHJvZ19mZCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MTM3LVx0aWYgKElTX0VSUihwcm9nKSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MTM5LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjE0MDpcdHJldCA9IGJwZl9wcm9nX3N0cmVhbV9yZWFkKHByb2csIGF0dHItXHUwMDNlcHJvZ19zdHJlYW1fcmVhZC5zdHJlYW1faWQsIGJ1ZiwgbGVuKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYxNDEtXHRicGZfcHJvZ19wdXQocHJvZyk7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjE4OT1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMyNS1cdGNhc2UgQlBGX1BST0dfU1RSRUFNX1JFQURfQllfRkQ6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MzI2Olx0XHRlcnIgPSBwcm9nX3N0cmVhbV9yZWFkKFx1MDAyNmF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMyNy1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjI1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTM0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIFN0cmVhbSBTdWJzeXN0ZW0gQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBCUEYgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gdGhlIEJQRiBzdHJlYW0gc3Vic3lzdGVtIGFuZCB0aGUgYEJQRl9QUk9HX1NUUkVBTV9SRUFEX0JZX0ZEYCBjb21tYW5kLCB3aGljaCBpcyBhIGJwZiBzeXNjYWxsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQsIHdoeSwgYW5kIGFyZSB0aGVzZSBjaGFuZ2VzIGZ1enphYmxlLgoKRmlyc3QsIHRoZXJlJiMzOTtzIHRoaXMgZml4IHRvIGBicGZfc3RyZWFtX3JlYWRgLiBUaGUgb2xkIGNvZGUgaGFkIGEgYnVnIHdoZXJlIHBhcnRpYWwgYGNvcHlfdG9fdXNlcmAgd3JpdGVzIHdvdWxkIGxlYWQgdG8gYC1FRkFVTFRgIGV2ZW4gaWYgc29tZSBkYXRhIHRyYW5zZmVycmVkLiBUaGUgdXBkYXRlZCBjb2RlIGNvcnJlY3RseSB1cGRhdGVzIGNvbnN1bWVkIGxlbmd0aHMgYW5kIG5vdyAqb25seSogcmV0dXJucyBgLUVGQVVMVGAgaWYgYWJzb2x1dGVseSAqbm8qIGJ5dGVzIHdlcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuIEVzc2VudGlhbGx5LCBpdCBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgc2NlbmFyaW8gd2hlcmUgYSB1c2VyIHNwYWNlIGJ1ZmZlciBpc24mIzM5O3QgbGFyZ2UgZW5vdWdoLiBUaGF0IGNoYW5nZSBpbnZvbHZlcyB1cGRhdGluZyBgZWxlbS0mZ3Q7Y29uc3VtZWRfbGVuYCBhbmQgYHJlbV9sZW5gIGR1cmluZyB0aGUgY29weS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY29ycmVjdG5lc3MgaW1wcm92ZW1lbnQuCgpOZXh0LCBJIHNlZSBjaGFuZ2VzIHRvIGBicGZfc3RyZWFtX3ZwcmludGtgLiBUaGUga2V5IGhlcmUgaXMgcHJldmVudGluZyB0cnVuY2F0aW9uLiBQcmV2aW91c2x5LCBgYnN0cl9wcmludGZgIGNvdWxkIHdyaXRlIGEgc3RyaW5nIHRoYXQgZXhjZWVkZWQgYSBtYXhpbXVtIGJ1ZmZlciBzaXplLiBOb3csIHRoZSBjb2RlIHJldHVybnMgYC1FMkJJR2AgKHNpbWlsYXIgdG8gd2hhdCB5b3UmIzM5O2Qgc2VlIGluIGBzbnByaW50ZmAgb3IgYHZzbnByaW50ZmApIGlmIHRoZSBmb3JtYXR0ZWQgc3RyaW5nIHdvdWxkIGJlIHRydW5jYXRlZCwgKmJlZm9yZSogYXR0ZW1wdGluZyB0byBwdXNoIHRoZSByZXN1bHQuIFRoaXMgcHJldmVudHMgcHVzaGluZyBjb3JydXB0ZWQgb3IgcGFydGlhbCBzdHJpbmdzIGludG8gdGhlIHN0cmVhbSwgYW5kIGl0IHVzZXMgYSBzdGFuZGFyZCBlcnJvciBjb2RlIHRvIGluZGljYXRlIHRoYXQgdHJ1bmNhdGlvbiBvY2N1cnJlZC4KClRoZSBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgIGNoYW5nZXMgYXJlIGEgYml0IHN1YnRsZXIuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyB1c2luZyBgdnNucHJpbnRmYCwgd2hpY2ggcmV0dXJucyB0aGUgKmxlbmd0aCogb2YgdGhlIHN0cmluZyB0aGF0ICp3b3VsZCogaGF2ZSBiZWVuIHdyaXR0ZW4gaWYgdGhlcmUgaGFkIGJlZW4gZW5vdWdoIHNwYWNlLCByYXRoZXIgdGhhbiB0aGUgYWN0dWFsIG51bWJlciBvZiBieXRlcyB3cml0dGVuLiBUaGlzIHdhcyBjYXVzaW5nIGFuIGluY29ycmVjdCBsZW5ndGggY2FsY3VsYXRpb24uIFRoZSBmaXggdXNlcyBgdnNjbnByaW50ZmAsIHdoaWNoIHJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiwgYW5kIG9ubHkgdXBkYXRlcyB0aGUgc3RyZWFtIGxlbmd0aCBgc3MtJmd0O2xlbmAgaWYgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgc3VjY2VlZHMuIFRoaXMgbGVhZHMgdG8gbW9yZSBhY2N1cmF0ZSBhY2NvdW50aW5nIG9mIGRhdGEgaW4gdGhlIHN0cmVhbS4KClRoZW4sIHRoZXJlJiMzOTtzIHRoZSBjaGFuZ2UgdG8gYGJwZl9zdHJlYW1fcHVzaF9zdHJgLiBUaGlzIG9uZSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgY2FwYWNpdHkgbGVhay4gSWYgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgKHdoaWNoIGlzIHRoZSBhY3R1YWwgbG93IGxldmVsIHB1c2ggdG8gdGhlIHN0cmVhbSkgZmFpbHMg4oCTIGZvciBleGFtcGxlLCBkdWUgdG8gYW4gb3V0LW9mLW1lbW9yeSBlcnJvciDigJMgdGhlIG9yaWdpbmFsIGNvZGUgd291bGQgY29uc3VtZSBjYXBhY2l0eS4gVGhlIHVwZGF0ZWQgY29kZSB3aWxsIHJlbGVhc2UgdGhlIGNhcGFjaXR5IGlmIHRoZSBsb3ctbGV2ZWwgcHVzaCBmYWlscy4gVGhpcyBwcmV2ZW50cyB0aGUgc3RyZWFtIGZyb20gcmVwb3J0aW5nIGF2YWlsYWJsZSBjYXBhY2l0eSB0aGF0IGRvZXNuJiMzOTt0IGFjdHVhbGx5IGV4aXN0IGFuZCwgaWYgdGhlIHByb2dyYW0gaXMgY2FyZWZ1bGx5IHdyaXR0ZW4sIG1pZ2h0IHByZXZlbnQgYW4gb3V0LW9mLW1lbW9yeSBjb25kaXRpb24uCgpGaW5hbGx5LCBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYCBoYXMgYW4gb2ZmLWJ5LW9uZSBlcnJvciBmaXguIFRoZSBjb2RlIHByZXZpb3VzbHkgYWxsb3dlZCBhbiBlbGVtZW50IGxlbmd0aCB0aGF0IGNvdWxkIGJlIGVxdWFsIHRvIHRoZSBtYXggbGVuZ3RoLCB3aGljaCBjb3VsZCBoYXZlIGJlZW4gYSBidWZmZXIgb3ZlcmZsb3cuIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgoKQWxsIHRoZXNlIGNoYW5nZXMgYXJlIGVzc2VudGlhbGx5IGNvcnJlY3RuZXNzIGltcHJvdmVtZW50cy4gQW5kIEkga25vdyB0aGUgQlBGIHN1YnN5c3RlbSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBzeXNjYWxscyBhbmQgQlBGIHByb2dyYW1zIHRoZW1zZWx2ZXMsIHdoaWNoIG1lYW5zIEkgY2FuIHJlYWNoIGl0IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFNvLCB5ZXMsIHRoZXNlIGZpeGVzIGFyZSB3b3J0aCBmdXp6aW5nLgoKTXkgcHJpbWFyeSB0YXJnZXRzIGFyZSB0aGUgZnVuY3Rpb25zIG1vZGlmaWVkOiBgYnBmX3N0cmVhbV9yZWFkYCwgd2hpY2ggaXMgY2FsbGVkIHRocm91Z2ggdGhlIHN5c2NhbGwgYF9fc3lzX2JwZmAsIGBicGZfc3RyZWFtX3ZwcmludGtgLCBhbmQgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYC4gSSBuZWVkIHRvIHJlbWVtYmVyIGBicGZfc3RyZWFtX3JlYWRgIGlzIGNhbGxlZCB0aHJvdWdoIGBicGZfcHJvZ19zdHJlYW1fcmVhZGAgZnVuY3Rpb24uIEkgd2lsbCBuZWVkIHRvIGNoZWNrIGhvdyB0byByZWFjaCBgYnBmX3N0cmVhbV92cHJpbnRrYCBhbmQgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCBmcm9tIEJQRiBwcm9ncmFtcyB0aGF0IEkgbWF5IHdyaXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcHJvZ19zdHJlYW1fcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RyZWFtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdHJlYW0uYz0xNjA9c3RhdGljIGludCBicGZfc3RyZWFtX3JlYWQoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgdm9pZCBfX3VzZXIgKmJ1ZiwgaW50IGxlbilcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTIwNS1cbmtlcm5lbC9icGYvc3RyZWFtLmM6MjA2OmludCBicGZfcHJvZ19zdHJlYW1fcmVhZChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGVudW0gYnBmX3N0cmVhbV9pZCBzdHJlYW1faWQsIHZvaWQgX191c2VyICpidWYsIGludCBsZW4pXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTIwNy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTEyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCB0aGVzZSBCUEYgZnVuY3Rpb25zOiBgYnBmX3Byb2dfc3RyZWFtX3JlYWRgLCBgYnBmX3N0cmVhbV92cHJpbnRrYCwgYW5kIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AuIFJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBlc3RhYmxpc2ggdGhhdCBgYnBmX3Byb2dfc3RyZWFtX3JlYWRgIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uOyBubyBzdXJwcmlzZXMgdGhlcmUuIEFuZCwgc2luY2UgYGJwZl9zdHJlYW1fdnByaW50a2AgaXMgYSBrZnVuYywgdGhhdCBhbHNvIG1lYW5zIGl0JiMzOTtzIGdsb2JhbGx5IGF2YWlsYWJsZS4gRmluYWxseSwgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCBpcyBhbHNvIGEgZ2xvYmFsIGZ1bmN0aW9uLiBOb3csIGxldCYjMzk7cyBkaXZlIGludG8gY29uZmlndXJhdGlvbnMuIEl0JiMzOTtzIHRpbWUgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IG11c3QgYmUgZW5hYmxlZC4gSSBrbm93IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGFuIGFic29sdXRlIG5lY2Vzc2l0eS4gSG93ZXZlciwgSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IG90aGVyIGhpZGRlbiBkZXBlbmRlbmNpZXMuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBjaGVjayBga2VybmVsL2JwZi9NYWtlZmlsZWAgYWdhaW4sIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGlkZW50aWZ5IGFueSBvdGhlciByZWxldmFudCBjb25maWcgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RyZWFtXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM2NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipCUEYgU3lzdGVtIENhbGwgQ29uZmlndXJhdGlvbiBhbmQgYGJwZl9zdHJlYW1fdnByaW50a2AgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgY3J1Y2lhbCBzZXR0aW5nIGhlcmUsIHRoZSBjb3JlIGVuYWJsZXIgZm9yIEJQRiBzeXN0ZW0gY2FsbCBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3MgY29ycmVjdGx5IGNvbmZpZ3VyZWQgYW5kIGZ1bmN0aW9uaW5nIGFzIGV4cGVjdGVkIGJlZm9yZSBkaXZpbmcgZGVlcGVyLgoKTm93LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBicGZfc3RyZWFtX3ZwcmludGtgLiBJJiMzOTttIGN1cmlvdXMgaWYgaXQgaGFzIGFueSBhZGRpdGlvbmFsIGRlcGVuZGVuY2llcyBvciBwcmVyZXF1aXNpdGVzIGJleW9uZCB0aGUgb2J2aW91cyBCUEYgc3lzdGVtIGNhbGwgZW5hYmxlbWVudC4gVGhlcmUgY291bGQgYmUgc3VidGxlIGxpbmthZ2VzIHRvIG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIHN1YnN5c3RlbXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkgbmVlZCB0byBlbnN1cmUgYSBob2xpc3RpYyB1bmRlcnN0YW5kaW5nIG9mIGFsbCBjb250cmlidXRpbmcgZmFjdG9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3N0cmVhbV92cHJpbnRrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdHJlYW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0cmVhbS5jPTIxNj1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy0yMjEtICovXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjIyMjpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b2lkICphcmdzLFxua2VybmVsL2JwZi9zdHJlYW0uYy0yMjMtXHRcdFx0XHQgICB1MzIgbGVuX19zeiwgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTcyOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDaGVja2luZyBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgIGZvciBOZWNlc3NhcnkgVXBkYXRlcyoqCgpBbHJpZ2h0LCBubyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBnb2luZyBvbiBhcm91bmQgdGhpcyBvbmUsIHdoaWNoIGlzIGdvb2QuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIE5vdywgSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgLiBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIHN0aWxsIG9wZXJhdGluZyBjb3JyZWN0bHkgd2l0aGluIHRoZSBjdXJyZW50IGRlc2lnbiBhbmQgdGhhdCBJIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55IG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgb3IgaW50ZXJhY3Rpb25zLiBJcyB0aGVyZSBzb21ldGhpbmcgZWxzZSB0aGlzIGZ1bmN0aW9uIG5vdyBuZWVkcyB0byB3b3JrIHdpdGgsIGdpdmVuIHRoZSByZWNlbnQgY2hhbmdlcz8gSSBzaG91bGQgY2FyZWZ1bGx5IGV4YW1pbmUgaXRzIGltcGxlbWVudGF0aW9uIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGRhdGEgZmxvdy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBkb2luZyBldmVyeXRoaW5nIGl0JiMzOTtzIHN1cHBvc2VkIHRvIGJlIGRvaW5nIGFuZCB0aGF0IHRoZSBpbnRlZ3JhdGlvbiBpcyBjbGVhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3N0cmVhbV9zdGFnZV9wcmludGsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0cmVhbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RyZWFtLmM9MzE0PXZvaWQgYnBmX3N0cmVhbV9zdGFnZV9mcmVlKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcylcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTMyMS1cbmtlcm5lbC9icGYvc3RyZWFtLmM6MzIyOmludCBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhzdHJ1Y3QgYnBmX3N0cmVhbV9zdGFnZSAqc3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxua2VybmVsL2JwZi9zdHJlYW0uYy0zMjMte1xuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmM9Mzc1PXN0YXRpYyBib29sIGR1bXBfc3RhY2tfY2Iodm9pZCAqY29va2llLCB1NjQgaXAsIHU2NCBzcCwgdTY0IGJwKVxuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtMzg4LVx0XHRcdGdvdG8gZW5kO1xua2VybmVsL2JwZi9zdHJlYW0uYzozODk6XHRcdGN0eHAtXHUwMDNlZXJyID0gYnBmX3N0cmVhbV9zdGFnZV9wcmludGsoY3R4cC1cdTAwM2VzcywgXCYjMzQ7JXBTXFxuICAlcyBAICVzOiVkXFxuXCYjMzQ7LFxua2VybmVsL2JwZi9zdHJlYW0uYy0zOTAtXHRcdFx0XHRcdFx0ICAgICh2b2lkICopKGxvbmcpaXAsIGxpbmUsIGZpbGUsIG51bSk7XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy0zOTMtZW5kOlxua2VybmVsL2JwZi9zdHJlYW0uYzozOTQ6XHRjdHhwLVx1MDAzZWVyciA9IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKGN0eHAtXHUwMDNlc3MsIFwmIzM0OyVwU1xcblwmIzM0OywgKHZvaWQgKikobG9uZylpcCk7XG5rZXJuZWwvYnBmL3N0cmVhbS5jLTM5NS1cdHJldHVybiAhY3R4cC1cdTAwM2VlcnI7XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz0zOTg9aW50IGJwZl9zdHJlYW1fc3RhZ2VfZHVtcF9zdGFjayhzdHJ1Y3QgYnBmX3N0cmVhbV9zdGFnZSAqc3MpXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy00MDItXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjQwMzpcdHJldCA9IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHNzLCBcJiMzNDtDUFU6ICVkIFVJRDogJWQgUElEOiAlZCBDb21tOiAlc1xcblwmIzM0Oyxcbmtlcm5lbC9icGYvc3RyZWFtLmMtNDA0LVx0XHRcdFx0ICAgICAgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwgX19rdWlkX3ZhbChjdXJyZW50X3JlYWxfY3JlZCgpLVx1MDAzZWV1aWQpLFxuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtNDA3LVx0XHRyZXR1cm4gcmV0O1xua2VybmVsL2JwZi9zdHJlYW0uYzo0MDg6XHRyZXQgPSBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhzcywgXCYjMzQ7Q2FsbCB0cmFjZTpcXG5cJiMzNDspO1xua2VybmVsL2JwZi9zdHJlYW0uYy00MDktXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtNDEzLVx0XHRyZXR1cm4gY3R4LmVycjtcbmtlcm5lbC9icGYvc3RyZWFtLmM6NDE0Olx0cmV0dXJuIGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHNzLCBcJiMzNDtcXG5cJiMzNDspO1xua2VybmVsL2JwZi9zdHJlYW0uYy00MTUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU4NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCUEYgU3RyZWFtIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGVyZSBhcmVuJiMzOTt0IGFueSBzcGVjaWFsIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIHRoZXNlIGZ1bmN0aW9ucywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoYXQgbWVhbnMgdGhleSBhcmUgYWx3YXlzIGluY2x1ZGVkLiBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBpbXBvcnRhbnQgc3ltYm9scyBmb3IgdGhpcy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZTogYGJwZl9wcm9nX3N0cmVhbV9yZWFkYCwgYGJwZl9zdHJlYW1fdnByaW50a2AsIGFuZCBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgLgoKV2FpdCBhIG1pbnV0ZSwgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCBpcyBjYWxsZWQgaW5kaXJlY3RseSB0aHJvdWdoIGBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2tgLiBJIHNlZSB0aGF0IGBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2tgIGlzIGNhbGxlZCBieSBgYnBmX3Byb2dfcmVwb3J0X2FyZW5hX3Zpb2xhdGlvbmAsIGBicGZfcHJvZ19yZXBvcnRfbWF5X2dvdG9fdmlvbGF0aW9uYCwgYW5kIGBicGZfcHJvZ19yZXBvcnRfcnFzcGlubG9ja192aW9sYXRpb25gLiBTbywgKmNhbiogYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCBiZSBkaXJlY3RseSBjYWxsZWQgZnJvbSBCUEY/IE5vLCBpdCYjMzk7cyBhbiBpbnRlcm5hbCBrZXJuZWwgZnVuY3Rpb24uIEl0IGZvcm1hdHMgc3RyaW5ncyBpbnRvIHRoZSBzdHJlYW0sIGJ1dCBpdCYjMzk7cyAqZ2xvYmFsKiBhbmQgaXQmIzM5O3MgYmVpbmcgbW9kaWZpZWQuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGluIHRoaXMgY29udGV4dCwgc28gaXQgaXMgYSBnb29kIHRhcmdldC4KCk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbi4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIG9idmlvdXMgb25lLCBidXQgYXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBCZXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTtsbCBnbyBiYWNrIHRvIGBpbml0L0tjb25maWdgIGFuZCBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgQlBGX1NZU0NBTExgIHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMDAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludGVybmFsIENvZGUgRGl2ZTogSHVudGluZyBmb3IgYEJQRl9TWVNDQUxMYCoqCgpBbHJpZ2h0LCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIGRlZXAgaW50byB0aGlzIGNvZGUsIGJ1dCBzb21ldGhpbmcmIzM5O3MgbmFnZ2luZyBhdCBtZS4gSSYjMzk7dmUgZW5jb3VudGVyZWQgYEJQRl9TWVNDQUxMYCwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzLCAmIzM0O1doZXJlIGV4YWN0bHkgKmlzKiB0aGF0IGRlZmluZWQ/JiMzNDsgVGhpcyBpc24mIzM5O3QganVzdCBhIGNhc3VhbCB1c2FnZTsgaXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gdGhpcyBwYXJ0aWN1bGFyIGJpdCBvZiBrZXJuZWwtbGV2ZWwgbWFnaWMgSSYjMzk7bSBhbmFseXppbmcuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIG9yaWdpbiDigJMgdGhlIGluY2x1ZGUgZmlsZSwgdGhlIHNwZWNpZmljIG1hY3JvIGRlZmluaXRpb24uIEkgbmVlZCB0byBiZSAqcHJlY2lzZSouIElzIGl0IGEgY29yZSBCUEYgaGVhZGVyPyBJcyBpdCBidXJpZWQgaW4gc29tZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZGVmaW5pdGlvbj8gSXMgaXQgZXZlbiBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBCUEYgbGlicmFyeSwgb3IgaXMgdGhpcyBzb21lIGN1c3RvbSBhZGFwdGF0aW9uPyBJIGtub3cgSSBuZWVkIHRvIHRyYWNrIHRoaXMgZG93biB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgd2l0aGluIHRoaXMgY29kZSBwYXRoLiBUaW1lIHRvIGdvIGh1bnRpbmchIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzUzNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBjb25maWd1cmF0aW9uIGlzIHN0cnVjdHVyZWQuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAyNy4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBwcm9iYWJseSBkZWZpbmVkIHNvbWV3aGVyZSBpbiB0aGF0IGFyZWEuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGZvdW5kYXRpb25hbCBzZXR0aW5ncyByZWxhdGVkIHRvIGVuYWJsaW5nIG9yIGRpc2FibGluZyBCUEYgZnVuY3Rpb25hbGl0eSwgbWF5YmUgc29tZSBvZiB0aGUgY29yZSBmZWF0dXJlIHRvZ2dsZXMsIG9yIHBlcmhhcHMgdGhlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB3aGF0JiMzOTtzICpjb25maWd1cmFibGUqIGFuZCBob3cgdGhhdCBjb25maWd1cmFiaWxpdHkgaXMgcHJlc2VudGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAyOTpcdFx0c2VsZWN0IEJQRlxuICAzMDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDMxOlx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzI6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzM6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM0Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDM2Olx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICAzNzpcdFx0ZGVmYXVsdCBuXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDA6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIEJQRl9KSVRcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlBGXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDExCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBTdHJlYW0gQ2hhbmdlcyoqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzIGNvbnNpZGVyYWJseS4gTm93LCBsZXQgbWUganVzdCBydW4gdGhyb3VnaCB0aGVzZSBjaGFuZ2VzIG9uZSBtb3JlIHRpbWUgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSBkaWRuJiMzOTt0IGdsb3NzIG92ZXIgYW55IGNydWNpYWwgc3ltYm9scywgeW91IGtub3cgaG93IHRoZXNlIHRoaW5ncyBjYW4gYmUuCgpBbHJpZ2h0LCBoZXJlJiMzOTtzIHdoYXQgd2UmIzM5O3ZlIGdvdDogYGJwZl9zdHJlYW1fZWxlbV9hbGxvY2AsIGBicGZfc3RyZWFtX2NvbnN1bWVfY2FwYWNpdHlgLCBgYnBmX3N0cmVhbV9yZWxlYXNlX2NhcGFjaXR5YCwgYGJwZl9zdHJlYW1fcHVzaF9zdHJgLCBhbmQgYGJwZl9zdHJlYW1fcmVhZGAgYXJlIHRoZSBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGFkanVzdGVkLiBUaGVuIHdlIGhhdmUgYGJwZl9zdHJlYW1fdnByaW50a2AsIHdoaWNoIGlzIGEga2Z1bmMsIGFuZCB0aGUgZ2xvYmFsIGZ1bmN0aW9uIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AuCgpMb29raW5nIGF0IHRoZSBnbG9iYWwgZnVuY3Rpb25zLCBvciB0aG9zZSB0aGF0IGRpcmVjdGx5IGludGVyYWN0IHdpdGggdGhvc2Ugc3RhdGljYWxseSBtb2RpZmllZCBmdW5jdGlvbnMsIHRoZSBrZXkgb25lcyBzZWVtIHRvIGJlOiBgYnBmX3Byb2dfc3RyZWFtX3JlYWRgIOKAkyB0aGF0IGNhbGxzIGBicGZfc3RyZWFtX3JlYWRgIOKAkyBhbmQgYGJwZl9zdHJlYW1fdnByaW50a2Ag4oCTIHRoYXQgY2FsbHMgYGJwZl9zdHJlYW1fcHVzaF9zdHJgIOKAkyBhcyB3ZWxsIGFzIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2Agd2hpY2ggY2FsbHMgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAuCgpXYWl0IGEgbWludXRlLCBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgaXMgY2FsbGVkIGJ5IGJvdGggYGJwZl9zdHJlYW1fdnByaW50a2AgYW5kLi4uaGFuZyBvbi4uLmBicGZfc3RyZWFtX3ByaW50X3N0YWNrYD8gTGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgYnBmX3N0cmVhbV9wcmludF9zdGFja2AuIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBjYWxsIGNoYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc3RyZWFtX3ByaW50X3N0YWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdHJlYW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0cmVhbS5jPTIyMj1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b2lkICphcmdzLFxuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtMjYwLS8qIERpcmVjdGx5IHRyaWdnZXIgYSBzdGFjayBkdW1wIGZyb20gdGhlIHByb2dyYW0uICovXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjI2MTpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV9wcmludF9zdGFjayhpbnQgc3RyZWFtX2lkLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI2Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODE1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQlBGIFN0cmVhbSBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBCUEYgc3RyZWFtIGNvZGUsIGFuZCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSBzZWVpbmcuIGBicGZfc3RyZWFtX3ByaW50X3N0YWNrYCB1bHRpbWF0ZWx5IHJlbGllcyBvbiBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgIHRocm91Z2ggYSBjaGFpbiBvZiBjYWxscy4gVGhhdCBtYWtlcyBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgIGEgcHJldHR5IGNyaXRpY2FsIHN5bWJvbCB0byBzdGFydCB3aXRoLiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gdGhpbmtpbmcgSSBjYW4gZXh0cmFwb2xhdGUgZnJvbSB0aGF0LgoKTGV0IG1lIHNlZSB3aGF0IGVsc2UgaXMgaGFwcGVuaW5nIGluIHRoaXMgc3BoZXJlLiBJIHNlZSBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYCBpcyBjYWxsZWQgYnkgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAsIHdoaWNoLCBpbiB0dXJuLCBpcyB1c2VkIGJ5IGJvdGggYGJwZl9zdHJlYW1fcHVzaF9zdHJgICphbmQqIHRoZSBwcmV2aW91c2x5IGlkZW50aWZpZWQgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYC4gRnVydGhlciBhbmFseXNpcyBzaG93cyBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgaXMgdXNlZCBieSBgYnBmX3N0cmVhbV92cHJpbnRrYC4KCkFscmlnaHQsIEkmIzM5O3ZlIGdvdCBhIGNsZWFyZXIgcGljdHVyZSBub3cuIEl0IGxvb2tzIGxpa2UgdGhlIGtleSBzeW1ib2xzIGhlcmUgYXJlOgoKKiAgIGBicGZfcHJvZ19zdHJlYW1fcmVhZGAKKiAgIGBicGZfc3RyZWFtX3ZwcmludGtgCiogICBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgCgpJIHNob3VsZCBub3cgcXVpY2tseSBjaGVjayBpZiBgYnBmX3Byb2dfc3RyZWFtX3JlYWRgIGlzIGV4cG9ydGVkLCBvciBqdXN0IGdsb2JhbC4gVGhlIGltcGxpY2F0aW9ucyBhcmUgZGlmZmVyZW50IGZvciBlYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmJwZl9wcm9nX3N0cmVhbV9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM3MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIFN5bWJvbCBWaXNpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIGBicGZfc3RyZWFtX3ZwcmludGtgLiBJIGtub3cgaXQmIzM5O3Mgbm90IGV4cGxpY2l0bHkgKmV4cG9ydGVkKiBwZXIgc2UsIGJ1dCBpdCYjMzk7cyBkZWZpbmVkIGdsb2JhbGx5IHdpdGhpbiBga2VybmVsL2JwZi9zdHJlYW0uY2AgYW5kIGlzIGFjdHVhbGx5IGJlaW5nICp1c2VkKiB3aXRoaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIEZvciB0aGUgYEZvY3VzU3ltYm9sc2AgcHJvamVjdCwgdGhpcyBpbXBsaWNpdCBsaW5rYWdlIHNob3VsZCBiZSBwZXJmZWN0bHkgYWNjZXB0YWJsZS4gTm93LCBJIGp1c3QgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgYGJwZl9zdHJlYW1fdnByaW50a2Agc3ltYm9sIGhhcyBhbiBgRVhQT1JUYCBtYWNybyBhcHBsaWVkIHRvIGl0IHNvbWV3aGVyZS4gSSYjMzk7bGwgY2hlY2sgdGhhdCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qYnBmX3N0cmVhbV92cHJpbnRrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTYxOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgRnVuY3Rpb24gSW5zcGVjdGlvbioqCgpBbHJpZ2h0LCB0aGlzIGlzIGEga2Z1bmMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIHJlZ2lzdGVyZWQgdGhyb3VnaCB0aGUgQlRGIChCUEYgVHlwZSBGb3JtYXQpIGluZnJhc3RydWN0dXJlLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBtb3ZlIGlzIHRvIHZlcmlmeSBpdHMgYXZhaWxhYmlsaXR5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCBpcyBhY3R1YWxseSBleHBvcnRlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGNhbiB1c2UgdGhpcyBrZnVuYyBpbiB0aGUgQlBGIHByb2dyYW0gSSBhbSB3b3JraW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgxOQoJCQkJCQkJb3V0cHV0OiAxNTAKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIGFuZCBQcmlvcml0aXppbmcgQ29kZSBDaGFuZ2VzKioKCkFscmlnaHQsIHNvIHRoaXMgaXNuJiMzOTt0IGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBidXQgaXQmIzM5O3MgY2xlYXJseSBkZWZpbmVkIGFzIGEgZ2xvYmFsIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gQnV0IG1vcmUgaW1wb3J0YW50bHksIHRoZSBjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIG1hZGUgaGVyZSBhcmUgKipkZWZpbml0ZWx5Kiogd29ydGggc2lua2luZyBteSB0ZWV0aCBpbnRvIHdpdGggZnV6emluZy4gVGhpcyBpcyBjbGFzc2ljLCByaWdodD8gVGhlIGlzc3VlcyBsaXN0ZWQgaW1tZWRpYXRlbHkganVtcCBvdXQ6IHRoZXNlIGFyZSBhbGwgY3JpdGljYWwgYnVncyBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBCUEYgc3RyZWFtIHN1YnN5c3RlbS4gSSBzZWUgYSBwYXR0ZXJuIGhlcmU6CgoqICAgRmlyc3QsIHdlIGhhdmUgYW4gT2ZmLWJ5LW9uZSBpbiBsZW5ndGggY2hlY2sgaW4gYGJwZl9zdHJlYW1fZWxlbV9hbGxvY2AuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIG1lbW9yeSBpc3N1ZSwgYW5kIEkgaW1tZWRpYXRlbHkgd2FudCB0byBzZWUgdGhlIGRldGFpbHMgdG8gZW5zdXJlIHdlIGRpZG4mIzM5O3Qgb3BlbiBhIHdpZGVyIHZ1bG5lcmFiaWxpdHkuCgoqICAgVGhlbiwgd2UmIzM5O3ZlIGdvdCBhIGNhcGFjaXR5IGxlYWsgaW4gYGJwZl9zdHJlYW1fcHVzaF9zdHJgLCB3aGljaCBjb3VsZCBsZWFkIHRvIHJlc291cmNlIGV4aGF1c3Rpb24gaWYgbm90IG1hbmFnZWQgY29ycmVjdGx5LiBBbm90aGVyIGZ1enppbmcgdGFyZ2V0IHRvIHVuY292ZXIgcG90ZW50aWFsIERvUyB2dWxuZXJhYmlsaXRpZXMuCgoqICAgSW5jb3JyZWN0IGhhbmRsaW5nIG9mIHBhcnRpYWwgcmVhZHMgaW4gYGJwZl9zdHJlYW1fcmVhZGAsIG9rYXksIHRoYXQmIzM5O3MgYWxtb3N0IGFsd2F5cyBhIHNvdXJjZSBvZiB3ZWlyZG5lc3MuIFRoaXMgaXMgdGhlIGtpbmQgb2YgYnVnIHRoYXQgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IG9idmlvdXMsIGJ1dCBpdCBoYXMgdGhlIHBvdGVudGlhbCB0byBjYXVzZSBpc3N1ZXMgd2l0aCBkYXRhIGludGVncml0eSBvciBldmVuIGNyZWF0ZSB1bmV4cGVjdGVkIGNvbnRyb2wgZmxvdy4KCiogICBBbmQgb2YgY291cnNlLCB3ZSYjMzk7cmUgbWlzc2luZyBhIHRydW5jYXRpb24gY2hlY2sgaW4gYGJwZl9zdHJlYW1fdnByaW50a2AuIEEgY29tbW9uIHZ1bG5lcmFiaWxpdHkgZm9yIGJ1ZmZlciBvdmVyZmxvd3MsIGJ1dCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGhhbmRsZWQgdGhlIGZpeC4KCiogICBGaW5hbGx5LCBpbmNvcnJlY3QgbGVuZ3RoIGNhbGN1bGF0aW9uIGluIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgY291bGQgbGVhZCB0byBidWZmZXIgb3ZlcmZsb3dzIG9yIGRhdGEgY29ycnVwdGlvbiwgYXMgd2VsbC4KCkkgc2VlIHRoZSBjb21tb24gdGhyZWFkIGhlcmU6IG1lbW9yeSBtYW5hZ2VtZW50LCBib3VuZHMgY2hlY2tzLCBhbmQgZGF0YSBpbnRlZ3JpdHkuIFRoaXMgc2VlbXMgbGlrZSBhIGp1aWN5IHNldCBvZiB0YXJnZXRzIGZvciBmdXp6aW5nLiBJJiMzOTtsbCBnZXQgdGhlIHJlc3VsdHMgc2V0IHVwIGFzIHNvb24gYXMgSSBjYW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9wcm9nX3N0cmVhbV9yZWFkJiMzNDssCiAgICAmIzM0O2JwZl9zdHJlYW1fdnByaW50ayYjMzQ7LAogICAgJiMzNDticGZfc3RyZWFtX3N0YWdlX3ByaW50ayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBtdWx0aXBsZSBidWdzIGluIHRoZSBCUEYgc3RyZWFtIHN1YnN5c3RlbSwgaW5jbHVkaW5nIGFuIG9mZi1ieS1vbmUgZXJyb3IgaW4gbGVuZ3RoIGNoZWNraW5nLCBhIGNhcGFjaXR5IGxlYWsgb24gcHVzaCBmYWlsdXJlLCBpbmNvcnJlY3QgaGFuZGxpbmcgb2YgcGFydGlhbCByZWFkcyB0byB1c2VyIHNwYWNlLCBtaXNzaW5nIHRydW5jYXRpb24gY2hlY2tzIGluIHZwcmludGssIGFuZCBpbmNvcnJlY3QgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiBzdGFnZV9wcmludGsuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgKEJQRiBzeXNjYWxsIGFuZCBCUEYgcHJvZ3JhbXMpIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfcHJvZ19zdHJlYW1fcmVhZCYjMzQ7LAogICAgJiMzNDticGZfc3RyZWFtX3ZwcmludGsmIzM0OywKICAgICYjMzQ7YnBmX3N0cmVhbV9zdGFnZV9wcmludGsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgYnVncyBpbiB0aGUgQlBGIHN0cmVhbSBzdWJzeXN0ZW0sIGluY2x1ZGluZyBhbiBvZmYtYnktb25lIGVycm9yIGluIGxlbmd0aCBjaGVja2luZywgYSBjYXBhY2l0eSBsZWFrIG9uIHB1c2ggZmFpbHVyZSwgaW5jb3JyZWN0IGhhbmRsaW5nIG9mIHBhcnRpYWwgcmVhZHMgdG8gdXNlciBzcGFjZSwgbWlzc2luZyB0cnVuY2F0aW9uIGNoZWNrcyBpbiB2cHJpbnRrLCBhbmQgaW5jb3JyZWN0IGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gc3RhZ2VfcHJpbnRrLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlIChCUEYgc3lzY2FsbCBhbmQgQlBGIHByb2dyYW1zKSBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNldmVyYWwgbG9naWMgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgYnVncyBpbiB0aGUgQlBGIHN0cmVhbSBpbXBsZW1lbnRhdGlvbjpcbjEuIEl0IGZpeGVzIGEgY2FwYWNpdHkgbGVhayB3aGVyZSBvdmVyc2l6ZWQgb3IgdHJ1bmNhdGVkIHN0cmluZ3Mgd291bGQgY29uc3VtZSBzdHJlYW0gY2FwYWNpdHkgYnV0IGZhaWwgdG8gYWxsb2NhdGUgYW4gZWxlbWVudCwgcGVybWFuZW50bHkgcmVkdWNpbmcgYXZhaWxhYmxlIGNhcGFjaXR5LlxuMi4gSXQgcHJldmVudHMgdGhlIGluY2x1c2lvbiBvZiB0aGUgdHJhaWxpbmcgTlVMIGJ5dGUgaW4gdGhlIHN0cmVhbSBwYXlsb2FkIHdoZW4gdGhlIGZvcm1hdHRlZCBzdHJpbmcgZXhhY3RseSBtYXRjaGVzIHRoZSBidWZmZXIgc2l6ZS5cbjMuIEl0IGZpeGVzIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgdG8gb25seSBpbmNyZW1lbnQgdGhlIHN0cmVhbSBsZW5ndGggaWYgdGhlIHN0cmluZyB3YXMgc3VjY2Vzc2Z1bGx5IHB1c2hlZC5cbjQuIEl0IGNvcnJlY3RzIHRoZSBoYW5kbGluZyBvZiBwYXJ0aWFsIGBjb3B5X3RvX3VzZXJgIGZhdWx0cyBpbiBgYnBmX3N0cmVhbV9yZWFkYCB0byBwcm9wZXJseSBhY2NvdW50IGZvciBzdWNjZXNzZnVsbHkgY29waWVkIGJ5dGVzLlxuXG5Ob25lIG9mIHRoZXNlIGlzc3VlcyBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgc3RyZWFtIGVsZW1lbnRzIGFyZSBhbGxvY2F0ZWQgd2l0aCBgX19HRlBfWkVST2AsIGFuZCB0aGUgc3RyaW5ncyBjb3BpZWQgaW50byB0aGVtIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgYnN0cl9wcmludGZgIG9yIGB2c2NucHJpbnRmYC4gVGhlIGNvcGllZCBsZW5ndGggaXMgc3RyaWN0bHkgYm91bmRlZCBieSB0aGUgaW5pdGlhbGl6ZWQgc3RyaW5nIGxlbmd0aC4gVGhlIGJ1Z3MgZml4ZWQgYXJlIGxvZ2ljIGVycm9ycywgcmVzb3VyY2UgbGVha3MsIGFuZCBpbmNvcnJlY3QgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgdGhlIGFkZGVkIHNlbGZ0ZXN0cyBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgdG9vbHMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MjQ2YWZkZTQ2OTZmYzY5ZjczMjkzYWFiMzg4NTA5ODEwNTNlNTAwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMjMgMTQ6NDM6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0cmVhbS5jIGIva2VybmVsL2JwZi9zdHJlYW0uYwppbmRleCBiZTljZTk4ZTk0NjkyLi43YTVjM2FjODY3NmI5IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N0cmVhbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3RyZWFtLmMKQEAgLTIyLDExICYjNDM7MjIsMTEgQEAgc3RhdGljIHN0cnVjdCBicGZfc3RyZWFtX2VsZW0gKmJwZl9zdHJlYW1fZWxlbV9hbGxvYyhpbnQgbGVuKQogCXNpemVfdCBhbGxvY19zaXplOwogCiAJLyoKLQkgKiBMZW5ndGggZGVub3RlcyB0aGUgYW1vdW50IG9mIGRhdGEgdG8gYmUgd3JpdHRlbiBhcyBwYXJ0IG9mIHN0cmVhbSBlbGVtZW50LAotCSAqIHRodXMgaW5jbHVkZXMgJiMzOTtcMCYjMzk7IGJ5dGUuIFdlJiMzOTtyZSBjYXBwZWQgYnkgaG93IG11Y2ggYnBmX2JwcmludGZfYnVmZmVycyBjYW4KLQkgKiBhY2NvbW9kYXRlLCB0aGVyZWZvcmUgZGVueSBhbGxvY2F0aW9ucyB0aGF0IHdvbiYjMzk7dCBmaXQgaW50byB0aGVtLgomIzQzOwkgKiBMZW5ndGggaXMgdGhlIHBheWxvYWQgcHVzaGVkIGludG8gdGhlIHN0cmVhbSwgZXhjbHVkaW5nIHRoZQomIzQzOwkgKiB0cmFpbGluZyBOVUwgb2YgdGhlIGJwcmludGYgYnVmZmVyLiBSZWplY3QgYW55dGhpbmcgdGhhdCBjYW5ub3QKJiM0MzsJICogZml0IHdpdGhvdXQgY29weWluZyB0aGF0IE5VTCBpbnRvIHRoZSBzdHJlYW0gZWxlbWVudC4KIAkgKi8KLQlpZiAobGVuICZsdDsgMCB8fCBsZW4gJmd0OyBtYXhfbGVuKQomIzQzOwlpZiAobGVuICZsdDsgMCB8fCBsZW4gJmd0Oz0gbWF4X2xlbikKIAkJcmV0dXJuIE5VTEw7CiAKIAlhbGxvY19zaXplID0gb2Zmc2V0b2Yoc3RydWN0IGJwZl9zdHJlYW1fZWxlbSwgc3RyW2xlbl0pOwpAQCAtNjgsMTAgJiM0Mzs2OCw4IEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9jb25zdW1lX2NhcGFjaXR5KHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIGludCBsZW4pCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICplbGVtKQomIzQzO3N0YXRpYyB2b2lkIGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBpbnQgbGVuKQogewotCWludCBsZW4gPSBlbGVtLSZndDt0b3RhbF9sZW47Ci0KIAlhdG9taWNfc3ViKGxlbiwgJmFtcDtzdHJlYW0tJmd0O2NhcGFjaXR5KTsKIH0KIApAQCAtNzksNyAmIzQzOzc3LDE0IEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBjb25zdCBjaGFyICpzdHIsIGludCBsCiB7CiAJaW50IHJldCA9IGJwZl9zdHJlYW1fY29uc3VtZV9jYXBhY2l0eShzdHJlYW0sIGxlbik7CiAKLQlyZXR1cm4gcmV0ID86IF9fYnBmX3N0cmVhbV9wdXNoX3N0cigmYW1wO3N0cmVhbS0mZ3Q7bG9nLCBzdHIsIGxlbik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoJmFtcDtzdHJlYW0tJmd0O2xvZywgc3RyLCBsZW4pOwomIzQzOwlpZiAocmV0KQomIzQzOwkJYnBmX3N0cmVhbV9yZWxlYXNlX2NhcGFjaXR5KHN0cmVhbSwgbGVuKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHN0cnVjdCBicGZfc3RyZWFtICpicGZfc3RyZWFtX2dldChlbnVtIGJwZl9zdHJlYW1faWQgc3RyZWFtX2lkLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpCkBAIC0xNjIsNiAmIzQzOzE2Nyw3IEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9yZWFkKHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIHZvaWQgX191c2VyICpidWYsIGludCBsZW4pCiAKIAl3aGlsZSAocmVtX2xlbikgewogCQlpbnQgcG9zID0gbGVuIC0gcmVtX2xlbjsKJiM0MzsJCWludCBjaHVuaywgbjsKIAkJYm9vbCBjb250OwogCiAJCW5vZGUgPSBicGZfc3RyZWFtX2JhY2tsb2dfcGVlayhzdHJlYW0pOwpAQCAtMTc1LDIwICYjNDM7MTgxLDIxIEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9yZWFkKHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIHZvaWQgX191c2VyICpidWYsIGludCBsZW4pCiAKIAkJY29uc19sZW4gPSBlbGVtLSZndDtjb25zdW1lZF9sZW47CiAJCWNvbnQgPSBicGZfc3RyZWFtX2NvbnN1bWVfZWxlbShlbGVtLCAmYW1wO3JlbV9sZW4pID09IGZhbHNlOwotCi0JCXJldCA9IGNvcHlfdG9fdXNlcihidWYgJiM0MzsgcG9zLCBlbGVtLSZndDtzdHIgJiM0MzsgY29uc19sZW4sCi0JCQkJICAgZWxlbS0mZ3Q7Y29uc3VtZWRfbGVuIC0gY29uc19sZW4pOwotCQkvKiBSZXN0b3JlIGluIGNhc2Ugb2YgZXJyb3IuICovCi0JCWlmIChyZXQpIHsKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQllbGVtLSZndDtjb25zdW1lZF9sZW4gPSBjb25zX2xlbjsKJiM0MzsJCWNodW5rID0gZWxlbS0mZ3Q7Y29uc3VtZWRfbGVuIC0gY29uc19sZW47CiYjNDM7CiYjNDM7CQluID0gY29weV90b191c2VyKGJ1ZiAmIzQzOyBwb3MsIGVsZW0tJmd0O3N0ciAmIzQzOyBjb25zX2xlbiwgY2h1bmspOwomIzQzOwkJaWYgKG4pIHsKJiM0MzsJCQkvKiBLZWVwIGFueSBzdWNjZXNzZnVsbHkgY29waWVkIGJ5dGVzOyAtRUZBVUxUIG9ubHkgaWYgbm9uZS4gKi8KJiM0MzsJCQllbGVtLSZndDtjb25zdW1lZF9sZW4gLT0gbjsKJiM0MzsJCQlyZW1fbGVuICYjNDM7PSBuOwomIzQzOwkJCXJldCA9IChsZW4gPT0gcmVtX2xlbikgPyAtRUZBVUxUIDogMDsKIAkJCWJyZWFrOwogCQl9CiAKIAkJaWYgKGNvbnQpCiAJCQljb250aW51ZTsKIAkJYnBmX3N0cmVhbV9iYWNrbG9nX3BvcChzdHJlYW0pOwotCQlicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RyZWFtLCBlbGVtKTsKJiM0MzsJCWJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJlYW0sIGVsZW0tJmd0O3RvdGFsX2xlbik7CiAJCWJwZl9zdHJlYW1fZnJlZV9lbGVtKGVsZW0pOwogCX0KIApAQCAtMjM4LDYgJiM0MzsyNDUsMTEgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJlYW1fdnByaW50ayhpbnQgc3RyZWFtX2lkLCBjb25zdCBjaGFyICpmbXRfX3N0ciwgY29uc3Qgdm8KIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IGJzdHJfcHJpbnRmKGRhdGEuYnVmLCBNQVhfQlBSSU5URl9CVUYsIGZtdF9fc3RyLCBkYXRhLmJpbl9hcmdzKTsKJiM0MzsJLyogVHJ1bmNhdGlvbjogcmVqZWN0IGJlZm9yZSBjYXBhY2l0eSBjaGFyZ2UgKG5vdCAtRU5PTUVNKS4gKi8KJiM0MzsJaWYgKHJldCAmZ3Q7PSBNQVhfQlBSSU5URl9CVUYpIHsKJiM0MzsJCWJwZl9icHJpbnRmX2NsZWFudXAoJmFtcDtkYXRhKTsKJiM0MzsJCXJldHVybiAtRTJCSUc7CiYjNDM7CX0KIAkvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi8KIAlyZXQgPSBicGZfc3RyZWFtX3B1c2hfc3RyKHN0cmVhbSwgZGF0YS5idWYsIHJldCk7CiAJYnBmX2JwcmludGZfY2xlYW51cCgmYW1wO2RhdGEpOwpAQCAtMzExLDE3ICYjNDM7MzIzLDE4IEBAIGludCBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhzdHJ1Y3QgYnBmX3N0cmVhbV9zdGFnZSAqc3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXN0cnVjdCBicGZfYnByaW50Zl9idWZmZXJzICpidWY7CiAJdmFfbGlzdCBhcmdzOwotCWludCByZXQ7CiYjNDM7CWludCBsZW4sIHJldDsKIAogCWlmIChicGZfdHJ5X2dldF9idWZmZXJzKCZhbXA7YnVmKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JcmV0ID0gdnNucHJpbnRmKGJ1Zi0mZ3Q7YnVmLCBBUlJBWV9TSVpFKGJ1Zi0mZ3Q7YnVmKSwgZm10LCBhcmdzKTsKJiM0MzsJbGVuID0gdnNjbnByaW50ZihidWYtJmd0O2J1ZiwgQVJSQVlfU0laRShidWYtJmd0O2J1ZiksIGZtdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOwotCXNzLSZndDtsZW4gJiM0Mzs9IHJldDsKIAkvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi8KLQlyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoJmFtcDtzcy0mZ3Q7bG9nLCBidWYtJmd0O2J1ZiwgcmV0KTsKJiM0MzsJcmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKCZhbXA7c3MtJmd0O2xvZywgYnVmLSZndDtidWYsIGxlbik7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJc3MtJmd0O2xlbiAmIzQzOz0gbGVuOwogCWJwZl9wdXRfYnVmZmVycygpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jCmluZGV4IGMzY2NlNWMyOTJiZGQuLjg3MTcwZGNhZDNhZDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jCkBAIC01OCw2ICYjNDM7NTgsNzEgQEAgdm9pZCB0ZXN0X3N0cmVhbV9zeXNjYWxsKHZvaWQpCiAJc3RyZWFtX19kZXN0cm95KHNrZWwpOwogfQogCiYjNDM7dm9pZCB0ZXN0X3N0cmVhbV9vdmVyc2l6ZSh2b2lkKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpOwomIzQzOwlzdHJ1Y3Qgc3RyZWFtICpza2VsOwomIzQzOwlpbnQgcmV0LCBwcm9nX2ZkOwomIzQzOwljaGFyIGJ1Zls4XSA9IHt9OwomIzQzOwomIzQzOwlza2VsID0gc3RyZWFtX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3N0cmVhbV9fb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5zdHJlYW1fb3ZlcnNpemUpOwomIzQzOwlyZXQgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHByb2dfZmQsICZhbXA7b3B0cyk7CiYjNDM7CUFTU0VSVF9PSyhyZXQsICYjMzQ7b3ZlcnNpemUgcnVuJiMzNDspOwomIzQzOwlBU1NFUlRfT0sob3B0cy5yZXR2YWwsICYjMzQ7b3ZlcnNpemUgcmV0dmFsJiMzNDspOwomIzQzOwomIzQzOwkvKiBPdmVyc2l6ZWQgcHVzaCBtdXN0IG5vdCBwZXJtYW5lbnRseSBjb25zdW1lIGNhcGFjaXR5IG9uIHRoaXMgcHJvZy4gKi8KJiM0MzsJcmV0ID0gYnBmX3Byb2dfc3RyZWFtX3JlYWQocHJvZ19mZCwgQlBGX1NUUkVBTV9TVERPVVQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE5VTEwpOwomIzQzOwlBU1NFUlRfRVEocmV0LCAzLCAmIzM0O2J5dGVzIGFmdGVyIG92ZXJzaXplJiMzNDspOwomIzQzOwlBU1NFUlRfT0sobWVtY21wKGJ1ZiwgJiMzNDtmb28mIzM0OywgMyksICYjMzQ7cGF5bG9hZCBhZnRlciBvdmVyc2l6ZSYjMzQ7KTsKJiM0MzsKJiM0MzsJc3RyZWFtX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3Rfc3RyZWFtX3BhcnRpYWxfcmVhZCh2b2lkKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpOwomIzQzOwlzdHJ1Y3Qgc3RyZWFtICpza2VsOwomIzQzOwlpbnQgcmV0LCBwcm9nX2ZkOwomIzQzOwlsb25nIHBhZ2Vfc2l6ZTsKJiM0MzsJY2hhciAqcGFnZSwgKmJ1ZjsKJiM0MzsJY2hhciByZXN0WzhdID0ge307CiYjNDM7CiYjNDM7CXNrZWwgPSBzdHJlYW1fX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c3RyZWFtX19vcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLnN0cmVhbV9zeXNjYWxsKTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nX2ZkLCAmYW1wO29wdHMpOwomIzQzOwlBU1NFUlRfT0socmV0LCAmIzM0O3JldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX09LKG9wdHMucmV0dmFsLCAmIzM0O3JldHZhbCYjMzQ7KTsKJiM0MzsKJiM0MzsJcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpOwomIzQzOwlwYWdlID0gbW1hcChOVUxMLCBwYWdlX3NpemUgKiAyLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApOwomIzQzOwlpZiAoIUFTU0VSVF9ORVEocGFnZSwgTUFQX0ZBSUxFRCwgJiMzNDttbWFwJiMzNDspKSB7CiYjNDM7CQlzdHJlYW1fX2Rlc3Ryb3koc2tlbCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJLyogTGVhdmUgb25seSB0aGUgZmlyc3QgcGFnZSBtYXBwZWQgc28gYSBzdHJhZGRsaW5nIGNvcHkgZmF1bHRzLiAqLwomIzQzOwlBU1NFUlRfT0sobXVubWFwKHBhZ2UgJiM0MzsgcGFnZV9zaXplLCBwYWdlX3NpemUpLCAmIzM0O211bm1hcCBzZWNvbmQgcGFnZSYjMzQ7KTsKJiM0MzsKJiM0MzsJYnVmID0gcGFnZSAmIzQzOyBwYWdlX3NpemUgLSAxOwomIzQzOwlyZXQgPSBicGZfcHJvZ19zdHJlYW1fcmVhZChwcm9nX2ZkLCBCUEZfU1RSRUFNX1NURE9VVCwgYnVmLCAzLCBOVUxMKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgMSwgJiMzNDtwYXJ0aWFsIGJ5dGVzJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoYnVmWzBdLCAmIzM5O2YmIzM5OywgJiMzNDtmaXJzdCBieXRlJiMzNDspOwomIzQzOwomIzQzOwlyZXQgPSBicGZfcHJvZ19zdHJlYW1fcmVhZChwcm9nX2ZkLCBCUEZfU1RSRUFNX1NURE9VVCwgcmVzdCwgc2l6ZW9mKHJlc3QpLCBOVUxMKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgMiwgJiMzNDtyZW1haW5pbmcgYnl0ZXMmIzM0Oyk7CiYjNDM7CUFTU0VSVF9PSyhtZW1jbXAocmVzdCwgJiMzNDtvbyYjMzQ7LCAyKSwgJiMzNDtyZW1haW5pbmcgZGF0YSYjMzQ7KTsKJiM0MzsKJiM0MzsJbXVubWFwKHBhZ2UsIHBhZ2Vfc2l6ZSk7CiYjNDM7CXN0cmVhbV9fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB0ZXN0X2FkZHJlc3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCB1bnNpZ25lZCBsb25nICpmYXVsdF9hZGRyX3ApCiB7CiAJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jCmluZGV4IDZmOTk5YmE5NTFhM2MuLjliOTdmNWUwMWI4M2EgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMKQEAgLTM2LDcgJiM0MzszNiwxMiBAQCBzdHJ1Y3QgewogfSBhcnJheSBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKIAogI2RlZmluZSBFTk9TUEMgMjgKJiM0MzsjZGVmaW5lIEUyQklHIDcKICNkZWZpbmUgX1NUUiAmIzM0O3h4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eCYjMzQ7CiYjNDM7I2RlZmluZSBfWDY0ICYjMzQ7eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eCYjMzQ7CiYjNDM7LyogMTAyNCBieXRlczogdHJ1bmNhdGVkIGJ5IGJzdHJfcHJpbnRmLCBtdXN0IHJldHVybiAtRTJCSUcuICovCiYjNDM7I2RlZmluZSBfQklHX1NUUiAoX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IFwKJiM0MzsJCSAgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0KQogCiBpbnQgc2l6ZTsKIHU2NCBmYXVsdF9hZGRyOwpAQCAtMTE3LDYgJiM0MzsxMjIsMTkgQEAgaW50IHN0cmVhbV9zeXNjYWxsKHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztpbnQgc3RyZWFtX292ZXJzaXplKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGJwZl9zdHJlYW1fcHJpbnRrKEJQRl9TVERPVVQsIF9CSUdfU1RSKTsKJiM0MzsJaWYgKHJldCAhPSAtRTJCSUcpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gYnBmX3N0cmVhbV9wcmludGsoQlBGX1NURE9VVCwgJiMzNDtmb28mIzM0Oyk7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAogX19hcmNoX2FybTY0CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODY3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTI3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBTdHJlYW0gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIG1vZGlmeWluZyBga2VybmVsL2JwZi9zdHJlYW0uY2AuIE15IGluaXRpYWwgYXNzZXNzbWVudCBzdWdnZXN0cyBzZXZlcmFsIGNoYW5nZXMgYWltZWQgYXQgcmVmaW5pbmcgY2FwYWNpdHkgbWFuYWdlbWVudCBhbmQgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBCUEYgc3RyZWFtIGZ1bmN0aW9uYWxpdHkuCgpGaXJzdCwgaW4gYGJwZl9zdHJlYW1fZWxlbV9hbGxvY2AsIHRoZXkmIzM5O3ZlIHRpZ2h0ZW5lZCB0aGUgbGVuZ3RoIHZhbGlkYXRpb24sIG1ha2luZyBzdXJlIHRoZSBsZW5ndGggaXNuJiMzOTt0IGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSBhbGxvd2VkIGxlbmd0aC4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBzYWZldHkgY2hlY2ssIHByZXZlbnRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgaXNzdWVzIGR1cmluZyBhbGxvY2F0aW9uLgoKTmV4dCwgaW4gYGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eWAsIHdlIHNlZSB0aGV5JiMzOTtyZSBub3cgcGFzc2luZyB0aGUgbGVuZ3RoIGRpcmVjdGx5IGluc3RlYWQgb2YgdGhlIGVudGlyZSBlbGVtZW50LiBJdOKAmXMgY2xlYW5lciwgZm9jdXNpbmcgb25seSBvbiB0aGUgY2FwYWNpdHkgdmFsdWUgdG8gYmUgYWRqdXN0ZWQsIHNvIHRoZSBgZWxlbWAgc3RydWN0IGRvZXNuJiMzOTt0IG5lZWQgdG8gYmUgcGFzc2VkLiBUaGlzIG1ha2VzIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUgYW5kIHBvc3NpYmx5IGVmZmljaWVudC4KClRoZSBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgZnVuY3Rpb24gbG9va3MgbGlrZSBpdCBoYXMgYWxzbyBiZWVuIG1vZGlmaWVkLiBUaGVyZSBpcyBub3cgbW9yZSByaWdvcm91cyBlcnJvciBjaGVja2luZzsgc3BlY2lmaWNhbGx5LCBpdCBmaXJzdCB0cmllcyB0byBjb25zdW1lIGNhcGFjaXR5IGFuZCB0aGVuLCBvbmx5IGlmIHRoYXQgaXMgc3VjY2Vzc2Z1bCwgYXR0ZW1wdHMgdG8gcHVzaCB0aGUgc3RyaW5nLiBJZiBwdXNoaW5nIGZhaWxzLCBjYXBhY2l0eSBpcyByZWxlYXNlZCwgbWFraW5nIHN1cmUgdGhhdCB0aGVyZSBpcyBubyByZXNvdXJjZSBsZWFrLiBUaGlzIHNob3VsZCBtYWtlIHRoZSBzeXN0ZW0gbW9yZSByZXNpbGllbnQuCgpOb3csIGBicGZfc3RyZWFtX3JlYWRgLCB0aGlzIG9uZSYjMzk7cyBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCBkZWFscyB3aXRoIHVzZXItc3BhY2UgZGF0YSBjb3B5aW5nLiBUaGUgb3JpZ2luYWwgY29kZSBoYXMgc29tZSBpc3N1ZXMsIGJ1dCB0aGlzIGxvb2tzIGxpa2UgYW4gaW1wcm92ZW1lbnQuIEl0IGhhbmRsZXMgcGFydGlhbCBjb3B5IHN1Y2Nlc3NlcyBmcm9tIGBjb3B5X3RvX3VzZXJgIG11Y2ggYmV0dGVyLiBJdCBwcmVzZXJ2ZXMgYW55IGJ5dGVzIHRoYXQgKmRpZCogY29weSBhbmQgbm93IGNvcnJlY3RseSBzZXRzIGAtRUZBVUxUYCBvbmx5IGlmICpubyogYnl0ZXMgd2VyZSBjb3BpZWQuIFRoaXMgaXMgbXVjaCBtb3JlIHJvYnVzdC4KCkkgc2VlIGEgY2hhbmdlIGluIGBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrYCwgYW5kIG5vdyBpdCBpbmNsdWRlcyBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBmb3JtYXR0ZWQgb3V0cHV0IGRvZXNuJiMzOTt0IGV4Y2VlZCB0aGUgYnVmZmVyIHNpemUgYmVmb3JlIGF0dGVtcHRpbmcgdG8gY29uc3VtZSBjYXBhY2l0eS4gSWYgdGhlIGJ1ZmZlciBpcyB0cnVuY2F0ZWQsIGl0IHJldHVybnMgYC1FMkJJR2AgaW5zdGVhZCBvZiBgLUVOT01FTWAuIEl0IHNlZW1zIHRoZXkmIzM5O3JlIGF2b2lkaW5nIHRoZSAmIzM0O2NhcGFjaXR5IGNoYXJnZSYjMzQ7IGluIHRoZSB0cnVuY2F0aW9uIGNhc2UuIFZlcnkgaW1wb3J0YW50LgoKQWxzbywgaXQgbG9va3MgbGlrZSBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgIGlzIGdldHRpbmcgc2ltaWxhciBmaXhlcyB0byBwcmV2ZW50IGVycm9ycy4gTm93LCB0aGUgbGVuZ3RoIGlzIHNldCB0byBgbGVuID0gdnNjbnByaW50ZiguLi4pYCBhbmQgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGlzIGFkZGVkIGlmIHB1c2hpbmcgdGhlIHN0cmluZyBpcyBzdWNjZXNzZnVsLiBJdCBsb29rcyBsaWtlIHRoZSBzYW1lIGltcHJvdmVtZW50LgoKR29pbmcgYmFjayB0byBgYnBmX3N0cmVhbV9yZWFkYC4uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgYXJlbiYjMzk7dCBwb3RlbnRpYWxseSBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB3aGVuIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gSXQgcmVsaWVzIG9uIGBlbGVtLSZndDtzdHJgIGFuZCB0aGF0JiMzOTtzIHBvcHVsYXRlZCBieSBgX19icGZfc3RyZWFtX3B1c2hfc3RyYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBfX2JwZl9zdHJlYW1fcHVzaF9zdHJgIGFuZCBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYCB0byB2ZXJpZnkgdGhhdCBgZWxlbS0mZ3Q7c3RyYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gSSYjMzk7bGwgc2VhcmNoIGZvciB0aG9zZSBmdW5jdGlvbiBjYWxscyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYnBmX3N0cmVhbV9wdXNoX3N0ciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0cmVhbS5jPTE4PXN0YXRpYyBzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICpicGZfc3RyZWFtX2VsZW1fYWxsb2MoaW50IGxlbilcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTQxLVxua2VybmVsL2JwZi9zdHJlYW0uYzo0MjpzdGF0aWMgaW50IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJ1Y3QgbGxpc3RfaGVhZCAqbG9nLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4pXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTQzLXtcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTc2PXN0YXRpYyBpbnQgYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4pXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy04Mi1cbmtlcm5lbC9icGYvc3RyZWFtLmM6ODM6XHRyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXHUwMDI2c3RyZWFtLVx1MDAzZWxvZywgc3RyLCBsZW4pO1xua2VybmVsL2JwZi9zdHJlYW0uYy04NC1cdGlmIChyZXQpXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz0zMjI9aW50IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy0zMzQtXHQvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi9cbmtlcm5lbC9icGYvc3RyZWFtLmM6MzM1Olx0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFx1MDAyNnNzLVx1MDAzZWxvZywgYnVmLVx1MDAzZWJ1ZiwgbGVuKTtcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzM2LVx0aWYgKCFyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipBbmFseXppbmcgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgYW5kIGBicGZfc3RyZWFtX2VsZW1fYWxsb2NgKioKCkFscmlnaHQsIG15IG1pbmQmIzM5O3Mgb24gdGhvc2UgdHdvIEJQRiBmdW5jdGlvbnM6IGBfX2JwZl9zdHJlYW1fcHVzaF9zdHJgIGFuZCBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYC4gSW1tZWRpYXRlbHksIEkmIzM5O20gYXNzZXNzaW5nIHRoZWlyIHJvbGVzIGluIHRoZSBiaWdnZXIgcGljdHVyZS4gYGJwZl9zdHJlYW1fZWxlbV9hbGxvY2AgaXMsIG9mIGNvdXJzZSwgdGhlIGZ1bmRhbWVudGFsIG1lbW9yeSBhbGxvY2F0b3IgZm9yIHN0cmVhbSBlbGVtZW50cyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBObyBzdXJwcmlzZXMgdGhlcmU7IGl0JiMzOTtzIHRoZSBmb3VuZGF0aW9uLiBJdCYjMzk7cyB0aGUgYnVpbGRpbmcgYmxvY2ssIGVzc2VudGlhbGx5LiBJJiMzOTttIHdvbmRlcmluZyBhYm91dCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSXMgaXQgdXNpbmcgdGhlIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgYWxsb2NhdG9ycyB1bmRlciB0aGUgaG9vZCwgb3IgZG9lcyBpdCBoYXZlIGEgY3VzdG9tIHN0cmF0ZWd5IHRhaWxvcmVkIGZvciBCUEYmIzM5O3Mgc3BlY2lmaWMgcmVxdWlyZW1lbnRzPyBQZXJmb3JtYW5jZSBhbmQgZnJhZ21lbnRhdGlvbiBhcmUga2V5IGNvbnNpZGVyYXRpb25zIGluIHRoaXMgY29udGV4dCwgb2YgY291cnNlLiBXZSBjYW4gZXhwZWN0IHRoYXQgaXQgdHJpZXMgdG8gbWFrZSB2ZXJ5IGVmZmljaWVudCB1c2Ugb2YgdGhlIGxpbWl0ZWQgQlBGIG1lbW9yeSBzcGFjZS4KCk5vdywgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAuIFRoZSBkb3VibGUgdW5kZXJzY29yZSBwcmVmaXggaXMgYSBjbHVlLi4uIGl0IHN1Z2dlc3RzIHRoaXMgaXMgYW4gaW50ZXJuYWwgb3IgJiMzNDt1bnNhZmUmIzM0OyBmdW5jdGlvbiwgcHJvYmFibHkgbm90IHNvbWV0aGluZyBhIEJQRiBwcm9ncmFtIHdvdWxkIGRpcmVjdGx5IGNhbGwgaW4gYSB1c2VyLXNwYWNlIGNvbnRleHQuIEl0IGlzIHZlcnkgbGlrZWx5IGEgbG93ZXItbGV2ZWwgZnVuY3Rpb24uIEl0JiMzOTtzIG1vc3QgbGlrZWx5IGRlc2lnbmVkIHRvIHB1c2ggYSBzdHJpbmcgb250byBhIHN0cmVhbS4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBkZXRhaWxzLiBJcyBpdCBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcsIG9yIGRvZXMgaXQgaW5jb3Jwb3JhdGUgbGVuZ3RoIG1ldGFkYXRhPyBXaGF0JiMzOTtzIHRoZSBzdHJhdGVneSBmb3IgaGFuZGxpbmcgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3M/IEVycm9yIGhhbmRsaW5nIGlzIGNyaXRpY2FsIGhlcmUuIEl0IHByb2JhYmx5IGNoZWNrcyBhdmFpbGFibGUgc3BhY2UuIERvZXMgaXQgYWNjb3VudCBmb3IgcG9zc2libGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZnJvbSBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYD8gQW5kIGhvdyBhcmUgdGhlIHN0cmVhbSBlbGVtZW50cyBzdHJ1Y3R1cmVkPyBBcmUgdGhlcmUgYW55IGNsZXZlciBvcHRpbWl6YXRpb25zIGxpa2UgY29weS1vbi13cml0ZSBvciBzaW1pbGFyIHRlY2huaXF1ZXMgdG8gcmVkdWNlIG92ZXJoZWFkPyBJJiMzOTtsbCBwcm9iYWJseSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gaGFuZGxlIHBvdGVudGlhbCBpc3N1ZXMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgaGFuZGxlcyB0aGVzZSBkZXRhaWxzIHdoZW4gaXQgaXMgdGltZSB0byBjaGVjayB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0cmVhbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxODpcdHN0YXRpYyBzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICpicGZfc3RyZWFtX2VsZW1fYWxsb2MoaW50IGxlbilcbiAgMTk6XHR7XG4gIDIwOlx0XHRjb25zdCBpbnQgbWF4X2xlbiA9IEFSUkFZX1NJWkUoKHN0cnVjdCBicGZfYnByaW50Zl9idWZmZXJzKXt9LmJ1Zik7XG4gIDIxOlx0XHRzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICplbGVtO1xuICAyMjpcdFx0c2l6ZV90IGFsbG9jX3NpemU7XG4gIDIzOlx0XG4gIDI0Olx0XHQvKlxuICAyNTpcdFx0ICogTGVuZ3RoIGlzIHRoZSBwYXlsb2FkIHB1c2hlZCBpbnRvIHRoZSBzdHJlYW0sIGV4Y2x1ZGluZyB0aGVcbiAgMjY6XHRcdCAqIHRyYWlsaW5nIE5VTCBvZiB0aGUgYnByaW50ZiBidWZmZXIuIFJlamVjdCBhbnl0aGluZyB0aGF0IGNhbm5vdFxuICAyNzpcdFx0ICogZml0IHdpdGhvdXQgY29weWluZyB0aGF0IE5VTCBpbnRvIHRoZSBzdHJlYW0gZWxlbWVudC5cbiAgMjg6XHRcdCAqL1xuICAyOTpcdFx0aWYgKGxlbiBcdTAwM2MgMCB8fCBsZW4gXHUwMDNlPSBtYXhfbGVuKVxuICAzMDpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgMzE6XHRcbiAgMzI6XHRcdGFsbG9jX3NpemUgPSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtLCBzdHJbbGVuXSk7XG4gIDMzOlx0XHRlbGVtID0ga21hbGxvY19ub2xvY2soYWxsb2Nfc2l6ZSwgX19HRlBfWkVSTywgLTEpO1xuICAzNDpcdFx0aWYgKCFlbGVtKVxuICAzNTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgMzY6XHRcbiAgMzc6XHRcdGJwZl9zdHJlYW1fZWxlbV9pbml0KGVsZW0sIGxlbik7XG4gIDM4Olx0XG4gIDM5Olx0XHRyZXR1cm4gZWxlbTtcbiAgNDA6XHR9XG4gIDQxOlx0XG4gIDQyOlx0c3RhdGljIGludCBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGxsaXN0X2hlYWQgKmxvZywgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxuICA0MzpcdHtcbiAgNDQ6XHRcdHN0cnVjdCBicGZfc3RyZWFtX2VsZW0gKmVsZW0gPSBOVUxMO1xuICA0NTpcdFxuICA0NjpcdFx0LypcbiAgNDc6XHRcdCAqIEFsbG9jYXRlIGEgYnBmX3Byb2dfc3RyZWFtX2VsZW0gYW5kIHB1c2ggaXQgdG8gdGhlIGJwZl9wcm9nX3N0cmVhbVxuICA0ODpcdFx0ICogbG9nLCBlbGVtZW50cyB3aWxsIGJlIHBvcHBlZCBhdCBvbmNlIGFuZCByZXZlcnNlZCB0byBwcmludCB0aGUgbG9nLlxuICA0OTpcdFx0ICovXG4gIDUwOlx0XHRlbGVtID0gYnBmX3N0cmVhbV9lbGVtX2FsbG9jKGxlbik7XG4gIDUxOlx0XHRpZiAoIWVsZW0pXG4gIDUyOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuICA1MzpcdFxuICA1NDpcdFx0bWVtY3B5KGVsZW0tXHUwMDNlc3RyLCBzdHIsIGxlbik7XG4gIDU1Olx0XHRsbGlzdF9hZGQoXHUwMDI2ZWxlbS1cdTAwM2Vub2RlLCBsb2cpO1xuICA1NjpcdFxuICA1NzpcdFx0cmV0dXJuIDA7XG4gIDU4Olx0fVxuICA1OTpcdFxuICA2MDpcdHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9jb25zdW1lX2NhcGFjaXR5KHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIGludCBsZW4pXG4gIDYxOlx0e1xuICA2MjpcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNnN0cmVhbS1cdTAwM2VjYXBhY2l0eSkgXHUwMDNlPSBCUEZfU1RSRUFNX01BWF9DQVBBQ0lUWSlcbiAgNjM6XHRcdFx0cmV0dXJuIC1FTk9TUEM7XG4gIDY0Olx0XHRpZiAoYXRvbWljX2FkZF9yZXR1cm4obGVuLCBcdTAwMjZzdHJlYW0tXHUwMDNlY2FwYWNpdHkpIFx1MDAzZT0gQlBGX1NUUkVBTV9NQVhfQ0FQQUNJVFkpIHtcbiAgNjU6XHRcdFx0YXRvbWljX3N1YihsZW4sIFx1MDAyNnN0cmVhbS1cdTAwM2VjYXBhY2l0eSk7XG4gIDY2Olx0XHRcdHJldHVybiAtRU5PU1BDO1xuICA2NzpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzIwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjkwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBCUEYgU3RyZWFtIE1lbW9yeSBNYW5hZ2VtZW50IGFuZCBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGl2aW5nIGludG8gdGhpcyBCUEYgc3RyZWFtIGNvZGUsIGFuZCBpdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgc2VyaWVzIG9mIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgdHJpY2t5LCBpbnRlcmFjdGlvbnMuICBMZXQmIzM5O3MgYnJlYWsgZG93biBteSB0aG91Z2h0IHByb2Nlc3M6CgpGaXJzdGx5LCB0aGUgbW9zdCBiYXNpYyBwb2ludDogYGJwZl9zdHJlYW1fZWxlbV9hbGxvY2AgdXNlcyBga21hbGxvY19ub2xvY2tgIHdpdGggYF9fR0ZQX1pFUk9gLiBUaGlzIGlzIGdvb2QuIEl0IG1lYW5zIHRoYXQgYW55IG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSBzdHJlYW0gZWxlbWVudHMgaXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLWluaXRpYWxpemVkLiAgVGhpcyAqc2hvdWxkKiBwcmV2ZW50IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gIFRoZSBgbWVtY3B5YCBjYWxsIHRoZW4gY29waWVzIHRoZSBzdHJpbmcgZGF0YSBpbnRvIHRoaXMgemVyb2VkIG1lbW9yeS4KClRoZSBwYXRjaCYjMzk7cyBjaGFuZ2Ugb2YgdGhlIGxlbmd0aCBjaGVjayB0byBgbGVuICZndDs9IG1heF9sZW5gIGNhdGNoZXMgYSBzdWJ0bGUgYm91bmRhcnkgY29uZGl0aW9uLiBJbiBgYnBmX3N0cmVhbV9yZWFkYCBhZnRlciB0aGUgY29weSBoYXMgYmVlbiBwZXJmb3JtZWQsIGJlY2F1c2Ugd2UgYXJlIHN0YXJ0aW5nIHdpdGggYF9fR0ZQX1pFUk9gLCB3ZSBjYW4gYmUgY29uZmlkZW50IHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLgoKTm93LCB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGlzIGluIGBicGZfc3RyZWFtX3ZwcmludGtgLCBhbmQgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCBhbmQgdGhlIGFzc29jaWF0ZWQgZnVuY3Rpb25zLiAgYGJzdHJfcHJpbnRmYCBhbmQgYHZzbnByaW50ZmAgYXJlIGNlbnRyYWwgdG8gdGhlc2UgZnVuY3Rpb25zLiBJdCYjMzk7cyB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIHRoZXNlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjb25jZXJuaW5nLiBUaGV5IGNhbiByZXR1cm4gYSB2YWx1ZSBncmVhdGVyIHRoYW4gdGhlIGJ1ZmZlciBzaXplIChgTUFYX0JQUklOVEZfQlVGYCBvciBgQVJSQVlfU0laRShidWYtJmd0O2J1ZilgKSwgaW5kaWNhdGluZyB0cnVuY2F0aW9uLiAgUHJldmlvdXNseSwgdGhpcyBsZWQgdG8gcG90ZW50aWFsIGlzc3Vlcy4KCkluIHRoZSBjYXNlIG9mIGBic3RyX3ByaW50ZmAsIGlmIHRoZSByZXR1cm4gdmFsdWUgKGByZXRgKSB3YXMgZ3JlYXRlciB0aGFuIGBNQVhfQlBSSU5URl9CVUZgLCB3ZSBoYWQgYW4gaXNzdWU6IHRoZSBjb2RlIGNvdWxkIHRyeSB0byBhbGxvY2F0ZSBhIHN0cmVhbSBlbGVtZW50IHdpdGggYSBzaXplIChsZW4pIGVxdWFsIHRvIHRoZSB0cnVuY2F0ZWQgbGVuZ3RoLiBUaGlzIGNvdWxkIHJlc3VsdCBpbiBsZWFraW5nIG1lbW9yeSwgaWYgdGhlIGNoZWNrIGBsZW4gJmd0OyBtYXhfbGVuYCB3YXMgYnlwYXNzZWQuIFRoaXMgaGFzIGJlZW4gYWRkcmVzc2VkIGFuZCBmaXhlZC4gQWxzbyB0aGUgcGF0Y2ggaXMgcHJldmVudGluZyBhIGNhcGFjaXR5IGxlYWsgYXMgbm93IGlmIHRoZSBgX19icGZfc3RyZWFtX3B1c2hfc3RyYCByZXR1cm5zIGFuIGVycm9yLCB0aGUgY2FwYWNpdHkgdGhhdCB3YXMgY29uc3VtZWQgaXMgcmVsZWFzZWQuIEZ1cnRoZXJtb3JlLCB0aGUgbmV3IGNoZWNrIGBpZiAocmV0ICZndDs9IE1BWF9CUFJJTlRGX0JVRilgIGluIGBicGZfc3RyZWFtX3ZwcmludGtgIGFkZHJlc3NlcyB0aGlzIGJ5IHJldHVybmluZyAtRTJCSUcsIHByZXZlbnRpbmcgYWxsb2NhdGlvbiBhbmQgcHVzaGluZyBvbiB0cnVuY2F0aW9uLgoKU2ltaWxhciBsb2dpYyBhcHBsaWVzIHRvIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AsIHdoZXJlIHRoZSBzYW1lIGxvZ2ljIG9mIGB2c25wcmludGZgLCBpZiB0aGUgcmV0dXJuIHZhbHVlIChsZW4pIGlzIGdyZWF0ZXIgdGhhbiB0aGUgYXJyYXkgc2l6ZSAoYEFSUkFZX1NJWkUoYnVmLSZndDtidWYpYCkgYW5kIHRydW5jYXRpb24gb2NjdXJzLCBjb3VsZCBsZWFkIHRvIGlzc3Vlcy4gSG93ZXZlciwgdGhlIGNoZWNrIGBpZiAobGVuICZndDsgbWF4X2xlbilgIHdpbGwgbm90IGFsbG93IHRoaXMuIFRoZSBgdnNucHJpbnRmYCBmdW5jdGlvbiBkb2VzIHdyaXRlIHVwIHRvIHRoZSBmdWxsIGBtYXhfbGVuYCwgYnV0IGRvZXMgaXQgaW5pdGlhbGl6ZSB0aGUgd2hvbGUgYnVmZmVyPyBUaGUgYnVmZmVyIHdpbGwgYmUgaW5pdGlhbGl6ZWQuCgpMYXN0bHksIHRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgYnBmX3N0cmVhbV9yZWFkYCBmb2N1cyBvbiB0aGUgc2VtYW50aWNzIG9mIGBjb3B5X3RvX3VzZXJgLCBhbmQgZW5zdXJpbmcgdGhhdCB3ZSBkbyBub3QgbG9zZSBhbnkgc3VjY2Vzc2Z1bGx5IGNvcGllZCBieXRlcyBpbiBjYXNlIG9mIGFuIGVycm9yLiBUaGlzIGlzIGEgc3VidGxlIGltcHJvdmVtZW50IGJ1dCB1bnJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuCkluIHN1bW1hcnksIHRoZSBjcnVjaWFsIHBvaW50IGlzIG1ha2luZyBzdXJlIHdlIGhhbmRsZSB0cnVuY2F0aW9uIGNvcnJlY3RseS4gV2l0aCB0aGUgbmV3IGNoYW5nZXMsIGl0IGFwcGVhcnMgdGhlIHRydW5jYXRpb24gaXMgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkgc28gdGhhdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBub3QgY29waWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgYnN0cl9wcmludGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zdHJpbmcuaD0zMzk9aW50IHZiaW5fcHJpbnRmKHUzMiAqYmluX2J1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKTtcbmluY2x1ZGUvbGludXgvc3RyaW5nLmg6MzQwOmludCBic3RyX3ByaW50ZihjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmbXQsIGNvbnN0IHUzMiAqYmluX2J1Zik7XG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTM0MS0jZW5kaWZcbi0tXG5saWIvdnNwcmludGYuYz0zMjU4PUVYUE9SVF9TWU1CT0xfR1BMKHZiaW5fcHJpbnRmKTtcbi0tXG5saWIvdnNwcmludGYuYy0zMjgxLSAqL1xubGliL3ZzcHJpbnRmLmM6MzI4MjppbnQgYnN0cl9wcmludGYoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10X3N0ciwgY29uc3QgdTMyICpiaW5fYnVmKVxubGliL3ZzcHJpbnRmLmMtMzI4My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTM1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgYnN0cl9wcmludGZgKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCB0aGUgYGJzdHJfcHJpbnRmYCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmljcyBvZiB0aGlzIHBhcnRpY3VsYXIgc3RyaW5nIGZvcm1hdHRpbmcgZnVuY3Rpb24sIGVzcGVjaWFsbHkgc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgYnN0cmBzIChwcmVzdW1hYmx5IGEgY3VzdG9tIHN0cmluZyB0eXBlKS4gSSYjMzk7bGwgd2FudCB0byBxdWlja2x5IGxvb2sgZm9yIGFueSBvYnZpb3VzIHZ1bG5lcmFiaWxpdGllcywgbGlrZSBmb3JtYXQgc3RyaW5nIGJ1Z3Mgb3IgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3MgdGhhdCBtaWdodCBiZSBvdmVybG9va2VkIHdpdGggYSBuYWl2ZSBpbXBsZW1lbnRhdGlvbi4gVW5kZXJzdGFuZGluZyBob3cgdGhlIHZhcmlhZGljIGFyZ3VtZW50cyBhcmUgaGFuZGxlZCB3aXRoIHRoZSBgYnN0cmAgc3RydWN0dXJlIGlzIGtleS4gSXMgaXQganVzdCBhIHdyYXBwZXIgYXJvdW5kIGBwcmludGZgLCBvciBpcyB0aGVyZSBjbGV2ZXIgbG9naWMgdG8gYXZvaWQgY3JlYXRpbmcgdGVtcG9yYXJ5IHN0cmluZ3M/IEkgc2hvdWxkIGxvb2sgZm9yIGRldGFpbHMgbGlrZSBob3cgdGhlIGxlbmd0aCBpcyBoYW5kbGVkIGFuZCB3aGV0aGVyIHRoZXkmIzM5O3JlIGFsbG9jYXRpbmcgYW5kIGRlYWxsb2NhdGluZyBtZW1vcnkgcHJvcGVybHkgd2l0aGluIHRoZSBic3RyIGZyYW1ld29yay4gQW5kIGhvdyBkbyBlcnJvciBjb25kaXRpb25zIChsaWtlIGluc3VmZmljaWVudCBtZW1vcnkgZm9yIHRoZSBmb3JtYXR0ZWQgc3RyaW5nKSBnZXQgYWRkcmVzc2VkPyBJJiMzOTttIGhvcGluZyBmb3Igd2VsbC1kZWZpbmVkIGJlaGF2aW9ycy4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBoYW5kbGUgZWRnZSBjYXNlcyB0b28uIEFyZSB0aGV5IHN1cHBvcnRpbmcgYWxsIHRoZSBzdGFuZGFyZCBwcmludGYgZm9ybWF0IHNwZWNpZmllcnM/IEFuZCBob3cgZG9lcyBpdCBoYW5kbGUgbG9jYWxlLXNwZWNpZmljIGZvcm1hdHRpbmc/IEl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGlzIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL3ZzcHJpbnRmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjgyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMyODI6XHRpbnQgYnN0cl9wcmludGYoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10X3N0ciwgY29uc3QgdTMyICpiaW5fYnVmKVxuMzI4MzpcdHtcbjMyODQ6XHRcdHN0cnVjdCBmbXQgZm10ID0ge1xuMzI4NTpcdFx0XHQuc3RyID0gZm10X3N0cixcbjMyODY6XHRcdFx0LnN0YXRlID0gRk9STUFUX1NUQVRFX05PTkUsXG4zMjg3Olx0XHR9O1xuMzI4ODpcdFx0c3RydWN0IHByaW50Zl9zcGVjIHNwZWMgPSB7MH07XG4zMjg5Olx0XHRjaGFyICpzdHIsICplbmQ7XG4zMjkwOlx0XHRjb25zdCBjaGFyICphcmdzID0gKGNvbnN0IGNoYXIgKiliaW5fYnVmO1xuMzI5MTpcdFxuMzI5MjpcdFx0aWYgKFdBUk5fT05fT05DRShzaXplIFx1MDAzZSBJTlRfTUFYKSlcbjMyOTM6XHRcdFx0cmV0dXJuIDA7XG4zMjk0Olx0XG4zMjk1Olx0XHRzdHIgPSBidWY7XG4zMjk2Olx0XHRlbmQgPSBidWYgJiM0Mzsgc2l6ZTtcbjMyOTc6XHRcbjMyOTg6XHQjZGVmaW5lIGdldF9hcmcodHlwZSlcdFx0XHRcdFx0XHRcdFxcXG4zMjk5Olx0KHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuMzMwMDpcdFx0dHlwZW9mKHR5cGUpIHZhbHVlO1x0XHRcdFx0XHRcdFxcXG4zMzAxOlx0XHRpZiAoc2l6ZW9mKHR5cGUpID09IDgpIHtcdFx0XHRcdFx0XFxcbjMzMDI6XHRcdFx0YXJncyA9IFBUUl9BTElHTihhcmdzLCBzaXplb2YodTMyKSk7XHRcdFx0XFxcbjMzMDM6XHRcdFx0Kih1MzIgKilcdTAwMjZ2YWx1ZSA9ICoodTMyICopYXJncztcdFx0XHRcdFxcXG4zMzA0Olx0XHRcdCooKHUzMiAqKVx1MDAyNnZhbHVlICYjNDM7IDEpID0gKih1MzIgKikoYXJncyAmIzQzOyA0KTtcdFx0XFxcbjMzMDU6XHRcdH0gZWxzZSB7XHRcdFx0XHRcdFx0XHRcXFxuMzMwNjpcdFx0XHRhcmdzID0gUFRSX0FMSUdOKGFyZ3MsIHNpemVvZih0eXBlKSk7XHRcdFx0XFxcbjMzMDc6XHRcdFx0dmFsdWUgPSAqKHR5cGVvZih0eXBlKSAqKWFyZ3M7XHRcdFx0XHRcXFxuMzMwODpcdFx0fVx0XHRcdFx0XHRcdFx0XHRcXFxuMzMwOTpcdFx0YXJncyAmIzQzOz0gc2l6ZW9mKHR5cGUpO1x0XHRcdFx0XHRcdFxcXG4zMzEwOlx0XHR2YWx1ZTtcdFx0XHRcdFx0XHRcdFx0XFxcbjMzMTE6XHR9KVxuMzMxMjpcdFxuMzMxMzpcdFx0LyogTWFrZSBzdXJlIGVuZCBpcyBhbHdheXMgXHUwMDNlPSBidWYgKi9cbjMzMTQ6XHRcdGlmIChlbmQgXHUwMDNjIGJ1Zikge1xuMzMxNTpcdFx0XHRlbmQgPSAoKHZvaWQgKiktMSk7XG4zMzE2Olx0XHRcdHNpemUgPSBlbmQgLSBidWY7XG4zMzE3Olx0XHR9XG4zMzE4Olx0XG4zMzE5Olx0XHR3aGlsZSAoKmZtdC5zdHIpIHtcbjMzMjA6XHRcdFx0Y29uc3QgY2hhciAqb2xkX2ZtdCA9IGZtdC5zdHI7XG4zMzIxOlx0XHRcdHVuc2lnbmVkIGxvbmcgbG9uZyBudW07XG4zMzIyOlx0XG4zMzIzOlx0XHRcdGZtdCA9IGZvcm1hdF9kZWNvZGUoZm10LCBcdTAwMjZzcGVjKTtcbjMzMjQ6XHRcdFx0c3dpdGNoIChmbXQuc3RhdGUpIHtcbjMzMjU6XHRcdFx0Y2FzZSBGT1JNQVRfU1RBVEVfTk9ORToge1xuMzMyNjpcdFx0XHRcdGludCByZWFkID0gZm10LnN0ciAtIG9sZF9mbXQ7XG4zMzI3Olx0XHRcdFx0aWYgKHN0ciBcdTAwM2MgZW5kKSB7XG4zMzI4Olx0XHRcdFx0XHRpbnQgY29weSA9IHJlYWQ7XG4zMzI5Olx0XHRcdFx0XHRpZiAoY29weSBcdTAwM2UgZW5kIC0gc3RyKVxuMzMzMDpcdFx0XHRcdFx0XHRjb3B5ID0gZW5kIC0gc3RyO1xuMzMzMTpcdFx0XHRcdFx0bWVtY3B5KHN0ciwgb2xkX2ZtdCwgY29weSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTc4CgkJCQkJCQlvdXRwdXQ6IDI1OAoJCQkJCQkJdGhvdWdodHM6IDUwODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgQlBGIFN0cmVhbSBQYXRjaDogTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc29tZSBrZXkgYXJlYXMgaW4gdGhlIEJQRiBzdHJlYW0gaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBhcm91bmQgZm9ybWF0dGluZyBvdXRwdXQgd2l0aCBgYnN0cl9wcmludGZgIGFuZCBgdnNjbnByaW50ZmAsIGFsbG9jYXRpbmcgc3RyZWFtIGVsZW1lbnRzLCBhbmQgcmVhZGluZyBkYXRhIGZyb20gdGhvc2UgZWxlbWVudHMuIE15IGluaXRpYWwgY29uY2VybiB3YXMgd2hldGhlciB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBvciBmaXggYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBZnRlciBjYXJlZnVsIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCYjMzk7cyBub3QgdGhlIGNhc2UuCgpUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBzdGVtIGZyb20gaG93IHRoZSBzdHJlYW0mIzM5O3MgY2FwYWNpdHkgaXMgbWFuYWdlZCBhbmQgaG93IHN0cmluZyBsZW5ndGhzIGFyZSBoYW5kbGVkIGluIHJlbGF0aW9uIHRvIGJ1ZmZlciBzaXplcy4gVGhlIHBhdGNoIGFkanVzdHMgdGhlIGNvbmRpdGlvbiBgbGVuICZsdDsgMCB8fCBsZW4gJmd0OyBtYXhfbGVuYCB0byBgbGVuICZsdDsgMCB8fCBsZW4gJmd0Oz0gbWF4X2xlbmAgaW4gc2V2ZXJhbCBwbGFjZXMuIFRoaXMgY2hhbmdlLCBhbG9uZyB3aXRoIHRoZSBjaGFuZ2VzIHRvIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgYW5kIGBicGZfc3RyZWFtX3JlYWRgIGFyZSBwcmltYXJpbHkgZGVhbGluZyB3aXRoIGNvcm5lciBjYXNlcyB3aGVyZSB0aGUgZm9ybWF0dGVkIHN0cmluZyBjb3VsZCBiZSB0cnVuY2F0ZWQsIG92ZXJzaXplZCwgb3IgcGFydGlhbGx5IGNvcGllZCB0byB1c2VyIHNwYWNlLiBJdCBhaW1zIHRvIHByZXZlbnQgYSByZXNvdXJjZSBsZWFrIGFuZCBhdm9pZCBzZW5kaW5nIGEgTlVMIGJ5dGUgdG8gdXNlciBzcGFjZS4KClNwZWNpZmljYWxseSwgSeKAmXZlIGNvbnNpZGVyZWQgdGhlc2UgcG9pbnRzOgoKKiAgICoqQ2FwYWNpdHkgTWFuYWdlbWVudDoqKiBUaGUgcGF0Y2ggbm93IGNvcnJlY3RseSBoYW5kbGVzIGNhc2VzIHdoZXJlIGEgZm9ybWF0dGVkIHN0cmluZyBpcyB0b28gbGFyZ2UgdG8gZml0IGluIHRoZSBidWZmZXIsIGVpdGhlciBieSByZWplY3RpbmcgdGhlIHN0cmluZyBvciByZWxlYXNpbmcgdGhlIGNvbnN1bWVkIGNhcGFjaXR5LiBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSByaXNrIG9mIGluY29ycmVjdGx5IGluY3JlbWVudGluZyB0aGUgc3RyZWFtJiMzOTtzIGxlbmd0aCB3aXRob3V0IGFuIGFjdHVhbCBwdXNoLiBUaGUgcGF0Y2ggYWxzbyBmaXhlZCBhIGNhcGFjaXR5IGxlYWsgaW4gdGhlIG92ZXJmbG93IGNhc2UuCiogICAqKk5VTCBCeXRlIEluY2x1c2lvbjoqKiBUaGUgb2xkIGNvZGUgd2FzIGluYWR2ZXJ0ZW50bHkgY29weWluZyB0aGUgdHJhaWxpbmcgTlVMIGJ5dGUgZnJvbSB0aGUgZm9ybWF0dGluZyBidWZmZXIgaW50byB0aGUgc3RyZWFtIGVsZW1lbnQgaW4gdGhlIGVkZ2UgY2FzZSB3aGVyZSB0aGUgbGVuZ3RoIHdhcyB0aGUgYnVmZmVyJiMzOTtzIGZ1bGwgbGVuZ3RoLiBUaGlzIHBhdGNoIGVsaW1pbmF0ZXMgdGhpcyBhbmQgcHJldmVudHMgYSB0cmFpbGluZyBOVUwgZnJvbSB0aGUgc3RyZWFtLgoqICAgKipFcnJvciBIYW5kbGluZyBpbiBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgOioqIGB2c25wcmludGZgIG5vdyByZXR1cm5zIGl0cyBjb3JyZWN0IGxlbmd0aCBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4gd2hpY2ggY291bGQgYmUgdmVyeSBsYXJnZSBpZiB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgZm9ybWF0dGluZyBzdHJpbmcuIFRoZSBwYXRjaCBub3cgY29ycmVjdGx5IGhhbmRsZXMgZmFpbHVyZSBzY2VuYXJpb3MgaW4gYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAsIGVuc3VyaW5nIHRoYXQgYHNzLSZndDtsZW5gIGlzIG9ubHkgaW5jcmVtZW50ZWQgb24gc3VjY2Vzc2Z1bCBwdXNoIGFuZCBkb2VzbiYjMzk7dCBsZWFrIGNhcGFjaXR5LgoqICAgKipQYXJ0aWFsIGBjb3B5X3RvX3VzZXJgIEZhdWx0czoqKiBUaGUgYGJwZl9zdHJlYW1fcmVhZGAgZnVuY3Rpb24gd2FzIG5vdCBjb3JyZWN0bHkgYWNjb3VudGluZyBmb3IgcGFydGlhbGx5IGNvcGllZCBieXRlcyBpbiBjYXNlIG9mIGEgZmF1bHQuIFRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IGNvcnJlY3RseSBhY2NvdW50aW5nIGZvciBwYXJ0aWFsbHkgd3JpdHRlbiBieXRlcy4KCkluIGFsbCBvZiB0aGVzZSBzY2VuYXJpb3MsIHRoZSBtZW1vcnkgaXMgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkuIFRoZSBhbGxvY2F0aW9uIG9mIHN0cmVhbSBlbGVtZW50cyB1c2luZyBga21hbGxvY19ub2xvY2tgIHdpdGggYF9fR0ZQX1pFUk9gIGVuc3VyZXMgdGhhdCBtZW1vcnkgaXMgemVyb2VkLiBGdXJ0aGVyLCB3aGVuIHB1c2hpbmcgc3RyaW5ncyBpbnRvIHRoZSBlbGVtZW50cywgYG1lbWNweWAgaXMgdXNlZCB0byBjb3B5IGRhdGEgdGhhdCBpcyBndWFyYW50ZWVkIHRvIGJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGVpdGhlciBgYnN0cl9wcmludGZgIG9yIGB2c2NucHJpbnRmYC4gVGhlcmUgYXJlIGNoZWNrcyBpbiBwbGFjZSB0byBwcmV2ZW50IHRoZSBjb3B5IG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBpbiB0aGUgc2NlbmFyaW8gb2YgYSBsYXJnZSByZXR1cm4gdmFsdWUgZnJvbSBgYnN0cl9wcmludGZgLiBJJiMzOTt2ZSBjYXJlZnVsbHkgZ29uZSB0aHJvdWdoIHRoZSB2YXJpb3VzIGNoZWNrcyBhcm91bmQgdGhlIHJldHVybiB2YWx1ZXMgb2YgdGhlc2UgZm9ybWF0dGluZyBmdW5jdGlvbnMgYW5kIHRoZSBzaXplIGNoZWNrcyBiZWZvcmUgbWVtb3J5IGNvcGllczsgdGhleSBhcmUgc3VmZmljaWVudC4KClRoZXJlZm9yZSwgc2luY2UgdGhlIGNoYW5nZXMgZGVhbCB3aXRoIHJlc291cmNlIG1hbmFnZW1lbnQsIGVycm9yIGhhbmRsaW5nLCBhbmQgYXZvaWRpbmcgdGhlIGxlYWsvY29weSBvZiB0aGUgbnVsbCB0ZXJtaW5hdG9yLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBLTVNBTiBpcyBub3QgbmVlZGVkIGJlY2F1c2UgdGhlIGJ1ZyBmaXhlcyBhcmUgbWFpbmx5IHJlbGF0ZWQgdG8gbG9naWMgZXJyb3JzLiBUaGUgaW5jbHVkZWQgc2VsZnRlc3RzIGFuZCBleGlzdGluZyBrZXJuZWwgdGVzdGluZyB3aWxsIGJlIGFibGUgdG8gY2F0Y2ggdGhlIGlzc3VlcyBiZWluZyByZXNvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNldmVyYWwgbG9naWMgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgYnVncyBpbiB0aGUgQlBGIHN0cmVhbSBpbXBsZW1lbnRhdGlvbjpcbjEuIEl0IGZpeGVzIGEgY2FwYWNpdHkgbGVhayB3aGVyZSBvdmVyc2l6ZWQgb3IgdHJ1bmNhdGVkIHN0cmluZ3Mgd291bGQgY29uc3VtZSBzdHJlYW0gY2FwYWNpdHkgYnV0IGZhaWwgdG8gYWxsb2NhdGUgYW4gZWxlbWVudCwgcGVybWFuZW50bHkgcmVkdWNpbmcgYXZhaWxhYmxlIGNhcGFjaXR5LlxuMi4gSXQgcHJldmVudHMgdGhlIGluY2x1c2lvbiBvZiB0aGUgdHJhaWxpbmcgTlVMIGJ5dGUgaW4gdGhlIHN0cmVhbSBwYXlsb2FkIHdoZW4gdGhlIGZvcm1hdHRlZCBzdHJpbmcgZXhhY3RseSBtYXRjaGVzIHRoZSBidWZmZXIgc2l6ZS5cbjMuIEl0IGZpeGVzIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgdG8gb25seSBpbmNyZW1lbnQgdGhlIHN0cmVhbSBsZW5ndGggaWYgdGhlIHN0cmluZyB3YXMgc3VjY2Vzc2Z1bGx5IHB1c2hlZC5cbjQuIEl0IGNvcnJlY3RzIHRoZSBoYW5kbGluZyBvZiBwYXJ0aWFsIGBjb3B5X3RvX3VzZXJgIGZhdWx0cyBpbiBgYnBmX3N0cmVhbV9yZWFkYCB0byBwcm9wZXJseSBhY2NvdW50IGZvciBzdWNjZXNzZnVsbHkgY29waWVkIGJ5dGVzLlxuXG5Ob25lIG9mIHRoZXNlIGlzc3VlcyBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgc3RyZWFtIGVsZW1lbnRzIGFyZSBhbGxvY2F0ZWQgd2l0aCBgX19HRlBfWkVST2AsIGFuZCB0aGUgc3RyaW5ncyBjb3BpZWQgaW50byB0aGVtIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgYnN0cl9wcmludGZgIG9yIGB2c2NucHJpbnRmYC4gVGhlIGNvcGllZCBsZW5ndGggaXMgc3RyaWN0bHkgYm91bmRlZCBieSB0aGUgaW5pdGlhbGl6ZWQgc3RyaW5nIGxlbmd0aC4gVGhlIGJ1Z3MgZml4ZWQgYXJlIGxvZ2ljIGVycm9ycywgcmVzb3VyY2UgbGVha3MsIGFuZCBpbmNvcnJlY3QgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgdGhlIGFkZGVkIHNlbGZ0ZXN0cyBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgdG9vbHMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNldmVyYWwgbG9naWMgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgYnVncyBpbiB0aGUgQlBGIHN0cmVhbSBpbXBsZW1lbnRhdGlvbjpcbjEuIEl0IGZpeGVzIGEgY2FwYWNpdHkgbGVhayB3aGVyZSBvdmVyc2l6ZWQgb3IgdHJ1bmNhdGVkIHN0cmluZ3Mgd291bGQgY29uc3VtZSBzdHJlYW0gY2FwYWNpdHkgYnV0IGZhaWwgdG8gYWxsb2NhdGUgYW4gZWxlbWVudCwgcGVybWFuZW50bHkgcmVkdWNpbmcgYXZhaWxhYmxlIGNhcGFjaXR5LlxuMi4gSXQgcHJldmVudHMgdGhlIGluY2x1c2lvbiBvZiB0aGUgdHJhaWxpbmcgTlVMIGJ5dGUgaW4gdGhlIHN0cmVhbSBwYXlsb2FkIHdoZW4gdGhlIGZvcm1hdHRlZCBzdHJpbmcgZXhhY3RseSBtYXRjaGVzIHRoZSBidWZmZXIgc2l6ZS5cbjMuIEl0IGZpeGVzIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgdG8gb25seSBpbmNyZW1lbnQgdGhlIHN0cmVhbSBsZW5ndGggaWYgdGhlIHN0cmluZyB3YXMgc3VjY2Vzc2Z1bGx5IHB1c2hlZC5cbjQuIEl0IGNvcnJlY3RzIHRoZSBoYW5kbGluZyBvZiBwYXJ0aWFsIGBjb3B5X3RvX3VzZXJgIGZhdWx0cyBpbiBgYnBmX3N0cmVhbV9yZWFkYCB0byBwcm9wZXJseSBhY2NvdW50IGZvciBzdWNjZXNzZnVsbHkgY29waWVkIGJ5dGVzLlxuXG5Ob25lIG9mIHRoZXNlIGlzc3VlcyBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgc3RyZWFtIGVsZW1lbnRzIGFyZSBhbGxvY2F0ZWQgd2l0aCBgX19HRlBfWkVST2AsIGFuZCB0aGUgc3RyaW5ncyBjb3BpZWQgaW50byB0aGVtIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgYnN0cl9wcmludGZgIG9yIGB2c2NucHJpbnRmYC4gVGhlIGNvcGllZCBsZW5ndGggaXMgc3RyaWN0bHkgYm91bmRlZCBieSB0aGUgaW5pdGlhbGl6ZWQgc3RyaW5nIGxlbmd0aC4gVGhlIGJ1Z3MgZml4ZWQgYXJlIGxvZ2ljIGVycm9ycywgcmVzb3VyY2UgbGVha3MsIGFuZCBpbmNvcnJlY3QgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgdGhlIGFkZGVkIHNlbGZ0ZXN0cyBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgdG9vbHMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0Mzo1MS4yMjgyNTI1MzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjAzMzIxNjM0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19zdHJlYW1fcmVhZFwiLFxuICAgIFwiYnBmX3N0cmVhbV92cHJpbnRrXCIsXG4gICAgXCJicGZfc3RyZWFtX3N0YWdlX3ByaW50a1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHNldmVyYWwgbG9naWMgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgYnVncyBpbiB0aGUgQlBGIHN0cmVhbSBpbXBsZW1lbnRhdGlvbjpcXG4xLiBJdCBmaXhlcyBhIGNhcGFjaXR5IGxlYWsgd2hlcmUgb3ZlcnNpemVkIG9yIHRydW5jYXRlZCBzdHJpbmdzIHdvdWxkIGNvbnN1bWUgc3RyZWFtIGNhcGFjaXR5IGJ1dCBmYWlsIHRvIGFsbG9jYXRlIGFuIGVsZW1lbnQsIHBlcm1hbmVudGx5IHJlZHVjaW5nIGF2YWlsYWJsZSBjYXBhY2l0eS5cXG4yLiBJdCBwcmV2ZW50cyB0aGUgaW5jbHVzaW9uIG9mIHRoZSB0cmFpbGluZyBOVUwgYnl0ZSBpbiB0aGUgc3RyZWFtIHBheWxvYWQgd2hlbiB0aGUgZm9ybWF0dGVkIHN0cmluZyBleGFjdGx5IG1hdGNoZXMgdGhlIGJ1ZmZlciBzaXplLlxcbjMuIEl0IGZpeGVzIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgdG8gb25seSBpbmNyZW1lbnQgdGhlIHN0cmVhbSBsZW5ndGggaWYgdGhlIHN0cmluZyB3YXMgc3VjY2Vzc2Z1bGx5IHB1c2hlZC5cXG40LiBJdCBjb3JyZWN0cyB0aGUgaGFuZGxpbmcgb2YgcGFydGlhbCBgY29weV90b191c2VyYCBmYXVsdHMgaW4gYGJwZl9zdHJlYW1fcmVhZGAgdG8gcHJvcGVybHkgYWNjb3VudCBmb3Igc3VjY2Vzc2Z1bGx5IGNvcGllZCBieXRlcy5cXG5cXG5Ob25lIG9mIHRoZXNlIGlzc3VlcyBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgc3RyZWFtIGVsZW1lbnRzIGFyZSBhbGxvY2F0ZWQgd2l0aCBgX19HRlBfWkVST2AsIGFuZCB0aGUgc3RyaW5ncyBjb3BpZWQgaW50byB0aGVtIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgYnN0cl9wcmludGZgIG9yIGB2c2NucHJpbnRmYC4gVGhlIGNvcGllZCBsZW5ndGggaXMgc3RyaWN0bHkgYm91bmRlZCBieSB0aGUgaW5pdGlhbGl6ZWQgc3RyaW5nIGxlbmd0aC4gVGhlIGJ1Z3MgZml4ZWQgYXJlIGxvZ2ljIGVycm9ycywgcmVzb3VyY2UgbGVha3MsIGFuZCBpbmNvcnJlY3QgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgdGhlIGFkZGVkIHNlbGZ0ZXN0cyBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgdG9vbHMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIGJ1Z3MgaW4gdGhlIEJQRiBzdHJlYW0gc3Vic3lzdGVtLCBpbmNsdWRpbmcgYW4gb2ZmLWJ5LW9uZSBlcnJvciBpbiBsZW5ndGggY2hlY2tpbmcsIGEgY2FwYWNpdHkgbGVhayBvbiBwdXNoIGZhaWx1cmUsIGluY29ycmVjdCBoYW5kbGluZyBvZiBwYXJ0aWFsIHJlYWRzIHRvIHVzZXIgc3BhY2UsIG1pc3NpbmcgdHJ1bmNhdGlvbiBjaGVja3MgaW4gdnByaW50aywgYW5kIGluY29ycmVjdCBsZW5ndGggY2FsY3VsYXRpb25zIGluIHN0YWdlX3ByaW50ay4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSAoQlBGIHN5c2NhbGwgYW5kIEJQRiBwcm9ncmFtcykgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0Mzo1MS4yMjgyNTk2NDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDQ3Nzc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDUyNDZhZmRlNDY5NmZjNjlmNzMyOTNhYWIzODg1MDk4MTA1M2U1MDBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMjMgMTQ6NDM6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdHJlYW0uYyBiL2tlcm5lbC9icGYvc3RyZWFtLmNcXG5pbmRleCBiZTljZTk4ZTk0NjkyLi43YTVjM2FjODY3NmI5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvc3RyZWFtLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N0cmVhbS5jXFxuQEAgLTIyLDExICsyMiwxMSBAQCBzdGF0aWMgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqYnBmX3N0cmVhbV9lbGVtX2FsbG9jKGludCBsZW4pXFxuIFxcdHNpemVfdCBhbGxvY19zaXplO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogTGVuZ3RoIGRlbm90ZXMgdGhlIGFtb3VudCBvZiBkYXRhIHRvIGJlIHdyaXR0ZW4gYXMgcGFydCBvZiBzdHJlYW0gZWxlbWVudCxcXG4tXFx0ICogdGh1cyBpbmNsdWRlcyAnXFxcXDAnIGJ5dGUuIFdlJ3JlIGNhcHBlZCBieSBob3cgbXVjaCBicGZfYnByaW50Zl9idWZmZXJzIGNhblxcbi1cXHQgKiBhY2NvbW9kYXRlLCB0aGVyZWZvcmUgZGVueSBhbGxvY2F0aW9ucyB0aGF0IHdvbid0IGZpdCBpbnRvIHRoZW0uXFxuK1xcdCAqIExlbmd0aCBpcyB0aGUgcGF5bG9hZCBwdXNoZWQgaW50byB0aGUgc3RyZWFtLCBleGNsdWRpbmcgdGhlXFxuK1xcdCAqIHRyYWlsaW5nIE5VTCBvZiB0aGUgYnByaW50ZiBidWZmZXIuIFJlamVjdCBhbnl0aGluZyB0aGF0IGNhbm5vdFxcbitcXHQgKiBmaXQgd2l0aG91dCBjb3B5aW5nIHRoYXQgTlVMIGludG8gdGhlIHN0cmVhbSBlbGVtZW50LlxcbiBcXHQgKi9cXG4tXFx0aWYgKGxlbiBcXHUwMDNjIDAgfHwgbGVuIFxcdTAwM2UgbWF4X2xlbilcXG4rXFx0aWYgKGxlbiBcXHUwMDNjIDAgfHwgbGVuIFxcdTAwM2U9IG1heF9sZW4pXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0YWxsb2Nfc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCBicGZfc3RyZWFtX2VsZW0sIHN0cltsZW5dKTtcXG5AQCAtNjgsMTAgKzY4LDggQEAgc3RhdGljIGludCBicGZfc3RyZWFtX2NvbnN1bWVfY2FwYWNpdHkoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgaW50IGxlbilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICplbGVtKVxcbitzdGF0aWMgdm9pZCBicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgaW50IGxlbilcXG4ge1xcbi1cXHRpbnQgbGVuID0gZWxlbS1cXHUwMDNldG90YWxfbGVuO1xcbi1cXG4gXFx0YXRvbWljX3N1YihsZW4sIFxcdTAwMjZzdHJlYW0tXFx1MDAzZWNhcGFjaXR5KTtcXG4gfVxcbiBcXG5AQCAtNzksNyArNzcsMTQgQEAgc3RhdGljIGludCBicGZfc3RyZWFtX3B1c2hfc3RyKHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxcXG4ge1xcbiBcXHRpbnQgcmV0ID0gYnBmX3N0cmVhbV9jb25zdW1lX2NhcGFjaXR5KHN0cmVhbSwgbGVuKTtcXG4gXFxuLVxcdHJldHVybiByZXQgPzogX19icGZfc3RyZWFtX3B1c2hfc3RyKFxcdTAwMjZzdHJlYW0tXFx1MDAzZWxvZywgc3RyLCBsZW4pO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFxcdTAwMjZzdHJlYW0tXFx1MDAzZWxvZywgc3RyLCBsZW4pO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RyZWFtLCBsZW4pO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBicGZfc3RyZWFtICpicGZfc3RyZWFtX2dldChlbnVtIGJwZl9zdHJlYW1faWQgc3RyZWFtX2lkLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXFxuQEAgLTE2Miw2ICsxNjcsNyBAQCBzdGF0aWMgaW50IGJwZl9zdHJlYW1fcmVhZChzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCB2b2lkIF9fdXNlciAqYnVmLCBpbnQgbGVuKVxcbiBcXG4gXFx0d2hpbGUgKHJlbV9sZW4pIHtcXG4gXFx0XFx0aW50IHBvcyA9IGxlbiAtIHJlbV9sZW47XFxuK1xcdFxcdGludCBjaHVuaywgbjtcXG4gXFx0XFx0Ym9vbCBjb250O1xcbiBcXG4gXFx0XFx0bm9kZSA9IGJwZl9zdHJlYW1fYmFja2xvZ19wZWVrKHN0cmVhbSk7XFxuQEAgLTE3NSwyMCArMTgxLDIxIEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9yZWFkKHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIHZvaWQgX191c2VyICpidWYsIGludCBsZW4pXFxuIFxcbiBcXHRcXHRjb25zX2xlbiA9IGVsZW0tXFx1MDAzZWNvbnN1bWVkX2xlbjtcXG4gXFx0XFx0Y29udCA9IGJwZl9zdHJlYW1fY29uc3VtZV9lbGVtKGVsZW0sIFxcdTAwMjZyZW1fbGVuKSA9PSBmYWxzZTtcXG4tXFxuLVxcdFxcdHJldCA9IGNvcHlfdG9fdXNlcihidWYgKyBwb3MsIGVsZW0tXFx1MDAzZXN0ciArIGNvbnNfbGVuLFxcbi1cXHRcXHRcXHRcXHQgICBlbGVtLVxcdTAwM2Vjb25zdW1lZF9sZW4gLSBjb25zX2xlbik7XFxuLVxcdFxcdC8qIFJlc3RvcmUgaW4gY2FzZSBvZiBlcnJvci4gKi9cXG4tXFx0XFx0aWYgKHJldCkge1xcbi1cXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbi1cXHRcXHRcXHRlbGVtLVxcdTAwM2Vjb25zdW1lZF9sZW4gPSBjb25zX2xlbjtcXG4rXFx0XFx0Y2h1bmsgPSBlbGVtLVxcdTAwM2Vjb25zdW1lZF9sZW4gLSBjb25zX2xlbjtcXG4rXFxuK1xcdFxcdG4gPSBjb3B5X3RvX3VzZXIoYnVmICsgcG9zLCBlbGVtLVxcdTAwM2VzdHIgKyBjb25zX2xlbiwgY2h1bmspO1xcbitcXHRcXHRpZiAobikge1xcbitcXHRcXHRcXHQvKiBLZWVwIGFueSBzdWNjZXNzZnVsbHkgY29waWVkIGJ5dGVzOyAtRUZBVUxUIG9ubHkgaWYgbm9uZS4gKi9cXG4rXFx0XFx0XFx0ZWxlbS1cXHUwMDNlY29uc3VtZWRfbGVuIC09IG47XFxuK1xcdFxcdFxcdHJlbV9sZW4gKz0gbjtcXG4rXFx0XFx0XFx0cmV0ID0gKGxlbiA9PSByZW1fbGVuKSA/IC1FRkFVTFQgOiAwO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGNvbnQpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRicGZfc3RyZWFtX2JhY2tsb2dfcG9wKHN0cmVhbSk7XFxuLVxcdFxcdGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJlYW0sIGVsZW0pO1xcbitcXHRcXHRicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RyZWFtLCBlbGVtLVxcdTAwM2V0b3RhbF9sZW4pO1xcbiBcXHRcXHRicGZfc3RyZWFtX2ZyZWVfZWxlbShlbGVtKTtcXG4gXFx0fVxcbiBcXG5AQCAtMjM4LDYgKzI0NSwxMSBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0cmV0ID0gYnN0cl9wcmludGYoZGF0YS5idWYsIE1BWF9CUFJJTlRGX0JVRiwgZm10X19zdHIsIGRhdGEuYmluX2FyZ3MpO1xcbitcXHQvKiBUcnVuY2F0aW9uOiByZWplY3QgYmVmb3JlIGNhcGFjaXR5IGNoYXJnZSAobm90IC1FTk9NRU0pLiAqL1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IE1BWF9CUFJJTlRGX0JVRikge1xcbitcXHRcXHRicGZfYnByaW50Zl9jbGVhbnVwKFxcdTAwMjZkYXRhKTtcXG4rXFx0XFx0cmV0dXJuIC1FMkJJRztcXG4rXFx0fVxcbiBcXHQvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi9cXG4gXFx0cmV0ID0gYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJlYW0sIGRhdGEuYnVmLCByZXQpO1xcbiBcXHRicGZfYnByaW50Zl9jbGVhbnVwKFxcdTAwMjZkYXRhKTtcXG5AQCAtMzExLDE3ICszMjMsMTggQEAgaW50IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9icHJpbnRmX2J1ZmZlcnMgKmJ1ZjtcXG4gXFx0dmFfbGlzdCBhcmdzO1xcbi1cXHRpbnQgcmV0O1xcbitcXHRpbnQgbGVuLCByZXQ7XFxuIFxcbiBcXHRpZiAoYnBmX3RyeV9nZXRfYnVmZmVycyhcXHUwMDI2YnVmKSlcXG4gXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFxuIFxcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XFxuLVxcdHJldCA9IHZzbnByaW50ZihidWYtXFx1MDAzZWJ1ZiwgQVJSQVlfU0laRShidWYtXFx1MDAzZWJ1ZiksIGZtdCwgYXJncyk7XFxuK1xcdGxlbiA9IHZzY25wcmludGYoYnVmLVxcdTAwM2VidWYsIEFSUkFZX1NJWkUoYnVmLVxcdTAwM2VidWYpLCBmbXQsIGFyZ3MpO1xcbiBcXHR2YV9lbmQoYXJncyk7XFxuLVxcdHNzLVxcdTAwM2VsZW4gKz0gcmV0O1xcbiBcXHQvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi9cXG4tXFx0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFxcdTAwMjZzcy1cXHUwMDNlbG9nLCBidWYtXFx1MDAzZWJ1ZiwgcmV0KTtcXG4rXFx0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFxcdTAwMjZzcy1cXHUwMDNlbG9nLCBidWYtXFx1MDAzZWJ1ZiwgbGVuKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHNzLVxcdTAwM2VsZW4gKz0gbGVuO1xcbiBcXHRicGZfcHV0X2J1ZmZlcnMoKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jXFxuaW5kZXggYzNjY2U1YzI5MmJkZC4uODcxNzBkY2FkM2FkOCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jXFxuQEAgLTU4LDYgKzU4LDcxIEBAIHZvaWQgdGVzdF9zdHJlYW1fc3lzY2FsbCh2b2lkKVxcbiBcXHRzdHJlYW1fX2Rlc3Ryb3koc2tlbCk7XFxuIH1cXG4gXFxuK3ZvaWQgdGVzdF9zdHJlYW1fb3ZlcnNpemUodm9pZClcXG4re1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XFxuK1xcdHN0cnVjdCBzdHJlYW0gKnNrZWw7XFxuK1xcdGludCByZXQsIHByb2dfZmQ7XFxuK1xcdGNoYXIgYnVmWzhdID0ge307XFxuK1xcbitcXHRza2VsID0gc3RyZWFtX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic3RyZWFtX19vcGVuX2FuZF9sb2FkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3Muc3RyZWFtX292ZXJzaXplKTtcXG4rXFx0cmV0ID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nX2ZkLCBcXHUwMDI2b3B0cyk7XFxuK1xcdEFTU0VSVF9PSyhyZXQsIFxcXCJvdmVyc2l6ZSBydW5cXFwiKTtcXG4rXFx0QVNTRVJUX09LKG9wdHMucmV0dmFsLCBcXFwib3ZlcnNpemUgcmV0dmFsXFxcIik7XFxuK1xcbitcXHQvKiBPdmVyc2l6ZWQgcHVzaCBtdXN0IG5vdCBwZXJtYW5lbnRseSBjb25zdW1lIGNhcGFjaXR5IG9uIHRoaXMgcHJvZy4gKi9cXG4rXFx0cmV0ID0gYnBmX3Byb2dfc3RyZWFtX3JlYWQocHJvZ19mZCwgQlBGX1NUUkVBTV9TVERPVVQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE5VTEwpO1xcbitcXHRBU1NFUlRfRVEocmV0LCAzLCBcXFwiYnl0ZXMgYWZ0ZXIgb3ZlcnNpemVcXFwiKTtcXG4rXFx0QVNTRVJUX09LKG1lbWNtcChidWYsIFxcXCJmb29cXFwiLCAzKSwgXFxcInBheWxvYWQgYWZ0ZXIgb3ZlcnNpemVcXFwiKTtcXG4rXFxuK1xcdHN0cmVhbV9fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X3N0cmVhbV9wYXJ0aWFsX3JlYWQodm9pZClcXG4re1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XFxuK1xcdHN0cnVjdCBzdHJlYW0gKnNrZWw7XFxuK1xcdGludCByZXQsIHByb2dfZmQ7XFxuK1xcdGxvbmcgcGFnZV9zaXplO1xcbitcXHRjaGFyICpwYWdlLCAqYnVmO1xcbitcXHRjaGFyIHJlc3RbOF0gPSB7fTtcXG4rXFxuK1xcdHNrZWwgPSBzdHJlYW1fX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJzdHJlYW1fX29wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5zdHJlYW1fc3lzY2FsbCk7XFxuK1xcdHJldCA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocHJvZ19mZCwgXFx1MDAyNm9wdHMpO1xcbitcXHRBU1NFUlRfT0socmV0LCBcXFwicmV0XFxcIik7XFxuK1xcdEFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXFxcInJldHZhbFxcXCIpO1xcbitcXG4rXFx0cGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpO1xcbitcXHRwYWdlID0gbW1hcChOVUxMLCBwYWdlX3NpemUgKiAyLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRcXHQgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XFxuK1xcdGlmICghQVNTRVJUX05FUShwYWdlLCBNQVBfRkFJTEVELCBcXFwibW1hcFxcXCIpKSB7XFxuK1xcdFxcdHN0cmVhbV9fZGVzdHJveShza2VsKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcdC8qIExlYXZlIG9ubHkgdGhlIGZpcnN0IHBhZ2UgbWFwcGVkIHNvIGEgc3RyYWRkbGluZyBjb3B5IGZhdWx0cy4gKi9cXG4rXFx0QVNTRVJUX09LKG11bm1hcChwYWdlICsgcGFnZV9zaXplLCBwYWdlX3NpemUpLCBcXFwibXVubWFwIHNlY29uZCBwYWdlXFxcIik7XFxuK1xcbitcXHRidWYgPSBwYWdlICsgcGFnZV9zaXplIC0gMTtcXG4rXFx0cmV0ID0gYnBmX3Byb2dfc3RyZWFtX3JlYWQocHJvZ19mZCwgQlBGX1NUUkVBTV9TVERPVVQsIGJ1ZiwgMywgTlVMTCk7XFxuK1xcdEFTU0VSVF9FUShyZXQsIDEsIFxcXCJwYXJ0aWFsIGJ5dGVzXFxcIik7XFxuK1xcdEFTU0VSVF9FUShidWZbMF0sICdmJywgXFxcImZpcnN0IGJ5dGVcXFwiKTtcXG4rXFxuK1xcdHJldCA9IGJwZl9wcm9nX3N0cmVhbV9yZWFkKHByb2dfZmQsIEJQRl9TVFJFQU1fU1RET1VULCByZXN0LCBzaXplb2YocmVzdCksIE5VTEwpO1xcbitcXHRBU1NFUlRfRVEocmV0LCAyLCBcXFwicmVtYWluaW5nIGJ5dGVzXFxcIik7XFxuK1xcdEFTU0VSVF9PSyhtZW1jbXAocmVzdCwgXFxcIm9vXFxcIiwgMiksIFxcXCJyZW1haW5pbmcgZGF0YVxcXCIpO1xcbitcXG4rXFx0bXVubWFwKHBhZ2UsIHBhZ2Vfc2l6ZSk7XFxuK1xcdHN0cmVhbV9fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdGVzdF9hZGRyZXNzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgdW5zaWduZWQgbG9uZyAqZmF1bHRfYWRkcl9wKVxcbiB7XFxuIFxcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXFxuaW5kZXggNmY5OTliYTk1MWEzYy4uOWI5N2Y1ZTAxYjgzYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcXG5AQCAtMzYsNyArMzYsMTIgQEAgc3RydWN0IHtcXG4gfSBhcnJheSBTRUMoXFxcIi5tYXBzXFxcIik7XFxuIFxcbiAjZGVmaW5lIEVOT1NQQyAyOFxcbisjZGVmaW5lIEUyQklHIDdcXG4gI2RlZmluZSBfU1RSIFxcXCJ4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhcXFwiXFxuKyNkZWZpbmUgX1g2NCBcXFwieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eFxcXCJcXG4rLyogMTAyNCBieXRlczogdHJ1bmNhdGVkIGJ5IGJzdHJfcHJpbnRmLCBtdXN0IHJldHVybiAtRTJCSUcuICovXFxuKyNkZWZpbmUgX0JJR19TVFIgKF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBcXFxcXFxuK1xcdFxcdCAgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0KVxcbiBcXG4gaW50IHNpemU7XFxuIHU2NCBmYXVsdF9hZGRyO1xcbkBAIC0xMTcsNiArMTIyLDE5IEBAIGludCBzdHJlYW1fc3lzY2FsbCh2b2lkICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcXG4raW50IHN0cmVhbV9vdmVyc2l6ZSh2b2lkICpjdHgpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGJwZl9zdHJlYW1fcHJpbnRrKEJQRl9TVERPVVQsIF9CSUdfU1RSKTtcXG4rXFx0aWYgKHJldCAhPSAtRTJCSUcpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gYnBmX3N0cmVhbV9wcmludGsoQlBGX1NURE9VVCwgXFxcImZvb1xcXCIpO1xcbit9XFxuK1xcbiBTRUMoXFxcInN5c2NhbGxcXFwiKVxcbiBfX2FyY2hfeDg2XzY0XFxuIF9fYXJjaF9hcm02NFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0Mzo1MS42ODk0OTI3NTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTc2OTQ3MjQyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19zdHJlYW1fcmVhZFwiLFxuICAgIFwiYnBmX3N0cmVhbV92cHJpbnRrXCIsXG4gICAgXCJicGZfc3RyZWFtX3N0YWdlX3ByaW50a1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIGJ1Z3MgaW4gdGhlIEJQRiBzdHJlYW0gc3Vic3lzdGVtLCBpbmNsdWRpbmcgYW4gb2ZmLWJ5LW9uZSBlcnJvciBpbiBsZW5ndGggY2hlY2tpbmcsIGEgY2FwYWNpdHkgbGVhayBvbiBwdXNoIGZhaWx1cmUsIGluY29ycmVjdCBoYW5kbGluZyBvZiBwYXJ0aWFsIHJlYWRzIHRvIHVzZXIgc3BhY2UsIG1pc3NpbmcgdHJ1bmNhdGlvbiBjaGVja3MgaW4gdnByaW50aywgYW5kIGluY29ycmVjdCBsZW5ndGggY2FsY3VsYXRpb25zIGluIHN0YWdlX3ByaW50ay4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSAoQlBGIHN5c2NhbGwgYW5kIEJQRiBwcm9ncmFtcykgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MjQ2YWZkZTQ2OTZmYzY5ZjczMjkzYWFiMzg4NTA5ODEwNTNlNTAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMjMgMTQ6NDM6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0cmVhbS5jIGIva2VybmVsL2JwZi9zdHJlYW0uY1xuaW5kZXggYmU5Y2U5OGU5NDY5Mi4uN2E1YzNhYzg2NzZiOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3RyZWFtLmNcbisrKyBiL2tlcm5lbC9icGYvc3RyZWFtLmNcbkBAIC0yMiwxMSArMjIsMTEgQEAgc3RhdGljIHN0cnVjdCBicGZfc3RyZWFtX2VsZW0gKmJwZl9zdHJlYW1fZWxlbV9hbGxvYyhpbnQgbGVuKVxuIFx0c2l6ZV90IGFsbG9jX3NpemU7XG4gXG4gXHQvKlxuLVx0ICogTGVuZ3RoIGRlbm90ZXMgdGhlIGFtb3VudCBvZiBkYXRhIHRvIGJlIHdyaXR0ZW4gYXMgcGFydCBvZiBzdHJlYW0gZWxlbWVudCxcbi1cdCAqIHRodXMgaW5jbHVkZXMgJ1xcMCcgYnl0ZS4gV2UncmUgY2FwcGVkIGJ5IGhvdyBtdWNoIGJwZl9icHJpbnRmX2J1ZmZlcnMgY2FuXG4tXHQgKiBhY2NvbW9kYXRlLCB0aGVyZWZvcmUgZGVueSBhbGxvY2F0aW9ucyB0aGF0IHdvbid0IGZpdCBpbnRvIHRoZW0uXG4rXHQgKiBMZW5ndGggaXMgdGhlIHBheWxvYWQgcHVzaGVkIGludG8gdGhlIHN0cmVhbSwgZXhjbHVkaW5nIHRoZVxuK1x0ICogdHJhaWxpbmcgTlVMIG9mIHRoZSBicHJpbnRmIGJ1ZmZlci4gUmVqZWN0IGFueXRoaW5nIHRoYXQgY2Fubm90XG4rXHQgKiBmaXQgd2l0aG91dCBjb3B5aW5nIHRoYXQgTlVMIGludG8gdGhlIHN0cmVhbSBlbGVtZW50LlxuIFx0ICovXG4tXHRpZiAobGVuIFx1MDAzYyAwIHx8IGxlbiBcdTAwM2UgbWF4X2xlbilcbitcdGlmIChsZW4gXHUwMDNjIDAgfHwgbGVuIFx1MDAzZT0gbWF4X2xlbilcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRhbGxvY19zaXplID0gb2Zmc2V0b2Yoc3RydWN0IGJwZl9zdHJlYW1fZWxlbSwgc3RyW2xlbl0pO1xuQEAgLTY4LDEwICs2OCw4IEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9jb25zdW1lX2NhcGFjaXR5KHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIGludCBsZW4pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYnBmX3N0cmVhbV9yZWxlYXNlX2NhcGFjaXR5KHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIHN0cnVjdCBicGZfc3RyZWFtX2VsZW0gKmVsZW0pXG4rc3RhdGljIHZvaWQgYnBmX3N0cmVhbV9yZWxlYXNlX2NhcGFjaXR5KHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIGludCBsZW4pXG4ge1xuLVx0aW50IGxlbiA9IGVsZW0tXHUwMDNldG90YWxfbGVuO1xuLVxuIFx0YXRvbWljX3N1YihsZW4sIFx1MDAyNnN0cmVhbS1cdTAwM2VjYXBhY2l0eSk7XG4gfVxuIFxuQEAgLTc5LDcgKzc3LDE0IEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBjb25zdCBjaGFyICpzdHIsIGludCBsXG4ge1xuIFx0aW50IHJldCA9IGJwZl9zdHJlYW1fY29uc3VtZV9jYXBhY2l0eShzdHJlYW0sIGxlbik7XG4gXG4tXHRyZXR1cm4gcmV0ID86IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihcdTAwMjZzdHJlYW0tXHUwMDNlbG9nLCBzdHIsIGxlbik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFx1MDAyNnN0cmVhbS1cdTAwM2Vsb2csIHN0ciwgbGVuKTtcbitcdGlmIChyZXQpXG4rXHRcdGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJlYW0sIGxlbik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGJwZl9zdHJlYW0gKmJwZl9zdHJlYW1fZ2V0KGVudW0gYnBmX3N0cmVhbV9pZCBzdHJlYW1faWQsIHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eClcbkBAIC0xNjIsNiArMTY3LDcgQEAgc3RhdGljIGludCBicGZfc3RyZWFtX3JlYWQoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgdm9pZCBfX3VzZXIgKmJ1ZiwgaW50IGxlbilcbiBcbiBcdHdoaWxlIChyZW1fbGVuKSB7XG4gXHRcdGludCBwb3MgPSBsZW4gLSByZW1fbGVuO1xuK1x0XHRpbnQgY2h1bmssIG47XG4gXHRcdGJvb2wgY29udDtcbiBcbiBcdFx0bm9kZSA9IGJwZl9zdHJlYW1fYmFja2xvZ19wZWVrKHN0cmVhbSk7XG5AQCAtMTc1LDIwICsxODEsMjEgQEAgc3RhdGljIGludCBicGZfc3RyZWFtX3JlYWQoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgdm9pZCBfX3VzZXIgKmJ1ZiwgaW50IGxlbilcbiBcbiBcdFx0Y29uc19sZW4gPSBlbGVtLVx1MDAzZWNvbnN1bWVkX2xlbjtcbiBcdFx0Y29udCA9IGJwZl9zdHJlYW1fY29uc3VtZV9lbGVtKGVsZW0sIFx1MDAyNnJlbV9sZW4pID09IGZhbHNlO1xuLVxuLVx0XHRyZXQgPSBjb3B5X3RvX3VzZXIoYnVmICsgcG9zLCBlbGVtLVx1MDAzZXN0ciArIGNvbnNfbGVuLFxuLVx0XHRcdFx0ICAgZWxlbS1cdTAwM2Vjb25zdW1lZF9sZW4gLSBjb25zX2xlbik7XG4tXHRcdC8qIFJlc3RvcmUgaW4gY2FzZSBvZiBlcnJvci4gKi9cbi1cdFx0aWYgKHJldCkge1xuLVx0XHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRcdFx0ZWxlbS1cdTAwM2Vjb25zdW1lZF9sZW4gPSBjb25zX2xlbjtcbitcdFx0Y2h1bmsgPSBlbGVtLVx1MDAzZWNvbnN1bWVkX2xlbiAtIGNvbnNfbGVuO1xuK1xuK1x0XHRuID0gY29weV90b191c2VyKGJ1ZiArIHBvcywgZWxlbS1cdTAwM2VzdHIgKyBjb25zX2xlbiwgY2h1bmspO1xuK1x0XHRpZiAobikge1xuK1x0XHRcdC8qIEtlZXAgYW55IHN1Y2Nlc3NmdWxseSBjb3BpZWQgYnl0ZXM7IC1FRkFVTFQgb25seSBpZiBub25lLiAqL1xuK1x0XHRcdGVsZW0tXHUwMDNlY29uc3VtZWRfbGVuIC09IG47XG4rXHRcdFx0cmVtX2xlbiArPSBuO1xuK1x0XHRcdHJldCA9IChsZW4gPT0gcmVtX2xlbikgPyAtRUZBVUxUIDogMDtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuIFx0XHRpZiAoY29udClcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0YnBmX3N0cmVhbV9iYWNrbG9nX3BvcChzdHJlYW0pO1xuLVx0XHRicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RyZWFtLCBlbGVtKTtcbitcdFx0YnBmX3N0cmVhbV9yZWxlYXNlX2NhcGFjaXR5KHN0cmVhbSwgZWxlbS1cdTAwM2V0b3RhbF9sZW4pO1xuIFx0XHRicGZfc3RyZWFtX2ZyZWVfZWxlbShlbGVtKTtcbiBcdH1cbiBcbkBAIC0yMzgsNiArMjQ1LDExIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3RyZWFtX3ZwcmludGsoaW50IHN0cmVhbV9pZCwgY29uc3QgY2hhciAqZm10X19zdHIsIGNvbnN0IHZvXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSBic3RyX3ByaW50ZihkYXRhLmJ1ZiwgTUFYX0JQUklOVEZfQlVGLCBmbXRfX3N0ciwgZGF0YS5iaW5fYXJncyk7XG4rXHQvKiBUcnVuY2F0aW9uOiByZWplY3QgYmVmb3JlIGNhcGFjaXR5IGNoYXJnZSAobm90IC1FTk9NRU0pLiAqL1xuK1x0aWYgKHJldCBcdTAwM2U9IE1BWF9CUFJJTlRGX0JVRikge1xuK1x0XHRicGZfYnByaW50Zl9jbGVhbnVwKFx1MDAyNmRhdGEpO1xuK1x0XHRyZXR1cm4gLUUyQklHO1xuK1x0fVxuIFx0LyogRXhjbHVkZSBOVUxMIGJ5dGUgZHVyaW5nIHB1c2guICovXG4gXHRyZXQgPSBicGZfc3RyZWFtX3B1c2hfc3RyKHN0cmVhbSwgZGF0YS5idWYsIHJldCk7XG4gXHRicGZfYnByaW50Zl9jbGVhbnVwKFx1MDAyNmRhdGEpO1xuQEAgLTMxMSwxNyArMzIzLDE4IEBAIGludCBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhzdHJ1Y3QgYnBmX3N0cmVhbV9zdGFnZSAqc3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIHtcbiBcdHN0cnVjdCBicGZfYnByaW50Zl9idWZmZXJzICpidWY7XG4gXHR2YV9saXN0IGFyZ3M7XG4tXHRpbnQgcmV0O1xuK1x0aW50IGxlbiwgcmV0O1xuIFxuIFx0aWYgKGJwZl90cnlfZ2V0X2J1ZmZlcnMoXHUwMDI2YnVmKSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiBcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XG4tXHRyZXQgPSB2c25wcmludGYoYnVmLVx1MDAzZWJ1ZiwgQVJSQVlfU0laRShidWYtXHUwMDNlYnVmKSwgZm10LCBhcmdzKTtcbitcdGxlbiA9IHZzY25wcmludGYoYnVmLVx1MDAzZWJ1ZiwgQVJSQVlfU0laRShidWYtXHUwMDNlYnVmKSwgZm10LCBhcmdzKTtcbiBcdHZhX2VuZChhcmdzKTtcbi1cdHNzLVx1MDAzZWxlbiArPSByZXQ7XG4gXHQvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi9cbi1cdHJldCA9IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihcdTAwMjZzcy1cdTAwM2Vsb2csIGJ1Zi1cdTAwM2VidWYsIHJldCk7XG4rXHRyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXHUwMDI2c3MtXHUwMDNlbG9nLCBidWYtXHUwMDNlYnVmLCBsZW4pO1xuK1x0aWYgKCFyZXQpXG4rXHRcdHNzLVx1MDAzZWxlbiArPSBsZW47XG4gXHRicGZfcHV0X2J1ZmZlcnMoKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbmluZGV4IGMzY2NlNWMyOTJiZGQuLjg3MTcwZGNhZDNhZDggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbkBAIC01OCw2ICs1OCw3MSBAQCB2b2lkIHRlc3Rfc3RyZWFtX3N5c2NhbGwodm9pZClcbiBcdHN0cmVhbV9fZGVzdHJveShza2VsKTtcbiB9XG4gXG4rdm9pZCB0ZXN0X3N0cmVhbV9vdmVyc2l6ZSh2b2lkKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbitcdHN0cnVjdCBzdHJlYW0gKnNrZWw7XG4rXHRpbnQgcmV0LCBwcm9nX2ZkO1xuK1x0Y2hhciBidWZbOF0gPSB7fTtcbitcbitcdHNrZWwgPSBzdHJlYW1fX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInN0cmVhbV9fb3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9vdmVyc2l6ZSk7XG4rXHRyZXQgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHByb2dfZmQsIFx1MDAyNm9wdHMpO1xuK1x0QVNTRVJUX09LKHJldCwgXCJvdmVyc2l6ZSBydW5cIik7XG4rXHRBU1NFUlRfT0sob3B0cy5yZXR2YWwsIFwib3ZlcnNpemUgcmV0dmFsXCIpO1xuK1xuK1x0LyogT3ZlcnNpemVkIHB1c2ggbXVzdCBub3QgcGVybWFuZW50bHkgY29uc3VtZSBjYXBhY2l0eSBvbiB0aGlzIHByb2cuICovXG4rXHRyZXQgPSBicGZfcHJvZ19zdHJlYW1fcmVhZChwcm9nX2ZkLCBCUEZfU1RSRUFNX1NURE9VVCwgYnVmLCBzaXplb2YoYnVmKSwgTlVMTCk7XG4rXHRBU1NFUlRfRVEocmV0LCAzLCBcImJ5dGVzIGFmdGVyIG92ZXJzaXplXCIpO1xuK1x0QVNTRVJUX09LKG1lbWNtcChidWYsIFwiZm9vXCIsIDMpLCBcInBheWxvYWQgYWZ0ZXIgb3ZlcnNpemVcIik7XG4rXG4rXHRzdHJlYW1fX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuK3ZvaWQgdGVzdF9zdHJlYW1fcGFydGlhbF9yZWFkKHZvaWQpXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xuK1x0c3RydWN0IHN0cmVhbSAqc2tlbDtcbitcdGludCByZXQsIHByb2dfZmQ7XG4rXHRsb25nIHBhZ2Vfc2l6ZTtcbitcdGNoYXIgKnBhZ2UsICpidWY7XG4rXHRjaGFyIHJlc3RbOF0gPSB7fTtcbitcbitcdHNrZWwgPSBzdHJlYW1fX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInN0cmVhbV9fb3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9zeXNjYWxsKTtcbitcdHJldCA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocHJvZ19mZCwgXHUwMDI2b3B0cyk7XG4rXHRBU1NFUlRfT0socmV0LCBcInJldFwiKTtcbitcdEFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXCJyZXR2YWxcIik7XG4rXG4rXHRwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7XG4rXHRwYWdlID0gbW1hcChOVUxMLCBwYWdlX3NpemUgKiAyLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuK1x0XHQgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XG4rXHRpZiAoIUFTU0VSVF9ORVEocGFnZSwgTUFQX0ZBSUxFRCwgXCJtbWFwXCIpKSB7XG4rXHRcdHN0cmVhbV9fZGVzdHJveShza2VsKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0LyogTGVhdmUgb25seSB0aGUgZmlyc3QgcGFnZSBtYXBwZWQgc28gYSBzdHJhZGRsaW5nIGNvcHkgZmF1bHRzLiAqL1xuK1x0QVNTRVJUX09LKG11bm1hcChwYWdlICsgcGFnZV9zaXplLCBwYWdlX3NpemUpLCBcIm11bm1hcCBzZWNvbmQgcGFnZVwiKTtcbitcbitcdGJ1ZiA9IHBhZ2UgKyBwYWdlX3NpemUgLSAxO1xuK1x0cmV0ID0gYnBmX3Byb2dfc3RyZWFtX3JlYWQocHJvZ19mZCwgQlBGX1NUUkVBTV9TVERPVVQsIGJ1ZiwgMywgTlVMTCk7XG4rXHRBU1NFUlRfRVEocmV0LCAxLCBcInBhcnRpYWwgYnl0ZXNcIik7XG4rXHRBU1NFUlRfRVEoYnVmWzBdLCAnZicsIFwiZmlyc3QgYnl0ZVwiKTtcbitcbitcdHJldCA9IGJwZl9wcm9nX3N0cmVhbV9yZWFkKHByb2dfZmQsIEJQRl9TVFJFQU1fU1RET1VULCByZXN0LCBzaXplb2YocmVzdCksIE5VTEwpO1xuK1x0QVNTRVJUX0VRKHJldCwgMiwgXCJyZW1haW5pbmcgYnl0ZXNcIik7XG4rXHRBU1NFUlRfT0sobWVtY21wKHJlc3QsIFwib29cIiwgMiksIFwicmVtYWluaW5nIGRhdGFcIik7XG4rXG4rXHRtdW5tYXAocGFnZSwgcGFnZV9zaXplKTtcbitcdHN0cmVhbV9fZGVzdHJveShza2VsKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGVzdF9hZGRyZXNzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgdW5zaWduZWQgbG9uZyAqZmF1bHRfYWRkcl9wKVxuIHtcbiBcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbmluZGV4IDZmOTk5YmE5NTFhM2MuLjliOTdmNWUwMWI4M2EgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xuQEAgLTM2LDcgKzM2LDEyIEBAIHN0cnVjdCB7XG4gfSBhcnJheSBTRUMoXCIubWFwc1wiKTtcbiBcbiAjZGVmaW5lIEVOT1NQQyAyOFxuKyNkZWZpbmUgRTJCSUcgN1xuICNkZWZpbmUgX1NUUiBcInh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eFwiXG4rI2RlZmluZSBfWDY0IFwieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eFwiXG4rLyogMTAyNCBieXRlczogdHJ1bmNhdGVkIGJ5IGJzdHJfcHJpbnRmLCBtdXN0IHJldHVybiAtRTJCSUcuICovXG4rI2RlZmluZSBfQklHX1NUUiAoX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IFxcXG4rXHRcdCAgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0KVxuIFxuIGludCBzaXplO1xuIHU2NCBmYXVsdF9hZGRyO1xuQEAgLTExNyw2ICsxMjIsMTkgQEAgaW50IHN0cmVhbV9zeXNjYWxsKHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4raW50IHN0cmVhbV9vdmVyc2l6ZSh2b2lkICpjdHgpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGJwZl9zdHJlYW1fcHJpbnRrKEJQRl9TVERPVVQsIF9CSUdfU1RSKTtcbitcdGlmIChyZXQgIT0gLUUyQklHKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGJwZl9zdHJlYW1fcHJpbnRrKEJQRl9TVERPVVQsIFwiZm9vXCIpO1xuK31cbitcbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuIF9fYXJjaF9hcm02NFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDM6NTEuNjg5NDk0MjAyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAzMzA5Nzk2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBTdHJlYW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCdzIGNsZWFybHkgZm9jdXNlZCBvbiByZWZpbmluZyB0aGUgQlBGIHN0cmVhbSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGNoYW5nZXMgYXJlIGNvbmNlbnRyYXRlZCBpbiBga2VybmVsL2JwZi9zdHJlYW0uY2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhhdCBmaWxlIGV2ZW4gZXhpc3RzIGluIHRoZSBtYWlubGluZSBrZXJuZWw7IGEgcXVpY2sgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIG9yIGBkZWZhdWx0X2FwaTpjb2Rlc2VhcmNoLWRpci1pbmRleGAgc2VhcmNoIHNob3VsZCBjb25maXJtIHRoYXQuIEZyb20gdGhlIGRlc2NyaXB0aW9uLCBpdCBzZWVtcyBsaWtlIHdlJ3JlIGFkZHJlc3Npbmcgc29tZSBzdWJ0bGUgaXNzdWVzLCBtb3N0bHkgcmVsYXRlZCB0byBlZGdlIGNhc2VzIGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIHN0cmVhbSBmdW5jdGlvbmFsaXR5LlxuXG5TcGVjaWZpY2FsbHksIHRoZSBwYXRjaDpcblxuKiAgICoqVGlnaHRlbnMgdXAgYWxsb2NhdGlvbiB2YWxpZGF0aW9uOioqIE1vZGlmeWluZyBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYCB0byByZWplY3QgYWxsb2NhdGlvbnMgd2hlcmUgdGhlIHJlcXVlc3RlZCBsZW5ndGggKGBsZW5gKSAqZXF1YWxzKiB0aGUgbWF4aW11bSBsZW5ndGggKGBtYXhfbGVuYCkuIFRoYXQncyBhIGdvb2QgcHJldmVudGF0aXZlIG1lYXN1cmU7IHRoZSBvcmlnaW5hbCBjaGVjayBiZWluZyBqdXN0IGEgZ3JlYXRlci10aGFuIGNoZWNrIChgXHUwMDNlYCkgbWlnaHQgaGF2ZSBhbGxvd2VkIGZvciBzdWJ0bGUgb3ZlcmZsb3dzIG9yIGJvdW5kYXJ5IGNvbmRpdGlvbiBpc3N1ZXMuXG5cbiogICAqKkltcHJvdmVzIHJlc291cmNlIG1hbmFnZW1lbnQgb24gZmFpbHVyZToqKiBUaGUgYGJwZl9zdHJlYW1fcHVzaF9zdHJgIGNoYW5nZXMgc2VlbSBnZWFyZWQgdG93YXJkIHJlbGVhc2luZyBhbGxvY2F0ZWQgY2FwYWNpdHkgaWYgdGhlIHVuZGVybHlpbmcgcHVzaCBvcGVyYXRpb24gKGBfX2JwZl9zdHJlYW1fcHVzaF9zdHJgKSBmYWlscy4gVGhpcyBpcyBjcml0aWNhbCBmb3IgcHJldmVudGluZyBtZW1vcnkgbGVha3MgYW5kIHJlc291cmNlIGV4aGF1c3Rpb24gaW4gdGhlIGZhY2Ugb2YgZXJyb3JzLlxuXG4qICAgKipIYW5kbGVzIHBhcnRpYWwgcmVhZCBmYWlsdXJlczoqKiBDb3JyZWN0aW5nIGBicGZfc3RyZWFtX3JlYWRgIHRvIGNvcGUgd2l0aCBzY2VuYXJpb3Mgd2hlcmUgYGNvcHlfdG9fdXNlcmAgbWlnaHQgb25seSB0cmFuc2ZlciBwYXJ0IG9mIHRoZSByZXF1ZXN0ZWQgZGF0YS4gSGFuZGxpbmcgcGFydGlhbCByZWFkcyBpcyBhIGNvbW1vbiB2dWxuZXJhYmlsaXR5LCBhbmQgdGhpcyBzaG91bGQgdGlnaHRlbiB1cCB0aGUgY29kZS5cblxuKiAgICoqU3RyZW5ndGhlbnMgbGFyZ2Ugc3RyaW5nIGhhbmRsaW5nOioqIGBicGZfc3RyZWFtX3ZwcmludGtgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIHJlamVjdCB2ZXJ5IGxhcmdlIHN0cmluZ3MgKHRob3NlIGxhcmdlciB0aGFuIG9yIGVxdWFsIHRvIGBNQVhfQlBSSU5URl9CVUZgKSByZXR1cm5pbmcgYW4gYEUyQklHYCBlcnJvciwgYW5kIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgaXMgc3dpdGNoaW5nIHRvIGB2c2NucHJpbnRmYCwgYm90aCBvZiB0aGVzZSBpbXByb3ZlbWVudHMgcG9pbnQgdG8gaW5jcmVhc2VkIHJvYnVzdG5lc3MgYW5kIHByZXZlbnRpbmcgb3ZlcmZsb3dzLiBVc2luZyBgdnNjbnByaW50ZmAgaW5zdGVhZCBvZiBgdnNucHJpbnRmYCBpcyBhIHNtYXJ0IGNob2ljZSBmb3Igc2FmZXIgYW5kIG1vcmUgcm9idXN0IHN0cmluZyBmb3JtYXR0aW5nLiBBbHNvLCBvbmx5IGluY3JlbWVudGluZyB0aGUgbGVuZ3RoIGNvdW50ZXIgd2hlbiBgX19icGZfc3RyZWFtX3B1c2hfc3RyYCBzdWNjZWVkcyBpcyBhIHNlbnNpYmxlIGNoYW5nZSB0aGF0IHByZXZlbnRzIGxlbmd0aCBpbmNvbnNpc3RlbmNpZXMuXG5cblRoZSBhZGRpdGlvbiBvZiB0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jYCBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgcGFydCBvZiB0aGUgcGFja2FnZS4gSXQgc2hvd3MgdGhhdCB0aGVzZSBpc3N1ZXMgYXJlIG5vdyBjb3ZlcmVkIGFuZCB0aGF0IHRoZSBrZXJuZWwgY2FuIG9wZXJhdGUgd2l0aGluIHNhZmV0eSBtYXJnaW5zLlxuXG5PdmVyYWxsLCB0aGVzZSBsb29rIGxpa2Ugd2VsbC1jb25zaWRlcmVkIGNoYW5nZXMgdGhhdCBpbXByb3ZlIHJvYnVzdG5lc3MgYW5kIHByZXZlbnQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB3aXRoaW4gdGhlIEJQRiBzdHJlYW0gaW1wbGVtZW50YXRpb24uIEknbGwgaGF2ZSB0byBkaXZlIGludG8gdGhlIGNvZGUgaXRzZWxmIHRvIHZlcmlmeSB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIGFuZCB0aGUgdGVzdCBjb3ZlcmFnZSwgYnV0IG9uIHRoZSBzdXJmYWNlLCB0aGlzIHBhdGNoIHNlZW1zIGxpa2UgYSBwb3NpdGl2ZSBzdGVwIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NzAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0Mzo1OC43MjI1OTU2NThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYXJlbmEuY1wiLFxuICAgIFwiYXJyYXltYXAuY1wiLFxuICAgIFwiYmxvb21fZmlsdGVyLmNcIixcbiAgICBcImJwZl9jZ3JwX3N0b3JhZ2UuY1wiLFxuICAgIFwiYnBmX2lub2RlX3N0b3JhZ2UuY1wiLFxuICAgIFwiYnBmX2luc25fYXJyYXkuY1wiLFxuICAgIFwiYnBmX2l0ZXIuY1wiLFxuICAgIFwiYnBmX2xvY2FsX3N0b3JhZ2UuY1wiLFxuICAgIFwiYnBmX2xydV9saXN0LmNcIixcbiAgICBcImJwZl9scnVfbGlzdC5oXCIsXG4gICAgXCJicGZfbHNtLmNcIixcbiAgICBcImJwZl9sc21fcHJvdG8uY1wiLFxuICAgIFwiYnBmX3N0cnVjdF9vcHMuY1wiLFxuICAgIFwiYnBmX3Rhc2tfc3RvcmFnZS5jXCIsXG4gICAgXCJidGYuY1wiLFxuICAgIFwiYnRmX2l0ZXIuY1wiLFxuICAgIFwiYnRmX3JlbG9jYXRlLmNcIixcbiAgICBcImNncm91cC5jXCIsXG4gICAgXCJjZ3JvdXBfaXRlci5jXCIsXG4gICAgXCJjb3JlLmNcIixcbiAgICBcImNwdW1hcC5jXCIsXG4gICAgXCJjcHVtYXNrLmNcIixcbiAgICBcImNyeXB0by5jXCIsXG4gICAgXCJkZXZtYXAuY1wiLFxuICAgIFwiZGlzYXNtLmNcIixcbiAgICBcImRpc2FzbS5oXCIsXG4gICAgXCJkaXNwYXRjaGVyLmNcIixcbiAgICBcImRtYWJ1Zl9pdGVyLmNcIixcbiAgICBcImhhc2h0YWIuY1wiLFxuICAgIFwiaGVscGVycy5jXCIsXG4gICAgXCJpbm9kZS5jXCIsXG4gICAgXCJrbWVtX2NhY2hlX2l0ZXIuY1wiLFxuICAgIFwibGlua19pdGVyLmNcIixcbiAgICBcImxpdmVuZXNzLmNcIixcbiAgICBcImxvY2FsX3N0b3JhZ2UuY1wiLFxuICAgIFwibG9nLmNcIixcbiAgICBcImxwbV90cmllLmNcIixcbiAgICBcIm1hcF9pbl9tYXAuY1wiLFxuICAgIFwibWFwX2luX21hcC5oXCIsXG4gICAgXCJtYXBfaXRlci5jXCIsXG4gICAgXCJtZW1hbGxvYy5jXCIsXG4gICAgXCJtbWFwX3VubG9ja193b3JrLmhcIixcbiAgICBcIm1wcm9nLmNcIixcbiAgICBcIm5ldF9uYW1lc3BhY2UuY1wiLFxuICAgIFwib2ZmbG9hZC5jXCIsXG4gICAgXCJwZXJjcHVfZnJlZWxpc3QuY1wiLFxuICAgIFwicGVyY3B1X2ZyZWVsaXN0LmhcIixcbiAgICBcInByb2dfaXRlci5jXCIsXG4gICAgXCJxdWV1ZV9zdGFja19tYXBzLmNcIixcbiAgICBcInJhbmdlX3RyZWUuY1wiLFxuICAgIFwicmFuZ2VfdHJlZS5oXCIsXG4gICAgXCJyZWxvX2NvcmUuY1wiLFxuICAgIFwicmV1c2Vwb3J0X2FycmF5LmNcIixcbiAgICBcInJpbmdidWYuY1wiLFxuICAgIFwicnFzcGlubG9jay5jXCIsXG4gICAgXCJycXNwaW5sb2NrLmhcIixcbiAgICBcInN0YWNrbWFwLmNcIixcbiAgICBcInN0cmVhbS5jXCIsXG4gICAgXCJzeXNjYWxsLmNcIixcbiAgICBcInN5c2ZzX2J0Zi5jXCIsXG4gICAgXCJ0YXNrX2l0ZXIuY1wiLFxuICAgIFwidGN4LmNcIixcbiAgICBcInRudW0uY1wiLFxuICAgIFwidG9rZW4uY1wiLFxuICAgIFwidHJhbXBvbGluZS5jXCIsXG4gICAgXCJ2ZXJpZmllci5jXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IFtcbiAgICBcInByZWxvYWRcIlxuICBdXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0Mzo1OC43MjI3MTIxNThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODY0MjgyODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQlBGIFN0cmVhbSBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgQlBGIHN0cmVhbSBmdW5jdGlvbmFsaXR5LiBGaXJzdCB0aGluZ3MgZmlyc3QsIGdvb2QsIGBzdHJlYW0uY2AgaXMgc2l0dGluZyByaWdodCB3aGVyZSBJJ2QgZXhwZWN0IGl0LCB0dWNrZWQgYXdheSBpbiBga2VybmVsL2JwZi9gLiBOb3cgdGhlIHJlYWwgd29yayBiZWdpbnMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBmdW5jdGlvbnMgaGVyZTogYGJwZl9zdHJlYW1fcmVhZGAsIGBicGZfc3RyZWFtX3ZwcmludGtgLCBhbmQgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYC4gVGhvc2UgbmFtZXMgdGhlbXNlbHZlcyBnaXZlIG1lIHNvbWUgY2x1ZXMsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBleGFjdCByb2xlcyBhbmQgaW50ZXJhY3Rpb25zLlxuXG5NeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHZlcmlmeSB0aGF0IHRoaXMgcGFydGljdWxhciBzdHJlYW0gY29kZSBpcyBhY3R1YWxseSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgYnVpbGQuIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGVuYWJsZSBpdC4gSSBkb24ndCB3YW50IHRvIHdhc3RlIHRpbWUgY2hhc2luZyBkb3duIGNvZGUgdGhhdCdzIGJlZW4gY29tcGlsZWQgb3V0LiBLbm93aW5nIHRoZSBjb25maWcgb3B0aW9ucyB3aWxsIGFsc28gaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgdGhpcyBmdW5jdGlvbmFsaXR5IGhhcyB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIGVjb3N5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM2MCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NDowMy41ODY5OTgyNTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU4Mzk3OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RyZWFtXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfQlBGX0pJVCkgKz0gdHJhbXBvbGluZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NDowMy42NDI4NDM1NjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mjg2NTkyMTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgU3RyZWFtIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGNvbXBpbGVkIHdpdGggYENPTkZJR19CUEZfU1lTQ0FMTGAsIHdoaWNoIGlzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBjaGFuZ2VzIGFuZCBzZWUgd2hhdCdzIGJlZW4gbW9kaWZpZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiByZWFjaGFiaWxpdHkgb2YgdGhvc2UgY2hhbmdlcy5cblxuTG9va2luZyBhdCB0aGUgbGlzdCwgd2UgaGF2ZSBhIGZldyBmdW5jdGlvbnMgdGhhdCBzZWVtIHRvIGJlIGtleS4gSSBzZWU6XG5cbiogICBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYCwgYGJwZl9zdHJlYW1fY29uc3VtZV9jYXBhY2l0eWAsIGBicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHlgLCBgYnBmX3N0cmVhbV9wdXNoX3N0cmA6IFRoZXNlIGFyZSBhbGwgc3RhdGljLCBzbyB0aGV5J3JlIGludGVybmFsbHkgc2NvcGVkIHdpdGhpbiB0aGUgQlBGIHN0cmVhbSBpbXBsZW1lbnRhdGlvbi4gVGhpcyBtYWtlcyBtZSBjdXJpb3VzIGFib3V0IGhvdyB0aGVzZSBhcmUgYmVpbmcgdXNlZCwgd2hhdCB0aGUgb3ZlcmFsbCBkZXNpZ24gcGF0dGVybiBpcy5cbiogICBgYnBmX3N0cmVhbV92cHJpbnRrYDogVGhpcyBpcyBpbnRlcmVzdGluZywgaXQncyBhIGtmdW5jLiBUaGUgYF9fYnBmX2tmdW5jYCBwcmVmaXggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgZm9yIEJQRiB1c2UsIGxpa2VseSBmb3IgbG9nZ2luZyBvciBkZWJ1Z2dpbmcgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gVGhlIGBpbnRgIHJldHVybiB0eXBlIGltcGxpZXMgaXQgbWF5IHJldHVybiBzdGF0dXMgaW5mb3JtYXRpb24uXG4qICAgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYDogQW5vdGhlciBgcHJpbnRrYCBmdW5jdGlvbiwgYnV0IGdsb2JhbC4gVGhpcyBtYWtlcyBtZSB3b25kZXIgYWJvdXQgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhpcyBhbmQgdGhlIGtmdW5jIHZlcnNpb24uIEl0IHdvdWxkIGJlIGltcG9ydGFudCB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIHNoYXJlZCBmdW5jdGlvbmFsaXR5IG9yIGhhcyBzcGVjaWZpYyB1c2FnZXMuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogd2hlcmUgaXMgYGJwZl9zdHJlYW1fcmVhZGAgdXNlZD8gRmluZGluZyBpdHMgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIEJQRiBzdHJlYW1zIGFyZSBiZWluZyBjb25zdW1lZCBhbmQgdXRpbGl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDQ6MDkuOTI5NDM4MzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI4MDk2OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3N0cmVhbV9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RyZWFtLmM9MTQ5PXN0YXRpYyBib29sIGJwZl9zdHJlYW1fY29uc3VtZV9lbGVtKHN0cnVjdCBicGZfc3RyZWFtX2VsZW0gKmVsZW0sIGludCAqbGVuKVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0xNTktXFxua2VybmVsL2JwZi9zdHJlYW0uYzoxNjA6c3RhdGljIGludCBicGZfc3RyZWFtX3JlYWQoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgdm9pZCBfX3VzZXIgKmJ1ZiwgaW50IGxlbilcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTE2MS17XFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTIwNj1pbnQgYnBmX3Byb2dfc3RyZWFtX3JlYWQoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBlbnVtIGJwZl9zdHJlYW1faWQgc3RyZWFtX2lkLCB2b2lkIF9fdXNlciAqYnVmLCBpbnQgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0yMTItXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxua2VybmVsL2JwZi9zdHJlYW0uYzoyMTM6XFx0cmV0dXJuIGJwZl9zdHJlYW1fcmVhZChzdHJlYW0sIGJ1ZiwgbGVuKTtcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTIxNC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ0OjA5Ljk4MjI1NzE3NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NzgwMDA1NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYGJwZl9wcm9nX3N0cmVhbV9yZWFkYCBVc2FnZSoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBgYnBmX3Byb2dfc3RyZWFtX3JlYWRgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBpdCdzIHRoZSBnYXRld2F5LCBjYWxsaW5nIGBicGZfc3RyZWFtX3JlYWRgIHVuZGVyIHRoZSBob29kLiBTbywgbXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiAqd2hlcmUqIGlzIGBicGZfcHJvZ19zdHJlYW1fcmVhZGAgaXRzZWxmIGJlaW5nIGNhbGxlZD8gS25vd2luZyBpdHMgZW50cnkgcG9pbnRzIGlzIGNydWNpYWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBjb250ZXh0cyBpbiB3aGljaCB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQuIElzIGl0IGZyb20gdXNlciBzcGFjZSwga2VybmVsIHNwYWNlLCBvciBib3RoPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIEJQRiBwcm9ncmFtIHR5cGVzIHRoYXQgYXJlIHV0aWxpemluZyB0aGlzPyBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGxlcnMgdG8gZ2FpbiBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIGltcGFjdCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBkYXRhIGZsb3cuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MzEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NDoxMi45NjAyNjEwNjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDM4MTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wcm9nX3N0cmVhbV9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RyZWFtLmM9MTYwPXN0YXRpYyBpbnQgYnBmX3N0cmVhbV9yZWFkKHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIHZvaWQgX191c2VyICpidWYsIGludCBsZW4pXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTIwNS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjIwNjppbnQgYnBmX3Byb2dfc3RyZWFtX3JlYWQoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBlbnVtIGJwZl9zdHJlYW1faWQgc3RyZWFtX2lkLCB2b2lkIF9fdXNlciAqYnVmLCBpbnQgbGVuKVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtMjA3LXtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYxMjY9c3RhdGljIGludCBwcm9nX3N0cmVhbV9yZWFkKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjEzOS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MTQwOlxcdHJldCA9IGJwZl9wcm9nX3N0cmVhbV9yZWFkKHByb2csIGF0dHItXFx1MDAzZXByb2dfc3RyZWFtX3JlYWQuc3RyZWFtX2lkLCBidWYsIGxlbik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjE0MS1cXHRicGZfcHJvZ19wdXQocHJvZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ0OjEzLjAxMDMxMjU3NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDk0MDMyNjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBhIEJQRiBTeXN0ZW0gQ2FsbCoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoaXMgYmFjazsgdGhpcyBjYWxsIG9yaWdpbmF0ZXMgZnJvbSBgcHJvZ19zdHJlYW1fcmVhZGAgd2l0aGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIENvbnNpZGVyaW5nIHRoZSBjb250ZXh0LCBpdCdzIHByZXR0eSBzYWZlIHRvIGFzc3VtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gYSBCUEYgc3lzdGVtIGNhbGwgY29tbWFuZC4gTXkgZm9jdXMgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIHN0cmVhbS1yZWxhdGVkIHByaW50IGZ1bmN0aW9ucywgbmFtZWx5IGBicGZfc3RyZWFtX3ZwcmludGtgIGFuZCBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aG9zZSBmdW5jdGlvbnMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoaXMgQlBGIGludGVyYWN0aW9uLiBMZXQncyBkaWcgaW50byB0aG9zZSBhbmQgc2VlIHdoYXQgaW5mb3JtYXRpb24gdGhleSBjYW4gcHJvdmlkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA0MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ0OjE2LjEwNDM0ODc5NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4MDk2ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3N0cmVhbV92cHJpbnRrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jPTQ2Nzk9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jZ3JvdXBfcmVhZF94YXR0ciwgS0ZfUkNVKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2ODAtI2VuZGlmXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY4MTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmVhbV92cHJpbnRrLCBLRl9JTVBMSUNJVF9BUkdTKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2ODItQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJlYW1fcHJpbnRfc3RhY2ssIEtGX0lNUExJQ0lUX0FSR1MpXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTIxNj1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTIyMS0gKi9cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjIyMjpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b2lkICphcmdzLFxcbmtlcm5lbC9icGYvc3RyZWFtLmMtMjIzLVxcdFxcdFxcdFxcdCAgIHUzMiBsZW5fX3N6LCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI0NzY9ZW51bSBzcGVjaWFsX2tmdW5jX3R5cGUge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNTMxLVxcdEtGX2JwZl9zZXNzaW9uX2lzX3JldHVybixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI1MzI6XFx0S0ZfYnBmX3N0cmVhbV92cHJpbnRrLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjUzMy1cXHRLRl9icGZfc3RyZWFtX3ByaW50X3N0YWNrLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyNjExPUJURl9JRChmdW5jLCBicGZfc2Vzc2lvbl9pc19yZXR1cm4pXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNjEyOkJURl9JRChmdW5jLCBicGZfc3RyZWFtX3ZwcmludGspXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNjEzLUJURl9JRChmdW5jLCBicGZfc3RyZWFtX3ByaW50X3N0YWNrKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzMDYxPXN0YXRpYyBib29sIGlzX2JwZl9zdHJlYW1fa2Z1bmModTMyIGJ0Zl9pZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMwNjIte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzA2MzpcXHRyZXR1cm4gYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc3RyZWFtX3ZwcmludGtdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMDY0LVxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zdHJlYW1fcHJpbnRfc3RhY2tdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NDoxNi4xNTYxNjQ0OTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczNDM5NjQyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBCUEYgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIFN0cmVhbSBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuIEknbSB0aGlua2luZyBhYm91dCBgYnBmX3N0cmVhbV92cHJpbnRrYC4gVGhhdCdzIGEga2Z1bmMsIHJpZ2h0PyBBbmQgaXQncyBvbmUgdGhhdCBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5IGZyb20gd2l0aGluIGEgQlBGIHByb2dyYW0uIFRoYXQncyBnb29kIHRvIGtlZXAgaW4gbWluZCwgaGVscGZ1bCBmb3Igc3RyZWFtaW5nIG91dCBvZiBCUEYgcHJvZ3JhbXMuXG5cbk5vdywgbXkgbWluZCB3YW5kZXJzIGEgYml0Li4ud2hhdCBhYm91dCB0aGUgb3RoZXIgb25lPyBJIHdvbmRlciwgd2hhdCdzIHRoaXMgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYD8gRG9lcyB0aGF0IGhhdmUgc2ltaWxhciBjYXBhYmlsaXRpZXM/IEkgc2hvdWxkIGxvb2sgaW50byB0aGlzIG1vcmUsIHNlZSBob3cgaXQgZml0cyBpbiB0byB0aGUgd2lkZXIgcGljdHVyZSBvZiBCUEYgc3RyZWFtIGZ1bmN0aW9uYWxpdHkuIE1heWJlIGl0IGhhcyBzaW1pbGFyIGZlYXR1cmVzLCBvciBvcGVyYXRlcyBpbiBhIGRpZmZlcmVudCB3YXkuIFRoYXQncyBhIGdvb2QgbmV4dCBsaW5lIG9mIGlucXVpcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4OTYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NDoxOS44OTA1NjU1OTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTcwNDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RyZWFtLmM9MzE0PXZvaWQgYnBmX3N0cmVhbV9zdGFnZV9mcmVlKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcylcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzIxLVxcbmtlcm5lbC9icGYvc3RyZWFtLmM6MzIyOmludCBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhzdHJ1Y3QgYnBmX3N0cmVhbV9zdGFnZSAqc3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzIzLXtcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmM9Mzc1PXN0YXRpYyBib29sIGR1bXBfc3RhY2tfY2Iodm9pZCAqY29va2llLCB1NjQgaXAsIHU2NCBzcCwgdTY0IGJwKVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0zODgtXFx0XFx0XFx0Z290byBlbmQ7XFxua2VybmVsL2JwZi9zdHJlYW0uYzozODk6XFx0XFx0Y3R4cC1cXHUwMDNlZXJyID0gYnBmX3N0cmVhbV9zdGFnZV9wcmludGsoY3R4cC1cXHUwMDNlc3MsIFxcXCIlcFNcXFxcbiAgJXMgQCAlczolZFxcXFxuXFxcIixcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTM5MC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgKHZvaWQgKikobG9uZylpcCwgbGluZSwgZmlsZSwgbnVtKTtcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzkzLWVuZDpcXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjM5NDpcXHRjdHhwLVxcdTAwM2VlcnIgPSBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhjdHhwLVxcdTAwM2VzcywgXFxcIiVwU1xcXFxuXFxcIiwgKHZvaWQgKikobG9uZylpcCk7XFxua2VybmVsL2JwZi9zdHJlYW0uYy0zOTUtXFx0cmV0dXJuICFjdHhwLVxcdTAwM2VlcnI7XFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTM5OD1pbnQgYnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcylcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtNDAyLVxcbmtlcm5lbC9icGYvc3RyZWFtLmM6NDAzOlxcdHJldCA9IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHNzLCBcXFwiQ1BVOiAlZCBVSUQ6ICVkIFBJRDogJWQgQ29tbTogJXNcXFxcblxcXCIsXFxua2VybmVsL2JwZi9zdHJlYW0uYy00MDQtXFx0XFx0XFx0XFx0ICAgICAgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwgX19rdWlkX3ZhbChjdXJyZW50X3JlYWxfY3JlZCgpLVxcdTAwM2VldWlkKSxcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtNDA3LVxcdFxcdHJldHVybiByZXQ7XFxua2VybmVsL2JwZi9zdHJlYW0uYzo0MDg6XFx0cmV0ID0gYnBmX3N0cmVhbV9zdGFnZV9wcmludGsoc3MsIFxcXCJDYWxsIHRyYWNlOlxcXFxuXFxcIik7XFxua2VybmVsL2JwZi9zdHJlYW0uYy00MDktXFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtNDEzLVxcdFxcdHJldHVybiBjdHguZXJyO1xcbmtlcm5lbC9icGYvc3RyZWFtLmM6NDE0OlxcdHJldHVybiBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhzcywgXFxcIlxcXFxuXFxcIik7XFxua2VybmVsL2JwZi9zdHJlYW0uYy00MTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NDoxOS45NDI3NDMyNDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0NjA0NzUwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbCBDaGFpbiBvZiBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgKipcblxuQWxyaWdodCwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGUgYGJwZl9zdHJlYW1fc3RhZ2VgIGNvZGUsIGFuZCBJJ3ZlIGhpdCBhIGxpdHRsZSBzbmFnLiBJIHNlZSBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgIGlzIGJlaW5nIGludm9rZWQgYnkgYGJwZl9zdHJlYW1fc3RhZ2VfZHVtcF9zdGFja2AuIFRoYXQncyBub3QgZW50aXJlbHkgdW5leHBlY3RlZCwgZ2l2ZW4gdGhlIG5hbWUuIFRoZSBgcHJpbnRrYCBzdWdnZXN0cyBsb2dnaW5nIG9mIHNvbWUga2luZCwgbGlrZWx5IHJlbGF0ZWQgdG8gc3RhY2sgZHVtcHMsIGFzIHRoZSBzZWNvbmQgZnVuY3Rpb24gbmFtZSBpbmRpY2F0ZXMuIEJ1dCBub3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlICoqY2FsbCBjaGFpbioqOiB3aGVyZSBpcyBgYnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrYCAqaXRzZWxmKiBjYWxsZWQgZnJvbT8gVW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgZmxvdyBpcyBjcnVjaWFsIGZvciBkaWFnbm9zaW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRhdGEgcGF0aCwgYW5kIGhvdyB0aGlzIGxvZ2dpbmcgZnVuY3Rpb24gaXMgYWN0dWFsbHkgaW52b2tlZCB3aXRoaW4gdGhlIEJQRiBzdHJlYW0gcHJvY2Vzc2luZy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgYnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrYCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGUgc3RhY2sgZHVtcCwgYW5kIHRoZXJlZm9yZSwgdGhlIGxvZ2dpbmcgdGhhdCBvY2N1cnMgdmlhIHRoZSBgcHJpbnRrYC4gSSBuZWVkIHRvIGxvb2sgZm9yIGNhbGxzIHRvIGl0IGluIHRoZSBrZXJuZWwgc291cmNlLCBvciBwb3RlbnRpYWxseSBldmVuIGFuYWx5emUgdGhlIEJQRiBwcm9ncmFtcyB0aGF0IGFyZSBpbiB1c2UgaWYgdGhpcyBpc24ndCBpbW1lZGlhdGVseSBvYnZpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzcyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDQ6MjMuODg4Nzk5NzI2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjA4MjQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdHJlYW0uYz0zNzU9c3RhdGljIGJvb2wgZHVtcF9zdGFja19jYih2b2lkICpjb29raWUsIHU2NCBpcCwgdTY0IHNwLCB1NjQgYnApXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTM5Ny1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjM5ODppbnQgYnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcylcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTM5OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ0OjIzLjk0MDg5MzAwMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYzODk1MDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqVHJhY2luZyB0aGUgQ2FsbCBQYXRoIG9mIGBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2tgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGJwZl9zdHJlYW1fc3RhZ2VfZHVtcF9zdGFja2AgaXMgYmVpbmcgaW52b2tlZC4gSXQncyBhIGtleSBmdW5jdGlvbiwgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGNhbGwgc2l0ZXMgaXMgY3J1Y2lhbCBmb3IgdHJhY2luZyBleGVjdXRpb24gZmxvdyBhbmQgZGVidWdnaW5nLiBUaGUgbW9zdCBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2ggaXMgYSBnbG9iYWwgc2VhcmNoLiBMZXQncyBzZWUuLi4gYSBxdWljayBnbG9iYWwgc2VhcmNoIHNob3VsZCB1bmNvdmVyIGFsbCBpbnN0YW5jZXMgb2YgdGhhdCBmdW5jdGlvbiBuYW1lLiBUaGlzIHdpbGwgaW1tZWRpYXRlbHkgc2hvdyBtZSBhbGwgbG9jYXRpb25zIGluIHRoZSBjb2RlYmFzZSB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBpdHMgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIzOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ0OjI3LjQwNDc5MTI3NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzODI2Nzc1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9MzkwMD1pbnQgYnBmX3N0cmVhbV9zdGFnZV9jb21taXQoc3RydWN0IGJwZl9zdHJlYW1fc3RhZ2UgKnNzLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuaW5jbHVkZS9saW51eC9icGYuaC0zOTAxLVxcdFxcdFxcdCAgICBlbnVtIGJwZl9zdHJlYW1faWQgc3RyZWFtX2lkKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM5MDI6aW50IGJwZl9zdHJlYW1fc3RhZ2VfZHVtcF9zdGFjayhzdHJ1Y3QgYnBmX3N0cmVhbV9zdGFnZSAqc3MpO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtMzkwMy1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM5MDQtI2RlZmluZSBicGZfc3RyZWFtX3ByaW50ayhzcywgLi4uKSBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhcXHUwMDI2c3MsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvYnBmLmg6MzkwNTojZGVmaW5lIGJwZl9zdHJlYW1fZHVtcF9zdGFjayhzcykgYnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrKFxcdTAwMjZzcylcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM5MDYtXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTM3NT1zdGF0aWMgYm9vbCBkdW1wX3N0YWNrX2NiKHZvaWQgKmNvb2tpZSwgdTY0IGlwLCB1NjQgc3AsIHU2NCBicClcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzk3LVxcbmtlcm5lbC9icGYvc3RyZWFtLmM6Mzk4OmludCBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2soc3RydWN0IGJwZl9zdHJlYW1fc3RhZ2UgKnNzKVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzk5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDQ6MjkuMjQzMDY2ODU1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTM5NzY1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBgYnBmX3N0cmVhbV9kdW1wX3N0YWNrYCoqXG5cblJpZ2h0LCBzbyBJJ20gaW4gdGhlIHRoaWNrIG9mIHRoaXMgYW5kIEkndmUgY29tZSBhY3Jvc3MgdGhpcyBgYnBmX3N0cmVhbV9kdW1wX3N0YWNrYCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgd2hlcmUgaXMgKnRoaXMqIGNhbGxlZCBmcm9tP1wiIEl0J3MgdGhlIHN0YW5kYXJkIGZpcnN0IHF1ZXN0aW9uLCBpc24ndCBpdD8gR290dGEgdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgY2FsbCBncmFwaCwgdG8gZmlndXJlIG91dCB3aHkgdGhpcyB0aGluZyBpcyBldmVuIGJlaW5nIGludm9rZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGhlcmUuIElzIGl0IHBhcnQgb2YgdGhlIGluc3RydW1lbnRhdGlvbiBmb3IgZGVidWdnaW5nPyBJcyBpdCBjb3JlIHRvIHNvbWUgZGF0YSBwcm9jZXNzaW5nIHBhdGg/IElzIGl0IGNhbGxlZCBmcm9tIGEgYGJwZl9pdGVyYCBjb250ZXh0PyBJJ20gZ29pbmcgdG8gbmVlZCB0byB0cmFjayBkb3duIGFsbCB0aGUgcGxhY2VzIHdoZXJlIHRoaXMgdGhpbmcgaXMgdXNlZCB0byBwcm9wZXJseSBncm9rIHRoZSBmdW5jdGlvbiBhbmQgdGhlIGRhdGEgaXQgYWNjZXNzZXMuIFNvLCB3aGVyZeKAmXMgdGhlIGNhbGwgc2l0ZT8gTGV0J3MgZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzc2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDQ6MzMuMTM3MDQ2NDM1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODcwNTIyMTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJlYW1fZHVtcF9zdGFja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0zOTAyPWludCBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2soc3RydWN0IGJwZl9zdHJlYW1fc3RhZ2UgKnNzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzkwNC0jZGVmaW5lIGJwZl9zdHJlYW1fcHJpbnRrKHNzLCAuLi4pIGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKFxcdTAwMjZzcywgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9icGYuaDozOTA1OiNkZWZpbmUgYnBmX3N0cmVhbV9kdW1wX3N0YWNrKHNzKSBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2soXFx1MDAyNnNzKVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzkwNi1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz05MzI9dm9pZCBicGZfcHJvZ19yZXBvcnRfYXJlbmFfdmlvbGF0aW9uKGJvb2wgd3JpdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBmYXVsdF9pcClcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy05NTctXFx0XFx0XFx0XFx0ICB3cml0ZSA/IFxcXCJXUklURVxcXCIgOiBcXFwiUkVBRFxcXCIsIGFkZHIpO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo5NTg6XFx0XFx0YnBmX3N0cmVhbV9kdW1wX3N0YWNrKHNzKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTU5LVxcdH0pKTtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTMyMjE9c3RhdGljIG5vaW5saW5lIHZvaWQgYnBmX3Byb2dfcmVwb3J0X21heV9nb3RvX3Zpb2xhdGlvbih2b2lkKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMzIzMS1cXHRcXHRicGZfc3RyZWFtX3ByaW50ayhzcywgXFxcIkVSUk9SOiBUaW1lb3V0IGRldGVjdGVkIGZvciBtYXlfZ290byBpbnN0cnVjdGlvblxcXFxuXFxcIik7XFxua2VybmVsL2JwZi9jb3JlLmM6MzIzMjpcXHRcXHRicGZfc3RyZWFtX2R1bXBfc3RhY2soc3MpO1xcbmtlcm5lbC9icGYvY29yZS5jLTMyMzMtXFx0fSkpO1xcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM9NjcyPXN0YXRpYyB2b2lkIGJwZl9wcm9nX3JlcG9ydF9ycXNwaW5sb2NrX3Zpb2xhdGlvbihjb25zdCBjaGFyICpzdHIsIHZvaWQgKmxvY2ssIGJvb2wgaXJxc2F2ZSlcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY4Ni1cXHRcXHRcXHRicGZfc3RyZWFtX3ByaW50ayhzcywgXFxcIkhlbGQgbG9ja1slMmRdID0gMHglcHhcXFxcblxcXCIsIGksIHJxaC1cXHUwMDNlbG9ja3NbaV0pO1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjY4NzpcXHRcXHRicGZfc3RyZWFtX2R1bXBfc3RhY2soc3MpO1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY4OC1cXHR9KSk7XFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTI2MT1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV9wcmludF9zdGFjayhpbnQgc3RyZWFtX2lkLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI3Mi1cXHRicGZfc3RyZWFtX3N0YWdlKHNzLCBwcm9nLCBzdHJlYW1faWQsICh7XFxua2VybmVsL2JwZi9zdHJlYW0uYzoyNzM6XFx0XFx0YnBmX3N0cmVhbV9kdW1wX3N0YWNrKHNzKTtcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI3NC1cXHR9KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ0OjM1LjAwNzU3NjY5NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODgzNTkxOTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiBCUEYgU3RyZWFtIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYSBwYXR0ZXJuIGhlcmUgd2l0aCB0aGVzZSBgYnBmX3N0cmVhbWAgZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgaXMgdGhlIGJhY2tib25lLCBiZWluZyBjYWxsZWQgaW5kaXJlY3RseSB0aHJvdWdoIGBicGZfc3RyZWFtX3ByaW50a2Agd2l0aGluIHRoZSBrZXJuZWwgZmlsZXMgYGFyZW5hLmNgLCBgY29yZS5jYCwgYW5kIGBycXNwaW5sb2NrLmNgLiBUaGVuLCB0aGVyZSdzIGBicGZfc3RyZWFtX3ZwcmludGtgLCB3aGljaCwgaW1wb3J0YW50bHksIGlzIGV4cG9zZWQgYXMgYSBrZnVuYywgYSBrZXkgZGV0YWlsIGZvciBCUEYgcHJvZ3JhbSBpbnRlcmFjdGlvbi4gRmluYWxseSwgYGJwZl9zdHJlYW1fcmVhZGAgaXMgY2xlYXJseSB0aWVkIHRvIHRoZSBgQlBGX1BST0dfU1RSRUFNX1JFQURgIGNvbW1hbmQgb2YgdGhlIGBicGZgIHN5c2NhbGwsIHdoaWNoIEkgYXNzdW1lIGhhbmRsZXMgcmVhZGluZyBkYXRhIGZyb20gdGhlIHN0cmVhbS4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gYHByb2dfc3RyZWFtX3JlYWRgIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgcmVhZGluZyB0aGUgc3RyZWFtIGRhdGEgd2lsbCBiZS4gVGhpcyB3aWxsIHNob3cgaG93IHdlIGNvbnRyb2wgdGhlIHVzZSBvZiB0aGUgZGF0YSBpbiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY5MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NDozOS44OTExNzE4MjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzUxMjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2dfc3RyZWFtX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9NjExMj1zdGF0aWMgaW50IHRva2VuX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYxMjMtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjEyNDojZGVmaW5lIEJQRl9QUk9HX1NUUkVBTV9SRUFEX0JZX0ZEX0xBU1RfRklFTEQgcHJvZ19zdHJlYW1fcmVhZC5wcm9nX2ZkXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjEyNS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MTI2OnN0YXRpYyBpbnQgcHJvZ19zdHJlYW1fcmVhZCh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MTI3LXtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MTI4OlxcdGNoYXIgX191c2VyICpidWYgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cXHUwMDNlcHJvZ19zdHJlYW1fcmVhZC5zdHJlYW1fYnVmKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MTI5OlxcdHUzMiBsZW4gPSBhdHRyLVxcdTAwM2Vwcm9nX3N0cmVhbV9yZWFkLnN0cmVhbV9idWZfbGVuO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYxMzAtXFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjEzNS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MTM2OlxcdHByb2cgPSBicGZfcHJvZ19nZXQoYXR0ci1cXHUwMDNlcHJvZ19zdHJlYW1fcmVhZC5wcm9nX2ZkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MTM3LVxcdGlmIChJU19FUlIocHJvZykpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MTM5LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYxNDA6XFx0cmV0ID0gYnBmX3Byb2dfc3RyZWFtX3JlYWQocHJvZywgYXR0ci1cXHUwMDNlcHJvZ19zdHJlYW1fcmVhZC5zdHJlYW1faWQsIGJ1ZiwgbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MTQxLVxcdGJwZl9wcm9nX3B1dChwcm9nKTtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYxODk9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMyNS1cXHRjYXNlIEJQRl9QUk9HX1NUUkVBTV9SRUFEX0JZX0ZEOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzMjY6XFx0XFx0ZXJyID0gcHJvZ19zdHJlYW1fcmVhZChcXHUwMDI2YXR0cik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMyNy1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDQ6MzkuOTQ0OTI4ODE1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NzE0NzYyNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgU3RyZWFtIFN1YnN5c3RlbSBDaGFuZ2VzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBCUEYgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gdGhlIEJQRiBzdHJlYW0gc3Vic3lzdGVtIGFuZCB0aGUgYEJQRl9QUk9HX1NUUkVBTV9SRUFEX0JZX0ZEYCBjb21tYW5kLCB3aGljaCBpcyBhIGJwZiBzeXNjYWxsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCdzIGJlZW4gY2hhbmdlZCwgd2h5LCBhbmQgYXJlIHRoZXNlIGNoYW5nZXMgZnV6emFibGUuXG5cbkZpcnN0LCB0aGVyZSdzIHRoaXMgZml4IHRvIGBicGZfc3RyZWFtX3JlYWRgLiBUaGUgb2xkIGNvZGUgaGFkIGEgYnVnIHdoZXJlIHBhcnRpYWwgYGNvcHlfdG9fdXNlcmAgd3JpdGVzIHdvdWxkIGxlYWQgdG8gYC1FRkFVTFRgIGV2ZW4gaWYgc29tZSBkYXRhIHRyYW5zZmVycmVkLiBUaGUgdXBkYXRlZCBjb2RlIGNvcnJlY3RseSB1cGRhdGVzIGNvbnN1bWVkIGxlbmd0aHMgYW5kIG5vdyAqb25seSogcmV0dXJucyBgLUVGQVVMVGAgaWYgYWJzb2x1dGVseSAqbm8qIGJ5dGVzIHdlcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuIEVzc2VudGlhbGx5LCBpdCBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgc2NlbmFyaW8gd2hlcmUgYSB1c2VyIHNwYWNlIGJ1ZmZlciBpc24ndCBsYXJnZSBlbm91Z2guIFRoYXQgY2hhbmdlIGludm9sdmVzIHVwZGF0aW5nIGBlbGVtLVx1MDAzZWNvbnN1bWVkX2xlbmAgYW5kIGByZW1fbGVuYCBkdXJpbmcgdGhlIGNvcHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNvcnJlY3RuZXNzIGltcHJvdmVtZW50LlxuXG5OZXh0LCBJIHNlZSBjaGFuZ2VzIHRvIGBicGZfc3RyZWFtX3ZwcmludGtgLiBUaGUga2V5IGhlcmUgaXMgcHJldmVudGluZyB0cnVuY2F0aW9uLiBQcmV2aW91c2x5LCBgYnN0cl9wcmludGZgIGNvdWxkIHdyaXRlIGEgc3RyaW5nIHRoYXQgZXhjZWVkZWQgYSBtYXhpbXVtIGJ1ZmZlciBzaXplLiBOb3csIHRoZSBjb2RlIHJldHVybnMgYC1FMkJJR2AgKHNpbWlsYXIgdG8gd2hhdCB5b3UnZCBzZWUgaW4gYHNucHJpbnRmYCBvciBgdnNucHJpbnRmYCkgaWYgdGhlIGZvcm1hdHRlZCBzdHJpbmcgd291bGQgYmUgdHJ1bmNhdGVkLCAqYmVmb3JlKiBhdHRlbXB0aW5nIHRvIHB1c2ggdGhlIHJlc3VsdC4gVGhpcyBwcmV2ZW50cyBwdXNoaW5nIGNvcnJ1cHRlZCBvciBwYXJ0aWFsIHN0cmluZ3MgaW50byB0aGUgc3RyZWFtLCBhbmQgaXQgdXNlcyBhIHN0YW5kYXJkIGVycm9yIGNvZGUgdG8gaW5kaWNhdGUgdGhhdCB0cnVuY2F0aW9uIG9jY3VycmVkLlxuXG5UaGUgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCBjaGFuZ2VzIGFyZSBhIGJpdCBzdWJ0bGVyLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgYHZzbnByaW50ZmAsIHdoaWNoIHJldHVybnMgdGhlICpsZW5ndGgqIG9mIHRoZSBzdHJpbmcgdGhhdCAqd291bGQqIGhhdmUgYmVlbiB3cml0dGVuIGlmIHRoZXJlIGhhZCBiZWVuIGVub3VnaCBzcGFjZSwgcmF0aGVyIHRoYW4gdGhlIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4gVGhpcyB3YXMgY2F1c2luZyBhbiBpbmNvcnJlY3QgbGVuZ3RoIGNhbGN1bGF0aW9uLiBUaGUgZml4IHVzZXMgYHZzY25wcmludGZgLCB3aGljaCByZXR1cm5zIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4sIGFuZCBvbmx5IHVwZGF0ZXMgdGhlIHN0cmVhbSBsZW5ndGggYHNzLVx1MDAzZWxlbmAgaWYgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgc3VjY2VlZHMuIFRoaXMgbGVhZHMgdG8gbW9yZSBhY2N1cmF0ZSBhY2NvdW50aW5nIG9mIGRhdGEgaW4gdGhlIHN0cmVhbS5cblxuVGhlbiwgdGhlcmUncyB0aGUgY2hhbmdlIHRvIGBicGZfc3RyZWFtX3B1c2hfc3RyYC4gVGhpcyBvbmUgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGNhcGFjaXR5IGxlYWsuIElmIGBfX2JwZl9zdHJlYW1fcHVzaF9zdHJgICh3aGljaCBpcyB0aGUgYWN0dWFsIGxvdyBsZXZlbCBwdXNoIHRvIHRoZSBzdHJlYW0pIGZhaWxzIOKAkyBmb3IgZXhhbXBsZSwgZHVlIHRvIGFuIG91dC1vZi1tZW1vcnkgZXJyb3Ig4oCTIHRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIGNvbnN1bWUgY2FwYWNpdHkuIFRoZSB1cGRhdGVkIGNvZGUgd2lsbCByZWxlYXNlIHRoZSBjYXBhY2l0eSBpZiB0aGUgbG93LWxldmVsIHB1c2ggZmFpbHMuIFRoaXMgcHJldmVudHMgdGhlIHN0cmVhbSBmcm9tIHJlcG9ydGluZyBhdmFpbGFibGUgY2FwYWNpdHkgdGhhdCBkb2Vzbid0IGFjdHVhbGx5IGV4aXN0IGFuZCwgaWYgdGhlIHByb2dyYW0gaXMgY2FyZWZ1bGx5IHdyaXR0ZW4sIG1pZ2h0IHByZXZlbnQgYW4gb3V0LW9mLW1lbW9yeSBjb25kaXRpb24uXG5cbkZpbmFsbHksIGBicGZfc3RyZWFtX2VsZW1fYWxsb2NgIGhhcyBhbiBvZmYtYnktb25lIGVycm9yIGZpeC4gVGhlIGNvZGUgcHJldmlvdXNseSBhbGxvd2VkIGFuIGVsZW1lbnQgbGVuZ3RoIHRoYXQgY291bGQgYmUgZXF1YWwgdG8gdGhlIG1heCBsZW5ndGgsIHdoaWNoIGNvdWxkIGhhdmUgYmVlbiBhIGJ1ZmZlciBvdmVyZmxvdy4gVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuXG5cbkFsbCB0aGVzZSBjaGFuZ2VzIGFyZSBlc3NlbnRpYWxseSBjb3JyZWN0bmVzcyBpbXByb3ZlbWVudHMuIEFuZCBJIGtub3cgdGhlIEJQRiBzdWJzeXN0ZW0gaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgc3lzY2FsbHMgYW5kIEJQRiBwcm9ncmFtcyB0aGVtc2VsdmVzLCB3aGljaCBtZWFucyBJIGNhbiByZWFjaCBpdCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBTbywgeWVzLCB0aGVzZSBmaXhlcyBhcmUgd29ydGggZnV6emluZy5cblxuTXkgcHJpbWFyeSB0YXJnZXRzIGFyZSB0aGUgZnVuY3Rpb25zIG1vZGlmaWVkOiBgYnBmX3N0cmVhbV9yZWFkYCwgd2hpY2ggaXMgY2FsbGVkIHRocm91Z2ggdGhlIHN5c2NhbGwgYF9fc3lzX2JwZmAsIGBicGZfc3RyZWFtX3ZwcmludGtgLCBhbmQgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYC4gSSBuZWVkIHRvIHJlbWVtYmVyIGBicGZfc3RyZWFtX3JlYWRgIGlzIGNhbGxlZCB0aHJvdWdoIGBicGZfcHJvZ19zdHJlYW1fcmVhZGAgZnVuY3Rpb24uIEkgd2lsbCBuZWVkIHRvIGNoZWNrIGhvdyB0byByZWFjaCBgYnBmX3N0cmVhbV92cHJpbnRrYCBhbmQgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCBmcm9tIEJQRiBwcm9ncmFtcyB0aGF0IEkgbWF5IHdyaXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYyNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDQ6NTYuNjU5Njk1MDc1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzUwNzgxMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3Byb2dfc3RyZWFtX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdHJlYW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0cmVhbS5jPTE2MD1zdGF0aWMgaW50IGJwZl9zdHJlYW1fcmVhZChzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCB2b2lkIF9fdXNlciAqYnVmLCBpbnQgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0yMDUtXFxua2VybmVsL2JwZi9zdHJlYW0uYzoyMDY6aW50IGJwZl9wcm9nX3N0cmVhbV9yZWFkKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgZW51bSBicGZfc3RyZWFtX2lkIHN0cmVhbV9pZCwgdm9pZCBfX3VzZXIgKmJ1ZiwgaW50IGxlbilcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTIwNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ0OjU3LjAzNDc4MTQ0N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTgzMTk5OTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEknbSBkZWFsaW5nIHdpdGggdGhlc2UgQlBGIGZ1bmN0aW9uczogYGJwZl9wcm9nX3N0cmVhbV9yZWFkYCwgYGJwZl9zdHJlYW1fdnByaW50a2AsIGFuZCBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgLiBSaWdodCwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBlc3RhYmxpc2ggdGhhdCBgYnBmX3Byb2dfc3RyZWFtX3JlYWRgIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uOyBubyBzdXJwcmlzZXMgdGhlcmUuIEFuZCwgc2luY2UgYGJwZl9zdHJlYW1fdnByaW50a2AgaXMgYSBrZnVuYywgdGhhdCBhbHNvIG1lYW5zIGl0J3MgZ2xvYmFsbHkgYXZhaWxhYmxlLiBGaW5hbGx5LCBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgIGlzIGFsc28gYSBnbG9iYWwgZnVuY3Rpb24uIE5vdywgbGV0J3MgZGl2ZSBpbnRvIGNvbmZpZ3VyYXRpb25zLiBJdCdzIHRpbWUgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IG11c3QgYmUgZW5hYmxlZC4gSSBrbm93IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGFuIGFic29sdXRlIG5lY2Vzc2l0eS4gSG93ZXZlciwgSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3Qgb3RoZXIgaGlkZGVuIGRlcGVuZGVuY2llcy4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gY2hlY2sgYGtlcm5lbC9icGYvTWFrZWZpbGVgIGFnYWluLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBpZGVudGlmeSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTEyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ1OjAxLjAxNzk4NzI2OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyODgzMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RyZWFtXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfQlBGX0pJVCkgKz0gdHJhbXBvbGluZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NTowMS4wNjYyODM0MjNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0ODkwNTYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkJQRiBTeXN0ZW0gQ2FsbCBDb25maWd1cmF0aW9uIGFuZCBgYnBmX3N0cmVhbV92cHJpbnRrYCBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIGNydWNpYWwgc2V0dGluZyBoZXJlLCB0aGUgY29yZSBlbmFibGVyIGZvciBCUEYgc3lzdGVtIGNhbGwgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0J3MgY29ycmVjdGx5IGNvbmZpZ3VyZWQgYW5kIGZ1bmN0aW9uaW5nIGFzIGV4cGVjdGVkIGJlZm9yZSBkaXZpbmcgZGVlcGVyLlxuXG5Ob3csIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgYnBmX3N0cmVhbV92cHJpbnRrYC4gSSdtIGN1cmlvdXMgaWYgaXQgaGFzIGFueSBhZGRpdGlvbmFsIGRlcGVuZGVuY2llcyBvciBwcmVyZXF1aXNpdGVzIGJleW9uZCB0aGUgb2J2aW91cyBCUEYgc3lzdGVtIGNhbGwgZW5hYmxlbWVudC4gVGhlcmUgY291bGQgYmUgc3VidGxlIGxpbmthZ2VzIHRvIG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIHN1YnN5c3RlbXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkgbmVlZCB0byBlbnN1cmUgYSBob2xpc3RpYyB1bmRlcnN0YW5kaW5nIG9mIGFsbCBjb250cmlidXRpbmcgZmFjdG9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNjQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NTowNC4yMTUxOTQzOFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM4MTUwNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3N0cmVhbV92cHJpbnRrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3RyZWFtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdHJlYW0uYz0yMTY9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0yMjEtICovXFxua2VybmVsL2JwZi9zdHJlYW0uYzoyMjI6X19icGZfa2Z1bmMgaW50IGJwZl9zdHJlYW1fdnByaW50ayhpbnQgc3RyZWFtX2lkLCBjb25zdCBjaGFyICpmbXRfX3N0ciwgY29uc3Qgdm9pZCAqYXJncyxcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTIyMy1cXHRcXHRcXHRcXHQgICB1MzIgbGVuX19zeiwgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NTowNC4yNjkwMjA0MTVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwNTYyNTY3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgZm9yIE5lY2Vzc2FyeSBVcGRhdGVzKipcblxuQWxyaWdodCwgbm8gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZ29pbmcgb24gYXJvdW5kIHRoaXMgb25lLCB3aGljaCBpcyBnb29kLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLiBOb3csIEknbSB0aGlua2luZywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AuIEkgbmVlZCB0byBlbnN1cmUgaXQncyBzdGlsbCBvcGVyYXRpbmcgY29ycmVjdGx5IHdpdGhpbiB0aGUgY3VycmVudCBkZXNpZ24gYW5kIHRoYXQgSSBoYXZlbid0IG92ZXJsb29rZWQgYW55IG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgb3IgaW50ZXJhY3Rpb25zLiBJcyB0aGVyZSBzb21ldGhpbmcgZWxzZSB0aGlzIGZ1bmN0aW9uIG5vdyBuZWVkcyB0byB3b3JrIHdpdGgsIGdpdmVuIHRoZSByZWNlbnQgY2hhbmdlcz8gSSBzaG91bGQgY2FyZWZ1bGx5IGV4YW1pbmUgaXRzIGltcGxlbWVudGF0aW9uIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGRhdGEgZmxvdy4gTGV0J3MgbWFrZSBzdXJlIGl0J3MgZG9pbmcgZXZlcnl0aGluZyBpdCdzIHN1cHBvc2VkIHRvIGJlIGRvaW5nIGFuZCB0aGF0IHRoZSBpbnRlZ3JhdGlvbiBpcyBjbGVhbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3MjksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NTowNy4zNzQ2NDkzNTVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzA1NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3RyZWFtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdHJlYW0uYz0zMTQ9dm9pZCBicGZfc3RyZWFtX3N0YWdlX2ZyZWUoc3RydWN0IGJwZl9zdHJlYW1fc3RhZ2UgKnNzKVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0zMjEtXFxua2VybmVsL2JwZi9zdHJlYW0uYzozMjI6aW50IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXFxua2VybmVsL2JwZi9zdHJlYW0uYy0zMjMte1xcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYz0zNzU9c3RhdGljIGJvb2wgZHVtcF9zdGFja19jYih2b2lkICpjb29raWUsIHU2NCBpcCwgdTY0IHNwLCB1NjQgYnApXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTM4OC1cXHRcXHRcXHRnb3RvIGVuZDtcXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjM4OTpcXHRcXHRjdHhwLVxcdTAwM2VlcnIgPSBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhjdHhwLVxcdTAwM2VzcywgXFxcIiVwU1xcXFxuICAlcyBAICVzOiVkXFxcXG5cXFwiLFxcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzkwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAodm9pZCAqKShsb25nKWlwLCBsaW5lLCBmaWxlLCBudW0pO1xcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0zOTMtZW5kOlxcbmtlcm5lbC9icGYvc3RyZWFtLmM6Mzk0OlxcdGN0eHAtXFx1MDAzZWVyciA9IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKGN0eHAtXFx1MDAzZXNzLCBcXFwiJXBTXFxcXG5cXFwiLCAodm9pZCAqKShsb25nKWlwKTtcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTM5NS1cXHRyZXR1cm4gIWN0eHAtXFx1MDAzZWVycjtcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmM9Mzk4PWludCBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2soc3RydWN0IGJwZl9zdHJlYW1fc3RhZ2UgKnNzKVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy00MDItXFxua2VybmVsL2JwZi9zdHJlYW0uYzo0MDM6XFx0cmV0ID0gYnBmX3N0cmVhbV9zdGFnZV9wcmludGsoc3MsIFxcXCJDUFU6ICVkIFVJRDogJWQgUElEOiAlZCBDb21tOiAlc1xcXFxuXFxcIixcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTQwNC1cXHRcXHRcXHRcXHQgICAgICByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2t1aWRfdmFsKGN1cnJlbnRfcmVhbF9jcmVkKCktXFx1MDAzZWV1aWQpLFxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy00MDctXFx0XFx0cmV0dXJuIHJldDtcXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjQwODpcXHRyZXQgPSBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhzcywgXFxcIkNhbGwgdHJhY2U6XFxcXG5cXFwiKTtcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTQwOS1cXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy00MTMtXFx0XFx0cmV0dXJuIGN0eC5lcnI7XFxua2VybmVsL2JwZi9zdHJlYW0uYzo0MTQ6XFx0cmV0dXJuIGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHNzLCBcXFwiXFxcXG5cXFwiKTtcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTQxNS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ1OjA3LjQyMTk2MDc0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MDI3NjY2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQlBGIFN0cmVhbSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRoZXJlIGFyZW4ndCBhbnkgc3BlY2lhbCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBzdXJyb3VuZGluZyB0aGVzZSBmdW5jdGlvbnMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGF0IG1lYW5zIHRoZXkgYXJlIGFsd2F5cyBpbmNsdWRlZC4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgaW1wb3J0YW50IHN5bWJvbHMgZm9yIHRoaXMuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6IGBicGZfcHJvZ19zdHJlYW1fcmVhZGAsIGBicGZfc3RyZWFtX3ZwcmludGtgLCBhbmQgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYC5cblxuV2FpdCBhIG1pbnV0ZSwgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCBpcyBjYWxsZWQgaW5kaXJlY3RseSB0aHJvdWdoIGBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2tgLiBJIHNlZSB0aGF0IGBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2tgIGlzIGNhbGxlZCBieSBgYnBmX3Byb2dfcmVwb3J0X2FyZW5hX3Zpb2xhdGlvbmAsIGBicGZfcHJvZ19yZXBvcnRfbWF5X2dvdG9fdmlvbGF0aW9uYCwgYW5kIGBicGZfcHJvZ19yZXBvcnRfcnFzcGlubG9ja192aW9sYXRpb25gLiBTbywgKmNhbiogYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCBiZSBkaXJlY3RseSBjYWxsZWQgZnJvbSBCUEY/IE5vLCBpdCdzIGFuIGludGVybmFsIGtlcm5lbCBmdW5jdGlvbi4gSXQgZm9ybWF0cyBzdHJpbmdzIGludG8gdGhlIHN0cmVhbSwgYnV0IGl0J3MgKmdsb2JhbCogYW5kIGl0J3MgYmVpbmcgbW9kaWZpZWQuIEl0J3MgYSBrZXkgZnVuY3Rpb24gaW4gdGhpcyBjb250ZXh0LCBzbyBpdCBpcyBhIGdvb2QgdGFyZ2V0LlxuXG5Ob3csIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBvYnZpb3VzIG9uZSwgYnV0IGFyZSB0aGVyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQmVzdCB0byBiZSB0aG9yb3VnaCwgSSdsbCBnbyBiYWNrIHRvIGBpbml0L0tjb25maWdgIGFuZCBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgQlBGX1NZU0NBTExgIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTg0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ1OjE0LjIyNDczMDM2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQyNzkwNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDU6MTQuMjc0MTY2OTE1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3Njk1MzcyMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnRlcm5hbCBDb2RlIERpdmU6IEh1bnRpbmcgZm9yIGBCUEZfU1lTQ0FMTGAqKlxuXG5BbHJpZ2h0LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gZGVlcCBpbnRvIHRoaXMgY29kZSwgYnV0IHNvbWV0aGluZydzIG5hZ2dpbmcgYXQgbWUuIEkndmUgZW5jb3VudGVyZWQgYEJQRl9TWVNDQUxMYCwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzLCBcIldoZXJlIGV4YWN0bHkgKmlzKiB0aGF0IGRlZmluZWQ/XCIgVGhpcyBpc24ndCBqdXN0IGEgY2FzdWFsIHVzYWdlOyBpdCdzIGZ1bmRhbWVudGFsIHRvIHRoaXMgcGFydGljdWxhciBiaXQgb2Yga2VybmVsLWxldmVsIG1hZ2ljIEknbSBhbmFseXppbmcuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIG9yaWdpbiDigJMgdGhlIGluY2x1ZGUgZmlsZSwgdGhlIHNwZWNpZmljIG1hY3JvIGRlZmluaXRpb24uIEkgbmVlZCB0byBiZSAqcHJlY2lzZSouIElzIGl0IGEgY29yZSBCUEYgaGVhZGVyPyBJcyBpdCBidXJpZWQgaW4gc29tZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZGVmaW5pdGlvbj8gSXMgaXQgZXZlbiBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBCUEYgbGlicmFyeSwgb3IgaXMgdGhpcyBzb21lIGN1c3RvbSBhZGFwdGF0aW9uPyBJIGtub3cgSSBuZWVkIHRvIHRyYWNrIHRoaXMgZG93biB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgd2l0aGluIHRoaXMgY29kZSBwYXRoLiBUaW1lIHRvIGdvIGh1bnRpbmchIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMDAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NToxOC4wNDM3MDY4ODZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODg0NjQ5NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ1OjE5LjczMjE3OTYzMloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjI5Njg2NjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGNvbmZpZ3VyYXRpb24gaXMgc3RydWN0dXJlZC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAyNy4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBwcm9iYWJseSBkZWZpbmVkIHNvbWV3aGVyZSBpbiB0aGF0IGFyZWEuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZm91bmRhdGlvbmFsIHNldHRpbmdzIHJlbGF0ZWQgdG8gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIEJQRiBmdW5jdGlvbmFsaXR5LCBtYXliZSBzb21lIG9mIHRoZSBjb3JlIGZlYXR1cmUgdG9nZ2xlcywgb3IgcGVyaGFwcyB0aGUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHdoYXQncyAqY29uZmlndXJhYmxlKiBhbmQgaG93IHRoYXQgY29uZmlndXJhYmlsaXR5IGlzIHByZXNlbnRlZC4gTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzUzNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ1OjIyLjk2MTg2ODY4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NToyMi45NjE5MzM4MloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDc4MDgyMzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBTdHJlYW0gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYEJQRl9TWVNDQUxMYCBpcyB0aGUgb25seSBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGgsIHRoYXQgc2ltcGxpZmllcyB0aGluZ3MgY29uc2lkZXJhYmx5LiBOb3csIGxldCBtZSBqdXN0IHJ1biB0aHJvdWdoIHRoZXNlIGNoYW5nZXMgb25lIG1vcmUgdGltZSB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGRpZG4ndCBnbG9zcyBvdmVyIGFueSBjcnVjaWFsIHN5bWJvbHMsIHlvdSBrbm93IGhvdyB0aGVzZSB0aGluZ3MgY2FuIGJlLlxuXG5BbHJpZ2h0LCBoZXJlJ3Mgd2hhdCB3ZSd2ZSBnb3Q6IGBicGZfc3RyZWFtX2VsZW1fYWxsb2NgLCBgYnBmX3N0cmVhbV9jb25zdW1lX2NhcGFjaXR5YCwgYGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eWAsIGBicGZfc3RyZWFtX3B1c2hfc3RyYCwgYW5kIGBicGZfc3RyZWFtX3JlYWRgIGFyZSB0aGUgc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBhZGp1c3RlZC4gVGhlbiB3ZSBoYXZlIGBicGZfc3RyZWFtX3ZwcmludGtgLCB3aGljaCBpcyBhIGtmdW5jLCBhbmQgdGhlIGdsb2JhbCBmdW5jdGlvbiBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgLlxuXG5Mb29raW5nIGF0IHRoZSBnbG9iYWwgZnVuY3Rpb25zLCBvciB0aG9zZSB0aGF0IGRpcmVjdGx5IGludGVyYWN0IHdpdGggdGhvc2Ugc3RhdGljYWxseSBtb2RpZmllZCBmdW5jdGlvbnMsIHRoZSBrZXkgb25lcyBzZWVtIHRvIGJlOiBgYnBmX3Byb2dfc3RyZWFtX3JlYWRgIOKAkyB0aGF0IGNhbGxzIGBicGZfc3RyZWFtX3JlYWRgIOKAkyBhbmQgYGJwZl9zdHJlYW1fdnByaW50a2Ag4oCTIHRoYXQgY2FsbHMgYGJwZl9zdHJlYW1fcHVzaF9zdHJgIOKAkyBhcyB3ZWxsIGFzIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2Agd2hpY2ggY2FsbHMgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAuXG5cbldhaXQgYSBtaW51dGUsIGBicGZfc3RyZWFtX3B1c2hfc3RyYCBpcyBjYWxsZWQgYnkgYm90aCBgYnBmX3N0cmVhbV92cHJpbnRrYCBhbmQuLi5oYW5nIG9uLi4uYGJwZl9zdHJlYW1fcHJpbnRfc3RhY2tgPyBMZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGJwZl9zdHJlYW1fcHJpbnRfc3RhY2tgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgY2FsbCBjaGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NToyOS4wNDAwMTkwNjVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NzA0NDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJlYW1fcHJpbnRfc3RhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdHJlYW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0cmVhbS5jPTIyMj1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b2lkICphcmdzLFxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0yNjAtLyogRGlyZWN0bHkgdHJpZ2dlciBhIHN0YWNrIGR1bXAgZnJvbSB0aGUgcHJvZ3JhbS4gKi9cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjI2MTpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV9wcmludF9zdGFjayhpbnQgc3RyZWFtX2lkLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXFxua2VybmVsL2JwZi9zdHJlYW0uYy0yNjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NToyOS4wODk3NDIzMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTk0MjM2MTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQlBGIFN0cmVhbSBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgQlBGIHN0cmVhbSBjb2RlLCBhbmQgaGVyZSdzIHdoYXQgSSdtIHNlZWluZy4gYGJwZl9zdHJlYW1fcHJpbnRfc3RhY2tgIHVsdGltYXRlbHkgcmVsaWVzIG9uIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgdGhyb3VnaCBhIGNoYWluIG9mIGNhbGxzLiBUaGF0IG1ha2VzIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgYSBwcmV0dHkgY3JpdGljYWwgc3ltYm9sIHRvIHN0YXJ0IHdpdGguIEdpdmVuIG15IGV4cGVydGlzZSwgSSdtIHRoaW5raW5nIEkgY2FuIGV4dHJhcG9sYXRlIGZyb20gdGhhdC5cblxuTGV0IG1lIHNlZSB3aGF0IGVsc2UgaXMgaGFwcGVuaW5nIGluIHRoaXMgc3BoZXJlLiBJIHNlZSBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYCBpcyBjYWxsZWQgYnkgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAsIHdoaWNoLCBpbiB0dXJuLCBpcyB1c2VkIGJ5IGJvdGggYGJwZl9zdHJlYW1fcHVzaF9zdHJgICphbmQqIHRoZSBwcmV2aW91c2x5IGlkZW50aWZpZWQgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYC4gRnVydGhlciBhbmFseXNpcyBzaG93cyBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgaXMgdXNlZCBieSBgYnBmX3N0cmVhbV92cHJpbnRrYC5cblxuQWxyaWdodCwgSSd2ZSBnb3QgYSBjbGVhcmVyIHBpY3R1cmUgbm93LiBJdCBsb29rcyBsaWtlIHRoZSBrZXkgc3ltYm9scyBoZXJlIGFyZTpcblxuKiAgIGBicGZfcHJvZ19zdHJlYW1fcmVhZGBcbiogICBgYnBmX3N0cmVhbV92cHJpbnRrYFxuKiAgIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2BcblxuSSBzaG91bGQgbm93IHF1aWNrbHkgY2hlY2sgaWYgYGJwZl9wcm9nX3N0cmVhbV9yZWFkYCBpcyBleHBvcnRlZCwgb3IganVzdCBnbG9iYWwuIFRoZSBpbXBsaWNhdGlvbnMgYXJlIGRpZmZlcmVudCBmb3IgZWFjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4MTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDU6MzUuNjgzOTgyNTIxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjI1MTE4NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYnBmX3Byb2dfc3RyZWFtX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ1OjM1LjczNjI0MzUyNloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQ3MDgzOTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIFN5bWJvbCBWaXNpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCBgYnBmX3N0cmVhbV92cHJpbnRrYC4gSSBrbm93IGl0J3Mgbm90IGV4cGxpY2l0bHkgKmV4cG9ydGVkKiBwZXIgc2UsIGJ1dCBpdCdzIGRlZmluZWQgZ2xvYmFsbHkgd2l0aGluIGBrZXJuZWwvYnBmL3N0cmVhbS5jYCBhbmQgaXMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBUaGF0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBGb3IgdGhlIGBGb2N1c1N5bWJvbHNgIHByb2plY3QsIHRoaXMgaW1wbGljaXQgbGlua2FnZSBzaG91bGQgYmUgcGVyZmVjdGx5IGFjY2VwdGFibGUuIE5vdywgSSBqdXN0IG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGBicGZfc3RyZWFtX3ZwcmludGtgIHN5bWJvbCBoYXMgYW4gYEVYUE9SVGAgbWFjcm8gYXBwbGllZCB0byBpdCBzb21ld2hlcmUuIEknbGwgY2hlY2sgdGhhdCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzcxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDU6MzkuNzgzMzMwNzNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjkyNDE0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipicGZfc3RyZWFtX3ZwcmludGtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ1OjM5LjgzNjAzMzM1NFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQzMTUzODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIEZ1bmN0aW9uIEluc3BlY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aGlzIGlzIGEga2Z1bmMsIHdoaWNoIG1lYW5zIGl0J3MgcmVnaXN0ZXJlZCB0aHJvdWdoIHRoZSBCVEYgKEJQRiBUeXBlIEZvcm1hdCkgaW5mcmFzdHJ1Y3R1cmUuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IG5leHQgbW92ZSBpcyB0byB2ZXJpZnkgaXRzIGF2YWlsYWJpbGl0eS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBjYW4gdXNlIHRoaXMga2Z1bmMgaW4gdGhlIEJQRiBwcm9ncmFtIEkgYW0gd29ya2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2MTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NTo0Mi44NzkxODk2NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIyNDA0NTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NTo0Mi45MzE0Mzc1NzVaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM2Nzk5Mzc3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQW5hbHl6aW5nIGFuZCBQcmlvcml0aXppbmcgQ29kZSBDaGFuZ2VzKipcblxuQWxyaWdodCwgc28gdGhpcyBpc24ndCBhbiBleHBvcnRlZCBmdW5jdGlvbiwgYnV0IGl0J3MgY2xlYXJseSBkZWZpbmVkIGFzIGEgZ2xvYmFsIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gQnV0IG1vcmUgaW1wb3J0YW50bHksIHRoZSBjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIG1hZGUgaGVyZSBhcmUgKipkZWZpbml0ZWx5Kiogd29ydGggc2lua2luZyBteSB0ZWV0aCBpbnRvIHdpdGggZnV6emluZy4gVGhpcyBpcyBjbGFzc2ljLCByaWdodD8gVGhlIGlzc3VlcyBsaXN0ZWQgaW1tZWRpYXRlbHkganVtcCBvdXQ6IHRoZXNlIGFyZSBhbGwgY3JpdGljYWwgYnVncyBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBCUEYgc3RyZWFtIHN1YnN5c3RlbS4gSSBzZWUgYSBwYXR0ZXJuIGhlcmU6XG5cbiogICBGaXJzdCwgd2UgaGF2ZSBhbiBPZmYtYnktb25lIGluIGxlbmd0aCBjaGVjayBpbiBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYC4gVGhhdCdzIGEgY2xhc3NpYyBtZW1vcnkgaXNzdWUsIGFuZCBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gc2VlIHRoZSBkZXRhaWxzIHRvIGVuc3VyZSB3ZSBkaWRuJ3Qgb3BlbiBhIHdpZGVyIHZ1bG5lcmFiaWxpdHkuXG5cbiogICBUaGVuLCB3ZSd2ZSBnb3QgYSBjYXBhY2l0eSBsZWFrIGluIGBicGZfc3RyZWFtX3B1c2hfc3RyYCwgd2hpY2ggY291bGQgbGVhZCB0byByZXNvdXJjZSBleGhhdXN0aW9uIGlmIG5vdCBtYW5hZ2VkIGNvcnJlY3RseS4gQW5vdGhlciBmdXp6aW5nIHRhcmdldCB0byB1bmNvdmVyIHBvdGVudGlhbCBEb1MgdnVsbmVyYWJpbGl0aWVzLlxuXG4qICAgSW5jb3JyZWN0IGhhbmRsaW5nIG9mIHBhcnRpYWwgcmVhZHMgaW4gYGJwZl9zdHJlYW1fcmVhZGAsIG9rYXksIHRoYXQncyBhbG1vc3QgYWx3YXlzIGEgc291cmNlIG9mIHdlaXJkbmVzcy4gVGhpcyBpcyB0aGUga2luZCBvZiBidWcgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cywgYnV0IGl0IGhhcyB0aGUgcG90ZW50aWFsIHRvIGNhdXNlIGlzc3VlcyB3aXRoIGRhdGEgaW50ZWdyaXR5IG9yIGV2ZW4gY3JlYXRlIHVuZXhwZWN0ZWQgY29udHJvbCBmbG93LlxuXG4qICAgQW5kIG9mIGNvdXJzZSwgd2UncmUgbWlzc2luZyBhIHRydW5jYXRpb24gY2hlY2sgaW4gYGJwZl9zdHJlYW1fdnByaW50a2AuIEEgY29tbW9uIHZ1bG5lcmFiaWxpdHkgZm9yIGJ1ZmZlciBvdmVyZmxvd3MsIGJ1dCBsZXQncyBzZWUgaG93IHRoZXkgaGFuZGxlZCB0aGUgZml4LlxuXG4qICAgRmluYWxseSwgaW5jb3JyZWN0IGxlbmd0aCBjYWxjdWxhdGlvbiBpbiBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgIGNvdWxkIGxlYWQgdG8gYnVmZmVyIG92ZXJmbG93cyBvciBkYXRhIGNvcnJ1cHRpb24sIGFzIHdlbGwuXG5cbkkgc2VlIHRoZSBjb21tb24gdGhyZWFkIGhlcmU6IG1lbW9yeSBtYW5hZ2VtZW50LCBib3VuZHMgY2hlY2tzLCBhbmQgZGF0YSBpbnRlZ3JpdHkuIFRoaXMgc2VlbXMgbGlrZSBhIGp1aWN5IHNldCBvZiB0YXJnZXRzIGZvciBmdXp6aW5nLiBJJ2xsIGdldCB0aGUgcmVzdWx0cyBzZXQgdXAgYXMgc29vbiBhcyBJIGNhbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4MTksIk91dHB1dFRva2VucyI6MTUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ1OjQ5LjI5OTQzNTVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDc3NzQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19zdHJlYW1fcmVhZFwiLFxuICAgIFwiYnBmX3N0cmVhbV92cHJpbnRrXCIsXG4gICAgXCJicGZfc3RyZWFtX3N0YWdlX3ByaW50a1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIGJ1Z3MgaW4gdGhlIEJQRiBzdHJlYW0gc3Vic3lzdGVtLCBpbmNsdWRpbmcgYW4gb2ZmLWJ5LW9uZSBlcnJvciBpbiBsZW5ndGggY2hlY2tpbmcsIGEgY2FwYWNpdHkgbGVhayBvbiBwdXNoIGZhaWx1cmUsIGluY29ycmVjdCBoYW5kbGluZyBvZiBwYXJ0aWFsIHJlYWRzIHRvIHVzZXIgc3BhY2UsIG1pc3NpbmcgdHJ1bmNhdGlvbiBjaGVja3MgaW4gdnByaW50aywgYW5kIGluY29ycmVjdCBsZW5ndGggY2FsY3VsYXRpb25zIGluIHN0YWdlX3ByaW50ay4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSAoQlBGIHN5c2NhbGwgYW5kIEJQRiBwcm9ncmFtcykgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfc3RyZWFtX3JlYWRcIixcbiAgICBcImJwZl9zdHJlYW1fdnByaW50a1wiLFxuICAgIFwiYnBmX3N0cmVhbV9zdGFnZV9wcmludGtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBtdWx0aXBsZSBidWdzIGluIHRoZSBCUEYgc3RyZWFtIHN1YnN5c3RlbSwgaW5jbHVkaW5nIGFuIG9mZi1ieS1vbmUgZXJyb3IgaW4gbGVuZ3RoIGNoZWNraW5nLCBhIGNhcGFjaXR5IGxlYWsgb24gcHVzaCBmYWlsdXJlLCBpbmNvcnJlY3QgaGFuZGxpbmcgb2YgcGFydGlhbCByZWFkcyB0byB1c2VyIHNwYWNlLCBtaXNzaW5nIHRydW5jYXRpb24gY2hlY2tzIGluIHZwcmludGssIGFuZCBpbmNvcnJlY3QgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiBzdGFnZV9wcmludGsuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgKEJQRiBzeXNjYWxsIGFuZCBCUEYgcHJvZ3JhbXMpIGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDU6NDkuMzg0MjIwODgxWiIsIlNlcSI6NDcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIxNzYxODIyNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NTo0OS4zODQ4NDI1NzFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTAyMTc1NTU2MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgc2V2ZXJhbCBsb2dpYyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCBidWdzIGluIHRoZSBCUEYgc3RyZWFtIGltcGxlbWVudGF0aW9uOlxcbjEuIEl0IGZpeGVzIGEgY2FwYWNpdHkgbGVhayB3aGVyZSBvdmVyc2l6ZWQgb3IgdHJ1bmNhdGVkIHN0cmluZ3Mgd291bGQgY29uc3VtZSBzdHJlYW0gY2FwYWNpdHkgYnV0IGZhaWwgdG8gYWxsb2NhdGUgYW4gZWxlbWVudCwgcGVybWFuZW50bHkgcmVkdWNpbmcgYXZhaWxhYmxlIGNhcGFjaXR5LlxcbjIuIEl0IHByZXZlbnRzIHRoZSBpbmNsdXNpb24gb2YgdGhlIHRyYWlsaW5nIE5VTCBieXRlIGluIHRoZSBzdHJlYW0gcGF5bG9hZCB3aGVuIHRoZSBmb3JtYXR0ZWQgc3RyaW5nIGV4YWN0bHkgbWF0Y2hlcyB0aGUgYnVmZmVyIHNpemUuXFxuMy4gSXQgZml4ZXMgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCB0byBvbmx5IGluY3JlbWVudCB0aGUgc3RyZWFtIGxlbmd0aCBpZiB0aGUgc3RyaW5nIHdhcyBzdWNjZXNzZnVsbHkgcHVzaGVkLlxcbjQuIEl0IGNvcnJlY3RzIHRoZSBoYW5kbGluZyBvZiBwYXJ0aWFsIGBjb3B5X3RvX3VzZXJgIGZhdWx0cyBpbiBgYnBmX3N0cmVhbV9yZWFkYCB0byBwcm9wZXJseSBhY2NvdW50IGZvciBzdWNjZXNzZnVsbHkgY29waWVkIGJ5dGVzLlxcblxcbk5vbmUgb2YgdGhlc2UgaXNzdWVzIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBzdHJlYW0gZWxlbWVudHMgYXJlIGFsbG9jYXRlZCB3aXRoIGBfX0dGUF9aRVJPYCwgYW5kIHRoZSBzdHJpbmdzIGNvcGllZCBpbnRvIHRoZW0gYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGBic3RyX3ByaW50ZmAgb3IgYHZzY25wcmludGZgLiBUaGUgY29waWVkIGxlbmd0aCBpcyBzdHJpY3RseSBib3VuZGVkIGJ5IHRoZSBpbml0aWFsaXplZCBzdHJpbmcgbGVuZ3RoLiBUaGUgYnVncyBmaXhlZCBhcmUgbG9naWMgZXJyb3JzLCByZXNvdXJjZSBsZWFrcywgYW5kIGluY29ycmVjdCBlcnJvciBoYW5kbGluZywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSB0aGUgYWRkZWQgc2VsZnRlc3RzIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyB0b29scy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTI0NmFmZGU0Njk2ZmM2OWY3MzI5M2FhYjM4ODUwOTgxMDUzZTUwMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDE0OjQzOjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdHJlYW0uYyBiL2tlcm5lbC9icGYvc3RyZWFtLmNcbmluZGV4IGJlOWNlOThlOTQ2OTIuLjdhNWMzYWM4Njc2YjkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0cmVhbS5jXG4rKysgYi9rZXJuZWwvYnBmL3N0cmVhbS5jXG5AQCAtMjIsMTEgKzIyLDExIEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICpicGZfc3RyZWFtX2VsZW1fYWxsb2MoaW50IGxlbilcbiBcdHNpemVfdCBhbGxvY19zaXplO1xuIFxuIFx0Lypcbi1cdCAqIExlbmd0aCBkZW5vdGVzIHRoZSBhbW91bnQgb2YgZGF0YSB0byBiZSB3cml0dGVuIGFzIHBhcnQgb2Ygc3RyZWFtIGVsZW1lbnQsXG4tXHQgKiB0aHVzIGluY2x1ZGVzICdcXDAnIGJ5dGUuIFdlJ3JlIGNhcHBlZCBieSBob3cgbXVjaCBicGZfYnByaW50Zl9idWZmZXJzIGNhblxuLVx0ICogYWNjb21vZGF0ZSwgdGhlcmVmb3JlIGRlbnkgYWxsb2NhdGlvbnMgdGhhdCB3b24ndCBmaXQgaW50byB0aGVtLlxuK1x0ICogTGVuZ3RoIGlzIHRoZSBwYXlsb2FkIHB1c2hlZCBpbnRvIHRoZSBzdHJlYW0sIGV4Y2x1ZGluZyB0aGVcbitcdCAqIHRyYWlsaW5nIE5VTCBvZiB0aGUgYnByaW50ZiBidWZmZXIuIFJlamVjdCBhbnl0aGluZyB0aGF0IGNhbm5vdFxuK1x0ICogZml0IHdpdGhvdXQgY29weWluZyB0aGF0IE5VTCBpbnRvIHRoZSBzdHJlYW0gZWxlbWVudC5cbiBcdCAqL1xuLVx0aWYgKGxlbiBcdTAwM2MgMCB8fCBsZW4gXHUwMDNlIG1heF9sZW4pXG4rXHRpZiAobGVuIFx1MDAzYyAwIHx8IGxlbiBcdTAwM2U9IG1heF9sZW4pXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0YWxsb2Nfc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCBicGZfc3RyZWFtX2VsZW0sIHN0cltsZW5dKTtcbkBAIC02OCwxMCArNjgsOCBAQCBzdGF0aWMgaW50IGJwZl9zdHJlYW1fY29uc3VtZV9jYXBhY2l0eShzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBpbnQgbGVuKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICplbGVtKVxuK3N0YXRpYyB2b2lkIGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBpbnQgbGVuKVxuIHtcbi1cdGludCBsZW4gPSBlbGVtLVx1MDAzZXRvdGFsX2xlbjtcbi1cbiBcdGF0b21pY19zdWIobGVuLCBcdTAwMjZzdHJlYW0tXHUwMDNlY2FwYWNpdHkpO1xuIH1cbiBcbkBAIC03OSw3ICs3NywxNCBAQCBzdGF0aWMgaW50IGJwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgY29uc3QgY2hhciAqc3RyLCBpbnQgbFxuIHtcbiBcdGludCByZXQgPSBicGZfc3RyZWFtX2NvbnN1bWVfY2FwYWNpdHkoc3RyZWFtLCBsZW4pO1xuIFxuLVx0cmV0dXJuIHJldCA/OiBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXHUwMDI2c3RyZWFtLVx1MDAzZWxvZywgc3RyLCBsZW4pO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihcdTAwMjZzdHJlYW0tXHUwMDNlbG9nLCBzdHIsIGxlbik7XG4rXHRpZiAocmV0KVxuK1x0XHRicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RyZWFtLCBsZW4pO1xuK1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBicGZfc3RyZWFtICpicGZfc3RyZWFtX2dldChlbnVtIGJwZl9zdHJlYW1faWQgc3RyZWFtX2lkLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXG5AQCAtMTYyLDYgKzE2Nyw3IEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9yZWFkKHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIHZvaWQgX191c2VyICpidWYsIGludCBsZW4pXG4gXG4gXHR3aGlsZSAocmVtX2xlbikge1xuIFx0XHRpbnQgcG9zID0gbGVuIC0gcmVtX2xlbjtcbitcdFx0aW50IGNodW5rLCBuO1xuIFx0XHRib29sIGNvbnQ7XG4gXG4gXHRcdG5vZGUgPSBicGZfc3RyZWFtX2JhY2tsb2dfcGVlayhzdHJlYW0pO1xuQEAgLTE3NSwyMCArMTgxLDIxIEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9yZWFkKHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIHZvaWQgX191c2VyICpidWYsIGludCBsZW4pXG4gXG4gXHRcdGNvbnNfbGVuID0gZWxlbS1cdTAwM2Vjb25zdW1lZF9sZW47XG4gXHRcdGNvbnQgPSBicGZfc3RyZWFtX2NvbnN1bWVfZWxlbShlbGVtLCBcdTAwMjZyZW1fbGVuKSA9PSBmYWxzZTtcbi1cbi1cdFx0cmV0ID0gY29weV90b191c2VyKGJ1ZiArIHBvcywgZWxlbS1cdTAwM2VzdHIgKyBjb25zX2xlbixcbi1cdFx0XHRcdCAgIGVsZW0tXHUwMDNlY29uc3VtZWRfbGVuIC0gY29uc19sZW4pO1xuLVx0XHQvKiBSZXN0b3JlIGluIGNhc2Ugb2YgZXJyb3IuICovXG4tXHRcdGlmIChyZXQpIHtcbi1cdFx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0XHRcdGVsZW0tXHUwMDNlY29uc3VtZWRfbGVuID0gY29uc19sZW47XG4rXHRcdGNodW5rID0gZWxlbS1cdTAwM2Vjb25zdW1lZF9sZW4gLSBjb25zX2xlbjtcbitcbitcdFx0biA9IGNvcHlfdG9fdXNlcihidWYgKyBwb3MsIGVsZW0tXHUwMDNlc3RyICsgY29uc19sZW4sIGNodW5rKTtcbitcdFx0aWYgKG4pIHtcbitcdFx0XHQvKiBLZWVwIGFueSBzdWNjZXNzZnVsbHkgY29waWVkIGJ5dGVzOyAtRUZBVUxUIG9ubHkgaWYgbm9uZS4gKi9cbitcdFx0XHRlbGVtLVx1MDAzZWNvbnN1bWVkX2xlbiAtPSBuO1xuK1x0XHRcdHJlbV9sZW4gKz0gbjtcbitcdFx0XHRyZXQgPSAobGVuID09IHJlbV9sZW4pID8gLUVGQVVMVCA6IDA7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGNvbnQpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGJwZl9zdHJlYW1fYmFja2xvZ19wb3Aoc3RyZWFtKTtcbi1cdFx0YnBmX3N0cmVhbV9yZWxlYXNlX2NhcGFjaXR5KHN0cmVhbSwgZWxlbSk7XG4rXHRcdGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJlYW0sIGVsZW0tXHUwMDNldG90YWxfbGVuKTtcbiBcdFx0YnBmX3N0cmVhbV9mcmVlX2VsZW0oZWxlbSk7XG4gXHR9XG4gXG5AQCAtMjM4LDYgKzI0NSwxMSBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b1xuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0gYnN0cl9wcmludGYoZGF0YS5idWYsIE1BWF9CUFJJTlRGX0JVRiwgZm10X19zdHIsIGRhdGEuYmluX2FyZ3MpO1xuK1x0LyogVHJ1bmNhdGlvbjogcmVqZWN0IGJlZm9yZSBjYXBhY2l0eSBjaGFyZ2UgKG5vdCAtRU5PTUVNKS4gKi9cbitcdGlmIChyZXQgXHUwMDNlPSBNQVhfQlBSSU5URl9CVUYpIHtcbitcdFx0YnBmX2JwcmludGZfY2xlYW51cChcdTAwMjZkYXRhKTtcbitcdFx0cmV0dXJuIC1FMkJJRztcbitcdH1cbiBcdC8qIEV4Y2x1ZGUgTlVMTCBieXRlIGR1cmluZyBwdXNoLiAqL1xuIFx0cmV0ID0gYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJlYW0sIGRhdGEuYnVmLCByZXQpO1xuIFx0YnBmX2JwcmludGZfY2xlYW51cChcdTAwMjZkYXRhKTtcbkBAIC0zMTEsMTcgKzMyMywxOCBAQCBpbnQgYnBmX3N0cmVhbV9zdGFnZV9wcmludGsoc3RydWN0IGJwZl9zdHJlYW1fc3RhZ2UgKnNzLCBjb25zdCBjaGFyICpmbXQsIC4uLilcbiB7XG4gXHRzdHJ1Y3QgYnBmX2JwcmludGZfYnVmZmVycyAqYnVmO1xuIFx0dmFfbGlzdCBhcmdzO1xuLVx0aW50IHJldDtcbitcdGludCBsZW4sIHJldDtcbiBcbiBcdGlmIChicGZfdHJ5X2dldF9idWZmZXJzKFx1MDAyNmJ1ZikpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4gXHR2YV9zdGFydChhcmdzLCBmbXQpO1xuLVx0cmV0ID0gdnNucHJpbnRmKGJ1Zi1cdTAwM2VidWYsIEFSUkFZX1NJWkUoYnVmLVx1MDAzZWJ1ZiksIGZtdCwgYXJncyk7XG4rXHRsZW4gPSB2c2NucHJpbnRmKGJ1Zi1cdTAwM2VidWYsIEFSUkFZX1NJWkUoYnVmLVx1MDAzZWJ1ZiksIGZtdCwgYXJncyk7XG4gXHR2YV9lbmQoYXJncyk7XG4tXHRzcy1cdTAwM2VsZW4gKz0gcmV0O1xuIFx0LyogRXhjbHVkZSBOVUxMIGJ5dGUgZHVyaW5nIHB1c2guICovXG4tXHRyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXHUwMDI2c3MtXHUwMDNlbG9nLCBidWYtXHUwMDNlYnVmLCByZXQpO1xuK1x0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFx1MDAyNnNzLVx1MDAzZWxvZywgYnVmLVx1MDAzZWJ1ZiwgbGVuKTtcbitcdGlmICghcmV0KVxuK1x0XHRzcy1cdTAwM2VsZW4gKz0gbGVuO1xuIFx0YnBmX3B1dF9idWZmZXJzKCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jXG5pbmRleCBjM2NjZTVjMjkyYmRkLi44NzE3MGRjYWQzYWQ4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jXG5AQCAtNTgsNiArNTgsNzEgQEAgdm9pZCB0ZXN0X3N0cmVhbV9zeXNjYWxsKHZvaWQpXG4gXHRzdHJlYW1fX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuK3ZvaWQgdGVzdF9zdHJlYW1fb3ZlcnNpemUodm9pZClcbit7XG4rXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XG4rXHRzdHJ1Y3Qgc3RyZWFtICpza2VsO1xuK1x0aW50IHJldCwgcHJvZ19mZDtcbitcdGNoYXIgYnVmWzhdID0ge307XG4rXG4rXHRza2VsID0gc3RyZWFtX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJzdHJlYW1fX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5zdHJlYW1fb3ZlcnNpemUpO1xuK1x0cmV0ID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nX2ZkLCBcdTAwMjZvcHRzKTtcbitcdEFTU0VSVF9PSyhyZXQsIFwib3ZlcnNpemUgcnVuXCIpO1xuK1x0QVNTRVJUX09LKG9wdHMucmV0dmFsLCBcIm92ZXJzaXplIHJldHZhbFwiKTtcbitcbitcdC8qIE92ZXJzaXplZCBwdXNoIG11c3Qgbm90IHBlcm1hbmVudGx5IGNvbnN1bWUgY2FwYWNpdHkgb24gdGhpcyBwcm9nLiAqL1xuK1x0cmV0ID0gYnBmX3Byb2dfc3RyZWFtX3JlYWQocHJvZ19mZCwgQlBGX1NUUkVBTV9TVERPVVQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE5VTEwpO1xuK1x0QVNTRVJUX0VRKHJldCwgMywgXCJieXRlcyBhZnRlciBvdmVyc2l6ZVwiKTtcbitcdEFTU0VSVF9PSyhtZW1jbXAoYnVmLCBcImZvb1wiLCAzKSwgXCJwYXlsb2FkIGFmdGVyIG92ZXJzaXplXCIpO1xuK1xuK1x0c3RyZWFtX19kZXN0cm95KHNrZWwpO1xuK31cbitcbit2b2lkIHRlc3Rfc3RyZWFtX3BhcnRpYWxfcmVhZCh2b2lkKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbitcdHN0cnVjdCBzdHJlYW0gKnNrZWw7XG4rXHRpbnQgcmV0LCBwcm9nX2ZkO1xuK1x0bG9uZyBwYWdlX3NpemU7XG4rXHRjaGFyICpwYWdlLCAqYnVmO1xuK1x0Y2hhciByZXN0WzhdID0ge307XG4rXG4rXHRza2VsID0gc3RyZWFtX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJzdHJlYW1fX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5zdHJlYW1fc3lzY2FsbCk7XG4rXHRyZXQgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHByb2dfZmQsIFx1MDAyNm9wdHMpO1xuK1x0QVNTRVJUX09LKHJldCwgXCJyZXRcIik7XG4rXHRBU1NFUlRfT0sob3B0cy5yZXR2YWwsIFwicmV0dmFsXCIpO1xuK1xuK1x0cGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpO1xuK1x0cGFnZSA9IG1tYXAoTlVMTCwgcGFnZV9zaXplICogMiwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdFx0ICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuK1x0aWYgKCFBU1NFUlRfTkVRKHBhZ2UsIE1BUF9GQUlMRUQsIFwibW1hcFwiKSkge1xuK1x0XHRzdHJlYW1fX2Rlc3Ryb3koc2tlbCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdC8qIExlYXZlIG9ubHkgdGhlIGZpcnN0IHBhZ2UgbWFwcGVkIHNvIGEgc3RyYWRkbGluZyBjb3B5IGZhdWx0cy4gKi9cbitcdEFTU0VSVF9PSyhtdW5tYXAocGFnZSArIHBhZ2Vfc2l6ZSwgcGFnZV9zaXplKSwgXCJtdW5tYXAgc2Vjb25kIHBhZ2VcIik7XG4rXG4rXHRidWYgPSBwYWdlICsgcGFnZV9zaXplIC0gMTtcbitcdHJldCA9IGJwZl9wcm9nX3N0cmVhbV9yZWFkKHByb2dfZmQsIEJQRl9TVFJFQU1fU1RET1VULCBidWYsIDMsIE5VTEwpO1xuK1x0QVNTRVJUX0VRKHJldCwgMSwgXCJwYXJ0aWFsIGJ5dGVzXCIpO1xuK1x0QVNTRVJUX0VRKGJ1ZlswXSwgJ2YnLCBcImZpcnN0IGJ5dGVcIik7XG4rXG4rXHRyZXQgPSBicGZfcHJvZ19zdHJlYW1fcmVhZChwcm9nX2ZkLCBCUEZfU1RSRUFNX1NURE9VVCwgcmVzdCwgc2l6ZW9mKHJlc3QpLCBOVUxMKTtcbitcdEFTU0VSVF9FUShyZXQsIDIsIFwicmVtYWluaW5nIGJ5dGVzXCIpO1xuK1x0QVNTRVJUX09LKG1lbWNtcChyZXN0LCBcIm9vXCIsIDIpLCBcInJlbWFpbmluZyBkYXRhXCIpO1xuK1xuK1x0bXVubWFwKHBhZ2UsIHBhZ2Vfc2l6ZSk7XG4rXHRzdHJlYW1fX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHRlc3RfYWRkcmVzcyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIHVuc2lnbmVkIGxvbmcgKmZhdWx0X2FkZHJfcClcbiB7XG4gXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXG5pbmRleCA2Zjk5OWJhOTUxYTNjLi45Yjk3ZjVlMDFiODNhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbkBAIC0zNiw3ICszNiwxMiBAQCBzdHJ1Y3Qge1xuIH0gYXJyYXkgU0VDKFwiLm1hcHNcIik7XG4gXG4gI2RlZmluZSBFTk9TUEMgMjhcbisjZGVmaW5lIEUyQklHIDdcbiAjZGVmaW5lIF9TVFIgXCJ4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhcIlxuKyNkZWZpbmUgX1g2NCBcInh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhcIlxuKy8qIDEwMjQgYnl0ZXM6IHRydW5jYXRlZCBieSBic3RyX3ByaW50ZiwgbXVzdCByZXR1cm4gLUUyQklHLiAqL1xuKyNkZWZpbmUgX0JJR19TVFIgKF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBcXFxuK1x0XHQgIF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NClcbiBcbiBpbnQgc2l6ZTtcbiB1NjQgZmF1bHRfYWRkcjtcbkBAIC0xMTcsNiArMTIyLDE5IEBAIGludCBzdHJlYW1fc3lzY2FsbCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK2ludCBzdHJlYW1fb3ZlcnNpemUodm9pZCAqY3R4KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBicGZfc3RyZWFtX3ByaW50ayhCUEZfU1RET1VULCBfQklHX1NUUik7XG4rXHRpZiAocmV0ICE9IC1FMkJJRylcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBicGZfc3RyZWFtX3ByaW50ayhCUEZfU1RET1VULCBcImZvb1wiKTtcbit9XG4rXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbiBfX2FyY2hfYXJtNjRcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ1OjQ5LjM4NDg0MzYyMVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjg5NzIzODUzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBTdHJlYW0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBtb2RpZnlpbmcgYGtlcm5lbC9icGYvc3RyZWFtLmNgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgc3VnZ2VzdHMgc2V2ZXJhbCBjaGFuZ2VzIGFpbWVkIGF0IHJlZmluaW5nIGNhcGFjaXR5IG1hbmFnZW1lbnQgYW5kIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgQlBGIHN0cmVhbSBmdW5jdGlvbmFsaXR5LlxuXG5GaXJzdCwgaW4gYGJwZl9zdHJlYW1fZWxlbV9hbGxvY2AsIHRoZXkndmUgdGlnaHRlbmVkIHRoZSBsZW5ndGggdmFsaWRhdGlvbiwgbWFraW5nIHN1cmUgdGhlIGxlbmd0aCBpc24ndCBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gYWxsb3dlZCBsZW5ndGguIFRoaXMgc2VlbXMgbGlrZSBhIGdvb2Qgc2FmZXR5IGNoZWNrLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGlzc3VlcyBkdXJpbmcgYWxsb2NhdGlvbi5cblxuTmV4dCwgaW4gYGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eWAsIHdlIHNlZSB0aGV5J3JlIG5vdyBwYXNzaW5nIHRoZSBsZW5ndGggZGlyZWN0bHkgaW5zdGVhZCBvZiB0aGUgZW50aXJlIGVsZW1lbnQuIEl04oCZcyBjbGVhbmVyLCBmb2N1c2luZyBvbmx5IG9uIHRoZSBjYXBhY2l0eSB2YWx1ZSB0byBiZSBhZGp1c3RlZCwgc28gdGhlIGBlbGVtYCBzdHJ1Y3QgZG9lc24ndCBuZWVkIHRvIGJlIHBhc3NlZC4gVGhpcyBtYWtlcyB0aGUgY29kZSBtb3JlIHJlYWRhYmxlIGFuZCBwb3NzaWJseSBlZmZpY2llbnQuXG5cblRoZSBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgZnVuY3Rpb24gbG9va3MgbGlrZSBpdCBoYXMgYWxzbyBiZWVuIG1vZGlmaWVkLiBUaGVyZSBpcyBub3cgbW9yZSByaWdvcm91cyBlcnJvciBjaGVja2luZzsgc3BlY2lmaWNhbGx5LCBpdCBmaXJzdCB0cmllcyB0byBjb25zdW1lIGNhcGFjaXR5IGFuZCB0aGVuLCBvbmx5IGlmIHRoYXQgaXMgc3VjY2Vzc2Z1bCwgYXR0ZW1wdHMgdG8gcHVzaCB0aGUgc3RyaW5nLiBJZiBwdXNoaW5nIGZhaWxzLCBjYXBhY2l0eSBpcyByZWxlYXNlZCwgbWFraW5nIHN1cmUgdGhhdCB0aGVyZSBpcyBubyByZXNvdXJjZSBsZWFrLiBUaGlzIHNob3VsZCBtYWtlIHRoZSBzeXN0ZW0gbW9yZSByZXNpbGllbnQuXG5cbk5vdywgYGJwZl9zdHJlYW1fcmVhZGAsIHRoaXMgb25lJ3MgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQgZGVhbHMgd2l0aCB1c2VyLXNwYWNlIGRhdGEgY29weWluZy4gVGhlIG9yaWdpbmFsIGNvZGUgaGFzIHNvbWUgaXNzdWVzLCBidXQgdGhpcyBsb29rcyBsaWtlIGFuIGltcHJvdmVtZW50LiBJdCBoYW5kbGVzIHBhcnRpYWwgY29weSBzdWNjZXNzZXMgZnJvbSBgY29weV90b191c2VyYCBtdWNoIGJldHRlci4gSXQgcHJlc2VydmVzIGFueSBieXRlcyB0aGF0ICpkaWQqIGNvcHkgYW5kIG5vdyBjb3JyZWN0bHkgc2V0cyBgLUVGQVVMVGAgb25seSBpZiAqbm8qIGJ5dGVzIHdlcmUgY29waWVkLiBUaGlzIGlzIG11Y2ggbW9yZSByb2J1c3QuXG5cbkkgc2VlIGEgY2hhbmdlIGluIGBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrYCwgYW5kIG5vdyBpdCBpbmNsdWRlcyBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBmb3JtYXR0ZWQgb3V0cHV0IGRvZXNuJ3QgZXhjZWVkIHRoZSBidWZmZXIgc2l6ZSBiZWZvcmUgYXR0ZW1wdGluZyB0byBjb25zdW1lIGNhcGFjaXR5LiBJZiB0aGUgYnVmZmVyIGlzIHRydW5jYXRlZCwgaXQgcmV0dXJucyBgLUUyQklHYCBpbnN0ZWFkIG9mIGAtRU5PTUVNYC4gSXQgc2VlbXMgdGhleSdyZSBhdm9pZGluZyB0aGUgXCJjYXBhY2l0eSBjaGFyZ2VcIiBpbiB0aGUgdHJ1bmNhdGlvbiBjYXNlLiBWZXJ5IGltcG9ydGFudC5cblxuQWxzbywgaXQgbG9va3MgbGlrZSBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgIGlzIGdldHRpbmcgc2ltaWxhciBmaXhlcyB0byBwcmV2ZW50IGVycm9ycy4gTm93LCB0aGUgbGVuZ3RoIGlzIHNldCB0byBgbGVuID0gdnNjbnByaW50ZiguLi4pYCBhbmQgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGlzIGFkZGVkIGlmIHB1c2hpbmcgdGhlIHN0cmluZyBpcyBzdWNjZXNzZnVsLiBJdCBsb29rcyBsaWtlIHRoZSBzYW1lIGltcHJvdmVtZW50LlxuXG5Hb2luZyBiYWNrIHRvIGBicGZfc3RyZWFtX3JlYWRgLi4uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBhcmVuJ3QgcG90ZW50aWFsbHkgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgd2hlbiBjb3B5aW5nIHRvIHVzZXIgc3BhY2UuIEl0IHJlbGllcyBvbiBgZWxlbS1cdTAwM2VzdHJgIGFuZCB0aGF0J3MgcG9wdWxhdGVkIGJ5IGBfX2JwZl9zdHJlYW1fcHVzaF9zdHJgLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgX19icGZfc3RyZWFtX3B1c2hfc3RyYCBhbmQgYGJwZl9zdHJlYW1fZWxlbV9hbGxvY2AgdG8gdmVyaWZ5IHRoYXQgYGVsZW0tXHUwMDNlc3RyYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gSSdsbCBzZWFyY2ggZm9yIHRob3NlIGZ1bmN0aW9uIGNhbGxzIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg2NywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NjowMi4yODIwODQ3NDJaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjM4ODg3OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19icGZfc3RyZWFtX3B1c2hfc3RyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RyZWFtLmM9MTg9c3RhdGljIHN0cnVjdCBicGZfc3RyZWFtX2VsZW0gKmJwZl9zdHJlYW1fZWxlbV9hbGxvYyhpbnQgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy00MS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjQyOnN0YXRpYyBpbnQgX19icGZfc3RyZWFtX3B1c2hfc3RyKHN0cnVjdCBsbGlzdF9oZWFkICpsb2csIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbilcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTQzLXtcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmM9NzY9c3RhdGljIGludCBicGZfc3RyZWFtX3B1c2hfc3RyKHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbilcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtODItXFxua2VybmVsL2JwZi9zdHJlYW0uYzo4MzpcXHRyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXFx1MDAyNnN0cmVhbS1cXHUwMDNlbG9nLCBzdHIsIGxlbik7XFxua2VybmVsL2JwZi9zdHJlYW0uYy04NC1cXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYz0zMjI9aW50IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTMzNC1cXHQvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi9cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjMzNTpcXHRyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXFx1MDAyNnNzLVxcdTAwM2Vsb2csIGJ1Zi1cXHUwMDNlYnVmLCBsZW4pO1xcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzM2LVxcdGlmICghcmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NjowNC4yMDU5Nzg5NDVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg5MDEzMTA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqQW5hbHl6aW5nIGBfX2JwZl9zdHJlYW1fcHVzaF9zdHJgIGFuZCBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYCoqXG5cbkFscmlnaHQsIG15IG1pbmQncyBvbiB0aG9zZSB0d28gQlBGIGZ1bmN0aW9uczogYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgYW5kIGBicGZfc3RyZWFtX2VsZW1fYWxsb2NgLiBJbW1lZGlhdGVseSwgSSdtIGFzc2Vzc2luZyB0aGVpciByb2xlcyBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIGBicGZfc3RyZWFtX2VsZW1fYWxsb2NgIGlzLCBvZiBjb3Vyc2UsIHRoZSBmdW5kYW1lbnRhbCBtZW1vcnkgYWxsb2NhdG9yIGZvciBzdHJlYW0gZWxlbWVudHMgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gTm8gc3VycHJpc2VzIHRoZXJlOyBpdCdzIHRoZSBmb3VuZGF0aW9uLiBJdCdzIHRoZSBidWlsZGluZyBibG9jaywgZXNzZW50aWFsbHkuIEknbSB3b25kZXJpbmcgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIElzIGl0IHVzaW5nIHRoZSBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGFsbG9jYXRvcnMgdW5kZXIgdGhlIGhvb2QsIG9yIGRvZXMgaXQgaGF2ZSBhIGN1c3RvbSBzdHJhdGVneSB0YWlsb3JlZCBmb3IgQlBGJ3Mgc3BlY2lmaWMgcmVxdWlyZW1lbnRzPyBQZXJmb3JtYW5jZSBhbmQgZnJhZ21lbnRhdGlvbiBhcmUga2V5IGNvbnNpZGVyYXRpb25zIGluIHRoaXMgY29udGV4dCwgb2YgY291cnNlLiBXZSBjYW4gZXhwZWN0IHRoYXQgaXQgdHJpZXMgdG8gbWFrZSB2ZXJ5IGVmZmljaWVudCB1c2Ugb2YgdGhlIGxpbWl0ZWQgQlBGIG1lbW9yeSBzcGFjZS5cblxuTm93LCBgX19icGZfc3RyZWFtX3B1c2hfc3RyYC4gVGhlIGRvdWJsZSB1bmRlcnNjb3JlIHByZWZpeCBpcyBhIGNsdWUuLi4gaXQgc3VnZ2VzdHMgdGhpcyBpcyBhbiBpbnRlcm5hbCBvciBcInVuc2FmZVwiIGZ1bmN0aW9uLCBwcm9iYWJseSBub3Qgc29tZXRoaW5nIGEgQlBGIHByb2dyYW0gd291bGQgZGlyZWN0bHkgY2FsbCBpbiBhIHVzZXItc3BhY2UgY29udGV4dC4gSXQgaXMgdmVyeSBsaWtlbHkgYSBsb3dlci1sZXZlbCBmdW5jdGlvbi4gSXQncyBtb3N0IGxpa2VseSBkZXNpZ25lZCB0byBwdXNoIGEgc3RyaW5nIG9udG8gYSBzdHJlYW0uIEknbSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBkZXRhaWxzLiBJcyBpdCBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcsIG9yIGRvZXMgaXQgaW5jb3Jwb3JhdGUgbGVuZ3RoIG1ldGFkYXRhPyBXaGF0J3MgdGhlIHN0cmF0ZWd5IGZvciBoYW5kbGluZyBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cz8gRXJyb3IgaGFuZGxpbmcgaXMgY3JpdGljYWwgaGVyZS4gSXQgcHJvYmFibHkgY2hlY2tzIGF2YWlsYWJsZSBzcGFjZS4gRG9lcyBpdCBhY2NvdW50IGZvciBwb3NzaWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBmcm9tIGBicGZfc3RyZWFtX2VsZW1fYWxsb2NgPyBBbmQgaG93IGFyZSB0aGUgc3RyZWFtIGVsZW1lbnRzIHN0cnVjdHVyZWQ/IEFyZSB0aGVyZSBhbnkgY2xldmVyIG9wdGltaXphdGlvbnMgbGlrZSBjb3B5LW9uLXdyaXRlIG9yIHNpbWlsYXIgdGVjaG5pcXVlcyB0byByZWR1Y2Ugb3ZlcmhlYWQ/IEknbGwgcHJvYmFibHkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGhhbmRsZSBwb3RlbnRpYWwgaXNzdWVzLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgaGFuZGxlcyB0aGVzZSBkZXRhaWxzIHdoZW4gaXQgaXMgdGltZSB0byBjaGVjayB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEyMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ2OjEwLjA5NjExMzZaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zdHJlYW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxODpcXHRzdGF0aWMgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqYnBmX3N0cmVhbV9lbGVtX2FsbG9jKGludCBsZW4pXFxuICAxOTpcXHR7XFxuICAyMDpcXHRcXHRjb25zdCBpbnQgbWF4X2xlbiA9IEFSUkFZX1NJWkUoKHN0cnVjdCBicGZfYnByaW50Zl9idWZmZXJzKXt9LmJ1Zik7XFxuICAyMTpcXHRcXHRzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICplbGVtO1xcbiAgMjI6XFx0XFx0c2l6ZV90IGFsbG9jX3NpemU7XFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdC8qXFxuICAyNTpcXHRcXHQgKiBMZW5ndGggaXMgdGhlIHBheWxvYWQgcHVzaGVkIGludG8gdGhlIHN0cmVhbSwgZXhjbHVkaW5nIHRoZVxcbiAgMjY6XFx0XFx0ICogdHJhaWxpbmcgTlVMIG9mIHRoZSBicHJpbnRmIGJ1ZmZlci4gUmVqZWN0IGFueXRoaW5nIHRoYXQgY2Fubm90XFxuICAyNzpcXHRcXHQgKiBmaXQgd2l0aG91dCBjb3B5aW5nIHRoYXQgTlVMIGludG8gdGhlIHN0cmVhbSBlbGVtZW50LlxcbiAgMjg6XFx0XFx0ICovXFxuICAyOTpcXHRcXHRpZiAobGVuIFxcdTAwM2MgMCB8fCBsZW4gXFx1MDAzZT0gbWF4X2xlbilcXG4gIDMwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHRhbGxvY19zaXplID0gb2Zmc2V0b2Yoc3RydWN0IGJwZl9zdHJlYW1fZWxlbSwgc3RyW2xlbl0pO1xcbiAgMzM6XFx0XFx0ZWxlbSA9IGttYWxsb2Nfbm9sb2NrKGFsbG9jX3NpemUsIF9fR0ZQX1pFUk8sIC0xKTtcXG4gIDM0OlxcdFxcdGlmICghZWxlbSlcXG4gIDM1OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHRicGZfc3RyZWFtX2VsZW1faW5pdChlbGVtLCBsZW4pO1xcbiAgMzg6XFx0XFxuICAzOTpcXHRcXHRyZXR1cm4gZWxlbTtcXG4gIDQwOlxcdH1cXG4gIDQxOlxcdFxcbiAgNDI6XFx0c3RhdGljIGludCBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGxsaXN0X2hlYWQgKmxvZywgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxcbiAgNDM6XFx0e1xcbiAgNDQ6XFx0XFx0c3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqZWxlbSA9IE5VTEw7XFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdC8qXFxuICA0NzpcXHRcXHQgKiBBbGxvY2F0ZSBhIGJwZl9wcm9nX3N0cmVhbV9lbGVtIGFuZCBwdXNoIGl0IHRvIHRoZSBicGZfcHJvZ19zdHJlYW1cXG4gIDQ4OlxcdFxcdCAqIGxvZywgZWxlbWVudHMgd2lsbCBiZSBwb3BwZWQgYXQgb25jZSBhbmQgcmV2ZXJzZWQgdG8gcHJpbnQgdGhlIGxvZy5cXG4gIDQ5OlxcdFxcdCAqL1xcbiAgNTA6XFx0XFx0ZWxlbSA9IGJwZl9zdHJlYW1fZWxlbV9hbGxvYyhsZW4pO1xcbiAgNTE6XFx0XFx0aWYgKCFlbGVtKVxcbiAgNTI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuICA1MzpcXHRcXG4gIDU0OlxcdFxcdG1lbWNweShlbGVtLVxcdTAwM2VzdHIsIHN0ciwgbGVuKTtcXG4gIDU1OlxcdFxcdGxsaXN0X2FkZChcXHUwMDI2ZWxlbS1cXHUwMDNlbm9kZSwgbG9nKTtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0cmV0dXJuIDA7XFxuICA1ODpcXHR9XFxuICA1OTpcXHRcXG4gIDYwOlxcdHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9jb25zdW1lX2NhcGFjaXR5KHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIGludCBsZW4pXFxuICA2MTpcXHR7XFxuICA2MjpcXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNnN0cmVhbS1cXHUwMDNlY2FwYWNpdHkpIFxcdTAwM2U9IEJQRl9TVFJFQU1fTUFYX0NBUEFDSVRZKVxcbiAgNjM6XFx0XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuICA2NDpcXHRcXHRpZiAoYXRvbWljX2FkZF9yZXR1cm4obGVuLCBcXHUwMDI2c3RyZWFtLVxcdTAwM2VjYXBhY2l0eSkgXFx1MDAzZT0gQlBGX1NUUkVBTV9NQVhfQ0FQQUNJVFkpIHtcXG4gIDY1OlxcdFxcdFxcdGF0b21pY19zdWIobGVuLCBcXHUwMDI2c3RyZWFtLVxcdTAwM2VjYXBhY2l0eSk7XFxuICA2NjpcXHRcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4gIDY3OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDY6MTAuMDk2MTk4ODJaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY1Mzk0MTQwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgQlBGIFN0cmVhbSBNZW1vcnkgTWFuYWdlbWVudCBhbmQgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaXZpbmcgaW50byB0aGlzIEJQRiBzdHJlYW0gY29kZSwgYW5kIGl0IHNlZW1zIGxpa2Ugd2UncmUgbG9va2luZyBhdCBhIHNlcmllcyBvZiBpbnRlcmVzdGluZywgYW5kIHBvdGVudGlhbGx5IHRyaWNreSwgaW50ZXJhY3Rpb25zLiAgTGV0J3MgYnJlYWsgZG93biBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbkZpcnN0bHksIHRoZSBtb3N0IGJhc2ljIHBvaW50OiBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYCB1c2VzIGBrbWFsbG9jX25vbG9ja2Agd2l0aCBgX19HRlBfWkVST2AuIFRoaXMgaXMgZ29vZC4gSXQgbWVhbnMgdGhhdCBhbnkgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIHN0cmVhbSBlbGVtZW50cyBpcyBndWFyYW50ZWVkIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQuICBUaGlzICpzaG91bGQqIHByZXZlbnQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiAgVGhlIGBtZW1jcHlgIGNhbGwgdGhlbiBjb3BpZXMgdGhlIHN0cmluZyBkYXRhIGludG8gdGhpcyB6ZXJvZWQgbWVtb3J5LlxuXG5UaGUgcGF0Y2gncyBjaGFuZ2Ugb2YgdGhlIGxlbmd0aCBjaGVjayB0byBgbGVuIFx1MDAzZT0gbWF4X2xlbmAgY2F0Y2hlcyBhIHN1YnRsZSBib3VuZGFyeSBjb25kaXRpb24uIEluIGBicGZfc3RyZWFtX3JlYWRgIGFmdGVyIHRoZSBjb3B5IGhhcyBiZWVuIHBlcmZvcm1lZCwgYmVjYXVzZSB3ZSBhcmUgc3RhcnRpbmcgd2l0aCBgX19HRlBfWkVST2AsIHdlIGNhbiBiZSBjb25maWRlbnQgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UuXG5cbk5vdywgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBpcyBpbiBgYnBmX3N0cmVhbV92cHJpbnRrYCwgYW5kIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgYW5kIHRoZSBhc3NvY2lhdGVkIGZ1bmN0aW9ucy4gIGBic3RyX3ByaW50ZmAgYW5kIGB2c25wcmludGZgIGFyZSBjZW50cmFsIHRvIHRoZXNlIGZ1bmN0aW9ucy4gSXQncyB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIHRoZXNlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjb25jZXJuaW5nLiBUaGV5IGNhbiByZXR1cm4gYSB2YWx1ZSBncmVhdGVyIHRoYW4gdGhlIGJ1ZmZlciBzaXplIChgTUFYX0JQUklOVEZfQlVGYCBvciBgQVJSQVlfU0laRShidWYtXHUwMDNlYnVmKWApLCBpbmRpY2F0aW5nIHRydW5jYXRpb24uICBQcmV2aW91c2x5LCB0aGlzIGxlZCB0byBwb3RlbnRpYWwgaXNzdWVzLlxuXG5JbiB0aGUgY2FzZSBvZiBgYnN0cl9wcmludGZgLCBpZiB0aGUgcmV0dXJuIHZhbHVlIChgcmV0YCkgd2FzIGdyZWF0ZXIgdGhhbiBgTUFYX0JQUklOVEZfQlVGYCwgd2UgaGFkIGFuIGlzc3VlOiB0aGUgY29kZSBjb3VsZCB0cnkgdG8gYWxsb2NhdGUgYSBzdHJlYW0gZWxlbWVudCB3aXRoIGEgc2l6ZSAobGVuKSBlcXVhbCB0byB0aGUgdHJ1bmNhdGVkIGxlbmd0aC4gVGhpcyBjb3VsZCByZXN1bHQgaW4gbGVha2luZyBtZW1vcnksIGlmIHRoZSBjaGVjayBgbGVuIFx1MDAzZSBtYXhfbGVuYCB3YXMgYnlwYXNzZWQuIFRoaXMgaGFzIGJlZW4gYWRkcmVzc2VkIGFuZCBmaXhlZC4gQWxzbyB0aGUgcGF0Y2ggaXMgcHJldmVudGluZyBhIGNhcGFjaXR5IGxlYWsgYXMgbm93IGlmIHRoZSBgX19icGZfc3RyZWFtX3B1c2hfc3RyYCByZXR1cm5zIGFuIGVycm9yLCB0aGUgY2FwYWNpdHkgdGhhdCB3YXMgY29uc3VtZWQgaXMgcmVsZWFzZWQuIEZ1cnRoZXJtb3JlLCB0aGUgbmV3IGNoZWNrIGBpZiAocmV0IFx1MDAzZT0gTUFYX0JQUklOVEZfQlVGKWAgaW4gYGJwZl9zdHJlYW1fdnByaW50a2AgYWRkcmVzc2VzIHRoaXMgYnkgcmV0dXJuaW5nIC1FMkJJRywgcHJldmVudGluZyBhbGxvY2F0aW9uIGFuZCBwdXNoaW5nIG9uIHRydW5jYXRpb24uXG5cblNpbWlsYXIgbG9naWMgYXBwbGllcyB0byBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgLCB3aGVyZSB0aGUgc2FtZSBsb2dpYyBvZiBgdnNucHJpbnRmYCwgaWYgdGhlIHJldHVybiB2YWx1ZSAobGVuKSBpcyBncmVhdGVyIHRoYW4gdGhlIGFycmF5IHNpemUgKGBBUlJBWV9TSVpFKGJ1Zi1cdTAwM2VidWYpYCkgYW5kIHRydW5jYXRpb24gb2NjdXJzLCBjb3VsZCBsZWFkIHRvIGlzc3Vlcy4gSG93ZXZlciwgdGhlIGNoZWNrIGBpZiAobGVuIFx1MDAzZSBtYXhfbGVuKWAgd2lsbCBub3QgYWxsb3cgdGhpcy4gVGhlIGB2c25wcmludGZgIGZ1bmN0aW9uIGRvZXMgd3JpdGUgdXAgdG8gdGhlIGZ1bGwgYG1heF9sZW5gLCBidXQgZG9lcyBpdCBpbml0aWFsaXplIHRoZSB3aG9sZSBidWZmZXI/IFRoZSBidWZmZXIgd2lsbCBiZSBpbml0aWFsaXplZC5cblxuTGFzdGx5LCB0aGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gYGJwZl9zdHJlYW1fcmVhZGAgZm9jdXMgb24gdGhlIHNlbWFudGljcyBvZiBgY29weV90b191c2VyYCwgYW5kIGVuc3VyaW5nIHRoYXQgd2UgZG8gbm90IGxvc2UgYW55IHN1Y2Nlc3NmdWxseSBjb3BpZWQgYnl0ZXMgaW4gY2FzZSBvZiBhbiBlcnJvci4gVGhpcyBpcyBhIHN1YnRsZSBpbXByb3ZlbWVudCBidXQgdW5yZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuSW4gc3VtbWFyeSwgdGhlIGNydWNpYWwgcG9pbnQgaXMgbWFraW5nIHN1cmUgd2UgaGFuZGxlIHRydW5jYXRpb24gY29ycmVjdGx5LiBXaXRoIHRoZSBuZXcgY2hhbmdlcywgaXQgYXBwZWFycyB0aGUgdHJ1bmNhdGlvbiBpcyBiZWluZyBoYW5kbGVkIGNvcnJlY3RseSBzbyB0aGF0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIG5vdCBjb3BpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMjAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDY6MzYuNjM1NjE2Mjc3WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg1OTM0ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBic3RyX3ByaW50ZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3N0cmluZy5oPTMzOT1pbnQgdmJpbl9wcmludGYodTMyICpiaW5fYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpO1xcbmluY2x1ZGUvbGludXgvc3RyaW5nLmg6MzQwOmludCBic3RyX3ByaW50ZihjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmbXQsIGNvbnN0IHUzMiAqYmluX2J1Zik7XFxuaW5jbHVkZS9saW51eC9zdHJpbmcuaC0zNDEtI2VuZGlmXFxuLS1cXG5saWIvdnNwcmludGYuYz0zMjU4PUVYUE9SVF9TWU1CT0xfR1BMKHZiaW5fcHJpbnRmKTtcXG4tLVxcbmxpYi92c3ByaW50Zi5jLTMyODEtICovXFxubGliL3ZzcHJpbnRmLmM6MzI4MjppbnQgYnN0cl9wcmludGYoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10X3N0ciwgY29uc3QgdTMyICpiaW5fYnVmKVxcbmxpYi92c3ByaW50Zi5jLTMyODMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NjozOC40MjE1NTcwMTNaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1OTYzNjMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgYnN0cl9wcmludGZgKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IHRoZSBgYnN0cl9wcmludGZgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzIG9mIHRoaXMgcGFydGljdWxhciBzdHJpbmcgZm9ybWF0dGluZyBmdW5jdGlvbiwgZXNwZWNpYWxseSBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggYGJzdHJgcyAocHJlc3VtYWJseSBhIGN1c3RvbSBzdHJpbmcgdHlwZSkuIEknbGwgd2FudCB0byBxdWlja2x5IGxvb2sgZm9yIGFueSBvYnZpb3VzIHZ1bG5lcmFiaWxpdGllcywgbGlrZSBmb3JtYXQgc3RyaW5nIGJ1Z3Mgb3IgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3MgdGhhdCBtaWdodCBiZSBvdmVybG9va2VkIHdpdGggYSBuYWl2ZSBpbXBsZW1lbnRhdGlvbi4gVW5kZXJzdGFuZGluZyBob3cgdGhlIHZhcmlhZGljIGFyZ3VtZW50cyBhcmUgaGFuZGxlZCB3aXRoIHRoZSBgYnN0cmAgc3RydWN0dXJlIGlzIGtleS4gSXMgaXQganVzdCBhIHdyYXBwZXIgYXJvdW5kIGBwcmludGZgLCBvciBpcyB0aGVyZSBjbGV2ZXIgbG9naWMgdG8gYXZvaWQgY3JlYXRpbmcgdGVtcG9yYXJ5IHN0cmluZ3M/IEkgc2hvdWxkIGxvb2sgZm9yIGRldGFpbHMgbGlrZSBob3cgdGhlIGxlbmd0aCBpcyBoYW5kbGVkIGFuZCB3aGV0aGVyIHRoZXkncmUgYWxsb2NhdGluZyBhbmQgZGVhbGxvY2F0aW5nIG1lbW9yeSBwcm9wZXJseSB3aXRoaW4gdGhlIGJzdHIgZnJhbWV3b3JrLiBBbmQgaG93IGRvIGVycm9yIGNvbmRpdGlvbnMgKGxpa2UgaW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgdGhlIGZvcm1hdHRlZCBzdHJpbmcpIGdldCBhZGRyZXNzZWQ/IEknbSBob3BpbmcgZm9yIHdlbGwtZGVmaW5lZCBiZWhhdmlvcnMuIExldCdzIHNlZSBob3cgdGhleSBoYW5kbGUgZWRnZSBjYXNlcyB0b28uIEFyZSB0aGV5IHN1cHBvcnRpbmcgYWxsIHRoZSBzdGFuZGFyZCBwcmludGYgZm9ybWF0IHNwZWNpZmllcnM/IEFuZCBob3cgZG9lcyBpdCBoYW5kbGUgbG9jYWxlLXNwZWNpZmljIGZvcm1hdHRpbmc/IEl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGlzIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBpdC4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEzNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ2OjQyLjA4MTE5NjIzNVoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL3ZzcHJpbnRmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzI4MixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzI4MjpcXHRpbnQgYnN0cl9wcmludGYoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10X3N0ciwgY29uc3QgdTMyICpiaW5fYnVmKVxcbjMyODM6XFx0e1xcbjMyODQ6XFx0XFx0c3RydWN0IGZtdCBmbXQgPSB7XFxuMzI4NTpcXHRcXHRcXHQuc3RyID0gZm10X3N0cixcXG4zMjg2OlxcdFxcdFxcdC5zdGF0ZSA9IEZPUk1BVF9TVEFURV9OT05FLFxcbjMyODc6XFx0XFx0fTtcXG4zMjg4OlxcdFxcdHN0cnVjdCBwcmludGZfc3BlYyBzcGVjID0gezB9O1xcbjMyODk6XFx0XFx0Y2hhciAqc3RyLCAqZW5kO1xcbjMyOTA6XFx0XFx0Y29uc3QgY2hhciAqYXJncyA9IChjb25zdCBjaGFyICopYmluX2J1ZjtcXG4zMjkxOlxcdFxcbjMyOTI6XFx0XFx0aWYgKFdBUk5fT05fT05DRShzaXplIFxcdTAwM2UgSU5UX01BWCkpXFxuMzI5MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4zMjk0OlxcdFxcbjMyOTU6XFx0XFx0c3RyID0gYnVmO1xcbjMyOTY6XFx0XFx0ZW5kID0gYnVmICsgc2l6ZTtcXG4zMjk3OlxcdFxcbjMyOTg6XFx0I2RlZmluZSBnZXRfYXJnKHR5cGUpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjMyOTk6XFx0KHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuMzMwMDpcXHRcXHR0eXBlb2YodHlwZSkgdmFsdWU7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjMzMDE6XFx0XFx0aWYgKHNpemVvZih0eXBlKSA9PSA4KSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjMzMDI6XFx0XFx0XFx0YXJncyA9IFBUUl9BTElHTihhcmdzLCBzaXplb2YodTMyKSk7XFx0XFx0XFx0XFxcXFxcbjMzMDM6XFx0XFx0XFx0Kih1MzIgKilcXHUwMDI2dmFsdWUgPSAqKHUzMiAqKWFyZ3M7XFx0XFx0XFx0XFx0XFxcXFxcbjMzMDQ6XFx0XFx0XFx0KigodTMyICopXFx1MDAyNnZhbHVlICsgMSkgPSAqKHUzMiAqKShhcmdzICsgNCk7XFx0XFx0XFxcXFxcbjMzMDU6XFx0XFx0fSBlbHNlIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuMzMwNjpcXHRcXHRcXHRhcmdzID0gUFRSX0FMSUdOKGFyZ3MsIHNpemVvZih0eXBlKSk7XFx0XFx0XFx0XFxcXFxcbjMzMDc6XFx0XFx0XFx0dmFsdWUgPSAqKHR5cGVvZih0eXBlKSAqKWFyZ3M7XFx0XFx0XFx0XFx0XFxcXFxcbjMzMDg6XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4zMzA5OlxcdFxcdGFyZ3MgKz0gc2l6ZW9mKHR5cGUpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4zMzEwOlxcdFxcdHZhbHVlO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4zMzExOlxcdH0pXFxuMzMxMjpcXHRcXG4zMzEzOlxcdFxcdC8qIE1ha2Ugc3VyZSBlbmQgaXMgYWx3YXlzIFxcdTAwM2U9IGJ1ZiAqL1xcbjMzMTQ6XFx0XFx0aWYgKGVuZCBcXHUwMDNjIGJ1Zikge1xcbjMzMTU6XFx0XFx0XFx0ZW5kID0gKCh2b2lkICopLTEpO1xcbjMzMTY6XFx0XFx0XFx0c2l6ZSA9IGVuZCAtIGJ1ZjtcXG4zMzE3OlxcdFxcdH1cXG4zMzE4OlxcdFxcbjMzMTk6XFx0XFx0d2hpbGUgKCpmbXQuc3RyKSB7XFxuMzMyMDpcXHRcXHRcXHRjb25zdCBjaGFyICpvbGRfZm10ID0gZm10LnN0cjtcXG4zMzIxOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbG9uZyBudW07XFxuMzMyMjpcXHRcXG4zMzIzOlxcdFxcdFxcdGZtdCA9IGZvcm1hdF9kZWNvZGUoZm10LCBcXHUwMDI2c3BlYyk7XFxuMzMyNDpcXHRcXHRcXHRzd2l0Y2ggKGZtdC5zdGF0ZSkge1xcbjMzMjU6XFx0XFx0XFx0Y2FzZSBGT1JNQVRfU1RBVEVfTk9ORToge1xcbjMzMjY6XFx0XFx0XFx0XFx0aW50IHJlYWQgPSBmbXQuc3RyIC0gb2xkX2ZtdDtcXG4zMzI3OlxcdFxcdFxcdFxcdGlmIChzdHIgXFx1MDAzYyBlbmQpIHtcXG4zMzI4OlxcdFxcdFxcdFxcdFxcdGludCBjb3B5ID0gcmVhZDtcXG4zMzI5OlxcdFxcdFxcdFxcdFxcdGlmIChjb3B5IFxcdTAwM2UgZW5kIC0gc3RyKVxcbjMzMzA6XFx0XFx0XFx0XFx0XFx0XFx0Y29weSA9IGVuZCAtIHN0cjtcXG4zMzMxOlxcdFxcdFxcdFxcdFxcdG1lbWNweShzdHIsIG9sZF9mbXQsIGNvcHkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0Njo0Mi4wODE0MTg5MTVaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk0Nzg5NTY2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgQlBGIFN0cmVhbSBQYXRjaDogTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIHNvbWUga2V5IGFyZWFzIGluIHRoZSBCUEYgc3RyZWFtIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGZvcm1hdHRpbmcgb3V0cHV0IHdpdGggYGJzdHJfcHJpbnRmYCBhbmQgYHZzY25wcmludGZgLCBhbGxvY2F0aW5nIHN0cmVhbSBlbGVtZW50cywgYW5kIHJlYWRpbmcgZGF0YSBmcm9tIHRob3NlIGVsZW1lbnRzLiBNeSBpbml0aWFsIGNvbmNlcm4gd2FzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZml4IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQWZ0ZXIgY2FyZWZ1bCByZXZpZXcsIEknbSBjb25maWRlbnQgdGhhdCdzIG5vdCB0aGUgY2FzZS5cblxuVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gc3RlbSBmcm9tIGhvdyB0aGUgc3RyZWFtJ3MgY2FwYWNpdHkgaXMgbWFuYWdlZCBhbmQgaG93IHN0cmluZyBsZW5ndGhzIGFyZSBoYW5kbGVkIGluIHJlbGF0aW9uIHRvIGJ1ZmZlciBzaXplcy4gVGhlIHBhdGNoIGFkanVzdHMgdGhlIGNvbmRpdGlvbiBgbGVuIFx1MDAzYyAwIHx8IGxlbiBcdTAwM2UgbWF4X2xlbmAgdG8gYGxlbiBcdTAwM2MgMCB8fCBsZW4gXHUwMDNlPSBtYXhfbGVuYCBpbiBzZXZlcmFsIHBsYWNlcy4gVGhpcyBjaGFuZ2UsIGFsb25nIHdpdGggdGhlIGNoYW5nZXMgdG8gYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCBhbmQgYGJwZl9zdHJlYW1fcmVhZGAgYXJlIHByaW1hcmlseSBkZWFsaW5nIHdpdGggY29ybmVyIGNhc2VzIHdoZXJlIHRoZSBmb3JtYXR0ZWQgc3RyaW5nIGNvdWxkIGJlIHRydW5jYXRlZCwgb3ZlcnNpemVkLCBvciBwYXJ0aWFsbHkgY29waWVkIHRvIHVzZXIgc3BhY2UuIEl0IGFpbXMgdG8gcHJldmVudCBhIHJlc291cmNlIGxlYWsgYW5kIGF2b2lkIHNlbmRpbmcgYSBOVUwgYnl0ZSB0byB1c2VyIHNwYWNlLlxuXG5TcGVjaWZpY2FsbHksIEnigJl2ZSBjb25zaWRlcmVkIHRoZXNlIHBvaW50czpcblxuKiAgICoqQ2FwYWNpdHkgTWFuYWdlbWVudDoqKiBUaGUgcGF0Y2ggbm93IGNvcnJlY3RseSBoYW5kbGVzIGNhc2VzIHdoZXJlIGEgZm9ybWF0dGVkIHN0cmluZyBpcyB0b28gbGFyZ2UgdG8gZml0IGluIHRoZSBidWZmZXIsIGVpdGhlciBieSByZWplY3RpbmcgdGhlIHN0cmluZyBvciByZWxlYXNpbmcgdGhlIGNvbnN1bWVkIGNhcGFjaXR5LiBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSByaXNrIG9mIGluY29ycmVjdGx5IGluY3JlbWVudGluZyB0aGUgc3RyZWFtJ3MgbGVuZ3RoIHdpdGhvdXQgYW4gYWN0dWFsIHB1c2guIFRoZSBwYXRjaCBhbHNvIGZpeGVkIGEgY2FwYWNpdHkgbGVhayBpbiB0aGUgb3ZlcmZsb3cgY2FzZS5cbiogICAqKk5VTCBCeXRlIEluY2x1c2lvbjoqKiBUaGUgb2xkIGNvZGUgd2FzIGluYWR2ZXJ0ZW50bHkgY29weWluZyB0aGUgdHJhaWxpbmcgTlVMIGJ5dGUgZnJvbSB0aGUgZm9ybWF0dGluZyBidWZmZXIgaW50byB0aGUgc3RyZWFtIGVsZW1lbnQgaW4gdGhlIGVkZ2UgY2FzZSB3aGVyZSB0aGUgbGVuZ3RoIHdhcyB0aGUgYnVmZmVyJ3MgZnVsbCBsZW5ndGguIFRoaXMgcGF0Y2ggZWxpbWluYXRlcyB0aGlzIGFuZCBwcmV2ZW50cyBhIHRyYWlsaW5nIE5VTCBmcm9tIHRoZSBzdHJlYW0uXG4qICAgKipFcnJvciBIYW5kbGluZyBpbiBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgOioqIGB2c25wcmludGZgIG5vdyByZXR1cm5zIGl0cyBjb3JyZWN0IGxlbmd0aCBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4gd2hpY2ggY291bGQgYmUgdmVyeSBsYXJnZSBpZiB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgZm9ybWF0dGluZyBzdHJpbmcuIFRoZSBwYXRjaCBub3cgY29ycmVjdGx5IGhhbmRsZXMgZmFpbHVyZSBzY2VuYXJpb3MgaW4gYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAsIGVuc3VyaW5nIHRoYXQgYHNzLVx1MDAzZWxlbmAgaXMgb25seSBpbmNyZW1lbnRlZCBvbiBzdWNjZXNzZnVsIHB1c2ggYW5kIGRvZXNuJ3QgbGVhayBjYXBhY2l0eS5cbiogICAqKlBhcnRpYWwgYGNvcHlfdG9fdXNlcmAgRmF1bHRzOioqIFRoZSBgYnBmX3N0cmVhbV9yZWFkYCBmdW5jdGlvbiB3YXMgbm90IGNvcnJlY3RseSBhY2NvdW50aW5nIGZvciBwYXJ0aWFsbHkgY29waWVkIGJ5dGVzIGluIGNhc2Ugb2YgYSBmYXVsdC4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIHBhcnRpYWxseSB3cml0dGVuIGJ5dGVzLlxuXG5JbiBhbGwgb2YgdGhlc2Ugc2NlbmFyaW9zLCB0aGUgbWVtb3J5IGlzIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5LiBUaGUgYWxsb2NhdGlvbiBvZiBzdHJlYW0gZWxlbWVudHMgdXNpbmcgYGttYWxsb2Nfbm9sb2NrYCB3aXRoIGBfX0dGUF9aRVJPYCBlbnN1cmVzIHRoYXQgbWVtb3J5IGlzIHplcm9lZC4gRnVydGhlciwgd2hlbiBwdXNoaW5nIHN0cmluZ3MgaW50byB0aGUgZWxlbWVudHMsIGBtZW1jcHlgIGlzIHVzZWQgdG8gY29weSBkYXRhIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBmdWxseSBpbml0aWFsaXplZCBieSBlaXRoZXIgYGJzdHJfcHJpbnRmYCBvciBgdnNjbnByaW50ZmAuIFRoZXJlIGFyZSBjaGVja3MgaW4gcGxhY2UgdG8gcHJldmVudCB0aGUgY29weSBvZiB1bmluaXRpYWxpemVkIGRhdGEgaW4gdGhlIHNjZW5hcmlvIG9mIGEgbGFyZ2UgcmV0dXJuIHZhbHVlIGZyb20gYGJzdHJfcHJpbnRmYC4gSSd2ZSBjYXJlZnVsbHkgZ29uZSB0aHJvdWdoIHRoZSB2YXJpb3VzIGNoZWNrcyBhcm91bmQgdGhlIHJldHVybiB2YWx1ZXMgb2YgdGhlc2UgZm9ybWF0dGluZyBmdW5jdGlvbnMgYW5kIHRoZSBzaXplIGNoZWNrcyBiZWZvcmUgbWVtb3J5IGNvcGllczsgdGhleSBhcmUgc3VmZmljaWVudC5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgY2hhbmdlcyBkZWFsIHdpdGggcmVzb3VyY2UgbWFuYWdlbWVudCwgZXJyb3IgaGFuZGxpbmcsIGFuZCBhdm9pZGluZyB0aGUgbGVhay9jb3B5IG9mIHRoZSBudWxsIHRlcm1pbmF0b3IsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEtNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSB0aGUgYnVnIGZpeGVzIGFyZSBtYWlubHkgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMuIFRoZSBpbmNsdWRlZCBzZWxmdGVzdHMgYW5kIGV4aXN0aW5nIGtlcm5lbCB0ZXN0aW5nIHdpbGwgYmUgYWJsZSB0byBjYXRjaCB0aGUgaXNzdWVzIGJlaW5nIHJlc29sdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE3OCwiT3V0cHV0VG9rZW5zIjoyNTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDc6MzEuNTYwMzc5MjI4WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgc2V2ZXJhbCBsb2dpYyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCBidWdzIGluIHRoZSBCUEYgc3RyZWFtIGltcGxlbWVudGF0aW9uOlxcbjEuIEl0IGZpeGVzIGEgY2FwYWNpdHkgbGVhayB3aGVyZSBvdmVyc2l6ZWQgb3IgdHJ1bmNhdGVkIHN0cmluZ3Mgd291bGQgY29uc3VtZSBzdHJlYW0gY2FwYWNpdHkgYnV0IGZhaWwgdG8gYWxsb2NhdGUgYW4gZWxlbWVudCwgcGVybWFuZW50bHkgcmVkdWNpbmcgYXZhaWxhYmxlIGNhcGFjaXR5LlxcbjIuIEl0IHByZXZlbnRzIHRoZSBpbmNsdXNpb24gb2YgdGhlIHRyYWlsaW5nIE5VTCBieXRlIGluIHRoZSBzdHJlYW0gcGF5bG9hZCB3aGVuIHRoZSBmb3JtYXR0ZWQgc3RyaW5nIGV4YWN0bHkgbWF0Y2hlcyB0aGUgYnVmZmVyIHNpemUuXFxuMy4gSXQgZml4ZXMgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCB0byBvbmx5IGluY3JlbWVudCB0aGUgc3RyZWFtIGxlbmd0aCBpZiB0aGUgc3RyaW5nIHdhcyBzdWNjZXNzZnVsbHkgcHVzaGVkLlxcbjQuIEl0IGNvcnJlY3RzIHRoZSBoYW5kbGluZyBvZiBwYXJ0aWFsIGBjb3B5X3RvX3VzZXJgIGZhdWx0cyBpbiBgYnBmX3N0cmVhbV9yZWFkYCB0byBwcm9wZXJseSBhY2NvdW50IGZvciBzdWNjZXNzZnVsbHkgY29waWVkIGJ5dGVzLlxcblxcbk5vbmUgb2YgdGhlc2UgaXNzdWVzIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBzdHJlYW0gZWxlbWVudHMgYXJlIGFsbG9jYXRlZCB3aXRoIGBfX0dGUF9aRVJPYCwgYW5kIHRoZSBzdHJpbmdzIGNvcGllZCBpbnRvIHRoZW0gYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGBic3RyX3ByaW50ZmAgb3IgYHZzY25wcmludGZgLiBUaGUgY29waWVkIGxlbmd0aCBpcyBzdHJpY3RseSBib3VuZGVkIGJ5IHRoZSBpbml0aWFsaXplZCBzdHJpbmcgbGVuZ3RoLiBUaGUgYnVncyBmaXhlZCBhcmUgbG9naWMgZXJyb3JzLCByZXNvdXJjZSBsZWFrcywgYW5kIGluY29ycmVjdCBlcnJvciBoYW5kbGluZywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSB0aGUgYWRkZWQgc2VsZnRlc3RzIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyB0b29scy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHNldmVyYWwgbG9naWMgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgYnVncyBpbiB0aGUgQlBGIHN0cmVhbSBpbXBsZW1lbnRhdGlvbjpcXG4xLiBJdCBmaXhlcyBhIGNhcGFjaXR5IGxlYWsgd2hlcmUgb3ZlcnNpemVkIG9yIHRydW5jYXRlZCBzdHJpbmdzIHdvdWxkIGNvbnN1bWUgc3RyZWFtIGNhcGFjaXR5IGJ1dCBmYWlsIHRvIGFsbG9jYXRlIGFuIGVsZW1lbnQsIHBlcm1hbmVudGx5IHJlZHVjaW5nIGF2YWlsYWJsZSBjYXBhY2l0eS5cXG4yLiBJdCBwcmV2ZW50cyB0aGUgaW5jbHVzaW9uIG9mIHRoZSB0cmFpbGluZyBOVUwgYnl0ZSBpbiB0aGUgc3RyZWFtIHBheWxvYWQgd2hlbiB0aGUgZm9ybWF0dGVkIHN0cmluZyBleGFjdGx5IG1hdGNoZXMgdGhlIGJ1ZmZlciBzaXplLlxcbjMuIEl0IGZpeGVzIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgdG8gb25seSBpbmNyZW1lbnQgdGhlIHN0cmVhbSBsZW5ndGggaWYgdGhlIHN0cmluZyB3YXMgc3VjY2Vzc2Z1bGx5IHB1c2hlZC5cXG40LiBJdCBjb3JyZWN0cyB0aGUgaGFuZGxpbmcgb2YgcGFydGlhbCBgY29weV90b191c2VyYCBmYXVsdHMgaW4gYGJwZl9zdHJlYW1fcmVhZGAgdG8gcHJvcGVybHkgYWNjb3VudCBmb3Igc3VjY2Vzc2Z1bGx5IGNvcGllZCBieXRlcy5cXG5cXG5Ob25lIG9mIHRoZXNlIGlzc3VlcyBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgc3RyZWFtIGVsZW1lbnRzIGFyZSBhbGxvY2F0ZWQgd2l0aCBgX19HRlBfWkVST2AsIGFuZCB0aGUgc3RyaW5ncyBjb3BpZWQgaW50byB0aGVtIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgYnN0cl9wcmludGZgIG9yIGB2c2NucHJpbnRmYC4gVGhlIGNvcGllZCBsZW5ndGggaXMgc3RyaWN0bHkgYm91bmRlZCBieSB0aGUgaW5pdGlhbGl6ZWQgc3RyaW5nIGxlbmd0aC4gVGhlIGJ1Z3MgZml4ZWQgYXJlIGxvZ2ljIGVycm9ycywgcmVzb3VyY2UgbGVha3MsIGFuZCBpbmNvcnJlY3QgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgdGhlIGFkZGVkIHNlbGZ0ZXN0cyBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgdG9vbHMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow65nc5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-23 14:27:38 +0000 UTC FinishedAt: 2026-08-23 14:47:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "fedc88e38ce979a720cd2de042578cb5df3dc8de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "fedc88e38ce979a720cd2de042578cb5df3dc8de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "8ab10b28-49cb-4e3f-a435-1066a6b7a5c1" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_prog_stream_read", "bpf_stream_vprintk", "bpf_stream_stage_printk" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfc3RyZWFtX3JlYWQmIzM0OywKICAgICYjMzQ7YnBmX3N0cmVhbV92cHJpbnRrJiMzNDssCiAgICAmIzM0O2JwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNldmVyYWwgbG9naWMgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgYnVncyBpbiB0aGUgQlBGIHN0cmVhbSBpbXBsZW1lbnRhdGlvbjpcbjEuIEl0IGZpeGVzIGEgY2FwYWNpdHkgbGVhayB3aGVyZSBvdmVyc2l6ZWQgb3IgdHJ1bmNhdGVkIHN0cmluZ3Mgd291bGQgY29uc3VtZSBzdHJlYW0gY2FwYWNpdHkgYnV0IGZhaWwgdG8gYWxsb2NhdGUgYW4gZWxlbWVudCwgcGVybWFuZW50bHkgcmVkdWNpbmcgYXZhaWxhYmxlIGNhcGFjaXR5LlxuMi4gSXQgcHJldmVudHMgdGhlIGluY2x1c2lvbiBvZiB0aGUgdHJhaWxpbmcgTlVMIGJ5dGUgaW4gdGhlIHN0cmVhbSBwYXlsb2FkIHdoZW4gdGhlIGZvcm1hdHRlZCBzdHJpbmcgZXhhY3RseSBtYXRjaGVzIHRoZSBidWZmZXIgc2l6ZS5cbjMuIEl0IGZpeGVzIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgdG8gb25seSBpbmNyZW1lbnQgdGhlIHN0cmVhbSBsZW5ndGggaWYgdGhlIHN0cmluZyB3YXMgc3VjY2Vzc2Z1bGx5IHB1c2hlZC5cbjQuIEl0IGNvcnJlY3RzIHRoZSBoYW5kbGluZyBvZiBwYXJ0aWFsIGBjb3B5X3RvX3VzZXJgIGZhdWx0cyBpbiBgYnBmX3N0cmVhbV9yZWFkYCB0byBwcm9wZXJseSBhY2NvdW50IGZvciBzdWNjZXNzZnVsbHkgY29waWVkIGJ5dGVzLlxuXG5Ob25lIG9mIHRoZXNlIGlzc3VlcyBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgc3RyZWFtIGVsZW1lbnRzIGFyZSBhbGxvY2F0ZWQgd2l0aCBgX19HRlBfWkVST2AsIGFuZCB0aGUgc3RyaW5ncyBjb3BpZWQgaW50byB0aGVtIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgYnN0cl9wcmludGZgIG9yIGB2c2NucHJpbnRmYC4gVGhlIGNvcGllZCBsZW5ndGggaXMgc3RyaWN0bHkgYm91bmRlZCBieSB0aGUgaW5pdGlhbGl6ZWQgc3RyaW5nIGxlbmd0aC4gVGhlIGJ1Z3MgZml4ZWQgYXJlIGxvZ2ljIGVycm9ycywgcmVzb3VyY2UgbGVha3MsIGFuZCBpbmNvcnJlY3QgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgdGhlIGFkZGVkIHNlbGZ0ZXN0cyBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgdG9vbHMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBtdWx0aXBsZSBidWdzIGluIHRoZSBCUEYgc3RyZWFtIHN1YnN5c3RlbSwgaW5jbHVkaW5nIGFuIG9mZi1ieS1vbmUgZXJyb3IgaW4gbGVuZ3RoIGNoZWNraW5nLCBhIGNhcGFjaXR5IGxlYWsgb24gcHVzaCBmYWlsdXJlLCBpbmNvcnJlY3QgaGFuZGxpbmcgb2YgcGFydGlhbCByZWFkcyB0byB1c2VyIHNwYWNlLCBtaXNzaW5nIHRydW5jYXRpb24gY2hlY2tzIGluIHZwcmludGssIGFuZCBpbmNvcnJlY3QgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiBzdGFnZV9wcmludGsuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgKEJQRiBzeXNjYWxsIGFuZCBCUEYgcHJvZ3JhbXMpIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUyNDZhZmRlNDY5NmZjNjlmNzMyOTNhYWIzODg1MDk4MTA1M2U1MDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAxNDo0Mzo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0cmVhbS5jIGIva2VybmVsL2JwZi9zdHJlYW0uY1xuaW5kZXggYmU5Y2U5OGU5NDY5Mi4uN2E1YzNhYzg2NzZiOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3RyZWFtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3RyZWFtLmNcbkBAIC0yMiwxMSAmIzQzOzIyLDExIEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICpicGZfc3RyZWFtX2VsZW1fYWxsb2MoaW50IGxlbilcbiBcdHNpemVfdCBhbGxvY19zaXplO1xuIFxuIFx0Lypcbi1cdCAqIExlbmd0aCBkZW5vdGVzIHRoZSBhbW91bnQgb2YgZGF0YSB0byBiZSB3cml0dGVuIGFzIHBhcnQgb2Ygc3RyZWFtIGVsZW1lbnQsXG4tXHQgKiB0aHVzIGluY2x1ZGVzICYjMzk7XFwwJiMzOTsgYnl0ZS4gV2UmIzM5O3JlIGNhcHBlZCBieSBob3cgbXVjaCBicGZfYnByaW50Zl9idWZmZXJzIGNhblxuLVx0ICogYWNjb21vZGF0ZSwgdGhlcmVmb3JlIGRlbnkgYWxsb2NhdGlvbnMgdGhhdCB3b24mIzM5O3QgZml0IGludG8gdGhlbS5cbiYjNDM7XHQgKiBMZW5ndGggaXMgdGhlIHBheWxvYWQgcHVzaGVkIGludG8gdGhlIHN0cmVhbSwgZXhjbHVkaW5nIHRoZVxuJiM0MztcdCAqIHRyYWlsaW5nIE5VTCBvZiB0aGUgYnByaW50ZiBidWZmZXIuIFJlamVjdCBhbnl0aGluZyB0aGF0IGNhbm5vdFxuJiM0MztcdCAqIGZpdCB3aXRob3V0IGNvcHlpbmcgdGhhdCBOVUwgaW50byB0aGUgc3RyZWFtIGVsZW1lbnQuXG4gXHQgKi9cbi1cdGlmIChsZW4gXHUwMDNjIDAgfHwgbGVuIFx1MDAzZSBtYXhfbGVuKVxuJiM0MztcdGlmIChsZW4gXHUwMDNjIDAgfHwgbGVuIFx1MDAzZT0gbWF4X2xlbilcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRhbGxvY19zaXplID0gb2Zmc2V0b2Yoc3RydWN0IGJwZl9zdHJlYW1fZWxlbSwgc3RyW2xlbl0pO1xuQEAgLTY4LDEwICYjNDM7NjgsOCBAQCBzdGF0aWMgaW50IGJwZl9zdHJlYW1fY29uc3VtZV9jYXBhY2l0eShzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBpbnQgbGVuKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICplbGVtKVxuJiM0MztzdGF0aWMgdm9pZCBicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgaW50IGxlbilcbiB7XG4tXHRpbnQgbGVuID0gZWxlbS1cdTAwM2V0b3RhbF9sZW47XG4tXG4gXHRhdG9taWNfc3ViKGxlbiwgXHUwMDI2c3RyZWFtLVx1MDAzZWNhcGFjaXR5KTtcbiB9XG4gXG5AQCAtNzksNyAmIzQzOzc3LDE0IEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBjb25zdCBjaGFyICpzdHIsIGludCBsXG4ge1xuIFx0aW50IHJldCA9IGJwZl9zdHJlYW1fY29uc3VtZV9jYXBhY2l0eShzdHJlYW0sIGxlbik7XG4gXG4tXHRyZXR1cm4gcmV0ID86IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihcdTAwMjZzdHJlYW0tXHUwMDNlbG9nLCBzdHIsIGxlbik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihcdTAwMjZzdHJlYW0tXHUwMDNlbG9nLCBzdHIsIGxlbik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJlYW0sIGxlbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX3N0cmVhbSAqYnBmX3N0cmVhbV9nZXQoZW51bSBicGZfc3RyZWFtX2lkIHN0cmVhbV9pZCwgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxuQEAgLTE2Miw2ICYjNDM7MTY3LDcgQEAgc3RhdGljIGludCBicGZfc3RyZWFtX3JlYWQoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgdm9pZCBfX3VzZXIgKmJ1ZiwgaW50IGxlbilcbiBcbiBcdHdoaWxlIChyZW1fbGVuKSB7XG4gXHRcdGludCBwb3MgPSBsZW4gLSByZW1fbGVuO1xuJiM0MztcdFx0aW50IGNodW5rLCBuO1xuIFx0XHRib29sIGNvbnQ7XG4gXG4gXHRcdG5vZGUgPSBicGZfc3RyZWFtX2JhY2tsb2dfcGVlayhzdHJlYW0pO1xuQEAgLTE3NSwyMCAmIzQzOzE4MSwyMSBAQCBzdGF0aWMgaW50IGJwZl9zdHJlYW1fcmVhZChzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCB2b2lkIF9fdXNlciAqYnVmLCBpbnQgbGVuKVxuIFxuIFx0XHRjb25zX2xlbiA9IGVsZW0tXHUwMDNlY29uc3VtZWRfbGVuO1xuIFx0XHRjb250ID0gYnBmX3N0cmVhbV9jb25zdW1lX2VsZW0oZWxlbSwgXHUwMDI2cmVtX2xlbikgPT0gZmFsc2U7XG4tXG4tXHRcdHJldCA9IGNvcHlfdG9fdXNlcihidWYgJiM0MzsgcG9zLCBlbGVtLVx1MDAzZXN0ciAmIzQzOyBjb25zX2xlbixcbi1cdFx0XHRcdCAgIGVsZW0tXHUwMDNlY29uc3VtZWRfbGVuIC0gY29uc19sZW4pO1xuLVx0XHQvKiBSZXN0b3JlIGluIGNhc2Ugb2YgZXJyb3IuICovXG4tXHRcdGlmIChyZXQpIHtcbi1cdFx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0XHRcdGVsZW0tXHUwMDNlY29uc3VtZWRfbGVuID0gY29uc19sZW47XG4mIzQzO1x0XHRjaHVuayA9IGVsZW0tXHUwMDNlY29uc3VtZWRfbGVuIC0gY29uc19sZW47XG4mIzQzO1xuJiM0MztcdFx0biA9IGNvcHlfdG9fdXNlcihidWYgJiM0MzsgcG9zLCBlbGVtLVx1MDAzZXN0ciAmIzQzOyBjb25zX2xlbiwgY2h1bmspO1xuJiM0MztcdFx0aWYgKG4pIHtcbiYjNDM7XHRcdFx0LyogS2VlcCBhbnkgc3VjY2Vzc2Z1bGx5IGNvcGllZCBieXRlczsgLUVGQVVMVCBvbmx5IGlmIG5vbmUuICovXG4mIzQzO1x0XHRcdGVsZW0tXHUwMDNlY29uc3VtZWRfbGVuIC09IG47XG4mIzQzO1x0XHRcdHJlbV9sZW4gJiM0Mzs9IG47XG4mIzQzO1x0XHRcdHJldCA9IChsZW4gPT0gcmVtX2xlbikgPyAtRUZBVUxUIDogMDtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuIFx0XHRpZiAoY29udClcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0YnBmX3N0cmVhbV9iYWNrbG9nX3BvcChzdHJlYW0pO1xuLVx0XHRicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RyZWFtLCBlbGVtKTtcbiYjNDM7XHRcdGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJlYW0sIGVsZW0tXHUwMDNldG90YWxfbGVuKTtcbiBcdFx0YnBmX3N0cmVhbV9mcmVlX2VsZW0oZWxlbSk7XG4gXHR9XG4gXG5AQCAtMjM4LDYgJiM0MzsyNDUsMTEgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJlYW1fdnByaW50ayhpbnQgc3RyZWFtX2lkLCBjb25zdCBjaGFyICpmbXRfX3N0ciwgY29uc3Qgdm9cbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldCA9IGJzdHJfcHJpbnRmKGRhdGEuYnVmLCBNQVhfQlBSSU5URl9CVUYsIGZtdF9fc3RyLCBkYXRhLmJpbl9hcmdzKTtcbiYjNDM7XHQvKiBUcnVuY2F0aW9uOiByZWplY3QgYmVmb3JlIGNhcGFjaXR5IGNoYXJnZSAobm90IC1FTk9NRU0pLiAqL1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSBNQVhfQlBSSU5URl9CVUYpIHtcbiYjNDM7XHRcdGJwZl9icHJpbnRmX2NsZWFudXAoXHUwMDI2ZGF0YSk7XG4mIzQzO1x0XHRyZXR1cm4gLUUyQklHO1xuJiM0MztcdH1cbiBcdC8qIEV4Y2x1ZGUgTlVMTCBieXRlIGR1cmluZyBwdXNoLiAqL1xuIFx0cmV0ID0gYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJlYW0sIGRhdGEuYnVmLCByZXQpO1xuIFx0YnBmX2JwcmludGZfY2xlYW51cChcdTAwMjZkYXRhKTtcbkBAIC0zMTEsMTcgJiM0MzszMjMsMTggQEAgaW50IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXG4ge1xuIFx0c3RydWN0IGJwZl9icHJpbnRmX2J1ZmZlcnMgKmJ1ZjtcbiBcdHZhX2xpc3QgYXJncztcbi1cdGludCByZXQ7XG4mIzQzO1x0aW50IGxlbiwgcmV0O1xuIFxuIFx0aWYgKGJwZl90cnlfZ2V0X2J1ZmZlcnMoXHUwMDI2YnVmKSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiBcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XG4tXHRyZXQgPSB2c25wcmludGYoYnVmLVx1MDAzZWJ1ZiwgQVJSQVlfU0laRShidWYtXHUwMDNlYnVmKSwgZm10LCBhcmdzKTtcbiYjNDM7XHRsZW4gPSB2c2NucHJpbnRmKGJ1Zi1cdTAwM2VidWYsIEFSUkFZX1NJWkUoYnVmLVx1MDAzZWJ1ZiksIGZtdCwgYXJncyk7XG4gXHR2YV9lbmQoYXJncyk7XG4tXHRzcy1cdTAwM2VsZW4gJiM0Mzs9IHJldDtcbiBcdC8qIEV4Y2x1ZGUgTlVMTCBieXRlIGR1cmluZyBwdXNoLiAqL1xuLVx0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFx1MDAyNnNzLVx1MDAzZWxvZywgYnVmLVx1MDAzZWJ1ZiwgcmV0KTtcbiYjNDM7XHRyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXHUwMDI2c3MtXHUwMDNlbG9nLCBidWYtXHUwMDNlYnVmLCBsZW4pO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0c3MtXHUwMDNlbGVuICYjNDM7PSBsZW47XG4gXHRicGZfcHV0X2J1ZmZlcnMoKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbmluZGV4IGMzY2NlNWMyOTJiZGQuLjg3MTcwZGNhZDNhZDggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbkBAIC01OCw2ICYjNDM7NTgsNzEgQEAgdm9pZCB0ZXN0X3N0cmVhbV9zeXNjYWxsKHZvaWQpXG4gXHRzdHJlYW1fX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuJiM0Mzt2b2lkIHRlc3Rfc3RyZWFtX292ZXJzaXplKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XG4mIzQzO1x0c3RydWN0IHN0cmVhbSAqc2tlbDtcbiYjNDM7XHRpbnQgcmV0LCBwcm9nX2ZkO1xuJiM0MztcdGNoYXIgYnVmWzhdID0ge307XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBzdHJlYW1fX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c3RyZWFtX19vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9vdmVyc2l6ZSk7XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nX2ZkLCBcdTAwMjZvcHRzKTtcbiYjNDM7XHRBU1NFUlRfT0socmV0LCBcJiMzNDtvdmVyc2l6ZSBydW5cJiMzNDspO1xuJiM0MztcdEFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXCYjMzQ7b3ZlcnNpemUgcmV0dmFsXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogT3ZlcnNpemVkIHB1c2ggbXVzdCBub3QgcGVybWFuZW50bHkgY29uc3VtZSBjYXBhY2l0eSBvbiB0aGlzIHByb2cuICovXG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfc3RyZWFtX3JlYWQocHJvZ19mZCwgQlBGX1NUUkVBTV9TVERPVVQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9FUShyZXQsIDMsIFwmIzM0O2J5dGVzIGFmdGVyIG92ZXJzaXplXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfT0sobWVtY21wKGJ1ZiwgXCYjMzQ7Zm9vXCYjMzQ7LCAzKSwgXCYjMzQ7cGF5bG9hZCBhZnRlciBvdmVyc2l6ZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHN0cmVhbV9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X3N0cmVhbV9wYXJ0aWFsX3JlYWQodm9pZClcbiYjNDM7e1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbiYjNDM7XHRzdHJ1Y3Qgc3RyZWFtICpza2VsO1xuJiM0MztcdGludCByZXQsIHByb2dfZmQ7XG4mIzQzO1x0bG9uZyBwYWdlX3NpemU7XG4mIzQzO1x0Y2hhciAqcGFnZSwgKmJ1ZjtcbiYjNDM7XHRjaGFyIHJlc3RbOF0gPSB7fTtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHN0cmVhbV9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtzdHJlYW1fX29wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3Muc3RyZWFtX3N5c2NhbGwpO1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocHJvZ19mZCwgXHUwMDI2b3B0cyk7XG4mIzQzO1x0QVNTRVJUX09LKHJldCwgXCYjMzQ7cmV0XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfT0sob3B0cy5yZXR2YWwsIFwmIzM0O3JldHZhbFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTtcbiYjNDM7XHRwYWdlID0gbW1hcChOVUxMLCBwYWdlX3NpemUgKiAyLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuJiM0MztcdFx0ICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuJiM0MztcdGlmICghQVNTRVJUX05FUShwYWdlLCBNQVBfRkFJTEVELCBcJiMzNDttbWFwXCYjMzQ7KSkge1xuJiM0MztcdFx0c3RyZWFtX19kZXN0cm95KHNrZWwpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XHQvKiBMZWF2ZSBvbmx5IHRoZSBmaXJzdCBwYWdlIG1hcHBlZCBzbyBhIHN0cmFkZGxpbmcgY29weSBmYXVsdHMuICovXG4mIzQzO1x0QVNTRVJUX09LKG11bm1hcChwYWdlICYjNDM7IHBhZ2Vfc2l6ZSwgcGFnZV9zaXplKSwgXCYjMzQ7bXVubWFwIHNlY29uZCBwYWdlXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0YnVmID0gcGFnZSAmIzQzOyBwYWdlX3NpemUgLSAxO1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX3N0cmVhbV9yZWFkKHByb2dfZmQsIEJQRl9TVFJFQU1fU1RET1VULCBidWYsIDMsIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9FUShyZXQsIDEsIFwmIzM0O3BhcnRpYWwgYnl0ZXNcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShidWZbMF0sICYjMzk7ZiYjMzk7LCBcJiMzNDtmaXJzdCBieXRlXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfc3RyZWFtX3JlYWQocHJvZ19mZCwgQlBGX1NUUkVBTV9TVERPVVQsIHJlc3QsIHNpemVvZihyZXN0KSwgTlVMTCk7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgMiwgXCYjMzQ7cmVtYWluaW5nIGJ5dGVzXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfT0sobWVtY21wKHJlc3QsIFwmIzM0O29vXCYjMzQ7LCAyKSwgXCYjMzQ7cmVtYWluaW5nIGRhdGFcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRtdW5tYXAocGFnZSwgcGFnZV9zaXplKTtcbiYjNDM7XHRzdHJlYW1fX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdGVzdF9hZGRyZXNzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgdW5zaWduZWQgbG9uZyAqZmF1bHRfYWRkcl9wKVxuIHtcbiBcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbmluZGV4IDZmOTk5YmE5NTFhM2MuLjliOTdmNWUwMWI4M2EgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xuQEAgLTM2LDcgJiM0MzszNiwxMiBAQCBzdHJ1Y3Qge1xuIH0gYXJyYXkgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiBcbiAjZGVmaW5lIEVOT1NQQyAyOFxuJiM0MzsjZGVmaW5lIEUyQklHIDdcbiAjZGVmaW5lIF9TVFIgXCYjMzQ7eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4XCYjMzQ7XG4mIzQzOyNkZWZpbmUgX1g2NCBcJiMzNDt4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4XCYjMzQ7XG4mIzQzOy8qIDEwMjQgYnl0ZXM6IHRydW5jYXRlZCBieSBic3RyX3ByaW50ZiwgbXVzdCByZXR1cm4gLUUyQklHLiAqL1xuJiM0MzsjZGVmaW5lIF9CSUdfU1RSIChfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgXFxcbiYjNDM7XHRcdCAgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0KVxuIFxuIGludCBzaXplO1xuIHU2NCBmYXVsdF9hZGRyO1xuQEAgLTExNyw2ICYjNDM7MTIyLDE5IEBAIGludCBzdHJlYW1fc3lzY2FsbCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiYjNDM7aW50IHN0cmVhbV9vdmVyc2l6ZSh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBicGZfc3RyZWFtX3ByaW50ayhCUEZfU1RET1VULCBfQklHX1NUUik7XG4mIzQzO1x0aWYgKHJldCAhPSAtRTJCSUcpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYnBmX3N0cmVhbV9wcmludGsoQlBGX1NURE9VVCwgXCYjMzQ7Zm9vXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiBfX2FyY2hfeDg2XzY0XG4gX19hcmNoX2FybTY0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfc3RyZWFtX3JlYWQmIzM0OywKICAgICYjMzQ7YnBmX3N0cmVhbV92cHJpbnRrJiMzNDssCiAgICAmIzM0O2JwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIGJ1Z3MgaW4gdGhlIEJQRiBzdHJlYW0gc3Vic3lzdGVtLCBpbmNsdWRpbmcgYW4gb2ZmLWJ5LW9uZSBlcnJvciBpbiBsZW5ndGggY2hlY2tpbmcsIGEgY2FwYWNpdHkgbGVhayBvbiBwdXNoIGZhaWx1cmUsIGluY29ycmVjdCBoYW5kbGluZyBvZiBwYXJ0aWFsIHJlYWRzIHRvIHVzZXIgc3BhY2UsIG1pc3NpbmcgdHJ1bmNhdGlvbiBjaGVja3MgaW4gdnByaW50aywgYW5kIGluY29ycmVjdCBsZW5ndGggY2FsY3VsYXRpb25zIGluIHN0YWdlX3ByaW50ay4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSAoQlBGIHN5c2NhbGwgYW5kIEJQRiBwcm9ncmFtcykgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTI0NmFmZGU0Njk2ZmM2OWY3MzI5M2FhYjM4ODUwOTgxMDUzZTUwMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIzIDE0OjQzOjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdHJlYW0uYyBiL2tlcm5lbC9icGYvc3RyZWFtLmMKaW5kZXggYmU5Y2U5OGU5NDY5Mi4uN2E1YzNhYzg2NzZiOSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zdHJlYW0uYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0cmVhbS5jCkBAIC0yMiwxMSAmIzQzOzIyLDExIEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICpicGZfc3RyZWFtX2VsZW1fYWxsb2MoaW50IGxlbikKIAlzaXplX3QgYWxsb2Nfc2l6ZTsKIAogCS8qCi0JICogTGVuZ3RoIGRlbm90ZXMgdGhlIGFtb3VudCBvZiBkYXRhIHRvIGJlIHdyaXR0ZW4gYXMgcGFydCBvZiBzdHJlYW0gZWxlbWVudCwKLQkgKiB0aHVzIGluY2x1ZGVzICYjMzk7XDAmIzM5OyBieXRlLiBXZSYjMzk7cmUgY2FwcGVkIGJ5IGhvdyBtdWNoIGJwZl9icHJpbnRmX2J1ZmZlcnMgY2FuCi0JICogYWNjb21vZGF0ZSwgdGhlcmVmb3JlIGRlbnkgYWxsb2NhdGlvbnMgdGhhdCB3b24mIzM5O3QgZml0IGludG8gdGhlbS4KJiM0MzsJICogTGVuZ3RoIGlzIHRoZSBwYXlsb2FkIHB1c2hlZCBpbnRvIHRoZSBzdHJlYW0sIGV4Y2x1ZGluZyB0aGUKJiM0MzsJICogdHJhaWxpbmcgTlVMIG9mIHRoZSBicHJpbnRmIGJ1ZmZlci4gUmVqZWN0IGFueXRoaW5nIHRoYXQgY2Fubm90CiYjNDM7CSAqIGZpdCB3aXRob3V0IGNvcHlpbmcgdGhhdCBOVUwgaW50byB0aGUgc3RyZWFtIGVsZW1lbnQuCiAJICovCi0JaWYgKGxlbiAmbHQ7IDAgfHwgbGVuICZndDsgbWF4X2xlbikKJiM0MzsJaWYgKGxlbiAmbHQ7IDAgfHwgbGVuICZndDs9IG1heF9sZW4pCiAJCXJldHVybiBOVUxMOwogCiAJYWxsb2Nfc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCBicGZfc3RyZWFtX2VsZW0sIHN0cltsZW5dKTsKQEAgLTY4LDEwICYjNDM7NjgsOCBAQCBzdGF0aWMgaW50IGJwZl9zdHJlYW1fY29uc3VtZV9jYXBhY2l0eShzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBpbnQgbGVuKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqZWxlbSkKJiM0MztzdGF0aWMgdm9pZCBicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgaW50IGxlbikKIHsKLQlpbnQgbGVuID0gZWxlbS0mZ3Q7dG90YWxfbGVuOwotCiAJYXRvbWljX3N1YihsZW4sICZhbXA7c3RyZWFtLSZndDtjYXBhY2l0eSk7CiB9CiAKQEAgLTc5LDcgJiM0Mzs3NywxNCBAQCBzdGF0aWMgaW50IGJwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgY29uc3QgY2hhciAqc3RyLCBpbnQgbAogewogCWludCByZXQgPSBicGZfc3RyZWFtX2NvbnN1bWVfY2FwYWNpdHkoc3RyZWFtLCBsZW4pOwogCi0JcmV0dXJuIHJldCA/OiBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoJmFtcDtzdHJlYW0tJmd0O2xvZywgc3RyLCBsZW4pOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKCZhbXA7c3RyZWFtLSZndDtsb2csIHN0ciwgbGVuKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJlYW0sIGxlbik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYnBmX3N0cmVhbSAqYnBmX3N0cmVhbV9nZXQoZW51bSBicGZfc3RyZWFtX2lkIHN0cmVhbV9pZCwgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KQpAQCAtMTYyLDYgJiM0MzsxNjcsNyBAQCBzdGF0aWMgaW50IGJwZl9zdHJlYW1fcmVhZChzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCB2b2lkIF9fdXNlciAqYnVmLCBpbnQgbGVuKQogCiAJd2hpbGUgKHJlbV9sZW4pIHsKIAkJaW50IHBvcyA9IGxlbiAtIHJlbV9sZW47CiYjNDM7CQlpbnQgY2h1bmssIG47CiAJCWJvb2wgY29udDsKIAogCQlub2RlID0gYnBmX3N0cmVhbV9iYWNrbG9nX3BlZWsoc3RyZWFtKTsKQEAgLTE3NSwyMCAmIzQzOzE4MSwyMSBAQCBzdGF0aWMgaW50IGJwZl9zdHJlYW1fcmVhZChzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCB2b2lkIF9fdXNlciAqYnVmLCBpbnQgbGVuKQogCiAJCWNvbnNfbGVuID0gZWxlbS0mZ3Q7Y29uc3VtZWRfbGVuOwogCQljb250ID0gYnBmX3N0cmVhbV9jb25zdW1lX2VsZW0oZWxlbSwgJmFtcDtyZW1fbGVuKSA9PSBmYWxzZTsKLQotCQlyZXQgPSBjb3B5X3RvX3VzZXIoYnVmICYjNDM7IHBvcywgZWxlbS0mZ3Q7c3RyICYjNDM7IGNvbnNfbGVuLAotCQkJCSAgIGVsZW0tJmd0O2NvbnN1bWVkX2xlbiAtIGNvbnNfbGVuKTsKLQkJLyogUmVzdG9yZSBpbiBjYXNlIG9mIGVycm9yLiAqLwotCQlpZiAocmV0KSB7Ci0JCQlyZXQgPSAtRUZBVUxUOwotCQkJZWxlbS0mZ3Q7Y29uc3VtZWRfbGVuID0gY29uc19sZW47CiYjNDM7CQljaHVuayA9IGVsZW0tJmd0O2NvbnN1bWVkX2xlbiAtIGNvbnNfbGVuOwomIzQzOwomIzQzOwkJbiA9IGNvcHlfdG9fdXNlcihidWYgJiM0MzsgcG9zLCBlbGVtLSZndDtzdHIgJiM0MzsgY29uc19sZW4sIGNodW5rKTsKJiM0MzsJCWlmIChuKSB7CiYjNDM7CQkJLyogS2VlcCBhbnkgc3VjY2Vzc2Z1bGx5IGNvcGllZCBieXRlczsgLUVGQVVMVCBvbmx5IGlmIG5vbmUuICovCiYjNDM7CQkJZWxlbS0mZ3Q7Y29uc3VtZWRfbGVuIC09IG47CiYjNDM7CQkJcmVtX2xlbiAmIzQzOz0gbjsKJiM0MzsJCQlyZXQgPSAobGVuID09IHJlbV9sZW4pID8gLUVGQVVMVCA6IDA7CiAJCQlicmVhazsKIAkJfQogCiAJCWlmIChjb250KQogCQkJY29udGludWU7CiAJCWJwZl9zdHJlYW1fYmFja2xvZ19wb3Aoc3RyZWFtKTsKLQkJYnBmX3N0cmVhbV9yZWxlYXNlX2NhcGFjaXR5KHN0cmVhbSwgZWxlbSk7CiYjNDM7CQlicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RyZWFtLCBlbGVtLSZndDt0b3RhbF9sZW4pOwogCQlicGZfc3RyZWFtX2ZyZWVfZWxlbShlbGVtKTsKIAl9CiAKQEAgLTIzOCw2ICYjNDM7MjQ1LDExIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3RyZWFtX3ZwcmludGsoaW50IHN0cmVhbV9pZCwgY29uc3QgY2hhciAqZm10X19zdHIsIGNvbnN0IHZvCiAJCXJldHVybiByZXQ7CiAKIAlyZXQgPSBic3RyX3ByaW50ZihkYXRhLmJ1ZiwgTUFYX0JQUklOVEZfQlVGLCBmbXRfX3N0ciwgZGF0YS5iaW5fYXJncyk7CiYjNDM7CS8qIFRydW5jYXRpb246IHJlamVjdCBiZWZvcmUgY2FwYWNpdHkgY2hhcmdlIChub3QgLUVOT01FTSkuICovCiYjNDM7CWlmIChyZXQgJmd0Oz0gTUFYX0JQUklOVEZfQlVGKSB7CiYjNDM7CQlicGZfYnByaW50Zl9jbGVhbnVwKCZhbXA7ZGF0YSk7CiYjNDM7CQlyZXR1cm4gLUUyQklHOwomIzQzOwl9CiAJLyogRXhjbHVkZSBOVUxMIGJ5dGUgZHVyaW5nIHB1c2guICovCiAJcmV0ID0gYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJlYW0sIGRhdGEuYnVmLCByZXQpOwogCWJwZl9icHJpbnRmX2NsZWFudXAoJmFtcDtkYXRhKTsKQEAgLTMxMSwxNyAmIzQzOzMyMywxOCBAQCBpbnQgYnBmX3N0cmVhbV9zdGFnZV9wcmludGsoc3RydWN0IGJwZl9zdHJlYW1fc3RhZ2UgKnNzLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAlzdHJ1Y3QgYnBmX2JwcmludGZfYnVmZmVycyAqYnVmOwogCXZhX2xpc3QgYXJnczsKLQlpbnQgcmV0OwomIzQzOwlpbnQgbGVuLCByZXQ7CiAKIAlpZiAoYnBmX3RyeV9nZXRfYnVmZmVycygmYW1wO2J1ZikpCiAJCXJldHVybiAtRUJVU1k7CiAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCXJldCA9IHZzbnByaW50ZihidWYtJmd0O2J1ZiwgQVJSQVlfU0laRShidWYtJmd0O2J1ZiksIGZtdCwgYXJncyk7CiYjNDM7CWxlbiA9IHZzY25wcmludGYoYnVmLSZndDtidWYsIEFSUkFZX1NJWkUoYnVmLSZndDtidWYpLCBmbXQsIGFyZ3MpOwogCXZhX2VuZChhcmdzKTsKLQlzcy0mZ3Q7bGVuICYjNDM7PSByZXQ7CiAJLyogRXhjbHVkZSBOVUxMIGJ5dGUgZHVyaW5nIHB1c2guICovCi0JcmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKCZhbXA7c3MtJmd0O2xvZywgYnVmLSZndDtidWYsIHJldCk7CiYjNDM7CXJldCA9IF9fYnBmX3N0cmVhbV9wdXNoX3N0cigmYW1wO3NzLSZndDtsb2csIGJ1Zi0mZ3Q7YnVmLCBsZW4pOwomIzQzOwlpZiAoIXJldCkKJiM0MzsJCXNzLSZndDtsZW4gJiM0Mzs9IGxlbjsKIAlicGZfcHV0X2J1ZmZlcnMoKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYwppbmRleCBjM2NjZTVjMjkyYmRkLi44NzE3MGRjYWQzYWQ4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYwpAQCAtNTgsNiAmIzQzOzU4LDcxIEBAIHZvaWQgdGVzdF9zdHJlYW1fc3lzY2FsbCh2b2lkKQogCXN0cmVhbV9fZGVzdHJveShza2VsKTsKIH0KIAomIzQzO3ZvaWQgdGVzdF9zdHJlYW1fb3ZlcnNpemUodm9pZCkKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTsKJiM0MzsJc3RydWN0IHN0cmVhbSAqc2tlbDsKJiM0MzsJaW50IHJldCwgcHJvZ19mZDsKJiM0MzsJY2hhciBidWZbOF0gPSB7fTsKJiM0MzsKJiM0MzsJc2tlbCA9IHN0cmVhbV9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtzdHJlYW1fX29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3Muc3RyZWFtX292ZXJzaXplKTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nX2ZkLCAmYW1wO29wdHMpOwomIzQzOwlBU1NFUlRfT0socmV0LCAmIzM0O292ZXJzaXplIHJ1biYjMzQ7KTsKJiM0MzsJQVNTRVJUX09LKG9wdHMucmV0dmFsLCAmIzM0O292ZXJzaXplIHJldHZhbCYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogT3ZlcnNpemVkIHB1c2ggbXVzdCBub3QgcGVybWFuZW50bHkgY29uc3VtZSBjYXBhY2l0eSBvbiB0aGlzIHByb2cuICovCiYjNDM7CXJldCA9IGJwZl9wcm9nX3N0cmVhbV9yZWFkKHByb2dfZmQsIEJQRl9TVFJFQU1fU1RET1VULCBidWYsIHNpemVvZihidWYpLCBOVUxMKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgMywgJiMzNDtieXRlcyBhZnRlciBvdmVyc2l6ZSYjMzQ7KTsKJiM0MzsJQVNTRVJUX09LKG1lbWNtcChidWYsICYjMzQ7Zm9vJiMzNDssIDMpLCAmIzM0O3BheWxvYWQgYWZ0ZXIgb3ZlcnNpemUmIzM0Oyk7CiYjNDM7CiYjNDM7CXN0cmVhbV9fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X3N0cmVhbV9wYXJ0aWFsX3JlYWQodm9pZCkKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTsKJiM0MzsJc3RydWN0IHN0cmVhbSAqc2tlbDsKJiM0MzsJaW50IHJldCwgcHJvZ19mZDsKJiM0MzsJbG9uZyBwYWdlX3NpemU7CiYjNDM7CWNoYXIgKnBhZ2UsICpidWY7CiYjNDM7CWNoYXIgcmVzdFs4XSA9IHt9OwomIzQzOwomIzQzOwlza2VsID0gc3RyZWFtX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3N0cmVhbV9fb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5zdHJlYW1fc3lzY2FsbCk7CiYjNDM7CXJldCA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocHJvZ19mZCwgJmFtcDtvcHRzKTsKJiM0MzsJQVNTRVJUX09LKHJldCwgJiMzNDtyZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgJiMzNDtyZXR2YWwmIzM0Oyk7CiYjNDM7CiYjNDM7CXBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKJiM0MzsJcGFnZSA9IG1tYXAoTlVMTCwgcGFnZV9zaXplICogMiwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKJiM0MzsJCSAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfTkVRKHBhZ2UsIE1BUF9GQUlMRUQsICYjMzQ7bW1hcCYjMzQ7KSkgewomIzQzOwkJc3RyZWFtX19kZXN0cm95KHNrZWwpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CS8qIExlYXZlIG9ubHkgdGhlIGZpcnN0IHBhZ2UgbWFwcGVkIHNvIGEgc3RyYWRkbGluZyBjb3B5IGZhdWx0cy4gKi8KJiM0MzsJQVNTRVJUX09LKG11bm1hcChwYWdlICYjNDM7IHBhZ2Vfc2l6ZSwgcGFnZV9zaXplKSwgJiMzNDttdW5tYXAgc2Vjb25kIHBhZ2UmIzM0Oyk7CiYjNDM7CiYjNDM7CWJ1ZiA9IHBhZ2UgJiM0MzsgcGFnZV9zaXplIC0gMTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfc3RyZWFtX3JlYWQocHJvZ19mZCwgQlBGX1NUUkVBTV9TVERPVVQsIGJ1ZiwgMywgTlVMTCk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIDEsICYjMzQ7cGFydGlhbCBieXRlcyYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKGJ1ZlswXSwgJiMzOTtmJiMzOTssICYjMzQ7Zmlyc3QgYnl0ZSYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfc3RyZWFtX3JlYWQocHJvZ19mZCwgQlBGX1NUUkVBTV9TVERPVVQsIHJlc3QsIHNpemVvZihyZXN0KSwgTlVMTCk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIDIsICYjMzQ7cmVtYWluaW5nIGJ5dGVzJiMzNDspOwomIzQzOwlBU1NFUlRfT0sobWVtY21wKHJlc3QsICYjMzQ7b28mIzM0OywgMiksICYjMzQ7cmVtYWluaW5nIGRhdGEmIzM0Oyk7CiYjNDM7CiYjNDM7CW11bm1hcChwYWdlLCBwYWdlX3NpemUpOwomIzQzOwlzdHJlYW1fX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdGVzdF9hZGRyZXNzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgdW5zaWduZWQgbG9uZyAqZmF1bHRfYWRkcl9wKQogewogCUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYwppbmRleCA2Zjk5OWJhOTUxYTNjLi45Yjk3ZjVlMDFiODNhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jCkBAIC0zNiw3ICYjNDM7MzYsMTIgQEAgc3RydWN0IHsKIH0gYXJyYXkgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiAKICNkZWZpbmUgRU5PU1BDIDI4CiYjNDM7I2RlZmluZSBFMkJJRyA3CiAjZGVmaW5lIF9TVFIgJiMzNDt4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgmIzM0OwomIzQzOyNkZWZpbmUgX1g2NCAmIzM0O3h4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgmIzM0OwomIzQzOy8qIDEwMjQgYnl0ZXM6IHRydW5jYXRlZCBieSBic3RyX3ByaW50ZiwgbXVzdCByZXR1cm4gLUUyQklHLiAqLwomIzQzOyNkZWZpbmUgX0JJR19TVFIgKF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBcCiYjNDM7CQkgIF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCkKIAogaW50IHNpemU7CiB1NjQgZmF1bHRfYWRkcjsKQEAgLTExNyw2ICYjNDM7MTIyLDE5IEBAIGludCBzdHJlYW1fc3lzY2FsbCh2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApCiYjNDM7aW50IHN0cmVhbV9vdmVyc2l6ZSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBicGZfc3RyZWFtX3ByaW50ayhCUEZfU1RET1VULCBfQklHX1NUUik7CiYjNDM7CWlmIChyZXQgIT0gLUUyQklHKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGJwZl9zdHJlYW1fcHJpbnRrKEJQRl9TVERPVVQsICYjMzQ7Zm9vJiMzNDspOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKIF9fYXJjaF9hcm02NAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODcwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFN0cmVhbSBQYXRjaCoqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCYjMzk7cyBjbGVhcmx5IGZvY3VzZWQgb24gcmVmaW5pbmcgdGhlIEJQRiBzdHJlYW0gaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBjaGFuZ2VzIGFyZSBjb25jZW50cmF0ZWQgaW4gYGtlcm5lbC9icGYvc3RyZWFtLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGF0IGZpbGUgZXZlbiBleGlzdHMgaW4gdGhlIG1haW5saW5lIGtlcm5lbDsgYSBxdWljayBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgb3IgYGRlZmF1bHRfYXBpOmNvZGVzZWFyY2gtZGlyLWluZGV4YCBzZWFyY2ggc2hvdWxkIGNvbmZpcm0gdGhhdC4gRnJvbSB0aGUgZGVzY3JpcHRpb24sIGl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIGFkZHJlc3Npbmcgc29tZSBzdWJ0bGUgaXNzdWVzLCBtb3N0bHkgcmVsYXRlZCB0byBlZGdlIGNhc2VzIGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIHN0cmVhbSBmdW5jdGlvbmFsaXR5LgoKU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2g6CgoqICAgKipUaWdodGVucyB1cCBhbGxvY2F0aW9uIHZhbGlkYXRpb246KiogTW9kaWZ5aW5nIGBicGZfc3RyZWFtX2VsZW1fYWxsb2NgIHRvIHJlamVjdCBhbGxvY2F0aW9ucyB3aGVyZSB0aGUgcmVxdWVzdGVkIGxlbmd0aCAoYGxlbmApICplcXVhbHMqIHRoZSBtYXhpbXVtIGxlbmd0aCAoYG1heF9sZW5gKS4gVGhhdCYjMzk7cyBhIGdvb2QgcHJldmVudGF0aXZlIG1lYXN1cmU7IHRoZSBvcmlnaW5hbCBjaGVjayBiZWluZyBqdXN0IGEgZ3JlYXRlci10aGFuIGNoZWNrIChgJmd0O2ApIG1pZ2h0IGhhdmUgYWxsb3dlZCBmb3Igc3VidGxlIG92ZXJmbG93cyBvciBib3VuZGFyeSBjb25kaXRpb24gaXNzdWVzLgoKKiAgICoqSW1wcm92ZXMgcmVzb3VyY2UgbWFuYWdlbWVudCBvbiBmYWlsdXJlOioqIFRoZSBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgY2hhbmdlcyBzZWVtIGdlYXJlZCB0b3dhcmQgcmVsZWFzaW5nIGFsbG9jYXRlZCBjYXBhY2l0eSBpZiB0aGUgdW5kZXJseWluZyBwdXNoIG9wZXJhdGlvbiAoYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmApIGZhaWxzLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBwcmV2ZW50aW5nIG1lbW9yeSBsZWFrcyBhbmQgcmVzb3VyY2UgZXhoYXVzdGlvbiBpbiB0aGUgZmFjZSBvZiBlcnJvcnMuCgoqICAgKipIYW5kbGVzIHBhcnRpYWwgcmVhZCBmYWlsdXJlczoqKiBDb3JyZWN0aW5nIGBicGZfc3RyZWFtX3JlYWRgIHRvIGNvcGUgd2l0aCBzY2VuYXJpb3Mgd2hlcmUgYGNvcHlfdG9fdXNlcmAgbWlnaHQgb25seSB0cmFuc2ZlciBwYXJ0IG9mIHRoZSByZXF1ZXN0ZWQgZGF0YS4gSGFuZGxpbmcgcGFydGlhbCByZWFkcyBpcyBhIGNvbW1vbiB2dWxuZXJhYmlsaXR5LCBhbmQgdGhpcyBzaG91bGQgdGlnaHRlbiB1cCB0aGUgY29kZS4KCiogICAqKlN0cmVuZ3RoZW5zIGxhcmdlIHN0cmluZyBoYW5kbGluZzoqKiBgYnBmX3N0cmVhbV92cHJpbnRrYCBpcyBiZWluZyBtb2RpZmllZCB0byByZWplY3QgdmVyeSBsYXJnZSBzdHJpbmdzICh0aG9zZSBsYXJnZXIgdGhhbiBvciBlcXVhbCB0byBgTUFYX0JQUklOVEZfQlVGYCkgcmV0dXJuaW5nIGFuIGBFMkJJR2AgZXJyb3IsIGFuZCBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgIGlzIHN3aXRjaGluZyB0byBgdnNjbnByaW50ZmAsIGJvdGggb2YgdGhlc2UgaW1wcm92ZW1lbnRzIHBvaW50IHRvIGluY3JlYXNlZCByb2J1c3RuZXNzIGFuZCBwcmV2ZW50aW5nIG92ZXJmbG93cy4gVXNpbmcgYHZzY25wcmludGZgIGluc3RlYWQgb2YgYHZzbnByaW50ZmAgaXMgYSBzbWFydCBjaG9pY2UgZm9yIHNhZmVyIGFuZCBtb3JlIHJvYnVzdCBzdHJpbmcgZm9ybWF0dGluZy4gQWxzbywgb25seSBpbmNyZW1lbnRpbmcgdGhlIGxlbmd0aCBjb3VudGVyIHdoZW4gYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgc3VjY2VlZHMgaXMgYSBzZW5zaWJsZSBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBsZW5ndGggaW5jb25zaXN0ZW5jaWVzLgoKVGhlIGFkZGl0aW9uIG9mIHRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNgIGlzIHRoZSBtb3N0IGltcG9ydGFudCBwYXJ0IG9mIHRoZSBwYWNrYWdlLiBJdCBzaG93cyB0aGF0IHRoZXNlIGlzc3VlcyBhcmUgbm93IGNvdmVyZWQgYW5kIHRoYXQgdGhlIGtlcm5lbCBjYW4gb3BlcmF0ZSB3aXRoaW4gc2FmZXR5IG1hcmdpbnMuCgpPdmVyYWxsLCB0aGVzZSBsb29rIGxpa2Ugd2VsbC1jb25zaWRlcmVkIGNoYW5nZXMgdGhhdCBpbXByb3ZlIHJvYnVzdG5lc3MgYW5kIHByZXZlbnQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB3aXRoaW4gdGhlIEJQRiBzdHJlYW0gaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGl0c2VsZiB0byB2ZXJpZnkgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBhbmQgdGhlIHRlc3QgY292ZXJhZ2UsIGJ1dCBvbiB0aGUgc3VyZmFjZSwgdGhpcyBwYXRjaCBzZWVtcyBsaWtlIGEgcG9zaXRpdmUgc3RlcCBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDthcmVuYS5jJiMzNDssCiAgICAmIzM0O2FycmF5bWFwLmMmIzM0OywKICAgICYjMzQ7Ymxvb21fZmlsdGVyLmMmIzM0OywKICAgICYjMzQ7YnBmX2NncnBfc3RvcmFnZS5jJiMzNDssCiAgICAmIzM0O2JwZl9pbm9kZV9zdG9yYWdlLmMmIzM0OywKICAgICYjMzQ7YnBmX2luc25fYXJyYXkuYyYjMzQ7LAogICAgJiMzNDticGZfaXRlci5jJiMzNDssCiAgICAmIzM0O2JwZl9sb2NhbF9zdG9yYWdlLmMmIzM0OywKICAgICYjMzQ7YnBmX2xydV9saXN0LmMmIzM0OywKICAgICYjMzQ7YnBmX2xydV9saXN0LmgmIzM0OywKICAgICYjMzQ7YnBmX2xzbS5jJiMzNDssCiAgICAmIzM0O2JwZl9sc21fcHJvdG8uYyYjMzQ7LAogICAgJiMzNDticGZfc3RydWN0X29wcy5jJiMzNDssCiAgICAmIzM0O2JwZl90YXNrX3N0b3JhZ2UuYyYjMzQ7LAogICAgJiMzNDtidGYuYyYjMzQ7LAogICAgJiMzNDtidGZfaXRlci5jJiMzNDssCiAgICAmIzM0O2J0Zl9yZWxvY2F0ZS5jJiMzNDssCiAgICAmIzM0O2Nncm91cC5jJiMzNDssCiAgICAmIzM0O2Nncm91cF9pdGVyLmMmIzM0OywKICAgICYjMzQ7Y29yZS5jJiMzNDssCiAgICAmIzM0O2NwdW1hcC5jJiMzNDssCiAgICAmIzM0O2NwdW1hc2suYyYjMzQ7LAogICAgJiMzNDtjcnlwdG8uYyYjMzQ7LAogICAgJiMzNDtkZXZtYXAuYyYjMzQ7LAogICAgJiMzNDtkaXNhc20uYyYjMzQ7LAogICAgJiMzNDtkaXNhc20uaCYjMzQ7LAogICAgJiMzNDtkaXNwYXRjaGVyLmMmIzM0OywKICAgICYjMzQ7ZG1hYnVmX2l0ZXIuYyYjMzQ7LAogICAgJiMzNDtoYXNodGFiLmMmIzM0OywKICAgICYjMzQ7aGVscGVycy5jJiMzNDssCiAgICAmIzM0O2lub2RlLmMmIzM0OywKICAgICYjMzQ7a21lbV9jYWNoZV9pdGVyLmMmIzM0OywKICAgICYjMzQ7bGlua19pdGVyLmMmIzM0OywKICAgICYjMzQ7bGl2ZW5lc3MuYyYjMzQ7LAogICAgJiMzNDtsb2NhbF9zdG9yYWdlLmMmIzM0OywKICAgICYjMzQ7bG9nLmMmIzM0OywKICAgICYjMzQ7bHBtX3RyaWUuYyYjMzQ7LAogICAgJiMzNDttYXBfaW5fbWFwLmMmIzM0OywKICAgICYjMzQ7bWFwX2luX21hcC5oJiMzNDssCiAgICAmIzM0O21hcF9pdGVyLmMmIzM0OywKICAgICYjMzQ7bWVtYWxsb2MuYyYjMzQ7LAogICAgJiMzNDttbWFwX3VubG9ja193b3JrLmgmIzM0OywKICAgICYjMzQ7bXByb2cuYyYjMzQ7LAogICAgJiMzNDtuZXRfbmFtZXNwYWNlLmMmIzM0OywKICAgICYjMzQ7b2ZmbG9hZC5jJiMzNDssCiAgICAmIzM0O3BlcmNwdV9mcmVlbGlzdC5jJiMzNDssCiAgICAmIzM0O3BlcmNwdV9mcmVlbGlzdC5oJiMzNDssCiAgICAmIzM0O3Byb2dfaXRlci5jJiMzNDssCiAgICAmIzM0O3F1ZXVlX3N0YWNrX21hcHMuYyYjMzQ7LAogICAgJiMzNDtyYW5nZV90cmVlLmMmIzM0OywKICAgICYjMzQ7cmFuZ2VfdHJlZS5oJiMzNDssCiAgICAmIzM0O3JlbG9fY29yZS5jJiMzNDssCiAgICAmIzM0O3JldXNlcG9ydF9hcnJheS5jJiMzNDssCiAgICAmIzM0O3JpbmdidWYuYyYjMzQ7LAogICAgJiMzNDtycXNwaW5sb2NrLmMmIzM0OywKICAgICYjMzQ7cnFzcGlubG9jay5oJiMzNDssCiAgICAmIzM0O3N0YWNrbWFwLmMmIzM0OywKICAgICYjMzQ7c3RyZWFtLmMmIzM0OywKICAgICYjMzQ7c3lzY2FsbC5jJiMzNDssCiAgICAmIzM0O3N5c2ZzX2J0Zi5jJiMzNDssCiAgICAmIzM0O3Rhc2tfaXRlci5jJiMzNDssCiAgICAmIzM0O3RjeC5jJiMzNDssCiAgICAmIzM0O3RudW0uYyYjMzQ7LAogICAgJiMzNDt0b2tlbi5jJiMzNDssCiAgICAmIzM0O3RyYW1wb2xpbmUuYyYjMzQ7LAogICAgJiMzNDt2ZXJpZmllci5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBbCiAgICAmIzM0O3ByZWxvYWQmIzM0OwogIF0KfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNjAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEJQRiBTdHJlYW0gQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgQlBGIHN0cmVhbSBmdW5jdGlvbmFsaXR5LiBGaXJzdCB0aGluZ3MgZmlyc3QsIGdvb2QsIGBzdHJlYW0uY2AgaXMgc2l0dGluZyByaWdodCB3aGVyZSBJJiMzOTtkIGV4cGVjdCBpdCwgdHVja2VkIGF3YXkgaW4gYGtlcm5lbC9icGYvYC4gTm93IHRoZSByZWFsIHdvcmsgYmVnaW5zLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmU6IGBicGZfc3RyZWFtX3JlYWRgLCBgYnBmX3N0cmVhbV92cHJpbnRrYCwgYW5kIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AuIFRob3NlIG5hbWVzIHRoZW1zZWx2ZXMgZ2l2ZSBtZSBzb21lIGNsdWVzLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgZXhhY3Qgcm9sZXMgYW5kIGludGVyYWN0aW9ucy4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IHRoYXQgdGhpcyBwYXJ0aWN1bGFyIHN0cmVhbSBjb2RlIGlzIGFjdHVhbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBidWlsZC4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIGl0LiBJIGRvbiYjMzk7dCB3YW50IHRvIHdhc3RlIHRpbWUgY2hhc2luZyBkb3duIGNvZGUgdGhhdCYjMzk7cyBiZWVuIGNvbXBpbGVkIG91dC4gS25vd2luZyB0aGUgY29uZmlnIG9wdGlvbnMgd2lsbCBhbHNvIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHRoaXMgZnVuY3Rpb25hbGl0eSBoYXMgd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBlY29zeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RyZWFtXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBTdHJlYW0gRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyB0aGlzIGlzIGNvbXBpbGVkIHdpdGggYENPTkZJR19CUEZfU1lTQ0FMTGAsIHdoaWNoIGlzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBjaGFuZ2VzIGFuZCBzZWUgd2hhdCYjMzk7cyBiZWVuIG1vZGlmaWVkLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gcmVhY2hhYmlsaXR5IG9mIHRob3NlIGNoYW5nZXMuCgpMb29raW5nIGF0IHRoZSBsaXN0LCB3ZSBoYXZlIGEgZmV3IGZ1bmN0aW9ucyB0aGF0IHNlZW0gdG8gYmUga2V5LiBJIHNlZToKCiogICBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYCwgYGJwZl9zdHJlYW1fY29uc3VtZV9jYXBhY2l0eWAsIGBicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHlgLCBgYnBmX3N0cmVhbV9wdXNoX3N0cmA6IFRoZXNlIGFyZSBhbGwgc3RhdGljLCBzbyB0aGV5JiMzOTtyZSBpbnRlcm5hbGx5IHNjb3BlZCB3aXRoaW4gdGhlIEJQRiBzdHJlYW0gaW1wbGVtZW50YXRpb24uIFRoaXMgbWFrZXMgbWUgY3VyaW91cyBhYm91dCBob3cgdGhlc2UgYXJlIGJlaW5nIHVzZWQsIHdoYXQgdGhlIG92ZXJhbGwgZGVzaWduIHBhdHRlcm4gaXMuCiogICBgYnBmX3N0cmVhbV92cHJpbnRrYDogVGhpcyBpcyBpbnRlcmVzdGluZywgaXQmIzM5O3MgYSBrZnVuYy4gVGhlIGBfX2JwZl9rZnVuY2AgcHJlZml4IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGZvciBCUEYgdXNlLCBsaWtlbHkgZm9yIGxvZ2dpbmcgb3IgZGVidWdnaW5nIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIFRoZSBgaW50YCByZXR1cm4gdHlwZSBpbXBsaWVzIGl0IG1heSByZXR1cm4gc3RhdHVzIGluZm9ybWF0aW9uLgoqICAgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYDogQW5vdGhlciBgcHJpbnRrYCBmdW5jdGlvbiwgYnV0IGdsb2JhbC4gVGhpcyBtYWtlcyBtZSB3b25kZXIgYWJvdXQgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhpcyBhbmQgdGhlIGtmdW5jIHZlcnNpb24uIEl0IHdvdWxkIGJlIGltcG9ydGFudCB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIHNoYXJlZCBmdW5jdGlvbmFsaXR5IG9yIGhhcyBzcGVjaWZpYyB1c2FnZXMuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoZXJlIGlzIGBicGZfc3RyZWFtX3JlYWRgIHVzZWQ/IEZpbmRpbmcgaXRzIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBCUEYgc3RyZWFtcyBhcmUgYmVpbmcgY29uc3VtZWQgYW5kIHV0aWxpemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9zdHJlYW1fcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RyZWFtLmM9MTQ5PXN0YXRpYyBib29sIGJwZl9zdHJlYW1fY29uc3VtZV9lbGVtKHN0cnVjdCBicGZfc3RyZWFtX2VsZW0gKmVsZW0sIGludCAqbGVuKVxuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtMTU5LVxua2VybmVsL2JwZi9zdHJlYW0uYzoxNjA6c3RhdGljIGludCBicGZfc3RyZWFtX3JlYWQoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgdm9pZCBfX3VzZXIgKmJ1ZiwgaW50IGxlbilcbmtlcm5lbC9icGYvc3RyZWFtLmMtMTYxLXtcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTIwNj1pbnQgYnBmX3Byb2dfc3RyZWFtX3JlYWQoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBlbnVtIGJwZl9zdHJlYW1faWQgc3RyZWFtX2lkLCB2b2lkIF9fdXNlciAqYnVmLCBpbnQgbGVuKVxuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtMjEyLVx0XHRyZXR1cm4gLUVOT0VOVDtcbmtlcm5lbC9icGYvc3RyZWFtLmM6MjEzOlx0cmV0dXJuIGJwZl9zdHJlYW1fcmVhZChzdHJlYW0sIGJ1ZiwgbGVuKTtcbmtlcm5lbC9icGYvc3RyZWFtLmMtMjE0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTMxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGJwZl9wcm9nX3N0cmVhbV9yZWFkYCBVc2FnZSoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBicGZfcHJvZ19zdHJlYW1fcmVhZGAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHRoZSBnYXRld2F5LCBjYWxsaW5nIGBicGZfc3RyZWFtX3JlYWRgIHVuZGVyIHRoZSBob29kLiBTbywgbXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiAqd2hlcmUqIGlzIGBicGZfcHJvZ19zdHJlYW1fcmVhZGAgaXRzZWxmIGJlaW5nIGNhbGxlZD8gS25vd2luZyBpdHMgZW50cnkgcG9pbnRzIGlzIGNydWNpYWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBjb250ZXh0cyBpbiB3aGljaCB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQuIElzIGl0IGZyb20gdXNlciBzcGFjZSwga2VybmVsIHNwYWNlLCBvciBib3RoPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIEJQRiBwcm9ncmFtIHR5cGVzIHRoYXQgYXJlIHV0aWxpemluZyB0aGlzPyBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGxlcnMgdG8gZ2FpbiBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIGltcGFjdCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBkYXRhIGZsb3cuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9wcm9nX3N0cmVhbV9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdHJlYW0uYz0xNjA9c3RhdGljIGludCBicGZfc3RyZWFtX3JlYWQoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgdm9pZCBfX3VzZXIgKmJ1ZiwgaW50IGxlbilcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTIwNS1cbmtlcm5lbC9icGYvc3RyZWFtLmM6MjA2OmludCBicGZfcHJvZ19zdHJlYW1fcmVhZChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGVudW0gYnBmX3N0cmVhbV9pZCBzdHJlYW1faWQsIHZvaWQgX191c2VyICpidWYsIGludCBsZW4pXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTIwNy17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjEyNj1zdGF0aWMgaW50IHByb2dfc3RyZWFtX3JlYWQodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjEzOS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYxNDA6XHRyZXQgPSBicGZfcHJvZ19zdHJlYW1fcmVhZChwcm9nLCBhdHRyLVx1MDAzZXByb2dfc3RyZWFtX3JlYWQuc3RyZWFtX2lkLCBidWYsIGxlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MTQxLVx0YnBmX3Byb2dfcHV0KHByb2cpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYSBCUEYgU3lzdGVtIENhbGwqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoaXMgYmFjazsgdGhpcyBjYWxsIG9yaWdpbmF0ZXMgZnJvbSBgcHJvZ19zdHJlYW1fcmVhZGAgd2l0aGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIENvbnNpZGVyaW5nIHRoZSBjb250ZXh0LCBpdCYjMzk7cyBwcmV0dHkgc2FmZSB0byBhc3N1bWUgdGhpcyBpcyByZWxhdGVkIHRvIGEgQlBGIHN5c3RlbSBjYWxsIGNvbW1hbmQuIE15IGZvY3VzIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBzdHJlYW0tcmVsYXRlZCBwcmludCBmdW5jdGlvbnMsIG5hbWVseSBgYnBmX3N0cmVhbV92cHJpbnRrYCBhbmQgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRob3NlIGZ1bmN0aW9ucyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhpcyBCUEYgaW50ZXJhY3Rpb24uIExldCYjMzk7cyBkaWcgaW50byB0aG9zZSBhbmQgc2VlIHdoYXQgaW5mb3JtYXRpb24gdGhleSBjYW4gcHJvdmlkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3N0cmVhbV92cHJpbnRrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmM9NDY3OT1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2Nncm91cF9yZWFkX3hhdHRyLCBLRl9SQ1UpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjgwLSNlbmRpZlxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY4MTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmVhbV92cHJpbnRrLCBLRl9JTVBMSUNJVF9BUkdTKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY4Mi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmVhbV9wcmludF9zdGFjaywgS0ZfSU1QTElDSVRfQVJHUylcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTIxNj1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy0yMjEtICovXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjIyMjpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b2lkICphcmdzLFxua2VybmVsL2JwZi9zdHJlYW0uYy0yMjMtXHRcdFx0XHQgICB1MzIgbGVuX19zeiwgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjQ3Nj1lbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNTMxLVx0S0ZfYnBmX3Nlc3Npb25faXNfcmV0dXJuLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNTMyOlx0S0ZfYnBmX3N0cmVhbV92cHJpbnRrLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNTMzLVx0S0ZfYnBmX3N0cmVhbV9wcmludF9zdGFjayxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI2MTE9QlRGX0lEKGZ1bmMsIGJwZl9zZXNzaW9uX2lzX3JldHVybilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjYxMjpCVEZfSUQoZnVuYywgYnBmX3N0cmVhbV92cHJpbnRrKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNjEzLUJURl9JRChmdW5jLCBicGZfc3RyZWFtX3ByaW50X3N0YWNrKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzA2MT1zdGF0aWMgYm9vbCBpc19icGZfc3RyZWFtX2tmdW5jKHUzMiBidGZfaWQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMwNjIte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEzMDYzOlx0cmV0dXJuIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3N0cmVhbV92cHJpbnRrXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMDY0LVx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3N0cmVhbV9wcmludF9zdGFja107XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4OTYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgQlBGIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBCUEYgU3RyZWFtIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBicGZfc3RyZWFtX3ZwcmludGtgLiBUaGF0JiMzOTtzIGEga2Z1bmMsIHJpZ2h0PyBBbmQgaXQmIzM5O3Mgb25lIHRoYXQgY2FuIGJlIGNhbGxlZCBkaXJlY3RseSBmcm9tIHdpdGhpbiBhIEJQRiBwcm9ncmFtLiBUaGF0JiMzOTtzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLCBoZWxwZnVsIGZvciBzdHJlYW1pbmcgb3V0IG9mIEJQRiBwcm9ncmFtcy4KCk5vdywgbXkgbWluZCB3YW5kZXJzIGEgYml0Li4ud2hhdCBhYm91dCB0aGUgb3RoZXIgb25lPyBJIHdvbmRlciwgd2hhdCYjMzk7cyB0aGlzIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2A/IERvZXMgdGhhdCBoYXZlIHNpbWlsYXIgY2FwYWJpbGl0aWVzPyBJIHNob3VsZCBsb29rIGludG8gdGhpcyBtb3JlLCBzZWUgaG93IGl0IGZpdHMgaW4gdG8gdGhlIHdpZGVyIHBpY3R1cmUgb2YgQlBGIHN0cmVhbSBmdW5jdGlvbmFsaXR5LiBNYXliZSBpdCBoYXMgc2ltaWxhciBmZWF0dXJlcywgb3Igb3BlcmF0ZXMgaW4gYSBkaWZmZXJlbnQgd2F5LiBUaGF0JiMzOTtzIGEgZ29vZCBuZXh0IGxpbmUgb2YgaW5xdWlyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3N0cmVhbV9zdGFnZV9wcmludGsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0cmVhbS5jPTMxND12b2lkIGJwZl9zdHJlYW1fc3RhZ2VfZnJlZShzdHJ1Y3QgYnBmX3N0cmVhbV9zdGFnZSAqc3MpXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy0zMjEtXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjMyMjppbnQgYnBmX3N0cmVhbV9zdGFnZV9wcmludGsoc3RydWN0IGJwZl9zdHJlYW1fc3RhZ2UgKnNzLCBjb25zdCBjaGFyICpmbXQsIC4uLilcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzIzLXtcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTM3NT1zdGF0aWMgYm9vbCBkdW1wX3N0YWNrX2NiKHZvaWQgKmNvb2tpZSwgdTY0IGlwLCB1NjQgc3AsIHU2NCBicClcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTM4OC1cdFx0XHRnb3RvIGVuZDtcbmtlcm5lbC9icGYvc3RyZWFtLmM6Mzg5Olx0XHRjdHhwLVx1MDAzZWVyciA9IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKGN0eHAtXHUwMDNlc3MsIFwmIzM0OyVwU1xcbiAgJXMgQCAlczolZFxcblwmIzM0Oyxcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzkwLVx0XHRcdFx0XHRcdCAgICAodm9pZCAqKShsb25nKWlwLCBsaW5lLCBmaWxlLCBudW0pO1xuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtMzkzLWVuZDpcbmtlcm5lbC9icGYvc3RyZWFtLmM6Mzk0Olx0Y3R4cC1cdTAwM2VlcnIgPSBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhjdHhwLVx1MDAzZXNzLCBcJiMzNDslcFNcXG5cJiMzNDssICh2b2lkICopKGxvbmcpaXApO1xua2VybmVsL2JwZi9zdHJlYW0uYy0zOTUtXHRyZXR1cm4gIWN0eHAtXHUwMDNlZXJyO1xuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmM9Mzk4PWludCBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2soc3RydWN0IGJwZl9zdHJlYW1fc3RhZ2UgKnNzKVxuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtNDAyLVxua2VybmVsL2JwZi9zdHJlYW0uYzo0MDM6XHRyZXQgPSBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhzcywgXCYjMzQ7Q1BVOiAlZCBVSUQ6ICVkIFBJRDogJWQgQ29tbTogJXNcXG5cJiMzNDssXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTQwNC1cdFx0XHRcdCAgICAgIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIF9fa3VpZF92YWwoY3VycmVudF9yZWFsX2NyZWQoKS1cdTAwM2VldWlkKSxcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTQwNy1cdFx0cmV0dXJuIHJldDtcbmtlcm5lbC9icGYvc3RyZWFtLmM6NDA4Olx0cmV0ID0gYnBmX3N0cmVhbV9zdGFnZV9wcmludGsoc3MsIFwmIzM0O0NhbGwgdHJhY2U6XFxuXCYjMzQ7KTtcbmtlcm5lbC9icGYvc3RyZWFtLmMtNDA5LVx0aWYgKHJldClcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTQxMy1cdFx0cmV0dXJuIGN0eC5lcnI7XG5rZXJuZWwvYnBmL3N0cmVhbS5jOjQxNDpcdHJldHVybiBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhzcywgXCYjMzQ7XFxuXCYjMzQ7KTtcbmtlcm5lbC9icGYvc3RyZWFtLmMtNDE1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc3MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsIENoYWluIG9mIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AqKgoKQWxyaWdodCwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhlIGBicGZfc3RyZWFtX3N0YWdlYCBjb2RlLCBhbmQgSSYjMzk7dmUgaGl0IGEgbGl0dGxlIHNuYWcuIEkgc2VlIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgaXMgYmVpbmcgaW52b2tlZCBieSBgYnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrYC4gVGhhdCYjMzk7cyBub3QgZW50aXJlbHkgdW5leHBlY3RlZCwgZ2l2ZW4gdGhlIG5hbWUuIFRoZSBgcHJpbnRrYCBzdWdnZXN0cyBsb2dnaW5nIG9mIHNvbWUga2luZCwgbGlrZWx5IHJlbGF0ZWQgdG8gc3RhY2sgZHVtcHMsIGFzIHRoZSBzZWNvbmQgZnVuY3Rpb24gbmFtZSBpbmRpY2F0ZXMuIEJ1dCBub3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlICoqY2FsbCBjaGFpbioqOiB3aGVyZSBpcyBgYnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrYCAqaXRzZWxmKiBjYWxsZWQgZnJvbT8gVW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgZmxvdyBpcyBjcnVjaWFsIGZvciBkaWFnbm9zaW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRhdGEgcGF0aCwgYW5kIGhvdyB0aGlzIGxvZ2dpbmcgZnVuY3Rpb24gaXMgYWN0dWFsbHkgaW52b2tlZCB3aXRoaW4gdGhlIEJQRiBzdHJlYW0gcHJvY2Vzc2luZy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgYnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrYCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGUgc3RhY2sgZHVtcCwgYW5kIHRoZXJlZm9yZSwgdGhlIGxvZ2dpbmcgdGhhdCBvY2N1cnMgdmlhIHRoZSBgcHJpbnRrYC4gSSBuZWVkIHRvIGxvb2sgZm9yIGNhbGxzIHRvIGl0IGluIHRoZSBrZXJuZWwgc291cmNlLCBvciBwb3RlbnRpYWxseSBldmVuIGFuYWx5emUgdGhlIEJQRiBwcm9ncmFtcyB0aGF0IGFyZSBpbiB1c2UgaWYgdGhpcyBpc24mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdHJlYW0uYz0zNzU9c3RhdGljIGJvb2wgZHVtcF9zdGFja19jYih2b2lkICpjb29raWUsIHU2NCBpcCwgdTY0IHNwLCB1NjQgYnApXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy0zOTctXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjM5ODppbnQgYnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcylcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzk5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMzkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqVHJhY2luZyB0aGUgQ2FsbCBQYXRoIG9mIGBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2tgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2tgIGlzIGJlaW5nIGludm9rZWQuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgY2FsbCBzaXRlcyBpcyBjcnVjaWFsIGZvciB0cmFjaW5nIGV4ZWN1dGlvbiBmbG93IGFuZCBkZWJ1Z2dpbmcuIFRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCBpcyBhIGdsb2JhbCBzZWFyY2guIExldCYjMzk7cyBzZWUuLi4gYSBxdWljayBnbG9iYWwgc2VhcmNoIHNob3VsZCB1bmNvdmVyIGFsbCBpbnN0YW5jZXMgb2YgdGhhdCBmdW5jdGlvbiBuYW1lLiBUaGlzIHdpbGwgaW1tZWRpYXRlbHkgc2hvdyBtZSBhbGwgbG9jYXRpb25zIGluIHRoZSBjb2RlYmFzZSB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBpdHMgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGYuaD0zOTAwPWludCBicGZfc3RyZWFtX3N0YWdlX2NvbW1pdChzdHJ1Y3QgYnBmX3N0cmVhbV9zdGFnZSAqc3MsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzkwMS1cdFx0XHQgICAgZW51bSBicGZfc3RyZWFtX2lkIHN0cmVhbV9pZCk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM5MDI6aW50IGJwZl9zdHJlYW1fc3RhZ2VfZHVtcF9zdGFjayhzdHJ1Y3QgYnBmX3N0cmVhbV9zdGFnZSAqc3MpO1xuaW5jbHVkZS9saW51eC9icGYuaC0zOTAzLVxuaW5jbHVkZS9saW51eC9icGYuaC0zOTA0LSNkZWZpbmUgYnBmX3N0cmVhbV9wcmludGsoc3MsIC4uLikgYnBmX3N0cmVhbV9zdGFnZV9wcmludGsoXHUwMDI2c3MsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9icGYuaDozOTA1OiNkZWZpbmUgYnBmX3N0cmVhbV9kdW1wX3N0YWNrKHNzKSBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2soXHUwMDI2c3MpXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM5MDYtXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz0zNzU9c3RhdGljIGJvb2wgZHVtcF9zdGFja19jYih2b2lkICpjb29raWUsIHU2NCBpcCwgdTY0IHNwLCB1NjQgYnApXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy0zOTctXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjM5ODppbnQgYnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcylcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzk5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NzYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gYGJwZl9zdHJlYW1fZHVtcF9zdGFja2AqKgoKUmlnaHQsIHNvIEkmIzM5O20gaW4gdGhlIHRoaWNrIG9mIHRoaXMgYW5kIEkmIzM5O3ZlIGNvbWUgYWNyb3NzIHRoaXMgYGJwZl9zdHJlYW1fZHVtcF9zdGFja2AgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHdoZXJlIGlzICp0aGlzKiBjYWxsZWQgZnJvbT8mIzM0OyBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgZmlyc3QgcXVlc3Rpb24sIGlzbiYjMzk7dCBpdD8gR290dGEgdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgY2FsbCBncmFwaCwgdG8gZmlndXJlIG91dCB3aHkgdGhpcyB0aGluZyBpcyBldmVuIGJlaW5nIGludm9rZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGhlcmUuIElzIGl0IHBhcnQgb2YgdGhlIGluc3RydW1lbnRhdGlvbiBmb3IgZGVidWdnaW5nPyBJcyBpdCBjb3JlIHRvIHNvbWUgZGF0YSBwcm9jZXNzaW5nIHBhdGg/IElzIGl0IGNhbGxlZCBmcm9tIGEgYGJwZl9pdGVyYCBjb250ZXh0PyBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgdGhlIHBsYWNlcyB3aGVyZSB0aGlzIHRoaW5nIGlzIHVzZWQgdG8gcHJvcGVybHkgZ3JvayB0aGUgZnVuY3Rpb24gYW5kIHRoZSBkYXRhIGl0IGFjY2Vzc2VzLiBTbywgd2hlcmXigJlzIHRoZSBjYWxsIHNpdGU/IExldCYjMzk7cyBmaW5kIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3N0cmVhbV9kdW1wX3N0YWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9MzkwMj1pbnQgYnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcyk7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0zOTA0LSNkZWZpbmUgYnBmX3N0cmVhbV9wcmludGsoc3MsIC4uLikgYnBmX3N0cmVhbV9zdGFnZV9wcmludGsoXHUwMDI2c3MsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9icGYuaDozOTA1OiNkZWZpbmUgYnBmX3N0cmVhbV9kdW1wX3N0YWNrKHNzKSBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2soXHUwMDI2c3MpXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM5MDYtXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTkzMj12b2lkIGJwZl9wcm9nX3JlcG9ydF9hcmVuYV92aW9sYXRpb24oYm9vbCB3cml0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGZhdWx0X2lwKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy05NTctXHRcdFx0XHQgIHdyaXRlID8gXCYjMzQ7V1JJVEVcJiMzNDsgOiBcJiMzNDtSRUFEXCYjMzQ7LCBhZGRyKTtcbmtlcm5lbC9icGYvYXJlbmEuYzo5NTg6XHRcdGJwZl9zdHJlYW1fZHVtcF9zdGFjayhzcyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtOTU5LVx0fSkpO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTMyMjE9c3RhdGljIG5vaW5saW5lIHZvaWQgYnBmX3Byb2dfcmVwb3J0X21heV9nb3RvX3Zpb2xhdGlvbih2b2lkKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMyMzEtXHRcdGJwZl9zdHJlYW1fcHJpbnRrKHNzLCBcJiMzNDtFUlJPUjogVGltZW91dCBkZXRlY3RlZCBmb3IgbWF5X2dvdG8gaW5zdHJ1Y3Rpb25cXG5cJiMzNDspO1xua2VybmVsL2JwZi9jb3JlLmM6MzIzMjpcdFx0YnBmX3N0cmVhbV9kdW1wX3N0YWNrKHNzKTtcbmtlcm5lbC9icGYvY29yZS5jLTMyMzMtXHR9KSk7XG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM9NjcyPXN0YXRpYyB2b2lkIGJwZl9wcm9nX3JlcG9ydF9ycXNwaW5sb2NrX3Zpb2xhdGlvbihjb25zdCBjaGFyICpzdHIsIHZvaWQgKmxvY2ssIGJvb2wgaXJxc2F2ZSlcbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02ODYtXHRcdFx0YnBmX3N0cmVhbV9wcmludGsoc3MsIFwmIzM0O0hlbGQgbG9ja1slMmRdID0gMHglcHhcXG5cJiMzNDssIGksIHJxaC1cdTAwM2Vsb2Nrc1tpXSk7XG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo2ODc6XHRcdGJwZl9zdHJlYW1fZHVtcF9zdGFjayhzcyk7XG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02ODgtXHR9KSk7XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz0yNjE9X19icGZfa2Z1bmMgaW50IGJwZl9zdHJlYW1fcHJpbnRfc3RhY2soaW50IHN0cmVhbV9pZCwgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtMjcyLVx0YnBmX3N0cmVhbV9zdGFnZShzcywgcHJvZywgc3RyZWFtX2lkLCAoe1xua2VybmVsL2JwZi9zdHJlYW0uYzoyNzM6XHRcdGJwZl9zdHJlYW1fZHVtcF9zdGFjayhzcyk7XG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI3NC1cdH0pKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2OTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEJQRiBTdHJlYW0gRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGEgcGF0dGVybiBoZXJlIHdpdGggdGhlc2UgYGJwZl9zdHJlYW1gIGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgIGlzIHRoZSBiYWNrYm9uZSwgYmVpbmcgY2FsbGVkIGluZGlyZWN0bHkgdGhyb3VnaCBgYnBmX3N0cmVhbV9wcmludGtgIHdpdGhpbiB0aGUga2VybmVsIGZpbGVzIGBhcmVuYS5jYCwgYGNvcmUuY2AsIGFuZCBgcnFzcGlubG9jay5jYC4gVGhlbiwgdGhlcmUmIzM5O3MgYGJwZl9zdHJlYW1fdnByaW50a2AsIHdoaWNoLCBpbXBvcnRhbnRseSwgaXMgZXhwb3NlZCBhcyBhIGtmdW5jLCBhIGtleSBkZXRhaWwgZm9yIEJQRiBwcm9ncmFtIGludGVyYWN0aW9uLiBGaW5hbGx5LCBgYnBmX3N0cmVhbV9yZWFkYCBpcyBjbGVhcmx5IHRpZWQgdG8gdGhlIGBCUEZfUFJPR19TVFJFQU1fUkVBRGAgY29tbWFuZCBvZiB0aGUgYGJwZmAgc3lzY2FsbCwgd2hpY2ggSSBhc3N1bWUgaGFuZGxlcyByZWFkaW5nIGRhdGEgZnJvbSB0aGUgc3RyZWFtLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byBgcHJvZ19zdHJlYW1fcmVhZGAgd2l0aGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiByZWFkaW5nIHRoZSBzdHJlYW0gZGF0YSB3aWxsIGJlLiBUaGlzIHdpbGwgc2hvdyBob3cgd2UgY29udHJvbCB0aGUgdXNlIG9mIHRoZSBkYXRhIGluIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2dfc3RyZWFtX3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz02MTEyPXN0YXRpYyBpbnQgdG9rZW5fY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYxMjMtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MTI0OiNkZWZpbmUgQlBGX1BST0dfU1RSRUFNX1JFQURfQllfRkRfTEFTVF9GSUVMRCBwcm9nX3N0cmVhbV9yZWFkLnByb2dfZmRcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYxMjUtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MTI2OnN0YXRpYyBpbnQgcHJvZ19zdHJlYW1fcmVhZCh1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYxMjcte1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjEyODpcdGNoYXIgX191c2VyICpidWYgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2Vwcm9nX3N0cmVhbV9yZWFkLnN0cmVhbV9idWYpO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjEyOTpcdHUzMiBsZW4gPSBhdHRyLVx1MDAzZXByb2dfc3RyZWFtX3JlYWQuc3RyZWFtX2J1Zl9sZW47XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MTMwLVx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYxMzUtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MTM2Olx0cHJvZyA9IGJwZl9wcm9nX2dldChhdHRyLVx1MDAzZXByb2dfc3RyZWFtX3JlYWQucHJvZ19mZCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MTM3LVx0aWYgKElTX0VSUihwcm9nKSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MTM5LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjE0MDpcdHJldCA9IGJwZl9wcm9nX3N0cmVhbV9yZWFkKHByb2csIGF0dHItXHUwMDNlcHJvZ19zdHJlYW1fcmVhZC5zdHJlYW1faWQsIGJ1ZiwgbGVuKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYxNDEtXHRicGZfcHJvZ19wdXQocHJvZyk7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjE4OT1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMyNS1cdGNhc2UgQlBGX1BST0dfU1RSRUFNX1JFQURfQllfRkQ6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MzI2Olx0XHRlcnIgPSBwcm9nX3N0cmVhbV9yZWFkKFx1MDAyNmF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMyNy1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjI1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTM0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIFN0cmVhbSBTdWJzeXN0ZW0gQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBCUEYgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gdGhlIEJQRiBzdHJlYW0gc3Vic3lzdGVtIGFuZCB0aGUgYEJQRl9QUk9HX1NUUkVBTV9SRUFEX0JZX0ZEYCBjb21tYW5kLCB3aGljaCBpcyBhIGJwZiBzeXNjYWxsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQsIHdoeSwgYW5kIGFyZSB0aGVzZSBjaGFuZ2VzIGZ1enphYmxlLgoKRmlyc3QsIHRoZXJlJiMzOTtzIHRoaXMgZml4IHRvIGBicGZfc3RyZWFtX3JlYWRgLiBUaGUgb2xkIGNvZGUgaGFkIGEgYnVnIHdoZXJlIHBhcnRpYWwgYGNvcHlfdG9fdXNlcmAgd3JpdGVzIHdvdWxkIGxlYWQgdG8gYC1FRkFVTFRgIGV2ZW4gaWYgc29tZSBkYXRhIHRyYW5zZmVycmVkLiBUaGUgdXBkYXRlZCBjb2RlIGNvcnJlY3RseSB1cGRhdGVzIGNvbnN1bWVkIGxlbmd0aHMgYW5kIG5vdyAqb25seSogcmV0dXJucyBgLUVGQVVMVGAgaWYgYWJzb2x1dGVseSAqbm8qIGJ5dGVzIHdlcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuIEVzc2VudGlhbGx5LCBpdCBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgc2NlbmFyaW8gd2hlcmUgYSB1c2VyIHNwYWNlIGJ1ZmZlciBpc24mIzM5O3QgbGFyZ2UgZW5vdWdoLiBUaGF0IGNoYW5nZSBpbnZvbHZlcyB1cGRhdGluZyBgZWxlbS0mZ3Q7Y29uc3VtZWRfbGVuYCBhbmQgYHJlbV9sZW5gIGR1cmluZyB0aGUgY29weS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY29ycmVjdG5lc3MgaW1wcm92ZW1lbnQuCgpOZXh0LCBJIHNlZSBjaGFuZ2VzIHRvIGBicGZfc3RyZWFtX3ZwcmludGtgLiBUaGUga2V5IGhlcmUgaXMgcHJldmVudGluZyB0cnVuY2F0aW9uLiBQcmV2aW91c2x5LCBgYnN0cl9wcmludGZgIGNvdWxkIHdyaXRlIGEgc3RyaW5nIHRoYXQgZXhjZWVkZWQgYSBtYXhpbXVtIGJ1ZmZlciBzaXplLiBOb3csIHRoZSBjb2RlIHJldHVybnMgYC1FMkJJR2AgKHNpbWlsYXIgdG8gd2hhdCB5b3UmIzM5O2Qgc2VlIGluIGBzbnByaW50ZmAgb3IgYHZzbnByaW50ZmApIGlmIHRoZSBmb3JtYXR0ZWQgc3RyaW5nIHdvdWxkIGJlIHRydW5jYXRlZCwgKmJlZm9yZSogYXR0ZW1wdGluZyB0byBwdXNoIHRoZSByZXN1bHQuIFRoaXMgcHJldmVudHMgcHVzaGluZyBjb3JydXB0ZWQgb3IgcGFydGlhbCBzdHJpbmdzIGludG8gdGhlIHN0cmVhbSwgYW5kIGl0IHVzZXMgYSBzdGFuZGFyZCBlcnJvciBjb2RlIHRvIGluZGljYXRlIHRoYXQgdHJ1bmNhdGlvbiBvY2N1cnJlZC4KClRoZSBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgIGNoYW5nZXMgYXJlIGEgYml0IHN1YnRsZXIuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyB1c2luZyBgdnNucHJpbnRmYCwgd2hpY2ggcmV0dXJucyB0aGUgKmxlbmd0aCogb2YgdGhlIHN0cmluZyB0aGF0ICp3b3VsZCogaGF2ZSBiZWVuIHdyaXR0ZW4gaWYgdGhlcmUgaGFkIGJlZW4gZW5vdWdoIHNwYWNlLCByYXRoZXIgdGhhbiB0aGUgYWN0dWFsIG51bWJlciBvZiBieXRlcyB3cml0dGVuLiBUaGlzIHdhcyBjYXVzaW5nIGFuIGluY29ycmVjdCBsZW5ndGggY2FsY3VsYXRpb24uIFRoZSBmaXggdXNlcyBgdnNjbnByaW50ZmAsIHdoaWNoIHJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiwgYW5kIG9ubHkgdXBkYXRlcyB0aGUgc3RyZWFtIGxlbmd0aCBgc3MtJmd0O2xlbmAgaWYgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgc3VjY2VlZHMuIFRoaXMgbGVhZHMgdG8gbW9yZSBhY2N1cmF0ZSBhY2NvdW50aW5nIG9mIGRhdGEgaW4gdGhlIHN0cmVhbS4KClRoZW4sIHRoZXJlJiMzOTtzIHRoZSBjaGFuZ2UgdG8gYGJwZl9zdHJlYW1fcHVzaF9zdHJgLiBUaGlzIG9uZSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgY2FwYWNpdHkgbGVhay4gSWYgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgKHdoaWNoIGlzIHRoZSBhY3R1YWwgbG93IGxldmVsIHB1c2ggdG8gdGhlIHN0cmVhbSkgZmFpbHMg4oCTIGZvciBleGFtcGxlLCBkdWUgdG8gYW4gb3V0LW9mLW1lbW9yeSBlcnJvciDigJMgdGhlIG9yaWdpbmFsIGNvZGUgd291bGQgY29uc3VtZSBjYXBhY2l0eS4gVGhlIHVwZGF0ZWQgY29kZSB3aWxsIHJlbGVhc2UgdGhlIGNhcGFjaXR5IGlmIHRoZSBsb3ctbGV2ZWwgcHVzaCBmYWlscy4gVGhpcyBwcmV2ZW50cyB0aGUgc3RyZWFtIGZyb20gcmVwb3J0aW5nIGF2YWlsYWJsZSBjYXBhY2l0eSB0aGF0IGRvZXNuJiMzOTt0IGFjdHVhbGx5IGV4aXN0IGFuZCwgaWYgdGhlIHByb2dyYW0gaXMgY2FyZWZ1bGx5IHdyaXR0ZW4sIG1pZ2h0IHByZXZlbnQgYW4gb3V0LW9mLW1lbW9yeSBjb25kaXRpb24uCgpGaW5hbGx5LCBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYCBoYXMgYW4gb2ZmLWJ5LW9uZSBlcnJvciBmaXguIFRoZSBjb2RlIHByZXZpb3VzbHkgYWxsb3dlZCBhbiBlbGVtZW50IGxlbmd0aCB0aGF0IGNvdWxkIGJlIGVxdWFsIHRvIHRoZSBtYXggbGVuZ3RoLCB3aGljaCBjb3VsZCBoYXZlIGJlZW4gYSBidWZmZXIgb3ZlcmZsb3cuIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgoKQWxsIHRoZXNlIGNoYW5nZXMgYXJlIGVzc2VudGlhbGx5IGNvcnJlY3RuZXNzIGltcHJvdmVtZW50cy4gQW5kIEkga25vdyB0aGUgQlBGIHN1YnN5c3RlbSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBzeXNjYWxscyBhbmQgQlBGIHByb2dyYW1zIHRoZW1zZWx2ZXMsIHdoaWNoIG1lYW5zIEkgY2FuIHJlYWNoIGl0IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFNvLCB5ZXMsIHRoZXNlIGZpeGVzIGFyZSB3b3J0aCBmdXp6aW5nLgoKTXkgcHJpbWFyeSB0YXJnZXRzIGFyZSB0aGUgZnVuY3Rpb25zIG1vZGlmaWVkOiBgYnBmX3N0cmVhbV9yZWFkYCwgd2hpY2ggaXMgY2FsbGVkIHRocm91Z2ggdGhlIHN5c2NhbGwgYF9fc3lzX2JwZmAsIGBicGZfc3RyZWFtX3ZwcmludGtgLCBhbmQgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYC4gSSBuZWVkIHRvIHJlbWVtYmVyIGBicGZfc3RyZWFtX3JlYWRgIGlzIGNhbGxlZCB0aHJvdWdoIGBicGZfcHJvZ19zdHJlYW1fcmVhZGAgZnVuY3Rpb24uIEkgd2lsbCBuZWVkIHRvIGNoZWNrIGhvdyB0byByZWFjaCBgYnBmX3N0cmVhbV92cHJpbnRrYCBhbmQgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCBmcm9tIEJQRiBwcm9ncmFtcyB0aGF0IEkgbWF5IHdyaXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcHJvZ19zdHJlYW1fcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RyZWFtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdHJlYW0uYz0xNjA9c3RhdGljIGludCBicGZfc3RyZWFtX3JlYWQoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgdm9pZCBfX3VzZXIgKmJ1ZiwgaW50IGxlbilcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTIwNS1cbmtlcm5lbC9icGYvc3RyZWFtLmM6MjA2OmludCBicGZfcHJvZ19zdHJlYW1fcmVhZChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGVudW0gYnBmX3N0cmVhbV9pZCBzdHJlYW1faWQsIHZvaWQgX191c2VyICpidWYsIGludCBsZW4pXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTIwNy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTEyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCB0aGVzZSBCUEYgZnVuY3Rpb25zOiBgYnBmX3Byb2dfc3RyZWFtX3JlYWRgLCBgYnBmX3N0cmVhbV92cHJpbnRrYCwgYW5kIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AuIFJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBlc3RhYmxpc2ggdGhhdCBgYnBmX3Byb2dfc3RyZWFtX3JlYWRgIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uOyBubyBzdXJwcmlzZXMgdGhlcmUuIEFuZCwgc2luY2UgYGJwZl9zdHJlYW1fdnByaW50a2AgaXMgYSBrZnVuYywgdGhhdCBhbHNvIG1lYW5zIGl0JiMzOTtzIGdsb2JhbGx5IGF2YWlsYWJsZS4gRmluYWxseSwgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCBpcyBhbHNvIGEgZ2xvYmFsIGZ1bmN0aW9uLiBOb3csIGxldCYjMzk7cyBkaXZlIGludG8gY29uZmlndXJhdGlvbnMuIEl0JiMzOTtzIHRpbWUgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IG11c3QgYmUgZW5hYmxlZC4gSSBrbm93IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGFuIGFic29sdXRlIG5lY2Vzc2l0eS4gSG93ZXZlciwgSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IG90aGVyIGhpZGRlbiBkZXBlbmRlbmNpZXMuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBjaGVjayBga2VybmVsL2JwZi9NYWtlZmlsZWAgYWdhaW4sIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGlkZW50aWZ5IGFueSBvdGhlciByZWxldmFudCBjb25maWcgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RyZWFtXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM2NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipCUEYgU3lzdGVtIENhbGwgQ29uZmlndXJhdGlvbiBhbmQgYGJwZl9zdHJlYW1fdnByaW50a2AgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgY3J1Y2lhbCBzZXR0aW5nIGhlcmUsIHRoZSBjb3JlIGVuYWJsZXIgZm9yIEJQRiBzeXN0ZW0gY2FsbCBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3MgY29ycmVjdGx5IGNvbmZpZ3VyZWQgYW5kIGZ1bmN0aW9uaW5nIGFzIGV4cGVjdGVkIGJlZm9yZSBkaXZpbmcgZGVlcGVyLgoKTm93LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBicGZfc3RyZWFtX3ZwcmludGtgLiBJJiMzOTttIGN1cmlvdXMgaWYgaXQgaGFzIGFueSBhZGRpdGlvbmFsIGRlcGVuZGVuY2llcyBvciBwcmVyZXF1aXNpdGVzIGJleW9uZCB0aGUgb2J2aW91cyBCUEYgc3lzdGVtIGNhbGwgZW5hYmxlbWVudC4gVGhlcmUgY291bGQgYmUgc3VidGxlIGxpbmthZ2VzIHRvIG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIHN1YnN5c3RlbXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkgbmVlZCB0byBlbnN1cmUgYSBob2xpc3RpYyB1bmRlcnN0YW5kaW5nIG9mIGFsbCBjb250cmlidXRpbmcgZmFjdG9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3N0cmVhbV92cHJpbnRrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdHJlYW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0cmVhbS5jPTIxNj1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy0yMjEtICovXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjIyMjpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b2lkICphcmdzLFxua2VybmVsL2JwZi9zdHJlYW0uYy0yMjMtXHRcdFx0XHQgICB1MzIgbGVuX19zeiwgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTcyOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDaGVja2luZyBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgIGZvciBOZWNlc3NhcnkgVXBkYXRlcyoqCgpBbHJpZ2h0LCBubyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBnb2luZyBvbiBhcm91bmQgdGhpcyBvbmUsIHdoaWNoIGlzIGdvb2QuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIE5vdywgSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgLiBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIHN0aWxsIG9wZXJhdGluZyBjb3JyZWN0bHkgd2l0aGluIHRoZSBjdXJyZW50IGRlc2lnbiBhbmQgdGhhdCBJIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55IG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgb3IgaW50ZXJhY3Rpb25zLiBJcyB0aGVyZSBzb21ldGhpbmcgZWxzZSB0aGlzIGZ1bmN0aW9uIG5vdyBuZWVkcyB0byB3b3JrIHdpdGgsIGdpdmVuIHRoZSByZWNlbnQgY2hhbmdlcz8gSSBzaG91bGQgY2FyZWZ1bGx5IGV4YW1pbmUgaXRzIGltcGxlbWVudGF0aW9uIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGRhdGEgZmxvdy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBkb2luZyBldmVyeXRoaW5nIGl0JiMzOTtzIHN1cHBvc2VkIHRvIGJlIGRvaW5nIGFuZCB0aGF0IHRoZSBpbnRlZ3JhdGlvbiBpcyBjbGVhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3N0cmVhbV9zdGFnZV9wcmludGsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0cmVhbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RyZWFtLmM9MzE0PXZvaWQgYnBmX3N0cmVhbV9zdGFnZV9mcmVlKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcylcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTMyMS1cbmtlcm5lbC9icGYvc3RyZWFtLmM6MzIyOmludCBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhzdHJ1Y3QgYnBmX3N0cmVhbV9zdGFnZSAqc3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxua2VybmVsL2JwZi9zdHJlYW0uYy0zMjMte1xuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmM9Mzc1PXN0YXRpYyBib29sIGR1bXBfc3RhY2tfY2Iodm9pZCAqY29va2llLCB1NjQgaXAsIHU2NCBzcCwgdTY0IGJwKVxuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtMzg4LVx0XHRcdGdvdG8gZW5kO1xua2VybmVsL2JwZi9zdHJlYW0uYzozODk6XHRcdGN0eHAtXHUwMDNlZXJyID0gYnBmX3N0cmVhbV9zdGFnZV9wcmludGsoY3R4cC1cdTAwM2VzcywgXCYjMzQ7JXBTXFxuICAlcyBAICVzOiVkXFxuXCYjMzQ7LFxua2VybmVsL2JwZi9zdHJlYW0uYy0zOTAtXHRcdFx0XHRcdFx0ICAgICh2b2lkICopKGxvbmcpaXAsIGxpbmUsIGZpbGUsIG51bSk7XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy0zOTMtZW5kOlxua2VybmVsL2JwZi9zdHJlYW0uYzozOTQ6XHRjdHhwLVx1MDAzZWVyciA9IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKGN0eHAtXHUwMDNlc3MsIFwmIzM0OyVwU1xcblwmIzM0OywgKHZvaWQgKikobG9uZylpcCk7XG5rZXJuZWwvYnBmL3N0cmVhbS5jLTM5NS1cdHJldHVybiAhY3R4cC1cdTAwM2VlcnI7XG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz0zOTg9aW50IGJwZl9zdHJlYW1fc3RhZ2VfZHVtcF9zdGFjayhzdHJ1Y3QgYnBmX3N0cmVhbV9zdGFnZSAqc3MpXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy00MDItXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjQwMzpcdHJldCA9IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHNzLCBcJiMzNDtDUFU6ICVkIFVJRDogJWQgUElEOiAlZCBDb21tOiAlc1xcblwmIzM0Oyxcbmtlcm5lbC9icGYvc3RyZWFtLmMtNDA0LVx0XHRcdFx0ICAgICAgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwgX19rdWlkX3ZhbChjdXJyZW50X3JlYWxfY3JlZCgpLVx1MDAzZWV1aWQpLFxuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtNDA3LVx0XHRyZXR1cm4gcmV0O1xua2VybmVsL2JwZi9zdHJlYW0uYzo0MDg6XHRyZXQgPSBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhzcywgXCYjMzQ7Q2FsbCB0cmFjZTpcXG5cJiMzNDspO1xua2VybmVsL2JwZi9zdHJlYW0uYy00MDktXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtNDEzLVx0XHRyZXR1cm4gY3R4LmVycjtcbmtlcm5lbC9icGYvc3RyZWFtLmM6NDE0Olx0cmV0dXJuIGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHNzLCBcJiMzNDtcXG5cJiMzNDspO1xua2VybmVsL2JwZi9zdHJlYW0uYy00MTUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU4NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCUEYgU3RyZWFtIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGVyZSBhcmVuJiMzOTt0IGFueSBzcGVjaWFsIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIHRoZXNlIGZ1bmN0aW9ucywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoYXQgbWVhbnMgdGhleSBhcmUgYWx3YXlzIGluY2x1ZGVkLiBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBpbXBvcnRhbnQgc3ltYm9scyBmb3IgdGhpcy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZTogYGJwZl9wcm9nX3N0cmVhbV9yZWFkYCwgYGJwZl9zdHJlYW1fdnByaW50a2AsIGFuZCBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgLgoKV2FpdCBhIG1pbnV0ZSwgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCBpcyBjYWxsZWQgaW5kaXJlY3RseSB0aHJvdWdoIGBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2tgLiBJIHNlZSB0aGF0IGBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2tgIGlzIGNhbGxlZCBieSBgYnBmX3Byb2dfcmVwb3J0X2FyZW5hX3Zpb2xhdGlvbmAsIGBicGZfcHJvZ19yZXBvcnRfbWF5X2dvdG9fdmlvbGF0aW9uYCwgYW5kIGBicGZfcHJvZ19yZXBvcnRfcnFzcGlubG9ja192aW9sYXRpb25gLiBTbywgKmNhbiogYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCBiZSBkaXJlY3RseSBjYWxsZWQgZnJvbSBCUEY/IE5vLCBpdCYjMzk7cyBhbiBpbnRlcm5hbCBrZXJuZWwgZnVuY3Rpb24uIEl0IGZvcm1hdHMgc3RyaW5ncyBpbnRvIHRoZSBzdHJlYW0sIGJ1dCBpdCYjMzk7cyAqZ2xvYmFsKiBhbmQgaXQmIzM5O3MgYmVpbmcgbW9kaWZpZWQuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGluIHRoaXMgY29udGV4dCwgc28gaXQgaXMgYSBnb29kIHRhcmdldC4KCk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbi4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIG9idmlvdXMgb25lLCBidXQgYXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBCZXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTtsbCBnbyBiYWNrIHRvIGBpbml0L0tjb25maWdgIGFuZCBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgQlBGX1NZU0NBTExgIHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMDAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludGVybmFsIENvZGUgRGl2ZTogSHVudGluZyBmb3IgYEJQRl9TWVNDQUxMYCoqCgpBbHJpZ2h0LCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIGRlZXAgaW50byB0aGlzIGNvZGUsIGJ1dCBzb21ldGhpbmcmIzM5O3MgbmFnZ2luZyBhdCBtZS4gSSYjMzk7dmUgZW5jb3VudGVyZWQgYEJQRl9TWVNDQUxMYCwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzLCAmIzM0O1doZXJlIGV4YWN0bHkgKmlzKiB0aGF0IGRlZmluZWQ/JiMzNDsgVGhpcyBpc24mIzM5O3QganVzdCBhIGNhc3VhbCB1c2FnZTsgaXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gdGhpcyBwYXJ0aWN1bGFyIGJpdCBvZiBrZXJuZWwtbGV2ZWwgbWFnaWMgSSYjMzk7bSBhbmFseXppbmcuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIG9yaWdpbiDigJMgdGhlIGluY2x1ZGUgZmlsZSwgdGhlIHNwZWNpZmljIG1hY3JvIGRlZmluaXRpb24uIEkgbmVlZCB0byBiZSAqcHJlY2lzZSouIElzIGl0IGEgY29yZSBCUEYgaGVhZGVyPyBJcyBpdCBidXJpZWQgaW4gc29tZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZGVmaW5pdGlvbj8gSXMgaXQgZXZlbiBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBCUEYgbGlicmFyeSwgb3IgaXMgdGhpcyBzb21lIGN1c3RvbSBhZGFwdGF0aW9uPyBJIGtub3cgSSBuZWVkIHRvIHRyYWNrIHRoaXMgZG93biB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgd2l0aGluIHRoaXMgY29kZSBwYXRoLiBUaW1lIHRvIGdvIGh1bnRpbmchIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzUzNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBjb25maWd1cmF0aW9uIGlzIHN0cnVjdHVyZWQuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAyNy4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBwcm9iYWJseSBkZWZpbmVkIHNvbWV3aGVyZSBpbiB0aGF0IGFyZWEuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGZvdW5kYXRpb25hbCBzZXR0aW5ncyByZWxhdGVkIHRvIGVuYWJsaW5nIG9yIGRpc2FibGluZyBCUEYgZnVuY3Rpb25hbGl0eSwgbWF5YmUgc29tZSBvZiB0aGUgY29yZSBmZWF0dXJlIHRvZ2dsZXMsIG9yIHBlcmhhcHMgdGhlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB3aGF0JiMzOTtzICpjb25maWd1cmFibGUqIGFuZCBob3cgdGhhdCBjb25maWd1cmFiaWxpdHkgaXMgcHJlc2VudGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAyOTpcdFx0c2VsZWN0IEJQRlxuICAzMDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDMxOlx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzI6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzM6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM0Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDM2Olx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICAzNzpcdFx0ZGVmYXVsdCBuXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDA6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIEJQRl9KSVRcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlBGXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDExCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBTdHJlYW0gQ2hhbmdlcyoqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzIGNvbnNpZGVyYWJseS4gTm93LCBsZXQgbWUganVzdCBydW4gdGhyb3VnaCB0aGVzZSBjaGFuZ2VzIG9uZSBtb3JlIHRpbWUgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSBkaWRuJiMzOTt0IGdsb3NzIG92ZXIgYW55IGNydWNpYWwgc3ltYm9scywgeW91IGtub3cgaG93IHRoZXNlIHRoaW5ncyBjYW4gYmUuCgpBbHJpZ2h0LCBoZXJlJiMzOTtzIHdoYXQgd2UmIzM5O3ZlIGdvdDogYGJwZl9zdHJlYW1fZWxlbV9hbGxvY2AsIGBicGZfc3RyZWFtX2NvbnN1bWVfY2FwYWNpdHlgLCBgYnBmX3N0cmVhbV9yZWxlYXNlX2NhcGFjaXR5YCwgYGJwZl9zdHJlYW1fcHVzaF9zdHJgLCBhbmQgYGJwZl9zdHJlYW1fcmVhZGAgYXJlIHRoZSBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGFkanVzdGVkLiBUaGVuIHdlIGhhdmUgYGJwZl9zdHJlYW1fdnByaW50a2AsIHdoaWNoIGlzIGEga2Z1bmMsIGFuZCB0aGUgZ2xvYmFsIGZ1bmN0aW9uIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AuCgpMb29raW5nIGF0IHRoZSBnbG9iYWwgZnVuY3Rpb25zLCBvciB0aG9zZSB0aGF0IGRpcmVjdGx5IGludGVyYWN0IHdpdGggdGhvc2Ugc3RhdGljYWxseSBtb2RpZmllZCBmdW5jdGlvbnMsIHRoZSBrZXkgb25lcyBzZWVtIHRvIGJlOiBgYnBmX3Byb2dfc3RyZWFtX3JlYWRgIOKAkyB0aGF0IGNhbGxzIGBicGZfc3RyZWFtX3JlYWRgIOKAkyBhbmQgYGJwZl9zdHJlYW1fdnByaW50a2Ag4oCTIHRoYXQgY2FsbHMgYGJwZl9zdHJlYW1fcHVzaF9zdHJgIOKAkyBhcyB3ZWxsIGFzIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2Agd2hpY2ggY2FsbHMgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAuCgpXYWl0IGEgbWludXRlLCBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgaXMgY2FsbGVkIGJ5IGJvdGggYGJwZl9zdHJlYW1fdnByaW50a2AgYW5kLi4uaGFuZyBvbi4uLmBicGZfc3RyZWFtX3ByaW50X3N0YWNrYD8gTGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgYnBmX3N0cmVhbV9wcmludF9zdGFja2AuIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBjYWxsIGNoYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc3RyZWFtX3ByaW50X3N0YWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdHJlYW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0cmVhbS5jPTIyMj1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b2lkICphcmdzLFxuLS1cbmtlcm5lbC9icGYvc3RyZWFtLmMtMjYwLS8qIERpcmVjdGx5IHRyaWdnZXIgYSBzdGFjayBkdW1wIGZyb20gdGhlIHByb2dyYW0uICovXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjI2MTpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV9wcmludF9zdGFjayhpbnQgc3RyZWFtX2lkLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI2Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODE1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQlBGIFN0cmVhbSBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBCUEYgc3RyZWFtIGNvZGUsIGFuZCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSBzZWVpbmcuIGBicGZfc3RyZWFtX3ByaW50X3N0YWNrYCB1bHRpbWF0ZWx5IHJlbGllcyBvbiBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgIHRocm91Z2ggYSBjaGFpbiBvZiBjYWxscy4gVGhhdCBtYWtlcyBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgIGEgcHJldHR5IGNyaXRpY2FsIHN5bWJvbCB0byBzdGFydCB3aXRoLiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gdGhpbmtpbmcgSSBjYW4gZXh0cmFwb2xhdGUgZnJvbSB0aGF0LgoKTGV0IG1lIHNlZSB3aGF0IGVsc2UgaXMgaGFwcGVuaW5nIGluIHRoaXMgc3BoZXJlLiBJIHNlZSBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYCBpcyBjYWxsZWQgYnkgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAsIHdoaWNoLCBpbiB0dXJuLCBpcyB1c2VkIGJ5IGJvdGggYGJwZl9zdHJlYW1fcHVzaF9zdHJgICphbmQqIHRoZSBwcmV2aW91c2x5IGlkZW50aWZpZWQgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYC4gRnVydGhlciBhbmFseXNpcyBzaG93cyBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgaXMgdXNlZCBieSBgYnBmX3N0cmVhbV92cHJpbnRrYC4KCkFscmlnaHQsIEkmIzM5O3ZlIGdvdCBhIGNsZWFyZXIgcGljdHVyZSBub3cuIEl0IGxvb2tzIGxpa2UgdGhlIGtleSBzeW1ib2xzIGhlcmUgYXJlOgoKKiAgIGBicGZfcHJvZ19zdHJlYW1fcmVhZGAKKiAgIGBicGZfc3RyZWFtX3ZwcmludGtgCiogICBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgCgpJIHNob3VsZCBub3cgcXVpY2tseSBjaGVjayBpZiBgYnBmX3Byb2dfc3RyZWFtX3JlYWRgIGlzIGV4cG9ydGVkLCBvciBqdXN0IGdsb2JhbC4gVGhlIGltcGxpY2F0aW9ucyBhcmUgZGlmZmVyZW50IGZvciBlYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmJwZl9wcm9nX3N0cmVhbV9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM3MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIFN5bWJvbCBWaXNpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIGBicGZfc3RyZWFtX3ZwcmludGtgLiBJIGtub3cgaXQmIzM5O3Mgbm90IGV4cGxpY2l0bHkgKmV4cG9ydGVkKiBwZXIgc2UsIGJ1dCBpdCYjMzk7cyBkZWZpbmVkIGdsb2JhbGx5IHdpdGhpbiBga2VybmVsL2JwZi9zdHJlYW0uY2AgYW5kIGlzIGFjdHVhbGx5IGJlaW5nICp1c2VkKiB3aXRoaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIEZvciB0aGUgYEZvY3VzU3ltYm9sc2AgcHJvamVjdCwgdGhpcyBpbXBsaWNpdCBsaW5rYWdlIHNob3VsZCBiZSBwZXJmZWN0bHkgYWNjZXB0YWJsZS4gTm93LCBJIGp1c3QgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgYGJwZl9zdHJlYW1fdnByaW50a2Agc3ltYm9sIGhhcyBhbiBgRVhQT1JUYCBtYWNybyBhcHBsaWVkIHRvIGl0IHNvbWV3aGVyZS4gSSYjMzk7bGwgY2hlY2sgdGhhdCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qYnBmX3N0cmVhbV92cHJpbnRrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTYxOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgRnVuY3Rpb24gSW5zcGVjdGlvbioqCgpBbHJpZ2h0LCB0aGlzIGlzIGEga2Z1bmMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIHJlZ2lzdGVyZWQgdGhyb3VnaCB0aGUgQlRGIChCUEYgVHlwZSBGb3JtYXQpIGluZnJhc3RydWN0dXJlLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBtb3ZlIGlzIHRvIHZlcmlmeSBpdHMgYXZhaWxhYmlsaXR5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCBpcyBhY3R1YWxseSBleHBvcnRlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGNhbiB1c2UgdGhpcyBrZnVuYyBpbiB0aGUgQlBGIHByb2dyYW0gSSBhbSB3b3JraW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgxOQoJCQkJCQkJb3V0cHV0OiAxNTAKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIGFuZCBQcmlvcml0aXppbmcgQ29kZSBDaGFuZ2VzKioKCkFscmlnaHQsIHNvIHRoaXMgaXNuJiMzOTt0IGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBidXQgaXQmIzM5O3MgY2xlYXJseSBkZWZpbmVkIGFzIGEgZ2xvYmFsIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gQnV0IG1vcmUgaW1wb3J0YW50bHksIHRoZSBjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIG1hZGUgaGVyZSBhcmUgKipkZWZpbml0ZWx5Kiogd29ydGggc2lua2luZyBteSB0ZWV0aCBpbnRvIHdpdGggZnV6emluZy4gVGhpcyBpcyBjbGFzc2ljLCByaWdodD8gVGhlIGlzc3VlcyBsaXN0ZWQgaW1tZWRpYXRlbHkganVtcCBvdXQ6IHRoZXNlIGFyZSBhbGwgY3JpdGljYWwgYnVncyBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBCUEYgc3RyZWFtIHN1YnN5c3RlbS4gSSBzZWUgYSBwYXR0ZXJuIGhlcmU6CgoqICAgRmlyc3QsIHdlIGhhdmUgYW4gT2ZmLWJ5LW9uZSBpbiBsZW5ndGggY2hlY2sgaW4gYGJwZl9zdHJlYW1fZWxlbV9hbGxvY2AuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIG1lbW9yeSBpc3N1ZSwgYW5kIEkgaW1tZWRpYXRlbHkgd2FudCB0byBzZWUgdGhlIGRldGFpbHMgdG8gZW5zdXJlIHdlIGRpZG4mIzM5O3Qgb3BlbiBhIHdpZGVyIHZ1bG5lcmFiaWxpdHkuCgoqICAgVGhlbiwgd2UmIzM5O3ZlIGdvdCBhIGNhcGFjaXR5IGxlYWsgaW4gYGJwZl9zdHJlYW1fcHVzaF9zdHJgLCB3aGljaCBjb3VsZCBsZWFkIHRvIHJlc291cmNlIGV4aGF1c3Rpb24gaWYgbm90IG1hbmFnZWQgY29ycmVjdGx5LiBBbm90aGVyIGZ1enppbmcgdGFyZ2V0IHRvIHVuY292ZXIgcG90ZW50aWFsIERvUyB2dWxuZXJhYmlsaXRpZXMuCgoqICAgSW5jb3JyZWN0IGhhbmRsaW5nIG9mIHBhcnRpYWwgcmVhZHMgaW4gYGJwZl9zdHJlYW1fcmVhZGAsIG9rYXksIHRoYXQmIzM5O3MgYWxtb3N0IGFsd2F5cyBhIHNvdXJjZSBvZiB3ZWlyZG5lc3MuIFRoaXMgaXMgdGhlIGtpbmQgb2YgYnVnIHRoYXQgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IG9idmlvdXMsIGJ1dCBpdCBoYXMgdGhlIHBvdGVudGlhbCB0byBjYXVzZSBpc3N1ZXMgd2l0aCBkYXRhIGludGVncml0eSBvciBldmVuIGNyZWF0ZSB1bmV4cGVjdGVkIGNvbnRyb2wgZmxvdy4KCiogICBBbmQgb2YgY291cnNlLCB3ZSYjMzk7cmUgbWlzc2luZyBhIHRydW5jYXRpb24gY2hlY2sgaW4gYGJwZl9zdHJlYW1fdnByaW50a2AuIEEgY29tbW9uIHZ1bG5lcmFiaWxpdHkgZm9yIGJ1ZmZlciBvdmVyZmxvd3MsIGJ1dCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGhhbmRsZWQgdGhlIGZpeC4KCiogICBGaW5hbGx5LCBpbmNvcnJlY3QgbGVuZ3RoIGNhbGN1bGF0aW9uIGluIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgY291bGQgbGVhZCB0byBidWZmZXIgb3ZlcmZsb3dzIG9yIGRhdGEgY29ycnVwdGlvbiwgYXMgd2VsbC4KCkkgc2VlIHRoZSBjb21tb24gdGhyZWFkIGhlcmU6IG1lbW9yeSBtYW5hZ2VtZW50LCBib3VuZHMgY2hlY2tzLCBhbmQgZGF0YSBpbnRlZ3JpdHkuIFRoaXMgc2VlbXMgbGlrZSBhIGp1aWN5IHNldCBvZiB0YXJnZXRzIGZvciBmdXp6aW5nLiBJJiMzOTtsbCBnZXQgdGhlIHJlc3VsdHMgc2V0IHVwIGFzIHNvb24gYXMgSSBjYW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9wcm9nX3N0cmVhbV9yZWFkJiMzNDssCiAgICAmIzM0O2JwZl9zdHJlYW1fdnByaW50ayYjMzQ7LAogICAgJiMzNDticGZfc3RyZWFtX3N0YWdlX3ByaW50ayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBtdWx0aXBsZSBidWdzIGluIHRoZSBCUEYgc3RyZWFtIHN1YnN5c3RlbSwgaW5jbHVkaW5nIGFuIG9mZi1ieS1vbmUgZXJyb3IgaW4gbGVuZ3RoIGNoZWNraW5nLCBhIGNhcGFjaXR5IGxlYWsgb24gcHVzaCBmYWlsdXJlLCBpbmNvcnJlY3QgaGFuZGxpbmcgb2YgcGFydGlhbCByZWFkcyB0byB1c2VyIHNwYWNlLCBtaXNzaW5nIHRydW5jYXRpb24gY2hlY2tzIGluIHZwcmludGssIGFuZCBpbmNvcnJlY3QgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiBzdGFnZV9wcmludGsuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgKEJQRiBzeXNjYWxsIGFuZCBCUEYgcHJvZ3JhbXMpIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfcHJvZ19zdHJlYW1fcmVhZCYjMzQ7LAogICAgJiMzNDticGZfc3RyZWFtX3ZwcmludGsmIzM0OywKICAgICYjMzQ7YnBmX3N0cmVhbV9zdGFnZV9wcmludGsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgYnVncyBpbiB0aGUgQlBGIHN0cmVhbSBzdWJzeXN0ZW0sIGluY2x1ZGluZyBhbiBvZmYtYnktb25lIGVycm9yIGluIGxlbmd0aCBjaGVja2luZywgYSBjYXBhY2l0eSBsZWFrIG9uIHB1c2ggZmFpbHVyZSwgaW5jb3JyZWN0IGhhbmRsaW5nIG9mIHBhcnRpYWwgcmVhZHMgdG8gdXNlciBzcGFjZSwgbWlzc2luZyB0cnVuY2F0aW9uIGNoZWNrcyBpbiB2cHJpbnRrLCBhbmQgaW5jb3JyZWN0IGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gc3RhZ2VfcHJpbnRrLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlIChCUEYgc3lzY2FsbCBhbmQgQlBGIHByb2dyYW1zKSBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNldmVyYWwgbG9naWMgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgYnVncyBpbiB0aGUgQlBGIHN0cmVhbSBpbXBsZW1lbnRhdGlvbjpcbjEuIEl0IGZpeGVzIGEgY2FwYWNpdHkgbGVhayB3aGVyZSBvdmVyc2l6ZWQgb3IgdHJ1bmNhdGVkIHN0cmluZ3Mgd291bGQgY29uc3VtZSBzdHJlYW0gY2FwYWNpdHkgYnV0IGZhaWwgdG8gYWxsb2NhdGUgYW4gZWxlbWVudCwgcGVybWFuZW50bHkgcmVkdWNpbmcgYXZhaWxhYmxlIGNhcGFjaXR5LlxuMi4gSXQgcHJldmVudHMgdGhlIGluY2x1c2lvbiBvZiB0aGUgdHJhaWxpbmcgTlVMIGJ5dGUgaW4gdGhlIHN0cmVhbSBwYXlsb2FkIHdoZW4gdGhlIGZvcm1hdHRlZCBzdHJpbmcgZXhhY3RseSBtYXRjaGVzIHRoZSBidWZmZXIgc2l6ZS5cbjMuIEl0IGZpeGVzIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgdG8gb25seSBpbmNyZW1lbnQgdGhlIHN0cmVhbSBsZW5ndGggaWYgdGhlIHN0cmluZyB3YXMgc3VjY2Vzc2Z1bGx5IHB1c2hlZC5cbjQuIEl0IGNvcnJlY3RzIHRoZSBoYW5kbGluZyBvZiBwYXJ0aWFsIGBjb3B5X3RvX3VzZXJgIGZhdWx0cyBpbiBgYnBmX3N0cmVhbV9yZWFkYCB0byBwcm9wZXJseSBhY2NvdW50IGZvciBzdWNjZXNzZnVsbHkgY29waWVkIGJ5dGVzLlxuXG5Ob25lIG9mIHRoZXNlIGlzc3VlcyBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgc3RyZWFtIGVsZW1lbnRzIGFyZSBhbGxvY2F0ZWQgd2l0aCBgX19HRlBfWkVST2AsIGFuZCB0aGUgc3RyaW5ncyBjb3BpZWQgaW50byB0aGVtIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgYnN0cl9wcmludGZgIG9yIGB2c2NucHJpbnRmYC4gVGhlIGNvcGllZCBsZW5ndGggaXMgc3RyaWN0bHkgYm91bmRlZCBieSB0aGUgaW5pdGlhbGl6ZWQgc3RyaW5nIGxlbmd0aC4gVGhlIGJ1Z3MgZml4ZWQgYXJlIGxvZ2ljIGVycm9ycywgcmVzb3VyY2UgbGVha3MsIGFuZCBpbmNvcnJlY3QgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgdGhlIGFkZGVkIHNlbGZ0ZXN0cyBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgdG9vbHMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MjQ2YWZkZTQ2OTZmYzY5ZjczMjkzYWFiMzg4NTA5ODEwNTNlNTAwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMjMgMTQ6NDM6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0cmVhbS5jIGIva2VybmVsL2JwZi9zdHJlYW0uYwppbmRleCBiZTljZTk4ZTk0NjkyLi43YTVjM2FjODY3NmI5IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N0cmVhbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3RyZWFtLmMKQEAgLTIyLDExICYjNDM7MjIsMTEgQEAgc3RhdGljIHN0cnVjdCBicGZfc3RyZWFtX2VsZW0gKmJwZl9zdHJlYW1fZWxlbV9hbGxvYyhpbnQgbGVuKQogCXNpemVfdCBhbGxvY19zaXplOwogCiAJLyoKLQkgKiBMZW5ndGggZGVub3RlcyB0aGUgYW1vdW50IG9mIGRhdGEgdG8gYmUgd3JpdHRlbiBhcyBwYXJ0IG9mIHN0cmVhbSBlbGVtZW50LAotCSAqIHRodXMgaW5jbHVkZXMgJiMzOTtcMCYjMzk7IGJ5dGUuIFdlJiMzOTtyZSBjYXBwZWQgYnkgaG93IG11Y2ggYnBmX2JwcmludGZfYnVmZmVycyBjYW4KLQkgKiBhY2NvbW9kYXRlLCB0aGVyZWZvcmUgZGVueSBhbGxvY2F0aW9ucyB0aGF0IHdvbiYjMzk7dCBmaXQgaW50byB0aGVtLgomIzQzOwkgKiBMZW5ndGggaXMgdGhlIHBheWxvYWQgcHVzaGVkIGludG8gdGhlIHN0cmVhbSwgZXhjbHVkaW5nIHRoZQomIzQzOwkgKiB0cmFpbGluZyBOVUwgb2YgdGhlIGJwcmludGYgYnVmZmVyLiBSZWplY3QgYW55dGhpbmcgdGhhdCBjYW5ub3QKJiM0MzsJICogZml0IHdpdGhvdXQgY29weWluZyB0aGF0IE5VTCBpbnRvIHRoZSBzdHJlYW0gZWxlbWVudC4KIAkgKi8KLQlpZiAobGVuICZsdDsgMCB8fCBsZW4gJmd0OyBtYXhfbGVuKQomIzQzOwlpZiAobGVuICZsdDsgMCB8fCBsZW4gJmd0Oz0gbWF4X2xlbikKIAkJcmV0dXJuIE5VTEw7CiAKIAlhbGxvY19zaXplID0gb2Zmc2V0b2Yoc3RydWN0IGJwZl9zdHJlYW1fZWxlbSwgc3RyW2xlbl0pOwpAQCAtNjgsMTAgJiM0Mzs2OCw4IEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9jb25zdW1lX2NhcGFjaXR5KHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIGludCBsZW4pCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICplbGVtKQomIzQzO3N0YXRpYyB2b2lkIGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBpbnQgbGVuKQogewotCWludCBsZW4gPSBlbGVtLSZndDt0b3RhbF9sZW47Ci0KIAlhdG9taWNfc3ViKGxlbiwgJmFtcDtzdHJlYW0tJmd0O2NhcGFjaXR5KTsKIH0KIApAQCAtNzksNyAmIzQzOzc3LDE0IEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBjb25zdCBjaGFyICpzdHIsIGludCBsCiB7CiAJaW50IHJldCA9IGJwZl9zdHJlYW1fY29uc3VtZV9jYXBhY2l0eShzdHJlYW0sIGxlbik7CiAKLQlyZXR1cm4gcmV0ID86IF9fYnBmX3N0cmVhbV9wdXNoX3N0cigmYW1wO3N0cmVhbS0mZ3Q7bG9nLCBzdHIsIGxlbik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoJmFtcDtzdHJlYW0tJmd0O2xvZywgc3RyLCBsZW4pOwomIzQzOwlpZiAocmV0KQomIzQzOwkJYnBmX3N0cmVhbV9yZWxlYXNlX2NhcGFjaXR5KHN0cmVhbSwgbGVuKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHN0cnVjdCBicGZfc3RyZWFtICpicGZfc3RyZWFtX2dldChlbnVtIGJwZl9zdHJlYW1faWQgc3RyZWFtX2lkLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpCkBAIC0xNjIsNiAmIzQzOzE2Nyw3IEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9yZWFkKHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIHZvaWQgX191c2VyICpidWYsIGludCBsZW4pCiAKIAl3aGlsZSAocmVtX2xlbikgewogCQlpbnQgcG9zID0gbGVuIC0gcmVtX2xlbjsKJiM0MzsJCWludCBjaHVuaywgbjsKIAkJYm9vbCBjb250OwogCiAJCW5vZGUgPSBicGZfc3RyZWFtX2JhY2tsb2dfcGVlayhzdHJlYW0pOwpAQCAtMTc1LDIwICYjNDM7MTgxLDIxIEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9yZWFkKHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIHZvaWQgX191c2VyICpidWYsIGludCBsZW4pCiAKIAkJY29uc19sZW4gPSBlbGVtLSZndDtjb25zdW1lZF9sZW47CiAJCWNvbnQgPSBicGZfc3RyZWFtX2NvbnN1bWVfZWxlbShlbGVtLCAmYW1wO3JlbV9sZW4pID09IGZhbHNlOwotCi0JCXJldCA9IGNvcHlfdG9fdXNlcihidWYgJiM0MzsgcG9zLCBlbGVtLSZndDtzdHIgJiM0MzsgY29uc19sZW4sCi0JCQkJICAgZWxlbS0mZ3Q7Y29uc3VtZWRfbGVuIC0gY29uc19sZW4pOwotCQkvKiBSZXN0b3JlIGluIGNhc2Ugb2YgZXJyb3IuICovCi0JCWlmIChyZXQpIHsKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQllbGVtLSZndDtjb25zdW1lZF9sZW4gPSBjb25zX2xlbjsKJiM0MzsJCWNodW5rID0gZWxlbS0mZ3Q7Y29uc3VtZWRfbGVuIC0gY29uc19sZW47CiYjNDM7CiYjNDM7CQluID0gY29weV90b191c2VyKGJ1ZiAmIzQzOyBwb3MsIGVsZW0tJmd0O3N0ciAmIzQzOyBjb25zX2xlbiwgY2h1bmspOwomIzQzOwkJaWYgKG4pIHsKJiM0MzsJCQkvKiBLZWVwIGFueSBzdWNjZXNzZnVsbHkgY29waWVkIGJ5dGVzOyAtRUZBVUxUIG9ubHkgaWYgbm9uZS4gKi8KJiM0MzsJCQllbGVtLSZndDtjb25zdW1lZF9sZW4gLT0gbjsKJiM0MzsJCQlyZW1fbGVuICYjNDM7PSBuOwomIzQzOwkJCXJldCA9IChsZW4gPT0gcmVtX2xlbikgPyAtRUZBVUxUIDogMDsKIAkJCWJyZWFrOwogCQl9CiAKIAkJaWYgKGNvbnQpCiAJCQljb250aW51ZTsKIAkJYnBmX3N0cmVhbV9iYWNrbG9nX3BvcChzdHJlYW0pOwotCQlicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RyZWFtLCBlbGVtKTsKJiM0MzsJCWJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJlYW0sIGVsZW0tJmd0O3RvdGFsX2xlbik7CiAJCWJwZl9zdHJlYW1fZnJlZV9lbGVtKGVsZW0pOwogCX0KIApAQCAtMjM4LDYgJiM0MzsyNDUsMTEgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJlYW1fdnByaW50ayhpbnQgc3RyZWFtX2lkLCBjb25zdCBjaGFyICpmbXRfX3N0ciwgY29uc3Qgdm8KIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IGJzdHJfcHJpbnRmKGRhdGEuYnVmLCBNQVhfQlBSSU5URl9CVUYsIGZtdF9fc3RyLCBkYXRhLmJpbl9hcmdzKTsKJiM0MzsJLyogVHJ1bmNhdGlvbjogcmVqZWN0IGJlZm9yZSBjYXBhY2l0eSBjaGFyZ2UgKG5vdCAtRU5PTUVNKS4gKi8KJiM0MzsJaWYgKHJldCAmZ3Q7PSBNQVhfQlBSSU5URl9CVUYpIHsKJiM0MzsJCWJwZl9icHJpbnRmX2NsZWFudXAoJmFtcDtkYXRhKTsKJiM0MzsJCXJldHVybiAtRTJCSUc7CiYjNDM7CX0KIAkvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi8KIAlyZXQgPSBicGZfc3RyZWFtX3B1c2hfc3RyKHN0cmVhbSwgZGF0YS5idWYsIHJldCk7CiAJYnBmX2JwcmludGZfY2xlYW51cCgmYW1wO2RhdGEpOwpAQCAtMzExLDE3ICYjNDM7MzIzLDE4IEBAIGludCBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhzdHJ1Y3QgYnBmX3N0cmVhbV9zdGFnZSAqc3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXN0cnVjdCBicGZfYnByaW50Zl9idWZmZXJzICpidWY7CiAJdmFfbGlzdCBhcmdzOwotCWludCByZXQ7CiYjNDM7CWludCBsZW4sIHJldDsKIAogCWlmIChicGZfdHJ5X2dldF9idWZmZXJzKCZhbXA7YnVmKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JcmV0ID0gdnNucHJpbnRmKGJ1Zi0mZ3Q7YnVmLCBBUlJBWV9TSVpFKGJ1Zi0mZ3Q7YnVmKSwgZm10LCBhcmdzKTsKJiM0MzsJbGVuID0gdnNjbnByaW50ZihidWYtJmd0O2J1ZiwgQVJSQVlfU0laRShidWYtJmd0O2J1ZiksIGZtdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOwotCXNzLSZndDtsZW4gJiM0Mzs9IHJldDsKIAkvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi8KLQlyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoJmFtcDtzcy0mZ3Q7bG9nLCBidWYtJmd0O2J1ZiwgcmV0KTsKJiM0MzsJcmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKCZhbXA7c3MtJmd0O2xvZywgYnVmLSZndDtidWYsIGxlbik7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJc3MtJmd0O2xlbiAmIzQzOz0gbGVuOwogCWJwZl9wdXRfYnVmZmVycygpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jCmluZGV4IGMzY2NlNWMyOTJiZGQuLjg3MTcwZGNhZDNhZDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jCkBAIC01OCw2ICYjNDM7NTgsNzEgQEAgdm9pZCB0ZXN0X3N0cmVhbV9zeXNjYWxsKHZvaWQpCiAJc3RyZWFtX19kZXN0cm95KHNrZWwpOwogfQogCiYjNDM7dm9pZCB0ZXN0X3N0cmVhbV9vdmVyc2l6ZSh2b2lkKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpOwomIzQzOwlzdHJ1Y3Qgc3RyZWFtICpza2VsOwomIzQzOwlpbnQgcmV0LCBwcm9nX2ZkOwomIzQzOwljaGFyIGJ1Zls4XSA9IHt9OwomIzQzOwomIzQzOwlza2VsID0gc3RyZWFtX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3N0cmVhbV9fb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5zdHJlYW1fb3ZlcnNpemUpOwomIzQzOwlyZXQgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHByb2dfZmQsICZhbXA7b3B0cyk7CiYjNDM7CUFTU0VSVF9PSyhyZXQsICYjMzQ7b3ZlcnNpemUgcnVuJiMzNDspOwomIzQzOwlBU1NFUlRfT0sob3B0cy5yZXR2YWwsICYjMzQ7b3ZlcnNpemUgcmV0dmFsJiMzNDspOwomIzQzOwomIzQzOwkvKiBPdmVyc2l6ZWQgcHVzaCBtdXN0IG5vdCBwZXJtYW5lbnRseSBjb25zdW1lIGNhcGFjaXR5IG9uIHRoaXMgcHJvZy4gKi8KJiM0MzsJcmV0ID0gYnBmX3Byb2dfc3RyZWFtX3JlYWQocHJvZ19mZCwgQlBGX1NUUkVBTV9TVERPVVQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE5VTEwpOwomIzQzOwlBU1NFUlRfRVEocmV0LCAzLCAmIzM0O2J5dGVzIGFmdGVyIG92ZXJzaXplJiMzNDspOwomIzQzOwlBU1NFUlRfT0sobWVtY21wKGJ1ZiwgJiMzNDtmb28mIzM0OywgMyksICYjMzQ7cGF5bG9hZCBhZnRlciBvdmVyc2l6ZSYjMzQ7KTsKJiM0MzsKJiM0MzsJc3RyZWFtX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3Rfc3RyZWFtX3BhcnRpYWxfcmVhZCh2b2lkKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpOwomIzQzOwlzdHJ1Y3Qgc3RyZWFtICpza2VsOwomIzQzOwlpbnQgcmV0LCBwcm9nX2ZkOwomIzQzOwlsb25nIHBhZ2Vfc2l6ZTsKJiM0MzsJY2hhciAqcGFnZSwgKmJ1ZjsKJiM0MzsJY2hhciByZXN0WzhdID0ge307CiYjNDM7CiYjNDM7CXNrZWwgPSBzdHJlYW1fX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c3RyZWFtX19vcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLnN0cmVhbV9zeXNjYWxsKTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nX2ZkLCAmYW1wO29wdHMpOwomIzQzOwlBU1NFUlRfT0socmV0LCAmIzM0O3JldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX09LKG9wdHMucmV0dmFsLCAmIzM0O3JldHZhbCYjMzQ7KTsKJiM0MzsKJiM0MzsJcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpOwomIzQzOwlwYWdlID0gbW1hcChOVUxMLCBwYWdlX3NpemUgKiAyLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApOwomIzQzOwlpZiAoIUFTU0VSVF9ORVEocGFnZSwgTUFQX0ZBSUxFRCwgJiMzNDttbWFwJiMzNDspKSB7CiYjNDM7CQlzdHJlYW1fX2Rlc3Ryb3koc2tlbCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJLyogTGVhdmUgb25seSB0aGUgZmlyc3QgcGFnZSBtYXBwZWQgc28gYSBzdHJhZGRsaW5nIGNvcHkgZmF1bHRzLiAqLwomIzQzOwlBU1NFUlRfT0sobXVubWFwKHBhZ2UgJiM0MzsgcGFnZV9zaXplLCBwYWdlX3NpemUpLCAmIzM0O211bm1hcCBzZWNvbmQgcGFnZSYjMzQ7KTsKJiM0MzsKJiM0MzsJYnVmID0gcGFnZSAmIzQzOyBwYWdlX3NpemUgLSAxOwomIzQzOwlyZXQgPSBicGZfcHJvZ19zdHJlYW1fcmVhZChwcm9nX2ZkLCBCUEZfU1RSRUFNX1NURE9VVCwgYnVmLCAzLCBOVUxMKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgMSwgJiMzNDtwYXJ0aWFsIGJ5dGVzJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoYnVmWzBdLCAmIzM5O2YmIzM5OywgJiMzNDtmaXJzdCBieXRlJiMzNDspOwomIzQzOwomIzQzOwlyZXQgPSBicGZfcHJvZ19zdHJlYW1fcmVhZChwcm9nX2ZkLCBCUEZfU1RSRUFNX1NURE9VVCwgcmVzdCwgc2l6ZW9mKHJlc3QpLCBOVUxMKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgMiwgJiMzNDtyZW1haW5pbmcgYnl0ZXMmIzM0Oyk7CiYjNDM7CUFTU0VSVF9PSyhtZW1jbXAocmVzdCwgJiMzNDtvbyYjMzQ7LCAyKSwgJiMzNDtyZW1haW5pbmcgZGF0YSYjMzQ7KTsKJiM0MzsKJiM0MzsJbXVubWFwKHBhZ2UsIHBhZ2Vfc2l6ZSk7CiYjNDM7CXN0cmVhbV9fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB0ZXN0X2FkZHJlc3Moc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCB1bnNpZ25lZCBsb25nICpmYXVsdF9hZGRyX3ApCiB7CiAJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jCmluZGV4IDZmOTk5YmE5NTFhM2MuLjliOTdmNWUwMWI4M2EgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMKQEAgLTM2LDcgJiM0MzszNiwxMiBAQCBzdHJ1Y3QgewogfSBhcnJheSBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKIAogI2RlZmluZSBFTk9TUEMgMjgKJiM0MzsjZGVmaW5lIEUyQklHIDcKICNkZWZpbmUgX1NUUiAmIzM0O3h4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eCYjMzQ7CiYjNDM7I2RlZmluZSBfWDY0ICYjMzQ7eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eCYjMzQ7CiYjNDM7LyogMTAyNCBieXRlczogdHJ1bmNhdGVkIGJ5IGJzdHJfcHJpbnRmLCBtdXN0IHJldHVybiAtRTJCSUcuICovCiYjNDM7I2RlZmluZSBfQklHX1NUUiAoX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IFwKJiM0MzsJCSAgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0KQogCiBpbnQgc2l6ZTsKIHU2NCBmYXVsdF9hZGRyOwpAQCAtMTE3LDYgJiM0MzsxMjIsMTkgQEAgaW50IHN0cmVhbV9zeXNjYWxsKHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztpbnQgc3RyZWFtX292ZXJzaXplKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGJwZl9zdHJlYW1fcHJpbnRrKEJQRl9TVERPVVQsIF9CSUdfU1RSKTsKJiM0MzsJaWYgKHJldCAhPSAtRTJCSUcpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gYnBmX3N0cmVhbV9wcmludGsoQlBGX1NURE9VVCwgJiMzNDtmb28mIzM0Oyk7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAogX19hcmNoX2FybTY0CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODY3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTI3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBTdHJlYW0gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIG1vZGlmeWluZyBga2VybmVsL2JwZi9zdHJlYW0uY2AuIE15IGluaXRpYWwgYXNzZXNzbWVudCBzdWdnZXN0cyBzZXZlcmFsIGNoYW5nZXMgYWltZWQgYXQgcmVmaW5pbmcgY2FwYWNpdHkgbWFuYWdlbWVudCBhbmQgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBCUEYgc3RyZWFtIGZ1bmN0aW9uYWxpdHkuCgpGaXJzdCwgaW4gYGJwZl9zdHJlYW1fZWxlbV9hbGxvY2AsIHRoZXkmIzM5O3ZlIHRpZ2h0ZW5lZCB0aGUgbGVuZ3RoIHZhbGlkYXRpb24sIG1ha2luZyBzdXJlIHRoZSBsZW5ndGggaXNuJiMzOTt0IGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSBhbGxvd2VkIGxlbmd0aC4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBzYWZldHkgY2hlY2ssIHByZXZlbnRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgaXNzdWVzIGR1cmluZyBhbGxvY2F0aW9uLgoKTmV4dCwgaW4gYGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eWAsIHdlIHNlZSB0aGV5JiMzOTtyZSBub3cgcGFzc2luZyB0aGUgbGVuZ3RoIGRpcmVjdGx5IGluc3RlYWQgb2YgdGhlIGVudGlyZSBlbGVtZW50LiBJdOKAmXMgY2xlYW5lciwgZm9jdXNpbmcgb25seSBvbiB0aGUgY2FwYWNpdHkgdmFsdWUgdG8gYmUgYWRqdXN0ZWQsIHNvIHRoZSBgZWxlbWAgc3RydWN0IGRvZXNuJiMzOTt0IG5lZWQgdG8gYmUgcGFzc2VkLiBUaGlzIG1ha2VzIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUgYW5kIHBvc3NpYmx5IGVmZmljaWVudC4KClRoZSBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgZnVuY3Rpb24gbG9va3MgbGlrZSBpdCBoYXMgYWxzbyBiZWVuIG1vZGlmaWVkLiBUaGVyZSBpcyBub3cgbW9yZSByaWdvcm91cyBlcnJvciBjaGVja2luZzsgc3BlY2lmaWNhbGx5LCBpdCBmaXJzdCB0cmllcyB0byBjb25zdW1lIGNhcGFjaXR5IGFuZCB0aGVuLCBvbmx5IGlmIHRoYXQgaXMgc3VjY2Vzc2Z1bCwgYXR0ZW1wdHMgdG8gcHVzaCB0aGUgc3RyaW5nLiBJZiBwdXNoaW5nIGZhaWxzLCBjYXBhY2l0eSBpcyByZWxlYXNlZCwgbWFraW5nIHN1cmUgdGhhdCB0aGVyZSBpcyBubyByZXNvdXJjZSBsZWFrLiBUaGlzIHNob3VsZCBtYWtlIHRoZSBzeXN0ZW0gbW9yZSByZXNpbGllbnQuCgpOb3csIGBicGZfc3RyZWFtX3JlYWRgLCB0aGlzIG9uZSYjMzk7cyBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCBkZWFscyB3aXRoIHVzZXItc3BhY2UgZGF0YSBjb3B5aW5nLiBUaGUgb3JpZ2luYWwgY29kZSBoYXMgc29tZSBpc3N1ZXMsIGJ1dCB0aGlzIGxvb2tzIGxpa2UgYW4gaW1wcm92ZW1lbnQuIEl0IGhhbmRsZXMgcGFydGlhbCBjb3B5IHN1Y2Nlc3NlcyBmcm9tIGBjb3B5X3RvX3VzZXJgIG11Y2ggYmV0dGVyLiBJdCBwcmVzZXJ2ZXMgYW55IGJ5dGVzIHRoYXQgKmRpZCogY29weSBhbmQgbm93IGNvcnJlY3RseSBzZXRzIGAtRUZBVUxUYCBvbmx5IGlmICpubyogYnl0ZXMgd2VyZSBjb3BpZWQuIFRoaXMgaXMgbXVjaCBtb3JlIHJvYnVzdC4KCkkgc2VlIGEgY2hhbmdlIGluIGBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrYCwgYW5kIG5vdyBpdCBpbmNsdWRlcyBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBmb3JtYXR0ZWQgb3V0cHV0IGRvZXNuJiMzOTt0IGV4Y2VlZCB0aGUgYnVmZmVyIHNpemUgYmVmb3JlIGF0dGVtcHRpbmcgdG8gY29uc3VtZSBjYXBhY2l0eS4gSWYgdGhlIGJ1ZmZlciBpcyB0cnVuY2F0ZWQsIGl0IHJldHVybnMgYC1FMkJJR2AgaW5zdGVhZCBvZiBgLUVOT01FTWAuIEl0IHNlZW1zIHRoZXkmIzM5O3JlIGF2b2lkaW5nIHRoZSAmIzM0O2NhcGFjaXR5IGNoYXJnZSYjMzQ7IGluIHRoZSB0cnVuY2F0aW9uIGNhc2UuIFZlcnkgaW1wb3J0YW50LgoKQWxzbywgaXQgbG9va3MgbGlrZSBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgIGlzIGdldHRpbmcgc2ltaWxhciBmaXhlcyB0byBwcmV2ZW50IGVycm9ycy4gTm93LCB0aGUgbGVuZ3RoIGlzIHNldCB0byBgbGVuID0gdnNjbnByaW50ZiguLi4pYCBhbmQgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGlzIGFkZGVkIGlmIHB1c2hpbmcgdGhlIHN0cmluZyBpcyBzdWNjZXNzZnVsLiBJdCBsb29rcyBsaWtlIHRoZSBzYW1lIGltcHJvdmVtZW50LgoKR29pbmcgYmFjayB0byBgYnBmX3N0cmVhbV9yZWFkYC4uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgYXJlbiYjMzk7dCBwb3RlbnRpYWxseSBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB3aGVuIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gSXQgcmVsaWVzIG9uIGBlbGVtLSZndDtzdHJgIGFuZCB0aGF0JiMzOTtzIHBvcHVsYXRlZCBieSBgX19icGZfc3RyZWFtX3B1c2hfc3RyYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBfX2JwZl9zdHJlYW1fcHVzaF9zdHJgIGFuZCBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYCB0byB2ZXJpZnkgdGhhdCBgZWxlbS0mZ3Q7c3RyYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gSSYjMzk7bGwgc2VhcmNoIGZvciB0aG9zZSBmdW5jdGlvbiBjYWxscyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYnBmX3N0cmVhbV9wdXNoX3N0ciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0cmVhbS5jPTE4PXN0YXRpYyBzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICpicGZfc3RyZWFtX2VsZW1fYWxsb2MoaW50IGxlbilcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTQxLVxua2VybmVsL2JwZi9zdHJlYW0uYzo0MjpzdGF0aWMgaW50IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJ1Y3QgbGxpc3RfaGVhZCAqbG9nLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4pXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTQzLXtcbi0tXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTc2PXN0YXRpYyBpbnQgYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4pXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy04Mi1cbmtlcm5lbC9icGYvc3RyZWFtLmM6ODM6XHRyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXHUwMDI2c3RyZWFtLVx1MDAzZWxvZywgc3RyLCBsZW4pO1xua2VybmVsL2JwZi9zdHJlYW0uYy04NC1cdGlmIChyZXQpXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYz0zMjI9aW50IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXG4tLVxua2VybmVsL2JwZi9zdHJlYW0uYy0zMzQtXHQvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi9cbmtlcm5lbC9icGYvc3RyZWFtLmM6MzM1Olx0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFx1MDAyNnNzLVx1MDAzZWxvZywgYnVmLVx1MDAzZWJ1ZiwgbGVuKTtcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzM2LVx0aWYgKCFyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipBbmFseXppbmcgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgYW5kIGBicGZfc3RyZWFtX2VsZW1fYWxsb2NgKioKCkFscmlnaHQsIG15IG1pbmQmIzM5O3Mgb24gdGhvc2UgdHdvIEJQRiBmdW5jdGlvbnM6IGBfX2JwZl9zdHJlYW1fcHVzaF9zdHJgIGFuZCBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYC4gSW1tZWRpYXRlbHksIEkmIzM5O20gYXNzZXNzaW5nIHRoZWlyIHJvbGVzIGluIHRoZSBiaWdnZXIgcGljdHVyZS4gYGJwZl9zdHJlYW1fZWxlbV9hbGxvY2AgaXMsIG9mIGNvdXJzZSwgdGhlIGZ1bmRhbWVudGFsIG1lbW9yeSBhbGxvY2F0b3IgZm9yIHN0cmVhbSBlbGVtZW50cyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBObyBzdXJwcmlzZXMgdGhlcmU7IGl0JiMzOTtzIHRoZSBmb3VuZGF0aW9uLiBJdCYjMzk7cyB0aGUgYnVpbGRpbmcgYmxvY2ssIGVzc2VudGlhbGx5LiBJJiMzOTttIHdvbmRlcmluZyBhYm91dCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSXMgaXQgdXNpbmcgdGhlIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgYWxsb2NhdG9ycyB1bmRlciB0aGUgaG9vZCwgb3IgZG9lcyBpdCBoYXZlIGEgY3VzdG9tIHN0cmF0ZWd5IHRhaWxvcmVkIGZvciBCUEYmIzM5O3Mgc3BlY2lmaWMgcmVxdWlyZW1lbnRzPyBQZXJmb3JtYW5jZSBhbmQgZnJhZ21lbnRhdGlvbiBhcmUga2V5IGNvbnNpZGVyYXRpb25zIGluIHRoaXMgY29udGV4dCwgb2YgY291cnNlLiBXZSBjYW4gZXhwZWN0IHRoYXQgaXQgdHJpZXMgdG8gbWFrZSB2ZXJ5IGVmZmljaWVudCB1c2Ugb2YgdGhlIGxpbWl0ZWQgQlBGIG1lbW9yeSBzcGFjZS4KCk5vdywgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAuIFRoZSBkb3VibGUgdW5kZXJzY29yZSBwcmVmaXggaXMgYSBjbHVlLi4uIGl0IHN1Z2dlc3RzIHRoaXMgaXMgYW4gaW50ZXJuYWwgb3IgJiMzNDt1bnNhZmUmIzM0OyBmdW5jdGlvbiwgcHJvYmFibHkgbm90IHNvbWV0aGluZyBhIEJQRiBwcm9ncmFtIHdvdWxkIGRpcmVjdGx5IGNhbGwgaW4gYSB1c2VyLXNwYWNlIGNvbnRleHQuIEl0IGlzIHZlcnkgbGlrZWx5IGEgbG93ZXItbGV2ZWwgZnVuY3Rpb24uIEl0JiMzOTtzIG1vc3QgbGlrZWx5IGRlc2lnbmVkIHRvIHB1c2ggYSBzdHJpbmcgb250byBhIHN0cmVhbS4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBkZXRhaWxzLiBJcyBpdCBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcsIG9yIGRvZXMgaXQgaW5jb3Jwb3JhdGUgbGVuZ3RoIG1ldGFkYXRhPyBXaGF0JiMzOTtzIHRoZSBzdHJhdGVneSBmb3IgaGFuZGxpbmcgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3M/IEVycm9yIGhhbmRsaW5nIGlzIGNyaXRpY2FsIGhlcmUuIEl0IHByb2JhYmx5IGNoZWNrcyBhdmFpbGFibGUgc3BhY2UuIERvZXMgaXQgYWNjb3VudCBmb3IgcG9zc2libGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZnJvbSBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYD8gQW5kIGhvdyBhcmUgdGhlIHN0cmVhbSBlbGVtZW50cyBzdHJ1Y3R1cmVkPyBBcmUgdGhlcmUgYW55IGNsZXZlciBvcHRpbWl6YXRpb25zIGxpa2UgY29weS1vbi13cml0ZSBvciBzaW1pbGFyIHRlY2huaXF1ZXMgdG8gcmVkdWNlIG92ZXJoZWFkPyBJJiMzOTtsbCBwcm9iYWJseSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gaGFuZGxlIHBvdGVudGlhbCBpc3N1ZXMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgaGFuZGxlcyB0aGVzZSBkZXRhaWxzIHdoZW4gaXQgaXMgdGltZSB0byBjaGVjayB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0cmVhbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxODpcdHN0YXRpYyBzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICpicGZfc3RyZWFtX2VsZW1fYWxsb2MoaW50IGxlbilcbiAgMTk6XHR7XG4gIDIwOlx0XHRjb25zdCBpbnQgbWF4X2xlbiA9IEFSUkFZX1NJWkUoKHN0cnVjdCBicGZfYnByaW50Zl9idWZmZXJzKXt9LmJ1Zik7XG4gIDIxOlx0XHRzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICplbGVtO1xuICAyMjpcdFx0c2l6ZV90IGFsbG9jX3NpemU7XG4gIDIzOlx0XG4gIDI0Olx0XHQvKlxuICAyNTpcdFx0ICogTGVuZ3RoIGlzIHRoZSBwYXlsb2FkIHB1c2hlZCBpbnRvIHRoZSBzdHJlYW0sIGV4Y2x1ZGluZyB0aGVcbiAgMjY6XHRcdCAqIHRyYWlsaW5nIE5VTCBvZiB0aGUgYnByaW50ZiBidWZmZXIuIFJlamVjdCBhbnl0aGluZyB0aGF0IGNhbm5vdFxuICAyNzpcdFx0ICogZml0IHdpdGhvdXQgY29weWluZyB0aGF0IE5VTCBpbnRvIHRoZSBzdHJlYW0gZWxlbWVudC5cbiAgMjg6XHRcdCAqL1xuICAyOTpcdFx0aWYgKGxlbiBcdTAwM2MgMCB8fCBsZW4gXHUwMDNlPSBtYXhfbGVuKVxuICAzMDpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgMzE6XHRcbiAgMzI6XHRcdGFsbG9jX3NpemUgPSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtLCBzdHJbbGVuXSk7XG4gIDMzOlx0XHRlbGVtID0ga21hbGxvY19ub2xvY2soYWxsb2Nfc2l6ZSwgX19HRlBfWkVSTywgLTEpO1xuICAzNDpcdFx0aWYgKCFlbGVtKVxuICAzNTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgMzY6XHRcbiAgMzc6XHRcdGJwZl9zdHJlYW1fZWxlbV9pbml0KGVsZW0sIGxlbik7XG4gIDM4Olx0XG4gIDM5Olx0XHRyZXR1cm4gZWxlbTtcbiAgNDA6XHR9XG4gIDQxOlx0XG4gIDQyOlx0c3RhdGljIGludCBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGxsaXN0X2hlYWQgKmxvZywgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxuICA0MzpcdHtcbiAgNDQ6XHRcdHN0cnVjdCBicGZfc3RyZWFtX2VsZW0gKmVsZW0gPSBOVUxMO1xuICA0NTpcdFxuICA0NjpcdFx0LypcbiAgNDc6XHRcdCAqIEFsbG9jYXRlIGEgYnBmX3Byb2dfc3RyZWFtX2VsZW0gYW5kIHB1c2ggaXQgdG8gdGhlIGJwZl9wcm9nX3N0cmVhbVxuICA0ODpcdFx0ICogbG9nLCBlbGVtZW50cyB3aWxsIGJlIHBvcHBlZCBhdCBvbmNlIGFuZCByZXZlcnNlZCB0byBwcmludCB0aGUgbG9nLlxuICA0OTpcdFx0ICovXG4gIDUwOlx0XHRlbGVtID0gYnBmX3N0cmVhbV9lbGVtX2FsbG9jKGxlbik7XG4gIDUxOlx0XHRpZiAoIWVsZW0pXG4gIDUyOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuICA1MzpcdFxuICA1NDpcdFx0bWVtY3B5KGVsZW0tXHUwMDNlc3RyLCBzdHIsIGxlbik7XG4gIDU1Olx0XHRsbGlzdF9hZGQoXHUwMDI2ZWxlbS1cdTAwM2Vub2RlLCBsb2cpO1xuICA1NjpcdFxuICA1NzpcdFx0cmV0dXJuIDA7XG4gIDU4Olx0fVxuICA1OTpcdFxuICA2MDpcdHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9jb25zdW1lX2NhcGFjaXR5KHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIGludCBsZW4pXG4gIDYxOlx0e1xuICA2MjpcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNnN0cmVhbS1cdTAwM2VjYXBhY2l0eSkgXHUwMDNlPSBCUEZfU1RSRUFNX01BWF9DQVBBQ0lUWSlcbiAgNjM6XHRcdFx0cmV0dXJuIC1FTk9TUEM7XG4gIDY0Olx0XHRpZiAoYXRvbWljX2FkZF9yZXR1cm4obGVuLCBcdTAwMjZzdHJlYW0tXHUwMDNlY2FwYWNpdHkpIFx1MDAzZT0gQlBGX1NUUkVBTV9NQVhfQ0FQQUNJVFkpIHtcbiAgNjU6XHRcdFx0YXRvbWljX3N1YihsZW4sIFx1MDAyNnN0cmVhbS1cdTAwM2VjYXBhY2l0eSk7XG4gIDY2Olx0XHRcdHJldHVybiAtRU5PU1BDO1xuICA2NzpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzIwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjkwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBCUEYgU3RyZWFtIE1lbW9yeSBNYW5hZ2VtZW50IGFuZCBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGl2aW5nIGludG8gdGhpcyBCUEYgc3RyZWFtIGNvZGUsIGFuZCBpdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgc2VyaWVzIG9mIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgdHJpY2t5LCBpbnRlcmFjdGlvbnMuICBMZXQmIzM5O3MgYnJlYWsgZG93biBteSB0aG91Z2h0IHByb2Nlc3M6CgpGaXJzdGx5LCB0aGUgbW9zdCBiYXNpYyBwb2ludDogYGJwZl9zdHJlYW1fZWxlbV9hbGxvY2AgdXNlcyBga21hbGxvY19ub2xvY2tgIHdpdGggYF9fR0ZQX1pFUk9gLiBUaGlzIGlzIGdvb2QuIEl0IG1lYW5zIHRoYXQgYW55IG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSBzdHJlYW0gZWxlbWVudHMgaXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLWluaXRpYWxpemVkLiAgVGhpcyAqc2hvdWxkKiBwcmV2ZW50IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gIFRoZSBgbWVtY3B5YCBjYWxsIHRoZW4gY29waWVzIHRoZSBzdHJpbmcgZGF0YSBpbnRvIHRoaXMgemVyb2VkIG1lbW9yeS4KClRoZSBwYXRjaCYjMzk7cyBjaGFuZ2Ugb2YgdGhlIGxlbmd0aCBjaGVjayB0byBgbGVuICZndDs9IG1heF9sZW5gIGNhdGNoZXMgYSBzdWJ0bGUgYm91bmRhcnkgY29uZGl0aW9uLiBJbiBgYnBmX3N0cmVhbV9yZWFkYCBhZnRlciB0aGUgY29weSBoYXMgYmVlbiBwZXJmb3JtZWQsIGJlY2F1c2Ugd2UgYXJlIHN0YXJ0aW5nIHdpdGggYF9fR0ZQX1pFUk9gLCB3ZSBjYW4gYmUgY29uZmlkZW50IHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLgoKTm93LCB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGlzIGluIGBicGZfc3RyZWFtX3ZwcmludGtgLCBhbmQgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCBhbmQgdGhlIGFzc29jaWF0ZWQgZnVuY3Rpb25zLiAgYGJzdHJfcHJpbnRmYCBhbmQgYHZzbnByaW50ZmAgYXJlIGNlbnRyYWwgdG8gdGhlc2UgZnVuY3Rpb25zLiBJdCYjMzk7cyB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIHRoZXNlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjb25jZXJuaW5nLiBUaGV5IGNhbiByZXR1cm4gYSB2YWx1ZSBncmVhdGVyIHRoYW4gdGhlIGJ1ZmZlciBzaXplIChgTUFYX0JQUklOVEZfQlVGYCBvciBgQVJSQVlfU0laRShidWYtJmd0O2J1ZilgKSwgaW5kaWNhdGluZyB0cnVuY2F0aW9uLiAgUHJldmlvdXNseSwgdGhpcyBsZWQgdG8gcG90ZW50aWFsIGlzc3Vlcy4KCkluIHRoZSBjYXNlIG9mIGBic3RyX3ByaW50ZmAsIGlmIHRoZSByZXR1cm4gdmFsdWUgKGByZXRgKSB3YXMgZ3JlYXRlciB0aGFuIGBNQVhfQlBSSU5URl9CVUZgLCB3ZSBoYWQgYW4gaXNzdWU6IHRoZSBjb2RlIGNvdWxkIHRyeSB0byBhbGxvY2F0ZSBhIHN0cmVhbSBlbGVtZW50IHdpdGggYSBzaXplIChsZW4pIGVxdWFsIHRvIHRoZSB0cnVuY2F0ZWQgbGVuZ3RoLiBUaGlzIGNvdWxkIHJlc3VsdCBpbiBsZWFraW5nIG1lbW9yeSwgaWYgdGhlIGNoZWNrIGBsZW4gJmd0OyBtYXhfbGVuYCB3YXMgYnlwYXNzZWQuIFRoaXMgaGFzIGJlZW4gYWRkcmVzc2VkIGFuZCBmaXhlZC4gQWxzbyB0aGUgcGF0Y2ggaXMgcHJldmVudGluZyBhIGNhcGFjaXR5IGxlYWsgYXMgbm93IGlmIHRoZSBgX19icGZfc3RyZWFtX3B1c2hfc3RyYCByZXR1cm5zIGFuIGVycm9yLCB0aGUgY2FwYWNpdHkgdGhhdCB3YXMgY29uc3VtZWQgaXMgcmVsZWFzZWQuIEZ1cnRoZXJtb3JlLCB0aGUgbmV3IGNoZWNrIGBpZiAocmV0ICZndDs9IE1BWF9CUFJJTlRGX0JVRilgIGluIGBicGZfc3RyZWFtX3ZwcmludGtgIGFkZHJlc3NlcyB0aGlzIGJ5IHJldHVybmluZyAtRTJCSUcsIHByZXZlbnRpbmcgYWxsb2NhdGlvbiBhbmQgcHVzaGluZyBvbiB0cnVuY2F0aW9uLgoKU2ltaWxhciBsb2dpYyBhcHBsaWVzIHRvIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AsIHdoZXJlIHRoZSBzYW1lIGxvZ2ljIG9mIGB2c25wcmludGZgLCBpZiB0aGUgcmV0dXJuIHZhbHVlIChsZW4pIGlzIGdyZWF0ZXIgdGhhbiB0aGUgYXJyYXkgc2l6ZSAoYEFSUkFZX1NJWkUoYnVmLSZndDtidWYpYCkgYW5kIHRydW5jYXRpb24gb2NjdXJzLCBjb3VsZCBsZWFkIHRvIGlzc3Vlcy4gSG93ZXZlciwgdGhlIGNoZWNrIGBpZiAobGVuICZndDsgbWF4X2xlbilgIHdpbGwgbm90IGFsbG93IHRoaXMuIFRoZSBgdnNucHJpbnRmYCBmdW5jdGlvbiBkb2VzIHdyaXRlIHVwIHRvIHRoZSBmdWxsIGBtYXhfbGVuYCwgYnV0IGRvZXMgaXQgaW5pdGlhbGl6ZSB0aGUgd2hvbGUgYnVmZmVyPyBUaGUgYnVmZmVyIHdpbGwgYmUgaW5pdGlhbGl6ZWQuCgpMYXN0bHksIHRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgYnBmX3N0cmVhbV9yZWFkYCBmb2N1cyBvbiB0aGUgc2VtYW50aWNzIG9mIGBjb3B5X3RvX3VzZXJgLCBhbmQgZW5zdXJpbmcgdGhhdCB3ZSBkbyBub3QgbG9zZSBhbnkgc3VjY2Vzc2Z1bGx5IGNvcGllZCBieXRlcyBpbiBjYXNlIG9mIGFuIGVycm9yLiBUaGlzIGlzIGEgc3VidGxlIGltcHJvdmVtZW50IGJ1dCB1bnJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuCkluIHN1bW1hcnksIHRoZSBjcnVjaWFsIHBvaW50IGlzIG1ha2luZyBzdXJlIHdlIGhhbmRsZSB0cnVuY2F0aW9uIGNvcnJlY3RseS4gV2l0aCB0aGUgbmV3IGNoYW5nZXMsIGl0IGFwcGVhcnMgdGhlIHRydW5jYXRpb24gaXMgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkgc28gdGhhdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBub3QgY29waWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgYnN0cl9wcmludGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zdHJpbmcuaD0zMzk9aW50IHZiaW5fcHJpbnRmKHUzMiAqYmluX2J1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKTtcbmluY2x1ZGUvbGludXgvc3RyaW5nLmg6MzQwOmludCBic3RyX3ByaW50ZihjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmbXQsIGNvbnN0IHUzMiAqYmluX2J1Zik7XG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTM0MS0jZW5kaWZcbi0tXG5saWIvdnNwcmludGYuYz0zMjU4PUVYUE9SVF9TWU1CT0xfR1BMKHZiaW5fcHJpbnRmKTtcbi0tXG5saWIvdnNwcmludGYuYy0zMjgxLSAqL1xubGliL3ZzcHJpbnRmLmM6MzI4MjppbnQgYnN0cl9wcmludGYoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10X3N0ciwgY29uc3QgdTMyICpiaW5fYnVmKVxubGliL3ZzcHJpbnRmLmMtMzI4My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTM1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgYnN0cl9wcmludGZgKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCB0aGUgYGJzdHJfcHJpbnRmYCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmljcyBvZiB0aGlzIHBhcnRpY3VsYXIgc3RyaW5nIGZvcm1hdHRpbmcgZnVuY3Rpb24sIGVzcGVjaWFsbHkgc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgYnN0cmBzIChwcmVzdW1hYmx5IGEgY3VzdG9tIHN0cmluZyB0eXBlKS4gSSYjMzk7bGwgd2FudCB0byBxdWlja2x5IGxvb2sgZm9yIGFueSBvYnZpb3VzIHZ1bG5lcmFiaWxpdGllcywgbGlrZSBmb3JtYXQgc3RyaW5nIGJ1Z3Mgb3IgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3MgdGhhdCBtaWdodCBiZSBvdmVybG9va2VkIHdpdGggYSBuYWl2ZSBpbXBsZW1lbnRhdGlvbi4gVW5kZXJzdGFuZGluZyBob3cgdGhlIHZhcmlhZGljIGFyZ3VtZW50cyBhcmUgaGFuZGxlZCB3aXRoIHRoZSBgYnN0cmAgc3RydWN0dXJlIGlzIGtleS4gSXMgaXQganVzdCBhIHdyYXBwZXIgYXJvdW5kIGBwcmludGZgLCBvciBpcyB0aGVyZSBjbGV2ZXIgbG9naWMgdG8gYXZvaWQgY3JlYXRpbmcgdGVtcG9yYXJ5IHN0cmluZ3M/IEkgc2hvdWxkIGxvb2sgZm9yIGRldGFpbHMgbGlrZSBob3cgdGhlIGxlbmd0aCBpcyBoYW5kbGVkIGFuZCB3aGV0aGVyIHRoZXkmIzM5O3JlIGFsbG9jYXRpbmcgYW5kIGRlYWxsb2NhdGluZyBtZW1vcnkgcHJvcGVybHkgd2l0aGluIHRoZSBic3RyIGZyYW1ld29yay4gQW5kIGhvdyBkbyBlcnJvciBjb25kaXRpb25zIChsaWtlIGluc3VmZmljaWVudCBtZW1vcnkgZm9yIHRoZSBmb3JtYXR0ZWQgc3RyaW5nKSBnZXQgYWRkcmVzc2VkPyBJJiMzOTttIGhvcGluZyBmb3Igd2VsbC1kZWZpbmVkIGJlaGF2aW9ycy4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBoYW5kbGUgZWRnZSBjYXNlcyB0b28uIEFyZSB0aGV5IHN1cHBvcnRpbmcgYWxsIHRoZSBzdGFuZGFyZCBwcmludGYgZm9ybWF0IHNwZWNpZmllcnM/IEFuZCBob3cgZG9lcyBpdCBoYW5kbGUgbG9jYWxlLXNwZWNpZmljIGZvcm1hdHRpbmc/IEl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGlzIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL3ZzcHJpbnRmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjgyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMyODI6XHRpbnQgYnN0cl9wcmludGYoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10X3N0ciwgY29uc3QgdTMyICpiaW5fYnVmKVxuMzI4MzpcdHtcbjMyODQ6XHRcdHN0cnVjdCBmbXQgZm10ID0ge1xuMzI4NTpcdFx0XHQuc3RyID0gZm10X3N0cixcbjMyODY6XHRcdFx0LnN0YXRlID0gRk9STUFUX1NUQVRFX05PTkUsXG4zMjg3Olx0XHR9O1xuMzI4ODpcdFx0c3RydWN0IHByaW50Zl9zcGVjIHNwZWMgPSB7MH07XG4zMjg5Olx0XHRjaGFyICpzdHIsICplbmQ7XG4zMjkwOlx0XHRjb25zdCBjaGFyICphcmdzID0gKGNvbnN0IGNoYXIgKiliaW5fYnVmO1xuMzI5MTpcdFxuMzI5MjpcdFx0aWYgKFdBUk5fT05fT05DRShzaXplIFx1MDAzZSBJTlRfTUFYKSlcbjMyOTM6XHRcdFx0cmV0dXJuIDA7XG4zMjk0Olx0XG4zMjk1Olx0XHRzdHIgPSBidWY7XG4zMjk2Olx0XHRlbmQgPSBidWYgJiM0Mzsgc2l6ZTtcbjMyOTc6XHRcbjMyOTg6XHQjZGVmaW5lIGdldF9hcmcodHlwZSlcdFx0XHRcdFx0XHRcdFxcXG4zMjk5Olx0KHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuMzMwMDpcdFx0dHlwZW9mKHR5cGUpIHZhbHVlO1x0XHRcdFx0XHRcdFxcXG4zMzAxOlx0XHRpZiAoc2l6ZW9mKHR5cGUpID09IDgpIHtcdFx0XHRcdFx0XFxcbjMzMDI6XHRcdFx0YXJncyA9IFBUUl9BTElHTihhcmdzLCBzaXplb2YodTMyKSk7XHRcdFx0XFxcbjMzMDM6XHRcdFx0Kih1MzIgKilcdTAwMjZ2YWx1ZSA9ICoodTMyICopYXJncztcdFx0XHRcdFxcXG4zMzA0Olx0XHRcdCooKHUzMiAqKVx1MDAyNnZhbHVlICYjNDM7IDEpID0gKih1MzIgKikoYXJncyAmIzQzOyA0KTtcdFx0XFxcbjMzMDU6XHRcdH0gZWxzZSB7XHRcdFx0XHRcdFx0XHRcXFxuMzMwNjpcdFx0XHRhcmdzID0gUFRSX0FMSUdOKGFyZ3MsIHNpemVvZih0eXBlKSk7XHRcdFx0XFxcbjMzMDc6XHRcdFx0dmFsdWUgPSAqKHR5cGVvZih0eXBlKSAqKWFyZ3M7XHRcdFx0XHRcXFxuMzMwODpcdFx0fVx0XHRcdFx0XHRcdFx0XHRcXFxuMzMwOTpcdFx0YXJncyAmIzQzOz0gc2l6ZW9mKHR5cGUpO1x0XHRcdFx0XHRcdFxcXG4zMzEwOlx0XHR2YWx1ZTtcdFx0XHRcdFx0XHRcdFx0XFxcbjMzMTE6XHR9KVxuMzMxMjpcdFxuMzMxMzpcdFx0LyogTWFrZSBzdXJlIGVuZCBpcyBhbHdheXMgXHUwMDNlPSBidWYgKi9cbjMzMTQ6XHRcdGlmIChlbmQgXHUwMDNjIGJ1Zikge1xuMzMxNTpcdFx0XHRlbmQgPSAoKHZvaWQgKiktMSk7XG4zMzE2Olx0XHRcdHNpemUgPSBlbmQgLSBidWY7XG4zMzE3Olx0XHR9XG4zMzE4Olx0XG4zMzE5Olx0XHR3aGlsZSAoKmZtdC5zdHIpIHtcbjMzMjA6XHRcdFx0Y29uc3QgY2hhciAqb2xkX2ZtdCA9IGZtdC5zdHI7XG4zMzIxOlx0XHRcdHVuc2lnbmVkIGxvbmcgbG9uZyBudW07XG4zMzIyOlx0XG4zMzIzOlx0XHRcdGZtdCA9IGZvcm1hdF9kZWNvZGUoZm10LCBcdTAwMjZzcGVjKTtcbjMzMjQ6XHRcdFx0c3dpdGNoIChmbXQuc3RhdGUpIHtcbjMzMjU6XHRcdFx0Y2FzZSBGT1JNQVRfU1RBVEVfTk9ORToge1xuMzMyNjpcdFx0XHRcdGludCByZWFkID0gZm10LnN0ciAtIG9sZF9mbXQ7XG4zMzI3Olx0XHRcdFx0aWYgKHN0ciBcdTAwM2MgZW5kKSB7XG4zMzI4Olx0XHRcdFx0XHRpbnQgY29weSA9IHJlYWQ7XG4zMzI5Olx0XHRcdFx0XHRpZiAoY29weSBcdTAwM2UgZW5kIC0gc3RyKVxuMzMzMDpcdFx0XHRcdFx0XHRjb3B5ID0gZW5kIC0gc3RyO1xuMzMzMTpcdFx0XHRcdFx0bWVtY3B5KHN0ciwgb2xkX2ZtdCwgY29weSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTc4CgkJCQkJCQlvdXRwdXQ6IDI1OAoJCQkJCQkJdGhvdWdodHM6IDUwODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgQlBGIFN0cmVhbSBQYXRjaDogTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc29tZSBrZXkgYXJlYXMgaW4gdGhlIEJQRiBzdHJlYW0gaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBhcm91bmQgZm9ybWF0dGluZyBvdXRwdXQgd2l0aCBgYnN0cl9wcmludGZgIGFuZCBgdnNjbnByaW50ZmAsIGFsbG9jYXRpbmcgc3RyZWFtIGVsZW1lbnRzLCBhbmQgcmVhZGluZyBkYXRhIGZyb20gdGhvc2UgZWxlbWVudHMuIE15IGluaXRpYWwgY29uY2VybiB3YXMgd2hldGhlciB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBvciBmaXggYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBZnRlciBjYXJlZnVsIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCYjMzk7cyBub3QgdGhlIGNhc2UuCgpUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBzdGVtIGZyb20gaG93IHRoZSBzdHJlYW0mIzM5O3MgY2FwYWNpdHkgaXMgbWFuYWdlZCBhbmQgaG93IHN0cmluZyBsZW5ndGhzIGFyZSBoYW5kbGVkIGluIHJlbGF0aW9uIHRvIGJ1ZmZlciBzaXplcy4gVGhlIHBhdGNoIGFkanVzdHMgdGhlIGNvbmRpdGlvbiBgbGVuICZsdDsgMCB8fCBsZW4gJmd0OyBtYXhfbGVuYCB0byBgbGVuICZsdDsgMCB8fCBsZW4gJmd0Oz0gbWF4X2xlbmAgaW4gc2V2ZXJhbCBwbGFjZXMuIFRoaXMgY2hhbmdlLCBhbG9uZyB3aXRoIHRoZSBjaGFuZ2VzIHRvIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgYW5kIGBicGZfc3RyZWFtX3JlYWRgIGFyZSBwcmltYXJpbHkgZGVhbGluZyB3aXRoIGNvcm5lciBjYXNlcyB3aGVyZSB0aGUgZm9ybWF0dGVkIHN0cmluZyBjb3VsZCBiZSB0cnVuY2F0ZWQsIG92ZXJzaXplZCwgb3IgcGFydGlhbGx5IGNvcGllZCB0byB1c2VyIHNwYWNlLiBJdCBhaW1zIHRvIHByZXZlbnQgYSByZXNvdXJjZSBsZWFrIGFuZCBhdm9pZCBzZW5kaW5nIGEgTlVMIGJ5dGUgdG8gdXNlciBzcGFjZS4KClNwZWNpZmljYWxseSwgSeKAmXZlIGNvbnNpZGVyZWQgdGhlc2UgcG9pbnRzOgoKKiAgICoqQ2FwYWNpdHkgTWFuYWdlbWVudDoqKiBUaGUgcGF0Y2ggbm93IGNvcnJlY3RseSBoYW5kbGVzIGNhc2VzIHdoZXJlIGEgZm9ybWF0dGVkIHN0cmluZyBpcyB0b28gbGFyZ2UgdG8gZml0IGluIHRoZSBidWZmZXIsIGVpdGhlciBieSByZWplY3RpbmcgdGhlIHN0cmluZyBvciByZWxlYXNpbmcgdGhlIGNvbnN1bWVkIGNhcGFjaXR5LiBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSByaXNrIG9mIGluY29ycmVjdGx5IGluY3JlbWVudGluZyB0aGUgc3RyZWFtJiMzOTtzIGxlbmd0aCB3aXRob3V0IGFuIGFjdHVhbCBwdXNoLiBUaGUgcGF0Y2ggYWxzbyBmaXhlZCBhIGNhcGFjaXR5IGxlYWsgaW4gdGhlIG92ZXJmbG93IGNhc2UuCiogICAqKk5VTCBCeXRlIEluY2x1c2lvbjoqKiBUaGUgb2xkIGNvZGUgd2FzIGluYWR2ZXJ0ZW50bHkgY29weWluZyB0aGUgdHJhaWxpbmcgTlVMIGJ5dGUgZnJvbSB0aGUgZm9ybWF0dGluZyBidWZmZXIgaW50byB0aGUgc3RyZWFtIGVsZW1lbnQgaW4gdGhlIGVkZ2UgY2FzZSB3aGVyZSB0aGUgbGVuZ3RoIHdhcyB0aGUgYnVmZmVyJiMzOTtzIGZ1bGwgbGVuZ3RoLiBUaGlzIHBhdGNoIGVsaW1pbmF0ZXMgdGhpcyBhbmQgcHJldmVudHMgYSB0cmFpbGluZyBOVUwgZnJvbSB0aGUgc3RyZWFtLgoqICAgKipFcnJvciBIYW5kbGluZyBpbiBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgOioqIGB2c25wcmludGZgIG5vdyByZXR1cm5zIGl0cyBjb3JyZWN0IGxlbmd0aCBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4gd2hpY2ggY291bGQgYmUgdmVyeSBsYXJnZSBpZiB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgZm9ybWF0dGluZyBzdHJpbmcuIFRoZSBwYXRjaCBub3cgY29ycmVjdGx5IGhhbmRsZXMgZmFpbHVyZSBzY2VuYXJpb3MgaW4gYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAsIGVuc3VyaW5nIHRoYXQgYHNzLSZndDtsZW5gIGlzIG9ubHkgaW5jcmVtZW50ZWQgb24gc3VjY2Vzc2Z1bCBwdXNoIGFuZCBkb2VzbiYjMzk7dCBsZWFrIGNhcGFjaXR5LgoqICAgKipQYXJ0aWFsIGBjb3B5X3RvX3VzZXJgIEZhdWx0czoqKiBUaGUgYGJwZl9zdHJlYW1fcmVhZGAgZnVuY3Rpb24gd2FzIG5vdCBjb3JyZWN0bHkgYWNjb3VudGluZyBmb3IgcGFydGlhbGx5IGNvcGllZCBieXRlcyBpbiBjYXNlIG9mIGEgZmF1bHQuIFRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IGNvcnJlY3RseSBhY2NvdW50aW5nIGZvciBwYXJ0aWFsbHkgd3JpdHRlbiBieXRlcy4KCkluIGFsbCBvZiB0aGVzZSBzY2VuYXJpb3MsIHRoZSBtZW1vcnkgaXMgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkuIFRoZSBhbGxvY2F0aW9uIG9mIHN0cmVhbSBlbGVtZW50cyB1c2luZyBga21hbGxvY19ub2xvY2tgIHdpdGggYF9fR0ZQX1pFUk9gIGVuc3VyZXMgdGhhdCBtZW1vcnkgaXMgemVyb2VkLiBGdXJ0aGVyLCB3aGVuIHB1c2hpbmcgc3RyaW5ncyBpbnRvIHRoZSBlbGVtZW50cywgYG1lbWNweWAgaXMgdXNlZCB0byBjb3B5IGRhdGEgdGhhdCBpcyBndWFyYW50ZWVkIHRvIGJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGVpdGhlciBgYnN0cl9wcmludGZgIG9yIGB2c2NucHJpbnRmYC4gVGhlcmUgYXJlIGNoZWNrcyBpbiBwbGFjZSB0byBwcmV2ZW50IHRoZSBjb3B5IG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBpbiB0aGUgc2NlbmFyaW8gb2YgYSBsYXJnZSByZXR1cm4gdmFsdWUgZnJvbSBgYnN0cl9wcmludGZgLiBJJiMzOTt2ZSBjYXJlZnVsbHkgZ29uZSB0aHJvdWdoIHRoZSB2YXJpb3VzIGNoZWNrcyBhcm91bmQgdGhlIHJldHVybiB2YWx1ZXMgb2YgdGhlc2UgZm9ybWF0dGluZyBmdW5jdGlvbnMgYW5kIHRoZSBzaXplIGNoZWNrcyBiZWZvcmUgbWVtb3J5IGNvcGllczsgdGhleSBhcmUgc3VmZmljaWVudC4KClRoZXJlZm9yZSwgc2luY2UgdGhlIGNoYW5nZXMgZGVhbCB3aXRoIHJlc291cmNlIG1hbmFnZW1lbnQsIGVycm9yIGhhbmRsaW5nLCBhbmQgYXZvaWRpbmcgdGhlIGxlYWsvY29weSBvZiB0aGUgbnVsbCB0ZXJtaW5hdG9yLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBLTVNBTiBpcyBub3QgbmVlZGVkIGJlY2F1c2UgdGhlIGJ1ZyBmaXhlcyBhcmUgbWFpbmx5IHJlbGF0ZWQgdG8gbG9naWMgZXJyb3JzLiBUaGUgaW5jbHVkZWQgc2VsZnRlc3RzIGFuZCBleGlzdGluZyBrZXJuZWwgdGVzdGluZyB3aWxsIGJlIGFibGUgdG8gY2F0Y2ggdGhlIGlzc3VlcyBiZWluZyByZXNvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNldmVyYWwgbG9naWMgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgYnVncyBpbiB0aGUgQlBGIHN0cmVhbSBpbXBsZW1lbnRhdGlvbjpcbjEuIEl0IGZpeGVzIGEgY2FwYWNpdHkgbGVhayB3aGVyZSBvdmVyc2l6ZWQgb3IgdHJ1bmNhdGVkIHN0cmluZ3Mgd291bGQgY29uc3VtZSBzdHJlYW0gY2FwYWNpdHkgYnV0IGZhaWwgdG8gYWxsb2NhdGUgYW4gZWxlbWVudCwgcGVybWFuZW50bHkgcmVkdWNpbmcgYXZhaWxhYmxlIGNhcGFjaXR5LlxuMi4gSXQgcHJldmVudHMgdGhlIGluY2x1c2lvbiBvZiB0aGUgdHJhaWxpbmcgTlVMIGJ5dGUgaW4gdGhlIHN0cmVhbSBwYXlsb2FkIHdoZW4gdGhlIGZvcm1hdHRlZCBzdHJpbmcgZXhhY3RseSBtYXRjaGVzIHRoZSBidWZmZXIgc2l6ZS5cbjMuIEl0IGZpeGVzIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgdG8gb25seSBpbmNyZW1lbnQgdGhlIHN0cmVhbSBsZW5ndGggaWYgdGhlIHN0cmluZyB3YXMgc3VjY2Vzc2Z1bGx5IHB1c2hlZC5cbjQuIEl0IGNvcnJlY3RzIHRoZSBoYW5kbGluZyBvZiBwYXJ0aWFsIGBjb3B5X3RvX3VzZXJgIGZhdWx0cyBpbiBgYnBmX3N0cmVhbV9yZWFkYCB0byBwcm9wZXJseSBhY2NvdW50IGZvciBzdWNjZXNzZnVsbHkgY29waWVkIGJ5dGVzLlxuXG5Ob25lIG9mIHRoZXNlIGlzc3VlcyBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgc3RyZWFtIGVsZW1lbnRzIGFyZSBhbGxvY2F0ZWQgd2l0aCBgX19HRlBfWkVST2AsIGFuZCB0aGUgc3RyaW5ncyBjb3BpZWQgaW50byB0aGVtIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgYnN0cl9wcmludGZgIG9yIGB2c2NucHJpbnRmYC4gVGhlIGNvcGllZCBsZW5ndGggaXMgc3RyaWN0bHkgYm91bmRlZCBieSB0aGUgaW5pdGlhbGl6ZWQgc3RyaW5nIGxlbmd0aC4gVGhlIGJ1Z3MgZml4ZWQgYXJlIGxvZ2ljIGVycm9ycywgcmVzb3VyY2UgbGVha3MsIGFuZCBpbmNvcnJlY3QgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgdGhlIGFkZGVkIHNlbGZ0ZXN0cyBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgdG9vbHMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNldmVyYWwgbG9naWMgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgYnVncyBpbiB0aGUgQlBGIHN0cmVhbSBpbXBsZW1lbnRhdGlvbjpcbjEuIEl0IGZpeGVzIGEgY2FwYWNpdHkgbGVhayB3aGVyZSBvdmVyc2l6ZWQgb3IgdHJ1bmNhdGVkIHN0cmluZ3Mgd291bGQgY29uc3VtZSBzdHJlYW0gY2FwYWNpdHkgYnV0IGZhaWwgdG8gYWxsb2NhdGUgYW4gZWxlbWVudCwgcGVybWFuZW50bHkgcmVkdWNpbmcgYXZhaWxhYmxlIGNhcGFjaXR5LlxuMi4gSXQgcHJldmVudHMgdGhlIGluY2x1c2lvbiBvZiB0aGUgdHJhaWxpbmcgTlVMIGJ5dGUgaW4gdGhlIHN0cmVhbSBwYXlsb2FkIHdoZW4gdGhlIGZvcm1hdHRlZCBzdHJpbmcgZXhhY3RseSBtYXRjaGVzIHRoZSBidWZmZXIgc2l6ZS5cbjMuIEl0IGZpeGVzIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgdG8gb25seSBpbmNyZW1lbnQgdGhlIHN0cmVhbSBsZW5ndGggaWYgdGhlIHN0cmluZyB3YXMgc3VjY2Vzc2Z1bGx5IHB1c2hlZC5cbjQuIEl0IGNvcnJlY3RzIHRoZSBoYW5kbGluZyBvZiBwYXJ0aWFsIGBjb3B5X3RvX3VzZXJgIGZhdWx0cyBpbiBgYnBmX3N0cmVhbV9yZWFkYCB0byBwcm9wZXJseSBhY2NvdW50IGZvciBzdWNjZXNzZnVsbHkgY29waWVkIGJ5dGVzLlxuXG5Ob25lIG9mIHRoZXNlIGlzc3VlcyBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgc3RyZWFtIGVsZW1lbnRzIGFyZSBhbGxvY2F0ZWQgd2l0aCBgX19HRlBfWkVST2AsIGFuZCB0aGUgc3RyaW5ncyBjb3BpZWQgaW50byB0aGVtIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgYnN0cl9wcmludGZgIG9yIGB2c2NucHJpbnRmYC4gVGhlIGNvcGllZCBsZW5ndGggaXMgc3RyaWN0bHkgYm91bmRlZCBieSB0aGUgaW5pdGlhbGl6ZWQgc3RyaW5nIGxlbmd0aC4gVGhlIGJ1Z3MgZml4ZWQgYXJlIGxvZ2ljIGVycm9ycywgcmVzb3VyY2UgbGVha3MsIGFuZCBpbmNvcnJlY3QgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgdGhlIGFkZGVkIHNlbGZ0ZXN0cyBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgdG9vbHMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0Mzo1MS4yMjgyNTI1MzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjAzMzIxNjM0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19zdHJlYW1fcmVhZFwiLFxuICAgIFwiYnBmX3N0cmVhbV92cHJpbnRrXCIsXG4gICAgXCJicGZfc3RyZWFtX3N0YWdlX3ByaW50a1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHNldmVyYWwgbG9naWMgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgYnVncyBpbiB0aGUgQlBGIHN0cmVhbSBpbXBsZW1lbnRhdGlvbjpcXG4xLiBJdCBmaXhlcyBhIGNhcGFjaXR5IGxlYWsgd2hlcmUgb3ZlcnNpemVkIG9yIHRydW5jYXRlZCBzdHJpbmdzIHdvdWxkIGNvbnN1bWUgc3RyZWFtIGNhcGFjaXR5IGJ1dCBmYWlsIHRvIGFsbG9jYXRlIGFuIGVsZW1lbnQsIHBlcm1hbmVudGx5IHJlZHVjaW5nIGF2YWlsYWJsZSBjYXBhY2l0eS5cXG4yLiBJdCBwcmV2ZW50cyB0aGUgaW5jbHVzaW9uIG9mIHRoZSB0cmFpbGluZyBOVUwgYnl0ZSBpbiB0aGUgc3RyZWFtIHBheWxvYWQgd2hlbiB0aGUgZm9ybWF0dGVkIHN0cmluZyBleGFjdGx5IG1hdGNoZXMgdGhlIGJ1ZmZlciBzaXplLlxcbjMuIEl0IGZpeGVzIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgdG8gb25seSBpbmNyZW1lbnQgdGhlIHN0cmVhbSBsZW5ndGggaWYgdGhlIHN0cmluZyB3YXMgc3VjY2Vzc2Z1bGx5IHB1c2hlZC5cXG40LiBJdCBjb3JyZWN0cyB0aGUgaGFuZGxpbmcgb2YgcGFydGlhbCBgY29weV90b191c2VyYCBmYXVsdHMgaW4gYGJwZl9zdHJlYW1fcmVhZGAgdG8gcHJvcGVybHkgYWNjb3VudCBmb3Igc3VjY2Vzc2Z1bGx5IGNvcGllZCBieXRlcy5cXG5cXG5Ob25lIG9mIHRoZXNlIGlzc3VlcyBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgc3RyZWFtIGVsZW1lbnRzIGFyZSBhbGxvY2F0ZWQgd2l0aCBgX19HRlBfWkVST2AsIGFuZCB0aGUgc3RyaW5ncyBjb3BpZWQgaW50byB0aGVtIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgYnN0cl9wcmludGZgIG9yIGB2c2NucHJpbnRmYC4gVGhlIGNvcGllZCBsZW5ndGggaXMgc3RyaWN0bHkgYm91bmRlZCBieSB0aGUgaW5pdGlhbGl6ZWQgc3RyaW5nIGxlbmd0aC4gVGhlIGJ1Z3MgZml4ZWQgYXJlIGxvZ2ljIGVycm9ycywgcmVzb3VyY2UgbGVha3MsIGFuZCBpbmNvcnJlY3QgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgdGhlIGFkZGVkIHNlbGZ0ZXN0cyBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgdG9vbHMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIGJ1Z3MgaW4gdGhlIEJQRiBzdHJlYW0gc3Vic3lzdGVtLCBpbmNsdWRpbmcgYW4gb2ZmLWJ5LW9uZSBlcnJvciBpbiBsZW5ndGggY2hlY2tpbmcsIGEgY2FwYWNpdHkgbGVhayBvbiBwdXNoIGZhaWx1cmUsIGluY29ycmVjdCBoYW5kbGluZyBvZiBwYXJ0aWFsIHJlYWRzIHRvIHVzZXIgc3BhY2UsIG1pc3NpbmcgdHJ1bmNhdGlvbiBjaGVja3MgaW4gdnByaW50aywgYW5kIGluY29ycmVjdCBsZW5ndGggY2FsY3VsYXRpb25zIGluIHN0YWdlX3ByaW50ay4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSAoQlBGIHN5c2NhbGwgYW5kIEJQRiBwcm9ncmFtcykgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0Mzo1MS4yMjgyNTk2NDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDQ3Nzc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDUyNDZhZmRlNDY5NmZjNjlmNzMyOTNhYWIzODg1MDk4MTA1M2U1MDBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMjMgMTQ6NDM6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdHJlYW0uYyBiL2tlcm5lbC9icGYvc3RyZWFtLmNcXG5pbmRleCBiZTljZTk4ZTk0NjkyLi43YTVjM2FjODY3NmI5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvc3RyZWFtLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N0cmVhbS5jXFxuQEAgLTIyLDExICsyMiwxMSBAQCBzdGF0aWMgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqYnBmX3N0cmVhbV9lbGVtX2FsbG9jKGludCBsZW4pXFxuIFxcdHNpemVfdCBhbGxvY19zaXplO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogTGVuZ3RoIGRlbm90ZXMgdGhlIGFtb3VudCBvZiBkYXRhIHRvIGJlIHdyaXR0ZW4gYXMgcGFydCBvZiBzdHJlYW0gZWxlbWVudCxcXG4tXFx0ICogdGh1cyBpbmNsdWRlcyAnXFxcXDAnIGJ5dGUuIFdlJ3JlIGNhcHBlZCBieSBob3cgbXVjaCBicGZfYnByaW50Zl9idWZmZXJzIGNhblxcbi1cXHQgKiBhY2NvbW9kYXRlLCB0aGVyZWZvcmUgZGVueSBhbGxvY2F0aW9ucyB0aGF0IHdvbid0IGZpdCBpbnRvIHRoZW0uXFxuK1xcdCAqIExlbmd0aCBpcyB0aGUgcGF5bG9hZCBwdXNoZWQgaW50byB0aGUgc3RyZWFtLCBleGNsdWRpbmcgdGhlXFxuK1xcdCAqIHRyYWlsaW5nIE5VTCBvZiB0aGUgYnByaW50ZiBidWZmZXIuIFJlamVjdCBhbnl0aGluZyB0aGF0IGNhbm5vdFxcbitcXHQgKiBmaXQgd2l0aG91dCBjb3B5aW5nIHRoYXQgTlVMIGludG8gdGhlIHN0cmVhbSBlbGVtZW50LlxcbiBcXHQgKi9cXG4tXFx0aWYgKGxlbiBcXHUwMDNjIDAgfHwgbGVuIFxcdTAwM2UgbWF4X2xlbilcXG4rXFx0aWYgKGxlbiBcXHUwMDNjIDAgfHwgbGVuIFxcdTAwM2U9IG1heF9sZW4pXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0YWxsb2Nfc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCBicGZfc3RyZWFtX2VsZW0sIHN0cltsZW5dKTtcXG5AQCAtNjgsMTAgKzY4LDggQEAgc3RhdGljIGludCBicGZfc3RyZWFtX2NvbnN1bWVfY2FwYWNpdHkoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgaW50IGxlbilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICplbGVtKVxcbitzdGF0aWMgdm9pZCBicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgaW50IGxlbilcXG4ge1xcbi1cXHRpbnQgbGVuID0gZWxlbS1cXHUwMDNldG90YWxfbGVuO1xcbi1cXG4gXFx0YXRvbWljX3N1YihsZW4sIFxcdTAwMjZzdHJlYW0tXFx1MDAzZWNhcGFjaXR5KTtcXG4gfVxcbiBcXG5AQCAtNzksNyArNzcsMTQgQEAgc3RhdGljIGludCBicGZfc3RyZWFtX3B1c2hfc3RyKHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxcXG4ge1xcbiBcXHRpbnQgcmV0ID0gYnBmX3N0cmVhbV9jb25zdW1lX2NhcGFjaXR5KHN0cmVhbSwgbGVuKTtcXG4gXFxuLVxcdHJldHVybiByZXQgPzogX19icGZfc3RyZWFtX3B1c2hfc3RyKFxcdTAwMjZzdHJlYW0tXFx1MDAzZWxvZywgc3RyLCBsZW4pO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFxcdTAwMjZzdHJlYW0tXFx1MDAzZWxvZywgc3RyLCBsZW4pO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RyZWFtLCBsZW4pO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBicGZfc3RyZWFtICpicGZfc3RyZWFtX2dldChlbnVtIGJwZl9zdHJlYW1faWQgc3RyZWFtX2lkLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXFxuQEAgLTE2Miw2ICsxNjcsNyBAQCBzdGF0aWMgaW50IGJwZl9zdHJlYW1fcmVhZChzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCB2b2lkIF9fdXNlciAqYnVmLCBpbnQgbGVuKVxcbiBcXG4gXFx0d2hpbGUgKHJlbV9sZW4pIHtcXG4gXFx0XFx0aW50IHBvcyA9IGxlbiAtIHJlbV9sZW47XFxuK1xcdFxcdGludCBjaHVuaywgbjtcXG4gXFx0XFx0Ym9vbCBjb250O1xcbiBcXG4gXFx0XFx0bm9kZSA9IGJwZl9zdHJlYW1fYmFja2xvZ19wZWVrKHN0cmVhbSk7XFxuQEAgLTE3NSwyMCArMTgxLDIxIEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9yZWFkKHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIHZvaWQgX191c2VyICpidWYsIGludCBsZW4pXFxuIFxcbiBcXHRcXHRjb25zX2xlbiA9IGVsZW0tXFx1MDAzZWNvbnN1bWVkX2xlbjtcXG4gXFx0XFx0Y29udCA9IGJwZl9zdHJlYW1fY29uc3VtZV9lbGVtKGVsZW0sIFxcdTAwMjZyZW1fbGVuKSA9PSBmYWxzZTtcXG4tXFxuLVxcdFxcdHJldCA9IGNvcHlfdG9fdXNlcihidWYgKyBwb3MsIGVsZW0tXFx1MDAzZXN0ciArIGNvbnNfbGVuLFxcbi1cXHRcXHRcXHRcXHQgICBlbGVtLVxcdTAwM2Vjb25zdW1lZF9sZW4gLSBjb25zX2xlbik7XFxuLVxcdFxcdC8qIFJlc3RvcmUgaW4gY2FzZSBvZiBlcnJvci4gKi9cXG4tXFx0XFx0aWYgKHJldCkge1xcbi1cXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbi1cXHRcXHRcXHRlbGVtLVxcdTAwM2Vjb25zdW1lZF9sZW4gPSBjb25zX2xlbjtcXG4rXFx0XFx0Y2h1bmsgPSBlbGVtLVxcdTAwM2Vjb25zdW1lZF9sZW4gLSBjb25zX2xlbjtcXG4rXFxuK1xcdFxcdG4gPSBjb3B5X3RvX3VzZXIoYnVmICsgcG9zLCBlbGVtLVxcdTAwM2VzdHIgKyBjb25zX2xlbiwgY2h1bmspO1xcbitcXHRcXHRpZiAobikge1xcbitcXHRcXHRcXHQvKiBLZWVwIGFueSBzdWNjZXNzZnVsbHkgY29waWVkIGJ5dGVzOyAtRUZBVUxUIG9ubHkgaWYgbm9uZS4gKi9cXG4rXFx0XFx0XFx0ZWxlbS1cXHUwMDNlY29uc3VtZWRfbGVuIC09IG47XFxuK1xcdFxcdFxcdHJlbV9sZW4gKz0gbjtcXG4rXFx0XFx0XFx0cmV0ID0gKGxlbiA9PSByZW1fbGVuKSA/IC1FRkFVTFQgOiAwO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGNvbnQpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRicGZfc3RyZWFtX2JhY2tsb2dfcG9wKHN0cmVhbSk7XFxuLVxcdFxcdGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJlYW0sIGVsZW0pO1xcbitcXHRcXHRicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RyZWFtLCBlbGVtLVxcdTAwM2V0b3RhbF9sZW4pO1xcbiBcXHRcXHRicGZfc3RyZWFtX2ZyZWVfZWxlbShlbGVtKTtcXG4gXFx0fVxcbiBcXG5AQCAtMjM4LDYgKzI0NSwxMSBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0cmV0ID0gYnN0cl9wcmludGYoZGF0YS5idWYsIE1BWF9CUFJJTlRGX0JVRiwgZm10X19zdHIsIGRhdGEuYmluX2FyZ3MpO1xcbitcXHQvKiBUcnVuY2F0aW9uOiByZWplY3QgYmVmb3JlIGNhcGFjaXR5IGNoYXJnZSAobm90IC1FTk9NRU0pLiAqL1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IE1BWF9CUFJJTlRGX0JVRikge1xcbitcXHRcXHRicGZfYnByaW50Zl9jbGVhbnVwKFxcdTAwMjZkYXRhKTtcXG4rXFx0XFx0cmV0dXJuIC1FMkJJRztcXG4rXFx0fVxcbiBcXHQvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi9cXG4gXFx0cmV0ID0gYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJlYW0sIGRhdGEuYnVmLCByZXQpO1xcbiBcXHRicGZfYnByaW50Zl9jbGVhbnVwKFxcdTAwMjZkYXRhKTtcXG5AQCAtMzExLDE3ICszMjMsMTggQEAgaW50IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9icHJpbnRmX2J1ZmZlcnMgKmJ1ZjtcXG4gXFx0dmFfbGlzdCBhcmdzO1xcbi1cXHRpbnQgcmV0O1xcbitcXHRpbnQgbGVuLCByZXQ7XFxuIFxcbiBcXHRpZiAoYnBmX3RyeV9nZXRfYnVmZmVycyhcXHUwMDI2YnVmKSlcXG4gXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFxuIFxcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XFxuLVxcdHJldCA9IHZzbnByaW50ZihidWYtXFx1MDAzZWJ1ZiwgQVJSQVlfU0laRShidWYtXFx1MDAzZWJ1ZiksIGZtdCwgYXJncyk7XFxuK1xcdGxlbiA9IHZzY25wcmludGYoYnVmLVxcdTAwM2VidWYsIEFSUkFZX1NJWkUoYnVmLVxcdTAwM2VidWYpLCBmbXQsIGFyZ3MpO1xcbiBcXHR2YV9lbmQoYXJncyk7XFxuLVxcdHNzLVxcdTAwM2VsZW4gKz0gcmV0O1xcbiBcXHQvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi9cXG4tXFx0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFxcdTAwMjZzcy1cXHUwMDNlbG9nLCBidWYtXFx1MDAzZWJ1ZiwgcmV0KTtcXG4rXFx0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFxcdTAwMjZzcy1cXHUwMDNlbG9nLCBidWYtXFx1MDAzZWJ1ZiwgbGVuKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHNzLVxcdTAwM2VsZW4gKz0gbGVuO1xcbiBcXHRicGZfcHV0X2J1ZmZlcnMoKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jXFxuaW5kZXggYzNjY2U1YzI5MmJkZC4uODcxNzBkY2FkM2FkOCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jXFxuQEAgLTU4LDYgKzU4LDcxIEBAIHZvaWQgdGVzdF9zdHJlYW1fc3lzY2FsbCh2b2lkKVxcbiBcXHRzdHJlYW1fX2Rlc3Ryb3koc2tlbCk7XFxuIH1cXG4gXFxuK3ZvaWQgdGVzdF9zdHJlYW1fb3ZlcnNpemUodm9pZClcXG4re1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XFxuK1xcdHN0cnVjdCBzdHJlYW0gKnNrZWw7XFxuK1xcdGludCByZXQsIHByb2dfZmQ7XFxuK1xcdGNoYXIgYnVmWzhdID0ge307XFxuK1xcbitcXHRza2VsID0gc3RyZWFtX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic3RyZWFtX19vcGVuX2FuZF9sb2FkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3Muc3RyZWFtX292ZXJzaXplKTtcXG4rXFx0cmV0ID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nX2ZkLCBcXHUwMDI2b3B0cyk7XFxuK1xcdEFTU0VSVF9PSyhyZXQsIFxcXCJvdmVyc2l6ZSBydW5cXFwiKTtcXG4rXFx0QVNTRVJUX09LKG9wdHMucmV0dmFsLCBcXFwib3ZlcnNpemUgcmV0dmFsXFxcIik7XFxuK1xcbitcXHQvKiBPdmVyc2l6ZWQgcHVzaCBtdXN0IG5vdCBwZXJtYW5lbnRseSBjb25zdW1lIGNhcGFjaXR5IG9uIHRoaXMgcHJvZy4gKi9cXG4rXFx0cmV0ID0gYnBmX3Byb2dfc3RyZWFtX3JlYWQocHJvZ19mZCwgQlBGX1NUUkVBTV9TVERPVVQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE5VTEwpO1xcbitcXHRBU1NFUlRfRVEocmV0LCAzLCBcXFwiYnl0ZXMgYWZ0ZXIgb3ZlcnNpemVcXFwiKTtcXG4rXFx0QVNTRVJUX09LKG1lbWNtcChidWYsIFxcXCJmb29cXFwiLCAzKSwgXFxcInBheWxvYWQgYWZ0ZXIgb3ZlcnNpemVcXFwiKTtcXG4rXFxuK1xcdHN0cmVhbV9fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X3N0cmVhbV9wYXJ0aWFsX3JlYWQodm9pZClcXG4re1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XFxuK1xcdHN0cnVjdCBzdHJlYW0gKnNrZWw7XFxuK1xcdGludCByZXQsIHByb2dfZmQ7XFxuK1xcdGxvbmcgcGFnZV9zaXplO1xcbitcXHRjaGFyICpwYWdlLCAqYnVmO1xcbitcXHRjaGFyIHJlc3RbOF0gPSB7fTtcXG4rXFxuK1xcdHNrZWwgPSBzdHJlYW1fX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJzdHJlYW1fX29wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5zdHJlYW1fc3lzY2FsbCk7XFxuK1xcdHJldCA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocHJvZ19mZCwgXFx1MDAyNm9wdHMpO1xcbitcXHRBU1NFUlRfT0socmV0LCBcXFwicmV0XFxcIik7XFxuK1xcdEFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXFxcInJldHZhbFxcXCIpO1xcbitcXG4rXFx0cGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpO1xcbitcXHRwYWdlID0gbW1hcChOVUxMLCBwYWdlX3NpemUgKiAyLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRcXHQgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XFxuK1xcdGlmICghQVNTRVJUX05FUShwYWdlLCBNQVBfRkFJTEVELCBcXFwibW1hcFxcXCIpKSB7XFxuK1xcdFxcdHN0cmVhbV9fZGVzdHJveShza2VsKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcdC8qIExlYXZlIG9ubHkgdGhlIGZpcnN0IHBhZ2UgbWFwcGVkIHNvIGEgc3RyYWRkbGluZyBjb3B5IGZhdWx0cy4gKi9cXG4rXFx0QVNTRVJUX09LKG11bm1hcChwYWdlICsgcGFnZV9zaXplLCBwYWdlX3NpemUpLCBcXFwibXVubWFwIHNlY29uZCBwYWdlXFxcIik7XFxuK1xcbitcXHRidWYgPSBwYWdlICsgcGFnZV9zaXplIC0gMTtcXG4rXFx0cmV0ID0gYnBmX3Byb2dfc3RyZWFtX3JlYWQocHJvZ19mZCwgQlBGX1NUUkVBTV9TVERPVVQsIGJ1ZiwgMywgTlVMTCk7XFxuK1xcdEFTU0VSVF9FUShyZXQsIDEsIFxcXCJwYXJ0aWFsIGJ5dGVzXFxcIik7XFxuK1xcdEFTU0VSVF9FUShidWZbMF0sICdmJywgXFxcImZpcnN0IGJ5dGVcXFwiKTtcXG4rXFxuK1xcdHJldCA9IGJwZl9wcm9nX3N0cmVhbV9yZWFkKHByb2dfZmQsIEJQRl9TVFJFQU1fU1RET1VULCByZXN0LCBzaXplb2YocmVzdCksIE5VTEwpO1xcbitcXHRBU1NFUlRfRVEocmV0LCAyLCBcXFwicmVtYWluaW5nIGJ5dGVzXFxcIik7XFxuK1xcdEFTU0VSVF9PSyhtZW1jbXAocmVzdCwgXFxcIm9vXFxcIiwgMiksIFxcXCJyZW1haW5pbmcgZGF0YVxcXCIpO1xcbitcXG4rXFx0bXVubWFwKHBhZ2UsIHBhZ2Vfc2l6ZSk7XFxuK1xcdHN0cmVhbV9fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdGVzdF9hZGRyZXNzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgdW5zaWduZWQgbG9uZyAqZmF1bHRfYWRkcl9wKVxcbiB7XFxuIFxcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXFxuaW5kZXggNmY5OTliYTk1MWEzYy4uOWI5N2Y1ZTAxYjgzYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcXG5AQCAtMzYsNyArMzYsMTIgQEAgc3RydWN0IHtcXG4gfSBhcnJheSBTRUMoXFxcIi5tYXBzXFxcIik7XFxuIFxcbiAjZGVmaW5lIEVOT1NQQyAyOFxcbisjZGVmaW5lIEUyQklHIDdcXG4gI2RlZmluZSBfU1RSIFxcXCJ4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhcXFwiXFxuKyNkZWZpbmUgX1g2NCBcXFwieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eFxcXCJcXG4rLyogMTAyNCBieXRlczogdHJ1bmNhdGVkIGJ5IGJzdHJfcHJpbnRmLCBtdXN0IHJldHVybiAtRTJCSUcuICovXFxuKyNkZWZpbmUgX0JJR19TVFIgKF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBcXFxcXFxuK1xcdFxcdCAgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0KVxcbiBcXG4gaW50IHNpemU7XFxuIHU2NCBmYXVsdF9hZGRyO1xcbkBAIC0xMTcsNiArMTIyLDE5IEBAIGludCBzdHJlYW1fc3lzY2FsbCh2b2lkICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcXG4raW50IHN0cmVhbV9vdmVyc2l6ZSh2b2lkICpjdHgpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGJwZl9zdHJlYW1fcHJpbnRrKEJQRl9TVERPVVQsIF9CSUdfU1RSKTtcXG4rXFx0aWYgKHJldCAhPSAtRTJCSUcpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gYnBmX3N0cmVhbV9wcmludGsoQlBGX1NURE9VVCwgXFxcImZvb1xcXCIpO1xcbit9XFxuK1xcbiBTRUMoXFxcInN5c2NhbGxcXFwiKVxcbiBfX2FyY2hfeDg2XzY0XFxuIF9fYXJjaF9hcm02NFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0Mzo1MS42ODk0OTI3NTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTc2OTQ3MjQyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19zdHJlYW1fcmVhZFwiLFxuICAgIFwiYnBmX3N0cmVhbV92cHJpbnRrXCIsXG4gICAgXCJicGZfc3RyZWFtX3N0YWdlX3ByaW50a1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIGJ1Z3MgaW4gdGhlIEJQRiBzdHJlYW0gc3Vic3lzdGVtLCBpbmNsdWRpbmcgYW4gb2ZmLWJ5LW9uZSBlcnJvciBpbiBsZW5ndGggY2hlY2tpbmcsIGEgY2FwYWNpdHkgbGVhayBvbiBwdXNoIGZhaWx1cmUsIGluY29ycmVjdCBoYW5kbGluZyBvZiBwYXJ0aWFsIHJlYWRzIHRvIHVzZXIgc3BhY2UsIG1pc3NpbmcgdHJ1bmNhdGlvbiBjaGVja3MgaW4gdnByaW50aywgYW5kIGluY29ycmVjdCBsZW5ndGggY2FsY3VsYXRpb25zIGluIHN0YWdlX3ByaW50ay4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSAoQlBGIHN5c2NhbGwgYW5kIEJQRiBwcm9ncmFtcykgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MjQ2YWZkZTQ2OTZmYzY5ZjczMjkzYWFiMzg4NTA5ODEwNTNlNTAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMjMgMTQ6NDM6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0cmVhbS5jIGIva2VybmVsL2JwZi9zdHJlYW0uY1xuaW5kZXggYmU5Y2U5OGU5NDY5Mi4uN2E1YzNhYzg2NzZiOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3RyZWFtLmNcbisrKyBiL2tlcm5lbC9icGYvc3RyZWFtLmNcbkBAIC0yMiwxMSArMjIsMTEgQEAgc3RhdGljIHN0cnVjdCBicGZfc3RyZWFtX2VsZW0gKmJwZl9zdHJlYW1fZWxlbV9hbGxvYyhpbnQgbGVuKVxuIFx0c2l6ZV90IGFsbG9jX3NpemU7XG4gXG4gXHQvKlxuLVx0ICogTGVuZ3RoIGRlbm90ZXMgdGhlIGFtb3VudCBvZiBkYXRhIHRvIGJlIHdyaXR0ZW4gYXMgcGFydCBvZiBzdHJlYW0gZWxlbWVudCxcbi1cdCAqIHRodXMgaW5jbHVkZXMgJ1xcMCcgYnl0ZS4gV2UncmUgY2FwcGVkIGJ5IGhvdyBtdWNoIGJwZl9icHJpbnRmX2J1ZmZlcnMgY2FuXG4tXHQgKiBhY2NvbW9kYXRlLCB0aGVyZWZvcmUgZGVueSBhbGxvY2F0aW9ucyB0aGF0IHdvbid0IGZpdCBpbnRvIHRoZW0uXG4rXHQgKiBMZW5ndGggaXMgdGhlIHBheWxvYWQgcHVzaGVkIGludG8gdGhlIHN0cmVhbSwgZXhjbHVkaW5nIHRoZVxuK1x0ICogdHJhaWxpbmcgTlVMIG9mIHRoZSBicHJpbnRmIGJ1ZmZlci4gUmVqZWN0IGFueXRoaW5nIHRoYXQgY2Fubm90XG4rXHQgKiBmaXQgd2l0aG91dCBjb3B5aW5nIHRoYXQgTlVMIGludG8gdGhlIHN0cmVhbSBlbGVtZW50LlxuIFx0ICovXG4tXHRpZiAobGVuIFx1MDAzYyAwIHx8IGxlbiBcdTAwM2UgbWF4X2xlbilcbitcdGlmIChsZW4gXHUwMDNjIDAgfHwgbGVuIFx1MDAzZT0gbWF4X2xlbilcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRhbGxvY19zaXplID0gb2Zmc2V0b2Yoc3RydWN0IGJwZl9zdHJlYW1fZWxlbSwgc3RyW2xlbl0pO1xuQEAgLTY4LDEwICs2OCw4IEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9jb25zdW1lX2NhcGFjaXR5KHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIGludCBsZW4pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYnBmX3N0cmVhbV9yZWxlYXNlX2NhcGFjaXR5KHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIHN0cnVjdCBicGZfc3RyZWFtX2VsZW0gKmVsZW0pXG4rc3RhdGljIHZvaWQgYnBmX3N0cmVhbV9yZWxlYXNlX2NhcGFjaXR5KHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIGludCBsZW4pXG4ge1xuLVx0aW50IGxlbiA9IGVsZW0tXHUwMDNldG90YWxfbGVuO1xuLVxuIFx0YXRvbWljX3N1YihsZW4sIFx1MDAyNnN0cmVhbS1cdTAwM2VjYXBhY2l0eSk7XG4gfVxuIFxuQEAgLTc5LDcgKzc3LDE0IEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBjb25zdCBjaGFyICpzdHIsIGludCBsXG4ge1xuIFx0aW50IHJldCA9IGJwZl9zdHJlYW1fY29uc3VtZV9jYXBhY2l0eShzdHJlYW0sIGxlbik7XG4gXG4tXHRyZXR1cm4gcmV0ID86IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihcdTAwMjZzdHJlYW0tXHUwMDNlbG9nLCBzdHIsIGxlbik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFx1MDAyNnN0cmVhbS1cdTAwM2Vsb2csIHN0ciwgbGVuKTtcbitcdGlmIChyZXQpXG4rXHRcdGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJlYW0sIGxlbik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGJwZl9zdHJlYW0gKmJwZl9zdHJlYW1fZ2V0KGVudW0gYnBmX3N0cmVhbV9pZCBzdHJlYW1faWQsIHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eClcbkBAIC0xNjIsNiArMTY3LDcgQEAgc3RhdGljIGludCBicGZfc3RyZWFtX3JlYWQoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgdm9pZCBfX3VzZXIgKmJ1ZiwgaW50IGxlbilcbiBcbiBcdHdoaWxlIChyZW1fbGVuKSB7XG4gXHRcdGludCBwb3MgPSBsZW4gLSByZW1fbGVuO1xuK1x0XHRpbnQgY2h1bmssIG47XG4gXHRcdGJvb2wgY29udDtcbiBcbiBcdFx0bm9kZSA9IGJwZl9zdHJlYW1fYmFja2xvZ19wZWVrKHN0cmVhbSk7XG5AQCAtMTc1LDIwICsxODEsMjEgQEAgc3RhdGljIGludCBicGZfc3RyZWFtX3JlYWQoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgdm9pZCBfX3VzZXIgKmJ1ZiwgaW50IGxlbilcbiBcbiBcdFx0Y29uc19sZW4gPSBlbGVtLVx1MDAzZWNvbnN1bWVkX2xlbjtcbiBcdFx0Y29udCA9IGJwZl9zdHJlYW1fY29uc3VtZV9lbGVtKGVsZW0sIFx1MDAyNnJlbV9sZW4pID09IGZhbHNlO1xuLVxuLVx0XHRyZXQgPSBjb3B5X3RvX3VzZXIoYnVmICsgcG9zLCBlbGVtLVx1MDAzZXN0ciArIGNvbnNfbGVuLFxuLVx0XHRcdFx0ICAgZWxlbS1cdTAwM2Vjb25zdW1lZF9sZW4gLSBjb25zX2xlbik7XG4tXHRcdC8qIFJlc3RvcmUgaW4gY2FzZSBvZiBlcnJvci4gKi9cbi1cdFx0aWYgKHJldCkge1xuLVx0XHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRcdFx0ZWxlbS1cdTAwM2Vjb25zdW1lZF9sZW4gPSBjb25zX2xlbjtcbitcdFx0Y2h1bmsgPSBlbGVtLVx1MDAzZWNvbnN1bWVkX2xlbiAtIGNvbnNfbGVuO1xuK1xuK1x0XHRuID0gY29weV90b191c2VyKGJ1ZiArIHBvcywgZWxlbS1cdTAwM2VzdHIgKyBjb25zX2xlbiwgY2h1bmspO1xuK1x0XHRpZiAobikge1xuK1x0XHRcdC8qIEtlZXAgYW55IHN1Y2Nlc3NmdWxseSBjb3BpZWQgYnl0ZXM7IC1FRkFVTFQgb25seSBpZiBub25lLiAqL1xuK1x0XHRcdGVsZW0tXHUwMDNlY29uc3VtZWRfbGVuIC09IG47XG4rXHRcdFx0cmVtX2xlbiArPSBuO1xuK1x0XHRcdHJldCA9IChsZW4gPT0gcmVtX2xlbikgPyAtRUZBVUxUIDogMDtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuIFx0XHRpZiAoY29udClcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0YnBmX3N0cmVhbV9iYWNrbG9nX3BvcChzdHJlYW0pO1xuLVx0XHRicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RyZWFtLCBlbGVtKTtcbitcdFx0YnBmX3N0cmVhbV9yZWxlYXNlX2NhcGFjaXR5KHN0cmVhbSwgZWxlbS1cdTAwM2V0b3RhbF9sZW4pO1xuIFx0XHRicGZfc3RyZWFtX2ZyZWVfZWxlbShlbGVtKTtcbiBcdH1cbiBcbkBAIC0yMzgsNiArMjQ1LDExIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3RyZWFtX3ZwcmludGsoaW50IHN0cmVhbV9pZCwgY29uc3QgY2hhciAqZm10X19zdHIsIGNvbnN0IHZvXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSBic3RyX3ByaW50ZihkYXRhLmJ1ZiwgTUFYX0JQUklOVEZfQlVGLCBmbXRfX3N0ciwgZGF0YS5iaW5fYXJncyk7XG4rXHQvKiBUcnVuY2F0aW9uOiByZWplY3QgYmVmb3JlIGNhcGFjaXR5IGNoYXJnZSAobm90IC1FTk9NRU0pLiAqL1xuK1x0aWYgKHJldCBcdTAwM2U9IE1BWF9CUFJJTlRGX0JVRikge1xuK1x0XHRicGZfYnByaW50Zl9jbGVhbnVwKFx1MDAyNmRhdGEpO1xuK1x0XHRyZXR1cm4gLUUyQklHO1xuK1x0fVxuIFx0LyogRXhjbHVkZSBOVUxMIGJ5dGUgZHVyaW5nIHB1c2guICovXG4gXHRyZXQgPSBicGZfc3RyZWFtX3B1c2hfc3RyKHN0cmVhbSwgZGF0YS5idWYsIHJldCk7XG4gXHRicGZfYnByaW50Zl9jbGVhbnVwKFx1MDAyNmRhdGEpO1xuQEAgLTMxMSwxNyArMzIzLDE4IEBAIGludCBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhzdHJ1Y3QgYnBmX3N0cmVhbV9zdGFnZSAqc3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIHtcbiBcdHN0cnVjdCBicGZfYnByaW50Zl9idWZmZXJzICpidWY7XG4gXHR2YV9saXN0IGFyZ3M7XG4tXHRpbnQgcmV0O1xuK1x0aW50IGxlbiwgcmV0O1xuIFxuIFx0aWYgKGJwZl90cnlfZ2V0X2J1ZmZlcnMoXHUwMDI2YnVmKSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiBcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XG4tXHRyZXQgPSB2c25wcmludGYoYnVmLVx1MDAzZWJ1ZiwgQVJSQVlfU0laRShidWYtXHUwMDNlYnVmKSwgZm10LCBhcmdzKTtcbitcdGxlbiA9IHZzY25wcmludGYoYnVmLVx1MDAzZWJ1ZiwgQVJSQVlfU0laRShidWYtXHUwMDNlYnVmKSwgZm10LCBhcmdzKTtcbiBcdHZhX2VuZChhcmdzKTtcbi1cdHNzLVx1MDAzZWxlbiArPSByZXQ7XG4gXHQvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi9cbi1cdHJldCA9IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihcdTAwMjZzcy1cdTAwM2Vsb2csIGJ1Zi1cdTAwM2VidWYsIHJldCk7XG4rXHRyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXHUwMDI2c3MtXHUwMDNlbG9nLCBidWYtXHUwMDNlYnVmLCBsZW4pO1xuK1x0aWYgKCFyZXQpXG4rXHRcdHNzLVx1MDAzZWxlbiArPSBsZW47XG4gXHRicGZfcHV0X2J1ZmZlcnMoKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbmluZGV4IGMzY2NlNWMyOTJiZGQuLjg3MTcwZGNhZDNhZDggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbkBAIC01OCw2ICs1OCw3MSBAQCB2b2lkIHRlc3Rfc3RyZWFtX3N5c2NhbGwodm9pZClcbiBcdHN0cmVhbV9fZGVzdHJveShza2VsKTtcbiB9XG4gXG4rdm9pZCB0ZXN0X3N0cmVhbV9vdmVyc2l6ZSh2b2lkKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbitcdHN0cnVjdCBzdHJlYW0gKnNrZWw7XG4rXHRpbnQgcmV0LCBwcm9nX2ZkO1xuK1x0Y2hhciBidWZbOF0gPSB7fTtcbitcbitcdHNrZWwgPSBzdHJlYW1fX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInN0cmVhbV9fb3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9vdmVyc2l6ZSk7XG4rXHRyZXQgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHByb2dfZmQsIFx1MDAyNm9wdHMpO1xuK1x0QVNTRVJUX09LKHJldCwgXCJvdmVyc2l6ZSBydW5cIik7XG4rXHRBU1NFUlRfT0sob3B0cy5yZXR2YWwsIFwib3ZlcnNpemUgcmV0dmFsXCIpO1xuK1xuK1x0LyogT3ZlcnNpemVkIHB1c2ggbXVzdCBub3QgcGVybWFuZW50bHkgY29uc3VtZSBjYXBhY2l0eSBvbiB0aGlzIHByb2cuICovXG4rXHRyZXQgPSBicGZfcHJvZ19zdHJlYW1fcmVhZChwcm9nX2ZkLCBCUEZfU1RSRUFNX1NURE9VVCwgYnVmLCBzaXplb2YoYnVmKSwgTlVMTCk7XG4rXHRBU1NFUlRfRVEocmV0LCAzLCBcImJ5dGVzIGFmdGVyIG92ZXJzaXplXCIpO1xuK1x0QVNTRVJUX09LKG1lbWNtcChidWYsIFwiZm9vXCIsIDMpLCBcInBheWxvYWQgYWZ0ZXIgb3ZlcnNpemVcIik7XG4rXG4rXHRzdHJlYW1fX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuK3ZvaWQgdGVzdF9zdHJlYW1fcGFydGlhbF9yZWFkKHZvaWQpXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xuK1x0c3RydWN0IHN0cmVhbSAqc2tlbDtcbitcdGludCByZXQsIHByb2dfZmQ7XG4rXHRsb25nIHBhZ2Vfc2l6ZTtcbitcdGNoYXIgKnBhZ2UsICpidWY7XG4rXHRjaGFyIHJlc3RbOF0gPSB7fTtcbitcbitcdHNrZWwgPSBzdHJlYW1fX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInN0cmVhbV9fb3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9zeXNjYWxsKTtcbitcdHJldCA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocHJvZ19mZCwgXHUwMDI2b3B0cyk7XG4rXHRBU1NFUlRfT0socmV0LCBcInJldFwiKTtcbitcdEFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXCJyZXR2YWxcIik7XG4rXG4rXHRwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7XG4rXHRwYWdlID0gbW1hcChOVUxMLCBwYWdlX3NpemUgKiAyLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuK1x0XHQgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XG4rXHRpZiAoIUFTU0VSVF9ORVEocGFnZSwgTUFQX0ZBSUxFRCwgXCJtbWFwXCIpKSB7XG4rXHRcdHN0cmVhbV9fZGVzdHJveShza2VsKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0LyogTGVhdmUgb25seSB0aGUgZmlyc3QgcGFnZSBtYXBwZWQgc28gYSBzdHJhZGRsaW5nIGNvcHkgZmF1bHRzLiAqL1xuK1x0QVNTRVJUX09LKG11bm1hcChwYWdlICsgcGFnZV9zaXplLCBwYWdlX3NpemUpLCBcIm11bm1hcCBzZWNvbmQgcGFnZVwiKTtcbitcbitcdGJ1ZiA9IHBhZ2UgKyBwYWdlX3NpemUgLSAxO1xuK1x0cmV0ID0gYnBmX3Byb2dfc3RyZWFtX3JlYWQocHJvZ19mZCwgQlBGX1NUUkVBTV9TVERPVVQsIGJ1ZiwgMywgTlVMTCk7XG4rXHRBU1NFUlRfRVEocmV0LCAxLCBcInBhcnRpYWwgYnl0ZXNcIik7XG4rXHRBU1NFUlRfRVEoYnVmWzBdLCAnZicsIFwiZmlyc3QgYnl0ZVwiKTtcbitcbitcdHJldCA9IGJwZl9wcm9nX3N0cmVhbV9yZWFkKHByb2dfZmQsIEJQRl9TVFJFQU1fU1RET1VULCByZXN0LCBzaXplb2YocmVzdCksIE5VTEwpO1xuK1x0QVNTRVJUX0VRKHJldCwgMiwgXCJyZW1haW5pbmcgYnl0ZXNcIik7XG4rXHRBU1NFUlRfT0sobWVtY21wKHJlc3QsIFwib29cIiwgMiksIFwicmVtYWluaW5nIGRhdGFcIik7XG4rXG4rXHRtdW5tYXAocGFnZSwgcGFnZV9zaXplKTtcbitcdHN0cmVhbV9fZGVzdHJveShza2VsKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGVzdF9hZGRyZXNzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgdW5zaWduZWQgbG9uZyAqZmF1bHRfYWRkcl9wKVxuIHtcbiBcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbmluZGV4IDZmOTk5YmE5NTFhM2MuLjliOTdmNWUwMWI4M2EgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xuQEAgLTM2LDcgKzM2LDEyIEBAIHN0cnVjdCB7XG4gfSBhcnJheSBTRUMoXCIubWFwc1wiKTtcbiBcbiAjZGVmaW5lIEVOT1NQQyAyOFxuKyNkZWZpbmUgRTJCSUcgN1xuICNkZWZpbmUgX1NUUiBcInh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eFwiXG4rI2RlZmluZSBfWDY0IFwieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eFwiXG4rLyogMTAyNCBieXRlczogdHJ1bmNhdGVkIGJ5IGJzdHJfcHJpbnRmLCBtdXN0IHJldHVybiAtRTJCSUcuICovXG4rI2RlZmluZSBfQklHX1NUUiAoX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IFxcXG4rXHRcdCAgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0KVxuIFxuIGludCBzaXplO1xuIHU2NCBmYXVsdF9hZGRyO1xuQEAgLTExNyw2ICsxMjIsMTkgQEAgaW50IHN0cmVhbV9zeXNjYWxsKHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4raW50IHN0cmVhbV9vdmVyc2l6ZSh2b2lkICpjdHgpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGJwZl9zdHJlYW1fcHJpbnRrKEJQRl9TVERPVVQsIF9CSUdfU1RSKTtcbitcdGlmIChyZXQgIT0gLUUyQklHKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGJwZl9zdHJlYW1fcHJpbnRrKEJQRl9TVERPVVQsIFwiZm9vXCIpO1xuK31cbitcbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuIF9fYXJjaF9hcm02NFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDM6NTEuNjg5NDk0MjAyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAzMzA5Nzk2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBTdHJlYW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCdzIGNsZWFybHkgZm9jdXNlZCBvbiByZWZpbmluZyB0aGUgQlBGIHN0cmVhbSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGNoYW5nZXMgYXJlIGNvbmNlbnRyYXRlZCBpbiBga2VybmVsL2JwZi9zdHJlYW0uY2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhhdCBmaWxlIGV2ZW4gZXhpc3RzIGluIHRoZSBtYWlubGluZSBrZXJuZWw7IGEgcXVpY2sgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIG9yIGBkZWZhdWx0X2FwaTpjb2Rlc2VhcmNoLWRpci1pbmRleGAgc2VhcmNoIHNob3VsZCBjb25maXJtIHRoYXQuIEZyb20gdGhlIGRlc2NyaXB0aW9uLCBpdCBzZWVtcyBsaWtlIHdlJ3JlIGFkZHJlc3Npbmcgc29tZSBzdWJ0bGUgaXNzdWVzLCBtb3N0bHkgcmVsYXRlZCB0byBlZGdlIGNhc2VzIGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIHN0cmVhbSBmdW5jdGlvbmFsaXR5LlxuXG5TcGVjaWZpY2FsbHksIHRoZSBwYXRjaDpcblxuKiAgICoqVGlnaHRlbnMgdXAgYWxsb2NhdGlvbiB2YWxpZGF0aW9uOioqIE1vZGlmeWluZyBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYCB0byByZWplY3QgYWxsb2NhdGlvbnMgd2hlcmUgdGhlIHJlcXVlc3RlZCBsZW5ndGggKGBsZW5gKSAqZXF1YWxzKiB0aGUgbWF4aW11bSBsZW5ndGggKGBtYXhfbGVuYCkuIFRoYXQncyBhIGdvb2QgcHJldmVudGF0aXZlIG1lYXN1cmU7IHRoZSBvcmlnaW5hbCBjaGVjayBiZWluZyBqdXN0IGEgZ3JlYXRlci10aGFuIGNoZWNrIChgXHUwMDNlYCkgbWlnaHQgaGF2ZSBhbGxvd2VkIGZvciBzdWJ0bGUgb3ZlcmZsb3dzIG9yIGJvdW5kYXJ5IGNvbmRpdGlvbiBpc3N1ZXMuXG5cbiogICAqKkltcHJvdmVzIHJlc291cmNlIG1hbmFnZW1lbnQgb24gZmFpbHVyZToqKiBUaGUgYGJwZl9zdHJlYW1fcHVzaF9zdHJgIGNoYW5nZXMgc2VlbSBnZWFyZWQgdG93YXJkIHJlbGVhc2luZyBhbGxvY2F0ZWQgY2FwYWNpdHkgaWYgdGhlIHVuZGVybHlpbmcgcHVzaCBvcGVyYXRpb24gKGBfX2JwZl9zdHJlYW1fcHVzaF9zdHJgKSBmYWlscy4gVGhpcyBpcyBjcml0aWNhbCBmb3IgcHJldmVudGluZyBtZW1vcnkgbGVha3MgYW5kIHJlc291cmNlIGV4aGF1c3Rpb24gaW4gdGhlIGZhY2Ugb2YgZXJyb3JzLlxuXG4qICAgKipIYW5kbGVzIHBhcnRpYWwgcmVhZCBmYWlsdXJlczoqKiBDb3JyZWN0aW5nIGBicGZfc3RyZWFtX3JlYWRgIHRvIGNvcGUgd2l0aCBzY2VuYXJpb3Mgd2hlcmUgYGNvcHlfdG9fdXNlcmAgbWlnaHQgb25seSB0cmFuc2ZlciBwYXJ0IG9mIHRoZSByZXF1ZXN0ZWQgZGF0YS4gSGFuZGxpbmcgcGFydGlhbCByZWFkcyBpcyBhIGNvbW1vbiB2dWxuZXJhYmlsaXR5LCBhbmQgdGhpcyBzaG91bGQgdGlnaHRlbiB1cCB0aGUgY29kZS5cblxuKiAgICoqU3RyZW5ndGhlbnMgbGFyZ2Ugc3RyaW5nIGhhbmRsaW5nOioqIGBicGZfc3RyZWFtX3ZwcmludGtgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIHJlamVjdCB2ZXJ5IGxhcmdlIHN0cmluZ3MgKHRob3NlIGxhcmdlciB0aGFuIG9yIGVxdWFsIHRvIGBNQVhfQlBSSU5URl9CVUZgKSByZXR1cm5pbmcgYW4gYEUyQklHYCBlcnJvciwgYW5kIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgaXMgc3dpdGNoaW5nIHRvIGB2c2NucHJpbnRmYCwgYm90aCBvZiB0aGVzZSBpbXByb3ZlbWVudHMgcG9pbnQgdG8gaW5jcmVhc2VkIHJvYnVzdG5lc3MgYW5kIHByZXZlbnRpbmcgb3ZlcmZsb3dzLiBVc2luZyBgdnNjbnByaW50ZmAgaW5zdGVhZCBvZiBgdnNucHJpbnRmYCBpcyBhIHNtYXJ0IGNob2ljZSBmb3Igc2FmZXIgYW5kIG1vcmUgcm9idXN0IHN0cmluZyBmb3JtYXR0aW5nLiBBbHNvLCBvbmx5IGluY3JlbWVudGluZyB0aGUgbGVuZ3RoIGNvdW50ZXIgd2hlbiBgX19icGZfc3RyZWFtX3B1c2hfc3RyYCBzdWNjZWVkcyBpcyBhIHNlbnNpYmxlIGNoYW5nZSB0aGF0IHByZXZlbnRzIGxlbmd0aCBpbmNvbnNpc3RlbmNpZXMuXG5cblRoZSBhZGRpdGlvbiBvZiB0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jYCBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgcGFydCBvZiB0aGUgcGFja2FnZS4gSXQgc2hvd3MgdGhhdCB0aGVzZSBpc3N1ZXMgYXJlIG5vdyBjb3ZlcmVkIGFuZCB0aGF0IHRoZSBrZXJuZWwgY2FuIG9wZXJhdGUgd2l0aGluIHNhZmV0eSBtYXJnaW5zLlxuXG5PdmVyYWxsLCB0aGVzZSBsb29rIGxpa2Ugd2VsbC1jb25zaWRlcmVkIGNoYW5nZXMgdGhhdCBpbXByb3ZlIHJvYnVzdG5lc3MgYW5kIHByZXZlbnQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB3aXRoaW4gdGhlIEJQRiBzdHJlYW0gaW1wbGVtZW50YXRpb24uIEknbGwgaGF2ZSB0byBkaXZlIGludG8gdGhlIGNvZGUgaXRzZWxmIHRvIHZlcmlmeSB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIGFuZCB0aGUgdGVzdCBjb3ZlcmFnZSwgYnV0IG9uIHRoZSBzdXJmYWNlLCB0aGlzIHBhdGNoIHNlZW1zIGxpa2UgYSBwb3NpdGl2ZSBzdGVwIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NzAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0Mzo1OC43MjI1OTU2NThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYXJlbmEuY1wiLFxuICAgIFwiYXJyYXltYXAuY1wiLFxuICAgIFwiYmxvb21fZmlsdGVyLmNcIixcbiAgICBcImJwZl9jZ3JwX3N0b3JhZ2UuY1wiLFxuICAgIFwiYnBmX2lub2RlX3N0b3JhZ2UuY1wiLFxuICAgIFwiYnBmX2luc25fYXJyYXkuY1wiLFxuICAgIFwiYnBmX2l0ZXIuY1wiLFxuICAgIFwiYnBmX2xvY2FsX3N0b3JhZ2UuY1wiLFxuICAgIFwiYnBmX2xydV9saXN0LmNcIixcbiAgICBcImJwZl9scnVfbGlzdC5oXCIsXG4gICAgXCJicGZfbHNtLmNcIixcbiAgICBcImJwZl9sc21fcHJvdG8uY1wiLFxuICAgIFwiYnBmX3N0cnVjdF9vcHMuY1wiLFxuICAgIFwiYnBmX3Rhc2tfc3RvcmFnZS5jXCIsXG4gICAgXCJidGYuY1wiLFxuICAgIFwiYnRmX2l0ZXIuY1wiLFxuICAgIFwiYnRmX3JlbG9jYXRlLmNcIixcbiAgICBcImNncm91cC5jXCIsXG4gICAgXCJjZ3JvdXBfaXRlci5jXCIsXG4gICAgXCJjb3JlLmNcIixcbiAgICBcImNwdW1hcC5jXCIsXG4gICAgXCJjcHVtYXNrLmNcIixcbiAgICBcImNyeXB0by5jXCIsXG4gICAgXCJkZXZtYXAuY1wiLFxuICAgIFwiZGlzYXNtLmNcIixcbiAgICBcImRpc2FzbS5oXCIsXG4gICAgXCJkaXNwYXRjaGVyLmNcIixcbiAgICBcImRtYWJ1Zl9pdGVyLmNcIixcbiAgICBcImhhc2h0YWIuY1wiLFxuICAgIFwiaGVscGVycy5jXCIsXG4gICAgXCJpbm9kZS5jXCIsXG4gICAgXCJrbWVtX2NhY2hlX2l0ZXIuY1wiLFxuICAgIFwibGlua19pdGVyLmNcIixcbiAgICBcImxpdmVuZXNzLmNcIixcbiAgICBcImxvY2FsX3N0b3JhZ2UuY1wiLFxuICAgIFwibG9nLmNcIixcbiAgICBcImxwbV90cmllLmNcIixcbiAgICBcIm1hcF9pbl9tYXAuY1wiLFxuICAgIFwibWFwX2luX21hcC5oXCIsXG4gICAgXCJtYXBfaXRlci5jXCIsXG4gICAgXCJtZW1hbGxvYy5jXCIsXG4gICAgXCJtbWFwX3VubG9ja193b3JrLmhcIixcbiAgICBcIm1wcm9nLmNcIixcbiAgICBcIm5ldF9uYW1lc3BhY2UuY1wiLFxuICAgIFwib2ZmbG9hZC5jXCIsXG4gICAgXCJwZXJjcHVfZnJlZWxpc3QuY1wiLFxuICAgIFwicGVyY3B1X2ZyZWVsaXN0LmhcIixcbiAgICBcInByb2dfaXRlci5jXCIsXG4gICAgXCJxdWV1ZV9zdGFja19tYXBzLmNcIixcbiAgICBcInJhbmdlX3RyZWUuY1wiLFxuICAgIFwicmFuZ2VfdHJlZS5oXCIsXG4gICAgXCJyZWxvX2NvcmUuY1wiLFxuICAgIFwicmV1c2Vwb3J0X2FycmF5LmNcIixcbiAgICBcInJpbmdidWYuY1wiLFxuICAgIFwicnFzcGlubG9jay5jXCIsXG4gICAgXCJycXNwaW5sb2NrLmhcIixcbiAgICBcInN0YWNrbWFwLmNcIixcbiAgICBcInN0cmVhbS5jXCIsXG4gICAgXCJzeXNjYWxsLmNcIixcbiAgICBcInN5c2ZzX2J0Zi5jXCIsXG4gICAgXCJ0YXNrX2l0ZXIuY1wiLFxuICAgIFwidGN4LmNcIixcbiAgICBcInRudW0uY1wiLFxuICAgIFwidG9rZW4uY1wiLFxuICAgIFwidHJhbXBvbGluZS5jXCIsXG4gICAgXCJ2ZXJpZmllci5jXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IFtcbiAgICBcInByZWxvYWRcIlxuICBdXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0Mzo1OC43MjI3MTIxNThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODY0MjgyODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQlBGIFN0cmVhbSBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgQlBGIHN0cmVhbSBmdW5jdGlvbmFsaXR5LiBGaXJzdCB0aGluZ3MgZmlyc3QsIGdvb2QsIGBzdHJlYW0uY2AgaXMgc2l0dGluZyByaWdodCB3aGVyZSBJJ2QgZXhwZWN0IGl0LCB0dWNrZWQgYXdheSBpbiBga2VybmVsL2JwZi9gLiBOb3cgdGhlIHJlYWwgd29yayBiZWdpbnMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBmdW5jdGlvbnMgaGVyZTogYGJwZl9zdHJlYW1fcmVhZGAsIGBicGZfc3RyZWFtX3ZwcmludGtgLCBhbmQgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYC4gVGhvc2UgbmFtZXMgdGhlbXNlbHZlcyBnaXZlIG1lIHNvbWUgY2x1ZXMsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBleGFjdCByb2xlcyBhbmQgaW50ZXJhY3Rpb25zLlxuXG5NeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHZlcmlmeSB0aGF0IHRoaXMgcGFydGljdWxhciBzdHJlYW0gY29kZSBpcyBhY3R1YWxseSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgYnVpbGQuIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGVuYWJsZSBpdC4gSSBkb24ndCB3YW50IHRvIHdhc3RlIHRpbWUgY2hhc2luZyBkb3duIGNvZGUgdGhhdCdzIGJlZW4gY29tcGlsZWQgb3V0LiBLbm93aW5nIHRoZSBjb25maWcgb3B0aW9ucyB3aWxsIGFsc28gaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgdGhpcyBmdW5jdGlvbmFsaXR5IGhhcyB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIGVjb3N5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM2MCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NDowMy41ODY5OTgyNTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU4Mzk3OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RyZWFtXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfQlBGX0pJVCkgKz0gdHJhbXBvbGluZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NDowMy42NDI4NDM1NjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mjg2NTkyMTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgU3RyZWFtIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGNvbXBpbGVkIHdpdGggYENPTkZJR19CUEZfU1lTQ0FMTGAsIHdoaWNoIGlzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBjaGFuZ2VzIGFuZCBzZWUgd2hhdCdzIGJlZW4gbW9kaWZpZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiByZWFjaGFiaWxpdHkgb2YgdGhvc2UgY2hhbmdlcy5cblxuTG9va2luZyBhdCB0aGUgbGlzdCwgd2UgaGF2ZSBhIGZldyBmdW5jdGlvbnMgdGhhdCBzZWVtIHRvIGJlIGtleS4gSSBzZWU6XG5cbiogICBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYCwgYGJwZl9zdHJlYW1fY29uc3VtZV9jYXBhY2l0eWAsIGBicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHlgLCBgYnBmX3N0cmVhbV9wdXNoX3N0cmA6IFRoZXNlIGFyZSBhbGwgc3RhdGljLCBzbyB0aGV5J3JlIGludGVybmFsbHkgc2NvcGVkIHdpdGhpbiB0aGUgQlBGIHN0cmVhbSBpbXBsZW1lbnRhdGlvbi4gVGhpcyBtYWtlcyBtZSBjdXJpb3VzIGFib3V0IGhvdyB0aGVzZSBhcmUgYmVpbmcgdXNlZCwgd2hhdCB0aGUgb3ZlcmFsbCBkZXNpZ24gcGF0dGVybiBpcy5cbiogICBgYnBmX3N0cmVhbV92cHJpbnRrYDogVGhpcyBpcyBpbnRlcmVzdGluZywgaXQncyBhIGtmdW5jLiBUaGUgYF9fYnBmX2tmdW5jYCBwcmVmaXggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgZm9yIEJQRiB1c2UsIGxpa2VseSBmb3IgbG9nZ2luZyBvciBkZWJ1Z2dpbmcgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gVGhlIGBpbnRgIHJldHVybiB0eXBlIGltcGxpZXMgaXQgbWF5IHJldHVybiBzdGF0dXMgaW5mb3JtYXRpb24uXG4qICAgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYDogQW5vdGhlciBgcHJpbnRrYCBmdW5jdGlvbiwgYnV0IGdsb2JhbC4gVGhpcyBtYWtlcyBtZSB3b25kZXIgYWJvdXQgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhpcyBhbmQgdGhlIGtmdW5jIHZlcnNpb24uIEl0IHdvdWxkIGJlIGltcG9ydGFudCB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIHNoYXJlZCBmdW5jdGlvbmFsaXR5IG9yIGhhcyBzcGVjaWZpYyB1c2FnZXMuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogd2hlcmUgaXMgYGJwZl9zdHJlYW1fcmVhZGAgdXNlZD8gRmluZGluZyBpdHMgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIEJQRiBzdHJlYW1zIGFyZSBiZWluZyBjb25zdW1lZCBhbmQgdXRpbGl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDQ6MDkuOTI5NDM4MzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI4MDk2OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3N0cmVhbV9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RyZWFtLmM9MTQ5PXN0YXRpYyBib29sIGJwZl9zdHJlYW1fY29uc3VtZV9lbGVtKHN0cnVjdCBicGZfc3RyZWFtX2VsZW0gKmVsZW0sIGludCAqbGVuKVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0xNTktXFxua2VybmVsL2JwZi9zdHJlYW0uYzoxNjA6c3RhdGljIGludCBicGZfc3RyZWFtX3JlYWQoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgdm9pZCBfX3VzZXIgKmJ1ZiwgaW50IGxlbilcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTE2MS17XFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTIwNj1pbnQgYnBmX3Byb2dfc3RyZWFtX3JlYWQoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBlbnVtIGJwZl9zdHJlYW1faWQgc3RyZWFtX2lkLCB2b2lkIF9fdXNlciAqYnVmLCBpbnQgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0yMTItXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxua2VybmVsL2JwZi9zdHJlYW0uYzoyMTM6XFx0cmV0dXJuIGJwZl9zdHJlYW1fcmVhZChzdHJlYW0sIGJ1ZiwgbGVuKTtcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTIxNC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ0OjA5Ljk4MjI1NzE3NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NzgwMDA1NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYGJwZl9wcm9nX3N0cmVhbV9yZWFkYCBVc2FnZSoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBgYnBmX3Byb2dfc3RyZWFtX3JlYWRgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBpdCdzIHRoZSBnYXRld2F5LCBjYWxsaW5nIGBicGZfc3RyZWFtX3JlYWRgIHVuZGVyIHRoZSBob29kLiBTbywgbXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiAqd2hlcmUqIGlzIGBicGZfcHJvZ19zdHJlYW1fcmVhZGAgaXRzZWxmIGJlaW5nIGNhbGxlZD8gS25vd2luZyBpdHMgZW50cnkgcG9pbnRzIGlzIGNydWNpYWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBjb250ZXh0cyBpbiB3aGljaCB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQuIElzIGl0IGZyb20gdXNlciBzcGFjZSwga2VybmVsIHNwYWNlLCBvciBib3RoPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIEJQRiBwcm9ncmFtIHR5cGVzIHRoYXQgYXJlIHV0aWxpemluZyB0aGlzPyBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGxlcnMgdG8gZ2FpbiBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIGltcGFjdCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBkYXRhIGZsb3cuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MzEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NDoxMi45NjAyNjEwNjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDM4MTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wcm9nX3N0cmVhbV9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RyZWFtLmM9MTYwPXN0YXRpYyBpbnQgYnBmX3N0cmVhbV9yZWFkKHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIHZvaWQgX191c2VyICpidWYsIGludCBsZW4pXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTIwNS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjIwNjppbnQgYnBmX3Byb2dfc3RyZWFtX3JlYWQoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBlbnVtIGJwZl9zdHJlYW1faWQgc3RyZWFtX2lkLCB2b2lkIF9fdXNlciAqYnVmLCBpbnQgbGVuKVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtMjA3LXtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYxMjY9c3RhdGljIGludCBwcm9nX3N0cmVhbV9yZWFkKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjEzOS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MTQwOlxcdHJldCA9IGJwZl9wcm9nX3N0cmVhbV9yZWFkKHByb2csIGF0dHItXFx1MDAzZXByb2dfc3RyZWFtX3JlYWQuc3RyZWFtX2lkLCBidWYsIGxlbik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjE0MS1cXHRicGZfcHJvZ19wdXQocHJvZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ0OjEzLjAxMDMxMjU3NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDk0MDMyNjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBhIEJQRiBTeXN0ZW0gQ2FsbCoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoaXMgYmFjazsgdGhpcyBjYWxsIG9yaWdpbmF0ZXMgZnJvbSBgcHJvZ19zdHJlYW1fcmVhZGAgd2l0aGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIENvbnNpZGVyaW5nIHRoZSBjb250ZXh0LCBpdCdzIHByZXR0eSBzYWZlIHRvIGFzc3VtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gYSBCUEYgc3lzdGVtIGNhbGwgY29tbWFuZC4gTXkgZm9jdXMgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIHN0cmVhbS1yZWxhdGVkIHByaW50IGZ1bmN0aW9ucywgbmFtZWx5IGBicGZfc3RyZWFtX3ZwcmludGtgIGFuZCBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aG9zZSBmdW5jdGlvbnMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoaXMgQlBGIGludGVyYWN0aW9uLiBMZXQncyBkaWcgaW50byB0aG9zZSBhbmQgc2VlIHdoYXQgaW5mb3JtYXRpb24gdGhleSBjYW4gcHJvdmlkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA0MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ0OjE2LjEwNDM0ODc5NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4MDk2ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3N0cmVhbV92cHJpbnRrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jPTQ2Nzk9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jZ3JvdXBfcmVhZF94YXR0ciwgS0ZfUkNVKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2ODAtI2VuZGlmXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY4MTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmVhbV92cHJpbnRrLCBLRl9JTVBMSUNJVF9BUkdTKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2ODItQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJlYW1fcHJpbnRfc3RhY2ssIEtGX0lNUExJQ0lUX0FSR1MpXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTIxNj1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTIyMS0gKi9cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjIyMjpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b2lkICphcmdzLFxcbmtlcm5lbC9icGYvc3RyZWFtLmMtMjIzLVxcdFxcdFxcdFxcdCAgIHUzMiBsZW5fX3N6LCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI0NzY9ZW51bSBzcGVjaWFsX2tmdW5jX3R5cGUge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNTMxLVxcdEtGX2JwZl9zZXNzaW9uX2lzX3JldHVybixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI1MzI6XFx0S0ZfYnBmX3N0cmVhbV92cHJpbnRrLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjUzMy1cXHRLRl9icGZfc3RyZWFtX3ByaW50X3N0YWNrLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyNjExPUJURl9JRChmdW5jLCBicGZfc2Vzc2lvbl9pc19yZXR1cm4pXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNjEyOkJURl9JRChmdW5jLCBicGZfc3RyZWFtX3ZwcmludGspXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNjEzLUJURl9JRChmdW5jLCBicGZfc3RyZWFtX3ByaW50X3N0YWNrKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzMDYxPXN0YXRpYyBib29sIGlzX2JwZl9zdHJlYW1fa2Z1bmModTMyIGJ0Zl9pZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMwNjIte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzA2MzpcXHRyZXR1cm4gYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc3RyZWFtX3ZwcmludGtdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMDY0LVxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zdHJlYW1fcHJpbnRfc3RhY2tdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NDoxNi4xNTYxNjQ0OTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczNDM5NjQyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBCUEYgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIFN0cmVhbSBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuIEknbSB0aGlua2luZyBhYm91dCBgYnBmX3N0cmVhbV92cHJpbnRrYC4gVGhhdCdzIGEga2Z1bmMsIHJpZ2h0PyBBbmQgaXQncyBvbmUgdGhhdCBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5IGZyb20gd2l0aGluIGEgQlBGIHByb2dyYW0uIFRoYXQncyBnb29kIHRvIGtlZXAgaW4gbWluZCwgaGVscGZ1bCBmb3Igc3RyZWFtaW5nIG91dCBvZiBCUEYgcHJvZ3JhbXMuXG5cbk5vdywgbXkgbWluZCB3YW5kZXJzIGEgYml0Li4ud2hhdCBhYm91dCB0aGUgb3RoZXIgb25lPyBJIHdvbmRlciwgd2hhdCdzIHRoaXMgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYD8gRG9lcyB0aGF0IGhhdmUgc2ltaWxhciBjYXBhYmlsaXRpZXM/IEkgc2hvdWxkIGxvb2sgaW50byB0aGlzIG1vcmUsIHNlZSBob3cgaXQgZml0cyBpbiB0byB0aGUgd2lkZXIgcGljdHVyZSBvZiBCUEYgc3RyZWFtIGZ1bmN0aW9uYWxpdHkuIE1heWJlIGl0IGhhcyBzaW1pbGFyIGZlYXR1cmVzLCBvciBvcGVyYXRlcyBpbiBhIGRpZmZlcmVudCB3YXkuIFRoYXQncyBhIGdvb2QgbmV4dCBsaW5lIG9mIGlucXVpcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4OTYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NDoxOS44OTA1NjU1OTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTcwNDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RyZWFtLmM9MzE0PXZvaWQgYnBmX3N0cmVhbV9zdGFnZV9mcmVlKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcylcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzIxLVxcbmtlcm5lbC9icGYvc3RyZWFtLmM6MzIyOmludCBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhzdHJ1Y3QgYnBmX3N0cmVhbV9zdGFnZSAqc3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzIzLXtcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmM9Mzc1PXN0YXRpYyBib29sIGR1bXBfc3RhY2tfY2Iodm9pZCAqY29va2llLCB1NjQgaXAsIHU2NCBzcCwgdTY0IGJwKVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0zODgtXFx0XFx0XFx0Z290byBlbmQ7XFxua2VybmVsL2JwZi9zdHJlYW0uYzozODk6XFx0XFx0Y3R4cC1cXHUwMDNlZXJyID0gYnBmX3N0cmVhbV9zdGFnZV9wcmludGsoY3R4cC1cXHUwMDNlc3MsIFxcXCIlcFNcXFxcbiAgJXMgQCAlczolZFxcXFxuXFxcIixcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTM5MC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgKHZvaWQgKikobG9uZylpcCwgbGluZSwgZmlsZSwgbnVtKTtcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzkzLWVuZDpcXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjM5NDpcXHRjdHhwLVxcdTAwM2VlcnIgPSBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhjdHhwLVxcdTAwM2VzcywgXFxcIiVwU1xcXFxuXFxcIiwgKHZvaWQgKikobG9uZylpcCk7XFxua2VybmVsL2JwZi9zdHJlYW0uYy0zOTUtXFx0cmV0dXJuICFjdHhwLVxcdTAwM2VlcnI7XFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTM5OD1pbnQgYnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcylcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtNDAyLVxcbmtlcm5lbC9icGYvc3RyZWFtLmM6NDAzOlxcdHJldCA9IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHNzLCBcXFwiQ1BVOiAlZCBVSUQ6ICVkIFBJRDogJWQgQ29tbTogJXNcXFxcblxcXCIsXFxua2VybmVsL2JwZi9zdHJlYW0uYy00MDQtXFx0XFx0XFx0XFx0ICAgICAgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwgX19rdWlkX3ZhbChjdXJyZW50X3JlYWxfY3JlZCgpLVxcdTAwM2VldWlkKSxcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtNDA3LVxcdFxcdHJldHVybiByZXQ7XFxua2VybmVsL2JwZi9zdHJlYW0uYzo0MDg6XFx0cmV0ID0gYnBmX3N0cmVhbV9zdGFnZV9wcmludGsoc3MsIFxcXCJDYWxsIHRyYWNlOlxcXFxuXFxcIik7XFxua2VybmVsL2JwZi9zdHJlYW0uYy00MDktXFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtNDEzLVxcdFxcdHJldHVybiBjdHguZXJyO1xcbmtlcm5lbC9icGYvc3RyZWFtLmM6NDE0OlxcdHJldHVybiBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhzcywgXFxcIlxcXFxuXFxcIik7XFxua2VybmVsL2JwZi9zdHJlYW0uYy00MTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NDoxOS45NDI3NDMyNDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0NjA0NzUwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbCBDaGFpbiBvZiBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgKipcblxuQWxyaWdodCwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGUgYGJwZl9zdHJlYW1fc3RhZ2VgIGNvZGUsIGFuZCBJJ3ZlIGhpdCBhIGxpdHRsZSBzbmFnLiBJIHNlZSBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgIGlzIGJlaW5nIGludm9rZWQgYnkgYGJwZl9zdHJlYW1fc3RhZ2VfZHVtcF9zdGFja2AuIFRoYXQncyBub3QgZW50aXJlbHkgdW5leHBlY3RlZCwgZ2l2ZW4gdGhlIG5hbWUuIFRoZSBgcHJpbnRrYCBzdWdnZXN0cyBsb2dnaW5nIG9mIHNvbWUga2luZCwgbGlrZWx5IHJlbGF0ZWQgdG8gc3RhY2sgZHVtcHMsIGFzIHRoZSBzZWNvbmQgZnVuY3Rpb24gbmFtZSBpbmRpY2F0ZXMuIEJ1dCBub3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlICoqY2FsbCBjaGFpbioqOiB3aGVyZSBpcyBgYnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrYCAqaXRzZWxmKiBjYWxsZWQgZnJvbT8gVW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgZmxvdyBpcyBjcnVjaWFsIGZvciBkaWFnbm9zaW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRhdGEgcGF0aCwgYW5kIGhvdyB0aGlzIGxvZ2dpbmcgZnVuY3Rpb24gaXMgYWN0dWFsbHkgaW52b2tlZCB3aXRoaW4gdGhlIEJQRiBzdHJlYW0gcHJvY2Vzc2luZy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgYnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrYCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGUgc3RhY2sgZHVtcCwgYW5kIHRoZXJlZm9yZSwgdGhlIGxvZ2dpbmcgdGhhdCBvY2N1cnMgdmlhIHRoZSBgcHJpbnRrYC4gSSBuZWVkIHRvIGxvb2sgZm9yIGNhbGxzIHRvIGl0IGluIHRoZSBrZXJuZWwgc291cmNlLCBvciBwb3RlbnRpYWxseSBldmVuIGFuYWx5emUgdGhlIEJQRiBwcm9ncmFtcyB0aGF0IGFyZSBpbiB1c2UgaWYgdGhpcyBpc24ndCBpbW1lZGlhdGVseSBvYnZpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzcyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDQ6MjMuODg4Nzk5NzI2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjA4MjQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdHJlYW0uYz0zNzU9c3RhdGljIGJvb2wgZHVtcF9zdGFja19jYih2b2lkICpjb29raWUsIHU2NCBpcCwgdTY0IHNwLCB1NjQgYnApXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTM5Ny1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjM5ODppbnQgYnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcylcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTM5OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ0OjIzLjk0MDg5MzAwMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYzODk1MDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqVHJhY2luZyB0aGUgQ2FsbCBQYXRoIG9mIGBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2tgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGJwZl9zdHJlYW1fc3RhZ2VfZHVtcF9zdGFja2AgaXMgYmVpbmcgaW52b2tlZC4gSXQncyBhIGtleSBmdW5jdGlvbiwgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGNhbGwgc2l0ZXMgaXMgY3J1Y2lhbCBmb3IgdHJhY2luZyBleGVjdXRpb24gZmxvdyBhbmQgZGVidWdnaW5nLiBUaGUgbW9zdCBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2ggaXMgYSBnbG9iYWwgc2VhcmNoLiBMZXQncyBzZWUuLi4gYSBxdWljayBnbG9iYWwgc2VhcmNoIHNob3VsZCB1bmNvdmVyIGFsbCBpbnN0YW5jZXMgb2YgdGhhdCBmdW5jdGlvbiBuYW1lLiBUaGlzIHdpbGwgaW1tZWRpYXRlbHkgc2hvdyBtZSBhbGwgbG9jYXRpb25zIGluIHRoZSBjb2RlYmFzZSB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBpdHMgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIzOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ0OjI3LjQwNDc5MTI3NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzODI2Nzc1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9MzkwMD1pbnQgYnBmX3N0cmVhbV9zdGFnZV9jb21taXQoc3RydWN0IGJwZl9zdHJlYW1fc3RhZ2UgKnNzLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuaW5jbHVkZS9saW51eC9icGYuaC0zOTAxLVxcdFxcdFxcdCAgICBlbnVtIGJwZl9zdHJlYW1faWQgc3RyZWFtX2lkKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM5MDI6aW50IGJwZl9zdHJlYW1fc3RhZ2VfZHVtcF9zdGFjayhzdHJ1Y3QgYnBmX3N0cmVhbV9zdGFnZSAqc3MpO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtMzkwMy1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM5MDQtI2RlZmluZSBicGZfc3RyZWFtX3ByaW50ayhzcywgLi4uKSBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhcXHUwMDI2c3MsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvYnBmLmg6MzkwNTojZGVmaW5lIGJwZl9zdHJlYW1fZHVtcF9zdGFjayhzcykgYnBmX3N0cmVhbV9zdGFnZV9kdW1wX3N0YWNrKFxcdTAwMjZzcylcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM5MDYtXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTM3NT1zdGF0aWMgYm9vbCBkdW1wX3N0YWNrX2NiKHZvaWQgKmNvb2tpZSwgdTY0IGlwLCB1NjQgc3AsIHU2NCBicClcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzk3LVxcbmtlcm5lbC9icGYvc3RyZWFtLmM6Mzk4OmludCBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2soc3RydWN0IGJwZl9zdHJlYW1fc3RhZ2UgKnNzKVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzk5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDQ6MjkuMjQzMDY2ODU1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTM5NzY1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBgYnBmX3N0cmVhbV9kdW1wX3N0YWNrYCoqXG5cblJpZ2h0LCBzbyBJJ20gaW4gdGhlIHRoaWNrIG9mIHRoaXMgYW5kIEkndmUgY29tZSBhY3Jvc3MgdGhpcyBgYnBmX3N0cmVhbV9kdW1wX3N0YWNrYCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgd2hlcmUgaXMgKnRoaXMqIGNhbGxlZCBmcm9tP1wiIEl0J3MgdGhlIHN0YW5kYXJkIGZpcnN0IHF1ZXN0aW9uLCBpc24ndCBpdD8gR290dGEgdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgY2FsbCBncmFwaCwgdG8gZmlndXJlIG91dCB3aHkgdGhpcyB0aGluZyBpcyBldmVuIGJlaW5nIGludm9rZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGhlcmUuIElzIGl0IHBhcnQgb2YgdGhlIGluc3RydW1lbnRhdGlvbiBmb3IgZGVidWdnaW5nPyBJcyBpdCBjb3JlIHRvIHNvbWUgZGF0YSBwcm9jZXNzaW5nIHBhdGg/IElzIGl0IGNhbGxlZCBmcm9tIGEgYGJwZl9pdGVyYCBjb250ZXh0PyBJJ20gZ29pbmcgdG8gbmVlZCB0byB0cmFjayBkb3duIGFsbCB0aGUgcGxhY2VzIHdoZXJlIHRoaXMgdGhpbmcgaXMgdXNlZCB0byBwcm9wZXJseSBncm9rIHRoZSBmdW5jdGlvbiBhbmQgdGhlIGRhdGEgaXQgYWNjZXNzZXMuIFNvLCB3aGVyZeKAmXMgdGhlIGNhbGwgc2l0ZT8gTGV0J3MgZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzc2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDQ6MzMuMTM3MDQ2NDM1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODcwNTIyMTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJlYW1fZHVtcF9zdGFja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0zOTAyPWludCBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2soc3RydWN0IGJwZl9zdHJlYW1fc3RhZ2UgKnNzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzkwNC0jZGVmaW5lIGJwZl9zdHJlYW1fcHJpbnRrKHNzLCAuLi4pIGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKFxcdTAwMjZzcywgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9icGYuaDozOTA1OiNkZWZpbmUgYnBmX3N0cmVhbV9kdW1wX3N0YWNrKHNzKSBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2soXFx1MDAyNnNzKVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzkwNi1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz05MzI9dm9pZCBicGZfcHJvZ19yZXBvcnRfYXJlbmFfdmlvbGF0aW9uKGJvb2wgd3JpdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBmYXVsdF9pcClcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy05NTctXFx0XFx0XFx0XFx0ICB3cml0ZSA/IFxcXCJXUklURVxcXCIgOiBcXFwiUkVBRFxcXCIsIGFkZHIpO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo5NTg6XFx0XFx0YnBmX3N0cmVhbV9kdW1wX3N0YWNrKHNzKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTU5LVxcdH0pKTtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTMyMjE9c3RhdGljIG5vaW5saW5lIHZvaWQgYnBmX3Byb2dfcmVwb3J0X21heV9nb3RvX3Zpb2xhdGlvbih2b2lkKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMzIzMS1cXHRcXHRicGZfc3RyZWFtX3ByaW50ayhzcywgXFxcIkVSUk9SOiBUaW1lb3V0IGRldGVjdGVkIGZvciBtYXlfZ290byBpbnN0cnVjdGlvblxcXFxuXFxcIik7XFxua2VybmVsL2JwZi9jb3JlLmM6MzIzMjpcXHRcXHRicGZfc3RyZWFtX2R1bXBfc3RhY2soc3MpO1xcbmtlcm5lbC9icGYvY29yZS5jLTMyMzMtXFx0fSkpO1xcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM9NjcyPXN0YXRpYyB2b2lkIGJwZl9wcm9nX3JlcG9ydF9ycXNwaW5sb2NrX3Zpb2xhdGlvbihjb25zdCBjaGFyICpzdHIsIHZvaWQgKmxvY2ssIGJvb2wgaXJxc2F2ZSlcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY4Ni1cXHRcXHRcXHRicGZfc3RyZWFtX3ByaW50ayhzcywgXFxcIkhlbGQgbG9ja1slMmRdID0gMHglcHhcXFxcblxcXCIsIGksIHJxaC1cXHUwMDNlbG9ja3NbaV0pO1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjY4NzpcXHRcXHRicGZfc3RyZWFtX2R1bXBfc3RhY2soc3MpO1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY4OC1cXHR9KSk7XFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jPTI2MT1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV9wcmludF9zdGFjayhpbnQgc3RyZWFtX2lkLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI3Mi1cXHRicGZfc3RyZWFtX3N0YWdlKHNzLCBwcm9nLCBzdHJlYW1faWQsICh7XFxua2VybmVsL2JwZi9zdHJlYW0uYzoyNzM6XFx0XFx0YnBmX3N0cmVhbV9kdW1wX3N0YWNrKHNzKTtcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTI3NC1cXHR9KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ0OjM1LjAwNzU3NjY5NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODgzNTkxOTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiBCUEYgU3RyZWFtIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYSBwYXR0ZXJuIGhlcmUgd2l0aCB0aGVzZSBgYnBmX3N0cmVhbWAgZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgaXMgdGhlIGJhY2tib25lLCBiZWluZyBjYWxsZWQgaW5kaXJlY3RseSB0aHJvdWdoIGBicGZfc3RyZWFtX3ByaW50a2Agd2l0aGluIHRoZSBrZXJuZWwgZmlsZXMgYGFyZW5hLmNgLCBgY29yZS5jYCwgYW5kIGBycXNwaW5sb2NrLmNgLiBUaGVuLCB0aGVyZSdzIGBicGZfc3RyZWFtX3ZwcmludGtgLCB3aGljaCwgaW1wb3J0YW50bHksIGlzIGV4cG9zZWQgYXMgYSBrZnVuYywgYSBrZXkgZGV0YWlsIGZvciBCUEYgcHJvZ3JhbSBpbnRlcmFjdGlvbi4gRmluYWxseSwgYGJwZl9zdHJlYW1fcmVhZGAgaXMgY2xlYXJseSB0aWVkIHRvIHRoZSBgQlBGX1BST0dfU1RSRUFNX1JFQURgIGNvbW1hbmQgb2YgdGhlIGBicGZgIHN5c2NhbGwsIHdoaWNoIEkgYXNzdW1lIGhhbmRsZXMgcmVhZGluZyBkYXRhIGZyb20gdGhlIHN0cmVhbS4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gYHByb2dfc3RyZWFtX3JlYWRgIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgcmVhZGluZyB0aGUgc3RyZWFtIGRhdGEgd2lsbCBiZS4gVGhpcyB3aWxsIHNob3cgaG93IHdlIGNvbnRyb2wgdGhlIHVzZSBvZiB0aGUgZGF0YSBpbiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY5MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NDozOS44OTExNzE4MjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzUxMjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2dfc3RyZWFtX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9NjExMj1zdGF0aWMgaW50IHRva2VuX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYxMjMtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjEyNDojZGVmaW5lIEJQRl9QUk9HX1NUUkVBTV9SRUFEX0JZX0ZEX0xBU1RfRklFTEQgcHJvZ19zdHJlYW1fcmVhZC5wcm9nX2ZkXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjEyNS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MTI2OnN0YXRpYyBpbnQgcHJvZ19zdHJlYW1fcmVhZCh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MTI3LXtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MTI4OlxcdGNoYXIgX191c2VyICpidWYgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cXHUwMDNlcHJvZ19zdHJlYW1fcmVhZC5zdHJlYW1fYnVmKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MTI5OlxcdHUzMiBsZW4gPSBhdHRyLVxcdTAwM2Vwcm9nX3N0cmVhbV9yZWFkLnN0cmVhbV9idWZfbGVuO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYxMzAtXFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjEzNS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MTM2OlxcdHByb2cgPSBicGZfcHJvZ19nZXQoYXR0ci1cXHUwMDNlcHJvZ19zdHJlYW1fcmVhZC5wcm9nX2ZkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MTM3LVxcdGlmIChJU19FUlIocHJvZykpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MTM5LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYxNDA6XFx0cmV0ID0gYnBmX3Byb2dfc3RyZWFtX3JlYWQocHJvZywgYXR0ci1cXHUwMDNlcHJvZ19zdHJlYW1fcmVhZC5zdHJlYW1faWQsIGJ1ZiwgbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MTQxLVxcdGJwZl9wcm9nX3B1dChwcm9nKTtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYxODk9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMyNS1cXHRjYXNlIEJQRl9QUk9HX1NUUkVBTV9SRUFEX0JZX0ZEOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzMjY6XFx0XFx0ZXJyID0gcHJvZ19zdHJlYW1fcmVhZChcXHUwMDI2YXR0cik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMyNy1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDQ6MzkuOTQ0OTI4ODE1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NzE0NzYyNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgU3RyZWFtIFN1YnN5c3RlbSBDaGFuZ2VzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBCUEYgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gdGhlIEJQRiBzdHJlYW0gc3Vic3lzdGVtIGFuZCB0aGUgYEJQRl9QUk9HX1NUUkVBTV9SRUFEX0JZX0ZEYCBjb21tYW5kLCB3aGljaCBpcyBhIGJwZiBzeXNjYWxsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCdzIGJlZW4gY2hhbmdlZCwgd2h5LCBhbmQgYXJlIHRoZXNlIGNoYW5nZXMgZnV6emFibGUuXG5cbkZpcnN0LCB0aGVyZSdzIHRoaXMgZml4IHRvIGBicGZfc3RyZWFtX3JlYWRgLiBUaGUgb2xkIGNvZGUgaGFkIGEgYnVnIHdoZXJlIHBhcnRpYWwgYGNvcHlfdG9fdXNlcmAgd3JpdGVzIHdvdWxkIGxlYWQgdG8gYC1FRkFVTFRgIGV2ZW4gaWYgc29tZSBkYXRhIHRyYW5zZmVycmVkLiBUaGUgdXBkYXRlZCBjb2RlIGNvcnJlY3RseSB1cGRhdGVzIGNvbnN1bWVkIGxlbmd0aHMgYW5kIG5vdyAqb25seSogcmV0dXJucyBgLUVGQVVMVGAgaWYgYWJzb2x1dGVseSAqbm8qIGJ5dGVzIHdlcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuIEVzc2VudGlhbGx5LCBpdCBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgc2NlbmFyaW8gd2hlcmUgYSB1c2VyIHNwYWNlIGJ1ZmZlciBpc24ndCBsYXJnZSBlbm91Z2guIFRoYXQgY2hhbmdlIGludm9sdmVzIHVwZGF0aW5nIGBlbGVtLVx1MDAzZWNvbnN1bWVkX2xlbmAgYW5kIGByZW1fbGVuYCBkdXJpbmcgdGhlIGNvcHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNvcnJlY3RuZXNzIGltcHJvdmVtZW50LlxuXG5OZXh0LCBJIHNlZSBjaGFuZ2VzIHRvIGBicGZfc3RyZWFtX3ZwcmludGtgLiBUaGUga2V5IGhlcmUgaXMgcHJldmVudGluZyB0cnVuY2F0aW9uLiBQcmV2aW91c2x5LCBgYnN0cl9wcmludGZgIGNvdWxkIHdyaXRlIGEgc3RyaW5nIHRoYXQgZXhjZWVkZWQgYSBtYXhpbXVtIGJ1ZmZlciBzaXplLiBOb3csIHRoZSBjb2RlIHJldHVybnMgYC1FMkJJR2AgKHNpbWlsYXIgdG8gd2hhdCB5b3UnZCBzZWUgaW4gYHNucHJpbnRmYCBvciBgdnNucHJpbnRmYCkgaWYgdGhlIGZvcm1hdHRlZCBzdHJpbmcgd291bGQgYmUgdHJ1bmNhdGVkLCAqYmVmb3JlKiBhdHRlbXB0aW5nIHRvIHB1c2ggdGhlIHJlc3VsdC4gVGhpcyBwcmV2ZW50cyBwdXNoaW5nIGNvcnJ1cHRlZCBvciBwYXJ0aWFsIHN0cmluZ3MgaW50byB0aGUgc3RyZWFtLCBhbmQgaXQgdXNlcyBhIHN0YW5kYXJkIGVycm9yIGNvZGUgdG8gaW5kaWNhdGUgdGhhdCB0cnVuY2F0aW9uIG9jY3VycmVkLlxuXG5UaGUgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCBjaGFuZ2VzIGFyZSBhIGJpdCBzdWJ0bGVyLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgYHZzbnByaW50ZmAsIHdoaWNoIHJldHVybnMgdGhlICpsZW5ndGgqIG9mIHRoZSBzdHJpbmcgdGhhdCAqd291bGQqIGhhdmUgYmVlbiB3cml0dGVuIGlmIHRoZXJlIGhhZCBiZWVuIGVub3VnaCBzcGFjZSwgcmF0aGVyIHRoYW4gdGhlIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4gVGhpcyB3YXMgY2F1c2luZyBhbiBpbmNvcnJlY3QgbGVuZ3RoIGNhbGN1bGF0aW9uLiBUaGUgZml4IHVzZXMgYHZzY25wcmludGZgLCB3aGljaCByZXR1cm5zIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4sIGFuZCBvbmx5IHVwZGF0ZXMgdGhlIHN0cmVhbSBsZW5ndGggYHNzLVx1MDAzZWxlbmAgaWYgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgc3VjY2VlZHMuIFRoaXMgbGVhZHMgdG8gbW9yZSBhY2N1cmF0ZSBhY2NvdW50aW5nIG9mIGRhdGEgaW4gdGhlIHN0cmVhbS5cblxuVGhlbiwgdGhlcmUncyB0aGUgY2hhbmdlIHRvIGBicGZfc3RyZWFtX3B1c2hfc3RyYC4gVGhpcyBvbmUgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGNhcGFjaXR5IGxlYWsuIElmIGBfX2JwZl9zdHJlYW1fcHVzaF9zdHJgICh3aGljaCBpcyB0aGUgYWN0dWFsIGxvdyBsZXZlbCBwdXNoIHRvIHRoZSBzdHJlYW0pIGZhaWxzIOKAkyBmb3IgZXhhbXBsZSwgZHVlIHRvIGFuIG91dC1vZi1tZW1vcnkgZXJyb3Ig4oCTIHRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIGNvbnN1bWUgY2FwYWNpdHkuIFRoZSB1cGRhdGVkIGNvZGUgd2lsbCByZWxlYXNlIHRoZSBjYXBhY2l0eSBpZiB0aGUgbG93LWxldmVsIHB1c2ggZmFpbHMuIFRoaXMgcHJldmVudHMgdGhlIHN0cmVhbSBmcm9tIHJlcG9ydGluZyBhdmFpbGFibGUgY2FwYWNpdHkgdGhhdCBkb2Vzbid0IGFjdHVhbGx5IGV4aXN0IGFuZCwgaWYgdGhlIHByb2dyYW0gaXMgY2FyZWZ1bGx5IHdyaXR0ZW4sIG1pZ2h0IHByZXZlbnQgYW4gb3V0LW9mLW1lbW9yeSBjb25kaXRpb24uXG5cbkZpbmFsbHksIGBicGZfc3RyZWFtX2VsZW1fYWxsb2NgIGhhcyBhbiBvZmYtYnktb25lIGVycm9yIGZpeC4gVGhlIGNvZGUgcHJldmlvdXNseSBhbGxvd2VkIGFuIGVsZW1lbnQgbGVuZ3RoIHRoYXQgY291bGQgYmUgZXF1YWwgdG8gdGhlIG1heCBsZW5ndGgsIHdoaWNoIGNvdWxkIGhhdmUgYmVlbiBhIGJ1ZmZlciBvdmVyZmxvdy4gVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuXG5cbkFsbCB0aGVzZSBjaGFuZ2VzIGFyZSBlc3NlbnRpYWxseSBjb3JyZWN0bmVzcyBpbXByb3ZlbWVudHMuIEFuZCBJIGtub3cgdGhlIEJQRiBzdWJzeXN0ZW0gaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgc3lzY2FsbHMgYW5kIEJQRiBwcm9ncmFtcyB0aGVtc2VsdmVzLCB3aGljaCBtZWFucyBJIGNhbiByZWFjaCBpdCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBTbywgeWVzLCB0aGVzZSBmaXhlcyBhcmUgd29ydGggZnV6emluZy5cblxuTXkgcHJpbWFyeSB0YXJnZXRzIGFyZSB0aGUgZnVuY3Rpb25zIG1vZGlmaWVkOiBgYnBmX3N0cmVhbV9yZWFkYCwgd2hpY2ggaXMgY2FsbGVkIHRocm91Z2ggdGhlIHN5c2NhbGwgYF9fc3lzX2JwZmAsIGBicGZfc3RyZWFtX3ZwcmludGtgLCBhbmQgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYC4gSSBuZWVkIHRvIHJlbWVtYmVyIGBicGZfc3RyZWFtX3JlYWRgIGlzIGNhbGxlZCB0aHJvdWdoIGBicGZfcHJvZ19zdHJlYW1fcmVhZGAgZnVuY3Rpb24uIEkgd2lsbCBuZWVkIHRvIGNoZWNrIGhvdyB0byByZWFjaCBgYnBmX3N0cmVhbV92cHJpbnRrYCBhbmQgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCBmcm9tIEJQRiBwcm9ncmFtcyB0aGF0IEkgbWF5IHdyaXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYyNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDQ6NTYuNjU5Njk1MDc1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzUwNzgxMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3Byb2dfc3RyZWFtX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdHJlYW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0cmVhbS5jPTE2MD1zdGF0aWMgaW50IGJwZl9zdHJlYW1fcmVhZChzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCB2b2lkIF9fdXNlciAqYnVmLCBpbnQgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0yMDUtXFxua2VybmVsL2JwZi9zdHJlYW0uYzoyMDY6aW50IGJwZl9wcm9nX3N0cmVhbV9yZWFkKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgZW51bSBicGZfc3RyZWFtX2lkIHN0cmVhbV9pZCwgdm9pZCBfX3VzZXIgKmJ1ZiwgaW50IGxlbilcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTIwNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ0OjU3LjAzNDc4MTQ0N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTgzMTk5OTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEknbSBkZWFsaW5nIHdpdGggdGhlc2UgQlBGIGZ1bmN0aW9uczogYGJwZl9wcm9nX3N0cmVhbV9yZWFkYCwgYGJwZl9zdHJlYW1fdnByaW50a2AsIGFuZCBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgLiBSaWdodCwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBlc3RhYmxpc2ggdGhhdCBgYnBmX3Byb2dfc3RyZWFtX3JlYWRgIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uOyBubyBzdXJwcmlzZXMgdGhlcmUuIEFuZCwgc2luY2UgYGJwZl9zdHJlYW1fdnByaW50a2AgaXMgYSBrZnVuYywgdGhhdCBhbHNvIG1lYW5zIGl0J3MgZ2xvYmFsbHkgYXZhaWxhYmxlLiBGaW5hbGx5LCBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgIGlzIGFsc28gYSBnbG9iYWwgZnVuY3Rpb24uIE5vdywgbGV0J3MgZGl2ZSBpbnRvIGNvbmZpZ3VyYXRpb25zLiBJdCdzIHRpbWUgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IG11c3QgYmUgZW5hYmxlZC4gSSBrbm93IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGFuIGFic29sdXRlIG5lY2Vzc2l0eS4gSG93ZXZlciwgSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3Qgb3RoZXIgaGlkZGVuIGRlcGVuZGVuY2llcy4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gY2hlY2sgYGtlcm5lbC9icGYvTWFrZWZpbGVgIGFnYWluLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBpZGVudGlmeSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTEyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ1OjAxLjAxNzk4NzI2OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyODgzMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RyZWFtXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfQlBGX0pJVCkgKz0gdHJhbXBvbGluZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NTowMS4wNjYyODM0MjNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0ODkwNTYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkJQRiBTeXN0ZW0gQ2FsbCBDb25maWd1cmF0aW9uIGFuZCBgYnBmX3N0cmVhbV92cHJpbnRrYCBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIGNydWNpYWwgc2V0dGluZyBoZXJlLCB0aGUgY29yZSBlbmFibGVyIGZvciBCUEYgc3lzdGVtIGNhbGwgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0J3MgY29ycmVjdGx5IGNvbmZpZ3VyZWQgYW5kIGZ1bmN0aW9uaW5nIGFzIGV4cGVjdGVkIGJlZm9yZSBkaXZpbmcgZGVlcGVyLlxuXG5Ob3csIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgYnBmX3N0cmVhbV92cHJpbnRrYC4gSSdtIGN1cmlvdXMgaWYgaXQgaGFzIGFueSBhZGRpdGlvbmFsIGRlcGVuZGVuY2llcyBvciBwcmVyZXF1aXNpdGVzIGJleW9uZCB0aGUgb2J2aW91cyBCUEYgc3lzdGVtIGNhbGwgZW5hYmxlbWVudC4gVGhlcmUgY291bGQgYmUgc3VidGxlIGxpbmthZ2VzIHRvIG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIHN1YnN5c3RlbXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkgbmVlZCB0byBlbnN1cmUgYSBob2xpc3RpYyB1bmRlcnN0YW5kaW5nIG9mIGFsbCBjb250cmlidXRpbmcgZmFjdG9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNjQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NTowNC4yMTUxOTQzOFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM4MTUwNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3N0cmVhbV92cHJpbnRrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3RyZWFtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdHJlYW0uYz0yMTY9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0yMjEtICovXFxua2VybmVsL2JwZi9zdHJlYW0uYzoyMjI6X19icGZfa2Z1bmMgaW50IGJwZl9zdHJlYW1fdnByaW50ayhpbnQgc3RyZWFtX2lkLCBjb25zdCBjaGFyICpmbXRfX3N0ciwgY29uc3Qgdm9pZCAqYXJncyxcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTIyMy1cXHRcXHRcXHRcXHQgICB1MzIgbGVuX19zeiwgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NTowNC4yNjkwMjA0MTVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwNTYyNTY3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgZm9yIE5lY2Vzc2FyeSBVcGRhdGVzKipcblxuQWxyaWdodCwgbm8gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZ29pbmcgb24gYXJvdW5kIHRoaXMgb25lLCB3aGljaCBpcyBnb29kLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLiBOb3csIEknbSB0aGlua2luZywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AuIEkgbmVlZCB0byBlbnN1cmUgaXQncyBzdGlsbCBvcGVyYXRpbmcgY29ycmVjdGx5IHdpdGhpbiB0aGUgY3VycmVudCBkZXNpZ24gYW5kIHRoYXQgSSBoYXZlbid0IG92ZXJsb29rZWQgYW55IG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgb3IgaW50ZXJhY3Rpb25zLiBJcyB0aGVyZSBzb21ldGhpbmcgZWxzZSB0aGlzIGZ1bmN0aW9uIG5vdyBuZWVkcyB0byB3b3JrIHdpdGgsIGdpdmVuIHRoZSByZWNlbnQgY2hhbmdlcz8gSSBzaG91bGQgY2FyZWZ1bGx5IGV4YW1pbmUgaXRzIGltcGxlbWVudGF0aW9uIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGRhdGEgZmxvdy4gTGV0J3MgbWFrZSBzdXJlIGl0J3MgZG9pbmcgZXZlcnl0aGluZyBpdCdzIHN1cHBvc2VkIHRvIGJlIGRvaW5nIGFuZCB0aGF0IHRoZSBpbnRlZ3JhdGlvbiBpcyBjbGVhbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3MjksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NTowNy4zNzQ2NDkzNTVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzA1NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3RyZWFtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdHJlYW0uYz0zMTQ9dm9pZCBicGZfc3RyZWFtX3N0YWdlX2ZyZWUoc3RydWN0IGJwZl9zdHJlYW1fc3RhZ2UgKnNzKVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0zMjEtXFxua2VybmVsL2JwZi9zdHJlYW0uYzozMjI6aW50IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXFxua2VybmVsL2JwZi9zdHJlYW0uYy0zMjMte1xcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYz0zNzU9c3RhdGljIGJvb2wgZHVtcF9zdGFja19jYih2b2lkICpjb29raWUsIHU2NCBpcCwgdTY0IHNwLCB1NjQgYnApXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTM4OC1cXHRcXHRcXHRnb3RvIGVuZDtcXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjM4OTpcXHRcXHRjdHhwLVxcdTAwM2VlcnIgPSBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhjdHhwLVxcdTAwM2VzcywgXFxcIiVwU1xcXFxuICAlcyBAICVzOiVkXFxcXG5cXFwiLFxcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzkwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAodm9pZCAqKShsb25nKWlwLCBsaW5lLCBmaWxlLCBudW0pO1xcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0zOTMtZW5kOlxcbmtlcm5lbC9icGYvc3RyZWFtLmM6Mzk0OlxcdGN0eHAtXFx1MDAzZWVyciA9IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKGN0eHAtXFx1MDAzZXNzLCBcXFwiJXBTXFxcXG5cXFwiLCAodm9pZCAqKShsb25nKWlwKTtcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTM5NS1cXHRyZXR1cm4gIWN0eHAtXFx1MDAzZWVycjtcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmM9Mzk4PWludCBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2soc3RydWN0IGJwZl9zdHJlYW1fc3RhZ2UgKnNzKVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy00MDItXFxua2VybmVsL2JwZi9zdHJlYW0uYzo0MDM6XFx0cmV0ID0gYnBmX3N0cmVhbV9zdGFnZV9wcmludGsoc3MsIFxcXCJDUFU6ICVkIFVJRDogJWQgUElEOiAlZCBDb21tOiAlc1xcXFxuXFxcIixcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTQwNC1cXHRcXHRcXHRcXHQgICAgICByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2t1aWRfdmFsKGN1cnJlbnRfcmVhbF9jcmVkKCktXFx1MDAzZWV1aWQpLFxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy00MDctXFx0XFx0cmV0dXJuIHJldDtcXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjQwODpcXHRyZXQgPSBicGZfc3RyZWFtX3N0YWdlX3ByaW50ayhzcywgXFxcIkNhbGwgdHJhY2U6XFxcXG5cXFwiKTtcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTQwOS1cXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy00MTMtXFx0XFx0cmV0dXJuIGN0eC5lcnI7XFxua2VybmVsL2JwZi9zdHJlYW0uYzo0MTQ6XFx0cmV0dXJuIGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHNzLCBcXFwiXFxcXG5cXFwiKTtcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTQxNS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ1OjA3LjQyMTk2MDc0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MDI3NjY2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQlBGIFN0cmVhbSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRoZXJlIGFyZW4ndCBhbnkgc3BlY2lhbCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBzdXJyb3VuZGluZyB0aGVzZSBmdW5jdGlvbnMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGF0IG1lYW5zIHRoZXkgYXJlIGFsd2F5cyBpbmNsdWRlZC4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgaW1wb3J0YW50IHN5bWJvbHMgZm9yIHRoaXMuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6IGBicGZfcHJvZ19zdHJlYW1fcmVhZGAsIGBicGZfc3RyZWFtX3ZwcmludGtgLCBhbmQgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYC5cblxuV2FpdCBhIG1pbnV0ZSwgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCBpcyBjYWxsZWQgaW5kaXJlY3RseSB0aHJvdWdoIGBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2tgLiBJIHNlZSB0aGF0IGBicGZfc3RyZWFtX3N0YWdlX2R1bXBfc3RhY2tgIGlzIGNhbGxlZCBieSBgYnBmX3Byb2dfcmVwb3J0X2FyZW5hX3Zpb2xhdGlvbmAsIGBicGZfcHJvZ19yZXBvcnRfbWF5X2dvdG9fdmlvbGF0aW9uYCwgYW5kIGBicGZfcHJvZ19yZXBvcnRfcnFzcGlubG9ja192aW9sYXRpb25gLiBTbywgKmNhbiogYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCBiZSBkaXJlY3RseSBjYWxsZWQgZnJvbSBCUEY/IE5vLCBpdCdzIGFuIGludGVybmFsIGtlcm5lbCBmdW5jdGlvbi4gSXQgZm9ybWF0cyBzdHJpbmdzIGludG8gdGhlIHN0cmVhbSwgYnV0IGl0J3MgKmdsb2JhbCogYW5kIGl0J3MgYmVpbmcgbW9kaWZpZWQuIEl0J3MgYSBrZXkgZnVuY3Rpb24gaW4gdGhpcyBjb250ZXh0LCBzbyBpdCBpcyBhIGdvb2QgdGFyZ2V0LlxuXG5Ob3csIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBvYnZpb3VzIG9uZSwgYnV0IGFyZSB0aGVyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQmVzdCB0byBiZSB0aG9yb3VnaCwgSSdsbCBnbyBiYWNrIHRvIGBpbml0L0tjb25maWdgIGFuZCBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgQlBGX1NZU0NBTExgIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTg0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ1OjE0LjIyNDczMDM2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQyNzkwNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDU6MTQuMjc0MTY2OTE1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3Njk1MzcyMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnRlcm5hbCBDb2RlIERpdmU6IEh1bnRpbmcgZm9yIGBCUEZfU1lTQ0FMTGAqKlxuXG5BbHJpZ2h0LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gZGVlcCBpbnRvIHRoaXMgY29kZSwgYnV0IHNvbWV0aGluZydzIG5hZ2dpbmcgYXQgbWUuIEkndmUgZW5jb3VudGVyZWQgYEJQRl9TWVNDQUxMYCwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzLCBcIldoZXJlIGV4YWN0bHkgKmlzKiB0aGF0IGRlZmluZWQ/XCIgVGhpcyBpc24ndCBqdXN0IGEgY2FzdWFsIHVzYWdlOyBpdCdzIGZ1bmRhbWVudGFsIHRvIHRoaXMgcGFydGljdWxhciBiaXQgb2Yga2VybmVsLWxldmVsIG1hZ2ljIEknbSBhbmFseXppbmcuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIG9yaWdpbiDigJMgdGhlIGluY2x1ZGUgZmlsZSwgdGhlIHNwZWNpZmljIG1hY3JvIGRlZmluaXRpb24uIEkgbmVlZCB0byBiZSAqcHJlY2lzZSouIElzIGl0IGEgY29yZSBCUEYgaGVhZGVyPyBJcyBpdCBidXJpZWQgaW4gc29tZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZGVmaW5pdGlvbj8gSXMgaXQgZXZlbiBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBCUEYgbGlicmFyeSwgb3IgaXMgdGhpcyBzb21lIGN1c3RvbSBhZGFwdGF0aW9uPyBJIGtub3cgSSBuZWVkIHRvIHRyYWNrIHRoaXMgZG93biB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgd2l0aGluIHRoaXMgY29kZSBwYXRoLiBUaW1lIHRvIGdvIGh1bnRpbmchIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMDAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NToxOC4wNDM3MDY4ODZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODg0NjQ5NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ1OjE5LjczMjE3OTYzMloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjI5Njg2NjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGNvbmZpZ3VyYXRpb24gaXMgc3RydWN0dXJlZC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAyNy4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBwcm9iYWJseSBkZWZpbmVkIHNvbWV3aGVyZSBpbiB0aGF0IGFyZWEuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZm91bmRhdGlvbmFsIHNldHRpbmdzIHJlbGF0ZWQgdG8gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIEJQRiBmdW5jdGlvbmFsaXR5LCBtYXliZSBzb21lIG9mIHRoZSBjb3JlIGZlYXR1cmUgdG9nZ2xlcywgb3IgcGVyaGFwcyB0aGUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHdoYXQncyAqY29uZmlndXJhYmxlKiBhbmQgaG93IHRoYXQgY29uZmlndXJhYmlsaXR5IGlzIHByZXNlbnRlZC4gTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzUzNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ1OjIyLjk2MTg2ODY4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NToyMi45NjE5MzM4MloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDc4MDgyMzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBTdHJlYW0gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYEJQRl9TWVNDQUxMYCBpcyB0aGUgb25seSBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGgsIHRoYXQgc2ltcGxpZmllcyB0aGluZ3MgY29uc2lkZXJhYmx5LiBOb3csIGxldCBtZSBqdXN0IHJ1biB0aHJvdWdoIHRoZXNlIGNoYW5nZXMgb25lIG1vcmUgdGltZSB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGRpZG4ndCBnbG9zcyBvdmVyIGFueSBjcnVjaWFsIHN5bWJvbHMsIHlvdSBrbm93IGhvdyB0aGVzZSB0aGluZ3MgY2FuIGJlLlxuXG5BbHJpZ2h0LCBoZXJlJ3Mgd2hhdCB3ZSd2ZSBnb3Q6IGBicGZfc3RyZWFtX2VsZW1fYWxsb2NgLCBgYnBmX3N0cmVhbV9jb25zdW1lX2NhcGFjaXR5YCwgYGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eWAsIGBicGZfc3RyZWFtX3B1c2hfc3RyYCwgYW5kIGBicGZfc3RyZWFtX3JlYWRgIGFyZSB0aGUgc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBhZGp1c3RlZC4gVGhlbiB3ZSBoYXZlIGBicGZfc3RyZWFtX3ZwcmludGtgLCB3aGljaCBpcyBhIGtmdW5jLCBhbmQgdGhlIGdsb2JhbCBmdW5jdGlvbiBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgLlxuXG5Mb29raW5nIGF0IHRoZSBnbG9iYWwgZnVuY3Rpb25zLCBvciB0aG9zZSB0aGF0IGRpcmVjdGx5IGludGVyYWN0IHdpdGggdGhvc2Ugc3RhdGljYWxseSBtb2RpZmllZCBmdW5jdGlvbnMsIHRoZSBrZXkgb25lcyBzZWVtIHRvIGJlOiBgYnBmX3Byb2dfc3RyZWFtX3JlYWRgIOKAkyB0aGF0IGNhbGxzIGBicGZfc3RyZWFtX3JlYWRgIOKAkyBhbmQgYGJwZl9zdHJlYW1fdnByaW50a2Ag4oCTIHRoYXQgY2FsbHMgYGJwZl9zdHJlYW1fcHVzaF9zdHJgIOKAkyBhcyB3ZWxsIGFzIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2Agd2hpY2ggY2FsbHMgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAuXG5cbldhaXQgYSBtaW51dGUsIGBicGZfc3RyZWFtX3B1c2hfc3RyYCBpcyBjYWxsZWQgYnkgYm90aCBgYnBmX3N0cmVhbV92cHJpbnRrYCBhbmQuLi5oYW5nIG9uLi4uYGJwZl9zdHJlYW1fcHJpbnRfc3RhY2tgPyBMZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGJwZl9zdHJlYW1fcHJpbnRfc3RhY2tgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgY2FsbCBjaGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NToyOS4wNDAwMTkwNjVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NzA0NDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJlYW1fcHJpbnRfc3RhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdHJlYW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0cmVhbS5jPTIyMj1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b2lkICphcmdzLFxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy0yNjAtLyogRGlyZWN0bHkgdHJpZ2dlciBhIHN0YWNrIGR1bXAgZnJvbSB0aGUgcHJvZ3JhbS4gKi9cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjI2MTpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV9wcmludF9zdGFjayhpbnQgc3RyZWFtX2lkLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXFxua2VybmVsL2JwZi9zdHJlYW0uYy0yNjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NToyOS4wODk3NDIzMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTk0MjM2MTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQlBGIFN0cmVhbSBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgQlBGIHN0cmVhbSBjb2RlLCBhbmQgaGVyZSdzIHdoYXQgSSdtIHNlZWluZy4gYGJwZl9zdHJlYW1fcHJpbnRfc3RhY2tgIHVsdGltYXRlbHkgcmVsaWVzIG9uIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgdGhyb3VnaCBhIGNoYWluIG9mIGNhbGxzLiBUaGF0IG1ha2VzIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgYSBwcmV0dHkgY3JpdGljYWwgc3ltYm9sIHRvIHN0YXJ0IHdpdGguIEdpdmVuIG15IGV4cGVydGlzZSwgSSdtIHRoaW5raW5nIEkgY2FuIGV4dHJhcG9sYXRlIGZyb20gdGhhdC5cblxuTGV0IG1lIHNlZSB3aGF0IGVsc2UgaXMgaGFwcGVuaW5nIGluIHRoaXMgc3BoZXJlLiBJIHNlZSBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYCBpcyBjYWxsZWQgYnkgYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAsIHdoaWNoLCBpbiB0dXJuLCBpcyB1c2VkIGJ5IGJvdGggYGJwZl9zdHJlYW1fcHVzaF9zdHJgICphbmQqIHRoZSBwcmV2aW91c2x5IGlkZW50aWZpZWQgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYC4gRnVydGhlciBhbmFseXNpcyBzaG93cyBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgaXMgdXNlZCBieSBgYnBmX3N0cmVhbV92cHJpbnRrYC5cblxuQWxyaWdodCwgSSd2ZSBnb3QgYSBjbGVhcmVyIHBpY3R1cmUgbm93LiBJdCBsb29rcyBsaWtlIHRoZSBrZXkgc3ltYm9scyBoZXJlIGFyZTpcblxuKiAgIGBicGZfcHJvZ19zdHJlYW1fcmVhZGBcbiogICBgYnBmX3N0cmVhbV92cHJpbnRrYFxuKiAgIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2BcblxuSSBzaG91bGQgbm93IHF1aWNrbHkgY2hlY2sgaWYgYGJwZl9wcm9nX3N0cmVhbV9yZWFkYCBpcyBleHBvcnRlZCwgb3IganVzdCBnbG9iYWwuIFRoZSBpbXBsaWNhdGlvbnMgYXJlIGRpZmZlcmVudCBmb3IgZWFjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4MTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDU6MzUuNjgzOTgyNTIxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjI1MTE4NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYnBmX3Byb2dfc3RyZWFtX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ1OjM1LjczNjI0MzUyNloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQ3MDgzOTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIFN5bWJvbCBWaXNpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCBgYnBmX3N0cmVhbV92cHJpbnRrYC4gSSBrbm93IGl0J3Mgbm90IGV4cGxpY2l0bHkgKmV4cG9ydGVkKiBwZXIgc2UsIGJ1dCBpdCdzIGRlZmluZWQgZ2xvYmFsbHkgd2l0aGluIGBrZXJuZWwvYnBmL3N0cmVhbS5jYCBhbmQgaXMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBUaGF0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBGb3IgdGhlIGBGb2N1c1N5bWJvbHNgIHByb2plY3QsIHRoaXMgaW1wbGljaXQgbGlua2FnZSBzaG91bGQgYmUgcGVyZmVjdGx5IGFjY2VwdGFibGUuIE5vdywgSSBqdXN0IG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGBicGZfc3RyZWFtX3ZwcmludGtgIHN5bWJvbCBoYXMgYW4gYEVYUE9SVGAgbWFjcm8gYXBwbGllZCB0byBpdCBzb21ld2hlcmUuIEknbGwgY2hlY2sgdGhhdCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzcxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDU6MzkuNzgzMzMwNzNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjkyNDE0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipicGZfc3RyZWFtX3ZwcmludGtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ1OjM5LjgzNjAzMzM1NFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQzMTUzODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIEZ1bmN0aW9uIEluc3BlY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aGlzIGlzIGEga2Z1bmMsIHdoaWNoIG1lYW5zIGl0J3MgcmVnaXN0ZXJlZCB0aHJvdWdoIHRoZSBCVEYgKEJQRiBUeXBlIEZvcm1hdCkgaW5mcmFzdHJ1Y3R1cmUuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IG5leHQgbW92ZSBpcyB0byB2ZXJpZnkgaXRzIGF2YWlsYWJpbGl0eS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBjYW4gdXNlIHRoaXMga2Z1bmMgaW4gdGhlIEJQRiBwcm9ncmFtIEkgYW0gd29ya2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2MTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NTo0Mi44NzkxODk2NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIyNDA0NTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NTo0Mi45MzE0Mzc1NzVaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM2Nzk5Mzc3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQW5hbHl6aW5nIGFuZCBQcmlvcml0aXppbmcgQ29kZSBDaGFuZ2VzKipcblxuQWxyaWdodCwgc28gdGhpcyBpc24ndCBhbiBleHBvcnRlZCBmdW5jdGlvbiwgYnV0IGl0J3MgY2xlYXJseSBkZWZpbmVkIGFzIGEgZ2xvYmFsIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gQnV0IG1vcmUgaW1wb3J0YW50bHksIHRoZSBjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIG1hZGUgaGVyZSBhcmUgKipkZWZpbml0ZWx5Kiogd29ydGggc2lua2luZyBteSB0ZWV0aCBpbnRvIHdpdGggZnV6emluZy4gVGhpcyBpcyBjbGFzc2ljLCByaWdodD8gVGhlIGlzc3VlcyBsaXN0ZWQgaW1tZWRpYXRlbHkganVtcCBvdXQ6IHRoZXNlIGFyZSBhbGwgY3JpdGljYWwgYnVncyBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBCUEYgc3RyZWFtIHN1YnN5c3RlbS4gSSBzZWUgYSBwYXR0ZXJuIGhlcmU6XG5cbiogICBGaXJzdCwgd2UgaGF2ZSBhbiBPZmYtYnktb25lIGluIGxlbmd0aCBjaGVjayBpbiBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYC4gVGhhdCdzIGEgY2xhc3NpYyBtZW1vcnkgaXNzdWUsIGFuZCBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gc2VlIHRoZSBkZXRhaWxzIHRvIGVuc3VyZSB3ZSBkaWRuJ3Qgb3BlbiBhIHdpZGVyIHZ1bG5lcmFiaWxpdHkuXG5cbiogICBUaGVuLCB3ZSd2ZSBnb3QgYSBjYXBhY2l0eSBsZWFrIGluIGBicGZfc3RyZWFtX3B1c2hfc3RyYCwgd2hpY2ggY291bGQgbGVhZCB0byByZXNvdXJjZSBleGhhdXN0aW9uIGlmIG5vdCBtYW5hZ2VkIGNvcnJlY3RseS4gQW5vdGhlciBmdXp6aW5nIHRhcmdldCB0byB1bmNvdmVyIHBvdGVudGlhbCBEb1MgdnVsbmVyYWJpbGl0aWVzLlxuXG4qICAgSW5jb3JyZWN0IGhhbmRsaW5nIG9mIHBhcnRpYWwgcmVhZHMgaW4gYGJwZl9zdHJlYW1fcmVhZGAsIG9rYXksIHRoYXQncyBhbG1vc3QgYWx3YXlzIGEgc291cmNlIG9mIHdlaXJkbmVzcy4gVGhpcyBpcyB0aGUga2luZCBvZiBidWcgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cywgYnV0IGl0IGhhcyB0aGUgcG90ZW50aWFsIHRvIGNhdXNlIGlzc3VlcyB3aXRoIGRhdGEgaW50ZWdyaXR5IG9yIGV2ZW4gY3JlYXRlIHVuZXhwZWN0ZWQgY29udHJvbCBmbG93LlxuXG4qICAgQW5kIG9mIGNvdXJzZSwgd2UncmUgbWlzc2luZyBhIHRydW5jYXRpb24gY2hlY2sgaW4gYGJwZl9zdHJlYW1fdnByaW50a2AuIEEgY29tbW9uIHZ1bG5lcmFiaWxpdHkgZm9yIGJ1ZmZlciBvdmVyZmxvd3MsIGJ1dCBsZXQncyBzZWUgaG93IHRoZXkgaGFuZGxlZCB0aGUgZml4LlxuXG4qICAgRmluYWxseSwgaW5jb3JyZWN0IGxlbmd0aCBjYWxjdWxhdGlvbiBpbiBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgIGNvdWxkIGxlYWQgdG8gYnVmZmVyIG92ZXJmbG93cyBvciBkYXRhIGNvcnJ1cHRpb24sIGFzIHdlbGwuXG5cbkkgc2VlIHRoZSBjb21tb24gdGhyZWFkIGhlcmU6IG1lbW9yeSBtYW5hZ2VtZW50LCBib3VuZHMgY2hlY2tzLCBhbmQgZGF0YSBpbnRlZ3JpdHkuIFRoaXMgc2VlbXMgbGlrZSBhIGp1aWN5IHNldCBvZiB0YXJnZXRzIGZvciBmdXp6aW5nLiBJJ2xsIGdldCB0aGUgcmVzdWx0cyBzZXQgdXAgYXMgc29vbiBhcyBJIGNhbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4MTksIk91dHB1dFRva2VucyI6MTUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ1OjQ5LjI5OTQzNTVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDc3NzQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19zdHJlYW1fcmVhZFwiLFxuICAgIFwiYnBmX3N0cmVhbV92cHJpbnRrXCIsXG4gICAgXCJicGZfc3RyZWFtX3N0YWdlX3ByaW50a1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIGJ1Z3MgaW4gdGhlIEJQRiBzdHJlYW0gc3Vic3lzdGVtLCBpbmNsdWRpbmcgYW4gb2ZmLWJ5LW9uZSBlcnJvciBpbiBsZW5ndGggY2hlY2tpbmcsIGEgY2FwYWNpdHkgbGVhayBvbiBwdXNoIGZhaWx1cmUsIGluY29ycmVjdCBoYW5kbGluZyBvZiBwYXJ0aWFsIHJlYWRzIHRvIHVzZXIgc3BhY2UsIG1pc3NpbmcgdHJ1bmNhdGlvbiBjaGVja3MgaW4gdnByaW50aywgYW5kIGluY29ycmVjdCBsZW5ndGggY2FsY3VsYXRpb25zIGluIHN0YWdlX3ByaW50ay4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSAoQlBGIHN5c2NhbGwgYW5kIEJQRiBwcm9ncmFtcykgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfc3RyZWFtX3JlYWRcIixcbiAgICBcImJwZl9zdHJlYW1fdnByaW50a1wiLFxuICAgIFwiYnBmX3N0cmVhbV9zdGFnZV9wcmludGtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBtdWx0aXBsZSBidWdzIGluIHRoZSBCUEYgc3RyZWFtIHN1YnN5c3RlbSwgaW5jbHVkaW5nIGFuIG9mZi1ieS1vbmUgZXJyb3IgaW4gbGVuZ3RoIGNoZWNraW5nLCBhIGNhcGFjaXR5IGxlYWsgb24gcHVzaCBmYWlsdXJlLCBpbmNvcnJlY3QgaGFuZGxpbmcgb2YgcGFydGlhbCByZWFkcyB0byB1c2VyIHNwYWNlLCBtaXNzaW5nIHRydW5jYXRpb24gY2hlY2tzIGluIHZwcmludGssIGFuZCBpbmNvcnJlY3QgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiBzdGFnZV9wcmludGsuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgKEJQRiBzeXNjYWxsIGFuZCBCUEYgcHJvZ3JhbXMpIGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDU6NDkuMzg0MjIwODgxWiIsIlNlcSI6NDcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIxNzYxODIyNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NTo0OS4zODQ4NDI1NzFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTAyMTc1NTU2MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgc2V2ZXJhbCBsb2dpYyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCBidWdzIGluIHRoZSBCUEYgc3RyZWFtIGltcGxlbWVudGF0aW9uOlxcbjEuIEl0IGZpeGVzIGEgY2FwYWNpdHkgbGVhayB3aGVyZSBvdmVyc2l6ZWQgb3IgdHJ1bmNhdGVkIHN0cmluZ3Mgd291bGQgY29uc3VtZSBzdHJlYW0gY2FwYWNpdHkgYnV0IGZhaWwgdG8gYWxsb2NhdGUgYW4gZWxlbWVudCwgcGVybWFuZW50bHkgcmVkdWNpbmcgYXZhaWxhYmxlIGNhcGFjaXR5LlxcbjIuIEl0IHByZXZlbnRzIHRoZSBpbmNsdXNpb24gb2YgdGhlIHRyYWlsaW5nIE5VTCBieXRlIGluIHRoZSBzdHJlYW0gcGF5bG9hZCB3aGVuIHRoZSBmb3JtYXR0ZWQgc3RyaW5nIGV4YWN0bHkgbWF0Y2hlcyB0aGUgYnVmZmVyIHNpemUuXFxuMy4gSXQgZml4ZXMgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCB0byBvbmx5IGluY3JlbWVudCB0aGUgc3RyZWFtIGxlbmd0aCBpZiB0aGUgc3RyaW5nIHdhcyBzdWNjZXNzZnVsbHkgcHVzaGVkLlxcbjQuIEl0IGNvcnJlY3RzIHRoZSBoYW5kbGluZyBvZiBwYXJ0aWFsIGBjb3B5X3RvX3VzZXJgIGZhdWx0cyBpbiBgYnBmX3N0cmVhbV9yZWFkYCB0byBwcm9wZXJseSBhY2NvdW50IGZvciBzdWNjZXNzZnVsbHkgY29waWVkIGJ5dGVzLlxcblxcbk5vbmUgb2YgdGhlc2UgaXNzdWVzIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBzdHJlYW0gZWxlbWVudHMgYXJlIGFsbG9jYXRlZCB3aXRoIGBfX0dGUF9aRVJPYCwgYW5kIHRoZSBzdHJpbmdzIGNvcGllZCBpbnRvIHRoZW0gYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGBic3RyX3ByaW50ZmAgb3IgYHZzY25wcmludGZgLiBUaGUgY29waWVkIGxlbmd0aCBpcyBzdHJpY3RseSBib3VuZGVkIGJ5IHRoZSBpbml0aWFsaXplZCBzdHJpbmcgbGVuZ3RoLiBUaGUgYnVncyBmaXhlZCBhcmUgbG9naWMgZXJyb3JzLCByZXNvdXJjZSBsZWFrcywgYW5kIGluY29ycmVjdCBlcnJvciBoYW5kbGluZywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSB0aGUgYWRkZWQgc2VsZnRlc3RzIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyB0b29scy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTI0NmFmZGU0Njk2ZmM2OWY3MzI5M2FhYjM4ODUwOTgxMDUzZTUwMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDE0OjQzOjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdHJlYW0uYyBiL2tlcm5lbC9icGYvc3RyZWFtLmNcbmluZGV4IGJlOWNlOThlOTQ2OTIuLjdhNWMzYWM4Njc2YjkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0cmVhbS5jXG4rKysgYi9rZXJuZWwvYnBmL3N0cmVhbS5jXG5AQCAtMjIsMTEgKzIyLDExIEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICpicGZfc3RyZWFtX2VsZW1fYWxsb2MoaW50IGxlbilcbiBcdHNpemVfdCBhbGxvY19zaXplO1xuIFxuIFx0Lypcbi1cdCAqIExlbmd0aCBkZW5vdGVzIHRoZSBhbW91bnQgb2YgZGF0YSB0byBiZSB3cml0dGVuIGFzIHBhcnQgb2Ygc3RyZWFtIGVsZW1lbnQsXG4tXHQgKiB0aHVzIGluY2x1ZGVzICdcXDAnIGJ5dGUuIFdlJ3JlIGNhcHBlZCBieSBob3cgbXVjaCBicGZfYnByaW50Zl9idWZmZXJzIGNhblxuLVx0ICogYWNjb21vZGF0ZSwgdGhlcmVmb3JlIGRlbnkgYWxsb2NhdGlvbnMgdGhhdCB3b24ndCBmaXQgaW50byB0aGVtLlxuK1x0ICogTGVuZ3RoIGlzIHRoZSBwYXlsb2FkIHB1c2hlZCBpbnRvIHRoZSBzdHJlYW0sIGV4Y2x1ZGluZyB0aGVcbitcdCAqIHRyYWlsaW5nIE5VTCBvZiB0aGUgYnByaW50ZiBidWZmZXIuIFJlamVjdCBhbnl0aGluZyB0aGF0IGNhbm5vdFxuK1x0ICogZml0IHdpdGhvdXQgY29weWluZyB0aGF0IE5VTCBpbnRvIHRoZSBzdHJlYW0gZWxlbWVudC5cbiBcdCAqL1xuLVx0aWYgKGxlbiBcdTAwM2MgMCB8fCBsZW4gXHUwMDNlIG1heF9sZW4pXG4rXHRpZiAobGVuIFx1MDAzYyAwIHx8IGxlbiBcdTAwM2U9IG1heF9sZW4pXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0YWxsb2Nfc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCBicGZfc3RyZWFtX2VsZW0sIHN0cltsZW5dKTtcbkBAIC02OCwxMCArNjgsOCBAQCBzdGF0aWMgaW50IGJwZl9zdHJlYW1fY29uc3VtZV9jYXBhY2l0eShzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBpbnQgbGVuKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICplbGVtKVxuK3N0YXRpYyB2b2lkIGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJ1Y3QgYnBmX3N0cmVhbSAqc3RyZWFtLCBpbnQgbGVuKVxuIHtcbi1cdGludCBsZW4gPSBlbGVtLVx1MDAzZXRvdGFsX2xlbjtcbi1cbiBcdGF0b21pY19zdWIobGVuLCBcdTAwMjZzdHJlYW0tXHUwMDNlY2FwYWNpdHkpO1xuIH1cbiBcbkBAIC03OSw3ICs3NywxNCBAQCBzdGF0aWMgaW50IGJwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGJwZl9zdHJlYW0gKnN0cmVhbSwgY29uc3QgY2hhciAqc3RyLCBpbnQgbFxuIHtcbiBcdGludCByZXQgPSBicGZfc3RyZWFtX2NvbnN1bWVfY2FwYWNpdHkoc3RyZWFtLCBsZW4pO1xuIFxuLVx0cmV0dXJuIHJldCA/OiBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXHUwMDI2c3RyZWFtLVx1MDAzZWxvZywgc3RyLCBsZW4pO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IF9fYnBmX3N0cmVhbV9wdXNoX3N0cihcdTAwMjZzdHJlYW0tXHUwMDNlbG9nLCBzdHIsIGxlbik7XG4rXHRpZiAocmV0KVxuK1x0XHRicGZfc3RyZWFtX3JlbGVhc2VfY2FwYWNpdHkoc3RyZWFtLCBsZW4pO1xuK1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBicGZfc3RyZWFtICpicGZfc3RyZWFtX2dldChlbnVtIGJwZl9zdHJlYW1faWQgc3RyZWFtX2lkLCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXG5AQCAtMTYyLDYgKzE2Nyw3IEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9yZWFkKHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIHZvaWQgX191c2VyICpidWYsIGludCBsZW4pXG4gXG4gXHR3aGlsZSAocmVtX2xlbikge1xuIFx0XHRpbnQgcG9zID0gbGVuIC0gcmVtX2xlbjtcbitcdFx0aW50IGNodW5rLCBuO1xuIFx0XHRib29sIGNvbnQ7XG4gXG4gXHRcdG5vZGUgPSBicGZfc3RyZWFtX2JhY2tsb2dfcGVlayhzdHJlYW0pO1xuQEAgLTE3NSwyMCArMTgxLDIxIEBAIHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9yZWFkKHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIHZvaWQgX191c2VyICpidWYsIGludCBsZW4pXG4gXG4gXHRcdGNvbnNfbGVuID0gZWxlbS1cdTAwM2Vjb25zdW1lZF9sZW47XG4gXHRcdGNvbnQgPSBicGZfc3RyZWFtX2NvbnN1bWVfZWxlbShlbGVtLCBcdTAwMjZyZW1fbGVuKSA9PSBmYWxzZTtcbi1cbi1cdFx0cmV0ID0gY29weV90b191c2VyKGJ1ZiArIHBvcywgZWxlbS1cdTAwM2VzdHIgKyBjb25zX2xlbixcbi1cdFx0XHRcdCAgIGVsZW0tXHUwMDNlY29uc3VtZWRfbGVuIC0gY29uc19sZW4pO1xuLVx0XHQvKiBSZXN0b3JlIGluIGNhc2Ugb2YgZXJyb3IuICovXG4tXHRcdGlmIChyZXQpIHtcbi1cdFx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0XHRcdGVsZW0tXHUwMDNlY29uc3VtZWRfbGVuID0gY29uc19sZW47XG4rXHRcdGNodW5rID0gZWxlbS1cdTAwM2Vjb25zdW1lZF9sZW4gLSBjb25zX2xlbjtcbitcbitcdFx0biA9IGNvcHlfdG9fdXNlcihidWYgKyBwb3MsIGVsZW0tXHUwMDNlc3RyICsgY29uc19sZW4sIGNodW5rKTtcbitcdFx0aWYgKG4pIHtcbitcdFx0XHQvKiBLZWVwIGFueSBzdWNjZXNzZnVsbHkgY29waWVkIGJ5dGVzOyAtRUZBVUxUIG9ubHkgaWYgbm9uZS4gKi9cbitcdFx0XHRlbGVtLVx1MDAzZWNvbnN1bWVkX2xlbiAtPSBuO1xuK1x0XHRcdHJlbV9sZW4gKz0gbjtcbitcdFx0XHRyZXQgPSAobGVuID09IHJlbV9sZW4pID8gLUVGQVVMVCA6IDA7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGNvbnQpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGJwZl9zdHJlYW1fYmFja2xvZ19wb3Aoc3RyZWFtKTtcbi1cdFx0YnBmX3N0cmVhbV9yZWxlYXNlX2NhcGFjaXR5KHN0cmVhbSwgZWxlbSk7XG4rXHRcdGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eShzdHJlYW0sIGVsZW0tXHUwMDNldG90YWxfbGVuKTtcbiBcdFx0YnBmX3N0cmVhbV9mcmVlX2VsZW0oZWxlbSk7XG4gXHR9XG4gXG5AQCAtMjM4LDYgKzI0NSwxMSBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrKGludCBzdHJlYW1faWQsIGNvbnN0IGNoYXIgKmZtdF9fc3RyLCBjb25zdCB2b1xuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0gYnN0cl9wcmludGYoZGF0YS5idWYsIE1BWF9CUFJJTlRGX0JVRiwgZm10X19zdHIsIGRhdGEuYmluX2FyZ3MpO1xuK1x0LyogVHJ1bmNhdGlvbjogcmVqZWN0IGJlZm9yZSBjYXBhY2l0eSBjaGFyZ2UgKG5vdCAtRU5PTUVNKS4gKi9cbitcdGlmIChyZXQgXHUwMDNlPSBNQVhfQlBSSU5URl9CVUYpIHtcbitcdFx0YnBmX2JwcmludGZfY2xlYW51cChcdTAwMjZkYXRhKTtcbitcdFx0cmV0dXJuIC1FMkJJRztcbitcdH1cbiBcdC8qIEV4Y2x1ZGUgTlVMTCBieXRlIGR1cmluZyBwdXNoLiAqL1xuIFx0cmV0ID0gYnBmX3N0cmVhbV9wdXNoX3N0cihzdHJlYW0sIGRhdGEuYnVmLCByZXQpO1xuIFx0YnBmX2JwcmludGZfY2xlYW51cChcdTAwMjZkYXRhKTtcbkBAIC0zMTEsMTcgKzMyMywxOCBAQCBpbnQgYnBmX3N0cmVhbV9zdGFnZV9wcmludGsoc3RydWN0IGJwZl9zdHJlYW1fc3RhZ2UgKnNzLCBjb25zdCBjaGFyICpmbXQsIC4uLilcbiB7XG4gXHRzdHJ1Y3QgYnBmX2JwcmludGZfYnVmZmVycyAqYnVmO1xuIFx0dmFfbGlzdCBhcmdzO1xuLVx0aW50IHJldDtcbitcdGludCBsZW4sIHJldDtcbiBcbiBcdGlmIChicGZfdHJ5X2dldF9idWZmZXJzKFx1MDAyNmJ1ZikpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4gXHR2YV9zdGFydChhcmdzLCBmbXQpO1xuLVx0cmV0ID0gdnNucHJpbnRmKGJ1Zi1cdTAwM2VidWYsIEFSUkFZX1NJWkUoYnVmLVx1MDAzZWJ1ZiksIGZtdCwgYXJncyk7XG4rXHRsZW4gPSB2c2NucHJpbnRmKGJ1Zi1cdTAwM2VidWYsIEFSUkFZX1NJWkUoYnVmLVx1MDAzZWJ1ZiksIGZtdCwgYXJncyk7XG4gXHR2YV9lbmQoYXJncyk7XG4tXHRzcy1cdTAwM2VsZW4gKz0gcmV0O1xuIFx0LyogRXhjbHVkZSBOVUxMIGJ5dGUgZHVyaW5nIHB1c2guICovXG4tXHRyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXHUwMDI2c3MtXHUwMDNlbG9nLCBidWYtXHUwMDNlYnVmLCByZXQpO1xuK1x0cmV0ID0gX19icGZfc3RyZWFtX3B1c2hfc3RyKFx1MDAyNnNzLVx1MDAzZWxvZywgYnVmLVx1MDAzZWJ1ZiwgbGVuKTtcbitcdGlmICghcmV0KVxuK1x0XHRzcy1cdTAwM2VsZW4gKz0gbGVuO1xuIFx0YnBmX3B1dF9idWZmZXJzKCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jXG5pbmRleCBjM2NjZTVjMjkyYmRkLi44NzE3MGRjYWQzYWQ4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jXG5AQCAtNTgsNiArNTgsNzEgQEAgdm9pZCB0ZXN0X3N0cmVhbV9zeXNjYWxsKHZvaWQpXG4gXHRzdHJlYW1fX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuK3ZvaWQgdGVzdF9zdHJlYW1fb3ZlcnNpemUodm9pZClcbit7XG4rXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XG4rXHRzdHJ1Y3Qgc3RyZWFtICpza2VsO1xuK1x0aW50IHJldCwgcHJvZ19mZDtcbitcdGNoYXIgYnVmWzhdID0ge307XG4rXG4rXHRza2VsID0gc3RyZWFtX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJzdHJlYW1fX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5zdHJlYW1fb3ZlcnNpemUpO1xuK1x0cmV0ID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nX2ZkLCBcdTAwMjZvcHRzKTtcbitcdEFTU0VSVF9PSyhyZXQsIFwib3ZlcnNpemUgcnVuXCIpO1xuK1x0QVNTRVJUX09LKG9wdHMucmV0dmFsLCBcIm92ZXJzaXplIHJldHZhbFwiKTtcbitcbitcdC8qIE92ZXJzaXplZCBwdXNoIG11c3Qgbm90IHBlcm1hbmVudGx5IGNvbnN1bWUgY2FwYWNpdHkgb24gdGhpcyBwcm9nLiAqL1xuK1x0cmV0ID0gYnBmX3Byb2dfc3RyZWFtX3JlYWQocHJvZ19mZCwgQlBGX1NUUkVBTV9TVERPVVQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE5VTEwpO1xuK1x0QVNTRVJUX0VRKHJldCwgMywgXCJieXRlcyBhZnRlciBvdmVyc2l6ZVwiKTtcbitcdEFTU0VSVF9PSyhtZW1jbXAoYnVmLCBcImZvb1wiLCAzKSwgXCJwYXlsb2FkIGFmdGVyIG92ZXJzaXplXCIpO1xuK1xuK1x0c3RyZWFtX19kZXN0cm95KHNrZWwpO1xuK31cbitcbit2b2lkIHRlc3Rfc3RyZWFtX3BhcnRpYWxfcmVhZCh2b2lkKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbitcdHN0cnVjdCBzdHJlYW0gKnNrZWw7XG4rXHRpbnQgcmV0LCBwcm9nX2ZkO1xuK1x0bG9uZyBwYWdlX3NpemU7XG4rXHRjaGFyICpwYWdlLCAqYnVmO1xuK1x0Y2hhciByZXN0WzhdID0ge307XG4rXG4rXHRza2VsID0gc3RyZWFtX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJzdHJlYW1fX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5zdHJlYW1fc3lzY2FsbCk7XG4rXHRyZXQgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHByb2dfZmQsIFx1MDAyNm9wdHMpO1xuK1x0QVNTRVJUX09LKHJldCwgXCJyZXRcIik7XG4rXHRBU1NFUlRfT0sob3B0cy5yZXR2YWwsIFwicmV0dmFsXCIpO1xuK1xuK1x0cGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpO1xuK1x0cGFnZSA9IG1tYXAoTlVMTCwgcGFnZV9zaXplICogMiwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdFx0ICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuK1x0aWYgKCFBU1NFUlRfTkVRKHBhZ2UsIE1BUF9GQUlMRUQsIFwibW1hcFwiKSkge1xuK1x0XHRzdHJlYW1fX2Rlc3Ryb3koc2tlbCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdC8qIExlYXZlIG9ubHkgdGhlIGZpcnN0IHBhZ2UgbWFwcGVkIHNvIGEgc3RyYWRkbGluZyBjb3B5IGZhdWx0cy4gKi9cbitcdEFTU0VSVF9PSyhtdW5tYXAocGFnZSArIHBhZ2Vfc2l6ZSwgcGFnZV9zaXplKSwgXCJtdW5tYXAgc2Vjb25kIHBhZ2VcIik7XG4rXG4rXHRidWYgPSBwYWdlICsgcGFnZV9zaXplIC0gMTtcbitcdHJldCA9IGJwZl9wcm9nX3N0cmVhbV9yZWFkKHByb2dfZmQsIEJQRl9TVFJFQU1fU1RET1VULCBidWYsIDMsIE5VTEwpO1xuK1x0QVNTRVJUX0VRKHJldCwgMSwgXCJwYXJ0aWFsIGJ5dGVzXCIpO1xuK1x0QVNTRVJUX0VRKGJ1ZlswXSwgJ2YnLCBcImZpcnN0IGJ5dGVcIik7XG4rXG4rXHRyZXQgPSBicGZfcHJvZ19zdHJlYW1fcmVhZChwcm9nX2ZkLCBCUEZfU1RSRUFNX1NURE9VVCwgcmVzdCwgc2l6ZW9mKHJlc3QpLCBOVUxMKTtcbitcdEFTU0VSVF9FUShyZXQsIDIsIFwicmVtYWluaW5nIGJ5dGVzXCIpO1xuK1x0QVNTRVJUX09LKG1lbWNtcChyZXN0LCBcIm9vXCIsIDIpLCBcInJlbWFpbmluZyBkYXRhXCIpO1xuK1xuK1x0bXVubWFwKHBhZ2UsIHBhZ2Vfc2l6ZSk7XG4rXHRzdHJlYW1fX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHRlc3RfYWRkcmVzcyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIHVuc2lnbmVkIGxvbmcgKmZhdWx0X2FkZHJfcClcbiB7XG4gXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXG5pbmRleCA2Zjk5OWJhOTUxYTNjLi45Yjk3ZjVlMDFiODNhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbkBAIC0zNiw3ICszNiwxMiBAQCBzdHJ1Y3Qge1xuIH0gYXJyYXkgU0VDKFwiLm1hcHNcIik7XG4gXG4gI2RlZmluZSBFTk9TUEMgMjhcbisjZGVmaW5lIEUyQklHIDdcbiAjZGVmaW5lIF9TVFIgXCJ4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhcIlxuKyNkZWZpbmUgX1g2NCBcInh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhcIlxuKy8qIDEwMjQgYnl0ZXM6IHRydW5jYXRlZCBieSBic3RyX3ByaW50ZiwgbXVzdCByZXR1cm4gLUUyQklHLiAqL1xuKyNkZWZpbmUgX0JJR19TVFIgKF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBcXFxuK1x0XHQgIF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NCBfWDY0IF9YNjQgX1g2NClcbiBcbiBpbnQgc2l6ZTtcbiB1NjQgZmF1bHRfYWRkcjtcbkBAIC0xMTcsNiArMTIyLDE5IEBAIGludCBzdHJlYW1fc3lzY2FsbCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK2ludCBzdHJlYW1fb3ZlcnNpemUodm9pZCAqY3R4KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBicGZfc3RyZWFtX3ByaW50ayhCUEZfU1RET1VULCBfQklHX1NUUik7XG4rXHRpZiAocmV0ICE9IC1FMkJJRylcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBicGZfc3RyZWFtX3ByaW50ayhCUEZfU1RET1VULCBcImZvb1wiKTtcbit9XG4rXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbiBfX2FyY2hfYXJtNjRcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ1OjQ5LjM4NDg0MzYyMVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjg5NzIzODUzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBTdHJlYW0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBtb2RpZnlpbmcgYGtlcm5lbC9icGYvc3RyZWFtLmNgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgc3VnZ2VzdHMgc2V2ZXJhbCBjaGFuZ2VzIGFpbWVkIGF0IHJlZmluaW5nIGNhcGFjaXR5IG1hbmFnZW1lbnQgYW5kIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgQlBGIHN0cmVhbSBmdW5jdGlvbmFsaXR5LlxuXG5GaXJzdCwgaW4gYGJwZl9zdHJlYW1fZWxlbV9hbGxvY2AsIHRoZXkndmUgdGlnaHRlbmVkIHRoZSBsZW5ndGggdmFsaWRhdGlvbiwgbWFraW5nIHN1cmUgdGhlIGxlbmd0aCBpc24ndCBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gYWxsb3dlZCBsZW5ndGguIFRoaXMgc2VlbXMgbGlrZSBhIGdvb2Qgc2FmZXR5IGNoZWNrLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGlzc3VlcyBkdXJpbmcgYWxsb2NhdGlvbi5cblxuTmV4dCwgaW4gYGJwZl9zdHJlYW1fcmVsZWFzZV9jYXBhY2l0eWAsIHdlIHNlZSB0aGV5J3JlIG5vdyBwYXNzaW5nIHRoZSBsZW5ndGggZGlyZWN0bHkgaW5zdGVhZCBvZiB0aGUgZW50aXJlIGVsZW1lbnQuIEl04oCZcyBjbGVhbmVyLCBmb2N1c2luZyBvbmx5IG9uIHRoZSBjYXBhY2l0eSB2YWx1ZSB0byBiZSBhZGp1c3RlZCwgc28gdGhlIGBlbGVtYCBzdHJ1Y3QgZG9lc24ndCBuZWVkIHRvIGJlIHBhc3NlZC4gVGhpcyBtYWtlcyB0aGUgY29kZSBtb3JlIHJlYWRhYmxlIGFuZCBwb3NzaWJseSBlZmZpY2llbnQuXG5cblRoZSBgYnBmX3N0cmVhbV9wdXNoX3N0cmAgZnVuY3Rpb24gbG9va3MgbGlrZSBpdCBoYXMgYWxzbyBiZWVuIG1vZGlmaWVkLiBUaGVyZSBpcyBub3cgbW9yZSByaWdvcm91cyBlcnJvciBjaGVja2luZzsgc3BlY2lmaWNhbGx5LCBpdCBmaXJzdCB0cmllcyB0byBjb25zdW1lIGNhcGFjaXR5IGFuZCB0aGVuLCBvbmx5IGlmIHRoYXQgaXMgc3VjY2Vzc2Z1bCwgYXR0ZW1wdHMgdG8gcHVzaCB0aGUgc3RyaW5nLiBJZiBwdXNoaW5nIGZhaWxzLCBjYXBhY2l0eSBpcyByZWxlYXNlZCwgbWFraW5nIHN1cmUgdGhhdCB0aGVyZSBpcyBubyByZXNvdXJjZSBsZWFrLiBUaGlzIHNob3VsZCBtYWtlIHRoZSBzeXN0ZW0gbW9yZSByZXNpbGllbnQuXG5cbk5vdywgYGJwZl9zdHJlYW1fcmVhZGAsIHRoaXMgb25lJ3MgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQgZGVhbHMgd2l0aCB1c2VyLXNwYWNlIGRhdGEgY29weWluZy4gVGhlIG9yaWdpbmFsIGNvZGUgaGFzIHNvbWUgaXNzdWVzLCBidXQgdGhpcyBsb29rcyBsaWtlIGFuIGltcHJvdmVtZW50LiBJdCBoYW5kbGVzIHBhcnRpYWwgY29weSBzdWNjZXNzZXMgZnJvbSBgY29weV90b191c2VyYCBtdWNoIGJldHRlci4gSXQgcHJlc2VydmVzIGFueSBieXRlcyB0aGF0ICpkaWQqIGNvcHkgYW5kIG5vdyBjb3JyZWN0bHkgc2V0cyBgLUVGQVVMVGAgb25seSBpZiAqbm8qIGJ5dGVzIHdlcmUgY29waWVkLiBUaGlzIGlzIG11Y2ggbW9yZSByb2J1c3QuXG5cbkkgc2VlIGEgY2hhbmdlIGluIGBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmVhbV92cHJpbnRrYCwgYW5kIG5vdyBpdCBpbmNsdWRlcyBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBmb3JtYXR0ZWQgb3V0cHV0IGRvZXNuJ3QgZXhjZWVkIHRoZSBidWZmZXIgc2l6ZSBiZWZvcmUgYXR0ZW1wdGluZyB0byBjb25zdW1lIGNhcGFjaXR5LiBJZiB0aGUgYnVmZmVyIGlzIHRydW5jYXRlZCwgaXQgcmV0dXJucyBgLUUyQklHYCBpbnN0ZWFkIG9mIGAtRU5PTUVNYC4gSXQgc2VlbXMgdGhleSdyZSBhdm9pZGluZyB0aGUgXCJjYXBhY2l0eSBjaGFyZ2VcIiBpbiB0aGUgdHJ1bmNhdGlvbiBjYXNlLiBWZXJ5IGltcG9ydGFudC5cblxuQWxzbywgaXQgbG9va3MgbGlrZSBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgIGlzIGdldHRpbmcgc2ltaWxhciBmaXhlcyB0byBwcmV2ZW50IGVycm9ycy4gTm93LCB0aGUgbGVuZ3RoIGlzIHNldCB0byBgbGVuID0gdnNjbnByaW50ZiguLi4pYCBhbmQgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGlzIGFkZGVkIGlmIHB1c2hpbmcgdGhlIHN0cmluZyBpcyBzdWNjZXNzZnVsLiBJdCBsb29rcyBsaWtlIHRoZSBzYW1lIGltcHJvdmVtZW50LlxuXG5Hb2luZyBiYWNrIHRvIGBicGZfc3RyZWFtX3JlYWRgLi4uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBhcmVuJ3QgcG90ZW50aWFsbHkgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgd2hlbiBjb3B5aW5nIHRvIHVzZXIgc3BhY2UuIEl0IHJlbGllcyBvbiBgZWxlbS1cdTAwM2VzdHJgIGFuZCB0aGF0J3MgcG9wdWxhdGVkIGJ5IGBfX2JwZl9zdHJlYW1fcHVzaF9zdHJgLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgX19icGZfc3RyZWFtX3B1c2hfc3RyYCBhbmQgYGJwZl9zdHJlYW1fZWxlbV9hbGxvY2AgdG8gdmVyaWZ5IHRoYXQgYGVsZW0tXHUwMDNlc3RyYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gSSdsbCBzZWFyY2ggZm9yIHRob3NlIGZ1bmN0aW9uIGNhbGxzIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg2NywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NjowMi4yODIwODQ3NDJaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjM4ODg3OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19icGZfc3RyZWFtX3B1c2hfc3RyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RyZWFtLmM9MTg9c3RhdGljIHN0cnVjdCBicGZfc3RyZWFtX2VsZW0gKmJwZl9zdHJlYW1fZWxlbV9hbGxvYyhpbnQgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYy00MS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjQyOnN0YXRpYyBpbnQgX19icGZfc3RyZWFtX3B1c2hfc3RyKHN0cnVjdCBsbGlzdF9oZWFkICpsb2csIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbilcXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTQzLXtcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmM9NzY9c3RhdGljIGludCBicGZfc3RyZWFtX3B1c2hfc3RyKHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbilcXG4tLVxcbmtlcm5lbC9icGYvc3RyZWFtLmMtODItXFxua2VybmVsL2JwZi9zdHJlYW0uYzo4MzpcXHRyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXFx1MDAyNnN0cmVhbS1cXHUwMDNlbG9nLCBzdHIsIGxlbik7XFxua2VybmVsL2JwZi9zdHJlYW0uYy04NC1cXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL2JwZi9zdHJlYW0uYz0zMjI9aW50IGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrKHN0cnVjdCBicGZfc3RyZWFtX3N0YWdlICpzcywgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuLS1cXG5rZXJuZWwvYnBmL3N0cmVhbS5jLTMzNC1cXHQvKiBFeGNsdWRlIE5VTEwgYnl0ZSBkdXJpbmcgcHVzaC4gKi9cXG5rZXJuZWwvYnBmL3N0cmVhbS5jOjMzNTpcXHRyZXQgPSBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoXFx1MDAyNnNzLVxcdTAwM2Vsb2csIGJ1Zi1cXHUwMDNlYnVmLCBsZW4pO1xcbmtlcm5lbC9icGYvc3RyZWFtLmMtMzM2LVxcdGlmICghcmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NjowNC4yMDU5Nzg5NDVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg5MDEzMTA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqQW5hbHl6aW5nIGBfX2JwZl9zdHJlYW1fcHVzaF9zdHJgIGFuZCBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYCoqXG5cbkFscmlnaHQsIG15IG1pbmQncyBvbiB0aG9zZSB0d28gQlBGIGZ1bmN0aW9uczogYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAgYW5kIGBicGZfc3RyZWFtX2VsZW1fYWxsb2NgLiBJbW1lZGlhdGVseSwgSSdtIGFzc2Vzc2luZyB0aGVpciByb2xlcyBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIGBicGZfc3RyZWFtX2VsZW1fYWxsb2NgIGlzLCBvZiBjb3Vyc2UsIHRoZSBmdW5kYW1lbnRhbCBtZW1vcnkgYWxsb2NhdG9yIGZvciBzdHJlYW0gZWxlbWVudHMgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gTm8gc3VycHJpc2VzIHRoZXJlOyBpdCdzIHRoZSBmb3VuZGF0aW9uLiBJdCdzIHRoZSBidWlsZGluZyBibG9jaywgZXNzZW50aWFsbHkuIEknbSB3b25kZXJpbmcgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIElzIGl0IHVzaW5nIHRoZSBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGFsbG9jYXRvcnMgdW5kZXIgdGhlIGhvb2QsIG9yIGRvZXMgaXQgaGF2ZSBhIGN1c3RvbSBzdHJhdGVneSB0YWlsb3JlZCBmb3IgQlBGJ3Mgc3BlY2lmaWMgcmVxdWlyZW1lbnRzPyBQZXJmb3JtYW5jZSBhbmQgZnJhZ21lbnRhdGlvbiBhcmUga2V5IGNvbnNpZGVyYXRpb25zIGluIHRoaXMgY29udGV4dCwgb2YgY291cnNlLiBXZSBjYW4gZXhwZWN0IHRoYXQgaXQgdHJpZXMgdG8gbWFrZSB2ZXJ5IGVmZmljaWVudCB1c2Ugb2YgdGhlIGxpbWl0ZWQgQlBGIG1lbW9yeSBzcGFjZS5cblxuTm93LCBgX19icGZfc3RyZWFtX3B1c2hfc3RyYC4gVGhlIGRvdWJsZSB1bmRlcnNjb3JlIHByZWZpeCBpcyBhIGNsdWUuLi4gaXQgc3VnZ2VzdHMgdGhpcyBpcyBhbiBpbnRlcm5hbCBvciBcInVuc2FmZVwiIGZ1bmN0aW9uLCBwcm9iYWJseSBub3Qgc29tZXRoaW5nIGEgQlBGIHByb2dyYW0gd291bGQgZGlyZWN0bHkgY2FsbCBpbiBhIHVzZXItc3BhY2UgY29udGV4dC4gSXQgaXMgdmVyeSBsaWtlbHkgYSBsb3dlci1sZXZlbCBmdW5jdGlvbi4gSXQncyBtb3N0IGxpa2VseSBkZXNpZ25lZCB0byBwdXNoIGEgc3RyaW5nIG9udG8gYSBzdHJlYW0uIEknbSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBkZXRhaWxzLiBJcyBpdCBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcsIG9yIGRvZXMgaXQgaW5jb3Jwb3JhdGUgbGVuZ3RoIG1ldGFkYXRhPyBXaGF0J3MgdGhlIHN0cmF0ZWd5IGZvciBoYW5kbGluZyBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cz8gRXJyb3IgaGFuZGxpbmcgaXMgY3JpdGljYWwgaGVyZS4gSXQgcHJvYmFibHkgY2hlY2tzIGF2YWlsYWJsZSBzcGFjZS4gRG9lcyBpdCBhY2NvdW50IGZvciBwb3NzaWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBmcm9tIGBicGZfc3RyZWFtX2VsZW1fYWxsb2NgPyBBbmQgaG93IGFyZSB0aGUgc3RyZWFtIGVsZW1lbnRzIHN0cnVjdHVyZWQ/IEFyZSB0aGVyZSBhbnkgY2xldmVyIG9wdGltaXphdGlvbnMgbGlrZSBjb3B5LW9uLXdyaXRlIG9yIHNpbWlsYXIgdGVjaG5pcXVlcyB0byByZWR1Y2Ugb3ZlcmhlYWQ/IEknbGwgcHJvYmFibHkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGhhbmRsZSBwb3RlbnRpYWwgaXNzdWVzLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgaGFuZGxlcyB0aGVzZSBkZXRhaWxzIHdoZW4gaXQgaXMgdGltZSB0byBjaGVjayB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEyMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ2OjEwLjA5NjExMzZaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zdHJlYW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxODpcXHRzdGF0aWMgc3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqYnBmX3N0cmVhbV9lbGVtX2FsbG9jKGludCBsZW4pXFxuICAxOTpcXHR7XFxuICAyMDpcXHRcXHRjb25zdCBpbnQgbWF4X2xlbiA9IEFSUkFZX1NJWkUoKHN0cnVjdCBicGZfYnByaW50Zl9idWZmZXJzKXt9LmJ1Zik7XFxuICAyMTpcXHRcXHRzdHJ1Y3QgYnBmX3N0cmVhbV9lbGVtICplbGVtO1xcbiAgMjI6XFx0XFx0c2l6ZV90IGFsbG9jX3NpemU7XFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdC8qXFxuICAyNTpcXHRcXHQgKiBMZW5ndGggaXMgdGhlIHBheWxvYWQgcHVzaGVkIGludG8gdGhlIHN0cmVhbSwgZXhjbHVkaW5nIHRoZVxcbiAgMjY6XFx0XFx0ICogdHJhaWxpbmcgTlVMIG9mIHRoZSBicHJpbnRmIGJ1ZmZlci4gUmVqZWN0IGFueXRoaW5nIHRoYXQgY2Fubm90XFxuICAyNzpcXHRcXHQgKiBmaXQgd2l0aG91dCBjb3B5aW5nIHRoYXQgTlVMIGludG8gdGhlIHN0cmVhbSBlbGVtZW50LlxcbiAgMjg6XFx0XFx0ICovXFxuICAyOTpcXHRcXHRpZiAobGVuIFxcdTAwM2MgMCB8fCBsZW4gXFx1MDAzZT0gbWF4X2xlbilcXG4gIDMwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHRhbGxvY19zaXplID0gb2Zmc2V0b2Yoc3RydWN0IGJwZl9zdHJlYW1fZWxlbSwgc3RyW2xlbl0pO1xcbiAgMzM6XFx0XFx0ZWxlbSA9IGttYWxsb2Nfbm9sb2NrKGFsbG9jX3NpemUsIF9fR0ZQX1pFUk8sIC0xKTtcXG4gIDM0OlxcdFxcdGlmICghZWxlbSlcXG4gIDM1OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHRicGZfc3RyZWFtX2VsZW1faW5pdChlbGVtLCBsZW4pO1xcbiAgMzg6XFx0XFxuICAzOTpcXHRcXHRyZXR1cm4gZWxlbTtcXG4gIDQwOlxcdH1cXG4gIDQxOlxcdFxcbiAgNDI6XFx0c3RhdGljIGludCBfX2JwZl9zdHJlYW1fcHVzaF9zdHIoc3RydWN0IGxsaXN0X2hlYWQgKmxvZywgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxcbiAgNDM6XFx0e1xcbiAgNDQ6XFx0XFx0c3RydWN0IGJwZl9zdHJlYW1fZWxlbSAqZWxlbSA9IE5VTEw7XFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdC8qXFxuICA0NzpcXHRcXHQgKiBBbGxvY2F0ZSBhIGJwZl9wcm9nX3N0cmVhbV9lbGVtIGFuZCBwdXNoIGl0IHRvIHRoZSBicGZfcHJvZ19zdHJlYW1cXG4gIDQ4OlxcdFxcdCAqIGxvZywgZWxlbWVudHMgd2lsbCBiZSBwb3BwZWQgYXQgb25jZSBhbmQgcmV2ZXJzZWQgdG8gcHJpbnQgdGhlIGxvZy5cXG4gIDQ5OlxcdFxcdCAqL1xcbiAgNTA6XFx0XFx0ZWxlbSA9IGJwZl9zdHJlYW1fZWxlbV9hbGxvYyhsZW4pO1xcbiAgNTE6XFx0XFx0aWYgKCFlbGVtKVxcbiAgNTI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuICA1MzpcXHRcXG4gIDU0OlxcdFxcdG1lbWNweShlbGVtLVxcdTAwM2VzdHIsIHN0ciwgbGVuKTtcXG4gIDU1OlxcdFxcdGxsaXN0X2FkZChcXHUwMDI2ZWxlbS1cXHUwMDNlbm9kZSwgbG9nKTtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0cmV0dXJuIDA7XFxuICA1ODpcXHR9XFxuICA1OTpcXHRcXG4gIDYwOlxcdHN0YXRpYyBpbnQgYnBmX3N0cmVhbV9jb25zdW1lX2NhcGFjaXR5KHN0cnVjdCBicGZfc3RyZWFtICpzdHJlYW0sIGludCBsZW4pXFxuICA2MTpcXHR7XFxuICA2MjpcXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNnN0cmVhbS1cXHUwMDNlY2FwYWNpdHkpIFxcdTAwM2U9IEJQRl9TVFJFQU1fTUFYX0NBUEFDSVRZKVxcbiAgNjM6XFx0XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuICA2NDpcXHRcXHRpZiAoYXRvbWljX2FkZF9yZXR1cm4obGVuLCBcXHUwMDI2c3RyZWFtLVxcdTAwM2VjYXBhY2l0eSkgXFx1MDAzZT0gQlBGX1NUUkVBTV9NQVhfQ0FQQUNJVFkpIHtcXG4gIDY1OlxcdFxcdFxcdGF0b21pY19zdWIobGVuLCBcXHUwMDI2c3RyZWFtLVxcdTAwM2VjYXBhY2l0eSk7XFxuICA2NjpcXHRcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4gIDY3OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDY6MTAuMDk2MTk4ODJaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY1Mzk0MTQwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgQlBGIFN0cmVhbSBNZW1vcnkgTWFuYWdlbWVudCBhbmQgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaXZpbmcgaW50byB0aGlzIEJQRiBzdHJlYW0gY29kZSwgYW5kIGl0IHNlZW1zIGxpa2Ugd2UncmUgbG9va2luZyBhdCBhIHNlcmllcyBvZiBpbnRlcmVzdGluZywgYW5kIHBvdGVudGlhbGx5IHRyaWNreSwgaW50ZXJhY3Rpb25zLiAgTGV0J3MgYnJlYWsgZG93biBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbkZpcnN0bHksIHRoZSBtb3N0IGJhc2ljIHBvaW50OiBgYnBmX3N0cmVhbV9lbGVtX2FsbG9jYCB1c2VzIGBrbWFsbG9jX25vbG9ja2Agd2l0aCBgX19HRlBfWkVST2AuIFRoaXMgaXMgZ29vZC4gSXQgbWVhbnMgdGhhdCBhbnkgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIHN0cmVhbSBlbGVtZW50cyBpcyBndWFyYW50ZWVkIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQuICBUaGlzICpzaG91bGQqIHByZXZlbnQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiAgVGhlIGBtZW1jcHlgIGNhbGwgdGhlbiBjb3BpZXMgdGhlIHN0cmluZyBkYXRhIGludG8gdGhpcyB6ZXJvZWQgbWVtb3J5LlxuXG5UaGUgcGF0Y2gncyBjaGFuZ2Ugb2YgdGhlIGxlbmd0aCBjaGVjayB0byBgbGVuIFx1MDAzZT0gbWF4X2xlbmAgY2F0Y2hlcyBhIHN1YnRsZSBib3VuZGFyeSBjb25kaXRpb24uIEluIGBicGZfc3RyZWFtX3JlYWRgIGFmdGVyIHRoZSBjb3B5IGhhcyBiZWVuIHBlcmZvcm1lZCwgYmVjYXVzZSB3ZSBhcmUgc3RhcnRpbmcgd2l0aCBgX19HRlBfWkVST2AsIHdlIGNhbiBiZSBjb25maWRlbnQgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UuXG5cbk5vdywgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBpcyBpbiBgYnBmX3N0cmVhbV92cHJpbnRrYCwgYW5kIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgYW5kIHRoZSBhc3NvY2lhdGVkIGZ1bmN0aW9ucy4gIGBic3RyX3ByaW50ZmAgYW5kIGB2c25wcmludGZgIGFyZSBjZW50cmFsIHRvIHRoZXNlIGZ1bmN0aW9ucy4gSXQncyB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIHRoZXNlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjb25jZXJuaW5nLiBUaGV5IGNhbiByZXR1cm4gYSB2YWx1ZSBncmVhdGVyIHRoYW4gdGhlIGJ1ZmZlciBzaXplIChgTUFYX0JQUklOVEZfQlVGYCBvciBgQVJSQVlfU0laRShidWYtXHUwMDNlYnVmKWApLCBpbmRpY2F0aW5nIHRydW5jYXRpb24uICBQcmV2aW91c2x5LCB0aGlzIGxlZCB0byBwb3RlbnRpYWwgaXNzdWVzLlxuXG5JbiB0aGUgY2FzZSBvZiBgYnN0cl9wcmludGZgLCBpZiB0aGUgcmV0dXJuIHZhbHVlIChgcmV0YCkgd2FzIGdyZWF0ZXIgdGhhbiBgTUFYX0JQUklOVEZfQlVGYCwgd2UgaGFkIGFuIGlzc3VlOiB0aGUgY29kZSBjb3VsZCB0cnkgdG8gYWxsb2NhdGUgYSBzdHJlYW0gZWxlbWVudCB3aXRoIGEgc2l6ZSAobGVuKSBlcXVhbCB0byB0aGUgdHJ1bmNhdGVkIGxlbmd0aC4gVGhpcyBjb3VsZCByZXN1bHQgaW4gbGVha2luZyBtZW1vcnksIGlmIHRoZSBjaGVjayBgbGVuIFx1MDAzZSBtYXhfbGVuYCB3YXMgYnlwYXNzZWQuIFRoaXMgaGFzIGJlZW4gYWRkcmVzc2VkIGFuZCBmaXhlZC4gQWxzbyB0aGUgcGF0Y2ggaXMgcHJldmVudGluZyBhIGNhcGFjaXR5IGxlYWsgYXMgbm93IGlmIHRoZSBgX19icGZfc3RyZWFtX3B1c2hfc3RyYCByZXR1cm5zIGFuIGVycm9yLCB0aGUgY2FwYWNpdHkgdGhhdCB3YXMgY29uc3VtZWQgaXMgcmVsZWFzZWQuIEZ1cnRoZXJtb3JlLCB0aGUgbmV3IGNoZWNrIGBpZiAocmV0IFx1MDAzZT0gTUFYX0JQUklOVEZfQlVGKWAgaW4gYGJwZl9zdHJlYW1fdnByaW50a2AgYWRkcmVzc2VzIHRoaXMgYnkgcmV0dXJuaW5nIC1FMkJJRywgcHJldmVudGluZyBhbGxvY2F0aW9uIGFuZCBwdXNoaW5nIG9uIHRydW5jYXRpb24uXG5cblNpbWlsYXIgbG9naWMgYXBwbGllcyB0byBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgLCB3aGVyZSB0aGUgc2FtZSBsb2dpYyBvZiBgdnNucHJpbnRmYCwgaWYgdGhlIHJldHVybiB2YWx1ZSAobGVuKSBpcyBncmVhdGVyIHRoYW4gdGhlIGFycmF5IHNpemUgKGBBUlJBWV9TSVpFKGJ1Zi1cdTAwM2VidWYpYCkgYW5kIHRydW5jYXRpb24gb2NjdXJzLCBjb3VsZCBsZWFkIHRvIGlzc3Vlcy4gSG93ZXZlciwgdGhlIGNoZWNrIGBpZiAobGVuIFx1MDAzZSBtYXhfbGVuKWAgd2lsbCBub3QgYWxsb3cgdGhpcy4gVGhlIGB2c25wcmludGZgIGZ1bmN0aW9uIGRvZXMgd3JpdGUgdXAgdG8gdGhlIGZ1bGwgYG1heF9sZW5gLCBidXQgZG9lcyBpdCBpbml0aWFsaXplIHRoZSB3aG9sZSBidWZmZXI/IFRoZSBidWZmZXIgd2lsbCBiZSBpbml0aWFsaXplZC5cblxuTGFzdGx5LCB0aGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gYGJwZl9zdHJlYW1fcmVhZGAgZm9jdXMgb24gdGhlIHNlbWFudGljcyBvZiBgY29weV90b191c2VyYCwgYW5kIGVuc3VyaW5nIHRoYXQgd2UgZG8gbm90IGxvc2UgYW55IHN1Y2Nlc3NmdWxseSBjb3BpZWQgYnl0ZXMgaW4gY2FzZSBvZiBhbiBlcnJvci4gVGhpcyBpcyBhIHN1YnRsZSBpbXByb3ZlbWVudCBidXQgdW5yZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuSW4gc3VtbWFyeSwgdGhlIGNydWNpYWwgcG9pbnQgaXMgbWFraW5nIHN1cmUgd2UgaGFuZGxlIHRydW5jYXRpb24gY29ycmVjdGx5LiBXaXRoIHRoZSBuZXcgY2hhbmdlcywgaXQgYXBwZWFycyB0aGUgdHJ1bmNhdGlvbiBpcyBiZWluZyBoYW5kbGVkIGNvcnJlY3RseSBzbyB0aGF0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIG5vdCBjb3BpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMjAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDY6MzYuNjM1NjE2Mjc3WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg1OTM0ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBic3RyX3ByaW50ZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3N0cmluZy5oPTMzOT1pbnQgdmJpbl9wcmludGYodTMyICpiaW5fYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpO1xcbmluY2x1ZGUvbGludXgvc3RyaW5nLmg6MzQwOmludCBic3RyX3ByaW50ZihjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmbXQsIGNvbnN0IHUzMiAqYmluX2J1Zik7XFxuaW5jbHVkZS9saW51eC9zdHJpbmcuaC0zNDEtI2VuZGlmXFxuLS1cXG5saWIvdnNwcmludGYuYz0zMjU4PUVYUE9SVF9TWU1CT0xfR1BMKHZiaW5fcHJpbnRmKTtcXG4tLVxcbmxpYi92c3ByaW50Zi5jLTMyODEtICovXFxubGliL3ZzcHJpbnRmLmM6MzI4MjppbnQgYnN0cl9wcmludGYoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10X3N0ciwgY29uc3QgdTMyICpiaW5fYnVmKVxcbmxpYi92c3ByaW50Zi5jLTMyODMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0NjozOC40MjE1NTcwMTNaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1OTYzNjMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgYnN0cl9wcmludGZgKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IHRoZSBgYnN0cl9wcmludGZgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzIG9mIHRoaXMgcGFydGljdWxhciBzdHJpbmcgZm9ybWF0dGluZyBmdW5jdGlvbiwgZXNwZWNpYWxseSBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggYGJzdHJgcyAocHJlc3VtYWJseSBhIGN1c3RvbSBzdHJpbmcgdHlwZSkuIEknbGwgd2FudCB0byBxdWlja2x5IGxvb2sgZm9yIGFueSBvYnZpb3VzIHZ1bG5lcmFiaWxpdGllcywgbGlrZSBmb3JtYXQgc3RyaW5nIGJ1Z3Mgb3IgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3MgdGhhdCBtaWdodCBiZSBvdmVybG9va2VkIHdpdGggYSBuYWl2ZSBpbXBsZW1lbnRhdGlvbi4gVW5kZXJzdGFuZGluZyBob3cgdGhlIHZhcmlhZGljIGFyZ3VtZW50cyBhcmUgaGFuZGxlZCB3aXRoIHRoZSBgYnN0cmAgc3RydWN0dXJlIGlzIGtleS4gSXMgaXQganVzdCBhIHdyYXBwZXIgYXJvdW5kIGBwcmludGZgLCBvciBpcyB0aGVyZSBjbGV2ZXIgbG9naWMgdG8gYXZvaWQgY3JlYXRpbmcgdGVtcG9yYXJ5IHN0cmluZ3M/IEkgc2hvdWxkIGxvb2sgZm9yIGRldGFpbHMgbGlrZSBob3cgdGhlIGxlbmd0aCBpcyBoYW5kbGVkIGFuZCB3aGV0aGVyIHRoZXkncmUgYWxsb2NhdGluZyBhbmQgZGVhbGxvY2F0aW5nIG1lbW9yeSBwcm9wZXJseSB3aXRoaW4gdGhlIGJzdHIgZnJhbWV3b3JrLiBBbmQgaG93IGRvIGVycm9yIGNvbmRpdGlvbnMgKGxpa2UgaW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgdGhlIGZvcm1hdHRlZCBzdHJpbmcpIGdldCBhZGRyZXNzZWQ/IEknbSBob3BpbmcgZm9yIHdlbGwtZGVmaW5lZCBiZWhhdmlvcnMuIExldCdzIHNlZSBob3cgdGhleSBoYW5kbGUgZWRnZSBjYXNlcyB0b28uIEFyZSB0aGV5IHN1cHBvcnRpbmcgYWxsIHRoZSBzdGFuZGFyZCBwcmludGYgZm9ybWF0IHNwZWNpZmllcnM/IEFuZCBob3cgZG9lcyBpdCBoYW5kbGUgbG9jYWxlLXNwZWNpZmljIGZvcm1hdHRpbmc/IEl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGlzIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBpdC4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEzNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE0OjQ2OjQyLjA4MTE5NjIzNVoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL3ZzcHJpbnRmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzI4MixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzI4MjpcXHRpbnQgYnN0cl9wcmludGYoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10X3N0ciwgY29uc3QgdTMyICpiaW5fYnVmKVxcbjMyODM6XFx0e1xcbjMyODQ6XFx0XFx0c3RydWN0IGZtdCBmbXQgPSB7XFxuMzI4NTpcXHRcXHRcXHQuc3RyID0gZm10X3N0cixcXG4zMjg2OlxcdFxcdFxcdC5zdGF0ZSA9IEZPUk1BVF9TVEFURV9OT05FLFxcbjMyODc6XFx0XFx0fTtcXG4zMjg4OlxcdFxcdHN0cnVjdCBwcmludGZfc3BlYyBzcGVjID0gezB9O1xcbjMyODk6XFx0XFx0Y2hhciAqc3RyLCAqZW5kO1xcbjMyOTA6XFx0XFx0Y29uc3QgY2hhciAqYXJncyA9IChjb25zdCBjaGFyICopYmluX2J1ZjtcXG4zMjkxOlxcdFxcbjMyOTI6XFx0XFx0aWYgKFdBUk5fT05fT05DRShzaXplIFxcdTAwM2UgSU5UX01BWCkpXFxuMzI5MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4zMjk0OlxcdFxcbjMyOTU6XFx0XFx0c3RyID0gYnVmO1xcbjMyOTY6XFx0XFx0ZW5kID0gYnVmICsgc2l6ZTtcXG4zMjk3OlxcdFxcbjMyOTg6XFx0I2RlZmluZSBnZXRfYXJnKHR5cGUpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjMyOTk6XFx0KHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuMzMwMDpcXHRcXHR0eXBlb2YodHlwZSkgdmFsdWU7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjMzMDE6XFx0XFx0aWYgKHNpemVvZih0eXBlKSA9PSA4KSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjMzMDI6XFx0XFx0XFx0YXJncyA9IFBUUl9BTElHTihhcmdzLCBzaXplb2YodTMyKSk7XFx0XFx0XFx0XFxcXFxcbjMzMDM6XFx0XFx0XFx0Kih1MzIgKilcXHUwMDI2dmFsdWUgPSAqKHUzMiAqKWFyZ3M7XFx0XFx0XFx0XFx0XFxcXFxcbjMzMDQ6XFx0XFx0XFx0KigodTMyICopXFx1MDAyNnZhbHVlICsgMSkgPSAqKHUzMiAqKShhcmdzICsgNCk7XFx0XFx0XFxcXFxcbjMzMDU6XFx0XFx0fSBlbHNlIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuMzMwNjpcXHRcXHRcXHRhcmdzID0gUFRSX0FMSUdOKGFyZ3MsIHNpemVvZih0eXBlKSk7XFx0XFx0XFx0XFxcXFxcbjMzMDc6XFx0XFx0XFx0dmFsdWUgPSAqKHR5cGVvZih0eXBlKSAqKWFyZ3M7XFx0XFx0XFx0XFx0XFxcXFxcbjMzMDg6XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4zMzA5OlxcdFxcdGFyZ3MgKz0gc2l6ZW9mKHR5cGUpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4zMzEwOlxcdFxcdHZhbHVlO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4zMzExOlxcdH0pXFxuMzMxMjpcXHRcXG4zMzEzOlxcdFxcdC8qIE1ha2Ugc3VyZSBlbmQgaXMgYWx3YXlzIFxcdTAwM2U9IGJ1ZiAqL1xcbjMzMTQ6XFx0XFx0aWYgKGVuZCBcXHUwMDNjIGJ1Zikge1xcbjMzMTU6XFx0XFx0XFx0ZW5kID0gKCh2b2lkICopLTEpO1xcbjMzMTY6XFx0XFx0XFx0c2l6ZSA9IGVuZCAtIGJ1ZjtcXG4zMzE3OlxcdFxcdH1cXG4zMzE4OlxcdFxcbjMzMTk6XFx0XFx0d2hpbGUgKCpmbXQuc3RyKSB7XFxuMzMyMDpcXHRcXHRcXHRjb25zdCBjaGFyICpvbGRfZm10ID0gZm10LnN0cjtcXG4zMzIxOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbG9uZyBudW07XFxuMzMyMjpcXHRcXG4zMzIzOlxcdFxcdFxcdGZtdCA9IGZvcm1hdF9kZWNvZGUoZm10LCBcXHUwMDI2c3BlYyk7XFxuMzMyNDpcXHRcXHRcXHRzd2l0Y2ggKGZtdC5zdGF0ZSkge1xcbjMzMjU6XFx0XFx0XFx0Y2FzZSBGT1JNQVRfU1RBVEVfTk9ORToge1xcbjMzMjY6XFx0XFx0XFx0XFx0aW50IHJlYWQgPSBmbXQuc3RyIC0gb2xkX2ZtdDtcXG4zMzI3OlxcdFxcdFxcdFxcdGlmIChzdHIgXFx1MDAzYyBlbmQpIHtcXG4zMzI4OlxcdFxcdFxcdFxcdFxcdGludCBjb3B5ID0gcmVhZDtcXG4zMzI5OlxcdFxcdFxcdFxcdFxcdGlmIChjb3B5IFxcdTAwM2UgZW5kIC0gc3RyKVxcbjMzMzA6XFx0XFx0XFx0XFx0XFx0XFx0Y29weSA9IGVuZCAtIHN0cjtcXG4zMzMxOlxcdFxcdFxcdFxcdFxcdG1lbWNweShzdHIsIG9sZF9mbXQsIGNvcHkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNDo0Njo0Mi4wODE0MTg5MTVaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk0Nzg5NTY2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgQlBGIFN0cmVhbSBQYXRjaDogTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIHNvbWUga2V5IGFyZWFzIGluIHRoZSBCUEYgc3RyZWFtIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGZvcm1hdHRpbmcgb3V0cHV0IHdpdGggYGJzdHJfcHJpbnRmYCBhbmQgYHZzY25wcmludGZgLCBhbGxvY2F0aW5nIHN0cmVhbSBlbGVtZW50cywgYW5kIHJlYWRpbmcgZGF0YSBmcm9tIHRob3NlIGVsZW1lbnRzLiBNeSBpbml0aWFsIGNvbmNlcm4gd2FzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZml4IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQWZ0ZXIgY2FyZWZ1bCByZXZpZXcsIEknbSBjb25maWRlbnQgdGhhdCdzIG5vdCB0aGUgY2FzZS5cblxuVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gc3RlbSBmcm9tIGhvdyB0aGUgc3RyZWFtJ3MgY2FwYWNpdHkgaXMgbWFuYWdlZCBhbmQgaG93IHN0cmluZyBsZW5ndGhzIGFyZSBoYW5kbGVkIGluIHJlbGF0aW9uIHRvIGJ1ZmZlciBzaXplcy4gVGhlIHBhdGNoIGFkanVzdHMgdGhlIGNvbmRpdGlvbiBgbGVuIFx1MDAzYyAwIHx8IGxlbiBcdTAwM2UgbWF4X2xlbmAgdG8gYGxlbiBcdTAwM2MgMCB8fCBsZW4gXHUwMDNlPSBtYXhfbGVuYCBpbiBzZXZlcmFsIHBsYWNlcy4gVGhpcyBjaGFuZ2UsIGFsb25nIHdpdGggdGhlIGNoYW5nZXMgdG8gYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCBhbmQgYGJwZl9zdHJlYW1fcmVhZGAgYXJlIHByaW1hcmlseSBkZWFsaW5nIHdpdGggY29ybmVyIGNhc2VzIHdoZXJlIHRoZSBmb3JtYXR0ZWQgc3RyaW5nIGNvdWxkIGJlIHRydW5jYXRlZCwgb3ZlcnNpemVkLCBvciBwYXJ0aWFsbHkgY29waWVkIHRvIHVzZXIgc3BhY2UuIEl0IGFpbXMgdG8gcHJldmVudCBhIHJlc291cmNlIGxlYWsgYW5kIGF2b2lkIHNlbmRpbmcgYSBOVUwgYnl0ZSB0byB1c2VyIHNwYWNlLlxuXG5TcGVjaWZpY2FsbHksIEnigJl2ZSBjb25zaWRlcmVkIHRoZXNlIHBvaW50czpcblxuKiAgICoqQ2FwYWNpdHkgTWFuYWdlbWVudDoqKiBUaGUgcGF0Y2ggbm93IGNvcnJlY3RseSBoYW5kbGVzIGNhc2VzIHdoZXJlIGEgZm9ybWF0dGVkIHN0cmluZyBpcyB0b28gbGFyZ2UgdG8gZml0IGluIHRoZSBidWZmZXIsIGVpdGhlciBieSByZWplY3RpbmcgdGhlIHN0cmluZyBvciByZWxlYXNpbmcgdGhlIGNvbnN1bWVkIGNhcGFjaXR5LiBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSByaXNrIG9mIGluY29ycmVjdGx5IGluY3JlbWVudGluZyB0aGUgc3RyZWFtJ3MgbGVuZ3RoIHdpdGhvdXQgYW4gYWN0dWFsIHB1c2guIFRoZSBwYXRjaCBhbHNvIGZpeGVkIGEgY2FwYWNpdHkgbGVhayBpbiB0aGUgb3ZlcmZsb3cgY2FzZS5cbiogICAqKk5VTCBCeXRlIEluY2x1c2lvbjoqKiBUaGUgb2xkIGNvZGUgd2FzIGluYWR2ZXJ0ZW50bHkgY29weWluZyB0aGUgdHJhaWxpbmcgTlVMIGJ5dGUgZnJvbSB0aGUgZm9ybWF0dGluZyBidWZmZXIgaW50byB0aGUgc3RyZWFtIGVsZW1lbnQgaW4gdGhlIGVkZ2UgY2FzZSB3aGVyZSB0aGUgbGVuZ3RoIHdhcyB0aGUgYnVmZmVyJ3MgZnVsbCBsZW5ndGguIFRoaXMgcGF0Y2ggZWxpbWluYXRlcyB0aGlzIGFuZCBwcmV2ZW50cyBhIHRyYWlsaW5nIE5VTCBmcm9tIHRoZSBzdHJlYW0uXG4qICAgKipFcnJvciBIYW5kbGluZyBpbiBgYnBmX3N0cmVhbV9zdGFnZV9wcmludGtgOioqIGB2c25wcmludGZgIG5vdyByZXR1cm5zIGl0cyBjb3JyZWN0IGxlbmd0aCBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4gd2hpY2ggY291bGQgYmUgdmVyeSBsYXJnZSBpZiB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgZm9ybWF0dGluZyBzdHJpbmcuIFRoZSBwYXRjaCBub3cgY29ycmVjdGx5IGhhbmRsZXMgZmFpbHVyZSBzY2VuYXJpb3MgaW4gYF9fYnBmX3N0cmVhbV9wdXNoX3N0cmAsIGVuc3VyaW5nIHRoYXQgYHNzLVx1MDAzZWxlbmAgaXMgb25seSBpbmNyZW1lbnRlZCBvbiBzdWNjZXNzZnVsIHB1c2ggYW5kIGRvZXNuJ3QgbGVhayBjYXBhY2l0eS5cbiogICAqKlBhcnRpYWwgYGNvcHlfdG9fdXNlcmAgRmF1bHRzOioqIFRoZSBgYnBmX3N0cmVhbV9yZWFkYCBmdW5jdGlvbiB3YXMgbm90IGNvcnJlY3RseSBhY2NvdW50aW5nIGZvciBwYXJ0aWFsbHkgY29waWVkIGJ5dGVzIGluIGNhc2Ugb2YgYSBmYXVsdC4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIHBhcnRpYWxseSB3cml0dGVuIGJ5dGVzLlxuXG5JbiBhbGwgb2YgdGhlc2Ugc2NlbmFyaW9zLCB0aGUgbWVtb3J5IGlzIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5LiBUaGUgYWxsb2NhdGlvbiBvZiBzdHJlYW0gZWxlbWVudHMgdXNpbmcgYGttYWxsb2Nfbm9sb2NrYCB3aXRoIGBfX0dGUF9aRVJPYCBlbnN1cmVzIHRoYXQgbWVtb3J5IGlzIHplcm9lZC4gRnVydGhlciwgd2hlbiBwdXNoaW5nIHN0cmluZ3MgaW50byB0aGUgZWxlbWVudHMsIGBtZW1jcHlgIGlzIHVzZWQgdG8gY29weSBkYXRhIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBmdWxseSBpbml0aWFsaXplZCBieSBlaXRoZXIgYGJzdHJfcHJpbnRmYCBvciBgdnNjbnByaW50ZmAuIFRoZXJlIGFyZSBjaGVja3MgaW4gcGxhY2UgdG8gcHJldmVudCB0aGUgY29weSBvZiB1bmluaXRpYWxpemVkIGRhdGEgaW4gdGhlIHNjZW5hcmlvIG9mIGEgbGFyZ2UgcmV0dXJuIHZhbHVlIGZyb20gYGJzdHJfcHJpbnRmYC4gSSd2ZSBjYXJlZnVsbHkgZ29uZSB0aHJvdWdoIHRoZSB2YXJpb3VzIGNoZWNrcyBhcm91bmQgdGhlIHJldHVybiB2YWx1ZXMgb2YgdGhlc2UgZm9ybWF0dGluZyBmdW5jdGlvbnMgYW5kIHRoZSBzaXplIGNoZWNrcyBiZWZvcmUgbWVtb3J5IGNvcGllczsgdGhleSBhcmUgc3VmZmljaWVudC5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgY2hhbmdlcyBkZWFsIHdpdGggcmVzb3VyY2UgbWFuYWdlbWVudCwgZXJyb3IgaGFuZGxpbmcsIGFuZCBhdm9pZGluZyB0aGUgbGVhay9jb3B5IG9mIHRoZSBudWxsIHRlcm1pbmF0b3IsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEtNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSB0aGUgYnVnIGZpeGVzIGFyZSBtYWlubHkgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMuIFRoZSBpbmNsdWRlZCBzZWxmdGVzdHMgYW5kIGV4aXN0aW5nIGtlcm5lbCB0ZXN0aW5nIHdpbGwgYmUgYWJsZSB0byBjYXRjaCB0aGUgaXNzdWVzIGJlaW5nIHJlc29sdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE3OCwiT3V0cHV0VG9rZW5zIjoyNTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTQ6NDc6MzEuNTYwMzc5MjI4WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgc2V2ZXJhbCBsb2dpYyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCBidWdzIGluIHRoZSBCUEYgc3RyZWFtIGltcGxlbWVudGF0aW9uOlxcbjEuIEl0IGZpeGVzIGEgY2FwYWNpdHkgbGVhayB3aGVyZSBvdmVyc2l6ZWQgb3IgdHJ1bmNhdGVkIHN0cmluZ3Mgd291bGQgY29uc3VtZSBzdHJlYW0gY2FwYWNpdHkgYnV0IGZhaWwgdG8gYWxsb2NhdGUgYW4gZWxlbWVudCwgcGVybWFuZW50bHkgcmVkdWNpbmcgYXZhaWxhYmxlIGNhcGFjaXR5LlxcbjIuIEl0IHByZXZlbnRzIHRoZSBpbmNsdXNpb24gb2YgdGhlIHRyYWlsaW5nIE5VTCBieXRlIGluIHRoZSBzdHJlYW0gcGF5bG9hZCB3aGVuIHRoZSBmb3JtYXR0ZWQgc3RyaW5nIGV4YWN0bHkgbWF0Y2hlcyB0aGUgYnVmZmVyIHNpemUuXFxuMy4gSXQgZml4ZXMgYGJwZl9zdHJlYW1fc3RhZ2VfcHJpbnRrYCB0byBvbmx5IGluY3JlbWVudCB0aGUgc3RyZWFtIGxlbmd0aCBpZiB0aGUgc3RyaW5nIHdhcyBzdWNjZXNzZnVsbHkgcHVzaGVkLlxcbjQuIEl0IGNvcnJlY3RzIHRoZSBoYW5kbGluZyBvZiBwYXJ0aWFsIGBjb3B5X3RvX3VzZXJgIGZhdWx0cyBpbiBgYnBmX3N0cmVhbV9yZWFkYCB0byBwcm9wZXJseSBhY2NvdW50IGZvciBzdWNjZXNzZnVsbHkgY29waWVkIGJ5dGVzLlxcblxcbk5vbmUgb2YgdGhlc2UgaXNzdWVzIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBzdHJlYW0gZWxlbWVudHMgYXJlIGFsbG9jYXRlZCB3aXRoIGBfX0dGUF9aRVJPYCwgYW5kIHRoZSBzdHJpbmdzIGNvcGllZCBpbnRvIHRoZW0gYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGBic3RyX3ByaW50ZmAgb3IgYHZzY25wcmludGZgLiBUaGUgY29waWVkIGxlbmd0aCBpcyBzdHJpY3RseSBib3VuZGVkIGJ5IHRoZSBpbml0aWFsaXplZCBzdHJpbmcgbGVuZ3RoLiBUaGUgYnVncyBmaXhlZCBhcmUgbG9naWMgZXJyb3JzLCByZXNvdXJjZSBsZWFrcywgYW5kIGluY29ycmVjdCBlcnJvciBoYW5kbGluZywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSB0aGUgYWRkZWQgc2VsZnRlc3RzIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyB0b29scy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHNldmVyYWwgbG9naWMgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgYnVncyBpbiB0aGUgQlBGIHN0cmVhbSBpbXBsZW1lbnRhdGlvbjpcXG4xLiBJdCBmaXhlcyBhIGNhcGFjaXR5IGxlYWsgd2hlcmUgb3ZlcnNpemVkIG9yIHRydW5jYXRlZCBzdHJpbmdzIHdvdWxkIGNvbnN1bWUgc3RyZWFtIGNhcGFjaXR5IGJ1dCBmYWlsIHRvIGFsbG9jYXRlIGFuIGVsZW1lbnQsIHBlcm1hbmVudGx5IHJlZHVjaW5nIGF2YWlsYWJsZSBjYXBhY2l0eS5cXG4yLiBJdCBwcmV2ZW50cyB0aGUgaW5jbHVzaW9uIG9mIHRoZSB0cmFpbGluZyBOVUwgYnl0ZSBpbiB0aGUgc3RyZWFtIHBheWxvYWQgd2hlbiB0aGUgZm9ybWF0dGVkIHN0cmluZyBleGFjdGx5IG1hdGNoZXMgdGhlIGJ1ZmZlciBzaXplLlxcbjMuIEl0IGZpeGVzIGBicGZfc3RyZWFtX3N0YWdlX3ByaW50a2AgdG8gb25seSBpbmNyZW1lbnQgdGhlIHN0cmVhbSBsZW5ndGggaWYgdGhlIHN0cmluZyB3YXMgc3VjY2Vzc2Z1bGx5IHB1c2hlZC5cXG40LiBJdCBjb3JyZWN0cyB0aGUgaGFuZGxpbmcgb2YgcGFydGlhbCBgY29weV90b191c2VyYCBmYXVsdHMgaW4gYGJwZl9zdHJlYW1fcmVhZGAgdG8gcHJvcGVybHkgYWNjb3VudCBmb3Igc3VjY2Vzc2Z1bGx5IGNvcGllZCBieXRlcy5cXG5cXG5Ob25lIG9mIHRoZXNlIGlzc3VlcyBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgc3RyZWFtIGVsZW1lbnRzIGFyZSBhbGxvY2F0ZWQgd2l0aCBgX19HRlBfWkVST2AsIGFuZCB0aGUgc3RyaW5ncyBjb3BpZWQgaW50byB0aGVtIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBgYnN0cl9wcmludGZgIG9yIGB2c2NucHJpbnRmYC4gVGhlIGNvcGllZCBsZW5ndGggaXMgc3RyaWN0bHkgYm91bmRlZCBieSB0aGUgaW5pdGlhbGl6ZWQgc3RyaW5nIGxlbmd0aC4gVGhlIGJ1Z3MgZml4ZWQgYXJlIGxvZ2ljIGVycm9ycywgcmVzb3VyY2UgbGVha3MsIGFuZCBpbmNvcnJlY3QgZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgdGhlIGFkZGVkIHNlbGZ0ZXN0cyBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgdG9vbHMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow65nc5[1] Phase: Succeeded StartedAt: 2026-08-23 14:47:42 +0000 UTC FinishedAt: 2026-08-23 14:47:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-23 14:47:42 +0000 UTC FinishedAt: 2026-08-23 14:47:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[2] Phase: Succeeded StartedAt: 2026-08-23 14:47:42 +0000 UTC FinishedAt: 2026-08-23 18:29:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-23 14:47:42 +0000 UTC FinishedAt: 2026-08-23 18:29:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-23 14:47:42 +0000 UTC FinishedAt: 2026-08-23 14:47:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-23 14:47:42 +0000 UTC FinishedAt: 2026-08-23 14:47:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow65nc5/series-workflow65nc5-convert-artifact-2033732216/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-23 14:47:52 +0000 UTC FinishedAt: 2026-08-23 15:03:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-23 14:47:52 +0000 UTC FinishedAt: 2026-08-23 15:03:41 +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:*5c7c530e-61d9-4476-af5b-3344ef0e5f1e,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-workflow65nc5/series-workflow65nc5-convert-artifact-2033732216/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": "34786e14-2142-4f79-a857-af600d6c0ee6", "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-workflow65nc5/series-workflow65nc5-build-action-1370361646/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-23 14:47:52 +0000 UTC FinishedAt: 2026-08-23 15:03:31 +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:*5c7c530e-61d9-4476-af5b-3344ef0e5f1e,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-workflow65nc5/series-workflow65nc5-convert-artifact-2033732216/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": "34786e14-2142-4f79-a857-af600d6c0ee6", "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-workflow65nc5/series-workflow65nc5-build-action-1370361646/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-23 15:03:41 +0000 UTC FinishedAt: 2026-08-23 15:03:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-23 15:03:41 +0000 UTC FinishedAt: 2026-08-23 15:03:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-23 15:03:41 +0000 UTC FinishedAt: 2026-08-23 15:03:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-23 15:03:41 +0000 UTC FinishedAt: 2026-08-23 15:03:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow65nc5/series-workflow65nc5-convert-artifact-2126232031/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-23 15:03:51 +0000 UTC FinishedAt: 2026-08-23 15:05:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-23 15:03:51 +0000 UTC FinishedAt: 2026-08-23 15:05:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*34786e14-2142-4f79-a857-af600d6c0ee6,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-workflow65nc5/series-workflow65nc5-build-action-1370361646/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-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-23 15:05:56 +0000 UTC FinishedAt: 2026-08-23 15:05:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-23 15:05:56 +0000 UTC FinishedAt: 2026-08-23 15:05:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-23 15:05:56 +0000 UTC FinishedAt: 2026-08-23 15:21:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-23 15:05:56 +0000 UTC FinishedAt: 2026-08-23 15:21:44 +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:*5c7c530e-61d9-4476-af5b-3344ef0e5f1e,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-workflow65nc5/series-workflow65nc5-convert-artifact-2126232031/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": "c535ca44-649e-4922-8ed3-0daf36ef921d", "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-workflow65nc5/series-workflow65nc5-build-action-3465299827/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-23 15:05:56 +0000 UTC FinishedAt: 2026-08-23 15:21:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5c7c530e-61d9-4476-af5b-3344ef0e5f1e,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-workflow65nc5/series-workflow65nc5-convert-artifact-2126232031/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": "c535ca44-649e-4922-8ed3-0daf36ef921d", "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-workflow65nc5/series-workflow65nc5-build-action-3465299827/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-23 15:21:44 +0000 UTC FinishedAt: 2026-08-23 15:21:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-23 15:21:44 +0000 UTC FinishedAt: 2026-08-23 15:21:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-23 15:21:44 +0000 UTC FinishedAt: 2026-08-23 15:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-23 15:21:44 +0000 UTC FinishedAt: 2026-08-23 15:23:37 +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:*c535ca44-649e-4922-8ed3-0daf36ef921d,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-workflow65nc5/series-workflow65nc5-build-action-3465299827/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-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-23 15:23:47 +0000 UTC FinishedAt: 2026-08-23 18:29:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-23 15:23:47 +0000 UTC FinishedAt: 2026-08-23 18:29:16 +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_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"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:*34786e14-2142-4f79-a857-af600d6c0ee6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c535ca44-649e-4922-8ed3-0daf36ef921d,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-workflow65nc5/series-workflow65nc5-build-action-1370361646/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-workflow65nc5/series-workflow65nc5-build-action-3465299827/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-23 15:23:47 +0000 UTC FinishedAt: 2026-08-23 15:23:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-23 15:23:47 +0000 UTC FinishedAt: 2026-08-23 15:23:52 +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_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"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-workflow65nc5/series-workflow65nc5-convert-artifact-2025431288/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-23 15:23:47 +0000 UTC FinishedAt: 2026-08-23 15:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-23 15:23:47 +0000 UTC FinishedAt: 2026-08-23 15:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-23 15:23:47 +0000 UTC FinishedAt: 2026-08-23 15:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-23 15:23:57 +0000 UTC FinishedAt: 2026-08-23 18:29:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65nc5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_stream_read","bpf_stream_vprintk","bpf_stream_stage_printk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fedc88e38ce979a720cd2de042578cb5df3dc8de","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8ab10b28-49cb-4e3f-a435-1066a6b7a5c1","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-23 15:23:57 +0000 UTC FinishedAt: 2026-08-23 18:29:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*34786e14-2142-4f79-a857-af600d6c0ee6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c535ca44-649e-4922-8ed3-0daf36ef921d,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-workflow65nc5/series-workflow65nc5-build-action-1370361646/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-workflow65nc5/series-workflow65nc5-build-action-3465299827/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-workflow65nc5/series-workflow65nc5-convert-artifact-2025431288/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,}