Name: series-workflowq9sq5 Phase: Failed StartedAt: 2026-09-08 06:41:30 +0000 UTC FinishedAt: 2026-09-08 06:45:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9sq5[0] Phase: Succeeded StartedAt: 2026-09-08 06:41:30 +0000 UTC FinishedAt: 2026-09-08 06:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9sq5[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 06:41:30 +0000 UTC FinishedAt: 2026-09-08 06:45:48 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSB1cGRhdGVzIHRlc3QgYXNzZXJ0aW9ucyBhbmQgY2FzZXMgaW4gdGhlIEtVbml0IHRlc3Qgc3VpdGUgKGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdnciBpbiBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgpLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IERBTU9OIGNvcmUgcnVudGltZSBsb2dpYywgZHJpdmVycywgb3Igc3lzY2FsbC1yZWFjaGFibGUga2VybmVsIGV4ZWN1dGlvbiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0YjVmNTVhNTQ0NjEyY2RjZGQ0MGQwOWVlNjY2OWI3OTgxMWM2NjdkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwNjo0MzozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbmluZGV4IGMwMWU2YTc1Y2FkYzEuLmZmMjMyMDhjMTgxMzkgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuQEAgLTYyNywxMiAmIzQzOzYyNywyMCBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcbiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3Ioc3RydWN0IGt1bml0ICp0ZXN0KVxuIHtcbi1cdHN0cnVjdCBkYW1vbl9hdHRycyBhdHRycyA9IHtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fYXR0cnMgYXR0cnM7XG4mIzQzO1xuJiM0MztcdC8qIFplcm8gc2FtcGxlIGludGVydmFsIGlzIHRyZWF0ZWQgYXMgb25lLiAqL1xuJiM0MztcdGF0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7XG4gXHRcdC5zYW1wbGVfaW50ZXJ2YWwgPSAwLFxuLVx0XHQuYWdncl9pbnRlcnZhbCA9IDAsXG4mIzQzO1x0XHQuYWdncl9pbnRlcnZhbCA9IDUwMDAsXG4gXHR9O1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmF0dHJzKSwgNTAwMCk7XG4gXG4tXHQvKiBaZXJvIGFnZ3JlZ2F0aW9uIGludGVydmFsIGRvZXNuJiMzOTt0IGNhdXNlIGRpdmlzaW9uIGJ5IHplcm8gKi9cbiYjNDM7XHQvKiBaZXJvIHNhbXBsZXMgcGVyIGFnZ3JlZ2F0aW9uIGlzIHRyZWF0ZWQgYXMgb25lLiAqL1xuJiM0MztcdGF0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7XG4mIzQzO1x0XHQuc2FtcGxlX2ludGVydmFsID0gNTAwMCxcbiYjNDM7XHRcdC5hZ2dyX2ludGVydmFsID0gMCxcbiYjNDM7XHR9O1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2YXR0cnMpLCAxKTtcbiBcbiBcdC8qXG5AQCAtNjQwLDcgJiM0Mzs2NDgsMTAgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdCAqIG92ZXJmbG93XG4gXHQgKi9cbiBcdGlmIChVTE9OR19NQVggXHUwMDNlIFVJTlRfTUFYKSB7XG4tXHRcdGF0dHJzLmFnZ3JfaW50ZXJ2YWwgPSAodW5zaWduZWQgbG9uZylVSU5UX01BWCAmIzQzOyAxO1xuJiM0MztcdFx0YXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcbiYjNDM7XHRcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEsXG4mIzQzO1x0XHRcdC5hZ2dyX2ludGVydmFsID0gKHVuc2lnbmVkIGxvbmcpVUlOVF9NQVggJiM0MzsgMSxcbiYjNDM7XHRcdH07XG4gXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmF0dHJzKSxcbiBcdFx0XHRcdFVJTlRfTUFYKTtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IHVwZGF0ZXMgdGVzdCBhc3NlcnRpb25zIGFuZCBjYXNlcyBpbiB0aGUgS1VuaXQgdGVzdCBzdWl0ZSAoZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyIGluIG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCkuIEl0IGRvZXMgbm90IG1vZGlmeSBhbnkgREFNT04gY29yZSBydW50aW1lIGxvZ2ljLCBkcml2ZXJzLCBvciBzeXNjYWxsLXJlYWNoYWJsZSBrZXJuZWwgZXhlY3V0aW9uIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRiNWY1NWE1NDQ2MTJjZGNkZDQwZDA5ZWU2NjY5Yjc5ODExYzY2N2QKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDA2OjQzOjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCmluZGV4IGMwMWU2YTc1Y2FkYzEuLmZmMjMyMDhjMTgxMzkgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKQEAgLTYyNywxMiAmIzQzOzYyNywyMCBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdCkKIAogc3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyKHN0cnVjdCBrdW5pdCAqdGVzdCkKIHsKLQlzdHJ1Y3QgZGFtb25fYXR0cnMgYXR0cnMgPSB7CiYjNDM7CXN0cnVjdCBkYW1vbl9hdHRycyBhdHRyczsKJiM0MzsKJiM0MzsJLyogWmVybyBzYW1wbGUgaW50ZXJ2YWwgaXMgdHJlYXRlZCBhcyBvbmUuICovCiYjNDM7CWF0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7CiAJCS5zYW1wbGVfaW50ZXJ2YWwgPSAwLAotCQkuYWdncl9pbnRlcnZhbCA9IDAsCiYjNDM7CQkuYWdncl9pbnRlcnZhbCA9IDUwMDAsCiAJfTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoJmFtcDthdHRycyksIDUwMDApOwogCi0JLyogWmVybyBhZ2dyZWdhdGlvbiBpbnRlcnZhbCBkb2VzbiYjMzk7dCBjYXVzZSBkaXZpc2lvbiBieSB6ZXJvICovCiYjNDM7CS8qIFplcm8gc2FtcGxlcyBwZXIgYWdncmVnYXRpb24gaXMgdHJlYXRlZCBhcyBvbmUuICovCiYjNDM7CWF0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7CiYjNDM7CQkuc2FtcGxlX2ludGVydmFsID0gNTAwMCwKJiM0MzsJCS5hZ2dyX2ludGVydmFsID0gMCwKJiM0MzsJfTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncigmYW1wO2F0dHJzKSwgMSk7CiAKIAkvKgpAQCAtNjQwLDcgJiM0Mzs2NDgsMTAgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyKHN0cnVjdCBrdW5pdCAqdGVzdCkKIAkgKiBvdmVyZmxvdwogCSAqLwogCWlmIChVTE9OR19NQVggJmd0OyBVSU5UX01BWCkgewotCQlhdHRycy5hZ2dyX2ludGVydmFsID0gKHVuc2lnbmVkIGxvbmcpVUlOVF9NQVggJiM0MzsgMTsKJiM0MzsJCWF0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7CiYjNDM7CQkJLnNhbXBsZV9pbnRlcnZhbCA9IDEsCiYjNDM7CQkJLmFnZ3JfaW50ZXJ2YWwgPSAodW5zaWduZWQgbG9uZylVSU5UX01BWCAmIzQzOyAxLAomIzQzOwkJfTsKIAkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoJmFtcDthdHRycyksCiAJCQkJVUlOVF9NQVgpOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIxOQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBhIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdG8gcmV2aWV3LiBNeSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gdGhlIG1vZGlmaWVkIGZpbGUg4oCTIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBJbW1lZGlhdGVseSwgSeKAmW0gdGhpbmtpbmcgYWJvdXQgd2hhdCBgZGFtb25gIGlzIOKAkyBEeW5hbWljIEFkZHJlc3MgTU9OaXRvciDigJMgYW5kIHRoYXQgdGhpcyBpcyByZWxhdGVkIHRvIGtlcm5lbCB0ZXN0aW5nLiBUaGlzIG5hcnJvd3MgbXkgZm9jdXMuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogb2YgdGhpcyBtb2RpZmljYXRpb24uIEJlZm9yZSBkaWdnaW5nIGludG8gdGhlIGNvZGUgbGluZS1ieS1saW5lLCBJJiMzOTtsbCBuZWVkIHRvIGVzdGFibGlzaCBzb21lIGNvbnRleHQuIEEgcXVpY2sgYGdyZXBgIG9yIGZpbGUgcmVhZCB3aWxsIGdpdmUgbWUgdGhlIHN1cnJvdW5kaW5nIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYyMDpcdFx0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXt9LCAwLFxuIDYyMTpcdFx0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXtcbiA2MjI6XHRcdFx0XHR7LnN0YXJ0ID0gMTAsIC5lbmQgPSAyMH0sXG4gNjIzOlx0XHRcdFx0ey5zdGFydCA9IDIwLCAuZW5kID0gMzB9LFxuIDYyNDpcdFx0XHRcdH0sIDIsIDQwOTYsXG4gNjI1Olx0XHRcdFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsIC1FSU5WQUwpO1xuIDYyNjpcdH1cbiA2Mjc6XHRcbiA2Mjg6XHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3Ioc3RydWN0IGt1bml0ICp0ZXN0KVxuIDYyOTpcdHtcbiA2MzA6XHRcdHN0cnVjdCBkYW1vbl9hdHRycyBhdHRycztcbiA2MzE6XHRcbiA2MzI6XHRcdC8qIFplcm8gc2FtcGxlIGludGVydmFsIGlzIHRyZWF0ZWQgYXMgb25lLiAqL1xuIDYzMzpcdFx0YXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcbiA2MzQ6XHRcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDAsXG4gNjM1Olx0XHRcdC5hZ2dyX2ludGVydmFsID0gNTAwMCxcbiA2MzY6XHRcdH07XG4gNjM3Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcdTAwMjZhdHRycyksIDUwMDApO1xuIDYzODpcdFxuIDYzOTpcdFx0LyogWmVybyBzYW1wbGVzIHBlciBhZ2dyZWdhdGlvbiBpcyB0cmVhdGVkIGFzIG9uZS4gKi9cbiA2NDA6XHRcdGF0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7XG4gNjQxOlx0XHRcdC5zYW1wbGVfaW50ZXJ2YWwgPSA1MDAwLFxuIDY0MjpcdFx0XHQuYWdncl9pbnRlcnZhbCA9IDAsXG4gNjQzOlx0XHR9O1xuIDY0NDpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2YXR0cnMpLCAxKTtcbiA2NDU6XHRcbiA2NDY6XHRcdC8qXG4gNjQ3Olx0XHQgKiBUb28gbGFyZ2UgYWdncmVnYXRpb24gaW50ZXJ2YWwgb24gNjQgYml0IHN5c3RlbSBkb2VzbiYjMzk7dCBjYXVzZVxuIDY0ODpcdFx0ICogb3ZlcmZsb3dcbiA2NDk6XHRcdCAqL1xuIDY1MDpcdFx0aWYgKFVMT05HX01BWCBcdTAwM2UgVUlOVF9NQVgpIHtcbiA2NTE6XHRcdFx0YXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcbiA2NTI6XHRcdFx0XHQuc2FtcGxlX2ludGVydmFsID0gMSxcbiA2NTM6XHRcdFx0XHQuYWdncl9pbnRlcnZhbCA9ICh1bnNpZ25lZCBsb25nKVVJTlRfTUFYICYjNDM7IDEsXG4gNjU0Olx0XHRcdH07XG4gNjU1Olx0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmF0dHJzKSxcbiA2NTY6XHRcdFx0XHRcdFVJTlRfTUFYKTtcbiA2NTc6XHRcdH1cbiA2NTg6XHR9XG4gNjU5Olx0XG4gNjYwOlx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KVxuIDY2MTpcdHtcbiA2NjI6XHRcdHN0cnVjdCBkYW1vbl9hdHRycyBvbGRfYXR0cnMgPSB7XG4gNjYzOlx0XHRcdC5zYW1wbGVfaW50ZXJ2YWwgPSAxMCwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwLH07XG4gNjY0Olx0XHRzdHJ1Y3QgZGFtb25fYXR0cnMgbmV3X2F0dHJzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxOTEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byB0aGUgYGNvcmUta3VuaXQuaGAgTXlzdGVyeSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB3aGF0JiMzOTtzIHRoaXMgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAgZmlsZSBhbGwgYWJvdXQ/IFRoZSBwYXRoIHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIERBTU9OIG1lbW9yeSBtYW5hZ2VtZW50IGZyYW1ld29yaywgYnV0IHRoYXQmIzM5O3MganVzdCBhIGd1ZXNzIGJhc2VkIG9uIHRoZSBmaWxlIHBhdGguIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGZpbGUgYWN0dWFsbHkgYSBLVW5pdCB1bml0IHRlc3Q/IFRoYXQgd291bGQgYmUgdXNlZnVsIHRvIGRldGVybWluZSBob3cgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBvZiBEQU1PTiBpcyBiZWluZyB0ZXN0ZWQuIFRpbWUgdG8gcXVpY2tseSB2ZXJpZnkgaWYgaXQgZm9sbG93cyB0aGUgS1VuaXQgdGVzdGluZyBmcmFtZXdvcmsgY29udmVudGlvbnMuIElmIHNvLCB0aGF0JiMzOTtzIGdvb2QgbmV3cyDigJMgaXQgc3VnZ2VzdHMgcm9idXN0IHRlc3Rpbmcgb2YgdGhlIGNvcmUgREFNT04gZnVuY3Rpb25hbGl0eS4KCk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZmlsZSBpcyBiZWluZyBpbmNsdWRlZCBpbiB0aGUgcmVzdCBvZiB0aGUgcHJvamVjdC4gV2hlcmUgdGhpcyBoZWFkZXIgaXMgcmVmZXJlbmNlZCB3aWxsIGdpdmUgY2x1ZXMgdG8gdGhlIHBhcnRzIG9mIERBTU9OIGl0JiMzOTtzIHRlc3RpbmcuIEV4YW1pbmluZyB0aGUgaW5jbHVzaW9ucyB3aWxsIGluZGljYXRlIHdoaWNoIGNvbXBvbmVudHMgcmVseSBvbiB0aGVzZSB0ZXN0cywgYW5kLCBlcXVhbGx5IGltcG9ydGFudCwgaG93IHRoZXkmIzM5O3JlIHRlc3RlZC4gS25vd2luZyBpdHMgZGVwZW5kZW5jaWVzIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSB0ZXN0JiMzOTtzIHNjb3BlIGFuZCBpdHMgaW1wb3J0YW5jZSBpbiBlbnN1cmluZyB0aGUgc3RhYmlsaXR5IGFuZCBjb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUgZW50aXJlIERBTU9OIHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3JlLWt1bml0LmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTQxNzg9c3Vic3lzX2luaXRjYWxsKGRhbW9uX2luaXQpO1xubW0vZGFtb24vY29yZS5jLTQxNzktXG5tbS9kYW1vbi9jb3JlLmM6NDE4MDojaW5jbHVkZSBcJiMzNDt0ZXN0cy9jb3JlLWt1bml0LmhcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTg5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emFiaWxpdHkgb2YgS1VuaXQgVGVzdHMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHRyaWFnZSBwaGlsb3NvcGh5IGFuZCBzZWUgaWYgdGhpcyBLVW5pdCB0ZXN0IGNvZGUgZmFsbHMgdW5kZXIgdGhlICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgY3JpdGVyaWEuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGF0IFNlY3Rpb24gMiwgd2hpY2ggb3V0bGluZXMgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhOiB3aGVuIGEgcGF0Y2ggKnNob3VsZG4mIzM5O3QqIGJlIGZ1enplZC4gVGhlIGtleSBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgbm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUuCgpGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIGRlZmluaXRpb24gb2Ygbm9uLWV4ZWN1dGFibGUgY2hhbmdlcywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUga2VybmVsIGltYWdlIG9yIG1vZHVsZXMuIEkga25vdyB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIHNwZWxsaW5nIGZpeGVzLCB1c2VyLXNwYWNlIHRvb2xzLCBzYW1wbGVzIG9yIHNjcmlwdHMsIGFuZCBkZWNvcmF0aXZlIGxvZ2dpbmcgZ2VuZXJhbGx5IGZhbGwgaW50byB0aGlzIGNhdGVnb3J5LiBOb3cgdGhlIHJlYWwgcXVlc3Rpb246IGFyZSBLVW5pdCB0ZXN0cyB0cmVhdGVkIHRoZSBzYW1lIHdheT8gQXJlIHRoZXkgZnV6emFibGUgdGVzdCBjb2RlPwoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXM6IGhvdyBkb2VzIHN5emthbGxlciBoYW5kbGUgS1VuaXQgdGVzdHM/IEFyZSB0aGVzZSBjb25zaWRlcmVkIGp1c3QgdGVzdCBzdWl0ZXMgYW5kIGV4Y2x1ZGVkPyBJIG5lZWQgdG8gY2xhcmlmeSBpZiBzeXprYWxsZXIgdGFyZ2V0cyBLVW5pdCB0ZXN0cywgb3IgaWYgdGhleSBhcmUgc2tpcHBlZCBkdXJpbmcgaXRzIHN5c2NhbGwgZnV6emluZyBydW5zLiBUaGUgdHJpYWdlIGd1aWRlbGluZXMgZW1waGFzaXplIHJlYWNoYWJpbGl0eSBhbmQgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBjb2RlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQ2FuIHN5emthbGxlciB0cmlnZ2VyIEtVbml0IHRlc3RzIGR1cmluZyBpdHMgc3lzY2FsbCBmdXp6aW5nPwoKSSBuZWVkIHRvIHJlLXJlYWQgdGhlIHRyaWFnZSBndWlkZWxpbmVzIHRvIGVuc3VyZSBJIGRvbiYjMzk7dCBvdmVybG9vayBhbnkgc3VidGxldGllcy4gVGhlIGdvYWwgaXMgdG8gY2F0Y2ggY3Jhc2hlcywgcmVncmVzc2lvbnMsIG9yIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zLiBUaGUgbWFpbiBnYXRlIGlzIHJlYWNoYWJpbGl0eS4gSWYgdGhlIGNvZGUgaXMgbm90IHN0cnVjdHVyYWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSksIGl0IHNob3VsZCBub3QgYmUgZnV6emVkLiBCdXQgYXJlIEtVbml0IHRlc3RzLCBhbmQgdGVzdCBjb2RlIGZ1enphYmxlPwoKU28sIGNhbiBzeXprYWxsZXIgZGlyZWN0bHkgaW52b2tlIEtVbml0IHRlc3QgZnVuY3Rpb25zLCBsaWtlIHRoZSBvbmUgSSYjMzk7bSB0aGlua2luZyBvZiwgYGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdncmA/IFRvIGFuc3dlciB0aGF0LCBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbW0vZGFtb24vY29yZS5jYCBhcm91bmQgbGluZSA0MTgwLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBzdGVwIHRvIGNsYXJpZnkgdGhlIHJlYWNoYWJpbGl0eSBhbmQgdGhlIGV4ZWN1dGFibGUgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQxNzA6XHRcdGlmICh1bmxpa2VseSghZGFtb25fcmVnaW9uX2NhY2hlKSkge1xuNDE3MTpcdFx0XHRwcl9lcnIoXCYjMzQ7Y3JlYXRpbmcgZGFtb25fcmVnaW9uX2NhY2hlIGZhaWxzXFxuXCYjMzQ7KTtcbjQxNzI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG40MTczOlx0XHR9XG40MTc0Olx0XG40MTc1Olx0XHRyZXR1cm4gMDtcbjQxNzY6XHR9XG40MTc3Olx0XG40MTc4Olx0c3Vic3lzX2luaXRjYWxsKGRhbW9uX2luaXQpO1xuNDE3OTpcdFxuNDE4MDpcdCNpbmNsdWRlIFwmIzM0O3Rlc3RzL2NvcmUta3VuaXQuaFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MzQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgYW5hbHl6aW5nIHRoZSBzaXR1YXRpb246CgoqKlJldmlld2luZyBDb3JlIEtVbml0IFRlc3QgRGVmaW5pdGlvbnMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgcmVzdCBvZiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gVGhpcyBsaWtlbHkgY29udGFpbnMgY3JpdGljYWwgZGVmaW5pdGlvbnMgZm9yIHRoZSBjb3JlIEtVbml0IHRlc3RzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKS4gVW5kZXJzdGFuZGluZyB0aGlzIGhlYWRlciBmaWxlIGlzIGVzc2VudGlhbCBmb3Igc2V2ZXJhbCByZWFzb25zLiBJdCBjb3VsZCBkZXRhaWwgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIGluIHRoZXNlIGNvcmUgdGVzdHMsIGRlZmluZSBtYWNyb3MgZm9yIHRlc3Qgc2V0dXAgYW5kIHRlYXJkb3duLCBvciBzcGVjaWZ5IHRoZSBleHBlY3RlZCBiZWhhdmlvciBvciB0ZXN0aW5nIGNvbmRpdGlvbnMgZm9yIHNwZWNpZmljIERBTU9OIGZ1bmN0aW9uYWxpdGllcy4gSXQgbWlnaHQgZXZlbiBpbmNsdWRlIGlubGluZSBmdW5jdGlvbnMgb3IgaGVscGVyIHJvdXRpbmVzIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGhlIEtVbml0IHRlc3RzIHdpdGhpbiB0aGlzIG1vZHVsZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIHNjb3BlIGFuZCBjb21wbGV4aXR5IG9mIHRoZSB0ZXN0cyBkZWZpbmVkIHdpdGhpbi4gSXQgaXMgdmVyeSBsaWtlbHkgdGhhdCB0aGlzIGhlYWRlciBjb250YWlucyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IGluY2x1ZGUvZXhjbHVkZSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgdGVzdGluZyBiYXNlZCBvbiBjb25maWd1cmF0aW9uLiBUaGlzIGNvdWxkIGJlIHJlbGV2YW50IHRvIHVuZGVyc3RhbmRpbmcgc3BlY2lmaWMgYmVoYXZpb3JzLiBVbHRpbWF0ZWx5LCBleGFtaW5pbmcgdGhpcyBoZWFkZXIgaXMgY3J1Y2lhbCB0byBwcm9wZXJseSBncm9rIHRoZSB0ZXN0IHN0cmF0ZWd5IGFuZCBpdHMgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NjA6XHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gNjYxOlx0e1xuIDY2MjpcdFx0c3RydWN0IGRhbW9uX2F0dHJzIG9sZF9hdHRycyA9IHtcbiA2NjM6XHRcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEwLCAuYWdncl9pbnRlcnZhbCA9IDEwMDAsfTtcbiA2NjQ6XHRcdHN0cnVjdCBkYW1vbl9hdHRycyBuZXdfYXR0cnM7XG4gNjY1Olx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyID0gZGFtb25fbmV3X3JlZ2lvbigzLCA3KTtcbiA2NjY6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbiA2Njc6XHRcbiA2Njg6XHRcdGlmICghcilcbiA2Njk6XHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtyZWdpb24gYWxsb2MgZmFpbFwmIzM0Oyk7XG4gNjcwOlx0XHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XG4gNjcxOlx0XHRpZiAoIWN0eCkge1xuIDY3MjpcdFx0XHRkYW1vbl9mcmVlX3JlZ2lvbihyKTtcbiA2NzM6XHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtjdHggYWxsb2MgZmFpbFwmIzM0Oyk7XG4gNjc0Olx0XHR9XG4gNjc1Olx0XG4gNjc2Olx0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gMTU7XG4gNjc3Olx0XHRyLVx1MDAzZWFnZSA9IDIwO1xuIDY3ODpcdFxuIDY3OTpcdFx0bmV3X2F0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7XG4gNjgwOlx0XHRcdC5zYW1wbGVfaW50ZXJ2YWwgPSAxMDAsIC5hZ2dyX2ludGVydmFsID0gMTAwMDAsfTtcbiA2ODE6XHRcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCBcdTAwMjZvbGRfYXR0cnMsIFx1MDAyNm5ld19hdHRycywgZmFsc2UsIGN0eCk7XG4gNjgyOlx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vucl9hY2Nlc3NlcywgMTUpO1xuIDY4MzpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYWdlLCAyKTtcbiA2ODQ6XHRcbiA2ODU6XHRcdG5ld19hdHRycyA9IChzdHJ1Y3QgZGFtb25fYXR0cnMpe1xuIDY4NjpcdFx0XHQuc2FtcGxlX2ludGVydmFsID0gMSwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwfTtcbiA2ODc6XHRcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCBcdTAwMjZvbGRfYXR0cnMsIFx1MDAyNm5ld19hdHRycywgZmFsc2UsIGN0eCk7XG4gNjg4Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vucl9hY2Nlc3NlcywgMTUwKTtcbiA2ODk6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFnZSwgMik7XG4gNjkwOlx0XG4gNjkxOlx0XHRuZXdfYXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcbiA2OTI6XHRcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEsIC5hZ2dyX2ludGVydmFsID0gMTAwfTtcbiA2OTM6XHRcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCBcdTAwMjZvbGRfYXR0cnMsIFx1MDAyNm5ld19hdHRycywgZmFsc2UsIGN0eCk7XG4gNjk0Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vucl9hY2Nlc3NlcywgMTUwKTtcbiA2OTU6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFnZSwgMjApO1xuIDY5NjpcdFxuIDY5NzpcdFx0ZGFtb25fZnJlZV9yZWdpb24ocik7XG4gNjk4Olx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuIDY5OTpcdH1cbiA3MDA6XHRcbiA3MDE6XHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9hdHRycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gNzAyOlx0e1xuIDcwMzpcdFx0c3RydWN0IGRhbW9uX2N0eCAqYyA9IGRhbW9uX25ld19jdHgoKTtcbiA3MDQ6XHRcdHN0cnVjdCBkYW1vbl9hdHRycyB2YWxpZF9hdHRycyA9IHtcbiA3MDU6XHRcdFx0Lm1pbl9ucl9yZWdpb25zID0gMTAsIC5tYXhfbnJfcmVnaW9ucyA9IDEwMDAsXG4gNzA2Olx0XHRcdC5zYW1wbGVfaW50ZXJ2YWwgPSA1MDAwLCAuYWdncl9pbnRlcnZhbCA9IDEwMDAwMCx9O1xuIDcwNzpcdFx0c3RydWN0IGRhbW9uX2F0dHJzIGludmFsaWRfYXR0cnM7XG4gNzA4Olx0XG4gNzA5Olx0XHRpZiAoIWMpXG4gNzEwOlx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7Y3R4IGFsbG9jIGZhaWxcJiMzNDspO1xuIDcxMTpcdFxuIDcxMjpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NldF9hdHRycyhjLCBcdTAwMjZ2YWxpZF9hdHRycyksIDApO1xuIDcxMzpcdFxuIDcxNDpcdFx0aW52YWxpZF9hdHRycyA9IHZhbGlkX2F0dHJzO1xuIDcxNTpcdFx0aW52YWxpZF9hdHRycy5taW5fbnJfcmVnaW9ucyA9IDE7XG4gNzE2Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFx1MDAyNmludmFsaWRfYXR0cnMpLCAtRUlOVkFMKTtcbiA3MTc6XHRcbiA3MTg6XHRcdGludmFsaWRfYXR0cnMgPSB2YWxpZF9hdHRycztcbiA3MTk6XHRcdGludmFsaWRfYXR0cnMubWF4X25yX3JlZ2lvbnMgPSA5O1xuIDcyMDpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NldF9hdHRycyhjLCBcdTAwMjZpbnZhbGlkX2F0dHJzKSwgLUVJTlZBTCk7XG4gNzIxOlx0XG4gNzIyOlx0XHRpbnZhbGlkX2F0dHJzID0gdmFsaWRfYXR0cnM7XG4gNzIzOlx0XHRpbnZhbGlkX2F0dHJzLmFnZ3JfaW50ZXJ2YWwgPSA0OTk5O1xuIDcyNDpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NldF9hdHRycyhjLCBcdTAwMjZpbnZhbGlkX2F0dHJzKSwgLUVJTlZBTCk7XG4gNzI1Olx0XG4gNzI2Olx0XHRkYW1vbl9kZXN0cm95X2N0eChjKTtcbiA3Mjc6XHR9XG4gNzI4Olx0XG4gNzI5Olx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF9tdnN1bShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gNzMwOlx0e1xuIDczMTpcdFx0dW5zaWduZWQgbG9uZyBpbnB1dF9leHBlY3RzW10gPSB7XG4gNzMyOlx0XHRcdC8qIGN1cnJlbnQgdmFsdWUsIGxhc3QgdmFsdWUsIHJlbWFpbmluZyB3aW5kb3cgKGJwKSAqL1xuIDczMzpcdFx0XHQwLCA0OSwgMTAwMDAsIDQ5LFx0LyogMCAmIzQzOyA0OSAqIDEgKi9cbiA3MzQ6XHRcdFx0MywgMTAsIDcwMDAsIDEwLFx0LyogMyAmIzQzOyAxMCAqIDAuNyAqL1xuIDczNTpcdFx0XHQzLCAxMCwgNTAwMCwgOCxcdFx0LyogMyAmIzQzOyAxMCAqIDAuNSAqL1xuIDczNjpcdFx0XHQzMiwgMTAwLCAxMDAwLCA0MixcdC8qIDMyICYjNDM7IDEwMCAqIDAuMSAqL1xuIDczNzpcdFx0XHQ0MiwgNDksIDAsIDQyLFx0XHQvKiA0MiAmIzQzOyA0OSAqIDAgKi9cbiA3Mzg6XHRcdH07XG4gNzM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NDIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgQ29yZSBLVW5pdCBUZXN0cyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgS1VuaXQgdGVzdCBzdWl0ZSwgc3BlY2lmaWNhbGx5IGZvciB0aGUgbW0vZGFtb24gc3Vic3lzdGVtLiBNeSBmb2N1cyBpcyBvbiB0aGUgZmlsZSBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGdldCBhIHNlbnNlIG9mIHRoZSB0ZXN0IHNldHVwLCB0aGUga2V5IGZ1bmN0aW9ucyB1bmRlciBzY3J1dGlueSBhbmQgYW55IGltcG9ydGFudCBhc3NlcnRpb25zIHdpdGhpbiBpdC4gVGhpcyBnaXZlcyB0aGUgYmVzdCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwb3RlbnRpYWwgcGl0ZmFsbHMuIEFyZSB0aGV5IGZvY3VzZWQgb24gZGlyZWN0IGludGVncmF0aW9uLCBmdW5jdGlvbiB0ZXN0aW5nLCBvciBzb21ldGhpbmcgbW9yZSBjb21wcmVoZW5zaXZlPyBXaGF0IGFyZSB0aGUga2V5IHBlcmZvcm1hbmNlIG1ldHJpY3MgdGhleSYjMzk7cmUgY2hlY2tpbmc/IElzIHRoZXJlIGFueXRoaW5nIG5vdGV3b3J0aHkgb3IgdGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYz8gVGhpcyBpcyBnb2luZyB0byBnaXZlIG1lIG15IGJlc3QgaW5zaWdodHMgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc1MDpcdFx0fVxuIDc1MTpcdH1cbiA3NTI6XHRcbiA3NTM6XHQvKlxuIDc1NDpcdCAqIFRlc3QgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oKSwgd2hpY2ggd3JhcHMgZGFtb25fbXZzdW0oKSB3aXRoIHRoZVxuIDc1NTpcdCAqIG1vbml0b3JpbmcgaW50ZXJ2YWxzIG9mIHRoZSBjb250ZXh0LiAgV2l0aCBhIHNhbXBsZSBpbnRlcnZhbCBvZiAxIGFuZCBhblxuIDc1NjpcdCAqIGFnZ3JlZ2F0aW9uIGludGVydmFsIG9mIDEwLCBhbiBhZ2dyZWdhdGlvbiB3aW5kb3cgaXMgMTAgc2FtcGxlIGludGVydmFsc1xuIDc1NzpcdCAqIGxvbmcuICBFYWNoIHJvdyBiZWxvdyBzcGVjaWZpZXMgdGhlIHBhc3NlZCBzYW1wbGUgaW50ZXJ2YWxzLCB0aGUgbmV4dFxuIDc1ODpcdCAqIGFnZ3JlZ2F0aW9uIHRpbWUgaW4gc2FtcGxlIGludGVydmFscywgdGhlIGN1cnJlbnQgYW5kIGxhc3QgbnJfYWNjZXNzZXMgb2YgYVxuIDc1OTpcdCAqIHJlZ2lvbiwgYW5kIHRoZSBleHBlY3RlZCByZXR1cm4gdmFsdWUuXG4gNzYwOlx0ICovXG4gNzYxOlx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gNzYyOlx0e1xuIDc2MzpcdFx0dW5zaWduZWQgbG9uZyBpbnB1dF9leHBlY3RzW10gPSB7XG4gNzY0Olx0XHRcdC8qIHBhc3NlZCwgbmV4dF9hZ2dyLCBucl9hY2Nlc3NlcywgbGFzdF9ucl9hY2Nlc3NlcywgZXhwZWN0ICovXG4gNzY1Olx0XHRcdDAsIDEwLCA1LCAzLCAzLFx0XHQvKiBmdWxsIHdpbmRvdyBsZWZ0LCB1bnJlc2V0ICovXG4gNzY2Olx0XHRcdDAsIDEwLCAwLCA3LCA3LFx0XHQvKiBmdWxsIHdpbmRvdyBsZWZ0LCByZXNldCAqL1xuIDc2NzpcdFx0XHQ1LCAxMCwgMywgMTAsIDgsXHQvKiBoYWxmIHdpbmRvdyBsZWZ0ICovXG4gNzY4Olx0XHRcdDgsIDEwLCAzLCAxMCwgNSxcdC8qIDIwJSB3aW5kb3cgbGVmdCAqL1xuIDc2OTpcdFx0XHQxMCwgMTAsIDQyLCA0OSwgNDIsXHQvKiBubyB3aW5kb3cgbGVmdCAqL1xuIDc3MDpcdFx0fTtcbiA3NzE6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmMgPSBkYW1vbl9uZXdfY3R4KCk7XG4gNzcyOlx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuIDc3MzpcdFx0aW50IGk7XG4gNzc0Olx0XG4gNzc1Olx0XHRpZiAoIWMpXG4gNzc2Olx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7Y3R4IGFsbG9jIGZhaWxcJiMzNDspO1xuIDc3NzpcdFxuIDc3ODpcdFx0ciA9IGRhbW9uX25ld19yZWdpb24oMCwgNDA5Nik7XG4gNzc5Olx0XHRpZiAoIXIpIHtcbiA3ODA6XHRcdFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XG4gNzgxOlx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7cmVnaW9uIGFsbG9jIGZhaWxcJiMzNDspO1xuIDc4MjpcdFx0fVxuIDc4MzpcdFxuIDc4NDpcdFx0Yy1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPSAxO1xuIDc4NTpcdFx0Yy1cdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsID0gMTA7XG4gNzg2Olx0XG4gNzg3Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGlucHV0X2V4cGVjdHMpOyBpICYjNDM7PSA1KSB7XG4gNzg4Olx0XHRcdGMtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMgPSBpbnB1dF9leHBlY3RzW2ldO1xuIDc4OTpcdFx0XHRjLVx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzID0gaW5wdXRfZXhwZWN0c1tpICYjNDM7IDFdO1xuIDc5MDpcdFx0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gaW5wdXRfZXhwZWN0c1tpICYjNDM7IDJdO1xuIDc5MTpcdFx0XHRyLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPSBpbnB1dF9leHBlY3RzW2kgJiM0MzsgM107XG4gNzkyOlx0XG4gNzkzOlx0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAodW5zaWduZWQgaW50KWlucHV0X2V4cGVjdHNbaSAmIzQzOyA0XSxcbiA3OTQ6XHRcdFx0XHRcdGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHIsIGMpKTtcbiA3OTU6XHRcdH1cbiA3OTY6XHRcbiA3OTc6XHRcdGRhbW9uX2ZyZWVfcmVnaW9uKHIpO1xuIDc5ODpcdFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XG4gNzk5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Njc1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgY29yZS1rdW5pdC5oIHVwIHRvIExpbmUgODMwKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSB0ZXN0IHNldHVwIGFuZCB3aGF0JiMzOTtzIGJlaW5nIHZlcmlmaWVkIHVwIHRvIGxpbmUgODMwLiBHaXZlbiB0aGUgbG9jYXRpb24gd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0sIEkgZXhwZWN0IHRoaXMgZmlsZSBjb250YWlucyB0aGUgY29yZSBLVW5pdCB0ZXN0cyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgb3IgRGF0YSBBY2Nlc3MgTU9OaXRvciAoREFNT04pIGZ1bmN0aW9uYWxpdHksIHF1aXRlIHBvc3NpYmx5IHJlbGF0ZWQgdG8gc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsZ29yaXRobXMuCgpNeSBpbml0aWFsIHF1ZXN0aW9ucyBhcmU6IHdoYXQgdGVzdCBjYXNlcyBhcmUgZGVmaW5lZD8gV2hhdCBtYWNyb3Mgb3IgaGVscGVyIGZ1bmN0aW9ucyBhcmUgdXNlZCBleHRlbnNpdmVseT8gQXJlIHRoZXJlIGFueSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHRlc3RlZCwgYW5kIGhvdyBhcmUgdGhleSBiZWluZyBpbml0aWFsaXplZCBhbmQgbWFuaXB1bGF0ZWQ/IEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhleSBhcmUgdGVzdGluZyB0aGUgaW50ZWdyYXRpb24gd2l0aCB0aGUgY29yZSBEQU1PTiBmdW5jdGlvbmFsaXR5LgoKR2l2ZW4gaXQmIzM5O3MgYSBoZWFkZXIsIEkgYW50aWNpcGF0ZSBpdCBkZWZpbmVzIHN0cnVjdHMsIGZ1bmN0aW9uIHByb3RvdHlwZXMsIGFuZCBwb3RlbnRpYWxseSBpbmxpbmUgZnVuY3Rpb25zIHJlbGV2YW50IHRvIHRoZSBLVW5pdCB0ZXN0cy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2VsbC1kZWZpbmVkIGFzc2VydGlvbnMgYW5kIGVycm9yIGhhbmRsaW5nIG1lY2hhbmlzbXMgdG8gZ2F1Z2UgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIHRlc3RzLiBJJiMzOTtsbCBhbHNvIGJlIHdhdGNoaW5nIGZvciBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgb3IgYWxnb3JpdGhtcyB0aGF0IG1pZ2h0IGJlIHRoZSB0YXJnZXQgb2YgdGhlc2UgdGVzdHMsIGVzcGVjaWFsbHkgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0cy4gSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgdGVzdCBjYXNlIHNwZWNpZmljIG1hY3JvcyBhcyB0aG9zZSBhcmUgYWxtb3N0IGFsd2F5cyBhIHRlbGwgb2Ygd2hhdCBpcyBiZWluZyB0ZXN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDA6XHRcbiA4MDE6XHRzdGF0aWMgdm9pZCBkYW1vc190ZXN0X25ld19maWx0ZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxuIDgwMjpcdHtcbiA4MDM6XHRcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlcjtcbiA4MDQ6XHRcbiA4MDU6XHRcdGZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfQU5PTiwgdHJ1ZSwgZmFsc2UpO1xuIDgwNjpcdFx0aWYgKCFmaWx0ZXIpXG4gODA3Olx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7ZmlsdGVyIGFsbG9jIGZhaWxcJiMzNDspO1xuIDgwODpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGZpbHRlci1cdTAwM2V0eXBlLCBEQU1PU19GSUxURVJfVFlQRV9BTk9OKTtcbiA4MDk6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBmaWx0ZXItXHUwMDNlbWF0Y2hpbmcsIHRydWUpO1xuIDgxMDpcdFx0S1VOSVRfRVhQRUNUX1BUUl9FUSh0ZXN0LCBmaWx0ZXItXHUwMDNlbGlzdC5wcmV2LCBcdTAwMjZmaWx0ZXItXHUwMDNlbGlzdCk7XG4gODExOlx0XHRLVU5JVF9FWFBFQ1RfUFRSX0VRKHRlc3QsIGZpbHRlci1cdTAwM2VsaXN0Lm5leHQsIFx1MDAyNmZpbHRlci1cdTAwM2VsaXN0KTtcbiA4MTI6XHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XG4gODEzOlx0fVxuIDgxNDpcdFxuIDgxNTpcdHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbiA4MTY6XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCxcbiA4MTc6XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcbiA4MTg6XHR7XG4gODE5Olx0XHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3QsIHNyYyk7XG4gODIwOlx0XG4gODIxOlx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZW1ldHJpYywgc3JjLVx1MDAzZW1ldHJpYyk7XG4gODIyOlx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZXRhcmdldF92YWx1ZSwgc3JjLVx1MDAzZXRhcmdldF92YWx1ZSk7XG4gODIzOlx0XHRpZiAoc3JjLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKVxuIDgyNDpcdFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZWN1cnJlbnRfdmFsdWUsIHNyYy1cdTAwM2VjdXJyZW50X3ZhbHVlKTtcbiA4MjU6XHRcdHN3aXRjaCAoZHN0LVx1MDAzZW1ldHJpYykge1xuIDgyNjpcdFx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG4gODI3Olx0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWwsIFU2NF9NQVgpO1xuIDgyODpcdFx0XHRicmVhaztcbiA4Mjk6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDpcbiA4MzA6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDpcbiA4MzE6XHRcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VuaWQsIHNyYy1cdTAwM2VuaWQpO1xuIDgzMjpcdFx0XHRicmVhaztcbiA4MzM6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQOlxuIDgzNDpcdFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XG4gODM1Olx0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbmlkLCBzcmMtXHUwMDNlbmlkKTtcbiA4MzY6XHRcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VtZW1jZ19pZCwgc3JjLVx1MDAzZW1lbWNnX2lkKTtcbiA4Mzc6XHRcdFx0YnJlYWs7XG4gODM4Olx0XHRkZWZhdWx0OlxuIDgzOTpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc4NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIGl0OgoKKipGb2N1c2luZyBvbiBDb3JlLUt1bml0IFRlc3RzKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgdmVyeSBlbmQgb2YgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIEkga25vdyB3aGF0JiMzOTtzIGxpa2VseSB0dWNrZWQgYXdheSBkb3duIHRoZXJlOyBvZnRlbiB0aGUgZWRnZSBjYXNlcywgdGhlIGNsZWFudXAgcm91dGluZXMsIGFuZCB0aGUgdmVyeSBsYXN0IGFzc2VydGlvbnMgbGl2ZSBhdCB0aGUgdGFpbCBlbmQgb2YgdGhlc2UgdGVzdCBmaWxlcy4gSXQmIzM5O3MgdGhlIHVzdWFsIHBhdHRlcm4sIGFuZCBJIHdhbnQgdG8gdmVyaWZ5IGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBhbGlnbnMgd2l0aCBteSBleHBlY3RhdGlvbnMuIFRoaXMgd2lsbCBiZSB3aGVyZSB0aGUgc3VidGxlIGZsYXdzIGFuZCB1bmV4cGVjdGVkIGJlaGF2aW9ycyB0eXBpY2FsbHkgc3VyZmFjZSwgc28gdGhpcyBpcyB3aGVyZSBJ4oCZbGwgc3RhcnQgZGlnZ2luZy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NDA6XHRcdH1cbiA4NDE6XHR9XG4gODQyOlx0XG4gODQzOlx0c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gODQ0Olx0e1xuIDg0NTpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgZHN0ID0ge1xuIDg0NjpcdFx0XHQubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxuIDg0NzpcdFx0XHQudGFyZ2V0X3ZhbHVlID0gMTAwMCxcbiA4NDg6XHRcdFx0LmN1cnJlbnRfdmFsdWUgPSAxMjMsXG4gODQ5Olx0XHRcdC5sYXN0X3BzaV90b3RhbCA9IDQ1NixcbiA4NTA6XHRcdH07XG4gODUxOlx0XG4gODUyOlx0XHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG4gODUzOlx0XHRcdFx0XHUwMDI2KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKSB7XG4gODU0Olx0XHRcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcbiA4NTU6XHRcdFx0XHQudGFyZ2V0X3ZhbHVlID0gMjM0LFxuIDg1NjpcdFx0XHRcdC5jdXJyZW50X3ZhbHVlID0gMzQ1LFxuIDg1NzpcdFx0XHRcdC5sYXN0X3BzaV90b3RhbCA9IDU2NyxcbiA4NTg6XHRcdFx0XHR9KTtcbiA4NTk6XHRcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFx1MDAyNmRzdCxcbiA4NjA6XHRcdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpe1xuIDg2MTpcdFx0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9VU0VSX0lOUFVULFxuIDg2MjpcdFx0XHRcdC50YXJnZXRfdmFsdWUgPSA3ODksXG4gODYzOlx0XHRcdFx0LmN1cnJlbnRfdmFsdWUgPSAxMn0pO1xuIDg2NDpcdFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXHUwMDI2ZHN0LFxuIDg2NTpcdFx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCl7XG4gODY2Olx0XHRcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlAsXG4gODY3Olx0XHRcdFx0LnRhcmdldF92YWx1ZSA9IDM0NSxcbiA4Njg6XHRcdFx0XHQuY3VycmVudF92YWx1ZSA9IDY3OCxcbiA4Njk6XHRcdFx0XHQubmlkID0gOSxcbiA4NzA6XHRcdFx0XHR9KTtcbiA4NzE6XHRcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFx1MDAyNmRzdCxcbiA4NzI6XHRcdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpe1xuIDg3MzpcdFx0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQLFxuIDg3NDpcdFx0XHRcdC50YXJnZXRfdmFsdWUgPSAxMixcbiA4NzU6XHRcdFx0XHQuY3VycmVudF92YWx1ZSA9IDM0NSxcbiA4NzY6XHRcdFx0XHQubmlkID0gNixcbiA4Nzc6XHRcdFx0XHR9KTtcbiA4Nzg6XHRcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFx1MDAyNmRzdCxcbiA4Nzk6XHRcdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpe1xuIDg4MDpcdFx0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlAsXG4gODgxOlx0XHRcdFx0LnRhcmdldF92YWx1ZSA9IDQ1NixcbiA4ODI6XHRcdFx0XHQuY3VycmVudF92YWx1ZSA9IDU2NyxcbiA4ODM6XHRcdFx0XHQubmlkID0gNixcbiA4ODQ6XHRcdFx0XHQubWVtY2dfaWQgPSA3LFxuIDg4NTpcdFx0XHRcdH0pO1xuIDg4NjpcdFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXHUwMDI2ZHN0LFxuIDg4NzpcdFx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCl7XG4gODg4Olx0XHRcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCxcbiA4ODk6XHRcdFx0XHQudGFyZ2V0X3ZhbHVlID0gODkwLFxuIDg5MDpcdFx0XHRcdC5jdXJyZW50X3ZhbHVlID0gOTAxLFxuIDg5MTpcdFx0XHRcdC5uaWQgPSAxMCxcbiA4OTI6XHRcdFx0XHQubWVtY2dfaWQgPSAxLFxuIDg5MzpcdFx0XHRcdH0pO1xuIDg5NDpcdFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXHUwMDI2ZHN0LFxuIDg5NTpcdFx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCkge1xuIDg5NjpcdFx0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXG4gODk3Olx0XHRcdFx0LnRhcmdldF92YWx1ZSA9IDIzNCxcbiA4OTg6XHRcdFx0XHQuY3VycmVudF92YWx1ZSA9IDM0NSxcbiA4OTk6XHRcdFx0XHQubGFzdF9wc2lfdG90YWwgPSA1NjcsXG4gOTAwOlx0XHRcdFx0fSk7XG4gOTAxOlx0fVxuIDkwMjpcdFxuIDkwMzpcdHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4gOTA0Olx0XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3RfZ29hbHMsIGludCBucl9kc3RfZ29hbHMsXG4gOTA1Olx0XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmNfZ29hbHMsIGludCBucl9zcmNfZ29hbHMpXG4gOTA2Olx0e1xuIDkwNzpcdFx0c3RydWN0IGRhbW9zX3F1b3RhIGRzdCwgc3JjO1xuIDkwODpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwsICpuZXh0O1xuIDkwOTpcdFx0Ym9vbCBza2lwID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNzMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYGNvcmUta3VuaXQuaGAqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIExldCYjMzk7cyBhc3N1bWUgdGhpcyBpcyB0aGUgaGVhZGVyIGZpbGUgZm9yIHRoZSBjb3JlIEtVbml0IHRlc3RzIHdpdGhpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIGZyYW1ld29yay4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IHRoaXMgYmVjYXVzZSBJJiMzOTttIHRyb3VibGVzaG9vdGluZyBhIERBTU9OLXJlbGF0ZWQgaXNzdWUsIHJldmlld2luZyBjaGFuZ2VzLCBvciBtYXliZSBldmVuIGNvbnRyaWJ1dGluZyBhIG5ldyB0ZXN0LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0ZXN0IHN0cnVjdHVyZXMsIG1hY3JvcyBmb3Igc2V0dGluZyB1cCBhbmQgdGVhcmluZyBkb3duIHRoZSB0ZXN0cywgYXNzZXJ0aW9ucywgYW5kIHByb2JhYmx5IHNvbWUgcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBhY3R1YWwgdGVzdCBsb2dpYy4gSXQgd291bGQgYmUgaGVscGZ1bCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IEtVbml0IGlzIHVzZWQgaW4gdGhpcyBEQU1PTiBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIG5hbWluZyBjb252ZW50aW9ucyBlbXBsb3llZCwgYW5kIGFueSBzcGVjaWFsaXplZCBtYWNyb3MgdGhhdCBhcmUgc3BlY2lmaWMgdG8gREFNT04mIzM5O3MgdGVzdGluZyByZXF1aXJlbWVudHMuIFdoYXQgYXJlIHRoZSBrZXkgY29uY2VwdHMgYW5kIHByaW1pdGl2ZXMgdGhhdCBhcmUgYmVpbmcgdGVzdGVkPyBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGludHJpY2F0ZSBpbnRlcmFjdGlvbnMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgREFNT04mIzM5O3Mgb3BlcmF0aW9uYWwgZmVhdHVyZXMuIEkgYWxzbyB3YW50IHRvIGlkZW50aWZ5IGhvdyB0aGUgdGVzdHMgYXJlIG9yZ2FuaXplZCwgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLCBhbmQgaWYgdGhleSYjMzk7cmUgd2VsbC1zdHJ1Y3R1cmVkIGFuZCBkb2N1bWVudGVkLiBPa2F5LCBsZXQmIzM5O3MgZ2V0IHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MTA6XHRcdGludCBpO1xuIDkxMTpcdFx0aW50IG5yX2RzdCA9IDAsIG5yX3NyYyA9IDA7XG4gOTEyOlx0XG4gOTEzOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZkc3QuZ29hbHMpO1xuIDkxNDpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c3JjLmdvYWxzKTtcbiA5MTU6XHRcbiA5MTY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2RzdF9nb2FsczsgaSYjNDM7JiM0MzspIHtcbiA5MTc6XHRcdFx0LypcbiA5MTg6XHRcdFx0ICogV2hlbiBucl9zcmNfZ29hbHMgaXMgc21hbGxlciB0aGFuIGRzdF9nb2FscyxcbiA5MTk6XHRcdFx0ICogZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCkgd2lsbCBrZnJlZSgpIHRoZSBkc3QgZ29hbHMuXG4gOTIwOlx0XHRcdCAqIE1ha2UgaXQga2ZyZWUoKS1hYmxlLlxuIDkyMTpcdFx0XHQgKi9cbiA5MjI6XHRcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKGRzdF9nb2Fsc1tpXS5tZXRyaWMsXG4gOTIzOlx0XHRcdFx0XHRkc3RfZ29hbHNbaV0udGFyZ2V0X3ZhbHVlKTtcbiA5MjQ6XHRcdFx0aWYgKCFnb2FsKVxuIDkyNTpcdFx0XHRcdGdvdG8gb3V0O1xuIDkyNjpcdFx0XHRkYW1vc19hZGRfcXVvdGFfZ29hbChcdTAwMjZkc3QsIGdvYWwpO1xuIDkyNzpcdFx0fVxuIDkyODpcdFx0c2tpcCA9IGZhbHNlO1xuIDkyOTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfc3JjX2dvYWxzOyBpJiM0MzsmIzQzOylcbiA5MzA6XHRcdFx0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoXHUwMDI2c3JjLCBcdTAwMjZzcmNfZ29hbHNbaV0pO1xuIDkzMTpcdFxuIDkzMjpcdFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFx1MDAyNmRzdCwgXHUwMDI2c3JjKTtcbiA5MzM6XHRcbiA5MzQ6XHRcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgXHUwMDI2ZHN0KVxuIDkzNTpcdFx0XHRucl9kc3QmIzQzOyYjNDM7O1xuIDkzNjpcdFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBcdTAwMjZzcmMpXG4gOTM3Olx0XHRcdG5yX3NyYyYjNDM7JiM0Mzs7XG4gOTM4Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbnJfZHN0LCBucl9zcmMpO1xuIDkzOTpcdFx0aWYgKG5yX2RzdCAhPSBucl9zcmMpXG4gOTQwOlx0XHRcdGdvdG8gb3V0O1xuIDk0MTpcdFxuIDk0MjpcdFx0aSA9IDA7XG4gOTQzOlx0XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIChcdTAwMjZkc3QpKSB7XG4gOTQ0Olx0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBnb2FsLVx1MDAzZW1ldHJpYywgc3JjX2dvYWxzW2ldLm1ldHJpYyk7XG4gOTQ1Olx0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBnb2FsLVx1MDAzZXRhcmdldF92YWx1ZSxcbiA5NDY6XHRcdFx0XHRcdHNyY19nb2Fsc1tpJiM0MzsmIzQzO10udGFyZ2V0X3ZhbHVlKTtcbiA5NDc6XHRcdH1cbiA5NDg6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBpLCBucl9zcmNfZ29hbHMpO1xuIDk0OTpcdFxuIDk1MDpcdG91dDpcbiA5NTE6XHRcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShnb2FsLCBuZXh0LCAoXHUwMDI2ZHN0KSlcbiA5NTI6XHRcdFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGdvYWwpO1xuIDk1MzpcdFx0aWYgKHNraXApXG4gOTU0Olx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7Z29hbCBhbGxvYyBmYWlsXCYjMzQ7KTtcbiA5NTU6XHR9XG4gOTU2Olx0XG4gOTU3Olx0c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIDk1ODpcdHtcbiA5NTk6XHRcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2Zvcih0ZXN0LFxuIDk2MDpcdFx0XHRcdChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbFtdKXt9LCAwLFxuIDk2MTpcdFx0XHRcdChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbFtdKXtcbiA5NjI6XHRcdFx0XHRcdHtcbiA5NjM6XHRcdFx0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9VU0VSX0lOUFVULFxuIDk2NDpcdFx0XHRcdFx0LnRhcmdldF92YWx1ZSA9IDEyMyxcbiA5NjU6XHRcdFx0XHRcdH0sXG4gOTY2Olx0XHRcdFx0fSwgMSk7XG4gOTY3Olx0XHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3IodGVzdCxcbiA5Njg6XHRcdFx0XHQoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWxbXSl7XG4gOTY5Olx0XHRcdFx0XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDU5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgQ29yZS1LVW5pdCBUZXN0IEhlYWRlcioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgZW5kIG9mIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBJJiMzOTttIGN1cmlvdXMgd2hhdCBmaW5hbCB0ZXN0IGRlY2xhcmF0aW9ucyBvciBoZWxwZXIgbWFjcm9zIHRoZXkmIzM5O3ZlIHBsYWNlZCBoZXJlLiBJdCYjMzk7cyBsaWtlbHkgdGhlIGNvbmNsdWRpbmcgZWxlbWVudHMgZGVmaW5lIHRoZSBzcGVjaWZpYyB0ZXN0cyBmb3IgdGhlIGNvcmUgREFNT04gZnVuY3Rpb25hbGl0eSwgb3IgcG90ZW50aWFsbHkgaW5jbHVkZSB1dGlsaXR5IGZ1bmN0aW9ucyBtZWFudCB0byBiZSBhdmFpbGFibGUgaW4gb3RoZXIgdGVzdCBmaWxlcy4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgbWlnaHQgYmUgYXNzZXJ0aW9ucyBvciBzZXR1cCByb3V0aW5lcyBkZXNpZ25lZCB0byBmYWNpbGl0YXRlIGNvbXByZWhlbnNpdmUgdGVzdGluZyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eSB0aWVkIHRvIHRoZSBEQU1PTiBzdWJzeXN0ZW0sIHBvdGVudGlhbGx5IGludm9sdmluZyBzcGVjaWZpYyBzY2VuYXJpb3MgYW5kIGNvcm5lciBjYXNlcy4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGFueSB0ZXN0IGNhc2VzLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgbG9vayBsaWtlIHRoZXkmIzM5O3JlIGRlc2lnbmVkIHRvIGhhbmRsZSBjb25jdXJyZW50IG9wZXJhdGlvbnMgb3IgY29tcGxleCBtZW1vcnkgYWxsb2NhdGlvbnMuIEFsc28sIEnigJltIGxvb2tpbmcgdG8gc2VlIGhvdyB0aGV54oCZcmUgaGFuZGxpbmcgZXhwZWN0ZWQgZmFpbHVyZXMgYW5kIGVycm9yIHBhdGhzOyBhIGdvb2QgdGVzdCBzdWl0ZSBzaG91bGQgY292ZXIgdGhvc2UgdGhvcm91Z2hseS4gTXkgbWFpbiBmb2N1cyB3aWxsIGJlIG9uIHRoZSB0ZXN0IHN0cnVjdHVyZSBhbmQgdGhlIGNvdmVyYWdlLCBzaW5jZSBLVW5pdCBpcyBhIGdyZWF0IGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMDA6XHRcdFx0LmZhaWxfY2hhcmdlX2Rlbm9tID0gMyxcbjEwMDE6XHRcdFx0LndlaWdodF9zeiA9IDQsXG4xMDAyOlx0XHRcdC53ZWlnaHRfbnJfYWNjZXNzZXMgPSA1LFxuMTAwMzpcdFx0XHQud2VpZ2h0X2FnZSA9IDYsXG4xMDA0Olx0XHR9O1xuMTAwNTpcdFx0c3RydWN0IGRhbW9zX3F1b3RhIHNyYyA9IHtcbjEwMDY6XHRcdFx0LnJlc2V0X2ludGVydmFsID0gNyxcbjEwMDc6XHRcdFx0Lm1zID0gOCxcbjEwMDg6XHRcdFx0LnN6ID0gOSxcbjEwMDk6XHRcdFx0LmdvYWxfdHVuZXIgPSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMLFxuMTAxMDpcdFx0XHQuZmFpbF9jaGFyZ2VfbnVtID0gMSxcbjEwMTE6XHRcdFx0LmZhaWxfY2hhcmdlX2Rlbm9tID0gMTAyNCxcbjEwMTI6XHRcdFx0LndlaWdodF9zeiA9IDEwLFxuMTAxMzpcdFx0XHQud2VpZ2h0X25yX2FjY2Vzc2VzID0gMTEsXG4xMDE0Olx0XHRcdC53ZWlnaHRfYWdlID0gMTIsXG4xMDE1Olx0XHR9O1xuMTAxNjpcdFxuMTAxNzpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZHN0LmdvYWxzKTtcbjEwMTg6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnNyYy5nb2Fscyk7XG4xMDE5Olx0XG4xMDIwOlx0XHRkYW1vc19jb21taXRfcXVvdGEoXHUwMDI2ZHN0LCBcdTAwMjZzcmMpO1xuMTAyMTpcdFxuMTAyMjpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC5yZXNldF9pbnRlcnZhbCwgc3JjLnJlc2V0X2ludGVydmFsKTtcbjEwMjM6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QubXMsIHNyYy5tcyk7XG4xMDI0Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LnN6LCBzcmMuc3opO1xuMTAyNTpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC5nb2FsX3R1bmVyLCBzcmMuZ29hbF90dW5lcik7XG4xMDI2Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LmZhaWxfY2hhcmdlX251bSwgc3JjLmZhaWxfY2hhcmdlX251bSk7XG4xMDI3Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LmZhaWxfY2hhcmdlX2Rlbm9tLCBzcmMuZmFpbF9jaGFyZ2VfZGVub20pO1xuMTAyODpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC53ZWlnaHRfc3osIHNyYy53ZWlnaHRfc3opO1xuMTAyOTpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC53ZWlnaHRfbnJfYWNjZXNzZXMsIHNyYy53ZWlnaHRfbnJfYWNjZXNzZXMpO1xuMTAzMDpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC53ZWlnaHRfYWdlLCBzcmMud2VpZ2h0X2FnZSk7XG4xMDMxOlx0fVxuMTAzMjpcdFxuMTAzMzpcdHN0YXRpYyBpbnQgZGFtb3NfdGVzdF9oZWxwX2Rlc3RzX3NldHVwKHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzICpkZXN0cyxcbjEwMzQ6XHRcdFx0dW5zaWduZWQgaW50ICpub2RlX2lkX2FyciwgdW5zaWduZWQgaW50ICp3ZWlnaHRfYXJyLFxuMTAzNTpcdFx0XHRzaXplX3QgbnJfZGVzdHMpXG4xMDM2Olx0e1xuMTAzNzpcdFx0c2l6ZV90IGk7XG4xMDM4Olx0XG4xMDM5Olx0XHRkZXN0cy1cdTAwM2Vub2RlX2lkX2FyciA9IGttYWxsb2Nfb2JqcygqZGVzdHMtXHUwMDNlbm9kZV9pZF9hcnIsIG5yX2Rlc3RzKTtcbjEwNDA6XHRcdGlmICghZGVzdHMtXHUwMDNlbm9kZV9pZF9hcnIpXG4xMDQxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTA0MjpcdFx0ZGVzdHMtXHUwMDNld2VpZ2h0X2FyciA9IGttYWxsb2Nfb2JqcygqZGVzdHMtXHUwMDNld2VpZ2h0X2FyciwgbnJfZGVzdHMpO1xuMTA0MzpcdFx0aWYgKCFkZXN0cy1cdTAwM2V3ZWlnaHRfYXJyKSB7XG4xMDQ0Olx0XHRcdGtmcmVlKGRlc3RzLVx1MDAzZW5vZGVfaWRfYXJyKTtcbjEwNDU6XHRcdFx0ZGVzdHMtXHUwMDNlbm9kZV9pZF9hcnIgPSBOVUxMO1xuMTA0NjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjEwNDc6XHRcdH1cbjEwNDg6XHRcbjEwNDk6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2Rlc3RzOyBpJiM0MzsmIzQzOykge1xuMTA1MDpcdFx0XHRkZXN0cy1cdTAwM2Vub2RlX2lkX2FycltpXSA9IG5vZGVfaWRfYXJyW2ldO1xuMTA1MTpcdFx0XHRkZXN0cy1cdTAwM2V3ZWlnaHRfYXJyW2ldID0gd2VpZ2h0X2FycltpXTtcbjEwNTI6XHRcdH1cbjEwNTM6XHRcdGRlc3RzLVx1MDAzZW5yX2Rlc3RzID0gbnJfZGVzdHM7XG4xMDU0Olx0XHRyZXR1cm4gMDtcbjEwNTU6XHR9XG4xMDU2Olx0XG4xMDU3Olx0c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9oZWxwX2Rlc3RzX2ZyZWUoc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgKmRlc3RzKVxuMTA1ODpcdHtcbjEwNTk6XHRcdGtmcmVlKGRlc3RzLVx1MDAzZW5vZGVfaWRfYXJyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MjIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGVuZCBvZiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQgYXJlIHRoZXkgdGVzdGluZyBpbiB0aGlzIHBhcnRpY3VsYXIgaGVhZGVyPyBHaXZlbiB0aGUgZmlsZSBwYXRoLCB0aGlzIGlzIGNsZWFybHkgS1VuaXQgcmVsYXRlZCBhbmQgbGlrZWx5IHBhcnQgb2YgREFNT04mIzM5O3MgdGVzdGluZyBpbmZyYXN0cnVjdHVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgdGVzdCBtYWNyb3MsIGhlbHBlciBmdW5jdGlvbnMsIG9yIHBvdGVudGlhbGx5IGV2ZW4gc29tZSB0ZXN0IHN0dWJzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgREFNT04gaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgc2NvcGUgYW5kIHB1cnBvc2Ugb2YgdGhlIGZ1bmN0aW9ucyBvciBzdHJ1Y3R1cmVzIGRlZmluZWQgYXQgdGhlIHRhaWwgb2YgdGhpcyBmaWxlLiBBcmUgdGhleSBkZWZpbmluZyBzcGVjaWZpYyB0ZXN0IGNhc2VzLCBwcmVwYXJpbmcgZGF0YSBmb3IgdGhlIHRlc3RzLCBvciBwZXJoYXBzIGVzdGFibGlzaGluZyBpbmZyYXN0cnVjdHVyZSBmb3IgcnVubmluZyB0aGUgREFNT04gdGVzdHMgd2l0aGluIHRoZSBLVW5pdCBmcmFtZXdvcms/IEtub3dpbmcgREFNT04gYW5kIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGtlcm5lbCwgSSYjMzk7bSBhbnRpY2lwYXRpbmcgaW50ZXJhY3Rpb25zIHdpdGggbWVtb3J5IHJlZ2lvbnMsIG1vbml0b3JpbmcgZnVuY3Rpb25zLCBhbmQgZGF0YSBhY2Nlc3MuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWFjcm9zIGFuZCBpbmxpbmUgZnVuY3Rpb25zIHRvIHNlZSBob3cgdGhlIERBTU9OIGNvcmUgY29tcG9uZW50cyBhcmUgYWN0dWFsbHkgZXhlcmNpc2VkIHVuZGVyIHRlc3QsIGFuZCBob3cgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGlzIGFzc2VydGVkIHdpdGhpbiB0aGlzIGVudmlyb25tZW50LiBVbHRpbWF0ZWx5LCBteSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IERBTU9OIGlzIHZhbGlkYXRlZCB1c2luZyB0aGlzIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTAwOlx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7c2tpcFwmIzM0Oyk7XG4xMTAxOlx0fVxuMTEwMjpcdFxuMTEwMzpcdHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X2Rlc3RzKHN0cnVjdCBrdW5pdCAqdGVzdClcbjExMDQ6XHR7XG4xMTA1Olx0XHRkYW1vc190ZXN0X2NvbW1pdF9kZXN0c19mb3IodGVzdCxcbjExMDY6XHRcdFx0XHQodW5zaWduZWQgaW50W10pezEsIDIsIDN9LCAodW5zaWduZWQgaW50W10pezIsIDMsIDR9LFxuMTEwNzpcdFx0XHRcdDMsXG4xMTA4Olx0XHRcdFx0KHVuc2lnbmVkIGludFtdKXs0LCA1LCA2fSwgKHVuc2lnbmVkIGludFtdKXs1LCA2LCA3fSxcbjExMDk6XHRcdFx0XHQzKTtcbjExMTA6XHRcdGRhbW9zX3Rlc3RfY29tbWl0X2Rlc3RzX2Zvcih0ZXN0LFxuMTExMTpcdFx0XHRcdCh1bnNpZ25lZCBpbnRbXSl7MSwgMn0sICh1bnNpZ25lZCBpbnRbXSl7MiwgM30sXG4xMTEyOlx0XHRcdFx0MixcbjExMTM6XHRcdFx0XHQodW5zaWduZWQgaW50W10pezQsIDUsIDZ9LCAodW5zaWduZWQgaW50W10pezUsIDYsIDd9LFxuMTExNDpcdFx0XHRcdDMpO1xuMTExNTpcdFx0ZGFtb3NfdGVzdF9jb21taXRfZGVzdHNfZm9yKHRlc3QsXG4xMTE2Olx0XHRcdFx0TlVMTCwgTlVMTCwgMCxcbjExMTc6XHRcdFx0XHQodW5zaWduZWQgaW50W10pezQsIDUsIDZ9LCAodW5zaWduZWQgaW50W10pezUsIDYsIDd9LFxuMTExODpcdFx0XHRcdDMpO1xuMTExOTpcdFx0ZGFtb3NfdGVzdF9jb21taXRfZGVzdHNfZm9yKHRlc3QsXG4xMTIwOlx0XHRcdFx0KHVuc2lnbmVkIGludFtdKXsxLCAyLCAzfSwgKHVuc2lnbmVkIGludFtdKXsyLCAzLCA0fSxcbjExMjE6XHRcdFx0XHQzLFxuMTEyMjpcdFx0XHRcdCh1bnNpZ25lZCBpbnRbXSl7NCwgNX0sICh1bnNpZ25lZCBpbnRbXSl7NSwgNn0sIDIpO1xuMTEyMzpcdFx0ZGFtb3NfdGVzdF9jb21taXRfZGVzdHNfZm9yKHRlc3QsXG4xMTI0Olx0XHRcdFx0KHVuc2lnbmVkIGludFtdKXsxLCAyLCAzfSwgKHVuc2lnbmVkIGludFtdKXsyLCAzLCA0fSxcbjExMjU6XHRcdFx0XHQzLFxuMTEyNjpcdFx0XHRcdE5VTEwsIE5VTEwsIDApO1xuMTEyNzpcdH1cbjExMjg6XHRcbjExMjk6XHRzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbjExMzA6XHRcdFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpzcmMpXG4xMTMxOlx0e1xuMTEzMjpcdFx0ZGFtb3NfY29tbWl0X2ZpbHRlcihkc3QsIHNyYyk7XG4xMTMzOlx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZXR5cGUsIHNyYy1cdTAwM2V0eXBlKTtcbjExMzQ6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbWF0Y2hpbmcsIHNyYy1cdTAwM2VtYXRjaGluZyk7XG4xMTM1Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZWFsbG93LCBzcmMtXHUwMDNlYWxsb3cpO1xuMTEzNjpcdFx0c3dpdGNoIChzcmMtXHUwMDNldHlwZSkge1xuMTEzNzpcdFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzpcbjExMzg6XHRcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VtZW1jZ19pZCwgc3JjLVx1MDAzZW1lbWNnX2lkKTtcbjExMzk6XHRcdFx0YnJlYWs7XG4xMTQwOlx0XHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XG4xMTQxOlx0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlYWRkcl9yYW5nZS5zdGFydCxcbjExNDI6XHRcdFx0XHRcdHNyYy1cdTAwM2VhZGRyX3JhbmdlLnN0YXJ0KTtcbjExNDM6XHRcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VhZGRyX3JhbmdlLmVuZCxcbjExNDQ6XHRcdFx0XHRcdHNyYy1cdTAwM2VhZGRyX3JhbmdlLmVuZCk7XG4xMTQ1Olx0XHRcdGJyZWFrO1xuMTE0NjpcdFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XG4xMTQ3Olx0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNldGFyZ2V0X2lkeCwgc3JjLVx1MDAzZXRhcmdldF9pZHgpO1xuMTE0ODpcdFx0XHRicmVhaztcbjExNDk6XHRcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwNzcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGVuZCBvZiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gSSYjMzk7bSBndWVzc2luZyB0aGlzIGZpbGUgbGlrZWx5IGNvbnRhaW5zIHRoZSBjb3JlIEtVbml0IHRlc3RzIGZvciBEQU1PTiwgdGhlIERhdGEgQWNjZXNzIE1vbml0b3IuIEtub3dpbmcgdGhlIGVuZCBpcyBrZXkuIEl0JiMzOTtzIHVzdWFsbHkgd2hlcmUgeW91JiMzOTtsbCBmaW5kIHRoZSBsYXN0IHRlc3QgY2FzZXMsIHBvdGVudGlhbGx5IHJlY2VudCBhZGRpdGlvbnMsIG9yIG1heWJlIGEgc3VtbWFyeS9lbmQtb2YtZmlsZSBtYXJrZXIgdGhhdCBnaXZlcyBtZSBjb250ZXh0LiBXaGF0IGFyZSB0aGV5IHRlc3Rpbmc/IFdoYXQgZnVuY3Rpb25hbGl0eSBpbiBEQU1PTiYjMzk7cyBjb3JlIGlzIGJlaW5nIHZhbGlkYXRlZCBoZXJlPyBBcmUgdGhlcmUgYW55IG5ldyB0ZXN0IGZpeHR1cmVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgcmVncmVzc2lvbiB0ZXN0cz8KCkkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBkZWZpbml0aW9ucyBmb3IgYGt1bml0X2Nhc2VgIHN0cnVjdHVyZXMsIHRlc3QgZnVuY3Rpb25zIHRoYXQgb3BlcmF0ZSBvbiB0aG9zZSBzdHJ1Y3R1cmVzLCBhbmQgaG9wZWZ1bGx5LCBzb21lIGNvbW1lbnRhcnkgb3IgZG9jdW1lbnRhdGlvbiB0aGF0IGNsYXJpZmllcyB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuIEnigJltIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyB0aG9yb3VnaGx5IERBTU9OJiMzOTtzIG1lbW9yeSBtb25pdG9yaW5nIGFuZCBhZGFwdGF0aW9uIG1lY2hhbmlzbXMgYXJlIGJlaW5nIHRlc3RlZCBhdCB0aGUgS1VuaXQgbGV2ZWwuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBiYXNpYyBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gdGVzdHMsIHRvIG1vcmUgY29tcGxleCBzY2VuYXJpb3MgaW52b2x2aW5nIGFjY2VzcyBwYXR0ZXJuIGFuYWx5c2lzLCBhZGFwdGF0aW9uIHRyaWdnZXJpbmcsIGFuZCBwZXJmb3JtYW5jZSBpbXBhY3QuIFRoZSBlbmQgb2YgdGhlIGZpbGUgbWlnaHQgaGF2ZSBzb21lIGNsdWVzIHRvIHdoYXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHRlc3RzIGFyZS4gTGV0JiMzOTtzIHNlZSBob3cgd2VsbCBpdCB0ZXN0cyBEQU1PTiYjMzk7cyBpbXBvcnRhbnQgZnVuY3Rpb25hbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIwMDpcdFx0XHRcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfQUREUixcbjEyMDE6XHRcdFx0XHQubWF0Y2hpbmcgPSBmYWxzZSxcbjEyMDI6XHRcdFx0XHQuYWxsb3cgPSBmYWxzZSxcbjEyMDM6XHRcdFx0XHQuYWRkcl9yYW5nZSA9IHsuc3RhcnQgPSA0NTYsIC5lbmQgPSA1Njd9LFxuMTIwNDpcdFx0XHRcdH0pO1xuMTIwNTpcdFx0ZGFtb3NfdGVzdF9jb21taXRfZmlsdGVyX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG4xMjA2Olx0XHRcdFx0XHUwMDI2KHN0cnVjdCBkYW1vc19maWx0ZXIpe1xuMTIwNzpcdFx0XHRcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULFxuMTIwODpcdFx0XHRcdC5tYXRjaGluZyA9IHRydWUsXG4xMjA5Olx0XHRcdFx0LmFsbG93ID0gdHJ1ZSxcbjEyMTA6XHRcdFx0XHQudGFyZ2V0X2lkeCA9IDYsXG4xMjExOlx0XHRcdFx0fSk7XG4xMjEyOlx0fVxuMTIxMzpcdFxuMTIxNDpcdHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfaGVscF9pbml0YWlsaXplX3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnNjaGVtZSlcbjEyMTU6XHR7XG4xMjE2Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzY2hlbWUtXHUwMDNlcXVvdGEuZ29hbHMpO1xuMTIxNzpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2NoZW1lLVx1MDAzZWNvcmVfZmlsdGVycyk7XG4xMjE4Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzY2hlbWUtXHUwMDNlb3BzX2ZpbHRlcnMpO1xuMTIxOTpcdH1cbjEyMjA6XHRcbjEyMjE6XHRzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LCBzdHJ1Y3QgZGFtb3MgKmRzdCxcbjEyMjI6XHRcdFx0c3RydWN0IGRhbW9zICpzcmMpXG4xMjIzOlx0e1xuMTIyNDpcdFx0aW50IGVycjtcbjEyMjU6XHRcbjEyMjY6XHRcdGRhbW9zX3Rlc3RfaGVscF9pbml0YWlsaXplX3NjaGVtZShkc3QpO1xuMTIyNzpcdFx0ZGFtb3NfdGVzdF9oZWxwX2luaXRhaWxpemVfc2NoZW1lKHNyYyk7XG4xMjI4Olx0XG4xMjI5Olx0XHRlcnIgPSBkYW1vc19jb21taXQoZHN0LCBzcmMpO1xuMTIzMDpcdFx0aWYgKGVycilcbjEyMzE6XHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtkYW1vc19jb21taXQgZmFpbFwmIzM0Oyk7XG4xMjMyOlx0XG4xMjMzOlx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZXBhdHRlcm4ubWluX3N6X3JlZ2lvbixcbjEyMzQ6XHRcdFx0XHRzcmMtXHUwMDNlcGF0dGVybi5taW5fc3pfcmVnaW9uKTtcbjEyMzU6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlcGF0dGVybi5tYXhfc3pfcmVnaW9uLFxuMTIzNjpcdFx0XHRcdHNyYy1cdTAwM2VwYXR0ZXJuLm1heF9zel9yZWdpb24pO1xuMTIzNzpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VwYXR0ZXJuLm1pbl9ucl9hY2Nlc3NlcyxcbjEyMzg6XHRcdFx0XHRzcmMtXHUwMDNlcGF0dGVybi5taW5fbnJfYWNjZXNzZXMpO1xuMTIzOTpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VwYXR0ZXJuLm1heF9ucl9hY2Nlc3NlcyxcbjEyNDA6XHRcdFx0XHRzcmMtXHUwMDNlcGF0dGVybi5tYXhfbnJfYWNjZXNzZXMpO1xuMTI0MTpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VwYXR0ZXJuLm1pbl9hZ2VfcmVnaW9uLFxuMTI0MjpcdFx0XHRcdHNyYy1cdTAwM2VwYXR0ZXJuLm1pbl9hZ2VfcmVnaW9uKTtcbjEyNDM6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlcGF0dGVybi5tYXhfYWdlX3JlZ2lvbixcbjEyNDQ6XHRcdFx0XHRzcmMtXHUwMDNlcGF0dGVybi5tYXhfYWdlX3JlZ2lvbik7XG4xMjQ1Olx0XG4xMjQ2Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZWFjdGlvbiwgc3JjLVx1MDAzZWFjdGlvbik7XG4xMjQ3Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZWFwcGx5X2ludGVydmFsX3VzLCBzcmMtXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMpO1xuMTI0ODpcdFxuMTI0OTpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2V3bWFya3MubWV0cmljLCBzcmMtXHUwMDNld21hcmtzLm1ldHJpYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Mjg0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgQ29yZS1LVW5pdCBUZXN0IEhlYWRlcioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgZW5kIG9mIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBJJiMzOTttIGN1cmlvdXMgd2hhdCBmaW5hbCB0ZXN0IGRlY2xhcmF0aW9ucyBvciBoZWxwZXIgbWFjcm9zIHRoZXkmIzM5O3ZlIHBsYWNlZCBoZXJlLiBJdCYjMzk7cyBsaWtlbHkgdGhlIGNvbmNsdWRpbmcgZWxlbWVudHMgZGVmaW5lIHRoZSBzcGVjaWZpYyB0ZXN0cyBmb3IgdGhlIGNvcmUgREFNT04gZnVuY3Rpb25hbGl0eSwgb3IgcG90ZW50aWFsbHkgaW5jbHVkZSB1dGlsaXR5IGZ1bmN0aW9ucyBtZWFudCB0byBiZSBhdmFpbGFibGUgaW4gb3RoZXIgdGVzdCBmaWxlcy4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgbWlnaHQgYmUgYXNzZXJ0aW9ucyBvciBzZXR1cCByb3V0aW5lcyBkZXNpZ25lZCB0byBmYWNpbGl0YXRlIGNvbXByZWhlbnNpdmUgdGVzdGluZyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eSB0aWVkIHRvIHRoZSBEQU1PTiBzdWJzeXN0ZW0sIHBvdGVudGlhbGx5IGludm9sdmluZyBzcGVjaWZpYyBzY2VuYXJpb3MgYW5kIGNvcm5lciBjYXNlcy4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGFueSB0ZXN0IGNhc2VzLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgbG9vayBsaWtlIHRoZXkmIzM5O3JlIGRlc2lnbmVkIHRvIGhhbmRsZSBjb25jdXJyZW50IG9wZXJhdGlvbnMgb3IgY29tcGxleCBtZW1vcnkgYWxsb2NhdGlvbnMuIEFsc28sIEnigJltIGxvb2tpbmcgdG8gc2VlIGhvdyB0aGV54oCZcmUgaGFuZGxpbmcgZXhwZWN0ZWQgZmFpbHVyZXMgYW5kIGVycm9yIHBhdGhzOyBhIGdvb2QgdGVzdCBzdWl0ZSBzaG91bGQgY292ZXIgdGhvc2UgdGhvcm91Z2hseS4gTXkgbWFpbiBmb2N1cyB3aWxsIGJlIG9uIHRoZSB0ZXN0IHN0cnVjdHVyZSBhbmQgdGhlIGNvdmVyYWdlLCBzaW5jZSBLVW5pdCBpcyBhIGdyZWF0IGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyOTA6XHRcdGRhbW9zX3Rlc3RfY29tbWl0X2Zvcih0ZXN0LFxuMTI5MTpcdFx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3Mpe1xuMTI5MjpcdFx0XHRcdFx0LnBhdHRlcm4gPSAoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuKXtcbjEyOTM6XHRcdFx0XHRcdFx0MSwgMiwgMywgNCwgNSwgNn0sXG4xMjk0Olx0XHRcdFx0XHQuYWN0aW9uID0gREFNT1NfUEFHRU9VVCxcbjEyOTU6XHRcdFx0XHRcdC5hcHBseV9pbnRlcnZhbF91cyA9IDEwMDAwMDAsXG4xMjk2Olx0XHRcdFx0XHQud21hcmtzID0gKHN0cnVjdCBkYW1vc193YXRlcm1hcmtzKXtcbjEyOTc6XHRcdFx0XHRcdFx0REFNT1NfV01BUktfRlJFRV9NRU1fUkFURSxcbjEyOTg6XHRcdFx0XHRcdFx0OTAwLCAxMDAsIDUwfSxcbjEyOTk6XHRcdFx0XHR9LFxuMTMwMDpcdFx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3Mpe1xuMTMwMTpcdFx0XHRcdFx0LnBhdHRlcm4gPSAoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuKXtcbjEzMDI6XHRcdFx0XHRcdFx0MiwgMywgNCwgNSwgNiwgN30sXG4xMzAzOlx0XHRcdFx0XHQuYWN0aW9uID0gREFNT1NfTUlHUkFURV9IT1QsXG4xMzA0Olx0XHRcdFx0XHQuYXBwbHlfaW50ZXJ2YWxfdXMgPSAyMDAwMDAwLFxuMTMwNTpcdFx0XHRcdFx0LnRhcmdldF9uaWQgPSA1LFxuMTMwNjpcdFx0XHRcdH0pO1xuMTMwNzpcdH1cbjEzMDg6XHRcbjEzMDk6XHRzdGF0aWMgc3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fdGVzdF9oZWxwX3NldHVwX3RhcmdldChcbjEzMTA6XHRcdFx0dW5zaWduZWQgbG9uZyByZWdpb25fc3RhcnRfZW5kW11bMl0sIGludCBucl9yZWdpb25zKVxuMTMxMTpcdHtcbjEzMTI6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4xMzEzOlx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuMTMxNDpcdFx0aW50IGk7XG4xMzE1Olx0XG4xMzE2Olx0XHR0ID0gZGFtb25fbmV3X3RhcmdldCgpO1xuMTMxNzpcdFx0aWYgKCF0KVxuMTMxODpcdFx0XHRyZXR1cm4gTlVMTDtcbjEzMTk6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3JlZ2lvbnM7IGkmIzQzOyYjNDM7KSB7XG4xMzIwOlx0XHRcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKHJlZ2lvbl9zdGFydF9lbmRbaV1bMF0sXG4xMzIxOlx0XHRcdFx0XHRyZWdpb25fc3RhcnRfZW5kW2ldWzFdKTtcbjEzMjI6XHRcdFx0aWYgKCFyKSB7XG4xMzIzOlx0XHRcdFx0ZGFtb25fZnJlZV90YXJnZXQodCk7XG4xMzI0Olx0XHRcdFx0cmV0dXJuIE5VTEw7XG4xMzI1Olx0XHRcdH1cbjEzMjY6XHRcdFx0ZGFtb25fYWRkX3JlZ2lvbihyLCB0KTtcbjEzMjc6XHRcdH1cbjEzMjg6XHRcdHJldHVybiB0O1xuMTMyOTpcdH1cbjEzMzA6XHRcbjEzMzE6XHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuMTMzMjpcdFx0XHR1bnNpZ25lZCBsb25nIGRzdF9zdGFydF9lbmRbXVsyXSwgaW50IG5yX2RzdF9yZWdpb25zLFxuMTMzMzpcdFx0XHR1bnNpZ25lZCBsb25nIHNyY19zdGFydF9lbmRbXVsyXSwgaW50IG5yX3NyY19yZWdpb25zLFxuMTMzNDpcdFx0XHR1bnNpZ25lZCBsb25nIGV4cGVjdF9zdGFydF9lbmRbXVsyXSwgaW50IG5yX2V4cGVjdF9yZWdpb25zKVxuMTMzNTpcdHtcbjEzMzY6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKmRzdF90YXJnZXQsICpzcmNfdGFyZ2V0O1xuMTMzNzpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbjEzMzg6XHRcdGludCBpO1xuMTMzOTpcdFxuMTM0MDpcdFx0ZHN0X3RhcmdldCA9IGRhbW9uX3Rlc3RfaGVscF9zZXR1cF90YXJnZXQoZHN0X3N0YXJ0X2VuZCwgbnJfZHN0X3JlZ2lvbnMpO1xuMTM0MTpcdFx0aWYgKCFkc3RfdGFyZ2V0KVxuMTM0MjpcdFx0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O2RzdCB0YXJnZXQgc2V0dXAgZmFpbFwmIzM0Oyk7XG4xMzQzOlx0XHRzcmNfdGFyZ2V0ID0gZGFtb25fdGVzdF9oZWxwX3NldHVwX3RhcmdldChzcmNfc3RhcnRfZW5kLCBucl9zcmNfcmVnaW9ucyk7XG4xMzQ0Olx0XHRpZiAoIXNyY190YXJnZXQpIHtcbjEzNDU6XHRcdFx0ZGFtb25fZnJlZV90YXJnZXQoZHN0X3RhcmdldCk7XG4xMzQ2Olx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7c3JjIHRhcmdldCBzZXR1cCBmYWlsXCYjMzQ7KTtcbjEzNDc6XHRcdH1cbjEzNDg6XHRcdGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyhkc3RfdGFyZ2V0LCBzcmNfdGFyZ2V0LCAxKTtcbjEzNDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1NTEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipEZWVwIERpdmUgaW50byBDb3JlLUt1bml0LmgmIzM5O3MgRGVwdGhzKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgdG8gdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mIHRoaXMgYG1tL2RhbW9uYCBzdHVmZi4gVGltZSB0byBzdGFydCBhdCB0aGUgYWJzb2x1dGUgYm90dG9tIG9mIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1vc3QgZnVuZGFtZW50YWwgZGVmaW5pdGlvbnMgb3IgdGhlIGdyb3VuZHdvcmsgZm9yIHRoZSB0ZXN0IHN1aXRlIGlzIGxhaWQgb3V0LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgY3J1Y2lhbCBtYWNyb3MsIHN0cnVjdHVyZXMsIG9yIGFueSBmb3VuZGF0aW9uYWwgZWxlbWVudHMgdGhhdCBhcmUgdXNlZCB0aHJvdWdob3V0IHRoZSB0ZXN0cy4gVGhpcyBpcyBhIGNvbW1vbiBwcmFjdGljZSB3aGVuIEkgYXBwcm9hY2ggYW55IG5ldyBjb2RlIGJhc2UuIEkgYWx3YXlzIHN0YXJ0IGZyb20gdGhlIGxvdyBsZXZlbCBhbmQgYnVpbGQgdXAgYSBtZW50YWwgbW9kZWwgZnJvbSB0aGUgZGV0YWlscy4gSSB3aWxsIGFsc28gYmUgbG9va2luZyBmb3IgY2x1ZXMgdGhhdCBjYW4gZXhwbGFpbiB3aHkgdGhlIHRlc3RzIHBhc3Mgb3IgZmFpbC4gT25jZSBJIGdldCB0aGUgZm91bmRhdGlvbmFsIGVsZW1lbnRzLCBJIHdpbGwgYmUgYWJsZSB0byB3b3JrIHVwIHRoZSBzdGFjayBhbmQgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiBlYWNoIG9mIHRoZSB0ZXN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0NDA6XHRcdFx0dW5zaWduZWQgaW50IGRzdF93ZWlnaHRzW10sIGludCBucl9kc3RfcHJvYmVzLFxuMTQ0MTpcdFx0XHR1bnNpZ25lZCBpbnQgc3JjX3dlaWdodHNbXSwgaW50IG5yX3NyY19wcm9iZXMpXG4xNDQyOlx0e1xuMTQ0MzpcdFx0c3RydWN0IGRhbW9uX2N0eCAqZHN0LCAqc3JjO1xuMTQ0NDpcdFx0aW50IGVycjtcbjE0NDU6XHRcdHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0X3Byb2JlLCAqc3JjX3Byb2JlO1xuMTQ0NjpcdFxuMTQ0NzpcdFx0ZHN0ID0gZGFtb25fdGVzdF9oZWxwX3NldHVwX3Byb2Jlcyhkc3Rfd2VpZ2h0cywgbnJfZHN0X3Byb2Jlcyk7XG4xNDQ4Olx0XHRpZiAoIWRzdClcbjE0NDk6XHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtkc3QgYWxsb2MgZmFpbFwmIzM0Oyk7XG4xNDUwOlx0XHRzcmMgPSBkYW1vbl90ZXN0X2hlbHBfc2V0dXBfcHJvYmVzKHNyY193ZWlnaHRzLCBucl9zcmNfcHJvYmVzKTtcbjE0NTE6XHRcdGlmICghc3JjKSB7XG4xNDUyOlx0XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGRzdCk7XG4xNDUzOlx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7c3JjIGFsbG9jIGZhaWxcJiMzNDspO1xuMTQ1NDpcdFx0fVxuMTQ1NTpcdFxuMTQ1NjpcdFx0ZXJyID0gZGFtb25fY29tbWl0X3Byb2Jlcyhkc3QsIHNyYyk7XG4xNDU3Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZXJyLCAwKTtcbjE0NTg6XHRcdGlmIChlcnIpXG4xNDU5Olx0XHRcdGdvdG8gb3V0O1xuMTQ2MDpcdFx0bnJfZHN0X3Byb2JlcyA9IDA7XG4xNDYxOlx0XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdClcbjE0NjI6XHRcdFx0bnJfZHN0X3Byb2JlcyYjNDM7JiM0Mzs7XG4xNDYzOlx0XHRucl9zcmNfcHJvYmVzID0gMDtcbjE0NjQ6XHRcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHNyY19wcm9iZSwgc3JjKVxuMTQ2NTpcdFx0XHRucl9zcmNfcHJvYmVzJiM0MzsmIzQzOztcbjE0NjY6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBucl9kc3RfcHJvYmVzLCBucl9zcmNfcHJvYmVzKTtcbjE0Njc6XHRcdGlmIChucl9kc3RfcHJvYmVzICE9IG5yX3NyY19wcm9iZXMpXG4xNDY4Olx0XHRcdGdvdG8gb3V0O1xuMTQ2OTpcdFx0bnJfZHN0X3Byb2JlcyA9IDA7XG4xNDcwOlx0XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdCkge1xuMTQ3MTpcdFx0XHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUobnJfZHN0X3Byb2Jlcywgc3JjKTtcbjE0NzI6XHRcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNyY19wcm9iZS1cdTAwM2V3ZWlnaHQsIGRzdF9wcm9iZS1cdTAwM2V3ZWlnaHQpO1xuMTQ3MzpcdFx0XHRucl9kc3RfcHJvYmVzJiM0MzsmIzQzOztcbjE0NzQ6XHRcdH1cbjE0NzU6XHRvdXQ6XG4xNDc2Olx0XHRkYW1vbl9kZXN0cm95X2N0eChkc3QpO1xuMTQ3NzpcdFx0ZGFtb25fZGVzdHJveV9jdHgoc3JjKTtcbjE0Nzg6XHR9XG4xNDc5Olx0XG4xNDgwOlx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfcHJvYmVzKHN0cnVjdCBrdW5pdCAqdGVzdClcbjE0ODE6XHR7XG4xNDgyOlx0XHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4xNDgzOlx0XHRcdFx0KHVuc2lnbmVkIGludFtdKXt9LCAwLCAodW5zaWduZWQgaW50W10pe30sIDApO1xuMTQ4NDpcdFx0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuMTQ4NTpcdFx0XHRcdCh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXsxfSwgMSk7XG4xNDg2Olx0XHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4xNDg3Olx0XHRcdFx0KHVuc2lnbmVkIGludFtdKXt9LCAwLCAodW5zaWduZWQgaW50W10pezEsIDJ9LCAyKTtcbjE0ODg6XHRcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbjE0ODk6XHRcdFx0XHQodW5zaWduZWQgaW50W10pezF9LCAxLCAodW5zaWduZWQgaW50W10pezJ9LCAxKTtcbjE0OTA6XHRcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbjE0OTE6XHRcdFx0XHQodW5zaWduZWQgaW50W10pezF9LCAxLCAodW5zaWduZWQgaW50W10pezIsIDN9LCAyKTtcbjE0OTI6XHRcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbjE0OTM6XHRcdFx0XHQodW5zaWduZWQgaW50W10pezIsIDN9LCAyLCAodW5zaWduZWQgaW50W10pezF9LCAxKTtcbjE0OTQ6XHRcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbjE0OTU6XHRcdFx0XHQodW5zaWduZWQgaW50W10pezIsIDN9LCAyLCAodW5zaWduZWQgaW50W10pe30sIDApO1xuMTQ5NjpcdFx0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuMTQ5NzpcdFx0XHRcdCh1bnNpZ25lZCBpbnRbXSl7Mn0sIDEsICh1bnNpZ25lZCBpbnRbXSl7fSwgMCk7XG4xNDk4Olx0fVxuMTQ5OTpcdFxuMTUwMDpcdHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2N0eChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4xNTAxOlx0e1xuMTUwMjpcdFx0c3RydWN0IGRhbW9uX2N0eCAqc3JjLCAqZHN0O1xuMTUwMzpcdFxuMTUwNDpcdFx0c3JjID0gZGFtb25fbmV3X2N0eCgpO1xuMTUwNTpcdFx0aWYgKCFzcmMpXG4xNTA2Olx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7c3JjIGFsbG9jIGZhaWxcJiMzNDspO1xuMTUwNzpcdFx0ZHN0ID0gZGFtb25fbmV3X2N0eCgpO1xuMTUwODpcdFx0aWYgKCFkc3QpIHtcbjE1MDk6XHRcdFx0ZGFtb25fZGVzdHJveV9jdHgoc3JjKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwNTcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRmlsZSYjMzk7cyBUYWlsKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgZmluYWwgcG9ydGlvbiBvZiB0aGlzIGZpbGUsIGJleW9uZCBsaW5lIDE1MTAuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgc2Vuc2Ugb2YgdGhlICpyZWNlbnQqIGFjdGl2aXR5LCBhbnkgcG90ZW50aWFsIHBhdHRlcm5zIGVtZXJnaW5nIGF0IHRoZSBlbmQsIG9yIG1heWJlIGp1c3QgY29uZmlybWluZyBhc3N1bXB0aW9ucyBJIGhhdmUgYWJvdXQgdGhlIGRhdGFzZXQmIzM5O3Mgb3ZlcmFsbCBzdHJ1Y3R1cmUuIEkmIzM5O20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIHRoZSB0YWlsIGJlY2F1c2UsIGluIG15IGV4cGVyaWVuY2UsIHRoYXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgeW91IGZpbmQgdGhlIGxhdGVzdCBkYXRhIGVudHJpZXMsIGFub21hbGllcywgb3IgY3J1Y2lhbCBjb25jbHVkaW5nIG9ic2VydmF0aW9ucy4gSXQmIzM5O3MgYSBxdWljayBhbmQgZGlydHkgd2F5IHRvIHNwb3QgaWYgYW55dGhpbmcgc2lnbmlmaWNhbnQgaGFzIG9jY3VycmVkIGF0IHRoZSB2ZXJ5IGVuZC4gVGhpcyBoZWxwcyBtZSBkZWNpZGUgaWYgSSBuZWVkIHRvIGRvIGEgYnJvYWRlciBkYXRhIGludmVzdGlnYXRpb24gb3IgaWYgSSBjYW4gbWFrZSBjb25jbHVzaW9ucyBxdWlja2x5IGZyb20gdGhlIGVuZCBvZiB0aGUgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MTA6XHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtkc3QgYWxsb2MgZmFpbFwmIzM0Oyk7XG4xNTExOlx0XHR9XG4xNTEyOlx0XHQvKiBPbmx5IHBvd2VyIG9mIHR3byBtaW5fcmVnaW9uX3N6IGlzIGFsbG93ZWQuICovXG4xNTEzOlx0XHRzcmMtXHUwMDNlbWluX3JlZ2lvbl9zeiA9IDQwOTY7XG4xNTE0Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fY29tbWl0X2N0eChkc3QsIHNyYyksIDApO1xuMTUxNTpcdFx0c3JjLVx1MDAzZW1pbl9yZWdpb25fc3ogPSA0MDk1O1xuMTUxNjpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX2NvbW1pdF9jdHgoZHN0LCBzcmMpLCAtRUlOVkFMKTtcbjE1MTc6XHRcdHNyYy1cdTAwM2VtaW5fcmVnaW9uX3N6ID0gNDA5NjtcbjE1MTg6XHRcdHNyYy1cdTAwM2VwYXVzZSA9IHRydWU7XG4xNTE5Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fY29tbWl0X2N0eChkc3QsIHNyYyksIDApO1xuMTUyMDpcdFx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgZHN0LVx1MDAzZXBhdXNlKTtcbjE1MjE6XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KHNyYyk7XG4xNTIyOlx0XHRkYW1vbl9kZXN0cm95X2N0eChkc3QpO1xuMTUyMzpcdH1cbjE1MjQ6XHRcbjE1MjU6XHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4xNTI2Olx0e1xuMTUyNzpcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuMTUyODpcdFx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSwgKnByb2JlMjtcbjE1Mjk6XHRcbjE1MzA6XHRcdGN0eCA9IGRhbW9uX25ld19jdHgoKTtcbjE1MzE6XHRcdGlmICghY3R4KVxuMTUzMjpcdFx0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O2N0eCBhbGxvYyBmYWlsXCYjMzQ7KTtcbjE1MzM6XHRcdHByb2JlID0gZGFtb25fbmV3X3Byb2JlKCk7XG4xNTM0Olx0XHRpZiAoIXByb2JlKSB7XG4xNTM1Olx0XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4xNTM2Olx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7cHJvYmUgYWxsb2MgZmFpbFwmIzM0Oyk7XG4xNTM3Olx0XHR9XG4xNTM4Olx0XHRkYW1vbl9hZGRfcHJvYmUoY3R4LCBwcm9iZSk7XG4xNTM5Olx0XG4xNTQwOlx0XHQvKiBQYXJhbWV0ZXJzIGFyZSB2YWxpZGF0ZWQgb25seSBpZiBhbnkgcHJvYmUgd2VpZ2h0IGlzIHNldC4gKi9cbjE1NDE6XHRcdGN0eC1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPSAxO1xuMTU0MjpcdFx0Y3R4LVx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwMDAwO1xuMTU0MzpcdFx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKGN0eCkpO1xuMTU0NDpcdFxuMTU0NTpcdFx0LyogVXAgdG8gVThfTUFYIHNhbXBsZXMgcGVyIGFnZ3JlZ2F0aW9uIGludGVydmFsIGFyZSBhbGxvd2VkLiAqL1xuMTU0NjpcdFx0cHJvYmUtXHUwMDNld2VpZ2h0ID0gMTAwO1xuMTU0NzpcdFx0Y3R4LVx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgPSAyNTU7XG4xNTQ4Olx0XHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoY3R4KSk7XG4xNTQ5Olx0XG4xNTUwOlx0XHQvKiBNb3JlIHNhbXBsZXMgY291bGQgb3ZlcmZsb3cgdGhlIHByb2JlX2hpdHMgY291bnRlcnMuICovXG4xNTUxOlx0XHRjdHgtXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbCA9IDI1NjtcbjE1NTI6XHRcdEtVTklUX0VYUEVDVF9GQUxTRSh0ZXN0LCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoY3R4KSk7XG4xNTUzOlx0XG4xNTU0Olx0XHQvKiBUaGUgbGFyZ2VzdCB3ZWlnaHQgd2hvc2Ugd2VpZ2h0ZWQgaGl0IGNvdW50IGZpdHMgaW4gdW5zaWduZWQgaW50LiAqL1xuMTU1NTpcdFx0Y3R4LVx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgPSAyNTU7XG4xNTU2Olx0XHRwcm9iZS1cdTAwM2V3ZWlnaHQgPSBVSU5UX01BWCAvIDI1NTtcbjE1NTc6XHRcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhjdHgpKTtcbjE1NTg6XHRcbjE1NTk6XHRcdC8qIEFueSBsYXJnZXIgd2VpZ2h0IGNvdWxkIG92ZXJmbG93IGl0cyB3ZWlnaHRlZCBoaXQgY291bnQuICovXG4xNTYwOlx0XHRwcm9iZS1cdTAwM2V3ZWlnaHQgPSBVSU5UX01BWCAvIDI1NSAmIzQzOyAxO1xuMTU2MTpcdFx0S1VOSVRfRVhQRUNUX0ZBTFNFKHRlc3QsIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhjdHgpKTtcbjE1NjI6XHRcbjE1NjM6XHRcdC8qIFdpdGggb25lIHNhbXBsZSBwZXIgYWdncmVnYXRpb24sIGV2ZW4gdGhlIGxhcmdlc3Qgd2VpZ2h0IGZpdHMuICovXG4xNTY0Olx0XHRjdHgtXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbCA9IDE7XG4xNTY1Olx0XHRwcm9iZS1cdTAwM2V3ZWlnaHQgPSBVSU5UX01BWDtcbjE1NjY6XHRcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhjdHgpKTtcbjE1Njc6XHRcbjE1Njg6XHRcdC8qIFRoZSBzdW0gb2YgYWxsIHByb2JlcyYjMzk7IHdlaWdodGVkIGhpdCBjb3VudHMgY291bGQgYWxzbyBvdmVyZmxvdy4gKi9cbjE1Njk6XHRcdHByb2JlMiA9IGRhbW9uX25ld19wcm9iZSgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM2MQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgY29yZS1rdW5pdC5oYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gTGV0JiMzOTtzIGFzc3VtZSB0aGlzIGlzIHRoZSBoZWFkZXIgZmlsZSBmb3IgdGhlIGNvcmUgS1VuaXQgdGVzdHMgd2l0aGluIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcikgZnJhbWV3b3JrLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhpcyBiZWNhdXNlIEkmIzM5O20gdHJvdWJsZXNob290aW5nIGEgREFNT04tcmVsYXRlZCBpc3N1ZSwgcmV2aWV3aW5nIGNoYW5nZXMsIG9yIG1heWJlIGV2ZW4gY29udHJpYnV0aW5nIGEgbmV3IHRlc3QuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBkZWZpbml0aW9ucyByZWxhdGVkIHRvIHRlc3Qgc3RydWN0dXJlcywgbWFjcm9zIGZvciBzZXR0aW5nIHVwIGFuZCB0ZWFyaW5nIGRvd24gdGhlIHRlc3RzLCBhc3NlcnRpb25zLCBhbmQgcHJvYmFibHkgc29tZSBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIGFjdHVhbCB0ZXN0IGxvZ2ljLiBJdCB3b3VsZCBiZSBoZWxwZnVsIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgS1VuaXQgaXMgdXNlZCBpbiB0aGlzIERBTU9OIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGVtcGxveWVkLCBhbmQgYW55IHNwZWNpYWxpemVkIG1hY3JvcyB0aGF0IGFyZSBzcGVjaWZpYyB0byBEQU1PTiYjMzk7cyB0ZXN0aW5nIHJlcXVpcmVtZW50cy4gV2hhdCBhcmUgdGhlIGtleSBjb25jZXB0cyBhbmQgcHJpbWl0aXZlcyB0aGF0IGFyZSBiZWluZyB0ZXN0ZWQ/IEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgaW50cmljYXRlIGludGVyYWN0aW9ucyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBEQU1PTiYjMzk7cyBvcGVyYXRpb25hbCBmZWF0dXJlcy4gSSBhbHNvIHdhbnQgdG8gaWRlbnRpZnkgaG93IHRoZSB0ZXN0cyBhcmUgb3JnYW5pemVkLCB3aGF0IGRlcGVuZGVuY2llcyB0aGV5IGhhdmUsIGFuZCBpZiB0aGV5JiMzOTtyZSB3ZWxsLXN0cnVjdHVyZWQgYW5kIGRvY3VtZW50ZWQuIE9rYXksIGxldCYjMzk7cyBnZXQgc3RhcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1NzA6XHRcdGlmICghcHJvYmUyKSB7XG4xNTcxOlx0XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4xNTcyOlx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7cHJvYmUyIGFsbG9jIGZhaWxcJiMzNDspO1xuMTU3MzpcdFx0fVxuMTU3NDpcdFx0cHJvYmUyLVx1MDAzZXdlaWdodCA9IDE7XG4xNTc1Olx0XHRkYW1vbl9hZGRfcHJvYmUoY3R4LCBwcm9iZTIpO1xuMTU3NjpcdFx0S1VOSVRfRVhQRUNUX0ZBTFNFKHRlc3QsIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhjdHgpKTtcbjE1Nzc6XHRcbjE1Nzg6XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4xNTc5Olx0fVxuMTU4MDpcdFxuMTU4MTpcdHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfZmlsdGVyX291dChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4xNTgyOlx0e1xuMTU4MzpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbjE1ODQ6XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsICpyMjtcbjE1ODU6XHRcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmY7XG4xNTg2Olx0XG4xNTg3Olx0XHRmID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9BRERSLCB0cnVlLCBmYWxzZSk7XG4xNTg4Olx0XHRpZiAoIWYpXG4xNTg5Olx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7ZmlsdGVyIGFsbG9jIGZhaWxcJiMzNDspO1xuMTU5MDpcdFx0Zi1cdTAwM2VhZGRyX3JhbmdlID0gKHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlKXsuc3RhcnQgPSAyLCAuZW5kID0gNn07XG4xNTkxOlx0XG4xNTkyOlx0XHR0ID0gZGFtb25fbmV3X3RhcmdldCgpO1xuMTU5MzpcdFx0aWYgKCF0KSB7XG4xNTk0Olx0XHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGYpO1xuMTU5NTpcdFx0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O3RhcmdldCBhbGxvYyBmYWlsXCYjMzQ7KTtcbjE1OTY6XHRcdH1cbjE1OTc6XHRcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKDMsIDUpO1xuMTU5ODpcdFx0aWYgKCFyKSB7XG4xNTk5Olx0XHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGYpO1xuMTYwMDpcdFx0XHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcbjE2MDE6XHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtyZWdpb24gYWxsb2MgZmFpbFwmIzM0Oyk7XG4xNjAyOlx0XHR9XG4xNjAzOlx0XHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xuMTYwNDpcdFxuMTYwNTpcdFx0LyogcmVnaW9uIGluIHRoZSByYW5nZSAqL1xuMTYwNjpcdFx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgZGFtb3NfZmlsdGVyX21hdGNoKE5VTEwsIHQsIHIsIGYsIDEpKTtcbjE2MDc6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCAxKTtcbjE2MDg6XHRcbjE2MDk6XHRcdC8qIHJlZ2lvbiBiZWZvcmUgdGhlIHJhbmdlICovXG4xNjEwOlx0XHRyLVx1MDAzZWFyLnN0YXJ0ID0gMTtcbjE2MTE6XHRcdHItXHUwMDNlYXIuZW5kID0gMjtcbjE2MTI6XHRcdEtVTklUX0VYUEVDVF9GQUxTRSh0ZXN0LFxuMTYxMzpcdFx0XHRcdGRhbW9zX2ZpbHRlcl9tYXRjaChOVUxMLCB0LCByLCBmLCAxKSk7XG4xNjE0Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgMSk7XG4xNjE1Olx0XG4xNjE2Olx0XHQvKiByZWdpb24gYWZ0ZXIgdGhlIHJhbmdlICovXG4xNjE3Olx0XHRyLVx1MDAzZWFyLnN0YXJ0ID0gNjtcbjE2MTg6XHRcdHItXHUwMDNlYXIuZW5kID0gODtcbjE2MTk6XHRcdEtVTklUX0VYUEVDVF9GQUxTRSh0ZXN0LFxuMTYyMDpcdFx0XHRcdGRhbW9zX2ZpbHRlcl9tYXRjaChOVUxMLCB0LCByLCBmLCAxKSk7XG4xNjIxOlx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgMSk7XG4xNjIyOlx0XG4xNjIzOlx0XHQvKiByZWdpb24gc3RhcnRlZCBiZWZvcmUgdGhlIHJhbmdlICovXG4xNjI0Olx0XHRyLVx1MDAzZWFyLnN0YXJ0ID0gMTtcbjE2MjU6XHRcdHItXHUwMDNlYXIuZW5kID0gNDtcbjE2MjY6XHRcdEtVTklUX0VYUEVDVF9GQUxTRSh0ZXN0LCBkYW1vc19maWx0ZXJfbWF0Y2goTlVMTCwgdCwgciwgZiwgMSkpO1xuMTYyNzpcdFx0LyogZmlsdGVyIHNob3VsZCBoYXZlIHNwbGl0IHRoZSByZWdpb24gKi9cbjE2Mjg6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFyLnN0YXJ0LCAxKTtcbjE2Mjk6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFyLmVuZCwgMik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzExCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBjb3JlLWt1bml0LmhgIGZvciBSZXZpZXcqKgoKQWxyaWdodCwgdGltZSB0byBzaGlmdCBmb2N1cyBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIHJlc3Qgb2YgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIEkmIzM5O3ZlIGFscmVhZHkgc2NydXRpbml6ZWQgcG9ydGlvbnMgb2YgdGhlIERBTU9OIEtVbml0IHRlc3Qgc3VpdGUsIHNvIEkga25vdyB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUuIE5vdywgSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGhlYWRlciBmaWxlIGlzIGNvcnJlY3RseSBpbnRlZ3JhdGVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKlByb3BlciBpbmNsdWRlczoqKiBBcmUgdGhlIG5lY2Vzc2FyeSBEQU1PTiBjb3JlIGhlYWRlcnMgYW5kIEtVbml0IGluZnJhc3RydWN0dXJlIGluY2x1ZGVkIGNvcnJlY3RseT8gQXJlIHRoZXJlIGFueSBtaXNzaW5nIGRlcGVuZGVuY2llcz8KKiAgICoqRGF0YSBzdHJ1Y3R1cmUgZGVjbGFyYXRpb25zOioqIEFyZSBhbnkgbmV3IHN0cnVjdHMgb3IgZW51bXMgc3BlY2lmaWMgdG8gdGhpcyBwb3J0aW9uIG9mIHRoZSB0ZXN0aW5nIGRlZmluZWQsIG9yIGFyZSBleGlzdGluZyBEQU1PTiBkYXRhc3RydWN0dXJlcyBiZWluZyBsZXZlcmFnZWQ/CiogICAqKkZ1bmN0aW9uIHByb3RvdHlwZXM6KiogSXMgdGhlIGludGVyZmFjZSB3ZWxsLWRlZmluZWQ/IERvZXMgaXQgc2VlbSBjbGVhbiBhbmQgc3RyYWlnaHRmb3J3YXJkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCByZXR1cm4gdHlwZXMgb3IgYXJndW1lbnQgcGFzc2luZyBJIG5lZWQgdG8gZmxhZz8KKiAgICoqVGVzdCBjYXNlIG9yZ2FuaXphdGlvbjoqKiBIb3cgYXJlIHRoZSBpbmRpdmlkdWFsIHRlc3QgY2FzZXMgc3RydWN0dXJlZCB3aXRoaW4gdGhpcyBoZWFkZXI/IEFyZSB0aGV5IGxvZ2ljYWxseSBncm91cGVkIGFuZCBlYXN5IHRvIHVuZGVyc3RhbmQ/IEFyZSB0aGV5IHNldCB1cCBwcm9wZXJseSB0byBiZSB1c2VkIHdpdGggdGhlIGt1bml0IHRlc3Qgc3lzdGVtPwoqICAgKipDb3ZlcmFnZToqKiBEb2VzIGl0IGFwcGVhciB0byBiZSB0ZXN0aW5nIGEgcmVwcmVzZW50YXRpdmUgcmFuZ2Ugb2YgdGhlIERBTU9OIGNvcmUgZnVuY3Rpb25hbGl0eT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGdhcHMgdGhhdCBuZWVkIHRvIGJlIGFkZHJlc3NlZD8gSXMgdGhlcmUgYW4gb2J2aW91cyBiaWFzIHRvd2FyZHMgZWRnZSBjYXNlcyBvciBjb21tb24gZmxvd3M/CiogICAqKlBvdGVudGlhbCBmb3IgaW1wcm92ZW1lbnQ6KiogQXJlIHRoZXJlIGFueSBvcHBvcnR1bml0aWVzIGZvciBzaW1wbGlmaWNhdGlvbiwgcmVmYWN0b3JpbmcsIG9yIGJldHRlciBkb2N1bWVudGF0aW9uIHRoYXQgSSBjYW4gc3BvdCBxdWlja2x5PyBEb2VzIHRoZSBzdHlsZSBhbGlnbiB3aXRoIHRoZSBvdmVyYWxsIHByb2plY3Q/CgpUaGlzIHNob3VsZCBwcm92aWRlIG1lIHdpdGggYW4gaW5pdGlhbCBhc3Nlc3NtZW50IG9mIGhvdyBgY29yZS1rdW5pdC5oYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBhbmQgd2hhdCBhcmVhcyB3YXJyYW50IGEgbW9yZSBpbi1kZXB0aCBleGFtaW5hdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY3MDpcdFx0XHRcdGxhc3RfaW5wdXQpO1xuMTY3MTpcdFxuMTY3MjpcdFx0LypcbjE2NzM6XHRcdCAqIElmIGN1cnJlbnQgc2NvcmUgaXMgaGlnaGVyIHRoYW4gdGhlIGdvYWwsIG5leHQgaW5wdXQgc2hvdWxkIGJlIGxvd2VyXG4xNjc0Olx0XHQgKiB0aGFuIHRoZSBsYXN0IGlucHV0LlxuMTY3NTpcdFx0ICovXG4xNjc2Olx0XHRjdXJyZW50X3Njb3JlID0gMjUwMDAwMDAwO1xuMTY3NzpcdFx0S1VOSVRfRVhQRUNUX0xUKHRlc3QsXG4xNjc4Olx0XHRcdFx0ZGFtb25fZmVlZF9sb29wX25leHRfaW5wdXQobGFzdF9pbnB1dCwgY3VycmVudF9zY29yZSksXG4xNjc5Olx0XHRcdFx0bGFzdF9pbnB1dCk7XG4xNjgwOlx0XG4xNjgxOlx0XHQvKlxuMTY4MjpcdFx0ICogVGhlIG5leHQgaW5wdXQgZGVwZW5kcyBvbiB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgY3VycmVudCBzY29yZSBhbmRcbjE2ODM6XHRcdCAqIHRoZSBnb2FsXG4xNjg0Olx0XHQgKi9cbjE2ODU6XHRcdEtVTklUX0VYUEVDVF9HVCh0ZXN0LFxuMTY4NjpcdFx0XHRcdGRhbW9uX2ZlZWRfbG9vcF9uZXh0X2lucHV0KGxhc3RfaW5wdXQsIDIwMCksXG4xNjg3Olx0XHRcdFx0ZGFtb25fZmVlZF9sb29wX25leHRfaW5wdXQobGFzdF9pbnB1dCwgMjAwMCkpO1xuMTY4ODpcdH1cbjE2ODk6XHRcbjE2OTA6XHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHN0cnVjdCBrdW5pdCAqdGVzdClcbjE2OTE6XHR7XG4xNjkyOlx0XHRzdHJ1Y3QgZGFtb3Mgc2NoZW1lO1xuMTY5MzpcdFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqdGFyZ2V0X2ZpbHRlciwgKmFub25fZmlsdGVyO1xuMTY5NDpcdFxuMTY5NTpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2NoZW1lLmNvcmVfZmlsdGVycyk7XG4xNjk2Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzY2hlbWUub3BzX2ZpbHRlcnMpO1xuMTY5NzpcdFxuMTY5ODpcdFx0ZGFtb3Nfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QoXHUwMDI2c2NoZW1lKTtcbjE2OTk6XHRcdC8qXG4xNzAwOlx0XHQgKiBObyBmaWx0ZXIgaXMgaW5zdGFsbGVkLiAgQWxsb3cgYnkgZGVmYXVsdCBvbiBib3RoIGNvcmUgYW5kIG9wcyBsYXllclxuMTcwMTpcdFx0ICogZmlsdGVyaW5nIHN0YWdlcywgc2luY2UgdGhlcmUgYXJlIG5vIGZpbHRlcnMgYXQgYWxsLlxuMTcwMjpcdFx0ICovXG4xNzAzOlx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2NoZW1lLmNvcmVfZmlsdGVyc19kZWZhdWx0X3JlamVjdCwgZmFsc2UpO1xuMTcwNDpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNjaGVtZS5vcHNfZmlsdGVyc19kZWZhdWx0X3JlamVjdCwgZmFsc2UpO1xuMTcwNTpcdFxuMTcwNjpcdFx0dGFyZ2V0X2ZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULCB0cnVlLCB0cnVlKTtcbjE3MDc6XHRcdGlmICghdGFyZ2V0X2ZpbHRlcilcbjE3MDg6XHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtmaWx0ZXIgYWxsb2MgZmFpbFwmIzM0Oyk7XG4xNzA5Olx0XHRkYW1vc19hZGRfZmlsdGVyKFx1MDAyNnNjaGVtZSwgdGFyZ2V0X2ZpbHRlcik7XG4xNzEwOlx0XHRkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChcdTAwMjZzY2hlbWUpO1xuMTcxMTpcdFx0LypcbjE3MTI6XHRcdCAqIEEgY29yZS1oYW5kbGVkIGFsbG93LWZpbHRlciBpcyBpbnN0YWxsZWQuXG4xNzEzOlx0XHQgKiBSZWplY3QgYnkgZGVmYXVsdCBvbiBjb3JlIGxheWVyIGZpbHRlcmluZyBzdGFnZSBkdWUgdG8gdGhlIGxhc3RcbjE3MTQ6XHRcdCAqIGNvcmUtbGF5ZXItZmlsdGVyJiMzOTtzIGJlaGF2aW9yLlxuMTcxNTpcdFx0ICogQWxsb3cgYnkgZGVmYXVsdCBvbiBvcHMgbGF5ZXIgZmlsdGVyaW5nIHN0YWdlIGR1ZSB0byB0aGUgYWJzZW5jZSBvZlxuMTcxNjpcdFx0ICogb3BzIGxheWVyIGZpbHRlcnMuXG4xNzE3Olx0XHQgKi9cbjE3MTg6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzY2hlbWUuY29yZV9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0LCB0cnVlKTtcbjE3MTk6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzY2hlbWUub3BzX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QsIGZhbHNlKTtcbjE3MjA6XHRcbjE3MjE6XHRcdHRhcmdldF9maWx0ZXItXHUwMDNlYWxsb3cgPSBmYWxzZTtcbjE3MjI6XHRcdGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KFx1MDAyNnNjaGVtZSk7XG4xNzIzOlx0XHQvKlxuMTcyNDpcdFx0ICogQSBjb3JlLWhhbmRsZWQgcmVqZWN0LWZpbHRlciBpcyBpbnN0YWxsZWQuXG4xNzI1Olx0XHQgKiBBbGxvdyBieSBkZWZhdWx0IG9uIGNvcmUgbGF5ZXIgZmlsdGVyaW5nIHN0YWdlIGR1ZSB0byB0aGUgbGFzdFxuMTcyNjpcdFx0ICogY29yZS1sYXllci1maWx0ZXImIzM5O3MgYmVoYXZpb3IuXG4xNzI3Olx0XHQgKiBBbGxvdyBieSBkZWZhdWx0IG9uIG9wcyBsYXllciBmaWx0ZXJpbmcgc3RhZ2UgZHVlIHRvIHRoZSBhYnNlbmNlIG9mXG4xNzI4Olx0XHQgKiBvcHMgbGF5ZXIgZmlsdGVycy5cbjE3Mjk6XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzEyNwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgKioKCk9rYXksIHNvIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgZW5kIG9mIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZmlsZSBsaWtlbHkgY29udGFpbnMgdGhlIGNvcmUgS1VuaXQgdGVzdHMgZm9yIERBTU9OLCB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvci4gS25vd2luZyB0aGUgZW5kIGlzIGtleS4gSXQmIzM5O3MgdXN1YWxseSB3aGVyZSB5b3UmIzM5O2xsIGZpbmQgdGhlIGxhc3QgdGVzdCBjYXNlcywgcG90ZW50aWFsbHkgcmVjZW50IGFkZGl0aW9ucywgb3IgbWF5YmUgYSBzdW1tYXJ5L2VuZC1vZi1maWxlIG1hcmtlciB0aGF0IGdpdmVzIG1lIGNvbnRleHQuIFdoYXQgYXJlIHRoZXkgdGVzdGluZz8gV2hhdCBmdW5jdGlvbmFsaXR5IGluIERBTU9OJiMzOTtzIGNvcmUgaXMgYmVpbmcgdmFsaWRhdGVkIGhlcmU/IEFyZSB0aGVyZSBhbnkgbmV3IHRlc3QgZml4dHVyZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSByZWdyZXNzaW9uIHRlc3RzPwoKSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGRlZmluaXRpb25zIGZvciBga3VuaXRfY2FzZWAgc3RydWN0dXJlcywgdGVzdCBmdW5jdGlvbnMgdGhhdCBvcGVyYXRlIG9uIHRob3NlIHN0cnVjdHVyZXMsIGFuZCBob3BlZnVsbHksIHNvbWUgY29tbWVudGFyeSBvciBkb2N1bWVudGF0aW9uIHRoYXQgY2xhcmlmaWVzIHRoZSBpbnRlbmRlZCBiZWhhdmlvci4gSeKAmW0gaG9waW5nIHRvIHVuZGVyc3RhbmQgaG93IHRob3JvdWdobHkgREFNT04mIzM5O3MgbWVtb3J5IG1vbml0b3JpbmcgYW5kIGFkYXB0YXRpb24gbWVjaGFuaXNtcyBhcmUgYmVpbmcgdGVzdGVkIGF0IHRoZSBLVW5pdCBsZXZlbC4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGJhc2ljIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biB0ZXN0cywgdG8gbW9yZSBjb21wbGV4IHNjZW5hcmlvcyBpbnZvbHZpbmcgYWNjZXNzIHBhdHRlcm4gYW5hbHlzaXMsIGFkYXB0YXRpb24gdHJpZ2dlcmluZywgYW5kIHBlcmZvcm1hbmNlIGltcGFjdC4gVGhlIGVuZCBvZiB0aGUgZmlsZSBtaWdodCBoYXZlIHNvbWUgY2x1ZXMgdG8gd2hhdCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgdGVzdHMgYXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyB3ZWxsIGl0IHRlc3RzIERBTU9OJiMzOTtzIGltcG9ydGFudCBmdW5jdGlvbmFsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTczMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzMwOlx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2NoZW1lLmNvcmVfZmlsdGVyc19kZWZhdWx0X3JlamVjdCwgZmFsc2UpO1xuMTczMTpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNjaGVtZS5vcHNfZmlsdGVyc19kZWZhdWx0X3JlamVjdCwgZmFsc2UpO1xuMTczMjpcdFxuMTczMzpcdFx0YW5vbl9maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKERBTU9TX0ZJTFRFUl9UWVBFX0FOT04sIHRydWUsIHRydWUpO1xuMTczNDpcdFx0aWYgKCFhbm9uX2ZpbHRlcikge1xuMTczNTpcdFx0XHRkYW1vc19mcmVlX2ZpbHRlcih0YXJnZXRfZmlsdGVyKTtcbjE3MzY6XHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDthbm9uX2ZpbHRlciBhbGxvYyBmYWlsXCYjMzQ7KTtcbjE3Mzc6XHRcdH1cbjE3Mzg6XHRcdGRhbW9zX2FkZF9maWx0ZXIoXHUwMDI2c2NoZW1lLCBhbm9uX2ZpbHRlcik7XG4xNzM5Olx0XG4xNzQwOlx0XHRkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChcdTAwMjZzY2hlbWUpO1xuMTc0MTpcdFx0LypcbjE3NDI6XHRcdCAqIEEgY29yZS1oYW5kbGVkIHJlamVjdC1maWx0ZXIgYW5kIG9wcy1oYW5kbGVkIGFsbG93LWZpbHRlciBhcmUgaW5zdGFsbGVkLlxuMTc0MzpcdFx0ICogQWxsb3cgYnkgZGVmYXVsdCBvbiBjb3JlIGxheWVyIGZpbHRlcmluZyBzdGFnZSBkdWUgdG8gdGhlIGV4aXN0ZW5jZVxuMTc0NDpcdFx0ICogb2YgdGhlIG9wcy1oYW5kbGVkIGZpbHRlci5cbjE3NDU6XHRcdCAqIFJlamVjdCBieSBkZWZhdWx0IG9uIG9wcyBsYXllciBmaWx0ZXJpbmcgc3RhZ2UgZHVlIHRvIHRoZSBsYXN0XG4xNzQ2Olx0XHQgKiBvcHMtbGF5ZXItZmlsdGVyJiMzOTtzIGJlaGF2aW9yLlxuMTc0NzpcdFx0ICovXG4xNzQ4Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2NoZW1lLmNvcmVfZmlsdGVyc19kZWZhdWx0X3JlamVjdCwgZmFsc2UpO1xuMTc0OTpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNjaGVtZS5vcHNfZmlsdGVyc19kZWZhdWx0X3JlamVjdCwgdHJ1ZSk7XG4xNzUwOlx0XG4xNzUxOlx0XHR0YXJnZXRfZmlsdGVyLVx1MDAzZWFsbG93ID0gdHJ1ZTtcbjE3NTI6XHRcdGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KFx1MDAyNnNjaGVtZSk7XG4xNzUzOlx0XHQvKlxuMTc1NDpcdFx0ICogQSBjb3JlLWhhbmRsZWQgYWxsb3ctZmlsdGVyIGFuZCBvcHMtaGFuZGxlZCBhbGxvdy1maWx0ZXIgYXJlXG4xNzU1Olx0XHQgKiBpbnN0YWxsZWQuXG4xNzU2Olx0XHQgKiBBbGxvdyBieSBkZWZhdWx0IG9uIGNvcmUgbGF5ZXIgZmlsdGVyaW5nIHN0YWdlIGR1ZSB0byB0aGUgZXhpc3RlbmNlXG4xNzU3Olx0XHQgKiBvZiB0aGUgb3BzLWhhbmRsZWQgZmlsdGVyLlxuMTc1ODpcdFx0ICogUmVqZWN0IGJ5IGRlZmF1bHQgb24gb3BzIGxheWVyIGZpbHRlcmluZyBzdGFnZSBkdWUgdG8gdGhlIGxhc3RcbjE3NTk6XHRcdCAqIG9wcy1sYXllci1maWx0ZXImIzM5O3MgYmVoYXZpb3IuXG4xNzYwOlx0XHQgKi9cbjE3NjE6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzY2hlbWUuY29yZV9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0LCBmYWxzZSk7XG4xNzYyOlx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2NoZW1lLm9wc19maWx0ZXJzX2RlZmF1bHRfcmVqZWN0LCB0cnVlKTtcbjE3NjM6XHRcbjE3NjQ6XHRcdGRhbW9zX2ZyZWVfZmlsdGVyKGFub25fZmlsdGVyKTtcbjE3NjU6XHRcdGRhbW9zX2ZyZWVfZmlsdGVyKHRhcmdldF9maWx0ZXIpO1xuMTc2NjpcdH1cbjE3Njc6XHRcbjE3Njg6XHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FwcGx5X21pbl9ucl9yZWdpb25zX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4xNzY5Olx0XHRcdHVuc2lnbmVkIGxvbmcgc3pfcmVnaW9ucywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6LFxuMTc3MDpcdFx0XHR1bnNpZ25lZCBsb25nIG1pbl9ucl9yZWdpb25zLFxuMTc3MTpcdFx0XHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3pfZXhwZWN0LFxuMTc3MjpcdFx0XHR1bnNpZ25lZCBsb25nIG5yX3JlZ2lvbnNfZXhwZWN0KVxuMTc3MzpcdHtcbjE3NzQ6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbjE3NzU6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4xNzc2Olx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuMTc3NzpcdFx0dW5zaWduZWQgbG9uZyBtYXhfcmVnaW9uX3NpemU7XG4xNzc4Olx0XG4xNzc5Olx0XHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XG4xNzgwOlx0XHRpZiAoIWN0eClcbjE3ODE6XHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtjdHggYWxsb2MgZmFpbFxcblwmIzM0Oyk7XG4xNzgyOlx0XHR0ID0gZGFtb25fbmV3X3RhcmdldCgpO1xuMTc4MzpcdFx0aWYgKCF0KSB7XG4xNzg0Olx0XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4xNzg1Olx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7dGFyZ2V0IGFsbG9jIGZhaWxcXG5cJiMzNDspO1xuMTc4NjpcdFx0fVxuMTc4NzpcdFx0ZGFtb25fYWRkX3RhcmdldChjdHgsIHQpO1xuMTc4ODpcdFx0ciA9IGRhbW9uX25ld19yZWdpb24oMCwgc3pfcmVnaW9ucyk7XG4xNzg5Olx0XHRpZiAoIXIpIHtcbjE3OTA6XHRcdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbjE3OTE6XHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtyZWdpb24gYWxsb2MgZmFpbFxcblwmIzM0Oyk7XG4xNzkyOlx0XHR9XG4xNzkzOlx0XHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xuMTc5NDpcdFxuMTc5NTpcdFx0Y3R4LVx1MDAzZW1pbl9yZWdpb25fc3ogPSBtaW5fcmVnaW9uX3N6O1xuMTc5NjpcdFx0Y3R4LVx1MDAzZWF0dHJzLm1pbl9ucl9yZWdpb25zID0gbWluX25yX3JlZ2lvbnM7XG4xNzk3Olx0XHRtYXhfcmVnaW9uX3NpemUgPSBkYW1vbl9hcHBseV9taW5fbnJfcmVnaW9ucyhjdHgpO1xuMTc5ODpcdFxuMTc5OTpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIG1heF9yZWdpb25fc2l6ZSwgbWF4X3JlZ2lvbl9zel9leHBlY3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDY2OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkLCBhbmFseXppbmcgdGhlIHNpdHVhdGlvbjoKCioqUmV2aWV3aW5nIENvcmUgS1VuaXQgVGVzdCBEZWZpbml0aW9ucyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSByZXN0IG9mIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBUaGlzIGxpa2VseSBjb250YWlucyBjcml0aWNhbCBkZWZpbml0aW9ucyBmb3IgdGhlIGNvcmUgS1VuaXQgdGVzdHMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpLiBVbmRlcnN0YW5kaW5nIHRoaXMgaGVhZGVyIGZpbGUgaXMgZXNzZW50aWFsIGZvciBzZXZlcmFsIHJlYXNvbnMuIEl0IGNvdWxkIGRldGFpbCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgaW4gdGhlc2UgY29yZSB0ZXN0cywgZGVmaW5lIG1hY3JvcyBmb3IgdGVzdCBzZXR1cCBhbmQgdGVhcmRvd24sIG9yIHNwZWNpZnkgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9yIHRlc3RpbmcgY29uZGl0aW9ucyBmb3Igc3BlY2lmaWMgREFNT04gZnVuY3Rpb25hbGl0aWVzLiBJdCBtaWdodCBldmVuIGluY2x1ZGUgaW5saW5lIGZ1bmN0aW9ucyBvciBoZWxwZXIgcm91dGluZXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciB0aGUgS1VuaXQgdGVzdHMgd2l0aGluIHRoaXMgbW9kdWxlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgc2NvcGUgYW5kIGNvbXBsZXhpdHkgb2YgdGhlIHRlc3RzIGRlZmluZWQgd2l0aGluLiBJdCBpcyB2ZXJ5IGxpa2VseSB0aGF0IHRoaXMgaGVhZGVyIGNvbnRhaW5zIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHRoYXQgaW5jbHVkZS9leGNsdWRlIHNwZWNpZmljIHBhcnRzIG9mIHRoZSB0ZXN0aW5nIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24uIFRoaXMgY291bGQgYmUgcmVsZXZhbnQgdG8gdW5kZXJzdGFuZGluZyBzcGVjaWZpYyBiZWhhdmlvcnMuIFVsdGltYXRlbHksIGV4YW1pbmluZyB0aGlzIGhlYWRlciBpcyBjcnVjaWFsIHRvIHByb3Blcmx5IGdyb2sgdGhlIHRlc3Qgc3RyYXRlZ3kgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MDA6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCBucl9yZWdpb25zX2V4cGVjdCk7XG4xODAxOlx0XG4xODAyOlx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuMTgwMzpcdH1cbjE4MDQ6XHRcbjE4MDU6XHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FwcGx5X21pbl9ucl9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdClcbjE4MDY6XHR7XG4xODA3Olx0XHQvKiBjb21tb24sIGV4cGVjdGVkIHNldHVwICovXG4xODA4Olx0XHRkYW1vbl90ZXN0X2FwcGx5X21pbl9ucl9yZWdpb25zX2Zvcih0ZXN0LCAxMCwgMSwgMTAsIDEsIDEwKTtcbjE4MDk6XHRcdC8qIG5vIHplcm8gc2l6ZSBsaW1pdCAqL1xuMTgxMDpcdFx0ZGFtb25fdGVzdF9hcHBseV9taW5fbnJfcmVnaW9uc19mb3IodGVzdCwgMTAsIDEsIDE1LCAxLCAxMCk7XG4xODExOlx0XHQvKiBtYXggc2l6ZSBzaG91bGQgYmUgYWxpZ25lZCBieSBtaW5fcmVnaW9uX3N6ICovXG4xODEyOlx0XHRkYW1vbl90ZXN0X2FwcGx5X21pbl9ucl9yZWdpb25zX2Zvcih0ZXN0LCAxMCwgMiwgMiwgNiwgMik7XG4xODEzOlx0XHQvKlxuMTgxNDpcdFx0ICogd2hlbiBtaW5fbnJfcmVnaW9ucyBhbmQgbWluX3JlZ2lvbl9zeiBjb25mbGljdHMsIG1pbl9yZWdpb25fc3ogd2lucy5cbjE4MTU6XHRcdCAqL1xuMTgxNjpcdFx0ZGFtb25fdGVzdF9hcHBseV9taW5fbnJfcmVnaW9uc19mb3IodGVzdCwgMTAsIDIsIDEwLCAyLCA1KTtcbjE4MTc6XHR9XG4xODE4Olx0XG4xODE5Olx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF9pc19sYXN0X3JlZ2lvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4xODIwOlx0e1xuMTgyMTpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbjE4MjI6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4xODIzOlx0XHRpbnQgaTtcbjE4MjQ6XHRcbjE4MjU6XHRcdHQgPSBkYW1vbl9uZXdfdGFyZ2V0KCk7XG4xODI2Olx0XHRpZiAoIXQpXG4xODI3Olx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7dGFyZ2V0IGFsbG9jIGZhaWxcXG5cJiMzNDspO1xuMTgyODpcdFxuMTgyOTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgNDsgaSYjNDM7JiM0MzspIHtcbjE4MzA6XHRcdFx0ciA9IGRhbW9uX25ld19yZWdpb24oaSAqIDIsIChpICYjNDM7IDEpICogMik7XG4xODMxOlx0XHRcdGlmICghcikge1xuMTgzMjpcdFx0XHRcdGRhbW9uX2ZyZWVfdGFyZ2V0KHQpO1xuMTgzMzpcdFx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7cmVnaW9uIGFsbG9jICVkIGZhaWxcXG5cJiMzNDssIGkpO1xuMTgzNDpcdFx0XHR9XG4xODM1Olx0XHRcdGRhbW9uX2FkZF9yZWdpb24ociwgdCk7XG4xODM2Olx0XHRcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIGRhbW9uX2lzX2xhc3RfcmVnaW9uKHIsIHQpKTtcbjE4Mzc6XHRcdH1cbjE4Mzg6XHRcdGRhbW9uX2ZyZWVfdGFyZ2V0KHQpO1xuMTgzOTpcdH1cbjE4NDA6XHRcbjE4NDE6XHQvKlxuMTg0MjpcdCAqIFZlcmlmeSB0aGF0IGRhbW9zX3dhbGsoKSByZWplY3RzIG5ldyByZXF1ZXN0cyB3aGVuXG4xODQzOlx0ICogd2Fsa19jb250cm9sX29ic29sZXRlIGlzIHNldC5cbjE4NDQ6XHQgKlxuMTg0NTpcdCAqIFRoaXMgdGVzdHMgdGhlIGludmFyaWFudCBpbnRyb2R1Y2VkIGJ5OlxuMTg0NjpcdCAqIGNvbW1pdCAzM2MzZjZjMmI0OGMgKFwmIzM0O21tL2RhbW9uL2NvcmU6IGZpeCBkYW1vc193YWxrKCkgdnMga2RhbW9uZF9mbigpIGV4aXQgcmFjZVwmIzM0OylcbjE4NDc6XHQgKi9cbjE4NDg6XHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4xODQ5Olx0e1xuMTg1MDpcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuMTg1MTpcdFx0c3RydWN0IGRhbW9zX3dhbGtfY29udHJvbCBjb250cm9sID0ge307XG4xODUyOlx0XHRpbnQgcmV0O1xuMTg1MzpcdFxuMTg1NDpcdFx0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xuMTg1NTpcdFx0aWYgKCFjdHgpXG4xODU2Olx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7Y3R4IGFsbG9jIGZhaWxcJiMzNDspO1xuMTg1NzpcdFxuMTg1ODpcdFx0LyogU2ltdWxhdGUgc2h1dGRvd24gcGhhc2UgKi9cbjE4NTk6XHRcdGN0eC1cdTAwM2V3YWxrX2NvbnRyb2xfb2Jzb2xldGUgPSB0cnVlO1xuMTg2MDpcdFxuMTg2MTpcdFx0cmV0ID0gZGFtb3Nfd2FsayhjdHgsIFx1MDAyNmNvbnRyb2wpO1xuMTg2MjpcdFxuMTg2MzpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJldCwgLUVDQU5DRUxFRCk7XG4xODY0Olx0XG4xODY1Olx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuMTg2NjpcdH1cbjE4Njc6XHRcbjE4Njg6XHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3JhbmQoc3RydWN0IGt1bml0ICp0ZXN0KVxuMTg2OTpcdHtcbjE4NzA6XHRcdHN0cnVjdCBkYW1vbl9jdHggY3R4O1xuMTg3MTpcdFx0aW50IGk7XG4xODcyOlx0XG4xODczOlx0XHRwcmFuZG9tX3NlZWRfc3RhdGUoXHUwMDI2Y3R4LnJuZF9zdGF0ZSwgZ2V0X3JhbmRvbV91NjQoKSk7XG4xODc0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxMDAwMDsgaSYjNDM7JiM0MzspIHtcbjE4NzU6XHRcdFx0dW5zaWduZWQgbG9uZyBybmQgPSBkYW1vbl9yYW5kKFx1MDAyNmN0eCwgMCwgMTApO1xuMTg3NjpcdFxuMTg3NzpcdFx0XHRLVU5JVF9FWFBFQ1RfR0UodGVzdCwgcm5kLCAwKTtcbjE4Nzg6XHRcdFx0S1VOSVRfRVhQRUNUX0xFKHRlc3QsIHJuZCwgOSk7XG4xODc5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjU2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQsIGFuYWx5emluZyB0aGUgc2l0dWF0aW9uOgoKKipSZXZpZXdpbmcgQ29yZSBLVW5pdCBUZXN0IERlZmluaXRpb25zKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHJlc3Qgb2YgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIFRoaXMgbGlrZWx5IGNvbnRhaW5zIGNyaXRpY2FsIGRlZmluaXRpb25zIGZvciB0aGUgY29yZSBLVW5pdCB0ZXN0cyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykuIFVuZGVyc3RhbmRpbmcgdGhpcyBoZWFkZXIgZmlsZSBpcyBlc3NlbnRpYWwgZm9yIHNldmVyYWwgcmVhc29ucy4gSXQgY291bGQgZGV0YWlsIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBpbiB0aGVzZSBjb3JlIHRlc3RzLCBkZWZpbmUgbWFjcm9zIGZvciB0ZXN0IHNldHVwIGFuZCB0ZWFyZG93biwgb3Igc3BlY2lmeSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb3IgdGVzdGluZyBjb25kaXRpb25zIGZvciBzcGVjaWZpYyBEQU1PTiBmdW5jdGlvbmFsaXRpZXMuIEl0IG1pZ2h0IGV2ZW4gaW5jbHVkZSBpbmxpbmUgZnVuY3Rpb25zIG9yIGhlbHBlciByb3V0aW5lcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIHRoZSBLVW5pdCB0ZXN0cyB3aXRoaW4gdGhpcyBtb2R1bGUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBzY29wZSBhbmQgY29tcGxleGl0eSBvZiB0aGUgdGVzdHMgZGVmaW5lZCB3aXRoaW4uIEl0IGlzIHZlcnkgbGlrZWx5IHRoYXQgdGhpcyBoZWFkZXIgY29udGFpbnMgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCBpbmNsdWRlL2V4Y2x1ZGUgc3BlY2lmaWMgcGFydHMgb2YgdGhlIHRlc3RpbmcgYmFzZWQgb24gY29uZmlndXJhdGlvbi4gVGhpcyBjb3VsZCBiZSByZWxldmFudCB0byB1bmRlcnN0YW5kaW5nIHNwZWNpZmljIGJlaGF2aW9ycy4gVWx0aW1hdGVseSwgZXhhbWluaW5nIHRoaXMgaGVhZGVyIGlzIGNydWNpYWwgdG8gcHJvcGVybHkgZ3JvayB0aGUgdGVzdCBzdHJhdGVneSBhbmQgaXRzIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg4MDpcdH1cbjE4ODE6XHRcbjE4ODI6XHRzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xuMTg4MzpcdFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3RhcmdldCksXG4xODg0Olx0XHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfcmVnaW9ucyksXG4xODg1Olx0XHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfYWdncmVnYXRlKSxcbjE4ODY6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zcGxpdF9hdCksXG4xODg3Olx0XHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKSxcbjE4ODg6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKSxcbjE4ODk6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zcGxpdF9yZWdpb25zX29mKSxcbjE4OTA6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zcGxpdF9hYm92ZV9oYWxmX3Byb2dyZXNzZXMpLFxuMTg5MTpcdFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24pLFxuMTg5MjpcdFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NldF9yZWdpb25zKSxcbjE4OTM6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyKSxcbjE4OTQ6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQpLFxuMTg5NTpcdFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NldF9hdHRycyksXG4xODk2Olx0XHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbXZzdW0pLFxuMTg5NzpcdFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX212c3VtKSxcbjE4OTg6XHRcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9uZXdfZmlsdGVyKSxcbjE4OTk6XHRcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbCksXG4xOTAwOlx0XHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzKSxcbjE5MDE6XHRcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfcXVvdGEpLFxuMTkwMjpcdFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9kZXN0cyksXG4xOTAzOlx0XHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X2ZpbHRlciksXG4xOTA0Olx0XHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3BhZ2VvdXQpLFxuMTkwNTpcdFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9taWdyYXRlX2hvdCksXG4xOTA2Olx0XHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X3RhcmdldF9yZWdpb25zKSxcbjE5MDc6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfZmlsdGVyKSxcbjE5MDg6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfcHJvYmVzKSxcbjE5MDk6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfY3R4KSxcbjE5MTA6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF92YWxpZF9wcm9iZV9wYXJhbXMpLFxuMTkxMTpcdFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2ZpbHRlcl9vdXQpLFxuMTkxMjpcdFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2ZlZWRfbG9vcF9uZXh0X2lucHV0KSxcbjE5MTM6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdCksXG4xOTE0Olx0XHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfYXBwbHlfbWluX25yX3JlZ2lvbnMpLFxuMTkxNTpcdFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2lzX2xhc3RfcmVnaW9uKSxcbjE5MTY6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF93YWxrX2NvbnRyb2xfb2Jzb2xldGUpLFxuMTkxNzpcdFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3JhbmQpLFxuMTkxODpcdFx0e30sXG4xOTE5Olx0fTtcbjE5MjA6XHRcbjE5MjE6XHRzdGF0aWMgc3RydWN0IGt1bml0X3N1aXRlIGRhbW9uX3Rlc3Rfc3VpdGUgPSB7XG4xOTIyOlx0XHQubmFtZSA9IFwmIzM0O2RhbW9uXCYjMzQ7LFxuMTkyMzpcdFx0LnRlc3RfY2FzZXMgPSBkYW1vbl90ZXN0X2Nhc2VzLFxuMTkyNDpcdH07XG4xOTI1Olx0a3VuaXRfdGVzdF9zdWl0ZShkYW1vbl90ZXN0X3N1aXRlKTtcbjE5MjY6XHRcbjE5Mjc6XHQjZW5kaWYgLyogX0RBTU9OX0NPUkVfVEVTVF9IICovXG4xOTI4Olx0XG4xOTI5Olx0I2VuZGlmXHQvKiBDT05GSUdfREFNT05fS1VOSVRfVEVTVCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzUzMAoJCQkJCQkJb3V0cHV0OiA5NQoJCQkJCQkJdGhvdWdodHM6IDE0MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJpYWdlIERlY2lzaW9uOiBOb24tRnV6emFibGUgS1VuaXQgVGVzdCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBhZmZlY3RzIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLCBzcGVjaWZpY2FsbHkgdGhlIGBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3JgIHVuaXQgdGVzdCBmdW5jdGlvbiwgYW5kIG9ubHkgdGhhdC4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgc28gSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgdGhlIGdpdCBkaWZmIOKAkyBub3RoaW5nIGVsc2Ugd2FzIHRvdWNoZWQgaW4gdGhpcyBjb21taXQuIEdvb2QuCgpOb3csIGxldCYjMzk7cyBhcHBseSBteSBleHBlcnRpc2UgYW5kIHdhbGsgdGhyb3VnaCB0aGUgdHJpYWdlIHBoaWxvc29waHkuIFNwZWNpZmljYWxseSwgc2VjdGlvbiAyOiB0aGUgKm5lZ2F0aXZlIGNyaXRlcmlhKiBmb3IgcmV0dXJuaW5nIFdvcnRoRnV6emluZz1mYWxzZS4gVGhpcyBpcyBhIGNydWNpYWwgc3RlcCB0byBhdm9pZCB3YXN0aW5nIHJlc291cmNlcy4KClRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNoYW5nZSBmYWxscyB1bmRlciB0aGUgY2F0ZWdvcnkgb2YgY29kZSB0aGF0ICppc24mIzM5O3QqIHJlYWNoYWJsZSB2aWEgc3lzY2FsbCBmdXp6aW5nLCB3aGljaCBpcyB3aGF0IFN5emthbGxlciBkb2VzLiBBcmUgS1VuaXQgdGVzdHMgY29uc2lkZXJlZCAmIzM0O3Rlc3QgY29kZSB0aGF0IGlzIG5vdCByZWFjaGFibGUgdmlhIHN5c2NhbGwgZnV6emluZyYjMzQ7PyBBbmQsIGFyZSB0aGV5IHJlYWNoYWJsZSBieSBTeXprYWxsZXIgYXQgYWxsPyBLVW5pdCB0ZXN0cyBydW4gZWl0aGVyIGR1cmluZyBrZXJuZWwgYm9vdCB3aGVuIGJ1aWx0LWluLCBvciB3aGVuIGxvYWRlZCBhcyBhIG1vZHVsZSAvIHRyaWdnZXJlZCB2aWEgZGVidWdmcy9rdW5pdC4gU3l6a2FsbGVyIGlzIGEgc3lzY2FsbCBmdXp6ZXIgdGhhdCBmdXp6ZXMgc3lzY2FsbCBpbnRlcmZhY2VzIGFuZCBrZXJuZWwgZnVuY3Rpb25hbGl0eSBkdXJpbmcgbm9ybWFsIHJ1bnRpbWUuIEtVbml0IHRlc3QgY2FzZXMgYXJlIHVuaXQgdGVzdHMgKGxpa2Ugc2VsZnRlc3RzL2t1bml0KSwgbm90IHBhcnQgb2YgcnVudGltZSBvcGVyYXRpb25hbCBrZXJuZWwgbG9naWMgb3IgaW50ZXJmYWNlcy4KCkxvb2tpbmcgYXQgdGhlIGd1aWRlbGluZXMsIEkgY2FuJiMzOTt0IGZpbmQgYW55dGhpbmcgYWJvdXQgS1VuaXQgdGVzdCBzcGVjaWZpY2FsbHkuIExldCYjMzk7cyBzZWU6CgoqICAgSXQmIzM5O3Mgbm90IG5vbi1rZXJuZWwgb3Igbm9uLWV4ZWN1dGFibGUgY2hhbmdlcyAoZXhjZXB0IGZvciB0ZXN0IGNvZGUuKQoqICAgSXQmIzM5O3Mgbm90IHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4KKiAgIEl0JiMzOTtzIG5vdCB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuCgpCdXQ6CgoqICAgVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywgYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KKiAgIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOiBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KClRoZSBwYXRjaCAqb25seSogbW9kaWZpZXMgYSBLVW5pdCB1bml0IHRlc3QgZnVuY3Rpb24uIEl0IGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgbG9naWMsIHRoZSBEQU1PTiBjb3JlIGltcGxlbWVudGF0aW9uICh0aGUgYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JgIGZ1bmN0aW9uICppdHNlbGYqIHdhc24mIzM5O3QgbW9kaWZpZWQpLCBvciBzeXNjYWxscywgb3IgZHJpdmVycywgb3IgYW55IHJ1bnRpbWUgZXhlY3V0YWJsZSBjb2RlLiBUaGVzZSBLVW5pdCB0ZXN0cyBhcmUgc2VsZi1jb250YWluZWQgYW5kIG5vdCBleHBvc2VkIHRvIHN5c2NhbGwgZnV6emluZy4gS1VuaXQgdGVzdHMgYXJlIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byB0ZXN0IHVuaXRzIG9mIGNvZGUgaW4gaXNvbGF0aW9uIGFuZCBkbyBub3QgYWZmZWN0IHJ1bnRpbWUga2VybmVsIGJlaGF2aW9yLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGlzIHBhdGNoIGlzIHN0cmljdGx5IG1vZGlmeWluZyBhIHVuaXQgdGVzdCAoS1VuaXQgdGVzdCBzdWl0ZSkgYW5kIG5vdCBhZmZlY3RpbmcgYW55IHJ1bnRpbWUga2VybmVsIGxvZ2ljIG9yIHN5c2NhbGwgaW50ZXJmYWNlcywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgV29ydGhGdXp6aW5nID0gZmFsc2VgLgoKU28sIHRoZSByZWFzb25pbmcgaXMgY29uY2lzZTogVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1VuaXQgdW5pdCB0ZXN0cyAoYGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdncmAgaW4gYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGApIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgcnVudGltZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIHN5c2NhbGwgaW50ZXJmYWNlcy4gTm8gZnV6emluZyByZXF1aXJlZC4gTm93LCBJIHdpbGwgYGludm9rZSBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSB1cGRhdGVzIHRlc3QgYXNzZXJ0aW9ucyBhbmQgY2FzZXMgaW4gdGhlIEtVbml0IHRlc3Qgc3VpdGUgKGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdnciBpbiBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgpLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IERBTU9OIGNvcmUgcnVudGltZSBsb2dpYywgZHJpdmVycywgb3Igc3lzY2FsbC1yZWFjaGFibGUga2VybmVsIGV4ZWN1dGlvbiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgdXBkYXRlcyB0ZXN0IGFzc2VydGlvbnMgYW5kIGNhc2VzIGluIHRoZSBLVW5pdCB0ZXN0IHN1aXRlIChkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3IgaW4gbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oKS4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBEQU1PTiBjb3JlIHJ1bnRpbWUgbG9naWMsIGRyaXZlcnMsIG9yIHN5c2NhbGwtcmVhY2hhYmxlIGtlcm5lbCBleGVjdXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDM6MzkuMTAwMzM4MzUzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NzExMjM0NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSB1cGRhdGVzIHRlc3QgYXNzZXJ0aW9ucyBhbmQgY2FzZXMgaW4gdGhlIEtVbml0IHRlc3Qgc3VpdGUgKGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdnciBpbiBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgpLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IERBTU9OIGNvcmUgcnVudGltZSBsb2dpYywgZHJpdmVycywgb3Igc3lzY2FsbC1yZWFjaGFibGUga2VybmVsIGV4ZWN1dGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQzOjM5LjEwMDM0NjIzM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI4NzYzNjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGI1ZjU1YTU0NDYxMmNkY2RkNDBkMDllZTY2NjliNzk4MTFjNjY3ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDA2OjQzOjM4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbmluZGV4IGMwMWU2YTc1Y2FkYzEuLmZmMjMyMDhjMTgxMzkgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXFxuKysrIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXFxuQEAgLTYyNywxMiArNjI3LDIwIEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXG4gc3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4ge1xcbi1cXHRzdHJ1Y3QgZGFtb25fYXR0cnMgYXR0cnMgPSB7XFxuK1xcdHN0cnVjdCBkYW1vbl9hdHRycyBhdHRycztcXG4rXFxuK1xcdC8qIFplcm8gc2FtcGxlIGludGVydmFsIGlzIHRyZWF0ZWQgYXMgb25lLiAqL1xcbitcXHRhdHRycyA9IChzdHJ1Y3QgZGFtb25fYXR0cnMpe1xcbiBcXHRcXHQuc2FtcGxlX2ludGVydmFsID0gMCxcXG4tXFx0XFx0LmFnZ3JfaW50ZXJ2YWwgPSAwLFxcbitcXHRcXHQuYWdncl9pbnRlcnZhbCA9IDUwMDAsXFxuIFxcdH07XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxcdTAwMjZhdHRycyksIDUwMDApO1xcbiBcXG4tXFx0LyogWmVybyBhZ2dyZWdhdGlvbiBpbnRlcnZhbCBkb2Vzbid0IGNhdXNlIGRpdmlzaW9uIGJ5IHplcm8gKi9cXG4rXFx0LyogWmVybyBzYW1wbGVzIHBlciBhZ2dyZWdhdGlvbiBpcyB0cmVhdGVkIGFzIG9uZS4gKi9cXG4rXFx0YXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcXG4rXFx0XFx0LnNhbXBsZV9pbnRlcnZhbCA9IDUwMDAsXFxuK1xcdFxcdC5hZ2dyX2ludGVydmFsID0gMCxcXG4rXFx0fTtcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXFx1MDAyNmF0dHJzKSwgMSk7XFxuIFxcbiBcXHQvKlxcbkBAIC02NDAsNyArNjQ4LDEwIEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdncihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdCAqIG92ZXJmbG93XFxuIFxcdCAqL1xcbiBcXHRpZiAoVUxPTkdfTUFYIFxcdTAwM2UgVUlOVF9NQVgpIHtcXG4tXFx0XFx0YXR0cnMuYWdncl9pbnRlcnZhbCA9ICh1bnNpZ25lZCBsb25nKVVJTlRfTUFYICsgMTtcXG4rXFx0XFx0YXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcXG4rXFx0XFx0XFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEsXFxuK1xcdFxcdFxcdC5hZ2dyX2ludGVydmFsID0gKHVuc2lnbmVkIGxvbmcpVUlOVF9NQVggKyAxLFxcbitcXHRcXHR9O1xcbiBcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcXHUwMDI2YXR0cnMpLFxcbiBcXHRcXHRcXHRcXHRVSU5UX01BWCk7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDM6MzkuNjI5ODQ0MTY0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMTgxODE3MTU4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgdXBkYXRlcyB0ZXN0IGFzc2VydGlvbnMgYW5kIGNhc2VzIGluIHRoZSBLVW5pdCB0ZXN0IHN1aXRlIChkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3IgaW4gbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oKS4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBEQU1PTiBjb3JlIHJ1bnRpbWUgbG9naWMsIGRyaXZlcnMsIG9yIHN5c2NhbGwtcmVhY2hhYmxlIGtlcm5lbCBleGVjdXRpb24gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRiNWY1NWE1NDQ2MTJjZGNkZDQwZDA5ZWU2NjY5Yjc5ODExYzY2N2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDA2OjQzOjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5pbmRleCBjMDFlNmE3NWNhZGMxLi5mZjIzMjA4YzE4MTM5IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG4rKysgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbkBAIC02MjcsMTIgKzYyNywyMCBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcbiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3Ioc3RydWN0IGt1bml0ICp0ZXN0KVxuIHtcbi1cdHN0cnVjdCBkYW1vbl9hdHRycyBhdHRycyA9IHtcbitcdHN0cnVjdCBkYW1vbl9hdHRycyBhdHRycztcbitcbitcdC8qIFplcm8gc2FtcGxlIGludGVydmFsIGlzIHRyZWF0ZWQgYXMgb25lLiAqL1xuK1x0YXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcbiBcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDAsXG4tXHRcdC5hZ2dyX2ludGVydmFsID0gMCxcbitcdFx0LmFnZ3JfaW50ZXJ2YWwgPSA1MDAwLFxuIFx0fTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmF0dHJzKSwgNTAwMCk7XG4gXG4tXHQvKiBaZXJvIGFnZ3JlZ2F0aW9uIGludGVydmFsIGRvZXNuJ3QgY2F1c2UgZGl2aXNpb24gYnkgemVybyAqL1xuK1x0LyogWmVybyBzYW1wbGVzIHBlciBhZ2dyZWdhdGlvbiBpcyB0cmVhdGVkIGFzIG9uZS4gKi9cbitcdGF0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7XG4rXHRcdC5zYW1wbGVfaW50ZXJ2YWwgPSA1MDAwLFxuK1x0XHQuYWdncl9pbnRlcnZhbCA9IDAsXG4rXHR9O1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2YXR0cnMpLCAxKTtcbiBcbiBcdC8qXG5AQCAtNjQwLDcgKzY0OCwxMCBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3Ioc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0ICogb3ZlcmZsb3dcbiBcdCAqL1xuIFx0aWYgKFVMT05HX01BWCBcdTAwM2UgVUlOVF9NQVgpIHtcbi1cdFx0YXR0cnMuYWdncl9pbnRlcnZhbCA9ICh1bnNpZ25lZCBsb25nKVVJTlRfTUFYICsgMTtcbitcdFx0YXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcbitcdFx0XHQuc2FtcGxlX2ludGVydmFsID0gMSxcbitcdFx0XHQuYWdncl9pbnRlcnZhbCA9ICh1bnNpZ25lZCBsb25nKVVJTlRfTUFYICsgMSxcbitcdFx0fTtcbiBcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2YXR0cnMpLFxuIFx0XHRcdFx0VUlOVF9NQVgpO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDM6MzkuNjI5ODQ1NDk0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjM0MTYxOTg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGEgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gd2UgaGF2ZSBhIHBhdGNoIHRvIHJldmlldy4gTXkgZmlyc3Qgc3RlcCBpcyB0byB6ZXJvIGluIG9uIHRoZSBtb2RpZmllZCBmaWxlIOKAkyBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gSW1tZWRpYXRlbHksIEnigJltIHRoaW5raW5nIGFib3V0IHdoYXQgYGRhbW9uYCBpcyDigJMgRHluYW1pYyBBZGRyZXNzIE1PTml0b3Ig4oCTIGFuZCB0aGF0IHRoaXMgaXMgcmVsYXRlZCB0byBrZXJuZWwgdGVzdGluZy4gVGhpcyBuYXJyb3dzIG15IGZvY3VzLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogb2YgdGhpcyBtb2RpZmljYXRpb24uIEJlZm9yZSBkaWdnaW5nIGludG8gdGhlIGNvZGUgbGluZS1ieS1saW5lLCBJJ2xsIG5lZWQgdG8gZXN0YWJsaXNoIHNvbWUgY29udGV4dC4gQSBxdWljayBgZ3JlcGAgb3IgZmlsZSByZWFkIHdpbGwgZ2l2ZSBtZSB0aGUgc3Vycm91bmRpbmcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxOSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDM6NDUuOTcxNDY4MDQ4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2MjAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MjA6XFx0XFx0XFx0XFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsXFxuIDYyMTpcXHRcXHRcXHRcXHQoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7XFxuIDYyMjpcXHRcXHRcXHRcXHR7LnN0YXJ0ID0gMTAsIC5lbmQgPSAyMH0sXFxuIDYyMzpcXHRcXHRcXHRcXHR7LnN0YXJ0ID0gMjAsIC5lbmQgPSAzMH0sXFxuIDYyNDpcXHRcXHRcXHRcXHR9LCAyLCA0MDk2LFxcbiA2MjU6XFx0XFx0XFx0XFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsIC1FSU5WQUwpO1xcbiA2MjY6XFx0fVxcbiA2Mjc6XFx0XFxuIDYyODpcXHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3Ioc3RydWN0IGt1bml0ICp0ZXN0KVxcbiA2Mjk6XFx0e1xcbiA2MzA6XFx0XFx0c3RydWN0IGRhbW9uX2F0dHJzIGF0dHJzO1xcbiA2MzE6XFx0XFxuIDYzMjpcXHRcXHQvKiBaZXJvIHNhbXBsZSBpbnRlcnZhbCBpcyB0cmVhdGVkIGFzIG9uZS4gKi9cXG4gNjMzOlxcdFxcdGF0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7XFxuIDYzNDpcXHRcXHRcXHQuc2FtcGxlX2ludGVydmFsID0gMCxcXG4gNjM1OlxcdFxcdFxcdC5hZ2dyX2ludGVydmFsID0gNTAwMCxcXG4gNjM2OlxcdFxcdH07XFxuIDYzNzpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcXHUwMDI2YXR0cnMpLCA1MDAwKTtcXG4gNjM4OlxcdFxcbiA2Mzk6XFx0XFx0LyogWmVybyBzYW1wbGVzIHBlciBhZ2dyZWdhdGlvbiBpcyB0cmVhdGVkIGFzIG9uZS4gKi9cXG4gNjQwOlxcdFxcdGF0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7XFxuIDY0MTpcXHRcXHRcXHQuc2FtcGxlX2ludGVydmFsID0gNTAwMCxcXG4gNjQyOlxcdFxcdFxcdC5hZ2dyX2ludGVydmFsID0gMCxcXG4gNjQzOlxcdFxcdH07XFxuIDY0NDpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcXHUwMDI2YXR0cnMpLCAxKTtcXG4gNjQ1OlxcdFxcbiA2NDY6XFx0XFx0LypcXG4gNjQ3OlxcdFxcdCAqIFRvbyBsYXJnZSBhZ2dyZWdhdGlvbiBpbnRlcnZhbCBvbiA2NCBiaXQgc3lzdGVtIGRvZXNuJ3QgY2F1c2VcXG4gNjQ4OlxcdFxcdCAqIG92ZXJmbG93XFxuIDY0OTpcXHRcXHQgKi9cXG4gNjUwOlxcdFxcdGlmIChVTE9OR19NQVggXFx1MDAzZSBVSU5UX01BWCkge1xcbiA2NTE6XFx0XFx0XFx0YXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcXG4gNjUyOlxcdFxcdFxcdFxcdC5zYW1wbGVfaW50ZXJ2YWwgPSAxLFxcbiA2NTM6XFx0XFx0XFx0XFx0LmFnZ3JfaW50ZXJ2YWwgPSAodW5zaWduZWQgbG9uZylVSU5UX01BWCArIDEsXFxuIDY1NDpcXHRcXHRcXHR9O1xcbiA2NTU6XFx0XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXFx1MDAyNmF0dHJzKSxcXG4gNjU2OlxcdFxcdFxcdFxcdFxcdFVJTlRfTUFYKTtcXG4gNjU3OlxcdFxcdH1cXG4gNjU4OlxcdH1cXG4gNjU5OlxcdFxcbiA2NjA6XFx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiA2NjE6XFx0e1xcbiA2NjI6XFx0XFx0c3RydWN0IGRhbW9uX2F0dHJzIG9sZF9hdHRycyA9IHtcXG4gNjYzOlxcdFxcdFxcdC5zYW1wbGVfaW50ZXJ2YWwgPSAxMCwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwLH07XFxuIDY2NDpcXHRcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgbmV3X2F0dHJzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0Mzo0NS45NzE1ODU4NzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTAwNjIyNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaXZpbmcgaW50byB0aGUgYGNvcmUta3VuaXQuaGAgTXlzdGVyeSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgd2hhdCdzIHRoaXMgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAgZmlsZSBhbGwgYWJvdXQ/IFRoZSBwYXRoIHN1Z2dlc3RzIGl0J3MgcmVsYXRlZCB0byB0aGUgREFNT04gbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLCBidXQgdGhhdCdzIGp1c3QgYSBndWVzcyBiYXNlZCBvbiB0aGUgZmlsZSBwYXRoLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpczogaXMgdGhpcyBmaWxlIGFjdHVhbGx5IGEgS1VuaXQgdW5pdCB0ZXN0PyBUaGF0IHdvdWxkIGJlIHVzZWZ1bCB0byBkZXRlcm1pbmUgaG93IHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgREFNT04gaXMgYmVpbmcgdGVzdGVkLiBUaW1lIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIGl0IGZvbGxvd3MgdGhlIEtVbml0IHRlc3RpbmcgZnJhbWV3b3JrIGNvbnZlbnRpb25zLiBJZiBzbywgdGhhdCdzIGdvb2QgbmV3cyDigJMgaXQgc3VnZ2VzdHMgcm9idXN0IHRlc3Rpbmcgb2YgdGhlIGNvcmUgREFNT04gZnVuY3Rpb25hbGl0eS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmaWxlIGlzIGJlaW5nIGluY2x1ZGVkIGluIHRoZSByZXN0IG9mIHRoZSBwcm9qZWN0LiBXaGVyZSB0aGlzIGhlYWRlciBpcyByZWZlcmVuY2VkIHdpbGwgZ2l2ZSBjbHVlcyB0byB0aGUgcGFydHMgb2YgREFNT04gaXQncyB0ZXN0aW5nLiBFeGFtaW5pbmcgdGhlIGluY2x1c2lvbnMgd2lsbCBpbmRpY2F0ZSB3aGljaCBjb21wb25lbnRzIHJlbHkgb24gdGhlc2UgdGVzdHMsIGFuZCwgZXF1YWxseSBpbXBvcnRhbnQsIGhvdyB0aGV5J3JlIHRlc3RlZC4gS25vd2luZyBpdHMgZGVwZW5kZW5jaWVzIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSB0ZXN0J3Mgc2NvcGUgYW5kIGl0cyBpbXBvcnRhbmNlIGluIGVuc3VyaW5nIHRoZSBzdGFiaWxpdHkgYW5kIGNvcnJlY3Qgb3BlcmF0aW9uIG9mIHRoZSBlbnRpcmUgREFNT04gc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTkxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0Mzo0OS44NzIyMTEzNjhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzMzMxODI1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3JlLWt1bml0LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTQxNzg9c3Vic3lzX2luaXRjYWxsKGRhbW9uX2luaXQpO1xcbm1tL2RhbW9uL2NvcmUuYy00MTc5LVxcbm1tL2RhbW9uL2NvcmUuYzo0MTgwOiNpbmNsdWRlIFxcXCJ0ZXN0cy9jb3JlLWt1bml0LmhcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQzOjUyLjEwNTUzNDIxNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3MjQ4NTgwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdXp6YWJpbGl0eSBvZiBLVW5pdCBUZXN0cyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHRyaWFnZSBwaGlsb3NvcGh5IGFuZCBzZWUgaWYgdGhpcyBLVW5pdCB0ZXN0IGNvZGUgZmFsbHMgdW5kZXIgdGhlIFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgY3JpdGVyaWEuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgYXQgU2VjdGlvbiAyLCB3aGljaCBvdXRsaW5lcyB0aGUgbmVnYXRpdmUgY3JpdGVyaWE6IHdoZW4gYSBwYXRjaCAqc2hvdWxkbid0KiBiZSBmdXp6ZWQuIFRoZSBrZXkgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBtb2RpZmllZCBjb2RlIGlzIG5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIGRlZmluaXRpb24gb2Ygbm9uLWV4ZWN1dGFibGUgY2hhbmdlcywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUga2VybmVsIGltYWdlIG9yIG1vZHVsZXMuIEkga25vdyB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIHNwZWxsaW5nIGZpeGVzLCB1c2VyLXNwYWNlIHRvb2xzLCBzYW1wbGVzIG9yIHNjcmlwdHMsIGFuZCBkZWNvcmF0aXZlIGxvZ2dpbmcgZ2VuZXJhbGx5IGZhbGwgaW50byB0aGlzIGNhdGVnb3J5LiBOb3cgdGhlIHJlYWwgcXVlc3Rpb246IGFyZSBLVW5pdCB0ZXN0cyB0cmVhdGVkIHRoZSBzYW1lIHdheT8gQXJlIHRoZXkgZnV6emFibGUgdGVzdCBjb2RlP1xuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpczogaG93IGRvZXMgc3l6a2FsbGVyIGhhbmRsZSBLVW5pdCB0ZXN0cz8gQXJlIHRoZXNlIGNvbnNpZGVyZWQganVzdCB0ZXN0IHN1aXRlcyBhbmQgZXhjbHVkZWQ/IEkgbmVlZCB0byBjbGFyaWZ5IGlmIHN5emthbGxlciB0YXJnZXRzIEtVbml0IHRlc3RzLCBvciBpZiB0aGV5IGFyZSBza2lwcGVkIGR1cmluZyBpdHMgc3lzY2FsbCBmdXp6aW5nIHJ1bnMuIFRoZSB0cmlhZ2UgZ3VpZGVsaW5lcyBlbXBoYXNpemUgcmVhY2hhYmlsaXR5IGFuZCB0aGUgYWJpbGl0eSB0byBleGVjdXRlIGNvZGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBDYW4gc3l6a2FsbGVyIHRyaWdnZXIgS1VuaXQgdGVzdHMgZHVyaW5nIGl0cyBzeXNjYWxsIGZ1enppbmc/XG5cbkkgbmVlZCB0byByZS1yZWFkIHRoZSB0cmlhZ2UgZ3VpZGVsaW5lcyB0byBlbnN1cmUgSSBkb24ndCBvdmVybG9vayBhbnkgc3VidGxldGllcy4gVGhlIGdvYWwgaXMgdG8gY2F0Y2ggY3Jhc2hlcywgcmVncmVzc2lvbnMsIG9yIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zLiBUaGUgbWFpbiBnYXRlIGlzIHJlYWNoYWJpbGl0eS4gSWYgdGhlIGNvZGUgaXMgbm90IHN0cnVjdHVyYWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSksIGl0IHNob3VsZCBub3QgYmUgZnV6emVkLiBCdXQgYXJlIEtVbml0IHRlc3RzLCBhbmQgdGVzdCBjb2RlIGZ1enphYmxlP1xuXG5TbywgY2FuIHN5emthbGxlciBkaXJlY3RseSBpbnZva2UgS1VuaXQgdGVzdCBmdW5jdGlvbnMsIGxpa2UgdGhlIG9uZSBJJ20gdGhpbmtpbmcgb2YsIGBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3JgPyBUbyBhbnN3ZXIgdGhhdCwgSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTGV0J3Mgc3RhcnQgd2l0aCBgbW0vZGFtb24vY29yZS5jYCBhcm91bmQgbGluZSA0MTgwLiBUaGF0J3MgdGhlIGZpcnN0IHN0ZXAgdG8gY2xhcmlmeSB0aGUgcmVhY2hhYmlsaXR5IGFuZCB0aGUgZXhlY3V0YWJsZSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU4OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0Mzo1Ny44MzAzOTQ2MDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTcyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxNzAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQxNzA6XFx0XFx0aWYgKHVubGlrZWx5KCFkYW1vbl9yZWdpb25fY2FjaGUpKSB7XFxuNDE3MTpcXHRcXHRcXHRwcl9lcnIoXFxcImNyZWF0aW5nIGRhbW9uX3JlZ2lvbl9jYWNoZSBmYWlsc1xcXFxuXFxcIik7XFxuNDE3MjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG40MTczOlxcdFxcdH1cXG40MTc0OlxcdFxcbjQxNzU6XFx0XFx0cmV0dXJuIDA7XFxuNDE3NjpcXHR9XFxuNDE3NzpcXHRcXG40MTc4OlxcdHN1YnN5c19pbml0Y2FsbChkYW1vbl9pbml0KTtcXG40MTc5OlxcdFxcbjQxODA6XFx0I2luY2x1ZGUgXFxcInRlc3RzL2NvcmUta3VuaXQuaFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDM6NTcuODMwNTk0NDE3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAzNzMzOTg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQsIGFuYWx5emluZyB0aGUgc2l0dWF0aW9uOlxuXG4qKlJldmlld2luZyBDb3JlIEtVbml0IFRlc3QgRGVmaW5pdGlvbnMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSByZXN0IG9mIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBUaGlzIGxpa2VseSBjb250YWlucyBjcml0aWNhbCBkZWZpbml0aW9ucyBmb3IgdGhlIGNvcmUgS1VuaXQgdGVzdHMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpLiBVbmRlcnN0YW5kaW5nIHRoaXMgaGVhZGVyIGZpbGUgaXMgZXNzZW50aWFsIGZvciBzZXZlcmFsIHJlYXNvbnMuIEl0IGNvdWxkIGRldGFpbCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgaW4gdGhlc2UgY29yZSB0ZXN0cywgZGVmaW5lIG1hY3JvcyBmb3IgdGVzdCBzZXR1cCBhbmQgdGVhcmRvd24sIG9yIHNwZWNpZnkgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9yIHRlc3RpbmcgY29uZGl0aW9ucyBmb3Igc3BlY2lmaWMgREFNT04gZnVuY3Rpb25hbGl0aWVzLiBJdCBtaWdodCBldmVuIGluY2x1ZGUgaW5saW5lIGZ1bmN0aW9ucyBvciBoZWxwZXIgcm91dGluZXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciB0aGUgS1VuaXQgdGVzdHMgd2l0aGluIHRoaXMgbW9kdWxlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBzY29wZSBhbmQgY29tcGxleGl0eSBvZiB0aGUgdGVzdHMgZGVmaW5lZCB3aXRoaW4uIEl0IGlzIHZlcnkgbGlrZWx5IHRoYXQgdGhpcyBoZWFkZXIgY29udGFpbnMgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCBpbmNsdWRlL2V4Y2x1ZGUgc3BlY2lmaWMgcGFydHMgb2YgdGhlIHRlc3RpbmcgYmFzZWQgb24gY29uZmlndXJhdGlvbi4gVGhpcyBjb3VsZCBiZSByZWxldmFudCB0byB1bmRlcnN0YW5kaW5nIHNwZWNpZmljIGJlaGF2aW9ycy4gVWx0aW1hdGVseSwgZXhhbWluaW5nIHRoaXMgaGVhZGVyIGlzIGNydWNpYWwgdG8gcHJvcGVybHkgZ3JvayB0aGUgdGVzdCBzdHJhdGVneSBhbmQgaXRzIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzM0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0NDowMC44Njc5MzY3OTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2NjAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjA6XFx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiA2NjE6XFx0e1xcbiA2NjI6XFx0XFx0c3RydWN0IGRhbW9uX2F0dHJzIG9sZF9hdHRycyA9IHtcXG4gNjYzOlxcdFxcdFxcdC5zYW1wbGVfaW50ZXJ2YWwgPSAxMCwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwLH07XFxuIDY2NDpcXHRcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgbmV3X2F0dHJzO1xcbiA2NjU6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciA9IGRhbW9uX25ld19yZWdpb24oMywgNyk7XFxuIDY2NjpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxuIDY2NzpcXHRcXG4gNjY4OlxcdFxcdGlmICghcilcXG4gNjY5OlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInJlZ2lvbiBhbGxvYyBmYWlsXFxcIik7XFxuIDY3MDpcXHRcXHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XFxuIDY3MTpcXHRcXHRpZiAoIWN0eCkge1xcbiA2NzI6XFx0XFx0XFx0ZGFtb25fZnJlZV9yZWdpb24ocik7XFxuIDY3MzpcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJjdHggYWxsb2MgZmFpbFxcXCIpO1xcbiA2NzQ6XFx0XFx0fVxcbiA2NzU6XFx0XFxuIDY3NjpcXHRcXHRyLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IDE1O1xcbiA2Nzc6XFx0XFx0ci1cXHUwMDNlYWdlID0gMjA7XFxuIDY3ODpcXHRcXG4gNjc5OlxcdFxcdG5ld19hdHRycyA9IChzdHJ1Y3QgZGFtb25fYXR0cnMpe1xcbiA2ODA6XFx0XFx0XFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEwMCwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwMCx9O1xcbiA2ODE6XFx0XFx0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFxcdTAwMjZvbGRfYXR0cnMsIFxcdTAwMjZuZXdfYXR0cnMsIGZhbHNlLCBjdHgpO1xcbiA2ODI6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZW5yX2FjY2Vzc2VzLCAxNSk7XFxuIDY4MzpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlYWdlLCAyKTtcXG4gNjg0OlxcdFxcbiA2ODU6XFx0XFx0bmV3X2F0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7XFxuIDY4NjpcXHRcXHRcXHQuc2FtcGxlX2ludGVydmFsID0gMSwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwfTtcXG4gNjg3OlxcdFxcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCBcXHUwMDI2b2xkX2F0dHJzLCBcXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSwgY3R4KTtcXG4gNjg4OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2Vucl9hY2Nlc3NlcywgMTUwKTtcXG4gNjg5OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2VhZ2UsIDIpO1xcbiA2OTA6XFx0XFxuIDY5MTpcXHRcXHRuZXdfYXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcXG4gNjkyOlxcdFxcdFxcdC5zYW1wbGVfaW50ZXJ2YWwgPSAxLCAuYWdncl9pbnRlcnZhbCA9IDEwMH07XFxuIDY5MzpcXHRcXHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQociwgXFx1MDAyNm9sZF9hdHRycywgXFx1MDAyNm5ld19hdHRycywgZmFsc2UsIGN0eCk7XFxuIDY5NDpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlbnJfYWNjZXNzZXMsIDE1MCk7XFxuIDY5NTpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlYWdlLCAyMCk7XFxuIDY5NjpcXHRcXG4gNjk3OlxcdFxcdGRhbW9uX2ZyZWVfcmVnaW9uKHIpO1xcbiA2OTg6XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG4gNjk5OlxcdH1cXG4gNzAwOlxcdFxcbiA3MDE6XFx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfYXR0cnMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiA3MDI6XFx0e1xcbiA3MDM6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqYyA9IGRhbW9uX25ld19jdHgoKTtcXG4gNzA0OlxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyB2YWxpZF9hdHRycyA9IHtcXG4gNzA1OlxcdFxcdFxcdC5taW5fbnJfcmVnaW9ucyA9IDEwLCAubWF4X25yX3JlZ2lvbnMgPSAxMDAwLFxcbiA3MDY6XFx0XFx0XFx0LnNhbXBsZV9pbnRlcnZhbCA9IDUwMDAsIC5hZ2dyX2ludGVydmFsID0gMTAwMDAwLH07XFxuIDcwNzpcXHRcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgaW52YWxpZF9hdHRycztcXG4gNzA4OlxcdFxcbiA3MDk6XFx0XFx0aWYgKCFjKVxcbiA3MTA6XFx0XFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwiY3R4IGFsbG9jIGZhaWxcXFwiKTtcXG4gNzExOlxcdFxcbiA3MTI6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NldF9hdHRycyhjLCBcXHUwMDI2dmFsaWRfYXR0cnMpLCAwKTtcXG4gNzEzOlxcdFxcbiA3MTQ6XFx0XFx0aW52YWxpZF9hdHRycyA9IHZhbGlkX2F0dHJzO1xcbiA3MTU6XFx0XFx0aW52YWxpZF9hdHRycy5taW5fbnJfcmVnaW9ucyA9IDE7XFxuIDcxNjpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFxcdTAwMjZpbnZhbGlkX2F0dHJzKSwgLUVJTlZBTCk7XFxuIDcxNzpcXHRcXG4gNzE4OlxcdFxcdGludmFsaWRfYXR0cnMgPSB2YWxpZF9hdHRycztcXG4gNzE5OlxcdFxcdGludmFsaWRfYXR0cnMubWF4X25yX3JlZ2lvbnMgPSA5O1xcbiA3MjA6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NldF9hdHRycyhjLCBcXHUwMDI2aW52YWxpZF9hdHRycyksIC1FSU5WQUwpO1xcbiA3MjE6XFx0XFxuIDcyMjpcXHRcXHRpbnZhbGlkX2F0dHJzID0gdmFsaWRfYXR0cnM7XFxuIDcyMzpcXHRcXHRpbnZhbGlkX2F0dHJzLmFnZ3JfaW50ZXJ2YWwgPSA0OTk5O1xcbiA3MjQ6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NldF9hdHRycyhjLCBcXHUwMDI2aW52YWxpZF9hdHRycyksIC1FSU5WQUwpO1xcbiA3MjU6XFx0XFxuIDcyNjpcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcXG4gNzI3OlxcdH1cXG4gNzI4OlxcdFxcbiA3Mjk6XFx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF9tdnN1bShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIDczMDpcXHR7XFxuIDczMTpcXHRcXHR1bnNpZ25lZCBsb25nIGlucHV0X2V4cGVjdHNbXSA9IHtcXG4gNzMyOlxcdFxcdFxcdC8qIGN1cnJlbnQgdmFsdWUsIGxhc3QgdmFsdWUsIHJlbWFpbmluZyB3aW5kb3cgKGJwKSAqL1xcbiA3MzM6XFx0XFx0XFx0MCwgNDksIDEwMDAwLCA0OSxcXHQvKiAwICsgNDkgKiAxICovXFxuIDczNDpcXHRcXHRcXHQzLCAxMCwgNzAwMCwgMTAsXFx0LyogMyArIDEwICogMC43ICovXFxuIDczNTpcXHRcXHRcXHQzLCAxMCwgNTAwMCwgOCxcXHRcXHQvKiAzICsgMTAgKiAwLjUgKi9cXG4gNzM2OlxcdFxcdFxcdDMyLCAxMDAsIDEwMDAsIDQyLFxcdC8qIDMyICsgMTAwICogMC4xICovXFxuIDczNzpcXHRcXHRcXHQ0MiwgNDksIDAsIDQyLFxcdFxcdC8qIDQyICsgNDkgKiAwICovXFxuIDczODpcXHRcXHR9O1xcbiA3Mzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ0OjAwLjg2ODEwMDI1MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjM1MjQ5OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgQ29yZSBLVW5pdCBUZXN0cyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGUgbWF0dGVyLiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgS1VuaXQgdGVzdCBzdWl0ZSwgc3BlY2lmaWNhbGx5IGZvciB0aGUgbW0vZGFtb24gc3Vic3lzdGVtLiBNeSBmb2N1cyBpcyBvbiB0aGUgZmlsZSBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ2V0IGEgc2Vuc2Ugb2YgdGhlIHRlc3Qgc2V0dXAsIHRoZSBrZXkgZnVuY3Rpb25zIHVuZGVyIHNjcnV0aW55IGFuZCBhbnkgaW1wb3J0YW50IGFzc2VydGlvbnMgd2l0aGluIGl0LiBUaGlzIGdpdmVzIHRoZSBiZXN0IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBvdGVudGlhbCBwaXRmYWxscy4gQXJlIHRoZXkgZm9jdXNlZCBvbiBkaXJlY3QgaW50ZWdyYXRpb24sIGZ1bmN0aW9uIHRlc3RpbmcsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXByZWhlbnNpdmU/IFdoYXQgYXJlIHRoZSBrZXkgcGVyZm9ybWFuY2UgbWV0cmljcyB0aGV5J3JlIGNoZWNraW5nPyBJcyB0aGVyZSBhbnl0aGluZyBub3Rld29ydGh5IG9yIHRoYXQgY291bGQgYmUgcHJvYmxlbWF0aWM/IFRoaXMgaXMgZ29pbmcgdG8gZ2l2ZSBtZSBteSBiZXN0IGluc2lnaHRzIHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NDIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ0OjA0LjEwMzM1MjU3MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc1MDpcXHRcXHR9XFxuIDc1MTpcXHR9XFxuIDc1MjpcXHRcXG4gNzUzOlxcdC8qXFxuIDc1NDpcXHQgKiBUZXN0IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKCksIHdoaWNoIHdyYXBzIGRhbW9uX212c3VtKCkgd2l0aCB0aGVcXG4gNzU1OlxcdCAqIG1vbml0b3JpbmcgaW50ZXJ2YWxzIG9mIHRoZSBjb250ZXh0LiAgV2l0aCBhIHNhbXBsZSBpbnRlcnZhbCBvZiAxIGFuZCBhblxcbiA3NTY6XFx0ICogYWdncmVnYXRpb24gaW50ZXJ2YWwgb2YgMTAsIGFuIGFnZ3JlZ2F0aW9uIHdpbmRvdyBpcyAxMCBzYW1wbGUgaW50ZXJ2YWxzXFxuIDc1NzpcXHQgKiBsb25nLiAgRWFjaCByb3cgYmVsb3cgc3BlY2lmaWVzIHRoZSBwYXNzZWQgc2FtcGxlIGludGVydmFscywgdGhlIG5leHRcXG4gNzU4OlxcdCAqIGFnZ3JlZ2F0aW9uIHRpbWUgaW4gc2FtcGxlIGludGVydmFscywgdGhlIGN1cnJlbnQgYW5kIGxhc3QgbnJfYWNjZXNzZXMgb2YgYVxcbiA3NTk6XFx0ICogcmVnaW9uLCBhbmQgdGhlIGV4cGVjdGVkIHJldHVybiB2YWx1ZS5cXG4gNzYwOlxcdCAqL1xcbiA3NjE6XFx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIDc2MjpcXHR7XFxuIDc2MzpcXHRcXHR1bnNpZ25lZCBsb25nIGlucHV0X2V4cGVjdHNbXSA9IHtcXG4gNzY0OlxcdFxcdFxcdC8qIHBhc3NlZCwgbmV4dF9hZ2dyLCBucl9hY2Nlc3NlcywgbGFzdF9ucl9hY2Nlc3NlcywgZXhwZWN0ICovXFxuIDc2NTpcXHRcXHRcXHQwLCAxMCwgNSwgMywgMyxcXHRcXHQvKiBmdWxsIHdpbmRvdyBsZWZ0LCB1bnJlc2V0ICovXFxuIDc2NjpcXHRcXHRcXHQwLCAxMCwgMCwgNywgNyxcXHRcXHQvKiBmdWxsIHdpbmRvdyBsZWZ0LCByZXNldCAqL1xcbiA3Njc6XFx0XFx0XFx0NSwgMTAsIDMsIDEwLCA4LFxcdC8qIGhhbGYgd2luZG93IGxlZnQgKi9cXG4gNzY4OlxcdFxcdFxcdDgsIDEwLCAzLCAxMCwgNSxcXHQvKiAyMCUgd2luZG93IGxlZnQgKi9cXG4gNzY5OlxcdFxcdFxcdDEwLCAxMCwgNDIsIDQ5LCA0MixcXHQvKiBubyB3aW5kb3cgbGVmdCAqL1xcbiA3NzA6XFx0XFx0fTtcXG4gNzcxOlxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmMgPSBkYW1vbl9uZXdfY3R4KCk7XFxuIDc3MjpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbiA3NzM6XFx0XFx0aW50IGk7XFxuIDc3NDpcXHRcXG4gNzc1OlxcdFxcdGlmICghYylcXG4gNzc2OlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcImN0eCBhbGxvYyBmYWlsXFxcIik7XFxuIDc3NzpcXHRcXG4gNzc4OlxcdFxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKDAsIDQwOTYpO1xcbiA3Nzk6XFx0XFx0aWYgKCFyKSB7XFxuIDc4MDpcXHRcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcXG4gNzgxOlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInJlZ2lvbiBhbGxvYyBmYWlsXFxcIik7XFxuIDc4MjpcXHRcXHR9XFxuIDc4MzpcXHRcXG4gNzg0OlxcdFxcdGMtXFx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA9IDE7XFxuIDc4NTpcXHRcXHRjLVxcdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsID0gMTA7XFxuIDc4NjpcXHRcXG4gNzg3OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGlucHV0X2V4cGVjdHMpOyBpICs9IDUpIHtcXG4gNzg4OlxcdFxcdFxcdGMtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzID0gaW5wdXRfZXhwZWN0c1tpXTtcXG4gNzg5OlxcdFxcdFxcdGMtXFx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzID0gaW5wdXRfZXhwZWN0c1tpICsgMV07XFxuIDc5MDpcXHRcXHRcXHRyLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IGlucHV0X2V4cGVjdHNbaSArIDJdO1xcbiA3OTE6XFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IGlucHV0X2V4cGVjdHNbaSArIDNdO1xcbiA3OTI6XFx0XFxuIDc5MzpcXHRcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgKHVuc2lnbmVkIGludClpbnB1dF9leHBlY3RzW2kgKyA0XSxcXG4gNzk0OlxcdFxcdFxcdFxcdFxcdGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHIsIGMpKTtcXG4gNzk1OlxcdFxcdH1cXG4gNzk2OlxcdFxcbiA3OTc6XFx0XFx0ZGFtb25fZnJlZV9yZWdpb24ocik7XFxuIDc5ODpcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcXG4gNzk5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDQ6MDQuMTAzNDY4MDIxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzNjM5NzExNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGNvcmUta3VuaXQuaCB1cCB0byBMaW5lIDgzMCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHRlc3Qgc2V0dXAgYW5kIHdoYXQncyBiZWluZyB2ZXJpZmllZCB1cCB0byBsaW5lIDgzMC4gR2l2ZW4gdGhlIGxvY2F0aW9uIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtLCBJIGV4cGVjdCB0aGlzIGZpbGUgY29udGFpbnMgdGhlIGNvcmUgS1VuaXQgdGVzdHMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IG9yIERhdGEgQWNjZXNzIE1PTml0b3IgKERBTU9OKSBmdW5jdGlvbmFsaXR5LCBxdWl0ZSBwb3NzaWJseSByZWxhdGVkIHRvIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcyBvciBhbGdvcml0aG1zLlxuXG5NeSBpbml0aWFsIHF1ZXN0aW9ucyBhcmU6IHdoYXQgdGVzdCBjYXNlcyBhcmUgZGVmaW5lZD8gV2hhdCBtYWNyb3Mgb3IgaGVscGVyIGZ1bmN0aW9ucyBhcmUgdXNlZCBleHRlbnNpdmVseT8gQXJlIHRoZXJlIGFueSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHRlc3RlZCwgYW5kIGhvdyBhcmUgdGhleSBiZWluZyBpbml0aWFsaXplZCBhbmQgbWFuaXB1bGF0ZWQ/IEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGV5IGFyZSB0ZXN0aW5nIHRoZSBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBjb3JlIERBTU9OIGZ1bmN0aW9uYWxpdHkuXG5cbkdpdmVuIGl0J3MgYSBoZWFkZXIsIEkgYW50aWNpcGF0ZSBpdCBkZWZpbmVzIHN0cnVjdHMsIGZ1bmN0aW9uIHByb3RvdHlwZXMsIGFuZCBwb3RlbnRpYWxseSBpbmxpbmUgZnVuY3Rpb25zIHJlbGV2YW50IHRvIHRoZSBLVW5pdCB0ZXN0cy4gSSdsbCBiZSBsb29raW5nIGZvciB3ZWxsLWRlZmluZWQgYXNzZXJ0aW9ucyBhbmQgZXJyb3IgaGFuZGxpbmcgbWVjaGFuaXNtcyB0byBnYXVnZSB0aGUgcm9idXN0bmVzcyBvZiB0aGUgdGVzdHMuIEknbGwgYWxzbyBiZSB3YXRjaGluZyBmb3IgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsZ29yaXRobXMgdGhhdCBtaWdodCBiZSB0aGUgdGFyZ2V0IG9mIHRoZXNlIHRlc3RzLCBlc3BlY2lhbGx5IG1lbW9yeSBtYW5hZ2VtZW50IGFzcGVjdHMuIEknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgdGVzdCBjYXNlIHNwZWNpZmljIG1hY3JvcyBhcyB0aG9zZSBhcmUgYWxtb3N0IGFsd2F5cyBhIHRlbGwgb2Ygd2hhdCBpcyBiZWluZyB0ZXN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NzUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ0OjA4LjQ2NzQ0Mjg1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgwMDpcXHRcXG4gODAxOlxcdHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfbmV3X2ZpbHRlcihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIDgwMjpcXHR7XFxuIDgwMzpcXHRcXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XFxuIDgwNDpcXHRcXG4gODA1OlxcdFxcdGZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfQU5PTiwgdHJ1ZSwgZmFsc2UpO1xcbiA4MDY6XFx0XFx0aWYgKCFmaWx0ZXIpXFxuIDgwNzpcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJmaWx0ZXIgYWxsb2MgZmFpbFxcXCIpO1xcbiA4MDg6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGZpbHRlci1cXHUwMDNldHlwZSwgREFNT1NfRklMVEVSX1RZUEVfQU5PTik7XFxuIDgwOTpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZmlsdGVyLVxcdTAwM2VtYXRjaGluZywgdHJ1ZSk7XFxuIDgxMDpcXHRcXHRLVU5JVF9FWFBFQ1RfUFRSX0VRKHRlc3QsIGZpbHRlci1cXHUwMDNlbGlzdC5wcmV2LCBcXHUwMDI2ZmlsdGVyLVxcdTAwM2VsaXN0KTtcXG4gODExOlxcdFxcdEtVTklUX0VYUEVDVF9QVFJfRVEodGVzdCwgZmlsdGVyLVxcdTAwM2VsaXN0Lm5leHQsIFxcdTAwMjZmaWx0ZXItXFx1MDAzZWxpc3QpO1xcbiA4MTI6XFx0XFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcXG4gODEzOlxcdH1cXG4gODE0OlxcdFxcbiA4MTU6XFx0c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbiA4MTY6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCxcXG4gODE3OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXFxuIDgxODpcXHR7XFxuIDgxOTpcXHRcXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3QsIHNyYyk7XFxuIDgyMDpcXHRcXG4gODIxOlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZW1ldHJpYywgc3JjLVxcdTAwM2VtZXRyaWMpO1xcbiA4MjI6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNldGFyZ2V0X3ZhbHVlLCBzcmMtXFx1MDAzZXRhcmdldF92YWx1ZSk7XFxuIDgyMzpcXHRcXHRpZiAoc3JjLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVClcXG4gODI0OlxcdFxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZWN1cnJlbnRfdmFsdWUsIHNyYy1cXHUwMDNlY3VycmVudF92YWx1ZSk7XFxuIDgyNTpcXHRcXHRzd2l0Y2ggKGRzdC1cXHUwMDNlbWV0cmljKSB7XFxuIDgyNjpcXHRcXHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcXG4gODI3OlxcdFxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZWxhc3RfcHNpX3RvdGFsLCBVNjRfTUFYKTtcXG4gODI4OlxcdFxcdFxcdGJyZWFrO1xcbiA4Mjk6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOlxcbiA4MzA6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQOlxcbiA4MzE6XFx0XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNlbmlkLCBzcmMtXFx1MDAzZW5pZCk7XFxuIDgzMjpcXHRcXHRcXHRicmVhaztcXG4gODMzOlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQOlxcbiA4MzQ6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XFxuIDgzNTpcXHRcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VuaWQsIHNyYy1cXHUwMDNlbmlkKTtcXG4gODM2OlxcdFxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZW1lbWNnX2lkLCBzcmMtXFx1MDAzZW1lbWNnX2lkKTtcXG4gODM3OlxcdFxcdFxcdGJyZWFrO1xcbiA4Mzg6XFx0XFx0ZGVmYXVsdDpcXG4gODM5OlxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0NDowOC40Njc2MDY1ODVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE1Nzc3NjQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRm9jdXNpbmcgb24gQ29yZS1LdW5pdCBUZXN0cyoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4uIEkgbmVlZCB0byBleGFtaW5lIHRoZSB2ZXJ5IGVuZCBvZiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gSSBrbm93IHdoYXQncyBsaWtlbHkgdHVja2VkIGF3YXkgZG93biB0aGVyZTsgb2Z0ZW4gdGhlIGVkZ2UgY2FzZXMsIHRoZSBjbGVhbnVwIHJvdXRpbmVzLCBhbmQgdGhlIHZlcnkgbGFzdCBhc3NlcnRpb25zIGxpdmUgYXQgdGhlIHRhaWwgZW5kIG9mIHRoZXNlIHRlc3QgZmlsZXMuIEl0J3MgdGhlIHVzdWFsIHBhdHRlcm4sIGFuZCBJIHdhbnQgdG8gdmVyaWZ5IGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBhbGlnbnMgd2l0aCBteSBleHBlY3RhdGlvbnMuIFRoaXMgd2lsbCBiZSB3aGVyZSB0aGUgc3VidGxlIGZsYXdzIGFuZCB1bmV4cGVjdGVkIGJlaGF2aW9ycyB0eXBpY2FsbHkgc3VyZmFjZSwgc28gdGhpcyBpcyB3aGVyZSBJ4oCZbGwgc3RhcnQgZGlnZ2luZy4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Nzg1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0NDoxMC42MjUzODU4NTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA4NDAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDA6XFx0XFx0fVxcbiA4NDE6XFx0fVxcbiA4NDI6XFx0XFxuIDg0MzpcXHRzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gODQ0OlxcdHtcXG4gODQ1OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsIGRzdCA9IHtcXG4gODQ2OlxcdFxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXFxuIDg0NzpcXHRcXHRcXHQudGFyZ2V0X3ZhbHVlID0gMTAwMCxcXG4gODQ4OlxcdFxcdFxcdC5jdXJyZW50X3ZhbHVlID0gMTIzLFxcbiA4NDk6XFx0XFx0XFx0Lmxhc3RfcHNpX3RvdGFsID0gNDU2LFxcbiA4NTA6XFx0XFx0fTtcXG4gODUxOlxcdFxcbiA4NTI6XFx0XFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXFx1MDAyNmRzdCxcXG4gODUzOlxcdFxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpIHtcXG4gODU0OlxcdFxcdFxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXFxuIDg1NTpcXHRcXHRcXHRcXHQudGFyZ2V0X3ZhbHVlID0gMjM0LFxcbiA4NTY6XFx0XFx0XFx0XFx0LmN1cnJlbnRfdmFsdWUgPSAzNDUsXFxuIDg1NzpcXHRcXHRcXHRcXHQubGFzdF9wc2lfdG90YWwgPSA1NjcsXFxuIDg1ODpcXHRcXHRcXHRcXHR9KTtcXG4gODU5OlxcdFxcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFxcdTAwMjZkc3QsXFxuIDg2MDpcXHRcXHRcXHRcXHRcXHUwMDI2KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKXtcXG4gODYxOlxcdFxcdFxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9VU0VSX0lOUFVULFxcbiA4NjI6XFx0XFx0XFx0XFx0LnRhcmdldF92YWx1ZSA9IDc4OSxcXG4gODYzOlxcdFxcdFxcdFxcdC5jdXJyZW50X3ZhbHVlID0gMTJ9KTtcXG4gODY0OlxcdFxcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFxcdTAwMjZkc3QsXFxuIDg2NTpcXHRcXHRcXHRcXHRcXHUwMDI2KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKXtcXG4gODY2OlxcdFxcdFxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQLFxcbiA4Njc6XFx0XFx0XFx0XFx0LnRhcmdldF92YWx1ZSA9IDM0NSxcXG4gODY4OlxcdFxcdFxcdFxcdC5jdXJyZW50X3ZhbHVlID0gNjc4LFxcbiA4Njk6XFx0XFx0XFx0XFx0Lm5pZCA9IDksXFxuIDg3MDpcXHRcXHRcXHRcXHR9KTtcXG4gODcxOlxcdFxcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFxcdTAwMjZkc3QsXFxuIDg3MjpcXHRcXHRcXHRcXHRcXHUwMDI2KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKXtcXG4gODczOlxcdFxcdFxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQLFxcbiA4NzQ6XFx0XFx0XFx0XFx0LnRhcmdldF92YWx1ZSA9IDEyLFxcbiA4NzU6XFx0XFx0XFx0XFx0LmN1cnJlbnRfdmFsdWUgPSAzNDUsXFxuIDg3NjpcXHRcXHRcXHRcXHQubmlkID0gNixcXG4gODc3OlxcdFxcdFxcdFxcdH0pO1xcbiA4Nzg6XFx0XFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXFx1MDAyNmRzdCxcXG4gODc5OlxcdFxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpe1xcbiA4ODA6XFx0XFx0XFx0XFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUCxcXG4gODgxOlxcdFxcdFxcdFxcdC50YXJnZXRfdmFsdWUgPSA0NTYsXFxuIDg4MjpcXHRcXHRcXHRcXHQuY3VycmVudF92YWx1ZSA9IDU2NyxcXG4gODgzOlxcdFxcdFxcdFxcdC5uaWQgPSA2LFxcbiA4ODQ6XFx0XFx0XFx0XFx0Lm1lbWNnX2lkID0gNyxcXG4gODg1OlxcdFxcdFxcdFxcdH0pO1xcbiA4ODY6XFx0XFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXFx1MDAyNmRzdCxcXG4gODg3OlxcdFxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpe1xcbiA4ODg6XFx0XFx0XFx0XFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCxcXG4gODg5OlxcdFxcdFxcdFxcdC50YXJnZXRfdmFsdWUgPSA4OTAsXFxuIDg5MDpcXHRcXHRcXHRcXHQuY3VycmVudF92YWx1ZSA9IDkwMSxcXG4gODkxOlxcdFxcdFxcdFxcdC5uaWQgPSAxMCxcXG4gODkyOlxcdFxcdFxcdFxcdC5tZW1jZ19pZCA9IDEsXFxuIDg5MzpcXHRcXHRcXHRcXHR9KTtcXG4gODk0OlxcdFxcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFxcdTAwMjZkc3QsXFxuIDg5NTpcXHRcXHRcXHRcXHRcXHUwMDI2KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKSB7XFxuIDg5NjpcXHRcXHRcXHRcXHQubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxcbiA4OTc6XFx0XFx0XFx0XFx0LnRhcmdldF92YWx1ZSA9IDIzNCxcXG4gODk4OlxcdFxcdFxcdFxcdC5jdXJyZW50X3ZhbHVlID0gMzQ1LFxcbiA4OTk6XFx0XFx0XFx0XFx0Lmxhc3RfcHNpX3RvdGFsID0gNTY3LFxcbiA5MDA6XFx0XFx0XFx0XFx0fSk7XFxuIDkwMTpcXHR9XFxuIDkwMjpcXHRcXG4gOTAzOlxcdHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuIDkwNDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0X2dvYWxzLCBpbnQgbnJfZHN0X2dvYWxzLFxcbiA5MDU6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyY19nb2FscywgaW50IG5yX3NyY19nb2FscylcXG4gOTA2OlxcdHtcXG4gOTA3OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSBkc3QsIHNyYztcXG4gOTA4OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsLCAqbmV4dDtcXG4gOTA5OlxcdFxcdGJvb2wgc2tpcCA9IHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ0OjEwLjYyNTU3MzU0MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTIyMzYxMTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYGNvcmUta3VuaXQuaGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gTGV0J3MgYXNzdW1lIHRoaXMgaXMgdGhlIGhlYWRlciBmaWxlIGZvciB0aGUgY29yZSBLVW5pdCB0ZXN0cyB3aXRoaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSBmcmFtZXdvcmsuIEknbSBwcm9iYWJseSBsb29raW5nIGF0IHRoaXMgYmVjYXVzZSBJJ20gdHJvdWJsZXNob290aW5nIGEgREFNT04tcmVsYXRlZCBpc3N1ZSwgcmV2aWV3aW5nIGNoYW5nZXMsIG9yIG1heWJlIGV2ZW4gY29udHJpYnV0aW5nIGEgbmV3IHRlc3QuIEknbSBleHBlY3RpbmcgdG8gc2VlIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gdGVzdCBzdHJ1Y3R1cmVzLCBtYWNyb3MgZm9yIHNldHRpbmcgdXAgYW5kIHRlYXJpbmcgZG93biB0aGUgdGVzdHMsIGFzc2VydGlvbnMsIGFuZCBwcm9iYWJseSBzb21lIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IGltcGxlbWVudCB0aGUgYWN0dWFsIHRlc3QgbG9naWMuIEl0IHdvdWxkIGJlIGhlbHBmdWwgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBLVW5pdCBpcyB1c2VkIGluIHRoaXMgREFNT04gY29udGV4dC4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIG5hbWluZyBjb252ZW50aW9ucyBlbXBsb3llZCwgYW5kIGFueSBzcGVjaWFsaXplZCBtYWNyb3MgdGhhdCBhcmUgc3BlY2lmaWMgdG8gREFNT04ncyB0ZXN0aW5nIHJlcXVpcmVtZW50cy4gV2hhdCBhcmUgdGhlIGtleSBjb25jZXB0cyBhbmQgcHJpbWl0aXZlcyB0aGF0IGFyZSBiZWluZyB0ZXN0ZWQ/IEknbSBhbnRpY2lwYXRpbmcgc29tZSBpbnRyaWNhdGUgaW50ZXJhY3Rpb25zIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYW5kIERBTU9OJ3Mgb3BlcmF0aW9uYWwgZmVhdHVyZXMuIEkgYWxzbyB3YW50IHRvIGlkZW50aWZ5IGhvdyB0aGUgdGVzdHMgYXJlIG9yZ2FuaXplZCwgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLCBhbmQgaWYgdGhleSdyZSB3ZWxsLXN0cnVjdHVyZWQgYW5kIGRvY3VtZW50ZWQuIE9rYXksIGxldCdzIGdldCBzdGFydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE3MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDQ6MTcuNTQ3OTM3Mjc3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTY0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcIixcbiAgXCJGaXJzdExpbmVcIjogOTEwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTEwOlxcdFxcdGludCBpO1xcbiA5MTE6XFx0XFx0aW50IG5yX2RzdCA9IDAsIG5yX3NyYyA9IDA7XFxuIDkxMjpcXHRcXG4gOTEzOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZkc3QuZ29hbHMpO1xcbiA5MTQ6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNyYy5nb2Fscyk7XFxuIDkxNTpcXHRcXG4gOTE2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9kc3RfZ29hbHM7IGkrKykge1xcbiA5MTc6XFx0XFx0XFx0LypcXG4gOTE4OlxcdFxcdFxcdCAqIFdoZW4gbnJfc3JjX2dvYWxzIGlzIHNtYWxsZXIgdGhhbiBkc3RfZ29hbHMsXFxuIDkxOTpcXHRcXHRcXHQgKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSB3aWxsIGtmcmVlKCkgdGhlIGRzdCBnb2Fscy5cXG4gOTIwOlxcdFxcdFxcdCAqIE1ha2UgaXQga2ZyZWUoKS1hYmxlLlxcbiA5MjE6XFx0XFx0XFx0ICovXFxuIDkyMjpcXHRcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoZHN0X2dvYWxzW2ldLm1ldHJpYyxcXG4gOTIzOlxcdFxcdFxcdFxcdFxcdGRzdF9nb2Fsc1tpXS50YXJnZXRfdmFsdWUpO1xcbiA5MjQ6XFx0XFx0XFx0aWYgKCFnb2FsKVxcbiA5MjU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDkyNjpcXHRcXHRcXHRkYW1vc19hZGRfcXVvdGFfZ29hbChcXHUwMDI2ZHN0LCBnb2FsKTtcXG4gOTI3OlxcdFxcdH1cXG4gOTI4OlxcdFxcdHNraXAgPSBmYWxzZTtcXG4gOTI5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9zcmNfZ29hbHM7IGkrKylcXG4gOTMwOlxcdFxcdFxcdGRhbW9zX2FkZF9xdW90YV9nb2FsKFxcdTAwMjZzcmMsIFxcdTAwMjZzcmNfZ29hbHNbaV0pO1xcbiA5MzE6XFx0XFxuIDkzMjpcXHRcXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoXFx1MDAyNmRzdCwgXFx1MDAyNnNyYyk7XFxuIDkzMzpcXHRcXG4gOTM0OlxcdFxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgXFx1MDAyNmRzdClcXG4gOTM1OlxcdFxcdFxcdG5yX2RzdCsrO1xcbiA5MzY6XFx0XFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBcXHUwMDI2c3JjKVxcbiA5Mzc6XFx0XFx0XFx0bnJfc3JjKys7XFxuIDkzODpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbnJfZHN0LCBucl9zcmMpO1xcbiA5Mzk6XFx0XFx0aWYgKG5yX2RzdCAhPSBucl9zcmMpXFxuIDk0MDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gOTQxOlxcdFxcbiA5NDI6XFx0XFx0aSA9IDA7XFxuIDk0MzpcXHRcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIChcXHUwMDI2ZHN0KSkge1xcbiA5NDQ6XFx0XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGdvYWwtXFx1MDAzZW1ldHJpYywgc3JjX2dvYWxzW2ldLm1ldHJpYyk7XFxuIDk0NTpcXHRcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlLFxcbiA5NDY6XFx0XFx0XFx0XFx0XFx0c3JjX2dvYWxzW2krK10udGFyZ2V0X3ZhbHVlKTtcXG4gOTQ3OlxcdFxcdH1cXG4gOTQ4OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBpLCBucl9zcmNfZ29hbHMpO1xcbiA5NDk6XFx0XFxuIDk1MDpcXHRvdXQ6XFxuIDk1MTpcXHRcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZ29hbCwgbmV4dCwgKFxcdTAwMjZkc3QpKVxcbiA5NTI6XFx0XFx0XFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGdvYWwpO1xcbiA5NTM6XFx0XFx0aWYgKHNraXApXFxuIDk1NDpcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJnb2FsIGFsbG9jIGZhaWxcXFwiKTtcXG4gOTU1OlxcdH1cXG4gOTU2OlxcdFxcbiA5NTc6XFx0c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiA5NTg6XFx0e1xcbiA5NTk6XFx0XFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHRlc3QsXFxuIDk2MDpcXHRcXHRcXHRcXHQoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWxbXSl7fSwgMCxcXG4gOTYxOlxcdFxcdFxcdFxcdChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbFtdKXtcXG4gOTYyOlxcdFxcdFxcdFxcdFxcdHtcXG4gOTYzOlxcdFxcdFxcdFxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9VU0VSX0lOUFVULFxcbiA5NjQ6XFx0XFx0XFx0XFx0XFx0LnRhcmdldF92YWx1ZSA9IDEyMyxcXG4gOTY1OlxcdFxcdFxcdFxcdFxcdH0sXFxuIDk2NjpcXHRcXHRcXHRcXHR9LCAxKTtcXG4gOTY3OlxcdFxcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2Zvcih0ZXN0LFxcbiA5Njg6XFx0XFx0XFx0XFx0KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsW10pe1xcbiA5Njk6XFx0XFx0XFx0XFx0XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0NDoxNy41NDgwOTE2NTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODUxMDY1NzY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgQ29yZS1LVW5pdCBUZXN0IEhlYWRlcioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBlbmQgb2YgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIEknbSBjdXJpb3VzIHdoYXQgZmluYWwgdGVzdCBkZWNsYXJhdGlvbnMgb3IgaGVscGVyIG1hY3JvcyB0aGV5J3ZlIHBsYWNlZCBoZXJlLiBJdCdzIGxpa2VseSB0aGUgY29uY2x1ZGluZyBlbGVtZW50cyBkZWZpbmUgdGhlIHNwZWNpZmljIHRlc3RzIGZvciB0aGUgY29yZSBEQU1PTiBmdW5jdGlvbmFsaXR5LCBvciBwb3RlbnRpYWxseSBpbmNsdWRlIHV0aWxpdHkgZnVuY3Rpb25zIG1lYW50IHRvIGJlIGF2YWlsYWJsZSBpbiBvdGhlciB0ZXN0IGZpbGVzLiBJ4oCZbSB0aGlua2luZyB0aGVyZSBtaWdodCBiZSBhc3NlcnRpb25zIG9yIHNldHVwIHJvdXRpbmVzIGRlc2lnbmVkIHRvIGZhY2lsaXRhdGUgY29tcHJlaGVuc2l2ZSB0ZXN0aW5nIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXR5IHRpZWQgdG8gdGhlIERBTU9OIHN1YnN5c3RlbSwgcG90ZW50aWFsbHkgaW52b2x2aW5nIHNwZWNpZmljIHNjZW5hcmlvcyBhbmQgY29ybmVyIGNhc2VzLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSBhbnkgdGVzdCBjYXNlcywgZXNwZWNpYWxseSB0aG9zZSB0aGF0IGxvb2sgbGlrZSB0aGV5J3JlIGRlc2lnbmVkIHRvIGhhbmRsZSBjb25jdXJyZW50IG9wZXJhdGlvbnMgb3IgY29tcGxleCBtZW1vcnkgYWxsb2NhdGlvbnMuIEFsc28sIEnigJltIGxvb2tpbmcgdG8gc2VlIGhvdyB0aGV54oCZcmUgaGFuZGxpbmcgZXhwZWN0ZWQgZmFpbHVyZXMgYW5kIGVycm9yIHBhdGhzOyBhIGdvb2QgdGVzdCBzdWl0ZSBzaG91bGQgY292ZXIgdGhvc2UgdGhvcm91Z2hseS4gTXkgbWFpbiBmb2N1cyB3aWxsIGJlIG9uIHRoZSB0ZXN0IHN0cnVjdHVyZSBhbmQgdGhlIGNvdmVyYWdlLCBzaW5jZSBLVW5pdCBpcyBhIGdyZWF0IGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NTksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ0OjI2LjA1ODc1MjY4OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMDA6XFx0XFx0XFx0LmZhaWxfY2hhcmdlX2Rlbm9tID0gMyxcXG4xMDAxOlxcdFxcdFxcdC53ZWlnaHRfc3ogPSA0LFxcbjEwMDI6XFx0XFx0XFx0LndlaWdodF9ucl9hY2Nlc3NlcyA9IDUsXFxuMTAwMzpcXHRcXHRcXHQud2VpZ2h0X2FnZSA9IDYsXFxuMTAwNDpcXHRcXHR9O1xcbjEwMDU6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhIHNyYyA9IHtcXG4xMDA2OlxcdFxcdFxcdC5yZXNldF9pbnRlcnZhbCA9IDcsXFxuMTAwNzpcXHRcXHRcXHQubXMgPSA4LFxcbjEwMDg6XFx0XFx0XFx0LnN6ID0gOSxcXG4xMDA5OlxcdFxcdFxcdC5nb2FsX3R1bmVyID0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTCxcXG4xMDEwOlxcdFxcdFxcdC5mYWlsX2NoYXJnZV9udW0gPSAxLFxcbjEwMTE6XFx0XFx0XFx0LmZhaWxfY2hhcmdlX2Rlbm9tID0gMTAyNCxcXG4xMDEyOlxcdFxcdFxcdC53ZWlnaHRfc3ogPSAxMCxcXG4xMDEzOlxcdFxcdFxcdC53ZWlnaHRfbnJfYWNjZXNzZXMgPSAxMSxcXG4xMDE0OlxcdFxcdFxcdC53ZWlnaHRfYWdlID0gMTIsXFxuMTAxNTpcXHRcXHR9O1xcbjEwMTY6XFx0XFxuMTAxNzpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZHN0LmdvYWxzKTtcXG4xMDE4OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzcmMuZ29hbHMpO1xcbjEwMTk6XFx0XFxuMTAyMDpcXHRcXHRkYW1vc19jb21taXRfcXVvdGEoXFx1MDAyNmRzdCwgXFx1MDAyNnNyYyk7XFxuMTAyMTpcXHRcXG4xMDIyOlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QucmVzZXRfaW50ZXJ2YWwsIHNyYy5yZXNldF9pbnRlcnZhbCk7XFxuMTAyMzpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0Lm1zLCBzcmMubXMpO1xcbjEwMjQ6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC5zeiwgc3JjLnN6KTtcXG4xMDI1OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QuZ29hbF90dW5lciwgc3JjLmdvYWxfdHVuZXIpO1xcbjEwMjY6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC5mYWlsX2NoYXJnZV9udW0sIHNyYy5mYWlsX2NoYXJnZV9udW0pO1xcbjEwMjc6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC5mYWlsX2NoYXJnZV9kZW5vbSwgc3JjLmZhaWxfY2hhcmdlX2Rlbm9tKTtcXG4xMDI4OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3Qud2VpZ2h0X3N6LCBzcmMud2VpZ2h0X3N6KTtcXG4xMDI5OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3Qud2VpZ2h0X25yX2FjY2Vzc2VzLCBzcmMud2VpZ2h0X25yX2FjY2Vzc2VzKTtcXG4xMDMwOlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3Qud2VpZ2h0X2FnZSwgc3JjLndlaWdodF9hZ2UpO1xcbjEwMzE6XFx0fVxcbjEwMzI6XFx0XFxuMTAzMzpcXHRzdGF0aWMgaW50IGRhbW9zX3Rlc3RfaGVscF9kZXN0c19zZXR1cChzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyAqZGVzdHMsXFxuMTAzNDpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgKm5vZGVfaWRfYXJyLCB1bnNpZ25lZCBpbnQgKndlaWdodF9hcnIsXFxuMTAzNTpcXHRcXHRcXHRzaXplX3QgbnJfZGVzdHMpXFxuMTAzNjpcXHR7XFxuMTAzNzpcXHRcXHRzaXplX3QgaTtcXG4xMDM4OlxcdFxcbjEwMzk6XFx0XFx0ZGVzdHMtXFx1MDAzZW5vZGVfaWRfYXJyID0ga21hbGxvY19vYmpzKCpkZXN0cy1cXHUwMDNlbm9kZV9pZF9hcnIsIG5yX2Rlc3RzKTtcXG4xMDQwOlxcdFxcdGlmICghZGVzdHMtXFx1MDAzZW5vZGVfaWRfYXJyKVxcbjEwNDE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTA0MjpcXHRcXHRkZXN0cy1cXHUwMDNld2VpZ2h0X2FyciA9IGttYWxsb2Nfb2JqcygqZGVzdHMtXFx1MDAzZXdlaWdodF9hcnIsIG5yX2Rlc3RzKTtcXG4xMDQzOlxcdFxcdGlmICghZGVzdHMtXFx1MDAzZXdlaWdodF9hcnIpIHtcXG4xMDQ0OlxcdFxcdFxcdGtmcmVlKGRlc3RzLVxcdTAwM2Vub2RlX2lkX2Fycik7XFxuMTA0NTpcXHRcXHRcXHRkZXN0cy1cXHUwMDNlbm9kZV9pZF9hcnIgPSBOVUxMO1xcbjEwNDY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTA0NzpcXHRcXHR9XFxuMTA0ODpcXHRcXG4xMDQ5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9kZXN0czsgaSsrKSB7XFxuMTA1MDpcXHRcXHRcXHRkZXN0cy1cXHUwMDNlbm9kZV9pZF9hcnJbaV0gPSBub2RlX2lkX2FycltpXTtcXG4xMDUxOlxcdFxcdFxcdGRlc3RzLVxcdTAwM2V3ZWlnaHRfYXJyW2ldID0gd2VpZ2h0X2FycltpXTtcXG4xMDUyOlxcdFxcdH1cXG4xMDUzOlxcdFxcdGRlc3RzLVxcdTAwM2Vucl9kZXN0cyA9IG5yX2Rlc3RzO1xcbjEwNTQ6XFx0XFx0cmV0dXJuIDA7XFxuMTA1NTpcXHR9XFxuMTA1NjpcXHRcXG4xMDU3OlxcdHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfaGVscF9kZXN0c19mcmVlKHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzICpkZXN0cylcXG4xMDU4OlxcdHtcXG4xMDU5OlxcdFxcdGtmcmVlKGRlc3RzLVxcdTAwM2Vub2RlX2lkX2Fycik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ0OjI2LjA1ODg3MTEwOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzkzNzMyMDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBlbmQgb2YgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGV5IHRlc3RpbmcgaW4gdGhpcyBwYXJ0aWN1bGFyIGhlYWRlcj8gR2l2ZW4gdGhlIGZpbGUgcGF0aCwgdGhpcyBpcyBjbGVhcmx5IEtVbml0IHJlbGF0ZWQgYW5kIGxpa2VseSBwYXJ0IG9mIERBTU9OJ3MgdGVzdGluZyBpbmZyYXN0cnVjdHVyZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciB0ZXN0IG1hY3JvcywgaGVscGVyIGZ1bmN0aW9ucywgb3IgcG90ZW50aWFsbHkgZXZlbiBzb21lIHRlc3Qgc3R1YnMgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBEQU1PTiBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBzY29wZSBhbmQgcHVycG9zZSBvZiB0aGUgZnVuY3Rpb25zIG9yIHN0cnVjdHVyZXMgZGVmaW5lZCBhdCB0aGUgdGFpbCBvZiB0aGlzIGZpbGUuIEFyZSB0aGV5IGRlZmluaW5nIHNwZWNpZmljIHRlc3QgY2FzZXMsIHByZXBhcmluZyBkYXRhIGZvciB0aGUgdGVzdHMsIG9yIHBlcmhhcHMgZXN0YWJsaXNoaW5nIGluZnJhc3RydWN0dXJlIGZvciBydW5uaW5nIHRoZSBEQU1PTiB0ZXN0cyB3aXRoaW4gdGhlIEtVbml0IGZyYW1ld29yaz8gS25vd2luZyBEQU1PTiBhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUga2VybmVsLCBJJ20gYW50aWNpcGF0aW5nIGludGVyYWN0aW9ucyB3aXRoIG1lbW9yeSByZWdpb25zLCBtb25pdG9yaW5nIGZ1bmN0aW9ucywgYW5kIGRhdGEgYWNjZXNzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWFjcm9zIGFuZCBpbmxpbmUgZnVuY3Rpb25zIHRvIHNlZSBob3cgdGhlIERBTU9OIGNvcmUgY29tcG9uZW50cyBhcmUgYWN0dWFsbHkgZXhlcmNpc2VkIHVuZGVyIHRlc3QsIGFuZCBob3cgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGlzIGFzc2VydGVkIHdpdGhpbiB0aGlzIGVudmlyb25tZW50LiBVbHRpbWF0ZWx5LCBteSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IERBTU9OIGlzIHZhbGlkYXRlZCB1c2luZyB0aGlzIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODIyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0NDoyOC44NTI2MDU2ODVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTAwOlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInNraXBcXFwiKTtcXG4xMTAxOlxcdH1cXG4xMTAyOlxcdFxcbjExMDM6XFx0c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfZGVzdHMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbjExMDQ6XFx0e1xcbjExMDU6XFx0XFx0ZGFtb3NfdGVzdF9jb21taXRfZGVzdHNfZm9yKHRlc3QsXFxuMTEwNjpcXHRcXHRcXHRcXHQodW5zaWduZWQgaW50W10pezEsIDIsIDN9LCAodW5zaWduZWQgaW50W10pezIsIDMsIDR9LFxcbjExMDc6XFx0XFx0XFx0XFx0MyxcXG4xMTA4OlxcdFxcdFxcdFxcdCh1bnNpZ25lZCBpbnRbXSl7NCwgNSwgNn0sICh1bnNpZ25lZCBpbnRbXSl7NSwgNiwgN30sXFxuMTEwOTpcXHRcXHRcXHRcXHQzKTtcXG4xMTEwOlxcdFxcdGRhbW9zX3Rlc3RfY29tbWl0X2Rlc3RzX2Zvcih0ZXN0LFxcbjExMTE6XFx0XFx0XFx0XFx0KHVuc2lnbmVkIGludFtdKXsxLCAyfSwgKHVuc2lnbmVkIGludFtdKXsyLCAzfSxcXG4xMTEyOlxcdFxcdFxcdFxcdDIsXFxuMTExMzpcXHRcXHRcXHRcXHQodW5zaWduZWQgaW50W10pezQsIDUsIDZ9LCAodW5zaWduZWQgaW50W10pezUsIDYsIDd9LFxcbjExMTQ6XFx0XFx0XFx0XFx0Myk7XFxuMTExNTpcXHRcXHRkYW1vc190ZXN0X2NvbW1pdF9kZXN0c19mb3IodGVzdCxcXG4xMTE2OlxcdFxcdFxcdFxcdE5VTEwsIE5VTEwsIDAsXFxuMTExNzpcXHRcXHRcXHRcXHQodW5zaWduZWQgaW50W10pezQsIDUsIDZ9LCAodW5zaWduZWQgaW50W10pezUsIDYsIDd9LFxcbjExMTg6XFx0XFx0XFx0XFx0Myk7XFxuMTExOTpcXHRcXHRkYW1vc190ZXN0X2NvbW1pdF9kZXN0c19mb3IodGVzdCxcXG4xMTIwOlxcdFxcdFxcdFxcdCh1bnNpZ25lZCBpbnRbXSl7MSwgMiwgM30sICh1bnNpZ25lZCBpbnRbXSl7MiwgMywgNH0sXFxuMTEyMTpcXHRcXHRcXHRcXHQzLFxcbjExMjI6XFx0XFx0XFx0XFx0KHVuc2lnbmVkIGludFtdKXs0LCA1fSwgKHVuc2lnbmVkIGludFtdKXs1LCA2fSwgMik7XFxuMTEyMzpcXHRcXHRkYW1vc190ZXN0X2NvbW1pdF9kZXN0c19mb3IodGVzdCxcXG4xMTI0OlxcdFxcdFxcdFxcdCh1bnNpZ25lZCBpbnRbXSl7MSwgMiwgM30sICh1bnNpZ25lZCBpbnRbXSl7MiwgMywgNH0sXFxuMTEyNTpcXHRcXHRcXHRcXHQzLFxcbjExMjY6XFx0XFx0XFx0XFx0TlVMTCwgTlVMTCwgMCk7XFxuMTEyNzpcXHR9XFxuMTEyODpcXHRcXG4xMTI5OlxcdHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbjExMzA6XFx0XFx0XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpzcmMpXFxuMTEzMTpcXHR7XFxuMTEzMjpcXHRcXHRkYW1vc19jb21taXRfZmlsdGVyKGRzdCwgc3JjKTtcXG4xMTMzOlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZXR5cGUsIHNyYy1cXHUwMDNldHlwZSk7XFxuMTEzNDpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VtYXRjaGluZywgc3JjLVxcdTAwM2VtYXRjaGluZyk7XFxuMTEzNTpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VhbGxvdywgc3JjLVxcdTAwM2VhbGxvdyk7XFxuMTEzNjpcXHRcXHRzd2l0Y2ggKHNyYy1cXHUwMDNldHlwZSkge1xcbjExMzc6XFx0XFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzpcXG4xMTM4OlxcdFxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZW1lbWNnX2lkLCBzcmMtXFx1MDAzZW1lbWNnX2lkKTtcXG4xMTM5OlxcdFxcdFxcdGJyZWFrO1xcbjExNDA6XFx0XFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9BRERSOlxcbjExNDE6XFx0XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNlYWRkcl9yYW5nZS5zdGFydCxcXG4xMTQyOlxcdFxcdFxcdFxcdFxcdHNyYy1cXHUwMDNlYWRkcl9yYW5nZS5zdGFydCk7XFxuMTE0MzpcXHRcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VhZGRyX3JhbmdlLmVuZCxcXG4xMTQ0OlxcdFxcdFxcdFxcdFxcdHNyYy1cXHUwMDNlYWRkcl9yYW5nZS5lbmQpO1xcbjExNDU6XFx0XFx0XFx0YnJlYWs7XFxuMTE0NjpcXHRcXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcXG4xMTQ3OlxcdFxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZXRhcmdldF9pZHgsIHNyYy1cXHUwMDNldGFyZ2V0X2lkeCk7XFxuMTE0ODpcXHRcXHRcXHRicmVhaztcXG4xMTQ5OlxcdFxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDQ6MjguODUyNzI5MjM1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5NzUzNzYzNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBlbmQgb2YgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIEknbSBndWVzc2luZyB0aGlzIGZpbGUgbGlrZWx5IGNvbnRhaW5zIHRoZSBjb3JlIEtVbml0IHRlc3RzIGZvciBEQU1PTiwgdGhlIERhdGEgQWNjZXNzIE1vbml0b3IuIEtub3dpbmcgdGhlIGVuZCBpcyBrZXkuIEl0J3MgdXN1YWxseSB3aGVyZSB5b3UnbGwgZmluZCB0aGUgbGFzdCB0ZXN0IGNhc2VzLCBwb3RlbnRpYWxseSByZWNlbnQgYWRkaXRpb25zLCBvciBtYXliZSBhIHN1bW1hcnkvZW5kLW9mLWZpbGUgbWFya2VyIHRoYXQgZ2l2ZXMgbWUgY29udGV4dC4gV2hhdCBhcmUgdGhleSB0ZXN0aW5nPyBXaGF0IGZ1bmN0aW9uYWxpdHkgaW4gREFNT04ncyBjb3JlIGlzIGJlaW5nIHZhbGlkYXRlZCBoZXJlPyBBcmUgdGhlcmUgYW55IG5ldyB0ZXN0IGZpeHR1cmVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgcmVncmVzc2lvbiB0ZXN0cz9cblxuSSdtIGV4cGVjdGluZyB0byBzZWUgZGVmaW5pdGlvbnMgZm9yIGBrdW5pdF9jYXNlYCBzdHJ1Y3R1cmVzLCB0ZXN0IGZ1bmN0aW9ucyB0aGF0IG9wZXJhdGUgb24gdGhvc2Ugc3RydWN0dXJlcywgYW5kIGhvcGVmdWxseSwgc29tZSBjb21tZW50YXJ5IG9yIGRvY3VtZW50YXRpb24gdGhhdCBjbGFyaWZpZXMgdGhlIGludGVuZGVkIGJlaGF2aW9yLiBJ4oCZbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhvcm91Z2hseSBEQU1PTidzIG1lbW9yeSBtb25pdG9yaW5nIGFuZCBhZGFwdGF0aW9uIG1lY2hhbmlzbXMgYXJlIGJlaW5nIHRlc3RlZCBhdCB0aGUgS1VuaXQgbGV2ZWwuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBiYXNpYyBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gdGVzdHMsIHRvIG1vcmUgY29tcGxleCBzY2VuYXJpb3MgaW52b2x2aW5nIGFjY2VzcyBwYXR0ZXJuIGFuYWx5c2lzLCBhZGFwdGF0aW9uIHRyaWdnZXJpbmcsIGFuZCBwZXJmb3JtYW5jZSBpbXBhY3QuIFRoZSBlbmQgb2YgdGhlIGZpbGUgbWlnaHQgaGF2ZSBzb21lIGNsdWVzIHRvIHdoYXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHRlc3RzIGFyZS4gTGV0J3Mgc2VlIGhvdyB3ZWxsIGl0IHRlc3RzIERBTU9OJ3MgaW1wb3J0YW50IGZ1bmN0aW9uYWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwNzcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ0OjMyLjgyODEwOTIyNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA0MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMDA6XFx0XFx0XFx0XFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9BRERSLFxcbjEyMDE6XFx0XFx0XFx0XFx0Lm1hdGNoaW5nID0gZmFsc2UsXFxuMTIwMjpcXHRcXHRcXHRcXHQuYWxsb3cgPSBmYWxzZSxcXG4xMjAzOlxcdFxcdFxcdFxcdC5hZGRyX3JhbmdlID0gey5zdGFydCA9IDQ1NiwgLmVuZCA9IDU2N30sXFxuMTIwNDpcXHRcXHRcXHRcXHR9KTtcXG4xMjA1OlxcdFxcdGRhbW9zX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3IodGVzdCwgXFx1MDAyNmRzdCxcXG4xMjA2OlxcdFxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9zX2ZpbHRlcil7XFxuMTIwNzpcXHRcXHRcXHRcXHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCxcXG4xMjA4OlxcdFxcdFxcdFxcdC5tYXRjaGluZyA9IHRydWUsXFxuMTIwOTpcXHRcXHRcXHRcXHQuYWxsb3cgPSB0cnVlLFxcbjEyMTA6XFx0XFx0XFx0XFx0LnRhcmdldF9pZHggPSA2LFxcbjEyMTE6XFx0XFx0XFx0XFx0fSk7XFxuMTIxMjpcXHR9XFxuMTIxMzpcXHRcXG4xMjE0OlxcdHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfaGVscF9pbml0YWlsaXplX3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnNjaGVtZSlcXG4xMjE1OlxcdHtcXG4xMjE2OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhLmdvYWxzKTtcXG4xMjE3OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzY2hlbWUtXFx1MDAzZWNvcmVfZmlsdGVycyk7XFxuMTIxODpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c2NoZW1lLVxcdTAwM2VvcHNfZmlsdGVycyk7XFxuMTIxOTpcXHR9XFxuMTIyMDpcXHRcXG4xMjIxOlxcdHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsIHN0cnVjdCBkYW1vcyAqZHN0LFxcbjEyMjI6XFx0XFx0XFx0c3RydWN0IGRhbW9zICpzcmMpXFxuMTIyMzpcXHR7XFxuMTIyNDpcXHRcXHRpbnQgZXJyO1xcbjEyMjU6XFx0XFxuMTIyNjpcXHRcXHRkYW1vc190ZXN0X2hlbHBfaW5pdGFpbGl6ZV9zY2hlbWUoZHN0KTtcXG4xMjI3OlxcdFxcdGRhbW9zX3Rlc3RfaGVscF9pbml0YWlsaXplX3NjaGVtZShzcmMpO1xcbjEyMjg6XFx0XFxuMTIyOTpcXHRcXHRlcnIgPSBkYW1vc19jb21taXQoZHN0LCBzcmMpO1xcbjEyMzA6XFx0XFx0aWYgKGVycilcXG4xMjMxOlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcImRhbW9zX2NvbW1pdCBmYWlsXFxcIik7XFxuMTIzMjpcXHRcXG4xMjMzOlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZXBhdHRlcm4ubWluX3N6X3JlZ2lvbixcXG4xMjM0OlxcdFxcdFxcdFxcdHNyYy1cXHUwMDNlcGF0dGVybi5taW5fc3pfcmVnaW9uKTtcXG4xMjM1OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZXBhdHRlcm4ubWF4X3N6X3JlZ2lvbixcXG4xMjM2OlxcdFxcdFxcdFxcdHNyYy1cXHUwMDNlcGF0dGVybi5tYXhfc3pfcmVnaW9uKTtcXG4xMjM3OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZXBhdHRlcm4ubWluX25yX2FjY2Vzc2VzLFxcbjEyMzg6XFx0XFx0XFx0XFx0c3JjLVxcdTAwM2VwYXR0ZXJuLm1pbl9ucl9hY2Nlc3Nlcyk7XFxuMTIzOTpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VwYXR0ZXJuLm1heF9ucl9hY2Nlc3NlcyxcXG4xMjQwOlxcdFxcdFxcdFxcdHNyYy1cXHUwMDNlcGF0dGVybi5tYXhfbnJfYWNjZXNzZXMpO1xcbjEyNDE6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNlcGF0dGVybi5taW5fYWdlX3JlZ2lvbixcXG4xMjQyOlxcdFxcdFxcdFxcdHNyYy1cXHUwMDNlcGF0dGVybi5taW5fYWdlX3JlZ2lvbik7XFxuMTI0MzpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VwYXR0ZXJuLm1heF9hZ2VfcmVnaW9uLFxcbjEyNDQ6XFx0XFx0XFx0XFx0c3JjLVxcdTAwM2VwYXR0ZXJuLm1heF9hZ2VfcmVnaW9uKTtcXG4xMjQ1OlxcdFxcbjEyNDY6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNlYWN0aW9uLCBzcmMtXFx1MDAzZWFjdGlvbik7XFxuMTI0NzpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VhcHBseV9pbnRlcnZhbF91cywgc3JjLVxcdTAwM2VhcHBseV9pbnRlcnZhbF91cyk7XFxuMTI0ODpcXHRcXG4xMjQ5OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZXdtYXJrcy5tZXRyaWMsIHNyYy1cXHUwMDNld21hcmtzLm1ldHJpYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ0OjMyLjgyODI1MTE5NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4OTIwODg2Mjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBDb3JlLUtVbml0IFRlc3QgSGVhZGVyKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGVuZCBvZiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gSSdtIGN1cmlvdXMgd2hhdCBmaW5hbCB0ZXN0IGRlY2xhcmF0aW9ucyBvciBoZWxwZXIgbWFjcm9zIHRoZXkndmUgcGxhY2VkIGhlcmUuIEl0J3MgbGlrZWx5IHRoZSBjb25jbHVkaW5nIGVsZW1lbnRzIGRlZmluZSB0aGUgc3BlY2lmaWMgdGVzdHMgZm9yIHRoZSBjb3JlIERBTU9OIGZ1bmN0aW9uYWxpdHksIG9yIHBvdGVudGlhbGx5IGluY2x1ZGUgdXRpbGl0eSBmdW5jdGlvbnMgbWVhbnQgdG8gYmUgYXZhaWxhYmxlIGluIG90aGVyIHRlc3QgZmlsZXMuIEnigJltIHRoaW5raW5nIHRoZXJlIG1pZ2h0IGJlIGFzc2VydGlvbnMgb3Igc2V0dXAgcm91dGluZXMgZGVzaWduZWQgdG8gZmFjaWxpdGF0ZSBjb21wcmVoZW5zaXZlIHRlc3Rpbmcgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWxpdHkgdGllZCB0byB0aGUgREFNT04gc3Vic3lzdGVtLCBwb3RlbnRpYWxseSBpbnZvbHZpbmcgc3BlY2lmaWMgc2NlbmFyaW9zIGFuZCBjb3JuZXIgY2FzZXMuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGFueSB0ZXN0IGNhc2VzLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgbG9vayBsaWtlIHRoZXkncmUgZGVzaWduZWQgdG8gaGFuZGxlIGNvbmN1cnJlbnQgb3BlcmF0aW9ucyBvciBjb21wbGV4IG1lbW9yeSBhbGxvY2F0aW9ucy4gQWxzbywgSeKAmW0gbG9va2luZyB0byBzZWUgaG93IHRoZXnigJlyZSBoYW5kbGluZyBleHBlY3RlZCBmYWlsdXJlcyBhbmQgZXJyb3IgcGF0aHM7IGEgZ29vZCB0ZXN0IHN1aXRlIHNob3VsZCBjb3ZlciB0aG9zZSB0aG9yb3VnaGx5LiBNeSBtYWluIGZvY3VzIHdpbGwgYmUgb24gdGhlIHRlc3Qgc3RydWN0dXJlIGFuZCB0aGUgY292ZXJhZ2UsIHNpbmNlIEtVbml0IGlzIGEgZ3JlYXQgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI4NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDQ6NDEuNzQ5MTQwNzY5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mjc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTI5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI5MDpcXHRcXHRkYW1vc190ZXN0X2NvbW1pdF9mb3IodGVzdCxcXG4xMjkxOlxcdFxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9zKXtcXG4xMjkyOlxcdFxcdFxcdFxcdFxcdC5wYXR0ZXJuID0gKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybil7XFxuMTI5MzpcXHRcXHRcXHRcXHRcXHRcXHQxLCAyLCAzLCA0LCA1LCA2fSxcXG4xMjk0OlxcdFxcdFxcdFxcdFxcdC5hY3Rpb24gPSBEQU1PU19QQUdFT1VULFxcbjEyOTU6XFx0XFx0XFx0XFx0XFx0LmFwcGx5X2ludGVydmFsX3VzID0gMTAwMDAwMCxcXG4xMjk2OlxcdFxcdFxcdFxcdFxcdC53bWFya3MgPSAoc3RydWN0IGRhbW9zX3dhdGVybWFya3Mpe1xcbjEyOTc6XFx0XFx0XFx0XFx0XFx0XFx0REFNT1NfV01BUktfRlJFRV9NRU1fUkFURSxcXG4xMjk4OlxcdFxcdFxcdFxcdFxcdFxcdDkwMCwgMTAwLCA1MH0sXFxuMTI5OTpcXHRcXHRcXHRcXHR9LFxcbjEzMDA6XFx0XFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb3Mpe1xcbjEzMDE6XFx0XFx0XFx0XFx0XFx0LnBhdHRlcm4gPSAoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuKXtcXG4xMzAyOlxcdFxcdFxcdFxcdFxcdFxcdDIsIDMsIDQsIDUsIDYsIDd9LFxcbjEzMDM6XFx0XFx0XFx0XFx0XFx0LmFjdGlvbiA9IERBTU9TX01JR1JBVEVfSE9ULFxcbjEzMDQ6XFx0XFx0XFx0XFx0XFx0LmFwcGx5X2ludGVydmFsX3VzID0gMjAwMDAwMCxcXG4xMzA1OlxcdFxcdFxcdFxcdFxcdC50YXJnZXRfbmlkID0gNSxcXG4xMzA2OlxcdFxcdFxcdFxcdH0pO1xcbjEzMDc6XFx0fVxcbjEzMDg6XFx0XFxuMTMwOTpcXHRzdGF0aWMgc3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fdGVzdF9oZWxwX3NldHVwX3RhcmdldChcXG4xMzEwOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcmVnaW9uX3N0YXJ0X2VuZFtdWzJdLCBpbnQgbnJfcmVnaW9ucylcXG4xMzExOlxcdHtcXG4xMzEyOlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuMTMxMzpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbjEzMTQ6XFx0XFx0aW50IGk7XFxuMTMxNTpcXHRcXG4xMzE2OlxcdFxcdHQgPSBkYW1vbl9uZXdfdGFyZ2V0KCk7XFxuMTMxNzpcXHRcXHRpZiAoIXQpXFxuMTMxODpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMzE5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9yZWdpb25zOyBpKyspIHtcXG4xMzIwOlxcdFxcdFxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKHJlZ2lvbl9zdGFydF9lbmRbaV1bMF0sXFxuMTMyMTpcXHRcXHRcXHRcXHRcXHRyZWdpb25fc3RhcnRfZW5kW2ldWzFdKTtcXG4xMzIyOlxcdFxcdFxcdGlmICghcikge1xcbjEzMjM6XFx0XFx0XFx0XFx0ZGFtb25fZnJlZV90YXJnZXQodCk7XFxuMTMyNDpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMzI1OlxcdFxcdFxcdH1cXG4xMzI2OlxcdFxcdFxcdGRhbW9uX2FkZF9yZWdpb24ociwgdCk7XFxuMTMyNzpcXHRcXHR9XFxuMTMyODpcXHRcXHRyZXR1cm4gdDtcXG4xMzI5OlxcdH1cXG4xMzMwOlxcdFxcbjEzMzE6XFx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfdGFyZ2V0X3JlZ2lvbnNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4xMzMyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0X2VuZFtdWzJdLCBpbnQgbnJfZHN0X3JlZ2lvbnMsXFxuMTMzMzpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHNyY19zdGFydF9lbmRbXVsyXSwgaW50IG5yX3NyY19yZWdpb25zLFxcbjEzMzQ6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBleHBlY3Rfc3RhcnRfZW5kW11bMl0sIGludCBucl9leHBlY3RfcmVnaW9ucylcXG4xMzM1OlxcdHtcXG4xMzM2OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKmRzdF90YXJnZXQsICpzcmNfdGFyZ2V0O1xcbjEzMzc6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG4xMzM4OlxcdFxcdGludCBpO1xcbjEzMzk6XFx0XFxuMTM0MDpcXHRcXHRkc3RfdGFyZ2V0ID0gZGFtb25fdGVzdF9oZWxwX3NldHVwX3RhcmdldChkc3Rfc3RhcnRfZW5kLCBucl9kc3RfcmVnaW9ucyk7XFxuMTM0MTpcXHRcXHRpZiAoIWRzdF90YXJnZXQpXFxuMTM0MjpcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJkc3QgdGFyZ2V0IHNldHVwIGZhaWxcXFwiKTtcXG4xMzQzOlxcdFxcdHNyY190YXJnZXQgPSBkYW1vbl90ZXN0X2hlbHBfc2V0dXBfdGFyZ2V0KHNyY19zdGFydF9lbmQsIG5yX3NyY19yZWdpb25zKTtcXG4xMzQ0OlxcdFxcdGlmICghc3JjX3RhcmdldCkge1xcbjEzNDU6XFx0XFx0XFx0ZGFtb25fZnJlZV90YXJnZXQoZHN0X3RhcmdldCk7XFxuMTM0NjpcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJzcmMgdGFyZ2V0IHNldHVwIGZhaWxcXFwiKTtcXG4xMzQ3OlxcdFxcdH1cXG4xMzQ4OlxcdFxcdGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyhkc3RfdGFyZ2V0LCBzcmNfdGFyZ2V0LCAxKTtcXG4xMzQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0NDo0MS43NDkzMDUzMDlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzEzMzUzMTIyMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIENvcmUtS3VuaXQuaCdzIERlcHRocyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgdG8gdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mIHRoaXMgYG1tL2RhbW9uYCBzdHVmZi4gVGltZSB0byBzdGFydCBhdCB0aGUgYWJzb2x1dGUgYm90dG9tIG9mIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBJJ20gZ3Vlc3NpbmcgdGhhdCdzIHdoZXJlIHRoZSBtb3N0IGZ1bmRhbWVudGFsIGRlZmluaXRpb25zIG9yIHRoZSBncm91bmR3b3JrIGZvciB0aGUgdGVzdCBzdWl0ZSBpcyBsYWlkIG91dC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgY3J1Y2lhbCBtYWNyb3MsIHN0cnVjdHVyZXMsIG9yIGFueSBmb3VuZGF0aW9uYWwgZWxlbWVudHMgdGhhdCBhcmUgdXNlZCB0aHJvdWdob3V0IHRoZSB0ZXN0cy4gVGhpcyBpcyBhIGNvbW1vbiBwcmFjdGljZSB3aGVuIEkgYXBwcm9hY2ggYW55IG5ldyBjb2RlIGJhc2UuIEkgYWx3YXlzIHN0YXJ0IGZyb20gdGhlIGxvdyBsZXZlbCBhbmQgYnVpbGQgdXAgYSBtZW50YWwgbW9kZWwgZnJvbSB0aGUgZGV0YWlscy4gSSB3aWxsIGFsc28gYmUgbG9va2luZyBmb3IgY2x1ZXMgdGhhdCBjYW4gZXhwbGFpbiB3aHkgdGhlIHRlc3RzIHBhc3Mgb3IgZmFpbC4gT25jZSBJIGdldCB0aGUgZm91bmRhdGlvbmFsIGVsZW1lbnRzLCBJIHdpbGwgYmUgYWJsZSB0byB3b3JrIHVwIHRoZSBzdGFjayBhbmQgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiBlYWNoIG9mIHRoZSB0ZXN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NTEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ1OjEzLjA4NDYyMTE4MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NDAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NDA6XFx0XFx0XFx0dW5zaWduZWQgaW50IGRzdF93ZWlnaHRzW10sIGludCBucl9kc3RfcHJvYmVzLFxcbjE0NDE6XFx0XFx0XFx0dW5zaWduZWQgaW50IHNyY193ZWlnaHRzW10sIGludCBucl9zcmNfcHJvYmVzKVxcbjE0NDI6XFx0e1xcbjE0NDM6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqZHN0LCAqc3JjO1xcbjE0NDQ6XFx0XFx0aW50IGVycjtcXG4xNDQ1OlxcdFxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0X3Byb2JlLCAqc3JjX3Byb2JlO1xcbjE0NDY6XFx0XFxuMTQ0NzpcXHRcXHRkc3QgPSBkYW1vbl90ZXN0X2hlbHBfc2V0dXBfcHJvYmVzKGRzdF93ZWlnaHRzLCBucl9kc3RfcHJvYmVzKTtcXG4xNDQ4OlxcdFxcdGlmICghZHN0KVxcbjE0NDk6XFx0XFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwiZHN0IGFsbG9jIGZhaWxcXFwiKTtcXG4xNDUwOlxcdFxcdHNyYyA9IGRhbW9uX3Rlc3RfaGVscF9zZXR1cF9wcm9iZXMoc3JjX3dlaWdodHMsIG5yX3NyY19wcm9iZXMpO1xcbjE0NTE6XFx0XFx0aWYgKCFzcmMpIHtcXG4xNDUyOlxcdFxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGRzdCk7XFxuMTQ1MzpcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJzcmMgYWxsb2MgZmFpbFxcXCIpO1xcbjE0NTQ6XFx0XFx0fVxcbjE0NTU6XFx0XFxuMTQ1NjpcXHRcXHRlcnIgPSBkYW1vbl9jb21taXRfcHJvYmVzKGRzdCwgc3JjKTtcXG4xNDU3OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBlcnIsIDApO1xcbjE0NTg6XFx0XFx0aWYgKGVycilcXG4xNDU5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE0NjA6XFx0XFx0bnJfZHN0X3Byb2JlcyA9IDA7XFxuMTQ2MTpcXHRcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdClcXG4xNDYyOlxcdFxcdFxcdG5yX2RzdF9wcm9iZXMrKztcXG4xNDYzOlxcdFxcdG5yX3NyY19wcm9iZXMgPSAwO1xcbjE0NjQ6XFx0XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUoc3JjX3Byb2JlLCBzcmMpXFxuMTQ2NTpcXHRcXHRcXHRucl9zcmNfcHJvYmVzKys7XFxuMTQ2NjpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbnJfZHN0X3Byb2JlcywgbnJfc3JjX3Byb2Jlcyk7XFxuMTQ2NzpcXHRcXHRpZiAobnJfZHN0X3Byb2JlcyAhPSBucl9zcmNfcHJvYmVzKVxcbjE0Njg6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTQ2OTpcXHRcXHRucl9kc3RfcHJvYmVzID0gMDtcXG4xNDcwOlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKGRzdF9wcm9iZSwgZHN0KSB7XFxuMTQ3MTpcXHRcXHRcXHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUobnJfZHN0X3Byb2Jlcywgc3JjKTtcXG4xNDcyOlxcdFxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzcmNfcHJvYmUtXFx1MDAzZXdlaWdodCwgZHN0X3Byb2JlLVxcdTAwM2V3ZWlnaHQpO1xcbjE0NzM6XFx0XFx0XFx0bnJfZHN0X3Byb2JlcysrO1xcbjE0NzQ6XFx0XFx0fVxcbjE0NzU6XFx0b3V0OlxcbjE0NzY6XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoZHN0KTtcXG4xNDc3OlxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KHNyYyk7XFxuMTQ3ODpcXHR9XFxuMTQ3OTpcXHRcXG4xNDgwOlxcdHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3Byb2JlcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuMTQ4MTpcXHR7XFxuMTQ4MjpcXHRcXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXFxuMTQ4MzpcXHRcXHRcXHRcXHQodW5zaWduZWQgaW50W10pe30sIDAsICh1bnNpZ25lZCBpbnRbXSl7fSwgMCk7XFxuMTQ4NDpcXHRcXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXFxuMTQ4NTpcXHRcXHRcXHRcXHQodW5zaWduZWQgaW50W10pe30sIDAsICh1bnNpZ25lZCBpbnRbXSl7MX0sIDEpO1xcbjE0ODY6XFx0XFx0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxcbjE0ODc6XFx0XFx0XFx0XFx0KHVuc2lnbmVkIGludFtdKXt9LCAwLCAodW5zaWduZWQgaW50W10pezEsIDJ9LCAyKTtcXG4xNDg4OlxcdFxcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcXG4xNDg5OlxcdFxcdFxcdFxcdCh1bnNpZ25lZCBpbnRbXSl7MX0sIDEsICh1bnNpZ25lZCBpbnRbXSl7Mn0sIDEpO1xcbjE0OTA6XFx0XFx0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxcbjE0OTE6XFx0XFx0XFx0XFx0KHVuc2lnbmVkIGludFtdKXsxfSwgMSwgKHVuc2lnbmVkIGludFtdKXsyLCAzfSwgMik7XFxuMTQ5MjpcXHRcXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXFxuMTQ5MzpcXHRcXHRcXHRcXHQodW5zaWduZWQgaW50W10pezIsIDN9LCAyLCAodW5zaWduZWQgaW50W10pezF9LCAxKTtcXG4xNDk0OlxcdFxcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcXG4xNDk1OlxcdFxcdFxcdFxcdCh1bnNpZ25lZCBpbnRbXSl7MiwgM30sIDIsICh1bnNpZ25lZCBpbnRbXSl7fSwgMCk7XFxuMTQ5NjpcXHRcXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXFxuMTQ5NzpcXHRcXHRcXHRcXHQodW5zaWduZWQgaW50W10pezJ9LCAxLCAodW5zaWduZWQgaW50W10pe30sIDApO1xcbjE0OTg6XFx0fVxcbjE0OTk6XFx0XFxuMTUwMDpcXHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9jdHgoc3RydWN0IGt1bml0ICp0ZXN0KVxcbjE1MDE6XFx0e1xcbjE1MDI6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqc3JjLCAqZHN0O1xcbjE1MDM6XFx0XFxuMTUwNDpcXHRcXHRzcmMgPSBkYW1vbl9uZXdfY3R4KCk7XFxuMTUwNTpcXHRcXHRpZiAoIXNyYylcXG4xNTA2OlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInNyYyBhbGxvYyBmYWlsXFxcIik7XFxuMTUwNzpcXHRcXHRkc3QgPSBkYW1vbl9uZXdfY3R4KCk7XFxuMTUwODpcXHRcXHRpZiAoIWRzdCkge1xcbjE1MDk6XFx0XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoc3JjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDU6MTMuMDg0NzY3NDUxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNzI5MjY4MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBGaWxlJ3MgVGFpbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgZmluYWwgcG9ydGlvbiBvZiB0aGlzIGZpbGUsIGJleW9uZCBsaW5lIDE1MTAuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgc2Vuc2Ugb2YgdGhlICpyZWNlbnQqIGFjdGl2aXR5LCBhbnkgcG90ZW50aWFsIHBhdHRlcm5zIGVtZXJnaW5nIGF0IHRoZSBlbmQsIG9yIG1heWJlIGp1c3QgY29uZmlybWluZyBhc3N1bXB0aW9ucyBJIGhhdmUgYWJvdXQgdGhlIGRhdGFzZXQncyBvdmVyYWxsIHN0cnVjdHVyZS4gSSdtIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiB0aGUgdGFpbCBiZWNhdXNlLCBpbiBteSBleHBlcmllbmNlLCB0aGF0J3Mgb2Z0ZW4gd2hlcmUgeW91IGZpbmQgdGhlIGxhdGVzdCBkYXRhIGVudHJpZXMsIGFub21hbGllcywgb3IgY3J1Y2lhbCBjb25jbHVkaW5nIG9ic2VydmF0aW9ucy4gSXQncyBhIHF1aWNrIGFuZCBkaXJ0eSB3YXkgdG8gc3BvdCBpZiBhbnl0aGluZyBzaWduaWZpY2FudCBoYXMgb2NjdXJyZWQgYXQgdGhlIHZlcnkgZW5kLiBUaGlzIGhlbHBzIG1lIGRlY2lkZSBpZiBJIG5lZWQgdG8gZG8gYSBicm9hZGVyIGRhdGEgaW52ZXN0aWdhdGlvbiBvciBpZiBJIGNhbiBtYWtlIGNvbmNsdXNpb25zIHF1aWNrbHkgZnJvbSB0aGUgZW5kIG9mIHRoZSBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA1NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDU6MTUuMzU3Njk3ODg2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTUxMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUxMDpcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJkc3QgYWxsb2MgZmFpbFxcXCIpO1xcbjE1MTE6XFx0XFx0fVxcbjE1MTI6XFx0XFx0LyogT25seSBwb3dlciBvZiB0d28gbWluX3JlZ2lvbl9zeiBpcyBhbGxvd2VkLiAqL1xcbjE1MTM6XFx0XFx0c3JjLVxcdTAwM2VtaW5fcmVnaW9uX3N6ID0gNDA5NjtcXG4xNTE0OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKSwgMCk7XFxuMTUxNTpcXHRcXHRzcmMtXFx1MDAzZW1pbl9yZWdpb25fc3ogPSA0MDk1O1xcbjE1MTY6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX2NvbW1pdF9jdHgoZHN0LCBzcmMpLCAtRUlOVkFMKTtcXG4xNTE3OlxcdFxcdHNyYy1cXHUwMDNlbWluX3JlZ2lvbl9zeiA9IDQwOTY7XFxuMTUxODpcXHRcXHRzcmMtXFx1MDAzZXBhdXNlID0gdHJ1ZTtcXG4xNTE5OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKSwgMCk7XFxuMTUyMDpcXHRcXHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBkc3QtXFx1MDAzZXBhdXNlKTtcXG4xNTIxOlxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KHNyYyk7XFxuMTUyMjpcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChkc3QpO1xcbjE1MjM6XFx0fVxcbjE1MjQ6XFx0XFxuMTUyNTpcXHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuMTUyNjpcXHR7XFxuMTUyNzpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxuMTUyODpcXHRcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLCAqcHJvYmUyO1xcbjE1Mjk6XFx0XFxuMTUzMDpcXHRcXHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XFxuMTUzMTpcXHRcXHRpZiAoIWN0eClcXG4xNTMyOlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcImN0eCBhbGxvYyBmYWlsXFxcIik7XFxuMTUzMzpcXHRcXHRwcm9iZSA9IGRhbW9uX25ld19wcm9iZSgpO1xcbjE1MzQ6XFx0XFx0aWYgKCFwcm9iZSkge1xcbjE1MzU6XFx0XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG4xNTM2OlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInByb2JlIGFsbG9jIGZhaWxcXFwiKTtcXG4xNTM3OlxcdFxcdH1cXG4xNTM4OlxcdFxcdGRhbW9uX2FkZF9wcm9iZShjdHgsIHByb2JlKTtcXG4xNTM5OlxcdFxcbjE1NDA6XFx0XFx0LyogUGFyYW1ldGVycyBhcmUgdmFsaWRhdGVkIG9ubHkgaWYgYW55IHByb2JlIHdlaWdodCBpcyBzZXQuICovXFxuMTU0MTpcXHRcXHRjdHgtXFx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA9IDE7XFxuMTU0MjpcXHRcXHRjdHgtXFx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwMDAwO1xcbjE1NDM6XFx0XFx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKGN0eCkpO1xcbjE1NDQ6XFx0XFxuMTU0NTpcXHRcXHQvKiBVcCB0byBVOF9NQVggc2FtcGxlcyBwZXIgYWdncmVnYXRpb24gaW50ZXJ2YWwgYXJlIGFsbG93ZWQuICovXFxuMTU0NjpcXHRcXHRwcm9iZS1cXHUwMDNld2VpZ2h0ID0gMTAwO1xcbjE1NDc6XFx0XFx0Y3R4LVxcdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsID0gMjU1O1xcbjE1NDg6XFx0XFx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKGN0eCkpO1xcbjE1NDk6XFx0XFxuMTU1MDpcXHRcXHQvKiBNb3JlIHNhbXBsZXMgY291bGQgb3ZlcmZsb3cgdGhlIHByb2JlX2hpdHMgY291bnRlcnMuICovXFxuMTU1MTpcXHRcXHRjdHgtXFx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgPSAyNTY7XFxuMTU1MjpcXHRcXHRLVU5JVF9FWFBFQ1RfRkFMU0UodGVzdCwgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKGN0eCkpO1xcbjE1NTM6XFx0XFxuMTU1NDpcXHRcXHQvKiBUaGUgbGFyZ2VzdCB3ZWlnaHQgd2hvc2Ugd2VpZ2h0ZWQgaGl0IGNvdW50IGZpdHMgaW4gdW5zaWduZWQgaW50LiAqL1xcbjE1NTU6XFx0XFx0Y3R4LVxcdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsID0gMjU1O1xcbjE1NTY6XFx0XFx0cHJvYmUtXFx1MDAzZXdlaWdodCA9IFVJTlRfTUFYIC8gMjU1O1xcbjE1NTc6XFx0XFx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKGN0eCkpO1xcbjE1NTg6XFx0XFxuMTU1OTpcXHRcXHQvKiBBbnkgbGFyZ2VyIHdlaWdodCBjb3VsZCBvdmVyZmxvdyBpdHMgd2VpZ2h0ZWQgaGl0IGNvdW50LiAqL1xcbjE1NjA6XFx0XFx0cHJvYmUtXFx1MDAzZXdlaWdodCA9IFVJTlRfTUFYIC8gMjU1ICsgMTtcXG4xNTYxOlxcdFxcdEtVTklUX0VYUEVDVF9GQUxTRSh0ZXN0LCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoY3R4KSk7XFxuMTU2MjpcXHRcXG4xNTYzOlxcdFxcdC8qIFdpdGggb25lIHNhbXBsZSBwZXIgYWdncmVnYXRpb24sIGV2ZW4gdGhlIGxhcmdlc3Qgd2VpZ2h0IGZpdHMuICovXFxuMTU2NDpcXHRcXHRjdHgtXFx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgPSAxO1xcbjE1NjU6XFx0XFx0cHJvYmUtXFx1MDAzZXdlaWdodCA9IFVJTlRfTUFYO1xcbjE1NjY6XFx0XFx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKGN0eCkpO1xcbjE1Njc6XFx0XFxuMTU2ODpcXHRcXHQvKiBUaGUgc3VtIG9mIGFsbCBwcm9iZXMnIHdlaWdodGVkIGhpdCBjb3VudHMgY291bGQgYWxzbyBvdmVyZmxvdy4gKi9cXG4xNTY5OlxcdFxcdHByb2JlMiA9IGRhbW9uX25ld19wcm9iZSgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0NToxNS4zNTc4Mzc3NjZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4NzIzODg5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBjb3JlLWt1bml0LmhgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIExldCdzIGFzc3VtZSB0aGlzIGlzIHRoZSBoZWFkZXIgZmlsZSBmb3IgdGhlIGNvcmUgS1VuaXQgdGVzdHMgd2l0aGluIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcikgZnJhbWV3b3JrLiBJJ20gcHJvYmFibHkgbG9va2luZyBhdCB0aGlzIGJlY2F1c2UgSSdtIHRyb3VibGVzaG9vdGluZyBhIERBTU9OLXJlbGF0ZWQgaXNzdWUsIHJldmlld2luZyBjaGFuZ2VzLCBvciBtYXliZSBldmVuIGNvbnRyaWJ1dGluZyBhIG5ldyB0ZXN0LiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBkZWZpbml0aW9ucyByZWxhdGVkIHRvIHRlc3Qgc3RydWN0dXJlcywgbWFjcm9zIGZvciBzZXR0aW5nIHVwIGFuZCB0ZWFyaW5nIGRvd24gdGhlIHRlc3RzLCBhc3NlcnRpb25zLCBhbmQgcHJvYmFibHkgc29tZSBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIGFjdHVhbCB0ZXN0IGxvZ2ljLiBJdCB3b3VsZCBiZSBoZWxwZnVsIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgS1VuaXQgaXMgdXNlZCBpbiB0aGlzIERBTU9OIGNvbnRleHQuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBuYW1pbmcgY29udmVudGlvbnMgZW1wbG95ZWQsIGFuZCBhbnkgc3BlY2lhbGl6ZWQgbWFjcm9zIHRoYXQgYXJlIHNwZWNpZmljIHRvIERBTU9OJ3MgdGVzdGluZyByZXF1aXJlbWVudHMuIFdoYXQgYXJlIHRoZSBrZXkgY29uY2VwdHMgYW5kIHByaW1pdGl2ZXMgdGhhdCBhcmUgYmVpbmcgdGVzdGVkPyBJJ20gYW50aWNpcGF0aW5nIHNvbWUgaW50cmljYXRlIGludGVyYWN0aW9ucyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBEQU1PTidzIG9wZXJhdGlvbmFsIGZlYXR1cmVzLiBJIGFsc28gd2FudCB0byBpZGVudGlmeSBob3cgdGhlIHRlc3RzIGFyZSBvcmdhbml6ZWQsIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXkgaGF2ZSwgYW5kIGlmIHRoZXkncmUgd2VsbC1zdHJ1Y3R1cmVkIGFuZCBkb2N1bWVudGVkLiBPa2F5LCBsZXQncyBnZXQgc3RhcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNjEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ1OjE3Ljc0NTA3OTgxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTU3MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU3MDpcXHRcXHRpZiAoIXByb2JlMikge1xcbjE1NzE6XFx0XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG4xNTcyOlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInByb2JlMiBhbGxvYyBmYWlsXFxcIik7XFxuMTU3MzpcXHRcXHR9XFxuMTU3NDpcXHRcXHRwcm9iZTItXFx1MDAzZXdlaWdodCA9IDE7XFxuMTU3NTpcXHRcXHRkYW1vbl9hZGRfcHJvYmUoY3R4LCBwcm9iZTIpO1xcbjE1NzY6XFx0XFx0S1VOSVRfRVhQRUNUX0ZBTFNFKHRlc3QsIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhjdHgpKTtcXG4xNTc3OlxcdFxcbjE1Nzg6XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG4xNTc5OlxcdH1cXG4xNTgwOlxcdFxcbjE1ODE6XFx0c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9maWx0ZXJfb3V0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4xNTgyOlxcdHtcXG4xNTgzOlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuMTU4NDpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCAqcjI7XFxuMTU4NTpcXHRcXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmO1xcbjE1ODY6XFx0XFxuMTU4NzpcXHRcXHRmID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9BRERSLCB0cnVlLCBmYWxzZSk7XFxuMTU4ODpcXHRcXHRpZiAoIWYpXFxuMTU4OTpcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJmaWx0ZXIgYWxsb2MgZmFpbFxcXCIpO1xcbjE1OTA6XFx0XFx0Zi1cXHUwMDNlYWRkcl9yYW5nZSA9IChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSl7LnN0YXJ0ID0gMiwgLmVuZCA9IDZ9O1xcbjE1OTE6XFx0XFxuMTU5MjpcXHRcXHR0ID0gZGFtb25fbmV3X3RhcmdldCgpO1xcbjE1OTM6XFx0XFx0aWYgKCF0KSB7XFxuMTU5NDpcXHRcXHRcXHRkYW1vc19kZXN0cm95X2ZpbHRlcihmKTtcXG4xNTk1OlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInRhcmdldCBhbGxvYyBmYWlsXFxcIik7XFxuMTU5NjpcXHRcXHR9XFxuMTU5NzpcXHRcXHRyID0gZGFtb25fbmV3X3JlZ2lvbigzLCA1KTtcXG4xNTk4OlxcdFxcdGlmICghcikge1xcbjE1OTk6XFx0XFx0XFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZik7XFxuMTYwMDpcXHRcXHRcXHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcXG4xNjAxOlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInJlZ2lvbiBhbGxvYyBmYWlsXFxcIik7XFxuMTYwMjpcXHRcXHR9XFxuMTYwMzpcXHRcXHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xcbjE2MDQ6XFx0XFxuMTYwNTpcXHRcXHQvKiByZWdpb24gaW4gdGhlIHJhbmdlICovXFxuMTYwNjpcXHRcXHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBkYW1vc19maWx0ZXJfbWF0Y2goTlVMTCwgdCwgciwgZiwgMSkpO1xcbjE2MDc6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3JlZ2lvbnModCksIDEpO1xcbjE2MDg6XFx0XFxuMTYwOTpcXHRcXHQvKiByZWdpb24gYmVmb3JlIHRoZSByYW5nZSAqL1xcbjE2MTA6XFx0XFx0ci1cXHUwMDNlYXIuc3RhcnQgPSAxO1xcbjE2MTE6XFx0XFx0ci1cXHUwMDNlYXIuZW5kID0gMjtcXG4xNjEyOlxcdFxcdEtVTklUX0VYUEVDVF9GQUxTRSh0ZXN0LFxcbjE2MTM6XFx0XFx0XFx0XFx0ZGFtb3NfZmlsdGVyX21hdGNoKE5VTEwsIHQsIHIsIGYsIDEpKTtcXG4xNjE0OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCAxKTtcXG4xNjE1OlxcdFxcbjE2MTY6XFx0XFx0LyogcmVnaW9uIGFmdGVyIHRoZSByYW5nZSAqL1xcbjE2MTc6XFx0XFx0ci1cXHUwMDNlYXIuc3RhcnQgPSA2O1xcbjE2MTg6XFx0XFx0ci1cXHUwMDNlYXIuZW5kID0gODtcXG4xNjE5OlxcdFxcdEtVTklUX0VYUEVDVF9GQUxTRSh0ZXN0LFxcbjE2MjA6XFx0XFx0XFx0XFx0ZGFtb3NfZmlsdGVyX21hdGNoKE5VTEwsIHQsIHIsIGYsIDEpKTtcXG4xNjIxOlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCAxKTtcXG4xNjIyOlxcdFxcbjE2MjM6XFx0XFx0LyogcmVnaW9uIHN0YXJ0ZWQgYmVmb3JlIHRoZSByYW5nZSAqL1xcbjE2MjQ6XFx0XFx0ci1cXHUwMDNlYXIuc3RhcnQgPSAxO1xcbjE2MjU6XFx0XFx0ci1cXHUwMDNlYXIuZW5kID0gNDtcXG4xNjI2OlxcdFxcdEtVTklUX0VYUEVDVF9GQUxTRSh0ZXN0LCBkYW1vc19maWx0ZXJfbWF0Y2goTlVMTCwgdCwgciwgZiwgMSkpO1xcbjE2Mjc6XFx0XFx0LyogZmlsdGVyIHNob3VsZCBoYXZlIHNwbGl0IHRoZSByZWdpb24gKi9cXG4xNjI4OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2Vhci5zdGFydCwgMSk7XFxuMTYyOTpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlYXIuZW5kLCAyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDU6MTcuNzQ1MjAxNDVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ5MjkyODIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBjb3JlLWt1bml0LmhgIGZvciBSZXZpZXcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHNoaWZ0IGZvY3VzIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgcmVzdCBvZiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gSSd2ZSBhbHJlYWR5IHNjcnV0aW5pemVkIHBvcnRpb25zIG9mIHRoZSBEQU1PTiBLVW5pdCB0ZXN0IHN1aXRlLCBzbyBJIGtub3cgdGhlIGdlbmVyYWwgc3RydWN0dXJlLiBOb3csIEknbSB0aGlua2luZyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGhlYWRlciBmaWxlIGlzIGNvcnJlY3RseSBpbnRlZ3JhdGVkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipQcm9wZXIgaW5jbHVkZXM6KiogQXJlIHRoZSBuZWNlc3NhcnkgREFNT04gY29yZSBoZWFkZXJzIGFuZCBLVW5pdCBpbmZyYXN0cnVjdHVyZSBpbmNsdWRlZCBjb3JyZWN0bHk/IEFyZSB0aGVyZSBhbnkgbWlzc2luZyBkZXBlbmRlbmNpZXM/XG4qICAgKipEYXRhIHN0cnVjdHVyZSBkZWNsYXJhdGlvbnM6KiogQXJlIGFueSBuZXcgc3RydWN0cyBvciBlbnVtcyBzcGVjaWZpYyB0byB0aGlzIHBvcnRpb24gb2YgdGhlIHRlc3RpbmcgZGVmaW5lZCwgb3IgYXJlIGV4aXN0aW5nIERBTU9OIGRhdGFzdHJ1Y3R1cmVzIGJlaW5nIGxldmVyYWdlZD9cbiogICAqKkZ1bmN0aW9uIHByb3RvdHlwZXM6KiogSXMgdGhlIGludGVyZmFjZSB3ZWxsLWRlZmluZWQ/IERvZXMgaXQgc2VlbSBjbGVhbiBhbmQgc3RyYWlnaHRmb3J3YXJkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCByZXR1cm4gdHlwZXMgb3IgYXJndW1lbnQgcGFzc2luZyBJIG5lZWQgdG8gZmxhZz9cbiogICAqKlRlc3QgY2FzZSBvcmdhbml6YXRpb246KiogSG93IGFyZSB0aGUgaW5kaXZpZHVhbCB0ZXN0IGNhc2VzIHN0cnVjdHVyZWQgd2l0aGluIHRoaXMgaGVhZGVyPyBBcmUgdGhleSBsb2dpY2FsbHkgZ3JvdXBlZCBhbmQgZWFzeSB0byB1bmRlcnN0YW5kPyBBcmUgdGhleSBzZXQgdXAgcHJvcGVybHkgdG8gYmUgdXNlZCB3aXRoIHRoZSBrdW5pdCB0ZXN0IHN5c3RlbT9cbiogICAqKkNvdmVyYWdlOioqIERvZXMgaXQgYXBwZWFyIHRvIGJlIHRlc3RpbmcgYSByZXByZXNlbnRhdGl2ZSByYW5nZSBvZiB0aGUgREFNT04gY29yZSBmdW5jdGlvbmFsaXR5PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgZ2FwcyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkPyBJcyB0aGVyZSBhbiBvYnZpb3VzIGJpYXMgdG93YXJkcyBlZGdlIGNhc2VzIG9yIGNvbW1vbiBmbG93cz9cbiogICAqKlBvdGVudGlhbCBmb3IgaW1wcm92ZW1lbnQ6KiogQXJlIHRoZXJlIGFueSBvcHBvcnR1bml0aWVzIGZvciBzaW1wbGlmaWNhdGlvbiwgcmVmYWN0b3JpbmcsIG9yIGJldHRlciBkb2N1bWVudGF0aW9uIHRoYXQgSSBjYW4gc3BvdCBxdWlja2x5PyBEb2VzIHRoZSBzdHlsZSBhbGlnbiB3aXRoIHRoZSBvdmVyYWxsIHByb2plY3Q/XG5cblRoaXMgc2hvdWxkIHByb3ZpZGUgbWUgd2l0aCBhbiBpbml0aWFsIGFzc2Vzc21lbnQgb2YgaG93IGBjb3JlLWt1bml0LmhgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIGFuZCB3aGF0IGFyZWFzIHdhcnJhbnQgYSBtb3JlIGluLWRlcHRoIGV4YW1pbmF0aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3MTEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ1OjIxLjIzODEzMTczN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2NzA6XFx0XFx0XFx0XFx0bGFzdF9pbnB1dCk7XFxuMTY3MTpcXHRcXG4xNjcyOlxcdFxcdC8qXFxuMTY3MzpcXHRcXHQgKiBJZiBjdXJyZW50IHNjb3JlIGlzIGhpZ2hlciB0aGFuIHRoZSBnb2FsLCBuZXh0IGlucHV0IHNob3VsZCBiZSBsb3dlclxcbjE2NzQ6XFx0XFx0ICogdGhhbiB0aGUgbGFzdCBpbnB1dC5cXG4xNjc1OlxcdFxcdCAqL1xcbjE2NzY6XFx0XFx0Y3VycmVudF9zY29yZSA9IDI1MDAwMDAwMDtcXG4xNjc3OlxcdFxcdEtVTklUX0VYUEVDVF9MVCh0ZXN0LFxcbjE2Nzg6XFx0XFx0XFx0XFx0ZGFtb25fZmVlZF9sb29wX25leHRfaW5wdXQobGFzdF9pbnB1dCwgY3VycmVudF9zY29yZSksXFxuMTY3OTpcXHRcXHRcXHRcXHRsYXN0X2lucHV0KTtcXG4xNjgwOlxcdFxcbjE2ODE6XFx0XFx0LypcXG4xNjgyOlxcdFxcdCAqIFRoZSBuZXh0IGlucHV0IGRlcGVuZHMgb24gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQgc2NvcmUgYW5kXFxuMTY4MzpcXHRcXHQgKiB0aGUgZ29hbFxcbjE2ODQ6XFx0XFx0ICovXFxuMTY4NTpcXHRcXHRLVU5JVF9FWFBFQ1RfR1QodGVzdCxcXG4xNjg2OlxcdFxcdFxcdFxcdGRhbW9uX2ZlZWRfbG9vcF9uZXh0X2lucHV0KGxhc3RfaW5wdXQsIDIwMCksXFxuMTY4NzpcXHRcXHRcXHRcXHRkYW1vbl9mZWVkX2xvb3BfbmV4dF9pbnB1dChsYXN0X2lucHV0LCAyMDAwKSk7XFxuMTY4ODpcXHR9XFxuMTY4OTpcXHRcXG4xNjkwOlxcdHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Qoc3RydWN0IGt1bml0ICp0ZXN0KVxcbjE2OTE6XFx0e1xcbjE2OTI6XFx0XFx0c3RydWN0IGRhbW9zIHNjaGVtZTtcXG4xNjkzOlxcdFxcdHN0cnVjdCBkYW1vc19maWx0ZXIgKnRhcmdldF9maWx0ZXIsICphbm9uX2ZpbHRlcjtcXG4xNjk0OlxcdFxcbjE2OTU6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNjaGVtZS5jb3JlX2ZpbHRlcnMpO1xcbjE2OTY6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNjaGVtZS5vcHNfZmlsdGVycyk7XFxuMTY5NzpcXHRcXG4xNjk4OlxcdFxcdGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KFxcdTAwMjZzY2hlbWUpO1xcbjE2OTk6XFx0XFx0LypcXG4xNzAwOlxcdFxcdCAqIE5vIGZpbHRlciBpcyBpbnN0YWxsZWQuICBBbGxvdyBieSBkZWZhdWx0IG9uIGJvdGggY29yZSBhbmQgb3BzIGxheWVyXFxuMTcwMTpcXHRcXHQgKiBmaWx0ZXJpbmcgc3RhZ2VzLCBzaW5jZSB0aGVyZSBhcmUgbm8gZmlsdGVycyBhdCBhbGwuXFxuMTcwMjpcXHRcXHQgKi9cXG4xNzAzOlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzY2hlbWUuY29yZV9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0LCBmYWxzZSk7XFxuMTcwNDpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2NoZW1lLm9wc19maWx0ZXJzX2RlZmF1bHRfcmVqZWN0LCBmYWxzZSk7XFxuMTcwNTpcXHRcXG4xNzA2OlxcdFxcdHRhcmdldF9maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCwgdHJ1ZSwgdHJ1ZSk7XFxuMTcwNzpcXHRcXHRpZiAoIXRhcmdldF9maWx0ZXIpXFxuMTcwODpcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJmaWx0ZXIgYWxsb2MgZmFpbFxcXCIpO1xcbjE3MDk6XFx0XFx0ZGFtb3NfYWRkX2ZpbHRlcihcXHUwMDI2c2NoZW1lLCB0YXJnZXRfZmlsdGVyKTtcXG4xNzEwOlxcdFxcdGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KFxcdTAwMjZzY2hlbWUpO1xcbjE3MTE6XFx0XFx0LypcXG4xNzEyOlxcdFxcdCAqIEEgY29yZS1oYW5kbGVkIGFsbG93LWZpbHRlciBpcyBpbnN0YWxsZWQuXFxuMTcxMzpcXHRcXHQgKiBSZWplY3QgYnkgZGVmYXVsdCBvbiBjb3JlIGxheWVyIGZpbHRlcmluZyBzdGFnZSBkdWUgdG8gdGhlIGxhc3RcXG4xNzE0OlxcdFxcdCAqIGNvcmUtbGF5ZXItZmlsdGVyJ3MgYmVoYXZpb3IuXFxuMTcxNTpcXHRcXHQgKiBBbGxvdyBieSBkZWZhdWx0IG9uIG9wcyBsYXllciBmaWx0ZXJpbmcgc3RhZ2UgZHVlIHRvIHRoZSBhYnNlbmNlIG9mXFxuMTcxNjpcXHRcXHQgKiBvcHMgbGF5ZXIgZmlsdGVycy5cXG4xNzE3OlxcdFxcdCAqL1xcbjE3MTg6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNjaGVtZS5jb3JlX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QsIHRydWUpO1xcbjE3MTk6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNjaGVtZS5vcHNfZmlsdGVyc19kZWZhdWx0X3JlamVjdCwgZmFsc2UpO1xcbjE3MjA6XFx0XFxuMTcyMTpcXHRcXHR0YXJnZXRfZmlsdGVyLVxcdTAwM2VhbGxvdyA9IGZhbHNlO1xcbjE3MjI6XFx0XFx0ZGFtb3Nfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QoXFx1MDAyNnNjaGVtZSk7XFxuMTcyMzpcXHRcXHQvKlxcbjE3MjQ6XFx0XFx0ICogQSBjb3JlLWhhbmRsZWQgcmVqZWN0LWZpbHRlciBpcyBpbnN0YWxsZWQuXFxuMTcyNTpcXHRcXHQgKiBBbGxvdyBieSBkZWZhdWx0IG9uIGNvcmUgbGF5ZXIgZmlsdGVyaW5nIHN0YWdlIGR1ZSB0byB0aGUgbGFzdFxcbjE3MjY6XFx0XFx0ICogY29yZS1sYXllci1maWx0ZXIncyBiZWhhdmlvci5cXG4xNzI3OlxcdFxcdCAqIEFsbG93IGJ5IGRlZmF1bHQgb24gb3BzIGxheWVyIGZpbHRlcmluZyBzdGFnZSBkdWUgdG8gdGhlIGFic2VuY2Ugb2ZcXG4xNzI4OlxcdFxcdCAqIG9wcyBsYXllciBmaWx0ZXJzLlxcbjE3Mjk6XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ1OjIxLjIzODI1OTk3N1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTE1NTk1NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgZW5kIG9mIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBJJ20gZ3Vlc3NpbmcgdGhpcyBmaWxlIGxpa2VseSBjb250YWlucyB0aGUgY29yZSBLVW5pdCB0ZXN0cyBmb3IgREFNT04sIHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yLiBLbm93aW5nIHRoZSBlbmQgaXMga2V5LiBJdCdzIHVzdWFsbHkgd2hlcmUgeW91J2xsIGZpbmQgdGhlIGxhc3QgdGVzdCBjYXNlcywgcG90ZW50aWFsbHkgcmVjZW50IGFkZGl0aW9ucywgb3IgbWF5YmUgYSBzdW1tYXJ5L2VuZC1vZi1maWxlIG1hcmtlciB0aGF0IGdpdmVzIG1lIGNvbnRleHQuIFdoYXQgYXJlIHRoZXkgdGVzdGluZz8gV2hhdCBmdW5jdGlvbmFsaXR5IGluIERBTU9OJ3MgY29yZSBpcyBiZWluZyB2YWxpZGF0ZWQgaGVyZT8gQXJlIHRoZXJlIGFueSBuZXcgdGVzdCBmaXh0dXJlcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIHJlZ3Jlc3Npb24gdGVzdHM/XG5cbkknbSBleHBlY3RpbmcgdG8gc2VlIGRlZmluaXRpb25zIGZvciBga3VuaXRfY2FzZWAgc3RydWN0dXJlcywgdGVzdCBmdW5jdGlvbnMgdGhhdCBvcGVyYXRlIG9uIHRob3NlIHN0cnVjdHVyZXMsIGFuZCBob3BlZnVsbHksIHNvbWUgY29tbWVudGFyeSBvciBkb2N1bWVudGF0aW9uIHRoYXQgY2xhcmlmaWVzIHRoZSBpbnRlbmRlZCBiZWhhdmlvci4gSeKAmW0gaG9waW5nIHRvIHVuZGVyc3RhbmQgaG93IHRob3JvdWdobHkgREFNT04ncyBtZW1vcnkgbW9uaXRvcmluZyBhbmQgYWRhcHRhdGlvbiBtZWNoYW5pc21zIGFyZSBiZWluZyB0ZXN0ZWQgYXQgdGhlIEtVbml0IGxldmVsLiBUaGlzIGNvdWxkIGJlIGFueXRoaW5nIGZyb20gYmFzaWMgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIHRlc3RzLCB0byBtb3JlIGNvbXBsZXggc2NlbmFyaW9zIGludm9sdmluZyBhY2Nlc3MgcGF0dGVybiBhbmFseXNpcywgYWRhcHRhdGlvbiB0cmlnZ2VyaW5nLCBhbmQgcGVyZm9ybWFuY2UgaW1wYWN0LiBUaGUgZW5kIG9mIHRoZSBmaWxlIG1pZ2h0IGhhdmUgc29tZSBjbHVlcyB0byB3aGF0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB0ZXN0cyBhcmUuIExldCdzIHNlZSBob3cgd2VsbCBpdCB0ZXN0cyBEQU1PTidzIGltcG9ydGFudCBmdW5jdGlvbmFsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTI3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0NToyNC4xNTM4NTgxNDJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNzMwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzMwOlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzY2hlbWUuY29yZV9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0LCBmYWxzZSk7XFxuMTczMTpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2NoZW1lLm9wc19maWx0ZXJzX2RlZmF1bHRfcmVqZWN0LCBmYWxzZSk7XFxuMTczMjpcXHRcXG4xNzMzOlxcdFxcdGFub25fZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9BTk9OLCB0cnVlLCB0cnVlKTtcXG4xNzM0OlxcdFxcdGlmICghYW5vbl9maWx0ZXIpIHtcXG4xNzM1OlxcdFxcdFxcdGRhbW9zX2ZyZWVfZmlsdGVyKHRhcmdldF9maWx0ZXIpO1xcbjE3MzY6XFx0XFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwiYW5vbl9maWx0ZXIgYWxsb2MgZmFpbFxcXCIpO1xcbjE3Mzc6XFx0XFx0fVxcbjE3Mzg6XFx0XFx0ZGFtb3NfYWRkX2ZpbHRlcihcXHUwMDI2c2NoZW1lLCBhbm9uX2ZpbHRlcik7XFxuMTczOTpcXHRcXG4xNzQwOlxcdFxcdGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KFxcdTAwMjZzY2hlbWUpO1xcbjE3NDE6XFx0XFx0LypcXG4xNzQyOlxcdFxcdCAqIEEgY29yZS1oYW5kbGVkIHJlamVjdC1maWx0ZXIgYW5kIG9wcy1oYW5kbGVkIGFsbG93LWZpbHRlciBhcmUgaW5zdGFsbGVkLlxcbjE3NDM6XFx0XFx0ICogQWxsb3cgYnkgZGVmYXVsdCBvbiBjb3JlIGxheWVyIGZpbHRlcmluZyBzdGFnZSBkdWUgdG8gdGhlIGV4aXN0ZW5jZVxcbjE3NDQ6XFx0XFx0ICogb2YgdGhlIG9wcy1oYW5kbGVkIGZpbHRlci5cXG4xNzQ1OlxcdFxcdCAqIFJlamVjdCBieSBkZWZhdWx0IG9uIG9wcyBsYXllciBmaWx0ZXJpbmcgc3RhZ2UgZHVlIHRvIHRoZSBsYXN0XFxuMTc0NjpcXHRcXHQgKiBvcHMtbGF5ZXItZmlsdGVyJ3MgYmVoYXZpb3IuXFxuMTc0NzpcXHRcXHQgKi9cXG4xNzQ4OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzY2hlbWUuY29yZV9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0LCBmYWxzZSk7XFxuMTc0OTpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2NoZW1lLm9wc19maWx0ZXJzX2RlZmF1bHRfcmVqZWN0LCB0cnVlKTtcXG4xNzUwOlxcdFxcbjE3NTE6XFx0XFx0dGFyZ2V0X2ZpbHRlci1cXHUwMDNlYWxsb3cgPSB0cnVlO1xcbjE3NTI6XFx0XFx0ZGFtb3Nfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QoXFx1MDAyNnNjaGVtZSk7XFxuMTc1MzpcXHRcXHQvKlxcbjE3NTQ6XFx0XFx0ICogQSBjb3JlLWhhbmRsZWQgYWxsb3ctZmlsdGVyIGFuZCBvcHMtaGFuZGxlZCBhbGxvdy1maWx0ZXIgYXJlXFxuMTc1NTpcXHRcXHQgKiBpbnN0YWxsZWQuXFxuMTc1NjpcXHRcXHQgKiBBbGxvdyBieSBkZWZhdWx0IG9uIGNvcmUgbGF5ZXIgZmlsdGVyaW5nIHN0YWdlIGR1ZSB0byB0aGUgZXhpc3RlbmNlXFxuMTc1NzpcXHRcXHQgKiBvZiB0aGUgb3BzLWhhbmRsZWQgZmlsdGVyLlxcbjE3NTg6XFx0XFx0ICogUmVqZWN0IGJ5IGRlZmF1bHQgb24gb3BzIGxheWVyIGZpbHRlcmluZyBzdGFnZSBkdWUgdG8gdGhlIGxhc3RcXG4xNzU5OlxcdFxcdCAqIG9wcy1sYXllci1maWx0ZXIncyBiZWhhdmlvci5cXG4xNzYwOlxcdFxcdCAqL1xcbjE3NjE6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNjaGVtZS5jb3JlX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QsIGZhbHNlKTtcXG4xNzYyOlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzY2hlbWUub3BzX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QsIHRydWUpO1xcbjE3NjM6XFx0XFxuMTc2NDpcXHRcXHRkYW1vc19mcmVlX2ZpbHRlcihhbm9uX2ZpbHRlcik7XFxuMTc2NTpcXHRcXHRkYW1vc19mcmVlX2ZpbHRlcih0YXJnZXRfZmlsdGVyKTtcXG4xNzY2OlxcdH1cXG4xNzY3OlxcdFxcbjE3Njg6XFx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF9hcHBseV9taW5fbnJfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbjE3Njk6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzel9yZWdpb25zLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3osXFxuMTc3MDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG1pbl9ucl9yZWdpb25zLFxcbjE3NzE6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtYXhfcmVnaW9uX3N6X2V4cGVjdCxcXG4xNzcyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcmVnaW9uc19leHBlY3QpXFxuMTc3MzpcXHR7XFxuMTc3NDpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxuMTc3NTpcXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbjE3NzY6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG4xNzc3OlxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4X3JlZ2lvbl9zaXplO1xcbjE3Nzg6XFx0XFxuMTc3OTpcXHRcXHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XFxuMTc4MDpcXHRcXHRpZiAoIWN0eClcXG4xNzgxOlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcImN0eCBhbGxvYyBmYWlsXFxcXG5cXFwiKTtcXG4xNzgyOlxcdFxcdHQgPSBkYW1vbl9uZXdfdGFyZ2V0KCk7XFxuMTc4MzpcXHRcXHRpZiAoIXQpIHtcXG4xNzg0OlxcdFxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxuMTc4NTpcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJ0YXJnZXQgYWxsb2MgZmFpbFxcXFxuXFxcIik7XFxuMTc4NjpcXHRcXHR9XFxuMTc4NzpcXHRcXHRkYW1vbl9hZGRfdGFyZ2V0KGN0eCwgdCk7XFxuMTc4ODpcXHRcXHRyID0gZGFtb25fbmV3X3JlZ2lvbigwLCBzel9yZWdpb25zKTtcXG4xNzg5OlxcdFxcdGlmICghcikge1xcbjE3OTA6XFx0XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG4xNzkxOlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInJlZ2lvbiBhbGxvYyBmYWlsXFxcXG5cXFwiKTtcXG4xNzkyOlxcdFxcdH1cXG4xNzkzOlxcdFxcdGRhbW9uX2FkZF9yZWdpb24ociwgdCk7XFxuMTc5NDpcXHRcXG4xNzk1OlxcdFxcdGN0eC1cXHUwMDNlbWluX3JlZ2lvbl9zeiA9IG1pbl9yZWdpb25fc3o7XFxuMTc5NjpcXHRcXHRjdHgtXFx1MDAzZWF0dHJzLm1pbl9ucl9yZWdpb25zID0gbWluX25yX3JlZ2lvbnM7XFxuMTc5NzpcXHRcXHRtYXhfcmVnaW9uX3NpemUgPSBkYW1vbl9hcHBseV9taW5fbnJfcmVnaW9ucyhjdHgpO1xcbjE3OTg6XFx0XFxuMTc5OTpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbWF4X3JlZ2lvbl9zaXplLCBtYXhfcmVnaW9uX3N6X2V4cGVjdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ1OjI0LjE1Mzk5NjU5MloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDk3NTAxOTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgYW5hbHl6aW5nIHRoZSBzaXR1YXRpb246XG5cbioqUmV2aWV3aW5nIENvcmUgS1VuaXQgVGVzdCBEZWZpbml0aW9ucyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHJlc3Qgb2YgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIFRoaXMgbGlrZWx5IGNvbnRhaW5zIGNyaXRpY2FsIGRlZmluaXRpb25zIGZvciB0aGUgY29yZSBLVW5pdCB0ZXN0cyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykuIFVuZGVyc3RhbmRpbmcgdGhpcyBoZWFkZXIgZmlsZSBpcyBlc3NlbnRpYWwgZm9yIHNldmVyYWwgcmVhc29ucy4gSXQgY291bGQgZGV0YWlsIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBpbiB0aGVzZSBjb3JlIHRlc3RzLCBkZWZpbmUgbWFjcm9zIGZvciB0ZXN0IHNldHVwIGFuZCB0ZWFyZG93biwgb3Igc3BlY2lmeSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb3IgdGVzdGluZyBjb25kaXRpb25zIGZvciBzcGVjaWZpYyBEQU1PTiBmdW5jdGlvbmFsaXRpZXMuIEl0IG1pZ2h0IGV2ZW4gaW5jbHVkZSBpbmxpbmUgZnVuY3Rpb25zIG9yIGhlbHBlciByb3V0aW5lcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIHRoZSBLVW5pdCB0ZXN0cyB3aXRoaW4gdGhpcyBtb2R1bGUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIHNjb3BlIGFuZCBjb21wbGV4aXR5IG9mIHRoZSB0ZXN0cyBkZWZpbmVkIHdpdGhpbi4gSXQgaXMgdmVyeSBsaWtlbHkgdGhhdCB0aGlzIGhlYWRlciBjb250YWlucyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IGluY2x1ZGUvZXhjbHVkZSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgdGVzdGluZyBiYXNlZCBvbiBjb25maWd1cmF0aW9uLiBUaGlzIGNvdWxkIGJlIHJlbGV2YW50IHRvIHVuZGVyc3RhbmRpbmcgc3BlY2lmaWMgYmVoYXZpb3JzLiBVbHRpbWF0ZWx5LCBleGFtaW5pbmcgdGhpcyBoZWFkZXIgaXMgY3J1Y2lhbCB0byBwcm9wZXJseSBncm9rIHRoZSB0ZXN0IHN0cmF0ZWd5IGFuZCBpdHMgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjY5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0NToyNy4yNTE1MDE0MjVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxODAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODAwOlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCBucl9yZWdpb25zX2V4cGVjdCk7XFxuMTgwMTpcXHRcXG4xODAyOlxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxuMTgwMzpcXHR9XFxuMTgwNDpcXHRcXG4xODA1OlxcdHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfYXBwbHlfbWluX25yX3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbjE4MDY6XFx0e1xcbjE4MDc6XFx0XFx0LyogY29tbW9uLCBleHBlY3RlZCBzZXR1cCAqL1xcbjE4MDg6XFx0XFx0ZGFtb25fdGVzdF9hcHBseV9taW5fbnJfcmVnaW9uc19mb3IodGVzdCwgMTAsIDEsIDEwLCAxLCAxMCk7XFxuMTgwOTpcXHRcXHQvKiBubyB6ZXJvIHNpemUgbGltaXQgKi9cXG4xODEwOlxcdFxcdGRhbW9uX3Rlc3RfYXBwbHlfbWluX25yX3JlZ2lvbnNfZm9yKHRlc3QsIDEwLCAxLCAxNSwgMSwgMTApO1xcbjE4MTE6XFx0XFx0LyogbWF4IHNpemUgc2hvdWxkIGJlIGFsaWduZWQgYnkgbWluX3JlZ2lvbl9zeiAqL1xcbjE4MTI6XFx0XFx0ZGFtb25fdGVzdF9hcHBseV9taW5fbnJfcmVnaW9uc19mb3IodGVzdCwgMTAsIDIsIDIsIDYsIDIpO1xcbjE4MTM6XFx0XFx0LypcXG4xODE0OlxcdFxcdCAqIHdoZW4gbWluX25yX3JlZ2lvbnMgYW5kIG1pbl9yZWdpb25fc3ogY29uZmxpY3RzLCBtaW5fcmVnaW9uX3N6IHdpbnMuXFxuMTgxNTpcXHRcXHQgKi9cXG4xODE2OlxcdFxcdGRhbW9uX3Rlc3RfYXBwbHlfbWluX25yX3JlZ2lvbnNfZm9yKHRlc3QsIDEwLCAyLCAxMCwgMiwgNSk7XFxuMTgxNzpcXHR9XFxuMTgxODpcXHRcXG4xODE5OlxcdHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfaXNfbGFzdF9yZWdpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxcbjE4MjA6XFx0e1xcbjE4MjE6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG4xODIyOlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuMTgyMzpcXHRcXHRpbnQgaTtcXG4xODI0OlxcdFxcbjE4MjU6XFx0XFx0dCA9IGRhbW9uX25ld190YXJnZXQoKTtcXG4xODI2OlxcdFxcdGlmICghdClcXG4xODI3OlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInRhcmdldCBhbGxvYyBmYWlsXFxcXG5cXFwiKTtcXG4xODI4OlxcdFxcbjE4Mjk6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDQ7IGkrKykge1xcbjE4MzA6XFx0XFx0XFx0ciA9IGRhbW9uX25ld19yZWdpb24oaSAqIDIsIChpICsgMSkgKiAyKTtcXG4xODMxOlxcdFxcdFxcdGlmICghcikge1xcbjE4MzI6XFx0XFx0XFx0XFx0ZGFtb25fZnJlZV90YXJnZXQodCk7XFxuMTgzMzpcXHRcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJyZWdpb24gYWxsb2MgJWQgZmFpbFxcXFxuXFxcIiwgaSk7XFxuMTgzNDpcXHRcXHRcXHR9XFxuMTgzNTpcXHRcXHRcXHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xcbjE4MzY6XFx0XFx0XFx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgZGFtb25faXNfbGFzdF9yZWdpb24ociwgdCkpO1xcbjE4Mzc6XFx0XFx0fVxcbjE4Mzg6XFx0XFx0ZGFtb25fZnJlZV90YXJnZXQodCk7XFxuMTgzOTpcXHR9XFxuMTg0MDpcXHRcXG4xODQxOlxcdC8qXFxuMTg0MjpcXHQgKiBWZXJpZnkgdGhhdCBkYW1vc193YWxrKCkgcmVqZWN0cyBuZXcgcmVxdWVzdHMgd2hlblxcbjE4NDM6XFx0ICogd2Fsa19jb250cm9sX29ic29sZXRlIGlzIHNldC5cXG4xODQ0OlxcdCAqXFxuMTg0NTpcXHQgKiBUaGlzIHRlc3RzIHRoZSBpbnZhcmlhbnQgaW50cm9kdWNlZCBieTpcXG4xODQ2OlxcdCAqIGNvbW1pdCAzM2MzZjZjMmI0OGMgKFxcXCJtbS9kYW1vbi9jb3JlOiBmaXggZGFtb3Nfd2FsaygpIHZzIGtkYW1vbmRfZm4oKSBleGl0IHJhY2VcXFwiKVxcbjE4NDc6XFx0ICovXFxuMTg0ODpcXHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuMTg0OTpcXHR7XFxuMTg1MDpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxuMTg1MTpcXHRcXHRzdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sIGNvbnRyb2wgPSB7fTtcXG4xODUyOlxcdFxcdGludCByZXQ7XFxuMTg1MzpcXHRcXG4xODU0OlxcdFxcdGN0eCA9IGRhbW9uX25ld19jdHgoKTtcXG4xODU1OlxcdFxcdGlmICghY3R4KVxcbjE4NTY6XFx0XFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwiY3R4IGFsbG9jIGZhaWxcXFwiKTtcXG4xODU3OlxcdFxcbjE4NTg6XFx0XFx0LyogU2ltdWxhdGUgc2h1dGRvd24gcGhhc2UgKi9cXG4xODU5OlxcdFxcdGN0eC1cXHUwMDNld2Fsa19jb250cm9sX29ic29sZXRlID0gdHJ1ZTtcXG4xODYwOlxcdFxcbjE4NjE6XFx0XFx0cmV0ID0gZGFtb3Nfd2FsayhjdHgsIFxcdTAwMjZjb250cm9sKTtcXG4xODYyOlxcdFxcbjE4NjM6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJldCwgLUVDQU5DRUxFRCk7XFxuMTg2NDpcXHRcXG4xODY1OlxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxuMTg2NjpcXHR9XFxuMTg2NzpcXHRcXG4xODY4OlxcdHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfcmFuZChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuMTg2OTpcXHR7XFxuMTg3MDpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4IGN0eDtcXG4xODcxOlxcdFxcdGludCBpO1xcbjE4NzI6XFx0XFxuMTg3MzpcXHRcXHRwcmFuZG9tX3NlZWRfc3RhdGUoXFx1MDAyNmN0eC5ybmRfc3RhdGUsIGdldF9yYW5kb21fdTY0KCkpO1xcbjE4NzQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDEwMDAwOyBpKyspIHtcXG4xODc1OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcm5kID0gZGFtb25fcmFuZChcXHUwMDI2Y3R4LCAwLCAxMCk7XFxuMTg3NjpcXHRcXG4xODc3OlxcdFxcdFxcdEtVTklUX0VYUEVDVF9HRSh0ZXN0LCBybmQsIDApO1xcbjE4Nzg6XFx0XFx0XFx0S1VOSVRfRVhQRUNUX0xFKHRlc3QsIHJuZCwgOSk7XFxuMTg3OTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ1OjI3LjI1MTY1NzUxNVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzk2NjA5MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgYW5hbHl6aW5nIHRoZSBzaXR1YXRpb246XG5cbioqUmV2aWV3aW5nIENvcmUgS1VuaXQgVGVzdCBEZWZpbml0aW9ucyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHJlc3Qgb2YgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIFRoaXMgbGlrZWx5IGNvbnRhaW5zIGNyaXRpY2FsIGRlZmluaXRpb25zIGZvciB0aGUgY29yZSBLVW5pdCB0ZXN0cyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykuIFVuZGVyc3RhbmRpbmcgdGhpcyBoZWFkZXIgZmlsZSBpcyBlc3NlbnRpYWwgZm9yIHNldmVyYWwgcmVhc29ucy4gSXQgY291bGQgZGV0YWlsIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBpbiB0aGVzZSBjb3JlIHRlc3RzLCBkZWZpbmUgbWFjcm9zIGZvciB0ZXN0IHNldHVwIGFuZCB0ZWFyZG93biwgb3Igc3BlY2lmeSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb3IgdGVzdGluZyBjb25kaXRpb25zIGZvciBzcGVjaWZpYyBEQU1PTiBmdW5jdGlvbmFsaXRpZXMuIEl0IG1pZ2h0IGV2ZW4gaW5jbHVkZSBpbmxpbmUgZnVuY3Rpb25zIG9yIGhlbHBlciByb3V0aW5lcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIHRoZSBLVW5pdCB0ZXN0cyB3aXRoaW4gdGhpcyBtb2R1bGUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIHNjb3BlIGFuZCBjb21wbGV4aXR5IG9mIHRoZSB0ZXN0cyBkZWZpbmVkIHdpdGhpbi4gSXQgaXMgdmVyeSBsaWtlbHkgdGhhdCB0aGlzIGhlYWRlciBjb250YWlucyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IGluY2x1ZGUvZXhjbHVkZSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgdGVzdGluZyBiYXNlZCBvbiBjb25maWd1cmF0aW9uLiBUaGlzIGNvdWxkIGJlIHJlbGV2YW50IHRvIHVuZGVyc3RhbmRpbmcgc3BlY2lmaWMgYmVoYXZpb3JzLiBVbHRpbWF0ZWx5LCBleGFtaW5pbmcgdGhpcyBoZWFkZXIgaXMgY3J1Y2lhbCB0byBwcm9wZXJseSBncm9rIHRoZSB0ZXN0IHN0cmF0ZWd5IGFuZCBpdHMgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjU2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0NToyOS42NDgyNjk1ODhaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxODgwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODgwOlxcdH1cXG4xODgxOlxcdFxcbjE4ODI6XFx0c3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHtcXG4xODgzOlxcdFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF90YXJnZXQpLFxcbjE4ODQ6XFx0XFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3JlZ2lvbnMpLFxcbjE4ODU6XFx0XFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2FnZ3JlZ2F0ZSksXFxuMTg4NjpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc3BsaXRfYXQpLFxcbjE4ODc6XFx0XFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X21lcmdlX3R3byksXFxuMTg4ODpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbWVyZ2VfcmVnaW9uc19vZiksXFxuMTg4OTpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc3BsaXRfcmVnaW9uc19vZiksXFxuMTg5MDpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc3BsaXRfYWJvdmVfaGFsZl9wcm9ncmVzc2VzKSxcXG4xODkxOlxcdFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9vcHNfcmVnaXN0cmF0aW9uKSxcXG4xODkyOlxcdFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zZXRfcmVnaW9ucyksXFxuMTg5MzpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdnciksXFxuMTg5NDpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KSxcXG4xODk1OlxcdFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zZXRfYXR0cnMpLFxcbjE4OTY6XFx0XFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X212c3VtKSxcXG4xODk3OlxcdFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9ucl9hY2Nlc3Nlc19tdnN1bSksXFxuMTg5ODpcXHRcXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfbmV3X2ZpbHRlciksXFxuMTg5OTpcXHRcXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWwpLFxcbjE5MDA6XFx0XFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FscyksXFxuMTkwMTpcXHRcXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhKSxcXG4xOTAyOlxcdFxcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfZGVzdHMpLFxcbjE5MDM6XFx0XFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9maWx0ZXIpLFxcbjE5MDQ6XFx0XFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9wYWdlb3V0KSxcXG4xOTA1OlxcdFxcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfbWlncmF0ZV9ob3QpLFxcbjE5MDY6XFx0XFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9ucyksXFxuMTkwNzpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlciksXFxuMTkwODpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X3Byb2JlcyksXFxuMTkwOTpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X2N0eCksXFxuMTkxMDpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdmFsaWRfcHJvYmVfcGFyYW1zKSxcXG4xOTExOlxcdFxcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9maWx0ZXJfb3V0KSxcXG4xOTEyOlxcdFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9mZWVkX2xvb3BfbmV4dF9pbnB1dCksXFxuMTkxMzpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QpLFxcbjE5MTQ6XFx0XFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2FwcGx5X21pbl9ucl9yZWdpb25zKSxcXG4xOTE1OlxcdFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9pc19sYXN0X3JlZ2lvbiksXFxuMTkxNjpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfd2Fsa19jb250cm9sX29ic29sZXRlKSxcXG4xOTE3OlxcdFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9yYW5kKSxcXG4xOTE4OlxcdFxcdHt9LFxcbjE5MTk6XFx0fTtcXG4xOTIwOlxcdFxcbjE5MjE6XFx0c3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBkYW1vbl90ZXN0X3N1aXRlID0ge1xcbjE5MjI6XFx0XFx0Lm5hbWUgPSBcXFwiZGFtb25cXFwiLFxcbjE5MjM6XFx0XFx0LnRlc3RfY2FzZXMgPSBkYW1vbl90ZXN0X2Nhc2VzLFxcbjE5MjQ6XFx0fTtcXG4xOTI1OlxcdGt1bml0X3Rlc3Rfc3VpdGUoZGFtb25fdGVzdF9zdWl0ZSk7XFxuMTkyNjpcXHRcXG4xOTI3OlxcdCNlbmRpZiAvKiBfREFNT05fQ09SRV9URVNUX0ggKi9cXG4xOTI4OlxcdFxcbjE5Mjk6XFx0I2VuZGlmXFx0LyogQ09ORklHX0RBTU9OX0tVTklUX1RFU1QgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDU6MjkuNjQ4NDA1MzY4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgxNjMxMjk2NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJpYWdlIERlY2lzaW9uOiBOb24tRnV6emFibGUgS1VuaXQgVGVzdCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGFmZmVjdHMgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAsIHNwZWNpZmljYWxseSB0aGUgYGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdncmAgdW5pdCB0ZXN0IGZ1bmN0aW9uLCBhbmQgb25seSB0aGF0LiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBzbyBJJ20gZG91YmxlLWNoZWNraW5nIHRoZSBnaXQgZGlmZiDigJMgbm90aGluZyBlbHNlIHdhcyB0b3VjaGVkIGluIHRoaXMgY29tbWl0LiBHb29kLlxuXG5Ob3csIGxldCdzIGFwcGx5IG15IGV4cGVydGlzZSBhbmQgd2FsayB0aHJvdWdoIHRoZSB0cmlhZ2UgcGhpbG9zb3BoeS4gU3BlY2lmaWNhbGx5LCBzZWN0aW9uIDI6IHRoZSAqbmVnYXRpdmUgY3JpdGVyaWEqIGZvciByZXR1cm5pbmcgV29ydGhGdXp6aW5nPWZhbHNlLiBUaGlzIGlzIGEgY3J1Y2lhbCBzdGVwIHRvIGF2b2lkIHdhc3RpbmcgcmVzb3VyY2VzLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgZmFsbHMgdW5kZXIgdGhlIGNhdGVnb3J5IG9mIGNvZGUgdGhhdCAqaXNuJ3QqIHJlYWNoYWJsZSB2aWEgc3lzY2FsbCBmdXp6aW5nLCB3aGljaCBpcyB3aGF0IFN5emthbGxlciBkb2VzLiBBcmUgS1VuaXQgdGVzdHMgY29uc2lkZXJlZCBcInRlc3QgY29kZSB0aGF0IGlzIG5vdCByZWFjaGFibGUgdmlhIHN5c2NhbGwgZnV6emluZ1wiPyBBbmQsIGFyZSB0aGV5IHJlYWNoYWJsZSBieSBTeXprYWxsZXIgYXQgYWxsPyBLVW5pdCB0ZXN0cyBydW4gZWl0aGVyIGR1cmluZyBrZXJuZWwgYm9vdCB3aGVuIGJ1aWx0LWluLCBvciB3aGVuIGxvYWRlZCBhcyBhIG1vZHVsZSAvIHRyaWdnZXJlZCB2aWEgZGVidWdmcy9rdW5pdC4gU3l6a2FsbGVyIGlzIGEgc3lzY2FsbCBmdXp6ZXIgdGhhdCBmdXp6ZXMgc3lzY2FsbCBpbnRlcmZhY2VzIGFuZCBrZXJuZWwgZnVuY3Rpb25hbGl0eSBkdXJpbmcgbm9ybWFsIHJ1bnRpbWUuIEtVbml0IHRlc3QgY2FzZXMgYXJlIHVuaXQgdGVzdHMgKGxpa2Ugc2VsZnRlc3RzL2t1bml0KSwgbm90IHBhcnQgb2YgcnVudGltZSBvcGVyYXRpb25hbCBrZXJuZWwgbG9naWMgb3IgaW50ZXJmYWNlcy5cblxuTG9va2luZyBhdCB0aGUgZ3VpZGVsaW5lcywgSSBjYW4ndCBmaW5kIGFueXRoaW5nIGFib3V0IEtVbml0IHRlc3Qgc3BlY2lmaWNhbGx5LiBMZXQncyBzZWU6XG5cbiogICBJdCdzIG5vdCBub24ta2VybmVsIG9yIG5vbi1leGVjdXRhYmxlIGNoYW5nZXMgKGV4Y2VwdCBmb3IgdGVzdCBjb2RlLilcbiogICBJdCdzIG5vdCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuXG4qICAgSXQncyBub3QgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLlxuXG5CdXQ6XG5cbiogICBUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLCBhbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuKiAgIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOiBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuVGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyBhIEtVbml0IHVuaXQgdGVzdCBmdW5jdGlvbi4gSXQgZG9lcyBub3QgdG91Y2ggYW55IGtlcm5lbCBsb2dpYywgdGhlIERBTU9OIGNvcmUgaW1wbGVtZW50YXRpb24gKHRoZSBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAgZnVuY3Rpb24gKml0c2VsZiogd2Fzbid0IG1vZGlmaWVkKSwgb3Igc3lzY2FsbHMsIG9yIGRyaXZlcnMsIG9yIGFueSBydW50aW1lIGV4ZWN1dGFibGUgY29kZS4gVGhlc2UgS1VuaXQgdGVzdHMgYXJlIHNlbGYtY29udGFpbmVkIGFuZCBub3QgZXhwb3NlZCB0byBzeXNjYWxsIGZ1enppbmcuIEtVbml0IHRlc3RzIGFyZSBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gdGVzdCB1bml0cyBvZiBjb2RlIGluIGlzb2xhdGlvbiBhbmQgZG8gbm90IGFmZmVjdCBydW50aW1lIGtlcm5lbCBiZWhhdmlvci5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGlzIHBhdGNoIGlzIHN0cmljdGx5IG1vZGlmeWluZyBhIHVuaXQgdGVzdCAoS1VuaXQgdGVzdCBzdWl0ZSkgYW5kIG5vdCBhZmZlY3RpbmcgYW55IHJ1bnRpbWUga2VybmVsIGxvZ2ljIG9yIHN5c2NhbGwgaW50ZXJmYWNlcywgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmcgPSBmYWxzZWAuXG5cblNvLCB0aGUgcmVhc29uaW5nIGlzIGNvbmNpc2U6IFRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtVbml0IHVuaXQgdGVzdHMgKGBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3JgIGluIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgKSBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IHJ1bnRpbWUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBzeXNjYWxsIGludGVyZmFjZXMuIE5vIGZ1enppbmcgcmVxdWlyZWQuIE5vdywgSSB3aWxsIGBpbnZva2Ugc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzUzMCwiT3V0cHV0VG9rZW5zIjo5NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0NTozNy44MTE1MzcyNTRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IHVwZGF0ZXMgdGVzdCBhc3NlcnRpb25zIGFuZCBjYXNlcyBpbiB0aGUgS1VuaXQgdGVzdCBzdWl0ZSAoZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyIGluIG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCkuIEl0IGRvZXMgbm90IG1vZGlmeSBhbnkgREFNT04gY29yZSBydW50aW1lIGxvZ2ljLCBkcml2ZXJzLCBvciBzeXNjYWxsLXJlYWNoYWJsZSBrZXJuZWwgZXhlY3V0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSB1cGRhdGVzIHRlc3QgYXNzZXJ0aW9ucyBhbmQgY2FzZXMgaW4gdGhlIEtVbml0IHRlc3Qgc3VpdGUgKGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdnciBpbiBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgpLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IERBTU9OIGNvcmUgcnVudGltZSBsb2dpYywgZHJpdmVycywgb3Igc3lzY2FsbC1yZWFjaGFibGUga2VybmVsIGV4ZWN1dGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ1OjM3LjgxMTU2MTcyNFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowq9sq5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 06:41:30 +0000 UTC FinishedAt: 2026-09-08 06:45:39 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSB1cGRhdGVzIHRlc3QgYXNzZXJ0aW9ucyBhbmQgY2FzZXMgaW4gdGhlIEtVbml0IHRlc3Qgc3VpdGUgKGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdnciBpbiBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgpLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IERBTU9OIGNvcmUgcnVudGltZSBsb2dpYywgZHJpdmVycywgb3Igc3lzY2FsbC1yZWFjaGFibGUga2VybmVsIGV4ZWN1dGlvbiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0YjVmNTVhNTQ0NjEyY2RjZGQ0MGQwOWVlNjY2OWI3OTgxMWM2NjdkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwNjo0MzozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbmluZGV4IGMwMWU2YTc1Y2FkYzEuLmZmMjMyMDhjMTgxMzkgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuQEAgLTYyNywxMiAmIzQzOzYyNywyMCBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcbiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3Ioc3RydWN0IGt1bml0ICp0ZXN0KVxuIHtcbi1cdHN0cnVjdCBkYW1vbl9hdHRycyBhdHRycyA9IHtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fYXR0cnMgYXR0cnM7XG4mIzQzO1xuJiM0MztcdC8qIFplcm8gc2FtcGxlIGludGVydmFsIGlzIHRyZWF0ZWQgYXMgb25lLiAqL1xuJiM0MztcdGF0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7XG4gXHRcdC5zYW1wbGVfaW50ZXJ2YWwgPSAwLFxuLVx0XHQuYWdncl9pbnRlcnZhbCA9IDAsXG4mIzQzO1x0XHQuYWdncl9pbnRlcnZhbCA9IDUwMDAsXG4gXHR9O1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmF0dHJzKSwgNTAwMCk7XG4gXG4tXHQvKiBaZXJvIGFnZ3JlZ2F0aW9uIGludGVydmFsIGRvZXNuJiMzOTt0IGNhdXNlIGRpdmlzaW9uIGJ5IHplcm8gKi9cbiYjNDM7XHQvKiBaZXJvIHNhbXBsZXMgcGVyIGFnZ3JlZ2F0aW9uIGlzIHRyZWF0ZWQgYXMgb25lLiAqL1xuJiM0MztcdGF0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7XG4mIzQzO1x0XHQuc2FtcGxlX2ludGVydmFsID0gNTAwMCxcbiYjNDM7XHRcdC5hZ2dyX2ludGVydmFsID0gMCxcbiYjNDM7XHR9O1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2YXR0cnMpLCAxKTtcbiBcbiBcdC8qXG5AQCAtNjQwLDcgJiM0Mzs2NDgsMTAgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdCAqIG92ZXJmbG93XG4gXHQgKi9cbiBcdGlmIChVTE9OR19NQVggXHUwMDNlIFVJTlRfTUFYKSB7XG4tXHRcdGF0dHJzLmFnZ3JfaW50ZXJ2YWwgPSAodW5zaWduZWQgbG9uZylVSU5UX01BWCAmIzQzOyAxO1xuJiM0MztcdFx0YXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcbiYjNDM7XHRcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEsXG4mIzQzO1x0XHRcdC5hZ2dyX2ludGVydmFsID0gKHVuc2lnbmVkIGxvbmcpVUlOVF9NQVggJiM0MzsgMSxcbiYjNDM7XHRcdH07XG4gXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmF0dHJzKSxcbiBcdFx0XHRcdFVJTlRfTUFYKTtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IHVwZGF0ZXMgdGVzdCBhc3NlcnRpb25zIGFuZCBjYXNlcyBpbiB0aGUgS1VuaXQgdGVzdCBzdWl0ZSAoZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyIGluIG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCkuIEl0IGRvZXMgbm90IG1vZGlmeSBhbnkgREFNT04gY29yZSBydW50aW1lIGxvZ2ljLCBkcml2ZXJzLCBvciBzeXNjYWxsLXJlYWNoYWJsZSBrZXJuZWwgZXhlY3V0aW9uIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRiNWY1NWE1NDQ2MTJjZGNkZDQwZDA5ZWU2NjY5Yjc5ODExYzY2N2QKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDA2OjQzOjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCmluZGV4IGMwMWU2YTc1Y2FkYzEuLmZmMjMyMDhjMTgxMzkgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKQEAgLTYyNywxMiAmIzQzOzYyNywyMCBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdCkKIAogc3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyKHN0cnVjdCBrdW5pdCAqdGVzdCkKIHsKLQlzdHJ1Y3QgZGFtb25fYXR0cnMgYXR0cnMgPSB7CiYjNDM7CXN0cnVjdCBkYW1vbl9hdHRycyBhdHRyczsKJiM0MzsKJiM0MzsJLyogWmVybyBzYW1wbGUgaW50ZXJ2YWwgaXMgdHJlYXRlZCBhcyBvbmUuICovCiYjNDM7CWF0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7CiAJCS5zYW1wbGVfaW50ZXJ2YWwgPSAwLAotCQkuYWdncl9pbnRlcnZhbCA9IDAsCiYjNDM7CQkuYWdncl9pbnRlcnZhbCA9IDUwMDAsCiAJfTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoJmFtcDthdHRycyksIDUwMDApOwogCi0JLyogWmVybyBhZ2dyZWdhdGlvbiBpbnRlcnZhbCBkb2VzbiYjMzk7dCBjYXVzZSBkaXZpc2lvbiBieSB6ZXJvICovCiYjNDM7CS8qIFplcm8gc2FtcGxlcyBwZXIgYWdncmVnYXRpb24gaXMgdHJlYXRlZCBhcyBvbmUuICovCiYjNDM7CWF0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7CiYjNDM7CQkuc2FtcGxlX2ludGVydmFsID0gNTAwMCwKJiM0MzsJCS5hZ2dyX2ludGVydmFsID0gMCwKJiM0MzsJfTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncigmYW1wO2F0dHJzKSwgMSk7CiAKIAkvKgpAQCAtNjQwLDcgJiM0Mzs2NDgsMTAgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyKHN0cnVjdCBrdW5pdCAqdGVzdCkKIAkgKiBvdmVyZmxvdwogCSAqLwogCWlmIChVTE9OR19NQVggJmd0OyBVSU5UX01BWCkgewotCQlhdHRycy5hZ2dyX2ludGVydmFsID0gKHVuc2lnbmVkIGxvbmcpVUlOVF9NQVggJiM0MzsgMTsKJiM0MzsJCWF0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7CiYjNDM7CQkJLnNhbXBsZV9pbnRlcnZhbCA9IDEsCiYjNDM7CQkJLmFnZ3JfaW50ZXJ2YWwgPSAodW5zaWduZWQgbG9uZylVSU5UX01BWCAmIzQzOyAxLAomIzQzOwkJfTsKIAkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoJmFtcDthdHRycyksCiAJCQkJVUlOVF9NQVgpOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIxOQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBhIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdG8gcmV2aWV3LiBNeSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gdGhlIG1vZGlmaWVkIGZpbGUg4oCTIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBJbW1lZGlhdGVseSwgSeKAmW0gdGhpbmtpbmcgYWJvdXQgd2hhdCBgZGFtb25gIGlzIOKAkyBEeW5hbWljIEFkZHJlc3MgTU9OaXRvciDigJMgYW5kIHRoYXQgdGhpcyBpcyByZWxhdGVkIHRvIGtlcm5lbCB0ZXN0aW5nLiBUaGlzIG5hcnJvd3MgbXkgZm9jdXMuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogb2YgdGhpcyBtb2RpZmljYXRpb24uIEJlZm9yZSBkaWdnaW5nIGludG8gdGhlIGNvZGUgbGluZS1ieS1saW5lLCBJJiMzOTtsbCBuZWVkIHRvIGVzdGFibGlzaCBzb21lIGNvbnRleHQuIEEgcXVpY2sgYGdyZXBgIG9yIGZpbGUgcmVhZCB3aWxsIGdpdmUgbWUgdGhlIHN1cnJvdW5kaW5nIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYyMDpcdFx0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXt9LCAwLFxuIDYyMTpcdFx0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXtcbiA2MjI6XHRcdFx0XHR7LnN0YXJ0ID0gMTAsIC5lbmQgPSAyMH0sXG4gNjIzOlx0XHRcdFx0ey5zdGFydCA9IDIwLCAuZW5kID0gMzB9LFxuIDYyNDpcdFx0XHRcdH0sIDIsIDQwOTYsXG4gNjI1Olx0XHRcdFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsIC1FSU5WQUwpO1xuIDYyNjpcdH1cbiA2Mjc6XHRcbiA2Mjg6XHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3Ioc3RydWN0IGt1bml0ICp0ZXN0KVxuIDYyOTpcdHtcbiA2MzA6XHRcdHN0cnVjdCBkYW1vbl9hdHRycyBhdHRycztcbiA2MzE6XHRcbiA2MzI6XHRcdC8qIFplcm8gc2FtcGxlIGludGVydmFsIGlzIHRyZWF0ZWQgYXMgb25lLiAqL1xuIDYzMzpcdFx0YXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcbiA2MzQ6XHRcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDAsXG4gNjM1Olx0XHRcdC5hZ2dyX2ludGVydmFsID0gNTAwMCxcbiA2MzY6XHRcdH07XG4gNjM3Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcdTAwMjZhdHRycyksIDUwMDApO1xuIDYzODpcdFxuIDYzOTpcdFx0LyogWmVybyBzYW1wbGVzIHBlciBhZ2dyZWdhdGlvbiBpcyB0cmVhdGVkIGFzIG9uZS4gKi9cbiA2NDA6XHRcdGF0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7XG4gNjQxOlx0XHRcdC5zYW1wbGVfaW50ZXJ2YWwgPSA1MDAwLFxuIDY0MjpcdFx0XHQuYWdncl9pbnRlcnZhbCA9IDAsXG4gNjQzOlx0XHR9O1xuIDY0NDpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2YXR0cnMpLCAxKTtcbiA2NDU6XHRcbiA2NDY6XHRcdC8qXG4gNjQ3Olx0XHQgKiBUb28gbGFyZ2UgYWdncmVnYXRpb24gaW50ZXJ2YWwgb24gNjQgYml0IHN5c3RlbSBkb2VzbiYjMzk7dCBjYXVzZVxuIDY0ODpcdFx0ICogb3ZlcmZsb3dcbiA2NDk6XHRcdCAqL1xuIDY1MDpcdFx0aWYgKFVMT05HX01BWCBcdTAwM2UgVUlOVF9NQVgpIHtcbiA2NTE6XHRcdFx0YXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcbiA2NTI6XHRcdFx0XHQuc2FtcGxlX2ludGVydmFsID0gMSxcbiA2NTM6XHRcdFx0XHQuYWdncl9pbnRlcnZhbCA9ICh1bnNpZ25lZCBsb25nKVVJTlRfTUFYICYjNDM7IDEsXG4gNjU0Olx0XHRcdH07XG4gNjU1Olx0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmF0dHJzKSxcbiA2NTY6XHRcdFx0XHRcdFVJTlRfTUFYKTtcbiA2NTc6XHRcdH1cbiA2NTg6XHR9XG4gNjU5Olx0XG4gNjYwOlx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KVxuIDY2MTpcdHtcbiA2NjI6XHRcdHN0cnVjdCBkYW1vbl9hdHRycyBvbGRfYXR0cnMgPSB7XG4gNjYzOlx0XHRcdC5zYW1wbGVfaW50ZXJ2YWwgPSAxMCwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwLH07XG4gNjY0Olx0XHRzdHJ1Y3QgZGFtb25fYXR0cnMgbmV3X2F0dHJzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxOTEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byB0aGUgYGNvcmUta3VuaXQuaGAgTXlzdGVyeSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB3aGF0JiMzOTtzIHRoaXMgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAgZmlsZSBhbGwgYWJvdXQ/IFRoZSBwYXRoIHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIERBTU9OIG1lbW9yeSBtYW5hZ2VtZW50IGZyYW1ld29yaywgYnV0IHRoYXQmIzM5O3MganVzdCBhIGd1ZXNzIGJhc2VkIG9uIHRoZSBmaWxlIHBhdGguIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGZpbGUgYWN0dWFsbHkgYSBLVW5pdCB1bml0IHRlc3Q/IFRoYXQgd291bGQgYmUgdXNlZnVsIHRvIGRldGVybWluZSBob3cgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBvZiBEQU1PTiBpcyBiZWluZyB0ZXN0ZWQuIFRpbWUgdG8gcXVpY2tseSB2ZXJpZnkgaWYgaXQgZm9sbG93cyB0aGUgS1VuaXQgdGVzdGluZyBmcmFtZXdvcmsgY29udmVudGlvbnMuIElmIHNvLCB0aGF0JiMzOTtzIGdvb2QgbmV3cyDigJMgaXQgc3VnZ2VzdHMgcm9idXN0IHRlc3Rpbmcgb2YgdGhlIGNvcmUgREFNT04gZnVuY3Rpb25hbGl0eS4KCk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZmlsZSBpcyBiZWluZyBpbmNsdWRlZCBpbiB0aGUgcmVzdCBvZiB0aGUgcHJvamVjdC4gV2hlcmUgdGhpcyBoZWFkZXIgaXMgcmVmZXJlbmNlZCB3aWxsIGdpdmUgY2x1ZXMgdG8gdGhlIHBhcnRzIG9mIERBTU9OIGl0JiMzOTtzIHRlc3RpbmcuIEV4YW1pbmluZyB0aGUgaW5jbHVzaW9ucyB3aWxsIGluZGljYXRlIHdoaWNoIGNvbXBvbmVudHMgcmVseSBvbiB0aGVzZSB0ZXN0cywgYW5kLCBlcXVhbGx5IGltcG9ydGFudCwgaG93IHRoZXkmIzM5O3JlIHRlc3RlZC4gS25vd2luZyBpdHMgZGVwZW5kZW5jaWVzIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSB0ZXN0JiMzOTtzIHNjb3BlIGFuZCBpdHMgaW1wb3J0YW5jZSBpbiBlbnN1cmluZyB0aGUgc3RhYmlsaXR5IGFuZCBjb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUgZW50aXJlIERBTU9OIHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3JlLWt1bml0LmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTQxNzg9c3Vic3lzX2luaXRjYWxsKGRhbW9uX2luaXQpO1xubW0vZGFtb24vY29yZS5jLTQxNzktXG5tbS9kYW1vbi9jb3JlLmM6NDE4MDojaW5jbHVkZSBcJiMzNDt0ZXN0cy9jb3JlLWt1bml0LmhcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTg5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emFiaWxpdHkgb2YgS1VuaXQgVGVzdHMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHRyaWFnZSBwaGlsb3NvcGh5IGFuZCBzZWUgaWYgdGhpcyBLVW5pdCB0ZXN0IGNvZGUgZmFsbHMgdW5kZXIgdGhlICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgY3JpdGVyaWEuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGF0IFNlY3Rpb24gMiwgd2hpY2ggb3V0bGluZXMgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhOiB3aGVuIGEgcGF0Y2ggKnNob3VsZG4mIzM5O3QqIGJlIGZ1enplZC4gVGhlIGtleSBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgbm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUuCgpGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIGRlZmluaXRpb24gb2Ygbm9uLWV4ZWN1dGFibGUgY2hhbmdlcywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUga2VybmVsIGltYWdlIG9yIG1vZHVsZXMuIEkga25vdyB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIHNwZWxsaW5nIGZpeGVzLCB1c2VyLXNwYWNlIHRvb2xzLCBzYW1wbGVzIG9yIHNjcmlwdHMsIGFuZCBkZWNvcmF0aXZlIGxvZ2dpbmcgZ2VuZXJhbGx5IGZhbGwgaW50byB0aGlzIGNhdGVnb3J5LiBOb3cgdGhlIHJlYWwgcXVlc3Rpb246IGFyZSBLVW5pdCB0ZXN0cyB0cmVhdGVkIHRoZSBzYW1lIHdheT8gQXJlIHRoZXkgZnV6emFibGUgdGVzdCBjb2RlPwoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXM6IGhvdyBkb2VzIHN5emthbGxlciBoYW5kbGUgS1VuaXQgdGVzdHM/IEFyZSB0aGVzZSBjb25zaWRlcmVkIGp1c3QgdGVzdCBzdWl0ZXMgYW5kIGV4Y2x1ZGVkPyBJIG5lZWQgdG8gY2xhcmlmeSBpZiBzeXprYWxsZXIgdGFyZ2V0cyBLVW5pdCB0ZXN0cywgb3IgaWYgdGhleSBhcmUgc2tpcHBlZCBkdXJpbmcgaXRzIHN5c2NhbGwgZnV6emluZyBydW5zLiBUaGUgdHJpYWdlIGd1aWRlbGluZXMgZW1waGFzaXplIHJlYWNoYWJpbGl0eSBhbmQgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBjb2RlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQ2FuIHN5emthbGxlciB0cmlnZ2VyIEtVbml0IHRlc3RzIGR1cmluZyBpdHMgc3lzY2FsbCBmdXp6aW5nPwoKSSBuZWVkIHRvIHJlLXJlYWQgdGhlIHRyaWFnZSBndWlkZWxpbmVzIHRvIGVuc3VyZSBJIGRvbiYjMzk7dCBvdmVybG9vayBhbnkgc3VidGxldGllcy4gVGhlIGdvYWwgaXMgdG8gY2F0Y2ggY3Jhc2hlcywgcmVncmVzc2lvbnMsIG9yIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zLiBUaGUgbWFpbiBnYXRlIGlzIHJlYWNoYWJpbGl0eS4gSWYgdGhlIGNvZGUgaXMgbm90IHN0cnVjdHVyYWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSksIGl0IHNob3VsZCBub3QgYmUgZnV6emVkLiBCdXQgYXJlIEtVbml0IHRlc3RzLCBhbmQgdGVzdCBjb2RlIGZ1enphYmxlPwoKU28sIGNhbiBzeXprYWxsZXIgZGlyZWN0bHkgaW52b2tlIEtVbml0IHRlc3QgZnVuY3Rpb25zLCBsaWtlIHRoZSBvbmUgSSYjMzk7bSB0aGlua2luZyBvZiwgYGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdncmA/IFRvIGFuc3dlciB0aGF0LCBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbW0vZGFtb24vY29yZS5jYCBhcm91bmQgbGluZSA0MTgwLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBzdGVwIHRvIGNsYXJpZnkgdGhlIHJlYWNoYWJpbGl0eSBhbmQgdGhlIGV4ZWN1dGFibGUgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQxNzA6XHRcdGlmICh1bmxpa2VseSghZGFtb25fcmVnaW9uX2NhY2hlKSkge1xuNDE3MTpcdFx0XHRwcl9lcnIoXCYjMzQ7Y3JlYXRpbmcgZGFtb25fcmVnaW9uX2NhY2hlIGZhaWxzXFxuXCYjMzQ7KTtcbjQxNzI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG40MTczOlx0XHR9XG40MTc0Olx0XG40MTc1Olx0XHRyZXR1cm4gMDtcbjQxNzY6XHR9XG40MTc3Olx0XG40MTc4Olx0c3Vic3lzX2luaXRjYWxsKGRhbW9uX2luaXQpO1xuNDE3OTpcdFxuNDE4MDpcdCNpbmNsdWRlIFwmIzM0O3Rlc3RzL2NvcmUta3VuaXQuaFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MzQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgYW5hbHl6aW5nIHRoZSBzaXR1YXRpb246CgoqKlJldmlld2luZyBDb3JlIEtVbml0IFRlc3QgRGVmaW5pdGlvbnMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgcmVzdCBvZiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gVGhpcyBsaWtlbHkgY29udGFpbnMgY3JpdGljYWwgZGVmaW5pdGlvbnMgZm9yIHRoZSBjb3JlIEtVbml0IHRlc3RzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKS4gVW5kZXJzdGFuZGluZyB0aGlzIGhlYWRlciBmaWxlIGlzIGVzc2VudGlhbCBmb3Igc2V2ZXJhbCByZWFzb25zLiBJdCBjb3VsZCBkZXRhaWwgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIGluIHRoZXNlIGNvcmUgdGVzdHMsIGRlZmluZSBtYWNyb3MgZm9yIHRlc3Qgc2V0dXAgYW5kIHRlYXJkb3duLCBvciBzcGVjaWZ5IHRoZSBleHBlY3RlZCBiZWhhdmlvciBvciB0ZXN0aW5nIGNvbmRpdGlvbnMgZm9yIHNwZWNpZmljIERBTU9OIGZ1bmN0aW9uYWxpdGllcy4gSXQgbWlnaHQgZXZlbiBpbmNsdWRlIGlubGluZSBmdW5jdGlvbnMgb3IgaGVscGVyIHJvdXRpbmVzIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGhlIEtVbml0IHRlc3RzIHdpdGhpbiB0aGlzIG1vZHVsZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIHNjb3BlIGFuZCBjb21wbGV4aXR5IG9mIHRoZSB0ZXN0cyBkZWZpbmVkIHdpdGhpbi4gSXQgaXMgdmVyeSBsaWtlbHkgdGhhdCB0aGlzIGhlYWRlciBjb250YWlucyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IGluY2x1ZGUvZXhjbHVkZSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgdGVzdGluZyBiYXNlZCBvbiBjb25maWd1cmF0aW9uLiBUaGlzIGNvdWxkIGJlIHJlbGV2YW50IHRvIHVuZGVyc3RhbmRpbmcgc3BlY2lmaWMgYmVoYXZpb3JzLiBVbHRpbWF0ZWx5LCBleGFtaW5pbmcgdGhpcyBoZWFkZXIgaXMgY3J1Y2lhbCB0byBwcm9wZXJseSBncm9rIHRoZSB0ZXN0IHN0cmF0ZWd5IGFuZCBpdHMgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NjA6XHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gNjYxOlx0e1xuIDY2MjpcdFx0c3RydWN0IGRhbW9uX2F0dHJzIG9sZF9hdHRycyA9IHtcbiA2NjM6XHRcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEwLCAuYWdncl9pbnRlcnZhbCA9IDEwMDAsfTtcbiA2NjQ6XHRcdHN0cnVjdCBkYW1vbl9hdHRycyBuZXdfYXR0cnM7XG4gNjY1Olx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyID0gZGFtb25fbmV3X3JlZ2lvbigzLCA3KTtcbiA2NjY6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbiA2Njc6XHRcbiA2Njg6XHRcdGlmICghcilcbiA2Njk6XHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtyZWdpb24gYWxsb2MgZmFpbFwmIzM0Oyk7XG4gNjcwOlx0XHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XG4gNjcxOlx0XHRpZiAoIWN0eCkge1xuIDY3MjpcdFx0XHRkYW1vbl9mcmVlX3JlZ2lvbihyKTtcbiA2NzM6XHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtjdHggYWxsb2MgZmFpbFwmIzM0Oyk7XG4gNjc0Olx0XHR9XG4gNjc1Olx0XG4gNjc2Olx0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gMTU7XG4gNjc3Olx0XHRyLVx1MDAzZWFnZSA9IDIwO1xuIDY3ODpcdFxuIDY3OTpcdFx0bmV3X2F0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7XG4gNjgwOlx0XHRcdC5zYW1wbGVfaW50ZXJ2YWwgPSAxMDAsIC5hZ2dyX2ludGVydmFsID0gMTAwMDAsfTtcbiA2ODE6XHRcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCBcdTAwMjZvbGRfYXR0cnMsIFx1MDAyNm5ld19hdHRycywgZmFsc2UsIGN0eCk7XG4gNjgyOlx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vucl9hY2Nlc3NlcywgMTUpO1xuIDY4MzpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYWdlLCAyKTtcbiA2ODQ6XHRcbiA2ODU6XHRcdG5ld19hdHRycyA9IChzdHJ1Y3QgZGFtb25fYXR0cnMpe1xuIDY4NjpcdFx0XHQuc2FtcGxlX2ludGVydmFsID0gMSwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwfTtcbiA2ODc6XHRcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCBcdTAwMjZvbGRfYXR0cnMsIFx1MDAyNm5ld19hdHRycywgZmFsc2UsIGN0eCk7XG4gNjg4Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vucl9hY2Nlc3NlcywgMTUwKTtcbiA2ODk6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFnZSwgMik7XG4gNjkwOlx0XG4gNjkxOlx0XHRuZXdfYXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcbiA2OTI6XHRcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEsIC5hZ2dyX2ludGVydmFsID0gMTAwfTtcbiA2OTM6XHRcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCBcdTAwMjZvbGRfYXR0cnMsIFx1MDAyNm5ld19hdHRycywgZmFsc2UsIGN0eCk7XG4gNjk0Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vucl9hY2Nlc3NlcywgMTUwKTtcbiA2OTU6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFnZSwgMjApO1xuIDY5NjpcdFxuIDY5NzpcdFx0ZGFtb25fZnJlZV9yZWdpb24ocik7XG4gNjk4Olx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuIDY5OTpcdH1cbiA3MDA6XHRcbiA3MDE6XHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9hdHRycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gNzAyOlx0e1xuIDcwMzpcdFx0c3RydWN0IGRhbW9uX2N0eCAqYyA9IGRhbW9uX25ld19jdHgoKTtcbiA3MDQ6XHRcdHN0cnVjdCBkYW1vbl9hdHRycyB2YWxpZF9hdHRycyA9IHtcbiA3MDU6XHRcdFx0Lm1pbl9ucl9yZWdpb25zID0gMTAsIC5tYXhfbnJfcmVnaW9ucyA9IDEwMDAsXG4gNzA2Olx0XHRcdC5zYW1wbGVfaW50ZXJ2YWwgPSA1MDAwLCAuYWdncl9pbnRlcnZhbCA9IDEwMDAwMCx9O1xuIDcwNzpcdFx0c3RydWN0IGRhbW9uX2F0dHJzIGludmFsaWRfYXR0cnM7XG4gNzA4Olx0XG4gNzA5Olx0XHRpZiAoIWMpXG4gNzEwOlx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7Y3R4IGFsbG9jIGZhaWxcJiMzNDspO1xuIDcxMTpcdFxuIDcxMjpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NldF9hdHRycyhjLCBcdTAwMjZ2YWxpZF9hdHRycyksIDApO1xuIDcxMzpcdFxuIDcxNDpcdFx0aW52YWxpZF9hdHRycyA9IHZhbGlkX2F0dHJzO1xuIDcxNTpcdFx0aW52YWxpZF9hdHRycy5taW5fbnJfcmVnaW9ucyA9IDE7XG4gNzE2Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFx1MDAyNmludmFsaWRfYXR0cnMpLCAtRUlOVkFMKTtcbiA3MTc6XHRcbiA3MTg6XHRcdGludmFsaWRfYXR0cnMgPSB2YWxpZF9hdHRycztcbiA3MTk6XHRcdGludmFsaWRfYXR0cnMubWF4X25yX3JlZ2lvbnMgPSA5O1xuIDcyMDpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NldF9hdHRycyhjLCBcdTAwMjZpbnZhbGlkX2F0dHJzKSwgLUVJTlZBTCk7XG4gNzIxOlx0XG4gNzIyOlx0XHRpbnZhbGlkX2F0dHJzID0gdmFsaWRfYXR0cnM7XG4gNzIzOlx0XHRpbnZhbGlkX2F0dHJzLmFnZ3JfaW50ZXJ2YWwgPSA0OTk5O1xuIDcyNDpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NldF9hdHRycyhjLCBcdTAwMjZpbnZhbGlkX2F0dHJzKSwgLUVJTlZBTCk7XG4gNzI1Olx0XG4gNzI2Olx0XHRkYW1vbl9kZXN0cm95X2N0eChjKTtcbiA3Mjc6XHR9XG4gNzI4Olx0XG4gNzI5Olx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF9tdnN1bShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gNzMwOlx0e1xuIDczMTpcdFx0dW5zaWduZWQgbG9uZyBpbnB1dF9leHBlY3RzW10gPSB7XG4gNzMyOlx0XHRcdC8qIGN1cnJlbnQgdmFsdWUsIGxhc3QgdmFsdWUsIHJlbWFpbmluZyB3aW5kb3cgKGJwKSAqL1xuIDczMzpcdFx0XHQwLCA0OSwgMTAwMDAsIDQ5LFx0LyogMCAmIzQzOyA0OSAqIDEgKi9cbiA3MzQ6XHRcdFx0MywgMTAsIDcwMDAsIDEwLFx0LyogMyAmIzQzOyAxMCAqIDAuNyAqL1xuIDczNTpcdFx0XHQzLCAxMCwgNTAwMCwgOCxcdFx0LyogMyAmIzQzOyAxMCAqIDAuNSAqL1xuIDczNjpcdFx0XHQzMiwgMTAwLCAxMDAwLCA0MixcdC8qIDMyICYjNDM7IDEwMCAqIDAuMSAqL1xuIDczNzpcdFx0XHQ0MiwgNDksIDAsIDQyLFx0XHQvKiA0MiAmIzQzOyA0OSAqIDAgKi9cbiA3Mzg6XHRcdH07XG4gNzM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NDIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgQ29yZSBLVW5pdCBUZXN0cyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgS1VuaXQgdGVzdCBzdWl0ZSwgc3BlY2lmaWNhbGx5IGZvciB0aGUgbW0vZGFtb24gc3Vic3lzdGVtLiBNeSBmb2N1cyBpcyBvbiB0aGUgZmlsZSBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGdldCBhIHNlbnNlIG9mIHRoZSB0ZXN0IHNldHVwLCB0aGUga2V5IGZ1bmN0aW9ucyB1bmRlciBzY3J1dGlueSBhbmQgYW55IGltcG9ydGFudCBhc3NlcnRpb25zIHdpdGhpbiBpdC4gVGhpcyBnaXZlcyB0aGUgYmVzdCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwb3RlbnRpYWwgcGl0ZmFsbHMuIEFyZSB0aGV5IGZvY3VzZWQgb24gZGlyZWN0IGludGVncmF0aW9uLCBmdW5jdGlvbiB0ZXN0aW5nLCBvciBzb21ldGhpbmcgbW9yZSBjb21wcmVoZW5zaXZlPyBXaGF0IGFyZSB0aGUga2V5IHBlcmZvcm1hbmNlIG1ldHJpY3MgdGhleSYjMzk7cmUgY2hlY2tpbmc/IElzIHRoZXJlIGFueXRoaW5nIG5vdGV3b3J0aHkgb3IgdGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYz8gVGhpcyBpcyBnb2luZyB0byBnaXZlIG1lIG15IGJlc3QgaW5zaWdodHMgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc1MDpcdFx0fVxuIDc1MTpcdH1cbiA3NTI6XHRcbiA3NTM6XHQvKlxuIDc1NDpcdCAqIFRlc3QgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oKSwgd2hpY2ggd3JhcHMgZGFtb25fbXZzdW0oKSB3aXRoIHRoZVxuIDc1NTpcdCAqIG1vbml0b3JpbmcgaW50ZXJ2YWxzIG9mIHRoZSBjb250ZXh0LiAgV2l0aCBhIHNhbXBsZSBpbnRlcnZhbCBvZiAxIGFuZCBhblxuIDc1NjpcdCAqIGFnZ3JlZ2F0aW9uIGludGVydmFsIG9mIDEwLCBhbiBhZ2dyZWdhdGlvbiB3aW5kb3cgaXMgMTAgc2FtcGxlIGludGVydmFsc1xuIDc1NzpcdCAqIGxvbmcuICBFYWNoIHJvdyBiZWxvdyBzcGVjaWZpZXMgdGhlIHBhc3NlZCBzYW1wbGUgaW50ZXJ2YWxzLCB0aGUgbmV4dFxuIDc1ODpcdCAqIGFnZ3JlZ2F0aW9uIHRpbWUgaW4gc2FtcGxlIGludGVydmFscywgdGhlIGN1cnJlbnQgYW5kIGxhc3QgbnJfYWNjZXNzZXMgb2YgYVxuIDc1OTpcdCAqIHJlZ2lvbiwgYW5kIHRoZSBleHBlY3RlZCByZXR1cm4gdmFsdWUuXG4gNzYwOlx0ICovXG4gNzYxOlx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gNzYyOlx0e1xuIDc2MzpcdFx0dW5zaWduZWQgbG9uZyBpbnB1dF9leHBlY3RzW10gPSB7XG4gNzY0Olx0XHRcdC8qIHBhc3NlZCwgbmV4dF9hZ2dyLCBucl9hY2Nlc3NlcywgbGFzdF9ucl9hY2Nlc3NlcywgZXhwZWN0ICovXG4gNzY1Olx0XHRcdDAsIDEwLCA1LCAzLCAzLFx0XHQvKiBmdWxsIHdpbmRvdyBsZWZ0LCB1bnJlc2V0ICovXG4gNzY2Olx0XHRcdDAsIDEwLCAwLCA3LCA3LFx0XHQvKiBmdWxsIHdpbmRvdyBsZWZ0LCByZXNldCAqL1xuIDc2NzpcdFx0XHQ1LCAxMCwgMywgMTAsIDgsXHQvKiBoYWxmIHdpbmRvdyBsZWZ0ICovXG4gNzY4Olx0XHRcdDgsIDEwLCAzLCAxMCwgNSxcdC8qIDIwJSB3aW5kb3cgbGVmdCAqL1xuIDc2OTpcdFx0XHQxMCwgMTAsIDQyLCA0OSwgNDIsXHQvKiBubyB3aW5kb3cgbGVmdCAqL1xuIDc3MDpcdFx0fTtcbiA3NzE6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmMgPSBkYW1vbl9uZXdfY3R4KCk7XG4gNzcyOlx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuIDc3MzpcdFx0aW50IGk7XG4gNzc0Olx0XG4gNzc1Olx0XHRpZiAoIWMpXG4gNzc2Olx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7Y3R4IGFsbG9jIGZhaWxcJiMzNDspO1xuIDc3NzpcdFxuIDc3ODpcdFx0ciA9IGRhbW9uX25ld19yZWdpb24oMCwgNDA5Nik7XG4gNzc5Olx0XHRpZiAoIXIpIHtcbiA3ODA6XHRcdFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XG4gNzgxOlx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7cmVnaW9uIGFsbG9jIGZhaWxcJiMzNDspO1xuIDc4MjpcdFx0fVxuIDc4MzpcdFxuIDc4NDpcdFx0Yy1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPSAxO1xuIDc4NTpcdFx0Yy1cdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsID0gMTA7XG4gNzg2Olx0XG4gNzg3Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGlucHV0X2V4cGVjdHMpOyBpICYjNDM7PSA1KSB7XG4gNzg4Olx0XHRcdGMtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMgPSBpbnB1dF9leHBlY3RzW2ldO1xuIDc4OTpcdFx0XHRjLVx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzID0gaW5wdXRfZXhwZWN0c1tpICYjNDM7IDFdO1xuIDc5MDpcdFx0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gaW5wdXRfZXhwZWN0c1tpICYjNDM7IDJdO1xuIDc5MTpcdFx0XHRyLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPSBpbnB1dF9leHBlY3RzW2kgJiM0MzsgM107XG4gNzkyOlx0XG4gNzkzOlx0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAodW5zaWduZWQgaW50KWlucHV0X2V4cGVjdHNbaSAmIzQzOyA0XSxcbiA3OTQ6XHRcdFx0XHRcdGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHIsIGMpKTtcbiA3OTU6XHRcdH1cbiA3OTY6XHRcbiA3OTc6XHRcdGRhbW9uX2ZyZWVfcmVnaW9uKHIpO1xuIDc5ODpcdFx0ZGFtb25fZGVzdHJveV9jdHgoYyk7XG4gNzk5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Njc1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgY29yZS1rdW5pdC5oIHVwIHRvIExpbmUgODMwKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSB0ZXN0IHNldHVwIGFuZCB3aGF0JiMzOTtzIGJlaW5nIHZlcmlmaWVkIHVwIHRvIGxpbmUgODMwLiBHaXZlbiB0aGUgbG9jYXRpb24gd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0sIEkgZXhwZWN0IHRoaXMgZmlsZSBjb250YWlucyB0aGUgY29yZSBLVW5pdCB0ZXN0cyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgb3IgRGF0YSBBY2Nlc3MgTU9OaXRvciAoREFNT04pIGZ1bmN0aW9uYWxpdHksIHF1aXRlIHBvc3NpYmx5IHJlbGF0ZWQgdG8gc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsZ29yaXRobXMuCgpNeSBpbml0aWFsIHF1ZXN0aW9ucyBhcmU6IHdoYXQgdGVzdCBjYXNlcyBhcmUgZGVmaW5lZD8gV2hhdCBtYWNyb3Mgb3IgaGVscGVyIGZ1bmN0aW9ucyBhcmUgdXNlZCBleHRlbnNpdmVseT8gQXJlIHRoZXJlIGFueSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHRlc3RlZCwgYW5kIGhvdyBhcmUgdGhleSBiZWluZyBpbml0aWFsaXplZCBhbmQgbWFuaXB1bGF0ZWQ/IEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhleSBhcmUgdGVzdGluZyB0aGUgaW50ZWdyYXRpb24gd2l0aCB0aGUgY29yZSBEQU1PTiBmdW5jdGlvbmFsaXR5LgoKR2l2ZW4gaXQmIzM5O3MgYSBoZWFkZXIsIEkgYW50aWNpcGF0ZSBpdCBkZWZpbmVzIHN0cnVjdHMsIGZ1bmN0aW9uIHByb3RvdHlwZXMsIGFuZCBwb3RlbnRpYWxseSBpbmxpbmUgZnVuY3Rpb25zIHJlbGV2YW50IHRvIHRoZSBLVW5pdCB0ZXN0cy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2VsbC1kZWZpbmVkIGFzc2VydGlvbnMgYW5kIGVycm9yIGhhbmRsaW5nIG1lY2hhbmlzbXMgdG8gZ2F1Z2UgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIHRlc3RzLiBJJiMzOTtsbCBhbHNvIGJlIHdhdGNoaW5nIGZvciBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgb3IgYWxnb3JpdGhtcyB0aGF0IG1pZ2h0IGJlIHRoZSB0YXJnZXQgb2YgdGhlc2UgdGVzdHMsIGVzcGVjaWFsbHkgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0cy4gSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgdGVzdCBjYXNlIHNwZWNpZmljIG1hY3JvcyBhcyB0aG9zZSBhcmUgYWxtb3N0IGFsd2F5cyBhIHRlbGwgb2Ygd2hhdCBpcyBiZWluZyB0ZXN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDA6XHRcbiA4MDE6XHRzdGF0aWMgdm9pZCBkYW1vc190ZXN0X25ld19maWx0ZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxuIDgwMjpcdHtcbiA4MDM6XHRcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlcjtcbiA4MDQ6XHRcbiA4MDU6XHRcdGZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfQU5PTiwgdHJ1ZSwgZmFsc2UpO1xuIDgwNjpcdFx0aWYgKCFmaWx0ZXIpXG4gODA3Olx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7ZmlsdGVyIGFsbG9jIGZhaWxcJiMzNDspO1xuIDgwODpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGZpbHRlci1cdTAwM2V0eXBlLCBEQU1PU19GSUxURVJfVFlQRV9BTk9OKTtcbiA4MDk6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBmaWx0ZXItXHUwMDNlbWF0Y2hpbmcsIHRydWUpO1xuIDgxMDpcdFx0S1VOSVRfRVhQRUNUX1BUUl9FUSh0ZXN0LCBmaWx0ZXItXHUwMDNlbGlzdC5wcmV2LCBcdTAwMjZmaWx0ZXItXHUwMDNlbGlzdCk7XG4gODExOlx0XHRLVU5JVF9FWFBFQ1RfUFRSX0VRKHRlc3QsIGZpbHRlci1cdTAwM2VsaXN0Lm5leHQsIFx1MDAyNmZpbHRlci1cdTAwM2VsaXN0KTtcbiA4MTI6XHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XG4gODEzOlx0fVxuIDgxNDpcdFxuIDgxNTpcdHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbiA4MTY6XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCxcbiA4MTc6XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcbiA4MTg6XHR7XG4gODE5Olx0XHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3QsIHNyYyk7XG4gODIwOlx0XG4gODIxOlx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZW1ldHJpYywgc3JjLVx1MDAzZW1ldHJpYyk7XG4gODIyOlx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZXRhcmdldF92YWx1ZSwgc3JjLVx1MDAzZXRhcmdldF92YWx1ZSk7XG4gODIzOlx0XHRpZiAoc3JjLVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKVxuIDgyNDpcdFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZWN1cnJlbnRfdmFsdWUsIHNyYy1cdTAwM2VjdXJyZW50X3ZhbHVlKTtcbiA4MjU6XHRcdHN3aXRjaCAoZHN0LVx1MDAzZW1ldHJpYykge1xuIDgyNjpcdFx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG4gODI3Olx0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWwsIFU2NF9NQVgpO1xuIDgyODpcdFx0XHRicmVhaztcbiA4Mjk6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDpcbiA4MzA6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDpcbiA4MzE6XHRcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VuaWQsIHNyYy1cdTAwM2VuaWQpO1xuIDgzMjpcdFx0XHRicmVhaztcbiA4MzM6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQOlxuIDgzNDpcdFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XG4gODM1Olx0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbmlkLCBzcmMtXHUwMDNlbmlkKTtcbiA4MzY6XHRcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VtZW1jZ19pZCwgc3JjLVx1MDAzZW1lbWNnX2lkKTtcbiA4Mzc6XHRcdFx0YnJlYWs7XG4gODM4Olx0XHRkZWZhdWx0OlxuIDgzOTpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc4NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIGl0OgoKKipGb2N1c2luZyBvbiBDb3JlLUt1bml0IFRlc3RzKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgdmVyeSBlbmQgb2YgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIEkga25vdyB3aGF0JiMzOTtzIGxpa2VseSB0dWNrZWQgYXdheSBkb3duIHRoZXJlOyBvZnRlbiB0aGUgZWRnZSBjYXNlcywgdGhlIGNsZWFudXAgcm91dGluZXMsIGFuZCB0aGUgdmVyeSBsYXN0IGFzc2VydGlvbnMgbGl2ZSBhdCB0aGUgdGFpbCBlbmQgb2YgdGhlc2UgdGVzdCBmaWxlcy4gSXQmIzM5O3MgdGhlIHVzdWFsIHBhdHRlcm4sIGFuZCBJIHdhbnQgdG8gdmVyaWZ5IGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBhbGlnbnMgd2l0aCBteSBleHBlY3RhdGlvbnMuIFRoaXMgd2lsbCBiZSB3aGVyZSB0aGUgc3VidGxlIGZsYXdzIGFuZCB1bmV4cGVjdGVkIGJlaGF2aW9ycyB0eXBpY2FsbHkgc3VyZmFjZSwgc28gdGhpcyBpcyB3aGVyZSBJ4oCZbGwgc3RhcnQgZGlnZ2luZy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NDA6XHRcdH1cbiA4NDE6XHR9XG4gODQyOlx0XG4gODQzOlx0c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gODQ0Olx0e1xuIDg0NTpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgZHN0ID0ge1xuIDg0NjpcdFx0XHQubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxuIDg0NzpcdFx0XHQudGFyZ2V0X3ZhbHVlID0gMTAwMCxcbiA4NDg6XHRcdFx0LmN1cnJlbnRfdmFsdWUgPSAxMjMsXG4gODQ5Olx0XHRcdC5sYXN0X3BzaV90b3RhbCA9IDQ1NixcbiA4NTA6XHRcdH07XG4gODUxOlx0XG4gODUyOlx0XHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG4gODUzOlx0XHRcdFx0XHUwMDI2KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKSB7XG4gODU0Olx0XHRcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcbiA4NTU6XHRcdFx0XHQudGFyZ2V0X3ZhbHVlID0gMjM0LFxuIDg1NjpcdFx0XHRcdC5jdXJyZW50X3ZhbHVlID0gMzQ1LFxuIDg1NzpcdFx0XHRcdC5sYXN0X3BzaV90b3RhbCA9IDU2NyxcbiA4NTg6XHRcdFx0XHR9KTtcbiA4NTk6XHRcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFx1MDAyNmRzdCxcbiA4NjA6XHRcdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpe1xuIDg2MTpcdFx0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9VU0VSX0lOUFVULFxuIDg2MjpcdFx0XHRcdC50YXJnZXRfdmFsdWUgPSA3ODksXG4gODYzOlx0XHRcdFx0LmN1cnJlbnRfdmFsdWUgPSAxMn0pO1xuIDg2NDpcdFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXHUwMDI2ZHN0LFxuIDg2NTpcdFx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCl7XG4gODY2Olx0XHRcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlAsXG4gODY3Olx0XHRcdFx0LnRhcmdldF92YWx1ZSA9IDM0NSxcbiA4Njg6XHRcdFx0XHQuY3VycmVudF92YWx1ZSA9IDY3OCxcbiA4Njk6XHRcdFx0XHQubmlkID0gOSxcbiA4NzA6XHRcdFx0XHR9KTtcbiA4NzE6XHRcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFx1MDAyNmRzdCxcbiA4NzI6XHRcdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpe1xuIDg3MzpcdFx0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQLFxuIDg3NDpcdFx0XHRcdC50YXJnZXRfdmFsdWUgPSAxMixcbiA4NzU6XHRcdFx0XHQuY3VycmVudF92YWx1ZSA9IDM0NSxcbiA4NzY6XHRcdFx0XHQubmlkID0gNixcbiA4Nzc6XHRcdFx0XHR9KTtcbiA4Nzg6XHRcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFx1MDAyNmRzdCxcbiA4Nzk6XHRcdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpe1xuIDg4MDpcdFx0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlAsXG4gODgxOlx0XHRcdFx0LnRhcmdldF92YWx1ZSA9IDQ1NixcbiA4ODI6XHRcdFx0XHQuY3VycmVudF92YWx1ZSA9IDU2NyxcbiA4ODM6XHRcdFx0XHQubmlkID0gNixcbiA4ODQ6XHRcdFx0XHQubWVtY2dfaWQgPSA3LFxuIDg4NTpcdFx0XHRcdH0pO1xuIDg4NjpcdFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXHUwMDI2ZHN0LFxuIDg4NzpcdFx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCl7XG4gODg4Olx0XHRcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCxcbiA4ODk6XHRcdFx0XHQudGFyZ2V0X3ZhbHVlID0gODkwLFxuIDg5MDpcdFx0XHRcdC5jdXJyZW50X3ZhbHVlID0gOTAxLFxuIDg5MTpcdFx0XHRcdC5uaWQgPSAxMCxcbiA4OTI6XHRcdFx0XHQubWVtY2dfaWQgPSAxLFxuIDg5MzpcdFx0XHRcdH0pO1xuIDg5NDpcdFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXHUwMDI2ZHN0LFxuIDg5NTpcdFx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCkge1xuIDg5NjpcdFx0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXG4gODk3Olx0XHRcdFx0LnRhcmdldF92YWx1ZSA9IDIzNCxcbiA4OTg6XHRcdFx0XHQuY3VycmVudF92YWx1ZSA9IDM0NSxcbiA4OTk6XHRcdFx0XHQubGFzdF9wc2lfdG90YWwgPSA1NjcsXG4gOTAwOlx0XHRcdFx0fSk7XG4gOTAxOlx0fVxuIDkwMjpcdFxuIDkwMzpcdHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4gOTA0Olx0XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3RfZ29hbHMsIGludCBucl9kc3RfZ29hbHMsXG4gOTA1Olx0XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmNfZ29hbHMsIGludCBucl9zcmNfZ29hbHMpXG4gOTA2Olx0e1xuIDkwNzpcdFx0c3RydWN0IGRhbW9zX3F1b3RhIGRzdCwgc3JjO1xuIDkwODpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwsICpuZXh0O1xuIDkwOTpcdFx0Ym9vbCBza2lwID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNzMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYGNvcmUta3VuaXQuaGAqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIExldCYjMzk7cyBhc3N1bWUgdGhpcyBpcyB0aGUgaGVhZGVyIGZpbGUgZm9yIHRoZSBjb3JlIEtVbml0IHRlc3RzIHdpdGhpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIGZyYW1ld29yay4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IHRoaXMgYmVjYXVzZSBJJiMzOTttIHRyb3VibGVzaG9vdGluZyBhIERBTU9OLXJlbGF0ZWQgaXNzdWUsIHJldmlld2luZyBjaGFuZ2VzLCBvciBtYXliZSBldmVuIGNvbnRyaWJ1dGluZyBhIG5ldyB0ZXN0LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0ZXN0IHN0cnVjdHVyZXMsIG1hY3JvcyBmb3Igc2V0dGluZyB1cCBhbmQgdGVhcmluZyBkb3duIHRoZSB0ZXN0cywgYXNzZXJ0aW9ucywgYW5kIHByb2JhYmx5IHNvbWUgcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBhY3R1YWwgdGVzdCBsb2dpYy4gSXQgd291bGQgYmUgaGVscGZ1bCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IEtVbml0IGlzIHVzZWQgaW4gdGhpcyBEQU1PTiBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIG5hbWluZyBjb252ZW50aW9ucyBlbXBsb3llZCwgYW5kIGFueSBzcGVjaWFsaXplZCBtYWNyb3MgdGhhdCBhcmUgc3BlY2lmaWMgdG8gREFNT04mIzM5O3MgdGVzdGluZyByZXF1aXJlbWVudHMuIFdoYXQgYXJlIHRoZSBrZXkgY29uY2VwdHMgYW5kIHByaW1pdGl2ZXMgdGhhdCBhcmUgYmVpbmcgdGVzdGVkPyBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGludHJpY2F0ZSBpbnRlcmFjdGlvbnMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgREFNT04mIzM5O3Mgb3BlcmF0aW9uYWwgZmVhdHVyZXMuIEkgYWxzbyB3YW50IHRvIGlkZW50aWZ5IGhvdyB0aGUgdGVzdHMgYXJlIG9yZ2FuaXplZCwgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLCBhbmQgaWYgdGhleSYjMzk7cmUgd2VsbC1zdHJ1Y3R1cmVkIGFuZCBkb2N1bWVudGVkLiBPa2F5LCBsZXQmIzM5O3MgZ2V0IHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MTA6XHRcdGludCBpO1xuIDkxMTpcdFx0aW50IG5yX2RzdCA9IDAsIG5yX3NyYyA9IDA7XG4gOTEyOlx0XG4gOTEzOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZkc3QuZ29hbHMpO1xuIDkxNDpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c3JjLmdvYWxzKTtcbiA5MTU6XHRcbiA5MTY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2RzdF9nb2FsczsgaSYjNDM7JiM0MzspIHtcbiA5MTc6XHRcdFx0LypcbiA5MTg6XHRcdFx0ICogV2hlbiBucl9zcmNfZ29hbHMgaXMgc21hbGxlciB0aGFuIGRzdF9nb2FscyxcbiA5MTk6XHRcdFx0ICogZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCkgd2lsbCBrZnJlZSgpIHRoZSBkc3QgZ29hbHMuXG4gOTIwOlx0XHRcdCAqIE1ha2UgaXQga2ZyZWUoKS1hYmxlLlxuIDkyMTpcdFx0XHQgKi9cbiA5MjI6XHRcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKGRzdF9nb2Fsc1tpXS5tZXRyaWMsXG4gOTIzOlx0XHRcdFx0XHRkc3RfZ29hbHNbaV0udGFyZ2V0X3ZhbHVlKTtcbiA5MjQ6XHRcdFx0aWYgKCFnb2FsKVxuIDkyNTpcdFx0XHRcdGdvdG8gb3V0O1xuIDkyNjpcdFx0XHRkYW1vc19hZGRfcXVvdGFfZ29hbChcdTAwMjZkc3QsIGdvYWwpO1xuIDkyNzpcdFx0fVxuIDkyODpcdFx0c2tpcCA9IGZhbHNlO1xuIDkyOTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfc3JjX2dvYWxzOyBpJiM0MzsmIzQzOylcbiA5MzA6XHRcdFx0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoXHUwMDI2c3JjLCBcdTAwMjZzcmNfZ29hbHNbaV0pO1xuIDkzMTpcdFxuIDkzMjpcdFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFx1MDAyNmRzdCwgXHUwMDI2c3JjKTtcbiA5MzM6XHRcbiA5MzQ6XHRcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgXHUwMDI2ZHN0KVxuIDkzNTpcdFx0XHRucl9kc3QmIzQzOyYjNDM7O1xuIDkzNjpcdFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBcdTAwMjZzcmMpXG4gOTM3Olx0XHRcdG5yX3NyYyYjNDM7JiM0Mzs7XG4gOTM4Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbnJfZHN0LCBucl9zcmMpO1xuIDkzOTpcdFx0aWYgKG5yX2RzdCAhPSBucl9zcmMpXG4gOTQwOlx0XHRcdGdvdG8gb3V0O1xuIDk0MTpcdFxuIDk0MjpcdFx0aSA9IDA7XG4gOTQzOlx0XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIChcdTAwMjZkc3QpKSB7XG4gOTQ0Olx0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBnb2FsLVx1MDAzZW1ldHJpYywgc3JjX2dvYWxzW2ldLm1ldHJpYyk7XG4gOTQ1Olx0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBnb2FsLVx1MDAzZXRhcmdldF92YWx1ZSxcbiA5NDY6XHRcdFx0XHRcdHNyY19nb2Fsc1tpJiM0MzsmIzQzO10udGFyZ2V0X3ZhbHVlKTtcbiA5NDc6XHRcdH1cbiA5NDg6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBpLCBucl9zcmNfZ29hbHMpO1xuIDk0OTpcdFxuIDk1MDpcdG91dDpcbiA5NTE6XHRcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShnb2FsLCBuZXh0LCAoXHUwMDI2ZHN0KSlcbiA5NTI6XHRcdFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGdvYWwpO1xuIDk1MzpcdFx0aWYgKHNraXApXG4gOTU0Olx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7Z29hbCBhbGxvYyBmYWlsXCYjMzQ7KTtcbiA5NTU6XHR9XG4gOTU2Olx0XG4gOTU3Olx0c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIDk1ODpcdHtcbiA5NTk6XHRcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2Zvcih0ZXN0LFxuIDk2MDpcdFx0XHRcdChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbFtdKXt9LCAwLFxuIDk2MTpcdFx0XHRcdChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbFtdKXtcbiA5NjI6XHRcdFx0XHRcdHtcbiA5NjM6XHRcdFx0XHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9VU0VSX0lOUFVULFxuIDk2NDpcdFx0XHRcdFx0LnRhcmdldF92YWx1ZSA9IDEyMyxcbiA5NjU6XHRcdFx0XHRcdH0sXG4gOTY2Olx0XHRcdFx0fSwgMSk7XG4gOTY3Olx0XHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3IodGVzdCxcbiA5Njg6XHRcdFx0XHQoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWxbXSl7XG4gOTY5Olx0XHRcdFx0XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDU5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgQ29yZS1LVW5pdCBUZXN0IEhlYWRlcioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgZW5kIG9mIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBJJiMzOTttIGN1cmlvdXMgd2hhdCBmaW5hbCB0ZXN0IGRlY2xhcmF0aW9ucyBvciBoZWxwZXIgbWFjcm9zIHRoZXkmIzM5O3ZlIHBsYWNlZCBoZXJlLiBJdCYjMzk7cyBsaWtlbHkgdGhlIGNvbmNsdWRpbmcgZWxlbWVudHMgZGVmaW5lIHRoZSBzcGVjaWZpYyB0ZXN0cyBmb3IgdGhlIGNvcmUgREFNT04gZnVuY3Rpb25hbGl0eSwgb3IgcG90ZW50aWFsbHkgaW5jbHVkZSB1dGlsaXR5IGZ1bmN0aW9ucyBtZWFudCB0byBiZSBhdmFpbGFibGUgaW4gb3RoZXIgdGVzdCBmaWxlcy4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgbWlnaHQgYmUgYXNzZXJ0aW9ucyBvciBzZXR1cCByb3V0aW5lcyBkZXNpZ25lZCB0byBmYWNpbGl0YXRlIGNvbXByZWhlbnNpdmUgdGVzdGluZyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eSB0aWVkIHRvIHRoZSBEQU1PTiBzdWJzeXN0ZW0sIHBvdGVudGlhbGx5IGludm9sdmluZyBzcGVjaWZpYyBzY2VuYXJpb3MgYW5kIGNvcm5lciBjYXNlcy4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGFueSB0ZXN0IGNhc2VzLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgbG9vayBsaWtlIHRoZXkmIzM5O3JlIGRlc2lnbmVkIHRvIGhhbmRsZSBjb25jdXJyZW50IG9wZXJhdGlvbnMgb3IgY29tcGxleCBtZW1vcnkgYWxsb2NhdGlvbnMuIEFsc28sIEnigJltIGxvb2tpbmcgdG8gc2VlIGhvdyB0aGV54oCZcmUgaGFuZGxpbmcgZXhwZWN0ZWQgZmFpbHVyZXMgYW5kIGVycm9yIHBhdGhzOyBhIGdvb2QgdGVzdCBzdWl0ZSBzaG91bGQgY292ZXIgdGhvc2UgdGhvcm91Z2hseS4gTXkgbWFpbiBmb2N1cyB3aWxsIGJlIG9uIHRoZSB0ZXN0IHN0cnVjdHVyZSBhbmQgdGhlIGNvdmVyYWdlLCBzaW5jZSBLVW5pdCBpcyBhIGdyZWF0IGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMDA6XHRcdFx0LmZhaWxfY2hhcmdlX2Rlbm9tID0gMyxcbjEwMDE6XHRcdFx0LndlaWdodF9zeiA9IDQsXG4xMDAyOlx0XHRcdC53ZWlnaHRfbnJfYWNjZXNzZXMgPSA1LFxuMTAwMzpcdFx0XHQud2VpZ2h0X2FnZSA9IDYsXG4xMDA0Olx0XHR9O1xuMTAwNTpcdFx0c3RydWN0IGRhbW9zX3F1b3RhIHNyYyA9IHtcbjEwMDY6XHRcdFx0LnJlc2V0X2ludGVydmFsID0gNyxcbjEwMDc6XHRcdFx0Lm1zID0gOCxcbjEwMDg6XHRcdFx0LnN6ID0gOSxcbjEwMDk6XHRcdFx0LmdvYWxfdHVuZXIgPSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMLFxuMTAxMDpcdFx0XHQuZmFpbF9jaGFyZ2VfbnVtID0gMSxcbjEwMTE6XHRcdFx0LmZhaWxfY2hhcmdlX2Rlbm9tID0gMTAyNCxcbjEwMTI6XHRcdFx0LndlaWdodF9zeiA9IDEwLFxuMTAxMzpcdFx0XHQud2VpZ2h0X25yX2FjY2Vzc2VzID0gMTEsXG4xMDE0Olx0XHRcdC53ZWlnaHRfYWdlID0gMTIsXG4xMDE1Olx0XHR9O1xuMTAxNjpcdFxuMTAxNzpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZHN0LmdvYWxzKTtcbjEwMTg6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnNyYy5nb2Fscyk7XG4xMDE5Olx0XG4xMDIwOlx0XHRkYW1vc19jb21taXRfcXVvdGEoXHUwMDI2ZHN0LCBcdTAwMjZzcmMpO1xuMTAyMTpcdFxuMTAyMjpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC5yZXNldF9pbnRlcnZhbCwgc3JjLnJlc2V0X2ludGVydmFsKTtcbjEwMjM6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QubXMsIHNyYy5tcyk7XG4xMDI0Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LnN6LCBzcmMuc3opO1xuMTAyNTpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC5nb2FsX3R1bmVyLCBzcmMuZ29hbF90dW5lcik7XG4xMDI2Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LmZhaWxfY2hhcmdlX251bSwgc3JjLmZhaWxfY2hhcmdlX251bSk7XG4xMDI3Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LmZhaWxfY2hhcmdlX2Rlbm9tLCBzcmMuZmFpbF9jaGFyZ2VfZGVub20pO1xuMTAyODpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC53ZWlnaHRfc3osIHNyYy53ZWlnaHRfc3opO1xuMTAyOTpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC53ZWlnaHRfbnJfYWNjZXNzZXMsIHNyYy53ZWlnaHRfbnJfYWNjZXNzZXMpO1xuMTAzMDpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC53ZWlnaHRfYWdlLCBzcmMud2VpZ2h0X2FnZSk7XG4xMDMxOlx0fVxuMTAzMjpcdFxuMTAzMzpcdHN0YXRpYyBpbnQgZGFtb3NfdGVzdF9oZWxwX2Rlc3RzX3NldHVwKHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzICpkZXN0cyxcbjEwMzQ6XHRcdFx0dW5zaWduZWQgaW50ICpub2RlX2lkX2FyciwgdW5zaWduZWQgaW50ICp3ZWlnaHRfYXJyLFxuMTAzNTpcdFx0XHRzaXplX3QgbnJfZGVzdHMpXG4xMDM2Olx0e1xuMTAzNzpcdFx0c2l6ZV90IGk7XG4xMDM4Olx0XG4xMDM5Olx0XHRkZXN0cy1cdTAwM2Vub2RlX2lkX2FyciA9IGttYWxsb2Nfb2JqcygqZGVzdHMtXHUwMDNlbm9kZV9pZF9hcnIsIG5yX2Rlc3RzKTtcbjEwNDA6XHRcdGlmICghZGVzdHMtXHUwMDNlbm9kZV9pZF9hcnIpXG4xMDQxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTA0MjpcdFx0ZGVzdHMtXHUwMDNld2VpZ2h0X2FyciA9IGttYWxsb2Nfb2JqcygqZGVzdHMtXHUwMDNld2VpZ2h0X2FyciwgbnJfZGVzdHMpO1xuMTA0MzpcdFx0aWYgKCFkZXN0cy1cdTAwM2V3ZWlnaHRfYXJyKSB7XG4xMDQ0Olx0XHRcdGtmcmVlKGRlc3RzLVx1MDAzZW5vZGVfaWRfYXJyKTtcbjEwNDU6XHRcdFx0ZGVzdHMtXHUwMDNlbm9kZV9pZF9hcnIgPSBOVUxMO1xuMTA0NjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjEwNDc6XHRcdH1cbjEwNDg6XHRcbjEwNDk6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2Rlc3RzOyBpJiM0MzsmIzQzOykge1xuMTA1MDpcdFx0XHRkZXN0cy1cdTAwM2Vub2RlX2lkX2FycltpXSA9IG5vZGVfaWRfYXJyW2ldO1xuMTA1MTpcdFx0XHRkZXN0cy1cdTAwM2V3ZWlnaHRfYXJyW2ldID0gd2VpZ2h0X2FycltpXTtcbjEwNTI6XHRcdH1cbjEwNTM6XHRcdGRlc3RzLVx1MDAzZW5yX2Rlc3RzID0gbnJfZGVzdHM7XG4xMDU0Olx0XHRyZXR1cm4gMDtcbjEwNTU6XHR9XG4xMDU2Olx0XG4xMDU3Olx0c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9oZWxwX2Rlc3RzX2ZyZWUoc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgKmRlc3RzKVxuMTA1ODpcdHtcbjEwNTk6XHRcdGtmcmVlKGRlc3RzLVx1MDAzZW5vZGVfaWRfYXJyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MjIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGVuZCBvZiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQgYXJlIHRoZXkgdGVzdGluZyBpbiB0aGlzIHBhcnRpY3VsYXIgaGVhZGVyPyBHaXZlbiB0aGUgZmlsZSBwYXRoLCB0aGlzIGlzIGNsZWFybHkgS1VuaXQgcmVsYXRlZCBhbmQgbGlrZWx5IHBhcnQgb2YgREFNT04mIzM5O3MgdGVzdGluZyBpbmZyYXN0cnVjdHVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgdGVzdCBtYWNyb3MsIGhlbHBlciBmdW5jdGlvbnMsIG9yIHBvdGVudGlhbGx5IGV2ZW4gc29tZSB0ZXN0IHN0dWJzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgREFNT04gaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgc2NvcGUgYW5kIHB1cnBvc2Ugb2YgdGhlIGZ1bmN0aW9ucyBvciBzdHJ1Y3R1cmVzIGRlZmluZWQgYXQgdGhlIHRhaWwgb2YgdGhpcyBmaWxlLiBBcmUgdGhleSBkZWZpbmluZyBzcGVjaWZpYyB0ZXN0IGNhc2VzLCBwcmVwYXJpbmcgZGF0YSBmb3IgdGhlIHRlc3RzLCBvciBwZXJoYXBzIGVzdGFibGlzaGluZyBpbmZyYXN0cnVjdHVyZSBmb3IgcnVubmluZyB0aGUgREFNT04gdGVzdHMgd2l0aGluIHRoZSBLVW5pdCBmcmFtZXdvcms/IEtub3dpbmcgREFNT04gYW5kIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGtlcm5lbCwgSSYjMzk7bSBhbnRpY2lwYXRpbmcgaW50ZXJhY3Rpb25zIHdpdGggbWVtb3J5IHJlZ2lvbnMsIG1vbml0b3JpbmcgZnVuY3Rpb25zLCBhbmQgZGF0YSBhY2Nlc3MuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWFjcm9zIGFuZCBpbmxpbmUgZnVuY3Rpb25zIHRvIHNlZSBob3cgdGhlIERBTU9OIGNvcmUgY29tcG9uZW50cyBhcmUgYWN0dWFsbHkgZXhlcmNpc2VkIHVuZGVyIHRlc3QsIGFuZCBob3cgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGlzIGFzc2VydGVkIHdpdGhpbiB0aGlzIGVudmlyb25tZW50LiBVbHRpbWF0ZWx5LCBteSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IERBTU9OIGlzIHZhbGlkYXRlZCB1c2luZyB0aGlzIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTAwOlx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7c2tpcFwmIzM0Oyk7XG4xMTAxOlx0fVxuMTEwMjpcdFxuMTEwMzpcdHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X2Rlc3RzKHN0cnVjdCBrdW5pdCAqdGVzdClcbjExMDQ6XHR7XG4xMTA1Olx0XHRkYW1vc190ZXN0X2NvbW1pdF9kZXN0c19mb3IodGVzdCxcbjExMDY6XHRcdFx0XHQodW5zaWduZWQgaW50W10pezEsIDIsIDN9LCAodW5zaWduZWQgaW50W10pezIsIDMsIDR9LFxuMTEwNzpcdFx0XHRcdDMsXG4xMTA4Olx0XHRcdFx0KHVuc2lnbmVkIGludFtdKXs0LCA1LCA2fSwgKHVuc2lnbmVkIGludFtdKXs1LCA2LCA3fSxcbjExMDk6XHRcdFx0XHQzKTtcbjExMTA6XHRcdGRhbW9zX3Rlc3RfY29tbWl0X2Rlc3RzX2Zvcih0ZXN0LFxuMTExMTpcdFx0XHRcdCh1bnNpZ25lZCBpbnRbXSl7MSwgMn0sICh1bnNpZ25lZCBpbnRbXSl7MiwgM30sXG4xMTEyOlx0XHRcdFx0MixcbjExMTM6XHRcdFx0XHQodW5zaWduZWQgaW50W10pezQsIDUsIDZ9LCAodW5zaWduZWQgaW50W10pezUsIDYsIDd9LFxuMTExNDpcdFx0XHRcdDMpO1xuMTExNTpcdFx0ZGFtb3NfdGVzdF9jb21taXRfZGVzdHNfZm9yKHRlc3QsXG4xMTE2Olx0XHRcdFx0TlVMTCwgTlVMTCwgMCxcbjExMTc6XHRcdFx0XHQodW5zaWduZWQgaW50W10pezQsIDUsIDZ9LCAodW5zaWduZWQgaW50W10pezUsIDYsIDd9LFxuMTExODpcdFx0XHRcdDMpO1xuMTExOTpcdFx0ZGFtb3NfdGVzdF9jb21taXRfZGVzdHNfZm9yKHRlc3QsXG4xMTIwOlx0XHRcdFx0KHVuc2lnbmVkIGludFtdKXsxLCAyLCAzfSwgKHVuc2lnbmVkIGludFtdKXsyLCAzLCA0fSxcbjExMjE6XHRcdFx0XHQzLFxuMTEyMjpcdFx0XHRcdCh1bnNpZ25lZCBpbnRbXSl7NCwgNX0sICh1bnNpZ25lZCBpbnRbXSl7NSwgNn0sIDIpO1xuMTEyMzpcdFx0ZGFtb3NfdGVzdF9jb21taXRfZGVzdHNfZm9yKHRlc3QsXG4xMTI0Olx0XHRcdFx0KHVuc2lnbmVkIGludFtdKXsxLCAyLCAzfSwgKHVuc2lnbmVkIGludFtdKXsyLCAzLCA0fSxcbjExMjU6XHRcdFx0XHQzLFxuMTEyNjpcdFx0XHRcdE5VTEwsIE5VTEwsIDApO1xuMTEyNzpcdH1cbjExMjg6XHRcbjExMjk6XHRzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbjExMzA6XHRcdFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpzcmMpXG4xMTMxOlx0e1xuMTEzMjpcdFx0ZGFtb3NfY29tbWl0X2ZpbHRlcihkc3QsIHNyYyk7XG4xMTMzOlx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZXR5cGUsIHNyYy1cdTAwM2V0eXBlKTtcbjExMzQ6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlbWF0Y2hpbmcsIHNyYy1cdTAwM2VtYXRjaGluZyk7XG4xMTM1Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZWFsbG93LCBzcmMtXHUwMDNlYWxsb3cpO1xuMTEzNjpcdFx0c3dpdGNoIChzcmMtXHUwMDNldHlwZSkge1xuMTEzNzpcdFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzpcbjExMzg6XHRcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VtZW1jZ19pZCwgc3JjLVx1MDAzZW1lbWNnX2lkKTtcbjExMzk6XHRcdFx0YnJlYWs7XG4xMTQwOlx0XHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX0FERFI6XG4xMTQxOlx0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlYWRkcl9yYW5nZS5zdGFydCxcbjExNDI6XHRcdFx0XHRcdHNyYy1cdTAwM2VhZGRyX3JhbmdlLnN0YXJ0KTtcbjExNDM6XHRcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VhZGRyX3JhbmdlLmVuZCxcbjExNDQ6XHRcdFx0XHRcdHNyYy1cdTAwM2VhZGRyX3JhbmdlLmVuZCk7XG4xMTQ1Olx0XHRcdGJyZWFrO1xuMTE0NjpcdFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQ6XG4xMTQ3Olx0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNldGFyZ2V0X2lkeCwgc3JjLVx1MDAzZXRhcmdldF9pZHgpO1xuMTE0ODpcdFx0XHRicmVhaztcbjExNDk6XHRcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwNzcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGVuZCBvZiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gSSYjMzk7bSBndWVzc2luZyB0aGlzIGZpbGUgbGlrZWx5IGNvbnRhaW5zIHRoZSBjb3JlIEtVbml0IHRlc3RzIGZvciBEQU1PTiwgdGhlIERhdGEgQWNjZXNzIE1vbml0b3IuIEtub3dpbmcgdGhlIGVuZCBpcyBrZXkuIEl0JiMzOTtzIHVzdWFsbHkgd2hlcmUgeW91JiMzOTtsbCBmaW5kIHRoZSBsYXN0IHRlc3QgY2FzZXMsIHBvdGVudGlhbGx5IHJlY2VudCBhZGRpdGlvbnMsIG9yIG1heWJlIGEgc3VtbWFyeS9lbmQtb2YtZmlsZSBtYXJrZXIgdGhhdCBnaXZlcyBtZSBjb250ZXh0LiBXaGF0IGFyZSB0aGV5IHRlc3Rpbmc/IFdoYXQgZnVuY3Rpb25hbGl0eSBpbiBEQU1PTiYjMzk7cyBjb3JlIGlzIGJlaW5nIHZhbGlkYXRlZCBoZXJlPyBBcmUgdGhlcmUgYW55IG5ldyB0ZXN0IGZpeHR1cmVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgcmVncmVzc2lvbiB0ZXN0cz8KCkkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBkZWZpbml0aW9ucyBmb3IgYGt1bml0X2Nhc2VgIHN0cnVjdHVyZXMsIHRlc3QgZnVuY3Rpb25zIHRoYXQgb3BlcmF0ZSBvbiB0aG9zZSBzdHJ1Y3R1cmVzLCBhbmQgaG9wZWZ1bGx5LCBzb21lIGNvbW1lbnRhcnkgb3IgZG9jdW1lbnRhdGlvbiB0aGF0IGNsYXJpZmllcyB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuIEnigJltIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyB0aG9yb3VnaGx5IERBTU9OJiMzOTtzIG1lbW9yeSBtb25pdG9yaW5nIGFuZCBhZGFwdGF0aW9uIG1lY2hhbmlzbXMgYXJlIGJlaW5nIHRlc3RlZCBhdCB0aGUgS1VuaXQgbGV2ZWwuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBiYXNpYyBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gdGVzdHMsIHRvIG1vcmUgY29tcGxleCBzY2VuYXJpb3MgaW52b2x2aW5nIGFjY2VzcyBwYXR0ZXJuIGFuYWx5c2lzLCBhZGFwdGF0aW9uIHRyaWdnZXJpbmcsIGFuZCBwZXJmb3JtYW5jZSBpbXBhY3QuIFRoZSBlbmQgb2YgdGhlIGZpbGUgbWlnaHQgaGF2ZSBzb21lIGNsdWVzIHRvIHdoYXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHRlc3RzIGFyZS4gTGV0JiMzOTtzIHNlZSBob3cgd2VsbCBpdCB0ZXN0cyBEQU1PTiYjMzk7cyBpbXBvcnRhbnQgZnVuY3Rpb25hbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIwMDpcdFx0XHRcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfQUREUixcbjEyMDE6XHRcdFx0XHQubWF0Y2hpbmcgPSBmYWxzZSxcbjEyMDI6XHRcdFx0XHQuYWxsb3cgPSBmYWxzZSxcbjEyMDM6XHRcdFx0XHQuYWRkcl9yYW5nZSA9IHsuc3RhcnQgPSA0NTYsIC5lbmQgPSA1Njd9LFxuMTIwNDpcdFx0XHRcdH0pO1xuMTIwNTpcdFx0ZGFtb3NfdGVzdF9jb21taXRfZmlsdGVyX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG4xMjA2Olx0XHRcdFx0XHUwMDI2KHN0cnVjdCBkYW1vc19maWx0ZXIpe1xuMTIwNzpcdFx0XHRcdC50eXBlID0gREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULFxuMTIwODpcdFx0XHRcdC5tYXRjaGluZyA9IHRydWUsXG4xMjA5Olx0XHRcdFx0LmFsbG93ID0gdHJ1ZSxcbjEyMTA6XHRcdFx0XHQudGFyZ2V0X2lkeCA9IDYsXG4xMjExOlx0XHRcdFx0fSk7XG4xMjEyOlx0fVxuMTIxMzpcdFxuMTIxNDpcdHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfaGVscF9pbml0YWlsaXplX3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnNjaGVtZSlcbjEyMTU6XHR7XG4xMjE2Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzY2hlbWUtXHUwMDNlcXVvdGEuZ29hbHMpO1xuMTIxNzpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2NoZW1lLVx1MDAzZWNvcmVfZmlsdGVycyk7XG4xMjE4Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzY2hlbWUtXHUwMDNlb3BzX2ZpbHRlcnMpO1xuMTIxOTpcdH1cbjEyMjA6XHRcbjEyMjE6XHRzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LCBzdHJ1Y3QgZGFtb3MgKmRzdCxcbjEyMjI6XHRcdFx0c3RydWN0IGRhbW9zICpzcmMpXG4xMjIzOlx0e1xuMTIyNDpcdFx0aW50IGVycjtcbjEyMjU6XHRcbjEyMjY6XHRcdGRhbW9zX3Rlc3RfaGVscF9pbml0YWlsaXplX3NjaGVtZShkc3QpO1xuMTIyNzpcdFx0ZGFtb3NfdGVzdF9oZWxwX2luaXRhaWxpemVfc2NoZW1lKHNyYyk7XG4xMjI4Olx0XG4xMjI5Olx0XHRlcnIgPSBkYW1vc19jb21taXQoZHN0LCBzcmMpO1xuMTIzMDpcdFx0aWYgKGVycilcbjEyMzE6XHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtkYW1vc19jb21taXQgZmFpbFwmIzM0Oyk7XG4xMjMyOlx0XG4xMjMzOlx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZXBhdHRlcm4ubWluX3N6X3JlZ2lvbixcbjEyMzQ6XHRcdFx0XHRzcmMtXHUwMDNlcGF0dGVybi5taW5fc3pfcmVnaW9uKTtcbjEyMzU6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlcGF0dGVybi5tYXhfc3pfcmVnaW9uLFxuMTIzNjpcdFx0XHRcdHNyYy1cdTAwM2VwYXR0ZXJuLm1heF9zel9yZWdpb24pO1xuMTIzNzpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VwYXR0ZXJuLm1pbl9ucl9hY2Nlc3NlcyxcbjEyMzg6XHRcdFx0XHRzcmMtXHUwMDNlcGF0dGVybi5taW5fbnJfYWNjZXNzZXMpO1xuMTIzOTpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VwYXR0ZXJuLm1heF9ucl9hY2Nlc3NlcyxcbjEyNDA6XHRcdFx0XHRzcmMtXHUwMDNlcGF0dGVybi5tYXhfbnJfYWNjZXNzZXMpO1xuMTI0MTpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VwYXR0ZXJuLm1pbl9hZ2VfcmVnaW9uLFxuMTI0MjpcdFx0XHRcdHNyYy1cdTAwM2VwYXR0ZXJuLm1pbl9hZ2VfcmVnaW9uKTtcbjEyNDM6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlcGF0dGVybi5tYXhfYWdlX3JlZ2lvbixcbjEyNDQ6XHRcdFx0XHRzcmMtXHUwMDNlcGF0dGVybi5tYXhfYWdlX3JlZ2lvbik7XG4xMjQ1Olx0XG4xMjQ2Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZWFjdGlvbiwgc3JjLVx1MDAzZWFjdGlvbik7XG4xMjQ3Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZWFwcGx5X2ludGVydmFsX3VzLCBzcmMtXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMpO1xuMTI0ODpcdFxuMTI0OTpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2V3bWFya3MubWV0cmljLCBzcmMtXHUwMDNld21hcmtzLm1ldHJpYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Mjg0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgQ29yZS1LVW5pdCBUZXN0IEhlYWRlcioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgZW5kIG9mIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBJJiMzOTttIGN1cmlvdXMgd2hhdCBmaW5hbCB0ZXN0IGRlY2xhcmF0aW9ucyBvciBoZWxwZXIgbWFjcm9zIHRoZXkmIzM5O3ZlIHBsYWNlZCBoZXJlLiBJdCYjMzk7cyBsaWtlbHkgdGhlIGNvbmNsdWRpbmcgZWxlbWVudHMgZGVmaW5lIHRoZSBzcGVjaWZpYyB0ZXN0cyBmb3IgdGhlIGNvcmUgREFNT04gZnVuY3Rpb25hbGl0eSwgb3IgcG90ZW50aWFsbHkgaW5jbHVkZSB1dGlsaXR5IGZ1bmN0aW9ucyBtZWFudCB0byBiZSBhdmFpbGFibGUgaW4gb3RoZXIgdGVzdCBmaWxlcy4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgbWlnaHQgYmUgYXNzZXJ0aW9ucyBvciBzZXR1cCByb3V0aW5lcyBkZXNpZ25lZCB0byBmYWNpbGl0YXRlIGNvbXByZWhlbnNpdmUgdGVzdGluZyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eSB0aWVkIHRvIHRoZSBEQU1PTiBzdWJzeXN0ZW0sIHBvdGVudGlhbGx5IGludm9sdmluZyBzcGVjaWZpYyBzY2VuYXJpb3MgYW5kIGNvcm5lciBjYXNlcy4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGFueSB0ZXN0IGNhc2VzLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgbG9vayBsaWtlIHRoZXkmIzM5O3JlIGRlc2lnbmVkIHRvIGhhbmRsZSBjb25jdXJyZW50IG9wZXJhdGlvbnMgb3IgY29tcGxleCBtZW1vcnkgYWxsb2NhdGlvbnMuIEFsc28sIEnigJltIGxvb2tpbmcgdG8gc2VlIGhvdyB0aGV54oCZcmUgaGFuZGxpbmcgZXhwZWN0ZWQgZmFpbHVyZXMgYW5kIGVycm9yIHBhdGhzOyBhIGdvb2QgdGVzdCBzdWl0ZSBzaG91bGQgY292ZXIgdGhvc2UgdGhvcm91Z2hseS4gTXkgbWFpbiBmb2N1cyB3aWxsIGJlIG9uIHRoZSB0ZXN0IHN0cnVjdHVyZSBhbmQgdGhlIGNvdmVyYWdlLCBzaW5jZSBLVW5pdCBpcyBhIGdyZWF0IGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyOTA6XHRcdGRhbW9zX3Rlc3RfY29tbWl0X2Zvcih0ZXN0LFxuMTI5MTpcdFx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3Mpe1xuMTI5MjpcdFx0XHRcdFx0LnBhdHRlcm4gPSAoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuKXtcbjEyOTM6XHRcdFx0XHRcdFx0MSwgMiwgMywgNCwgNSwgNn0sXG4xMjk0Olx0XHRcdFx0XHQuYWN0aW9uID0gREFNT1NfUEFHRU9VVCxcbjEyOTU6XHRcdFx0XHRcdC5hcHBseV9pbnRlcnZhbF91cyA9IDEwMDAwMDAsXG4xMjk2Olx0XHRcdFx0XHQud21hcmtzID0gKHN0cnVjdCBkYW1vc193YXRlcm1hcmtzKXtcbjEyOTc6XHRcdFx0XHRcdFx0REFNT1NfV01BUktfRlJFRV9NRU1fUkFURSxcbjEyOTg6XHRcdFx0XHRcdFx0OTAwLCAxMDAsIDUwfSxcbjEyOTk6XHRcdFx0XHR9LFxuMTMwMDpcdFx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3Mpe1xuMTMwMTpcdFx0XHRcdFx0LnBhdHRlcm4gPSAoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuKXtcbjEzMDI6XHRcdFx0XHRcdFx0MiwgMywgNCwgNSwgNiwgN30sXG4xMzAzOlx0XHRcdFx0XHQuYWN0aW9uID0gREFNT1NfTUlHUkFURV9IT1QsXG4xMzA0Olx0XHRcdFx0XHQuYXBwbHlfaW50ZXJ2YWxfdXMgPSAyMDAwMDAwLFxuMTMwNTpcdFx0XHRcdFx0LnRhcmdldF9uaWQgPSA1LFxuMTMwNjpcdFx0XHRcdH0pO1xuMTMwNzpcdH1cbjEzMDg6XHRcbjEzMDk6XHRzdGF0aWMgc3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fdGVzdF9oZWxwX3NldHVwX3RhcmdldChcbjEzMTA6XHRcdFx0dW5zaWduZWQgbG9uZyByZWdpb25fc3RhcnRfZW5kW11bMl0sIGludCBucl9yZWdpb25zKVxuMTMxMTpcdHtcbjEzMTI6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4xMzEzOlx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuMTMxNDpcdFx0aW50IGk7XG4xMzE1Olx0XG4xMzE2Olx0XHR0ID0gZGFtb25fbmV3X3RhcmdldCgpO1xuMTMxNzpcdFx0aWYgKCF0KVxuMTMxODpcdFx0XHRyZXR1cm4gTlVMTDtcbjEzMTk6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3JlZ2lvbnM7IGkmIzQzOyYjNDM7KSB7XG4xMzIwOlx0XHRcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKHJlZ2lvbl9zdGFydF9lbmRbaV1bMF0sXG4xMzIxOlx0XHRcdFx0XHRyZWdpb25fc3RhcnRfZW5kW2ldWzFdKTtcbjEzMjI6XHRcdFx0aWYgKCFyKSB7XG4xMzIzOlx0XHRcdFx0ZGFtb25fZnJlZV90YXJnZXQodCk7XG4xMzI0Olx0XHRcdFx0cmV0dXJuIE5VTEw7XG4xMzI1Olx0XHRcdH1cbjEzMjY6XHRcdFx0ZGFtb25fYWRkX3JlZ2lvbihyLCB0KTtcbjEzMjc6XHRcdH1cbjEzMjg6XHRcdHJldHVybiB0O1xuMTMyOTpcdH1cbjEzMzA6XHRcbjEzMzE6XHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuMTMzMjpcdFx0XHR1bnNpZ25lZCBsb25nIGRzdF9zdGFydF9lbmRbXVsyXSwgaW50IG5yX2RzdF9yZWdpb25zLFxuMTMzMzpcdFx0XHR1bnNpZ25lZCBsb25nIHNyY19zdGFydF9lbmRbXVsyXSwgaW50IG5yX3NyY19yZWdpb25zLFxuMTMzNDpcdFx0XHR1bnNpZ25lZCBsb25nIGV4cGVjdF9zdGFydF9lbmRbXVsyXSwgaW50IG5yX2V4cGVjdF9yZWdpb25zKVxuMTMzNTpcdHtcbjEzMzY6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKmRzdF90YXJnZXQsICpzcmNfdGFyZ2V0O1xuMTMzNzpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbjEzMzg6XHRcdGludCBpO1xuMTMzOTpcdFxuMTM0MDpcdFx0ZHN0X3RhcmdldCA9IGRhbW9uX3Rlc3RfaGVscF9zZXR1cF90YXJnZXQoZHN0X3N0YXJ0X2VuZCwgbnJfZHN0X3JlZ2lvbnMpO1xuMTM0MTpcdFx0aWYgKCFkc3RfdGFyZ2V0KVxuMTM0MjpcdFx0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O2RzdCB0YXJnZXQgc2V0dXAgZmFpbFwmIzM0Oyk7XG4xMzQzOlx0XHRzcmNfdGFyZ2V0ID0gZGFtb25fdGVzdF9oZWxwX3NldHVwX3RhcmdldChzcmNfc3RhcnRfZW5kLCBucl9zcmNfcmVnaW9ucyk7XG4xMzQ0Olx0XHRpZiAoIXNyY190YXJnZXQpIHtcbjEzNDU6XHRcdFx0ZGFtb25fZnJlZV90YXJnZXQoZHN0X3RhcmdldCk7XG4xMzQ2Olx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7c3JjIHRhcmdldCBzZXR1cCBmYWlsXCYjMzQ7KTtcbjEzNDc6XHRcdH1cbjEzNDg6XHRcdGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyhkc3RfdGFyZ2V0LCBzcmNfdGFyZ2V0LCAxKTtcbjEzNDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1NTEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipEZWVwIERpdmUgaW50byBDb3JlLUt1bml0LmgmIzM5O3MgRGVwdGhzKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgdG8gdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mIHRoaXMgYG1tL2RhbW9uYCBzdHVmZi4gVGltZSB0byBzdGFydCBhdCB0aGUgYWJzb2x1dGUgYm90dG9tIG9mIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1vc3QgZnVuZGFtZW50YWwgZGVmaW5pdGlvbnMgb3IgdGhlIGdyb3VuZHdvcmsgZm9yIHRoZSB0ZXN0IHN1aXRlIGlzIGxhaWQgb3V0LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgY3J1Y2lhbCBtYWNyb3MsIHN0cnVjdHVyZXMsIG9yIGFueSBmb3VuZGF0aW9uYWwgZWxlbWVudHMgdGhhdCBhcmUgdXNlZCB0aHJvdWdob3V0IHRoZSB0ZXN0cy4gVGhpcyBpcyBhIGNvbW1vbiBwcmFjdGljZSB3aGVuIEkgYXBwcm9hY2ggYW55IG5ldyBjb2RlIGJhc2UuIEkgYWx3YXlzIHN0YXJ0IGZyb20gdGhlIGxvdyBsZXZlbCBhbmQgYnVpbGQgdXAgYSBtZW50YWwgbW9kZWwgZnJvbSB0aGUgZGV0YWlscy4gSSB3aWxsIGFsc28gYmUgbG9va2luZyBmb3IgY2x1ZXMgdGhhdCBjYW4gZXhwbGFpbiB3aHkgdGhlIHRlc3RzIHBhc3Mgb3IgZmFpbC4gT25jZSBJIGdldCB0aGUgZm91bmRhdGlvbmFsIGVsZW1lbnRzLCBJIHdpbGwgYmUgYWJsZSB0byB3b3JrIHVwIHRoZSBzdGFjayBhbmQgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiBlYWNoIG9mIHRoZSB0ZXN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0NDA6XHRcdFx0dW5zaWduZWQgaW50IGRzdF93ZWlnaHRzW10sIGludCBucl9kc3RfcHJvYmVzLFxuMTQ0MTpcdFx0XHR1bnNpZ25lZCBpbnQgc3JjX3dlaWdodHNbXSwgaW50IG5yX3NyY19wcm9iZXMpXG4xNDQyOlx0e1xuMTQ0MzpcdFx0c3RydWN0IGRhbW9uX2N0eCAqZHN0LCAqc3JjO1xuMTQ0NDpcdFx0aW50IGVycjtcbjE0NDU6XHRcdHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0X3Byb2JlLCAqc3JjX3Byb2JlO1xuMTQ0NjpcdFxuMTQ0NzpcdFx0ZHN0ID0gZGFtb25fdGVzdF9oZWxwX3NldHVwX3Byb2Jlcyhkc3Rfd2VpZ2h0cywgbnJfZHN0X3Byb2Jlcyk7XG4xNDQ4Olx0XHRpZiAoIWRzdClcbjE0NDk6XHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtkc3QgYWxsb2MgZmFpbFwmIzM0Oyk7XG4xNDUwOlx0XHRzcmMgPSBkYW1vbl90ZXN0X2hlbHBfc2V0dXBfcHJvYmVzKHNyY193ZWlnaHRzLCBucl9zcmNfcHJvYmVzKTtcbjE0NTE6XHRcdGlmICghc3JjKSB7XG4xNDUyOlx0XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGRzdCk7XG4xNDUzOlx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7c3JjIGFsbG9jIGZhaWxcJiMzNDspO1xuMTQ1NDpcdFx0fVxuMTQ1NTpcdFxuMTQ1NjpcdFx0ZXJyID0gZGFtb25fY29tbWl0X3Byb2Jlcyhkc3QsIHNyYyk7XG4xNDU3Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZXJyLCAwKTtcbjE0NTg6XHRcdGlmIChlcnIpXG4xNDU5Olx0XHRcdGdvdG8gb3V0O1xuMTQ2MDpcdFx0bnJfZHN0X3Byb2JlcyA9IDA7XG4xNDYxOlx0XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdClcbjE0NjI6XHRcdFx0bnJfZHN0X3Byb2JlcyYjNDM7JiM0Mzs7XG4xNDYzOlx0XHRucl9zcmNfcHJvYmVzID0gMDtcbjE0NjQ6XHRcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHNyY19wcm9iZSwgc3JjKVxuMTQ2NTpcdFx0XHRucl9zcmNfcHJvYmVzJiM0MzsmIzQzOztcbjE0NjY6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBucl9kc3RfcHJvYmVzLCBucl9zcmNfcHJvYmVzKTtcbjE0Njc6XHRcdGlmIChucl9kc3RfcHJvYmVzICE9IG5yX3NyY19wcm9iZXMpXG4xNDY4Olx0XHRcdGdvdG8gb3V0O1xuMTQ2OTpcdFx0bnJfZHN0X3Byb2JlcyA9IDA7XG4xNDcwOlx0XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdCkge1xuMTQ3MTpcdFx0XHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUobnJfZHN0X3Byb2Jlcywgc3JjKTtcbjE0NzI6XHRcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNyY19wcm9iZS1cdTAwM2V3ZWlnaHQsIGRzdF9wcm9iZS1cdTAwM2V3ZWlnaHQpO1xuMTQ3MzpcdFx0XHRucl9kc3RfcHJvYmVzJiM0MzsmIzQzOztcbjE0NzQ6XHRcdH1cbjE0NzU6XHRvdXQ6XG4xNDc2Olx0XHRkYW1vbl9kZXN0cm95X2N0eChkc3QpO1xuMTQ3NzpcdFx0ZGFtb25fZGVzdHJveV9jdHgoc3JjKTtcbjE0Nzg6XHR9XG4xNDc5Olx0XG4xNDgwOlx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfcHJvYmVzKHN0cnVjdCBrdW5pdCAqdGVzdClcbjE0ODE6XHR7XG4xNDgyOlx0XHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4xNDgzOlx0XHRcdFx0KHVuc2lnbmVkIGludFtdKXt9LCAwLCAodW5zaWduZWQgaW50W10pe30sIDApO1xuMTQ4NDpcdFx0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuMTQ4NTpcdFx0XHRcdCh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXsxfSwgMSk7XG4xNDg2Olx0XHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4xNDg3Olx0XHRcdFx0KHVuc2lnbmVkIGludFtdKXt9LCAwLCAodW5zaWduZWQgaW50W10pezEsIDJ9LCAyKTtcbjE0ODg6XHRcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbjE0ODk6XHRcdFx0XHQodW5zaWduZWQgaW50W10pezF9LCAxLCAodW5zaWduZWQgaW50W10pezJ9LCAxKTtcbjE0OTA6XHRcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbjE0OTE6XHRcdFx0XHQodW5zaWduZWQgaW50W10pezF9LCAxLCAodW5zaWduZWQgaW50W10pezIsIDN9LCAyKTtcbjE0OTI6XHRcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbjE0OTM6XHRcdFx0XHQodW5zaWduZWQgaW50W10pezIsIDN9LCAyLCAodW5zaWduZWQgaW50W10pezF9LCAxKTtcbjE0OTQ6XHRcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbjE0OTU6XHRcdFx0XHQodW5zaWduZWQgaW50W10pezIsIDN9LCAyLCAodW5zaWduZWQgaW50W10pe30sIDApO1xuMTQ5NjpcdFx0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuMTQ5NzpcdFx0XHRcdCh1bnNpZ25lZCBpbnRbXSl7Mn0sIDEsICh1bnNpZ25lZCBpbnRbXSl7fSwgMCk7XG4xNDk4Olx0fVxuMTQ5OTpcdFxuMTUwMDpcdHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2N0eChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4xNTAxOlx0e1xuMTUwMjpcdFx0c3RydWN0IGRhbW9uX2N0eCAqc3JjLCAqZHN0O1xuMTUwMzpcdFxuMTUwNDpcdFx0c3JjID0gZGFtb25fbmV3X2N0eCgpO1xuMTUwNTpcdFx0aWYgKCFzcmMpXG4xNTA2Olx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7c3JjIGFsbG9jIGZhaWxcJiMzNDspO1xuMTUwNzpcdFx0ZHN0ID0gZGFtb25fbmV3X2N0eCgpO1xuMTUwODpcdFx0aWYgKCFkc3QpIHtcbjE1MDk6XHRcdFx0ZGFtb25fZGVzdHJveV9jdHgoc3JjKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwNTcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRmlsZSYjMzk7cyBUYWlsKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgZmluYWwgcG9ydGlvbiBvZiB0aGlzIGZpbGUsIGJleW9uZCBsaW5lIDE1MTAuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgc2Vuc2Ugb2YgdGhlICpyZWNlbnQqIGFjdGl2aXR5LCBhbnkgcG90ZW50aWFsIHBhdHRlcm5zIGVtZXJnaW5nIGF0IHRoZSBlbmQsIG9yIG1heWJlIGp1c3QgY29uZmlybWluZyBhc3N1bXB0aW9ucyBJIGhhdmUgYWJvdXQgdGhlIGRhdGFzZXQmIzM5O3Mgb3ZlcmFsbCBzdHJ1Y3R1cmUuIEkmIzM5O20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIHRoZSB0YWlsIGJlY2F1c2UsIGluIG15IGV4cGVyaWVuY2UsIHRoYXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgeW91IGZpbmQgdGhlIGxhdGVzdCBkYXRhIGVudHJpZXMsIGFub21hbGllcywgb3IgY3J1Y2lhbCBjb25jbHVkaW5nIG9ic2VydmF0aW9ucy4gSXQmIzM5O3MgYSBxdWljayBhbmQgZGlydHkgd2F5IHRvIHNwb3QgaWYgYW55dGhpbmcgc2lnbmlmaWNhbnQgaGFzIG9jY3VycmVkIGF0IHRoZSB2ZXJ5IGVuZC4gVGhpcyBoZWxwcyBtZSBkZWNpZGUgaWYgSSBuZWVkIHRvIGRvIGEgYnJvYWRlciBkYXRhIGludmVzdGlnYXRpb24gb3IgaWYgSSBjYW4gbWFrZSBjb25jbHVzaW9ucyBxdWlja2x5IGZyb20gdGhlIGVuZCBvZiB0aGUgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MTA6XHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtkc3QgYWxsb2MgZmFpbFwmIzM0Oyk7XG4xNTExOlx0XHR9XG4xNTEyOlx0XHQvKiBPbmx5IHBvd2VyIG9mIHR3byBtaW5fcmVnaW9uX3N6IGlzIGFsbG93ZWQuICovXG4xNTEzOlx0XHRzcmMtXHUwMDNlbWluX3JlZ2lvbl9zeiA9IDQwOTY7XG4xNTE0Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fY29tbWl0X2N0eChkc3QsIHNyYyksIDApO1xuMTUxNTpcdFx0c3JjLVx1MDAzZW1pbl9yZWdpb25fc3ogPSA0MDk1O1xuMTUxNjpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX2NvbW1pdF9jdHgoZHN0LCBzcmMpLCAtRUlOVkFMKTtcbjE1MTc6XHRcdHNyYy1cdTAwM2VtaW5fcmVnaW9uX3N6ID0gNDA5NjtcbjE1MTg6XHRcdHNyYy1cdTAwM2VwYXVzZSA9IHRydWU7XG4xNTE5Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fY29tbWl0X2N0eChkc3QsIHNyYyksIDApO1xuMTUyMDpcdFx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgZHN0LVx1MDAzZXBhdXNlKTtcbjE1MjE6XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KHNyYyk7XG4xNTIyOlx0XHRkYW1vbl9kZXN0cm95X2N0eChkc3QpO1xuMTUyMzpcdH1cbjE1MjQ6XHRcbjE1MjU6XHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4xNTI2Olx0e1xuMTUyNzpcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuMTUyODpcdFx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSwgKnByb2JlMjtcbjE1Mjk6XHRcbjE1MzA6XHRcdGN0eCA9IGRhbW9uX25ld19jdHgoKTtcbjE1MzE6XHRcdGlmICghY3R4KVxuMTUzMjpcdFx0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O2N0eCBhbGxvYyBmYWlsXCYjMzQ7KTtcbjE1MzM6XHRcdHByb2JlID0gZGFtb25fbmV3X3Byb2JlKCk7XG4xNTM0Olx0XHRpZiAoIXByb2JlKSB7XG4xNTM1Olx0XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4xNTM2Olx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7cHJvYmUgYWxsb2MgZmFpbFwmIzM0Oyk7XG4xNTM3Olx0XHR9XG4xNTM4Olx0XHRkYW1vbl9hZGRfcHJvYmUoY3R4LCBwcm9iZSk7XG4xNTM5Olx0XG4xNTQwOlx0XHQvKiBQYXJhbWV0ZXJzIGFyZSB2YWxpZGF0ZWQgb25seSBpZiBhbnkgcHJvYmUgd2VpZ2h0IGlzIHNldC4gKi9cbjE1NDE6XHRcdGN0eC1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPSAxO1xuMTU0MjpcdFx0Y3R4LVx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwMDAwO1xuMTU0MzpcdFx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKGN0eCkpO1xuMTU0NDpcdFxuMTU0NTpcdFx0LyogVXAgdG8gVThfTUFYIHNhbXBsZXMgcGVyIGFnZ3JlZ2F0aW9uIGludGVydmFsIGFyZSBhbGxvd2VkLiAqL1xuMTU0NjpcdFx0cHJvYmUtXHUwMDNld2VpZ2h0ID0gMTAwO1xuMTU0NzpcdFx0Y3R4LVx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgPSAyNTU7XG4xNTQ4Olx0XHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoY3R4KSk7XG4xNTQ5Olx0XG4xNTUwOlx0XHQvKiBNb3JlIHNhbXBsZXMgY291bGQgb3ZlcmZsb3cgdGhlIHByb2JlX2hpdHMgY291bnRlcnMuICovXG4xNTUxOlx0XHRjdHgtXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbCA9IDI1NjtcbjE1NTI6XHRcdEtVTklUX0VYUEVDVF9GQUxTRSh0ZXN0LCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoY3R4KSk7XG4xNTUzOlx0XG4xNTU0Olx0XHQvKiBUaGUgbGFyZ2VzdCB3ZWlnaHQgd2hvc2Ugd2VpZ2h0ZWQgaGl0IGNvdW50IGZpdHMgaW4gdW5zaWduZWQgaW50LiAqL1xuMTU1NTpcdFx0Y3R4LVx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgPSAyNTU7XG4xNTU2Olx0XHRwcm9iZS1cdTAwM2V3ZWlnaHQgPSBVSU5UX01BWCAvIDI1NTtcbjE1NTc6XHRcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhjdHgpKTtcbjE1NTg6XHRcbjE1NTk6XHRcdC8qIEFueSBsYXJnZXIgd2VpZ2h0IGNvdWxkIG92ZXJmbG93IGl0cyB3ZWlnaHRlZCBoaXQgY291bnQuICovXG4xNTYwOlx0XHRwcm9iZS1cdTAwM2V3ZWlnaHQgPSBVSU5UX01BWCAvIDI1NSAmIzQzOyAxO1xuMTU2MTpcdFx0S1VOSVRfRVhQRUNUX0ZBTFNFKHRlc3QsIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhjdHgpKTtcbjE1NjI6XHRcbjE1NjM6XHRcdC8qIFdpdGggb25lIHNhbXBsZSBwZXIgYWdncmVnYXRpb24sIGV2ZW4gdGhlIGxhcmdlc3Qgd2VpZ2h0IGZpdHMuICovXG4xNTY0Olx0XHRjdHgtXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbCA9IDE7XG4xNTY1Olx0XHRwcm9iZS1cdTAwM2V3ZWlnaHQgPSBVSU5UX01BWDtcbjE1NjY6XHRcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhjdHgpKTtcbjE1Njc6XHRcbjE1Njg6XHRcdC8qIFRoZSBzdW0gb2YgYWxsIHByb2JlcyYjMzk7IHdlaWdodGVkIGhpdCBjb3VudHMgY291bGQgYWxzbyBvdmVyZmxvdy4gKi9cbjE1Njk6XHRcdHByb2JlMiA9IGRhbW9uX25ld19wcm9iZSgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM2MQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgY29yZS1rdW5pdC5oYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gTGV0JiMzOTtzIGFzc3VtZSB0aGlzIGlzIHRoZSBoZWFkZXIgZmlsZSBmb3IgdGhlIGNvcmUgS1VuaXQgdGVzdHMgd2l0aGluIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcikgZnJhbWV3b3JrLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhpcyBiZWNhdXNlIEkmIzM5O20gdHJvdWJsZXNob290aW5nIGEgREFNT04tcmVsYXRlZCBpc3N1ZSwgcmV2aWV3aW5nIGNoYW5nZXMsIG9yIG1heWJlIGV2ZW4gY29udHJpYnV0aW5nIGEgbmV3IHRlc3QuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBkZWZpbml0aW9ucyByZWxhdGVkIHRvIHRlc3Qgc3RydWN0dXJlcywgbWFjcm9zIGZvciBzZXR0aW5nIHVwIGFuZCB0ZWFyaW5nIGRvd24gdGhlIHRlc3RzLCBhc3NlcnRpb25zLCBhbmQgcHJvYmFibHkgc29tZSBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIGFjdHVhbCB0ZXN0IGxvZ2ljLiBJdCB3b3VsZCBiZSBoZWxwZnVsIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgS1VuaXQgaXMgdXNlZCBpbiB0aGlzIERBTU9OIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGVtcGxveWVkLCBhbmQgYW55IHNwZWNpYWxpemVkIG1hY3JvcyB0aGF0IGFyZSBzcGVjaWZpYyB0byBEQU1PTiYjMzk7cyB0ZXN0aW5nIHJlcXVpcmVtZW50cy4gV2hhdCBhcmUgdGhlIGtleSBjb25jZXB0cyBhbmQgcHJpbWl0aXZlcyB0aGF0IGFyZSBiZWluZyB0ZXN0ZWQ/IEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgaW50cmljYXRlIGludGVyYWN0aW9ucyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBEQU1PTiYjMzk7cyBvcGVyYXRpb25hbCBmZWF0dXJlcy4gSSBhbHNvIHdhbnQgdG8gaWRlbnRpZnkgaG93IHRoZSB0ZXN0cyBhcmUgb3JnYW5pemVkLCB3aGF0IGRlcGVuZGVuY2llcyB0aGV5IGhhdmUsIGFuZCBpZiB0aGV5JiMzOTtyZSB3ZWxsLXN0cnVjdHVyZWQgYW5kIGRvY3VtZW50ZWQuIE9rYXksIGxldCYjMzk7cyBnZXQgc3RhcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1NzA6XHRcdGlmICghcHJvYmUyKSB7XG4xNTcxOlx0XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4xNTcyOlx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7cHJvYmUyIGFsbG9jIGZhaWxcJiMzNDspO1xuMTU3MzpcdFx0fVxuMTU3NDpcdFx0cHJvYmUyLVx1MDAzZXdlaWdodCA9IDE7XG4xNTc1Olx0XHRkYW1vbl9hZGRfcHJvYmUoY3R4LCBwcm9iZTIpO1xuMTU3NjpcdFx0S1VOSVRfRVhQRUNUX0ZBTFNFKHRlc3QsIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhjdHgpKTtcbjE1Nzc6XHRcbjE1Nzg6XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4xNTc5Olx0fVxuMTU4MDpcdFxuMTU4MTpcdHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfZmlsdGVyX291dChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4xNTgyOlx0e1xuMTU4MzpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbjE1ODQ6XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsICpyMjtcbjE1ODU6XHRcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmY7XG4xNTg2Olx0XG4xNTg3Olx0XHRmID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9BRERSLCB0cnVlLCBmYWxzZSk7XG4xNTg4Olx0XHRpZiAoIWYpXG4xNTg5Olx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7ZmlsdGVyIGFsbG9jIGZhaWxcJiMzNDspO1xuMTU5MDpcdFx0Zi1cdTAwM2VhZGRyX3JhbmdlID0gKHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlKXsuc3RhcnQgPSAyLCAuZW5kID0gNn07XG4xNTkxOlx0XG4xNTkyOlx0XHR0ID0gZGFtb25fbmV3X3RhcmdldCgpO1xuMTU5MzpcdFx0aWYgKCF0KSB7XG4xNTk0Olx0XHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGYpO1xuMTU5NTpcdFx0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O3RhcmdldCBhbGxvYyBmYWlsXCYjMzQ7KTtcbjE1OTY6XHRcdH1cbjE1OTc6XHRcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKDMsIDUpO1xuMTU5ODpcdFx0aWYgKCFyKSB7XG4xNTk5Olx0XHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGYpO1xuMTYwMDpcdFx0XHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcbjE2MDE6XHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtyZWdpb24gYWxsb2MgZmFpbFwmIzM0Oyk7XG4xNjAyOlx0XHR9XG4xNjAzOlx0XHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xuMTYwNDpcdFxuMTYwNTpcdFx0LyogcmVnaW9uIGluIHRoZSByYW5nZSAqL1xuMTYwNjpcdFx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgZGFtb3NfZmlsdGVyX21hdGNoKE5VTEwsIHQsIHIsIGYsIDEpKTtcbjE2MDc6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCAxKTtcbjE2MDg6XHRcbjE2MDk6XHRcdC8qIHJlZ2lvbiBiZWZvcmUgdGhlIHJhbmdlICovXG4xNjEwOlx0XHRyLVx1MDAzZWFyLnN0YXJ0ID0gMTtcbjE2MTE6XHRcdHItXHUwMDNlYXIuZW5kID0gMjtcbjE2MTI6XHRcdEtVTklUX0VYUEVDVF9GQUxTRSh0ZXN0LFxuMTYxMzpcdFx0XHRcdGRhbW9zX2ZpbHRlcl9tYXRjaChOVUxMLCB0LCByLCBmLCAxKSk7XG4xNjE0Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgMSk7XG4xNjE1Olx0XG4xNjE2Olx0XHQvKiByZWdpb24gYWZ0ZXIgdGhlIHJhbmdlICovXG4xNjE3Olx0XHRyLVx1MDAzZWFyLnN0YXJ0ID0gNjtcbjE2MTg6XHRcdHItXHUwMDNlYXIuZW5kID0gODtcbjE2MTk6XHRcdEtVTklUX0VYUEVDVF9GQUxTRSh0ZXN0LFxuMTYyMDpcdFx0XHRcdGRhbW9zX2ZpbHRlcl9tYXRjaChOVUxMLCB0LCByLCBmLCAxKSk7XG4xNjIxOlx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgMSk7XG4xNjIyOlx0XG4xNjIzOlx0XHQvKiByZWdpb24gc3RhcnRlZCBiZWZvcmUgdGhlIHJhbmdlICovXG4xNjI0Olx0XHRyLVx1MDAzZWFyLnN0YXJ0ID0gMTtcbjE2MjU6XHRcdHItXHUwMDNlYXIuZW5kID0gNDtcbjE2MjY6XHRcdEtVTklUX0VYUEVDVF9GQUxTRSh0ZXN0LCBkYW1vc19maWx0ZXJfbWF0Y2goTlVMTCwgdCwgciwgZiwgMSkpO1xuMTYyNzpcdFx0LyogZmlsdGVyIHNob3VsZCBoYXZlIHNwbGl0IHRoZSByZWdpb24gKi9cbjE2Mjg6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFyLnN0YXJ0LCAxKTtcbjE2Mjk6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFyLmVuZCwgMik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzExCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBjb3JlLWt1bml0LmhgIGZvciBSZXZpZXcqKgoKQWxyaWdodCwgdGltZSB0byBzaGlmdCBmb2N1cyBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIHJlc3Qgb2YgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIEkmIzM5O3ZlIGFscmVhZHkgc2NydXRpbml6ZWQgcG9ydGlvbnMgb2YgdGhlIERBTU9OIEtVbml0IHRlc3Qgc3VpdGUsIHNvIEkga25vdyB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUuIE5vdywgSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGhlYWRlciBmaWxlIGlzIGNvcnJlY3RseSBpbnRlZ3JhdGVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKlByb3BlciBpbmNsdWRlczoqKiBBcmUgdGhlIG5lY2Vzc2FyeSBEQU1PTiBjb3JlIGhlYWRlcnMgYW5kIEtVbml0IGluZnJhc3RydWN0dXJlIGluY2x1ZGVkIGNvcnJlY3RseT8gQXJlIHRoZXJlIGFueSBtaXNzaW5nIGRlcGVuZGVuY2llcz8KKiAgICoqRGF0YSBzdHJ1Y3R1cmUgZGVjbGFyYXRpb25zOioqIEFyZSBhbnkgbmV3IHN0cnVjdHMgb3IgZW51bXMgc3BlY2lmaWMgdG8gdGhpcyBwb3J0aW9uIG9mIHRoZSB0ZXN0aW5nIGRlZmluZWQsIG9yIGFyZSBleGlzdGluZyBEQU1PTiBkYXRhc3RydWN0dXJlcyBiZWluZyBsZXZlcmFnZWQ/CiogICAqKkZ1bmN0aW9uIHByb3RvdHlwZXM6KiogSXMgdGhlIGludGVyZmFjZSB3ZWxsLWRlZmluZWQ/IERvZXMgaXQgc2VlbSBjbGVhbiBhbmQgc3RyYWlnaHRmb3J3YXJkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCByZXR1cm4gdHlwZXMgb3IgYXJndW1lbnQgcGFzc2luZyBJIG5lZWQgdG8gZmxhZz8KKiAgICoqVGVzdCBjYXNlIG9yZ2FuaXphdGlvbjoqKiBIb3cgYXJlIHRoZSBpbmRpdmlkdWFsIHRlc3QgY2FzZXMgc3RydWN0dXJlZCB3aXRoaW4gdGhpcyBoZWFkZXI/IEFyZSB0aGV5IGxvZ2ljYWxseSBncm91cGVkIGFuZCBlYXN5IHRvIHVuZGVyc3RhbmQ/IEFyZSB0aGV5IHNldCB1cCBwcm9wZXJseSB0byBiZSB1c2VkIHdpdGggdGhlIGt1bml0IHRlc3Qgc3lzdGVtPwoqICAgKipDb3ZlcmFnZToqKiBEb2VzIGl0IGFwcGVhciB0byBiZSB0ZXN0aW5nIGEgcmVwcmVzZW50YXRpdmUgcmFuZ2Ugb2YgdGhlIERBTU9OIGNvcmUgZnVuY3Rpb25hbGl0eT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGdhcHMgdGhhdCBuZWVkIHRvIGJlIGFkZHJlc3NlZD8gSXMgdGhlcmUgYW4gb2J2aW91cyBiaWFzIHRvd2FyZHMgZWRnZSBjYXNlcyBvciBjb21tb24gZmxvd3M/CiogICAqKlBvdGVudGlhbCBmb3IgaW1wcm92ZW1lbnQ6KiogQXJlIHRoZXJlIGFueSBvcHBvcnR1bml0aWVzIGZvciBzaW1wbGlmaWNhdGlvbiwgcmVmYWN0b3JpbmcsIG9yIGJldHRlciBkb2N1bWVudGF0aW9uIHRoYXQgSSBjYW4gc3BvdCBxdWlja2x5PyBEb2VzIHRoZSBzdHlsZSBhbGlnbiB3aXRoIHRoZSBvdmVyYWxsIHByb2plY3Q/CgpUaGlzIHNob3VsZCBwcm92aWRlIG1lIHdpdGggYW4gaW5pdGlhbCBhc3Nlc3NtZW50IG9mIGhvdyBgY29yZS1rdW5pdC5oYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBhbmQgd2hhdCBhcmVhcyB3YXJyYW50IGEgbW9yZSBpbi1kZXB0aCBleGFtaW5hdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY3MDpcdFx0XHRcdGxhc3RfaW5wdXQpO1xuMTY3MTpcdFxuMTY3MjpcdFx0LypcbjE2NzM6XHRcdCAqIElmIGN1cnJlbnQgc2NvcmUgaXMgaGlnaGVyIHRoYW4gdGhlIGdvYWwsIG5leHQgaW5wdXQgc2hvdWxkIGJlIGxvd2VyXG4xNjc0Olx0XHQgKiB0aGFuIHRoZSBsYXN0IGlucHV0LlxuMTY3NTpcdFx0ICovXG4xNjc2Olx0XHRjdXJyZW50X3Njb3JlID0gMjUwMDAwMDAwO1xuMTY3NzpcdFx0S1VOSVRfRVhQRUNUX0xUKHRlc3QsXG4xNjc4Olx0XHRcdFx0ZGFtb25fZmVlZF9sb29wX25leHRfaW5wdXQobGFzdF9pbnB1dCwgY3VycmVudF9zY29yZSksXG4xNjc5Olx0XHRcdFx0bGFzdF9pbnB1dCk7XG4xNjgwOlx0XG4xNjgxOlx0XHQvKlxuMTY4MjpcdFx0ICogVGhlIG5leHQgaW5wdXQgZGVwZW5kcyBvbiB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgY3VycmVudCBzY29yZSBhbmRcbjE2ODM6XHRcdCAqIHRoZSBnb2FsXG4xNjg0Olx0XHQgKi9cbjE2ODU6XHRcdEtVTklUX0VYUEVDVF9HVCh0ZXN0LFxuMTY4NjpcdFx0XHRcdGRhbW9uX2ZlZWRfbG9vcF9uZXh0X2lucHV0KGxhc3RfaW5wdXQsIDIwMCksXG4xNjg3Olx0XHRcdFx0ZGFtb25fZmVlZF9sb29wX25leHRfaW5wdXQobGFzdF9pbnB1dCwgMjAwMCkpO1xuMTY4ODpcdH1cbjE2ODk6XHRcbjE2OTA6XHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHN0cnVjdCBrdW5pdCAqdGVzdClcbjE2OTE6XHR7XG4xNjkyOlx0XHRzdHJ1Y3QgZGFtb3Mgc2NoZW1lO1xuMTY5MzpcdFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqdGFyZ2V0X2ZpbHRlciwgKmFub25fZmlsdGVyO1xuMTY5NDpcdFxuMTY5NTpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2NoZW1lLmNvcmVfZmlsdGVycyk7XG4xNjk2Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzY2hlbWUub3BzX2ZpbHRlcnMpO1xuMTY5NzpcdFxuMTY5ODpcdFx0ZGFtb3Nfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QoXHUwMDI2c2NoZW1lKTtcbjE2OTk6XHRcdC8qXG4xNzAwOlx0XHQgKiBObyBmaWx0ZXIgaXMgaW5zdGFsbGVkLiAgQWxsb3cgYnkgZGVmYXVsdCBvbiBib3RoIGNvcmUgYW5kIG9wcyBsYXllclxuMTcwMTpcdFx0ICogZmlsdGVyaW5nIHN0YWdlcywgc2luY2UgdGhlcmUgYXJlIG5vIGZpbHRlcnMgYXQgYWxsLlxuMTcwMjpcdFx0ICovXG4xNzAzOlx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2NoZW1lLmNvcmVfZmlsdGVyc19kZWZhdWx0X3JlamVjdCwgZmFsc2UpO1xuMTcwNDpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNjaGVtZS5vcHNfZmlsdGVyc19kZWZhdWx0X3JlamVjdCwgZmFsc2UpO1xuMTcwNTpcdFxuMTcwNjpcdFx0dGFyZ2V0X2ZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfVEFSR0VULCB0cnVlLCB0cnVlKTtcbjE3MDc6XHRcdGlmICghdGFyZ2V0X2ZpbHRlcilcbjE3MDg6XHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtmaWx0ZXIgYWxsb2MgZmFpbFwmIzM0Oyk7XG4xNzA5Olx0XHRkYW1vc19hZGRfZmlsdGVyKFx1MDAyNnNjaGVtZSwgdGFyZ2V0X2ZpbHRlcik7XG4xNzEwOlx0XHRkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChcdTAwMjZzY2hlbWUpO1xuMTcxMTpcdFx0LypcbjE3MTI6XHRcdCAqIEEgY29yZS1oYW5kbGVkIGFsbG93LWZpbHRlciBpcyBpbnN0YWxsZWQuXG4xNzEzOlx0XHQgKiBSZWplY3QgYnkgZGVmYXVsdCBvbiBjb3JlIGxheWVyIGZpbHRlcmluZyBzdGFnZSBkdWUgdG8gdGhlIGxhc3RcbjE3MTQ6XHRcdCAqIGNvcmUtbGF5ZXItZmlsdGVyJiMzOTtzIGJlaGF2aW9yLlxuMTcxNTpcdFx0ICogQWxsb3cgYnkgZGVmYXVsdCBvbiBvcHMgbGF5ZXIgZmlsdGVyaW5nIHN0YWdlIGR1ZSB0byB0aGUgYWJzZW5jZSBvZlxuMTcxNjpcdFx0ICogb3BzIGxheWVyIGZpbHRlcnMuXG4xNzE3Olx0XHQgKi9cbjE3MTg6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzY2hlbWUuY29yZV9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0LCB0cnVlKTtcbjE3MTk6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzY2hlbWUub3BzX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QsIGZhbHNlKTtcbjE3MjA6XHRcbjE3MjE6XHRcdHRhcmdldF9maWx0ZXItXHUwMDNlYWxsb3cgPSBmYWxzZTtcbjE3MjI6XHRcdGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KFx1MDAyNnNjaGVtZSk7XG4xNzIzOlx0XHQvKlxuMTcyNDpcdFx0ICogQSBjb3JlLWhhbmRsZWQgcmVqZWN0LWZpbHRlciBpcyBpbnN0YWxsZWQuXG4xNzI1Olx0XHQgKiBBbGxvdyBieSBkZWZhdWx0IG9uIGNvcmUgbGF5ZXIgZmlsdGVyaW5nIHN0YWdlIGR1ZSB0byB0aGUgbGFzdFxuMTcyNjpcdFx0ICogY29yZS1sYXllci1maWx0ZXImIzM5O3MgYmVoYXZpb3IuXG4xNzI3Olx0XHQgKiBBbGxvdyBieSBkZWZhdWx0IG9uIG9wcyBsYXllciBmaWx0ZXJpbmcgc3RhZ2UgZHVlIHRvIHRoZSBhYnNlbmNlIG9mXG4xNzI4Olx0XHQgKiBvcHMgbGF5ZXIgZmlsdGVycy5cbjE3Mjk6XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzEyNwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgKioKCk9rYXksIHNvIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgZW5kIG9mIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZmlsZSBsaWtlbHkgY29udGFpbnMgdGhlIGNvcmUgS1VuaXQgdGVzdHMgZm9yIERBTU9OLCB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvci4gS25vd2luZyB0aGUgZW5kIGlzIGtleS4gSXQmIzM5O3MgdXN1YWxseSB3aGVyZSB5b3UmIzM5O2xsIGZpbmQgdGhlIGxhc3QgdGVzdCBjYXNlcywgcG90ZW50aWFsbHkgcmVjZW50IGFkZGl0aW9ucywgb3IgbWF5YmUgYSBzdW1tYXJ5L2VuZC1vZi1maWxlIG1hcmtlciB0aGF0IGdpdmVzIG1lIGNvbnRleHQuIFdoYXQgYXJlIHRoZXkgdGVzdGluZz8gV2hhdCBmdW5jdGlvbmFsaXR5IGluIERBTU9OJiMzOTtzIGNvcmUgaXMgYmVpbmcgdmFsaWRhdGVkIGhlcmU/IEFyZSB0aGVyZSBhbnkgbmV3IHRlc3QgZml4dHVyZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSByZWdyZXNzaW9uIHRlc3RzPwoKSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGRlZmluaXRpb25zIGZvciBga3VuaXRfY2FzZWAgc3RydWN0dXJlcywgdGVzdCBmdW5jdGlvbnMgdGhhdCBvcGVyYXRlIG9uIHRob3NlIHN0cnVjdHVyZXMsIGFuZCBob3BlZnVsbHksIHNvbWUgY29tbWVudGFyeSBvciBkb2N1bWVudGF0aW9uIHRoYXQgY2xhcmlmaWVzIHRoZSBpbnRlbmRlZCBiZWhhdmlvci4gSeKAmW0gaG9waW5nIHRvIHVuZGVyc3RhbmQgaG93IHRob3JvdWdobHkgREFNT04mIzM5O3MgbWVtb3J5IG1vbml0b3JpbmcgYW5kIGFkYXB0YXRpb24gbWVjaGFuaXNtcyBhcmUgYmVpbmcgdGVzdGVkIGF0IHRoZSBLVW5pdCBsZXZlbC4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGJhc2ljIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biB0ZXN0cywgdG8gbW9yZSBjb21wbGV4IHNjZW5hcmlvcyBpbnZvbHZpbmcgYWNjZXNzIHBhdHRlcm4gYW5hbHlzaXMsIGFkYXB0YXRpb24gdHJpZ2dlcmluZywgYW5kIHBlcmZvcm1hbmNlIGltcGFjdC4gVGhlIGVuZCBvZiB0aGUgZmlsZSBtaWdodCBoYXZlIHNvbWUgY2x1ZXMgdG8gd2hhdCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgdGVzdHMgYXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyB3ZWxsIGl0IHRlc3RzIERBTU9OJiMzOTtzIGltcG9ydGFudCBmdW5jdGlvbmFsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTczMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzMwOlx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2NoZW1lLmNvcmVfZmlsdGVyc19kZWZhdWx0X3JlamVjdCwgZmFsc2UpO1xuMTczMTpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNjaGVtZS5vcHNfZmlsdGVyc19kZWZhdWx0X3JlamVjdCwgZmFsc2UpO1xuMTczMjpcdFxuMTczMzpcdFx0YW5vbl9maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKERBTU9TX0ZJTFRFUl9UWVBFX0FOT04sIHRydWUsIHRydWUpO1xuMTczNDpcdFx0aWYgKCFhbm9uX2ZpbHRlcikge1xuMTczNTpcdFx0XHRkYW1vc19mcmVlX2ZpbHRlcih0YXJnZXRfZmlsdGVyKTtcbjE3MzY6XHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDthbm9uX2ZpbHRlciBhbGxvYyBmYWlsXCYjMzQ7KTtcbjE3Mzc6XHRcdH1cbjE3Mzg6XHRcdGRhbW9zX2FkZF9maWx0ZXIoXHUwMDI2c2NoZW1lLCBhbm9uX2ZpbHRlcik7XG4xNzM5Olx0XG4xNzQwOlx0XHRkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChcdTAwMjZzY2hlbWUpO1xuMTc0MTpcdFx0LypcbjE3NDI6XHRcdCAqIEEgY29yZS1oYW5kbGVkIHJlamVjdC1maWx0ZXIgYW5kIG9wcy1oYW5kbGVkIGFsbG93LWZpbHRlciBhcmUgaW5zdGFsbGVkLlxuMTc0MzpcdFx0ICogQWxsb3cgYnkgZGVmYXVsdCBvbiBjb3JlIGxheWVyIGZpbHRlcmluZyBzdGFnZSBkdWUgdG8gdGhlIGV4aXN0ZW5jZVxuMTc0NDpcdFx0ICogb2YgdGhlIG9wcy1oYW5kbGVkIGZpbHRlci5cbjE3NDU6XHRcdCAqIFJlamVjdCBieSBkZWZhdWx0IG9uIG9wcyBsYXllciBmaWx0ZXJpbmcgc3RhZ2UgZHVlIHRvIHRoZSBsYXN0XG4xNzQ2Olx0XHQgKiBvcHMtbGF5ZXItZmlsdGVyJiMzOTtzIGJlaGF2aW9yLlxuMTc0NzpcdFx0ICovXG4xNzQ4Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2NoZW1lLmNvcmVfZmlsdGVyc19kZWZhdWx0X3JlamVjdCwgZmFsc2UpO1xuMTc0OTpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNjaGVtZS5vcHNfZmlsdGVyc19kZWZhdWx0X3JlamVjdCwgdHJ1ZSk7XG4xNzUwOlx0XG4xNzUxOlx0XHR0YXJnZXRfZmlsdGVyLVx1MDAzZWFsbG93ID0gdHJ1ZTtcbjE3NTI6XHRcdGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KFx1MDAyNnNjaGVtZSk7XG4xNzUzOlx0XHQvKlxuMTc1NDpcdFx0ICogQSBjb3JlLWhhbmRsZWQgYWxsb3ctZmlsdGVyIGFuZCBvcHMtaGFuZGxlZCBhbGxvdy1maWx0ZXIgYXJlXG4xNzU1Olx0XHQgKiBpbnN0YWxsZWQuXG4xNzU2Olx0XHQgKiBBbGxvdyBieSBkZWZhdWx0IG9uIGNvcmUgbGF5ZXIgZmlsdGVyaW5nIHN0YWdlIGR1ZSB0byB0aGUgZXhpc3RlbmNlXG4xNzU3Olx0XHQgKiBvZiB0aGUgb3BzLWhhbmRsZWQgZmlsdGVyLlxuMTc1ODpcdFx0ICogUmVqZWN0IGJ5IGRlZmF1bHQgb24gb3BzIGxheWVyIGZpbHRlcmluZyBzdGFnZSBkdWUgdG8gdGhlIGxhc3RcbjE3NTk6XHRcdCAqIG9wcy1sYXllci1maWx0ZXImIzM5O3MgYmVoYXZpb3IuXG4xNzYwOlx0XHQgKi9cbjE3NjE6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzY2hlbWUuY29yZV9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0LCBmYWxzZSk7XG4xNzYyOlx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2NoZW1lLm9wc19maWx0ZXJzX2RlZmF1bHRfcmVqZWN0LCB0cnVlKTtcbjE3NjM6XHRcbjE3NjQ6XHRcdGRhbW9zX2ZyZWVfZmlsdGVyKGFub25fZmlsdGVyKTtcbjE3NjU6XHRcdGRhbW9zX2ZyZWVfZmlsdGVyKHRhcmdldF9maWx0ZXIpO1xuMTc2NjpcdH1cbjE3Njc6XHRcbjE3Njg6XHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FwcGx5X21pbl9ucl9yZWdpb25zX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4xNzY5Olx0XHRcdHVuc2lnbmVkIGxvbmcgc3pfcmVnaW9ucywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6LFxuMTc3MDpcdFx0XHR1bnNpZ25lZCBsb25nIG1pbl9ucl9yZWdpb25zLFxuMTc3MTpcdFx0XHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3pfZXhwZWN0LFxuMTc3MjpcdFx0XHR1bnNpZ25lZCBsb25nIG5yX3JlZ2lvbnNfZXhwZWN0KVxuMTc3MzpcdHtcbjE3NzQ6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbjE3NzU6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4xNzc2Olx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuMTc3NzpcdFx0dW5zaWduZWQgbG9uZyBtYXhfcmVnaW9uX3NpemU7XG4xNzc4Olx0XG4xNzc5Olx0XHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XG4xNzgwOlx0XHRpZiAoIWN0eClcbjE3ODE6XHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtjdHggYWxsb2MgZmFpbFxcblwmIzM0Oyk7XG4xNzgyOlx0XHR0ID0gZGFtb25fbmV3X3RhcmdldCgpO1xuMTc4MzpcdFx0aWYgKCF0KSB7XG4xNzg0Olx0XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4xNzg1Olx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7dGFyZ2V0IGFsbG9jIGZhaWxcXG5cJiMzNDspO1xuMTc4NjpcdFx0fVxuMTc4NzpcdFx0ZGFtb25fYWRkX3RhcmdldChjdHgsIHQpO1xuMTc4ODpcdFx0ciA9IGRhbW9uX25ld19yZWdpb24oMCwgc3pfcmVnaW9ucyk7XG4xNzg5Olx0XHRpZiAoIXIpIHtcbjE3OTA6XHRcdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbjE3OTE6XHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtyZWdpb24gYWxsb2MgZmFpbFxcblwmIzM0Oyk7XG4xNzkyOlx0XHR9XG4xNzkzOlx0XHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xuMTc5NDpcdFxuMTc5NTpcdFx0Y3R4LVx1MDAzZW1pbl9yZWdpb25fc3ogPSBtaW5fcmVnaW9uX3N6O1xuMTc5NjpcdFx0Y3R4LVx1MDAzZWF0dHJzLm1pbl9ucl9yZWdpb25zID0gbWluX25yX3JlZ2lvbnM7XG4xNzk3Olx0XHRtYXhfcmVnaW9uX3NpemUgPSBkYW1vbl9hcHBseV9taW5fbnJfcmVnaW9ucyhjdHgpO1xuMTc5ODpcdFxuMTc5OTpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIG1heF9yZWdpb25fc2l6ZSwgbWF4X3JlZ2lvbl9zel9leHBlY3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDY2OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkLCBhbmFseXppbmcgdGhlIHNpdHVhdGlvbjoKCioqUmV2aWV3aW5nIENvcmUgS1VuaXQgVGVzdCBEZWZpbml0aW9ucyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSByZXN0IG9mIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBUaGlzIGxpa2VseSBjb250YWlucyBjcml0aWNhbCBkZWZpbml0aW9ucyBmb3IgdGhlIGNvcmUgS1VuaXQgdGVzdHMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpLiBVbmRlcnN0YW5kaW5nIHRoaXMgaGVhZGVyIGZpbGUgaXMgZXNzZW50aWFsIGZvciBzZXZlcmFsIHJlYXNvbnMuIEl0IGNvdWxkIGRldGFpbCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgaW4gdGhlc2UgY29yZSB0ZXN0cywgZGVmaW5lIG1hY3JvcyBmb3IgdGVzdCBzZXR1cCBhbmQgdGVhcmRvd24sIG9yIHNwZWNpZnkgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9yIHRlc3RpbmcgY29uZGl0aW9ucyBmb3Igc3BlY2lmaWMgREFNT04gZnVuY3Rpb25hbGl0aWVzLiBJdCBtaWdodCBldmVuIGluY2x1ZGUgaW5saW5lIGZ1bmN0aW9ucyBvciBoZWxwZXIgcm91dGluZXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciB0aGUgS1VuaXQgdGVzdHMgd2l0aGluIHRoaXMgbW9kdWxlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgc2NvcGUgYW5kIGNvbXBsZXhpdHkgb2YgdGhlIHRlc3RzIGRlZmluZWQgd2l0aGluLiBJdCBpcyB2ZXJ5IGxpa2VseSB0aGF0IHRoaXMgaGVhZGVyIGNvbnRhaW5zIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHRoYXQgaW5jbHVkZS9leGNsdWRlIHNwZWNpZmljIHBhcnRzIG9mIHRoZSB0ZXN0aW5nIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24uIFRoaXMgY291bGQgYmUgcmVsZXZhbnQgdG8gdW5kZXJzdGFuZGluZyBzcGVjaWZpYyBiZWhhdmlvcnMuIFVsdGltYXRlbHksIGV4YW1pbmluZyB0aGlzIGhlYWRlciBpcyBjcnVjaWFsIHRvIHByb3Blcmx5IGdyb2sgdGhlIHRlc3Qgc3RyYXRlZ3kgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDY6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MDA6XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCBucl9yZWdpb25zX2V4cGVjdCk7XG4xODAxOlx0XG4xODAyOlx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuMTgwMzpcdH1cbjE4MDQ6XHRcbjE4MDU6XHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FwcGx5X21pbl9ucl9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdClcbjE4MDY6XHR7XG4xODA3Olx0XHQvKiBjb21tb24sIGV4cGVjdGVkIHNldHVwICovXG4xODA4Olx0XHRkYW1vbl90ZXN0X2FwcGx5X21pbl9ucl9yZWdpb25zX2Zvcih0ZXN0LCAxMCwgMSwgMTAsIDEsIDEwKTtcbjE4MDk6XHRcdC8qIG5vIHplcm8gc2l6ZSBsaW1pdCAqL1xuMTgxMDpcdFx0ZGFtb25fdGVzdF9hcHBseV9taW5fbnJfcmVnaW9uc19mb3IodGVzdCwgMTAsIDEsIDE1LCAxLCAxMCk7XG4xODExOlx0XHQvKiBtYXggc2l6ZSBzaG91bGQgYmUgYWxpZ25lZCBieSBtaW5fcmVnaW9uX3N6ICovXG4xODEyOlx0XHRkYW1vbl90ZXN0X2FwcGx5X21pbl9ucl9yZWdpb25zX2Zvcih0ZXN0LCAxMCwgMiwgMiwgNiwgMik7XG4xODEzOlx0XHQvKlxuMTgxNDpcdFx0ICogd2hlbiBtaW5fbnJfcmVnaW9ucyBhbmQgbWluX3JlZ2lvbl9zeiBjb25mbGljdHMsIG1pbl9yZWdpb25fc3ogd2lucy5cbjE4MTU6XHRcdCAqL1xuMTgxNjpcdFx0ZGFtb25fdGVzdF9hcHBseV9taW5fbnJfcmVnaW9uc19mb3IodGVzdCwgMTAsIDIsIDEwLCAyLCA1KTtcbjE4MTc6XHR9XG4xODE4Olx0XG4xODE5Olx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF9pc19sYXN0X3JlZ2lvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4xODIwOlx0e1xuMTgyMTpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbjE4MjI6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4xODIzOlx0XHRpbnQgaTtcbjE4MjQ6XHRcbjE4MjU6XHRcdHQgPSBkYW1vbl9uZXdfdGFyZ2V0KCk7XG4xODI2Olx0XHRpZiAoIXQpXG4xODI3Olx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7dGFyZ2V0IGFsbG9jIGZhaWxcXG5cJiMzNDspO1xuMTgyODpcdFxuMTgyOTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgNDsgaSYjNDM7JiM0MzspIHtcbjE4MzA6XHRcdFx0ciA9IGRhbW9uX25ld19yZWdpb24oaSAqIDIsIChpICYjNDM7IDEpICogMik7XG4xODMxOlx0XHRcdGlmICghcikge1xuMTgzMjpcdFx0XHRcdGRhbW9uX2ZyZWVfdGFyZ2V0KHQpO1xuMTgzMzpcdFx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7cmVnaW9uIGFsbG9jICVkIGZhaWxcXG5cJiMzNDssIGkpO1xuMTgzNDpcdFx0XHR9XG4xODM1Olx0XHRcdGRhbW9uX2FkZF9yZWdpb24ociwgdCk7XG4xODM2Olx0XHRcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIGRhbW9uX2lzX2xhc3RfcmVnaW9uKHIsIHQpKTtcbjE4Mzc6XHRcdH1cbjE4Mzg6XHRcdGRhbW9uX2ZyZWVfdGFyZ2V0KHQpO1xuMTgzOTpcdH1cbjE4NDA6XHRcbjE4NDE6XHQvKlxuMTg0MjpcdCAqIFZlcmlmeSB0aGF0IGRhbW9zX3dhbGsoKSByZWplY3RzIG5ldyByZXF1ZXN0cyB3aGVuXG4xODQzOlx0ICogd2Fsa19jb250cm9sX29ic29sZXRlIGlzIHNldC5cbjE4NDQ6XHQgKlxuMTg0NTpcdCAqIFRoaXMgdGVzdHMgdGhlIGludmFyaWFudCBpbnRyb2R1Y2VkIGJ5OlxuMTg0NjpcdCAqIGNvbW1pdCAzM2MzZjZjMmI0OGMgKFwmIzM0O21tL2RhbW9uL2NvcmU6IGZpeCBkYW1vc193YWxrKCkgdnMga2RhbW9uZF9mbigpIGV4aXQgcmFjZVwmIzM0OylcbjE4NDc6XHQgKi9cbjE4NDg6XHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4xODQ5Olx0e1xuMTg1MDpcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuMTg1MTpcdFx0c3RydWN0IGRhbW9zX3dhbGtfY29udHJvbCBjb250cm9sID0ge307XG4xODUyOlx0XHRpbnQgcmV0O1xuMTg1MzpcdFxuMTg1NDpcdFx0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xuMTg1NTpcdFx0aWYgKCFjdHgpXG4xODU2Olx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7Y3R4IGFsbG9jIGZhaWxcJiMzNDspO1xuMTg1NzpcdFxuMTg1ODpcdFx0LyogU2ltdWxhdGUgc2h1dGRvd24gcGhhc2UgKi9cbjE4NTk6XHRcdGN0eC1cdTAwM2V3YWxrX2NvbnRyb2xfb2Jzb2xldGUgPSB0cnVlO1xuMTg2MDpcdFxuMTg2MTpcdFx0cmV0ID0gZGFtb3Nfd2FsayhjdHgsIFx1MDAyNmNvbnRyb2wpO1xuMTg2MjpcdFxuMTg2MzpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJldCwgLUVDQU5DRUxFRCk7XG4xODY0Olx0XG4xODY1Olx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuMTg2NjpcdH1cbjE4Njc6XHRcbjE4Njg6XHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3JhbmQoc3RydWN0IGt1bml0ICp0ZXN0KVxuMTg2OTpcdHtcbjE4NzA6XHRcdHN0cnVjdCBkYW1vbl9jdHggY3R4O1xuMTg3MTpcdFx0aW50IGk7XG4xODcyOlx0XG4xODczOlx0XHRwcmFuZG9tX3NlZWRfc3RhdGUoXHUwMDI2Y3R4LnJuZF9zdGF0ZSwgZ2V0X3JhbmRvbV91NjQoKSk7XG4xODc0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxMDAwMDsgaSYjNDM7JiM0MzspIHtcbjE4NzU6XHRcdFx0dW5zaWduZWQgbG9uZyBybmQgPSBkYW1vbl9yYW5kKFx1MDAyNmN0eCwgMCwgMTApO1xuMTg3NjpcdFxuMTg3NzpcdFx0XHRLVU5JVF9FWFBFQ1RfR0UodGVzdCwgcm5kLCAwKTtcbjE4Nzg6XHRcdFx0S1VOSVRfRVhQRUNUX0xFKHRlc3QsIHJuZCwgOSk7XG4xODc5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjU2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQsIGFuYWx5emluZyB0aGUgc2l0dWF0aW9uOgoKKipSZXZpZXdpbmcgQ29yZSBLVW5pdCBUZXN0IERlZmluaXRpb25zKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHJlc3Qgb2YgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIFRoaXMgbGlrZWx5IGNvbnRhaW5zIGNyaXRpY2FsIGRlZmluaXRpb25zIGZvciB0aGUgY29yZSBLVW5pdCB0ZXN0cyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykuIFVuZGVyc3RhbmRpbmcgdGhpcyBoZWFkZXIgZmlsZSBpcyBlc3NlbnRpYWwgZm9yIHNldmVyYWwgcmVhc29ucy4gSXQgY291bGQgZGV0YWlsIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBpbiB0aGVzZSBjb3JlIHRlc3RzLCBkZWZpbmUgbWFjcm9zIGZvciB0ZXN0IHNldHVwIGFuZCB0ZWFyZG93biwgb3Igc3BlY2lmeSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb3IgdGVzdGluZyBjb25kaXRpb25zIGZvciBzcGVjaWZpYyBEQU1PTiBmdW5jdGlvbmFsaXRpZXMuIEl0IG1pZ2h0IGV2ZW4gaW5jbHVkZSBpbmxpbmUgZnVuY3Rpb25zIG9yIGhlbHBlciByb3V0aW5lcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIHRoZSBLVW5pdCB0ZXN0cyB3aXRoaW4gdGhpcyBtb2R1bGUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBzY29wZSBhbmQgY29tcGxleGl0eSBvZiB0aGUgdGVzdHMgZGVmaW5lZCB3aXRoaW4uIEl0IGlzIHZlcnkgbGlrZWx5IHRoYXQgdGhpcyBoZWFkZXIgY29udGFpbnMgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCBpbmNsdWRlL2V4Y2x1ZGUgc3BlY2lmaWMgcGFydHMgb2YgdGhlIHRlc3RpbmcgYmFzZWQgb24gY29uZmlndXJhdGlvbi4gVGhpcyBjb3VsZCBiZSByZWxldmFudCB0byB1bmRlcnN0YW5kaW5nIHNwZWNpZmljIGJlaGF2aW9ycy4gVWx0aW1hdGVseSwgZXhhbWluaW5nIHRoaXMgaGVhZGVyIGlzIGNydWNpYWwgdG8gcHJvcGVybHkgZ3JvayB0aGUgdGVzdCBzdHJhdGVneSBhbmQgaXRzIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg4MDpcdH1cbjE4ODE6XHRcbjE4ODI6XHRzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xuMTg4MzpcdFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3RhcmdldCksXG4xODg0Olx0XHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfcmVnaW9ucyksXG4xODg1Olx0XHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfYWdncmVnYXRlKSxcbjE4ODY6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zcGxpdF9hdCksXG4xODg3Olx0XHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKSxcbjE4ODg6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKSxcbjE4ODk6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zcGxpdF9yZWdpb25zX29mKSxcbjE4OTA6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zcGxpdF9hYm92ZV9oYWxmX3Byb2dyZXNzZXMpLFxuMTg5MTpcdFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24pLFxuMTg5MjpcdFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NldF9yZWdpb25zKSxcbjE4OTM6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyKSxcbjE4OTQ6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQpLFxuMTg5NTpcdFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NldF9hdHRycyksXG4xODk2Olx0XHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbXZzdW0pLFxuMTg5NzpcdFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX212c3VtKSxcbjE4OTg6XHRcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9uZXdfZmlsdGVyKSxcbjE4OTk6XHRcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbCksXG4xOTAwOlx0XHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzKSxcbjE5MDE6XHRcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfcXVvdGEpLFxuMTkwMjpcdFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9kZXN0cyksXG4xOTAzOlx0XHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X2ZpbHRlciksXG4xOTA0Olx0XHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3BhZ2VvdXQpLFxuMTkwNTpcdFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9taWdyYXRlX2hvdCksXG4xOTA2Olx0XHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X3RhcmdldF9yZWdpb25zKSxcbjE5MDc6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfZmlsdGVyKSxcbjE5MDg6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfcHJvYmVzKSxcbjE5MDk6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfY3R4KSxcbjE5MTA6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF92YWxpZF9wcm9iZV9wYXJhbXMpLFxuMTkxMTpcdFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2ZpbHRlcl9vdXQpLFxuMTkxMjpcdFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2ZlZWRfbG9vcF9uZXh0X2lucHV0KSxcbjE5MTM6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdCksXG4xOTE0Olx0XHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfYXBwbHlfbWluX25yX3JlZ2lvbnMpLFxuMTkxNTpcdFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2lzX2xhc3RfcmVnaW9uKSxcbjE5MTY6XHRcdEtVTklUX0NBU0UoZGFtb25fdGVzdF93YWxrX2NvbnRyb2xfb2Jzb2xldGUpLFxuMTkxNzpcdFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3JhbmQpLFxuMTkxODpcdFx0e30sXG4xOTE5Olx0fTtcbjE5MjA6XHRcbjE5MjE6XHRzdGF0aWMgc3RydWN0IGt1bml0X3N1aXRlIGRhbW9uX3Rlc3Rfc3VpdGUgPSB7XG4xOTIyOlx0XHQubmFtZSA9IFwmIzM0O2RhbW9uXCYjMzQ7LFxuMTkyMzpcdFx0LnRlc3RfY2FzZXMgPSBkYW1vbl90ZXN0X2Nhc2VzLFxuMTkyNDpcdH07XG4xOTI1Olx0a3VuaXRfdGVzdF9zdWl0ZShkYW1vbl90ZXN0X3N1aXRlKTtcbjE5MjY6XHRcbjE5Mjc6XHQjZW5kaWYgLyogX0RBTU9OX0NPUkVfVEVTVF9IICovXG4xOTI4Olx0XG4xOTI5Olx0I2VuZGlmXHQvKiBDT05GSUdfREFNT05fS1VOSVRfVEVTVCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzUzMAoJCQkJCQkJb3V0cHV0OiA5NQoJCQkJCQkJdGhvdWdodHM6IDE0MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJpYWdlIERlY2lzaW9uOiBOb24tRnV6emFibGUgS1VuaXQgVGVzdCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBhZmZlY3RzIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLCBzcGVjaWZpY2FsbHkgdGhlIGBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3JgIHVuaXQgdGVzdCBmdW5jdGlvbiwgYW5kIG9ubHkgdGhhdC4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgc28gSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgdGhlIGdpdCBkaWZmIOKAkyBub3RoaW5nIGVsc2Ugd2FzIHRvdWNoZWQgaW4gdGhpcyBjb21taXQuIEdvb2QuCgpOb3csIGxldCYjMzk7cyBhcHBseSBteSBleHBlcnRpc2UgYW5kIHdhbGsgdGhyb3VnaCB0aGUgdHJpYWdlIHBoaWxvc29waHkuIFNwZWNpZmljYWxseSwgc2VjdGlvbiAyOiB0aGUgKm5lZ2F0aXZlIGNyaXRlcmlhKiBmb3IgcmV0dXJuaW5nIFdvcnRoRnV6emluZz1mYWxzZS4gVGhpcyBpcyBhIGNydWNpYWwgc3RlcCB0byBhdm9pZCB3YXN0aW5nIHJlc291cmNlcy4KClRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNoYW5nZSBmYWxscyB1bmRlciB0aGUgY2F0ZWdvcnkgb2YgY29kZSB0aGF0ICppc24mIzM5O3QqIHJlYWNoYWJsZSB2aWEgc3lzY2FsbCBmdXp6aW5nLCB3aGljaCBpcyB3aGF0IFN5emthbGxlciBkb2VzLiBBcmUgS1VuaXQgdGVzdHMgY29uc2lkZXJlZCAmIzM0O3Rlc3QgY29kZSB0aGF0IGlzIG5vdCByZWFjaGFibGUgdmlhIHN5c2NhbGwgZnV6emluZyYjMzQ7PyBBbmQsIGFyZSB0aGV5IHJlYWNoYWJsZSBieSBTeXprYWxsZXIgYXQgYWxsPyBLVW5pdCB0ZXN0cyBydW4gZWl0aGVyIGR1cmluZyBrZXJuZWwgYm9vdCB3aGVuIGJ1aWx0LWluLCBvciB3aGVuIGxvYWRlZCBhcyBhIG1vZHVsZSAvIHRyaWdnZXJlZCB2aWEgZGVidWdmcy9rdW5pdC4gU3l6a2FsbGVyIGlzIGEgc3lzY2FsbCBmdXp6ZXIgdGhhdCBmdXp6ZXMgc3lzY2FsbCBpbnRlcmZhY2VzIGFuZCBrZXJuZWwgZnVuY3Rpb25hbGl0eSBkdXJpbmcgbm9ybWFsIHJ1bnRpbWUuIEtVbml0IHRlc3QgY2FzZXMgYXJlIHVuaXQgdGVzdHMgKGxpa2Ugc2VsZnRlc3RzL2t1bml0KSwgbm90IHBhcnQgb2YgcnVudGltZSBvcGVyYXRpb25hbCBrZXJuZWwgbG9naWMgb3IgaW50ZXJmYWNlcy4KCkxvb2tpbmcgYXQgdGhlIGd1aWRlbGluZXMsIEkgY2FuJiMzOTt0IGZpbmQgYW55dGhpbmcgYWJvdXQgS1VuaXQgdGVzdCBzcGVjaWZpY2FsbHkuIExldCYjMzk7cyBzZWU6CgoqICAgSXQmIzM5O3Mgbm90IG5vbi1rZXJuZWwgb3Igbm9uLWV4ZWN1dGFibGUgY2hhbmdlcyAoZXhjZXB0IGZvciB0ZXN0IGNvZGUuKQoqICAgSXQmIzM5O3Mgbm90IHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4KKiAgIEl0JiMzOTtzIG5vdCB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuCgpCdXQ6CgoqICAgVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywgYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KKiAgIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOiBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KClRoZSBwYXRjaCAqb25seSogbW9kaWZpZXMgYSBLVW5pdCB1bml0IHRlc3QgZnVuY3Rpb24uIEl0IGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgbG9naWMsIHRoZSBEQU1PTiBjb3JlIGltcGxlbWVudGF0aW9uICh0aGUgYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JgIGZ1bmN0aW9uICppdHNlbGYqIHdhc24mIzM5O3QgbW9kaWZpZWQpLCBvciBzeXNjYWxscywgb3IgZHJpdmVycywgb3IgYW55IHJ1bnRpbWUgZXhlY3V0YWJsZSBjb2RlLiBUaGVzZSBLVW5pdCB0ZXN0cyBhcmUgc2VsZi1jb250YWluZWQgYW5kIG5vdCBleHBvc2VkIHRvIHN5c2NhbGwgZnV6emluZy4gS1VuaXQgdGVzdHMgYXJlIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byB0ZXN0IHVuaXRzIG9mIGNvZGUgaW4gaXNvbGF0aW9uIGFuZCBkbyBub3QgYWZmZWN0IHJ1bnRpbWUga2VybmVsIGJlaGF2aW9yLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGlzIHBhdGNoIGlzIHN0cmljdGx5IG1vZGlmeWluZyBhIHVuaXQgdGVzdCAoS1VuaXQgdGVzdCBzdWl0ZSkgYW5kIG5vdCBhZmZlY3RpbmcgYW55IHJ1bnRpbWUga2VybmVsIGxvZ2ljIG9yIHN5c2NhbGwgaW50ZXJmYWNlcywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgV29ydGhGdXp6aW5nID0gZmFsc2VgLgoKU28sIHRoZSByZWFzb25pbmcgaXMgY29uY2lzZTogVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1VuaXQgdW5pdCB0ZXN0cyAoYGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdncmAgaW4gYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGApIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgcnVudGltZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIHN5c2NhbGwgaW50ZXJmYWNlcy4gTm8gZnV6emluZyByZXF1aXJlZC4gTm93LCBJIHdpbGwgYGludm9rZSBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA2OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSB1cGRhdGVzIHRlc3QgYXNzZXJ0aW9ucyBhbmQgY2FzZXMgaW4gdGhlIEtVbml0IHRlc3Qgc3VpdGUgKGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdnciBpbiBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgpLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IERBTU9OIGNvcmUgcnVudGltZSBsb2dpYywgZHJpdmVycywgb3Igc3lzY2FsbC1yZWFjaGFibGUga2VybmVsIGV4ZWN1dGlvbiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgdXBkYXRlcyB0ZXN0IGFzc2VydGlvbnMgYW5kIGNhc2VzIGluIHRoZSBLVW5pdCB0ZXN0IHN1aXRlIChkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3IgaW4gbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oKS4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBEQU1PTiBjb3JlIHJ1bnRpbWUgbG9naWMsIGRyaXZlcnMsIG9yIHN5c2NhbGwtcmVhY2hhYmxlIGtlcm5lbCBleGVjdXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNjo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDM6MzkuMTAwMzM4MzUzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NzExMjM0NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSB1cGRhdGVzIHRlc3QgYXNzZXJ0aW9ucyBhbmQgY2FzZXMgaW4gdGhlIEtVbml0IHRlc3Qgc3VpdGUgKGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdnciBpbiBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgpLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IERBTU9OIGNvcmUgcnVudGltZSBsb2dpYywgZHJpdmVycywgb3Igc3lzY2FsbC1yZWFjaGFibGUga2VybmVsIGV4ZWN1dGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQzOjM5LjEwMDM0NjIzM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI4NzYzNjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGI1ZjU1YTU0NDYxMmNkY2RkNDBkMDllZTY2NjliNzk4MTFjNjY3ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDA2OjQzOjM4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbmluZGV4IGMwMWU2YTc1Y2FkYzEuLmZmMjMyMDhjMTgxMzkgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXFxuKysrIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXFxuQEAgLTYyNywxMiArNjI3LDIwIEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXG4gc3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4ge1xcbi1cXHRzdHJ1Y3QgZGFtb25fYXR0cnMgYXR0cnMgPSB7XFxuK1xcdHN0cnVjdCBkYW1vbl9hdHRycyBhdHRycztcXG4rXFxuK1xcdC8qIFplcm8gc2FtcGxlIGludGVydmFsIGlzIHRyZWF0ZWQgYXMgb25lLiAqL1xcbitcXHRhdHRycyA9IChzdHJ1Y3QgZGFtb25fYXR0cnMpe1xcbiBcXHRcXHQuc2FtcGxlX2ludGVydmFsID0gMCxcXG4tXFx0XFx0LmFnZ3JfaW50ZXJ2YWwgPSAwLFxcbitcXHRcXHQuYWdncl9pbnRlcnZhbCA9IDUwMDAsXFxuIFxcdH07XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxcdTAwMjZhdHRycyksIDUwMDApO1xcbiBcXG4tXFx0LyogWmVybyBhZ2dyZWdhdGlvbiBpbnRlcnZhbCBkb2Vzbid0IGNhdXNlIGRpdmlzaW9uIGJ5IHplcm8gKi9cXG4rXFx0LyogWmVybyBzYW1wbGVzIHBlciBhZ2dyZWdhdGlvbiBpcyB0cmVhdGVkIGFzIG9uZS4gKi9cXG4rXFx0YXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcXG4rXFx0XFx0LnNhbXBsZV9pbnRlcnZhbCA9IDUwMDAsXFxuK1xcdFxcdC5hZ2dyX2ludGVydmFsID0gMCxcXG4rXFx0fTtcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXFx1MDAyNmF0dHJzKSwgMSk7XFxuIFxcbiBcXHQvKlxcbkBAIC02NDAsNyArNjQ4LDEwIEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdncihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdCAqIG92ZXJmbG93XFxuIFxcdCAqL1xcbiBcXHRpZiAoVUxPTkdfTUFYIFxcdTAwM2UgVUlOVF9NQVgpIHtcXG4tXFx0XFx0YXR0cnMuYWdncl9pbnRlcnZhbCA9ICh1bnNpZ25lZCBsb25nKVVJTlRfTUFYICsgMTtcXG4rXFx0XFx0YXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcXG4rXFx0XFx0XFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEsXFxuK1xcdFxcdFxcdC5hZ2dyX2ludGVydmFsID0gKHVuc2lnbmVkIGxvbmcpVUlOVF9NQVggKyAxLFxcbitcXHRcXHR9O1xcbiBcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcXHUwMDI2YXR0cnMpLFxcbiBcXHRcXHRcXHRcXHRVSU5UX01BWCk7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDM6MzkuNjI5ODQ0MTY0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMTgxODE3MTU4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgdXBkYXRlcyB0ZXN0IGFzc2VydGlvbnMgYW5kIGNhc2VzIGluIHRoZSBLVW5pdCB0ZXN0IHN1aXRlIChkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3IgaW4gbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oKS4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBEQU1PTiBjb3JlIHJ1bnRpbWUgbG9naWMsIGRyaXZlcnMsIG9yIHN5c2NhbGwtcmVhY2hhYmxlIGtlcm5lbCBleGVjdXRpb24gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRiNWY1NWE1NDQ2MTJjZGNkZDQwZDA5ZWU2NjY5Yjc5ODExYzY2N2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDA2OjQzOjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5pbmRleCBjMDFlNmE3NWNhZGMxLi5mZjIzMjA4YzE4MTM5IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG4rKysgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbkBAIC02MjcsMTIgKzYyNywyMCBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcbiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3Ioc3RydWN0IGt1bml0ICp0ZXN0KVxuIHtcbi1cdHN0cnVjdCBkYW1vbl9hdHRycyBhdHRycyA9IHtcbitcdHN0cnVjdCBkYW1vbl9hdHRycyBhdHRycztcbitcbitcdC8qIFplcm8gc2FtcGxlIGludGVydmFsIGlzIHRyZWF0ZWQgYXMgb25lLiAqL1xuK1x0YXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcbiBcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDAsXG4tXHRcdC5hZ2dyX2ludGVydmFsID0gMCxcbitcdFx0LmFnZ3JfaW50ZXJ2YWwgPSA1MDAwLFxuIFx0fTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmF0dHJzKSwgNTAwMCk7XG4gXG4tXHQvKiBaZXJvIGFnZ3JlZ2F0aW9uIGludGVydmFsIGRvZXNuJ3QgY2F1c2UgZGl2aXNpb24gYnkgemVybyAqL1xuK1x0LyogWmVybyBzYW1wbGVzIHBlciBhZ2dyZWdhdGlvbiBpcyB0cmVhdGVkIGFzIG9uZS4gKi9cbitcdGF0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7XG4rXHRcdC5zYW1wbGVfaW50ZXJ2YWwgPSA1MDAwLFxuK1x0XHQuYWdncl9pbnRlcnZhbCA9IDAsXG4rXHR9O1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2YXR0cnMpLCAxKTtcbiBcbiBcdC8qXG5AQCAtNjQwLDcgKzY0OCwxMCBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3Ioc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0ICogb3ZlcmZsb3dcbiBcdCAqL1xuIFx0aWYgKFVMT05HX01BWCBcdTAwM2UgVUlOVF9NQVgpIHtcbi1cdFx0YXR0cnMuYWdncl9pbnRlcnZhbCA9ICh1bnNpZ25lZCBsb25nKVVJTlRfTUFYICsgMTtcbitcdFx0YXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcbitcdFx0XHQuc2FtcGxlX2ludGVydmFsID0gMSxcbitcdFx0XHQuYWdncl9pbnRlcnZhbCA9ICh1bnNpZ25lZCBsb25nKVVJTlRfTUFYICsgMSxcbitcdFx0fTtcbiBcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2YXR0cnMpLFxuIFx0XHRcdFx0VUlOVF9NQVgpO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDM6MzkuNjI5ODQ1NDk0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjM0MTYxOTg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGEgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gd2UgaGF2ZSBhIHBhdGNoIHRvIHJldmlldy4gTXkgZmlyc3Qgc3RlcCBpcyB0byB6ZXJvIGluIG9uIHRoZSBtb2RpZmllZCBmaWxlIOKAkyBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gSW1tZWRpYXRlbHksIEnigJltIHRoaW5raW5nIGFib3V0IHdoYXQgYGRhbW9uYCBpcyDigJMgRHluYW1pYyBBZGRyZXNzIE1PTml0b3Ig4oCTIGFuZCB0aGF0IHRoaXMgaXMgcmVsYXRlZCB0byBrZXJuZWwgdGVzdGluZy4gVGhpcyBuYXJyb3dzIG15IGZvY3VzLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogb2YgdGhpcyBtb2RpZmljYXRpb24uIEJlZm9yZSBkaWdnaW5nIGludG8gdGhlIGNvZGUgbGluZS1ieS1saW5lLCBJJ2xsIG5lZWQgdG8gZXN0YWJsaXNoIHNvbWUgY29udGV4dC4gQSBxdWljayBgZ3JlcGAgb3IgZmlsZSByZWFkIHdpbGwgZ2l2ZSBtZSB0aGUgc3Vycm91bmRpbmcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxOSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDM6NDUuOTcxNDY4MDQ4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2MjAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MjA6XFx0XFx0XFx0XFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsXFxuIDYyMTpcXHRcXHRcXHRcXHQoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7XFxuIDYyMjpcXHRcXHRcXHRcXHR7LnN0YXJ0ID0gMTAsIC5lbmQgPSAyMH0sXFxuIDYyMzpcXHRcXHRcXHRcXHR7LnN0YXJ0ID0gMjAsIC5lbmQgPSAzMH0sXFxuIDYyNDpcXHRcXHRcXHRcXHR9LCAyLCA0MDk2LFxcbiA2MjU6XFx0XFx0XFx0XFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsIC1FSU5WQUwpO1xcbiA2MjY6XFx0fVxcbiA2Mjc6XFx0XFxuIDYyODpcXHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3Ioc3RydWN0IGt1bml0ICp0ZXN0KVxcbiA2Mjk6XFx0e1xcbiA2MzA6XFx0XFx0c3RydWN0IGRhbW9uX2F0dHJzIGF0dHJzO1xcbiA2MzE6XFx0XFxuIDYzMjpcXHRcXHQvKiBaZXJvIHNhbXBsZSBpbnRlcnZhbCBpcyB0cmVhdGVkIGFzIG9uZS4gKi9cXG4gNjMzOlxcdFxcdGF0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7XFxuIDYzNDpcXHRcXHRcXHQuc2FtcGxlX2ludGVydmFsID0gMCxcXG4gNjM1OlxcdFxcdFxcdC5hZ2dyX2ludGVydmFsID0gNTAwMCxcXG4gNjM2OlxcdFxcdH07XFxuIDYzNzpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcXHUwMDI2YXR0cnMpLCA1MDAwKTtcXG4gNjM4OlxcdFxcbiA2Mzk6XFx0XFx0LyogWmVybyBzYW1wbGVzIHBlciBhZ2dyZWdhdGlvbiBpcyB0cmVhdGVkIGFzIG9uZS4gKi9cXG4gNjQwOlxcdFxcdGF0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7XFxuIDY0MTpcXHRcXHRcXHQuc2FtcGxlX2ludGVydmFsID0gNTAwMCxcXG4gNjQyOlxcdFxcdFxcdC5hZ2dyX2ludGVydmFsID0gMCxcXG4gNjQzOlxcdFxcdH07XFxuIDY0NDpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcXHUwMDI2YXR0cnMpLCAxKTtcXG4gNjQ1OlxcdFxcbiA2NDY6XFx0XFx0LypcXG4gNjQ3OlxcdFxcdCAqIFRvbyBsYXJnZSBhZ2dyZWdhdGlvbiBpbnRlcnZhbCBvbiA2NCBiaXQgc3lzdGVtIGRvZXNuJ3QgY2F1c2VcXG4gNjQ4OlxcdFxcdCAqIG92ZXJmbG93XFxuIDY0OTpcXHRcXHQgKi9cXG4gNjUwOlxcdFxcdGlmIChVTE9OR19NQVggXFx1MDAzZSBVSU5UX01BWCkge1xcbiA2NTE6XFx0XFx0XFx0YXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcXG4gNjUyOlxcdFxcdFxcdFxcdC5zYW1wbGVfaW50ZXJ2YWwgPSAxLFxcbiA2NTM6XFx0XFx0XFx0XFx0LmFnZ3JfaW50ZXJ2YWwgPSAodW5zaWduZWQgbG9uZylVSU5UX01BWCArIDEsXFxuIDY1NDpcXHRcXHRcXHR9O1xcbiA2NTU6XFx0XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXFx1MDAyNmF0dHJzKSxcXG4gNjU2OlxcdFxcdFxcdFxcdFxcdFVJTlRfTUFYKTtcXG4gNjU3OlxcdFxcdH1cXG4gNjU4OlxcdH1cXG4gNjU5OlxcdFxcbiA2NjA6XFx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiA2NjE6XFx0e1xcbiA2NjI6XFx0XFx0c3RydWN0IGRhbW9uX2F0dHJzIG9sZF9hdHRycyA9IHtcXG4gNjYzOlxcdFxcdFxcdC5zYW1wbGVfaW50ZXJ2YWwgPSAxMCwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwLH07XFxuIDY2NDpcXHRcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgbmV3X2F0dHJzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0Mzo0NS45NzE1ODU4NzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTAwNjIyNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaXZpbmcgaW50byB0aGUgYGNvcmUta3VuaXQuaGAgTXlzdGVyeSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgd2hhdCdzIHRoaXMgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAgZmlsZSBhbGwgYWJvdXQ/IFRoZSBwYXRoIHN1Z2dlc3RzIGl0J3MgcmVsYXRlZCB0byB0aGUgREFNT04gbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLCBidXQgdGhhdCdzIGp1c3QgYSBndWVzcyBiYXNlZCBvbiB0aGUgZmlsZSBwYXRoLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpczogaXMgdGhpcyBmaWxlIGFjdHVhbGx5IGEgS1VuaXQgdW5pdCB0ZXN0PyBUaGF0IHdvdWxkIGJlIHVzZWZ1bCB0byBkZXRlcm1pbmUgaG93IHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgREFNT04gaXMgYmVpbmcgdGVzdGVkLiBUaW1lIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIGl0IGZvbGxvd3MgdGhlIEtVbml0IHRlc3RpbmcgZnJhbWV3b3JrIGNvbnZlbnRpb25zLiBJZiBzbywgdGhhdCdzIGdvb2QgbmV3cyDigJMgaXQgc3VnZ2VzdHMgcm9idXN0IHRlc3Rpbmcgb2YgdGhlIGNvcmUgREFNT04gZnVuY3Rpb25hbGl0eS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmaWxlIGlzIGJlaW5nIGluY2x1ZGVkIGluIHRoZSByZXN0IG9mIHRoZSBwcm9qZWN0LiBXaGVyZSB0aGlzIGhlYWRlciBpcyByZWZlcmVuY2VkIHdpbGwgZ2l2ZSBjbHVlcyB0byB0aGUgcGFydHMgb2YgREFNT04gaXQncyB0ZXN0aW5nLiBFeGFtaW5pbmcgdGhlIGluY2x1c2lvbnMgd2lsbCBpbmRpY2F0ZSB3aGljaCBjb21wb25lbnRzIHJlbHkgb24gdGhlc2UgdGVzdHMsIGFuZCwgZXF1YWxseSBpbXBvcnRhbnQsIGhvdyB0aGV5J3JlIHRlc3RlZC4gS25vd2luZyBpdHMgZGVwZW5kZW5jaWVzIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSB0ZXN0J3Mgc2NvcGUgYW5kIGl0cyBpbXBvcnRhbmNlIGluIGVuc3VyaW5nIHRoZSBzdGFiaWxpdHkgYW5kIGNvcnJlY3Qgb3BlcmF0aW9uIG9mIHRoZSBlbnRpcmUgREFNT04gc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTkxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0Mzo0OS44NzIyMTEzNjhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzMzMxODI1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3JlLWt1bml0LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTQxNzg9c3Vic3lzX2luaXRjYWxsKGRhbW9uX2luaXQpO1xcbm1tL2RhbW9uL2NvcmUuYy00MTc5LVxcbm1tL2RhbW9uL2NvcmUuYzo0MTgwOiNpbmNsdWRlIFxcXCJ0ZXN0cy9jb3JlLWt1bml0LmhcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQzOjUyLjEwNTUzNDIxNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3MjQ4NTgwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdXp6YWJpbGl0eSBvZiBLVW5pdCBUZXN0cyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHRyaWFnZSBwaGlsb3NvcGh5IGFuZCBzZWUgaWYgdGhpcyBLVW5pdCB0ZXN0IGNvZGUgZmFsbHMgdW5kZXIgdGhlIFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgY3JpdGVyaWEuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgYXQgU2VjdGlvbiAyLCB3aGljaCBvdXRsaW5lcyB0aGUgbmVnYXRpdmUgY3JpdGVyaWE6IHdoZW4gYSBwYXRjaCAqc2hvdWxkbid0KiBiZSBmdXp6ZWQuIFRoZSBrZXkgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBtb2RpZmllZCBjb2RlIGlzIG5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIGRlZmluaXRpb24gb2Ygbm9uLWV4ZWN1dGFibGUgY2hhbmdlcywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUga2VybmVsIGltYWdlIG9yIG1vZHVsZXMuIEkga25vdyB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIHNwZWxsaW5nIGZpeGVzLCB1c2VyLXNwYWNlIHRvb2xzLCBzYW1wbGVzIG9yIHNjcmlwdHMsIGFuZCBkZWNvcmF0aXZlIGxvZ2dpbmcgZ2VuZXJhbGx5IGZhbGwgaW50byB0aGlzIGNhdGVnb3J5LiBOb3cgdGhlIHJlYWwgcXVlc3Rpb246IGFyZSBLVW5pdCB0ZXN0cyB0cmVhdGVkIHRoZSBzYW1lIHdheT8gQXJlIHRoZXkgZnV6emFibGUgdGVzdCBjb2RlP1xuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpczogaG93IGRvZXMgc3l6a2FsbGVyIGhhbmRsZSBLVW5pdCB0ZXN0cz8gQXJlIHRoZXNlIGNvbnNpZGVyZWQganVzdCB0ZXN0IHN1aXRlcyBhbmQgZXhjbHVkZWQ/IEkgbmVlZCB0byBjbGFyaWZ5IGlmIHN5emthbGxlciB0YXJnZXRzIEtVbml0IHRlc3RzLCBvciBpZiB0aGV5IGFyZSBza2lwcGVkIGR1cmluZyBpdHMgc3lzY2FsbCBmdXp6aW5nIHJ1bnMuIFRoZSB0cmlhZ2UgZ3VpZGVsaW5lcyBlbXBoYXNpemUgcmVhY2hhYmlsaXR5IGFuZCB0aGUgYWJpbGl0eSB0byBleGVjdXRlIGNvZGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBDYW4gc3l6a2FsbGVyIHRyaWdnZXIgS1VuaXQgdGVzdHMgZHVyaW5nIGl0cyBzeXNjYWxsIGZ1enppbmc/XG5cbkkgbmVlZCB0byByZS1yZWFkIHRoZSB0cmlhZ2UgZ3VpZGVsaW5lcyB0byBlbnN1cmUgSSBkb24ndCBvdmVybG9vayBhbnkgc3VidGxldGllcy4gVGhlIGdvYWwgaXMgdG8gY2F0Y2ggY3Jhc2hlcywgcmVncmVzc2lvbnMsIG9yIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zLiBUaGUgbWFpbiBnYXRlIGlzIHJlYWNoYWJpbGl0eS4gSWYgdGhlIGNvZGUgaXMgbm90IHN0cnVjdHVyYWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSksIGl0IHNob3VsZCBub3QgYmUgZnV6emVkLiBCdXQgYXJlIEtVbml0IHRlc3RzLCBhbmQgdGVzdCBjb2RlIGZ1enphYmxlP1xuXG5TbywgY2FuIHN5emthbGxlciBkaXJlY3RseSBpbnZva2UgS1VuaXQgdGVzdCBmdW5jdGlvbnMsIGxpa2UgdGhlIG9uZSBJJ20gdGhpbmtpbmcgb2YsIGBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3JgPyBUbyBhbnN3ZXIgdGhhdCwgSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTGV0J3Mgc3RhcnQgd2l0aCBgbW0vZGFtb24vY29yZS5jYCBhcm91bmQgbGluZSA0MTgwLiBUaGF0J3MgdGhlIGZpcnN0IHN0ZXAgdG8gY2xhcmlmeSB0aGUgcmVhY2hhYmlsaXR5IGFuZCB0aGUgZXhlY3V0YWJsZSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU4OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0Mzo1Ny44MzAzOTQ2MDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTcyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxNzAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQxNzA6XFx0XFx0aWYgKHVubGlrZWx5KCFkYW1vbl9yZWdpb25fY2FjaGUpKSB7XFxuNDE3MTpcXHRcXHRcXHRwcl9lcnIoXFxcImNyZWF0aW5nIGRhbW9uX3JlZ2lvbl9jYWNoZSBmYWlsc1xcXFxuXFxcIik7XFxuNDE3MjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG40MTczOlxcdFxcdH1cXG40MTc0OlxcdFxcbjQxNzU6XFx0XFx0cmV0dXJuIDA7XFxuNDE3NjpcXHR9XFxuNDE3NzpcXHRcXG40MTc4OlxcdHN1YnN5c19pbml0Y2FsbChkYW1vbl9pbml0KTtcXG40MTc5OlxcdFxcbjQxODA6XFx0I2luY2x1ZGUgXFxcInRlc3RzL2NvcmUta3VuaXQuaFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDM6NTcuODMwNTk0NDE3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAzNzMzOTg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQsIGFuYWx5emluZyB0aGUgc2l0dWF0aW9uOlxuXG4qKlJldmlld2luZyBDb3JlIEtVbml0IFRlc3QgRGVmaW5pdGlvbnMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSByZXN0IG9mIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBUaGlzIGxpa2VseSBjb250YWlucyBjcml0aWNhbCBkZWZpbml0aW9ucyBmb3IgdGhlIGNvcmUgS1VuaXQgdGVzdHMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpLiBVbmRlcnN0YW5kaW5nIHRoaXMgaGVhZGVyIGZpbGUgaXMgZXNzZW50aWFsIGZvciBzZXZlcmFsIHJlYXNvbnMuIEl0IGNvdWxkIGRldGFpbCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgaW4gdGhlc2UgY29yZSB0ZXN0cywgZGVmaW5lIG1hY3JvcyBmb3IgdGVzdCBzZXR1cCBhbmQgdGVhcmRvd24sIG9yIHNwZWNpZnkgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9yIHRlc3RpbmcgY29uZGl0aW9ucyBmb3Igc3BlY2lmaWMgREFNT04gZnVuY3Rpb25hbGl0aWVzLiBJdCBtaWdodCBldmVuIGluY2x1ZGUgaW5saW5lIGZ1bmN0aW9ucyBvciBoZWxwZXIgcm91dGluZXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciB0aGUgS1VuaXQgdGVzdHMgd2l0aGluIHRoaXMgbW9kdWxlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBzY29wZSBhbmQgY29tcGxleGl0eSBvZiB0aGUgdGVzdHMgZGVmaW5lZCB3aXRoaW4uIEl0IGlzIHZlcnkgbGlrZWx5IHRoYXQgdGhpcyBoZWFkZXIgY29udGFpbnMgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCBpbmNsdWRlL2V4Y2x1ZGUgc3BlY2lmaWMgcGFydHMgb2YgdGhlIHRlc3RpbmcgYmFzZWQgb24gY29uZmlndXJhdGlvbi4gVGhpcyBjb3VsZCBiZSByZWxldmFudCB0byB1bmRlcnN0YW5kaW5nIHNwZWNpZmljIGJlaGF2aW9ycy4gVWx0aW1hdGVseSwgZXhhbWluaW5nIHRoaXMgaGVhZGVyIGlzIGNydWNpYWwgdG8gcHJvcGVybHkgZ3JvayB0aGUgdGVzdCBzdHJhdGVneSBhbmQgaXRzIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzM0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0NDowMC44Njc5MzY3OTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2NjAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjA6XFx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiA2NjE6XFx0e1xcbiA2NjI6XFx0XFx0c3RydWN0IGRhbW9uX2F0dHJzIG9sZF9hdHRycyA9IHtcXG4gNjYzOlxcdFxcdFxcdC5zYW1wbGVfaW50ZXJ2YWwgPSAxMCwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwLH07XFxuIDY2NDpcXHRcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgbmV3X2F0dHJzO1xcbiA2NjU6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciA9IGRhbW9uX25ld19yZWdpb24oMywgNyk7XFxuIDY2NjpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxuIDY2NzpcXHRcXG4gNjY4OlxcdFxcdGlmICghcilcXG4gNjY5OlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInJlZ2lvbiBhbGxvYyBmYWlsXFxcIik7XFxuIDY3MDpcXHRcXHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XFxuIDY3MTpcXHRcXHRpZiAoIWN0eCkge1xcbiA2NzI6XFx0XFx0XFx0ZGFtb25fZnJlZV9yZWdpb24ocik7XFxuIDY3MzpcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJjdHggYWxsb2MgZmFpbFxcXCIpO1xcbiA2NzQ6XFx0XFx0fVxcbiA2NzU6XFx0XFxuIDY3NjpcXHRcXHRyLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IDE1O1xcbiA2Nzc6XFx0XFx0ci1cXHUwMDNlYWdlID0gMjA7XFxuIDY3ODpcXHRcXG4gNjc5OlxcdFxcdG5ld19hdHRycyA9IChzdHJ1Y3QgZGFtb25fYXR0cnMpe1xcbiA2ODA6XFx0XFx0XFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEwMCwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwMCx9O1xcbiA2ODE6XFx0XFx0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFxcdTAwMjZvbGRfYXR0cnMsIFxcdTAwMjZuZXdfYXR0cnMsIGZhbHNlLCBjdHgpO1xcbiA2ODI6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZW5yX2FjY2Vzc2VzLCAxNSk7XFxuIDY4MzpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlYWdlLCAyKTtcXG4gNjg0OlxcdFxcbiA2ODU6XFx0XFx0bmV3X2F0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7XFxuIDY4NjpcXHRcXHRcXHQuc2FtcGxlX2ludGVydmFsID0gMSwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwfTtcXG4gNjg3OlxcdFxcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCBcXHUwMDI2b2xkX2F0dHJzLCBcXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSwgY3R4KTtcXG4gNjg4OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2Vucl9hY2Nlc3NlcywgMTUwKTtcXG4gNjg5OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2VhZ2UsIDIpO1xcbiA2OTA6XFx0XFxuIDY5MTpcXHRcXHRuZXdfYXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcXG4gNjkyOlxcdFxcdFxcdC5zYW1wbGVfaW50ZXJ2YWwgPSAxLCAuYWdncl9pbnRlcnZhbCA9IDEwMH07XFxuIDY5MzpcXHRcXHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQociwgXFx1MDAyNm9sZF9hdHRycywgXFx1MDAyNm5ld19hdHRycywgZmFsc2UsIGN0eCk7XFxuIDY5NDpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlbnJfYWNjZXNzZXMsIDE1MCk7XFxuIDY5NTpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlYWdlLCAyMCk7XFxuIDY5NjpcXHRcXG4gNjk3OlxcdFxcdGRhbW9uX2ZyZWVfcmVnaW9uKHIpO1xcbiA2OTg6XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG4gNjk5OlxcdH1cXG4gNzAwOlxcdFxcbiA3MDE6XFx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfYXR0cnMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiA3MDI6XFx0e1xcbiA3MDM6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqYyA9IGRhbW9uX25ld19jdHgoKTtcXG4gNzA0OlxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyB2YWxpZF9hdHRycyA9IHtcXG4gNzA1OlxcdFxcdFxcdC5taW5fbnJfcmVnaW9ucyA9IDEwLCAubWF4X25yX3JlZ2lvbnMgPSAxMDAwLFxcbiA3MDY6XFx0XFx0XFx0LnNhbXBsZV9pbnRlcnZhbCA9IDUwMDAsIC5hZ2dyX2ludGVydmFsID0gMTAwMDAwLH07XFxuIDcwNzpcXHRcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgaW52YWxpZF9hdHRycztcXG4gNzA4OlxcdFxcbiA3MDk6XFx0XFx0aWYgKCFjKVxcbiA3MTA6XFx0XFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwiY3R4IGFsbG9jIGZhaWxcXFwiKTtcXG4gNzExOlxcdFxcbiA3MTI6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NldF9hdHRycyhjLCBcXHUwMDI2dmFsaWRfYXR0cnMpLCAwKTtcXG4gNzEzOlxcdFxcbiA3MTQ6XFx0XFx0aW52YWxpZF9hdHRycyA9IHZhbGlkX2F0dHJzO1xcbiA3MTU6XFx0XFx0aW52YWxpZF9hdHRycy5taW5fbnJfcmVnaW9ucyA9IDE7XFxuIDcxNjpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFxcdTAwMjZpbnZhbGlkX2F0dHJzKSwgLUVJTlZBTCk7XFxuIDcxNzpcXHRcXG4gNzE4OlxcdFxcdGludmFsaWRfYXR0cnMgPSB2YWxpZF9hdHRycztcXG4gNzE5OlxcdFxcdGludmFsaWRfYXR0cnMubWF4X25yX3JlZ2lvbnMgPSA5O1xcbiA3MjA6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NldF9hdHRycyhjLCBcXHUwMDI2aW52YWxpZF9hdHRycyksIC1FSU5WQUwpO1xcbiA3MjE6XFx0XFxuIDcyMjpcXHRcXHRpbnZhbGlkX2F0dHJzID0gdmFsaWRfYXR0cnM7XFxuIDcyMzpcXHRcXHRpbnZhbGlkX2F0dHJzLmFnZ3JfaW50ZXJ2YWwgPSA0OTk5O1xcbiA3MjQ6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NldF9hdHRycyhjLCBcXHUwMDI2aW52YWxpZF9hdHRycyksIC1FSU5WQUwpO1xcbiA3MjU6XFx0XFxuIDcyNjpcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcXG4gNzI3OlxcdH1cXG4gNzI4OlxcdFxcbiA3Mjk6XFx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF9tdnN1bShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIDczMDpcXHR7XFxuIDczMTpcXHRcXHR1bnNpZ25lZCBsb25nIGlucHV0X2V4cGVjdHNbXSA9IHtcXG4gNzMyOlxcdFxcdFxcdC8qIGN1cnJlbnQgdmFsdWUsIGxhc3QgdmFsdWUsIHJlbWFpbmluZyB3aW5kb3cgKGJwKSAqL1xcbiA3MzM6XFx0XFx0XFx0MCwgNDksIDEwMDAwLCA0OSxcXHQvKiAwICsgNDkgKiAxICovXFxuIDczNDpcXHRcXHRcXHQzLCAxMCwgNzAwMCwgMTAsXFx0LyogMyArIDEwICogMC43ICovXFxuIDczNTpcXHRcXHRcXHQzLCAxMCwgNTAwMCwgOCxcXHRcXHQvKiAzICsgMTAgKiAwLjUgKi9cXG4gNzM2OlxcdFxcdFxcdDMyLCAxMDAsIDEwMDAsIDQyLFxcdC8qIDMyICsgMTAwICogMC4xICovXFxuIDczNzpcXHRcXHRcXHQ0MiwgNDksIDAsIDQyLFxcdFxcdC8qIDQyICsgNDkgKiAwICovXFxuIDczODpcXHRcXHR9O1xcbiA3Mzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ0OjAwLjg2ODEwMDI1MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjM1MjQ5OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgQ29yZSBLVW5pdCBUZXN0cyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGUgbWF0dGVyLiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgS1VuaXQgdGVzdCBzdWl0ZSwgc3BlY2lmaWNhbGx5IGZvciB0aGUgbW0vZGFtb24gc3Vic3lzdGVtLiBNeSBmb2N1cyBpcyBvbiB0aGUgZmlsZSBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ2V0IGEgc2Vuc2Ugb2YgdGhlIHRlc3Qgc2V0dXAsIHRoZSBrZXkgZnVuY3Rpb25zIHVuZGVyIHNjcnV0aW55IGFuZCBhbnkgaW1wb3J0YW50IGFzc2VydGlvbnMgd2l0aGluIGl0LiBUaGlzIGdpdmVzIHRoZSBiZXN0IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBvdGVudGlhbCBwaXRmYWxscy4gQXJlIHRoZXkgZm9jdXNlZCBvbiBkaXJlY3QgaW50ZWdyYXRpb24sIGZ1bmN0aW9uIHRlc3RpbmcsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXByZWhlbnNpdmU/IFdoYXQgYXJlIHRoZSBrZXkgcGVyZm9ybWFuY2UgbWV0cmljcyB0aGV5J3JlIGNoZWNraW5nPyBJcyB0aGVyZSBhbnl0aGluZyBub3Rld29ydGh5IG9yIHRoYXQgY291bGQgYmUgcHJvYmxlbWF0aWM/IFRoaXMgaXMgZ29pbmcgdG8gZ2l2ZSBtZSBteSBiZXN0IGluc2lnaHRzIHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NDIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ0OjA0LjEwMzM1MjU3MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc1MDpcXHRcXHR9XFxuIDc1MTpcXHR9XFxuIDc1MjpcXHRcXG4gNzUzOlxcdC8qXFxuIDc1NDpcXHQgKiBUZXN0IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKCksIHdoaWNoIHdyYXBzIGRhbW9uX212c3VtKCkgd2l0aCB0aGVcXG4gNzU1OlxcdCAqIG1vbml0b3JpbmcgaW50ZXJ2YWxzIG9mIHRoZSBjb250ZXh0LiAgV2l0aCBhIHNhbXBsZSBpbnRlcnZhbCBvZiAxIGFuZCBhblxcbiA3NTY6XFx0ICogYWdncmVnYXRpb24gaW50ZXJ2YWwgb2YgMTAsIGFuIGFnZ3JlZ2F0aW9uIHdpbmRvdyBpcyAxMCBzYW1wbGUgaW50ZXJ2YWxzXFxuIDc1NzpcXHQgKiBsb25nLiAgRWFjaCByb3cgYmVsb3cgc3BlY2lmaWVzIHRoZSBwYXNzZWQgc2FtcGxlIGludGVydmFscywgdGhlIG5leHRcXG4gNzU4OlxcdCAqIGFnZ3JlZ2F0aW9uIHRpbWUgaW4gc2FtcGxlIGludGVydmFscywgdGhlIGN1cnJlbnQgYW5kIGxhc3QgbnJfYWNjZXNzZXMgb2YgYVxcbiA3NTk6XFx0ICogcmVnaW9uLCBhbmQgdGhlIGV4cGVjdGVkIHJldHVybiB2YWx1ZS5cXG4gNzYwOlxcdCAqL1xcbiA3NjE6XFx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIDc2MjpcXHR7XFxuIDc2MzpcXHRcXHR1bnNpZ25lZCBsb25nIGlucHV0X2V4cGVjdHNbXSA9IHtcXG4gNzY0OlxcdFxcdFxcdC8qIHBhc3NlZCwgbmV4dF9hZ2dyLCBucl9hY2Nlc3NlcywgbGFzdF9ucl9hY2Nlc3NlcywgZXhwZWN0ICovXFxuIDc2NTpcXHRcXHRcXHQwLCAxMCwgNSwgMywgMyxcXHRcXHQvKiBmdWxsIHdpbmRvdyBsZWZ0LCB1bnJlc2V0ICovXFxuIDc2NjpcXHRcXHRcXHQwLCAxMCwgMCwgNywgNyxcXHRcXHQvKiBmdWxsIHdpbmRvdyBsZWZ0LCByZXNldCAqL1xcbiA3Njc6XFx0XFx0XFx0NSwgMTAsIDMsIDEwLCA4LFxcdC8qIGhhbGYgd2luZG93IGxlZnQgKi9cXG4gNzY4OlxcdFxcdFxcdDgsIDEwLCAzLCAxMCwgNSxcXHQvKiAyMCUgd2luZG93IGxlZnQgKi9cXG4gNzY5OlxcdFxcdFxcdDEwLCAxMCwgNDIsIDQ5LCA0MixcXHQvKiBubyB3aW5kb3cgbGVmdCAqL1xcbiA3NzA6XFx0XFx0fTtcXG4gNzcxOlxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmMgPSBkYW1vbl9uZXdfY3R4KCk7XFxuIDc3MjpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbiA3NzM6XFx0XFx0aW50IGk7XFxuIDc3NDpcXHRcXG4gNzc1OlxcdFxcdGlmICghYylcXG4gNzc2OlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcImN0eCBhbGxvYyBmYWlsXFxcIik7XFxuIDc3NzpcXHRcXG4gNzc4OlxcdFxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKDAsIDQwOTYpO1xcbiA3Nzk6XFx0XFx0aWYgKCFyKSB7XFxuIDc4MDpcXHRcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcXG4gNzgxOlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInJlZ2lvbiBhbGxvYyBmYWlsXFxcIik7XFxuIDc4MjpcXHRcXHR9XFxuIDc4MzpcXHRcXG4gNzg0OlxcdFxcdGMtXFx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA9IDE7XFxuIDc4NTpcXHRcXHRjLVxcdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsID0gMTA7XFxuIDc4NjpcXHRcXG4gNzg3OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGlucHV0X2V4cGVjdHMpOyBpICs9IDUpIHtcXG4gNzg4OlxcdFxcdFxcdGMtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzID0gaW5wdXRfZXhwZWN0c1tpXTtcXG4gNzg5OlxcdFxcdFxcdGMtXFx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzID0gaW5wdXRfZXhwZWN0c1tpICsgMV07XFxuIDc5MDpcXHRcXHRcXHRyLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IGlucHV0X2V4cGVjdHNbaSArIDJdO1xcbiA3OTE6XFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IGlucHV0X2V4cGVjdHNbaSArIDNdO1xcbiA3OTI6XFx0XFxuIDc5MzpcXHRcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgKHVuc2lnbmVkIGludClpbnB1dF9leHBlY3RzW2kgKyA0XSxcXG4gNzk0OlxcdFxcdFxcdFxcdFxcdGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHIsIGMpKTtcXG4gNzk1OlxcdFxcdH1cXG4gNzk2OlxcdFxcbiA3OTc6XFx0XFx0ZGFtb25fZnJlZV9yZWdpb24ocik7XFxuIDc5ODpcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcXG4gNzk5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDQ6MDQuMTAzNDY4MDIxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzNjM5NzExNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGNvcmUta3VuaXQuaCB1cCB0byBMaW5lIDgzMCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHRlc3Qgc2V0dXAgYW5kIHdoYXQncyBiZWluZyB2ZXJpZmllZCB1cCB0byBsaW5lIDgzMC4gR2l2ZW4gdGhlIGxvY2F0aW9uIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtLCBJIGV4cGVjdCB0aGlzIGZpbGUgY29udGFpbnMgdGhlIGNvcmUgS1VuaXQgdGVzdHMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IG9yIERhdGEgQWNjZXNzIE1PTml0b3IgKERBTU9OKSBmdW5jdGlvbmFsaXR5LCBxdWl0ZSBwb3NzaWJseSByZWxhdGVkIHRvIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcyBvciBhbGdvcml0aG1zLlxuXG5NeSBpbml0aWFsIHF1ZXN0aW9ucyBhcmU6IHdoYXQgdGVzdCBjYXNlcyBhcmUgZGVmaW5lZD8gV2hhdCBtYWNyb3Mgb3IgaGVscGVyIGZ1bmN0aW9ucyBhcmUgdXNlZCBleHRlbnNpdmVseT8gQXJlIHRoZXJlIGFueSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHRlc3RlZCwgYW5kIGhvdyBhcmUgdGhleSBiZWluZyBpbml0aWFsaXplZCBhbmQgbWFuaXB1bGF0ZWQ/IEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGV5IGFyZSB0ZXN0aW5nIHRoZSBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBjb3JlIERBTU9OIGZ1bmN0aW9uYWxpdHkuXG5cbkdpdmVuIGl0J3MgYSBoZWFkZXIsIEkgYW50aWNpcGF0ZSBpdCBkZWZpbmVzIHN0cnVjdHMsIGZ1bmN0aW9uIHByb3RvdHlwZXMsIGFuZCBwb3RlbnRpYWxseSBpbmxpbmUgZnVuY3Rpb25zIHJlbGV2YW50IHRvIHRoZSBLVW5pdCB0ZXN0cy4gSSdsbCBiZSBsb29raW5nIGZvciB3ZWxsLWRlZmluZWQgYXNzZXJ0aW9ucyBhbmQgZXJyb3IgaGFuZGxpbmcgbWVjaGFuaXNtcyB0byBnYXVnZSB0aGUgcm9idXN0bmVzcyBvZiB0aGUgdGVzdHMuIEknbGwgYWxzbyBiZSB3YXRjaGluZyBmb3IgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsZ29yaXRobXMgdGhhdCBtaWdodCBiZSB0aGUgdGFyZ2V0IG9mIHRoZXNlIHRlc3RzLCBlc3BlY2lhbGx5IG1lbW9yeSBtYW5hZ2VtZW50IGFzcGVjdHMuIEknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgdGVzdCBjYXNlIHNwZWNpZmljIG1hY3JvcyBhcyB0aG9zZSBhcmUgYWxtb3N0IGFsd2F5cyBhIHRlbGwgb2Ygd2hhdCBpcyBiZWluZyB0ZXN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NzUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ0OjA4LjQ2NzQ0Mjg1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgwMDpcXHRcXG4gODAxOlxcdHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfbmV3X2ZpbHRlcihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIDgwMjpcXHR7XFxuIDgwMzpcXHRcXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XFxuIDgwNDpcXHRcXG4gODA1OlxcdFxcdGZpbHRlciA9IGRhbW9zX25ld19maWx0ZXIoREFNT1NfRklMVEVSX1RZUEVfQU5PTiwgdHJ1ZSwgZmFsc2UpO1xcbiA4MDY6XFx0XFx0aWYgKCFmaWx0ZXIpXFxuIDgwNzpcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJmaWx0ZXIgYWxsb2MgZmFpbFxcXCIpO1xcbiA4MDg6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGZpbHRlci1cXHUwMDNldHlwZSwgREFNT1NfRklMVEVSX1RZUEVfQU5PTik7XFxuIDgwOTpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZmlsdGVyLVxcdTAwM2VtYXRjaGluZywgdHJ1ZSk7XFxuIDgxMDpcXHRcXHRLVU5JVF9FWFBFQ1RfUFRSX0VRKHRlc3QsIGZpbHRlci1cXHUwMDNlbGlzdC5wcmV2LCBcXHUwMDI2ZmlsdGVyLVxcdTAwM2VsaXN0KTtcXG4gODExOlxcdFxcdEtVTklUX0VYUEVDVF9QVFJfRVEodGVzdCwgZmlsdGVyLVxcdTAwM2VsaXN0Lm5leHQsIFxcdTAwMjZmaWx0ZXItXFx1MDAzZWxpc3QpO1xcbiA4MTI6XFx0XFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZmlsdGVyKTtcXG4gODEzOlxcdH1cXG4gODE0OlxcdFxcbiA4MTU6XFx0c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbiA4MTY6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCxcXG4gODE3OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXFxuIDgxODpcXHR7XFxuIDgxOTpcXHRcXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3QsIHNyYyk7XFxuIDgyMDpcXHRcXG4gODIxOlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZW1ldHJpYywgc3JjLVxcdTAwM2VtZXRyaWMpO1xcbiA4MjI6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNldGFyZ2V0X3ZhbHVlLCBzcmMtXFx1MDAzZXRhcmdldF92YWx1ZSk7XFxuIDgyMzpcXHRcXHRpZiAoc3JjLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVClcXG4gODI0OlxcdFxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZWN1cnJlbnRfdmFsdWUsIHNyYy1cXHUwMDNlY3VycmVudF92YWx1ZSk7XFxuIDgyNTpcXHRcXHRzd2l0Y2ggKGRzdC1cXHUwMDNlbWV0cmljKSB7XFxuIDgyNjpcXHRcXHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcXG4gODI3OlxcdFxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZWxhc3RfcHNpX3RvdGFsLCBVNjRfTUFYKTtcXG4gODI4OlxcdFxcdFxcdGJyZWFrO1xcbiA4Mjk6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOlxcbiA4MzA6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQOlxcbiA4MzE6XFx0XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNlbmlkLCBzcmMtXFx1MDAzZW5pZCk7XFxuIDgzMjpcXHRcXHRcXHRicmVhaztcXG4gODMzOlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQOlxcbiA4MzQ6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XFxuIDgzNTpcXHRcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VuaWQsIHNyYy1cXHUwMDNlbmlkKTtcXG4gODM2OlxcdFxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZW1lbWNnX2lkLCBzcmMtXFx1MDAzZW1lbWNnX2lkKTtcXG4gODM3OlxcdFxcdFxcdGJyZWFrO1xcbiA4Mzg6XFx0XFx0ZGVmYXVsdDpcXG4gODM5OlxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0NDowOC40Njc2MDY1ODVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE1Nzc3NjQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRm9jdXNpbmcgb24gQ29yZS1LdW5pdCBUZXN0cyoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4uIEkgbmVlZCB0byBleGFtaW5lIHRoZSB2ZXJ5IGVuZCBvZiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gSSBrbm93IHdoYXQncyBsaWtlbHkgdHVja2VkIGF3YXkgZG93biB0aGVyZTsgb2Z0ZW4gdGhlIGVkZ2UgY2FzZXMsIHRoZSBjbGVhbnVwIHJvdXRpbmVzLCBhbmQgdGhlIHZlcnkgbGFzdCBhc3NlcnRpb25zIGxpdmUgYXQgdGhlIHRhaWwgZW5kIG9mIHRoZXNlIHRlc3QgZmlsZXMuIEl0J3MgdGhlIHVzdWFsIHBhdHRlcm4sIGFuZCBJIHdhbnQgdG8gdmVyaWZ5IGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBhbGlnbnMgd2l0aCBteSBleHBlY3RhdGlvbnMuIFRoaXMgd2lsbCBiZSB3aGVyZSB0aGUgc3VidGxlIGZsYXdzIGFuZCB1bmV4cGVjdGVkIGJlaGF2aW9ycyB0eXBpY2FsbHkgc3VyZmFjZSwgc28gdGhpcyBpcyB3aGVyZSBJ4oCZbGwgc3RhcnQgZGlnZ2luZy4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Nzg1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0NDoxMC42MjUzODU4NTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA4NDAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDA6XFx0XFx0fVxcbiA4NDE6XFx0fVxcbiA4NDI6XFx0XFxuIDg0MzpcXHRzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gODQ0OlxcdHtcXG4gODQ1OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsIGRzdCA9IHtcXG4gODQ2OlxcdFxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXFxuIDg0NzpcXHRcXHRcXHQudGFyZ2V0X3ZhbHVlID0gMTAwMCxcXG4gODQ4OlxcdFxcdFxcdC5jdXJyZW50X3ZhbHVlID0gMTIzLFxcbiA4NDk6XFx0XFx0XFx0Lmxhc3RfcHNpX3RvdGFsID0gNDU2LFxcbiA4NTA6XFx0XFx0fTtcXG4gODUxOlxcdFxcbiA4NTI6XFx0XFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXFx1MDAyNmRzdCxcXG4gODUzOlxcdFxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpIHtcXG4gODU0OlxcdFxcdFxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXFxuIDg1NTpcXHRcXHRcXHRcXHQudGFyZ2V0X3ZhbHVlID0gMjM0LFxcbiA4NTY6XFx0XFx0XFx0XFx0LmN1cnJlbnRfdmFsdWUgPSAzNDUsXFxuIDg1NzpcXHRcXHRcXHRcXHQubGFzdF9wc2lfdG90YWwgPSA1NjcsXFxuIDg1ODpcXHRcXHRcXHRcXHR9KTtcXG4gODU5OlxcdFxcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFxcdTAwMjZkc3QsXFxuIDg2MDpcXHRcXHRcXHRcXHRcXHUwMDI2KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKXtcXG4gODYxOlxcdFxcdFxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9VU0VSX0lOUFVULFxcbiA4NjI6XFx0XFx0XFx0XFx0LnRhcmdldF92YWx1ZSA9IDc4OSxcXG4gODYzOlxcdFxcdFxcdFxcdC5jdXJyZW50X3ZhbHVlID0gMTJ9KTtcXG4gODY0OlxcdFxcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFxcdTAwMjZkc3QsXFxuIDg2NTpcXHRcXHRcXHRcXHRcXHUwMDI2KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKXtcXG4gODY2OlxcdFxcdFxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQLFxcbiA4Njc6XFx0XFx0XFx0XFx0LnRhcmdldF92YWx1ZSA9IDM0NSxcXG4gODY4OlxcdFxcdFxcdFxcdC5jdXJyZW50X3ZhbHVlID0gNjc4LFxcbiA4Njk6XFx0XFx0XFx0XFx0Lm5pZCA9IDksXFxuIDg3MDpcXHRcXHRcXHRcXHR9KTtcXG4gODcxOlxcdFxcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFxcdTAwMjZkc3QsXFxuIDg3MjpcXHRcXHRcXHRcXHRcXHUwMDI2KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKXtcXG4gODczOlxcdFxcdFxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQLFxcbiA4NzQ6XFx0XFx0XFx0XFx0LnRhcmdldF92YWx1ZSA9IDEyLFxcbiA4NzU6XFx0XFx0XFx0XFx0LmN1cnJlbnRfdmFsdWUgPSAzNDUsXFxuIDg3NjpcXHRcXHRcXHRcXHQubmlkID0gNixcXG4gODc3OlxcdFxcdFxcdFxcdH0pO1xcbiA4Nzg6XFx0XFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXFx1MDAyNmRzdCxcXG4gODc5OlxcdFxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpe1xcbiA4ODA6XFx0XFx0XFx0XFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUCxcXG4gODgxOlxcdFxcdFxcdFxcdC50YXJnZXRfdmFsdWUgPSA0NTYsXFxuIDg4MjpcXHRcXHRcXHRcXHQuY3VycmVudF92YWx1ZSA9IDU2NyxcXG4gODgzOlxcdFxcdFxcdFxcdC5uaWQgPSA2LFxcbiA4ODQ6XFx0XFx0XFx0XFx0Lm1lbWNnX2lkID0gNyxcXG4gODg1OlxcdFxcdFxcdFxcdH0pO1xcbiA4ODY6XFx0XFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXFx1MDAyNmRzdCxcXG4gODg3OlxcdFxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwpe1xcbiA4ODg6XFx0XFx0XFx0XFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUCxcXG4gODg5OlxcdFxcdFxcdFxcdC50YXJnZXRfdmFsdWUgPSA4OTAsXFxuIDg5MDpcXHRcXHRcXHRcXHQuY3VycmVudF92YWx1ZSA9IDkwMSxcXG4gODkxOlxcdFxcdFxcdFxcdC5uaWQgPSAxMCxcXG4gODkyOlxcdFxcdFxcdFxcdC5tZW1jZ19pZCA9IDEsXFxuIDg5MzpcXHRcXHRcXHRcXHR9KTtcXG4gODk0OlxcdFxcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHRlc3QsIFxcdTAwMjZkc3QsXFxuIDg5NTpcXHRcXHRcXHRcXHRcXHUwMDI2KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsKSB7XFxuIDg5NjpcXHRcXHRcXHRcXHQubWV0cmljID0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxcbiA4OTc6XFx0XFx0XFx0XFx0LnRhcmdldF92YWx1ZSA9IDIzNCxcXG4gODk4OlxcdFxcdFxcdFxcdC5jdXJyZW50X3ZhbHVlID0gMzQ1LFxcbiA4OTk6XFx0XFx0XFx0XFx0Lmxhc3RfcHNpX3RvdGFsID0gNTY3LFxcbiA5MDA6XFx0XFx0XFx0XFx0fSk7XFxuIDkwMTpcXHR9XFxuIDkwMjpcXHRcXG4gOTAzOlxcdHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuIDkwNDpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0X2dvYWxzLCBpbnQgbnJfZHN0X2dvYWxzLFxcbiA5MDU6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyY19nb2FscywgaW50IG5yX3NyY19nb2FscylcXG4gOTA2OlxcdHtcXG4gOTA3OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSBkc3QsIHNyYztcXG4gOTA4OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsLCAqbmV4dDtcXG4gOTA5OlxcdFxcdGJvb2wgc2tpcCA9IHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ0OjEwLjYyNTU3MzU0MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTIyMzYxMTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYGNvcmUta3VuaXQuaGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gTGV0J3MgYXNzdW1lIHRoaXMgaXMgdGhlIGhlYWRlciBmaWxlIGZvciB0aGUgY29yZSBLVW5pdCB0ZXN0cyB3aXRoaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSBmcmFtZXdvcmsuIEknbSBwcm9iYWJseSBsb29raW5nIGF0IHRoaXMgYmVjYXVzZSBJJ20gdHJvdWJsZXNob290aW5nIGEgREFNT04tcmVsYXRlZCBpc3N1ZSwgcmV2aWV3aW5nIGNoYW5nZXMsIG9yIG1heWJlIGV2ZW4gY29udHJpYnV0aW5nIGEgbmV3IHRlc3QuIEknbSBleHBlY3RpbmcgdG8gc2VlIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gdGVzdCBzdHJ1Y3R1cmVzLCBtYWNyb3MgZm9yIHNldHRpbmcgdXAgYW5kIHRlYXJpbmcgZG93biB0aGUgdGVzdHMsIGFzc2VydGlvbnMsIGFuZCBwcm9iYWJseSBzb21lIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IGltcGxlbWVudCB0aGUgYWN0dWFsIHRlc3QgbG9naWMuIEl0IHdvdWxkIGJlIGhlbHBmdWwgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBLVW5pdCBpcyB1c2VkIGluIHRoaXMgREFNT04gY29udGV4dC4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIG5hbWluZyBjb252ZW50aW9ucyBlbXBsb3llZCwgYW5kIGFueSBzcGVjaWFsaXplZCBtYWNyb3MgdGhhdCBhcmUgc3BlY2lmaWMgdG8gREFNT04ncyB0ZXN0aW5nIHJlcXVpcmVtZW50cy4gV2hhdCBhcmUgdGhlIGtleSBjb25jZXB0cyBhbmQgcHJpbWl0aXZlcyB0aGF0IGFyZSBiZWluZyB0ZXN0ZWQ/IEknbSBhbnRpY2lwYXRpbmcgc29tZSBpbnRyaWNhdGUgaW50ZXJhY3Rpb25zIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYW5kIERBTU9OJ3Mgb3BlcmF0aW9uYWwgZmVhdHVyZXMuIEkgYWxzbyB3YW50IHRvIGlkZW50aWZ5IGhvdyB0aGUgdGVzdHMgYXJlIG9yZ2FuaXplZCwgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLCBhbmQgaWYgdGhleSdyZSB3ZWxsLXN0cnVjdHVyZWQgYW5kIGRvY3VtZW50ZWQuIE9rYXksIGxldCdzIGdldCBzdGFydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE3MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDQ6MTcuNTQ3OTM3Mjc3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTY0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcIixcbiAgXCJGaXJzdExpbmVcIjogOTEwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTEwOlxcdFxcdGludCBpO1xcbiA5MTE6XFx0XFx0aW50IG5yX2RzdCA9IDAsIG5yX3NyYyA9IDA7XFxuIDkxMjpcXHRcXG4gOTEzOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZkc3QuZ29hbHMpO1xcbiA5MTQ6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNyYy5nb2Fscyk7XFxuIDkxNTpcXHRcXG4gOTE2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9kc3RfZ29hbHM7IGkrKykge1xcbiA5MTc6XFx0XFx0XFx0LypcXG4gOTE4OlxcdFxcdFxcdCAqIFdoZW4gbnJfc3JjX2dvYWxzIGlzIHNtYWxsZXIgdGhhbiBkc3RfZ29hbHMsXFxuIDkxOTpcXHRcXHRcXHQgKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSB3aWxsIGtmcmVlKCkgdGhlIGRzdCBnb2Fscy5cXG4gOTIwOlxcdFxcdFxcdCAqIE1ha2UgaXQga2ZyZWUoKS1hYmxlLlxcbiA5MjE6XFx0XFx0XFx0ICovXFxuIDkyMjpcXHRcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoZHN0X2dvYWxzW2ldLm1ldHJpYyxcXG4gOTIzOlxcdFxcdFxcdFxcdFxcdGRzdF9nb2Fsc1tpXS50YXJnZXRfdmFsdWUpO1xcbiA5MjQ6XFx0XFx0XFx0aWYgKCFnb2FsKVxcbiA5MjU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDkyNjpcXHRcXHRcXHRkYW1vc19hZGRfcXVvdGFfZ29hbChcXHUwMDI2ZHN0LCBnb2FsKTtcXG4gOTI3OlxcdFxcdH1cXG4gOTI4OlxcdFxcdHNraXAgPSBmYWxzZTtcXG4gOTI5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9zcmNfZ29hbHM7IGkrKylcXG4gOTMwOlxcdFxcdFxcdGRhbW9zX2FkZF9xdW90YV9nb2FsKFxcdTAwMjZzcmMsIFxcdTAwMjZzcmNfZ29hbHNbaV0pO1xcbiA5MzE6XFx0XFxuIDkzMjpcXHRcXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoXFx1MDAyNmRzdCwgXFx1MDAyNnNyYyk7XFxuIDkzMzpcXHRcXG4gOTM0OlxcdFxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgXFx1MDAyNmRzdClcXG4gOTM1OlxcdFxcdFxcdG5yX2RzdCsrO1xcbiA5MzY6XFx0XFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBcXHUwMDI2c3JjKVxcbiA5Mzc6XFx0XFx0XFx0bnJfc3JjKys7XFxuIDkzODpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbnJfZHN0LCBucl9zcmMpO1xcbiA5Mzk6XFx0XFx0aWYgKG5yX2RzdCAhPSBucl9zcmMpXFxuIDk0MDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gOTQxOlxcdFxcbiA5NDI6XFx0XFx0aSA9IDA7XFxuIDk0MzpcXHRcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIChcXHUwMDI2ZHN0KSkge1xcbiA5NDQ6XFx0XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGdvYWwtXFx1MDAzZW1ldHJpYywgc3JjX2dvYWxzW2ldLm1ldHJpYyk7XFxuIDk0NTpcXHRcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlLFxcbiA5NDY6XFx0XFx0XFx0XFx0XFx0c3JjX2dvYWxzW2krK10udGFyZ2V0X3ZhbHVlKTtcXG4gOTQ3OlxcdFxcdH1cXG4gOTQ4OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBpLCBucl9zcmNfZ29hbHMpO1xcbiA5NDk6XFx0XFxuIDk1MDpcXHRvdXQ6XFxuIDk1MTpcXHRcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZ29hbCwgbmV4dCwgKFxcdTAwMjZkc3QpKVxcbiA5NTI6XFx0XFx0XFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGdvYWwpO1xcbiA5NTM6XFx0XFx0aWYgKHNraXApXFxuIDk1NDpcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJnb2FsIGFsbG9jIGZhaWxcXFwiKTtcXG4gOTU1OlxcdH1cXG4gOTU2OlxcdFxcbiA5NTc6XFx0c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiA5NTg6XFx0e1xcbiA5NTk6XFx0XFx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHRlc3QsXFxuIDk2MDpcXHRcXHRcXHRcXHQoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWxbXSl7fSwgMCxcXG4gOTYxOlxcdFxcdFxcdFxcdChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbFtdKXtcXG4gOTYyOlxcdFxcdFxcdFxcdFxcdHtcXG4gOTYzOlxcdFxcdFxcdFxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9VU0VSX0lOUFVULFxcbiA5NjQ6XFx0XFx0XFx0XFx0XFx0LnRhcmdldF92YWx1ZSA9IDEyMyxcXG4gOTY1OlxcdFxcdFxcdFxcdFxcdH0sXFxuIDk2NjpcXHRcXHRcXHRcXHR9LCAxKTtcXG4gOTY3OlxcdFxcdGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2Zvcih0ZXN0LFxcbiA5Njg6XFx0XFx0XFx0XFx0KHN0cnVjdCBkYW1vc19xdW90YV9nb2FsW10pe1xcbiA5Njk6XFx0XFx0XFx0XFx0XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0NDoxNy41NDgwOTE2NTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODUxMDY1NzY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgQ29yZS1LVW5pdCBUZXN0IEhlYWRlcioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBlbmQgb2YgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIEknbSBjdXJpb3VzIHdoYXQgZmluYWwgdGVzdCBkZWNsYXJhdGlvbnMgb3IgaGVscGVyIG1hY3JvcyB0aGV5J3ZlIHBsYWNlZCBoZXJlLiBJdCdzIGxpa2VseSB0aGUgY29uY2x1ZGluZyBlbGVtZW50cyBkZWZpbmUgdGhlIHNwZWNpZmljIHRlc3RzIGZvciB0aGUgY29yZSBEQU1PTiBmdW5jdGlvbmFsaXR5LCBvciBwb3RlbnRpYWxseSBpbmNsdWRlIHV0aWxpdHkgZnVuY3Rpb25zIG1lYW50IHRvIGJlIGF2YWlsYWJsZSBpbiBvdGhlciB0ZXN0IGZpbGVzLiBJ4oCZbSB0aGlua2luZyB0aGVyZSBtaWdodCBiZSBhc3NlcnRpb25zIG9yIHNldHVwIHJvdXRpbmVzIGRlc2lnbmVkIHRvIGZhY2lsaXRhdGUgY29tcHJlaGVuc2l2ZSB0ZXN0aW5nIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXR5IHRpZWQgdG8gdGhlIERBTU9OIHN1YnN5c3RlbSwgcG90ZW50aWFsbHkgaW52b2x2aW5nIHNwZWNpZmljIHNjZW5hcmlvcyBhbmQgY29ybmVyIGNhc2VzLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSBhbnkgdGVzdCBjYXNlcywgZXNwZWNpYWxseSB0aG9zZSB0aGF0IGxvb2sgbGlrZSB0aGV5J3JlIGRlc2lnbmVkIHRvIGhhbmRsZSBjb25jdXJyZW50IG9wZXJhdGlvbnMgb3IgY29tcGxleCBtZW1vcnkgYWxsb2NhdGlvbnMuIEFsc28sIEnigJltIGxvb2tpbmcgdG8gc2VlIGhvdyB0aGV54oCZcmUgaGFuZGxpbmcgZXhwZWN0ZWQgZmFpbHVyZXMgYW5kIGVycm9yIHBhdGhzOyBhIGdvb2QgdGVzdCBzdWl0ZSBzaG91bGQgY292ZXIgdGhvc2UgdGhvcm91Z2hseS4gTXkgbWFpbiBmb2N1cyB3aWxsIGJlIG9uIHRoZSB0ZXN0IHN0cnVjdHVyZSBhbmQgdGhlIGNvdmVyYWdlLCBzaW5jZSBLVW5pdCBpcyBhIGdyZWF0IGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NTksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ0OjI2LjA1ODc1MjY4OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMDA6XFx0XFx0XFx0LmZhaWxfY2hhcmdlX2Rlbm9tID0gMyxcXG4xMDAxOlxcdFxcdFxcdC53ZWlnaHRfc3ogPSA0LFxcbjEwMDI6XFx0XFx0XFx0LndlaWdodF9ucl9hY2Nlc3NlcyA9IDUsXFxuMTAwMzpcXHRcXHRcXHQud2VpZ2h0X2FnZSA9IDYsXFxuMTAwNDpcXHRcXHR9O1xcbjEwMDU6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhIHNyYyA9IHtcXG4xMDA2OlxcdFxcdFxcdC5yZXNldF9pbnRlcnZhbCA9IDcsXFxuMTAwNzpcXHRcXHRcXHQubXMgPSA4LFxcbjEwMDg6XFx0XFx0XFx0LnN6ID0gOSxcXG4xMDA5OlxcdFxcdFxcdC5nb2FsX3R1bmVyID0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTCxcXG4xMDEwOlxcdFxcdFxcdC5mYWlsX2NoYXJnZV9udW0gPSAxLFxcbjEwMTE6XFx0XFx0XFx0LmZhaWxfY2hhcmdlX2Rlbm9tID0gMTAyNCxcXG4xMDEyOlxcdFxcdFxcdC53ZWlnaHRfc3ogPSAxMCxcXG4xMDEzOlxcdFxcdFxcdC53ZWlnaHRfbnJfYWNjZXNzZXMgPSAxMSxcXG4xMDE0OlxcdFxcdFxcdC53ZWlnaHRfYWdlID0gMTIsXFxuMTAxNTpcXHRcXHR9O1xcbjEwMTY6XFx0XFxuMTAxNzpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZHN0LmdvYWxzKTtcXG4xMDE4OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzcmMuZ29hbHMpO1xcbjEwMTk6XFx0XFxuMTAyMDpcXHRcXHRkYW1vc19jb21taXRfcXVvdGEoXFx1MDAyNmRzdCwgXFx1MDAyNnNyYyk7XFxuMTAyMTpcXHRcXG4xMDIyOlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QucmVzZXRfaW50ZXJ2YWwsIHNyYy5yZXNldF9pbnRlcnZhbCk7XFxuMTAyMzpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0Lm1zLCBzcmMubXMpO1xcbjEwMjQ6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC5zeiwgc3JjLnN6KTtcXG4xMDI1OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QuZ29hbF90dW5lciwgc3JjLmdvYWxfdHVuZXIpO1xcbjEwMjY6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC5mYWlsX2NoYXJnZV9udW0sIHNyYy5mYWlsX2NoYXJnZV9udW0pO1xcbjEwMjc6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC5mYWlsX2NoYXJnZV9kZW5vbSwgc3JjLmZhaWxfY2hhcmdlX2Rlbm9tKTtcXG4xMDI4OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3Qud2VpZ2h0X3N6LCBzcmMud2VpZ2h0X3N6KTtcXG4xMDI5OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3Qud2VpZ2h0X25yX2FjY2Vzc2VzLCBzcmMud2VpZ2h0X25yX2FjY2Vzc2VzKTtcXG4xMDMwOlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3Qud2VpZ2h0X2FnZSwgc3JjLndlaWdodF9hZ2UpO1xcbjEwMzE6XFx0fVxcbjEwMzI6XFx0XFxuMTAzMzpcXHRzdGF0aWMgaW50IGRhbW9zX3Rlc3RfaGVscF9kZXN0c19zZXR1cChzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyAqZGVzdHMsXFxuMTAzNDpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgKm5vZGVfaWRfYXJyLCB1bnNpZ25lZCBpbnQgKndlaWdodF9hcnIsXFxuMTAzNTpcXHRcXHRcXHRzaXplX3QgbnJfZGVzdHMpXFxuMTAzNjpcXHR7XFxuMTAzNzpcXHRcXHRzaXplX3QgaTtcXG4xMDM4OlxcdFxcbjEwMzk6XFx0XFx0ZGVzdHMtXFx1MDAzZW5vZGVfaWRfYXJyID0ga21hbGxvY19vYmpzKCpkZXN0cy1cXHUwMDNlbm9kZV9pZF9hcnIsIG5yX2Rlc3RzKTtcXG4xMDQwOlxcdFxcdGlmICghZGVzdHMtXFx1MDAzZW5vZGVfaWRfYXJyKVxcbjEwNDE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTA0MjpcXHRcXHRkZXN0cy1cXHUwMDNld2VpZ2h0X2FyciA9IGttYWxsb2Nfb2JqcygqZGVzdHMtXFx1MDAzZXdlaWdodF9hcnIsIG5yX2Rlc3RzKTtcXG4xMDQzOlxcdFxcdGlmICghZGVzdHMtXFx1MDAzZXdlaWdodF9hcnIpIHtcXG4xMDQ0OlxcdFxcdFxcdGtmcmVlKGRlc3RzLVxcdTAwM2Vub2RlX2lkX2Fycik7XFxuMTA0NTpcXHRcXHRcXHRkZXN0cy1cXHUwMDNlbm9kZV9pZF9hcnIgPSBOVUxMO1xcbjEwNDY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTA0NzpcXHRcXHR9XFxuMTA0ODpcXHRcXG4xMDQ5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9kZXN0czsgaSsrKSB7XFxuMTA1MDpcXHRcXHRcXHRkZXN0cy1cXHUwMDNlbm9kZV9pZF9hcnJbaV0gPSBub2RlX2lkX2FycltpXTtcXG4xMDUxOlxcdFxcdFxcdGRlc3RzLVxcdTAwM2V3ZWlnaHRfYXJyW2ldID0gd2VpZ2h0X2FycltpXTtcXG4xMDUyOlxcdFxcdH1cXG4xMDUzOlxcdFxcdGRlc3RzLVxcdTAwM2Vucl9kZXN0cyA9IG5yX2Rlc3RzO1xcbjEwNTQ6XFx0XFx0cmV0dXJuIDA7XFxuMTA1NTpcXHR9XFxuMTA1NjpcXHRcXG4xMDU3OlxcdHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfaGVscF9kZXN0c19mcmVlKHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzICpkZXN0cylcXG4xMDU4OlxcdHtcXG4xMDU5OlxcdFxcdGtmcmVlKGRlc3RzLVxcdTAwM2Vub2RlX2lkX2Fycik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ0OjI2LjA1ODg3MTEwOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzkzNzMyMDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBlbmQgb2YgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGV5IHRlc3RpbmcgaW4gdGhpcyBwYXJ0aWN1bGFyIGhlYWRlcj8gR2l2ZW4gdGhlIGZpbGUgcGF0aCwgdGhpcyBpcyBjbGVhcmx5IEtVbml0IHJlbGF0ZWQgYW5kIGxpa2VseSBwYXJ0IG9mIERBTU9OJ3MgdGVzdGluZyBpbmZyYXN0cnVjdHVyZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciB0ZXN0IG1hY3JvcywgaGVscGVyIGZ1bmN0aW9ucywgb3IgcG90ZW50aWFsbHkgZXZlbiBzb21lIHRlc3Qgc3R1YnMgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBEQU1PTiBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBzY29wZSBhbmQgcHVycG9zZSBvZiB0aGUgZnVuY3Rpb25zIG9yIHN0cnVjdHVyZXMgZGVmaW5lZCBhdCB0aGUgdGFpbCBvZiB0aGlzIGZpbGUuIEFyZSB0aGV5IGRlZmluaW5nIHNwZWNpZmljIHRlc3QgY2FzZXMsIHByZXBhcmluZyBkYXRhIGZvciB0aGUgdGVzdHMsIG9yIHBlcmhhcHMgZXN0YWJsaXNoaW5nIGluZnJhc3RydWN0dXJlIGZvciBydW5uaW5nIHRoZSBEQU1PTiB0ZXN0cyB3aXRoaW4gdGhlIEtVbml0IGZyYW1ld29yaz8gS25vd2luZyBEQU1PTiBhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUga2VybmVsLCBJJ20gYW50aWNpcGF0aW5nIGludGVyYWN0aW9ucyB3aXRoIG1lbW9yeSByZWdpb25zLCBtb25pdG9yaW5nIGZ1bmN0aW9ucywgYW5kIGRhdGEgYWNjZXNzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWFjcm9zIGFuZCBpbmxpbmUgZnVuY3Rpb25zIHRvIHNlZSBob3cgdGhlIERBTU9OIGNvcmUgY29tcG9uZW50cyBhcmUgYWN0dWFsbHkgZXhlcmNpc2VkIHVuZGVyIHRlc3QsIGFuZCBob3cgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGlzIGFzc2VydGVkIHdpdGhpbiB0aGlzIGVudmlyb25tZW50LiBVbHRpbWF0ZWx5LCBteSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IERBTU9OIGlzIHZhbGlkYXRlZCB1c2luZyB0aGlzIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODIyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0NDoyOC44NTI2MDU2ODVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTAwOlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInNraXBcXFwiKTtcXG4xMTAxOlxcdH1cXG4xMTAyOlxcdFxcbjExMDM6XFx0c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfZGVzdHMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbjExMDQ6XFx0e1xcbjExMDU6XFx0XFx0ZGFtb3NfdGVzdF9jb21taXRfZGVzdHNfZm9yKHRlc3QsXFxuMTEwNjpcXHRcXHRcXHRcXHQodW5zaWduZWQgaW50W10pezEsIDIsIDN9LCAodW5zaWduZWQgaW50W10pezIsIDMsIDR9LFxcbjExMDc6XFx0XFx0XFx0XFx0MyxcXG4xMTA4OlxcdFxcdFxcdFxcdCh1bnNpZ25lZCBpbnRbXSl7NCwgNSwgNn0sICh1bnNpZ25lZCBpbnRbXSl7NSwgNiwgN30sXFxuMTEwOTpcXHRcXHRcXHRcXHQzKTtcXG4xMTEwOlxcdFxcdGRhbW9zX3Rlc3RfY29tbWl0X2Rlc3RzX2Zvcih0ZXN0LFxcbjExMTE6XFx0XFx0XFx0XFx0KHVuc2lnbmVkIGludFtdKXsxLCAyfSwgKHVuc2lnbmVkIGludFtdKXsyLCAzfSxcXG4xMTEyOlxcdFxcdFxcdFxcdDIsXFxuMTExMzpcXHRcXHRcXHRcXHQodW5zaWduZWQgaW50W10pezQsIDUsIDZ9LCAodW5zaWduZWQgaW50W10pezUsIDYsIDd9LFxcbjExMTQ6XFx0XFx0XFx0XFx0Myk7XFxuMTExNTpcXHRcXHRkYW1vc190ZXN0X2NvbW1pdF9kZXN0c19mb3IodGVzdCxcXG4xMTE2OlxcdFxcdFxcdFxcdE5VTEwsIE5VTEwsIDAsXFxuMTExNzpcXHRcXHRcXHRcXHQodW5zaWduZWQgaW50W10pezQsIDUsIDZ9LCAodW5zaWduZWQgaW50W10pezUsIDYsIDd9LFxcbjExMTg6XFx0XFx0XFx0XFx0Myk7XFxuMTExOTpcXHRcXHRkYW1vc190ZXN0X2NvbW1pdF9kZXN0c19mb3IodGVzdCxcXG4xMTIwOlxcdFxcdFxcdFxcdCh1bnNpZ25lZCBpbnRbXSl7MSwgMiwgM30sICh1bnNpZ25lZCBpbnRbXSl7MiwgMywgNH0sXFxuMTEyMTpcXHRcXHRcXHRcXHQzLFxcbjExMjI6XFx0XFx0XFx0XFx0KHVuc2lnbmVkIGludFtdKXs0LCA1fSwgKHVuc2lnbmVkIGludFtdKXs1LCA2fSwgMik7XFxuMTEyMzpcXHRcXHRkYW1vc190ZXN0X2NvbW1pdF9kZXN0c19mb3IodGVzdCxcXG4xMTI0OlxcdFxcdFxcdFxcdCh1bnNpZ25lZCBpbnRbXSl7MSwgMiwgM30sICh1bnNpZ25lZCBpbnRbXSl7MiwgMywgNH0sXFxuMTEyNTpcXHRcXHRcXHRcXHQzLFxcbjExMjY6XFx0XFx0XFx0XFx0TlVMTCwgTlVMTCwgMCk7XFxuMTEyNzpcXHR9XFxuMTEyODpcXHRcXG4xMTI5OlxcdHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbjExMzA6XFx0XFx0XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpzcmMpXFxuMTEzMTpcXHR7XFxuMTEzMjpcXHRcXHRkYW1vc19jb21taXRfZmlsdGVyKGRzdCwgc3JjKTtcXG4xMTMzOlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZXR5cGUsIHNyYy1cXHUwMDNldHlwZSk7XFxuMTEzNDpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VtYXRjaGluZywgc3JjLVxcdTAwM2VtYXRjaGluZyk7XFxuMTEzNTpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VhbGxvdywgc3JjLVxcdTAwM2VhbGxvdyk7XFxuMTEzNjpcXHRcXHRzd2l0Y2ggKHNyYy1cXHUwMDNldHlwZSkge1xcbjExMzc6XFx0XFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzpcXG4xMTM4OlxcdFxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZW1lbWNnX2lkLCBzcmMtXFx1MDAzZW1lbWNnX2lkKTtcXG4xMTM5OlxcdFxcdFxcdGJyZWFrO1xcbjExNDA6XFx0XFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9BRERSOlxcbjExNDE6XFx0XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNlYWRkcl9yYW5nZS5zdGFydCxcXG4xMTQyOlxcdFxcdFxcdFxcdFxcdHNyYy1cXHUwMDNlYWRkcl9yYW5nZS5zdGFydCk7XFxuMTE0MzpcXHRcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VhZGRyX3JhbmdlLmVuZCxcXG4xMTQ0OlxcdFxcdFxcdFxcdFxcdHNyYy1cXHUwMDNlYWRkcl9yYW5nZS5lbmQpO1xcbjExNDU6XFx0XFx0XFx0YnJlYWs7XFxuMTE0NjpcXHRcXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVDpcXG4xMTQ3OlxcdFxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZXRhcmdldF9pZHgsIHNyYy1cXHUwMDNldGFyZ2V0X2lkeCk7XFxuMTE0ODpcXHRcXHRcXHRicmVhaztcXG4xMTQ5OlxcdFxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDQ6MjguODUyNzI5MjM1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5NzUzNzYzNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBlbmQgb2YgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIEknbSBndWVzc2luZyB0aGlzIGZpbGUgbGlrZWx5IGNvbnRhaW5zIHRoZSBjb3JlIEtVbml0IHRlc3RzIGZvciBEQU1PTiwgdGhlIERhdGEgQWNjZXNzIE1vbml0b3IuIEtub3dpbmcgdGhlIGVuZCBpcyBrZXkuIEl0J3MgdXN1YWxseSB3aGVyZSB5b3UnbGwgZmluZCB0aGUgbGFzdCB0ZXN0IGNhc2VzLCBwb3RlbnRpYWxseSByZWNlbnQgYWRkaXRpb25zLCBvciBtYXliZSBhIHN1bW1hcnkvZW5kLW9mLWZpbGUgbWFya2VyIHRoYXQgZ2l2ZXMgbWUgY29udGV4dC4gV2hhdCBhcmUgdGhleSB0ZXN0aW5nPyBXaGF0IGZ1bmN0aW9uYWxpdHkgaW4gREFNT04ncyBjb3JlIGlzIGJlaW5nIHZhbGlkYXRlZCBoZXJlPyBBcmUgdGhlcmUgYW55IG5ldyB0ZXN0IGZpeHR1cmVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgcmVncmVzc2lvbiB0ZXN0cz9cblxuSSdtIGV4cGVjdGluZyB0byBzZWUgZGVmaW5pdGlvbnMgZm9yIGBrdW5pdF9jYXNlYCBzdHJ1Y3R1cmVzLCB0ZXN0IGZ1bmN0aW9ucyB0aGF0IG9wZXJhdGUgb24gdGhvc2Ugc3RydWN0dXJlcywgYW5kIGhvcGVmdWxseSwgc29tZSBjb21tZW50YXJ5IG9yIGRvY3VtZW50YXRpb24gdGhhdCBjbGFyaWZpZXMgdGhlIGludGVuZGVkIGJlaGF2aW9yLiBJ4oCZbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhvcm91Z2hseSBEQU1PTidzIG1lbW9yeSBtb25pdG9yaW5nIGFuZCBhZGFwdGF0aW9uIG1lY2hhbmlzbXMgYXJlIGJlaW5nIHRlc3RlZCBhdCB0aGUgS1VuaXQgbGV2ZWwuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBiYXNpYyBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gdGVzdHMsIHRvIG1vcmUgY29tcGxleCBzY2VuYXJpb3MgaW52b2x2aW5nIGFjY2VzcyBwYXR0ZXJuIGFuYWx5c2lzLCBhZGFwdGF0aW9uIHRyaWdnZXJpbmcsIGFuZCBwZXJmb3JtYW5jZSBpbXBhY3QuIFRoZSBlbmQgb2YgdGhlIGZpbGUgbWlnaHQgaGF2ZSBzb21lIGNsdWVzIHRvIHdoYXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHRlc3RzIGFyZS4gTGV0J3Mgc2VlIGhvdyB3ZWxsIGl0IHRlc3RzIERBTU9OJ3MgaW1wb3J0YW50IGZ1bmN0aW9uYWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwNzcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ0OjMyLjgyODEwOTIyNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA0MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMDA6XFx0XFx0XFx0XFx0LnR5cGUgPSBEQU1PU19GSUxURVJfVFlQRV9BRERSLFxcbjEyMDE6XFx0XFx0XFx0XFx0Lm1hdGNoaW5nID0gZmFsc2UsXFxuMTIwMjpcXHRcXHRcXHRcXHQuYWxsb3cgPSBmYWxzZSxcXG4xMjAzOlxcdFxcdFxcdFxcdC5hZGRyX3JhbmdlID0gey5zdGFydCA9IDQ1NiwgLmVuZCA9IDU2N30sXFxuMTIwNDpcXHRcXHRcXHRcXHR9KTtcXG4xMjA1OlxcdFxcdGRhbW9zX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3IodGVzdCwgXFx1MDAyNmRzdCxcXG4xMjA2OlxcdFxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9zX2ZpbHRlcil7XFxuMTIwNzpcXHRcXHRcXHRcXHQudHlwZSA9IERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCxcXG4xMjA4OlxcdFxcdFxcdFxcdC5tYXRjaGluZyA9IHRydWUsXFxuMTIwOTpcXHRcXHRcXHRcXHQuYWxsb3cgPSB0cnVlLFxcbjEyMTA6XFx0XFx0XFx0XFx0LnRhcmdldF9pZHggPSA2LFxcbjEyMTE6XFx0XFx0XFx0XFx0fSk7XFxuMTIxMjpcXHR9XFxuMTIxMzpcXHRcXG4xMjE0OlxcdHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfaGVscF9pbml0YWlsaXplX3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnNjaGVtZSlcXG4xMjE1OlxcdHtcXG4xMjE2OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhLmdvYWxzKTtcXG4xMjE3OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzY2hlbWUtXFx1MDAzZWNvcmVfZmlsdGVycyk7XFxuMTIxODpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c2NoZW1lLVxcdTAwM2VvcHNfZmlsdGVycyk7XFxuMTIxOTpcXHR9XFxuMTIyMDpcXHRcXG4xMjIxOlxcdHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsIHN0cnVjdCBkYW1vcyAqZHN0LFxcbjEyMjI6XFx0XFx0XFx0c3RydWN0IGRhbW9zICpzcmMpXFxuMTIyMzpcXHR7XFxuMTIyNDpcXHRcXHRpbnQgZXJyO1xcbjEyMjU6XFx0XFxuMTIyNjpcXHRcXHRkYW1vc190ZXN0X2hlbHBfaW5pdGFpbGl6ZV9zY2hlbWUoZHN0KTtcXG4xMjI3OlxcdFxcdGRhbW9zX3Rlc3RfaGVscF9pbml0YWlsaXplX3NjaGVtZShzcmMpO1xcbjEyMjg6XFx0XFxuMTIyOTpcXHRcXHRlcnIgPSBkYW1vc19jb21taXQoZHN0LCBzcmMpO1xcbjEyMzA6XFx0XFx0aWYgKGVycilcXG4xMjMxOlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcImRhbW9zX2NvbW1pdCBmYWlsXFxcIik7XFxuMTIzMjpcXHRcXG4xMjMzOlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZXBhdHRlcm4ubWluX3N6X3JlZ2lvbixcXG4xMjM0OlxcdFxcdFxcdFxcdHNyYy1cXHUwMDNlcGF0dGVybi5taW5fc3pfcmVnaW9uKTtcXG4xMjM1OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZXBhdHRlcm4ubWF4X3N6X3JlZ2lvbixcXG4xMjM2OlxcdFxcdFxcdFxcdHNyYy1cXHUwMDNlcGF0dGVybi5tYXhfc3pfcmVnaW9uKTtcXG4xMjM3OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZXBhdHRlcm4ubWluX25yX2FjY2Vzc2VzLFxcbjEyMzg6XFx0XFx0XFx0XFx0c3JjLVxcdTAwM2VwYXR0ZXJuLm1pbl9ucl9hY2Nlc3Nlcyk7XFxuMTIzOTpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VwYXR0ZXJuLm1heF9ucl9hY2Nlc3NlcyxcXG4xMjQwOlxcdFxcdFxcdFxcdHNyYy1cXHUwMDNlcGF0dGVybi5tYXhfbnJfYWNjZXNzZXMpO1xcbjEyNDE6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNlcGF0dGVybi5taW5fYWdlX3JlZ2lvbixcXG4xMjQyOlxcdFxcdFxcdFxcdHNyYy1cXHUwMDNlcGF0dGVybi5taW5fYWdlX3JlZ2lvbik7XFxuMTI0MzpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VwYXR0ZXJuLm1heF9hZ2VfcmVnaW9uLFxcbjEyNDQ6XFx0XFx0XFx0XFx0c3JjLVxcdTAwM2VwYXR0ZXJuLm1heF9hZ2VfcmVnaW9uKTtcXG4xMjQ1OlxcdFxcbjEyNDY6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNlYWN0aW9uLCBzcmMtXFx1MDAzZWFjdGlvbik7XFxuMTI0NzpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VhcHBseV9pbnRlcnZhbF91cywgc3JjLVxcdTAwM2VhcHBseV9pbnRlcnZhbF91cyk7XFxuMTI0ODpcXHRcXG4xMjQ5OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZXdtYXJrcy5tZXRyaWMsIHNyYy1cXHUwMDNld21hcmtzLm1ldHJpYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ0OjMyLjgyODI1MTE5NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4OTIwODg2Mjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBDb3JlLUtVbml0IFRlc3QgSGVhZGVyKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGVuZCBvZiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gSSdtIGN1cmlvdXMgd2hhdCBmaW5hbCB0ZXN0IGRlY2xhcmF0aW9ucyBvciBoZWxwZXIgbWFjcm9zIHRoZXkndmUgcGxhY2VkIGhlcmUuIEl0J3MgbGlrZWx5IHRoZSBjb25jbHVkaW5nIGVsZW1lbnRzIGRlZmluZSB0aGUgc3BlY2lmaWMgdGVzdHMgZm9yIHRoZSBjb3JlIERBTU9OIGZ1bmN0aW9uYWxpdHksIG9yIHBvdGVudGlhbGx5IGluY2x1ZGUgdXRpbGl0eSBmdW5jdGlvbnMgbWVhbnQgdG8gYmUgYXZhaWxhYmxlIGluIG90aGVyIHRlc3QgZmlsZXMuIEnigJltIHRoaW5raW5nIHRoZXJlIG1pZ2h0IGJlIGFzc2VydGlvbnMgb3Igc2V0dXAgcm91dGluZXMgZGVzaWduZWQgdG8gZmFjaWxpdGF0ZSBjb21wcmVoZW5zaXZlIHRlc3Rpbmcgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWxpdHkgdGllZCB0byB0aGUgREFNT04gc3Vic3lzdGVtLCBwb3RlbnRpYWxseSBpbnZvbHZpbmcgc3BlY2lmaWMgc2NlbmFyaW9zIGFuZCBjb3JuZXIgY2FzZXMuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGFueSB0ZXN0IGNhc2VzLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgbG9vayBsaWtlIHRoZXkncmUgZGVzaWduZWQgdG8gaGFuZGxlIGNvbmN1cnJlbnQgb3BlcmF0aW9ucyBvciBjb21wbGV4IG1lbW9yeSBhbGxvY2F0aW9ucy4gQWxzbywgSeKAmW0gbG9va2luZyB0byBzZWUgaG93IHRoZXnigJlyZSBoYW5kbGluZyBleHBlY3RlZCBmYWlsdXJlcyBhbmQgZXJyb3IgcGF0aHM7IGEgZ29vZCB0ZXN0IHN1aXRlIHNob3VsZCBjb3ZlciB0aG9zZSB0aG9yb3VnaGx5LiBNeSBtYWluIGZvY3VzIHdpbGwgYmUgb24gdGhlIHRlc3Qgc3RydWN0dXJlIGFuZCB0aGUgY292ZXJhZ2UsIHNpbmNlIEtVbml0IGlzIGEgZ3JlYXQgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI4NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDQ6NDEuNzQ5MTQwNzY5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mjc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTI5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI5MDpcXHRcXHRkYW1vc190ZXN0X2NvbW1pdF9mb3IodGVzdCxcXG4xMjkxOlxcdFxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9zKXtcXG4xMjkyOlxcdFxcdFxcdFxcdFxcdC5wYXR0ZXJuID0gKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybil7XFxuMTI5MzpcXHRcXHRcXHRcXHRcXHRcXHQxLCAyLCAzLCA0LCA1LCA2fSxcXG4xMjk0OlxcdFxcdFxcdFxcdFxcdC5hY3Rpb24gPSBEQU1PU19QQUdFT1VULFxcbjEyOTU6XFx0XFx0XFx0XFx0XFx0LmFwcGx5X2ludGVydmFsX3VzID0gMTAwMDAwMCxcXG4xMjk2OlxcdFxcdFxcdFxcdFxcdC53bWFya3MgPSAoc3RydWN0IGRhbW9zX3dhdGVybWFya3Mpe1xcbjEyOTc6XFx0XFx0XFx0XFx0XFx0XFx0REFNT1NfV01BUktfRlJFRV9NRU1fUkFURSxcXG4xMjk4OlxcdFxcdFxcdFxcdFxcdFxcdDkwMCwgMTAwLCA1MH0sXFxuMTI5OTpcXHRcXHRcXHRcXHR9LFxcbjEzMDA6XFx0XFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb3Mpe1xcbjEzMDE6XFx0XFx0XFx0XFx0XFx0LnBhdHRlcm4gPSAoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuKXtcXG4xMzAyOlxcdFxcdFxcdFxcdFxcdFxcdDIsIDMsIDQsIDUsIDYsIDd9LFxcbjEzMDM6XFx0XFx0XFx0XFx0XFx0LmFjdGlvbiA9IERBTU9TX01JR1JBVEVfSE9ULFxcbjEzMDQ6XFx0XFx0XFx0XFx0XFx0LmFwcGx5X2ludGVydmFsX3VzID0gMjAwMDAwMCxcXG4xMzA1OlxcdFxcdFxcdFxcdFxcdC50YXJnZXRfbmlkID0gNSxcXG4xMzA2OlxcdFxcdFxcdFxcdH0pO1xcbjEzMDc6XFx0fVxcbjEzMDg6XFx0XFxuMTMwOTpcXHRzdGF0aWMgc3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fdGVzdF9oZWxwX3NldHVwX3RhcmdldChcXG4xMzEwOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcmVnaW9uX3N0YXJ0X2VuZFtdWzJdLCBpbnQgbnJfcmVnaW9ucylcXG4xMzExOlxcdHtcXG4xMzEyOlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuMTMxMzpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbjEzMTQ6XFx0XFx0aW50IGk7XFxuMTMxNTpcXHRcXG4xMzE2OlxcdFxcdHQgPSBkYW1vbl9uZXdfdGFyZ2V0KCk7XFxuMTMxNzpcXHRcXHRpZiAoIXQpXFxuMTMxODpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMzE5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9yZWdpb25zOyBpKyspIHtcXG4xMzIwOlxcdFxcdFxcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKHJlZ2lvbl9zdGFydF9lbmRbaV1bMF0sXFxuMTMyMTpcXHRcXHRcXHRcXHRcXHRyZWdpb25fc3RhcnRfZW5kW2ldWzFdKTtcXG4xMzIyOlxcdFxcdFxcdGlmICghcikge1xcbjEzMjM6XFx0XFx0XFx0XFx0ZGFtb25fZnJlZV90YXJnZXQodCk7XFxuMTMyNDpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMzI1OlxcdFxcdFxcdH1cXG4xMzI2OlxcdFxcdFxcdGRhbW9uX2FkZF9yZWdpb24ociwgdCk7XFxuMTMyNzpcXHRcXHR9XFxuMTMyODpcXHRcXHRyZXR1cm4gdDtcXG4xMzI5OlxcdH1cXG4xMzMwOlxcdFxcbjEzMzE6XFx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfdGFyZ2V0X3JlZ2lvbnNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4xMzMyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0X2VuZFtdWzJdLCBpbnQgbnJfZHN0X3JlZ2lvbnMsXFxuMTMzMzpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHNyY19zdGFydF9lbmRbXVsyXSwgaW50IG5yX3NyY19yZWdpb25zLFxcbjEzMzQ6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBleHBlY3Rfc3RhcnRfZW5kW11bMl0sIGludCBucl9leHBlY3RfcmVnaW9ucylcXG4xMzM1OlxcdHtcXG4xMzM2OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKmRzdF90YXJnZXQsICpzcmNfdGFyZ2V0O1xcbjEzMzc6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG4xMzM4OlxcdFxcdGludCBpO1xcbjEzMzk6XFx0XFxuMTM0MDpcXHRcXHRkc3RfdGFyZ2V0ID0gZGFtb25fdGVzdF9oZWxwX3NldHVwX3RhcmdldChkc3Rfc3RhcnRfZW5kLCBucl9kc3RfcmVnaW9ucyk7XFxuMTM0MTpcXHRcXHRpZiAoIWRzdF90YXJnZXQpXFxuMTM0MjpcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJkc3QgdGFyZ2V0IHNldHVwIGZhaWxcXFwiKTtcXG4xMzQzOlxcdFxcdHNyY190YXJnZXQgPSBkYW1vbl90ZXN0X2hlbHBfc2V0dXBfdGFyZ2V0KHNyY19zdGFydF9lbmQsIG5yX3NyY19yZWdpb25zKTtcXG4xMzQ0OlxcdFxcdGlmICghc3JjX3RhcmdldCkge1xcbjEzNDU6XFx0XFx0XFx0ZGFtb25fZnJlZV90YXJnZXQoZHN0X3RhcmdldCk7XFxuMTM0NjpcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJzcmMgdGFyZ2V0IHNldHVwIGZhaWxcXFwiKTtcXG4xMzQ3OlxcdFxcdH1cXG4xMzQ4OlxcdFxcdGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyhkc3RfdGFyZ2V0LCBzcmNfdGFyZ2V0LCAxKTtcXG4xMzQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0NDo0MS43NDkzMDUzMDlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzEzMzUzMTIyMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIENvcmUtS3VuaXQuaCdzIERlcHRocyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgdG8gdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mIHRoaXMgYG1tL2RhbW9uYCBzdHVmZi4gVGltZSB0byBzdGFydCBhdCB0aGUgYWJzb2x1dGUgYm90dG9tIG9mIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBJJ20gZ3Vlc3NpbmcgdGhhdCdzIHdoZXJlIHRoZSBtb3N0IGZ1bmRhbWVudGFsIGRlZmluaXRpb25zIG9yIHRoZSBncm91bmR3b3JrIGZvciB0aGUgdGVzdCBzdWl0ZSBpcyBsYWlkIG91dC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgY3J1Y2lhbCBtYWNyb3MsIHN0cnVjdHVyZXMsIG9yIGFueSBmb3VuZGF0aW9uYWwgZWxlbWVudHMgdGhhdCBhcmUgdXNlZCB0aHJvdWdob3V0IHRoZSB0ZXN0cy4gVGhpcyBpcyBhIGNvbW1vbiBwcmFjdGljZSB3aGVuIEkgYXBwcm9hY2ggYW55IG5ldyBjb2RlIGJhc2UuIEkgYWx3YXlzIHN0YXJ0IGZyb20gdGhlIGxvdyBsZXZlbCBhbmQgYnVpbGQgdXAgYSBtZW50YWwgbW9kZWwgZnJvbSB0aGUgZGV0YWlscy4gSSB3aWxsIGFsc28gYmUgbG9va2luZyBmb3IgY2x1ZXMgdGhhdCBjYW4gZXhwbGFpbiB3aHkgdGhlIHRlc3RzIHBhc3Mgb3IgZmFpbC4gT25jZSBJIGdldCB0aGUgZm91bmRhdGlvbmFsIGVsZW1lbnRzLCBJIHdpbGwgYmUgYWJsZSB0byB3b3JrIHVwIHRoZSBzdGFjayBhbmQgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiBlYWNoIG9mIHRoZSB0ZXN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NTEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ1OjEzLjA4NDYyMTE4MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NDAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NDA6XFx0XFx0XFx0dW5zaWduZWQgaW50IGRzdF93ZWlnaHRzW10sIGludCBucl9kc3RfcHJvYmVzLFxcbjE0NDE6XFx0XFx0XFx0dW5zaWduZWQgaW50IHNyY193ZWlnaHRzW10sIGludCBucl9zcmNfcHJvYmVzKVxcbjE0NDI6XFx0e1xcbjE0NDM6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqZHN0LCAqc3JjO1xcbjE0NDQ6XFx0XFx0aW50IGVycjtcXG4xNDQ1OlxcdFxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0X3Byb2JlLCAqc3JjX3Byb2JlO1xcbjE0NDY6XFx0XFxuMTQ0NzpcXHRcXHRkc3QgPSBkYW1vbl90ZXN0X2hlbHBfc2V0dXBfcHJvYmVzKGRzdF93ZWlnaHRzLCBucl9kc3RfcHJvYmVzKTtcXG4xNDQ4OlxcdFxcdGlmICghZHN0KVxcbjE0NDk6XFx0XFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwiZHN0IGFsbG9jIGZhaWxcXFwiKTtcXG4xNDUwOlxcdFxcdHNyYyA9IGRhbW9uX3Rlc3RfaGVscF9zZXR1cF9wcm9iZXMoc3JjX3dlaWdodHMsIG5yX3NyY19wcm9iZXMpO1xcbjE0NTE6XFx0XFx0aWYgKCFzcmMpIHtcXG4xNDUyOlxcdFxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGRzdCk7XFxuMTQ1MzpcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJzcmMgYWxsb2MgZmFpbFxcXCIpO1xcbjE0NTQ6XFx0XFx0fVxcbjE0NTU6XFx0XFxuMTQ1NjpcXHRcXHRlcnIgPSBkYW1vbl9jb21taXRfcHJvYmVzKGRzdCwgc3JjKTtcXG4xNDU3OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBlcnIsIDApO1xcbjE0NTg6XFx0XFx0aWYgKGVycilcXG4xNDU5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE0NjA6XFx0XFx0bnJfZHN0X3Byb2JlcyA9IDA7XFxuMTQ2MTpcXHRcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdClcXG4xNDYyOlxcdFxcdFxcdG5yX2RzdF9wcm9iZXMrKztcXG4xNDYzOlxcdFxcdG5yX3NyY19wcm9iZXMgPSAwO1xcbjE0NjQ6XFx0XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUoc3JjX3Byb2JlLCBzcmMpXFxuMTQ2NTpcXHRcXHRcXHRucl9zcmNfcHJvYmVzKys7XFxuMTQ2NjpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbnJfZHN0X3Byb2JlcywgbnJfc3JjX3Byb2Jlcyk7XFxuMTQ2NzpcXHRcXHRpZiAobnJfZHN0X3Byb2JlcyAhPSBucl9zcmNfcHJvYmVzKVxcbjE0Njg6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTQ2OTpcXHRcXHRucl9kc3RfcHJvYmVzID0gMDtcXG4xNDcwOlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKGRzdF9wcm9iZSwgZHN0KSB7XFxuMTQ3MTpcXHRcXHRcXHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUobnJfZHN0X3Byb2Jlcywgc3JjKTtcXG4xNDcyOlxcdFxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzcmNfcHJvYmUtXFx1MDAzZXdlaWdodCwgZHN0X3Byb2JlLVxcdTAwM2V3ZWlnaHQpO1xcbjE0NzM6XFx0XFx0XFx0bnJfZHN0X3Byb2JlcysrO1xcbjE0NzQ6XFx0XFx0fVxcbjE0NzU6XFx0b3V0OlxcbjE0NzY6XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoZHN0KTtcXG4xNDc3OlxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KHNyYyk7XFxuMTQ3ODpcXHR9XFxuMTQ3OTpcXHRcXG4xNDgwOlxcdHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3Byb2JlcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuMTQ4MTpcXHR7XFxuMTQ4MjpcXHRcXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXFxuMTQ4MzpcXHRcXHRcXHRcXHQodW5zaWduZWQgaW50W10pe30sIDAsICh1bnNpZ25lZCBpbnRbXSl7fSwgMCk7XFxuMTQ4NDpcXHRcXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXFxuMTQ4NTpcXHRcXHRcXHRcXHQodW5zaWduZWQgaW50W10pe30sIDAsICh1bnNpZ25lZCBpbnRbXSl7MX0sIDEpO1xcbjE0ODY6XFx0XFx0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxcbjE0ODc6XFx0XFx0XFx0XFx0KHVuc2lnbmVkIGludFtdKXt9LCAwLCAodW5zaWduZWQgaW50W10pezEsIDJ9LCAyKTtcXG4xNDg4OlxcdFxcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcXG4xNDg5OlxcdFxcdFxcdFxcdCh1bnNpZ25lZCBpbnRbXSl7MX0sIDEsICh1bnNpZ25lZCBpbnRbXSl7Mn0sIDEpO1xcbjE0OTA6XFx0XFx0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxcbjE0OTE6XFx0XFx0XFx0XFx0KHVuc2lnbmVkIGludFtdKXsxfSwgMSwgKHVuc2lnbmVkIGludFtdKXsyLCAzfSwgMik7XFxuMTQ5MjpcXHRcXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXFxuMTQ5MzpcXHRcXHRcXHRcXHQodW5zaWduZWQgaW50W10pezIsIDN9LCAyLCAodW5zaWduZWQgaW50W10pezF9LCAxKTtcXG4xNDk0OlxcdFxcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcXG4xNDk1OlxcdFxcdFxcdFxcdCh1bnNpZ25lZCBpbnRbXSl7MiwgM30sIDIsICh1bnNpZ25lZCBpbnRbXSl7fSwgMCk7XFxuMTQ5NjpcXHRcXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXFxuMTQ5NzpcXHRcXHRcXHRcXHQodW5zaWduZWQgaW50W10pezJ9LCAxLCAodW5zaWduZWQgaW50W10pe30sIDApO1xcbjE0OTg6XFx0fVxcbjE0OTk6XFx0XFxuMTUwMDpcXHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9jdHgoc3RydWN0IGt1bml0ICp0ZXN0KVxcbjE1MDE6XFx0e1xcbjE1MDI6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqc3JjLCAqZHN0O1xcbjE1MDM6XFx0XFxuMTUwNDpcXHRcXHRzcmMgPSBkYW1vbl9uZXdfY3R4KCk7XFxuMTUwNTpcXHRcXHRpZiAoIXNyYylcXG4xNTA2OlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInNyYyBhbGxvYyBmYWlsXFxcIik7XFxuMTUwNzpcXHRcXHRkc3QgPSBkYW1vbl9uZXdfY3R4KCk7XFxuMTUwODpcXHRcXHRpZiAoIWRzdCkge1xcbjE1MDk6XFx0XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoc3JjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDU6MTMuMDg0NzY3NDUxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNzI5MjY4MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBGaWxlJ3MgVGFpbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgZmluYWwgcG9ydGlvbiBvZiB0aGlzIGZpbGUsIGJleW9uZCBsaW5lIDE1MTAuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgc2Vuc2Ugb2YgdGhlICpyZWNlbnQqIGFjdGl2aXR5LCBhbnkgcG90ZW50aWFsIHBhdHRlcm5zIGVtZXJnaW5nIGF0IHRoZSBlbmQsIG9yIG1heWJlIGp1c3QgY29uZmlybWluZyBhc3N1bXB0aW9ucyBJIGhhdmUgYWJvdXQgdGhlIGRhdGFzZXQncyBvdmVyYWxsIHN0cnVjdHVyZS4gSSdtIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiB0aGUgdGFpbCBiZWNhdXNlLCBpbiBteSBleHBlcmllbmNlLCB0aGF0J3Mgb2Z0ZW4gd2hlcmUgeW91IGZpbmQgdGhlIGxhdGVzdCBkYXRhIGVudHJpZXMsIGFub21hbGllcywgb3IgY3J1Y2lhbCBjb25jbHVkaW5nIG9ic2VydmF0aW9ucy4gSXQncyBhIHF1aWNrIGFuZCBkaXJ0eSB3YXkgdG8gc3BvdCBpZiBhbnl0aGluZyBzaWduaWZpY2FudCBoYXMgb2NjdXJyZWQgYXQgdGhlIHZlcnkgZW5kLiBUaGlzIGhlbHBzIG1lIGRlY2lkZSBpZiBJIG5lZWQgdG8gZG8gYSBicm9hZGVyIGRhdGEgaW52ZXN0aWdhdGlvbiBvciBpZiBJIGNhbiBtYWtlIGNvbmNsdXNpb25zIHF1aWNrbHkgZnJvbSB0aGUgZW5kIG9mIHRoZSBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA1NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDU6MTUuMzU3Njk3ODg2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTUxMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUxMDpcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJkc3QgYWxsb2MgZmFpbFxcXCIpO1xcbjE1MTE6XFx0XFx0fVxcbjE1MTI6XFx0XFx0LyogT25seSBwb3dlciBvZiB0d28gbWluX3JlZ2lvbl9zeiBpcyBhbGxvd2VkLiAqL1xcbjE1MTM6XFx0XFx0c3JjLVxcdTAwM2VtaW5fcmVnaW9uX3N6ID0gNDA5NjtcXG4xNTE0OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKSwgMCk7XFxuMTUxNTpcXHRcXHRzcmMtXFx1MDAzZW1pbl9yZWdpb25fc3ogPSA0MDk1O1xcbjE1MTY6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX2NvbW1pdF9jdHgoZHN0LCBzcmMpLCAtRUlOVkFMKTtcXG4xNTE3OlxcdFxcdHNyYy1cXHUwMDNlbWluX3JlZ2lvbl9zeiA9IDQwOTY7XFxuMTUxODpcXHRcXHRzcmMtXFx1MDAzZXBhdXNlID0gdHJ1ZTtcXG4xNTE5OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKSwgMCk7XFxuMTUyMDpcXHRcXHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBkc3QtXFx1MDAzZXBhdXNlKTtcXG4xNTIxOlxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KHNyYyk7XFxuMTUyMjpcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChkc3QpO1xcbjE1MjM6XFx0fVxcbjE1MjQ6XFx0XFxuMTUyNTpcXHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuMTUyNjpcXHR7XFxuMTUyNzpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxuMTUyODpcXHRcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLCAqcHJvYmUyO1xcbjE1Mjk6XFx0XFxuMTUzMDpcXHRcXHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XFxuMTUzMTpcXHRcXHRpZiAoIWN0eClcXG4xNTMyOlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcImN0eCBhbGxvYyBmYWlsXFxcIik7XFxuMTUzMzpcXHRcXHRwcm9iZSA9IGRhbW9uX25ld19wcm9iZSgpO1xcbjE1MzQ6XFx0XFx0aWYgKCFwcm9iZSkge1xcbjE1MzU6XFx0XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG4xNTM2OlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInByb2JlIGFsbG9jIGZhaWxcXFwiKTtcXG4xNTM3OlxcdFxcdH1cXG4xNTM4OlxcdFxcdGRhbW9uX2FkZF9wcm9iZShjdHgsIHByb2JlKTtcXG4xNTM5OlxcdFxcbjE1NDA6XFx0XFx0LyogUGFyYW1ldGVycyBhcmUgdmFsaWRhdGVkIG9ubHkgaWYgYW55IHByb2JlIHdlaWdodCBpcyBzZXQuICovXFxuMTU0MTpcXHRcXHRjdHgtXFx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA9IDE7XFxuMTU0MjpcXHRcXHRjdHgtXFx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwMDAwO1xcbjE1NDM6XFx0XFx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKGN0eCkpO1xcbjE1NDQ6XFx0XFxuMTU0NTpcXHRcXHQvKiBVcCB0byBVOF9NQVggc2FtcGxlcyBwZXIgYWdncmVnYXRpb24gaW50ZXJ2YWwgYXJlIGFsbG93ZWQuICovXFxuMTU0NjpcXHRcXHRwcm9iZS1cXHUwMDNld2VpZ2h0ID0gMTAwO1xcbjE1NDc6XFx0XFx0Y3R4LVxcdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsID0gMjU1O1xcbjE1NDg6XFx0XFx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKGN0eCkpO1xcbjE1NDk6XFx0XFxuMTU1MDpcXHRcXHQvKiBNb3JlIHNhbXBsZXMgY291bGQgb3ZlcmZsb3cgdGhlIHByb2JlX2hpdHMgY291bnRlcnMuICovXFxuMTU1MTpcXHRcXHRjdHgtXFx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgPSAyNTY7XFxuMTU1MjpcXHRcXHRLVU5JVF9FWFBFQ1RfRkFMU0UodGVzdCwgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKGN0eCkpO1xcbjE1NTM6XFx0XFxuMTU1NDpcXHRcXHQvKiBUaGUgbGFyZ2VzdCB3ZWlnaHQgd2hvc2Ugd2VpZ2h0ZWQgaGl0IGNvdW50IGZpdHMgaW4gdW5zaWduZWQgaW50LiAqL1xcbjE1NTU6XFx0XFx0Y3R4LVxcdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsID0gMjU1O1xcbjE1NTY6XFx0XFx0cHJvYmUtXFx1MDAzZXdlaWdodCA9IFVJTlRfTUFYIC8gMjU1O1xcbjE1NTc6XFx0XFx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKGN0eCkpO1xcbjE1NTg6XFx0XFxuMTU1OTpcXHRcXHQvKiBBbnkgbGFyZ2VyIHdlaWdodCBjb3VsZCBvdmVyZmxvdyBpdHMgd2VpZ2h0ZWQgaGl0IGNvdW50LiAqL1xcbjE1NjA6XFx0XFx0cHJvYmUtXFx1MDAzZXdlaWdodCA9IFVJTlRfTUFYIC8gMjU1ICsgMTtcXG4xNTYxOlxcdFxcdEtVTklUX0VYUEVDVF9GQUxTRSh0ZXN0LCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoY3R4KSk7XFxuMTU2MjpcXHRcXG4xNTYzOlxcdFxcdC8qIFdpdGggb25lIHNhbXBsZSBwZXIgYWdncmVnYXRpb24sIGV2ZW4gdGhlIGxhcmdlc3Qgd2VpZ2h0IGZpdHMuICovXFxuMTU2NDpcXHRcXHRjdHgtXFx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgPSAxO1xcbjE1NjU6XFx0XFx0cHJvYmUtXFx1MDAzZXdlaWdodCA9IFVJTlRfTUFYO1xcbjE1NjY6XFx0XFx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKGN0eCkpO1xcbjE1Njc6XFx0XFxuMTU2ODpcXHRcXHQvKiBUaGUgc3VtIG9mIGFsbCBwcm9iZXMnIHdlaWdodGVkIGhpdCBjb3VudHMgY291bGQgYWxzbyBvdmVyZmxvdy4gKi9cXG4xNTY5OlxcdFxcdHByb2JlMiA9IGRhbW9uX25ld19wcm9iZSgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0NToxNS4zNTc4Mzc3NjZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4NzIzODg5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBjb3JlLWt1bml0LmhgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIExldCdzIGFzc3VtZSB0aGlzIGlzIHRoZSBoZWFkZXIgZmlsZSBmb3IgdGhlIGNvcmUgS1VuaXQgdGVzdHMgd2l0aGluIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcikgZnJhbWV3b3JrLiBJJ20gcHJvYmFibHkgbG9va2luZyBhdCB0aGlzIGJlY2F1c2UgSSdtIHRyb3VibGVzaG9vdGluZyBhIERBTU9OLXJlbGF0ZWQgaXNzdWUsIHJldmlld2luZyBjaGFuZ2VzLCBvciBtYXliZSBldmVuIGNvbnRyaWJ1dGluZyBhIG5ldyB0ZXN0LiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBkZWZpbml0aW9ucyByZWxhdGVkIHRvIHRlc3Qgc3RydWN0dXJlcywgbWFjcm9zIGZvciBzZXR0aW5nIHVwIGFuZCB0ZWFyaW5nIGRvd24gdGhlIHRlc3RzLCBhc3NlcnRpb25zLCBhbmQgcHJvYmFibHkgc29tZSBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIGFjdHVhbCB0ZXN0IGxvZ2ljLiBJdCB3b3VsZCBiZSBoZWxwZnVsIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgS1VuaXQgaXMgdXNlZCBpbiB0aGlzIERBTU9OIGNvbnRleHQuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBuYW1pbmcgY29udmVudGlvbnMgZW1wbG95ZWQsIGFuZCBhbnkgc3BlY2lhbGl6ZWQgbWFjcm9zIHRoYXQgYXJlIHNwZWNpZmljIHRvIERBTU9OJ3MgdGVzdGluZyByZXF1aXJlbWVudHMuIFdoYXQgYXJlIHRoZSBrZXkgY29uY2VwdHMgYW5kIHByaW1pdGl2ZXMgdGhhdCBhcmUgYmVpbmcgdGVzdGVkPyBJJ20gYW50aWNpcGF0aW5nIHNvbWUgaW50cmljYXRlIGludGVyYWN0aW9ucyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBEQU1PTidzIG9wZXJhdGlvbmFsIGZlYXR1cmVzLiBJIGFsc28gd2FudCB0byBpZGVudGlmeSBob3cgdGhlIHRlc3RzIGFyZSBvcmdhbml6ZWQsIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXkgaGF2ZSwgYW5kIGlmIHRoZXkncmUgd2VsbC1zdHJ1Y3R1cmVkIGFuZCBkb2N1bWVudGVkLiBPa2F5LCBsZXQncyBnZXQgc3RhcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNjEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ1OjE3Ljc0NTA3OTgxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTU3MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU3MDpcXHRcXHRpZiAoIXByb2JlMikge1xcbjE1NzE6XFx0XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG4xNTcyOlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInByb2JlMiBhbGxvYyBmYWlsXFxcIik7XFxuMTU3MzpcXHRcXHR9XFxuMTU3NDpcXHRcXHRwcm9iZTItXFx1MDAzZXdlaWdodCA9IDE7XFxuMTU3NTpcXHRcXHRkYW1vbl9hZGRfcHJvYmUoY3R4LCBwcm9iZTIpO1xcbjE1NzY6XFx0XFx0S1VOSVRfRVhQRUNUX0ZBTFNFKHRlc3QsIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhjdHgpKTtcXG4xNTc3OlxcdFxcbjE1Nzg6XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG4xNTc5OlxcdH1cXG4xNTgwOlxcdFxcbjE1ODE6XFx0c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9maWx0ZXJfb3V0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4xNTgyOlxcdHtcXG4xNTgzOlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuMTU4NDpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCAqcjI7XFxuMTU4NTpcXHRcXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmO1xcbjE1ODY6XFx0XFxuMTU4NzpcXHRcXHRmID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9BRERSLCB0cnVlLCBmYWxzZSk7XFxuMTU4ODpcXHRcXHRpZiAoIWYpXFxuMTU4OTpcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJmaWx0ZXIgYWxsb2MgZmFpbFxcXCIpO1xcbjE1OTA6XFx0XFx0Zi1cXHUwMDNlYWRkcl9yYW5nZSA9IChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSl7LnN0YXJ0ID0gMiwgLmVuZCA9IDZ9O1xcbjE1OTE6XFx0XFxuMTU5MjpcXHRcXHR0ID0gZGFtb25fbmV3X3RhcmdldCgpO1xcbjE1OTM6XFx0XFx0aWYgKCF0KSB7XFxuMTU5NDpcXHRcXHRcXHRkYW1vc19kZXN0cm95X2ZpbHRlcihmKTtcXG4xNTk1OlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInRhcmdldCBhbGxvYyBmYWlsXFxcIik7XFxuMTU5NjpcXHRcXHR9XFxuMTU5NzpcXHRcXHRyID0gZGFtb25fbmV3X3JlZ2lvbigzLCA1KTtcXG4xNTk4OlxcdFxcdGlmICghcikge1xcbjE1OTk6XFx0XFx0XFx0ZGFtb3NfZGVzdHJveV9maWx0ZXIoZik7XFxuMTYwMDpcXHRcXHRcXHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcXG4xNjAxOlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInJlZ2lvbiBhbGxvYyBmYWlsXFxcIik7XFxuMTYwMjpcXHRcXHR9XFxuMTYwMzpcXHRcXHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xcbjE2MDQ6XFx0XFxuMTYwNTpcXHRcXHQvKiByZWdpb24gaW4gdGhlIHJhbmdlICovXFxuMTYwNjpcXHRcXHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBkYW1vc19maWx0ZXJfbWF0Y2goTlVMTCwgdCwgciwgZiwgMSkpO1xcbjE2MDc6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3JlZ2lvbnModCksIDEpO1xcbjE2MDg6XFx0XFxuMTYwOTpcXHRcXHQvKiByZWdpb24gYmVmb3JlIHRoZSByYW5nZSAqL1xcbjE2MTA6XFx0XFx0ci1cXHUwMDNlYXIuc3RhcnQgPSAxO1xcbjE2MTE6XFx0XFx0ci1cXHUwMDNlYXIuZW5kID0gMjtcXG4xNjEyOlxcdFxcdEtVTklUX0VYUEVDVF9GQUxTRSh0ZXN0LFxcbjE2MTM6XFx0XFx0XFx0XFx0ZGFtb3NfZmlsdGVyX21hdGNoKE5VTEwsIHQsIHIsIGYsIDEpKTtcXG4xNjE0OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCAxKTtcXG4xNjE1OlxcdFxcbjE2MTY6XFx0XFx0LyogcmVnaW9uIGFmdGVyIHRoZSByYW5nZSAqL1xcbjE2MTc6XFx0XFx0ci1cXHUwMDNlYXIuc3RhcnQgPSA2O1xcbjE2MTg6XFx0XFx0ci1cXHUwMDNlYXIuZW5kID0gODtcXG4xNjE5OlxcdFxcdEtVTklUX0VYUEVDVF9GQUxTRSh0ZXN0LFxcbjE2MjA6XFx0XFx0XFx0XFx0ZGFtb3NfZmlsdGVyX21hdGNoKE5VTEwsIHQsIHIsIGYsIDEpKTtcXG4xNjIxOlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCAxKTtcXG4xNjIyOlxcdFxcbjE2MjM6XFx0XFx0LyogcmVnaW9uIHN0YXJ0ZWQgYmVmb3JlIHRoZSByYW5nZSAqL1xcbjE2MjQ6XFx0XFx0ci1cXHUwMDNlYXIuc3RhcnQgPSAxO1xcbjE2MjU6XFx0XFx0ci1cXHUwMDNlYXIuZW5kID0gNDtcXG4xNjI2OlxcdFxcdEtVTklUX0VYUEVDVF9GQUxTRSh0ZXN0LCBkYW1vc19maWx0ZXJfbWF0Y2goTlVMTCwgdCwgciwgZiwgMSkpO1xcbjE2Mjc6XFx0XFx0LyogZmlsdGVyIHNob3VsZCBoYXZlIHNwbGl0IHRoZSByZWdpb24gKi9cXG4xNjI4OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2Vhci5zdGFydCwgMSk7XFxuMTYyOTpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlYXIuZW5kLCAyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDU6MTcuNzQ1MjAxNDVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ5MjkyODIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBjb3JlLWt1bml0LmhgIGZvciBSZXZpZXcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHNoaWZ0IGZvY3VzIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgcmVzdCBvZiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gSSd2ZSBhbHJlYWR5IHNjcnV0aW5pemVkIHBvcnRpb25zIG9mIHRoZSBEQU1PTiBLVW5pdCB0ZXN0IHN1aXRlLCBzbyBJIGtub3cgdGhlIGdlbmVyYWwgc3RydWN0dXJlLiBOb3csIEknbSB0aGlua2luZyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGhlYWRlciBmaWxlIGlzIGNvcnJlY3RseSBpbnRlZ3JhdGVkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipQcm9wZXIgaW5jbHVkZXM6KiogQXJlIHRoZSBuZWNlc3NhcnkgREFNT04gY29yZSBoZWFkZXJzIGFuZCBLVW5pdCBpbmZyYXN0cnVjdHVyZSBpbmNsdWRlZCBjb3JyZWN0bHk/IEFyZSB0aGVyZSBhbnkgbWlzc2luZyBkZXBlbmRlbmNpZXM/XG4qICAgKipEYXRhIHN0cnVjdHVyZSBkZWNsYXJhdGlvbnM6KiogQXJlIGFueSBuZXcgc3RydWN0cyBvciBlbnVtcyBzcGVjaWZpYyB0byB0aGlzIHBvcnRpb24gb2YgdGhlIHRlc3RpbmcgZGVmaW5lZCwgb3IgYXJlIGV4aXN0aW5nIERBTU9OIGRhdGFzdHJ1Y3R1cmVzIGJlaW5nIGxldmVyYWdlZD9cbiogICAqKkZ1bmN0aW9uIHByb3RvdHlwZXM6KiogSXMgdGhlIGludGVyZmFjZSB3ZWxsLWRlZmluZWQ/IERvZXMgaXQgc2VlbSBjbGVhbiBhbmQgc3RyYWlnaHRmb3J3YXJkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCByZXR1cm4gdHlwZXMgb3IgYXJndW1lbnQgcGFzc2luZyBJIG5lZWQgdG8gZmxhZz9cbiogICAqKlRlc3QgY2FzZSBvcmdhbml6YXRpb246KiogSG93IGFyZSB0aGUgaW5kaXZpZHVhbCB0ZXN0IGNhc2VzIHN0cnVjdHVyZWQgd2l0aGluIHRoaXMgaGVhZGVyPyBBcmUgdGhleSBsb2dpY2FsbHkgZ3JvdXBlZCBhbmQgZWFzeSB0byB1bmRlcnN0YW5kPyBBcmUgdGhleSBzZXQgdXAgcHJvcGVybHkgdG8gYmUgdXNlZCB3aXRoIHRoZSBrdW5pdCB0ZXN0IHN5c3RlbT9cbiogICAqKkNvdmVyYWdlOioqIERvZXMgaXQgYXBwZWFyIHRvIGJlIHRlc3RpbmcgYSByZXByZXNlbnRhdGl2ZSByYW5nZSBvZiB0aGUgREFNT04gY29yZSBmdW5jdGlvbmFsaXR5PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgZ2FwcyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkPyBJcyB0aGVyZSBhbiBvYnZpb3VzIGJpYXMgdG93YXJkcyBlZGdlIGNhc2VzIG9yIGNvbW1vbiBmbG93cz9cbiogICAqKlBvdGVudGlhbCBmb3IgaW1wcm92ZW1lbnQ6KiogQXJlIHRoZXJlIGFueSBvcHBvcnR1bml0aWVzIGZvciBzaW1wbGlmaWNhdGlvbiwgcmVmYWN0b3JpbmcsIG9yIGJldHRlciBkb2N1bWVudGF0aW9uIHRoYXQgSSBjYW4gc3BvdCBxdWlja2x5PyBEb2VzIHRoZSBzdHlsZSBhbGlnbiB3aXRoIHRoZSBvdmVyYWxsIHByb2plY3Q/XG5cblRoaXMgc2hvdWxkIHByb3ZpZGUgbWUgd2l0aCBhbiBpbml0aWFsIGFzc2Vzc21lbnQgb2YgaG93IGBjb3JlLWt1bml0LmhgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIGFuZCB3aGF0IGFyZWFzIHdhcnJhbnQgYSBtb3JlIGluLWRlcHRoIGV4YW1pbmF0aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3MTEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ1OjIxLjIzODEzMTczN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2NzA6XFx0XFx0XFx0XFx0bGFzdF9pbnB1dCk7XFxuMTY3MTpcXHRcXG4xNjcyOlxcdFxcdC8qXFxuMTY3MzpcXHRcXHQgKiBJZiBjdXJyZW50IHNjb3JlIGlzIGhpZ2hlciB0aGFuIHRoZSBnb2FsLCBuZXh0IGlucHV0IHNob3VsZCBiZSBsb3dlclxcbjE2NzQ6XFx0XFx0ICogdGhhbiB0aGUgbGFzdCBpbnB1dC5cXG4xNjc1OlxcdFxcdCAqL1xcbjE2NzY6XFx0XFx0Y3VycmVudF9zY29yZSA9IDI1MDAwMDAwMDtcXG4xNjc3OlxcdFxcdEtVTklUX0VYUEVDVF9MVCh0ZXN0LFxcbjE2Nzg6XFx0XFx0XFx0XFx0ZGFtb25fZmVlZF9sb29wX25leHRfaW5wdXQobGFzdF9pbnB1dCwgY3VycmVudF9zY29yZSksXFxuMTY3OTpcXHRcXHRcXHRcXHRsYXN0X2lucHV0KTtcXG4xNjgwOlxcdFxcbjE2ODE6XFx0XFx0LypcXG4xNjgyOlxcdFxcdCAqIFRoZSBuZXh0IGlucHV0IGRlcGVuZHMgb24gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQgc2NvcmUgYW5kXFxuMTY4MzpcXHRcXHQgKiB0aGUgZ29hbFxcbjE2ODQ6XFx0XFx0ICovXFxuMTY4NTpcXHRcXHRLVU5JVF9FWFBFQ1RfR1QodGVzdCxcXG4xNjg2OlxcdFxcdFxcdFxcdGRhbW9uX2ZlZWRfbG9vcF9uZXh0X2lucHV0KGxhc3RfaW5wdXQsIDIwMCksXFxuMTY4NzpcXHRcXHRcXHRcXHRkYW1vbl9mZWVkX2xvb3BfbmV4dF9pbnB1dChsYXN0X2lucHV0LCAyMDAwKSk7XFxuMTY4ODpcXHR9XFxuMTY4OTpcXHRcXG4xNjkwOlxcdHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Qoc3RydWN0IGt1bml0ICp0ZXN0KVxcbjE2OTE6XFx0e1xcbjE2OTI6XFx0XFx0c3RydWN0IGRhbW9zIHNjaGVtZTtcXG4xNjkzOlxcdFxcdHN0cnVjdCBkYW1vc19maWx0ZXIgKnRhcmdldF9maWx0ZXIsICphbm9uX2ZpbHRlcjtcXG4xNjk0OlxcdFxcbjE2OTU6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNjaGVtZS5jb3JlX2ZpbHRlcnMpO1xcbjE2OTY6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNjaGVtZS5vcHNfZmlsdGVycyk7XFxuMTY5NzpcXHRcXG4xNjk4OlxcdFxcdGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KFxcdTAwMjZzY2hlbWUpO1xcbjE2OTk6XFx0XFx0LypcXG4xNzAwOlxcdFxcdCAqIE5vIGZpbHRlciBpcyBpbnN0YWxsZWQuICBBbGxvdyBieSBkZWZhdWx0IG9uIGJvdGggY29yZSBhbmQgb3BzIGxheWVyXFxuMTcwMTpcXHRcXHQgKiBmaWx0ZXJpbmcgc3RhZ2VzLCBzaW5jZSB0aGVyZSBhcmUgbm8gZmlsdGVycyBhdCBhbGwuXFxuMTcwMjpcXHRcXHQgKi9cXG4xNzAzOlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzY2hlbWUuY29yZV9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0LCBmYWxzZSk7XFxuMTcwNDpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2NoZW1lLm9wc19maWx0ZXJzX2RlZmF1bHRfcmVqZWN0LCBmYWxzZSk7XFxuMTcwNTpcXHRcXG4xNzA2OlxcdFxcdHRhcmdldF9maWx0ZXIgPSBkYW1vc19uZXdfZmlsdGVyKERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVCwgdHJ1ZSwgdHJ1ZSk7XFxuMTcwNzpcXHRcXHRpZiAoIXRhcmdldF9maWx0ZXIpXFxuMTcwODpcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJmaWx0ZXIgYWxsb2MgZmFpbFxcXCIpO1xcbjE3MDk6XFx0XFx0ZGFtb3NfYWRkX2ZpbHRlcihcXHUwMDI2c2NoZW1lLCB0YXJnZXRfZmlsdGVyKTtcXG4xNzEwOlxcdFxcdGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KFxcdTAwMjZzY2hlbWUpO1xcbjE3MTE6XFx0XFx0LypcXG4xNzEyOlxcdFxcdCAqIEEgY29yZS1oYW5kbGVkIGFsbG93LWZpbHRlciBpcyBpbnN0YWxsZWQuXFxuMTcxMzpcXHRcXHQgKiBSZWplY3QgYnkgZGVmYXVsdCBvbiBjb3JlIGxheWVyIGZpbHRlcmluZyBzdGFnZSBkdWUgdG8gdGhlIGxhc3RcXG4xNzE0OlxcdFxcdCAqIGNvcmUtbGF5ZXItZmlsdGVyJ3MgYmVoYXZpb3IuXFxuMTcxNTpcXHRcXHQgKiBBbGxvdyBieSBkZWZhdWx0IG9uIG9wcyBsYXllciBmaWx0ZXJpbmcgc3RhZ2UgZHVlIHRvIHRoZSBhYnNlbmNlIG9mXFxuMTcxNjpcXHRcXHQgKiBvcHMgbGF5ZXIgZmlsdGVycy5cXG4xNzE3OlxcdFxcdCAqL1xcbjE3MTg6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNjaGVtZS5jb3JlX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QsIHRydWUpO1xcbjE3MTk6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNjaGVtZS5vcHNfZmlsdGVyc19kZWZhdWx0X3JlamVjdCwgZmFsc2UpO1xcbjE3MjA6XFx0XFxuMTcyMTpcXHRcXHR0YXJnZXRfZmlsdGVyLVxcdTAwM2VhbGxvdyA9IGZhbHNlO1xcbjE3MjI6XFx0XFx0ZGFtb3Nfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QoXFx1MDAyNnNjaGVtZSk7XFxuMTcyMzpcXHRcXHQvKlxcbjE3MjQ6XFx0XFx0ICogQSBjb3JlLWhhbmRsZWQgcmVqZWN0LWZpbHRlciBpcyBpbnN0YWxsZWQuXFxuMTcyNTpcXHRcXHQgKiBBbGxvdyBieSBkZWZhdWx0IG9uIGNvcmUgbGF5ZXIgZmlsdGVyaW5nIHN0YWdlIGR1ZSB0byB0aGUgbGFzdFxcbjE3MjY6XFx0XFx0ICogY29yZS1sYXllci1maWx0ZXIncyBiZWhhdmlvci5cXG4xNzI3OlxcdFxcdCAqIEFsbG93IGJ5IGRlZmF1bHQgb24gb3BzIGxheWVyIGZpbHRlcmluZyBzdGFnZSBkdWUgdG8gdGhlIGFic2VuY2Ugb2ZcXG4xNzI4OlxcdFxcdCAqIG9wcyBsYXllciBmaWx0ZXJzLlxcbjE3Mjk6XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ1OjIxLjIzODI1OTk3N1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTE1NTk1NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgZW5kIG9mIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBJJ20gZ3Vlc3NpbmcgdGhpcyBmaWxlIGxpa2VseSBjb250YWlucyB0aGUgY29yZSBLVW5pdCB0ZXN0cyBmb3IgREFNT04sIHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yLiBLbm93aW5nIHRoZSBlbmQgaXMga2V5LiBJdCdzIHVzdWFsbHkgd2hlcmUgeW91J2xsIGZpbmQgdGhlIGxhc3QgdGVzdCBjYXNlcywgcG90ZW50aWFsbHkgcmVjZW50IGFkZGl0aW9ucywgb3IgbWF5YmUgYSBzdW1tYXJ5L2VuZC1vZi1maWxlIG1hcmtlciB0aGF0IGdpdmVzIG1lIGNvbnRleHQuIFdoYXQgYXJlIHRoZXkgdGVzdGluZz8gV2hhdCBmdW5jdGlvbmFsaXR5IGluIERBTU9OJ3MgY29yZSBpcyBiZWluZyB2YWxpZGF0ZWQgaGVyZT8gQXJlIHRoZXJlIGFueSBuZXcgdGVzdCBmaXh0dXJlcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIHJlZ3Jlc3Npb24gdGVzdHM/XG5cbkknbSBleHBlY3RpbmcgdG8gc2VlIGRlZmluaXRpb25zIGZvciBga3VuaXRfY2FzZWAgc3RydWN0dXJlcywgdGVzdCBmdW5jdGlvbnMgdGhhdCBvcGVyYXRlIG9uIHRob3NlIHN0cnVjdHVyZXMsIGFuZCBob3BlZnVsbHksIHNvbWUgY29tbWVudGFyeSBvciBkb2N1bWVudGF0aW9uIHRoYXQgY2xhcmlmaWVzIHRoZSBpbnRlbmRlZCBiZWhhdmlvci4gSeKAmW0gaG9waW5nIHRvIHVuZGVyc3RhbmQgaG93IHRob3JvdWdobHkgREFNT04ncyBtZW1vcnkgbW9uaXRvcmluZyBhbmQgYWRhcHRhdGlvbiBtZWNoYW5pc21zIGFyZSBiZWluZyB0ZXN0ZWQgYXQgdGhlIEtVbml0IGxldmVsLiBUaGlzIGNvdWxkIGJlIGFueXRoaW5nIGZyb20gYmFzaWMgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIHRlc3RzLCB0byBtb3JlIGNvbXBsZXggc2NlbmFyaW9zIGludm9sdmluZyBhY2Nlc3MgcGF0dGVybiBhbmFseXNpcywgYWRhcHRhdGlvbiB0cmlnZ2VyaW5nLCBhbmQgcGVyZm9ybWFuY2UgaW1wYWN0LiBUaGUgZW5kIG9mIHRoZSBmaWxlIG1pZ2h0IGhhdmUgc29tZSBjbHVlcyB0byB3aGF0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB0ZXN0cyBhcmUuIExldCdzIHNlZSBob3cgd2VsbCBpdCB0ZXN0cyBEQU1PTidzIGltcG9ydGFudCBmdW5jdGlvbmFsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTI3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0NToyNC4xNTM4NTgxNDJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNzMwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzMwOlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzY2hlbWUuY29yZV9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0LCBmYWxzZSk7XFxuMTczMTpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2NoZW1lLm9wc19maWx0ZXJzX2RlZmF1bHRfcmVqZWN0LCBmYWxzZSk7XFxuMTczMjpcXHRcXG4xNzMzOlxcdFxcdGFub25fZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9BTk9OLCB0cnVlLCB0cnVlKTtcXG4xNzM0OlxcdFxcdGlmICghYW5vbl9maWx0ZXIpIHtcXG4xNzM1OlxcdFxcdFxcdGRhbW9zX2ZyZWVfZmlsdGVyKHRhcmdldF9maWx0ZXIpO1xcbjE3MzY6XFx0XFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwiYW5vbl9maWx0ZXIgYWxsb2MgZmFpbFxcXCIpO1xcbjE3Mzc6XFx0XFx0fVxcbjE3Mzg6XFx0XFx0ZGFtb3NfYWRkX2ZpbHRlcihcXHUwMDI2c2NoZW1lLCBhbm9uX2ZpbHRlcik7XFxuMTczOTpcXHRcXG4xNzQwOlxcdFxcdGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KFxcdTAwMjZzY2hlbWUpO1xcbjE3NDE6XFx0XFx0LypcXG4xNzQyOlxcdFxcdCAqIEEgY29yZS1oYW5kbGVkIHJlamVjdC1maWx0ZXIgYW5kIG9wcy1oYW5kbGVkIGFsbG93LWZpbHRlciBhcmUgaW5zdGFsbGVkLlxcbjE3NDM6XFx0XFx0ICogQWxsb3cgYnkgZGVmYXVsdCBvbiBjb3JlIGxheWVyIGZpbHRlcmluZyBzdGFnZSBkdWUgdG8gdGhlIGV4aXN0ZW5jZVxcbjE3NDQ6XFx0XFx0ICogb2YgdGhlIG9wcy1oYW5kbGVkIGZpbHRlci5cXG4xNzQ1OlxcdFxcdCAqIFJlamVjdCBieSBkZWZhdWx0IG9uIG9wcyBsYXllciBmaWx0ZXJpbmcgc3RhZ2UgZHVlIHRvIHRoZSBsYXN0XFxuMTc0NjpcXHRcXHQgKiBvcHMtbGF5ZXItZmlsdGVyJ3MgYmVoYXZpb3IuXFxuMTc0NzpcXHRcXHQgKi9cXG4xNzQ4OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzY2hlbWUuY29yZV9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0LCBmYWxzZSk7XFxuMTc0OTpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2NoZW1lLm9wc19maWx0ZXJzX2RlZmF1bHRfcmVqZWN0LCB0cnVlKTtcXG4xNzUwOlxcdFxcbjE3NTE6XFx0XFx0dGFyZ2V0X2ZpbHRlci1cXHUwMDNlYWxsb3cgPSB0cnVlO1xcbjE3NTI6XFx0XFx0ZGFtb3Nfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QoXFx1MDAyNnNjaGVtZSk7XFxuMTc1MzpcXHRcXHQvKlxcbjE3NTQ6XFx0XFx0ICogQSBjb3JlLWhhbmRsZWQgYWxsb3ctZmlsdGVyIGFuZCBvcHMtaGFuZGxlZCBhbGxvdy1maWx0ZXIgYXJlXFxuMTc1NTpcXHRcXHQgKiBpbnN0YWxsZWQuXFxuMTc1NjpcXHRcXHQgKiBBbGxvdyBieSBkZWZhdWx0IG9uIGNvcmUgbGF5ZXIgZmlsdGVyaW5nIHN0YWdlIGR1ZSB0byB0aGUgZXhpc3RlbmNlXFxuMTc1NzpcXHRcXHQgKiBvZiB0aGUgb3BzLWhhbmRsZWQgZmlsdGVyLlxcbjE3NTg6XFx0XFx0ICogUmVqZWN0IGJ5IGRlZmF1bHQgb24gb3BzIGxheWVyIGZpbHRlcmluZyBzdGFnZSBkdWUgdG8gdGhlIGxhc3RcXG4xNzU5OlxcdFxcdCAqIG9wcy1sYXllci1maWx0ZXIncyBiZWhhdmlvci5cXG4xNzYwOlxcdFxcdCAqL1xcbjE3NjE6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNjaGVtZS5jb3JlX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QsIGZhbHNlKTtcXG4xNzYyOlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzY2hlbWUub3BzX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QsIHRydWUpO1xcbjE3NjM6XFx0XFxuMTc2NDpcXHRcXHRkYW1vc19mcmVlX2ZpbHRlcihhbm9uX2ZpbHRlcik7XFxuMTc2NTpcXHRcXHRkYW1vc19mcmVlX2ZpbHRlcih0YXJnZXRfZmlsdGVyKTtcXG4xNzY2OlxcdH1cXG4xNzY3OlxcdFxcbjE3Njg6XFx0c3RhdGljIHZvaWQgZGFtb25fdGVzdF9hcHBseV9taW5fbnJfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbjE3Njk6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzel9yZWdpb25zLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3osXFxuMTc3MDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG1pbl9ucl9yZWdpb25zLFxcbjE3NzE6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtYXhfcmVnaW9uX3N6X2V4cGVjdCxcXG4xNzcyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcmVnaW9uc19leHBlY3QpXFxuMTc3MzpcXHR7XFxuMTc3NDpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxuMTc3NTpcXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbjE3NzY6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG4xNzc3OlxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4X3JlZ2lvbl9zaXplO1xcbjE3Nzg6XFx0XFxuMTc3OTpcXHRcXHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XFxuMTc4MDpcXHRcXHRpZiAoIWN0eClcXG4xNzgxOlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcImN0eCBhbGxvYyBmYWlsXFxcXG5cXFwiKTtcXG4xNzgyOlxcdFxcdHQgPSBkYW1vbl9uZXdfdGFyZ2V0KCk7XFxuMTc4MzpcXHRcXHRpZiAoIXQpIHtcXG4xNzg0OlxcdFxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxuMTc4NTpcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJ0YXJnZXQgYWxsb2MgZmFpbFxcXFxuXFxcIik7XFxuMTc4NjpcXHRcXHR9XFxuMTc4NzpcXHRcXHRkYW1vbl9hZGRfdGFyZ2V0KGN0eCwgdCk7XFxuMTc4ODpcXHRcXHRyID0gZGFtb25fbmV3X3JlZ2lvbigwLCBzel9yZWdpb25zKTtcXG4xNzg5OlxcdFxcdGlmICghcikge1xcbjE3OTA6XFx0XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG4xNzkxOlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInJlZ2lvbiBhbGxvYyBmYWlsXFxcXG5cXFwiKTtcXG4xNzkyOlxcdFxcdH1cXG4xNzkzOlxcdFxcdGRhbW9uX2FkZF9yZWdpb24ociwgdCk7XFxuMTc5NDpcXHRcXG4xNzk1OlxcdFxcdGN0eC1cXHUwMDNlbWluX3JlZ2lvbl9zeiA9IG1pbl9yZWdpb25fc3o7XFxuMTc5NjpcXHRcXHRjdHgtXFx1MDAzZWF0dHJzLm1pbl9ucl9yZWdpb25zID0gbWluX25yX3JlZ2lvbnM7XFxuMTc5NzpcXHRcXHRtYXhfcmVnaW9uX3NpemUgPSBkYW1vbl9hcHBseV9taW5fbnJfcmVnaW9ucyhjdHgpO1xcbjE3OTg6XFx0XFxuMTc5OTpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbWF4X3JlZ2lvbl9zaXplLCBtYXhfcmVnaW9uX3N6X2V4cGVjdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ1OjI0LjE1Mzk5NjU5MloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDk3NTAxOTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgYW5hbHl6aW5nIHRoZSBzaXR1YXRpb246XG5cbioqUmV2aWV3aW5nIENvcmUgS1VuaXQgVGVzdCBEZWZpbml0aW9ucyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHJlc3Qgb2YgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIFRoaXMgbGlrZWx5IGNvbnRhaW5zIGNyaXRpY2FsIGRlZmluaXRpb25zIGZvciB0aGUgY29yZSBLVW5pdCB0ZXN0cyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykuIFVuZGVyc3RhbmRpbmcgdGhpcyBoZWFkZXIgZmlsZSBpcyBlc3NlbnRpYWwgZm9yIHNldmVyYWwgcmVhc29ucy4gSXQgY291bGQgZGV0YWlsIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBpbiB0aGVzZSBjb3JlIHRlc3RzLCBkZWZpbmUgbWFjcm9zIGZvciB0ZXN0IHNldHVwIGFuZCB0ZWFyZG93biwgb3Igc3BlY2lmeSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb3IgdGVzdGluZyBjb25kaXRpb25zIGZvciBzcGVjaWZpYyBEQU1PTiBmdW5jdGlvbmFsaXRpZXMuIEl0IG1pZ2h0IGV2ZW4gaW5jbHVkZSBpbmxpbmUgZnVuY3Rpb25zIG9yIGhlbHBlciByb3V0aW5lcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIHRoZSBLVW5pdCB0ZXN0cyB3aXRoaW4gdGhpcyBtb2R1bGUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIHNjb3BlIGFuZCBjb21wbGV4aXR5IG9mIHRoZSB0ZXN0cyBkZWZpbmVkIHdpdGhpbi4gSXQgaXMgdmVyeSBsaWtlbHkgdGhhdCB0aGlzIGhlYWRlciBjb250YWlucyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IGluY2x1ZGUvZXhjbHVkZSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgdGVzdGluZyBiYXNlZCBvbiBjb25maWd1cmF0aW9uLiBUaGlzIGNvdWxkIGJlIHJlbGV2YW50IHRvIHVuZGVyc3RhbmRpbmcgc3BlY2lmaWMgYmVoYXZpb3JzLiBVbHRpbWF0ZWx5LCBleGFtaW5pbmcgdGhpcyBoZWFkZXIgaXMgY3J1Y2lhbCB0byBwcm9wZXJseSBncm9rIHRoZSB0ZXN0IHN0cmF0ZWd5IGFuZCBpdHMgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjY5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0NToyNy4yNTE1MDE0MjVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxODAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODAwOlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCBucl9yZWdpb25zX2V4cGVjdCk7XFxuMTgwMTpcXHRcXG4xODAyOlxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxuMTgwMzpcXHR9XFxuMTgwNDpcXHRcXG4xODA1OlxcdHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfYXBwbHlfbWluX25yX3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbjE4MDY6XFx0e1xcbjE4MDc6XFx0XFx0LyogY29tbW9uLCBleHBlY3RlZCBzZXR1cCAqL1xcbjE4MDg6XFx0XFx0ZGFtb25fdGVzdF9hcHBseV9taW5fbnJfcmVnaW9uc19mb3IodGVzdCwgMTAsIDEsIDEwLCAxLCAxMCk7XFxuMTgwOTpcXHRcXHQvKiBubyB6ZXJvIHNpemUgbGltaXQgKi9cXG4xODEwOlxcdFxcdGRhbW9uX3Rlc3RfYXBwbHlfbWluX25yX3JlZ2lvbnNfZm9yKHRlc3QsIDEwLCAxLCAxNSwgMSwgMTApO1xcbjE4MTE6XFx0XFx0LyogbWF4IHNpemUgc2hvdWxkIGJlIGFsaWduZWQgYnkgbWluX3JlZ2lvbl9zeiAqL1xcbjE4MTI6XFx0XFx0ZGFtb25fdGVzdF9hcHBseV9taW5fbnJfcmVnaW9uc19mb3IodGVzdCwgMTAsIDIsIDIsIDYsIDIpO1xcbjE4MTM6XFx0XFx0LypcXG4xODE0OlxcdFxcdCAqIHdoZW4gbWluX25yX3JlZ2lvbnMgYW5kIG1pbl9yZWdpb25fc3ogY29uZmxpY3RzLCBtaW5fcmVnaW9uX3N6IHdpbnMuXFxuMTgxNTpcXHRcXHQgKi9cXG4xODE2OlxcdFxcdGRhbW9uX3Rlc3RfYXBwbHlfbWluX25yX3JlZ2lvbnNfZm9yKHRlc3QsIDEwLCAyLCAxMCwgMiwgNSk7XFxuMTgxNzpcXHR9XFxuMTgxODpcXHRcXG4xODE5OlxcdHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfaXNfbGFzdF9yZWdpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxcbjE4MjA6XFx0e1xcbjE4MjE6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG4xODIyOlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuMTgyMzpcXHRcXHRpbnQgaTtcXG4xODI0OlxcdFxcbjE4MjU6XFx0XFx0dCA9IGRhbW9uX25ld190YXJnZXQoKTtcXG4xODI2OlxcdFxcdGlmICghdClcXG4xODI3OlxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInRhcmdldCBhbGxvYyBmYWlsXFxcXG5cXFwiKTtcXG4xODI4OlxcdFxcbjE4Mjk6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDQ7IGkrKykge1xcbjE4MzA6XFx0XFx0XFx0ciA9IGRhbW9uX25ld19yZWdpb24oaSAqIDIsIChpICsgMSkgKiAyKTtcXG4xODMxOlxcdFxcdFxcdGlmICghcikge1xcbjE4MzI6XFx0XFx0XFx0XFx0ZGFtb25fZnJlZV90YXJnZXQodCk7XFxuMTgzMzpcXHRcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJyZWdpb24gYWxsb2MgJWQgZmFpbFxcXFxuXFxcIiwgaSk7XFxuMTgzNDpcXHRcXHRcXHR9XFxuMTgzNTpcXHRcXHRcXHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xcbjE4MzY6XFx0XFx0XFx0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgZGFtb25faXNfbGFzdF9yZWdpb24ociwgdCkpO1xcbjE4Mzc6XFx0XFx0fVxcbjE4Mzg6XFx0XFx0ZGFtb25fZnJlZV90YXJnZXQodCk7XFxuMTgzOTpcXHR9XFxuMTg0MDpcXHRcXG4xODQxOlxcdC8qXFxuMTg0MjpcXHQgKiBWZXJpZnkgdGhhdCBkYW1vc193YWxrKCkgcmVqZWN0cyBuZXcgcmVxdWVzdHMgd2hlblxcbjE4NDM6XFx0ICogd2Fsa19jb250cm9sX29ic29sZXRlIGlzIHNldC5cXG4xODQ0OlxcdCAqXFxuMTg0NTpcXHQgKiBUaGlzIHRlc3RzIHRoZSBpbnZhcmlhbnQgaW50cm9kdWNlZCBieTpcXG4xODQ2OlxcdCAqIGNvbW1pdCAzM2MzZjZjMmI0OGMgKFxcXCJtbS9kYW1vbi9jb3JlOiBmaXggZGFtb3Nfd2FsaygpIHZzIGtkYW1vbmRfZm4oKSBleGl0IHJhY2VcXFwiKVxcbjE4NDc6XFx0ICovXFxuMTg0ODpcXHRzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3dhbGtfY29udHJvbF9vYnNvbGV0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuMTg0OTpcXHR7XFxuMTg1MDpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxuMTg1MTpcXHRcXHRzdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sIGNvbnRyb2wgPSB7fTtcXG4xODUyOlxcdFxcdGludCByZXQ7XFxuMTg1MzpcXHRcXG4xODU0OlxcdFxcdGN0eCA9IGRhbW9uX25ld19jdHgoKTtcXG4xODU1OlxcdFxcdGlmICghY3R4KVxcbjE4NTY6XFx0XFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwiY3R4IGFsbG9jIGZhaWxcXFwiKTtcXG4xODU3OlxcdFxcbjE4NTg6XFx0XFx0LyogU2ltdWxhdGUgc2h1dGRvd24gcGhhc2UgKi9cXG4xODU5OlxcdFxcdGN0eC1cXHUwMDNld2Fsa19jb250cm9sX29ic29sZXRlID0gdHJ1ZTtcXG4xODYwOlxcdFxcbjE4NjE6XFx0XFx0cmV0ID0gZGFtb3Nfd2FsayhjdHgsIFxcdTAwMjZjb250cm9sKTtcXG4xODYyOlxcdFxcbjE4NjM6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJldCwgLUVDQU5DRUxFRCk7XFxuMTg2NDpcXHRcXG4xODY1OlxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxuMTg2NjpcXHR9XFxuMTg2NzpcXHRcXG4xODY4OlxcdHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfcmFuZChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuMTg2OTpcXHR7XFxuMTg3MDpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4IGN0eDtcXG4xODcxOlxcdFxcdGludCBpO1xcbjE4NzI6XFx0XFxuMTg3MzpcXHRcXHRwcmFuZG9tX3NlZWRfc3RhdGUoXFx1MDAyNmN0eC5ybmRfc3RhdGUsIGdldF9yYW5kb21fdTY0KCkpO1xcbjE4NzQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDEwMDAwOyBpKyspIHtcXG4xODc1OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcm5kID0gZGFtb25fcmFuZChcXHUwMDI2Y3R4LCAwLCAxMCk7XFxuMTg3NjpcXHRcXG4xODc3OlxcdFxcdFxcdEtVTklUX0VYUEVDVF9HRSh0ZXN0LCBybmQsIDApO1xcbjE4Nzg6XFx0XFx0XFx0S1VOSVRfRVhQRUNUX0xFKHRlc3QsIHJuZCwgOSk7XFxuMTg3OTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ1OjI3LjI1MTY1NzUxNVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzk2NjA5MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgYW5hbHl6aW5nIHRoZSBzaXR1YXRpb246XG5cbioqUmV2aWV3aW5nIENvcmUgS1VuaXQgVGVzdCBEZWZpbml0aW9ucyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHJlc3Qgb2YgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIFRoaXMgbGlrZWx5IGNvbnRhaW5zIGNyaXRpY2FsIGRlZmluaXRpb25zIGZvciB0aGUgY29yZSBLVW5pdCB0ZXN0cyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykuIFVuZGVyc3RhbmRpbmcgdGhpcyBoZWFkZXIgZmlsZSBpcyBlc3NlbnRpYWwgZm9yIHNldmVyYWwgcmVhc29ucy4gSXQgY291bGQgZGV0YWlsIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBpbiB0aGVzZSBjb3JlIHRlc3RzLCBkZWZpbmUgbWFjcm9zIGZvciB0ZXN0IHNldHVwIGFuZCB0ZWFyZG93biwgb3Igc3BlY2lmeSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb3IgdGVzdGluZyBjb25kaXRpb25zIGZvciBzcGVjaWZpYyBEQU1PTiBmdW5jdGlvbmFsaXRpZXMuIEl0IG1pZ2h0IGV2ZW4gaW5jbHVkZSBpbmxpbmUgZnVuY3Rpb25zIG9yIGhlbHBlciByb3V0aW5lcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIHRoZSBLVW5pdCB0ZXN0cyB3aXRoaW4gdGhpcyBtb2R1bGUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIHNjb3BlIGFuZCBjb21wbGV4aXR5IG9mIHRoZSB0ZXN0cyBkZWZpbmVkIHdpdGhpbi4gSXQgaXMgdmVyeSBsaWtlbHkgdGhhdCB0aGlzIGhlYWRlciBjb250YWlucyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IGluY2x1ZGUvZXhjbHVkZSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgdGVzdGluZyBiYXNlZCBvbiBjb25maWd1cmF0aW9uLiBUaGlzIGNvdWxkIGJlIHJlbGV2YW50IHRvIHVuZGVyc3RhbmRpbmcgc3BlY2lmaWMgYmVoYXZpb3JzLiBVbHRpbWF0ZWx5LCBleGFtaW5pbmcgdGhpcyBoZWFkZXIgaXMgY3J1Y2lhbCB0byBwcm9wZXJseSBncm9rIHRoZSB0ZXN0IHN0cmF0ZWd5IGFuZCBpdHMgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjU2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0NToyOS42NDgyNjk1ODhaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxODgwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODgwOlxcdH1cXG4xODgxOlxcdFxcbjE4ODI6XFx0c3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHtcXG4xODgzOlxcdFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF90YXJnZXQpLFxcbjE4ODQ6XFx0XFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3JlZ2lvbnMpLFxcbjE4ODU6XFx0XFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2FnZ3JlZ2F0ZSksXFxuMTg4NjpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc3BsaXRfYXQpLFxcbjE4ODc6XFx0XFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X21lcmdlX3R3byksXFxuMTg4ODpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbWVyZ2VfcmVnaW9uc19vZiksXFxuMTg4OTpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc3BsaXRfcmVnaW9uc19vZiksXFxuMTg5MDpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc3BsaXRfYWJvdmVfaGFsZl9wcm9ncmVzc2VzKSxcXG4xODkxOlxcdFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9vcHNfcmVnaXN0cmF0aW9uKSxcXG4xODkyOlxcdFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zZXRfcmVnaW9ucyksXFxuMTg5MzpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdnciksXFxuMTg5NDpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KSxcXG4xODk1OlxcdFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zZXRfYXR0cnMpLFxcbjE4OTY6XFx0XFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X212c3VtKSxcXG4xODk3OlxcdFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9ucl9hY2Nlc3Nlc19tdnN1bSksXFxuMTg5ODpcXHRcXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfbmV3X2ZpbHRlciksXFxuMTg5OTpcXHRcXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWwpLFxcbjE5MDA6XFx0XFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FscyksXFxuMTkwMTpcXHRcXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhKSxcXG4xOTAyOlxcdFxcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfZGVzdHMpLFxcbjE5MDM6XFx0XFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9maWx0ZXIpLFxcbjE5MDQ6XFx0XFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9wYWdlb3V0KSxcXG4xOTA1OlxcdFxcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfbWlncmF0ZV9ob3QpLFxcbjE5MDY6XFx0XFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9ucyksXFxuMTkwNzpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlciksXFxuMTkwODpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X3Byb2JlcyksXFxuMTkwOTpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X2N0eCksXFxuMTkxMDpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdmFsaWRfcHJvYmVfcGFyYW1zKSxcXG4xOTExOlxcdFxcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9maWx0ZXJfb3V0KSxcXG4xOTEyOlxcdFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9mZWVkX2xvb3BfbmV4dF9pbnB1dCksXFxuMTkxMzpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QpLFxcbjE5MTQ6XFx0XFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2FwcGx5X21pbl9ucl9yZWdpb25zKSxcXG4xOTE1OlxcdFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9pc19sYXN0X3JlZ2lvbiksXFxuMTkxNjpcXHRcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfd2Fsa19jb250cm9sX29ic29sZXRlKSxcXG4xOTE3OlxcdFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9yYW5kKSxcXG4xOTE4OlxcdFxcdHt9LFxcbjE5MTk6XFx0fTtcXG4xOTIwOlxcdFxcbjE5MjE6XFx0c3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBkYW1vbl90ZXN0X3N1aXRlID0ge1xcbjE5MjI6XFx0XFx0Lm5hbWUgPSBcXFwiZGFtb25cXFwiLFxcbjE5MjM6XFx0XFx0LnRlc3RfY2FzZXMgPSBkYW1vbl90ZXN0X2Nhc2VzLFxcbjE5MjQ6XFx0fTtcXG4xOTI1OlxcdGt1bml0X3Rlc3Rfc3VpdGUoZGFtb25fdGVzdF9zdWl0ZSk7XFxuMTkyNjpcXHRcXG4xOTI3OlxcdCNlbmRpZiAvKiBfREFNT05fQ09SRV9URVNUX0ggKi9cXG4xOTI4OlxcdFxcbjE5Mjk6XFx0I2VuZGlmXFx0LyogQ09ORklHX0RBTU9OX0tVTklUX1RFU1QgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDY6NDU6MjkuNjQ4NDA1MzY4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgxNjMxMjk2NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJpYWdlIERlY2lzaW9uOiBOb24tRnV6emFibGUgS1VuaXQgVGVzdCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGFmZmVjdHMgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAsIHNwZWNpZmljYWxseSB0aGUgYGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdncmAgdW5pdCB0ZXN0IGZ1bmN0aW9uLCBhbmQgb25seSB0aGF0LiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBzbyBJJ20gZG91YmxlLWNoZWNraW5nIHRoZSBnaXQgZGlmZiDigJMgbm90aGluZyBlbHNlIHdhcyB0b3VjaGVkIGluIHRoaXMgY29tbWl0LiBHb29kLlxuXG5Ob3csIGxldCdzIGFwcGx5IG15IGV4cGVydGlzZSBhbmQgd2FsayB0aHJvdWdoIHRoZSB0cmlhZ2UgcGhpbG9zb3BoeS4gU3BlY2lmaWNhbGx5LCBzZWN0aW9uIDI6IHRoZSAqbmVnYXRpdmUgY3JpdGVyaWEqIGZvciByZXR1cm5pbmcgV29ydGhGdXp6aW5nPWZhbHNlLiBUaGlzIGlzIGEgY3J1Y2lhbCBzdGVwIHRvIGF2b2lkIHdhc3RpbmcgcmVzb3VyY2VzLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgZmFsbHMgdW5kZXIgdGhlIGNhdGVnb3J5IG9mIGNvZGUgdGhhdCAqaXNuJ3QqIHJlYWNoYWJsZSB2aWEgc3lzY2FsbCBmdXp6aW5nLCB3aGljaCBpcyB3aGF0IFN5emthbGxlciBkb2VzLiBBcmUgS1VuaXQgdGVzdHMgY29uc2lkZXJlZCBcInRlc3QgY29kZSB0aGF0IGlzIG5vdCByZWFjaGFibGUgdmlhIHN5c2NhbGwgZnV6emluZ1wiPyBBbmQsIGFyZSB0aGV5IHJlYWNoYWJsZSBieSBTeXprYWxsZXIgYXQgYWxsPyBLVW5pdCB0ZXN0cyBydW4gZWl0aGVyIGR1cmluZyBrZXJuZWwgYm9vdCB3aGVuIGJ1aWx0LWluLCBvciB3aGVuIGxvYWRlZCBhcyBhIG1vZHVsZSAvIHRyaWdnZXJlZCB2aWEgZGVidWdmcy9rdW5pdC4gU3l6a2FsbGVyIGlzIGEgc3lzY2FsbCBmdXp6ZXIgdGhhdCBmdXp6ZXMgc3lzY2FsbCBpbnRlcmZhY2VzIGFuZCBrZXJuZWwgZnVuY3Rpb25hbGl0eSBkdXJpbmcgbm9ybWFsIHJ1bnRpbWUuIEtVbml0IHRlc3QgY2FzZXMgYXJlIHVuaXQgdGVzdHMgKGxpa2Ugc2VsZnRlc3RzL2t1bml0KSwgbm90IHBhcnQgb2YgcnVudGltZSBvcGVyYXRpb25hbCBrZXJuZWwgbG9naWMgb3IgaW50ZXJmYWNlcy5cblxuTG9va2luZyBhdCB0aGUgZ3VpZGVsaW5lcywgSSBjYW4ndCBmaW5kIGFueXRoaW5nIGFib3V0IEtVbml0IHRlc3Qgc3BlY2lmaWNhbGx5LiBMZXQncyBzZWU6XG5cbiogICBJdCdzIG5vdCBub24ta2VybmVsIG9yIG5vbi1leGVjdXRhYmxlIGNoYW5nZXMgKGV4Y2VwdCBmb3IgdGVzdCBjb2RlLilcbiogICBJdCdzIG5vdCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuXG4qICAgSXQncyBub3QgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLlxuXG5CdXQ6XG5cbiogICBUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLCBhbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuKiAgIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOiBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuVGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyBhIEtVbml0IHVuaXQgdGVzdCBmdW5jdGlvbi4gSXQgZG9lcyBub3QgdG91Y2ggYW55IGtlcm5lbCBsb2dpYywgdGhlIERBTU9OIGNvcmUgaW1wbGVtZW50YXRpb24gKHRoZSBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAgZnVuY3Rpb24gKml0c2VsZiogd2Fzbid0IG1vZGlmaWVkKSwgb3Igc3lzY2FsbHMsIG9yIGRyaXZlcnMsIG9yIGFueSBydW50aW1lIGV4ZWN1dGFibGUgY29kZS4gVGhlc2UgS1VuaXQgdGVzdHMgYXJlIHNlbGYtY29udGFpbmVkIGFuZCBub3QgZXhwb3NlZCB0byBzeXNjYWxsIGZ1enppbmcuIEtVbml0IHRlc3RzIGFyZSBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gdGVzdCB1bml0cyBvZiBjb2RlIGluIGlzb2xhdGlvbiBhbmQgZG8gbm90IGFmZmVjdCBydW50aW1lIGtlcm5lbCBiZWhhdmlvci5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGlzIHBhdGNoIGlzIHN0cmljdGx5IG1vZGlmeWluZyBhIHVuaXQgdGVzdCAoS1VuaXQgdGVzdCBzdWl0ZSkgYW5kIG5vdCBhZmZlY3RpbmcgYW55IHJ1bnRpbWUga2VybmVsIGxvZ2ljIG9yIHN5c2NhbGwgaW50ZXJmYWNlcywgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmcgPSBmYWxzZWAuXG5cblNvLCB0aGUgcmVhc29uaW5nIGlzIGNvbmNpc2U6IFRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtVbml0IHVuaXQgdGVzdHMgKGBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3JgIGluIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgKSBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IHJ1bnRpbWUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBzeXNjYWxsIGludGVyZmFjZXMuIE5vIGZ1enppbmcgcmVxdWlyZWQuIE5vdywgSSB3aWxsIGBpbnZva2Ugc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzUzMCwiT3V0cHV0VG9rZW5zIjo5NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNjo0NTozNy44MTE1MzcyNTRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IHVwZGF0ZXMgdGVzdCBhc3NlcnRpb25zIGFuZCBjYXNlcyBpbiB0aGUgS1VuaXQgdGVzdCBzdWl0ZSAoZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyIGluIG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCkuIEl0IGRvZXMgbm90IG1vZGlmeSBhbnkgREFNT04gY29yZSBydW50aW1lIGxvZ2ljLCBkcml2ZXJzLCBvciBzeXNjYWxsLXJlYWNoYWJsZSBrZXJuZWwgZXhlY3V0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSB1cGRhdGVzIHRlc3QgYXNzZXJ0aW9ucyBhbmQgY2FzZXMgaW4gdGhlIEtVbml0IHRlc3Qgc3VpdGUgKGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdnciBpbiBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgpLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IERBTU9OIGNvcmUgcnVudGltZSBsb2dpYywgZHJpdmVycywgb3Igc3lzY2FsbC1yZWFjaGFibGUga2VybmVsIGV4ZWN1dGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA2OjQ1OjM3LjgxMTU2MTcyNFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowq9sq5[1] Phase: Running StartedAt: 2026-09-08 06:45:48 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9sq5[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-08 06:45:48 +0000 UTC FinishedAt: 2026-09-08 06:45:52 +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,}