Name: series-workflow9d9jg Phase: Succeeded StartedAt: 2026-08-29 13:38:12 +0000 UTC FinishedAt: 2026-08-29 17:36:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[0] Phase: Succeeded StartedAt: 2026-08-29 13:38:12 +0000 UTC FinishedAt: 2026-08-29 13:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[0].run-triage Phase: Succeeded StartedAt: 2026-08-29 13:38:12 +0000 UTC FinishedAt: 2026-08-29 13:55:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "0685630fdccb62dcb0e3f44525a40578da5f6dc8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "0685630fdccb62dcb0e3f44525a40578da5f6dc8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET" ], "series_id": "0bafdece-bf48-419f-944d-0796e0f7ca0c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_rcv_state_process" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfcmN2X3N0YXRlX3Byb2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIGlucHV0IHNlcXVlbmNlIHZhbGlkYXRpb24gaW4gYHRjcF9zZXF1ZW5jZSgpYCBieSBhZGRpbmcgYSBjb25kaXRpb24gdG8gZHJvcCBpbmNvbWluZyBwYWNrZXRzIHdob3NlIGVuZCBzZXF1ZW5jZSBlcXVhbHMgYHRwLVx1MDAzZXJjdl93dXBgICh3aGVuIGNhcnJ5aW5nIHBheWxvYWQgd2l0aG91dCBTWU4vRklOIGZsYWdzKSBhcyBgU0tCX0RST1BfUkVBU09OX1RDUF9PTERfU0VRVUVOQ0VgLlxuXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWRqdXN0cyBUQ1AgcHJvdG9jb2wgc2VxdWVuY2UgbnVtYmVyIHZhbGlkYXRpb24gbG9naWMgYW5kIHJldHVybiBjb2Rlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGNvcHlpbmcgb2Yga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkuIFRoZXJlZm9yZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBUQ1Agc2VxdWVuY2UgdmFsaWRhdGlvbiBsb2dpYyBpbiB0Y3Bfc2VxdWVuY2UoKSB3aXRoaW4gbmV0L2lwdjQvdGNwX2lucHV0LmMgdG8gZHJvcCBwYWNrZXRzIHdpdGggb2xkIHNlcXVlbmNlIG51bWJlcnMgd2hlbiBlbmRfc2VxIGVxdWFscyByY3Zfd3VwIGZvciBub24tZW1wdHkgcGFja2V0cyB3aXRob3V0IFNZTi9GSU4gZmxhZ3MuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBhZmZlY3RpbmcgVENQIHBhY2tldCBwcm9jZXNzaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzdjZjViOTVmMGIxNDVkODEzOGY5OTEwMmM5ZjI2YzU4OTJkOTZiNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDEzOjUzOjEzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcbmluZGV4IGRhZmY5M2Q1MTM0MjguLjE5OTEyODVhYTAzZTMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcbkBAIC00ODQ0LDcgJiM0Mzs0ODQ0LDExIEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3Bfc2VxdWVuY2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4gXHR1MzIgc2VxX2xpbWl0O1xuIFxuLVx0aWYgKGJlZm9yZShlbmRfc2VxLCB0cC1cdTAwM2VyY3Zfd3VwKSlcbiYjNDM7XHRpZiAoYmVmb3JlKGVuZF9zZXEsIHRwLVx1MDAzZXJjdl93dXApIHx8XG4mIzQzO1x0ICAgIChlbmRfc2VxID09IHRwLVx1MDAzZXJjdl93dXAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICBzZXEgIT0gZW5kX3NlcSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICF0aC1cdTAwM2VzeW4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAhdGgtXHUwMDNlZmluKSlcbiBcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9UQ1BfT0xEX1NFUVVFTkNFO1xuIFxuIFx0c2VxX2xpbWl0ID0gdHAtXHUwMDNlcmN2X254dCAmIzQzOyB0Y3BfbWF4X3JlY2VpdmVfd2luZG93KHRwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX3Jjdl9zdGF0ZV9wcm9jZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFRDUCBzZXF1ZW5jZSB2YWxpZGF0aW9uIGxvZ2ljIGluIHRjcF9zZXF1ZW5jZSgpIHdpdGhpbiBuZXQvaXB2NC90Y3BfaW5wdXQuYyB0byBkcm9wIHBhY2tldHMgd2l0aCBvbGQgc2VxdWVuY2UgbnVtYmVycyB3aGVuIGVuZF9zZXEgZXF1YWxzIHJjdl93dXAgZm9yIG5vbi1lbXB0eSBwYWNrZXRzIHdpdGhvdXQgU1lOL0ZJTiBmbGFncy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGFmZmVjdGluZyBUQ1AgcGFja2V0IHByb2Nlc3NpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjN2NmNWI5NWYwYjE0NWQ4MTM4Zjk5MTAyYzlmMjZjNTg5MmQ5NmI1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMTM6NTM6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCmluZGV4IGRhZmY5M2Q1MTM0MjguLjE5OTEyODVhYTAzZTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCkBAIC00ODQ0LDcgJiM0Mzs0ODQ0LDExIEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3Bfc2VxdWVuY2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCWNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXUzMiBzZXFfbGltaXQ7CiAKLQlpZiAoYmVmb3JlKGVuZF9zZXEsIHRwLSZndDtyY3Zfd3VwKSkKJiM0MzsJaWYgKGJlZm9yZShlbmRfc2VxLCB0cC0mZ3Q7cmN2X3d1cCkgfHwKJiM0MzsJICAgIChlbmRfc2VxID09IHRwLSZndDtyY3Zfd3VwICZhbXA7JmFtcDsKJiM0MzsJICAgICBzZXEgIT0gZW5kX3NlcSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgIXRoLSZndDtzeW4gJmFtcDsmYW1wOwomIzQzOwkgICAgICF0aC0mZ3Q7ZmluKSkKIAkJcmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9UQ1BfT0xEX1NFUVVFTkNFOwogCiAJc2VxX2xpbWl0ID0gdHAtJmd0O3Jjdl9ueHQgJiM0MzsgdGNwX21heF9yZWNlaXZlX3dpbmRvdyh0cCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZXZpZXdpbmcgdGhpczoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgYGRpZmZgIGhlcmUsIGFuZCBpdCYjMzk7cyBwb2ludGluZyB0byBhIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBgdGNwX3NlcXVlbmNlKClgIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNoYW5nZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki4KCkZpcnN0LCBJJiMzOTtsbCBleGFtaW5lIHRoZSBkaWZmIGl0c2VsZi4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGUgc3BlY2lmaWMgbGluZXMgdGhhdCB3ZXJlIGFkZGVkLCByZW1vdmVkLCBvciBtb2RpZmllZCB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCB0aGUgY29udGV4dCBvZiB0aGUgY2hhbmdlLiAKCkkmIzM5O2xsIGFsc28gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBpdHNlbGYgaW4gZGV0YWlsLiBNeSBwcmVmZXJyZWQgYXBwcm9hY2ggd2lsbCBiZSB0byByZWFkIHRoZSByZWxldmFudCBzZWN0aW9uIG9mIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AgYXJvdW5kIHRoZSBgdGNwX3NlcXVlbmNlKClgIGZ1bmN0aW9uLiBUaGlzIHdpbGwgaGVscCBtZSB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiYjMzk7cyByZXNwb25zaWJpbGl0eSB3aXRoaW4gdGhlIFRDUC9JUCBzdGFjay4KCkZpbmFsbHksIEkgd2lsbCB3YW50IHRvIHJlYWQgdGhlIGVudGlyZSBmaWxlLCBpbiBjYXNlIHRoZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBzb3VyY2UgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDgzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0ODM1Olx0ICogb2YgUkNWLk5YVC4gUGVlciBzdGlsbCBkaWQgbm90IGFkdmFuY2UgaGlzIFNORC5VTkEgd2hlbiB3ZVxuNDgzNjpcdCAqIGRlbGF5ZWQgQUNLLCBzbyB0aGF0IGhpc1NORC5VTkFcdTAwM2M9b3VyUkNWLldVUC5cbjQ4Mzc6XHQgKiAoYm9ycm93ZWQgZnJvbSBmcmVlYnNkKVxuNDgzODpcdCAqL1xuNDgzOTpcdFxuNDg0MDpcdHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3Bfc2VxdWVuY2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuNDg0MTpcdFx0XHRcdFx0XHQgdTMyIHNlcSwgdTMyIGVuZF9zZXEsXG40ODQyOlx0XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aClcbjQ4NDM6XHR7XG40ODQ0Olx0XHRjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbjQ4NDU6XHRcdHUzMiBzZXFfbGltaXQ7XG40ODQ2Olx0XG40ODQ3Olx0XHRpZiAoYmVmb3JlKGVuZF9zZXEsIHRwLVx1MDAzZXJjdl93dXApIHx8XG40ODQ4Olx0XHQgICAgKGVuZF9zZXEgPT0gdHAtXHUwMDNlcmN2X3d1cCBcdTAwMjZcdTAwMjZcbjQ4NDk6XHRcdCAgICAgc2VxICE9IGVuZF9zZXEgXHUwMDI2XHUwMDI2XG40ODUwOlx0XHQgICAgICF0aC1cdTAwM2VzeW4gXHUwMDI2XHUwMDI2XG40ODUxOlx0XHQgICAgICF0aC1cdTAwM2VmaW4pKVxuNDg1MjpcdFx0XHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1RDUF9PTERfU0VRVUVOQ0U7XG40ODUzOlx0XG40ODU0Olx0XHRzZXFfbGltaXQgPSB0cC1cdTAwM2VyY3Zfbnh0ICYjNDM7IHRjcF9tYXhfcmVjZWl2ZV93aW5kb3codHApO1xuNDg1NTpcdFx0aWYgKHVubGlrZWx5KGFmdGVyKGVuZF9zZXEsIHNlcV9saW1pdCkpKSB7XG40ODU2Olx0XHRcdC8qIFNvbWUgc3RhY2tzIGFyZSBrbm93biB0byBoYW5kbGUgRklOIGluY29ycmVjdGx5OyBhbGxvdyB0aGVcbjQ4NTc6XHRcdFx0ICogRklOIHRvIGV4dGVuZCBiZXlvbmQgdGhlIHdpbmRvdyBhbmQgY2hlY2sgaXQgaW4gZGV0YWlsIGxhdGVyLlxuNDg1ODpcdFx0XHQgKi9cbjQ4NTk6XHRcdFx0aWYgKCFhZnRlcihlbmRfc2VxIC0gdGgtXHUwMDNlZmluLCBzZXFfbGltaXQpKVxuNDg2MDpcdFx0XHRcdHJldHVybiBTS0JfTk9UX0RST1BQRURfWUVUO1xuNDg2MTpcdFxuNDg2MjpcdFx0XHRpZiAoYWZ0ZXIoc2VxLCBzZXFfbGltaXQpKVxuNDg2MzpcdFx0XHRcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX0lOVkFMSURfU0VRVUVOQ0U7XG40ODY0Olx0XG40ODY1Olx0XHRcdC8qIE9ubHkgYWNjZXB0IHRoaXMgcGFja2V0IGlmIHJlY2VpdmUgcXVldWUgaXMgZW1wdHkuICovXG40ODY2Olx0XHRcdGlmIChza2JfcXVldWVfbGVuKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKVxuNDg2NzpcdFx0XHRcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX0lOVkFMSURfRU5EX1NFUVVFTkNFO1xuNDg2ODpcdFx0fVxuNDg2OTpcdFxuNDg3MDpcdFx0cmV0dXJuIFNLQl9OT1RfRFJPUFBFRF9ZRVQ7XG40ODcxOlx0fVxuNDg3MjpcdFxuNDg3MzpcdFxuNDg3NDpcdHZvaWQgdGNwX2RvbmVfd2l0aF9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXG40ODc1Olx0e1xuNDg3NjpcdFx0LyogVGhpcyBiYXJyaWVyIGlzIGNvdXBsZWQgd2l0aCBzbXBfcm1iKCkgaW4gdGNwX3BvbGwoKSAqL1xuNDg3NzpcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19lcnIsIGVycik7XG40ODc4Olx0XHRzbXBfd21iKCk7XG40ODc5Olx0XG40ODgwOlx0XHR0Y3Bfd3JpdGVfcXVldWVfcHVyZ2Uoc2spO1xuNDg4MTpcdFx0dGNwX2RvbmUoc2spO1xuNDg4MjpcdFxuNDg4MzpcdFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXG40ODg0Olx0XHRcdHNrX2Vycm9yX3JlcG9ydChzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMxNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYHRjcF9zZXF1ZW5jZWAgVXNhZ2UqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBmb3IgYHRjcF9zZXF1ZW5jZWAuIFNpbmNlIEkmIzM5O20ga25lZS1kZWVwIGluIHRoZSBrZXJuZWwmIzM5O3MgVENQIGltcGxlbWVudGF0aW9uLCBteSBmaXJzdCBtb3ZlIGlzIHRvIHBpbnBvaW50IGl0cyB1c2FnZSB3aXRoaW4gYHRjcF9pbnB1dC5jYC4gSSYjMzk7bSBnb2luZyB0byBsZXZlcmFnZSBteSB0cnVzdHkgYGdyZXBgIHNraWxscyB0byBxdWlja2x5IGZpbmQgYWxsIGluc3RhbmNlcyB3aGVyZSBgdGNwX3NlcXVlbmNlYCBpcyBpbnZva2VkIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgZmlsZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVncmF0ZXMgaW50byB0aGUgcGFja2V0IHByb2Nlc3NpbmcgZmxvdy4gRXNzZW50aWFsbHksIEkmIzM5O20gYWltaW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gV2hhdCBmdW5jdGlvbnMgY2FsbCBpdD8gV2hhdCBhcmUgdGhlIGNvbnRleHRzIHdoZXJlIGl0IGlzIGJlaW5nIHVzZWQ/IEFuZCBmcm9tIHRob3NlIGNvbnRleHRzLCBob3cgaXQgY2hhbmdlcyBiYXNlZCBvbiBjb250cm9sIGZsb3c/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX3NlcXVlbmNlXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmM9NDc5MT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX2Rpc29yZGVyZWRfYWNrX2NoZWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00ODM5LVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NDg0MDpzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX3NlcXVlbmNlKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4NDEtXHRcdFx0XHRcdCB1MzIgc2VxLCB1MzIgZW5kX3NlcSxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz02MzI2PXN0YXRpYyBib29sIHRjcF92YWxpZGF0ZV9pbmNvbWluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM2My1cdC8qIFN0ZXAgMTogY2hlY2sgc2VxdWVuY2UgbnVtYmVyICovXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2MzY0Olx0cmVhc29uID0gdGNwX3NlcXVlbmNlKHNrLCBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlc2VxLFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM2NS1cdFx0XHQgICAgICBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSwgdGgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MzgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gdGhlIENhbGwgU3RhY2sgb2YgYHRjcF92YWxpZGF0ZV9pbmNvbWluZ2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IG9mIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIGFsd2F5cyB0byB0cmFjZSB0aGUgY2FsbHMsIHJpZ2h0PyBUaGUga2V5IGlzIGZpZ3VyaW5nIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQgZnJvbS4gVW5kZXJzdGFuZGluZyB0aGUgdXBzdHJlYW0gY2FsbGVycyB3aWxsIGdpdmUgbWUgdGhlIGNydWNpYWwgaW5zaWdodCBpbnRvICp3aHkqIHRoaXMgdmFsaWRhdGlvbiBpcyBoYXBwZW5pbmcsIHdoYXQga2luZCBvZiBkYXRhIGlzIGJlaW5nIHZhbGlkYXRlZCwgYW5kIHdoYXQgYXNzdW1wdGlvbnMgYXJlIGJlaW5nIG1hZGUgYWJvdXQgdGhlIGluY29taW5nIFRDUCBkYXRhLiBLbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyB3aWxsIGltbWVkaWF0ZWx5IGlsbHVtaW5hdGUgdGhlIHBvdGVudGlhbCBwcm9ibGVtcyBhbmQgaGVscCBtZSBpc29sYXRlIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB0b29scyB0byBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqY2FsbGVkKiBmcm9tLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF92YWxpZGF0ZV9pbmNvbWluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfaW5wdXQuYz02MzE0PXN0YXRpYyBib29sIHRjcF9yZXNldF9jaGVjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjMyNS0gKi9cbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjYzMjY6c3RhdGljIGJvb2wgdGNwX3ZhbGlkYXRlX2luY29taW5nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTYzMjctXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoLCBpbnQgc3luX2luZXJyKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTY1MDQ9dm9pZCB0Y3BfcmN2X2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02Njc1LXZhbGlkYXRlOlxubmV0L2lwdjQvdGNwX2lucHV0LmM6NjY3NjpcdGlmICghdGNwX3ZhbGlkYXRlX2luY29taW5nKHNrLCBza2IsIHRoLCAxKSlcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY2NzctXHRcdHJldHVybjtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03MTU2PXRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzIzMC1cdH1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjcyMzE6XHRpZiAoIXRjcF92YWxpZGF0ZV9pbmNvbWluZyhzaywgc2tiLCB0aCwgMCkpXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03MjMyLVx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDE3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUQ1AgU2VxdWVuY2UgTnVtYmVyIFZhbGlkYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHRjcF9zZXF1ZW5jZSgpYCBmdW5jdGlvbiB3aXRoaW4gdGhlIFRDUCBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IGluIGB0Y3BfaW5wdXQuY2AuIEl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciB2YWxpZGF0aW5nIHNlcXVlbmNlIG51bWJlcnMsIGFuZCBJIHNlZSBpdCBkcm9wcyBwYWNrZXRzIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnM6IGBlbmRfc2VxID09IHRwLSZndDtyY3Zfd3VwICZhbXA7JmFtcDsgc2VxICE9IGVuZF9zZXEgJmFtcDsmYW1wOyAhdGgtJmd0O3N5biAmYW1wOyZhbXA7ICF0aC0mZ3Q7ZmluYC4gVGhlIGRyb3AgcmVhc29uIGlzIGBTS0JfRFJPUF9SRUFTT05fVENQX09MRF9TRVFVRU5DRWAuIFRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlIHdpdGhpbiB0aGUgVENQIHN0YWNrLCBhZmZlY3RpbmcgaG93IHNlcXVlbmNlIG51bWJlcnMgYXJlIGhhbmRsZWQuCgpUaGUgYmlnIHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBiZSB0cmlnZ2VyZWQgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudD8gWWVhaCwgdGhpcyBpcyBUQ1AsIHNvIGl0JiMzOTtzIGVhc2lseSByZWFjaGFibGUg4oCTIGxvY2FsIGxvb3BiYWNrLCBUVU4vVEFQLCB2ZXRoLCB5b3UgbmFtZSBpdC4gU28sIGlzIGl0IHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFRoaXMgaXMgY29yZSBuZXR3b3JrIHN0YWNrIHByb3RvY29sIGxvZ2ljLCByaWdodCBhdCB0aGUgaGVhcnQgb2Ygc2VxdWVuY2UgdmFsaWRhdGlvbi4gQW55IHZ1bG5lcmFiaWxpdHkgaGVyZSBjb3VsZCBiZSBjcml0aWNhbC4KCk5vdywgaG9sZCBvbi4gQmVmb3JlIEkganVtcCBpbiwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIExldCBtZSByZXZpZXcgdGhlIGd1aWRlbGluZXMuIFRoZSBpbnN0cnVjdGlvbiBpcyB0byBleHRyYWN0IGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBhcmUgbGlrZWx5IHRvIGJlIGhlYXZpbHkgZnV6emVkLCBidXQgSSBuZWVkIHRvIGF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIG90aGVyd2lzZSB0aGUgdGVzdHMgd2lsbCBiZSBza2V3ZWQuIEkgbmVlZCB0byBmb2N1cyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhpcyBtYWtlcyBzZW5zZTsgaW5saW5lZCBmdW5jdGlvbnMgd29uJiMzOTt0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4KClNvLCBsZXQgbWUgdGhpbms6IElzIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCwgYHRjcF92NF9yY3ZgLCBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCwgb3IgYHRjcF9zZXF1ZW5jZWAgYSBnb29kIGNob2ljZT8gYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGxvb2tzIGxpa2UgYSBob3QgcGF0aCB0byBtZS4gQWgsIHdhaXQsICYjMzQ7QXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuJiMzNDsgVGhpcyBtZWFucyBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgaXMgb3V0LiBIbW0sIHdoYXQgYWJvdXQgdGhlIG90aGVyIG9wdGlvbnMuIExldCYjMzk7cyBzZWU6IGB0Y3Bfc2VxdWVuY2VgIGlzIHN0YXRpYy4gU28sIHRoYXQmIzM5O3Mgb3V0LiBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGFsc28gb3V0LiBTbywgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGlzIG91dCBiZWNhdXNlIGl0IGlzIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiBpbiBUQ1AuCgpPaywgaXMgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2Agbm9uLXN0YXRpYz8gTGV0JiMzOTtzIGNoZWNrIGB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3NgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mzg4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgVENQIFJlY2VpdmUgU3RhdGUgTWFjaGluZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBtaXNlcnksIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24hKSBvZiBoYW5kbGluZyBpbmNvbWluZyBUQ1Agc2VnbWVudHMgaGFwcGVucyB3aXRoaW4gYSBzcGVjaWZpYyBzdGF0ZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZWNsYXJhdGlvbiwgZXNwZWNpYWxseSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIGFuZCBhbnkgYXNzb2NpYXRlZCBzdHJ1Y3R1cmVzIHBhc3NlZCBpbi4gSSB3YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgaW5wdXRzIGl0IGNvbnN1bWVzLCB0aGUgaW50ZXJuYWwgZGF0YSBpdCYjMzk7cyBsaWtlbHkgbWFuaXB1bGF0aW5nIChlLmcuLCBjb250cm9sIGJsb2Nrcywgc2VxdWVuY2UgbnVtYmVycywgd2luZG93IHNpemVzKSwgYW5kIHdoYXQgaXRzIG91dHB1dHMgYXJlIOKAkyB3aGljaCBlc3NlbnRpYWxseSBkZWZpbmUgdGhlIHN0YXRlIHRyYW5zaXRpb25zIGFuZCBhY3Rpb25zIHRyaWdnZXJlZCBieSB0aGlzIGZ1bmN0aW9uLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGl0JiMzOTtzIHRoZSBoZWFydCBvZiB0aGUgcmVjZWl2ZSBzaWRlIHN0YXRlIG1hY2hpbmUuIEkgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIGFueSBwb3RlbnRpYWwgYnVncyBhbmQvb3IgYm90dGxlbmVja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9yY3Zfc3RhdGVfcHJvY2VzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfaW5wdXQuYz02ODU2PXN0YXRpYyBpbnQgdGNwX3Jjdl9zeW5zZW50X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTcwODAtXHRcdCAqIHdlIGhhdmUgbm8gcmVhc29ucyB0byBhY2NlcHQgaXQgc29tZXRpbWVzLlxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzA4MTpcdFx0ICogQWxzbywgc2VlbXMgdGhlIGNvZGUgZG9pbmcgaXQgaW4gc3RlcDYgb2YgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03MDgyLVx0XHQgKiBpcyBub3QgZmxhd2xlc3MuIFNvLCBkaXNjYXJkIHBhY2tldCBmb3Igc2FuaXR5LlxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTcxNTU9ZW51bSBza2JfZHJvcF9yZWFzb25cbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjcxNTY6dGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTcxNTcte1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MTgzMD1pbnQgdGNwX3Y0X2RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0xODc1LVxubmV0L2lwdjQvdGNwX2lwdjQuYzoxODc2Olx0cmVhc29uID0gdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xubmV0L2lwdjQvdGNwX2lwdjQuYy0xODc3LVx0aWYgKHJlYXNvbilcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9MTAxPXRjcF90aW1ld2FpdF9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy0xMzItXHRpZiAoUkVBRF9PTkNFKHR3LVx1MDAzZXR3X3N1YnN0YXRlKSA9PSBUQ1BfRklOX1dBSVQyKSB7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6MTMzOlx0XHQvKiBKdXN0IHJlcGVhdCBhbGwgdGhlIGNoZWNrcyBvZiB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3MoKSAqL1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTEzNC1cbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9Njg3PXN0cnVjdCBzb2NrICp0Y3BfY2hlY2tfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtODE2LVx0ICAgQnV0IGdlbmVyYWxseSwgd2Ugc2hvdWxkIChSRkMgbGllcyEpIHRvIGFjY2VwdCBBQ0tcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo4MTc6XHQgICBmcm9tIFNZTkFDSyBib3RoIGhlcmUgYW5kIGluIHRjcF9yY3Zfc3RhdGVfcHJvY2VzcygpLlxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjgxODpcdCAgIHRjcF9yY3Zfc3RhdGVfcHJvY2VzcygpIGRvZXMgbm90LCBoZW5jZSwgd2UgZG8gbm90IHRvby5cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy04MTktXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTk5OD1lbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfY2hpbGRfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqcGFyZW50LCBzdHJ1Y3Qgc29jayAqY2hpbGQsXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTEwMDktXHRpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihjaGlsZCkpIHtcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzoxMDEwOlx0XHRyZWFzb24gPSB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3MoY2hpbGQsIHNrYik7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtMTAxMS1cdFx0LyogV2FrZXVwIHBhcmVudCwgc2VuZCBTSUdJTyAqL1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz00MTAxPXN0YXRpYyB2b2lkIHRjcF9jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTA5LVx0LyogV2UmIzM5O2xsIGZpeCB0aGlzIHVwIHdoZW4gd2UgZ2V0IGEgcmVzcG9uc2UgZnJvbSB0aGUgb3RoZXIgZW5kLlxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQxMTA6XHQgKiBTZWUgdGNwX2lucHV0LmM6dGNwX3Jjdl9zdGF0ZV9wcm9jZXNzIGNhc2UgVENQX1NZTl9TRU5ULlxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQxMTEtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU3MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGF0OgoKKipJbnZlc3RpZ2F0aW5nIFRDUCBJbnB1dCBpbiB0aGUgS2VybmVsKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIEkmIzM5O2xsIGltbWVkaWF0ZWx5IGp1bXAgaW50byB0aGUgS2NvbmZpZyBmaWxlcyByZWxhdGVkIHRvIG5ldHdvcmtpbmcgdG8gc2VlIGhvdyB0aGlzIHBhcnRpY3VsYXIgc291cmNlIGZpbGUgaXMgYnJvdWdodCBpbnRvIHRoZSBidWlsZC4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIGhhbmRsZSBvbiB0aGUgY29tcGlsZS10aW1lIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4KCk5leHQsIHNpbmNlIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLCBJJiMzOTtsbCBzaGlmdCBnZWFycyBhbmQgbW92ZSBvdmVyIHRvIHRoZSBgbmV0L2lwdjQvTWFrZWZpbGVgLiBJJiMzOTtsbCBwZXJmb3JtIGEgZ3JlcCBmb3IgYHRjcF9pbnB1dC5vYCB3aXRoaW4gdGhlIE1ha2VmaWxlLiBUaGlzIHNob3VsZCByZXZlYWwgaG93IHRoZSBvYmplY3QgZmlsZSBpcyBsaW5rZWQsIGFuZCBpZGVudGlmeSB3aGVyZSB0aGUgYnVpbGQgc3lzdGVtIGV4cGVjdHMgdG8gZmluZCB0aGUgc291cmNlIGNvZGUuIFRoYXQgc2hvdWxkIHByb3ZpZGUgYSBxdWljayBwaWN0dXJlIG9mIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgbGFyZ2VyIGBuZXQvaXB2NGAgYnVpbGQgcHJvY2Vzcy4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9pbnB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXG4tLVxubmV0L2lwdjQvTWFrZWZpbGUtOS1cdCAgICAgaW5ldF90aW1ld2FpdF9zb2NrLm8gaW5ldF9jb25uZWN0aW9uX3NvY2subyBcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTA6XHQgICAgIHRjcC5vIHRjcF9pbnB1dC5vIHRjcF9vdXRwdXQubyB0Y3BfdGltZXIubyB0Y3BfaXB2NC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xMS1cdCAgICAgdGNwX21pbmlzb2Nrcy5vIHRjcF9jb25nLm8gdGNwX21ldHJpY3MubyB0Y3BfZmFzdG9wZW4ubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTk4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgSVB2NCBJbmNsdXNpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgbmV0L01ha2VmaWxlYCBvciBgbmV0L0tjb25maWdgIGZpbGVzIOKAkyBwcm9iYWJseSByZWxhdGVkIHRvIGNvbmZpZ3VyaW5nIHRoZSBuZXR3b3JrIHN0YWNrLiBJIHNlZSB0aGlzIGxpbmU6IGBvYmotJChDT05GSUdfSU5FVCkgJiM0Mzs9IGlwdjQvYC4gTXkgaW1tZWRpYXRlIGludGVycHJldGF0aW9uIGlzIHRoYXQgYmFzZWQgb24gdGhlIGBDT05GSUdfSU5FVGAgb3B0aW9uIGJlaW5nIHNldCAobGlrZWx5IGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiksIHRoZSBgaXB2NC9gIGRpcmVjdG9yeSwgYW5kIHRoZXJlZm9yZSB0aGUgSVB2NCBpbXBsZW1lbnRhdGlvbiwgaXMgYmVpbmcgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiBJdCYjMzk7cyBhIGNvbmRpdGlvbmFsIGluY2x1c2lvbiwgd2hpY2ggaXMgc3RhbmRhcmQgcHJhY3RpY2UuIE5vdywgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIGluZGVlZCBob3cgaXQgd29ya3MuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBzcGVjaWZpY3MsIGJ1dCBiYXNlZCBvbiBleHBlcmllbmNlIHRoaXMgaXMgd2hhdCBpdCBsb29rcyBsaWtlIGlzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX05FVEZJTFRFUilcdFx0JiM0Mzs9IG5ldGZpbHRlci9cbm5ldC9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfSU5FVClcdFx0JiM0Mzs9IGlwdjQvXG5uZXQvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1RMUylcdFx0JiM0Mzs9IHRscy9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI4MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uOgoKKipEaXZpbmcgaW50byB0aGUgSVB2NCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgSVB2NCBuZXR3b3JraW5nIHN0YWNrIGlzIHNldCB1cCwgYW5kIEkgc2VlIHRoaXMgYElORVRgIG1hY3JvLiBSaWdodCwgdGhhdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBldmVyeXRoaW5nIHVuZGVyIGBuZXQvaXB2NC9gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXJseSB0byBnbyBzdHJhaWdodCBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBJJiMzOTtsbCBjaGVjayBlaXRoZXIgYG5ldC9pcHY0L0tjb25maWdgIGRpcmVjdGx5LCBvciBpZiBpdCYjMzk7cyBhIG1vcmUgdG9wLWxldmVsIG9wdGlvbiwgbWF5YmUgYG5ldC9LY29uZmlnYCB3aWxsIGJlIHRoZSBwbGFjZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGV0YWlscyBvbiBgQ09ORklHX0lORVRgIGl0c2VsZiDigJMgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZSwgaGVscCB0ZXh0LCBldmVyeXRoaW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUgYnVpbGQuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz05OT1jb25maWcgTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUXG4tLVxubmV0L0tjb25maWctMTEzLVxubmV0L0tjb25maWc6MTE0OmNvbmZpZyBJTkVUXG5uZXQvS2NvbmZpZy0xMTUtXHRib29sIFwmIzM0O1RDUC9JUCBuZXR3b3JraW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqSU5FVCBEZXBlbmRlbmN5IEludmVzdGlnYXRpb24qKgoKT2theSwgc28gYElORVRgJiMzOTtzIGdvdCBhIGRlcGVuZGVuY3kgb24gYE5FVGAuIFJpZ2h0LCBtYWtlcyBzZW5zZS4gTm93LCB3aGVyZSYjMzk7cyB0aGF0IGRlZmluZWQ/IEkmIzM5O2xsIGJldCBpdCYjMzk7cyBpbiB0aGUgS2NvbmZpZyBmaWxlcyBzb21ld2hlcmUuIExldCYjMzk7cyBkaWcgaW50byBgbmV0L0tjb25maWdgIOKAkyBzaG91bGQgYmUgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHRvIHRoYXQgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDExNC4gSG9wZWZ1bGx5LCB0aGUgZGVwZW5kZW5jeSBkZWNsYXJhdGlvbiBpcyByaWdodCB0aGVyZSwgY2xlYXIgYXMgZGF5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExMDpcdFxuIDExMTpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCByZWZlclxuIDExMjpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXG4gMTEzOlx0XG4gMTE0Olx0Y29uZmlnIElORVRcbiAxMTU6XHRcdGJvb2wgXCYjMzQ7VENQL0lQIG5ldHdvcmtpbmdcJiMzNDtcbiAxMTY6XHRcdGhlbHBcbiAxMTc6XHRcdCAgVGhlc2UgYXJlIHRoZSBwcm90b2NvbHMgdXNlZCBvbiB0aGUgSW50ZXJuZXQgYW5kIG9uIG1vc3QgbG9jYWxcbiAxMTg6XHRcdCAgRXRoZXJuZXRzLiBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gc2F5IFkgaGVyZSAodGhpcyB3aWxsIGVubGFyZ2VcbiAxMTk6XHRcdCAgeW91ciBrZXJuZWwgYnkgYWJvdXQgNDAwIEtCKSwgc2luY2Ugc29tZSBwcm9ncmFtcyAoZS5nLiB0aGUgWCB3aW5kb3dcbiAxMjA6XHRcdCAgc3lzdGVtKSB1c2UgVENQL0lQIGV2ZW4gaWYgeW91ciBtYWNoaW5lIGlzIG5vdCBjb25uZWN0ZWQgdG8gYW55XG4gMTIxOlx0XHQgIG90aGVyIGNvbXB1dGVyLiBZb3Ugd2lsbCBnZXQgdGhlIHNvLWNhbGxlZCBsb29wYmFjayBkZXZpY2Ugd2hpY2hcbiAxMjI6XHRcdCAgYWxsb3dzIHlvdSB0byBwaW5nIHlvdXJzZWxmIChncmVhdCBmdW4sIHRoYXQhKS5cbiAxMjM6XHRcbiAxMjQ6XHRcdCAgRm9yIGFuIGV4Y2VsbGVudCBpbnRyb2R1Y3Rpb24gdG8gTGludXggbmV0d29ya2luZywgcGxlYXNlIHJlYWQgdGhlXG4gMTI1Olx0XHQgIExpbnV4IE5ldHdvcmtpbmcgSE9XVE8sIGF2YWlsYWJsZSBmcm9tXG4gMTI2Olx0XHQgIFx1MDAzY2h0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvXHUwMDNlLlxuIDEyNzpcdFxuIDEyODpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSBhbmQgYWxzbyB0byBcJiMzNDsvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7IGFuZFxuIDEyOTpcdFx0ICBcJiMzNDtTeXNjdGwgc3VwcG9ydFwmIzM0OyBiZWxvdywgeW91IGNhbiBjaGFuZ2UgdmFyaW91cyBhc3BlY3RzIG9mIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTY3CgkJCQkJCQlvdXRwdXQ6IDEwNgoJCQkJCQkJdGhvdWdodHM6IDE1MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgVENQIFNlcXVlbmNlIE51bWJlciBWYWxpZGF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBhcmUgcmVsZXZhbnQgdG8gdGhpcyBjaGFuZ2UgaW4gVENQIHNlcXVlbmNlIG51bWJlciB2YWxpZGF0aW9uIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2lucHV0LmNgLiBJJiMzOTttIHNlZWluZyBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYCBhbmQgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgLiBBcmUgdGhlc2UgdGhlIGtleSBwbGF5ZXJzPyBMZXQmIzM5O3MgY29uZmlybTogYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGlzIGB2b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAsIGFuZCBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYCBpcyBgZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilgLiBHb29kLCB0aGV5JiMzOTtyZSBub3Qgc3RhdGljLgoKTm93LCBhIGtleSBjb25zaWRlcmF0aW9uOiBhcmUgdGhleSAqaG90LXBhdGgqIGZ1bmN0aW9ucz8gVGhlIHN5emthbGxlciBndWlkYW5jZSBpcyBjbGVhcjogYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCB0ZXN0IGRpc3RyaWJ1dGlvbiBza2V3LiAgSXQgcHJlZmVycyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWFrZXMgc2Vuc2UuIFRoaXMgbWVhbnMgSSB3YW50IHRvIGF2b2lkIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgZnJlcXVlbnRseSBpbiBub3JtYWwgVENQIG9wZXJhdGlvbi4gSWYgYHRjcF9zZXF1ZW5jZWAgaXMgYW4gaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbiBkaXJlY3RseSBjYWxsZWQgZm9yIGV2ZXJ5IGluY29taW5nIFRDUCBwYWNrZXQgaW4gZXN0YWJsaXNoZWQvc3RhdGUgcHJvY2Vzc2luZywgc2hvdWxkIEkgZXZlbiBib3RoZXIgd2l0aCBGb2N1c1N5bWJvbHM/IFRoaXMgaXMgdGhlIGNvcmUgaXNzdWUhCgpJZiBgdGNwX3NlcXVlbmNlYCBpcyBhIHN0YXRpYyBoZWxwZXIsIGl0JiMzOTtzIHZlcnkgbGlrZWx5IGlubGluZWQuIEFuZCBpZiBhbGwgZnVuY3Rpb25zIGNhbGxpbmcgaXQgYXJlIGdlbmVyaWMgaG90LXBhdGhzIChgdGNwX3Jjdl9lc3RhYmxpc2hlZGAsIGB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3NgLCBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCwgYHRjcF92NF9yY3ZgKSwgd2hhdCYjMzk7cyB0aGUgYmVzdCBvcHRpb24gaGVyZT8gU3l6a2FsbGVyIHdhbnRzIHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGF2b2lkIHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCgpPa2F5LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgaW5saW5pbmc6IGB0Y3Bfc2VxdWVuY2VgIGlzIGBzdGF0aWMgaW5saW5lIC8gc3RhdGljYC4gSXQgaXMgc3RhdGljIGFuZCBvbmx5IGNhbGxlZCBmcm9tIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWxldmFudCBsb2dpYyBpcywgYnV0IGl0JiMzOTtzIGludGVybmFsLiBJcyBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAsIGB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3NgLCBvciBgdGNwX3NlcXVlbmNlYCB3aGF0IEkgc2hvdWxkIGluY2x1ZGU/CgpJZiBgdGNwX3NlcXVlbmNlYCBpcyBzdGF0aWMgYW5kIGlubGluZWQsIHN5emthbGxlciBtaWdodCBub3QgZXZlbiBzZWUgYSBkaXN0aW5jdCBzeW1ib2wgZm9yIGl0LiBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYCBoYW5kbGVzIHBhY2tldHMgaW4gbm9uLUVTVEFCTElTSEVEIHN0YXRlcywgd2hpY2ggaXMgZGlmZmVyZW50IGZyb20gYHRjcF9yY3ZfZXN0YWJsaXNoZWRgLCB3aGljaCBoYW5kbGVzIEVTVEFCTElTSEVEIHN0YXRlLiBPa2F5LCBzbyBub3cgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXI6IHdoYXQgZG9lcyB0aGUgcGF0Y2ggKmRvKj8KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIGRyb3BwaW5nIG9sZCBzZXF1ZW5jZSBwYWNrZXRzIHdoZXJlIGBlbmRfc2VxID09IHRwLSZndDtyY3Zfd3VwYCAobWVhbmluZyB0aGUgcGFja2V0JiMzOTtzIGVuZCBzZXF1ZW5jZSBpcyBhdCBvciBiZWZvcmUgdGhlIHJlY2VpdmUgd2luZG93IHVwcGVyIGJvdW5kKSB3aXRoIG5vbi1lbXB0eSBwYXlsb2FkLCBidXQgd2l0aG91dCBTWU4gb3IgRklOIGZsYWdzLiBUaGlzIGlzIFRDUCBzZXF1ZW5jZSBudW1iZXIgdmFsaWRhdGlvbi4KCk5leHQsIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlcXVpcmVkLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfSU5FVGAgaXMgc3VmZmljaWVudC4KCk5vdywgbGV0JiMzOTtzIGFzc2VtYmxlIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuIGBXb3J0aEZ1enppbmdgIGlzIG9idmlvdXNseSB0cnVlLiBUaGUgYFJlYXNvbmluZ2Agd2lsbCBiZSBhIGNsZWFyIGV4cGxhbmF0aW9uOiBUaGUgcGF0Y2ggbW9kaWZpZXMgVENQIHNlcXVlbmNlIG51bWJlciB2YWxpZGF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW4gYHRjcF9zZXF1ZW5jZSgpYCAoZXZlbiBpZiBpdCYjMzk7cyBpbmxpbmVkKSwgd2l0aGluIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIFRoZSBwYXRjaCBkcm9wcyBvbGQgcGFja2V0cyB3aGVuIGBlbmRfc2VxID09IHRwLSZndDtyY3Zfd3VwYCB3aXRoIG5vbi1lbXB0eSBwYXlsb2FkcyBhbmQgd2l0aG91dCBTWU4vRklOIGZsYWdzLiBgRW5hYmxlQ29uZmlnc2Agd2lsbCBiZSBgWyYjMzQ7SU5FVCYjMzQ7XWAuIEJ1dCB3aGF0IGFib3V0IGBGb2N1c1N5bWJvbHNgPwoKTGV0JiMzOTtzIHJldmlzaXQgdGhlIHN5emthbGxlciBndWlkYW5jZTogYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIElzIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBhIGhvdC1wYXRoIGZ1bmN0aW9uPyBZZXMsIGl0IGlzLiBCdXQgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AgZGVhbHMgd2l0aCBzdGF0ZSB0cmFuc2l0aW9ucy4gIFNvLCBzaG91bGQgaXQgYmUgYFsmIzM0O3RjcF9yY3Zfc3RhdGVfcHJvY2VzcyYjMzQ7XWAsIGBbXWAsIG9yIHNvbWV0aGluZyBlbHNlPwoKYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AgaXMgZXhwb3J0ZWQvbm9uLXN0YXRpYyBhbmQgZGVhbHMgd2l0aCBzdGF0ZSB0cmFuc2l0aW9ucywgd2hpY2ggYXJlIGludGVyZXN0aW5nIHRhcmdldHMuIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyB0aGUgdmVyeSBkZWZpbml0aW9uIG9mIGEgZ2VuZXJpYyBob3QtcGF0aCBmb3IgVENQLiAgRm9jdXNTeW1ib2xzIGlzIHVzZWQgdG8gdGFyZ2V0IGZ1enppbmcgYXQgYSBzcGVjaWZpYyBmdW5jdGlvbi4gIFNvIGlmIHdlJiMzOTtyZSB3b3JyaWVkIGFib3V0IGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBiZWluZyB0b28gZ2VuZXJhbCwgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AgaXMgYSBkZWNlbnQgb3B0aW9uLCBvdGhlcndpc2Ugd2UgY2FuIGxlYXZlIGl0IGVtcHR5LiBMZXQmIzM5O3MgbWFrZSBzdXJlIGB0Y3Bfc2VxdWVuY2VgIGlzIGFuIGludGVybmFsIGhlbHBlci4gWWVzLCBpdCBpcyBzdGF0aWMuCgpMYXN0bHksIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IG90aGVyIGZpbGUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgY29tbWl0LiBJdCYjMzk7cyBvbmx5IGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIE9rYXksIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJIHRoaW5rIGBbJiMzNDt0Y3BfcmN2X3N0YXRlX3Byb2Nlc3MmIzM0O11gIGlzIHRoZSBiZXN0IGNob2ljZSBmb3IgRm9jdXNTeW1ib2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9yY3Zfc3RhdGVfcHJvY2VzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBUQ1Agc2VxdWVuY2UgdmFsaWRhdGlvbiBsb2dpYyBpbiB0Y3Bfc2VxdWVuY2UoKSB3aXRoaW4gbmV0L2lwdjQvdGNwX2lucHV0LmMgdG8gZHJvcCBwYWNrZXRzIHdpdGggb2xkIHNlcXVlbmNlIG51bWJlcnMgd2hlbiBlbmRfc2VxIGVxdWFscyByY3Zfd3VwIGZvciBub24tZW1wdHkgcGFja2V0cyB3aXRob3V0IFNZTi9GSU4gZmxhZ3MuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBhZmZlY3RpbmcgVENQIHBhY2tldCBwcm9jZXNzaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX3Jjdl9zdGF0ZV9wcm9jZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFRDUCBzZXF1ZW5jZSB2YWxpZGF0aW9uIGxvZ2ljIGluIHRjcF9zZXF1ZW5jZSgpIHdpdGhpbiBuZXQvaXB2NC90Y3BfaW5wdXQuYyB0byBkcm9wIHBhY2tldHMgd2l0aCBvbGQgc2VxdWVuY2UgbnVtYmVycyB3aGVuIGVuZF9zZXEgZXF1YWxzIHJjdl93dXAgZm9yIG5vbi1lbXB0eSBwYWNrZXRzIHdpdGhvdXQgU1lOL0ZJTiBmbGFncy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGFmZmVjdGluZyBUQ1AgcGFja2V0IHByb2Nlc3NpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIGlucHV0IHNlcXVlbmNlIHZhbGlkYXRpb24gaW4gYHRjcF9zZXF1ZW5jZSgpYCBieSBhZGRpbmcgYSBjb25kaXRpb24gdG8gZHJvcCBpbmNvbWluZyBwYWNrZXRzIHdob3NlIGVuZCBzZXF1ZW5jZSBlcXVhbHMgYHRwLVx1MDAzZXJjdl93dXBgICh3aGVuIGNhcnJ5aW5nIHBheWxvYWQgd2l0aG91dCBTWU4vRklOIGZsYWdzKSBhcyBgU0tCX0RST1BfUkVBU09OX1RDUF9PTERfU0VRVUVOQ0VgLlxuXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWRqdXN0cyBUQ1AgcHJvdG9jb2wgc2VxdWVuY2UgbnVtYmVyIHZhbGlkYXRpb24gbG9naWMgYW5kIHJldHVybiBjb2Rlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGNvcHlpbmcgb2Yga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkuIFRoZXJlZm9yZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjN2NmNWI5NWYwYjE0NWQ4MTM4Zjk5MTAyYzlmMjZjNTg5MmQ5NmI1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMTM6NTM6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCmluZGV4IGRhZmY5M2Q1MTM0MjguLjE5OTEyODVhYTAzZTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCkBAIC00ODQ0LDcgJiM0Mzs0ODQ0LDExIEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3Bfc2VxdWVuY2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCWNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXUzMiBzZXFfbGltaXQ7CiAKLQlpZiAoYmVmb3JlKGVuZF9zZXEsIHRwLSZndDtyY3Zfd3VwKSkKJiM0MzsJaWYgKGJlZm9yZShlbmRfc2VxLCB0cC0mZ3Q7cmN2X3d1cCkgfHwKJiM0MzsJICAgIChlbmRfc2VxID09IHRwLSZndDtyY3Zfd3VwICZhbXA7JmFtcDsKJiM0MzsJICAgICBzZXEgIT0gZW5kX3NlcSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgIXRoLSZndDtzeW4gJmFtcDsmYW1wOwomIzQzOwkgICAgICF0aC0mZ3Q7ZmluKSkKIAkJcmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9UQ1BfT0xEX1NFUVVFTkNFOwogCiAJc2VxX2xpbWl0ID0gdHAtJmd0O3Jjdl9ueHQgJiM0MzsgdGNwX21heF9yZWNlaXZlX3dpbmRvdyh0cCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVENQIFNlcXVlbmNlIENoZWNrKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSYjMzk7bSBsb29raW5nIGF0IGEgZGlmZiB3aXRoaW4gYG5ldC9pcHY0L3RjcF9pbnB1dC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgdGNwX3NlcXVlbmNlYCBmdW5jdGlvbi4gVGhlIGNvZGUmIzM5O3MgcHVycG9zZSBpcywgb2YgY291cnNlLCB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBpbmNvbWluZyBUQ1Agc2VnbWVudCYjMzk7cyBzZXF1ZW5jZSBudW1iZXIgZmFsbHMgd2l0aGluIGFuIGFjY2VwdGFibGUgd2luZG93LCB0aGVyZWJ5IHZhbGlkYXRpbmcgdGhlIHBhY2tldCYjMzk7cyBvcmRlciBhbmQgcHJldmVudGluZyByZXBsYXkgYXR0YWNrcywgZXRjLgoKVGhlIGNyaXRpY2FsIGNoYW5nZSBpcyBpbiB0aGUgYGlmYCBjb25kaXRpb24uIFRoZSBvcmlnaW5hbCBjb25kaXRpb24gd2FzIHN0cmFpZ2h0Zm9yd2FyZDogYGlmIChiZWZvcmUoZW5kX3NlcSwgdHAtJmd0O3Jjdl93dXApKWAuIFRoaXMgd2FzIGEgYmFzaWMgY2hlY2sgdG8gc2VlIGlmIHRoZSBlbmQgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBjdXJyZW50IHNlZ21lbnQgd2FzICpiZWZvcmUqIHRoZSByZWNlaXZlciYjMzk7cyB3aW5kb3cgdXBwZXIgYm91bmQgKGB0cC0mZ3Q7cmN2X3d1cGApLiBJZiBpdCB3YXMsIHRoZSBwYWNrZXQgd2FzIGNvbnNpZGVyZWQgb2xkLgoKVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtb3JlIG51YW5jZWQgY2hlY2ssIGVzc2VudGlhbGx5IGFkZGluZyBhbiBgfHxgIHdpdGggYSBuZXcgY29uZGl0aW9uLiBOb3csIGl0JiMzOTtzIGNoZWNraW5nIHdoZXRoZXIgYGJlZm9yZShlbmRfc2VxLCB0cC0mZ3Q7cmN2X3d1cCkgfHwgKGVuZF9zZXEgPT0gdHAtJmd0O3Jjdl93dXAgJmFtcDsmYW1wOyBzZXEgIT0gZW5kX3NlcSAmYW1wOyZhbXA7ICF0aC0mZ3Q7c3luICZhbXA7JmFtcDsgIXRoLSZndDtmaW4pYC4gTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBzZWNvbmQgcGFydC4gSXQgZXNzZW50aWFsbHkgc2F5czogaWYgdGhlIGBlbmRfc2VxYCAqZXF1YWxzKiBgdHAtJmd0O3Jjdl93dXBgLCBhbmQgaWYgdGhlIHNlcXVlbmNlIG51bWJlciBpcyAqbm90KiBlcXVhbCB0byB0aGUgZW5kIHNlcXVlbmNlIG51bWJlciwgYW5kIGl0JiMzOTtzICpub3QqIGEgU1lOIG9yIEZJTiBwYWNrZXQsIHRoZW4gZHJvcCB0aGUgcGFja2V0IGFzIHdlbGwuCgpUaGlzIHNlZW1zIHRvIGJlIHRhcmdldGluZyBhIHNwZWNpZmljIGVkZ2UgY2FzZSB3aGVyZSBhIHNlZ21lbnQgd2l0aCBhIHNlcXVlbmNlIG51bWJlciB0aGF0IGFwcGVhcnMgdG8gYmUgb24gdGhlIHdpbmRvdyBib3VuZGFyeSwgYnV0IGlzbiYjMzk7dCBhY3R1YWxseSBhIHNlZ21lbnQgd2UgYXJlIGludGVyZXN0ZWQgaW4uIEl0JiMzOTtzIGVzc2VudGlhbGx5IGZpbHRlcmluZyBvdXQgc2VnbWVudHMgd2l0aCBhIHNlcXVlbmNlIG51bWJlciB0aGF0IGlzIG9uIHRoZSB1cHBlciBib3VuZGFyeSBvZiB0aGUgd2luZG93LCBidXQgd2UgYXJlICpub3QqIHByb2Nlc3NpbmcgYSBTWU4gb3IgRklOIHBhY2tldCBmb3IgdGhlIGNvbm5lY3Rpb24uIEdpdmVuIHRoYXQgdGhpcyBpcyBpbiBUQ1AsIHRoaXMgbGlrZWx5IGlzIGEgc3BlY2lmaWMgY2FzZSBvZiBhbiBvdXQtb2Ytb3JkZXIgc2VnbWVudCBpbiB0aGUgY29udGV4dCBvZiB0aGUgd2luZG93IHNsaWRpbmcgZm9yd2FyZC4gSSYjMzk7ZCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgcmVhc29uaW5nIGhlcmUg4oCTIG1heWJlIGEgcmVvcmRlcmluZyBpc3N1ZSBhZnRlciBhIHdpbmRvdyB1cGRhdGUsIGEgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHksIG9yIHNvbWUgc3VidGxlIGludGVyYWN0aW9uIHdpdGggb3RoZXIgVENQIG1lY2hhbmlzbXMgbGlrZSB3aW5kb3cgc2NhbGluZyBvciBTQUNLLiBJJiMzOTtkIG5lZWQgdG8gc2VlIHRoZSBjb21taXQgbWVzc2FnZSBhbmQgcG9zc2libHkgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGZvciB0aGlzIGNoYW5nZSBjb21wbGV0ZWx5LiBUaGUgbG9naWMgc2VlbXMgcmVhc29uYWJsZSBlbm91Z2ggb24gdGhlIHN1cmZhY2UsIGJ1dCBJIGFsd2F5cyB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDgzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0ODM1Olx0ICogb2YgUkNWLk5YVC4gUGVlciBzdGlsbCBkaWQgbm90IGFkdmFuY2UgaGlzIFNORC5VTkEgd2hlbiB3ZVxuNDgzNjpcdCAqIGRlbGF5ZWQgQUNLLCBzbyB0aGF0IGhpc1NORC5VTkFcdTAwM2M9b3VyUkNWLldVUC5cbjQ4Mzc6XHQgKiAoYm9ycm93ZWQgZnJvbSBmcmVlYnNkKVxuNDgzODpcdCAqL1xuNDgzOTpcdFxuNDg0MDpcdHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3Bfc2VxdWVuY2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuNDg0MTpcdFx0XHRcdFx0XHQgdTMyIHNlcSwgdTMyIGVuZF9zZXEsXG40ODQyOlx0XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aClcbjQ4NDM6XHR7XG40ODQ0Olx0XHRjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbjQ4NDU6XHRcdHUzMiBzZXFfbGltaXQ7XG40ODQ2Olx0XG40ODQ3Olx0XHRpZiAoYmVmb3JlKGVuZF9zZXEsIHRwLVx1MDAzZXJjdl93dXApIHx8XG40ODQ4Olx0XHQgICAgKGVuZF9zZXEgPT0gdHAtXHUwMDNlcmN2X3d1cCBcdTAwMjZcdTAwMjZcbjQ4NDk6XHRcdCAgICAgc2VxICE9IGVuZF9zZXEgXHUwMDI2XHUwMDI2XG40ODUwOlx0XHQgICAgICF0aC1cdTAwM2VzeW4gXHUwMDI2XHUwMDI2XG40ODUxOlx0XHQgICAgICF0aC1cdTAwM2VmaW4pKVxuNDg1MjpcdFx0XHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1RDUF9PTERfU0VRVUVOQ0U7XG40ODUzOlx0XG40ODU0Olx0XHRzZXFfbGltaXQgPSB0cC1cdTAwM2VyY3Zfbnh0ICYjNDM7IHRjcF9tYXhfcmVjZWl2ZV93aW5kb3codHApO1xuNDg1NTpcdFx0aWYgKHVubGlrZWx5KGFmdGVyKGVuZF9zZXEsIHNlcV9saW1pdCkpKSB7XG40ODU2Olx0XHRcdC8qIFNvbWUgc3RhY2tzIGFyZSBrbm93biB0byBoYW5kbGUgRklOIGluY29ycmVjdGx5OyBhbGxvdyB0aGVcbjQ4NTc6XHRcdFx0ICogRklOIHRvIGV4dGVuZCBiZXlvbmQgdGhlIHdpbmRvdyBhbmQgY2hlY2sgaXQgaW4gZGV0YWlsIGxhdGVyLlxuNDg1ODpcdFx0XHQgKi9cbjQ4NTk6XHRcdFx0aWYgKCFhZnRlcihlbmRfc2VxIC0gdGgtXHUwMDNlZmluLCBzZXFfbGltaXQpKVxuNDg2MDpcdFx0XHRcdHJldHVybiBTS0JfTk9UX0RST1BQRURfWUVUO1xuNDg2MTpcdFxuNDg2MjpcdFx0XHRpZiAoYWZ0ZXIoc2VxLCBzZXFfbGltaXQpKVxuNDg2MzpcdFx0XHRcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX0lOVkFMSURfU0VRVUVOQ0U7XG40ODY0Olx0XG40ODY1Olx0XHRcdC8qIE9ubHkgYWNjZXB0IHRoaXMgcGFja2V0IGlmIHJlY2VpdmUgcXVldWUgaXMgZW1wdHkuICovXG40ODY2Olx0XHRcdGlmIChza2JfcXVldWVfbGVuKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKVxuNDg2NzpcdFx0XHRcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX0lOVkFMSURfRU5EX1NFUVVFTkNFO1xuNDg2ODpcdFx0fVxuNDg2OTpcdFxuNDg3MDpcdFx0cmV0dXJuIFNLQl9OT1RfRFJPUFBFRF9ZRVQ7XG40ODcxOlx0fVxuNDg3MjpcdFxuNDg3MzpcdFxuNDg3NDpcdHZvaWQgdGNwX2RvbmVfd2l0aF9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXG40ODc1Olx0e1xuNDg3NjpcdFx0LyogVGhpcyBiYXJyaWVyIGlzIGNvdXBsZWQgd2l0aCBzbXBfcm1iKCkgaW4gdGNwX3BvbGwoKSAqL1xuNDg3NzpcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19lcnIsIGVycik7XG40ODc4Olx0XHRzbXBfd21iKCk7XG40ODc5Olx0XG40ODgwOlx0XHR0Y3Bfd3JpdGVfcXVldWVfcHVyZ2Uoc2spO1xuNDg4MTpcdFx0dGNwX2RvbmUoc2spO1xuNDg4MjpcdFxuNDg4MzpcdFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXG40ODg0Olx0XHRcdHNrX2Vycm9yX3JlcG9ydChzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MTIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgcHJvbXB0LCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGEgaGlnaCBsZXZlbCBvZiBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIGB0Y3Bfc2VxdWVuY2VgKioKCk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgYXNraW5nIG1lIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGB0Y3Bfc2VxdWVuY2VgIGFuZCwgY3JpdGljYWxseSwgaG93IGFuZCB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoZSBlbXBoYXNpcyBvbiAmIzM0O2NhbGxlcnMmIzM0OyBzdWdnZXN0cyBhIHByaW1hcnkgZ29hbCBvZiB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cgYW5kIGRlcGVuZGVuY2llcyBzdXJyb3VuZGluZyB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGB0Y3Bfc2VxdWVuY2VgIGlzIGRlc2lnbmVkIHRvICpkbyosIHdoYXQgaXRzIGlucHV0cyBhcmUsIHdoYXQgaXQgcHJvZHVjZXMgYXMgb3V0cHV0LCBhbmQgaW1wb3J0YW50bHksIHdoaWNoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gcmVseSBvbiBpdHMgcmVzdWx0cy4gVGhpcyBzdWdnZXN0cyBhIG5lZWQgdG8gZWl0aGVyIHRyYWNlIGl0cyBjb2RlLCBleGFtaW5lIGl0cyBkb2N1bWVudGF0aW9uIChpZiBhbnkpLCBvciB1c2UgbXkgdG9vbHMgdG8gZmluZCBhbGwgY2FsbHMgYW5kIHBvc3NpYmx5IHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmdW5jdGlvbiB0byBzZWUgaG93IGl0IHdvcmtzLiBBIGtleSBzdHJhdGVneSBoZXJlIHdpbGwgYmUgdG8gc3RhcnQgd2l0aCB0aGUgZnVuY3Rpb24gaXRzZWxmLCBhbmQgdGhlbiB1bmRlcnN0YW5kIGl0cyAmIzM0O2NsaWVudHMuJiMzNDsgVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHR1YWwga25vd2xlZGdlIEkgbmVlZCB0byBmb3JtIGEgdXNlZnVsIGFuYWx5c2lzLiBJJiMzOTttIGFzc3VtaW5nLCBvZiBjb3Vyc2UsIHRoYXQgJiMzNDt0Y3AmIzM0OyByZWZlcnMgdG8gdGhlIFRyYW5zbWlzc2lvbiBDb250cm9sIFByb3RvY29sLCBhbmQgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGFzIGNvbnRleHQgaWYgdGhlIGNvZGUgZG9lc24mIzM5O3QgZXhwbGljaXRseSByZWZlciB0byB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3Bfc2VxdWVuY2VcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmM9NDc5MT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX2Rpc29yZGVyZWRfYWNrX2NoZWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00ODM5LVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NDg0MDpzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX3NlcXVlbmNlKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4NDEtXHRcdFx0XHRcdCB1MzIgc2VxLCB1MzIgZW5kX3NlcSxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz02MzI2PXN0YXRpYyBib29sIHRjcF92YWxpZGF0ZV9pbmNvbWluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM2My1cdC8qIFN0ZXAgMTogY2hlY2sgc2VxdWVuY2UgbnVtYmVyICovXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2MzY0Olx0cmVhc29uID0gdGNwX3NlcXVlbmNlKHNrLCBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlc2VxLFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM2NS1cdFx0XHQgICAgICBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSwgdGgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzg0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBhbmQgU2VxdWVuY2UgTnVtYmVycyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBhbmQgdGhlIGB0Y3Bfc2VxdWVuY2VgIHZhcmlhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBoYW5kbGluZyBzZXF1ZW5jZSBudW1iZXJzIGZyb20gaW5jb21pbmcgVENQIHNlZ21lbnRzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHZhbGlkYXRpb24gcHJvY2Vzcy4gV2hhdCBhcmUgdGhlIGtleSBjaGVja3M/IFdoZXJlIGFyZSB0aGUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgb3IgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9ucywgcHJlc2VudD8gSSBzdXNwZWN0IGl0JiMzOTtzIGxvb2tpbmcgYXQgdGhlIHNlcXVlbmNlIG51bWJlciB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGVzdGFibGlzaGVkIFRDUCBjb25uZWN0aW9uIHN0YXRlLCBsaWtlIHRoZSBleHBlY3RlZCBzZXF1ZW5jZSBudW1iZXIsIHdpbmRvdyBzaXplLCBhbmQgYWNrbm93bGVkZ21lbnQgbnVtYmVycy4gSSBhbHNvIHdvbmRlciBob3cgaXQgaGFuZGxlcyByZXRyYW5zbWlzc2lvbnMsIG91dC1vZi1vcmRlciBzZWdtZW50cywgYW5kIFNZTi9BQ0sgaGFuZHNoYWtlcy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCBpdCB3aWxsIGVuZm9yY2UgVENQJiMzOTtzIHJlbGlhYmlsaXR5IG1lY2hhbmlzbXMsIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGFuZCBwcmV2ZW50aW5nIHNlcXVlbmNlIG51bWJlciB3cmFwcGluZyBpc3N1ZXMuIEkgaG9wZSB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB2YWxpZGF0aW9ucyB3aWxsIGluZm9ybSBob3cgdGhlIHN0YWNrIHByb2Nlc3NlcyBUQ1AgcGFja2V0cy4gSSBhbHNvIHdhbnQgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCBlZGdlIGNhc2VzIHJlbGF0ZWQgdG8gcGF0aG9sb2dpY2FsIHNlcXVlbmNlIG51bWJlcnMgb3IgY3JhZnRlZCBwYWNrZXRzIHRoYXQgY291bGQgYnlwYXNzIHRoZXNlIHZhbGlkYXRpb25zLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfaW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjM1NTpcdFx0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9QQVdTRVNUQUJSRUpFQ1RFRCk7XG42MzU2Olx0XHRpZiAoIXRjcF9vb3dfcmF0ZV9saW1pdGVkKHNvY2tfbmV0KHNrKSwgc2tiLFxuNjM1NzpcdFx0XHRcdFx0ICBMSU5VWF9NSUJfVENQQUNLU0tJUFBFRFBBV1MsXG42MzU4Olx0XHRcdFx0XHQgIFx1MDAyNnRwLVx1MDAzZWxhc3Rfb293X2Fja190aW1lKSlcbjYzNTk6XHRcdFx0dGNwX3NlbmRfZHVwYWNrKHNrLCBza2IpO1xuNjM2MDpcdFx0Z290byBkaXNjYXJkO1xuNjM2MTpcdFxuNjM2MjpcdHN0ZXAxOlxuNjM2MzpcdFx0LyogU3RlcCAxOiBjaGVjayBzZXF1ZW5jZSBudW1iZXIgKi9cbjYzNjQ6XHRcdHJlYXNvbiA9IHRjcF9zZXF1ZW5jZShzaywgVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSxcbjYzNjU6XHRcdFx0XHQgICAgICBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSwgdGgpO1xuNjM2NjpcdFx0aWYgKHJlYXNvbikge1xuNjM2NzpcdFx0XHQvKiBSRkM3OTMsIHBhZ2UgMzc6IFwmIzM0O0luIGFsbCBzdGF0ZXMgZXhjZXB0IFNZTi1TRU5ULCBhbGwgcmVzZXRcbjYzNjg6XHRcdFx0ICogKFJTVCkgc2VnbWVudHMgYXJlIHZhbGlkYXRlZCBieSBjaGVja2luZyB0aGVpciBTRVEtZmllbGRzLlwmIzM0O1xuNjM2OTpcdFx0XHQgKiBBbmQgcGFnZSA2OTogXCYjMzQ7SWYgYW4gaW5jb21pbmcgc2VnbWVudCBpcyBub3QgYWNjZXB0YWJsZSxcbjYzNzA6XHRcdFx0ICogYW4gYWNrbm93bGVkZ21lbnQgc2hvdWxkIGJlIHNlbnQgaW4gcmVwbHkgKHVubGVzcyB0aGUgUlNUXG42MzcxOlx0XHRcdCAqIGJpdCBpcyBzZXQsIGlmIHNvIGRyb3AgdGhlIHNlZ21lbnQgYW5kIHJldHVybilcJiMzNDsuXG42MzcyOlx0XHRcdCAqL1xuNjM3MzpcdFx0XHRpZiAoIXRoLVx1MDAzZXJzdCkge1xuNjM3NDpcdFx0XHRcdGlmICh0aC1cdTAwM2VzeW4pXG42Mzc1Olx0XHRcdFx0XHRnb3RvIHN5bl9jaGFsbGVuZ2U7XG42Mzc2Olx0XG42Mzc3Olx0XHRcdFx0aWYgKHJlYXNvbiA9PSBTS0JfRFJPUF9SRUFTT05fVENQX0lOVkFMSURfU0VRVUVOQ0UgfHxcbjYzNzg6XHRcdFx0XHQgICAgcmVhc29uID09IFNLQl9EUk9QX1JFQVNPTl9UQ1BfSU5WQUxJRF9FTkRfU0VRVUVOQ0UpXG42Mzc5Olx0XHRcdFx0XHRORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcbjYzODA6XHRcdFx0XHRcdFx0ICAgICAgTElOVVhfTUlCX0JFWU9ORF9XSU5ET1cpO1xuNjM4MTpcdFx0XHRcdGlmICghdGNwX29vd19yYXRlX2xpbWl0ZWQoc29ja19uZXQoc2spLCBza2IsXG42MzgyOlx0XHRcdFx0XHRcdFx0ICBMSU5VWF9NSUJfVENQQUNLU0tJUFBFRFNFUSxcbjYzODM6XHRcdFx0XHRcdFx0XHQgIFx1MDAyNnRwLVx1MDAzZWxhc3Rfb293X2Fja190aW1lKSlcbjYzODQ6XHRcdFx0XHRcdHRjcF9zZW5kX2R1cGFjayhzaywgc2tiKTtcbjYzODU6XHRcdFx0fSBlbHNlIGlmICh0Y3BfcmVzZXRfY2hlY2soc2ssIHNrYikpIHtcbjYzODY6XHRcdFx0XHRnb3RvIHJlc2V0O1xuNjM4NzpcdFx0XHR9XG42Mzg4Olx0XHRcdGdvdG8gZGlzY2FyZDtcbjYzODk6XHRcdH1cbjYzOTA6XHRcbjYzOTE6XHRcdC8qIFN0ZXAgMjogY2hlY2sgUlNUIGJpdCAqL1xuNjM5MjpcdFx0aWYgKHRoLVx1MDAzZXJzdCkge1xuNjM5MzpcdFx0XHQvKiBSRkMgNTk2MSAzLjIgKGV4dGVuZCB0byBtYXRjaCBhZ2FpbnN0IChSQ1YuTlhUIC0gMSkgYWZ0ZXIgYVxuNjM5NDpcdFx0XHQgKiBGSU4gYW5kIFNBQ0sgdG9vIGlmIGF2YWlsYWJsZSk6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MTMKCQkJCQkJCW91dHB1dDogMTU0CgkJCQkJCQl0aG91Z2h0czogMzM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRDUCBTZXF1ZW5jZSBWYWxpZGF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgbW9kaWZpY2F0aW9uIHRvIGB0Y3Bfc2VxdWVuY2UoKWAuIEl0IGZvY3VzZXMgb24gc2VxdWVuY2UgbnVtYmVyIHZhbGlkYXRpb24sIHNwZWNpZmljYWxseSBoYW5kbGluZyB0aGUgY2FzZSB3aGVyZSBhIHBhY2tldCYjMzk7cyBlbmRpbmcgc2VxdWVuY2UgbnVtYmVyIChgZW5kX3NlcWApIG1hdGNoZXMgYHRwLSZndDtyY3Zfd3VwYCwgdGhlIHdpbmRvdyB1cGRhdGUgc2VxdWVuY2UuIFRoZSBwYXRjaCBub3cgZHJvcHMgdGhlIHBhY2tldCB3aXRoIGBTS0JfRFJPUF9SRUFTT05fVENQX09MRF9TRVFVRU5DRWAgaWYgYGVuZF9zZXFgIGlzIGVxdWFsIHRvIGB0cC0mZ3Q7cmN2X3d1cGAsIGl0IGNvbnRhaW5zIGEgcGF5bG9hZCAoYHNlcSAhPSBlbmRfc2VxYCksIGFuZCBpdCYjMzk7cyAqbm90KiBhIFNZTiBvciBGSU4gcGFja2V0LiBUaGlzIG1ha2VzIHNlbnNlOyBpdCBzZWVtcyBsaWtlIGl0IGlzIGludGVuZGVkIHRvIGRyb3Agb2xkIGRhdGEgYXQgdGhlIHdpbmRvdyB1cGRhdGUuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBmb3IgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBTaW5jZSBJJiMzOTttIGZhbWlsaWFyIHdpdGggdGhlc2Ugc29ydHMgb2YgdnVsbmVyYWJpbGl0aWVzLCBJJiMzOTtsbCBnbyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3Q6CgoxLiAgKipLZXJuZWwtdG8tVXNlciBTcGFjZSBFeHBvc3VyZToqKiBBcmUgdGhlcmUgYW55IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcgY291bGQgYmUgYSBwcm9ibGVtPyBObywgdGhpcyBjb2RlIG9wZXJhdGVzIHB1cmVseSB3aXRoaW4gdGhlIGtlcm5lbCBhbmQgaXNuJiMzOTt0IGludm9sdmVkIGluIHBhc3NpbmcgZGF0YSBzdHJ1Y3R1cmVzIG91dCB0byB1c2VyIHNwYWNlLgoKMi4gICoqQ29uZGl0aW9uYWwgTG9naWMgRGVwZW5kZW50IG9uIFVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzOioqIExldCYjMzk7cyBsb29rIGF0IHRoZSB2YXJpYWJsZXMuIGBzZXFgLCBgZW5kX3NlcWAsIGB0aGAsIGFuZCBgdHAtJmd0O3Jjdl93dXBgIGFyZSBhbGwgZGVyaXZlZCBmcm9tIHRoZSBUQ1AgaGVhZGVyLCB0aGUgVENQIHNvY2tldCBzdHJ1Y3R1cmUgKGB0cGApLCBhbmQgdGhlIFNLQiBjb250cm9sIGJsb2NrLiBUaGV5IGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIHdpdGhpbiB0aGUgdmFsaWRhdGlvbiBsb2dpYy4gU2VlbXMgc2FmZS4KCjMuICAqKkNvbXBsZXggRGF0YSBTdHJ1Y3R1cmUgSGFuZGxpbmc6KiogSXMgdGhlcmUgYW55IGNvbXBsZXggYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBkYXRhIHN0cnVjdHVyZXMgaGVyZT8gTm8sIHRoaXMgaXMgYWxsIHJlbGF0aXZlbHkgc2ltcGxlIHNlcXVlbmNlIG51bWJlciBjb21wYXJpc29uIHdpdGhpbiBhIFRDUCBwYWNrZXQgcHJvY2Vzc2luZyBmdW5jdGlvbi4KCjQuICAqKkJvdW5kcyBDaGVja2luZyBhbmQgQnVmZmVyIEFjY2VzczoqKiBEb2VzIHRoZSBjb2RlIGhhdmUgdGhlIHBvdGVudGlhbCB0byByZWFkIG9yIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIHdpdGhpbiBleGlzdGluZyBidWZmZXJzIGJhc2VkIG9uIGxlbmd0aHMgb3IgY29uZGl0aW9uYWwgbG9naWM/IE5vLCB0aGlzIGlzIGFib3V0IGRyb3BwaW5nIHBhY2tldHMgYmFzZWQgb24gc2VxdWVuY2UgbnVtYmVycyBhbmQgcGFja2V0IHR5cGUsIG5vdCBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBwYXJ0cyBvZiBhIGJ1ZmZlci4KClRoZXJlZm9yZSwgYWZ0ZXIgYSBjYXJlZnVsIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGUgZGF0YSBpcyBwcm9wZXJseSBzb3VyY2VkLiBHaXZlbiB0aGF0LCBLTVNBTiBpc24mIzM5O3Qgd2FycmFudGVkOyBzdGFuZGFyZCBLQVNBTiBhbmQgc3RhbmRhcmQgdGVzdGluZyBzaG91bGQgYmUgc3VmZmljaWVudCB0byB2YWxpZGF0ZSB0aGUgY2hhbmdlLiBJIGFtIHJlYWR5IHRvIGZvcm11bGF0ZSBhIHJlc3BvbnNlIGFuZCBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUQ1AgaW5wdXQgc2VxdWVuY2UgdmFsaWRhdGlvbiBpbiBgdGNwX3NlcXVlbmNlKClgIGJ5IGFkZGluZyBhIGNvbmRpdGlvbiB0byBkcm9wIGluY29taW5nIHBhY2tldHMgd2hvc2UgZW5kIHNlcXVlbmNlIGVxdWFscyBgdHAtXHUwMDNlcmN2X3d1cGAgKHdoZW4gY2FycnlpbmcgcGF5bG9hZCB3aXRob3V0IFNZTi9GSU4gZmxhZ3MpIGFzIGBTS0JfRFJPUF9SRUFTT05fVENQX09MRF9TRVFVRU5DRWAuXG5cblRoaXMgY2hhbmdlIHNvbGVseSBhZGp1c3RzIFRDUCBwcm90b2NvbCBzZXF1ZW5jZSBudW1iZXIgdmFsaWRhdGlvbiBsb2dpYyBhbmQgcmV0dXJuIGNvZGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgY29weWluZyBvZiBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeS4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIGlucHV0IHNlcXVlbmNlIHZhbGlkYXRpb24gaW4gYHRjcF9zZXF1ZW5jZSgpYCBieSBhZGRpbmcgYSBjb25kaXRpb24gdG8gZHJvcCBpbmNvbWluZyBwYWNrZXRzIHdob3NlIGVuZCBzZXF1ZW5jZSBlcXVhbHMgYHRwLVx1MDAzZXJjdl93dXBgICh3aGVuIGNhcnJ5aW5nIHBheWxvYWQgd2l0aG91dCBTWU4vRklOIGZsYWdzKSBhcyBgU0tCX0RST1BfUkVBU09OX1RDUF9PTERfU0VRVUVOQ0VgLlxuXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWRqdXN0cyBUQ1AgcHJvdG9jb2wgc2VxdWVuY2UgbnVtYmVyIHZhbGlkYXRpb24gbG9naWMgYW5kIHJldHVybiBjb2Rlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGNvcHlpbmcgb2Yga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkuIFRoZXJlZm9yZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo1MzoxMy44MjAzODkyNDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU1MjYyNjU3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9yY3Zfc3RhdGVfcHJvY2Vzc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRDUCBpbnB1dCBzZXF1ZW5jZSB2YWxpZGF0aW9uIGluIGB0Y3Bfc2VxdWVuY2UoKWAgYnkgYWRkaW5nIGEgY29uZGl0aW9uIHRvIGRyb3AgaW5jb21pbmcgcGFja2V0cyB3aG9zZSBlbmQgc2VxdWVuY2UgZXF1YWxzIGB0cC1cXHUwMDNlcmN2X3d1cGAgKHdoZW4gY2FycnlpbmcgcGF5bG9hZCB3aXRob3V0IFNZTi9GSU4gZmxhZ3MpIGFzIGBTS0JfRFJPUF9SRUFTT05fVENQX09MRF9TRVFVRU5DRWAuXFxuXFxuVGhpcyBjaGFuZ2Ugc29sZWx5IGFkanVzdHMgVENQIHByb3RvY29sIHNlcXVlbmNlIG51bWJlciB2YWxpZGF0aW9uIGxvZ2ljIGFuZCByZXR1cm4gY29kZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBjb3B5aW5nIG9mIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LiBUaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFyZSBpbnRyb2R1Y2VkIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBUQ1Agc2VxdWVuY2UgdmFsaWRhdGlvbiBsb2dpYyBpbiB0Y3Bfc2VxdWVuY2UoKSB3aXRoaW4gbmV0L2lwdjQvdGNwX2lucHV0LmMgdG8gZHJvcCBwYWNrZXRzIHdpdGggb2xkIHNlcXVlbmNlIG51bWJlcnMgd2hlbiBlbmRfc2VxIGVxdWFscyByY3Zfd3VwIGZvciBub24tZW1wdHkgcGFja2V0cyB3aXRob3V0IFNZTi9GSU4gZmxhZ3MuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBhZmZlY3RpbmcgVENQIHBhY2tldCBwcm9jZXNzaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo1MzoxMy44MjAzOTY2OTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MDM4ODkxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM3Y2Y1Yjk1ZjBiMTQ1ZDgxMzhmOTkxMDJjOWYyNmM1ODkyZDk2YjVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTM6NTM6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xcbmluZGV4IGRhZmY5M2Q1MTM0MjguLjE5OTEyODVhYTAzZTMgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmNcXG4rKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xcbkBAIC00ODQ0LDcgKzQ4NDQsMTEgQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9zZXF1ZW5jZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbiBcXHR1MzIgc2VxX2xpbWl0O1xcbiBcXG4tXFx0aWYgKGJlZm9yZShlbmRfc2VxLCB0cC1cXHUwMDNlcmN2X3d1cCkpXFxuK1xcdGlmIChiZWZvcmUoZW5kX3NlcSwgdHAtXFx1MDAzZXJjdl93dXApIHx8XFxuK1xcdCAgICAoZW5kX3NlcSA9PSB0cC1cXHUwMDNlcmN2X3d1cCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIHNlcSAhPSBlbmRfc2VxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgIXRoLVxcdTAwM2VzeW4gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAhdGgtXFx1MDAzZWZpbikpXFxuIFxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX09MRF9TRVFVRU5DRTtcXG4gXFxuIFxcdHNlcV9saW1pdCA9IHRwLVxcdTAwM2VyY3Zfbnh0ICsgdGNwX21heF9yZWNlaXZlX3dpbmRvdyh0cCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjUzOjE0LjIxMTQxNzM0NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTA4MjEwNzI3NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfcmN2X3N0YXRlX3Byb2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBUQ1Agc2VxdWVuY2UgdmFsaWRhdGlvbiBsb2dpYyBpbiB0Y3Bfc2VxdWVuY2UoKSB3aXRoaW4gbmV0L2lwdjQvdGNwX2lucHV0LmMgdG8gZHJvcCBwYWNrZXRzIHdpdGggb2xkIHNlcXVlbmNlIG51bWJlcnMgd2hlbiBlbmRfc2VxIGVxdWFscyByY3Zfd3VwIGZvciBub24tZW1wdHkgcGFja2V0cyB3aXRob3V0IFNZTi9GSU4gZmxhZ3MuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBhZmZlY3RpbmcgVENQIHBhY2tldCBwcm9jZXNzaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjN2NmNWI5NWYwYjE0NWQ4MTM4Zjk5MTAyYzlmMjZjNTg5MmQ5NmI1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTM6NTM6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jXG5pbmRleCBkYWZmOTNkNTEzNDI4Li4xOTkxMjg1YWEwM2UzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmNcbisrKyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jXG5AQCAtNDg0NCw3ICs0ODQ0LDExIEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3Bfc2VxdWVuY2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4gXHR1MzIgc2VxX2xpbWl0O1xuIFxuLVx0aWYgKGJlZm9yZShlbmRfc2VxLCB0cC1cdTAwM2VyY3Zfd3VwKSlcbitcdGlmIChiZWZvcmUoZW5kX3NlcSwgdHAtXHUwMDNlcmN2X3d1cCkgfHxcbitcdCAgICAoZW5kX3NlcSA9PSB0cC1cdTAwM2VyY3Zfd3VwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICBzZXEgIT0gZW5kX3NlcSBcdTAwMjZcdTAwMjZcbitcdCAgICAgIXRoLVx1MDAzZXN5biBcdTAwMjZcdTAwMjZcbitcdCAgICAgIXRoLVx1MDAzZWZpbikpXG4gXHRcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX09MRF9TRVFVRU5DRTtcbiBcbiBcdHNlcV9saW1pdCA9IHRwLVx1MDAzZXJjdl9ueHQgKyB0Y3BfbWF4X3JlY2VpdmVfd2luZG93KHRwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjUzOjE0LjIxMTQxODYxNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNTQ2MzczOTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRoaXM6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIGBkaWZmYCBoZXJlLCBhbmQgaXQncyBwb2ludGluZyB0byBhIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBgdGNwX3NlcXVlbmNlKClgIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNoYW5nZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki5cblxuRmlyc3QsIEknbGwgZXhhbWluZSB0aGUgZGlmZiBpdHNlbGYuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgc3BlY2lmaWMgbGluZXMgdGhhdCB3ZXJlIGFkZGVkLCByZW1vdmVkLCBvciBtb2RpZmllZCB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuIFxuXG5JJ2xsIGFsc28gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBpdHNlbGYgaW4gZGV0YWlsLiBNeSBwcmVmZXJyZWQgYXBwcm9hY2ggd2lsbCBiZSB0byByZWFkIHRoZSByZWxldmFudCBzZWN0aW9uIG9mIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AgYXJvdW5kIHRoZSBgdGNwX3NlcXVlbmNlKClgIGZ1bmN0aW9uLiBUaGlzIHdpbGwgaGVscCBtZSB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbidzIHJlc3BvbnNpYmlsaXR5IHdpdGhpbiB0aGUgVENQL0lQIHN0YWNrLlxuXG5GaW5hbGx5LCBJIHdpbGwgd2FudCB0byByZWFkIHRoZSBlbnRpcmUgZmlsZSwgaW4gY2FzZSB0aGUgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc291cmNlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjUzOjI0Ljc1Nzc5NTc3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ4MzUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ4MzU6XFx0ICogb2YgUkNWLk5YVC4gUGVlciBzdGlsbCBkaWQgbm90IGFkdmFuY2UgaGlzIFNORC5VTkEgd2hlbiB3ZVxcbjQ4MzY6XFx0ICogZGVsYXllZCBBQ0ssIHNvIHRoYXQgaGlzU05ELlVOQVxcdTAwM2M9b3VyUkNWLldVUC5cXG40ODM3OlxcdCAqIChib3Jyb3dlZCBmcm9tIGZyZWVic2QpXFxuNDgzODpcXHQgKi9cXG40ODM5OlxcdFxcbjQ4NDA6XFx0c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9zZXF1ZW5jZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuNDg0MTpcXHRcXHRcXHRcXHRcXHRcXHQgdTMyIHNlcSwgdTMyIGVuZF9zZXEsXFxuNDg0MjpcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHRjcGhkciAqdGgpXFxuNDg0MzpcXHR7XFxuNDg0NDpcXHRcXHRjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG40ODQ1OlxcdFxcdHUzMiBzZXFfbGltaXQ7XFxuNDg0NjpcXHRcXG40ODQ3OlxcdFxcdGlmIChiZWZvcmUoZW5kX3NlcSwgdHAtXFx1MDAzZXJjdl93dXApIHx8XFxuNDg0ODpcXHRcXHQgICAgKGVuZF9zZXEgPT0gdHAtXFx1MDAzZXJjdl93dXAgXFx1MDAyNlxcdTAwMjZcXG40ODQ5OlxcdFxcdCAgICAgc2VxICE9IGVuZF9zZXEgXFx1MDAyNlxcdTAwMjZcXG40ODUwOlxcdFxcdCAgICAgIXRoLVxcdTAwM2VzeW4gXFx1MDAyNlxcdTAwMjZcXG40ODUxOlxcdFxcdCAgICAgIXRoLVxcdTAwM2VmaW4pKVxcbjQ4NTI6XFx0XFx0XFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9UQ1BfT0xEX1NFUVVFTkNFO1xcbjQ4NTM6XFx0XFxuNDg1NDpcXHRcXHRzZXFfbGltaXQgPSB0cC1cXHUwMDNlcmN2X254dCArIHRjcF9tYXhfcmVjZWl2ZV93aW5kb3codHApO1xcbjQ4NTU6XFx0XFx0aWYgKHVubGlrZWx5KGFmdGVyKGVuZF9zZXEsIHNlcV9saW1pdCkpKSB7XFxuNDg1NjpcXHRcXHRcXHQvKiBTb21lIHN0YWNrcyBhcmUga25vd24gdG8gaGFuZGxlIEZJTiBpbmNvcnJlY3RseTsgYWxsb3cgdGhlXFxuNDg1NzpcXHRcXHRcXHQgKiBGSU4gdG8gZXh0ZW5kIGJleW9uZCB0aGUgd2luZG93IGFuZCBjaGVjayBpdCBpbiBkZXRhaWwgbGF0ZXIuXFxuNDg1ODpcXHRcXHRcXHQgKi9cXG40ODU5OlxcdFxcdFxcdGlmICghYWZ0ZXIoZW5kX3NlcSAtIHRoLVxcdTAwM2VmaW4sIHNlcV9saW1pdCkpXFxuNDg2MDpcXHRcXHRcXHRcXHRyZXR1cm4gU0tCX05PVF9EUk9QUEVEX1lFVDtcXG40ODYxOlxcdFxcbjQ4NjI6XFx0XFx0XFx0aWYgKGFmdGVyKHNlcSwgc2VxX2xpbWl0KSlcXG40ODYzOlxcdFxcdFxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX0lOVkFMSURfU0VRVUVOQ0U7XFxuNDg2NDpcXHRcXG40ODY1OlxcdFxcdFxcdC8qIE9ubHkgYWNjZXB0IHRoaXMgcGFja2V0IGlmIHJlY2VpdmUgcXVldWUgaXMgZW1wdHkuICovXFxuNDg2NjpcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKVxcbjQ4Njc6XFx0XFx0XFx0XFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9UQ1BfSU5WQUxJRF9FTkRfU0VRVUVOQ0U7XFxuNDg2ODpcXHRcXHR9XFxuNDg2OTpcXHRcXG40ODcwOlxcdFxcdHJldHVybiBTS0JfTk9UX0RST1BQRURfWUVUO1xcbjQ4NzE6XFx0fVxcbjQ4NzI6XFx0XFxuNDg3MzpcXHRcXG40ODc0OlxcdHZvaWQgdGNwX2RvbmVfd2l0aF9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXFxuNDg3NTpcXHR7XFxuNDg3NjpcXHRcXHQvKiBUaGlzIGJhcnJpZXIgaXMgY291cGxlZCB3aXRoIHNtcF9ybWIoKSBpbiB0Y3BfcG9sbCgpICovXFxuNDg3NzpcXHRcXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza19lcnIsIGVycik7XFxuNDg3ODpcXHRcXHRzbXBfd21iKCk7XFxuNDg3OTpcXHRcXG40ODgwOlxcdFxcdHRjcF93cml0ZV9xdWV1ZV9wdXJnZShzayk7XFxuNDg4MTpcXHRcXHR0Y3BfZG9uZShzayk7XFxuNDg4MjpcXHRcXG40ODgzOlxcdFxcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxcbjQ4ODQ6XFx0XFx0XFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NTM6MjQuNzU4MDU0NzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjY1MzYzOTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGB0Y3Bfc2VxdWVuY2VgIFVzYWdlKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBmb3IgYHRjcF9zZXF1ZW5jZWAuIFNpbmNlIEknbSBrbmVlLWRlZXAgaW4gdGhlIGtlcm5lbCdzIFRDUCBpbXBsZW1lbnRhdGlvbiwgbXkgZmlyc3QgbW92ZSBpcyB0byBwaW5wb2ludCBpdHMgdXNhZ2Ugd2l0aGluIGB0Y3BfaW5wdXQuY2AuIEknbSBnb2luZyB0byBsZXZlcmFnZSBteSB0cnVzdHkgYGdyZXBgIHNraWxscyB0byBxdWlja2x5IGZpbmQgYWxsIGluc3RhbmNlcyB3aGVyZSBgdGNwX3NlcXVlbmNlYCBpcyBpbnZva2VkIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgZmlsZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVncmF0ZXMgaW50byB0aGUgcGFja2V0IHByb2Nlc3NpbmcgZmxvdy4gRXNzZW50aWFsbHksIEknbSBhaW1pbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBXaGF0IGZ1bmN0aW9ucyBjYWxsIGl0PyBXaGF0IGFyZSB0aGUgY29udGV4dHMgd2hlcmUgaXQgaXMgYmVpbmcgdXNlZD8gQW5kIGZyb20gdGhvc2UgY29udGV4dHMsIGhvdyBpdCBjaGFuZ2VzIGJhc2VkIG9uIGNvbnRyb2wgZmxvdz9cblxuXG4iLCJJbnB1dFRva2VucyI6MzMxNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NTM6MzAuNDIzNDIyMDIxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MzI2MzU5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3Bfc2VxdWVuY2VcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuYz00NzkxPXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfZGlzb3JkZXJlZF9hY2tfY2hlY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDgzOS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0ODQwOnN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3Bfc2VxdWVuY2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4NDEtXFx0XFx0XFx0XFx0XFx0IHUzMiBzZXEsIHUzMiBlbmRfc2VxLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NjMyNj1zdGF0aWMgYm9vbCB0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM2My1cXHQvKiBTdGVwIDE6IGNoZWNrIHNlcXVlbmNlIG51bWJlciAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjYzNjQ6XFx0cmVhc29uID0gdGNwX3NlcXVlbmNlKHNrLCBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXNlcSxcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02MzY1LVxcdFxcdFxcdCAgICAgIFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlZW5kX3NlcSwgdGgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo1MzozMC43ODY2OTcxMDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjU5ODYxNjc2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqUGVlcmluZyBpbnRvIHRoZSBDYWxsIFN0YWNrIG9mIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IG9mIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIGFsd2F5cyB0byB0cmFjZSB0aGUgY2FsbHMsIHJpZ2h0PyBUaGUga2V5IGlzIGZpZ3VyaW5nIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQgZnJvbS4gVW5kZXJzdGFuZGluZyB0aGUgdXBzdHJlYW0gY2FsbGVycyB3aWxsIGdpdmUgbWUgdGhlIGNydWNpYWwgaW5zaWdodCBpbnRvICp3aHkqIHRoaXMgdmFsaWRhdGlvbiBpcyBoYXBwZW5pbmcsIHdoYXQga2luZCBvZiBkYXRhIGlzIGJlaW5nIHZhbGlkYXRlZCwgYW5kIHdoYXQgYXNzdW1wdGlvbnMgYXJlIGJlaW5nIG1hZGUgYWJvdXQgdGhlIGluY29taW5nIFRDUCBkYXRhLiBLbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyB3aWxsIGltbWVkaWF0ZWx5IGlsbHVtaW5hdGUgdGhlIHBvdGVudGlhbCBwcm9ibGVtcyBhbmQgaGVscCBtZSBpc29sYXRlIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIHRvIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpjYWxsZWQqIGZyb20uIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgzOCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjU0OjA3LjM4NTMxNjE1NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTE3MTg4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfdmFsaWRhdGVfaW5jb21pbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jPTYzMTQ9c3RhdGljIGJvb2wgdGNwX3Jlc2V0X2NoZWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTYzMjUtICovXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NjMyNjpzdGF0aWMgYm9vbCB0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTYzMjctXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCwgaW50IHN5bl9pbmVycilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTY1MDQ9dm9pZCB0Y3BfcmN2X2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY2NzUtdmFsaWRhdGU6XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NjY3NjpcXHRpZiAoIXRjcF92YWxpZGF0ZV9pbmNvbWluZyhzaywgc2tiLCB0aCwgMSkpXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjY3Ny1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03MTU2PXRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03MjMwLVxcdH1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3MjMxOlxcdGlmICghdGNwX3ZhbGlkYXRlX2luY29taW5nKHNrLCBza2IsIHRoLCAwKSlcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03MjMyLVxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo1NDowNy40NTY0OTMxNDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTUxMTMyMTU1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVENQIFNlcXVlbmNlIE51bWJlciBWYWxpZGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdGNwX3NlcXVlbmNlKClgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgVENQIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW4gYHRjcF9pbnB1dC5jYC4gSXQncyByZXNwb25zaWJsZSBmb3IgdmFsaWRhdGluZyBzZXF1ZW5jZSBudW1iZXJzLCBhbmQgSSBzZWUgaXQgZHJvcHMgcGFja2V0cyB1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zOiBgZW5kX3NlcSA9PSB0cC1cdTAwM2VyY3Zfd3VwIFx1MDAyNlx1MDAyNiBzZXEgIT0gZW5kX3NlcSBcdTAwMjZcdTAwMjYgIXRoLVx1MDAzZXN5biBcdTAwMjZcdTAwMjYgIXRoLVx1MDAzZWZpbmAuIFRoZSBkcm9wIHJlYXNvbiBpcyBgU0tCX0RST1BfUkVBU09OX1RDUF9PTERfU0VRVUVOQ0VgLiBUaGlzIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGNoYW5nZSB3aXRoaW4gdGhlIFRDUCBzdGFjaywgYWZmZWN0aW5nIGhvdyBzZXF1ZW5jZSBudW1iZXJzIGFyZSBoYW5kbGVkLlxuXG5UaGUgYmlnIHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBiZSB0cmlnZ2VyZWQgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudD8gWWVhaCwgdGhpcyBpcyBUQ1AsIHNvIGl0J3MgZWFzaWx5IHJlYWNoYWJsZSDigJMgbG9jYWwgbG9vcGJhY2ssIFRVTi9UQVAsIHZldGgsIHlvdSBuYW1lIGl0LiBTbywgaXMgaXQgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhpcyBpcyBjb3JlIG5ldHdvcmsgc3RhY2sgcHJvdG9jb2wgbG9naWMsIHJpZ2h0IGF0IHRoZSBoZWFydCBvZiBzZXF1ZW5jZSB2YWxpZGF0aW9uLiBBbnkgdnVsbmVyYWJpbGl0eSBoZXJlIGNvdWxkIGJlIGNyaXRpY2FsLlxuXG5Ob3csIGhvbGQgb24uIEJlZm9yZSBJIGp1bXAgaW4sIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBMZXQgbWUgcmV2aWV3IHRoZSBndWlkZWxpbmVzLiBUaGUgaW5zdHJ1Y3Rpb24gaXMgdG8gZXh0cmFjdCBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgYXJlIGxpa2VseSB0byBiZSBoZWF2aWx5IGZ1enplZCwgYnV0IEkgbmVlZCB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBvdGhlcndpc2UgdGhlIHRlc3RzIHdpbGwgYmUgc2tld2VkLiBJIG5lZWQgdG8gZm9jdXMgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoaXMgbWFrZXMgc2Vuc2U7IGlubGluZWQgZnVuY3Rpb25zIHdvbid0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy5cblxuU28sIGxldCBtZSB0aGluazogSXMgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgLCBgdGNwX3Y0X3JjdmAsIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgLCBvciBgdGNwX3NlcXVlbmNlYCBhIGdvb2QgY2hvaWNlPyBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgbG9va3MgbGlrZSBhIGhvdCBwYXRoIHRvIG1lLiBBaCwgd2FpdCwgXCJBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cIiBUaGlzIG1lYW5zIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyBvdXQuIEhtbSwgd2hhdCBhYm91dCB0aGUgb3RoZXIgb3B0aW9ucy4gTGV0J3Mgc2VlOiBgdGNwX3NlcXVlbmNlYCBpcyBzdGF0aWMuIFNvLCB0aGF0J3Mgb3V0LiBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGFsc28gb3V0LiBTbywgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGlzIG91dCBiZWNhdXNlIGl0IGlzIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiBpbiBUQ1AuXG5cbk9rLCBpcyBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYCBub24tc3RhdGljPyBMZXQncyBjaGVjayBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQxNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo1NDoxOC45Njc4MTczNzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDM1MDI5NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjU0OjE5LjA2ODE3NTEzM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzc0MDMyMTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUQ1AgUmVjZWl2ZSBTdGF0ZSBNYWNoaW5lKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0YWtpbmcgYSBsb29rIGF0IGB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3NgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIG1pc2VyeSwgZGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiEpIG9mIGhhbmRsaW5nIGluY29taW5nIFRDUCBzZWdtZW50cyBoYXBwZW5zIHdpdGhpbiBhIHNwZWNpZmljIHN0YXRlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRlY2xhcmF0aW9uLCBlc3BlY2lhbGx5IHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgYW5kIGFueSBhc3NvY2lhdGVkIHN0cnVjdHVyZXMgcGFzc2VkIGluLiBJIHdhbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBpbnB1dHMgaXQgY29uc3VtZXMsIHRoZSBpbnRlcm5hbCBkYXRhIGl0J3MgbGlrZWx5IG1hbmlwdWxhdGluZyAoZS5nLiwgY29udHJvbCBibG9ja3MsIHNlcXVlbmNlIG51bWJlcnMsIHdpbmRvdyBzaXplcyksIGFuZCB3aGF0IGl0cyBvdXRwdXRzIGFyZSDigJMgd2hpY2ggZXNzZW50aWFsbHkgZGVmaW5lIHRoZSBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgYWN0aW9ucyB0cmlnZ2VyZWQgYnkgdGhpcyBmdW5jdGlvbi4gSSdtIGFudGljaXBhdGluZyB0aGF0IGl0J3MgdGhlIGhlYXJ0IG9mIHRoZSByZWNlaXZlIHNpZGUgc3RhdGUgbWFjaGluZS4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgYW55IHBvdGVudGlhbCBidWdzIGFuZC9vciBib3R0bGVuZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM4OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjU0OjIyLjg0MjIwOTE1NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4NTY5NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3Jjdl9zdGF0ZV9wcm9jZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuYz02ODU2PXN0YXRpYyBpbnQgdGNwX3Jjdl9zeW5zZW50X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzA4MC1cXHRcXHQgKiB3ZSBoYXZlIG5vIHJlYXNvbnMgdG8gYWNjZXB0IGl0IHNvbWV0aW1lcy5cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3MDgxOlxcdFxcdCAqIEFsc28sIHNlZW1zIHRoZSBjb2RlIGRvaW5nIGl0IGluIHN0ZXA2IG9mIHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTcwODItXFx0XFx0ICogaXMgbm90IGZsYXdsZXNzLiBTbywgZGlzY2FyZCBwYWNrZXQgZm9yIHNhbml0eS5cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTcxNTU9ZW51bSBza2JfZHJvcF9yZWFzb25cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3MTU2OnRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzE1Ny17XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTE4MzA9aW50IHRjcF92NF9kb19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xODc1LVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTg3NjpcXHRyZWFzb24gPSB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xODc3LVxcdGlmIChyZWFzb24pXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9MTAxPXRjcF90aW1ld2FpdF9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTEzMi1cXHRpZiAoUkVBRF9PTkNFKHR3LVxcdTAwM2V0d19zdWJzdGF0ZSkgPT0gVENQX0ZJTl9XQUlUMikge1xcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzoxMzM6XFx0XFx0LyogSnVzdCByZXBlYXQgYWxsIHRoZSBjaGVja3Mgb2YgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKCkgKi9cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtMTM0LVxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTY4Nz1zdHJ1Y3Qgc29jayAqdGNwX2NoZWNrX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtODE2LVxcdCAgIEJ1dCBnZW5lcmFsbHksIHdlIHNob3VsZCAoUkZDIGxpZXMhKSB0byBhY2NlcHQgQUNLXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjgxNzpcXHQgICBmcm9tIFNZTkFDSyBib3RoIGhlcmUgYW5kIGluIHRjcF9yY3Zfc3RhdGVfcHJvY2VzcygpLlxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo4MTg6XFx0ICAgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKCkgZG9lcyBub3QsIGhlbmNlLCB3ZSBkbyBub3QgdG9vLlxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy04MTktXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9OTk4PWVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9jaGlsZF9wcm9jZXNzKHN0cnVjdCBzb2NrICpwYXJlbnQsIHN0cnVjdCBzb2NrICpjaGlsZCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy0xMDA5LVxcdGlmICghc29ja19vd25lZF9ieV91c2VyKGNoaWxkKSkge1xcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzoxMDEwOlxcdFxcdHJlYXNvbiA9IHRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhjaGlsZCwgc2tiKTtcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtMTAxMS1cXHRcXHQvKiBXYWtldXAgcGFyZW50LCBzZW5kIFNJR0lPICovXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDEwMT1zdGF0aWMgdm9pZCB0Y3BfY29ubmVjdF9pbml0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTA5LVxcdC8qIFdlJ2xsIGZpeCB0aGlzIHVwIHdoZW4gd2UgZ2V0IGEgcmVzcG9uc2UgZnJvbSB0aGUgb3RoZXIgZW5kLlxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MTEwOlxcdCAqIFNlZSB0Y3BfaW5wdXQuYzp0Y3BfcmN2X3N0YXRlX3Byb2Nlc3MgY2FzZSBUQ1BfU1lOX1NFTlQuXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQxMTEtXFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjU0OjIyLjg5MDA3MDU1MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTg1OTg1NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoYXQ6XG5cbioqSW52ZXN0aWdhdGluZyBUQ1AgSW5wdXQgaW4gdGhlIEtlcm5lbCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIEknbGwgaW1tZWRpYXRlbHkganVtcCBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIHJlbGF0ZWQgdG8gbmV0d29ya2luZyB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciBzb3VyY2UgZmlsZSBpcyBicm91Z2h0IGludG8gdGhlIGJ1aWxkLiBUaGF0J2xsIGdpdmUgbWUgYSBoYW5kbGUgb24gdGhlIGNvbXBpbGUtdGltZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuXG5cbk5leHQsIHNpbmNlIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MsIEknbGwgc2hpZnQgZ2VhcnMgYW5kIG1vdmUgb3ZlciB0byB0aGUgYG5ldC9pcHY0L01ha2VmaWxlYC4gSSdsbCBwZXJmb3JtIGEgZ3JlcCBmb3IgYHRjcF9pbnB1dC5vYCB3aXRoaW4gdGhlIE1ha2VmaWxlLiBUaGlzIHNob3VsZCByZXZlYWwgaG93IHRoZSBvYmplY3QgZmlsZSBpcyBsaW5rZWQsIGFuZCBpZGVudGlmeSB3aGVyZSB0aGUgYnVpbGQgc3lzdGVtIGV4cGVjdHMgdG8gZmluZCB0aGUgc291cmNlIGNvZGUuIFRoYXQgc2hvdWxkIHByb3ZpZGUgYSBxdWljayBwaWN0dXJlIG9mIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aGluIHRoZSBsYXJnZXIgYG5ldC9pcHY0YCBidWlsZCBwcm9jZXNzLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTcwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NTQ6MjYuODc2MDU5MTY0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAwMzA1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfaW5wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtOS1cXHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlOjEwOlxcdCAgICAgdGNwLm8gdGNwX2lucHV0Lm8gdGNwX291dHB1dC5vIHRjcF90aW1lci5vIHRjcF9pcHY0Lm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlLTExLVxcdCAgICAgdGNwX21pbmlzb2Nrcy5vIHRjcF9jb25nLm8gdGNwX21ldHJpY3MubyB0Y3BfZmFzdG9wZW4ubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjU0OjI2LjkyMjA2ODQzMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzEwMDAyMjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gdGhlIElQdjQgSW5jbHVzaW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBuZXQvTWFrZWZpbGVgIG9yIGBuZXQvS2NvbmZpZ2AgZmlsZXMg4oCTIHByb2JhYmx5IHJlbGF0ZWQgdG8gY29uZmlndXJpbmcgdGhlIG5ldHdvcmsgc3RhY2suIEkgc2VlIHRoaXMgbGluZTogYG9iai0kKENPTkZJR19JTkVUKSArPSBpcHY0L2AuIE15IGltbWVkaWF0ZSBpbnRlcnByZXRhdGlvbiBpcyB0aGF0IGJhc2VkIG9uIHRoZSBgQ09ORklHX0lORVRgIG9wdGlvbiBiZWluZyBzZXQgKGxpa2VseSBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24pLCB0aGUgYGlwdjQvYCBkaXJlY3RvcnksIGFuZCB0aGVyZWZvcmUgdGhlIElQdjQgaW1wbGVtZW50YXRpb24sIGlzIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBidWlsZC4gSXQncyBhIGNvbmRpdGlvbmFsIGluY2x1c2lvbiwgd2hpY2ggaXMgc3RhbmRhcmQgcHJhY3RpY2UuIE5vdywgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIGluZGVlZCBob3cgaXQgd29ya3MuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIHNwZWNpZmljcywgYnV0IGJhc2VkIG9uIGV4cGVyaWVuY2UgdGhpcyBpcyB3aGF0IGl0IGxvb2tzIGxpa2UgaXMgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTk4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NTQ6MzMuMjMyMDczNzk2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODQzMTQ3MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2NFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19ORVRGSUxURVIpXFx0XFx0Kz0gbmV0ZmlsdGVyL1xcbm5ldC9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfSU5FVClcXHRcXHQrPSBpcHY0L1xcbm5ldC9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfVExTKVxcdFxcdCs9IHRscy9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NTQ6MzMuNTE2Mzk0MTM0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc3MTQ3MTgzNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbjpcblxuKipEaXZpbmcgaW50byB0aGUgSVB2NCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIElQdjQgbmV0d29ya2luZyBzdGFjayBpcyBzZXQgdXAsIGFuZCBJIHNlZSB0aGlzIGBJTkVUYCBtYWNyby4gUmlnaHQsIHRoYXQgbG9va3MgbGlrZSBpdCdzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBldmVyeXRoaW5nIHVuZGVyIGBuZXQvaXB2NC9gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQncyBkZWZpbmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMuIE15IG5leHQgc3RlcCBpcyBjbGVhcmx5IHRvIGdvIHN0cmFpZ2h0IGludG8gdGhlIEtjb25maWcgZmlsZXMuIEknbGwgY2hlY2sgZWl0aGVyIGBuZXQvaXB2NC9LY29uZmlnYCBkaXJlY3RseSwgb3IgaWYgaXQncyBhIG1vcmUgdG9wLWxldmVsIG9wdGlvbiwgbWF5YmUgYG5ldC9LY29uZmlnYCB3aWxsIGJlIHRoZSBwbGFjZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGV0YWlscyBvbiBgQ09ORklHX0lORVRgIGl0c2VsZiDigJMgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZSwgaGVscCB0ZXh0LCBldmVyeXRoaW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWluZyBlbmFibGVkIG9yIGRpc2FibGVkIGluIHRoZSBidWlsZC4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjgyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NTQ6NDEuMjMxMTE1ODU5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODYxNDgzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVFxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9OTk9Y29uZmlnIE5FVF9IQU5EU0hBS0VfS1VOSVRfVEVTVFxcbi0tXFxubmV0L0tjb25maWctMTEzLVxcbm5ldC9LY29uZmlnOjExNDpjb25maWcgSU5FVFxcbm5ldC9LY29uZmlnLTExNS1cXHRib29sIFxcXCJUQ1AvSVAgbmV0d29ya2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NTQ6NDEuMjk5NzM4NTQ2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk0ODA2NTAxMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKklORVQgRGVwZW5kZW5jeSBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gYElORVRgJ3MgZ290IGEgZGVwZW5kZW5jeSBvbiBgTkVUYC4gUmlnaHQsIG1ha2VzIHNlbnNlLiBOb3csIHdoZXJlJ3MgdGhhdCBkZWZpbmVkPyBJJ2xsIGJldCBpdCdzIGluIHRoZSBLY29uZmlnIGZpbGVzIHNvbWV3aGVyZS4gTGV0J3MgZGlnIGludG8gYG5ldC9LY29uZmlnYCDigJMgc2hvdWxkIGJlIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEknbSBnb2luZyB0byBqdW1wIHRvIHRoYXQgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDExNC4gSG9wZWZ1bGx5LCB0aGUgZGVwZW5kZW5jeSBkZWNsYXJhdGlvbiBpcyByaWdodCB0aGVyZSwgY2xlYXIgYXMgZGF5LiBMZXQncyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYyNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjU0OjUwLjc4MDM5MTQ4NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTA6XFx0XFxuIDExMTpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHJlZmVyXFxuIDExMjpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cXG4gMTEzOlxcdFxcbiAxMTQ6XFx0Y29uZmlnIElORVRcXG4gMTE1OlxcdFxcdGJvb2wgXFxcIlRDUC9JUCBuZXR3b3JraW5nXFxcIlxcbiAxMTY6XFx0XFx0aGVscFxcbiAxMTc6XFx0XFx0ICBUaGVzZSBhcmUgdGhlIHByb3RvY29scyB1c2VkIG9uIHRoZSBJbnRlcm5ldCBhbmQgb24gbW9zdCBsb2NhbFxcbiAxMTg6XFx0XFx0ICBFdGhlcm5ldHMuIEl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBzYXkgWSBoZXJlICh0aGlzIHdpbGwgZW5sYXJnZVxcbiAxMTk6XFx0XFx0ICB5b3VyIGtlcm5lbCBieSBhYm91dCA0MDAgS0IpLCBzaW5jZSBzb21lIHByb2dyYW1zIChlLmcuIHRoZSBYIHdpbmRvd1xcbiAxMjA6XFx0XFx0ICBzeXN0ZW0pIHVzZSBUQ1AvSVAgZXZlbiBpZiB5b3VyIG1hY2hpbmUgaXMgbm90IGNvbm5lY3RlZCB0byBhbnlcXG4gMTIxOlxcdFxcdCAgb3RoZXIgY29tcHV0ZXIuIFlvdSB3aWxsIGdldCB0aGUgc28tY2FsbGVkIGxvb3BiYWNrIGRldmljZSB3aGljaFxcbiAxMjI6XFx0XFx0ICBhbGxvd3MgeW91IHRvIHBpbmcgeW91cnNlbGYgKGdyZWF0IGZ1biwgdGhhdCEpLlxcbiAxMjM6XFx0XFxuIDEyNDpcXHRcXHQgIEZvciBhbiBleGNlbGxlbnQgaW50cm9kdWN0aW9uIHRvIExpbnV4IG5ldHdvcmtpbmcsIHBsZWFzZSByZWFkIHRoZVxcbiAxMjU6XFx0XFx0ICBMaW51eCBOZXR3b3JraW5nIEhPV1RPLCBhdmFpbGFibGUgZnJvbVxcbiAxMjY6XFx0XFx0ICBcXHUwMDNjaHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG9cXHUwMDNlLlxcbiAxMjc6XFx0XFxuIDEyODpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlIGFuZCBhbHNvIHRvIFxcXCIvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIiBhbmRcXG4gMTI5OlxcdFxcdCAgXFxcIlN5c2N0bCBzdXBwb3J0XFxcIiBiZWxvdywgeW91IGNhbiBjaGFuZ2UgdmFyaW91cyBhc3BlY3RzIG9mIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo1NDo1MC43ODA0Njk3MzZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE1NjY3Nzc2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgVENQIFNlcXVlbmNlIE51bWJlciBWYWxpZGF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIHJlbGV2YW50IHRvIHRoaXMgY2hhbmdlIGluIFRDUCBzZXF1ZW5jZSBudW1iZXIgdmFsaWRhdGlvbiB3aXRoaW4gYG5ldC9pcHY0L3RjcF9pbnB1dC5jYC4gSSdtIHNlZWluZyBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYCBhbmQgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgLiBBcmUgdGhlc2UgdGhlIGtleSBwbGF5ZXJzPyBMZXQncyBjb25maXJtOiBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgaXMgYHZvaWQgdGNwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpYCwgYW5kIGB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3NgIGlzIGBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAuIEdvb2QsIHRoZXkncmUgbm90IHN0YXRpYy5cblxuTm93LCBhIGtleSBjb25zaWRlcmF0aW9uOiBhcmUgdGhleSAqaG90LXBhdGgqIGZ1bmN0aW9ucz8gVGhlIHN5emthbGxlciBndWlkYW5jZSBpcyBjbGVhcjogYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCB0ZXN0IGRpc3RyaWJ1dGlvbiBza2V3LiAgSXQgcHJlZmVycyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWFrZXMgc2Vuc2UuIFRoaXMgbWVhbnMgSSB3YW50IHRvIGF2b2lkIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgZnJlcXVlbnRseSBpbiBub3JtYWwgVENQIG9wZXJhdGlvbi4gSWYgYHRjcF9zZXF1ZW5jZWAgaXMgYW4gaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbiBkaXJlY3RseSBjYWxsZWQgZm9yIGV2ZXJ5IGluY29taW5nIFRDUCBwYWNrZXQgaW4gZXN0YWJsaXNoZWQvc3RhdGUgcHJvY2Vzc2luZywgc2hvdWxkIEkgZXZlbiBib3RoZXIgd2l0aCBGb2N1c1N5bWJvbHM/IFRoaXMgaXMgdGhlIGNvcmUgaXNzdWUhXG5cbklmIGB0Y3Bfc2VxdWVuY2VgIGlzIGEgc3RhdGljIGhlbHBlciwgaXQncyB2ZXJ5IGxpa2VseSBpbmxpbmVkLiBBbmQgaWYgYWxsIGZ1bmN0aW9ucyBjYWxsaW5nIGl0IGFyZSBnZW5lcmljIGhvdC1wYXRocyAoYHRjcF9yY3ZfZXN0YWJsaXNoZWRgLCBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYCwgYHRjcF92YWxpZGF0ZV9pbmNvbWluZ2AsIGB0Y3BfdjRfcmN2YCksIHdoYXQncyB0aGUgYmVzdCBvcHRpb24gaGVyZT8gU3l6a2FsbGVyIHdhbnRzIHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGF2b2lkIHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG5cbk9rYXksIGxldCdzIGNvbmZpcm0gdGhlIGlubGluaW5nOiBgdGNwX3NlcXVlbmNlYCBpcyBgc3RhdGljIGlubGluZSAvIHN0YXRpY2AuIEl0IGlzIHN0YXRpYyBhbmQgb25seSBjYWxsZWQgZnJvbSBgdGNwX3ZhbGlkYXRlX2luY29taW5nYC4gVGhhdCdzIHdoZXJlIHRoZSByZWxldmFudCBsb2dpYyBpcywgYnV0IGl0J3MgaW50ZXJuYWwuIElzIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCwgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AsIG9yIGB0Y3Bfc2VxdWVuY2VgIHdoYXQgSSBzaG91bGQgaW5jbHVkZT9cblxuSWYgYHRjcF9zZXF1ZW5jZWAgaXMgc3RhdGljIGFuZCBpbmxpbmVkLCBzeXprYWxsZXIgbWlnaHQgbm90IGV2ZW4gc2VlIGEgZGlzdGluY3Qgc3ltYm9sIGZvciBpdC4gYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AgaGFuZGxlcyBwYWNrZXRzIGluIG5vbi1FU1RBQkxJU0hFRCBzdGF0ZXMsIHdoaWNoIGlzIGRpZmZlcmVudCBmcm9tIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCwgd2hpY2ggaGFuZGxlcyBFU1RBQkxJU0hFRCBzdGF0ZS4gT2theSwgc28gbm93IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyOiB3aGF0IGRvZXMgdGhlIHBhdGNoICpkbyo/XG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0J3MgZHJvcHBpbmcgb2xkIHNlcXVlbmNlIHBhY2tldHMgd2hlcmUgYGVuZF9zZXEgPT0gdHAtXHUwMDNlcmN2X3d1cGAgKG1lYW5pbmcgdGhlIHBhY2tldCdzIGVuZCBzZXF1ZW5jZSBpcyBhdCBvciBiZWZvcmUgdGhlIHJlY2VpdmUgd2luZG93IHVwcGVyIGJvdW5kKSB3aXRoIG5vbi1lbXB0eSBwYXlsb2FkLCBidXQgd2l0aG91dCBTWU4gb3IgRklOIGZsYWdzLiBUaGlzIGlzIFRDUCBzZXF1ZW5jZSBudW1iZXIgdmFsaWRhdGlvbi5cblxuTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVxdWlyZWQuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19JTkVUYCBpcyBzdWZmaWNpZW50LlxuXG5Ob3csIGxldCdzIGFzc2VtYmxlIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuIGBXb3J0aEZ1enppbmdgIGlzIG9idmlvdXNseSB0cnVlLiBUaGUgYFJlYXNvbmluZ2Agd2lsbCBiZSBhIGNsZWFyIGV4cGxhbmF0aW9uOiBUaGUgcGF0Y2ggbW9kaWZpZXMgVENQIHNlcXVlbmNlIG51bWJlciB2YWxpZGF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW4gYHRjcF9zZXF1ZW5jZSgpYCAoZXZlbiBpZiBpdCdzIGlubGluZWQpLCB3aXRoaW4gYG5ldC9pcHY0L3RjcF9pbnB1dC5jYC4gVGhlIHBhdGNoIGRyb3BzIG9sZCBwYWNrZXRzIHdoZW4gYGVuZF9zZXEgPT0gdHAtXHUwMDNlcmN2X3d1cGAgd2l0aCBub24tZW1wdHkgcGF5bG9hZHMgYW5kIHdpdGhvdXQgU1lOL0ZJTiBmbGFncy4gYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmUgYFtcIklORVRcIl1gLiBCdXQgd2hhdCBhYm91dCBgRm9jdXNTeW1ib2xzYD9cblxuTGV0J3MgcmV2aXNpdCB0aGUgc3l6a2FsbGVyIGd1aWRhbmNlOiBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gSXMgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGEgaG90LXBhdGggZnVuY3Rpb24/IFllcywgaXQgaXMuIEJ1dCBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYCBkZWFscyB3aXRoIHN0YXRlIHRyYW5zaXRpb25zLiAgU28sIHNob3VsZCBpdCBiZSBgW1widGNwX3Jjdl9zdGF0ZV9wcm9jZXNzXCJdYCwgYFtdYCwgb3Igc29tZXRoaW5nIGVsc2U/XG5cbmB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3NgIGlzIGV4cG9ydGVkL25vbi1zdGF0aWMgYW5kIGRlYWxzIHdpdGggc3RhdGUgdHJhbnNpdGlvbnMsIHdoaWNoIGFyZSBpbnRlcmVzdGluZyB0YXJnZXRzLiBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgaXMgdGhlIHZlcnkgZGVmaW5pdGlvbiBvZiBhIGdlbmVyaWMgaG90LXBhdGggZm9yIFRDUC4gIEZvY3VzU3ltYm9scyBpcyB1c2VkIHRvIHRhcmdldCBmdXp6aW5nIGF0IGEgc3BlY2lmaWMgZnVuY3Rpb24uICBTbyBpZiB3ZSdyZSB3b3JyaWVkIGFib3V0IGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBiZWluZyB0b28gZ2VuZXJhbCwgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AgaXMgYSBkZWNlbnQgb3B0aW9uLCBvdGhlcndpc2Ugd2UgY2FuIGxlYXZlIGl0IGVtcHR5LiBMZXQncyBtYWtlIHN1cmUgYHRjcF9zZXF1ZW5jZWAgaXMgYW4gaW50ZXJuYWwgaGVscGVyLiBZZXMsIGl0IGlzIHN0YXRpYy5cblxuTGFzdGx5LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBvdGhlciBmaWxlIG1vZGlmaWNhdGlvbnMgaW4gdGhlIGNvbW1pdC4gSXQncyBvbmx5IGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIE9rYXksIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgdGhpbmsgYFtcInRjcF9yY3Zfc3RhdGVfcHJvY2Vzc1wiXWAgaXMgdGhlIGJlc3QgY2hvaWNlIGZvciBGb2N1c1N5bWJvbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNjcsIk91dHB1dFRva2VucyI6MTA2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjU1OjAyLjM0NzI0OTg3N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0ODkyNTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3Jjdl9zdGF0ZV9wcm9jZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgVENQIHNlcXVlbmNlIHZhbGlkYXRpb24gbG9naWMgaW4gdGNwX3NlcXVlbmNlKCkgd2l0aGluIG5ldC9pcHY0L3RjcF9pbnB1dC5jIHRvIGRyb3AgcGFja2V0cyB3aXRoIG9sZCBzZXF1ZW5jZSBudW1iZXJzIHdoZW4gZW5kX3NlcSBlcXVhbHMgcmN2X3d1cCBmb3Igbm9uLWVtcHR5IHBhY2tldHMgd2l0aG91dCBTWU4vRklOIGZsYWdzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYWZmZWN0aW5nIFRDUCBwYWNrZXQgcHJvY2Vzc2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3Jjdl9zdGF0ZV9wcm9jZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgVENQIHNlcXVlbmNlIHZhbGlkYXRpb24gbG9naWMgaW4gdGNwX3NlcXVlbmNlKCkgd2l0aGluIG5ldC9pcHY0L3RjcF9pbnB1dC5jIHRvIGRyb3AgcGFja2V0cyB3aXRoIG9sZCBzZXF1ZW5jZSBudW1iZXJzIHdoZW4gZW5kX3NlcSBlcXVhbHMgcmN2X3d1cCBmb3Igbm9uLWVtcHR5IHBhY2tldHMgd2l0aG91dCBTWU4vRklOIGZsYWdzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYWZmZWN0aW5nIFRDUCBwYWNrZXQgcHJvY2Vzc2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NTU6MDIuNDIyMTQ5MTM0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjkyNDQ5NjEyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjU1OjAyLjQyMjU4NjU1NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM2OTI0MDU0NDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIGlucHV0IHNlcXVlbmNlIHZhbGlkYXRpb24gaW4gYHRjcF9zZXF1ZW5jZSgpYCBieSBhZGRpbmcgYSBjb25kaXRpb24gdG8gZHJvcCBpbmNvbWluZyBwYWNrZXRzIHdob3NlIGVuZCBzZXF1ZW5jZSBlcXVhbHMgYHRwLVxcdTAwM2VyY3Zfd3VwYCAod2hlbiBjYXJyeWluZyBwYXlsb2FkIHdpdGhvdXQgU1lOL0ZJTiBmbGFncykgYXMgYFNLQl9EUk9QX1JFQVNPTl9UQ1BfT0xEX1NFUVVFTkNFYC5cXG5cXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWRqdXN0cyBUQ1AgcHJvdG9jb2wgc2VxdWVuY2UgbnVtYmVyIHZhbGlkYXRpb24gbG9naWMgYW5kIHJldHVybiBjb2Rlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGNvcHlpbmcgb2Yga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkuIFRoZXJlZm9yZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM3Y2Y1Yjk1ZjBiMTQ1ZDgxMzhmOTkxMDJjOWYyNmM1ODkyZDk2YjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxMzo1MzoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcbmluZGV4IGRhZmY5M2Q1MTM0MjguLjE5OTEyODVhYTAzZTMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcbkBAIC00ODQ0LDcgKzQ4NDQsMTEgQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9zZXF1ZW5jZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4gXHRjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbiBcdHUzMiBzZXFfbGltaXQ7XG4gXG4tXHRpZiAoYmVmb3JlKGVuZF9zZXEsIHRwLVx1MDAzZXJjdl93dXApKVxuK1x0aWYgKGJlZm9yZShlbmRfc2VxLCB0cC1cdTAwM2VyY3Zfd3VwKSB8fFxuK1x0ICAgIChlbmRfc2VxID09IHRwLVx1MDAzZXJjdl93dXAgXHUwMDI2XHUwMDI2XG4rXHQgICAgIHNlcSAhPSBlbmRfc2VxIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAhdGgtXHUwMDNlc3luIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAhdGgtXHUwMDNlZmluKSlcbiBcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9UQ1BfT0xEX1NFUVVFTkNFO1xuIFxuIFx0c2VxX2xpbWl0ID0gdHAtXHUwMDNlcmN2X254dCArIHRjcF9tYXhfcmVjZWl2ZV93aW5kb3codHApO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NTU6MDIuNDIyNTg3NDk0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2NjczMjI0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1AgU2VxdWVuY2UgQ2hlY2sqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSdtIGxvb2tpbmcgYXQgYSBkaWZmIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2lucHV0LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB0Y3Bfc2VxdWVuY2VgIGZ1bmN0aW9uLiBUaGUgY29kZSdzIHB1cnBvc2UgaXMsIG9mIGNvdXJzZSwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gaW5jb21pbmcgVENQIHNlZ21lbnQncyBzZXF1ZW5jZSBudW1iZXIgZmFsbHMgd2l0aGluIGFuIGFjY2VwdGFibGUgd2luZG93LCB0aGVyZWJ5IHZhbGlkYXRpbmcgdGhlIHBhY2tldCdzIG9yZGVyIGFuZCBwcmV2ZW50aW5nIHJlcGxheSBhdHRhY2tzLCBldGMuXG5cblRoZSBjcml0aWNhbCBjaGFuZ2UgaXMgaW4gdGhlIGBpZmAgY29uZGl0aW9uLiBUaGUgb3JpZ2luYWwgY29uZGl0aW9uIHdhcyBzdHJhaWdodGZvcndhcmQ6IGBpZiAoYmVmb3JlKGVuZF9zZXEsIHRwLVx1MDAzZXJjdl93dXApKWAuIFRoaXMgd2FzIGEgYmFzaWMgY2hlY2sgdG8gc2VlIGlmIHRoZSBlbmQgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBjdXJyZW50IHNlZ21lbnQgd2FzICpiZWZvcmUqIHRoZSByZWNlaXZlcidzIHdpbmRvdyB1cHBlciBib3VuZCAoYHRwLVx1MDAzZXJjdl93dXBgKS4gSWYgaXQgd2FzLCB0aGUgcGFja2V0IHdhcyBjb25zaWRlcmVkIG9sZC5cblxuVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtb3JlIG51YW5jZWQgY2hlY2ssIGVzc2VudGlhbGx5IGFkZGluZyBhbiBgfHxgIHdpdGggYSBuZXcgY29uZGl0aW9uLiBOb3csIGl0J3MgY2hlY2tpbmcgd2hldGhlciBgYmVmb3JlKGVuZF9zZXEsIHRwLVx1MDAzZXJjdl93dXApIHx8IChlbmRfc2VxID09IHRwLVx1MDAzZXJjdl93dXAgXHUwMDI2XHUwMDI2IHNlcSAhPSBlbmRfc2VxIFx1MDAyNlx1MDAyNiAhdGgtXHUwMDNlc3luIFx1MDAyNlx1MDAyNiAhdGgtXHUwMDNlZmluKWAuIExldCdzIGJyZWFrIGRvd24gdGhpcyBzZWNvbmQgcGFydC4gSXQgZXNzZW50aWFsbHkgc2F5czogaWYgdGhlIGBlbmRfc2VxYCAqZXF1YWxzKiBgdHAtXHUwMDNlcmN2X3d1cGAsIGFuZCBpZiB0aGUgc2VxdWVuY2UgbnVtYmVyIGlzICpub3QqIGVxdWFsIHRvIHRoZSBlbmQgc2VxdWVuY2UgbnVtYmVyLCBhbmQgaXQncyAqbm90KiBhIFNZTiBvciBGSU4gcGFja2V0LCB0aGVuIGRyb3AgdGhlIHBhY2tldCBhcyB3ZWxsLlxuXG5UaGlzIHNlZW1zIHRvIGJlIHRhcmdldGluZyBhIHNwZWNpZmljIGVkZ2UgY2FzZSB3aGVyZSBhIHNlZ21lbnQgd2l0aCBhIHNlcXVlbmNlIG51bWJlciB0aGF0IGFwcGVhcnMgdG8gYmUgb24gdGhlIHdpbmRvdyBib3VuZGFyeSwgYnV0IGlzbid0IGFjdHVhbGx5IGEgc2VnbWVudCB3ZSBhcmUgaW50ZXJlc3RlZCBpbi4gSXQncyBlc3NlbnRpYWxseSBmaWx0ZXJpbmcgb3V0IHNlZ21lbnRzIHdpdGggYSBzZXF1ZW5jZSBudW1iZXIgdGhhdCBpcyBvbiB0aGUgdXBwZXIgYm91bmRhcnkgb2YgdGhlIHdpbmRvdywgYnV0IHdlIGFyZSAqbm90KiBwcm9jZXNzaW5nIGEgU1lOIG9yIEZJTiBwYWNrZXQgZm9yIHRoZSBjb25uZWN0aW9uLiBHaXZlbiB0aGF0IHRoaXMgaXMgaW4gVENQLCB0aGlzIGxpa2VseSBpcyBhIHNwZWNpZmljIGNhc2Ugb2YgYW4gb3V0LW9mLW9yZGVyIHNlZ21lbnQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHdpbmRvdyBzbGlkaW5nIGZvcndhcmQuIEknZCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgcmVhc29uaW5nIGhlcmUg4oCTIG1heWJlIGEgcmVvcmRlcmluZyBpc3N1ZSBhZnRlciBhIHdpbmRvdyB1cGRhdGUsIGEgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHksIG9yIHNvbWUgc3VidGxlIGludGVyYWN0aW9uIHdpdGggb3RoZXIgVENQIG1lY2hhbmlzbXMgbGlrZSB3aW5kb3cgc2NhbGluZyBvciBTQUNLLiBJJ2QgbmVlZCB0byBzZWUgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBwb3NzaWJseSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgZm9yIHRoaXMgY2hhbmdlIGNvbXBsZXRlbHkuIFRoZSBsb2dpYyBzZWVtcyByZWFzb25hYmxlIGVub3VnaCBvbiB0aGUgc3VyZmFjZSwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo1NTowNy4wODk5MTc0ODZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ4MzUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ4MzU6XFx0ICogb2YgUkNWLk5YVC4gUGVlciBzdGlsbCBkaWQgbm90IGFkdmFuY2UgaGlzIFNORC5VTkEgd2hlbiB3ZVxcbjQ4MzY6XFx0ICogZGVsYXllZCBBQ0ssIHNvIHRoYXQgaGlzU05ELlVOQVxcdTAwM2M9b3VyUkNWLldVUC5cXG40ODM3OlxcdCAqIChib3Jyb3dlZCBmcm9tIGZyZWVic2QpXFxuNDgzODpcXHQgKi9cXG40ODM5OlxcdFxcbjQ4NDA6XFx0c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9zZXF1ZW5jZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuNDg0MTpcXHRcXHRcXHRcXHRcXHRcXHQgdTMyIHNlcSwgdTMyIGVuZF9zZXEsXFxuNDg0MjpcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHRjcGhkciAqdGgpXFxuNDg0MzpcXHR7XFxuNDg0NDpcXHRcXHRjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG40ODQ1OlxcdFxcdHUzMiBzZXFfbGltaXQ7XFxuNDg0NjpcXHRcXG40ODQ3OlxcdFxcdGlmIChiZWZvcmUoZW5kX3NlcSwgdHAtXFx1MDAzZXJjdl93dXApIHx8XFxuNDg0ODpcXHRcXHQgICAgKGVuZF9zZXEgPT0gdHAtXFx1MDAzZXJjdl93dXAgXFx1MDAyNlxcdTAwMjZcXG40ODQ5OlxcdFxcdCAgICAgc2VxICE9IGVuZF9zZXEgXFx1MDAyNlxcdTAwMjZcXG40ODUwOlxcdFxcdCAgICAgIXRoLVxcdTAwM2VzeW4gXFx1MDAyNlxcdTAwMjZcXG40ODUxOlxcdFxcdCAgICAgIXRoLVxcdTAwM2VmaW4pKVxcbjQ4NTI6XFx0XFx0XFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9UQ1BfT0xEX1NFUVVFTkNFO1xcbjQ4NTM6XFx0XFxuNDg1NDpcXHRcXHRzZXFfbGltaXQgPSB0cC1cXHUwMDNlcmN2X254dCArIHRjcF9tYXhfcmVjZWl2ZV93aW5kb3codHApO1xcbjQ4NTU6XFx0XFx0aWYgKHVubGlrZWx5KGFmdGVyKGVuZF9zZXEsIHNlcV9saW1pdCkpKSB7XFxuNDg1NjpcXHRcXHRcXHQvKiBTb21lIHN0YWNrcyBhcmUga25vd24gdG8gaGFuZGxlIEZJTiBpbmNvcnJlY3RseTsgYWxsb3cgdGhlXFxuNDg1NzpcXHRcXHRcXHQgKiBGSU4gdG8gZXh0ZW5kIGJleW9uZCB0aGUgd2luZG93IGFuZCBjaGVjayBpdCBpbiBkZXRhaWwgbGF0ZXIuXFxuNDg1ODpcXHRcXHRcXHQgKi9cXG40ODU5OlxcdFxcdFxcdGlmICghYWZ0ZXIoZW5kX3NlcSAtIHRoLVxcdTAwM2VmaW4sIHNlcV9saW1pdCkpXFxuNDg2MDpcXHRcXHRcXHRcXHRyZXR1cm4gU0tCX05PVF9EUk9QUEVEX1lFVDtcXG40ODYxOlxcdFxcbjQ4NjI6XFx0XFx0XFx0aWYgKGFmdGVyKHNlcSwgc2VxX2xpbWl0KSlcXG40ODYzOlxcdFxcdFxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX0lOVkFMSURfU0VRVUVOQ0U7XFxuNDg2NDpcXHRcXG40ODY1OlxcdFxcdFxcdC8qIE9ubHkgYWNjZXB0IHRoaXMgcGFja2V0IGlmIHJlY2VpdmUgcXVldWUgaXMgZW1wdHkuICovXFxuNDg2NjpcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKVxcbjQ4Njc6XFx0XFx0XFx0XFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9UQ1BfSU5WQUxJRF9FTkRfU0VRVUVOQ0U7XFxuNDg2ODpcXHRcXHR9XFxuNDg2OTpcXHRcXG40ODcwOlxcdFxcdHJldHVybiBTS0JfTk9UX0RST1BQRURfWUVUO1xcbjQ4NzE6XFx0fVxcbjQ4NzI6XFx0XFxuNDg3MzpcXHRcXG40ODc0OlxcdHZvaWQgdGNwX2RvbmVfd2l0aF9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXFxuNDg3NTpcXHR7XFxuNDg3NjpcXHRcXHQvKiBUaGlzIGJhcnJpZXIgaXMgY291cGxlZCB3aXRoIHNtcF9ybWIoKSBpbiB0Y3BfcG9sbCgpICovXFxuNDg3NzpcXHRcXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza19lcnIsIGVycik7XFxuNDg3ODpcXHRcXHRzbXBfd21iKCk7XFxuNDg3OTpcXHRcXG40ODgwOlxcdFxcdHRjcF93cml0ZV9xdWV1ZV9wdXJnZShzayk7XFxuNDg4MTpcXHRcXHR0Y3BfZG9uZShzayk7XFxuNDg4MjpcXHRcXG40ODgzOlxcdFxcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxcbjQ4ODQ6XFx0XFx0XFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NTU6MDcuMDkwMzU5ODc2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2MTA0NzU0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgcHJvbXB0LCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGEgaGlnaCBsZXZlbCBvZiBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gYHRjcF9zZXF1ZW5jZWAqKlxuXG5Pa2F5LCBzbyB0aGUgcHJvbXB0IGlzIGFza2luZyBtZSB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBgdGNwX3NlcXVlbmNlYCBhbmQsIGNyaXRpY2FsbHksIGhvdyBhbmQgd2hlcmUgaXQncyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoZSBlbXBoYXNpcyBvbiBcImNhbGxlcnNcIiBzdWdnZXN0cyBhIHByaW1hcnkgZ29hbCBvZiB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cgYW5kIGRlcGVuZGVuY2llcyBzdXJyb3VuZGluZyB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGB0Y3Bfc2VxdWVuY2VgIGlzIGRlc2lnbmVkIHRvICpkbyosIHdoYXQgaXRzIGlucHV0cyBhcmUsIHdoYXQgaXQgcHJvZHVjZXMgYXMgb3V0cHV0LCBhbmQgaW1wb3J0YW50bHksIHdoaWNoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gcmVseSBvbiBpdHMgcmVzdWx0cy4gVGhpcyBzdWdnZXN0cyBhIG5lZWQgdG8gZWl0aGVyIHRyYWNlIGl0cyBjb2RlLCBleGFtaW5lIGl0cyBkb2N1bWVudGF0aW9uIChpZiBhbnkpLCBvciB1c2UgbXkgdG9vbHMgdG8gZmluZCBhbGwgY2FsbHMgYW5kIHBvc3NpYmx5IHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmdW5jdGlvbiB0byBzZWUgaG93IGl0IHdvcmtzLiBBIGtleSBzdHJhdGVneSBoZXJlIHdpbGwgYmUgdG8gc3RhcnQgd2l0aCB0aGUgZnVuY3Rpb24gaXRzZWxmLCBhbmQgdGhlbiB1bmRlcnN0YW5kIGl0cyBcImNsaWVudHMuXCIgVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHR1YWwga25vd2xlZGdlIEkgbmVlZCB0byBmb3JtIGEgdXNlZnVsIGFuYWx5c2lzLiBJJ20gYXNzdW1pbmcsIG9mIGNvdXJzZSwgdGhhdCBcInRjcFwiIHJlZmVycyB0byB0aGUgVHJhbnNtaXNzaW9uIENvbnRyb2wgUHJvdG9jb2wsIGFuZCBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBhcyBjb250ZXh0IGlmIHRoZSBjb2RlIGRvZXNuJ3QgZXhwbGljaXRseSByZWZlciB0byB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODEyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo1NToxMy43MDA4Mzg1OThaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMDU4Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9zZXF1ZW5jZVxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuYz00NzkxPXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfZGlzb3JkZXJlZF9hY2tfY2hlY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDgzOS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0ODQwOnN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3Bfc2VxdWVuY2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4NDEtXFx0XFx0XFx0XFx0XFx0IHUzMiBzZXEsIHUzMiBlbmRfc2VxLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NjMyNj1zdGF0aWMgYm9vbCB0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM2My1cXHQvKiBTdGVwIDE6IGNoZWNrIHNlcXVlbmNlIG51bWJlciAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjYzNjQ6XFx0cmVhc29uID0gdGNwX3NlcXVlbmNlKHNrLCBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXNlcSxcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02MzY1LVxcdFxcdFxcdCAgICAgIFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlZW5kX3NlcSwgdGgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo1NToxMy43NzE5MDU0MTVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ0OTQ5NjU3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBhbmQgU2VxdWVuY2UgTnVtYmVycyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gY3VyaW91cyBhYm91dCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBhbmQgdGhlIGB0Y3Bfc2VxdWVuY2VgIHZhcmlhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBoYW5kbGluZyBzZXF1ZW5jZSBudW1iZXJzIGZyb20gaW5jb21pbmcgVENQIHNlZ21lbnRzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHZhbGlkYXRpb24gcHJvY2Vzcy4gV2hhdCBhcmUgdGhlIGtleSBjaGVja3M/IFdoZXJlIGFyZSB0aGUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgb3IgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9ucywgcHJlc2VudD8gSSBzdXNwZWN0IGl0J3MgbG9va2luZyBhdCB0aGUgc2VxdWVuY2UgbnVtYmVyIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgZXN0YWJsaXNoZWQgVENQIGNvbm5lY3Rpb24gc3RhdGUsIGxpa2UgdGhlIGV4cGVjdGVkIHNlcXVlbmNlIG51bWJlciwgd2luZG93IHNpemUsIGFuZCBhY2tub3dsZWRnbWVudCBudW1iZXJzLiBJIGFsc28gd29uZGVyIGhvdyBpdCBoYW5kbGVzIHJldHJhbnNtaXNzaW9ucywgb3V0LW9mLW9yZGVyIHNlZ21lbnRzLCBhbmQgU1lOL0FDSyBoYW5kc2hha2VzLiBJJ20gYW50aWNpcGF0aW5nIHRoYXQgaXQgd2lsbCBlbmZvcmNlIFRDUCdzIHJlbGlhYmlsaXR5IG1lY2hhbmlzbXMsIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGFuZCBwcmV2ZW50aW5nIHNlcXVlbmNlIG51bWJlciB3cmFwcGluZyBpc3N1ZXMuIEkgaG9wZSB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB2YWxpZGF0aW9ucyB3aWxsIGluZm9ybSBob3cgdGhlIHN0YWNrIHByb2Nlc3NlcyBUQ1AgcGFja2V0cy4gSSBhbHNvIHdhbnQgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCBlZGdlIGNhc2VzIHJlbGF0ZWQgdG8gcGF0aG9sb2dpY2FsIHNlcXVlbmNlIG51bWJlcnMgb3IgY3JhZnRlZCBwYWNrZXRzIHRoYXQgY291bGQgYnlwYXNzIHRoZXNlIHZhbGlkYXRpb25zLiBMZXQncyBzZWUgaG93IGl0J3MgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo1NToxOC4yMjE0MDM4NDdaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzNTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYzNTU6XFx0XFx0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9QQVdTRVNUQUJSRUpFQ1RFRCk7XFxuNjM1NjpcXHRcXHRpZiAoIXRjcF9vb3dfcmF0ZV9saW1pdGVkKHNvY2tfbmV0KHNrKSwgc2tiLFxcbjYzNTc6XFx0XFx0XFx0XFx0XFx0ICBMSU5VWF9NSUJfVENQQUNLU0tJUFBFRFBBV1MsXFxuNjM1ODpcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ0cC1cXHUwMDNlbGFzdF9vb3dfYWNrX3RpbWUpKVxcbjYzNTk6XFx0XFx0XFx0dGNwX3NlbmRfZHVwYWNrKHNrLCBza2IpO1xcbjYzNjA6XFx0XFx0Z290byBkaXNjYXJkO1xcbjYzNjE6XFx0XFxuNjM2MjpcXHRzdGVwMTpcXG42MzYzOlxcdFxcdC8qIFN0ZXAgMTogY2hlY2sgc2VxdWVuY2UgbnVtYmVyICovXFxuNjM2NDpcXHRcXHRyZWFzb24gPSB0Y3Bfc2VxdWVuY2Uoc2ssIFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlc2VxLFxcbjYzNjU6XFx0XFx0XFx0XFx0ICAgICAgVENQX1NLQl9DQihza2IpLVxcdTAwM2VlbmRfc2VxLCB0aCk7XFxuNjM2NjpcXHRcXHRpZiAocmVhc29uKSB7XFxuNjM2NzpcXHRcXHRcXHQvKiBSRkM3OTMsIHBhZ2UgMzc6IFxcXCJJbiBhbGwgc3RhdGVzIGV4Y2VwdCBTWU4tU0VOVCwgYWxsIHJlc2V0XFxuNjM2ODpcXHRcXHRcXHQgKiAoUlNUKSBzZWdtZW50cyBhcmUgdmFsaWRhdGVkIGJ5IGNoZWNraW5nIHRoZWlyIFNFUS1maWVsZHMuXFxcIlxcbjYzNjk6XFx0XFx0XFx0ICogQW5kIHBhZ2UgNjk6IFxcXCJJZiBhbiBpbmNvbWluZyBzZWdtZW50IGlzIG5vdCBhY2NlcHRhYmxlLFxcbjYzNzA6XFx0XFx0XFx0ICogYW4gYWNrbm93bGVkZ21lbnQgc2hvdWxkIGJlIHNlbnQgaW4gcmVwbHkgKHVubGVzcyB0aGUgUlNUXFxuNjM3MTpcXHRcXHRcXHQgKiBiaXQgaXMgc2V0LCBpZiBzbyBkcm9wIHRoZSBzZWdtZW50IGFuZCByZXR1cm4pXFxcIi5cXG42MzcyOlxcdFxcdFxcdCAqL1xcbjYzNzM6XFx0XFx0XFx0aWYgKCF0aC1cXHUwMDNlcnN0KSB7XFxuNjM3NDpcXHRcXHRcXHRcXHRpZiAodGgtXFx1MDAzZXN5bilcXG42Mzc1OlxcdFxcdFxcdFxcdFxcdGdvdG8gc3luX2NoYWxsZW5nZTtcXG42Mzc2OlxcdFxcbjYzNzc6XFx0XFx0XFx0XFx0aWYgKHJlYXNvbiA9PSBTS0JfRFJPUF9SRUFTT05fVENQX0lOVkFMSURfU0VRVUVOQ0UgfHxcXG42Mzc4OlxcdFxcdFxcdFxcdCAgICByZWFzb24gPT0gU0tCX0RST1BfUkVBU09OX1RDUF9JTlZBTElEX0VORF9TRVFVRU5DRSlcXG42Mzc5OlxcdFxcdFxcdFxcdFxcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLFxcbjYzODA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgTElOVVhfTUlCX0JFWU9ORF9XSU5ET1cpO1xcbjYzODE6XFx0XFx0XFx0XFx0aWYgKCF0Y3Bfb293X3JhdGVfbGltaXRlZChzb2NrX25ldChzayksIHNrYixcXG42MzgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgTElOVVhfTUlCX1RDUEFDS1NLSVBQRURTRVEsXFxuNjM4MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ0cC1cXHUwMDNlbGFzdF9vb3dfYWNrX3RpbWUpKVxcbjYzODQ6XFx0XFx0XFx0XFx0XFx0dGNwX3NlbmRfZHVwYWNrKHNrLCBza2IpO1xcbjYzODU6XFx0XFx0XFx0fSBlbHNlIGlmICh0Y3BfcmVzZXRfY2hlY2soc2ssIHNrYikpIHtcXG42Mzg2OlxcdFxcdFxcdFxcdGdvdG8gcmVzZXQ7XFxuNjM4NzpcXHRcXHRcXHR9XFxuNjM4ODpcXHRcXHRcXHRnb3RvIGRpc2NhcmQ7XFxuNjM4OTpcXHRcXHR9XFxuNjM5MDpcXHRcXG42MzkxOlxcdFxcdC8qIFN0ZXAgMjogY2hlY2sgUlNUIGJpdCAqL1xcbjYzOTI6XFx0XFx0aWYgKHRoLVxcdTAwM2Vyc3QpIHtcXG42MzkzOlxcdFxcdFxcdC8qIFJGQyA1OTYxIDMuMiAoZXh0ZW5kIHRvIG1hdGNoIGFnYWluc3QgKFJDVi5OWFQgLSAxKSBhZnRlciBhXFxuNjM5NDpcXHRcXHRcXHQgKiBGSU4gYW5kIFNBQ0sgdG9vIGlmIGF2YWlsYWJsZSk6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjU1OjE4LjIyMTY5NDE0N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTEyNDkyMzYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUQ1AgU2VxdWVuY2UgVmFsaWRhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgbW9kaWZpY2F0aW9uIHRvIGB0Y3Bfc2VxdWVuY2UoKWAuIEl0IGZvY3VzZXMgb24gc2VxdWVuY2UgbnVtYmVyIHZhbGlkYXRpb24sIHNwZWNpZmljYWxseSBoYW5kbGluZyB0aGUgY2FzZSB3aGVyZSBhIHBhY2tldCdzIGVuZGluZyBzZXF1ZW5jZSBudW1iZXIgKGBlbmRfc2VxYCkgbWF0Y2hlcyBgdHAtXHUwMDNlcmN2X3d1cGAsIHRoZSB3aW5kb3cgdXBkYXRlIHNlcXVlbmNlLiBUaGUgcGF0Y2ggbm93IGRyb3BzIHRoZSBwYWNrZXQgd2l0aCBgU0tCX0RST1BfUkVBU09OX1RDUF9PTERfU0VRVUVOQ0VgIGlmIGBlbmRfc2VxYCBpcyBlcXVhbCB0byBgdHAtXHUwMDNlcmN2X3d1cGAsIGl0IGNvbnRhaW5zIGEgcGF5bG9hZCAoYHNlcSAhPSBlbmRfc2VxYCksIGFuZCBpdCdzICpub3QqIGEgU1lOIG9yIEZJTiBwYWNrZXQuIFRoaXMgbWFrZXMgc2Vuc2U7IGl0IHNlZW1zIGxpa2UgaXQgaXMgaW50ZW5kZWQgdG8gZHJvcCBvbGQgZGF0YSBhdCB0aGUgd2luZG93IHVwZGF0ZS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU2luY2UgSSdtIGZhbWlsaWFyIHdpdGggdGhlc2Ugc29ydHMgb2YgdnVsbmVyYWJpbGl0aWVzLCBJJ2xsIGdvIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdDpcblxuMS4gICoqS2VybmVsLXRvLVVzZXIgU3BhY2UgRXhwb3N1cmU6KiogQXJlIHRoZXJlIGFueSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nIGNvdWxkIGJlIGEgcHJvYmxlbT8gTm8sIHRoaXMgY29kZSBvcGVyYXRlcyBwdXJlbHkgd2l0aGluIHRoZSBrZXJuZWwgYW5kIGlzbid0IGludm9sdmVkIGluIHBhc3NpbmcgZGF0YSBzdHJ1Y3R1cmVzIG91dCB0byB1c2VyIHNwYWNlLlxuXG4yLiAgKipDb25kaXRpb25hbCBMb2dpYyBEZXBlbmRlbnQgb24gVW5pbml0aWFsaXplZCBWYXJpYWJsZXM6KiogTGV0J3MgbG9vayBhdCB0aGUgdmFyaWFibGVzLiBgc2VxYCwgYGVuZF9zZXFgLCBgdGhgLCBhbmQgYHRwLVx1MDAzZXJjdl93dXBgIGFyZSBhbGwgZGVyaXZlZCBmcm9tIHRoZSBUQ1AgaGVhZGVyLCB0aGUgVENQIHNvY2tldCBzdHJ1Y3R1cmUgKGB0cGApLCBhbmQgdGhlIFNLQiBjb250cm9sIGJsb2NrLiBUaGV5IGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIHdpdGhpbiB0aGUgdmFsaWRhdGlvbiBsb2dpYy4gU2VlbXMgc2FmZS5cblxuMy4gICoqQ29tcGxleCBEYXRhIFN0cnVjdHVyZSBIYW5kbGluZzoqKiBJcyB0aGVyZSBhbnkgY29tcGxleCBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGRhdGEgc3RydWN0dXJlcyBoZXJlPyBObywgdGhpcyBpcyBhbGwgcmVsYXRpdmVseSBzaW1wbGUgc2VxdWVuY2UgbnVtYmVyIGNvbXBhcmlzb24gd2l0aGluIGEgVENQIHBhY2tldCBwcm9jZXNzaW5nIGZ1bmN0aW9uLlxuXG40LiAgKipCb3VuZHMgQ2hlY2tpbmcgYW5kIEJ1ZmZlciBBY2Nlc3M6KiogRG9lcyB0aGUgY29kZSBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gcmVhZCBvciBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyB3aXRoaW4gZXhpc3RpbmcgYnVmZmVycyBiYXNlZCBvbiBsZW5ndGhzIG9yIGNvbmRpdGlvbmFsIGxvZ2ljPyBObywgdGhpcyBpcyBhYm91dCBkcm9wcGluZyBwYWNrZXRzIGJhc2VkIG9uIHNlcXVlbmNlIG51bWJlcnMgYW5kIHBhY2tldCB0eXBlLCBub3QgYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgcGFydHMgb2YgYSBidWZmZXIuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgYSBjYXJlZnVsIHJldmlldywgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlIGRhdGEgaXMgcHJvcGVybHkgc291cmNlZC4gR2l2ZW4gdGhhdCwgS01TQU4gaXNuJ3Qgd2FycmFudGVkOyBzdGFuZGFyZCBLQVNBTiBhbmQgc3RhbmRhcmQgdGVzdGluZyBzaG91bGQgYmUgc3VmZmljaWVudCB0byB2YWxpZGF0ZSB0aGUgY2hhbmdlLiBJIGFtIHJlYWR5IHRvIGZvcm11bGF0ZSBhIHJlc3BvbnNlIGFuZCBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MTMsIk91dHB1dFRva2VucyI6MTU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NTU6MzkuMzQ2NjIwODg1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIGlucHV0IHNlcXVlbmNlIHZhbGlkYXRpb24gaW4gYHRjcF9zZXF1ZW5jZSgpYCBieSBhZGRpbmcgYSBjb25kaXRpb24gdG8gZHJvcCBpbmNvbWluZyBwYWNrZXRzIHdob3NlIGVuZCBzZXF1ZW5jZSBlcXVhbHMgYHRwLVxcdTAwM2VyY3Zfd3VwYCAod2hlbiBjYXJyeWluZyBwYXlsb2FkIHdpdGhvdXQgU1lOL0ZJTiBmbGFncykgYXMgYFNLQl9EUk9QX1JFQVNPTl9UQ1BfT0xEX1NFUVVFTkNFYC5cXG5cXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWRqdXN0cyBUQ1AgcHJvdG9jb2wgc2VxdWVuY2UgbnVtYmVyIHZhbGlkYXRpb24gbG9naWMgYW5kIHJldHVybiBjb2Rlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGNvcHlpbmcgb2Yga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkuIFRoZXJlZm9yZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUQ1AgaW5wdXQgc2VxdWVuY2UgdmFsaWRhdGlvbiBpbiBgdGNwX3NlcXVlbmNlKClgIGJ5IGFkZGluZyBhIGNvbmRpdGlvbiB0byBkcm9wIGluY29taW5nIHBhY2tldHMgd2hvc2UgZW5kIHNlcXVlbmNlIGVxdWFscyBgdHAtXFx1MDAzZXJjdl93dXBgICh3aGVuIGNhcnJ5aW5nIHBheWxvYWQgd2l0aG91dCBTWU4vRklOIGZsYWdzKSBhcyBgU0tCX0RST1BfUkVBU09OX1RDUF9PTERfU0VRVUVOQ0VgLlxcblxcblRoaXMgY2hhbmdlIHNvbGVseSBhZGp1c3RzIFRDUCBwcm90b2NvbCBzZXF1ZW5jZSBudW1iZXIgdmFsaWRhdGlvbiBsb2dpYyBhbmQgcmV0dXJuIGNvZGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgY29weWluZyBvZiBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeS4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow9d9jg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-29 13:38:12 +0000 UTC FinishedAt: 2026-08-29 13:55:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "0685630fdccb62dcb0e3f44525a40578da5f6dc8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "0685630fdccb62dcb0e3f44525a40578da5f6dc8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET" ], "series_id": "0bafdece-bf48-419f-944d-0796e0f7ca0c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_rcv_state_process" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfcmN2X3N0YXRlX3Byb2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIGlucHV0IHNlcXVlbmNlIHZhbGlkYXRpb24gaW4gYHRjcF9zZXF1ZW5jZSgpYCBieSBhZGRpbmcgYSBjb25kaXRpb24gdG8gZHJvcCBpbmNvbWluZyBwYWNrZXRzIHdob3NlIGVuZCBzZXF1ZW5jZSBlcXVhbHMgYHRwLVx1MDAzZXJjdl93dXBgICh3aGVuIGNhcnJ5aW5nIHBheWxvYWQgd2l0aG91dCBTWU4vRklOIGZsYWdzKSBhcyBgU0tCX0RST1BfUkVBU09OX1RDUF9PTERfU0VRVUVOQ0VgLlxuXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWRqdXN0cyBUQ1AgcHJvdG9jb2wgc2VxdWVuY2UgbnVtYmVyIHZhbGlkYXRpb24gbG9naWMgYW5kIHJldHVybiBjb2Rlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGNvcHlpbmcgb2Yga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkuIFRoZXJlZm9yZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBUQ1Agc2VxdWVuY2UgdmFsaWRhdGlvbiBsb2dpYyBpbiB0Y3Bfc2VxdWVuY2UoKSB3aXRoaW4gbmV0L2lwdjQvdGNwX2lucHV0LmMgdG8gZHJvcCBwYWNrZXRzIHdpdGggb2xkIHNlcXVlbmNlIG51bWJlcnMgd2hlbiBlbmRfc2VxIGVxdWFscyByY3Zfd3VwIGZvciBub24tZW1wdHkgcGFja2V0cyB3aXRob3V0IFNZTi9GSU4gZmxhZ3MuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBhZmZlY3RpbmcgVENQIHBhY2tldCBwcm9jZXNzaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzdjZjViOTVmMGIxNDVkODEzOGY5OTEwMmM5ZjI2YzU4OTJkOTZiNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDEzOjUzOjEzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcbmluZGV4IGRhZmY5M2Q1MTM0MjguLjE5OTEyODVhYTAzZTMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcbkBAIC00ODQ0LDcgJiM0Mzs0ODQ0LDExIEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3Bfc2VxdWVuY2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4gXHR1MzIgc2VxX2xpbWl0O1xuIFxuLVx0aWYgKGJlZm9yZShlbmRfc2VxLCB0cC1cdTAwM2VyY3Zfd3VwKSlcbiYjNDM7XHRpZiAoYmVmb3JlKGVuZF9zZXEsIHRwLVx1MDAzZXJjdl93dXApIHx8XG4mIzQzO1x0ICAgIChlbmRfc2VxID09IHRwLVx1MDAzZXJjdl93dXAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICBzZXEgIT0gZW5kX3NlcSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICF0aC1cdTAwM2VzeW4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAhdGgtXHUwMDNlZmluKSlcbiBcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9UQ1BfT0xEX1NFUVVFTkNFO1xuIFxuIFx0c2VxX2xpbWl0ID0gdHAtXHUwMDNlcmN2X254dCAmIzQzOyB0Y3BfbWF4X3JlY2VpdmVfd2luZG93KHRwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX3Jjdl9zdGF0ZV9wcm9jZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFRDUCBzZXF1ZW5jZSB2YWxpZGF0aW9uIGxvZ2ljIGluIHRjcF9zZXF1ZW5jZSgpIHdpdGhpbiBuZXQvaXB2NC90Y3BfaW5wdXQuYyB0byBkcm9wIHBhY2tldHMgd2l0aCBvbGQgc2VxdWVuY2UgbnVtYmVycyB3aGVuIGVuZF9zZXEgZXF1YWxzIHJjdl93dXAgZm9yIG5vbi1lbXB0eSBwYWNrZXRzIHdpdGhvdXQgU1lOL0ZJTiBmbGFncy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGFmZmVjdGluZyBUQ1AgcGFja2V0IHByb2Nlc3NpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjN2NmNWI5NWYwYjE0NWQ4MTM4Zjk5MTAyYzlmMjZjNTg5MmQ5NmI1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMTM6NTM6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCmluZGV4IGRhZmY5M2Q1MTM0MjguLjE5OTEyODVhYTAzZTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCkBAIC00ODQ0LDcgJiM0Mzs0ODQ0LDExIEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3Bfc2VxdWVuY2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCWNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXUzMiBzZXFfbGltaXQ7CiAKLQlpZiAoYmVmb3JlKGVuZF9zZXEsIHRwLSZndDtyY3Zfd3VwKSkKJiM0MzsJaWYgKGJlZm9yZShlbmRfc2VxLCB0cC0mZ3Q7cmN2X3d1cCkgfHwKJiM0MzsJICAgIChlbmRfc2VxID09IHRwLSZndDtyY3Zfd3VwICZhbXA7JmFtcDsKJiM0MzsJICAgICBzZXEgIT0gZW5kX3NlcSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgIXRoLSZndDtzeW4gJmFtcDsmYW1wOwomIzQzOwkgICAgICF0aC0mZ3Q7ZmluKSkKIAkJcmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9UQ1BfT0xEX1NFUVVFTkNFOwogCiAJc2VxX2xpbWl0ID0gdHAtJmd0O3Jjdl9ueHQgJiM0MzsgdGNwX21heF9yZWNlaXZlX3dpbmRvdyh0cCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZXZpZXdpbmcgdGhpczoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgYGRpZmZgIGhlcmUsIGFuZCBpdCYjMzk7cyBwb2ludGluZyB0byBhIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBgdGNwX3NlcXVlbmNlKClgIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNoYW5nZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki4KCkZpcnN0LCBJJiMzOTtsbCBleGFtaW5lIHRoZSBkaWZmIGl0c2VsZi4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGUgc3BlY2lmaWMgbGluZXMgdGhhdCB3ZXJlIGFkZGVkLCByZW1vdmVkLCBvciBtb2RpZmllZCB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCB0aGUgY29udGV4dCBvZiB0aGUgY2hhbmdlLiAKCkkmIzM5O2xsIGFsc28gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBpdHNlbGYgaW4gZGV0YWlsLiBNeSBwcmVmZXJyZWQgYXBwcm9hY2ggd2lsbCBiZSB0byByZWFkIHRoZSByZWxldmFudCBzZWN0aW9uIG9mIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AgYXJvdW5kIHRoZSBgdGNwX3NlcXVlbmNlKClgIGZ1bmN0aW9uLiBUaGlzIHdpbGwgaGVscCBtZSB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiYjMzk7cyByZXNwb25zaWJpbGl0eSB3aXRoaW4gdGhlIFRDUC9JUCBzdGFjay4KCkZpbmFsbHksIEkgd2lsbCB3YW50IHRvIHJlYWQgdGhlIGVudGlyZSBmaWxlLCBpbiBjYXNlIHRoZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBzb3VyY2UgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDgzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0ODM1Olx0ICogb2YgUkNWLk5YVC4gUGVlciBzdGlsbCBkaWQgbm90IGFkdmFuY2UgaGlzIFNORC5VTkEgd2hlbiB3ZVxuNDgzNjpcdCAqIGRlbGF5ZWQgQUNLLCBzbyB0aGF0IGhpc1NORC5VTkFcdTAwM2M9b3VyUkNWLldVUC5cbjQ4Mzc6XHQgKiAoYm9ycm93ZWQgZnJvbSBmcmVlYnNkKVxuNDgzODpcdCAqL1xuNDgzOTpcdFxuNDg0MDpcdHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3Bfc2VxdWVuY2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuNDg0MTpcdFx0XHRcdFx0XHQgdTMyIHNlcSwgdTMyIGVuZF9zZXEsXG40ODQyOlx0XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aClcbjQ4NDM6XHR7XG40ODQ0Olx0XHRjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbjQ4NDU6XHRcdHUzMiBzZXFfbGltaXQ7XG40ODQ2Olx0XG40ODQ3Olx0XHRpZiAoYmVmb3JlKGVuZF9zZXEsIHRwLVx1MDAzZXJjdl93dXApIHx8XG40ODQ4Olx0XHQgICAgKGVuZF9zZXEgPT0gdHAtXHUwMDNlcmN2X3d1cCBcdTAwMjZcdTAwMjZcbjQ4NDk6XHRcdCAgICAgc2VxICE9IGVuZF9zZXEgXHUwMDI2XHUwMDI2XG40ODUwOlx0XHQgICAgICF0aC1cdTAwM2VzeW4gXHUwMDI2XHUwMDI2XG40ODUxOlx0XHQgICAgICF0aC1cdTAwM2VmaW4pKVxuNDg1MjpcdFx0XHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1RDUF9PTERfU0VRVUVOQ0U7XG40ODUzOlx0XG40ODU0Olx0XHRzZXFfbGltaXQgPSB0cC1cdTAwM2VyY3Zfbnh0ICYjNDM7IHRjcF9tYXhfcmVjZWl2ZV93aW5kb3codHApO1xuNDg1NTpcdFx0aWYgKHVubGlrZWx5KGFmdGVyKGVuZF9zZXEsIHNlcV9saW1pdCkpKSB7XG40ODU2Olx0XHRcdC8qIFNvbWUgc3RhY2tzIGFyZSBrbm93biB0byBoYW5kbGUgRklOIGluY29ycmVjdGx5OyBhbGxvdyB0aGVcbjQ4NTc6XHRcdFx0ICogRklOIHRvIGV4dGVuZCBiZXlvbmQgdGhlIHdpbmRvdyBhbmQgY2hlY2sgaXQgaW4gZGV0YWlsIGxhdGVyLlxuNDg1ODpcdFx0XHQgKi9cbjQ4NTk6XHRcdFx0aWYgKCFhZnRlcihlbmRfc2VxIC0gdGgtXHUwMDNlZmluLCBzZXFfbGltaXQpKVxuNDg2MDpcdFx0XHRcdHJldHVybiBTS0JfTk9UX0RST1BQRURfWUVUO1xuNDg2MTpcdFxuNDg2MjpcdFx0XHRpZiAoYWZ0ZXIoc2VxLCBzZXFfbGltaXQpKVxuNDg2MzpcdFx0XHRcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX0lOVkFMSURfU0VRVUVOQ0U7XG40ODY0Olx0XG40ODY1Olx0XHRcdC8qIE9ubHkgYWNjZXB0IHRoaXMgcGFja2V0IGlmIHJlY2VpdmUgcXVldWUgaXMgZW1wdHkuICovXG40ODY2Olx0XHRcdGlmIChza2JfcXVldWVfbGVuKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKVxuNDg2NzpcdFx0XHRcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX0lOVkFMSURfRU5EX1NFUVVFTkNFO1xuNDg2ODpcdFx0fVxuNDg2OTpcdFxuNDg3MDpcdFx0cmV0dXJuIFNLQl9OT1RfRFJPUFBFRF9ZRVQ7XG40ODcxOlx0fVxuNDg3MjpcdFxuNDg3MzpcdFxuNDg3NDpcdHZvaWQgdGNwX2RvbmVfd2l0aF9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXG40ODc1Olx0e1xuNDg3NjpcdFx0LyogVGhpcyBiYXJyaWVyIGlzIGNvdXBsZWQgd2l0aCBzbXBfcm1iKCkgaW4gdGNwX3BvbGwoKSAqL1xuNDg3NzpcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19lcnIsIGVycik7XG40ODc4Olx0XHRzbXBfd21iKCk7XG40ODc5Olx0XG40ODgwOlx0XHR0Y3Bfd3JpdGVfcXVldWVfcHVyZ2Uoc2spO1xuNDg4MTpcdFx0dGNwX2RvbmUoc2spO1xuNDg4MjpcdFxuNDg4MzpcdFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXG40ODg0Olx0XHRcdHNrX2Vycm9yX3JlcG9ydChzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMxNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYHRjcF9zZXF1ZW5jZWAgVXNhZ2UqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBmb3IgYHRjcF9zZXF1ZW5jZWAuIFNpbmNlIEkmIzM5O20ga25lZS1kZWVwIGluIHRoZSBrZXJuZWwmIzM5O3MgVENQIGltcGxlbWVudGF0aW9uLCBteSBmaXJzdCBtb3ZlIGlzIHRvIHBpbnBvaW50IGl0cyB1c2FnZSB3aXRoaW4gYHRjcF9pbnB1dC5jYC4gSSYjMzk7bSBnb2luZyB0byBsZXZlcmFnZSBteSB0cnVzdHkgYGdyZXBgIHNraWxscyB0byBxdWlja2x5IGZpbmQgYWxsIGluc3RhbmNlcyB3aGVyZSBgdGNwX3NlcXVlbmNlYCBpcyBpbnZva2VkIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgZmlsZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVncmF0ZXMgaW50byB0aGUgcGFja2V0IHByb2Nlc3NpbmcgZmxvdy4gRXNzZW50aWFsbHksIEkmIzM5O20gYWltaW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gV2hhdCBmdW5jdGlvbnMgY2FsbCBpdD8gV2hhdCBhcmUgdGhlIGNvbnRleHRzIHdoZXJlIGl0IGlzIGJlaW5nIHVzZWQ/IEFuZCBmcm9tIHRob3NlIGNvbnRleHRzLCBob3cgaXQgY2hhbmdlcyBiYXNlZCBvbiBjb250cm9sIGZsb3c/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX3NlcXVlbmNlXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmM9NDc5MT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX2Rpc29yZGVyZWRfYWNrX2NoZWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00ODM5LVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NDg0MDpzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX3NlcXVlbmNlKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4NDEtXHRcdFx0XHRcdCB1MzIgc2VxLCB1MzIgZW5kX3NlcSxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz02MzI2PXN0YXRpYyBib29sIHRjcF92YWxpZGF0ZV9pbmNvbWluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM2My1cdC8qIFN0ZXAgMTogY2hlY2sgc2VxdWVuY2UgbnVtYmVyICovXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2MzY0Olx0cmVhc29uID0gdGNwX3NlcXVlbmNlKHNrLCBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlc2VxLFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM2NS1cdFx0XHQgICAgICBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSwgdGgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MzgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gdGhlIENhbGwgU3RhY2sgb2YgYHRjcF92YWxpZGF0ZV9pbmNvbWluZ2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IG9mIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIGFsd2F5cyB0byB0cmFjZSB0aGUgY2FsbHMsIHJpZ2h0PyBUaGUga2V5IGlzIGZpZ3VyaW5nIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQgZnJvbS4gVW5kZXJzdGFuZGluZyB0aGUgdXBzdHJlYW0gY2FsbGVycyB3aWxsIGdpdmUgbWUgdGhlIGNydWNpYWwgaW5zaWdodCBpbnRvICp3aHkqIHRoaXMgdmFsaWRhdGlvbiBpcyBoYXBwZW5pbmcsIHdoYXQga2luZCBvZiBkYXRhIGlzIGJlaW5nIHZhbGlkYXRlZCwgYW5kIHdoYXQgYXNzdW1wdGlvbnMgYXJlIGJlaW5nIG1hZGUgYWJvdXQgdGhlIGluY29taW5nIFRDUCBkYXRhLiBLbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyB3aWxsIGltbWVkaWF0ZWx5IGlsbHVtaW5hdGUgdGhlIHBvdGVudGlhbCBwcm9ibGVtcyBhbmQgaGVscCBtZSBpc29sYXRlIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB0b29scyB0byBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqY2FsbGVkKiBmcm9tLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF92YWxpZGF0ZV9pbmNvbWluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfaW5wdXQuYz02MzE0PXN0YXRpYyBib29sIHRjcF9yZXNldF9jaGVjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjMyNS0gKi9cbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjYzMjY6c3RhdGljIGJvb2wgdGNwX3ZhbGlkYXRlX2luY29taW5nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTYzMjctXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoLCBpbnQgc3luX2luZXJyKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTY1MDQ9dm9pZCB0Y3BfcmN2X2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02Njc1LXZhbGlkYXRlOlxubmV0L2lwdjQvdGNwX2lucHV0LmM6NjY3NjpcdGlmICghdGNwX3ZhbGlkYXRlX2luY29taW5nKHNrLCBza2IsIHRoLCAxKSlcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY2NzctXHRcdHJldHVybjtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03MTU2PXRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzIzMC1cdH1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjcyMzE6XHRpZiAoIXRjcF92YWxpZGF0ZV9pbmNvbWluZyhzaywgc2tiLCB0aCwgMCkpXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03MjMyLVx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDE3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUQ1AgU2VxdWVuY2UgTnVtYmVyIFZhbGlkYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHRjcF9zZXF1ZW5jZSgpYCBmdW5jdGlvbiB3aXRoaW4gdGhlIFRDUCBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IGluIGB0Y3BfaW5wdXQuY2AuIEl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciB2YWxpZGF0aW5nIHNlcXVlbmNlIG51bWJlcnMsIGFuZCBJIHNlZSBpdCBkcm9wcyBwYWNrZXRzIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnM6IGBlbmRfc2VxID09IHRwLSZndDtyY3Zfd3VwICZhbXA7JmFtcDsgc2VxICE9IGVuZF9zZXEgJmFtcDsmYW1wOyAhdGgtJmd0O3N5biAmYW1wOyZhbXA7ICF0aC0mZ3Q7ZmluYC4gVGhlIGRyb3AgcmVhc29uIGlzIGBTS0JfRFJPUF9SRUFTT05fVENQX09MRF9TRVFVRU5DRWAuIFRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlIHdpdGhpbiB0aGUgVENQIHN0YWNrLCBhZmZlY3RpbmcgaG93IHNlcXVlbmNlIG51bWJlcnMgYXJlIGhhbmRsZWQuCgpUaGUgYmlnIHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBiZSB0cmlnZ2VyZWQgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudD8gWWVhaCwgdGhpcyBpcyBUQ1AsIHNvIGl0JiMzOTtzIGVhc2lseSByZWFjaGFibGUg4oCTIGxvY2FsIGxvb3BiYWNrLCBUVU4vVEFQLCB2ZXRoLCB5b3UgbmFtZSBpdC4gU28sIGlzIGl0IHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFRoaXMgaXMgY29yZSBuZXR3b3JrIHN0YWNrIHByb3RvY29sIGxvZ2ljLCByaWdodCBhdCB0aGUgaGVhcnQgb2Ygc2VxdWVuY2UgdmFsaWRhdGlvbi4gQW55IHZ1bG5lcmFiaWxpdHkgaGVyZSBjb3VsZCBiZSBjcml0aWNhbC4KCk5vdywgaG9sZCBvbi4gQmVmb3JlIEkganVtcCBpbiwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIExldCBtZSByZXZpZXcgdGhlIGd1aWRlbGluZXMuIFRoZSBpbnN0cnVjdGlvbiBpcyB0byBleHRyYWN0IGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBhcmUgbGlrZWx5IHRvIGJlIGhlYXZpbHkgZnV6emVkLCBidXQgSSBuZWVkIHRvIGF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIG90aGVyd2lzZSB0aGUgdGVzdHMgd2lsbCBiZSBza2V3ZWQuIEkgbmVlZCB0byBmb2N1cyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhpcyBtYWtlcyBzZW5zZTsgaW5saW5lZCBmdW5jdGlvbnMgd29uJiMzOTt0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4KClNvLCBsZXQgbWUgdGhpbms6IElzIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCwgYHRjcF92NF9yY3ZgLCBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCwgb3IgYHRjcF9zZXF1ZW5jZWAgYSBnb29kIGNob2ljZT8gYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGxvb2tzIGxpa2UgYSBob3QgcGF0aCB0byBtZS4gQWgsIHdhaXQsICYjMzQ7QXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuJiMzNDsgVGhpcyBtZWFucyBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgaXMgb3V0LiBIbW0sIHdoYXQgYWJvdXQgdGhlIG90aGVyIG9wdGlvbnMuIExldCYjMzk7cyBzZWU6IGB0Y3Bfc2VxdWVuY2VgIGlzIHN0YXRpYy4gU28sIHRoYXQmIzM5O3Mgb3V0LiBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGFsc28gb3V0LiBTbywgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGlzIG91dCBiZWNhdXNlIGl0IGlzIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiBpbiBUQ1AuCgpPaywgaXMgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2Agbm9uLXN0YXRpYz8gTGV0JiMzOTtzIGNoZWNrIGB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3NgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mzg4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgVENQIFJlY2VpdmUgU3RhdGUgTWFjaGluZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBtaXNlcnksIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24hKSBvZiBoYW5kbGluZyBpbmNvbWluZyBUQ1Agc2VnbWVudHMgaGFwcGVucyB3aXRoaW4gYSBzcGVjaWZpYyBzdGF0ZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZWNsYXJhdGlvbiwgZXNwZWNpYWxseSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIGFuZCBhbnkgYXNzb2NpYXRlZCBzdHJ1Y3R1cmVzIHBhc3NlZCBpbi4gSSB3YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgaW5wdXRzIGl0IGNvbnN1bWVzLCB0aGUgaW50ZXJuYWwgZGF0YSBpdCYjMzk7cyBsaWtlbHkgbWFuaXB1bGF0aW5nIChlLmcuLCBjb250cm9sIGJsb2Nrcywgc2VxdWVuY2UgbnVtYmVycywgd2luZG93IHNpemVzKSwgYW5kIHdoYXQgaXRzIG91dHB1dHMgYXJlIOKAkyB3aGljaCBlc3NlbnRpYWxseSBkZWZpbmUgdGhlIHN0YXRlIHRyYW5zaXRpb25zIGFuZCBhY3Rpb25zIHRyaWdnZXJlZCBieSB0aGlzIGZ1bmN0aW9uLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGl0JiMzOTtzIHRoZSBoZWFydCBvZiB0aGUgcmVjZWl2ZSBzaWRlIHN0YXRlIG1hY2hpbmUuIEkgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIGFueSBwb3RlbnRpYWwgYnVncyBhbmQvb3IgYm90dGxlbmVja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9yY3Zfc3RhdGVfcHJvY2VzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfaW5wdXQuYz02ODU2PXN0YXRpYyBpbnQgdGNwX3Jjdl9zeW5zZW50X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTcwODAtXHRcdCAqIHdlIGhhdmUgbm8gcmVhc29ucyB0byBhY2NlcHQgaXQgc29tZXRpbWVzLlxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzA4MTpcdFx0ICogQWxzbywgc2VlbXMgdGhlIGNvZGUgZG9pbmcgaXQgaW4gc3RlcDYgb2YgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03MDgyLVx0XHQgKiBpcyBub3QgZmxhd2xlc3MuIFNvLCBkaXNjYXJkIHBhY2tldCBmb3Igc2FuaXR5LlxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTcxNTU9ZW51bSBza2JfZHJvcF9yZWFzb25cbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjcxNTY6dGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTcxNTcte1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MTgzMD1pbnQgdGNwX3Y0X2RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0xODc1LVxubmV0L2lwdjQvdGNwX2lwdjQuYzoxODc2Olx0cmVhc29uID0gdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xubmV0L2lwdjQvdGNwX2lwdjQuYy0xODc3LVx0aWYgKHJlYXNvbilcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9MTAxPXRjcF90aW1ld2FpdF9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy0xMzItXHRpZiAoUkVBRF9PTkNFKHR3LVx1MDAzZXR3X3N1YnN0YXRlKSA9PSBUQ1BfRklOX1dBSVQyKSB7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6MTMzOlx0XHQvKiBKdXN0IHJlcGVhdCBhbGwgdGhlIGNoZWNrcyBvZiB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3MoKSAqL1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTEzNC1cbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9Njg3PXN0cnVjdCBzb2NrICp0Y3BfY2hlY2tfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtODE2LVx0ICAgQnV0IGdlbmVyYWxseSwgd2Ugc2hvdWxkIChSRkMgbGllcyEpIHRvIGFjY2VwdCBBQ0tcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo4MTc6XHQgICBmcm9tIFNZTkFDSyBib3RoIGhlcmUgYW5kIGluIHRjcF9yY3Zfc3RhdGVfcHJvY2VzcygpLlxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjgxODpcdCAgIHRjcF9yY3Zfc3RhdGVfcHJvY2VzcygpIGRvZXMgbm90LCBoZW5jZSwgd2UgZG8gbm90IHRvby5cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy04MTktXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTk5OD1lbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfY2hpbGRfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqcGFyZW50LCBzdHJ1Y3Qgc29jayAqY2hpbGQsXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTEwMDktXHRpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihjaGlsZCkpIHtcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzoxMDEwOlx0XHRyZWFzb24gPSB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3MoY2hpbGQsIHNrYik7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtMTAxMS1cdFx0LyogV2FrZXVwIHBhcmVudCwgc2VuZCBTSUdJTyAqL1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz00MTAxPXN0YXRpYyB2b2lkIHRjcF9jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTA5LVx0LyogV2UmIzM5O2xsIGZpeCB0aGlzIHVwIHdoZW4gd2UgZ2V0IGEgcmVzcG9uc2UgZnJvbSB0aGUgb3RoZXIgZW5kLlxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQxMTA6XHQgKiBTZWUgdGNwX2lucHV0LmM6dGNwX3Jjdl9zdGF0ZV9wcm9jZXNzIGNhc2UgVENQX1NZTl9TRU5ULlxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQxMTEtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU3MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGF0OgoKKipJbnZlc3RpZ2F0aW5nIFRDUCBJbnB1dCBpbiB0aGUgS2VybmVsKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIEkmIzM5O2xsIGltbWVkaWF0ZWx5IGp1bXAgaW50byB0aGUgS2NvbmZpZyBmaWxlcyByZWxhdGVkIHRvIG5ldHdvcmtpbmcgdG8gc2VlIGhvdyB0aGlzIHBhcnRpY3VsYXIgc291cmNlIGZpbGUgaXMgYnJvdWdodCBpbnRvIHRoZSBidWlsZC4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIGhhbmRsZSBvbiB0aGUgY29tcGlsZS10aW1lIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4KCk5leHQsIHNpbmNlIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLCBJJiMzOTtsbCBzaGlmdCBnZWFycyBhbmQgbW92ZSBvdmVyIHRvIHRoZSBgbmV0L2lwdjQvTWFrZWZpbGVgLiBJJiMzOTtsbCBwZXJmb3JtIGEgZ3JlcCBmb3IgYHRjcF9pbnB1dC5vYCB3aXRoaW4gdGhlIE1ha2VmaWxlLiBUaGlzIHNob3VsZCByZXZlYWwgaG93IHRoZSBvYmplY3QgZmlsZSBpcyBsaW5rZWQsIGFuZCBpZGVudGlmeSB3aGVyZSB0aGUgYnVpbGQgc3lzdGVtIGV4cGVjdHMgdG8gZmluZCB0aGUgc291cmNlIGNvZGUuIFRoYXQgc2hvdWxkIHByb3ZpZGUgYSBxdWljayBwaWN0dXJlIG9mIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgbGFyZ2VyIGBuZXQvaXB2NGAgYnVpbGQgcHJvY2Vzcy4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9pbnB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXG4tLVxubmV0L2lwdjQvTWFrZWZpbGUtOS1cdCAgICAgaW5ldF90aW1ld2FpdF9zb2NrLm8gaW5ldF9jb25uZWN0aW9uX3NvY2subyBcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTA6XHQgICAgIHRjcC5vIHRjcF9pbnB1dC5vIHRjcF9vdXRwdXQubyB0Y3BfdGltZXIubyB0Y3BfaXB2NC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xMS1cdCAgICAgdGNwX21pbmlzb2Nrcy5vIHRjcF9jb25nLm8gdGNwX21ldHJpY3MubyB0Y3BfZmFzdG9wZW4ubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTk4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgSVB2NCBJbmNsdXNpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgbmV0L01ha2VmaWxlYCBvciBgbmV0L0tjb25maWdgIGZpbGVzIOKAkyBwcm9iYWJseSByZWxhdGVkIHRvIGNvbmZpZ3VyaW5nIHRoZSBuZXR3b3JrIHN0YWNrLiBJIHNlZSB0aGlzIGxpbmU6IGBvYmotJChDT05GSUdfSU5FVCkgJiM0Mzs9IGlwdjQvYC4gTXkgaW1tZWRpYXRlIGludGVycHJldGF0aW9uIGlzIHRoYXQgYmFzZWQgb24gdGhlIGBDT05GSUdfSU5FVGAgb3B0aW9uIGJlaW5nIHNldCAobGlrZWx5IGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiksIHRoZSBgaXB2NC9gIGRpcmVjdG9yeSwgYW5kIHRoZXJlZm9yZSB0aGUgSVB2NCBpbXBsZW1lbnRhdGlvbiwgaXMgYmVpbmcgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiBJdCYjMzk7cyBhIGNvbmRpdGlvbmFsIGluY2x1c2lvbiwgd2hpY2ggaXMgc3RhbmRhcmQgcHJhY3RpY2UuIE5vdywgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIGluZGVlZCBob3cgaXQgd29ya3MuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBzcGVjaWZpY3MsIGJ1dCBiYXNlZCBvbiBleHBlcmllbmNlIHRoaXMgaXMgd2hhdCBpdCBsb29rcyBsaWtlIGlzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX05FVEZJTFRFUilcdFx0JiM0Mzs9IG5ldGZpbHRlci9cbm5ldC9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfSU5FVClcdFx0JiM0Mzs9IGlwdjQvXG5uZXQvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1RMUylcdFx0JiM0Mzs9IHRscy9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI4MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uOgoKKipEaXZpbmcgaW50byB0aGUgSVB2NCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgSVB2NCBuZXR3b3JraW5nIHN0YWNrIGlzIHNldCB1cCwgYW5kIEkgc2VlIHRoaXMgYElORVRgIG1hY3JvLiBSaWdodCwgdGhhdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBldmVyeXRoaW5nIHVuZGVyIGBuZXQvaXB2NC9gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXJseSB0byBnbyBzdHJhaWdodCBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBJJiMzOTtsbCBjaGVjayBlaXRoZXIgYG5ldC9pcHY0L0tjb25maWdgIGRpcmVjdGx5LCBvciBpZiBpdCYjMzk7cyBhIG1vcmUgdG9wLWxldmVsIG9wdGlvbiwgbWF5YmUgYG5ldC9LY29uZmlnYCB3aWxsIGJlIHRoZSBwbGFjZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGV0YWlscyBvbiBgQ09ORklHX0lORVRgIGl0c2VsZiDigJMgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZSwgaGVscCB0ZXh0LCBldmVyeXRoaW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUgYnVpbGQuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz05OT1jb25maWcgTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUXG4tLVxubmV0L0tjb25maWctMTEzLVxubmV0L0tjb25maWc6MTE0OmNvbmZpZyBJTkVUXG5uZXQvS2NvbmZpZy0xMTUtXHRib29sIFwmIzM0O1RDUC9JUCBuZXR3b3JraW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqSU5FVCBEZXBlbmRlbmN5IEludmVzdGlnYXRpb24qKgoKT2theSwgc28gYElORVRgJiMzOTtzIGdvdCBhIGRlcGVuZGVuY3kgb24gYE5FVGAuIFJpZ2h0LCBtYWtlcyBzZW5zZS4gTm93LCB3aGVyZSYjMzk7cyB0aGF0IGRlZmluZWQ/IEkmIzM5O2xsIGJldCBpdCYjMzk7cyBpbiB0aGUgS2NvbmZpZyBmaWxlcyBzb21ld2hlcmUuIExldCYjMzk7cyBkaWcgaW50byBgbmV0L0tjb25maWdgIOKAkyBzaG91bGQgYmUgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHRvIHRoYXQgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDExNC4gSG9wZWZ1bGx5LCB0aGUgZGVwZW5kZW5jeSBkZWNsYXJhdGlvbiBpcyByaWdodCB0aGVyZSwgY2xlYXIgYXMgZGF5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExMDpcdFxuIDExMTpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCByZWZlclxuIDExMjpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXG4gMTEzOlx0XG4gMTE0Olx0Y29uZmlnIElORVRcbiAxMTU6XHRcdGJvb2wgXCYjMzQ7VENQL0lQIG5ldHdvcmtpbmdcJiMzNDtcbiAxMTY6XHRcdGhlbHBcbiAxMTc6XHRcdCAgVGhlc2UgYXJlIHRoZSBwcm90b2NvbHMgdXNlZCBvbiB0aGUgSW50ZXJuZXQgYW5kIG9uIG1vc3QgbG9jYWxcbiAxMTg6XHRcdCAgRXRoZXJuZXRzLiBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gc2F5IFkgaGVyZSAodGhpcyB3aWxsIGVubGFyZ2VcbiAxMTk6XHRcdCAgeW91ciBrZXJuZWwgYnkgYWJvdXQgNDAwIEtCKSwgc2luY2Ugc29tZSBwcm9ncmFtcyAoZS5nLiB0aGUgWCB3aW5kb3dcbiAxMjA6XHRcdCAgc3lzdGVtKSB1c2UgVENQL0lQIGV2ZW4gaWYgeW91ciBtYWNoaW5lIGlzIG5vdCBjb25uZWN0ZWQgdG8gYW55XG4gMTIxOlx0XHQgIG90aGVyIGNvbXB1dGVyLiBZb3Ugd2lsbCBnZXQgdGhlIHNvLWNhbGxlZCBsb29wYmFjayBkZXZpY2Ugd2hpY2hcbiAxMjI6XHRcdCAgYWxsb3dzIHlvdSB0byBwaW5nIHlvdXJzZWxmIChncmVhdCBmdW4sIHRoYXQhKS5cbiAxMjM6XHRcbiAxMjQ6XHRcdCAgRm9yIGFuIGV4Y2VsbGVudCBpbnRyb2R1Y3Rpb24gdG8gTGludXggbmV0d29ya2luZywgcGxlYXNlIHJlYWQgdGhlXG4gMTI1Olx0XHQgIExpbnV4IE5ldHdvcmtpbmcgSE9XVE8sIGF2YWlsYWJsZSBmcm9tXG4gMTI2Olx0XHQgIFx1MDAzY2h0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvXHUwMDNlLlxuIDEyNzpcdFxuIDEyODpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSBhbmQgYWxzbyB0byBcJiMzNDsvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7IGFuZFxuIDEyOTpcdFx0ICBcJiMzNDtTeXNjdGwgc3VwcG9ydFwmIzM0OyBiZWxvdywgeW91IGNhbiBjaGFuZ2UgdmFyaW91cyBhc3BlY3RzIG9mIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTY3CgkJCQkJCQlvdXRwdXQ6IDEwNgoJCQkJCQkJdGhvdWdodHM6IDE1MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgVENQIFNlcXVlbmNlIE51bWJlciBWYWxpZGF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBhcmUgcmVsZXZhbnQgdG8gdGhpcyBjaGFuZ2UgaW4gVENQIHNlcXVlbmNlIG51bWJlciB2YWxpZGF0aW9uIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2lucHV0LmNgLiBJJiMzOTttIHNlZWluZyBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYCBhbmQgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgLiBBcmUgdGhlc2UgdGhlIGtleSBwbGF5ZXJzPyBMZXQmIzM5O3MgY29uZmlybTogYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGlzIGB2b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAsIGFuZCBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYCBpcyBgZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilgLiBHb29kLCB0aGV5JiMzOTtyZSBub3Qgc3RhdGljLgoKTm93LCBhIGtleSBjb25zaWRlcmF0aW9uOiBhcmUgdGhleSAqaG90LXBhdGgqIGZ1bmN0aW9ucz8gVGhlIHN5emthbGxlciBndWlkYW5jZSBpcyBjbGVhcjogYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCB0ZXN0IGRpc3RyaWJ1dGlvbiBza2V3LiAgSXQgcHJlZmVycyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWFrZXMgc2Vuc2UuIFRoaXMgbWVhbnMgSSB3YW50IHRvIGF2b2lkIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgZnJlcXVlbnRseSBpbiBub3JtYWwgVENQIG9wZXJhdGlvbi4gSWYgYHRjcF9zZXF1ZW5jZWAgaXMgYW4gaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbiBkaXJlY3RseSBjYWxsZWQgZm9yIGV2ZXJ5IGluY29taW5nIFRDUCBwYWNrZXQgaW4gZXN0YWJsaXNoZWQvc3RhdGUgcHJvY2Vzc2luZywgc2hvdWxkIEkgZXZlbiBib3RoZXIgd2l0aCBGb2N1c1N5bWJvbHM/IFRoaXMgaXMgdGhlIGNvcmUgaXNzdWUhCgpJZiBgdGNwX3NlcXVlbmNlYCBpcyBhIHN0YXRpYyBoZWxwZXIsIGl0JiMzOTtzIHZlcnkgbGlrZWx5IGlubGluZWQuIEFuZCBpZiBhbGwgZnVuY3Rpb25zIGNhbGxpbmcgaXQgYXJlIGdlbmVyaWMgaG90LXBhdGhzIChgdGNwX3Jjdl9lc3RhYmxpc2hlZGAsIGB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3NgLCBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCwgYHRjcF92NF9yY3ZgKSwgd2hhdCYjMzk7cyB0aGUgYmVzdCBvcHRpb24gaGVyZT8gU3l6a2FsbGVyIHdhbnRzIHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGF2b2lkIHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCgpPa2F5LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgaW5saW5pbmc6IGB0Y3Bfc2VxdWVuY2VgIGlzIGBzdGF0aWMgaW5saW5lIC8gc3RhdGljYC4gSXQgaXMgc3RhdGljIGFuZCBvbmx5IGNhbGxlZCBmcm9tIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWxldmFudCBsb2dpYyBpcywgYnV0IGl0JiMzOTtzIGludGVybmFsLiBJcyBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAsIGB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3NgLCBvciBgdGNwX3NlcXVlbmNlYCB3aGF0IEkgc2hvdWxkIGluY2x1ZGU/CgpJZiBgdGNwX3NlcXVlbmNlYCBpcyBzdGF0aWMgYW5kIGlubGluZWQsIHN5emthbGxlciBtaWdodCBub3QgZXZlbiBzZWUgYSBkaXN0aW5jdCBzeW1ib2wgZm9yIGl0LiBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYCBoYW5kbGVzIHBhY2tldHMgaW4gbm9uLUVTVEFCTElTSEVEIHN0YXRlcywgd2hpY2ggaXMgZGlmZmVyZW50IGZyb20gYHRjcF9yY3ZfZXN0YWJsaXNoZWRgLCB3aGljaCBoYW5kbGVzIEVTVEFCTElTSEVEIHN0YXRlLiBPa2F5LCBzbyBub3cgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXI6IHdoYXQgZG9lcyB0aGUgcGF0Y2ggKmRvKj8KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIGRyb3BwaW5nIG9sZCBzZXF1ZW5jZSBwYWNrZXRzIHdoZXJlIGBlbmRfc2VxID09IHRwLSZndDtyY3Zfd3VwYCAobWVhbmluZyB0aGUgcGFja2V0JiMzOTtzIGVuZCBzZXF1ZW5jZSBpcyBhdCBvciBiZWZvcmUgdGhlIHJlY2VpdmUgd2luZG93IHVwcGVyIGJvdW5kKSB3aXRoIG5vbi1lbXB0eSBwYXlsb2FkLCBidXQgd2l0aG91dCBTWU4gb3IgRklOIGZsYWdzLiBUaGlzIGlzIFRDUCBzZXF1ZW5jZSBudW1iZXIgdmFsaWRhdGlvbi4KCk5leHQsIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlcXVpcmVkLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfSU5FVGAgaXMgc3VmZmljaWVudC4KCk5vdywgbGV0JiMzOTtzIGFzc2VtYmxlIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuIGBXb3J0aEZ1enppbmdgIGlzIG9idmlvdXNseSB0cnVlLiBUaGUgYFJlYXNvbmluZ2Agd2lsbCBiZSBhIGNsZWFyIGV4cGxhbmF0aW9uOiBUaGUgcGF0Y2ggbW9kaWZpZXMgVENQIHNlcXVlbmNlIG51bWJlciB2YWxpZGF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW4gYHRjcF9zZXF1ZW5jZSgpYCAoZXZlbiBpZiBpdCYjMzk7cyBpbmxpbmVkKSwgd2l0aGluIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIFRoZSBwYXRjaCBkcm9wcyBvbGQgcGFja2V0cyB3aGVuIGBlbmRfc2VxID09IHRwLSZndDtyY3Zfd3VwYCB3aXRoIG5vbi1lbXB0eSBwYXlsb2FkcyBhbmQgd2l0aG91dCBTWU4vRklOIGZsYWdzLiBgRW5hYmxlQ29uZmlnc2Agd2lsbCBiZSBgWyYjMzQ7SU5FVCYjMzQ7XWAuIEJ1dCB3aGF0IGFib3V0IGBGb2N1c1N5bWJvbHNgPwoKTGV0JiMzOTtzIHJldmlzaXQgdGhlIHN5emthbGxlciBndWlkYW5jZTogYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIElzIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBhIGhvdC1wYXRoIGZ1bmN0aW9uPyBZZXMsIGl0IGlzLiBCdXQgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AgZGVhbHMgd2l0aCBzdGF0ZSB0cmFuc2l0aW9ucy4gIFNvLCBzaG91bGQgaXQgYmUgYFsmIzM0O3RjcF9yY3Zfc3RhdGVfcHJvY2VzcyYjMzQ7XWAsIGBbXWAsIG9yIHNvbWV0aGluZyBlbHNlPwoKYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AgaXMgZXhwb3J0ZWQvbm9uLXN0YXRpYyBhbmQgZGVhbHMgd2l0aCBzdGF0ZSB0cmFuc2l0aW9ucywgd2hpY2ggYXJlIGludGVyZXN0aW5nIHRhcmdldHMuIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyB0aGUgdmVyeSBkZWZpbml0aW9uIG9mIGEgZ2VuZXJpYyBob3QtcGF0aCBmb3IgVENQLiAgRm9jdXNTeW1ib2xzIGlzIHVzZWQgdG8gdGFyZ2V0IGZ1enppbmcgYXQgYSBzcGVjaWZpYyBmdW5jdGlvbi4gIFNvIGlmIHdlJiMzOTtyZSB3b3JyaWVkIGFib3V0IGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBiZWluZyB0b28gZ2VuZXJhbCwgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AgaXMgYSBkZWNlbnQgb3B0aW9uLCBvdGhlcndpc2Ugd2UgY2FuIGxlYXZlIGl0IGVtcHR5LiBMZXQmIzM5O3MgbWFrZSBzdXJlIGB0Y3Bfc2VxdWVuY2VgIGlzIGFuIGludGVybmFsIGhlbHBlci4gWWVzLCBpdCBpcyBzdGF0aWMuCgpMYXN0bHksIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IG90aGVyIGZpbGUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgY29tbWl0LiBJdCYjMzk7cyBvbmx5IGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIE9rYXksIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJIHRoaW5rIGBbJiMzNDt0Y3BfcmN2X3N0YXRlX3Byb2Nlc3MmIzM0O11gIGlzIHRoZSBiZXN0IGNob2ljZSBmb3IgRm9jdXNTeW1ib2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9yY3Zfc3RhdGVfcHJvY2VzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBUQ1Agc2VxdWVuY2UgdmFsaWRhdGlvbiBsb2dpYyBpbiB0Y3Bfc2VxdWVuY2UoKSB3aXRoaW4gbmV0L2lwdjQvdGNwX2lucHV0LmMgdG8gZHJvcCBwYWNrZXRzIHdpdGggb2xkIHNlcXVlbmNlIG51bWJlcnMgd2hlbiBlbmRfc2VxIGVxdWFscyByY3Zfd3VwIGZvciBub24tZW1wdHkgcGFja2V0cyB3aXRob3V0IFNZTi9GSU4gZmxhZ3MuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBhZmZlY3RpbmcgVENQIHBhY2tldCBwcm9jZXNzaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX3Jjdl9zdGF0ZV9wcm9jZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFRDUCBzZXF1ZW5jZSB2YWxpZGF0aW9uIGxvZ2ljIGluIHRjcF9zZXF1ZW5jZSgpIHdpdGhpbiBuZXQvaXB2NC90Y3BfaW5wdXQuYyB0byBkcm9wIHBhY2tldHMgd2l0aCBvbGQgc2VxdWVuY2UgbnVtYmVycyB3aGVuIGVuZF9zZXEgZXF1YWxzIHJjdl93dXAgZm9yIG5vbi1lbXB0eSBwYWNrZXRzIHdpdGhvdXQgU1lOL0ZJTiBmbGFncy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGFmZmVjdGluZyBUQ1AgcGFja2V0IHByb2Nlc3NpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIGlucHV0IHNlcXVlbmNlIHZhbGlkYXRpb24gaW4gYHRjcF9zZXF1ZW5jZSgpYCBieSBhZGRpbmcgYSBjb25kaXRpb24gdG8gZHJvcCBpbmNvbWluZyBwYWNrZXRzIHdob3NlIGVuZCBzZXF1ZW5jZSBlcXVhbHMgYHRwLVx1MDAzZXJjdl93dXBgICh3aGVuIGNhcnJ5aW5nIHBheWxvYWQgd2l0aG91dCBTWU4vRklOIGZsYWdzKSBhcyBgU0tCX0RST1BfUkVBU09OX1RDUF9PTERfU0VRVUVOQ0VgLlxuXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWRqdXN0cyBUQ1AgcHJvdG9jb2wgc2VxdWVuY2UgbnVtYmVyIHZhbGlkYXRpb24gbG9naWMgYW5kIHJldHVybiBjb2Rlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGNvcHlpbmcgb2Yga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkuIFRoZXJlZm9yZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjN2NmNWI5NWYwYjE0NWQ4MTM4Zjk5MTAyYzlmMjZjNTg5MmQ5NmI1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMTM6NTM6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCmluZGV4IGRhZmY5M2Q1MTM0MjguLjE5OTEyODVhYTAzZTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCkBAIC00ODQ0LDcgJiM0Mzs0ODQ0LDExIEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3Bfc2VxdWVuY2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCWNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXUzMiBzZXFfbGltaXQ7CiAKLQlpZiAoYmVmb3JlKGVuZF9zZXEsIHRwLSZndDtyY3Zfd3VwKSkKJiM0MzsJaWYgKGJlZm9yZShlbmRfc2VxLCB0cC0mZ3Q7cmN2X3d1cCkgfHwKJiM0MzsJICAgIChlbmRfc2VxID09IHRwLSZndDtyY3Zfd3VwICZhbXA7JmFtcDsKJiM0MzsJICAgICBzZXEgIT0gZW5kX3NlcSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgIXRoLSZndDtzeW4gJmFtcDsmYW1wOwomIzQzOwkgICAgICF0aC0mZ3Q7ZmluKSkKIAkJcmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9UQ1BfT0xEX1NFUVVFTkNFOwogCiAJc2VxX2xpbWl0ID0gdHAtJmd0O3Jjdl9ueHQgJiM0MzsgdGNwX21heF9yZWNlaXZlX3dpbmRvdyh0cCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVENQIFNlcXVlbmNlIENoZWNrKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSYjMzk7bSBsb29raW5nIGF0IGEgZGlmZiB3aXRoaW4gYG5ldC9pcHY0L3RjcF9pbnB1dC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgdGNwX3NlcXVlbmNlYCBmdW5jdGlvbi4gVGhlIGNvZGUmIzM5O3MgcHVycG9zZSBpcywgb2YgY291cnNlLCB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBpbmNvbWluZyBUQ1Agc2VnbWVudCYjMzk7cyBzZXF1ZW5jZSBudW1iZXIgZmFsbHMgd2l0aGluIGFuIGFjY2VwdGFibGUgd2luZG93LCB0aGVyZWJ5IHZhbGlkYXRpbmcgdGhlIHBhY2tldCYjMzk7cyBvcmRlciBhbmQgcHJldmVudGluZyByZXBsYXkgYXR0YWNrcywgZXRjLgoKVGhlIGNyaXRpY2FsIGNoYW5nZSBpcyBpbiB0aGUgYGlmYCBjb25kaXRpb24uIFRoZSBvcmlnaW5hbCBjb25kaXRpb24gd2FzIHN0cmFpZ2h0Zm9yd2FyZDogYGlmIChiZWZvcmUoZW5kX3NlcSwgdHAtJmd0O3Jjdl93dXApKWAuIFRoaXMgd2FzIGEgYmFzaWMgY2hlY2sgdG8gc2VlIGlmIHRoZSBlbmQgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBjdXJyZW50IHNlZ21lbnQgd2FzICpiZWZvcmUqIHRoZSByZWNlaXZlciYjMzk7cyB3aW5kb3cgdXBwZXIgYm91bmQgKGB0cC0mZ3Q7cmN2X3d1cGApLiBJZiBpdCB3YXMsIHRoZSBwYWNrZXQgd2FzIGNvbnNpZGVyZWQgb2xkLgoKVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtb3JlIG51YW5jZWQgY2hlY2ssIGVzc2VudGlhbGx5IGFkZGluZyBhbiBgfHxgIHdpdGggYSBuZXcgY29uZGl0aW9uLiBOb3csIGl0JiMzOTtzIGNoZWNraW5nIHdoZXRoZXIgYGJlZm9yZShlbmRfc2VxLCB0cC0mZ3Q7cmN2X3d1cCkgfHwgKGVuZF9zZXEgPT0gdHAtJmd0O3Jjdl93dXAgJmFtcDsmYW1wOyBzZXEgIT0gZW5kX3NlcSAmYW1wOyZhbXA7ICF0aC0mZ3Q7c3luICZhbXA7JmFtcDsgIXRoLSZndDtmaW4pYC4gTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBzZWNvbmQgcGFydC4gSXQgZXNzZW50aWFsbHkgc2F5czogaWYgdGhlIGBlbmRfc2VxYCAqZXF1YWxzKiBgdHAtJmd0O3Jjdl93dXBgLCBhbmQgaWYgdGhlIHNlcXVlbmNlIG51bWJlciBpcyAqbm90KiBlcXVhbCB0byB0aGUgZW5kIHNlcXVlbmNlIG51bWJlciwgYW5kIGl0JiMzOTtzICpub3QqIGEgU1lOIG9yIEZJTiBwYWNrZXQsIHRoZW4gZHJvcCB0aGUgcGFja2V0IGFzIHdlbGwuCgpUaGlzIHNlZW1zIHRvIGJlIHRhcmdldGluZyBhIHNwZWNpZmljIGVkZ2UgY2FzZSB3aGVyZSBhIHNlZ21lbnQgd2l0aCBhIHNlcXVlbmNlIG51bWJlciB0aGF0IGFwcGVhcnMgdG8gYmUgb24gdGhlIHdpbmRvdyBib3VuZGFyeSwgYnV0IGlzbiYjMzk7dCBhY3R1YWxseSBhIHNlZ21lbnQgd2UgYXJlIGludGVyZXN0ZWQgaW4uIEl0JiMzOTtzIGVzc2VudGlhbGx5IGZpbHRlcmluZyBvdXQgc2VnbWVudHMgd2l0aCBhIHNlcXVlbmNlIG51bWJlciB0aGF0IGlzIG9uIHRoZSB1cHBlciBib3VuZGFyeSBvZiB0aGUgd2luZG93LCBidXQgd2UgYXJlICpub3QqIHByb2Nlc3NpbmcgYSBTWU4gb3IgRklOIHBhY2tldCBmb3IgdGhlIGNvbm5lY3Rpb24uIEdpdmVuIHRoYXQgdGhpcyBpcyBpbiBUQ1AsIHRoaXMgbGlrZWx5IGlzIGEgc3BlY2lmaWMgY2FzZSBvZiBhbiBvdXQtb2Ytb3JkZXIgc2VnbWVudCBpbiB0aGUgY29udGV4dCBvZiB0aGUgd2luZG93IHNsaWRpbmcgZm9yd2FyZC4gSSYjMzk7ZCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgcmVhc29uaW5nIGhlcmUg4oCTIG1heWJlIGEgcmVvcmRlcmluZyBpc3N1ZSBhZnRlciBhIHdpbmRvdyB1cGRhdGUsIGEgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHksIG9yIHNvbWUgc3VidGxlIGludGVyYWN0aW9uIHdpdGggb3RoZXIgVENQIG1lY2hhbmlzbXMgbGlrZSB3aW5kb3cgc2NhbGluZyBvciBTQUNLLiBJJiMzOTtkIG5lZWQgdG8gc2VlIHRoZSBjb21taXQgbWVzc2FnZSBhbmQgcG9zc2libHkgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGZvciB0aGlzIGNoYW5nZSBjb21wbGV0ZWx5LiBUaGUgbG9naWMgc2VlbXMgcmVhc29uYWJsZSBlbm91Z2ggb24gdGhlIHN1cmZhY2UsIGJ1dCBJIGFsd2F5cyB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDgzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0ODM1Olx0ICogb2YgUkNWLk5YVC4gUGVlciBzdGlsbCBkaWQgbm90IGFkdmFuY2UgaGlzIFNORC5VTkEgd2hlbiB3ZVxuNDgzNjpcdCAqIGRlbGF5ZWQgQUNLLCBzbyB0aGF0IGhpc1NORC5VTkFcdTAwM2M9b3VyUkNWLldVUC5cbjQ4Mzc6XHQgKiAoYm9ycm93ZWQgZnJvbSBmcmVlYnNkKVxuNDgzODpcdCAqL1xuNDgzOTpcdFxuNDg0MDpcdHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3Bfc2VxdWVuY2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuNDg0MTpcdFx0XHRcdFx0XHQgdTMyIHNlcSwgdTMyIGVuZF9zZXEsXG40ODQyOlx0XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aClcbjQ4NDM6XHR7XG40ODQ0Olx0XHRjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbjQ4NDU6XHRcdHUzMiBzZXFfbGltaXQ7XG40ODQ2Olx0XG40ODQ3Olx0XHRpZiAoYmVmb3JlKGVuZF9zZXEsIHRwLVx1MDAzZXJjdl93dXApIHx8XG40ODQ4Olx0XHQgICAgKGVuZF9zZXEgPT0gdHAtXHUwMDNlcmN2X3d1cCBcdTAwMjZcdTAwMjZcbjQ4NDk6XHRcdCAgICAgc2VxICE9IGVuZF9zZXEgXHUwMDI2XHUwMDI2XG40ODUwOlx0XHQgICAgICF0aC1cdTAwM2VzeW4gXHUwMDI2XHUwMDI2XG40ODUxOlx0XHQgICAgICF0aC1cdTAwM2VmaW4pKVxuNDg1MjpcdFx0XHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1RDUF9PTERfU0VRVUVOQ0U7XG40ODUzOlx0XG40ODU0Olx0XHRzZXFfbGltaXQgPSB0cC1cdTAwM2VyY3Zfbnh0ICYjNDM7IHRjcF9tYXhfcmVjZWl2ZV93aW5kb3codHApO1xuNDg1NTpcdFx0aWYgKHVubGlrZWx5KGFmdGVyKGVuZF9zZXEsIHNlcV9saW1pdCkpKSB7XG40ODU2Olx0XHRcdC8qIFNvbWUgc3RhY2tzIGFyZSBrbm93biB0byBoYW5kbGUgRklOIGluY29ycmVjdGx5OyBhbGxvdyB0aGVcbjQ4NTc6XHRcdFx0ICogRklOIHRvIGV4dGVuZCBiZXlvbmQgdGhlIHdpbmRvdyBhbmQgY2hlY2sgaXQgaW4gZGV0YWlsIGxhdGVyLlxuNDg1ODpcdFx0XHQgKi9cbjQ4NTk6XHRcdFx0aWYgKCFhZnRlcihlbmRfc2VxIC0gdGgtXHUwMDNlZmluLCBzZXFfbGltaXQpKVxuNDg2MDpcdFx0XHRcdHJldHVybiBTS0JfTk9UX0RST1BQRURfWUVUO1xuNDg2MTpcdFxuNDg2MjpcdFx0XHRpZiAoYWZ0ZXIoc2VxLCBzZXFfbGltaXQpKVxuNDg2MzpcdFx0XHRcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX0lOVkFMSURfU0VRVUVOQ0U7XG40ODY0Olx0XG40ODY1Olx0XHRcdC8qIE9ubHkgYWNjZXB0IHRoaXMgcGFja2V0IGlmIHJlY2VpdmUgcXVldWUgaXMgZW1wdHkuICovXG40ODY2Olx0XHRcdGlmIChza2JfcXVldWVfbGVuKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKVxuNDg2NzpcdFx0XHRcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX0lOVkFMSURfRU5EX1NFUVVFTkNFO1xuNDg2ODpcdFx0fVxuNDg2OTpcdFxuNDg3MDpcdFx0cmV0dXJuIFNLQl9OT1RfRFJPUFBFRF9ZRVQ7XG40ODcxOlx0fVxuNDg3MjpcdFxuNDg3MzpcdFxuNDg3NDpcdHZvaWQgdGNwX2RvbmVfd2l0aF9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXG40ODc1Olx0e1xuNDg3NjpcdFx0LyogVGhpcyBiYXJyaWVyIGlzIGNvdXBsZWQgd2l0aCBzbXBfcm1iKCkgaW4gdGNwX3BvbGwoKSAqL1xuNDg3NzpcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19lcnIsIGVycik7XG40ODc4Olx0XHRzbXBfd21iKCk7XG40ODc5Olx0XG40ODgwOlx0XHR0Y3Bfd3JpdGVfcXVldWVfcHVyZ2Uoc2spO1xuNDg4MTpcdFx0dGNwX2RvbmUoc2spO1xuNDg4MjpcdFxuNDg4MzpcdFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXG40ODg0Olx0XHRcdHNrX2Vycm9yX3JlcG9ydChzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MTIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgcHJvbXB0LCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGEgaGlnaCBsZXZlbCBvZiBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIGB0Y3Bfc2VxdWVuY2VgKioKCk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgYXNraW5nIG1lIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGB0Y3Bfc2VxdWVuY2VgIGFuZCwgY3JpdGljYWxseSwgaG93IGFuZCB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoZSBlbXBoYXNpcyBvbiAmIzM0O2NhbGxlcnMmIzM0OyBzdWdnZXN0cyBhIHByaW1hcnkgZ29hbCBvZiB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cgYW5kIGRlcGVuZGVuY2llcyBzdXJyb3VuZGluZyB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGB0Y3Bfc2VxdWVuY2VgIGlzIGRlc2lnbmVkIHRvICpkbyosIHdoYXQgaXRzIGlucHV0cyBhcmUsIHdoYXQgaXQgcHJvZHVjZXMgYXMgb3V0cHV0LCBhbmQgaW1wb3J0YW50bHksIHdoaWNoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gcmVseSBvbiBpdHMgcmVzdWx0cy4gVGhpcyBzdWdnZXN0cyBhIG5lZWQgdG8gZWl0aGVyIHRyYWNlIGl0cyBjb2RlLCBleGFtaW5lIGl0cyBkb2N1bWVudGF0aW9uIChpZiBhbnkpLCBvciB1c2UgbXkgdG9vbHMgdG8gZmluZCBhbGwgY2FsbHMgYW5kIHBvc3NpYmx5IHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmdW5jdGlvbiB0byBzZWUgaG93IGl0IHdvcmtzLiBBIGtleSBzdHJhdGVneSBoZXJlIHdpbGwgYmUgdG8gc3RhcnQgd2l0aCB0aGUgZnVuY3Rpb24gaXRzZWxmLCBhbmQgdGhlbiB1bmRlcnN0YW5kIGl0cyAmIzM0O2NsaWVudHMuJiMzNDsgVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHR1YWwga25vd2xlZGdlIEkgbmVlZCB0byBmb3JtIGEgdXNlZnVsIGFuYWx5c2lzLiBJJiMzOTttIGFzc3VtaW5nLCBvZiBjb3Vyc2UsIHRoYXQgJiMzNDt0Y3AmIzM0OyByZWZlcnMgdG8gdGhlIFRyYW5zbWlzc2lvbiBDb250cm9sIFByb3RvY29sLCBhbmQgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGFzIGNvbnRleHQgaWYgdGhlIGNvZGUgZG9lc24mIzM5O3QgZXhwbGljaXRseSByZWZlciB0byB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3Bfc2VxdWVuY2VcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmM9NDc5MT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX2Rpc29yZGVyZWRfYWNrX2NoZWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00ODM5LVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NDg0MDpzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX3NlcXVlbmNlKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4NDEtXHRcdFx0XHRcdCB1MzIgc2VxLCB1MzIgZW5kX3NlcSxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz02MzI2PXN0YXRpYyBib29sIHRjcF92YWxpZGF0ZV9pbmNvbWluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM2My1cdC8qIFN0ZXAgMTogY2hlY2sgc2VxdWVuY2UgbnVtYmVyICovXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2MzY0Olx0cmVhc29uID0gdGNwX3NlcXVlbmNlKHNrLCBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlc2VxLFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM2NS1cdFx0XHQgICAgICBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSwgdGgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzg0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBhbmQgU2VxdWVuY2UgTnVtYmVycyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBhbmQgdGhlIGB0Y3Bfc2VxdWVuY2VgIHZhcmlhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBoYW5kbGluZyBzZXF1ZW5jZSBudW1iZXJzIGZyb20gaW5jb21pbmcgVENQIHNlZ21lbnRzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHZhbGlkYXRpb24gcHJvY2Vzcy4gV2hhdCBhcmUgdGhlIGtleSBjaGVja3M/IFdoZXJlIGFyZSB0aGUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgb3IgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9ucywgcHJlc2VudD8gSSBzdXNwZWN0IGl0JiMzOTtzIGxvb2tpbmcgYXQgdGhlIHNlcXVlbmNlIG51bWJlciB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGVzdGFibGlzaGVkIFRDUCBjb25uZWN0aW9uIHN0YXRlLCBsaWtlIHRoZSBleHBlY3RlZCBzZXF1ZW5jZSBudW1iZXIsIHdpbmRvdyBzaXplLCBhbmQgYWNrbm93bGVkZ21lbnQgbnVtYmVycy4gSSBhbHNvIHdvbmRlciBob3cgaXQgaGFuZGxlcyByZXRyYW5zbWlzc2lvbnMsIG91dC1vZi1vcmRlciBzZWdtZW50cywgYW5kIFNZTi9BQ0sgaGFuZHNoYWtlcy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCBpdCB3aWxsIGVuZm9yY2UgVENQJiMzOTtzIHJlbGlhYmlsaXR5IG1lY2hhbmlzbXMsIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGFuZCBwcmV2ZW50aW5nIHNlcXVlbmNlIG51bWJlciB3cmFwcGluZyBpc3N1ZXMuIEkgaG9wZSB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB2YWxpZGF0aW9ucyB3aWxsIGluZm9ybSBob3cgdGhlIHN0YWNrIHByb2Nlc3NlcyBUQ1AgcGFja2V0cy4gSSBhbHNvIHdhbnQgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCBlZGdlIGNhc2VzIHJlbGF0ZWQgdG8gcGF0aG9sb2dpY2FsIHNlcXVlbmNlIG51bWJlcnMgb3IgY3JhZnRlZCBwYWNrZXRzIHRoYXQgY291bGQgYnlwYXNzIHRoZXNlIHZhbGlkYXRpb25zLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfaW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjM1NTpcdFx0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9QQVdTRVNUQUJSRUpFQ1RFRCk7XG42MzU2Olx0XHRpZiAoIXRjcF9vb3dfcmF0ZV9saW1pdGVkKHNvY2tfbmV0KHNrKSwgc2tiLFxuNjM1NzpcdFx0XHRcdFx0ICBMSU5VWF9NSUJfVENQQUNLU0tJUFBFRFBBV1MsXG42MzU4Olx0XHRcdFx0XHQgIFx1MDAyNnRwLVx1MDAzZWxhc3Rfb293X2Fja190aW1lKSlcbjYzNTk6XHRcdFx0dGNwX3NlbmRfZHVwYWNrKHNrLCBza2IpO1xuNjM2MDpcdFx0Z290byBkaXNjYXJkO1xuNjM2MTpcdFxuNjM2MjpcdHN0ZXAxOlxuNjM2MzpcdFx0LyogU3RlcCAxOiBjaGVjayBzZXF1ZW5jZSBudW1iZXIgKi9cbjYzNjQ6XHRcdHJlYXNvbiA9IHRjcF9zZXF1ZW5jZShzaywgVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSxcbjYzNjU6XHRcdFx0XHQgICAgICBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSwgdGgpO1xuNjM2NjpcdFx0aWYgKHJlYXNvbikge1xuNjM2NzpcdFx0XHQvKiBSRkM3OTMsIHBhZ2UgMzc6IFwmIzM0O0luIGFsbCBzdGF0ZXMgZXhjZXB0IFNZTi1TRU5ULCBhbGwgcmVzZXRcbjYzNjg6XHRcdFx0ICogKFJTVCkgc2VnbWVudHMgYXJlIHZhbGlkYXRlZCBieSBjaGVja2luZyB0aGVpciBTRVEtZmllbGRzLlwmIzM0O1xuNjM2OTpcdFx0XHQgKiBBbmQgcGFnZSA2OTogXCYjMzQ7SWYgYW4gaW5jb21pbmcgc2VnbWVudCBpcyBub3QgYWNjZXB0YWJsZSxcbjYzNzA6XHRcdFx0ICogYW4gYWNrbm93bGVkZ21lbnQgc2hvdWxkIGJlIHNlbnQgaW4gcmVwbHkgKHVubGVzcyB0aGUgUlNUXG42MzcxOlx0XHRcdCAqIGJpdCBpcyBzZXQsIGlmIHNvIGRyb3AgdGhlIHNlZ21lbnQgYW5kIHJldHVybilcJiMzNDsuXG42MzcyOlx0XHRcdCAqL1xuNjM3MzpcdFx0XHRpZiAoIXRoLVx1MDAzZXJzdCkge1xuNjM3NDpcdFx0XHRcdGlmICh0aC1cdTAwM2VzeW4pXG42Mzc1Olx0XHRcdFx0XHRnb3RvIHN5bl9jaGFsbGVuZ2U7XG42Mzc2Olx0XG42Mzc3Olx0XHRcdFx0aWYgKHJlYXNvbiA9PSBTS0JfRFJPUF9SRUFTT05fVENQX0lOVkFMSURfU0VRVUVOQ0UgfHxcbjYzNzg6XHRcdFx0XHQgICAgcmVhc29uID09IFNLQl9EUk9QX1JFQVNPTl9UQ1BfSU5WQUxJRF9FTkRfU0VRVUVOQ0UpXG42Mzc5Olx0XHRcdFx0XHRORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcbjYzODA6XHRcdFx0XHRcdFx0ICAgICAgTElOVVhfTUlCX0JFWU9ORF9XSU5ET1cpO1xuNjM4MTpcdFx0XHRcdGlmICghdGNwX29vd19yYXRlX2xpbWl0ZWQoc29ja19uZXQoc2spLCBza2IsXG42MzgyOlx0XHRcdFx0XHRcdFx0ICBMSU5VWF9NSUJfVENQQUNLU0tJUFBFRFNFUSxcbjYzODM6XHRcdFx0XHRcdFx0XHQgIFx1MDAyNnRwLVx1MDAzZWxhc3Rfb293X2Fja190aW1lKSlcbjYzODQ6XHRcdFx0XHRcdHRjcF9zZW5kX2R1cGFjayhzaywgc2tiKTtcbjYzODU6XHRcdFx0fSBlbHNlIGlmICh0Y3BfcmVzZXRfY2hlY2soc2ssIHNrYikpIHtcbjYzODY6XHRcdFx0XHRnb3RvIHJlc2V0O1xuNjM4NzpcdFx0XHR9XG42Mzg4Olx0XHRcdGdvdG8gZGlzY2FyZDtcbjYzODk6XHRcdH1cbjYzOTA6XHRcbjYzOTE6XHRcdC8qIFN0ZXAgMjogY2hlY2sgUlNUIGJpdCAqL1xuNjM5MjpcdFx0aWYgKHRoLVx1MDAzZXJzdCkge1xuNjM5MzpcdFx0XHQvKiBSRkMgNTk2MSAzLjIgKGV4dGVuZCB0byBtYXRjaCBhZ2FpbnN0IChSQ1YuTlhUIC0gMSkgYWZ0ZXIgYVxuNjM5NDpcdFx0XHQgKiBGSU4gYW5kIFNBQ0sgdG9vIGlmIGF2YWlsYWJsZSk6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MTMKCQkJCQkJCW91dHB1dDogMTU0CgkJCQkJCQl0aG91Z2h0czogMzM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRDUCBTZXF1ZW5jZSBWYWxpZGF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgbW9kaWZpY2F0aW9uIHRvIGB0Y3Bfc2VxdWVuY2UoKWAuIEl0IGZvY3VzZXMgb24gc2VxdWVuY2UgbnVtYmVyIHZhbGlkYXRpb24sIHNwZWNpZmljYWxseSBoYW5kbGluZyB0aGUgY2FzZSB3aGVyZSBhIHBhY2tldCYjMzk7cyBlbmRpbmcgc2VxdWVuY2UgbnVtYmVyIChgZW5kX3NlcWApIG1hdGNoZXMgYHRwLSZndDtyY3Zfd3VwYCwgdGhlIHdpbmRvdyB1cGRhdGUgc2VxdWVuY2UuIFRoZSBwYXRjaCBub3cgZHJvcHMgdGhlIHBhY2tldCB3aXRoIGBTS0JfRFJPUF9SRUFTT05fVENQX09MRF9TRVFVRU5DRWAgaWYgYGVuZF9zZXFgIGlzIGVxdWFsIHRvIGB0cC0mZ3Q7cmN2X3d1cGAsIGl0IGNvbnRhaW5zIGEgcGF5bG9hZCAoYHNlcSAhPSBlbmRfc2VxYCksIGFuZCBpdCYjMzk7cyAqbm90KiBhIFNZTiBvciBGSU4gcGFja2V0LiBUaGlzIG1ha2VzIHNlbnNlOyBpdCBzZWVtcyBsaWtlIGl0IGlzIGludGVuZGVkIHRvIGRyb3Agb2xkIGRhdGEgYXQgdGhlIHdpbmRvdyB1cGRhdGUuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBmb3IgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBTaW5jZSBJJiMzOTttIGZhbWlsaWFyIHdpdGggdGhlc2Ugc29ydHMgb2YgdnVsbmVyYWJpbGl0aWVzLCBJJiMzOTtsbCBnbyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3Q6CgoxLiAgKipLZXJuZWwtdG8tVXNlciBTcGFjZSBFeHBvc3VyZToqKiBBcmUgdGhlcmUgYW55IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcgY291bGQgYmUgYSBwcm9ibGVtPyBObywgdGhpcyBjb2RlIG9wZXJhdGVzIHB1cmVseSB3aXRoaW4gdGhlIGtlcm5lbCBhbmQgaXNuJiMzOTt0IGludm9sdmVkIGluIHBhc3NpbmcgZGF0YSBzdHJ1Y3R1cmVzIG91dCB0byB1c2VyIHNwYWNlLgoKMi4gICoqQ29uZGl0aW9uYWwgTG9naWMgRGVwZW5kZW50IG9uIFVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzOioqIExldCYjMzk7cyBsb29rIGF0IHRoZSB2YXJpYWJsZXMuIGBzZXFgLCBgZW5kX3NlcWAsIGB0aGAsIGFuZCBgdHAtJmd0O3Jjdl93dXBgIGFyZSBhbGwgZGVyaXZlZCBmcm9tIHRoZSBUQ1AgaGVhZGVyLCB0aGUgVENQIHNvY2tldCBzdHJ1Y3R1cmUgKGB0cGApLCBhbmQgdGhlIFNLQiBjb250cm9sIGJsb2NrLiBUaGV5IGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIHdpdGhpbiB0aGUgdmFsaWRhdGlvbiBsb2dpYy4gU2VlbXMgc2FmZS4KCjMuICAqKkNvbXBsZXggRGF0YSBTdHJ1Y3R1cmUgSGFuZGxpbmc6KiogSXMgdGhlcmUgYW55IGNvbXBsZXggYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBkYXRhIHN0cnVjdHVyZXMgaGVyZT8gTm8sIHRoaXMgaXMgYWxsIHJlbGF0aXZlbHkgc2ltcGxlIHNlcXVlbmNlIG51bWJlciBjb21wYXJpc29uIHdpdGhpbiBhIFRDUCBwYWNrZXQgcHJvY2Vzc2luZyBmdW5jdGlvbi4KCjQuICAqKkJvdW5kcyBDaGVja2luZyBhbmQgQnVmZmVyIEFjY2VzczoqKiBEb2VzIHRoZSBjb2RlIGhhdmUgdGhlIHBvdGVudGlhbCB0byByZWFkIG9yIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIHdpdGhpbiBleGlzdGluZyBidWZmZXJzIGJhc2VkIG9uIGxlbmd0aHMgb3IgY29uZGl0aW9uYWwgbG9naWM/IE5vLCB0aGlzIGlzIGFib3V0IGRyb3BwaW5nIHBhY2tldHMgYmFzZWQgb24gc2VxdWVuY2UgbnVtYmVycyBhbmQgcGFja2V0IHR5cGUsIG5vdCBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBwYXJ0cyBvZiBhIGJ1ZmZlci4KClRoZXJlZm9yZSwgYWZ0ZXIgYSBjYXJlZnVsIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGUgZGF0YSBpcyBwcm9wZXJseSBzb3VyY2VkLiBHaXZlbiB0aGF0LCBLTVNBTiBpc24mIzM5O3Qgd2FycmFudGVkOyBzdGFuZGFyZCBLQVNBTiBhbmQgc3RhbmRhcmQgdGVzdGluZyBzaG91bGQgYmUgc3VmZmljaWVudCB0byB2YWxpZGF0ZSB0aGUgY2hhbmdlLiBJIGFtIHJlYWR5IHRvIGZvcm11bGF0ZSBhIHJlc3BvbnNlIGFuZCBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUQ1AgaW5wdXQgc2VxdWVuY2UgdmFsaWRhdGlvbiBpbiBgdGNwX3NlcXVlbmNlKClgIGJ5IGFkZGluZyBhIGNvbmRpdGlvbiB0byBkcm9wIGluY29taW5nIHBhY2tldHMgd2hvc2UgZW5kIHNlcXVlbmNlIGVxdWFscyBgdHAtXHUwMDNlcmN2X3d1cGAgKHdoZW4gY2FycnlpbmcgcGF5bG9hZCB3aXRob3V0IFNZTi9GSU4gZmxhZ3MpIGFzIGBTS0JfRFJPUF9SRUFTT05fVENQX09MRF9TRVFVRU5DRWAuXG5cblRoaXMgY2hhbmdlIHNvbGVseSBhZGp1c3RzIFRDUCBwcm90b2NvbCBzZXF1ZW5jZSBudW1iZXIgdmFsaWRhdGlvbiBsb2dpYyBhbmQgcmV0dXJuIGNvZGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgY29weWluZyBvZiBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeS4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIGlucHV0IHNlcXVlbmNlIHZhbGlkYXRpb24gaW4gYHRjcF9zZXF1ZW5jZSgpYCBieSBhZGRpbmcgYSBjb25kaXRpb24gdG8gZHJvcCBpbmNvbWluZyBwYWNrZXRzIHdob3NlIGVuZCBzZXF1ZW5jZSBlcXVhbHMgYHRwLVx1MDAzZXJjdl93dXBgICh3aGVuIGNhcnJ5aW5nIHBheWxvYWQgd2l0aG91dCBTWU4vRklOIGZsYWdzKSBhcyBgU0tCX0RST1BfUkVBU09OX1RDUF9PTERfU0VRVUVOQ0VgLlxuXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWRqdXN0cyBUQ1AgcHJvdG9jb2wgc2VxdWVuY2UgbnVtYmVyIHZhbGlkYXRpb24gbG9naWMgYW5kIHJldHVybiBjb2Rlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGNvcHlpbmcgb2Yga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkuIFRoZXJlZm9yZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo1MzoxMy44MjAzODkyNDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU1MjYyNjU3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9yY3Zfc3RhdGVfcHJvY2Vzc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRDUCBpbnB1dCBzZXF1ZW5jZSB2YWxpZGF0aW9uIGluIGB0Y3Bfc2VxdWVuY2UoKWAgYnkgYWRkaW5nIGEgY29uZGl0aW9uIHRvIGRyb3AgaW5jb21pbmcgcGFja2V0cyB3aG9zZSBlbmQgc2VxdWVuY2UgZXF1YWxzIGB0cC1cXHUwMDNlcmN2X3d1cGAgKHdoZW4gY2FycnlpbmcgcGF5bG9hZCB3aXRob3V0IFNZTi9GSU4gZmxhZ3MpIGFzIGBTS0JfRFJPUF9SRUFTT05fVENQX09MRF9TRVFVRU5DRWAuXFxuXFxuVGhpcyBjaGFuZ2Ugc29sZWx5IGFkanVzdHMgVENQIHByb3RvY29sIHNlcXVlbmNlIG51bWJlciB2YWxpZGF0aW9uIGxvZ2ljIGFuZCByZXR1cm4gY29kZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBjb3B5aW5nIG9mIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LiBUaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFyZSBpbnRyb2R1Y2VkIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBUQ1Agc2VxdWVuY2UgdmFsaWRhdGlvbiBsb2dpYyBpbiB0Y3Bfc2VxdWVuY2UoKSB3aXRoaW4gbmV0L2lwdjQvdGNwX2lucHV0LmMgdG8gZHJvcCBwYWNrZXRzIHdpdGggb2xkIHNlcXVlbmNlIG51bWJlcnMgd2hlbiBlbmRfc2VxIGVxdWFscyByY3Zfd3VwIGZvciBub24tZW1wdHkgcGFja2V0cyB3aXRob3V0IFNZTi9GSU4gZmxhZ3MuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBhZmZlY3RpbmcgVENQIHBhY2tldCBwcm9jZXNzaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo1MzoxMy44MjAzOTY2OTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MDM4ODkxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM3Y2Y1Yjk1ZjBiMTQ1ZDgxMzhmOTkxMDJjOWYyNmM1ODkyZDk2YjVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTM6NTM6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xcbmluZGV4IGRhZmY5M2Q1MTM0MjguLjE5OTEyODVhYTAzZTMgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmNcXG4rKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xcbkBAIC00ODQ0LDcgKzQ4NDQsMTEgQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9zZXF1ZW5jZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbiBcXHR1MzIgc2VxX2xpbWl0O1xcbiBcXG4tXFx0aWYgKGJlZm9yZShlbmRfc2VxLCB0cC1cXHUwMDNlcmN2X3d1cCkpXFxuK1xcdGlmIChiZWZvcmUoZW5kX3NlcSwgdHAtXFx1MDAzZXJjdl93dXApIHx8XFxuK1xcdCAgICAoZW5kX3NlcSA9PSB0cC1cXHUwMDNlcmN2X3d1cCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIHNlcSAhPSBlbmRfc2VxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgIXRoLVxcdTAwM2VzeW4gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAhdGgtXFx1MDAzZWZpbikpXFxuIFxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX09MRF9TRVFVRU5DRTtcXG4gXFxuIFxcdHNlcV9saW1pdCA9IHRwLVxcdTAwM2VyY3Zfbnh0ICsgdGNwX21heF9yZWNlaXZlX3dpbmRvdyh0cCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjUzOjE0LjIxMTQxNzM0NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTA4MjEwNzI3NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfcmN2X3N0YXRlX3Byb2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBUQ1Agc2VxdWVuY2UgdmFsaWRhdGlvbiBsb2dpYyBpbiB0Y3Bfc2VxdWVuY2UoKSB3aXRoaW4gbmV0L2lwdjQvdGNwX2lucHV0LmMgdG8gZHJvcCBwYWNrZXRzIHdpdGggb2xkIHNlcXVlbmNlIG51bWJlcnMgd2hlbiBlbmRfc2VxIGVxdWFscyByY3Zfd3VwIGZvciBub24tZW1wdHkgcGFja2V0cyB3aXRob3V0IFNZTi9GSU4gZmxhZ3MuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBhZmZlY3RpbmcgVENQIHBhY2tldCBwcm9jZXNzaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjN2NmNWI5NWYwYjE0NWQ4MTM4Zjk5MTAyYzlmMjZjNTg5MmQ5NmI1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTM6NTM6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jXG5pbmRleCBkYWZmOTNkNTEzNDI4Li4xOTkxMjg1YWEwM2UzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmNcbisrKyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jXG5AQCAtNDg0NCw3ICs0ODQ0LDExIEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3Bfc2VxdWVuY2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4gXHR1MzIgc2VxX2xpbWl0O1xuIFxuLVx0aWYgKGJlZm9yZShlbmRfc2VxLCB0cC1cdTAwM2VyY3Zfd3VwKSlcbitcdGlmIChiZWZvcmUoZW5kX3NlcSwgdHAtXHUwMDNlcmN2X3d1cCkgfHxcbitcdCAgICAoZW5kX3NlcSA9PSB0cC1cdTAwM2VyY3Zfd3VwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICBzZXEgIT0gZW5kX3NlcSBcdTAwMjZcdTAwMjZcbitcdCAgICAgIXRoLVx1MDAzZXN5biBcdTAwMjZcdTAwMjZcbitcdCAgICAgIXRoLVx1MDAzZWZpbikpXG4gXHRcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX09MRF9TRVFVRU5DRTtcbiBcbiBcdHNlcV9saW1pdCA9IHRwLVx1MDAzZXJjdl9ueHQgKyB0Y3BfbWF4X3JlY2VpdmVfd2luZG93KHRwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjUzOjE0LjIxMTQxODYxNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNTQ2MzczOTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRoaXM6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIGBkaWZmYCBoZXJlLCBhbmQgaXQncyBwb2ludGluZyB0byBhIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBgdGNwX3NlcXVlbmNlKClgIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNoYW5nZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki5cblxuRmlyc3QsIEknbGwgZXhhbWluZSB0aGUgZGlmZiBpdHNlbGYuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgc3BlY2lmaWMgbGluZXMgdGhhdCB3ZXJlIGFkZGVkLCByZW1vdmVkLCBvciBtb2RpZmllZCB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuIFxuXG5JJ2xsIGFsc28gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBpdHNlbGYgaW4gZGV0YWlsLiBNeSBwcmVmZXJyZWQgYXBwcm9hY2ggd2lsbCBiZSB0byByZWFkIHRoZSByZWxldmFudCBzZWN0aW9uIG9mIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AgYXJvdW5kIHRoZSBgdGNwX3NlcXVlbmNlKClgIGZ1bmN0aW9uLiBUaGlzIHdpbGwgaGVscCBtZSB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbidzIHJlc3BvbnNpYmlsaXR5IHdpdGhpbiB0aGUgVENQL0lQIHN0YWNrLlxuXG5GaW5hbGx5LCBJIHdpbGwgd2FudCB0byByZWFkIHRoZSBlbnRpcmUgZmlsZSwgaW4gY2FzZSB0aGUgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc291cmNlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjUzOjI0Ljc1Nzc5NTc3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ4MzUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ4MzU6XFx0ICogb2YgUkNWLk5YVC4gUGVlciBzdGlsbCBkaWQgbm90IGFkdmFuY2UgaGlzIFNORC5VTkEgd2hlbiB3ZVxcbjQ4MzY6XFx0ICogZGVsYXllZCBBQ0ssIHNvIHRoYXQgaGlzU05ELlVOQVxcdTAwM2M9b3VyUkNWLldVUC5cXG40ODM3OlxcdCAqIChib3Jyb3dlZCBmcm9tIGZyZWVic2QpXFxuNDgzODpcXHQgKi9cXG40ODM5OlxcdFxcbjQ4NDA6XFx0c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9zZXF1ZW5jZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuNDg0MTpcXHRcXHRcXHRcXHRcXHRcXHQgdTMyIHNlcSwgdTMyIGVuZF9zZXEsXFxuNDg0MjpcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHRjcGhkciAqdGgpXFxuNDg0MzpcXHR7XFxuNDg0NDpcXHRcXHRjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG40ODQ1OlxcdFxcdHUzMiBzZXFfbGltaXQ7XFxuNDg0NjpcXHRcXG40ODQ3OlxcdFxcdGlmIChiZWZvcmUoZW5kX3NlcSwgdHAtXFx1MDAzZXJjdl93dXApIHx8XFxuNDg0ODpcXHRcXHQgICAgKGVuZF9zZXEgPT0gdHAtXFx1MDAzZXJjdl93dXAgXFx1MDAyNlxcdTAwMjZcXG40ODQ5OlxcdFxcdCAgICAgc2VxICE9IGVuZF9zZXEgXFx1MDAyNlxcdTAwMjZcXG40ODUwOlxcdFxcdCAgICAgIXRoLVxcdTAwM2VzeW4gXFx1MDAyNlxcdTAwMjZcXG40ODUxOlxcdFxcdCAgICAgIXRoLVxcdTAwM2VmaW4pKVxcbjQ4NTI6XFx0XFx0XFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9UQ1BfT0xEX1NFUVVFTkNFO1xcbjQ4NTM6XFx0XFxuNDg1NDpcXHRcXHRzZXFfbGltaXQgPSB0cC1cXHUwMDNlcmN2X254dCArIHRjcF9tYXhfcmVjZWl2ZV93aW5kb3codHApO1xcbjQ4NTU6XFx0XFx0aWYgKHVubGlrZWx5KGFmdGVyKGVuZF9zZXEsIHNlcV9saW1pdCkpKSB7XFxuNDg1NjpcXHRcXHRcXHQvKiBTb21lIHN0YWNrcyBhcmUga25vd24gdG8gaGFuZGxlIEZJTiBpbmNvcnJlY3RseTsgYWxsb3cgdGhlXFxuNDg1NzpcXHRcXHRcXHQgKiBGSU4gdG8gZXh0ZW5kIGJleW9uZCB0aGUgd2luZG93IGFuZCBjaGVjayBpdCBpbiBkZXRhaWwgbGF0ZXIuXFxuNDg1ODpcXHRcXHRcXHQgKi9cXG40ODU5OlxcdFxcdFxcdGlmICghYWZ0ZXIoZW5kX3NlcSAtIHRoLVxcdTAwM2VmaW4sIHNlcV9saW1pdCkpXFxuNDg2MDpcXHRcXHRcXHRcXHRyZXR1cm4gU0tCX05PVF9EUk9QUEVEX1lFVDtcXG40ODYxOlxcdFxcbjQ4NjI6XFx0XFx0XFx0aWYgKGFmdGVyKHNlcSwgc2VxX2xpbWl0KSlcXG40ODYzOlxcdFxcdFxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX0lOVkFMSURfU0VRVUVOQ0U7XFxuNDg2NDpcXHRcXG40ODY1OlxcdFxcdFxcdC8qIE9ubHkgYWNjZXB0IHRoaXMgcGFja2V0IGlmIHJlY2VpdmUgcXVldWUgaXMgZW1wdHkuICovXFxuNDg2NjpcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKVxcbjQ4Njc6XFx0XFx0XFx0XFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9UQ1BfSU5WQUxJRF9FTkRfU0VRVUVOQ0U7XFxuNDg2ODpcXHRcXHR9XFxuNDg2OTpcXHRcXG40ODcwOlxcdFxcdHJldHVybiBTS0JfTk9UX0RST1BQRURfWUVUO1xcbjQ4NzE6XFx0fVxcbjQ4NzI6XFx0XFxuNDg3MzpcXHRcXG40ODc0OlxcdHZvaWQgdGNwX2RvbmVfd2l0aF9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXFxuNDg3NTpcXHR7XFxuNDg3NjpcXHRcXHQvKiBUaGlzIGJhcnJpZXIgaXMgY291cGxlZCB3aXRoIHNtcF9ybWIoKSBpbiB0Y3BfcG9sbCgpICovXFxuNDg3NzpcXHRcXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza19lcnIsIGVycik7XFxuNDg3ODpcXHRcXHRzbXBfd21iKCk7XFxuNDg3OTpcXHRcXG40ODgwOlxcdFxcdHRjcF93cml0ZV9xdWV1ZV9wdXJnZShzayk7XFxuNDg4MTpcXHRcXHR0Y3BfZG9uZShzayk7XFxuNDg4MjpcXHRcXG40ODgzOlxcdFxcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxcbjQ4ODQ6XFx0XFx0XFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NTM6MjQuNzU4MDU0NzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjY1MzYzOTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGB0Y3Bfc2VxdWVuY2VgIFVzYWdlKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBmb3IgYHRjcF9zZXF1ZW5jZWAuIFNpbmNlIEknbSBrbmVlLWRlZXAgaW4gdGhlIGtlcm5lbCdzIFRDUCBpbXBsZW1lbnRhdGlvbiwgbXkgZmlyc3QgbW92ZSBpcyB0byBwaW5wb2ludCBpdHMgdXNhZ2Ugd2l0aGluIGB0Y3BfaW5wdXQuY2AuIEknbSBnb2luZyB0byBsZXZlcmFnZSBteSB0cnVzdHkgYGdyZXBgIHNraWxscyB0byBxdWlja2x5IGZpbmQgYWxsIGluc3RhbmNlcyB3aGVyZSBgdGNwX3NlcXVlbmNlYCBpcyBpbnZva2VkIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgZmlsZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVncmF0ZXMgaW50byB0aGUgcGFja2V0IHByb2Nlc3NpbmcgZmxvdy4gRXNzZW50aWFsbHksIEknbSBhaW1pbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBXaGF0IGZ1bmN0aW9ucyBjYWxsIGl0PyBXaGF0IGFyZSB0aGUgY29udGV4dHMgd2hlcmUgaXQgaXMgYmVpbmcgdXNlZD8gQW5kIGZyb20gdGhvc2UgY29udGV4dHMsIGhvdyBpdCBjaGFuZ2VzIGJhc2VkIG9uIGNvbnRyb2wgZmxvdz9cblxuXG4iLCJJbnB1dFRva2VucyI6MzMxNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NTM6MzAuNDIzNDIyMDIxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MzI2MzU5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3Bfc2VxdWVuY2VcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuYz00NzkxPXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfZGlzb3JkZXJlZF9hY2tfY2hlY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDgzOS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0ODQwOnN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3Bfc2VxdWVuY2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4NDEtXFx0XFx0XFx0XFx0XFx0IHUzMiBzZXEsIHUzMiBlbmRfc2VxLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NjMyNj1zdGF0aWMgYm9vbCB0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM2My1cXHQvKiBTdGVwIDE6IGNoZWNrIHNlcXVlbmNlIG51bWJlciAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjYzNjQ6XFx0cmVhc29uID0gdGNwX3NlcXVlbmNlKHNrLCBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXNlcSxcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02MzY1LVxcdFxcdFxcdCAgICAgIFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlZW5kX3NlcSwgdGgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo1MzozMC43ODY2OTcxMDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjU5ODYxNjc2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqUGVlcmluZyBpbnRvIHRoZSBDYWxsIFN0YWNrIG9mIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IG9mIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIGFsd2F5cyB0byB0cmFjZSB0aGUgY2FsbHMsIHJpZ2h0PyBUaGUga2V5IGlzIGZpZ3VyaW5nIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQgZnJvbS4gVW5kZXJzdGFuZGluZyB0aGUgdXBzdHJlYW0gY2FsbGVycyB3aWxsIGdpdmUgbWUgdGhlIGNydWNpYWwgaW5zaWdodCBpbnRvICp3aHkqIHRoaXMgdmFsaWRhdGlvbiBpcyBoYXBwZW5pbmcsIHdoYXQga2luZCBvZiBkYXRhIGlzIGJlaW5nIHZhbGlkYXRlZCwgYW5kIHdoYXQgYXNzdW1wdGlvbnMgYXJlIGJlaW5nIG1hZGUgYWJvdXQgdGhlIGluY29taW5nIFRDUCBkYXRhLiBLbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyB3aWxsIGltbWVkaWF0ZWx5IGlsbHVtaW5hdGUgdGhlIHBvdGVudGlhbCBwcm9ibGVtcyBhbmQgaGVscCBtZSBpc29sYXRlIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIHRvIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpjYWxsZWQqIGZyb20uIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgzOCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjU0OjA3LjM4NTMxNjE1NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTE3MTg4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfdmFsaWRhdGVfaW5jb21pbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jPTYzMTQ9c3RhdGljIGJvb2wgdGNwX3Jlc2V0X2NoZWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTYzMjUtICovXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NjMyNjpzdGF0aWMgYm9vbCB0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTYzMjctXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCwgaW50IHN5bl9pbmVycilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTY1MDQ9dm9pZCB0Y3BfcmN2X2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY2NzUtdmFsaWRhdGU6XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NjY3NjpcXHRpZiAoIXRjcF92YWxpZGF0ZV9pbmNvbWluZyhzaywgc2tiLCB0aCwgMSkpXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjY3Ny1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03MTU2PXRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03MjMwLVxcdH1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3MjMxOlxcdGlmICghdGNwX3ZhbGlkYXRlX2luY29taW5nKHNrLCBza2IsIHRoLCAwKSlcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03MjMyLVxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo1NDowNy40NTY0OTMxNDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTUxMTMyMTU1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVENQIFNlcXVlbmNlIE51bWJlciBWYWxpZGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdGNwX3NlcXVlbmNlKClgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgVENQIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW4gYHRjcF9pbnB1dC5jYC4gSXQncyByZXNwb25zaWJsZSBmb3IgdmFsaWRhdGluZyBzZXF1ZW5jZSBudW1iZXJzLCBhbmQgSSBzZWUgaXQgZHJvcHMgcGFja2V0cyB1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zOiBgZW5kX3NlcSA9PSB0cC1cdTAwM2VyY3Zfd3VwIFx1MDAyNlx1MDAyNiBzZXEgIT0gZW5kX3NlcSBcdTAwMjZcdTAwMjYgIXRoLVx1MDAzZXN5biBcdTAwMjZcdTAwMjYgIXRoLVx1MDAzZWZpbmAuIFRoZSBkcm9wIHJlYXNvbiBpcyBgU0tCX0RST1BfUkVBU09OX1RDUF9PTERfU0VRVUVOQ0VgLiBUaGlzIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGNoYW5nZSB3aXRoaW4gdGhlIFRDUCBzdGFjaywgYWZmZWN0aW5nIGhvdyBzZXF1ZW5jZSBudW1iZXJzIGFyZSBoYW5kbGVkLlxuXG5UaGUgYmlnIHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBiZSB0cmlnZ2VyZWQgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudD8gWWVhaCwgdGhpcyBpcyBUQ1AsIHNvIGl0J3MgZWFzaWx5IHJlYWNoYWJsZSDigJMgbG9jYWwgbG9vcGJhY2ssIFRVTi9UQVAsIHZldGgsIHlvdSBuYW1lIGl0LiBTbywgaXMgaXQgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhpcyBpcyBjb3JlIG5ldHdvcmsgc3RhY2sgcHJvdG9jb2wgbG9naWMsIHJpZ2h0IGF0IHRoZSBoZWFydCBvZiBzZXF1ZW5jZSB2YWxpZGF0aW9uLiBBbnkgdnVsbmVyYWJpbGl0eSBoZXJlIGNvdWxkIGJlIGNyaXRpY2FsLlxuXG5Ob3csIGhvbGQgb24uIEJlZm9yZSBJIGp1bXAgaW4sIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBMZXQgbWUgcmV2aWV3IHRoZSBndWlkZWxpbmVzLiBUaGUgaW5zdHJ1Y3Rpb24gaXMgdG8gZXh0cmFjdCBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgYXJlIGxpa2VseSB0byBiZSBoZWF2aWx5IGZ1enplZCwgYnV0IEkgbmVlZCB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBvdGhlcndpc2UgdGhlIHRlc3RzIHdpbGwgYmUgc2tld2VkLiBJIG5lZWQgdG8gZm9jdXMgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoaXMgbWFrZXMgc2Vuc2U7IGlubGluZWQgZnVuY3Rpb25zIHdvbid0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy5cblxuU28sIGxldCBtZSB0aGluazogSXMgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgLCBgdGNwX3Y0X3JjdmAsIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgLCBvciBgdGNwX3NlcXVlbmNlYCBhIGdvb2QgY2hvaWNlPyBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgbG9va3MgbGlrZSBhIGhvdCBwYXRoIHRvIG1lLiBBaCwgd2FpdCwgXCJBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cIiBUaGlzIG1lYW5zIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyBvdXQuIEhtbSwgd2hhdCBhYm91dCB0aGUgb3RoZXIgb3B0aW9ucy4gTGV0J3Mgc2VlOiBgdGNwX3NlcXVlbmNlYCBpcyBzdGF0aWMuIFNvLCB0aGF0J3Mgb3V0LiBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGFsc28gb3V0LiBTbywgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGlzIG91dCBiZWNhdXNlIGl0IGlzIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiBpbiBUQ1AuXG5cbk9rLCBpcyBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYCBub24tc3RhdGljPyBMZXQncyBjaGVjayBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQxNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo1NDoxOC45Njc4MTczNzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDM1MDI5NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjU0OjE5LjA2ODE3NTEzM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzc0MDMyMTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUQ1AgUmVjZWl2ZSBTdGF0ZSBNYWNoaW5lKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0YWtpbmcgYSBsb29rIGF0IGB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3NgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIG1pc2VyeSwgZGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiEpIG9mIGhhbmRsaW5nIGluY29taW5nIFRDUCBzZWdtZW50cyBoYXBwZW5zIHdpdGhpbiBhIHNwZWNpZmljIHN0YXRlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRlY2xhcmF0aW9uLCBlc3BlY2lhbGx5IHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgYW5kIGFueSBhc3NvY2lhdGVkIHN0cnVjdHVyZXMgcGFzc2VkIGluLiBJIHdhbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBpbnB1dHMgaXQgY29uc3VtZXMsIHRoZSBpbnRlcm5hbCBkYXRhIGl0J3MgbGlrZWx5IG1hbmlwdWxhdGluZyAoZS5nLiwgY29udHJvbCBibG9ja3MsIHNlcXVlbmNlIG51bWJlcnMsIHdpbmRvdyBzaXplcyksIGFuZCB3aGF0IGl0cyBvdXRwdXRzIGFyZSDigJMgd2hpY2ggZXNzZW50aWFsbHkgZGVmaW5lIHRoZSBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgYWN0aW9ucyB0cmlnZ2VyZWQgYnkgdGhpcyBmdW5jdGlvbi4gSSdtIGFudGljaXBhdGluZyB0aGF0IGl0J3MgdGhlIGhlYXJ0IG9mIHRoZSByZWNlaXZlIHNpZGUgc3RhdGUgbWFjaGluZS4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgYW55IHBvdGVudGlhbCBidWdzIGFuZC9vciBib3R0bGVuZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM4OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjU0OjIyLjg0MjIwOTE1NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4NTY5NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3Jjdl9zdGF0ZV9wcm9jZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuYz02ODU2PXN0YXRpYyBpbnQgdGNwX3Jjdl9zeW5zZW50X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzA4MC1cXHRcXHQgKiB3ZSBoYXZlIG5vIHJlYXNvbnMgdG8gYWNjZXB0IGl0IHNvbWV0aW1lcy5cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3MDgxOlxcdFxcdCAqIEFsc28sIHNlZW1zIHRoZSBjb2RlIGRvaW5nIGl0IGluIHN0ZXA2IG9mIHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTcwODItXFx0XFx0ICogaXMgbm90IGZsYXdsZXNzLiBTbywgZGlzY2FyZCBwYWNrZXQgZm9yIHNhbml0eS5cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTcxNTU9ZW51bSBza2JfZHJvcF9yZWFzb25cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3MTU2OnRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzE1Ny17XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTE4MzA9aW50IHRjcF92NF9kb19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xODc1LVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTg3NjpcXHRyZWFzb24gPSB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xODc3LVxcdGlmIChyZWFzb24pXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9MTAxPXRjcF90aW1ld2FpdF9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTEzMi1cXHRpZiAoUkVBRF9PTkNFKHR3LVxcdTAwM2V0d19zdWJzdGF0ZSkgPT0gVENQX0ZJTl9XQUlUMikge1xcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzoxMzM6XFx0XFx0LyogSnVzdCByZXBlYXQgYWxsIHRoZSBjaGVja3Mgb2YgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKCkgKi9cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtMTM0LVxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTY4Nz1zdHJ1Y3Qgc29jayAqdGNwX2NoZWNrX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtODE2LVxcdCAgIEJ1dCBnZW5lcmFsbHksIHdlIHNob3VsZCAoUkZDIGxpZXMhKSB0byBhY2NlcHQgQUNLXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjgxNzpcXHQgICBmcm9tIFNZTkFDSyBib3RoIGhlcmUgYW5kIGluIHRjcF9yY3Zfc3RhdGVfcHJvY2VzcygpLlxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo4MTg6XFx0ICAgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKCkgZG9lcyBub3QsIGhlbmNlLCB3ZSBkbyBub3QgdG9vLlxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy04MTktXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9OTk4PWVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9jaGlsZF9wcm9jZXNzKHN0cnVjdCBzb2NrICpwYXJlbnQsIHN0cnVjdCBzb2NrICpjaGlsZCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy0xMDA5LVxcdGlmICghc29ja19vd25lZF9ieV91c2VyKGNoaWxkKSkge1xcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzoxMDEwOlxcdFxcdHJlYXNvbiA9IHRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhjaGlsZCwgc2tiKTtcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtMTAxMS1cXHRcXHQvKiBXYWtldXAgcGFyZW50LCBzZW5kIFNJR0lPICovXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDEwMT1zdGF0aWMgdm9pZCB0Y3BfY29ubmVjdF9pbml0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTA5LVxcdC8qIFdlJ2xsIGZpeCB0aGlzIHVwIHdoZW4gd2UgZ2V0IGEgcmVzcG9uc2UgZnJvbSB0aGUgb3RoZXIgZW5kLlxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MTEwOlxcdCAqIFNlZSB0Y3BfaW5wdXQuYzp0Y3BfcmN2X3N0YXRlX3Byb2Nlc3MgY2FzZSBUQ1BfU1lOX1NFTlQuXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQxMTEtXFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjU0OjIyLjg5MDA3MDU1MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTg1OTg1NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoYXQ6XG5cbioqSW52ZXN0aWdhdGluZyBUQ1AgSW5wdXQgaW4gdGhlIEtlcm5lbCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIEknbGwgaW1tZWRpYXRlbHkganVtcCBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIHJlbGF0ZWQgdG8gbmV0d29ya2luZyB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciBzb3VyY2UgZmlsZSBpcyBicm91Z2h0IGludG8gdGhlIGJ1aWxkLiBUaGF0J2xsIGdpdmUgbWUgYSBoYW5kbGUgb24gdGhlIGNvbXBpbGUtdGltZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuXG5cbk5leHQsIHNpbmNlIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MsIEknbGwgc2hpZnQgZ2VhcnMgYW5kIG1vdmUgb3ZlciB0byB0aGUgYG5ldC9pcHY0L01ha2VmaWxlYC4gSSdsbCBwZXJmb3JtIGEgZ3JlcCBmb3IgYHRjcF9pbnB1dC5vYCB3aXRoaW4gdGhlIE1ha2VmaWxlLiBUaGlzIHNob3VsZCByZXZlYWwgaG93IHRoZSBvYmplY3QgZmlsZSBpcyBsaW5rZWQsIGFuZCBpZGVudGlmeSB3aGVyZSB0aGUgYnVpbGQgc3lzdGVtIGV4cGVjdHMgdG8gZmluZCB0aGUgc291cmNlIGNvZGUuIFRoYXQgc2hvdWxkIHByb3ZpZGUgYSBxdWljayBwaWN0dXJlIG9mIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aGluIHRoZSBsYXJnZXIgYG5ldC9pcHY0YCBidWlsZCBwcm9jZXNzLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTcwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NTQ6MjYuODc2MDU5MTY0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAwMzA1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfaW5wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtOS1cXHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlOjEwOlxcdCAgICAgdGNwLm8gdGNwX2lucHV0Lm8gdGNwX291dHB1dC5vIHRjcF90aW1lci5vIHRjcF9pcHY0Lm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlLTExLVxcdCAgICAgdGNwX21pbmlzb2Nrcy5vIHRjcF9jb25nLm8gdGNwX21ldHJpY3MubyB0Y3BfZmFzdG9wZW4ubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjU0OjI2LjkyMjA2ODQzMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzEwMDAyMjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gdGhlIElQdjQgSW5jbHVzaW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBuZXQvTWFrZWZpbGVgIG9yIGBuZXQvS2NvbmZpZ2AgZmlsZXMg4oCTIHByb2JhYmx5IHJlbGF0ZWQgdG8gY29uZmlndXJpbmcgdGhlIG5ldHdvcmsgc3RhY2suIEkgc2VlIHRoaXMgbGluZTogYG9iai0kKENPTkZJR19JTkVUKSArPSBpcHY0L2AuIE15IGltbWVkaWF0ZSBpbnRlcnByZXRhdGlvbiBpcyB0aGF0IGJhc2VkIG9uIHRoZSBgQ09ORklHX0lORVRgIG9wdGlvbiBiZWluZyBzZXQgKGxpa2VseSBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24pLCB0aGUgYGlwdjQvYCBkaXJlY3RvcnksIGFuZCB0aGVyZWZvcmUgdGhlIElQdjQgaW1wbGVtZW50YXRpb24sIGlzIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBidWlsZC4gSXQncyBhIGNvbmRpdGlvbmFsIGluY2x1c2lvbiwgd2hpY2ggaXMgc3RhbmRhcmQgcHJhY3RpY2UuIE5vdywgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIGluZGVlZCBob3cgaXQgd29ya3MuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIHNwZWNpZmljcywgYnV0IGJhc2VkIG9uIGV4cGVyaWVuY2UgdGhpcyBpcyB3aGF0IGl0IGxvb2tzIGxpa2UgaXMgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTk4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NTQ6MzMuMjMyMDczNzk2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODQzMTQ3MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2NFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19ORVRGSUxURVIpXFx0XFx0Kz0gbmV0ZmlsdGVyL1xcbm5ldC9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfSU5FVClcXHRcXHQrPSBpcHY0L1xcbm5ldC9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfVExTKVxcdFxcdCs9IHRscy9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NTQ6MzMuNTE2Mzk0MTM0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc3MTQ3MTgzNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbjpcblxuKipEaXZpbmcgaW50byB0aGUgSVB2NCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIElQdjQgbmV0d29ya2luZyBzdGFjayBpcyBzZXQgdXAsIGFuZCBJIHNlZSB0aGlzIGBJTkVUYCBtYWNyby4gUmlnaHQsIHRoYXQgbG9va3MgbGlrZSBpdCdzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBldmVyeXRoaW5nIHVuZGVyIGBuZXQvaXB2NC9gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQncyBkZWZpbmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMuIE15IG5leHQgc3RlcCBpcyBjbGVhcmx5IHRvIGdvIHN0cmFpZ2h0IGludG8gdGhlIEtjb25maWcgZmlsZXMuIEknbGwgY2hlY2sgZWl0aGVyIGBuZXQvaXB2NC9LY29uZmlnYCBkaXJlY3RseSwgb3IgaWYgaXQncyBhIG1vcmUgdG9wLWxldmVsIG9wdGlvbiwgbWF5YmUgYG5ldC9LY29uZmlnYCB3aWxsIGJlIHRoZSBwbGFjZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGV0YWlscyBvbiBgQ09ORklHX0lORVRgIGl0c2VsZiDigJMgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZSwgaGVscCB0ZXh0LCBldmVyeXRoaW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWluZyBlbmFibGVkIG9yIGRpc2FibGVkIGluIHRoZSBidWlsZC4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjgyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NTQ6NDEuMjMxMTE1ODU5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODYxNDgzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVFxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9OTk9Y29uZmlnIE5FVF9IQU5EU0hBS0VfS1VOSVRfVEVTVFxcbi0tXFxubmV0L0tjb25maWctMTEzLVxcbm5ldC9LY29uZmlnOjExNDpjb25maWcgSU5FVFxcbm5ldC9LY29uZmlnLTExNS1cXHRib29sIFxcXCJUQ1AvSVAgbmV0d29ya2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NTQ6NDEuMjk5NzM4NTQ2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk0ODA2NTAxMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKklORVQgRGVwZW5kZW5jeSBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gYElORVRgJ3MgZ290IGEgZGVwZW5kZW5jeSBvbiBgTkVUYC4gUmlnaHQsIG1ha2VzIHNlbnNlLiBOb3csIHdoZXJlJ3MgdGhhdCBkZWZpbmVkPyBJJ2xsIGJldCBpdCdzIGluIHRoZSBLY29uZmlnIGZpbGVzIHNvbWV3aGVyZS4gTGV0J3MgZGlnIGludG8gYG5ldC9LY29uZmlnYCDigJMgc2hvdWxkIGJlIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEknbSBnb2luZyB0byBqdW1wIHRvIHRoYXQgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDExNC4gSG9wZWZ1bGx5LCB0aGUgZGVwZW5kZW5jeSBkZWNsYXJhdGlvbiBpcyByaWdodCB0aGVyZSwgY2xlYXIgYXMgZGF5LiBMZXQncyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYyNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjU0OjUwLjc4MDM5MTQ4NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTA6XFx0XFxuIDExMTpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHJlZmVyXFxuIDExMjpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cXG4gMTEzOlxcdFxcbiAxMTQ6XFx0Y29uZmlnIElORVRcXG4gMTE1OlxcdFxcdGJvb2wgXFxcIlRDUC9JUCBuZXR3b3JraW5nXFxcIlxcbiAxMTY6XFx0XFx0aGVscFxcbiAxMTc6XFx0XFx0ICBUaGVzZSBhcmUgdGhlIHByb3RvY29scyB1c2VkIG9uIHRoZSBJbnRlcm5ldCBhbmQgb24gbW9zdCBsb2NhbFxcbiAxMTg6XFx0XFx0ICBFdGhlcm5ldHMuIEl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBzYXkgWSBoZXJlICh0aGlzIHdpbGwgZW5sYXJnZVxcbiAxMTk6XFx0XFx0ICB5b3VyIGtlcm5lbCBieSBhYm91dCA0MDAgS0IpLCBzaW5jZSBzb21lIHByb2dyYW1zIChlLmcuIHRoZSBYIHdpbmRvd1xcbiAxMjA6XFx0XFx0ICBzeXN0ZW0pIHVzZSBUQ1AvSVAgZXZlbiBpZiB5b3VyIG1hY2hpbmUgaXMgbm90IGNvbm5lY3RlZCB0byBhbnlcXG4gMTIxOlxcdFxcdCAgb3RoZXIgY29tcHV0ZXIuIFlvdSB3aWxsIGdldCB0aGUgc28tY2FsbGVkIGxvb3BiYWNrIGRldmljZSB3aGljaFxcbiAxMjI6XFx0XFx0ICBhbGxvd3MgeW91IHRvIHBpbmcgeW91cnNlbGYgKGdyZWF0IGZ1biwgdGhhdCEpLlxcbiAxMjM6XFx0XFxuIDEyNDpcXHRcXHQgIEZvciBhbiBleGNlbGxlbnQgaW50cm9kdWN0aW9uIHRvIExpbnV4IG5ldHdvcmtpbmcsIHBsZWFzZSByZWFkIHRoZVxcbiAxMjU6XFx0XFx0ICBMaW51eCBOZXR3b3JraW5nIEhPV1RPLCBhdmFpbGFibGUgZnJvbVxcbiAxMjY6XFx0XFx0ICBcXHUwMDNjaHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG9cXHUwMDNlLlxcbiAxMjc6XFx0XFxuIDEyODpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlIGFuZCBhbHNvIHRvIFxcXCIvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIiBhbmRcXG4gMTI5OlxcdFxcdCAgXFxcIlN5c2N0bCBzdXBwb3J0XFxcIiBiZWxvdywgeW91IGNhbiBjaGFuZ2UgdmFyaW91cyBhc3BlY3RzIG9mIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo1NDo1MC43ODA0Njk3MzZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE1NjY3Nzc2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgVENQIFNlcXVlbmNlIE51bWJlciBWYWxpZGF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIHJlbGV2YW50IHRvIHRoaXMgY2hhbmdlIGluIFRDUCBzZXF1ZW5jZSBudW1iZXIgdmFsaWRhdGlvbiB3aXRoaW4gYG5ldC9pcHY0L3RjcF9pbnB1dC5jYC4gSSdtIHNlZWluZyBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYCBhbmQgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgLiBBcmUgdGhlc2UgdGhlIGtleSBwbGF5ZXJzPyBMZXQncyBjb25maXJtOiBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgaXMgYHZvaWQgdGNwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpYCwgYW5kIGB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3NgIGlzIGBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAuIEdvb2QsIHRoZXkncmUgbm90IHN0YXRpYy5cblxuTm93LCBhIGtleSBjb25zaWRlcmF0aW9uOiBhcmUgdGhleSAqaG90LXBhdGgqIGZ1bmN0aW9ucz8gVGhlIHN5emthbGxlciBndWlkYW5jZSBpcyBjbGVhcjogYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCB0ZXN0IGRpc3RyaWJ1dGlvbiBza2V3LiAgSXQgcHJlZmVycyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWFrZXMgc2Vuc2UuIFRoaXMgbWVhbnMgSSB3YW50IHRvIGF2b2lkIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgZnJlcXVlbnRseSBpbiBub3JtYWwgVENQIG9wZXJhdGlvbi4gSWYgYHRjcF9zZXF1ZW5jZWAgaXMgYW4gaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbiBkaXJlY3RseSBjYWxsZWQgZm9yIGV2ZXJ5IGluY29taW5nIFRDUCBwYWNrZXQgaW4gZXN0YWJsaXNoZWQvc3RhdGUgcHJvY2Vzc2luZywgc2hvdWxkIEkgZXZlbiBib3RoZXIgd2l0aCBGb2N1c1N5bWJvbHM/IFRoaXMgaXMgdGhlIGNvcmUgaXNzdWUhXG5cbklmIGB0Y3Bfc2VxdWVuY2VgIGlzIGEgc3RhdGljIGhlbHBlciwgaXQncyB2ZXJ5IGxpa2VseSBpbmxpbmVkLiBBbmQgaWYgYWxsIGZ1bmN0aW9ucyBjYWxsaW5nIGl0IGFyZSBnZW5lcmljIGhvdC1wYXRocyAoYHRjcF9yY3ZfZXN0YWJsaXNoZWRgLCBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYCwgYHRjcF92YWxpZGF0ZV9pbmNvbWluZ2AsIGB0Y3BfdjRfcmN2YCksIHdoYXQncyB0aGUgYmVzdCBvcHRpb24gaGVyZT8gU3l6a2FsbGVyIHdhbnRzIHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGF2b2lkIHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG5cbk9rYXksIGxldCdzIGNvbmZpcm0gdGhlIGlubGluaW5nOiBgdGNwX3NlcXVlbmNlYCBpcyBgc3RhdGljIGlubGluZSAvIHN0YXRpY2AuIEl0IGlzIHN0YXRpYyBhbmQgb25seSBjYWxsZWQgZnJvbSBgdGNwX3ZhbGlkYXRlX2luY29taW5nYC4gVGhhdCdzIHdoZXJlIHRoZSByZWxldmFudCBsb2dpYyBpcywgYnV0IGl0J3MgaW50ZXJuYWwuIElzIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCwgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AsIG9yIGB0Y3Bfc2VxdWVuY2VgIHdoYXQgSSBzaG91bGQgaW5jbHVkZT9cblxuSWYgYHRjcF9zZXF1ZW5jZWAgaXMgc3RhdGljIGFuZCBpbmxpbmVkLCBzeXprYWxsZXIgbWlnaHQgbm90IGV2ZW4gc2VlIGEgZGlzdGluY3Qgc3ltYm9sIGZvciBpdC4gYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AgaGFuZGxlcyBwYWNrZXRzIGluIG5vbi1FU1RBQkxJU0hFRCBzdGF0ZXMsIHdoaWNoIGlzIGRpZmZlcmVudCBmcm9tIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCwgd2hpY2ggaGFuZGxlcyBFU1RBQkxJU0hFRCBzdGF0ZS4gT2theSwgc28gbm93IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyOiB3aGF0IGRvZXMgdGhlIHBhdGNoICpkbyo/XG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0J3MgZHJvcHBpbmcgb2xkIHNlcXVlbmNlIHBhY2tldHMgd2hlcmUgYGVuZF9zZXEgPT0gdHAtXHUwMDNlcmN2X3d1cGAgKG1lYW5pbmcgdGhlIHBhY2tldCdzIGVuZCBzZXF1ZW5jZSBpcyBhdCBvciBiZWZvcmUgdGhlIHJlY2VpdmUgd2luZG93IHVwcGVyIGJvdW5kKSB3aXRoIG5vbi1lbXB0eSBwYXlsb2FkLCBidXQgd2l0aG91dCBTWU4gb3IgRklOIGZsYWdzLiBUaGlzIGlzIFRDUCBzZXF1ZW5jZSBudW1iZXIgdmFsaWRhdGlvbi5cblxuTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVxdWlyZWQuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19JTkVUYCBpcyBzdWZmaWNpZW50LlxuXG5Ob3csIGxldCdzIGFzc2VtYmxlIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuIGBXb3J0aEZ1enppbmdgIGlzIG9idmlvdXNseSB0cnVlLiBUaGUgYFJlYXNvbmluZ2Agd2lsbCBiZSBhIGNsZWFyIGV4cGxhbmF0aW9uOiBUaGUgcGF0Y2ggbW9kaWZpZXMgVENQIHNlcXVlbmNlIG51bWJlciB2YWxpZGF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW4gYHRjcF9zZXF1ZW5jZSgpYCAoZXZlbiBpZiBpdCdzIGlubGluZWQpLCB3aXRoaW4gYG5ldC9pcHY0L3RjcF9pbnB1dC5jYC4gVGhlIHBhdGNoIGRyb3BzIG9sZCBwYWNrZXRzIHdoZW4gYGVuZF9zZXEgPT0gdHAtXHUwMDNlcmN2X3d1cGAgd2l0aCBub24tZW1wdHkgcGF5bG9hZHMgYW5kIHdpdGhvdXQgU1lOL0ZJTiBmbGFncy4gYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmUgYFtcIklORVRcIl1gLiBCdXQgd2hhdCBhYm91dCBgRm9jdXNTeW1ib2xzYD9cblxuTGV0J3MgcmV2aXNpdCB0aGUgc3l6a2FsbGVyIGd1aWRhbmNlOiBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gSXMgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGEgaG90LXBhdGggZnVuY3Rpb24/IFllcywgaXQgaXMuIEJ1dCBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYCBkZWFscyB3aXRoIHN0YXRlIHRyYW5zaXRpb25zLiAgU28sIHNob3VsZCBpdCBiZSBgW1widGNwX3Jjdl9zdGF0ZV9wcm9jZXNzXCJdYCwgYFtdYCwgb3Igc29tZXRoaW5nIGVsc2U/XG5cbmB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3NgIGlzIGV4cG9ydGVkL25vbi1zdGF0aWMgYW5kIGRlYWxzIHdpdGggc3RhdGUgdHJhbnNpdGlvbnMsIHdoaWNoIGFyZSBpbnRlcmVzdGluZyB0YXJnZXRzLiBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgaXMgdGhlIHZlcnkgZGVmaW5pdGlvbiBvZiBhIGdlbmVyaWMgaG90LXBhdGggZm9yIFRDUC4gIEZvY3VzU3ltYm9scyBpcyB1c2VkIHRvIHRhcmdldCBmdXp6aW5nIGF0IGEgc3BlY2lmaWMgZnVuY3Rpb24uICBTbyBpZiB3ZSdyZSB3b3JyaWVkIGFib3V0IGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBiZWluZyB0b28gZ2VuZXJhbCwgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AgaXMgYSBkZWNlbnQgb3B0aW9uLCBvdGhlcndpc2Ugd2UgY2FuIGxlYXZlIGl0IGVtcHR5LiBMZXQncyBtYWtlIHN1cmUgYHRjcF9zZXF1ZW5jZWAgaXMgYW4gaW50ZXJuYWwgaGVscGVyLiBZZXMsIGl0IGlzIHN0YXRpYy5cblxuTGFzdGx5LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBvdGhlciBmaWxlIG1vZGlmaWNhdGlvbnMgaW4gdGhlIGNvbW1pdC4gSXQncyBvbmx5IGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIE9rYXksIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgdGhpbmsgYFtcInRjcF9yY3Zfc3RhdGVfcHJvY2Vzc1wiXWAgaXMgdGhlIGJlc3QgY2hvaWNlIGZvciBGb2N1c1N5bWJvbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNjcsIk91dHB1dFRva2VucyI6MTA2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjU1OjAyLjM0NzI0OTg3N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0ODkyNTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3Jjdl9zdGF0ZV9wcm9jZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgVENQIHNlcXVlbmNlIHZhbGlkYXRpb24gbG9naWMgaW4gdGNwX3NlcXVlbmNlKCkgd2l0aGluIG5ldC9pcHY0L3RjcF9pbnB1dC5jIHRvIGRyb3AgcGFja2V0cyB3aXRoIG9sZCBzZXF1ZW5jZSBudW1iZXJzIHdoZW4gZW5kX3NlcSBlcXVhbHMgcmN2X3d1cCBmb3Igbm9uLWVtcHR5IHBhY2tldHMgd2l0aG91dCBTWU4vRklOIGZsYWdzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYWZmZWN0aW5nIFRDUCBwYWNrZXQgcHJvY2Vzc2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3Jjdl9zdGF0ZV9wcm9jZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgVENQIHNlcXVlbmNlIHZhbGlkYXRpb24gbG9naWMgaW4gdGNwX3NlcXVlbmNlKCkgd2l0aGluIG5ldC9pcHY0L3RjcF9pbnB1dC5jIHRvIGRyb3AgcGFja2V0cyB3aXRoIG9sZCBzZXF1ZW5jZSBudW1iZXJzIHdoZW4gZW5kX3NlcSBlcXVhbHMgcmN2X3d1cCBmb3Igbm9uLWVtcHR5IHBhY2tldHMgd2l0aG91dCBTWU4vRklOIGZsYWdzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYWZmZWN0aW5nIFRDUCBwYWNrZXQgcHJvY2Vzc2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NTU6MDIuNDIyMTQ5MTM0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjkyNDQ5NjEyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjU1OjAyLjQyMjU4NjU1NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM2OTI0MDU0NDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIGlucHV0IHNlcXVlbmNlIHZhbGlkYXRpb24gaW4gYHRjcF9zZXF1ZW5jZSgpYCBieSBhZGRpbmcgYSBjb25kaXRpb24gdG8gZHJvcCBpbmNvbWluZyBwYWNrZXRzIHdob3NlIGVuZCBzZXF1ZW5jZSBlcXVhbHMgYHRwLVxcdTAwM2VyY3Zfd3VwYCAod2hlbiBjYXJyeWluZyBwYXlsb2FkIHdpdGhvdXQgU1lOL0ZJTiBmbGFncykgYXMgYFNLQl9EUk9QX1JFQVNPTl9UQ1BfT0xEX1NFUVVFTkNFYC5cXG5cXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWRqdXN0cyBUQ1AgcHJvdG9jb2wgc2VxdWVuY2UgbnVtYmVyIHZhbGlkYXRpb24gbG9naWMgYW5kIHJldHVybiBjb2Rlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGNvcHlpbmcgb2Yga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkuIFRoZXJlZm9yZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM3Y2Y1Yjk1ZjBiMTQ1ZDgxMzhmOTkxMDJjOWYyNmM1ODkyZDk2YjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxMzo1MzoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcbmluZGV4IGRhZmY5M2Q1MTM0MjguLjE5OTEyODVhYTAzZTMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcbkBAIC00ODQ0LDcgKzQ4NDQsMTEgQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9zZXF1ZW5jZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4gXHRjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbiBcdHUzMiBzZXFfbGltaXQ7XG4gXG4tXHRpZiAoYmVmb3JlKGVuZF9zZXEsIHRwLVx1MDAzZXJjdl93dXApKVxuK1x0aWYgKGJlZm9yZShlbmRfc2VxLCB0cC1cdTAwM2VyY3Zfd3VwKSB8fFxuK1x0ICAgIChlbmRfc2VxID09IHRwLVx1MDAzZXJjdl93dXAgXHUwMDI2XHUwMDI2XG4rXHQgICAgIHNlcSAhPSBlbmRfc2VxIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAhdGgtXHUwMDNlc3luIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAhdGgtXHUwMDNlZmluKSlcbiBcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9UQ1BfT0xEX1NFUVVFTkNFO1xuIFxuIFx0c2VxX2xpbWl0ID0gdHAtXHUwMDNlcmN2X254dCArIHRjcF9tYXhfcmVjZWl2ZV93aW5kb3codHApO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NTU6MDIuNDIyNTg3NDk0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2NjczMjI0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1AgU2VxdWVuY2UgQ2hlY2sqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSdtIGxvb2tpbmcgYXQgYSBkaWZmIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2lucHV0LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB0Y3Bfc2VxdWVuY2VgIGZ1bmN0aW9uLiBUaGUgY29kZSdzIHB1cnBvc2UgaXMsIG9mIGNvdXJzZSwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gaW5jb21pbmcgVENQIHNlZ21lbnQncyBzZXF1ZW5jZSBudW1iZXIgZmFsbHMgd2l0aGluIGFuIGFjY2VwdGFibGUgd2luZG93LCB0aGVyZWJ5IHZhbGlkYXRpbmcgdGhlIHBhY2tldCdzIG9yZGVyIGFuZCBwcmV2ZW50aW5nIHJlcGxheSBhdHRhY2tzLCBldGMuXG5cblRoZSBjcml0aWNhbCBjaGFuZ2UgaXMgaW4gdGhlIGBpZmAgY29uZGl0aW9uLiBUaGUgb3JpZ2luYWwgY29uZGl0aW9uIHdhcyBzdHJhaWdodGZvcndhcmQ6IGBpZiAoYmVmb3JlKGVuZF9zZXEsIHRwLVx1MDAzZXJjdl93dXApKWAuIFRoaXMgd2FzIGEgYmFzaWMgY2hlY2sgdG8gc2VlIGlmIHRoZSBlbmQgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBjdXJyZW50IHNlZ21lbnQgd2FzICpiZWZvcmUqIHRoZSByZWNlaXZlcidzIHdpbmRvdyB1cHBlciBib3VuZCAoYHRwLVx1MDAzZXJjdl93dXBgKS4gSWYgaXQgd2FzLCB0aGUgcGFja2V0IHdhcyBjb25zaWRlcmVkIG9sZC5cblxuVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtb3JlIG51YW5jZWQgY2hlY2ssIGVzc2VudGlhbGx5IGFkZGluZyBhbiBgfHxgIHdpdGggYSBuZXcgY29uZGl0aW9uLiBOb3csIGl0J3MgY2hlY2tpbmcgd2hldGhlciBgYmVmb3JlKGVuZF9zZXEsIHRwLVx1MDAzZXJjdl93dXApIHx8IChlbmRfc2VxID09IHRwLVx1MDAzZXJjdl93dXAgXHUwMDI2XHUwMDI2IHNlcSAhPSBlbmRfc2VxIFx1MDAyNlx1MDAyNiAhdGgtXHUwMDNlc3luIFx1MDAyNlx1MDAyNiAhdGgtXHUwMDNlZmluKWAuIExldCdzIGJyZWFrIGRvd24gdGhpcyBzZWNvbmQgcGFydC4gSXQgZXNzZW50aWFsbHkgc2F5czogaWYgdGhlIGBlbmRfc2VxYCAqZXF1YWxzKiBgdHAtXHUwMDNlcmN2X3d1cGAsIGFuZCBpZiB0aGUgc2VxdWVuY2UgbnVtYmVyIGlzICpub3QqIGVxdWFsIHRvIHRoZSBlbmQgc2VxdWVuY2UgbnVtYmVyLCBhbmQgaXQncyAqbm90KiBhIFNZTiBvciBGSU4gcGFja2V0LCB0aGVuIGRyb3AgdGhlIHBhY2tldCBhcyB3ZWxsLlxuXG5UaGlzIHNlZW1zIHRvIGJlIHRhcmdldGluZyBhIHNwZWNpZmljIGVkZ2UgY2FzZSB3aGVyZSBhIHNlZ21lbnQgd2l0aCBhIHNlcXVlbmNlIG51bWJlciB0aGF0IGFwcGVhcnMgdG8gYmUgb24gdGhlIHdpbmRvdyBib3VuZGFyeSwgYnV0IGlzbid0IGFjdHVhbGx5IGEgc2VnbWVudCB3ZSBhcmUgaW50ZXJlc3RlZCBpbi4gSXQncyBlc3NlbnRpYWxseSBmaWx0ZXJpbmcgb3V0IHNlZ21lbnRzIHdpdGggYSBzZXF1ZW5jZSBudW1iZXIgdGhhdCBpcyBvbiB0aGUgdXBwZXIgYm91bmRhcnkgb2YgdGhlIHdpbmRvdywgYnV0IHdlIGFyZSAqbm90KiBwcm9jZXNzaW5nIGEgU1lOIG9yIEZJTiBwYWNrZXQgZm9yIHRoZSBjb25uZWN0aW9uLiBHaXZlbiB0aGF0IHRoaXMgaXMgaW4gVENQLCB0aGlzIGxpa2VseSBpcyBhIHNwZWNpZmljIGNhc2Ugb2YgYW4gb3V0LW9mLW9yZGVyIHNlZ21lbnQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHdpbmRvdyBzbGlkaW5nIGZvcndhcmQuIEknZCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgcmVhc29uaW5nIGhlcmUg4oCTIG1heWJlIGEgcmVvcmRlcmluZyBpc3N1ZSBhZnRlciBhIHdpbmRvdyB1cGRhdGUsIGEgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHksIG9yIHNvbWUgc3VidGxlIGludGVyYWN0aW9uIHdpdGggb3RoZXIgVENQIG1lY2hhbmlzbXMgbGlrZSB3aW5kb3cgc2NhbGluZyBvciBTQUNLLiBJJ2QgbmVlZCB0byBzZWUgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBwb3NzaWJseSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgZm9yIHRoaXMgY2hhbmdlIGNvbXBsZXRlbHkuIFRoZSBsb2dpYyBzZWVtcyByZWFzb25hYmxlIGVub3VnaCBvbiB0aGUgc3VyZmFjZSwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo1NTowNy4wODk5MTc0ODZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ4MzUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ4MzU6XFx0ICogb2YgUkNWLk5YVC4gUGVlciBzdGlsbCBkaWQgbm90IGFkdmFuY2UgaGlzIFNORC5VTkEgd2hlbiB3ZVxcbjQ4MzY6XFx0ICogZGVsYXllZCBBQ0ssIHNvIHRoYXQgaGlzU05ELlVOQVxcdTAwM2M9b3VyUkNWLldVUC5cXG40ODM3OlxcdCAqIChib3Jyb3dlZCBmcm9tIGZyZWVic2QpXFxuNDgzODpcXHQgKi9cXG40ODM5OlxcdFxcbjQ4NDA6XFx0c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9zZXF1ZW5jZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuNDg0MTpcXHRcXHRcXHRcXHRcXHRcXHQgdTMyIHNlcSwgdTMyIGVuZF9zZXEsXFxuNDg0MjpcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHRjcGhkciAqdGgpXFxuNDg0MzpcXHR7XFxuNDg0NDpcXHRcXHRjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG40ODQ1OlxcdFxcdHUzMiBzZXFfbGltaXQ7XFxuNDg0NjpcXHRcXG40ODQ3OlxcdFxcdGlmIChiZWZvcmUoZW5kX3NlcSwgdHAtXFx1MDAzZXJjdl93dXApIHx8XFxuNDg0ODpcXHRcXHQgICAgKGVuZF9zZXEgPT0gdHAtXFx1MDAzZXJjdl93dXAgXFx1MDAyNlxcdTAwMjZcXG40ODQ5OlxcdFxcdCAgICAgc2VxICE9IGVuZF9zZXEgXFx1MDAyNlxcdTAwMjZcXG40ODUwOlxcdFxcdCAgICAgIXRoLVxcdTAwM2VzeW4gXFx1MDAyNlxcdTAwMjZcXG40ODUxOlxcdFxcdCAgICAgIXRoLVxcdTAwM2VmaW4pKVxcbjQ4NTI6XFx0XFx0XFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9UQ1BfT0xEX1NFUVVFTkNFO1xcbjQ4NTM6XFx0XFxuNDg1NDpcXHRcXHRzZXFfbGltaXQgPSB0cC1cXHUwMDNlcmN2X254dCArIHRjcF9tYXhfcmVjZWl2ZV93aW5kb3codHApO1xcbjQ4NTU6XFx0XFx0aWYgKHVubGlrZWx5KGFmdGVyKGVuZF9zZXEsIHNlcV9saW1pdCkpKSB7XFxuNDg1NjpcXHRcXHRcXHQvKiBTb21lIHN0YWNrcyBhcmUga25vd24gdG8gaGFuZGxlIEZJTiBpbmNvcnJlY3RseTsgYWxsb3cgdGhlXFxuNDg1NzpcXHRcXHRcXHQgKiBGSU4gdG8gZXh0ZW5kIGJleW9uZCB0aGUgd2luZG93IGFuZCBjaGVjayBpdCBpbiBkZXRhaWwgbGF0ZXIuXFxuNDg1ODpcXHRcXHRcXHQgKi9cXG40ODU5OlxcdFxcdFxcdGlmICghYWZ0ZXIoZW5kX3NlcSAtIHRoLVxcdTAwM2VmaW4sIHNlcV9saW1pdCkpXFxuNDg2MDpcXHRcXHRcXHRcXHRyZXR1cm4gU0tCX05PVF9EUk9QUEVEX1lFVDtcXG40ODYxOlxcdFxcbjQ4NjI6XFx0XFx0XFx0aWYgKGFmdGVyKHNlcSwgc2VxX2xpbWl0KSlcXG40ODYzOlxcdFxcdFxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX0lOVkFMSURfU0VRVUVOQ0U7XFxuNDg2NDpcXHRcXG40ODY1OlxcdFxcdFxcdC8qIE9ubHkgYWNjZXB0IHRoaXMgcGFja2V0IGlmIHJlY2VpdmUgcXVldWUgaXMgZW1wdHkuICovXFxuNDg2NjpcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKVxcbjQ4Njc6XFx0XFx0XFx0XFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9UQ1BfSU5WQUxJRF9FTkRfU0VRVUVOQ0U7XFxuNDg2ODpcXHRcXHR9XFxuNDg2OTpcXHRcXG40ODcwOlxcdFxcdHJldHVybiBTS0JfTk9UX0RST1BQRURfWUVUO1xcbjQ4NzE6XFx0fVxcbjQ4NzI6XFx0XFxuNDg3MzpcXHRcXG40ODc0OlxcdHZvaWQgdGNwX2RvbmVfd2l0aF9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXFxuNDg3NTpcXHR7XFxuNDg3NjpcXHRcXHQvKiBUaGlzIGJhcnJpZXIgaXMgY291cGxlZCB3aXRoIHNtcF9ybWIoKSBpbiB0Y3BfcG9sbCgpICovXFxuNDg3NzpcXHRcXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza19lcnIsIGVycik7XFxuNDg3ODpcXHRcXHRzbXBfd21iKCk7XFxuNDg3OTpcXHRcXG40ODgwOlxcdFxcdHRjcF93cml0ZV9xdWV1ZV9wdXJnZShzayk7XFxuNDg4MTpcXHRcXHR0Y3BfZG9uZShzayk7XFxuNDg4MjpcXHRcXG40ODgzOlxcdFxcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxcbjQ4ODQ6XFx0XFx0XFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NTU6MDcuMDkwMzU5ODc2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2MTA0NzU0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgcHJvbXB0LCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGEgaGlnaCBsZXZlbCBvZiBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gYHRjcF9zZXF1ZW5jZWAqKlxuXG5Pa2F5LCBzbyB0aGUgcHJvbXB0IGlzIGFza2luZyBtZSB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBgdGNwX3NlcXVlbmNlYCBhbmQsIGNyaXRpY2FsbHksIGhvdyBhbmQgd2hlcmUgaXQncyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoZSBlbXBoYXNpcyBvbiBcImNhbGxlcnNcIiBzdWdnZXN0cyBhIHByaW1hcnkgZ29hbCBvZiB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cgYW5kIGRlcGVuZGVuY2llcyBzdXJyb3VuZGluZyB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGB0Y3Bfc2VxdWVuY2VgIGlzIGRlc2lnbmVkIHRvICpkbyosIHdoYXQgaXRzIGlucHV0cyBhcmUsIHdoYXQgaXQgcHJvZHVjZXMgYXMgb3V0cHV0LCBhbmQgaW1wb3J0YW50bHksIHdoaWNoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gcmVseSBvbiBpdHMgcmVzdWx0cy4gVGhpcyBzdWdnZXN0cyBhIG5lZWQgdG8gZWl0aGVyIHRyYWNlIGl0cyBjb2RlLCBleGFtaW5lIGl0cyBkb2N1bWVudGF0aW9uIChpZiBhbnkpLCBvciB1c2UgbXkgdG9vbHMgdG8gZmluZCBhbGwgY2FsbHMgYW5kIHBvc3NpYmx5IHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmdW5jdGlvbiB0byBzZWUgaG93IGl0IHdvcmtzLiBBIGtleSBzdHJhdGVneSBoZXJlIHdpbGwgYmUgdG8gc3RhcnQgd2l0aCB0aGUgZnVuY3Rpb24gaXRzZWxmLCBhbmQgdGhlbiB1bmRlcnN0YW5kIGl0cyBcImNsaWVudHMuXCIgVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHR1YWwga25vd2xlZGdlIEkgbmVlZCB0byBmb3JtIGEgdXNlZnVsIGFuYWx5c2lzLiBJJ20gYXNzdW1pbmcsIG9mIGNvdXJzZSwgdGhhdCBcInRjcFwiIHJlZmVycyB0byB0aGUgVHJhbnNtaXNzaW9uIENvbnRyb2wgUHJvdG9jb2wsIGFuZCBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBhcyBjb250ZXh0IGlmIHRoZSBjb2RlIGRvZXNuJ3QgZXhwbGljaXRseSByZWZlciB0byB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODEyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo1NToxMy43MDA4Mzg1OThaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMDU4Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9zZXF1ZW5jZVxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuYz00NzkxPXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfZGlzb3JkZXJlZF9hY2tfY2hlY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDgzOS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0ODQwOnN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3Bfc2VxdWVuY2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4NDEtXFx0XFx0XFx0XFx0XFx0IHUzMiBzZXEsIHUzMiBlbmRfc2VxLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NjMyNj1zdGF0aWMgYm9vbCB0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM2My1cXHQvKiBTdGVwIDE6IGNoZWNrIHNlcXVlbmNlIG51bWJlciAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjYzNjQ6XFx0cmVhc29uID0gdGNwX3NlcXVlbmNlKHNrLCBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXNlcSxcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02MzY1LVxcdFxcdFxcdCAgICAgIFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlZW5kX3NlcSwgdGgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo1NToxMy43NzE5MDU0MTVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ0OTQ5NjU3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBhbmQgU2VxdWVuY2UgTnVtYmVycyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gY3VyaW91cyBhYm91dCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBhbmQgdGhlIGB0Y3Bfc2VxdWVuY2VgIHZhcmlhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBoYW5kbGluZyBzZXF1ZW5jZSBudW1iZXJzIGZyb20gaW5jb21pbmcgVENQIHNlZ21lbnRzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHZhbGlkYXRpb24gcHJvY2Vzcy4gV2hhdCBhcmUgdGhlIGtleSBjaGVja3M/IFdoZXJlIGFyZSB0aGUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgb3IgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9ucywgcHJlc2VudD8gSSBzdXNwZWN0IGl0J3MgbG9va2luZyBhdCB0aGUgc2VxdWVuY2UgbnVtYmVyIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgZXN0YWJsaXNoZWQgVENQIGNvbm5lY3Rpb24gc3RhdGUsIGxpa2UgdGhlIGV4cGVjdGVkIHNlcXVlbmNlIG51bWJlciwgd2luZG93IHNpemUsIGFuZCBhY2tub3dsZWRnbWVudCBudW1iZXJzLiBJIGFsc28gd29uZGVyIGhvdyBpdCBoYW5kbGVzIHJldHJhbnNtaXNzaW9ucywgb3V0LW9mLW9yZGVyIHNlZ21lbnRzLCBhbmQgU1lOL0FDSyBoYW5kc2hha2VzLiBJJ20gYW50aWNpcGF0aW5nIHRoYXQgaXQgd2lsbCBlbmZvcmNlIFRDUCdzIHJlbGlhYmlsaXR5IG1lY2hhbmlzbXMsIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGFuZCBwcmV2ZW50aW5nIHNlcXVlbmNlIG51bWJlciB3cmFwcGluZyBpc3N1ZXMuIEkgaG9wZSB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB2YWxpZGF0aW9ucyB3aWxsIGluZm9ybSBob3cgdGhlIHN0YWNrIHByb2Nlc3NlcyBUQ1AgcGFja2V0cy4gSSBhbHNvIHdhbnQgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCBlZGdlIGNhc2VzIHJlbGF0ZWQgdG8gcGF0aG9sb2dpY2FsIHNlcXVlbmNlIG51bWJlcnMgb3IgY3JhZnRlZCBwYWNrZXRzIHRoYXQgY291bGQgYnlwYXNzIHRoZXNlIHZhbGlkYXRpb25zLiBMZXQncyBzZWUgaG93IGl0J3MgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzo1NToxOC4yMjE0MDM4NDdaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzNTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYzNTU6XFx0XFx0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9QQVdTRVNUQUJSRUpFQ1RFRCk7XFxuNjM1NjpcXHRcXHRpZiAoIXRjcF9vb3dfcmF0ZV9saW1pdGVkKHNvY2tfbmV0KHNrKSwgc2tiLFxcbjYzNTc6XFx0XFx0XFx0XFx0XFx0ICBMSU5VWF9NSUJfVENQQUNLU0tJUFBFRFBBV1MsXFxuNjM1ODpcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ0cC1cXHUwMDNlbGFzdF9vb3dfYWNrX3RpbWUpKVxcbjYzNTk6XFx0XFx0XFx0dGNwX3NlbmRfZHVwYWNrKHNrLCBza2IpO1xcbjYzNjA6XFx0XFx0Z290byBkaXNjYXJkO1xcbjYzNjE6XFx0XFxuNjM2MjpcXHRzdGVwMTpcXG42MzYzOlxcdFxcdC8qIFN0ZXAgMTogY2hlY2sgc2VxdWVuY2UgbnVtYmVyICovXFxuNjM2NDpcXHRcXHRyZWFzb24gPSB0Y3Bfc2VxdWVuY2Uoc2ssIFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlc2VxLFxcbjYzNjU6XFx0XFx0XFx0XFx0ICAgICAgVENQX1NLQl9DQihza2IpLVxcdTAwM2VlbmRfc2VxLCB0aCk7XFxuNjM2NjpcXHRcXHRpZiAocmVhc29uKSB7XFxuNjM2NzpcXHRcXHRcXHQvKiBSRkM3OTMsIHBhZ2UgMzc6IFxcXCJJbiBhbGwgc3RhdGVzIGV4Y2VwdCBTWU4tU0VOVCwgYWxsIHJlc2V0XFxuNjM2ODpcXHRcXHRcXHQgKiAoUlNUKSBzZWdtZW50cyBhcmUgdmFsaWRhdGVkIGJ5IGNoZWNraW5nIHRoZWlyIFNFUS1maWVsZHMuXFxcIlxcbjYzNjk6XFx0XFx0XFx0ICogQW5kIHBhZ2UgNjk6IFxcXCJJZiBhbiBpbmNvbWluZyBzZWdtZW50IGlzIG5vdCBhY2NlcHRhYmxlLFxcbjYzNzA6XFx0XFx0XFx0ICogYW4gYWNrbm93bGVkZ21lbnQgc2hvdWxkIGJlIHNlbnQgaW4gcmVwbHkgKHVubGVzcyB0aGUgUlNUXFxuNjM3MTpcXHRcXHRcXHQgKiBiaXQgaXMgc2V0LCBpZiBzbyBkcm9wIHRoZSBzZWdtZW50IGFuZCByZXR1cm4pXFxcIi5cXG42MzcyOlxcdFxcdFxcdCAqL1xcbjYzNzM6XFx0XFx0XFx0aWYgKCF0aC1cXHUwMDNlcnN0KSB7XFxuNjM3NDpcXHRcXHRcXHRcXHRpZiAodGgtXFx1MDAzZXN5bilcXG42Mzc1OlxcdFxcdFxcdFxcdFxcdGdvdG8gc3luX2NoYWxsZW5nZTtcXG42Mzc2OlxcdFxcbjYzNzc6XFx0XFx0XFx0XFx0aWYgKHJlYXNvbiA9PSBTS0JfRFJPUF9SRUFTT05fVENQX0lOVkFMSURfU0VRVUVOQ0UgfHxcXG42Mzc4OlxcdFxcdFxcdFxcdCAgICByZWFzb24gPT0gU0tCX0RST1BfUkVBU09OX1RDUF9JTlZBTElEX0VORF9TRVFVRU5DRSlcXG42Mzc5OlxcdFxcdFxcdFxcdFxcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLFxcbjYzODA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgTElOVVhfTUlCX0JFWU9ORF9XSU5ET1cpO1xcbjYzODE6XFx0XFx0XFx0XFx0aWYgKCF0Y3Bfb293X3JhdGVfbGltaXRlZChzb2NrX25ldChzayksIHNrYixcXG42MzgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgTElOVVhfTUlCX1RDUEFDS1NLSVBQRURTRVEsXFxuNjM4MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ0cC1cXHUwMDNlbGFzdF9vb3dfYWNrX3RpbWUpKVxcbjYzODQ6XFx0XFx0XFx0XFx0XFx0dGNwX3NlbmRfZHVwYWNrKHNrLCBza2IpO1xcbjYzODU6XFx0XFx0XFx0fSBlbHNlIGlmICh0Y3BfcmVzZXRfY2hlY2soc2ssIHNrYikpIHtcXG42Mzg2OlxcdFxcdFxcdFxcdGdvdG8gcmVzZXQ7XFxuNjM4NzpcXHRcXHRcXHR9XFxuNjM4ODpcXHRcXHRcXHRnb3RvIGRpc2NhcmQ7XFxuNjM4OTpcXHRcXHR9XFxuNjM5MDpcXHRcXG42MzkxOlxcdFxcdC8qIFN0ZXAgMjogY2hlY2sgUlNUIGJpdCAqL1xcbjYzOTI6XFx0XFx0aWYgKHRoLVxcdTAwM2Vyc3QpIHtcXG42MzkzOlxcdFxcdFxcdC8qIFJGQyA1OTYxIDMuMiAoZXh0ZW5kIHRvIG1hdGNoIGFnYWluc3QgKFJDVi5OWFQgLSAxKSBhZnRlciBhXFxuNjM5NDpcXHRcXHRcXHQgKiBGSU4gYW5kIFNBQ0sgdG9vIGlmIGF2YWlsYWJsZSk6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjU1OjE4LjIyMTY5NDE0N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTEyNDkyMzYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUQ1AgU2VxdWVuY2UgVmFsaWRhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgbW9kaWZpY2F0aW9uIHRvIGB0Y3Bfc2VxdWVuY2UoKWAuIEl0IGZvY3VzZXMgb24gc2VxdWVuY2UgbnVtYmVyIHZhbGlkYXRpb24sIHNwZWNpZmljYWxseSBoYW5kbGluZyB0aGUgY2FzZSB3aGVyZSBhIHBhY2tldCdzIGVuZGluZyBzZXF1ZW5jZSBudW1iZXIgKGBlbmRfc2VxYCkgbWF0Y2hlcyBgdHAtXHUwMDNlcmN2X3d1cGAsIHRoZSB3aW5kb3cgdXBkYXRlIHNlcXVlbmNlLiBUaGUgcGF0Y2ggbm93IGRyb3BzIHRoZSBwYWNrZXQgd2l0aCBgU0tCX0RST1BfUkVBU09OX1RDUF9PTERfU0VRVUVOQ0VgIGlmIGBlbmRfc2VxYCBpcyBlcXVhbCB0byBgdHAtXHUwMDNlcmN2X3d1cGAsIGl0IGNvbnRhaW5zIGEgcGF5bG9hZCAoYHNlcSAhPSBlbmRfc2VxYCksIGFuZCBpdCdzICpub3QqIGEgU1lOIG9yIEZJTiBwYWNrZXQuIFRoaXMgbWFrZXMgc2Vuc2U7IGl0IHNlZW1zIGxpa2UgaXQgaXMgaW50ZW5kZWQgdG8gZHJvcCBvbGQgZGF0YSBhdCB0aGUgd2luZG93IHVwZGF0ZS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU2luY2UgSSdtIGZhbWlsaWFyIHdpdGggdGhlc2Ugc29ydHMgb2YgdnVsbmVyYWJpbGl0aWVzLCBJJ2xsIGdvIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdDpcblxuMS4gICoqS2VybmVsLXRvLVVzZXIgU3BhY2UgRXhwb3N1cmU6KiogQXJlIHRoZXJlIGFueSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nIGNvdWxkIGJlIGEgcHJvYmxlbT8gTm8sIHRoaXMgY29kZSBvcGVyYXRlcyBwdXJlbHkgd2l0aGluIHRoZSBrZXJuZWwgYW5kIGlzbid0IGludm9sdmVkIGluIHBhc3NpbmcgZGF0YSBzdHJ1Y3R1cmVzIG91dCB0byB1c2VyIHNwYWNlLlxuXG4yLiAgKipDb25kaXRpb25hbCBMb2dpYyBEZXBlbmRlbnQgb24gVW5pbml0aWFsaXplZCBWYXJpYWJsZXM6KiogTGV0J3MgbG9vayBhdCB0aGUgdmFyaWFibGVzLiBgc2VxYCwgYGVuZF9zZXFgLCBgdGhgLCBhbmQgYHRwLVx1MDAzZXJjdl93dXBgIGFyZSBhbGwgZGVyaXZlZCBmcm9tIHRoZSBUQ1AgaGVhZGVyLCB0aGUgVENQIHNvY2tldCBzdHJ1Y3R1cmUgKGB0cGApLCBhbmQgdGhlIFNLQiBjb250cm9sIGJsb2NrLiBUaGV5IGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIHdpdGhpbiB0aGUgdmFsaWRhdGlvbiBsb2dpYy4gU2VlbXMgc2FmZS5cblxuMy4gICoqQ29tcGxleCBEYXRhIFN0cnVjdHVyZSBIYW5kbGluZzoqKiBJcyB0aGVyZSBhbnkgY29tcGxleCBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGRhdGEgc3RydWN0dXJlcyBoZXJlPyBObywgdGhpcyBpcyBhbGwgcmVsYXRpdmVseSBzaW1wbGUgc2VxdWVuY2UgbnVtYmVyIGNvbXBhcmlzb24gd2l0aGluIGEgVENQIHBhY2tldCBwcm9jZXNzaW5nIGZ1bmN0aW9uLlxuXG40LiAgKipCb3VuZHMgQ2hlY2tpbmcgYW5kIEJ1ZmZlciBBY2Nlc3M6KiogRG9lcyB0aGUgY29kZSBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gcmVhZCBvciBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyB3aXRoaW4gZXhpc3RpbmcgYnVmZmVycyBiYXNlZCBvbiBsZW5ndGhzIG9yIGNvbmRpdGlvbmFsIGxvZ2ljPyBObywgdGhpcyBpcyBhYm91dCBkcm9wcGluZyBwYWNrZXRzIGJhc2VkIG9uIHNlcXVlbmNlIG51bWJlcnMgYW5kIHBhY2tldCB0eXBlLCBub3QgYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgcGFydHMgb2YgYSBidWZmZXIuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgYSBjYXJlZnVsIHJldmlldywgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlIGRhdGEgaXMgcHJvcGVybHkgc291cmNlZC4gR2l2ZW4gdGhhdCwgS01TQU4gaXNuJ3Qgd2FycmFudGVkOyBzdGFuZGFyZCBLQVNBTiBhbmQgc3RhbmRhcmQgdGVzdGluZyBzaG91bGQgYmUgc3VmZmljaWVudCB0byB2YWxpZGF0ZSB0aGUgY2hhbmdlLiBJIGFtIHJlYWR5IHRvIGZvcm11bGF0ZSBhIHJlc3BvbnNlIGFuZCBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MTMsIk91dHB1dFRva2VucyI6MTU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6NTU6MzkuMzQ2NjIwODg1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIGlucHV0IHNlcXVlbmNlIHZhbGlkYXRpb24gaW4gYHRjcF9zZXF1ZW5jZSgpYCBieSBhZGRpbmcgYSBjb25kaXRpb24gdG8gZHJvcCBpbmNvbWluZyBwYWNrZXRzIHdob3NlIGVuZCBzZXF1ZW5jZSBlcXVhbHMgYHRwLVxcdTAwM2VyY3Zfd3VwYCAod2hlbiBjYXJyeWluZyBwYXlsb2FkIHdpdGhvdXQgU1lOL0ZJTiBmbGFncykgYXMgYFNLQl9EUk9QX1JFQVNPTl9UQ1BfT0xEX1NFUVVFTkNFYC5cXG5cXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWRqdXN0cyBUQ1AgcHJvdG9jb2wgc2VxdWVuY2UgbnVtYmVyIHZhbGlkYXRpb24gbG9naWMgYW5kIHJldHVybiBjb2Rlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGNvcHlpbmcgb2Yga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkuIFRoZXJlZm9yZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUQ1AgaW5wdXQgc2VxdWVuY2UgdmFsaWRhdGlvbiBpbiBgdGNwX3NlcXVlbmNlKClgIGJ5IGFkZGluZyBhIGNvbmRpdGlvbiB0byBkcm9wIGluY29taW5nIHBhY2tldHMgd2hvc2UgZW5kIHNlcXVlbmNlIGVxdWFscyBgdHAtXFx1MDAzZXJjdl93dXBgICh3aGVuIGNhcnJ5aW5nIHBheWxvYWQgd2l0aG91dCBTWU4vRklOIGZsYWdzKSBhcyBgU0tCX0RST1BfUkVBU09OX1RDUF9PTERfU0VRVUVOQ0VgLlxcblxcblRoaXMgY2hhbmdlIHNvbGVseSBhZGp1c3RzIFRDUCBwcm90b2NvbCBzZXF1ZW5jZSBudW1iZXIgdmFsaWRhdGlvbiBsb2dpYyBhbmQgcmV0dXJuIGNvZGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgY29weWluZyBvZiBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeS4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow9d9jg[1] Phase: Succeeded StartedAt: 2026-08-29 13:55:50 +0000 UTC FinishedAt: 2026-08-29 13:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-29 13:55:50 +0000 UTC FinishedAt: 2026-08-29 13:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[2] Phase: Succeeded StartedAt: 2026-08-29 13:55:50 +0000 UTC FinishedAt: 2026-08-29 17:36:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-29 13:55:50 +0000 UTC FinishedAt: 2026-08-29 17:36:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-29 13:55:50 +0000 UTC FinishedAt: 2026-08-29 13:56:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-29 13:55:50 +0000 UTC FinishedAt: 2026-08-29 13:55:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflow9d9jg/series-workflow9d9jg-convert-artifact-2807757299/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-29 13:56:00 +0000 UTC FinishedAt: 2026-08-29 14:11:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-29 13:56:00 +0000 UTC FinishedAt: 2026-08-29 14:11:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b69ff5ce-a5ef-43e6-87c9-856df305cc9f,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-workflow9d9jg/series-workflow9d9jg-convert-artifact-2807757299/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": "ea9d85e5-224d-4066-b9a5-f67787b75b36", "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-workflow9d9jg/series-workflow9d9jg-build-action-3723844769/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-29 13:56:00 +0000 UTC FinishedAt: 2026-08-29 14:11:45 +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:*b69ff5ce-a5ef-43e6-87c9-856df305cc9f,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-workflow9d9jg/series-workflow9d9jg-convert-artifact-2807757299/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": "ea9d85e5-224d-4066-b9a5-f67787b75b36", "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-workflow9d9jg/series-workflow9d9jg-build-action-3723844769/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-29 14:11:55 +0000 UTC FinishedAt: 2026-08-29 14:11:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-29 14:11:55 +0000 UTC FinishedAt: 2026-08-29 14:11:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-29 14:11:55 +0000 UTC FinishedAt: 2026-08-29 14:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-29 14:11:55 +0000 UTC FinishedAt: 2026-08-29 14:11:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflow9d9jg/series-workflow9d9jg-convert-artifact-1807464426/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-29 14:12:05 +0000 UTC FinishedAt: 2026-08-29 14:14:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-29 14:12:05 +0000 UTC FinishedAt: 2026-08-29 14:14:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ea9d85e5-224d-4066-b9a5-f67787b75b36,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-workflow9d9jg/series-workflow9d9jg-build-action-3723844769/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-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-29 14:14:24 +0000 UTC FinishedAt: 2026-08-29 14:14:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-29 14:14:24 +0000 UTC FinishedAt: 2026-08-29 14:14:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-29 14:14:24 +0000 UTC FinishedAt: 2026-08-29 14:32:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-29 14:14:24 +0000 UTC FinishedAt: 2026-08-29 14:32:45 +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:*b69ff5ce-a5ef-43e6-87c9-856df305cc9f,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-workflow9d9jg/series-workflow9d9jg-convert-artifact-1807464426/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": "23c0066d-f942-4562-89b6-68a20571873c", "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-workflow9d9jg/series-workflow9d9jg-build-action-3728991246/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-29 14:14:24 +0000 UTC FinishedAt: 2026-08-29 14:32:35 +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:*b69ff5ce-a5ef-43e6-87c9-856df305cc9f,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-workflow9d9jg/series-workflow9d9jg-convert-artifact-1807464426/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": "23c0066d-f942-4562-89b6-68a20571873c", "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-workflow9d9jg/series-workflow9d9jg-build-action-3728991246/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-29 14:32:45 +0000 UTC FinishedAt: 2026-08-29 14:32:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-29 14:32:45 +0000 UTC FinishedAt: 2026-08-29 14:32:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-29 14:32:45 +0000 UTC FinishedAt: 2026-08-29 14:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-29 14:32:45 +0000 UTC FinishedAt: 2026-08-29 14:34:38 +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:*23c0066d-f942-4562-89b6-68a20571873c,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-workflow9d9jg/series-workflow9d9jg-build-action-3728991246/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-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-29 14:34:48 +0000 UTC FinishedAt: 2026-08-29 17:36:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-29 14:34:48 +0000 UTC FinishedAt: 2026-08-29 17:36:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"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:*ea9d85e5-224d-4066-b9a5-f67787b75b36,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*23c0066d-f942-4562-89b6-68a20571873c,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-workflow9d9jg/series-workflow9d9jg-build-action-3723844769/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-workflow9d9jg/series-workflow9d9jg-build-action-3728991246/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-29 14:34:48 +0000 UTC FinishedAt: 2026-08-29 14:34:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-29 14:34:48 +0000 UTC FinishedAt: 2026-08-29 14:34: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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"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-workflow9d9jg/series-workflow9d9jg-convert-artifact-4009734783/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-29 14:34:48 +0000 UTC FinishedAt: 2026-08-29 14:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-29 14:34:48 +0000 UTC FinishedAt: 2026-08-29 14:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-29 14:34:48 +0000 UTC FinishedAt: 2026-08-29 14:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-29 14:34:58 +0000 UTC FinishedAt: 2026-08-29 17:36:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9d9jg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0685630fdccb62dcb0e3f44525a40578da5f6dc8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"0bafdece-bf48-419f-944d-0796e0f7ca0c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-29 14:34:58 +0000 UTC FinishedAt: 2026-08-29 17:35:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ea9d85e5-224d-4066-b9a5-f67787b75b36,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*23c0066d-f942-4562-89b6-68a20571873c,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-workflow9d9jg/series-workflow9d9jg-build-action-3723844769/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-workflow9d9jg/series-workflow9d9jg-build-action-3728991246/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-workflow9d9jg/series-workflow9d9jg-convert-artifact-4009734783/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,}