Name: series-workflowm2c9b Phase: Failed StartedAt: 2026-08-07 05:20:50 +0000 UTC FinishedAt: 2026-08-07 05:22:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2c9b[0] Phase: Succeeded StartedAt: 2026-08-07 05:20:50 +0000 UTC FinishedAt: 2026-08-07 05:22:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2c9b[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 05:20:50 +0000 UTC FinishedAt: 2026-08-07 05:22:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA1OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGBkZWZlcnJlZF9ncm93X3pvbmVgIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uIHRoYXQgaXMgb25seSBjYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3QgdG8gaW5pdGlhbGl6ZSBkZWZlcnJlZCBwYWdlcyBvbi1kZW1hbmQuIE9uY2UgYHBhZ2VfYWxsb2NfaW5pdF9sYXRlKClgIGZpbmlzaGVzIGR1cmluZyBrZXJuZWwgaW5pdGlhbGl6YXRpb24sIHRoaXMgY29kZSBwYXRoIGlzIHBlcm1hbmVudGx5IGRpc2FibGVkIGFuZCB0aGUgZnVuY3Rpb24gYm9keSBpcyB1bmxvYWRlZC4gU2luY2Ugc3lzY2FsbCBmdXp6ZXJzIHN0YXJ0IGV4ZWN1dGluZyBhZnRlciB0aGUga2VybmVsIGhhcyBmdWxseSBib290ZWQgYW5kIHVzZXItc3BhY2UgaXMgcnVubmluZywgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNToyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ5NzczMGIyODdmYzM5Nzc1NzNhMGM0MzE2MjljNGM1MTdmMzM1YWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDA1OjIxOjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xuaW5kZXggNDk4ZDYyYzRlY2UzOS4uOTExNzdiZTU4YTAwMCAxMDA2NDRcbi0tLSBhL21tL21tX2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW1faW5pdC5jXG5AQCAtMjIxNCwxMCAmIzQzOzIyMTQsMTMgQEAgYm9vbCBfX2luaXQgZGVmZXJyZWRfZ3Jvd196b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4gXHR9XG4gXG4gXHQvKlxuLVx0ICogVGhlcmUgd2VyZSBubyBwYWdlcyB0byBpbml0aWFsaXplIGFuZCBmcmVlIHdoaWNoIG1lYW5zIHRoZSB6b25lJiMzOTtzXG4tXHQgKiBtZW1vcnkgbWFwIGlzIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQuXG4mIzQzO1x0ICogVGhlIGxvb3Agb25seSB0ZXN0cyBzcGZuIGJlZm9yZSBlbnRlcmluZyBhbiBpdGVyYXRpb24sIHNvIG9uIGV4aXQgaXRcbiYjNDM7XHQgKiBtYXkgcG9pbnQgdXAgdG8gYSBzZWN0aW9uIHBhc3QgdGhlIGVuZCBvZiB0aGUgem9uZS4gIFdoZW4gaXQgZG9lcyxcbiYjNDM7XHQgKiB0aGUgcmVzdCBvZiB0aGUgem9uZSBoYXMgYWxyZWFkeSBiZWVuIGhhbmRlZCB0b1xuJiM0MztcdCAqIGRlZmVycmVkX2luaXRfbWVtbWFwX2NodW5rKCkgYW5kIG5vdGhpbmcgaXMgbGVmdCB0byBpbml0aWFsaXplLlxuIFx0ICovXG4tXHRwZ2RhdC1cdTAwM2VmaXJzdF9kZWZlcnJlZF9wZm4gPSBucl9wYWdlcyA/IHNwZm4gOiBVTE9OR19NQVg7XG4mIzQzO1x0cGdkYXQtXHUwMDNlZmlyc3RfZGVmZXJyZWRfcGZuID1cbiYjNDM7XHRcdHNwZm4gXHUwMDNjIHpvbmVfZW5kX3Bmbih6b25lKSA/IHNwZm4gOiBVTE9OR19NQVg7XG4gXG4gXHRwZ2RhdF9yZXNpemVfdW5sb2NrKHBnZGF0LCBcdTAwMjZmbGFncyk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDU6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGBkZWZlcnJlZF9ncm93X3pvbmVgIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uIHRoYXQgaXMgb25seSBjYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3QgdG8gaW5pdGlhbGl6ZSBkZWZlcnJlZCBwYWdlcyBvbi1kZW1hbmQuIE9uY2UgYHBhZ2VfYWxsb2NfaW5pdF9sYXRlKClgIGZpbmlzaGVzIGR1cmluZyBrZXJuZWwgaW5pdGlhbGl6YXRpb24sIHRoaXMgY29kZSBwYXRoIGlzIHBlcm1hbmVudGx5IGRpc2FibGVkIGFuZCB0aGUgZnVuY3Rpb24gYm9keSBpcyB1bmxvYWRlZC4gU2luY2Ugc3lzY2FsbCBmdXp6ZXJzIHN0YXJ0IGV4ZWN1dGluZyBhZnRlciB0aGUga2VybmVsIGhhcyBmdWxseSBib290ZWQgYW5kIHVzZXItc3BhY2UgaXMgcnVubmluZywgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ5NzczMGIyODdmYzM5Nzc1NzNhMGM0MzE2MjljNGM1MTdmMzM1YWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDA1OjIxOjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jCmluZGV4IDQ5OGQ2MmM0ZWNlMzkuLjkxMTc3YmU1OGEwMDAgMTAwNjQ0Ci0tLSBhL21tL21tX2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tbV9pbml0LmMKQEAgLTIyMTQsMTAgJiM0MzsyMjE0LDEzIEBAIGJvb2wgX19pbml0IGRlZmVycmVkX2dyb3dfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKQogCX0KIAogCS8qCi0JICogVGhlcmUgd2VyZSBubyBwYWdlcyB0byBpbml0aWFsaXplIGFuZCBmcmVlIHdoaWNoIG1lYW5zIHRoZSB6b25lJiMzOTtzCi0JICogbWVtb3J5IG1hcCBpcyBjb21wbGV0ZWx5IGluaXRpYWxpemVkLgomIzQzOwkgKiBUaGUgbG9vcCBvbmx5IHRlc3RzIHNwZm4gYmVmb3JlIGVudGVyaW5nIGFuIGl0ZXJhdGlvbiwgc28gb24gZXhpdCBpdAomIzQzOwkgKiBtYXkgcG9pbnQgdXAgdG8gYSBzZWN0aW9uIHBhc3QgdGhlIGVuZCBvZiB0aGUgem9uZS4gIFdoZW4gaXQgZG9lcywKJiM0MzsJICogdGhlIHJlc3Qgb2YgdGhlIHpvbmUgaGFzIGFscmVhZHkgYmVlbiBoYW5kZWQgdG8KJiM0MzsJICogZGVmZXJyZWRfaW5pdF9tZW1tYXBfY2h1bmsoKSBhbmQgbm90aGluZyBpcyBsZWZ0IHRvIGluaXRpYWxpemUuCiAJICovCi0JcGdkYXQtJmd0O2ZpcnN0X2RlZmVycmVkX3BmbiA9IG5yX3BhZ2VzID8gc3BmbiA6IFVMT05HX01BWDsKJiM0MzsJcGdkYXQtJmd0O2ZpcnN0X2RlZmVycmVkX3BmbiA9CiYjNDM7CQlzcGZuICZsdDsgem9uZV9lbmRfcGZuKHpvbmUpID8gc3BmbiA6IFVMT05HX01BWDsKIAogCXBnZGF0X3Jlc2l6ZV91bmxvY2socGdkYXQsICZhbXA7ZmxhZ3MpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA1OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2g6IEZvY3VzIG9uIEZ1bmN0aW9uIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS9tbV9pbml0LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBkZWZlcnJlZF9ncm93X3pvbmVgIGZ1bmN0aW9uLiBUaGUgY29kZSBhbHRlcnMgaG93IGBwZ2RhdC0mZ3Q7Zmlyc3RfZGVmZXJyZWRfcGZuYCBpcyBzZXQsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBhY3R1YWxseSBzb21ldGhpbmcgd2UgY2FuIG9yIHNob3VsZCBmdXp6PyYjMzQ7IFdlIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZnVuY3Rpb24mIzM5O3MgbGlmZWN5Y2xlLgoKVGhlIGNvZGUgbWVudGlvbnMgYGRlZmVycmVkX2dyb3dfem9uZWAgaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIFdhaXQsIGhvbGQgb24uIFRoaXMgbWVhbnMgaXTigJlzIG9ubHkgZXhlY3V0ZWQgZHVyaW5nIGtlcm5lbCBib290LCB5ZWFoPyBMZXQmIzM5O3MgdmVyaWZ5IHRoYXQgcXVpY2tseSBieSBkb3VibGUtY2hlY2tpbmcgYG1tL21tX2luaXQuY2AuIFRoZSBwYXRjaCBkaWZmICpkb2VzKiBzYXkgYGJvb2wgX19pbml0IGRlZmVycmVkX2dyb3dfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKWAuCgpJZiBpdCYjMzk7cyB0cnVseSBgX19pbml0YCwgaXTigJlzIHByb2JhYmx5IG5vdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IGZ1enppbmcgZ2VuZXJhbGx5IHRhcmdldHMgcnVudGltZSBiZWhhdmlvciwgc3lzY2FsbHMsIGFuZCB0aGluZ3MgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGR5bmFtaWNhbGx5LiBOb3cgSSYjMzk7bSBkb3VidGluZywgdGhvdWdoLCBiZWNhdXNlLCB3aGlsZSBJIHRoaW5rIHRoaXMgaXMgcmlnaHQsIGlzIHRoZXJlIGEgY2hhbmNlIGl04oCZcyBhbHNvIGNhbGxlZCBhdCBydW50aW1lPyBUaGUgZGlmZiAqc2F5cyogYF9faW5pdGAsIHNvIGxldOKAmXMgZ2V0IG9uIHRoZSBjb2RlIGFuZCBkb3VibGUtY2hlY2sgdG8gYmUgc3VyZSBpdCBpcyBkZWZpbml0ZWx5IG9ubHkgY2FsbGVkIGF0IGJvb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmZXJyZWRfZ3Jvd196b25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21tX2luaXQuYz0yMTA4PXN0YXRpYyBpbnQgX19pbml0IGRlZmVycmVkX2luaXRfbWVtbWFwKHZvaWQgKmRhdGEpXG4tLVxubW0vbW1faW5pdC5jLTIxNzgtICovXG5tbS9tbV9pbml0LmM6MjE3OTpib29sIF9faW5pdCBkZWZlcnJlZF9ncm93X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcbm1tL21tX2luaXQuYy0yMTgwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBfX2luaXRgLiBSaWdodC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRoYXQgdGhpcyBpcyBib290LXRpbWUgaW5pdGlhbGl6YXRpb24gY29kZS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcHJvYmxlbSBmb3Igc3lzY2FsbCBmdXp6ZXJzLCBpc24mIzM5O3QgaXQ/IFRoZXkmIzM5O3JlIHVzdWFsbHkgb25seSBlZmZlY3RpdmUgYWZ0ZXIgdGhlIHN5c3RlbSBpcyB1cCBhbmQgcnVubmluZy4gSWYgdGhlIGNvZGUgZXhlY3V0ZXMgYmVmb3JlIHRoZSBmdXp6ZXIgaXMgZXZlbiBpbml0aWFsaXplZCwgdGhlbiBpdCYjMzk7cyBhIG5vbi1zdGFydGVyLCBhbmQgaXQgd291bGQgYmUgYSB3YXN0ZSBvZiB0aW1lIHRyeWluZyB0byB0YXJnZXQgaXQgZGlyZWN0bHkuCgpCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyB0aGVyZSAqYW55KiBwb3NzaWJpbGl0eSB0aGlzIGluaXRpYWxpemF0aW9uIGNvZGUgaXMgaW52b2tlZCBhdCBzb21lIGxhdGVyIHBvaW50PyBNYXliZSB0cmlnZ2VyZWQgYnkgYSBzcGVjaWZpYyBldmVudCBvciBhZnRlciBhIGNlcnRhaW4gZGVsYXk/IEl0JiMzOTtzIHdvcnRoIGEgc2Vjb25kIHRob3VnaHQuIExldCYjMzk7cyBzZWUuLi4gdGhlIGtleSBoZXJlIGlzIHRvIGZpbmQgb3V0IGlmIHRoZXJlIGFyZSBhbnkgaW5kaXJlY3QgY2FsbHMgdG8gdGhpcyBjb2RlLiBTbywgbGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZmluZCBhbnkgY2FsbHMgdG8gYGRlZmVycmVkX2dyb3dfem9uZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmZXJyZWRfZ3Jvd196b25lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9MTMyMz1zdGF0aWMgaW5saW5lIGJvb2wgZGVmZXJyZWRfcGFnZXNfZW5hYmxlZCh2b2lkKVxuLS1cbm1tL2ludGVybmFsLmgtMTMyNy1cbm1tL2ludGVybmFsLmg6MTMyODpib29sIF9faW5pdCBkZWZlcnJlZF9ncm93X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcik7XG5tbS9pbnRlcm5hbC5oLTEzMjktI2Vsc2Vcbi0tXG5tbS9tbV9pbml0LmM9MjEwOD1zdGF0aWMgaW50IF9faW5pdCBkZWZlcnJlZF9pbml0X21lbW1hcCh2b2lkICpkYXRhKVxuLS1cbm1tL21tX2luaXQuYy0yMTc4LSAqL1xubW0vbW1faW5pdC5jOjIxNzk6Ym9vbCBfX2luaXQgZGVmZXJyZWRfZ3Jvd196b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG5tbS9tbV9pbml0LmMtMjE4MC17XG4tLVxubW0vcGFnZV9hbGxvYy5jPTMwOT1ERUZJTkVfU1RBVElDX0tFWV9UUlVFKGRlZmVycmVkX3BhZ2VzKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMzExLS8qXG5tbS9wYWdlX2FsbG9jLmM6MzEyOiAqIGRlZmVycmVkX2dyb3dfem9uZSgpIGlzIF9faW5pdCwgYnV0IGl0IGlzIGNhbGxlZCBmcm9tXG5tbS9wYWdlX2FsbG9jLmMtMzEzLSAqIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoKSBkdXJpbmcgZWFybHkgYm9vdCB1bnRpbCBkZWZlcnJlZF9wYWdlcyBwZXJtYW5lbnRseVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz0zMTc9c3RhdGljIGJvb2wgX19yZWZcbm1tL3BhZ2VfYWxsb2MuYzozMTg6X2RlZmVycmVkX2dyb3dfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKVxubW0vcGFnZV9hbGxvYy5jLTMxOS17XG5tbS9wYWdlX2FsbG9jLmM6MzIwOlx0cmV0dXJuIGRlZmVycmVkX2dyb3dfem9uZSh6b25lLCBvcmRlcik7XG5tbS9wYWdlX2FsbG9jLmMtMzIxLX1cbm1tL3BhZ2VfYWxsb2MuYy0zMjItI2Vsc2Vcbm1tL3BhZ2VfYWxsb2MuYzozMjM6c3RhdGljIGlubGluZSBib29sIF9kZWZlcnJlZF9ncm93X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcbm1tL3BhZ2VfYWxsb2MuYy0zMjQte1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz0zNzkyPWdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwgaW50IGFsbG9jX2ZsYWdzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0zOTExLVx0XHRcdGlmIChkZWZlcnJlZF9wYWdlc19lbmFibGVkKCkpIHtcbm1tL3BhZ2VfYWxsb2MuYzozOTEyOlx0XHRcdFx0aWYgKF9kZWZlcnJlZF9ncm93X3pvbmUoem9uZSwgb3JkZXIpKVxubW0vcGFnZV9hbGxvYy5jLTM5MTMtXHRcdFx0XHRcdGdvdG8gdHJ5X3RoaXNfem9uZTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMzk1NC1cdFx0XHRpZiAoZGVmZXJyZWRfcGFnZXNfZW5hYmxlZCgpKSB7XG5tbS9wYWdlX2FsbG9jLmM6Mzk1NTpcdFx0XHRcdGlmIChfZGVmZXJyZWRfZ3Jvd196b25lKHpvbmUsIG9yZGVyKSlcbm1tL3BhZ2VfYWxsb2MuYy0zOTU2LVx0XHRcdFx0XHRnb3RvIHRyeV90aGlzX3pvbmU7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTUwOTU9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MTc2LVx0XHRpZiAoZGVmZXJyZWRfcGFnZXNfZW5hYmxlZCgpKSB7XG5tbS9wYWdlX2FsbG9jLmM6NTE3NzpcdFx0XHRpZiAoX2RlZmVycmVkX2dyb3dfem9uZSh6b25lLCAwKSlcbm1tL3BhZ2VfYWxsb2MuYy01MTc4LVx0XHRcdFx0Z290byByZXRyeV90aGlzX3pvbmU7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTc4NjY9c3RydWN0IHBhZ2UgKmFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mKGdmcF90IGdmcF9mbGFncywgaW50IG5pZCwgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03OTE1LVxubW0vcGFnZV9hbGxvYy5jOjc5MTY6XHQvKiBCYWlsb3V0LCBzaW5jZSBfZGVmZXJyZWRfZ3Jvd196b25lKCkgbmVlZHMgdG8gdGFrZSBhIGxvY2sgKi9cbm1tL3BhZ2VfYWxsb2MuYy03OTE3LVx0aWYgKGRlZmVycmVkX3BhZ2VzX2VuYWJsZWQoKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTUwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKlVuZGVyc3RhbmRpbmcgYGRlZmVycmVkX2dyb3dfem9uZWAgaW4gdGhlIExpbnV4IE1lbW9yeSBNYW5hZ2VtZW50IENvbnRleHQqKgoKUmlnaHQsIHNvIGBkZWZlcnJlZF9ncm93X3pvbmVgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBgX19pbml0YCBzZWN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBlYXJseSBib290IHByb2Nlc3MuIE15IHByaW1hcnkgZm9jdXMgaXMgdW5kZXJzdGFuZGluZyBpdHMgbGlmZWN5Y2xlLCBhbmQgaXQgc2VlbXMgdGhhdCBgZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdCgpYCBjYWxscyB0aGlzIGZ1bmN0aW9uIGVhcmx5IGluIGJvb3QuIFRoZW4sIG9uY2UgYGRlZmVycmVkX3BhZ2VzYCBpcyBwZXJtYW5lbnRseSBkaXNhYmxlZCwgYGRlZmVycmVkX2dyb3dfem9uZWAgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCBpdCYjMzk7cyBpbiBgX19pbml0YCwgc28gaXQgZ2V0cyBmcmVlZCBhZnRlciB0aGUgYm9vdCBzZXF1ZW5jZSBjb21wbGV0ZXMuCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGZ1bmN0aW9u4oCZcyBiZWhhdmlvdXIsIEkgc2hvdWxkIHJlYWQgYXJvdW5kIGxpbmUgMzEyIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBzcGVjaWZpYyBjb250ZXh0IGZvciBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgcGFnZSBhbGxvY2F0aW9uIHN0cmF0ZWd5LCBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQmIzM5O3MgaW52b2tlZC4gSSBleHBlY3QgdGhhdCB3aWxsIGNsYXJpZnkgd2hhdCBgZGVmZXJyZWRfcGFnZXNgIGFjdHVhbGx5IGRvZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMDpcdFxuIDMwMTpcdGludCBwYWdlX2dyb3VwX2J5X21vYmlsaXR5X2Rpc2FibGVkIF9fcmVhZF9tb3N0bHk7XG4gMzAyOlx0XG4gMzAzOlx0I2lmZGVmIENPTkZJR19ERUZFUlJFRF9TVFJVQ1RfUEFHRV9JTklUXG4gMzA0Olx0LypcbiAzMDU6XHQgKiBEdXJpbmcgYm9vdCB3ZSBpbml0aWFsaXplIGRlZmVycmVkIHBhZ2VzIG9uLWRlbWFuZCwgYXMgbmVlZGVkLCBidXQgb25jZVxuIDMwNjpcdCAqIHBhZ2VfYWxsb2NfaW5pdF9sYXRlKCkgaGFzIGZpbmlzaGVkLCB0aGUgZGVmZXJyZWQgcGFnZXMgYXJlIGFsbCBpbml0aWFsaXplZCxcbiAzMDc6XHQgKiBhbmQgd2UgY2FuIHBlcm1hbmVudGx5IGRpc2FibGUgdGhhdCBwYXRoLlxuIDMwODpcdCAqL1xuIDMwOTpcdERFRklORV9TVEFUSUNfS0VZX1RSVUUoZGVmZXJyZWRfcGFnZXMpO1xuIDMxMDpcdFxuIDMxMTpcdC8qXG4gMzEyOlx0ICogZGVmZXJyZWRfZ3Jvd196b25lKCkgaXMgX19pbml0LCBidXQgaXQgaXMgY2FsbGVkIGZyb21cbiAzMTM6XHQgKiBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KCkgZHVyaW5nIGVhcmx5IGJvb3QgdW50aWwgZGVmZXJyZWRfcGFnZXMgcGVybWFuZW50bHlcbiAzMTQ6XHQgKiBkaXNhYmxlcyB0aGlzIGNhbGwuIFRoaXMgaXMgd2h5IHdlIGhhdmUgcmVmZGF0YSB3cmFwcGVyIHRvIGF2b2lkIHdhcm5pbmcsXG4gMzE1Olx0ICogYW5kIHRvIGVuc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiBib2R5IGdldHMgdW5sb2FkZWQuXG4gMzE2Olx0ICovXG4gMzE3Olx0c3RhdGljIGJvb2wgX19yZWZcbiAzMTg6XHRfZGVmZXJyZWRfZ3Jvd196b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4gMzE5Olx0e1xuIDMyMDpcdFx0cmV0dXJuIGRlZmVycmVkX2dyb3dfem9uZSh6b25lLCBvcmRlcik7XG4gMzIxOlx0fVxuIDMyMjpcdCNlbHNlXG4gMzIzOlx0c3RhdGljIGlubGluZSBib29sIF9kZWZlcnJlZF9ncm93X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcbiAzMjQ6XHR7XG4gMzI1Olx0XHRyZXR1cm4gZmFsc2U7XG4gMzI2Olx0fVxuIDMyNzpcdCNlbmRpZiAvKiBDT05GSUdfREVGRVJSRURfU1RSVUNUX1BBR0VfSU5JVCAqL1xuIDMyODpcdFxuIDMyOTpcdC8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGJpdG1hcCBzdG9yaW5nIGJpdHMgYWZmZWN0aW5nIGEgYmxvY2sgb2YgcGFnZXMgKi9cbiAzMzA6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgKmdldF9wYWdlYmxvY2tfYml0bWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxuIDMzMTpcdFx0XHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4gMzMyOlx0e1xuIDMzMzpcdCNpZmRlZiBDT05GSUdfU1BBUlNFTUVNXG4gMzM0Olx0XHRyZXR1cm4gc2VjdGlvbl90b191c2VtYXAoX19wZm5fdG9fc2VjdGlvbihwZm4pKTtcbiAzMzU6XHQjZWxzZVxuIDMzNjpcdFx0cmV0dXJuIHBhZ2Vfem9uZShwYWdlKS1cdTAwM2VwYWdlYmxvY2tfZmxhZ3M7XG4gMzM3Olx0I2VuZGlmIC8qIENPTkZJR19TUEFSU0VNRU0gKi9cbiAzMzg6XHR9XG4gMzM5Olx0XG4gMzQwOlx0c3RhdGljIGlubGluZSBpbnQgcGZuX3RvX2JpdGlkeChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4pXG4gMzQxOlx0e1xuIDM0MjpcdCNpZmRlZiBDT05GSUdfU1BBUlNFTUVNXG4gMzQzOlx0XHRwZm4gXHUwMDI2PSAoUEFHRVNfUEVSX1NFQ1RJT04tMSk7XG4gMzQ0Olx0I2Vsc2VcbiAzNDU6XHRcdHBmbiA9IHBmbiAtIHBhZ2VibG9ja19zdGFydF9wZm4ocGFnZV96b25lKHBhZ2UpLVx1MDAzZXpvbmVfc3RhcnRfcGZuKTtcbiAzNDY6XHQjZW5kaWYgLyogQ09ORklHX1NQQVJTRU1FTSAqL1xuIDM0NzpcdFx0cmV0dXJuIChwZm4gXHUwMDNlXHUwMDNlIHBhZ2VibG9ja19vcmRlcikgKiBOUl9QQUdFQkxPQ0tfQklUUztcbiAzNDg6XHR9XG4gMzQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA1NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzOiBgZGVmZXJyZWRfZ3Jvd196b25lYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZGVmZXJyZWRfZ3Jvd196b25lYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQmIzM5O3Mgb25seSBhY3RpdmUgZHVyaW5nIHRoZSB2ZXJ5IGVhcmx5IGJvb3QgcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBpbml0aWFsaXppbmcgZGVmZXJyZWQgcGFnZXMsIGJ1dCBvbmNlIGBwYWdlX2FsbG9jX2luaXRfbGF0ZSgpYCBpcyBkb25lLCB0aGF0IGVudGlyZSBjb2RlIHBhdGggaXMgcGVybWFuZW50bHkgZGlzYWJsZWQuIFRoZSBzeXN0ZW0gaXMgcGFzdCB0aGUgcG9pbnQgb2YgbmVlZGluZyB0byB1c2UgdGhpcywgYW5kIHRoZSBjb2RlIGlzbiYjMzk7dCBldmVuIHJlc2lkZW50IGluIG1lbW9yeSBhbnltb3JlLgoKU2luY2Ugc3l6a2FsbGVyIGFuZCBvdGhlciBmdXp6ZXJzIGRvbiYjMzk7dCBydW4gdW50aWwgYWZ0ZXIgdGhlIGtlcm5lbCBpcyBmdWxseSBib290ZWQgYW5kIHVzZXItc3BhY2UgaXMgaW5pdGlhbGl6ZWQsIHRoZXkgc2ltcGx5IGNhbiYjMzk7dCByZWFjaCB0aGlzIGNvZGUuIEl0JiMzOTtzIGNvbXBsZXRlbHkgaW5hY2Nlc3NpYmxlIGZvciB0aGVpciBwdXJwb3Nlcy4gVGhlcmVmb3JlLCB0aGVyZSYjMzk7cyBubyByZWFsaXN0aWMgd2F5IHRvIHVzZSB0aGVzZSBraW5kcyBvZiB0b29scyB0byBmdXp6IGBkZWZlcnJlZF9ncm93X3pvbmVgLgoKSSBzaG91bGQgYmUgdGhvcm91Z2ggdGhvdWdoLCBsZXQgbWUgbWFrZSBzdXJlLiBMZXQgbWUgZG91YmxlLWNoZWNrIGhvdyBgZGVmZXJyZWRfZ3Jvd196b25lYCBnZXRzIGNhbGxlZC4gUmlnaHQsIHNvIGBwYWdlX2FsbG9jX2luaXRfbGF0ZSgpYCBpcyBhbiBlYXJseSBpbml0aWFsaXphdGlvbiByb3V0aW5lLiBJdCBzZWVtcyB0byBleGVjdXRlIGR1cmluZyBib290LiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBjb3JyZWN0LCBhbmQgY29uZmlybSB0aGF0IHRoZXJlIGFyZSBubyBoaWRkZW4gd2F5cyB0byB0cmlnZ2VyIHRoaXMuIEkgdGhpbmsgdGhhdCBJJiMzOTt2ZSBzZWVuIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBrZXJuZWxfaW5pdF9mcmVlYWJsZWAgd2hpY2ggaXMgYWxzbyBwYXJ0IG9mIGVhcmx5IGJvb3QuIE9rYXksIHNvIHRoYXQgc2hvdWxkIGJlIHJpZ2h0LCBsZXQgbWUganVzdCB2ZXJpZnkgYHBhZ2VfYWxsb2NfaW5pdF9sYXRlYC4gCkl0JiMzOTtzIGRlZmluaXRlbHkgbm90IHdvcnRoIGZ1enppbmcuIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VfYWxsb2NfaW5pdF9sYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZ2ZwLmg9NDAyPXZvaWQgZHJhaW5fbG9jYWxfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUpO1xuaW5jbHVkZS9saW51eC9nZnAuaC00MDMtXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQwNDp2b2lkIHBhZ2VfYWxsb2NfaW5pdF9sYXRlKHZvaWQpO1xuaW5jbHVkZS9saW51eC9nZnAuaC00MDUtdm9pZCBzZXR1cF9wY3BfY2FjaGVpbmZvKHVuc2lnbmVkIGludCBjcHUpO1xuLS1cbmluaXQvbWFpbi5jPTE2Mjk9c3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGtlcm5lbF9pbml0X2ZyZWVhYmxlKHZvaWQpXG4tLVxuaW5pdC9tYWluLmMtMTY1NS1cdHBhZGF0YV9pbml0KCk7XG5pbml0L21haW4uYzoxNjU2Olx0cGFnZV9hbGxvY19pbml0X2xhdGUoKTtcbmluaXQvbWFpbi5jLTE2NTctXG4tLVxubW0vbW1faW5pdC5jPTIzMTA9c3RhdGljIHZvaWQgX19pbml0IG1lbV9pbml0X3ByaW50X2luZm8odm9pZCk7XG5tbS9tbV9pbml0LmM6MjMxMTp2b2lkIF9faW5pdCBwYWdlX2FsbG9jX2luaXRfbGF0ZSh2b2lkKVxubW0vbW1faW5pdC5jLTIzMTIte1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz0zMDE9aW50IHBhZ2VfZ3JvdXBfYnlfbW9iaWxpdHlfZGlzYWJsZWQgX19yZWFkX21vc3RseTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMzA1LSAqIER1cmluZyBib290IHdlIGluaXRpYWxpemUgZGVmZXJyZWQgcGFnZXMgb24tZGVtYW5kLCBhcyBuZWVkZWQsIGJ1dCBvbmNlXG5tbS9wYWdlX2FsbG9jLmM6MzA2OiAqIHBhZ2VfYWxsb2NfaW5pdF9sYXRlKCkgaGFzIGZpbmlzaGVkLCB0aGUgZGVmZXJyZWQgcGFnZXMgYXJlIGFsbCBpbml0aWFsaXplZCxcbm1tL3BhZ2VfYWxsb2MuYy0zMDctICogYW5kIHdlIGNhbiBwZXJtYW5lbnRseSBkaXNhYmxlIHRoYXQgcGF0aC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA1OAoJCQkJCQkJb3V0cHV0OiAxMTgKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBLZXJuZWwgTWVtb3J5IEFsbG9jYXRpb24gZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgdHJhY2VkIHRoZSBjYWxsIHN0YWNrIGhlcmUuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYHBhZ2VfYWxsb2NfaW5pdF9sYXRlYCBnZXRzIGNhbGxlZCBmcm9tIGBrZXJuZWxfaW5pdF9mcmVlYWJsZWAgd2l0aGluIGBpbml0L21haW4uY2AuIFRoaXMgaXMgaGFwcGVuaW5nICp3YXkqIGJlZm9yZSB0aGUgdXNlci1zcGFjZSBgaW5pdGAgcHJvY2VzcyBldmVuIGdldHMgYSBjaGFuY2UgdG8gc3RhcnQuIFRoaW5raW5nIGFib3V0IGl0LCB0aGF0IG1lYW5zIHRoZSBgZGVmZXJyZWRfZ3Jvd196b25lYCBjb2RlIHBhdGggaXMgYWJzb2x1dGVseSBpbmFjY2Vzc2libGUgZnJvbSBhbnkgZnV6emluZyBJJiMzOTtkIGJlIGRvaW5nIGZyb20gdXNlciBzcGFjZS4gSSBtZWFuLCBpdCYjMzk7cyBqdXN0IG5vdCByZWFjaGFibGUuIEdpdmVuIHRoYXQsIHRoZXJlJiMzOTtzIG5vIHBvaW50IGluIHdhc3RpbmcgY3ljbGVzIG9uIGl0LiBJJiMzOTttIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgbW92ZSBvbiB0byBzb21ldGhpbmcgdGhhdCYjMzk7cyBhY3R1YWxseSBzdXNjZXB0aWJsZSB0byB0aGlzIGtpbmQgb2YgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgbW9kaWZpZWQgZnVuY3Rpb24gYGRlZmVycmVkX2dyb3dfem9uZWAgaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24gdGhhdCBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgZWFybHkgYm9vdCB0byBpbml0aWFsaXplIGRlZmVycmVkIHBhZ2VzIG9uLWRlbWFuZC4gT25jZSBgcGFnZV9hbGxvY19pbml0X2xhdGUoKWAgZmluaXNoZXMgZHVyaW5nIGtlcm5lbCBpbml0aWFsaXphdGlvbiwgdGhpcyBjb2RlIHBhdGggaXMgcGVybWFuZW50bHkgZGlzYWJsZWQgYW5kIHRoZSBmdW5jdGlvbiBib2R5IGlzIHVubG9hZGVkLiBTaW5jZSBzeXNjYWxsIGZ1enplcnMgc3RhcnQgZXhlY3V0aW5nIGFmdGVyIHRoZSBrZXJuZWwgaGFzIGZ1bGx5IGJvb3RlZCBhbmQgdXNlci1zcGFjZSBpcyBydW5uaW5nLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBtb2RpZmllZCBmdW5jdGlvbiBgZGVmZXJyZWRfZ3Jvd196b25lYCBpcyBhbiBgX19pbml0YCBmdW5jdGlvbiB0aGF0IGlzIG9ubHkgY2FsbGVkIGR1cmluZyBlYXJseSBib290IHRvIGluaXRpYWxpemUgZGVmZXJyZWQgcGFnZXMgb24tZGVtYW5kLiBPbmNlIGBwYWdlX2FsbG9jX2luaXRfbGF0ZSgpYCBmaW5pc2hlcyBkdXJpbmcga2VybmVsIGluaXRpYWxpemF0aW9uLCB0aGlzIGNvZGUgcGF0aCBpcyBwZXJtYW5lbnRseSBkaXNhYmxlZCBhbmQgdGhlIGZ1bmN0aW9uIGJvZHkgaXMgdW5sb2FkZWQuIFNpbmNlIHN5c2NhbGwgZnV6emVycyBzdGFydCBleGVjdXRpbmcgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgZnVsbHkgYm9vdGVkIGFuZCB1c2VyLXNwYWNlIGlzIHJ1bm5pbmcsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNToyMjowMC4wNzM3NDA4NDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ0NDA5NjUzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgbW9kaWZpZWQgZnVuY3Rpb24gYGRlZmVycmVkX2dyb3dfem9uZWAgaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24gdGhhdCBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgZWFybHkgYm9vdCB0byBpbml0aWFsaXplIGRlZmVycmVkIHBhZ2VzIG9uLWRlbWFuZC4gT25jZSBgcGFnZV9hbGxvY19pbml0X2xhdGUoKWAgZmluaXNoZXMgZHVyaW5nIGtlcm5lbCBpbml0aWFsaXphdGlvbiwgdGhpcyBjb2RlIHBhdGggaXMgcGVybWFuZW50bHkgZGlzYWJsZWQgYW5kIHRoZSBmdW5jdGlvbiBib2R5IGlzIHVubG9hZGVkLiBTaW5jZSBzeXNjYWxsIGZ1enplcnMgc3RhcnQgZXhlY3V0aW5nIGFmdGVyIHRoZSBrZXJuZWwgaGFzIGZ1bGx5IGJvb3RlZCBhbmQgdXNlci1zcGFjZSBpcyBydW5uaW5nLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNToyMjowMC4wNzM3NDcxODJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MzAyNTY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQ5NzczMGIyODdmYzM5Nzc1NzNhMGM0MzE2MjljNGM1MTdmMzM1YWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAwNToyMTo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcXG5pbmRleCA0OThkNjJjNGVjZTM5Li45MTE3N2JlNThhMDAwIDEwMDY0NFxcbi0tLSBhL21tL21tX2luaXQuY1xcbisrKyBiL21tL21tX2luaXQuY1xcbkBAIC0yMjE0LDEwICsyMjE0LDEzIEBAIGJvb2wgX19pbml0IGRlZmVycmVkX2dyb3dfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbiBcXHR9XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBUaGVyZSB3ZXJlIG5vIHBhZ2VzIHRvIGluaXRpYWxpemUgYW5kIGZyZWUgd2hpY2ggbWVhbnMgdGhlIHpvbmUnc1xcbi1cXHQgKiBtZW1vcnkgbWFwIGlzIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQuXFxuK1xcdCAqIFRoZSBsb29wIG9ubHkgdGVzdHMgc3BmbiBiZWZvcmUgZW50ZXJpbmcgYW4gaXRlcmF0aW9uLCBzbyBvbiBleGl0IGl0XFxuK1xcdCAqIG1heSBwb2ludCB1cCB0byBhIHNlY3Rpb24gcGFzdCB0aGUgZW5kIG9mIHRoZSB6b25lLiAgV2hlbiBpdCBkb2VzLFxcbitcXHQgKiB0aGUgcmVzdCBvZiB0aGUgem9uZSBoYXMgYWxyZWFkeSBiZWVuIGhhbmRlZCB0b1xcbitcXHQgKiBkZWZlcnJlZF9pbml0X21lbW1hcF9jaHVuaygpIGFuZCBub3RoaW5nIGlzIGxlZnQgdG8gaW5pdGlhbGl6ZS5cXG4gXFx0ICovXFxuLVxcdHBnZGF0LVxcdTAwM2VmaXJzdF9kZWZlcnJlZF9wZm4gPSBucl9wYWdlcyA/IHNwZm4gOiBVTE9OR19NQVg7XFxuK1xcdHBnZGF0LVxcdTAwM2VmaXJzdF9kZWZlcnJlZF9wZm4gPVxcbitcXHRcXHRzcGZuIFxcdTAwM2Mgem9uZV9lbmRfcGZuKHpvbmUpID8gc3BmbiA6IFVMT05HX01BWDtcXG4gXFxuIFxcdHBnZGF0X3Jlc2l6ZV91bmxvY2socGdkYXQsIFxcdTAwMjZmbGFncyk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNToyMjowMC40Njc0NTc3NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI2MDUwMzcyODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBmdW5jdGlvbiBgZGVmZXJyZWRfZ3Jvd196b25lYCBpcyBhbiBgX19pbml0YCBmdW5jdGlvbiB0aGF0IGlzIG9ubHkgY2FsbGVkIGR1cmluZyBlYXJseSBib290IHRvIGluaXRpYWxpemUgZGVmZXJyZWQgcGFnZXMgb24tZGVtYW5kLiBPbmNlIGBwYWdlX2FsbG9jX2luaXRfbGF0ZSgpYCBmaW5pc2hlcyBkdXJpbmcga2VybmVsIGluaXRpYWxpemF0aW9uLCB0aGlzIGNvZGUgcGF0aCBpcyBwZXJtYW5lbnRseSBkaXNhYmxlZCBhbmQgdGhlIGZ1bmN0aW9uIGJvZHkgaXMgdW5sb2FkZWQuIFNpbmNlIHN5c2NhbGwgZnV6emVycyBzdGFydCBleGVjdXRpbmcgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgZnVsbHkgYm9vdGVkIGFuZCB1c2VyLXNwYWNlIGlzIHJ1bm5pbmcsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ5NzczMGIyODdmYzM5Nzc1NzNhMGM0MzE2MjljNGM1MTdmMzM1YWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDA1OjIxOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXG5pbmRleCA0OThkNjJjNGVjZTM5Li45MTE3N2JlNThhMDAwIDEwMDY0NFxuLS0tIGEvbW0vbW1faW5pdC5jXG4rKysgYi9tbS9tbV9pbml0LmNcbkBAIC0yMjE0LDEwICsyMjE0LDEzIEBAIGJvb2wgX19pbml0IGRlZmVycmVkX2dyb3dfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuIFx0fVxuIFxuIFx0Lypcbi1cdCAqIFRoZXJlIHdlcmUgbm8gcGFnZXMgdG8gaW5pdGlhbGl6ZSBhbmQgZnJlZSB3aGljaCBtZWFucyB0aGUgem9uZSdzXG4tXHQgKiBtZW1vcnkgbWFwIGlzIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQuXG4rXHQgKiBUaGUgbG9vcCBvbmx5IHRlc3RzIHNwZm4gYmVmb3JlIGVudGVyaW5nIGFuIGl0ZXJhdGlvbiwgc28gb24gZXhpdCBpdFxuK1x0ICogbWF5IHBvaW50IHVwIHRvIGEgc2VjdGlvbiBwYXN0IHRoZSBlbmQgb2YgdGhlIHpvbmUuICBXaGVuIGl0IGRvZXMsXG4rXHQgKiB0aGUgcmVzdCBvZiB0aGUgem9uZSBoYXMgYWxyZWFkeSBiZWVuIGhhbmRlZCB0b1xuK1x0ICogZGVmZXJyZWRfaW5pdF9tZW1tYXBfY2h1bmsoKSBhbmQgbm90aGluZyBpcyBsZWZ0IHRvIGluaXRpYWxpemUuXG4gXHQgKi9cbi1cdHBnZGF0LVx1MDAzZWZpcnN0X2RlZmVycmVkX3BmbiA9IG5yX3BhZ2VzID8gc3BmbiA6IFVMT05HX01BWDtcbitcdHBnZGF0LVx1MDAzZWZpcnN0X2RlZmVycmVkX3BmbiA9XG4rXHRcdHNwZm4gXHUwMDNjIHpvbmVfZW5kX3Bmbih6b25lKSA/IHNwZm4gOiBVTE9OR19NQVg7XG4gXG4gXHRwZ2RhdF9yZXNpemVfdW5sb2NrKHBnZGF0LCBcdTAwMjZmbGFncyk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNToyMjowMC40Njc0NTg5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NTY3MzExOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2g6IEZvY3VzIG9uIEZ1bmN0aW9uIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0vbW1faW5pdC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZGVmZXJyZWRfZ3Jvd196b25lYCBmdW5jdGlvbi4gVGhlIGNvZGUgYWx0ZXJzIGhvdyBgcGdkYXQtXHUwMDNlZmlyc3RfZGVmZXJyZWRfcGZuYCBpcyBzZXQsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiSXMgdGhpcyBhY3R1YWxseSBzb21ldGhpbmcgd2UgY2FuIG9yIHNob3VsZCBmdXp6P1wiIFdlIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZnVuY3Rpb24ncyBsaWZlY3ljbGUuXG5cblRoZSBjb2RlIG1lbnRpb25zIGBkZWZlcnJlZF9ncm93X3pvbmVgIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBXYWl0LCBob2xkIG9uLiBUaGlzIG1lYW5zIGl04oCZcyBvbmx5IGV4ZWN1dGVkIGR1cmluZyBrZXJuZWwgYm9vdCwgeWVhaD8gTGV0J3MgdmVyaWZ5IHRoYXQgcXVpY2tseSBieSBkb3VibGUtY2hlY2tpbmcgYG1tL21tX2luaXQuY2AuIFRoZSBwYXRjaCBkaWZmICpkb2VzKiBzYXkgYGJvb2wgX19pbml0IGRlZmVycmVkX2dyb3dfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKWAuXG5cbklmIGl0J3MgdHJ1bHkgYF9faW5pdGAsIGl04oCZcyBwcm9iYWJseSBub3QgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgZ2l2ZW4gdGhhdCBmdXp6aW5nIGdlbmVyYWxseSB0YXJnZXRzIHJ1bnRpbWUgYmVoYXZpb3IsIHN5c2NhbGxzLCBhbmQgdGhpbmdzIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBkeW5hbWljYWxseS4gTm93IEknbSBkb3VidGluZywgdGhvdWdoLCBiZWNhdXNlLCB3aGlsZSBJIHRoaW5rIHRoaXMgaXMgcmlnaHQsIGlzIHRoZXJlIGEgY2hhbmNlIGl04oCZcyBhbHNvIGNhbGxlZCBhdCBydW50aW1lPyBUaGUgZGlmZiAqc2F5cyogYF9faW5pdGAsIHNvIGxldOKAmXMgZ2V0IG9uIHRoZSBjb2RlIGFuZCBkb3VibGUtY2hlY2sgdG8gYmUgc3VyZSBpdCBpcyBkZWZpbml0ZWx5IG9ubHkgY2FsbGVkIGF0IGJvb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNToyMjowNi4wMjQxOTMzNjhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5NDMzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmZXJyZWRfZ3Jvd196b25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21tX2luaXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tbV9pbml0LmM9MjEwOD1zdGF0aWMgaW50IF9faW5pdCBkZWZlcnJlZF9pbml0X21lbW1hcCh2b2lkICpkYXRhKVxcbi0tXFxubW0vbW1faW5pdC5jLTIxNzgtICovXFxubW0vbW1faW5pdC5jOjIxNzk6Ym9vbCBfX2luaXQgZGVmZXJyZWRfZ3Jvd196b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxubW0vbW1faW5pdC5jLTIxODAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNToyMjowNi4wNjgxNDMxMDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI1MDcwOTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYF9faW5pdGAuIFJpZ2h0LiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdGhhdCB0aGlzIGlzIGJvb3QtdGltZSBpbml0aWFsaXphdGlvbiBjb2RlLiBUaGF0J3MgYSBjbGFzc2ljIHByb2JsZW0gZm9yIHN5c2NhbGwgZnV6emVycywgaXNuJ3QgaXQ/IFRoZXkncmUgdXN1YWxseSBvbmx5IGVmZmVjdGl2ZSBhZnRlciB0aGUgc3lzdGVtIGlzIHVwIGFuZCBydW5uaW5nLiBJZiB0aGUgY29kZSBleGVjdXRlcyBiZWZvcmUgdGhlIGZ1enplciBpcyBldmVuIGluaXRpYWxpemVkLCB0aGVuIGl0J3MgYSBub24tc3RhcnRlciwgYW5kIGl0IHdvdWxkIGJlIGEgd2FzdGUgb2YgdGltZSB0cnlpbmcgdG8gdGFyZ2V0IGl0IGRpcmVjdGx5LlxuXG5CdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyB0aGVyZSAqYW55KiBwb3NzaWJpbGl0eSB0aGlzIGluaXRpYWxpemF0aW9uIGNvZGUgaXMgaW52b2tlZCBhdCBzb21lIGxhdGVyIHBvaW50PyBNYXliZSB0cmlnZ2VyZWQgYnkgYSBzcGVjaWZpYyBldmVudCBvciBhZnRlciBhIGNlcnRhaW4gZGVsYXk/IEl0J3Mgd29ydGggYSBzZWNvbmQgdGhvdWdodC4gTGV0J3Mgc2VlLi4uIHRoZSBrZXkgaGVyZSBpcyB0byBmaW5kIG91dCBpZiB0aGVyZSBhcmUgYW55IGluZGlyZWN0IGNhbGxzIHRvIHRoaXMgY29kZS4gU28sIGxldCdzIHNlZSBpZiB3ZSBjYW4gZmluZCBhbnkgY2FsbHMgdG8gYGRlZmVycmVkX2dyb3dfem9uZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3OTgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNToyMjowOS4zOTMyMjMxMjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1OTQyODg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZlcnJlZF9ncm93X3pvbmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD0xMzIzPXN0YXRpYyBpbmxpbmUgYm9vbCBkZWZlcnJlZF9wYWdlc19lbmFibGVkKHZvaWQpXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTEzMjctXFxubW0vaW50ZXJuYWwuaDoxMzI4OmJvb2wgX19pbml0IGRlZmVycmVkX2dyb3dfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5tbS9pbnRlcm5hbC5oLTEzMjktI2Vsc2VcXG4tLVxcbm1tL21tX2luaXQuYz0yMTA4PXN0YXRpYyBpbnQgX19pbml0IGRlZmVycmVkX2luaXRfbWVtbWFwKHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9tbV9pbml0LmMtMjE3OC0gKi9cXG5tbS9tbV9pbml0LmM6MjE3OTpib29sIF9faW5pdCBkZWZlcnJlZF9ncm93X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcXG5tbS9tbV9pbml0LmMtMjE4MC17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MzA5PURFRklORV9TVEFUSUNfS0VZX1RSVUUoZGVmZXJyZWRfcGFnZXMpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTMxMS0vKlxcbm1tL3BhZ2VfYWxsb2MuYzozMTI6ICogZGVmZXJyZWRfZ3Jvd196b25lKCkgaXMgX19pbml0LCBidXQgaXQgaXMgY2FsbGVkIGZyb21cXG5tbS9wYWdlX2FsbG9jLmMtMzEzLSAqIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoKSBkdXJpbmcgZWFybHkgYm9vdCB1bnRpbCBkZWZlcnJlZF9wYWdlcyBwZXJtYW5lbnRseVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTMxNz1zdGF0aWMgYm9vbCBfX3JlZlxcbm1tL3BhZ2VfYWxsb2MuYzozMTg6X2RlZmVycmVkX2dyb3dfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbm1tL3BhZ2VfYWxsb2MuYy0zMTkte1xcbm1tL3BhZ2VfYWxsb2MuYzozMjA6XFx0cmV0dXJuIGRlZmVycmVkX2dyb3dfem9uZSh6b25lLCBvcmRlcik7XFxubW0vcGFnZV9hbGxvYy5jLTMyMS19XFxubW0vcGFnZV9hbGxvYy5jLTMyMi0jZWxzZVxcbm1tL3BhZ2VfYWxsb2MuYzozMjM6c3RhdGljIGlubGluZSBib29sIF9kZWZlcnJlZF9ncm93X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcXG5tbS9wYWdlX2FsbG9jLmMtMzI0LXtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0zNzkyPWdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwgaW50IGFsbG9jX2ZsYWdzLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTM5MTEtXFx0XFx0XFx0aWYgKGRlZmVycmVkX3BhZ2VzX2VuYWJsZWQoKSkge1xcbm1tL3BhZ2VfYWxsb2MuYzozOTEyOlxcdFxcdFxcdFxcdGlmIChfZGVmZXJyZWRfZ3Jvd196b25lKHpvbmUsIG9yZGVyKSlcXG5tbS9wYWdlX2FsbG9jLmMtMzkxMy1cXHRcXHRcXHRcXHRcXHRnb3RvIHRyeV90aGlzX3pvbmU7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMzk1NC1cXHRcXHRcXHRpZiAoZGVmZXJyZWRfcGFnZXNfZW5hYmxlZCgpKSB7XFxubW0vcGFnZV9hbGxvYy5jOjM5NTU6XFx0XFx0XFx0XFx0aWYgKF9kZWZlcnJlZF9ncm93X3pvbmUoem9uZSwgb3JkZXIpKVxcbm1tL3BhZ2VfYWxsb2MuYy0zOTU2LVxcdFxcdFxcdFxcdFxcdGdvdG8gdHJ5X3RoaXNfem9uZTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MDk1PXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTc2LVxcdFxcdGlmIChkZWZlcnJlZF9wYWdlc19lbmFibGVkKCkpIHtcXG5tbS9wYWdlX2FsbG9jLmM6NTE3NzpcXHRcXHRcXHRpZiAoX2RlZmVycmVkX2dyb3dfem9uZSh6b25lLCAwKSlcXG5tbS9wYWdlX2FsbG9jLmMtNTE3OC1cXHRcXHRcXHRcXHRnb3RvIHJldHJ5X3RoaXNfem9uZTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03ODY2PXN0cnVjdCBwYWdlICphbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrX25vcHJvZihnZnBfdCBnZnBfZmxhZ3MsIGludCBuaWQsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03OTE1LVxcbm1tL3BhZ2VfYWxsb2MuYzo3OTE2OlxcdC8qIEJhaWxvdXQsIHNpbmNlIF9kZWZlcnJlZF9ncm93X3pvbmUoKSBuZWVkcyB0byB0YWtlIGEgbG9jayAqL1xcbm1tL3BhZ2VfYWxsb2MuYy03OTE3LVxcdGlmIChkZWZlcnJlZF9wYWdlc19lbmFibGVkKCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA1OjIyOjExLjQ1MjY2NDA4OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTg1Njc1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uXG5cbioqVW5kZXJzdGFuZGluZyBgZGVmZXJyZWRfZ3Jvd196b25lYCBpbiB0aGUgTGludXggTWVtb3J5IE1hbmFnZW1lbnQgQ29udGV4dCoqXG5cblJpZ2h0LCBzbyBgZGVmZXJyZWRfZ3Jvd196b25lYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUgYF9faW5pdGAgc2VjdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQncyBwYXJ0IG9mIHRoZSBlYXJseSBib290IHByb2Nlc3MuIE15IHByaW1hcnkgZm9jdXMgaXMgdW5kZXJzdGFuZGluZyBpdHMgbGlmZWN5Y2xlLCBhbmQgaXQgc2VlbXMgdGhhdCBgZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdCgpYCBjYWxscyB0aGlzIGZ1bmN0aW9uIGVhcmx5IGluIGJvb3QuIFRoZW4sIG9uY2UgYGRlZmVycmVkX3BhZ2VzYCBpcyBwZXJtYW5lbnRseSBkaXNhYmxlZCwgYGRlZmVycmVkX2dyb3dfem9uZWAgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCBpdCdzIGluIGBfX2luaXRgLCBzbyBpdCBnZXRzIGZyZWVkIGFmdGVyIHRoZSBib290IHNlcXVlbmNlIGNvbXBsZXRlcy5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBmdW5jdGlvbuKAmXMgYmVoYXZpb3VyLCBJIHNob3VsZCByZWFkIGFyb3VuZCBsaW5lIDMxMiBpbiBgbW0vcGFnZV9hbGxvYy5jYC4gVGhhdCBzaG91bGQgcHJvdmlkZSB0aGUgc3BlY2lmaWMgY29udGV4dCBmb3IgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHBhZ2UgYWxsb2NhdGlvbiBzdHJhdGVneSwgYW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0J3MgaW52b2tlZC4gSSBleHBlY3QgdGhhdCB3aWxsIGNsYXJpZnkgd2hhdCBgZGVmZXJyZWRfcGFnZXNgIGFjdHVhbGx5IGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNToyMjoxNC45NTEyMzM1MjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzgxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMDpcXHRcXG4gMzAxOlxcdGludCBwYWdlX2dyb3VwX2J5X21vYmlsaXR5X2Rpc2FibGVkIF9fcmVhZF9tb3N0bHk7XFxuIDMwMjpcXHRcXG4gMzAzOlxcdCNpZmRlZiBDT05GSUdfREVGRVJSRURfU1RSVUNUX1BBR0VfSU5JVFxcbiAzMDQ6XFx0LypcXG4gMzA1OlxcdCAqIER1cmluZyBib290IHdlIGluaXRpYWxpemUgZGVmZXJyZWQgcGFnZXMgb24tZGVtYW5kLCBhcyBuZWVkZWQsIGJ1dCBvbmNlXFxuIDMwNjpcXHQgKiBwYWdlX2FsbG9jX2luaXRfbGF0ZSgpIGhhcyBmaW5pc2hlZCwgdGhlIGRlZmVycmVkIHBhZ2VzIGFyZSBhbGwgaW5pdGlhbGl6ZWQsXFxuIDMwNzpcXHQgKiBhbmQgd2UgY2FuIHBlcm1hbmVudGx5IGRpc2FibGUgdGhhdCBwYXRoLlxcbiAzMDg6XFx0ICovXFxuIDMwOTpcXHRERUZJTkVfU1RBVElDX0tFWV9UUlVFKGRlZmVycmVkX3BhZ2VzKTtcXG4gMzEwOlxcdFxcbiAzMTE6XFx0LypcXG4gMzEyOlxcdCAqIGRlZmVycmVkX2dyb3dfem9uZSgpIGlzIF9faW5pdCwgYnV0IGl0IGlzIGNhbGxlZCBmcm9tXFxuIDMxMzpcXHQgKiBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KCkgZHVyaW5nIGVhcmx5IGJvb3QgdW50aWwgZGVmZXJyZWRfcGFnZXMgcGVybWFuZW50bHlcXG4gMzE0OlxcdCAqIGRpc2FibGVzIHRoaXMgY2FsbC4gVGhpcyBpcyB3aHkgd2UgaGF2ZSByZWZkYXRhIHdyYXBwZXIgdG8gYXZvaWQgd2FybmluZyxcXG4gMzE1OlxcdCAqIGFuZCB0byBlbnN1cmUgdGhhdCB0aGUgZnVuY3Rpb24gYm9keSBnZXRzIHVubG9hZGVkLlxcbiAzMTY6XFx0ICovXFxuIDMxNzpcXHRzdGF0aWMgYm9vbCBfX3JlZlxcbiAzMTg6XFx0X2RlZmVycmVkX2dyb3dfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbiAzMTk6XFx0e1xcbiAzMjA6XFx0XFx0cmV0dXJuIGRlZmVycmVkX2dyb3dfem9uZSh6b25lLCBvcmRlcik7XFxuIDMyMTpcXHR9XFxuIDMyMjpcXHQjZWxzZVxcbiAzMjM6XFx0c3RhdGljIGlubGluZSBib29sIF9kZWZlcnJlZF9ncm93X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcXG4gMzI0OlxcdHtcXG4gMzI1OlxcdFxcdHJldHVybiBmYWxzZTtcXG4gMzI2OlxcdH1cXG4gMzI3OlxcdCNlbmRpZiAvKiBDT05GSUdfREVGRVJSRURfU1RSVUNUX1BBR0VfSU5JVCAqL1xcbiAzMjg6XFx0XFxuIDMyOTpcXHQvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBiaXRtYXAgc3RvcmluZyBiaXRzIGFmZmVjdGluZyBhIGJsb2NrIG9mIHBhZ2VzICovXFxuIDMzMDpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgKmdldF9wYWdlYmxvY2tfYml0bWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxcbiAzMzE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBwZm4pXFxuIDMzMjpcXHR7XFxuIDMzMzpcXHQjaWZkZWYgQ09ORklHX1NQQVJTRU1FTVxcbiAzMzQ6XFx0XFx0cmV0dXJuIHNlY3Rpb25fdG9fdXNlbWFwKF9fcGZuX3RvX3NlY3Rpb24ocGZuKSk7XFxuIDMzNTpcXHQjZWxzZVxcbiAzMzY6XFx0XFx0cmV0dXJuIHBhZ2Vfem9uZShwYWdlKS1cXHUwMDNlcGFnZWJsb2NrX2ZsYWdzO1xcbiAzMzc6XFx0I2VuZGlmIC8qIENPTkZJR19TUEFSU0VNRU0gKi9cXG4gMzM4OlxcdH1cXG4gMzM5OlxcdFxcbiAzNDA6XFx0c3RhdGljIGlubGluZSBpbnQgcGZuX3RvX2JpdGlkeChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4pXFxuIDM0MTpcXHR7XFxuIDM0MjpcXHQjaWZkZWYgQ09ORklHX1NQQVJTRU1FTVxcbiAzNDM6XFx0XFx0cGZuIFxcdTAwMjY9IChQQUdFU19QRVJfU0VDVElPTi0xKTtcXG4gMzQ0OlxcdCNlbHNlXFxuIDM0NTpcXHRcXHRwZm4gPSBwZm4gLSBwYWdlYmxvY2tfc3RhcnRfcGZuKHBhZ2Vfem9uZShwYWdlKS1cXHUwMDNlem9uZV9zdGFydF9wZm4pO1xcbiAzNDY6XFx0I2VuZGlmIC8qIENPTkZJR19TUEFSU0VNRU0gKi9cXG4gMzQ3OlxcdFxcdHJldHVybiAocGZuIFxcdTAwM2VcXHUwMDNlIHBhZ2VibG9ja19vcmRlcikgKiBOUl9QQUdFQkxPQ0tfQklUUztcXG4gMzQ4OlxcdH1cXG4gMzQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNToyMjoxNC45NTE1MTM0MDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzgwNTM4MDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IGBkZWZlcnJlZF9ncm93X3pvbmVgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZGVmZXJyZWRfZ3Jvd196b25lYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQncyBvbmx5IGFjdGl2ZSBkdXJpbmcgdGhlIHZlcnkgZWFybHkgYm9vdCBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGluaXRpYWxpemluZyBkZWZlcnJlZCBwYWdlcywgYnV0IG9uY2UgYHBhZ2VfYWxsb2NfaW5pdF9sYXRlKClgIGlzIGRvbmUsIHRoYXQgZW50aXJlIGNvZGUgcGF0aCBpcyBwZXJtYW5lbnRseSBkaXNhYmxlZC4gVGhlIHN5c3RlbSBpcyBwYXN0IHRoZSBwb2ludCBvZiBuZWVkaW5nIHRvIHVzZSB0aGlzLCBhbmQgdGhlIGNvZGUgaXNuJ3QgZXZlbiByZXNpZGVudCBpbiBtZW1vcnkgYW55bW9yZS5cblxuU2luY2Ugc3l6a2FsbGVyIGFuZCBvdGhlciBmdXp6ZXJzIGRvbid0IHJ1biB1bnRpbCBhZnRlciB0aGUga2VybmVsIGlzIGZ1bGx5IGJvb3RlZCBhbmQgdXNlci1zcGFjZSBpcyBpbml0aWFsaXplZCwgdGhleSBzaW1wbHkgY2FuJ3QgcmVhY2ggdGhpcyBjb2RlLiBJdCdzIGNvbXBsZXRlbHkgaW5hY2Nlc3NpYmxlIGZvciB0aGVpciBwdXJwb3Nlcy4gVGhlcmVmb3JlLCB0aGVyZSdzIG5vIHJlYWxpc3RpYyB3YXkgdG8gdXNlIHRoZXNlIGtpbmRzIG9mIHRvb2xzIHRvIGZ1enogYGRlZmVycmVkX2dyb3dfem9uZWAuXG5cbkkgc2hvdWxkIGJlIHRob3JvdWdoIHRob3VnaCwgbGV0IG1lIG1ha2Ugc3VyZS4gTGV0IG1lIGRvdWJsZS1jaGVjayBob3cgYGRlZmVycmVkX2dyb3dfem9uZWAgZ2V0cyBjYWxsZWQuIFJpZ2h0LCBzbyBgcGFnZV9hbGxvY19pbml0X2xhdGUoKWAgaXMgYW4gZWFybHkgaW5pdGlhbGl6YXRpb24gcm91dGluZS4gSXQgc2VlbXMgdG8gZXhlY3V0ZSBkdXJpbmcgYm9vdC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgY29ycmVjdCwgYW5kIGNvbmZpcm0gdGhhdCB0aGVyZSBhcmUgbm8gaGlkZGVuIHdheXMgdG8gdHJpZ2dlciB0aGlzLiBJIHRoaW5rIHRoYXQgSSd2ZSBzZWVuIGl0J3MgY2FsbGVkIGZyb20gYGtlcm5lbF9pbml0X2ZyZWVhYmxlYCB3aGljaCBpcyBhbHNvIHBhcnQgb2YgZWFybHkgYm9vdC4gT2theSwgc28gdGhhdCBzaG91bGQgYmUgcmlnaHQsIGxldCBtZSBqdXN0IHZlcmlmeSBgcGFnZV9hbGxvY19pbml0X2xhdGVgLiBcbkl0J3MgZGVmaW5pdGVseSBub3Qgd29ydGggZnV6emluZy4gSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDU0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDU6MjI6MjAuNzMyMDU0MzU3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI1MDk1MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2VfYWxsb2NfaW5pdF9sYXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZ2ZwLmg9NDAyPXZvaWQgZHJhaW5fbG9jYWxfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUpO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDAzLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDA0OnZvaWQgcGFnZV9hbGxvY19pbml0X2xhdGUodm9pZCk7XFxuaW5jbHVkZS9saW51eC9nZnAuaC00MDUtdm9pZCBzZXR1cF9wY3BfY2FjaGVpbmZvKHVuc2lnbmVkIGludCBjcHUpO1xcbi0tXFxuaW5pdC9tYWluLmM9MTYyOT1zdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQga2VybmVsX2luaXRfZnJlZWFibGUodm9pZClcXG4tLVxcbmluaXQvbWFpbi5jLTE2NTUtXFx0cGFkYXRhX2luaXQoKTtcXG5pbml0L21haW4uYzoxNjU2OlxcdHBhZ2VfYWxsb2NfaW5pdF9sYXRlKCk7XFxuaW5pdC9tYWluLmMtMTY1Ny1cXG4tLVxcbm1tL21tX2luaXQuYz0yMzEwPXN0YXRpYyB2b2lkIF9faW5pdCBtZW1faW5pdF9wcmludF9pbmZvKHZvaWQpO1xcbm1tL21tX2luaXQuYzoyMzExOnZvaWQgX19pbml0IHBhZ2VfYWxsb2NfaW5pdF9sYXRlKHZvaWQpXFxubW0vbW1faW5pdC5jLTIzMTIte1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTMwMT1pbnQgcGFnZV9ncm91cF9ieV9tb2JpbGl0eV9kaXNhYmxlZCBfX3JlYWRfbW9zdGx5O1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTMwNS0gKiBEdXJpbmcgYm9vdCB3ZSBpbml0aWFsaXplIGRlZmVycmVkIHBhZ2VzIG9uLWRlbWFuZCwgYXMgbmVlZGVkLCBidXQgb25jZVxcbm1tL3BhZ2VfYWxsb2MuYzozMDY6ICogcGFnZV9hbGxvY19pbml0X2xhdGUoKSBoYXMgZmluaXNoZWQsIHRoZSBkZWZlcnJlZCBwYWdlcyBhcmUgYWxsIGluaXRpYWxpemVkLFxcbm1tL3BhZ2VfYWxsb2MuYy0zMDctICogYW5kIHdlIGNhbiBwZXJtYW5lbnRseSBkaXNhYmxlIHRoYXQgcGF0aC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDU6MjI6MjIuNjU3MTU1NzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2MDYzMDEyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBLZXJuZWwgTWVtb3J5IEFsbG9jYXRpb24gZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHRyYWNlZCB0aGUgY2FsbCBzdGFjayBoZXJlLiBJdCdzIGNsZWFyIHRoYXQgYHBhZ2VfYWxsb2NfaW5pdF9sYXRlYCBnZXRzIGNhbGxlZCBmcm9tIGBrZXJuZWxfaW5pdF9mcmVlYWJsZWAgd2l0aGluIGBpbml0L21haW4uY2AuIFRoaXMgaXMgaGFwcGVuaW5nICp3YXkqIGJlZm9yZSB0aGUgdXNlci1zcGFjZSBgaW5pdGAgcHJvY2VzcyBldmVuIGdldHMgYSBjaGFuY2UgdG8gc3RhcnQuIFRoaW5raW5nIGFib3V0IGl0LCB0aGF0IG1lYW5zIHRoZSBgZGVmZXJyZWRfZ3Jvd196b25lYCBjb2RlIHBhdGggaXMgYWJzb2x1dGVseSBpbmFjY2Vzc2libGUgZnJvbSBhbnkgZnV6emluZyBJJ2QgYmUgZG9pbmcgZnJvbSB1c2VyIHNwYWNlLiBJIG1lYW4sIGl0J3MganVzdCBub3QgcmVhY2hhYmxlLiBHaXZlbiB0aGF0LCB0aGVyZSdzIG5vIHBvaW50IGluIHdhc3RpbmcgY3ljbGVzIG9uIGl0LiBJJ20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGFuZCBtb3ZlIG9uIHRvIHNvbWV0aGluZyB0aGF0J3MgYWN0dWFsbHkgc3VzY2VwdGlibGUgdG8gdGhpcyBraW5kIG9mIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDU4LCJPdXRwdXRUb2tlbnMiOjExOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA1OjIyOjI2LjUxNzc4ODA5N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGBkZWZlcnJlZF9ncm93X3pvbmVgIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uIHRoYXQgaXMgb25seSBjYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3QgdG8gaW5pdGlhbGl6ZSBkZWZlcnJlZCBwYWdlcyBvbi1kZW1hbmQuIE9uY2UgYHBhZ2VfYWxsb2NfaW5pdF9sYXRlKClgIGZpbmlzaGVzIGR1cmluZyBrZXJuZWwgaW5pdGlhbGl6YXRpb24sIHRoaXMgY29kZSBwYXRoIGlzIHBlcm1hbmVudGx5IGRpc2FibGVkIGFuZCB0aGUgZnVuY3Rpb24gYm9keSBpcyB1bmxvYWRlZC4gU2luY2Ugc3lzY2FsbCBmdXp6ZXJzIHN0YXJ0IGV4ZWN1dGluZyBhZnRlciB0aGUga2VybmVsIGhhcyBmdWxseSBib290ZWQgYW5kIHVzZXItc3BhY2UgaXMgcnVubmluZywgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgbW9kaWZpZWQgZnVuY3Rpb24gYGRlZmVycmVkX2dyb3dfem9uZWAgaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24gdGhhdCBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgZWFybHkgYm9vdCB0byBpbml0aWFsaXplIGRlZmVycmVkIHBhZ2VzIG9uLWRlbWFuZC4gT25jZSBgcGFnZV9hbGxvY19pbml0X2xhdGUoKWAgZmluaXNoZXMgZHVyaW5nIGtlcm5lbCBpbml0aWFsaXphdGlvbiwgdGhpcyBjb2RlIHBhdGggaXMgcGVybWFuZW50bHkgZGlzYWJsZWQgYW5kIHRoZSBmdW5jdGlvbiBib2R5IGlzIHVubG9hZGVkLiBTaW5jZSBzeXNjYWxsIGZ1enplcnMgc3RhcnQgZXhlY3V0aW5nIGFmdGVyIHRoZSBrZXJuZWwgaGFzIGZ1bGx5IGJvb3RlZCBhbmQgdXNlci1zcGFjZSBpcyBydW5uaW5nLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowm2c9b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 05:20:50 +0000 UTC FinishedAt: 2026-08-07 05:22:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA1OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGBkZWZlcnJlZF9ncm93X3pvbmVgIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uIHRoYXQgaXMgb25seSBjYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3QgdG8gaW5pdGlhbGl6ZSBkZWZlcnJlZCBwYWdlcyBvbi1kZW1hbmQuIE9uY2UgYHBhZ2VfYWxsb2NfaW5pdF9sYXRlKClgIGZpbmlzaGVzIGR1cmluZyBrZXJuZWwgaW5pdGlhbGl6YXRpb24sIHRoaXMgY29kZSBwYXRoIGlzIHBlcm1hbmVudGx5IGRpc2FibGVkIGFuZCB0aGUgZnVuY3Rpb24gYm9keSBpcyB1bmxvYWRlZC4gU2luY2Ugc3lzY2FsbCBmdXp6ZXJzIHN0YXJ0IGV4ZWN1dGluZyBhZnRlciB0aGUga2VybmVsIGhhcyBmdWxseSBib290ZWQgYW5kIHVzZXItc3BhY2UgaXMgcnVubmluZywgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNToyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ5NzczMGIyODdmYzM5Nzc1NzNhMGM0MzE2MjljNGM1MTdmMzM1YWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDA1OjIxOjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xuaW5kZXggNDk4ZDYyYzRlY2UzOS4uOTExNzdiZTU4YTAwMCAxMDA2NDRcbi0tLSBhL21tL21tX2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW1faW5pdC5jXG5AQCAtMjIxNCwxMCAmIzQzOzIyMTQsMTMgQEAgYm9vbCBfX2luaXQgZGVmZXJyZWRfZ3Jvd196b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4gXHR9XG4gXG4gXHQvKlxuLVx0ICogVGhlcmUgd2VyZSBubyBwYWdlcyB0byBpbml0aWFsaXplIGFuZCBmcmVlIHdoaWNoIG1lYW5zIHRoZSB6b25lJiMzOTtzXG4tXHQgKiBtZW1vcnkgbWFwIGlzIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQuXG4mIzQzO1x0ICogVGhlIGxvb3Agb25seSB0ZXN0cyBzcGZuIGJlZm9yZSBlbnRlcmluZyBhbiBpdGVyYXRpb24sIHNvIG9uIGV4aXQgaXRcbiYjNDM7XHQgKiBtYXkgcG9pbnQgdXAgdG8gYSBzZWN0aW9uIHBhc3QgdGhlIGVuZCBvZiB0aGUgem9uZS4gIFdoZW4gaXQgZG9lcyxcbiYjNDM7XHQgKiB0aGUgcmVzdCBvZiB0aGUgem9uZSBoYXMgYWxyZWFkeSBiZWVuIGhhbmRlZCB0b1xuJiM0MztcdCAqIGRlZmVycmVkX2luaXRfbWVtbWFwX2NodW5rKCkgYW5kIG5vdGhpbmcgaXMgbGVmdCB0byBpbml0aWFsaXplLlxuIFx0ICovXG4tXHRwZ2RhdC1cdTAwM2VmaXJzdF9kZWZlcnJlZF9wZm4gPSBucl9wYWdlcyA/IHNwZm4gOiBVTE9OR19NQVg7XG4mIzQzO1x0cGdkYXQtXHUwMDNlZmlyc3RfZGVmZXJyZWRfcGZuID1cbiYjNDM7XHRcdHNwZm4gXHUwMDNjIHpvbmVfZW5kX3Bmbih6b25lKSA/IHNwZm4gOiBVTE9OR19NQVg7XG4gXG4gXHRwZ2RhdF9yZXNpemVfdW5sb2NrKHBnZGF0LCBcdTAwMjZmbGFncyk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDU6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGBkZWZlcnJlZF9ncm93X3pvbmVgIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uIHRoYXQgaXMgb25seSBjYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3QgdG8gaW5pdGlhbGl6ZSBkZWZlcnJlZCBwYWdlcyBvbi1kZW1hbmQuIE9uY2UgYHBhZ2VfYWxsb2NfaW5pdF9sYXRlKClgIGZpbmlzaGVzIGR1cmluZyBrZXJuZWwgaW5pdGlhbGl6YXRpb24sIHRoaXMgY29kZSBwYXRoIGlzIHBlcm1hbmVudGx5IGRpc2FibGVkIGFuZCB0aGUgZnVuY3Rpb24gYm9keSBpcyB1bmxvYWRlZC4gU2luY2Ugc3lzY2FsbCBmdXp6ZXJzIHN0YXJ0IGV4ZWN1dGluZyBhZnRlciB0aGUga2VybmVsIGhhcyBmdWxseSBib290ZWQgYW5kIHVzZXItc3BhY2UgaXMgcnVubmluZywgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ5NzczMGIyODdmYzM5Nzc1NzNhMGM0MzE2MjljNGM1MTdmMzM1YWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDA1OjIxOjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jCmluZGV4IDQ5OGQ2MmM0ZWNlMzkuLjkxMTc3YmU1OGEwMDAgMTAwNjQ0Ci0tLSBhL21tL21tX2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tbV9pbml0LmMKQEAgLTIyMTQsMTAgJiM0MzsyMjE0LDEzIEBAIGJvb2wgX19pbml0IGRlZmVycmVkX2dyb3dfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKQogCX0KIAogCS8qCi0JICogVGhlcmUgd2VyZSBubyBwYWdlcyB0byBpbml0aWFsaXplIGFuZCBmcmVlIHdoaWNoIG1lYW5zIHRoZSB6b25lJiMzOTtzCi0JICogbWVtb3J5IG1hcCBpcyBjb21wbGV0ZWx5IGluaXRpYWxpemVkLgomIzQzOwkgKiBUaGUgbG9vcCBvbmx5IHRlc3RzIHNwZm4gYmVmb3JlIGVudGVyaW5nIGFuIGl0ZXJhdGlvbiwgc28gb24gZXhpdCBpdAomIzQzOwkgKiBtYXkgcG9pbnQgdXAgdG8gYSBzZWN0aW9uIHBhc3QgdGhlIGVuZCBvZiB0aGUgem9uZS4gIFdoZW4gaXQgZG9lcywKJiM0MzsJICogdGhlIHJlc3Qgb2YgdGhlIHpvbmUgaGFzIGFscmVhZHkgYmVlbiBoYW5kZWQgdG8KJiM0MzsJICogZGVmZXJyZWRfaW5pdF9tZW1tYXBfY2h1bmsoKSBhbmQgbm90aGluZyBpcyBsZWZ0IHRvIGluaXRpYWxpemUuCiAJICovCi0JcGdkYXQtJmd0O2ZpcnN0X2RlZmVycmVkX3BmbiA9IG5yX3BhZ2VzID8gc3BmbiA6IFVMT05HX01BWDsKJiM0MzsJcGdkYXQtJmd0O2ZpcnN0X2RlZmVycmVkX3BmbiA9CiYjNDM7CQlzcGZuICZsdDsgem9uZV9lbmRfcGZuKHpvbmUpID8gc3BmbiA6IFVMT05HX01BWDsKIAogCXBnZGF0X3Jlc2l6ZV91bmxvY2socGdkYXQsICZhbXA7ZmxhZ3MpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA1OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2g6IEZvY3VzIG9uIEZ1bmN0aW9uIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS9tbV9pbml0LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBkZWZlcnJlZF9ncm93X3pvbmVgIGZ1bmN0aW9uLiBUaGUgY29kZSBhbHRlcnMgaG93IGBwZ2RhdC0mZ3Q7Zmlyc3RfZGVmZXJyZWRfcGZuYCBpcyBzZXQsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBhY3R1YWxseSBzb21ldGhpbmcgd2UgY2FuIG9yIHNob3VsZCBmdXp6PyYjMzQ7IFdlIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZnVuY3Rpb24mIzM5O3MgbGlmZWN5Y2xlLgoKVGhlIGNvZGUgbWVudGlvbnMgYGRlZmVycmVkX2dyb3dfem9uZWAgaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIFdhaXQsIGhvbGQgb24uIFRoaXMgbWVhbnMgaXTigJlzIG9ubHkgZXhlY3V0ZWQgZHVyaW5nIGtlcm5lbCBib290LCB5ZWFoPyBMZXQmIzM5O3MgdmVyaWZ5IHRoYXQgcXVpY2tseSBieSBkb3VibGUtY2hlY2tpbmcgYG1tL21tX2luaXQuY2AuIFRoZSBwYXRjaCBkaWZmICpkb2VzKiBzYXkgYGJvb2wgX19pbml0IGRlZmVycmVkX2dyb3dfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKWAuCgpJZiBpdCYjMzk7cyB0cnVseSBgX19pbml0YCwgaXTigJlzIHByb2JhYmx5IG5vdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IGZ1enppbmcgZ2VuZXJhbGx5IHRhcmdldHMgcnVudGltZSBiZWhhdmlvciwgc3lzY2FsbHMsIGFuZCB0aGluZ3MgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGR5bmFtaWNhbGx5LiBOb3cgSSYjMzk7bSBkb3VidGluZywgdGhvdWdoLCBiZWNhdXNlLCB3aGlsZSBJIHRoaW5rIHRoaXMgaXMgcmlnaHQsIGlzIHRoZXJlIGEgY2hhbmNlIGl04oCZcyBhbHNvIGNhbGxlZCBhdCBydW50aW1lPyBUaGUgZGlmZiAqc2F5cyogYF9faW5pdGAsIHNvIGxldOKAmXMgZ2V0IG9uIHRoZSBjb2RlIGFuZCBkb3VibGUtY2hlY2sgdG8gYmUgc3VyZSBpdCBpcyBkZWZpbml0ZWx5IG9ubHkgY2FsbGVkIGF0IGJvb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmZXJyZWRfZ3Jvd196b25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21tX2luaXQuYz0yMTA4PXN0YXRpYyBpbnQgX19pbml0IGRlZmVycmVkX2luaXRfbWVtbWFwKHZvaWQgKmRhdGEpXG4tLVxubW0vbW1faW5pdC5jLTIxNzgtICovXG5tbS9tbV9pbml0LmM6MjE3OTpib29sIF9faW5pdCBkZWZlcnJlZF9ncm93X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcbm1tL21tX2luaXQuYy0yMTgwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBfX2luaXRgLiBSaWdodC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRoYXQgdGhpcyBpcyBib290LXRpbWUgaW5pdGlhbGl6YXRpb24gY29kZS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcHJvYmxlbSBmb3Igc3lzY2FsbCBmdXp6ZXJzLCBpc24mIzM5O3QgaXQ/IFRoZXkmIzM5O3JlIHVzdWFsbHkgb25seSBlZmZlY3RpdmUgYWZ0ZXIgdGhlIHN5c3RlbSBpcyB1cCBhbmQgcnVubmluZy4gSWYgdGhlIGNvZGUgZXhlY3V0ZXMgYmVmb3JlIHRoZSBmdXp6ZXIgaXMgZXZlbiBpbml0aWFsaXplZCwgdGhlbiBpdCYjMzk7cyBhIG5vbi1zdGFydGVyLCBhbmQgaXQgd291bGQgYmUgYSB3YXN0ZSBvZiB0aW1lIHRyeWluZyB0byB0YXJnZXQgaXQgZGlyZWN0bHkuCgpCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyB0aGVyZSAqYW55KiBwb3NzaWJpbGl0eSB0aGlzIGluaXRpYWxpemF0aW9uIGNvZGUgaXMgaW52b2tlZCBhdCBzb21lIGxhdGVyIHBvaW50PyBNYXliZSB0cmlnZ2VyZWQgYnkgYSBzcGVjaWZpYyBldmVudCBvciBhZnRlciBhIGNlcnRhaW4gZGVsYXk/IEl0JiMzOTtzIHdvcnRoIGEgc2Vjb25kIHRob3VnaHQuIExldCYjMzk7cyBzZWUuLi4gdGhlIGtleSBoZXJlIGlzIHRvIGZpbmQgb3V0IGlmIHRoZXJlIGFyZSBhbnkgaW5kaXJlY3QgY2FsbHMgdG8gdGhpcyBjb2RlLiBTbywgbGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZmluZCBhbnkgY2FsbHMgdG8gYGRlZmVycmVkX2dyb3dfem9uZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmZXJyZWRfZ3Jvd196b25lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9MTMyMz1zdGF0aWMgaW5saW5lIGJvb2wgZGVmZXJyZWRfcGFnZXNfZW5hYmxlZCh2b2lkKVxuLS1cbm1tL2ludGVybmFsLmgtMTMyNy1cbm1tL2ludGVybmFsLmg6MTMyODpib29sIF9faW5pdCBkZWZlcnJlZF9ncm93X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcik7XG5tbS9pbnRlcm5hbC5oLTEzMjktI2Vsc2Vcbi0tXG5tbS9tbV9pbml0LmM9MjEwOD1zdGF0aWMgaW50IF9faW5pdCBkZWZlcnJlZF9pbml0X21lbW1hcCh2b2lkICpkYXRhKVxuLS1cbm1tL21tX2luaXQuYy0yMTc4LSAqL1xubW0vbW1faW5pdC5jOjIxNzk6Ym9vbCBfX2luaXQgZGVmZXJyZWRfZ3Jvd196b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG5tbS9tbV9pbml0LmMtMjE4MC17XG4tLVxubW0vcGFnZV9hbGxvYy5jPTMwOT1ERUZJTkVfU1RBVElDX0tFWV9UUlVFKGRlZmVycmVkX3BhZ2VzKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMzExLS8qXG5tbS9wYWdlX2FsbG9jLmM6MzEyOiAqIGRlZmVycmVkX2dyb3dfem9uZSgpIGlzIF9faW5pdCwgYnV0IGl0IGlzIGNhbGxlZCBmcm9tXG5tbS9wYWdlX2FsbG9jLmMtMzEzLSAqIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoKSBkdXJpbmcgZWFybHkgYm9vdCB1bnRpbCBkZWZlcnJlZF9wYWdlcyBwZXJtYW5lbnRseVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz0zMTc9c3RhdGljIGJvb2wgX19yZWZcbm1tL3BhZ2VfYWxsb2MuYzozMTg6X2RlZmVycmVkX2dyb3dfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKVxubW0vcGFnZV9hbGxvYy5jLTMxOS17XG5tbS9wYWdlX2FsbG9jLmM6MzIwOlx0cmV0dXJuIGRlZmVycmVkX2dyb3dfem9uZSh6b25lLCBvcmRlcik7XG5tbS9wYWdlX2FsbG9jLmMtMzIxLX1cbm1tL3BhZ2VfYWxsb2MuYy0zMjItI2Vsc2Vcbm1tL3BhZ2VfYWxsb2MuYzozMjM6c3RhdGljIGlubGluZSBib29sIF9kZWZlcnJlZF9ncm93X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcbm1tL3BhZ2VfYWxsb2MuYy0zMjQte1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz0zNzkyPWdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwgaW50IGFsbG9jX2ZsYWdzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0zOTExLVx0XHRcdGlmIChkZWZlcnJlZF9wYWdlc19lbmFibGVkKCkpIHtcbm1tL3BhZ2VfYWxsb2MuYzozOTEyOlx0XHRcdFx0aWYgKF9kZWZlcnJlZF9ncm93X3pvbmUoem9uZSwgb3JkZXIpKVxubW0vcGFnZV9hbGxvYy5jLTM5MTMtXHRcdFx0XHRcdGdvdG8gdHJ5X3RoaXNfem9uZTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMzk1NC1cdFx0XHRpZiAoZGVmZXJyZWRfcGFnZXNfZW5hYmxlZCgpKSB7XG5tbS9wYWdlX2FsbG9jLmM6Mzk1NTpcdFx0XHRcdGlmIChfZGVmZXJyZWRfZ3Jvd196b25lKHpvbmUsIG9yZGVyKSlcbm1tL3BhZ2VfYWxsb2MuYy0zOTU2LVx0XHRcdFx0XHRnb3RvIHRyeV90aGlzX3pvbmU7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTUwOTU9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MTc2LVx0XHRpZiAoZGVmZXJyZWRfcGFnZXNfZW5hYmxlZCgpKSB7XG5tbS9wYWdlX2FsbG9jLmM6NTE3NzpcdFx0XHRpZiAoX2RlZmVycmVkX2dyb3dfem9uZSh6b25lLCAwKSlcbm1tL3BhZ2VfYWxsb2MuYy01MTc4LVx0XHRcdFx0Z290byByZXRyeV90aGlzX3pvbmU7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTc4NjY9c3RydWN0IHBhZ2UgKmFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mKGdmcF90IGdmcF9mbGFncywgaW50IG5pZCwgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03OTE1LVxubW0vcGFnZV9hbGxvYy5jOjc5MTY6XHQvKiBCYWlsb3V0LCBzaW5jZSBfZGVmZXJyZWRfZ3Jvd196b25lKCkgbmVlZHMgdG8gdGFrZSBhIGxvY2sgKi9cbm1tL3BhZ2VfYWxsb2MuYy03OTE3LVx0aWYgKGRlZmVycmVkX3BhZ2VzX2VuYWJsZWQoKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTUwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKlVuZGVyc3RhbmRpbmcgYGRlZmVycmVkX2dyb3dfem9uZWAgaW4gdGhlIExpbnV4IE1lbW9yeSBNYW5hZ2VtZW50IENvbnRleHQqKgoKUmlnaHQsIHNvIGBkZWZlcnJlZF9ncm93X3pvbmVgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBgX19pbml0YCBzZWN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBlYXJseSBib290IHByb2Nlc3MuIE15IHByaW1hcnkgZm9jdXMgaXMgdW5kZXJzdGFuZGluZyBpdHMgbGlmZWN5Y2xlLCBhbmQgaXQgc2VlbXMgdGhhdCBgZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdCgpYCBjYWxscyB0aGlzIGZ1bmN0aW9uIGVhcmx5IGluIGJvb3QuIFRoZW4sIG9uY2UgYGRlZmVycmVkX3BhZ2VzYCBpcyBwZXJtYW5lbnRseSBkaXNhYmxlZCwgYGRlZmVycmVkX2dyb3dfem9uZWAgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCBpdCYjMzk7cyBpbiBgX19pbml0YCwgc28gaXQgZ2V0cyBmcmVlZCBhZnRlciB0aGUgYm9vdCBzZXF1ZW5jZSBjb21wbGV0ZXMuCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGZ1bmN0aW9u4oCZcyBiZWhhdmlvdXIsIEkgc2hvdWxkIHJlYWQgYXJvdW5kIGxpbmUgMzEyIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBzcGVjaWZpYyBjb250ZXh0IGZvciBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgcGFnZSBhbGxvY2F0aW9uIHN0cmF0ZWd5LCBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQmIzM5O3MgaW52b2tlZC4gSSBleHBlY3QgdGhhdCB3aWxsIGNsYXJpZnkgd2hhdCBgZGVmZXJyZWRfcGFnZXNgIGFjdHVhbGx5IGRvZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDU6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMDpcdFxuIDMwMTpcdGludCBwYWdlX2dyb3VwX2J5X21vYmlsaXR5X2Rpc2FibGVkIF9fcmVhZF9tb3N0bHk7XG4gMzAyOlx0XG4gMzAzOlx0I2lmZGVmIENPTkZJR19ERUZFUlJFRF9TVFJVQ1RfUEFHRV9JTklUXG4gMzA0Olx0LypcbiAzMDU6XHQgKiBEdXJpbmcgYm9vdCB3ZSBpbml0aWFsaXplIGRlZmVycmVkIHBhZ2VzIG9uLWRlbWFuZCwgYXMgbmVlZGVkLCBidXQgb25jZVxuIDMwNjpcdCAqIHBhZ2VfYWxsb2NfaW5pdF9sYXRlKCkgaGFzIGZpbmlzaGVkLCB0aGUgZGVmZXJyZWQgcGFnZXMgYXJlIGFsbCBpbml0aWFsaXplZCxcbiAzMDc6XHQgKiBhbmQgd2UgY2FuIHBlcm1hbmVudGx5IGRpc2FibGUgdGhhdCBwYXRoLlxuIDMwODpcdCAqL1xuIDMwOTpcdERFRklORV9TVEFUSUNfS0VZX1RSVUUoZGVmZXJyZWRfcGFnZXMpO1xuIDMxMDpcdFxuIDMxMTpcdC8qXG4gMzEyOlx0ICogZGVmZXJyZWRfZ3Jvd196b25lKCkgaXMgX19pbml0LCBidXQgaXQgaXMgY2FsbGVkIGZyb21cbiAzMTM6XHQgKiBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KCkgZHVyaW5nIGVhcmx5IGJvb3QgdW50aWwgZGVmZXJyZWRfcGFnZXMgcGVybWFuZW50bHlcbiAzMTQ6XHQgKiBkaXNhYmxlcyB0aGlzIGNhbGwuIFRoaXMgaXMgd2h5IHdlIGhhdmUgcmVmZGF0YSB3cmFwcGVyIHRvIGF2b2lkIHdhcm5pbmcsXG4gMzE1Olx0ICogYW5kIHRvIGVuc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiBib2R5IGdldHMgdW5sb2FkZWQuXG4gMzE2Olx0ICovXG4gMzE3Olx0c3RhdGljIGJvb2wgX19yZWZcbiAzMTg6XHRfZGVmZXJyZWRfZ3Jvd196b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4gMzE5Olx0e1xuIDMyMDpcdFx0cmV0dXJuIGRlZmVycmVkX2dyb3dfem9uZSh6b25lLCBvcmRlcik7XG4gMzIxOlx0fVxuIDMyMjpcdCNlbHNlXG4gMzIzOlx0c3RhdGljIGlubGluZSBib29sIF9kZWZlcnJlZF9ncm93X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcbiAzMjQ6XHR7XG4gMzI1Olx0XHRyZXR1cm4gZmFsc2U7XG4gMzI2Olx0fVxuIDMyNzpcdCNlbmRpZiAvKiBDT05GSUdfREVGRVJSRURfU1RSVUNUX1BBR0VfSU5JVCAqL1xuIDMyODpcdFxuIDMyOTpcdC8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGJpdG1hcCBzdG9yaW5nIGJpdHMgYWZmZWN0aW5nIGEgYmxvY2sgb2YgcGFnZXMgKi9cbiAzMzA6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgKmdldF9wYWdlYmxvY2tfYml0bWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxuIDMzMTpcdFx0XHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4gMzMyOlx0e1xuIDMzMzpcdCNpZmRlZiBDT05GSUdfU1BBUlNFTUVNXG4gMzM0Olx0XHRyZXR1cm4gc2VjdGlvbl90b191c2VtYXAoX19wZm5fdG9fc2VjdGlvbihwZm4pKTtcbiAzMzU6XHQjZWxzZVxuIDMzNjpcdFx0cmV0dXJuIHBhZ2Vfem9uZShwYWdlKS1cdTAwM2VwYWdlYmxvY2tfZmxhZ3M7XG4gMzM3Olx0I2VuZGlmIC8qIENPTkZJR19TUEFSU0VNRU0gKi9cbiAzMzg6XHR9XG4gMzM5Olx0XG4gMzQwOlx0c3RhdGljIGlubGluZSBpbnQgcGZuX3RvX2JpdGlkeChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4pXG4gMzQxOlx0e1xuIDM0MjpcdCNpZmRlZiBDT05GSUdfU1BBUlNFTUVNXG4gMzQzOlx0XHRwZm4gXHUwMDI2PSAoUEFHRVNfUEVSX1NFQ1RJT04tMSk7XG4gMzQ0Olx0I2Vsc2VcbiAzNDU6XHRcdHBmbiA9IHBmbiAtIHBhZ2VibG9ja19zdGFydF9wZm4ocGFnZV96b25lKHBhZ2UpLVx1MDAzZXpvbmVfc3RhcnRfcGZuKTtcbiAzNDY6XHQjZW5kaWYgLyogQ09ORklHX1NQQVJTRU1FTSAqL1xuIDM0NzpcdFx0cmV0dXJuIChwZm4gXHUwMDNlXHUwMDNlIHBhZ2VibG9ja19vcmRlcikgKiBOUl9QQUdFQkxPQ0tfQklUUztcbiAzNDg6XHR9XG4gMzQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA1NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzOiBgZGVmZXJyZWRfZ3Jvd196b25lYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZGVmZXJyZWRfZ3Jvd196b25lYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQmIzM5O3Mgb25seSBhY3RpdmUgZHVyaW5nIHRoZSB2ZXJ5IGVhcmx5IGJvb3QgcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBpbml0aWFsaXppbmcgZGVmZXJyZWQgcGFnZXMsIGJ1dCBvbmNlIGBwYWdlX2FsbG9jX2luaXRfbGF0ZSgpYCBpcyBkb25lLCB0aGF0IGVudGlyZSBjb2RlIHBhdGggaXMgcGVybWFuZW50bHkgZGlzYWJsZWQuIFRoZSBzeXN0ZW0gaXMgcGFzdCB0aGUgcG9pbnQgb2YgbmVlZGluZyB0byB1c2UgdGhpcywgYW5kIHRoZSBjb2RlIGlzbiYjMzk7dCBldmVuIHJlc2lkZW50IGluIG1lbW9yeSBhbnltb3JlLgoKU2luY2Ugc3l6a2FsbGVyIGFuZCBvdGhlciBmdXp6ZXJzIGRvbiYjMzk7dCBydW4gdW50aWwgYWZ0ZXIgdGhlIGtlcm5lbCBpcyBmdWxseSBib290ZWQgYW5kIHVzZXItc3BhY2UgaXMgaW5pdGlhbGl6ZWQsIHRoZXkgc2ltcGx5IGNhbiYjMzk7dCByZWFjaCB0aGlzIGNvZGUuIEl0JiMzOTtzIGNvbXBsZXRlbHkgaW5hY2Nlc3NpYmxlIGZvciB0aGVpciBwdXJwb3Nlcy4gVGhlcmVmb3JlLCB0aGVyZSYjMzk7cyBubyByZWFsaXN0aWMgd2F5IHRvIHVzZSB0aGVzZSBraW5kcyBvZiB0b29scyB0byBmdXp6IGBkZWZlcnJlZF9ncm93X3pvbmVgLgoKSSBzaG91bGQgYmUgdGhvcm91Z2ggdGhvdWdoLCBsZXQgbWUgbWFrZSBzdXJlLiBMZXQgbWUgZG91YmxlLWNoZWNrIGhvdyBgZGVmZXJyZWRfZ3Jvd196b25lYCBnZXRzIGNhbGxlZC4gUmlnaHQsIHNvIGBwYWdlX2FsbG9jX2luaXRfbGF0ZSgpYCBpcyBhbiBlYXJseSBpbml0aWFsaXphdGlvbiByb3V0aW5lLiBJdCBzZWVtcyB0byBleGVjdXRlIGR1cmluZyBib290LiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBjb3JyZWN0LCBhbmQgY29uZmlybSB0aGF0IHRoZXJlIGFyZSBubyBoaWRkZW4gd2F5cyB0byB0cmlnZ2VyIHRoaXMuIEkgdGhpbmsgdGhhdCBJJiMzOTt2ZSBzZWVuIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBrZXJuZWxfaW5pdF9mcmVlYWJsZWAgd2hpY2ggaXMgYWxzbyBwYXJ0IG9mIGVhcmx5IGJvb3QuIE9rYXksIHNvIHRoYXQgc2hvdWxkIGJlIHJpZ2h0LCBsZXQgbWUganVzdCB2ZXJpZnkgYHBhZ2VfYWxsb2NfaW5pdF9sYXRlYC4gCkl0JiMzOTtzIGRlZmluaXRlbHkgbm90IHdvcnRoIGZ1enppbmcuIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VfYWxsb2NfaW5pdF9sYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZ2ZwLmg9NDAyPXZvaWQgZHJhaW5fbG9jYWxfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUpO1xuaW5jbHVkZS9saW51eC9nZnAuaC00MDMtXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQwNDp2b2lkIHBhZ2VfYWxsb2NfaW5pdF9sYXRlKHZvaWQpO1xuaW5jbHVkZS9saW51eC9nZnAuaC00MDUtdm9pZCBzZXR1cF9wY3BfY2FjaGVpbmZvKHVuc2lnbmVkIGludCBjcHUpO1xuLS1cbmluaXQvbWFpbi5jPTE2Mjk9c3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGtlcm5lbF9pbml0X2ZyZWVhYmxlKHZvaWQpXG4tLVxuaW5pdC9tYWluLmMtMTY1NS1cdHBhZGF0YV9pbml0KCk7XG5pbml0L21haW4uYzoxNjU2Olx0cGFnZV9hbGxvY19pbml0X2xhdGUoKTtcbmluaXQvbWFpbi5jLTE2NTctXG4tLVxubW0vbW1faW5pdC5jPTIzMTA9c3RhdGljIHZvaWQgX19pbml0IG1lbV9pbml0X3ByaW50X2luZm8odm9pZCk7XG5tbS9tbV9pbml0LmM6MjMxMTp2b2lkIF9faW5pdCBwYWdlX2FsbG9jX2luaXRfbGF0ZSh2b2lkKVxubW0vbW1faW5pdC5jLTIzMTIte1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz0zMDE9aW50IHBhZ2VfZ3JvdXBfYnlfbW9iaWxpdHlfZGlzYWJsZWQgX19yZWFkX21vc3RseTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMzA1LSAqIER1cmluZyBib290IHdlIGluaXRpYWxpemUgZGVmZXJyZWQgcGFnZXMgb24tZGVtYW5kLCBhcyBuZWVkZWQsIGJ1dCBvbmNlXG5tbS9wYWdlX2FsbG9jLmM6MzA2OiAqIHBhZ2VfYWxsb2NfaW5pdF9sYXRlKCkgaGFzIGZpbmlzaGVkLCB0aGUgZGVmZXJyZWQgcGFnZXMgYXJlIGFsbCBpbml0aWFsaXplZCxcbm1tL3BhZ2VfYWxsb2MuYy0zMDctICogYW5kIHdlIGNhbiBwZXJtYW5lbnRseSBkaXNhYmxlIHRoYXQgcGF0aC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDU6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA1OAoJCQkJCQkJb3V0cHV0OiAxMTgKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBLZXJuZWwgTWVtb3J5IEFsbG9jYXRpb24gZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgdHJhY2VkIHRoZSBjYWxsIHN0YWNrIGhlcmUuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYHBhZ2VfYWxsb2NfaW5pdF9sYXRlYCBnZXRzIGNhbGxlZCBmcm9tIGBrZXJuZWxfaW5pdF9mcmVlYWJsZWAgd2l0aGluIGBpbml0L21haW4uY2AuIFRoaXMgaXMgaGFwcGVuaW5nICp3YXkqIGJlZm9yZSB0aGUgdXNlci1zcGFjZSBgaW5pdGAgcHJvY2VzcyBldmVuIGdldHMgYSBjaGFuY2UgdG8gc3RhcnQuIFRoaW5raW5nIGFib3V0IGl0LCB0aGF0IG1lYW5zIHRoZSBgZGVmZXJyZWRfZ3Jvd196b25lYCBjb2RlIHBhdGggaXMgYWJzb2x1dGVseSBpbmFjY2Vzc2libGUgZnJvbSBhbnkgZnV6emluZyBJJiMzOTtkIGJlIGRvaW5nIGZyb20gdXNlciBzcGFjZS4gSSBtZWFuLCBpdCYjMzk7cyBqdXN0IG5vdCByZWFjaGFibGUuIEdpdmVuIHRoYXQsIHRoZXJlJiMzOTtzIG5vIHBvaW50IGluIHdhc3RpbmcgY3ljbGVzIG9uIGl0LiBJJiMzOTttIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgbW92ZSBvbiB0byBzb21ldGhpbmcgdGhhdCYjMzk7cyBhY3R1YWxseSBzdXNjZXB0aWJsZSB0byB0aGlzIGtpbmQgb2YgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA1OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgbW9kaWZpZWQgZnVuY3Rpb24gYGRlZmVycmVkX2dyb3dfem9uZWAgaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24gdGhhdCBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgZWFybHkgYm9vdCB0byBpbml0aWFsaXplIGRlZmVycmVkIHBhZ2VzIG9uLWRlbWFuZC4gT25jZSBgcGFnZV9hbGxvY19pbml0X2xhdGUoKWAgZmluaXNoZXMgZHVyaW5nIGtlcm5lbCBpbml0aWFsaXphdGlvbiwgdGhpcyBjb2RlIHBhdGggaXMgcGVybWFuZW50bHkgZGlzYWJsZWQgYW5kIHRoZSBmdW5jdGlvbiBib2R5IGlzIHVubG9hZGVkLiBTaW5jZSBzeXNjYWxsIGZ1enplcnMgc3RhcnQgZXhlY3V0aW5nIGFmdGVyIHRoZSBrZXJuZWwgaGFzIGZ1bGx5IGJvb3RlZCBhbmQgdXNlci1zcGFjZSBpcyBydW5uaW5nLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBtb2RpZmllZCBmdW5jdGlvbiBgZGVmZXJyZWRfZ3Jvd196b25lYCBpcyBhbiBgX19pbml0YCBmdW5jdGlvbiB0aGF0IGlzIG9ubHkgY2FsbGVkIGR1cmluZyBlYXJseSBib290IHRvIGluaXRpYWxpemUgZGVmZXJyZWQgcGFnZXMgb24tZGVtYW5kLiBPbmNlIGBwYWdlX2FsbG9jX2luaXRfbGF0ZSgpYCBmaW5pc2hlcyBkdXJpbmcga2VybmVsIGluaXRpYWxpemF0aW9uLCB0aGlzIGNvZGUgcGF0aCBpcyBwZXJtYW5lbnRseSBkaXNhYmxlZCBhbmQgdGhlIGZ1bmN0aW9uIGJvZHkgaXMgdW5sb2FkZWQuIFNpbmNlIHN5c2NhbGwgZnV6emVycyBzdGFydCBleGVjdXRpbmcgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgZnVsbHkgYm9vdGVkIGFuZCB1c2VyLXNwYWNlIGlzIHJ1bm5pbmcsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNToyMjowMC4wNzM3NDA4NDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ0NDA5NjUzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgbW9kaWZpZWQgZnVuY3Rpb24gYGRlZmVycmVkX2dyb3dfem9uZWAgaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24gdGhhdCBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgZWFybHkgYm9vdCB0byBpbml0aWFsaXplIGRlZmVycmVkIHBhZ2VzIG9uLWRlbWFuZC4gT25jZSBgcGFnZV9hbGxvY19pbml0X2xhdGUoKWAgZmluaXNoZXMgZHVyaW5nIGtlcm5lbCBpbml0aWFsaXphdGlvbiwgdGhpcyBjb2RlIHBhdGggaXMgcGVybWFuZW50bHkgZGlzYWJsZWQgYW5kIHRoZSBmdW5jdGlvbiBib2R5IGlzIHVubG9hZGVkLiBTaW5jZSBzeXNjYWxsIGZ1enplcnMgc3RhcnQgZXhlY3V0aW5nIGFmdGVyIHRoZSBrZXJuZWwgaGFzIGZ1bGx5IGJvb3RlZCBhbmQgdXNlci1zcGFjZSBpcyBydW5uaW5nLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNToyMjowMC4wNzM3NDcxODJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MzAyNTY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQ5NzczMGIyODdmYzM5Nzc1NzNhMGM0MzE2MjljNGM1MTdmMzM1YWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAwNToyMTo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcXG5pbmRleCA0OThkNjJjNGVjZTM5Li45MTE3N2JlNThhMDAwIDEwMDY0NFxcbi0tLSBhL21tL21tX2luaXQuY1xcbisrKyBiL21tL21tX2luaXQuY1xcbkBAIC0yMjE0LDEwICsyMjE0LDEzIEBAIGJvb2wgX19pbml0IGRlZmVycmVkX2dyb3dfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbiBcXHR9XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBUaGVyZSB3ZXJlIG5vIHBhZ2VzIHRvIGluaXRpYWxpemUgYW5kIGZyZWUgd2hpY2ggbWVhbnMgdGhlIHpvbmUnc1xcbi1cXHQgKiBtZW1vcnkgbWFwIGlzIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQuXFxuK1xcdCAqIFRoZSBsb29wIG9ubHkgdGVzdHMgc3BmbiBiZWZvcmUgZW50ZXJpbmcgYW4gaXRlcmF0aW9uLCBzbyBvbiBleGl0IGl0XFxuK1xcdCAqIG1heSBwb2ludCB1cCB0byBhIHNlY3Rpb24gcGFzdCB0aGUgZW5kIG9mIHRoZSB6b25lLiAgV2hlbiBpdCBkb2VzLFxcbitcXHQgKiB0aGUgcmVzdCBvZiB0aGUgem9uZSBoYXMgYWxyZWFkeSBiZWVuIGhhbmRlZCB0b1xcbitcXHQgKiBkZWZlcnJlZF9pbml0X21lbW1hcF9jaHVuaygpIGFuZCBub3RoaW5nIGlzIGxlZnQgdG8gaW5pdGlhbGl6ZS5cXG4gXFx0ICovXFxuLVxcdHBnZGF0LVxcdTAwM2VmaXJzdF9kZWZlcnJlZF9wZm4gPSBucl9wYWdlcyA/IHNwZm4gOiBVTE9OR19NQVg7XFxuK1xcdHBnZGF0LVxcdTAwM2VmaXJzdF9kZWZlcnJlZF9wZm4gPVxcbitcXHRcXHRzcGZuIFxcdTAwM2Mgem9uZV9lbmRfcGZuKHpvbmUpID8gc3BmbiA6IFVMT05HX01BWDtcXG4gXFxuIFxcdHBnZGF0X3Jlc2l6ZV91bmxvY2socGdkYXQsIFxcdTAwMjZmbGFncyk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNToyMjowMC40Njc0NTc3NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI2MDUwMzcyODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBmdW5jdGlvbiBgZGVmZXJyZWRfZ3Jvd196b25lYCBpcyBhbiBgX19pbml0YCBmdW5jdGlvbiB0aGF0IGlzIG9ubHkgY2FsbGVkIGR1cmluZyBlYXJseSBib290IHRvIGluaXRpYWxpemUgZGVmZXJyZWQgcGFnZXMgb24tZGVtYW5kLiBPbmNlIGBwYWdlX2FsbG9jX2luaXRfbGF0ZSgpYCBmaW5pc2hlcyBkdXJpbmcga2VybmVsIGluaXRpYWxpemF0aW9uLCB0aGlzIGNvZGUgcGF0aCBpcyBwZXJtYW5lbnRseSBkaXNhYmxlZCBhbmQgdGhlIGZ1bmN0aW9uIGJvZHkgaXMgdW5sb2FkZWQuIFNpbmNlIHN5c2NhbGwgZnV6emVycyBzdGFydCBleGVjdXRpbmcgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgZnVsbHkgYm9vdGVkIGFuZCB1c2VyLXNwYWNlIGlzIHJ1bm5pbmcsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ5NzczMGIyODdmYzM5Nzc1NzNhMGM0MzE2MjljNGM1MTdmMzM1YWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDA1OjIxOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXG5pbmRleCA0OThkNjJjNGVjZTM5Li45MTE3N2JlNThhMDAwIDEwMDY0NFxuLS0tIGEvbW0vbW1faW5pdC5jXG4rKysgYi9tbS9tbV9pbml0LmNcbkBAIC0yMjE0LDEwICsyMjE0LDEzIEBAIGJvb2wgX19pbml0IGRlZmVycmVkX2dyb3dfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuIFx0fVxuIFxuIFx0Lypcbi1cdCAqIFRoZXJlIHdlcmUgbm8gcGFnZXMgdG8gaW5pdGlhbGl6ZSBhbmQgZnJlZSB3aGljaCBtZWFucyB0aGUgem9uZSdzXG4tXHQgKiBtZW1vcnkgbWFwIGlzIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQuXG4rXHQgKiBUaGUgbG9vcCBvbmx5IHRlc3RzIHNwZm4gYmVmb3JlIGVudGVyaW5nIGFuIGl0ZXJhdGlvbiwgc28gb24gZXhpdCBpdFxuK1x0ICogbWF5IHBvaW50IHVwIHRvIGEgc2VjdGlvbiBwYXN0IHRoZSBlbmQgb2YgdGhlIHpvbmUuICBXaGVuIGl0IGRvZXMsXG4rXHQgKiB0aGUgcmVzdCBvZiB0aGUgem9uZSBoYXMgYWxyZWFkeSBiZWVuIGhhbmRlZCB0b1xuK1x0ICogZGVmZXJyZWRfaW5pdF9tZW1tYXBfY2h1bmsoKSBhbmQgbm90aGluZyBpcyBsZWZ0IHRvIGluaXRpYWxpemUuXG4gXHQgKi9cbi1cdHBnZGF0LVx1MDAzZWZpcnN0X2RlZmVycmVkX3BmbiA9IG5yX3BhZ2VzID8gc3BmbiA6IFVMT05HX01BWDtcbitcdHBnZGF0LVx1MDAzZWZpcnN0X2RlZmVycmVkX3BmbiA9XG4rXHRcdHNwZm4gXHUwMDNjIHpvbmVfZW5kX3Bmbih6b25lKSA/IHNwZm4gOiBVTE9OR19NQVg7XG4gXG4gXHRwZ2RhdF9yZXNpemVfdW5sb2NrKHBnZGF0LCBcdTAwMjZmbGFncyk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNToyMjowMC40Njc0NTg5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NTY3MzExOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2g6IEZvY3VzIG9uIEZ1bmN0aW9uIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0vbW1faW5pdC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZGVmZXJyZWRfZ3Jvd196b25lYCBmdW5jdGlvbi4gVGhlIGNvZGUgYWx0ZXJzIGhvdyBgcGdkYXQtXHUwMDNlZmlyc3RfZGVmZXJyZWRfcGZuYCBpcyBzZXQsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiSXMgdGhpcyBhY3R1YWxseSBzb21ldGhpbmcgd2UgY2FuIG9yIHNob3VsZCBmdXp6P1wiIFdlIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZnVuY3Rpb24ncyBsaWZlY3ljbGUuXG5cblRoZSBjb2RlIG1lbnRpb25zIGBkZWZlcnJlZF9ncm93X3pvbmVgIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBXYWl0LCBob2xkIG9uLiBUaGlzIG1lYW5zIGl04oCZcyBvbmx5IGV4ZWN1dGVkIGR1cmluZyBrZXJuZWwgYm9vdCwgeWVhaD8gTGV0J3MgdmVyaWZ5IHRoYXQgcXVpY2tseSBieSBkb3VibGUtY2hlY2tpbmcgYG1tL21tX2luaXQuY2AuIFRoZSBwYXRjaCBkaWZmICpkb2VzKiBzYXkgYGJvb2wgX19pbml0IGRlZmVycmVkX2dyb3dfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKWAuXG5cbklmIGl0J3MgdHJ1bHkgYF9faW5pdGAsIGl04oCZcyBwcm9iYWJseSBub3QgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgZ2l2ZW4gdGhhdCBmdXp6aW5nIGdlbmVyYWxseSB0YXJnZXRzIHJ1bnRpbWUgYmVoYXZpb3IsIHN5c2NhbGxzLCBhbmQgdGhpbmdzIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBkeW5hbWljYWxseS4gTm93IEknbSBkb3VidGluZywgdGhvdWdoLCBiZWNhdXNlLCB3aGlsZSBJIHRoaW5rIHRoaXMgaXMgcmlnaHQsIGlzIHRoZXJlIGEgY2hhbmNlIGl04oCZcyBhbHNvIGNhbGxlZCBhdCBydW50aW1lPyBUaGUgZGlmZiAqc2F5cyogYF9faW5pdGAsIHNvIGxldOKAmXMgZ2V0IG9uIHRoZSBjb2RlIGFuZCBkb3VibGUtY2hlY2sgdG8gYmUgc3VyZSBpdCBpcyBkZWZpbml0ZWx5IG9ubHkgY2FsbGVkIGF0IGJvb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNToyMjowNi4wMjQxOTMzNjhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5NDMzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmZXJyZWRfZ3Jvd196b25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21tX2luaXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tbV9pbml0LmM9MjEwOD1zdGF0aWMgaW50IF9faW5pdCBkZWZlcnJlZF9pbml0X21lbW1hcCh2b2lkICpkYXRhKVxcbi0tXFxubW0vbW1faW5pdC5jLTIxNzgtICovXFxubW0vbW1faW5pdC5jOjIxNzk6Ym9vbCBfX2luaXQgZGVmZXJyZWRfZ3Jvd196b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxubW0vbW1faW5pdC5jLTIxODAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNToyMjowNi4wNjgxNDMxMDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI1MDcwOTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYF9faW5pdGAuIFJpZ2h0LiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdGhhdCB0aGlzIGlzIGJvb3QtdGltZSBpbml0aWFsaXphdGlvbiBjb2RlLiBUaGF0J3MgYSBjbGFzc2ljIHByb2JsZW0gZm9yIHN5c2NhbGwgZnV6emVycywgaXNuJ3QgaXQ/IFRoZXkncmUgdXN1YWxseSBvbmx5IGVmZmVjdGl2ZSBhZnRlciB0aGUgc3lzdGVtIGlzIHVwIGFuZCBydW5uaW5nLiBJZiB0aGUgY29kZSBleGVjdXRlcyBiZWZvcmUgdGhlIGZ1enplciBpcyBldmVuIGluaXRpYWxpemVkLCB0aGVuIGl0J3MgYSBub24tc3RhcnRlciwgYW5kIGl0IHdvdWxkIGJlIGEgd2FzdGUgb2YgdGltZSB0cnlpbmcgdG8gdGFyZ2V0IGl0IGRpcmVjdGx5LlxuXG5CdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyB0aGVyZSAqYW55KiBwb3NzaWJpbGl0eSB0aGlzIGluaXRpYWxpemF0aW9uIGNvZGUgaXMgaW52b2tlZCBhdCBzb21lIGxhdGVyIHBvaW50PyBNYXliZSB0cmlnZ2VyZWQgYnkgYSBzcGVjaWZpYyBldmVudCBvciBhZnRlciBhIGNlcnRhaW4gZGVsYXk/IEl0J3Mgd29ydGggYSBzZWNvbmQgdGhvdWdodC4gTGV0J3Mgc2VlLi4uIHRoZSBrZXkgaGVyZSBpcyB0byBmaW5kIG91dCBpZiB0aGVyZSBhcmUgYW55IGluZGlyZWN0IGNhbGxzIHRvIHRoaXMgY29kZS4gU28sIGxldCdzIHNlZSBpZiB3ZSBjYW4gZmluZCBhbnkgY2FsbHMgdG8gYGRlZmVycmVkX2dyb3dfem9uZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3OTgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNToyMjowOS4zOTMyMjMxMjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1OTQyODg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZlcnJlZF9ncm93X3pvbmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD0xMzIzPXN0YXRpYyBpbmxpbmUgYm9vbCBkZWZlcnJlZF9wYWdlc19lbmFibGVkKHZvaWQpXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTEzMjctXFxubW0vaW50ZXJuYWwuaDoxMzI4OmJvb2wgX19pbml0IGRlZmVycmVkX2dyb3dfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5tbS9pbnRlcm5hbC5oLTEzMjktI2Vsc2VcXG4tLVxcbm1tL21tX2luaXQuYz0yMTA4PXN0YXRpYyBpbnQgX19pbml0IGRlZmVycmVkX2luaXRfbWVtbWFwKHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9tbV9pbml0LmMtMjE3OC0gKi9cXG5tbS9tbV9pbml0LmM6MjE3OTpib29sIF9faW5pdCBkZWZlcnJlZF9ncm93X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcXG5tbS9tbV9pbml0LmMtMjE4MC17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MzA5PURFRklORV9TVEFUSUNfS0VZX1RSVUUoZGVmZXJyZWRfcGFnZXMpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTMxMS0vKlxcbm1tL3BhZ2VfYWxsb2MuYzozMTI6ICogZGVmZXJyZWRfZ3Jvd196b25lKCkgaXMgX19pbml0LCBidXQgaXQgaXMgY2FsbGVkIGZyb21cXG5tbS9wYWdlX2FsbG9jLmMtMzEzLSAqIGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoKSBkdXJpbmcgZWFybHkgYm9vdCB1bnRpbCBkZWZlcnJlZF9wYWdlcyBwZXJtYW5lbnRseVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTMxNz1zdGF0aWMgYm9vbCBfX3JlZlxcbm1tL3BhZ2VfYWxsb2MuYzozMTg6X2RlZmVycmVkX2dyb3dfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbm1tL3BhZ2VfYWxsb2MuYy0zMTkte1xcbm1tL3BhZ2VfYWxsb2MuYzozMjA6XFx0cmV0dXJuIGRlZmVycmVkX2dyb3dfem9uZSh6b25lLCBvcmRlcik7XFxubW0vcGFnZV9hbGxvYy5jLTMyMS19XFxubW0vcGFnZV9hbGxvYy5jLTMyMi0jZWxzZVxcbm1tL3BhZ2VfYWxsb2MuYzozMjM6c3RhdGljIGlubGluZSBib29sIF9kZWZlcnJlZF9ncm93X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcXG5tbS9wYWdlX2FsbG9jLmMtMzI0LXtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0zNzkyPWdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwgaW50IGFsbG9jX2ZsYWdzLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTM5MTEtXFx0XFx0XFx0aWYgKGRlZmVycmVkX3BhZ2VzX2VuYWJsZWQoKSkge1xcbm1tL3BhZ2VfYWxsb2MuYzozOTEyOlxcdFxcdFxcdFxcdGlmIChfZGVmZXJyZWRfZ3Jvd196b25lKHpvbmUsIG9yZGVyKSlcXG5tbS9wYWdlX2FsbG9jLmMtMzkxMy1cXHRcXHRcXHRcXHRcXHRnb3RvIHRyeV90aGlzX3pvbmU7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMzk1NC1cXHRcXHRcXHRpZiAoZGVmZXJyZWRfcGFnZXNfZW5hYmxlZCgpKSB7XFxubW0vcGFnZV9hbGxvYy5jOjM5NTU6XFx0XFx0XFx0XFx0aWYgKF9kZWZlcnJlZF9ncm93X3pvbmUoem9uZSwgb3JkZXIpKVxcbm1tL3BhZ2VfYWxsb2MuYy0zOTU2LVxcdFxcdFxcdFxcdFxcdGdvdG8gdHJ5X3RoaXNfem9uZTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MDk1PXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTc2LVxcdFxcdGlmIChkZWZlcnJlZF9wYWdlc19lbmFibGVkKCkpIHtcXG5tbS9wYWdlX2FsbG9jLmM6NTE3NzpcXHRcXHRcXHRpZiAoX2RlZmVycmVkX2dyb3dfem9uZSh6b25lLCAwKSlcXG5tbS9wYWdlX2FsbG9jLmMtNTE3OC1cXHRcXHRcXHRcXHRnb3RvIHJldHJ5X3RoaXNfem9uZTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03ODY2PXN0cnVjdCBwYWdlICphbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrX25vcHJvZihnZnBfdCBnZnBfZmxhZ3MsIGludCBuaWQsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03OTE1LVxcbm1tL3BhZ2VfYWxsb2MuYzo3OTE2OlxcdC8qIEJhaWxvdXQsIHNpbmNlIF9kZWZlcnJlZF9ncm93X3pvbmUoKSBuZWVkcyB0byB0YWtlIGEgbG9jayAqL1xcbm1tL3BhZ2VfYWxsb2MuYy03OTE3LVxcdGlmIChkZWZlcnJlZF9wYWdlc19lbmFibGVkKCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA1OjIyOjExLjQ1MjY2NDA4OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTg1Njc1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uXG5cbioqVW5kZXJzdGFuZGluZyBgZGVmZXJyZWRfZ3Jvd196b25lYCBpbiB0aGUgTGludXggTWVtb3J5IE1hbmFnZW1lbnQgQ29udGV4dCoqXG5cblJpZ2h0LCBzbyBgZGVmZXJyZWRfZ3Jvd196b25lYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUgYF9faW5pdGAgc2VjdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQncyBwYXJ0IG9mIHRoZSBlYXJseSBib290IHByb2Nlc3MuIE15IHByaW1hcnkgZm9jdXMgaXMgdW5kZXJzdGFuZGluZyBpdHMgbGlmZWN5Y2xlLCBhbmQgaXQgc2VlbXMgdGhhdCBgZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdCgpYCBjYWxscyB0aGlzIGZ1bmN0aW9uIGVhcmx5IGluIGJvb3QuIFRoZW4sIG9uY2UgYGRlZmVycmVkX3BhZ2VzYCBpcyBwZXJtYW5lbnRseSBkaXNhYmxlZCwgYGRlZmVycmVkX2dyb3dfem9uZWAgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCBpdCdzIGluIGBfX2luaXRgLCBzbyBpdCBnZXRzIGZyZWVkIGFmdGVyIHRoZSBib290IHNlcXVlbmNlIGNvbXBsZXRlcy5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBmdW5jdGlvbuKAmXMgYmVoYXZpb3VyLCBJIHNob3VsZCByZWFkIGFyb3VuZCBsaW5lIDMxMiBpbiBgbW0vcGFnZV9hbGxvYy5jYC4gVGhhdCBzaG91bGQgcHJvdmlkZSB0aGUgc3BlY2lmaWMgY29udGV4dCBmb3IgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHBhZ2UgYWxsb2NhdGlvbiBzdHJhdGVneSwgYW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0J3MgaW52b2tlZC4gSSBleHBlY3QgdGhhdCB3aWxsIGNsYXJpZnkgd2hhdCBgZGVmZXJyZWRfcGFnZXNgIGFjdHVhbGx5IGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNToyMjoxNC45NTEyMzM1MjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzgxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMDpcXHRcXG4gMzAxOlxcdGludCBwYWdlX2dyb3VwX2J5X21vYmlsaXR5X2Rpc2FibGVkIF9fcmVhZF9tb3N0bHk7XFxuIDMwMjpcXHRcXG4gMzAzOlxcdCNpZmRlZiBDT05GSUdfREVGRVJSRURfU1RSVUNUX1BBR0VfSU5JVFxcbiAzMDQ6XFx0LypcXG4gMzA1OlxcdCAqIER1cmluZyBib290IHdlIGluaXRpYWxpemUgZGVmZXJyZWQgcGFnZXMgb24tZGVtYW5kLCBhcyBuZWVkZWQsIGJ1dCBvbmNlXFxuIDMwNjpcXHQgKiBwYWdlX2FsbG9jX2luaXRfbGF0ZSgpIGhhcyBmaW5pc2hlZCwgdGhlIGRlZmVycmVkIHBhZ2VzIGFyZSBhbGwgaW5pdGlhbGl6ZWQsXFxuIDMwNzpcXHQgKiBhbmQgd2UgY2FuIHBlcm1hbmVudGx5IGRpc2FibGUgdGhhdCBwYXRoLlxcbiAzMDg6XFx0ICovXFxuIDMwOTpcXHRERUZJTkVfU1RBVElDX0tFWV9UUlVFKGRlZmVycmVkX3BhZ2VzKTtcXG4gMzEwOlxcdFxcbiAzMTE6XFx0LypcXG4gMzEyOlxcdCAqIGRlZmVycmVkX2dyb3dfem9uZSgpIGlzIF9faW5pdCwgYnV0IGl0IGlzIGNhbGxlZCBmcm9tXFxuIDMxMzpcXHQgKiBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KCkgZHVyaW5nIGVhcmx5IGJvb3QgdW50aWwgZGVmZXJyZWRfcGFnZXMgcGVybWFuZW50bHlcXG4gMzE0OlxcdCAqIGRpc2FibGVzIHRoaXMgY2FsbC4gVGhpcyBpcyB3aHkgd2UgaGF2ZSByZWZkYXRhIHdyYXBwZXIgdG8gYXZvaWQgd2FybmluZyxcXG4gMzE1OlxcdCAqIGFuZCB0byBlbnN1cmUgdGhhdCB0aGUgZnVuY3Rpb24gYm9keSBnZXRzIHVubG9hZGVkLlxcbiAzMTY6XFx0ICovXFxuIDMxNzpcXHRzdGF0aWMgYm9vbCBfX3JlZlxcbiAzMTg6XFx0X2RlZmVycmVkX2dyb3dfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbiAzMTk6XFx0e1xcbiAzMjA6XFx0XFx0cmV0dXJuIGRlZmVycmVkX2dyb3dfem9uZSh6b25lLCBvcmRlcik7XFxuIDMyMTpcXHR9XFxuIDMyMjpcXHQjZWxzZVxcbiAzMjM6XFx0c3RhdGljIGlubGluZSBib29sIF9kZWZlcnJlZF9ncm93X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcXG4gMzI0OlxcdHtcXG4gMzI1OlxcdFxcdHJldHVybiBmYWxzZTtcXG4gMzI2OlxcdH1cXG4gMzI3OlxcdCNlbmRpZiAvKiBDT05GSUdfREVGRVJSRURfU1RSVUNUX1BBR0VfSU5JVCAqL1xcbiAzMjg6XFx0XFxuIDMyOTpcXHQvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBiaXRtYXAgc3RvcmluZyBiaXRzIGFmZmVjdGluZyBhIGJsb2NrIG9mIHBhZ2VzICovXFxuIDMzMDpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgKmdldF9wYWdlYmxvY2tfYml0bWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxcbiAzMzE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBwZm4pXFxuIDMzMjpcXHR7XFxuIDMzMzpcXHQjaWZkZWYgQ09ORklHX1NQQVJTRU1FTVxcbiAzMzQ6XFx0XFx0cmV0dXJuIHNlY3Rpb25fdG9fdXNlbWFwKF9fcGZuX3RvX3NlY3Rpb24ocGZuKSk7XFxuIDMzNTpcXHQjZWxzZVxcbiAzMzY6XFx0XFx0cmV0dXJuIHBhZ2Vfem9uZShwYWdlKS1cXHUwMDNlcGFnZWJsb2NrX2ZsYWdzO1xcbiAzMzc6XFx0I2VuZGlmIC8qIENPTkZJR19TUEFSU0VNRU0gKi9cXG4gMzM4OlxcdH1cXG4gMzM5OlxcdFxcbiAzNDA6XFx0c3RhdGljIGlubGluZSBpbnQgcGZuX3RvX2JpdGlkeChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4pXFxuIDM0MTpcXHR7XFxuIDM0MjpcXHQjaWZkZWYgQ09ORklHX1NQQVJTRU1FTVxcbiAzNDM6XFx0XFx0cGZuIFxcdTAwMjY9IChQQUdFU19QRVJfU0VDVElPTi0xKTtcXG4gMzQ0OlxcdCNlbHNlXFxuIDM0NTpcXHRcXHRwZm4gPSBwZm4gLSBwYWdlYmxvY2tfc3RhcnRfcGZuKHBhZ2Vfem9uZShwYWdlKS1cXHUwMDNlem9uZV9zdGFydF9wZm4pO1xcbiAzNDY6XFx0I2VuZGlmIC8qIENPTkZJR19TUEFSU0VNRU0gKi9cXG4gMzQ3OlxcdFxcdHJldHVybiAocGZuIFxcdTAwM2VcXHUwMDNlIHBhZ2VibG9ja19vcmRlcikgKiBOUl9QQUdFQkxPQ0tfQklUUztcXG4gMzQ4OlxcdH1cXG4gMzQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNToyMjoxNC45NTE1MTM0MDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzgwNTM4MDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IGBkZWZlcnJlZF9ncm93X3pvbmVgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZGVmZXJyZWRfZ3Jvd196b25lYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQncyBvbmx5IGFjdGl2ZSBkdXJpbmcgdGhlIHZlcnkgZWFybHkgYm9vdCBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGluaXRpYWxpemluZyBkZWZlcnJlZCBwYWdlcywgYnV0IG9uY2UgYHBhZ2VfYWxsb2NfaW5pdF9sYXRlKClgIGlzIGRvbmUsIHRoYXQgZW50aXJlIGNvZGUgcGF0aCBpcyBwZXJtYW5lbnRseSBkaXNhYmxlZC4gVGhlIHN5c3RlbSBpcyBwYXN0IHRoZSBwb2ludCBvZiBuZWVkaW5nIHRvIHVzZSB0aGlzLCBhbmQgdGhlIGNvZGUgaXNuJ3QgZXZlbiByZXNpZGVudCBpbiBtZW1vcnkgYW55bW9yZS5cblxuU2luY2Ugc3l6a2FsbGVyIGFuZCBvdGhlciBmdXp6ZXJzIGRvbid0IHJ1biB1bnRpbCBhZnRlciB0aGUga2VybmVsIGlzIGZ1bGx5IGJvb3RlZCBhbmQgdXNlci1zcGFjZSBpcyBpbml0aWFsaXplZCwgdGhleSBzaW1wbHkgY2FuJ3QgcmVhY2ggdGhpcyBjb2RlLiBJdCdzIGNvbXBsZXRlbHkgaW5hY2Nlc3NpYmxlIGZvciB0aGVpciBwdXJwb3Nlcy4gVGhlcmVmb3JlLCB0aGVyZSdzIG5vIHJlYWxpc3RpYyB3YXkgdG8gdXNlIHRoZXNlIGtpbmRzIG9mIHRvb2xzIHRvIGZ1enogYGRlZmVycmVkX2dyb3dfem9uZWAuXG5cbkkgc2hvdWxkIGJlIHRob3JvdWdoIHRob3VnaCwgbGV0IG1lIG1ha2Ugc3VyZS4gTGV0IG1lIGRvdWJsZS1jaGVjayBob3cgYGRlZmVycmVkX2dyb3dfem9uZWAgZ2V0cyBjYWxsZWQuIFJpZ2h0LCBzbyBgcGFnZV9hbGxvY19pbml0X2xhdGUoKWAgaXMgYW4gZWFybHkgaW5pdGlhbGl6YXRpb24gcm91dGluZS4gSXQgc2VlbXMgdG8gZXhlY3V0ZSBkdXJpbmcgYm9vdC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgY29ycmVjdCwgYW5kIGNvbmZpcm0gdGhhdCB0aGVyZSBhcmUgbm8gaGlkZGVuIHdheXMgdG8gdHJpZ2dlciB0aGlzLiBJIHRoaW5rIHRoYXQgSSd2ZSBzZWVuIGl0J3MgY2FsbGVkIGZyb20gYGtlcm5lbF9pbml0X2ZyZWVhYmxlYCB3aGljaCBpcyBhbHNvIHBhcnQgb2YgZWFybHkgYm9vdC4gT2theSwgc28gdGhhdCBzaG91bGQgYmUgcmlnaHQsIGxldCBtZSBqdXN0IHZlcmlmeSBgcGFnZV9hbGxvY19pbml0X2xhdGVgLiBcbkl0J3MgZGVmaW5pdGVseSBub3Qgd29ydGggZnV6emluZy4gSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDU0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDU6MjI6MjAuNzMyMDU0MzU3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI1MDk1MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2VfYWxsb2NfaW5pdF9sYXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZ2ZwLmg9NDAyPXZvaWQgZHJhaW5fbG9jYWxfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUpO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDAzLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDA0OnZvaWQgcGFnZV9hbGxvY19pbml0X2xhdGUodm9pZCk7XFxuaW5jbHVkZS9saW51eC9nZnAuaC00MDUtdm9pZCBzZXR1cF9wY3BfY2FjaGVpbmZvKHVuc2lnbmVkIGludCBjcHUpO1xcbi0tXFxuaW5pdC9tYWluLmM9MTYyOT1zdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQga2VybmVsX2luaXRfZnJlZWFibGUodm9pZClcXG4tLVxcbmluaXQvbWFpbi5jLTE2NTUtXFx0cGFkYXRhX2luaXQoKTtcXG5pbml0L21haW4uYzoxNjU2OlxcdHBhZ2VfYWxsb2NfaW5pdF9sYXRlKCk7XFxuaW5pdC9tYWluLmMtMTY1Ny1cXG4tLVxcbm1tL21tX2luaXQuYz0yMzEwPXN0YXRpYyB2b2lkIF9faW5pdCBtZW1faW5pdF9wcmludF9pbmZvKHZvaWQpO1xcbm1tL21tX2luaXQuYzoyMzExOnZvaWQgX19pbml0IHBhZ2VfYWxsb2NfaW5pdF9sYXRlKHZvaWQpXFxubW0vbW1faW5pdC5jLTIzMTIte1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTMwMT1pbnQgcGFnZV9ncm91cF9ieV9tb2JpbGl0eV9kaXNhYmxlZCBfX3JlYWRfbW9zdGx5O1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTMwNS0gKiBEdXJpbmcgYm9vdCB3ZSBpbml0aWFsaXplIGRlZmVycmVkIHBhZ2VzIG9uLWRlbWFuZCwgYXMgbmVlZGVkLCBidXQgb25jZVxcbm1tL3BhZ2VfYWxsb2MuYzozMDY6ICogcGFnZV9hbGxvY19pbml0X2xhdGUoKSBoYXMgZmluaXNoZWQsIHRoZSBkZWZlcnJlZCBwYWdlcyBhcmUgYWxsIGluaXRpYWxpemVkLFxcbm1tL3BhZ2VfYWxsb2MuYy0zMDctICogYW5kIHdlIGNhbiBwZXJtYW5lbnRseSBkaXNhYmxlIHRoYXQgcGF0aC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDU6MjI6MjIuNjU3MTU1NzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2MDYzMDEyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBLZXJuZWwgTWVtb3J5IEFsbG9jYXRpb24gZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHRyYWNlZCB0aGUgY2FsbCBzdGFjayBoZXJlLiBJdCdzIGNsZWFyIHRoYXQgYHBhZ2VfYWxsb2NfaW5pdF9sYXRlYCBnZXRzIGNhbGxlZCBmcm9tIGBrZXJuZWxfaW5pdF9mcmVlYWJsZWAgd2l0aGluIGBpbml0L21haW4uY2AuIFRoaXMgaXMgaGFwcGVuaW5nICp3YXkqIGJlZm9yZSB0aGUgdXNlci1zcGFjZSBgaW5pdGAgcHJvY2VzcyBldmVuIGdldHMgYSBjaGFuY2UgdG8gc3RhcnQuIFRoaW5raW5nIGFib3V0IGl0LCB0aGF0IG1lYW5zIHRoZSBgZGVmZXJyZWRfZ3Jvd196b25lYCBjb2RlIHBhdGggaXMgYWJzb2x1dGVseSBpbmFjY2Vzc2libGUgZnJvbSBhbnkgZnV6emluZyBJJ2QgYmUgZG9pbmcgZnJvbSB1c2VyIHNwYWNlLiBJIG1lYW4sIGl0J3MganVzdCBub3QgcmVhY2hhYmxlLiBHaXZlbiB0aGF0LCB0aGVyZSdzIG5vIHBvaW50IGluIHdhc3RpbmcgY3ljbGVzIG9uIGl0LiBJJ20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGFuZCBtb3ZlIG9uIHRvIHNvbWV0aGluZyB0aGF0J3MgYWN0dWFsbHkgc3VzY2VwdGlibGUgdG8gdGhpcyBraW5kIG9mIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDU4LCJPdXRwdXRUb2tlbnMiOjExOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA1OjIyOjI2LjUxNzc4ODA5N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGBkZWZlcnJlZF9ncm93X3pvbmVgIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uIHRoYXQgaXMgb25seSBjYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3QgdG8gaW5pdGlhbGl6ZSBkZWZlcnJlZCBwYWdlcyBvbi1kZW1hbmQuIE9uY2UgYHBhZ2VfYWxsb2NfaW5pdF9sYXRlKClgIGZpbmlzaGVzIGR1cmluZyBrZXJuZWwgaW5pdGlhbGl6YXRpb24sIHRoaXMgY29kZSBwYXRoIGlzIHBlcm1hbmVudGx5IGRpc2FibGVkIGFuZCB0aGUgZnVuY3Rpb24gYm9keSBpcyB1bmxvYWRlZC4gU2luY2Ugc3lzY2FsbCBmdXp6ZXJzIHN0YXJ0IGV4ZWN1dGluZyBhZnRlciB0aGUga2VybmVsIGhhcyBmdWxseSBib290ZWQgYW5kIHVzZXItc3BhY2UgaXMgcnVubmluZywgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgbW9kaWZpZWQgZnVuY3Rpb24gYGRlZmVycmVkX2dyb3dfem9uZWAgaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24gdGhhdCBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgZWFybHkgYm9vdCB0byBpbml0aWFsaXplIGRlZmVycmVkIHBhZ2VzIG9uLWRlbWFuZC4gT25jZSBgcGFnZV9hbGxvY19pbml0X2xhdGUoKWAgZmluaXNoZXMgZHVyaW5nIGtlcm5lbCBpbml0aWFsaXphdGlvbiwgdGhpcyBjb2RlIHBhdGggaXMgcGVybWFuZW50bHkgZGlzYWJsZWQgYW5kIHRoZSBmdW5jdGlvbiBib2R5IGlzIHVubG9hZGVkLiBTaW5jZSBzeXNjYWxsIGZ1enplcnMgc3RhcnQgZXhlY3V0aW5nIGFmdGVyIHRoZSBrZXJuZWwgaGFzIGZ1bGx5IGJvb3RlZCBhbmQgdXNlci1zcGFjZSBpcyBydW5uaW5nLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowm2c9b[1] Phase: Running StartedAt: 2026-08-07 05:22:38 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2c9b[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-07 05:22:38 +0000 UTC FinishedAt: 2026-08-07 05:22:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}