Name: series-workflowqkj4n Phase: Failed StartedAt: 2026-09-03 09:43:57 +0000 UTC FinishedAt: 2026-09-03 09:46:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkj4n[0] Phase: Succeeded StartedAt: 2026-09-03 09:43:57 +0000 UTC FinishedAt: 2026-09-03 09:46:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkj4n[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 09:43:57 +0000 UTC FinishedAt: 2026-09-03 09:46:01 +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+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIEtVbml0IHRlc3QgY2FzZXMgaW4gbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGFuZCB1cGRhdGVzIHNlbGZ0ZXN0IHNjcmlwdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGZ1bmN0aW9uYWwga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY4ODVkYTBkNmMxMTE3OWQ5ZTcwNmY3YzdkMmZkODFjMzIwZWFhZjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDA5OjQ1OjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuaW5kZXggYWYyNmIzZDYwOTU3Yi4uZjI1NjhmYmE1NTJlYyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5AQCAtMTMxNiw2ICYjNDM7MTMxNiwxMjggQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdCh1bnNpZ25lZCBsb25nW11bMl0pIHt7MywgOH0sIHs4LCAxMH19LCAyKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuJiM0MztcdFx0c3RydWN0IGRhbW9uX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpzcmMpXG4mIzQzO3tcbiYjNDM7XHRkYW1vbl9jb21taXRfZmlsdGVyKGRzdCwgc3JjKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZXR5cGUsIHNyYy1cdTAwM2V0eXBlKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZW1hdGNoaW5nLCBzcmMtXHUwMDNlbWF0Y2hpbmcpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlYWxsb3csIHNyYy1cdTAwM2VhbGxvdyk7XG4mIzQzO1x0c3dpdGNoIChzcmMtXHUwMDNldHlwZSkge1xuJiM0MztcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XG4mIzQzO1x0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZW1lbWNnX2lkLCBzcmMtXHUwMDNlbWVtY2dfaWQpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyKHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9maWx0ZXIgZHN0ID0ge1xuJiM0MztcdFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OLFxuJiM0MztcdFx0Lm1hdGNoaW5nID0gZmFsc2UsXG4mIzQzO1x0XHQuYWxsb3cgPSBmYWxzZSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHRlc3QsIFx1MDAyNmRzdCxcbiYjNDM7XHRcdFx0XHUwMDI2KHN0cnVjdCBkYW1vbl9maWx0ZXIpe1xuJiM0MztcdFx0XHQudHlwZSA9IERBTU9OX0ZJTFRFUl9UWVBFX0FOT04sXG4mIzQzO1x0XHRcdC5tYXRjaGluZyA9IHRydWUsXG4mIzQzO1x0XHRcdC5hbGxvdyA9IHRydWUsXG4mIzQzO1x0XHRcdH0pO1xuJiM0MztcdGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3IodGVzdCwgXHUwMDI2ZHN0LFxuJiM0MztcdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9uX2ZpbHRlcil7XG4mIzQzO1x0XHRcdC50eXBlID0gREFNT05fRklMVEVSX1RZUEVfTUVNQ0csXG4mIzQzO1x0XHRcdC5tYXRjaGluZyA9IGZhbHNlLFxuJiM0MztcdFx0XHQuYWxsb3cgPSBmYWxzZSxcbiYjNDM7XHRcdFx0Lm1lbWNnX2lkID0gMTIzLFxuJiM0MztcdFx0XHR9KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3Rlc3RfaGVscF9zZXR1cF9wcm9iZXModW5zaWduZWQgaW50IHdlaWdodHNbXSxcbiYjNDM7XHRcdGludCBucl93ZWlnaHRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuJiM0MztcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGN0eCA9IGRhbW9uX25ld19jdHgoKTtcbiYjNDM7XHRpZiAoIWN0eClcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3dlaWdodHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRwcm9iZSA9IGRhbW9uX25ld19wcm9iZSgpO1xuJiM0MztcdFx0aWYgKCFwcm9iZSkge1xuJiM0MztcdFx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHByb2JlLVx1MDAzZXdlaWdodCA9IHdlaWdodHNbaV07XG4mIzQzO1x0XHRkYW1vbl9hZGRfcHJvYmUoY3R4LCBwcm9iZSk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBjdHg7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuJiM0MztcdFx0dW5zaWduZWQgaW50IGRzdF93ZWlnaHRzW10sIGludCBucl9kc3RfcHJvYmVzLFxuJiM0MztcdFx0dW5zaWduZWQgaW50IHNyY193ZWlnaHRzW10sIGludCBucl9zcmNfcHJvYmVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX2N0eCAqZHN0LCAqc3JjO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3Byb2JlICpkc3RfcHJvYmUsICpzcmNfcHJvYmU7XG4mIzQzO1xuJiM0MztcdGRzdCA9IGRhbW9uX3Rlc3RfaGVscF9zZXR1cF9wcm9iZXMoZHN0X3dlaWdodHMsIG5yX2RzdF9wcm9iZXMpO1xuJiM0MztcdGlmICghZHN0KVxuJiM0MztcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtkc3QgYWxsb2MgZmFpbFwmIzM0Oyk7XG4mIzQzO1x0c3JjID0gZGFtb25fdGVzdF9oZWxwX3NldHVwX3Byb2JlcyhzcmNfd2VpZ2h0cywgbnJfc3JjX3Byb2Jlcyk7XG4mIzQzO1x0aWYgKCFzcmMpIHtcbiYjNDM7XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGRzdCk7XG4mIzQzO1x0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O3NyYyBhbGxvYyBmYWlsXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGRhbW9uX2NvbW1pdF9wcm9iZXMoZHN0LCBzcmMpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBlcnIsIDApO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRucl9kc3RfcHJvYmVzID0gMDtcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdClcbiYjNDM7XHRcdG5yX2RzdF9wcm9iZXMmIzQzOyYjNDM7O1xuJiM0MztcdG5yX3NyY19wcm9iZXMgPSAwO1xuJiM0MztcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHNyY19wcm9iZSwgc3JjKVxuJiM0MztcdFx0bnJfc3JjX3Byb2JlcyYjNDM7JiM0Mzs7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIG5yX2RzdF9wcm9iZXMsIG5yX3NyY19wcm9iZXMpO1xuJiM0MztcdGlmIChucl9kc3RfcHJvYmVzICE9IG5yX3NyY19wcm9iZXMpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRucl9kc3RfcHJvYmVzID0gMDtcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdCkge1xuJiM0MztcdFx0c3JjX3Byb2JlID0gZGFtb25fbnRoX3Byb2JlKG5yX2RzdF9wcm9iZXMsIHNyYyk7XG4mIzQzO1x0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc3JjX3Byb2JlLVx1MDAzZXdlaWdodCwgZHN0X3Byb2JlLVx1MDAzZXdlaWdodCk7XG4mIzQzO1x0XHRucl9kc3RfcHJvYmVzJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO291dDpcbiYjNDM7XHRkYW1vbl9kZXN0cm95X2N0eChkc3QpO1xuJiM0MztcdGRhbW9uX2Rlc3Ryb3lfY3R4KHNyYyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3Byb2JlcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4mIzQzO1x0XHRcdCh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXt9LCAwKTtcbiYjNDM7XHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4mIzQzO1x0XHRcdCh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXsxfSwgMSk7XG4mIzQzO1x0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuJiM0MztcdFx0XHQodW5zaWduZWQgaW50W10pe30sIDAsICh1bnNpZ25lZCBpbnRbXSl7MSwgMn0sIDIpO1xuJiM0MztcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbiYjNDM7XHRcdFx0KHVuc2lnbmVkIGludFtdKXsxfSwgMSwgKHVuc2lnbmVkIGludFtdKXsyfSwgMSk7XG4mIzQzO1x0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuJiM0MztcdFx0XHQodW5zaWduZWQgaW50W10pezF9LCAxLCAodW5zaWduZWQgaW50W10pezIsIDN9LCAyKTtcbiYjNDM7XHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4mIzQzO1x0XHRcdCh1bnNpZ25lZCBpbnRbXSl7MiwgM30sIDIsICh1bnNpZ25lZCBpbnRbXSl7MX0sIDEpO1xuJiM0MztcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbiYjNDM7XHRcdFx0KHVuc2lnbmVkIGludFtdKXsyLCAzfSwgMiwgKHVuc2lnbmVkIGludFtdKXt9LCAwKTtcbiYjNDM7XHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4mIzQzO1x0XHRcdCh1bnNpZ25lZCBpbnRbXSl7Mn0sIDEsICh1bnNpZ25lZCBpbnRbXSl7fSwgMCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfY3R4KHN0cnVjdCBrdW5pdCAqdGVzdClcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fY3R4ICpzcmMsICpkc3Q7XG5AQCAtMTcyMiw2ICYjNDM7MTg0NCw4IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7XG4gXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3BhZ2VvdXQpLFxuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9taWdyYXRlX2hvdCksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X3RhcmdldF9yZWdpb25zKSxcbiYjNDM7XHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlciksXG4mIzQzO1x0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXMpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF9jdHgpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3ZhbGlkX3Byb2JlX3BhcmFtcyksXG4gXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfZmlsdGVyX291dCksXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XG5pbmRleCBmNjA0YjdkNjUzMGIzLi5lNzA5NWMzMzY1MjQ1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHlcbkBAIC01NzAsNiAmIzQzOzU3MCwxMTcgQEAgY2xhc3MgSW50ZXJ2YWxzR29hbDpcbiAgICAgICAgICAgICByZXR1cm4gZXJyXG4gICAgICAgICByZXR1cm4gTm9uZVxuIFxuJiM0MztjbGFzcyBEYW1vbkZpbHRlcjpcbiYjNDM7ICAgIHR5cGVfID0gTm9uZVxuJiM0MzsgICAgbWF0Y2hpbmcgPSBOb25lXG4mIzQzOyAgICBhbGxvdyA9IE5vbmVcbiYjNDM7ICAgIGZpbHRlcnMgPSBOb25lXG4mIzQzOyAgICBwYXRoID0gTm9uZVxuJiM0MzsgICAgaWR4ID0gTm9uZVxuJiM0MztcbiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlXz0mIzM5O2Fub24mIzM5OywgbWF0Y2hpbmc9RmFsc2UsIGFsbG93PUZhbHNlLCBwYXRoPU5vbmUpOlxuJiM0MzsgICAgICAgIHNlbGYudHlwZV8gPSB0eXBlX1xuJiM0MzsgICAgICAgIHNlbGYubWF0Y2hpbmcgPSBtYXRjaGluZ1xuJiM0MzsgICAgICAgIHNlbGYuYWxsb3cgPSBhbGxvd1xuJiM0MzsgICAgICAgIHNlbGYucGF0aCA9IHBhdGhcbiYjNDM7XG4mIzQzOyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxuJiM0MzsgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5maWx0ZXJzLnN5c2ZzX2RpcigpLCAmIzM5OyVkJiMzOTsgJSBzZWxmLmlkeClcbiYjNDM7XG4mIzQzOyAgICBkZWYgc3RhZ2Uoc2VsZik6XG4mIzQzOyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTt0eXBlJiMzOTspLCBzZWxmLnR5cGVfKVxuJiM0MzsgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgcmV0dXJuIGVyclxuJiM0MzsgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUob3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICYjMzk7bWF0Y2hpbmcmIzM5OyksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAmIzM5O1kmIzM5OyBpZiBzZWxmLm1hdGNoaW5nIGVsc2UgJiMzOTtOJiMzOTspXG4mIzQzOyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICByZXR1cm4gZXJyXG4mIzQzOyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTthbGxvdyYjMzk7KSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICYjMzk7WSYjMzk7IGlmIHNlbGYuYWxsb3cgZWxzZSAmIzM5O04mIzM5OylcbiYjNDM7ICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIHJldHVybiBlcnJcbiYjNDM7ICAgICAgICBpZiBzZWxmLnR5cGVfID09ICYjMzk7bWVtY2cmIzM5OzpcbiYjNDM7ICAgICAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTtwYXRoJiMzOTspLCBzZWxmLnBhdGgpXG4mIzQzOyAgICAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgICAgIHJldHVybiBlcnJcbiYjNDM7ICAgICAgICByZXR1cm4gTm9uZVxuJiM0MztcbiYjNDM7Y2xhc3MgRGFtb25GaWx0ZXJzOlxuJiM0MzsgICAgZmlsdGVycyA9IE5vbmVcbiYjNDM7ICAgIHByb2JlID0gTm9uZVxuJiM0MztcbiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWx0ZXJzPU5vbmUpOlxuJiM0MzsgICAgICAgIGlmIGZpbHRlcnMgaXMgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgZmlsdGVycyA9IFtdXG4mIzQzOyAgICAgICAgc2VsZi5maWx0ZXJzID0gZmlsdGVyc1xuJiM0MzsgICAgICAgIGZvciBpZHgsIGZpbHRlciBpbiBlbnVtZXJhdGUoc2VsZi5maWx0ZXJzKTpcbiYjNDM7ICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMgPSBzZWxmXG4mIzQzOyAgICAgICAgICAgIGZpbHRlci5pZHggPSBpZHhcbiYjNDM7XG4mIzQzOyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxuJiM0MzsgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5wcm9iZS5zeXNmc19kaXIoKSwgJiMzOTtmaWx0ZXJzJiMzOTspXG4mIzQzO1xuJiM0MzsgICAgZGVmIHN0YWdlKHNlbGYpOlxuJiM0MzsgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUoXG4mIzQzOyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTtucl9maWx0ZXJzJiMzOTspLFxuJiM0MzsgICAgICAgICAgICAgICAgbGVuKHNlbGYuZmlsdGVycykpXG4mIzQzOyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICByZXR1cm4gZXJyXG4mIzQzOyAgICAgICAgZm9yIGZpbHRlciBpbiBzZWxmLmZpbHRlcnM6XG4mIzQzOyAgICAgICAgICAgIGVyciA9IGZpbHRlci5zdGFnZSgpXG4mIzQzOyAgICAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgICAgIHJldHVybiBlcnJcbiYjNDM7ICAgICAgICByZXR1cm4gTm9uZVxuJiM0MztcbiYjNDM7Y2xhc3MgRGFtb25Qcm9iZTpcbiYjNDM7ICAgIHdlaWdodCA9IE5vbmVcbiYjNDM7ICAgIGZpbHRlcnMgPSBOb25lXG4mIzQzOyAgICBwcm9iZXMgPSBOb25lXG4mIzQzOyAgICBpZHggPSBOb25lXG4mIzQzO1xuJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdlaWdodD0wLCBmaWx0ZXJzPU5vbmUpOlxuJiM0MzsgICAgICAgIHNlbGYud2VpZ2h0ID0gd2VpZ2h0XG4mIzQzOyAgICAgICAgaWYgZmlsdGVycyBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBmaWx0ZXJzID0gRGFtb25GaWx0ZXJzKClcbiYjNDM7ICAgICAgICBzZWxmLmZpbHRlcnMgPSBmaWx0ZXJzXG4mIzQzOyAgICAgICAgc2VsZi5maWx0ZXJzLnByb2JlID0gc2VsZlxuJiM0MztcbiYjNDM7ICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XG4mIzQzOyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLnByb2Jlcy5zeXNmc19kaXIoKSwgJiMzOTslZCYjMzk7ICUgc2VsZi5pZHgpXG4mIzQzO1xuJiM0MzsgICAgZGVmIHN0YWdlKHNlbGYpOlxuJiM0MzsgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUoXG4mIzQzOyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTt3ZWlnaHQmIzM5OyksICYjMzk7JWQmIzM5OyAlIHNlbGYud2VpZ2h0KVxuJiM0MzsgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgcmV0dXJuIGVyclxuJiM0MzsgICAgICAgIHJldHVybiBzZWxmLmZpbHRlcnMuc3RhZ2UoKVxuJiM0MztcbiYjNDM7Y2xhc3MgRGFtb25Qcm9iZXM6XG4mIzQzOyAgICBwcm9iZXMgPSBOb25lXG4mIzQzOyAgICBhdHRycyA9IE5vbmVcbiYjNDM7XG4mIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvYmVzPU5vbmUpOlxuJiM0MzsgICAgICAgIGlmIHByb2JlcyBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBwcm9iZXMgPSBbXVxuJiM0MzsgICAgICAgIHNlbGYucHJvYmVzID0gcHJvYmVzXG4mIzQzOyAgICAgICAgZm9yIGlkeCwgcHJvYmUgaW4gZW51bWVyYXRlKHNlbGYucHJvYmVzKTpcbiYjNDM7ICAgICAgICAgICAgcHJvYmUucHJvYmVzID0gc2VsZlxuJiM0MzsgICAgICAgICAgICBwcm9iZS5pZHggPSBpZHhcbiYjNDM7XG4mIzQzOyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxuJiM0MzsgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5hdHRycy5zeXNmc19kaXIoKSwgJiMzOTtwcm9iZXMmIzM5OylcbiYjNDM7XG4mIzQzOyAgICBkZWYgc3RhZ2Uoc2VsZik6XG4mIzQzOyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTtucl9wcm9iZXMmIzM5OyksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oc2VsZi5wcm9iZXMpKVxuJiM0MzsgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgcmV0dXJuIGVyclxuJiM0MzsgICAgICAgIGZvciBwcm9iZSBpbiBzZWxmLnByb2JlczpcbiYjNDM7ICAgICAgICAgICAgZXJyID0gcHJvYmUuc3RhZ2UoKVxuJiM0MzsgICAgICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gZXJyXG4mIzQzOyAgICAgICAgcmV0dXJuIE5vbmVcbiYjNDM7XG4gY2xhc3MgRGFtb25BdHRyczpcbiAgICAgc2FtcGxlX3VzID0gTm9uZVxuICAgICBhZ2dyX3VzID0gTm9uZVxuQEAgLTU3NywxMSAmIzQzOzY4OCwxMiBAQCBjbGFzcyBEYW1vbkF0dHJzOlxuICAgICB1cGRhdGVfdXMgPSBOb25lXG4gICAgIG1pbl9ucl9yZWdpb25zID0gTm9uZVxuICAgICBtYXhfbnJfcmVnaW9ucyA9IE5vbmVcbiYjNDM7ICAgIHByb2JlcyA9IE5vbmVcbiAgICAgY29udGV4dCA9IE5vbmVcbiBcbiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNhbXBsZV91cz01MDAwLCBhZ2dyX3VzPTEwMDAwMCxcbiAgICAgICAgICAgICAgICAgIGludGVydmFsc19nb2FsPU5vbmUsIHVwZGF0ZV91cz0xMDAwMDAwLCBtaW5fbnJfcmVnaW9ucz0xMCxcbi0gICAgICAgICAgICAgICAgIG1heF9ucl9yZWdpb25zPTEwMDApOlxuJiM0MzsgICAgICAgICAgICAgICAgIG1heF9ucl9yZWdpb25zPTEwMDAsIHByb2Jlcz1Ob25lKTpcbiAgICAgICAgIHNlbGYuc2FtcGxlX3VzID0gc2FtcGxlX3VzXG4gICAgICAgICBzZWxmLmFnZ3JfdXMgPSBhZ2dyX3VzXG4gICAgICAgICBpZiBpbnRlcnZhbHNfZ29hbCBpcyBOb25lOlxuQEAgLTU5MSw2ICYjNDM7NzAzLDEwIEBAIGNsYXNzIERhbW9uQXR0cnM6XG4gICAgICAgICBzZWxmLnVwZGF0ZV91cyA9IHVwZGF0ZV91c1xuICAgICAgICAgc2VsZi5taW5fbnJfcmVnaW9ucyA9IG1pbl9ucl9yZWdpb25zXG4gICAgICAgICBzZWxmLm1heF9ucl9yZWdpb25zID0gbWF4X25yX3JlZ2lvbnNcbiYjNDM7ICAgICAgICBpZiBwcm9iZXMgaXMgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgcHJvYmVzID0gRGFtb25Qcm9iZXMoKVxuJiM0MzsgICAgICAgIHNlbGYucHJvYmVzID0gcHJvYmVzXG4mIzQzOyAgICAgICAgc2VsZi5wcm9iZXMuYXR0cnMgPSBzZWxmXG4gXG4gICAgIGRlZiBpbnRlcnZhbF9zeXNmc19kaXIoc2VsZik6XG4gICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJiMzOTttb25pdG9yaW5nX2F0dHJzJiMzOTssXG5AQCAtNjAwLDYgJiM0Mzs3MTYsOSBAQCBjbGFzcyBEYW1vbkF0dHJzOlxuICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmNvbnRleHQuc3lzZnNfZGlyKCksICYjMzk7bW9uaXRvcmluZ19hdHRycyYjMzk7LFxuICAgICAgICAgICAgICAgICAmIzM5O25yX3JlZ2lvbnMmIzM5OylcbiBcbiYjNDM7ICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XG4mIzQzOyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmNvbnRleHQuc3lzZnNfZGlyKCksICYjMzk7bW9uaXRvcmluZ19hdHRycyYjMzk7KVxuJiM0MztcbiAgICAgZGVmIHN0YWdlKHNlbGYpOlxuICAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5pbnRlcnZhbF9zeXNmc19kaXIoKSwgJiMzOTtzYW1wbGVfdXMmIzM5OyksXG4gICAgICAgICAgICAgICAgIHNlbGYuc2FtcGxlX3VzKVxuQEAgLTYyOSw2ICYjNDM7NzQ4LDEwIEBAIGNsYXNzIERhbW9uQXR0cnM6XG4gICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4gICAgICAgICAgICAgcmV0dXJuIGVyclxuIFxuJiM0MzsgICAgICAgIGVyciA9IHNlbGYucHJvYmVzLnN0YWdlKClcbiYjNDM7ICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIHJldHVybiBlcnJcbiYjNDM7XG4gY2xhc3MgRGFtb25DdHg6XG4gICAgIG9wcyA9IE5vbmVcbiAgICAgbW9uaXRvcmluZ19hdHRycyA9IE5vbmVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weVxuaW5kZXggMDk1NTJlOTFiYzc4Mi4uNDYyMjA0NmZkMDExOCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlcbkBAIC00OCw2ICYjNDM7NDgsMzcgQEAgZGVmIGF0dHJzX3RvX2RpY3QoYXR0cnMpOlxuICAgICAgICAgWyYjMzk7bWF4X25yX3JlZ2lvbnMmIzM5OywgaW50XSxcbiAgICAgICAgIF0pXG4gXG4mIzQzO2RlZiBmaWx0ZXJfdG9fZGljdChkYW1vbl9maWx0ZXIpOlxuJiM0MzsgICAgZmlsdGVyX3R5cGVfa2V5d29yZCA9IHtcbiYjNDM7ICAgICAgICAgICAgMDogJiMzOTthbm9uJiMzOTssXG4mIzQzOyAgICAgICAgICAgIDE6ICYjMzk7bWVtY2cmIzM5OyxcbiYjNDM7ICAgICAgICAgICAgfVxuJiM0MzsgICAgZGljdF8gPSB7XG4mIzQzOyAgICAgICAgICAgICYjMzk7dHlwZSYjMzk7OiBmaWx0ZXJfdHlwZV9rZXl3b3JkW2ludChkYW1vbl9maWx0ZXIudHlwZSldLFxuJiM0MzsgICAgICAgICAgICAmIzM5O21hdGNoaW5nJiMzOTs6IGJvb2woZGFtb25fZmlsdGVyLm1hdGNoaW5nKSxcbiYjNDM7ICAgICAgICAgICAgJiMzOTthbGxvdyYjMzk7OiBib29sKGRhbW9uX2ZpbHRlci5hbGxvdyksXG4mIzQzOyAgICAgICAgICAgIH1cbiYjNDM7ICAgIHR5cGVfID0gZGljdF9bJiMzOTt0eXBlJiMzOTtdXG4mIzQzOyAgICBpZiB0eXBlXyA9PSAmIzM5O21lbWNnJiMzOTs6XG4mIzQzOyAgICAgICAgZGljdF9bJiMzOTttZW1jZ19pZCYjMzk7XSA9IGludChkYW1vbl9maWx0ZXIubWVtY2dfaWQpXG4mIzQzOyAgICByZXR1cm4gZGljdF9cbiYjNDM7XG4mIzQzO2RlZiBmaWx0ZXJzX3RvX2xpc3QoZmlsdGVycyk6XG4mIzQzOyAgICByZXR1cm4gW2ZpbHRlcl90b19kaWN0KGYpXG4mIzQzOyAgICAgICAgICAgIGZvciBmIGluIGxpc3RfZm9yX2VhY2hfZW50cnkoXG4mIzQzOyAgICAgICAgICAgICAgICAmIzM5O3N0cnVjdCBkYW1vbl9maWx0ZXImIzM5OywgZmlsdGVycy5hZGRyZXNzX29mXygpLCAmIzM5O2xpc3QmIzM5OyldXG4mIzQzO1xuJiM0MztkZWYgcHJvYmVfdG9fZGljdChwcm9iZSk6XG4mIzQzOyAgICByZXR1cm4gdG9fZGljdChwcm9iZSwgW1xuJiM0MzsgICAgICAgIFsmIzM5O3dlaWdodCYjMzk7LCBpbnRdLFxuJiM0MzsgICAgICAgIFsmIzM5O2ZpbHRlcnMmIzM5OywgZmlsdGVyc190b19saXN0XSxcbiYjNDM7ICAgICAgICBdKVxuJiM0MztcbiYjNDM7ZGVmIHByb2Jlc190b19saXN0KHByb2Jlcyk6XG4mIzQzOyAgICByZXR1cm4gW3Byb2JlX3RvX2RpY3QocClcbiYjNDM7ICAgICAgICAgICAgZm9yIHAgaW4gbGlzdF9mb3JfZWFjaF9lbnRyeShcbiYjNDM7ICAgICAgICAgICAgICAgICYjMzk7c3RydWN0IGRhbW9uX3Byb2JlJiMzOTssIHByb2Jlcy5hZGRyZXNzX29mXygpLCAmIzM5O2xpc3QmIzM5OyldXG4mIzQzO1xuIGRlZiBhZGRyX3JhbmdlX3RvX2RpY3QoYWRkcl9yYW5nZSk6XG4gICAgIHJldHVybiB0b19kaWN0KGFkZHJfcmFuZ2UsIFtcbiAgICAgICAgIFsmIzM5O3N0YXJ0JiMzOTssIGludF0sXG5AQCAtMTk5LDYgJiM0MzsyMzAsNyBAQCBkZWYgZGFtb25fY3R4X3RvX2RpY3QoY3R4KTpcbiAgICAgcmV0dXJuIHRvX2RpY3QoY3R4LCBbXG4gICAgICAgICBbJiMzOTtvcHMmIzM5Oywgb3BzX3RvX2RpY3RdLFxuICAgICAgICAgWyYjMzk7YXR0cnMmIzM5OywgYXR0cnNfdG9fZGljdF0sXG4mIzQzOyAgICAgICAgWyYjMzk7cHJvYmVzJiMzOTssIHByb2Jlc190b19saXN0XSxcbiAgICAgICAgIFsmIzM5O2FkYXB0aXZlX3RhcmdldHMmIzM5OywgdGFyZ2V0c190b19saXN0XSxcbiAgICAgICAgIFsmIzM5O3NjaGVtZXMmIzM5Oywgc2NoZW1lc190b19saXN0XSxcbiAgICAgICAgIFsmIzM5O3BhdXNlJiMzOTssIGJvb2xdLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcbmluZGV4IDg4YTI2NDIyZmY0NGMuLjY2YzgyNjE4OTMyMGQgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcbkBAIC0xNzgsNiAmIzQzOzE3OCwyNCBAQCBkZWYgYXNzZXJ0X21vbml0b3JpbmdfYXR0cnNfY29tbWl0dGVkKGF0dHJzLCBkdW1wKTpcbiAgICAgYXNzZXJ0X3RydWUoZHVtcFsmIzM5O21heF9ucl9yZWdpb25zJiMzOTtdID09IGF0dHJzLm1heF9ucl9yZWdpb25zLFxuICAgICAgICAgICAgICAgICAmIzM5O21heF9ucl9yZWdpb25zJiMzOTssIGR1bXApXG4gXG4mIzQzO2RlZiBhc3NlcnRfZGFtb25fZmlsdGVyc19jb21taXR0ZWQoZmlsdGVycywgZHVtcCk6XG4mIzQzOyAgICBhc3NlcnRfdHJ1ZShsZW4oZHVtcCkgPT0gbGVuKGZpbHRlcnMuZmlsdGVycyksICYjMzk7cHJvYmUgZmlsdGVycyYjMzk7LCBkdW1wKVxuJiM0MzsgICAgZm9yIGlkeCwgZGFtb25fZmlsdGVyIGluIGVudW1lcmF0ZShmaWx0ZXJzLmZpbHRlcnMpOlxuJiM0MzsgICAgICAgIGZpbHRlcl9kdW1wID0gZHVtcFtpZHhdXG4mIzQzOyAgICAgICAgYXNzZXJ0X3RydWUoZmlsdGVyX2R1bXBbJiMzOTt0eXBlJiMzOTtdID09IGRhbW9uX2ZpbHRlci50eXBlXywgJiMzOTt0eXBlJiMzOTssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2R1bXApXG4mIzQzOyAgICAgICAgYXNzZXJ0X3RydWUoZmlsdGVyX2R1bXBbJiMzOTttYXRjaGluZyYjMzk7XSA9PSBkYW1vbl9maWx0ZXIubWF0Y2hpbmcsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgJiMzOTttYXRjaGluZyYjMzk7LCBmaWx0ZXJfZHVtcClcbiYjNDM7ICAgICAgICBhc3NlcnRfdHJ1ZShmaWx0ZXJfZHVtcFsmIzM5O2FsbG93JiMzOTtdID09IGRhbW9uX2ZpbHRlci5hbGxvdywgJiMzOTthbGxvdyYjMzk7LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9kdW1wKVxuJiM0MztcbiYjNDM7ZGVmIGFzc2VydF9wcm9iZXNfY29tbWl0dGVkKHByb2JlcywgZHVtcCk6XG4mIzQzOyAgICBhc3NlcnRfdHJ1ZShsZW4oZHVtcCkgPT0gbGVuKHByb2Jlcy5wcm9iZXMpLCAmIzM5O3Byb2JlcyBsZW5ndGgmIzM5OywgZHVtcClcbiYjNDM7ICAgIGZvciBpZHgsIHByb2JlIGluIGVudW1lcmF0ZShwcm9iZXMucHJvYmVzKTpcbiYjNDM7ICAgICAgICBwcm9iZV9kdW1wID0gZHVtcFtpZHhdXG4mIzQzOyAgICAgICAgYXNzZXJ0X3RydWUocHJvYmUud2VpZ2h0ID09IHByb2JlX2R1bXBbJiMzOTt3ZWlnaHQmIzM5O10sICYjMzk7d2VpZ2h0JiMzOTssIHByb2JlX2R1bXApXG4mIzQzOyAgICAgICAgYXNzZXJ0X2RhbW9uX2ZpbHRlcnNfY29tbWl0dGVkKHByb2JlLmZpbHRlcnMsIHByb2JlX2R1bXBbJiMzOTtmaWx0ZXJzJiMzOTtdKVxuJiM0MztcbiBkZWYgYXNzZXJ0X21vbml0b3JpbmdfdGFyZ2V0X2NvbW1pdHRlZCh0YXJnZXQsIGR1bXApOlxuICAgICAjIHRhcmdldC5waWQgaXMgdGhlIHBpZCBcJiMzNDtudW1iZXJcJiMzNDssIHdoaWxlIGR1bXBbJiMzOTtwaWQmIzM5O10gaXMgJiMzOTtzdHJ1Y3QgcGlkJiMzOTtcbiAgICAgIyBwb2ludGVyLCBhbmQgaGVuY2UgY2Fubm90IGJlIGNvbXBhcmVkLlxuQEAgLTE5Niw2ICYjNDM7MjE0LDcgQEAgZGVmIGFzc2VydF9jdHhfY29tbWl0dGVkKGN0eCwgZHVtcCk6XG4gICAgICAgICAgICAgfVxuICAgICBhc3NlcnRfdHJ1ZShkdW1wWyYjMzk7b3BzJiMzOTtdWyYjMzk7aWQmIzM5O10gPT0gb3BzX3ZhbFtjdHgub3BzXSwgJiMzOTtvcHNfaWQmIzM5OywgZHVtcClcbiAgICAgYXNzZXJ0X21vbml0b3JpbmdfYXR0cnNfY29tbWl0dGVkKGN0eC5tb25pdG9yaW5nX2F0dHJzLCBkdW1wWyYjMzk7YXR0cnMmIzM5O10pXG4mIzQzOyAgICBhc3NlcnRfcHJvYmVzX2NvbW1pdHRlZChjdHgubW9uaXRvcmluZ19hdHRycy5wcm9iZXMsIGR1bXBbJiMzOTtwcm9iZXMmIzM5O10pXG4gICAgIGFzc2VydF9tb25pdG9yaW5nX3RhcmdldHNfY29tbWl0dGVkKGN0eC50YXJnZXRzLCBkdW1wWyYjMzk7YWRhcHRpdmVfdGFyZ2V0cyYjMzk7XSlcbiAgICAgYXNzZXJ0X3NjaGVtZXNfY29tbWl0dGVkKGN0eC5zY2hlbWVzLCBkdW1wWyYjMzk7c2NoZW1lcyYjMzk7XSlcbiAgICAgYXNzZXJ0X3RydWUoZHVtcFsmIzM5O3BhdXNlJiMzOTtdID09IGN0eC5wYXVzZSwgJiMzOTtwYXVzZSYjMzk7LCBkdW1wKVxuQEAgLTMwMCw3ICYjNDM7MzE5LDIxIEBAIGRlZiBtYWluKCk6XG4gICAgICAgICAgICAgICAgIGludGVydmFsc19nb2FsPV9kYW1vbl9zeXNmcy5JbnRlcnZhbHNHb2FsKFxuICAgICAgICAgICAgICAgICAgICAgYWNjZXNzX2JwPTQwMCwgYWdncnM9MywgbWluX3NhbXBsZV91cz01MDAwLFxuICAgICAgICAgICAgICAgICAgICAgbWF4X3NhbXBsZV91cz0xMDAwMDAwMCksXG4tICAgICAgICAgICAgICAgIHVwZGF0ZV91cz0yMDAwMDAwKSxcbiYjNDM7ICAgICAgICAgICAgICAgIHVwZGF0ZV91cz0yMDAwMDAwLFxuJiM0MzsgICAgICAgICAgICAgICAgcHJvYmVzPV9kYW1vbl9zeXNmcy5EYW1vblByb2JlcyhcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBwcm9iZXM9W19kYW1vbl9zeXNmcy5EYW1vblByb2JlKFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ9NDIsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnM9X2RhbW9uX3N5c2ZzLkRhbW9uRmlsdGVycyhcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnM9W1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYW1vbl9zeXNmcy5EYW1vbkZpbHRlcihcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV89JiMzOTthbm9uJiMzOTssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nPVRydWUsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93PVRydWUsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICBzY2hlbWVzPVtfZGFtb25fc3lzZnMuRGFtb3MoXG4gICAgICAgICAgICAgICAgIGFjdGlvbj0mIzM5O3BhZ2VvdXQmIzM5OyxcbiAgICAgICAgICAgICAgICAgYWNjZXNzX3BhdHRlcm49X2RhbW9uX3N5c2ZzLkRhbW9zQWNjZXNzUGF0dGVybihcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgS1VuaXQgdGVzdCBjYXNlcyBpbiBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYW5kIHVwZGF0ZXMgc2VsZnRlc3Qgc2NyaXB0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi8uIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgZnVuY3Rpb25hbCBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjg4NWRhMGQ2YzExMTc5ZDllNzA2ZjdjN2QyZmQ4MWMzMjBlYWFmNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDk6NDU6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKaW5kZXggYWYyNmIzZDYwOTU3Yi4uZjI1NjhmYmE1NTJlYyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaApAQCAtMTMxNiw2ICYjNDM7MTMxNiwxMjggQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KQogCQkJKHVuc2lnbmVkIGxvbmdbXVsyXSkge3szLCA4fSwgezgsIDEwfX0sIDIpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsCiYjNDM7CQlzdHJ1Y3QgZGFtb25fZmlsdGVyICpkc3QsIHN0cnVjdCBkYW1vbl9maWx0ZXIgKnNyYykKJiM0Mzt7CiYjNDM7CWRhbW9uX2NvbW1pdF9maWx0ZXIoZHN0LCBzcmMpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LSZndDt0eXBlLCBzcmMtJmd0O3R5cGUpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LSZndDttYXRjaGluZywgc3JjLSZndDttYXRjaGluZyk7CiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtJmd0O2FsbG93LCBzcmMtJmd0O2FsbG93KTsKJiM0MzsJc3dpdGNoIChzcmMtJmd0O3R5cGUpIHsKJiM0MzsJY2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzoKJiM0MzsJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtJmd0O21lbWNnX2lkLCBzcmMtJmd0O21lbWNnX2lkKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9maWx0ZXIgZHN0ID0gewomIzQzOwkJLnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OLAomIzQzOwkJLm1hdGNoaW5nID0gZmFsc2UsCiYjNDM7CQkuYWxsb3cgPSBmYWxzZSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJZGFtb25fdGVzdF9jb21taXRfZmlsdGVyX2Zvcih0ZXN0LCAmYW1wO2RzdCwKJiM0MzsJCQkmYW1wOyhzdHJ1Y3QgZGFtb25fZmlsdGVyKXsKJiM0MzsJCQkudHlwZSA9IERBTU9OX0ZJTFRFUl9UWVBFX0FOT04sCiYjNDM7CQkJLm1hdGNoaW5nID0gdHJ1ZSwKJiM0MzsJCQkuYWxsb3cgPSB0cnVlLAomIzQzOwkJCX0pOwomIzQzOwlkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHRlc3QsICZhbXA7ZHN0LAomIzQzOwkJCSZhbXA7KHN0cnVjdCBkYW1vbl9maWx0ZXIpewomIzQzOwkJCS50eXBlID0gREFNT05fRklMVEVSX1RZUEVfTUVNQ0csCiYjNDM7CQkJLm1hdGNoaW5nID0gZmFsc2UsCiYjNDM7CQkJLmFsbG93ID0gZmFsc2UsCiYjNDM7CQkJLm1lbWNnX2lkID0gMTIzLAomIzQzOwkJCX0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fdGVzdF9oZWxwX3NldHVwX3Byb2Jlcyh1bnNpZ25lZCBpbnQgd2VpZ2h0c1tdLAomIzQzOwkJaW50IG5yX3dlaWdodHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwljdHggPSBkYW1vbl9uZXdfY3R4KCk7CiYjNDM7CWlmICghY3R4KQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl93ZWlnaHRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcHJvYmUgPSBkYW1vbl9uZXdfcHJvYmUoKTsKJiM0MzsJCWlmICghcHJvYmUpIHsKJiM0MzsJCQlkYW1vbl9kZXN0cm95X2N0eChjdHgpOwomIzQzOwkJCXJldHVybiBOVUxMOwomIzQzOwkJfQomIzQzOwkJcHJvYmUtJmd0O3dlaWdodCA9IHdlaWdodHNbaV07CiYjNDM7CQlkYW1vbl9hZGRfcHJvYmUoY3R4LCBwcm9iZSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGN0eDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsCiYjNDM7CQl1bnNpZ25lZCBpbnQgZHN0X3dlaWdodHNbXSwgaW50IG5yX2RzdF9wcm9iZXMsCiYjNDM7CQl1bnNpZ25lZCBpbnQgc3JjX3dlaWdodHNbXSwgaW50IG5yX3NyY19wcm9iZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsICpzcmM7CiYjNDM7CWludCBlcnI7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0X3Byb2JlLCAqc3JjX3Byb2JlOwomIzQzOwomIzQzOwlkc3QgPSBkYW1vbl90ZXN0X2hlbHBfc2V0dXBfcHJvYmVzKGRzdF93ZWlnaHRzLCBucl9kc3RfcHJvYmVzKTsKJiM0MzsJaWYgKCFkc3QpCiYjNDM7CQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7ZHN0IGFsbG9jIGZhaWwmIzM0Oyk7CiYjNDM7CXNyYyA9IGRhbW9uX3Rlc3RfaGVscF9zZXR1cF9wcm9iZXMoc3JjX3dlaWdodHMsIG5yX3NyY19wcm9iZXMpOwomIzQzOwlpZiAoIXNyYykgewomIzQzOwkJZGFtb25fZGVzdHJveV9jdHgoZHN0KTsKJiM0MzsJCWt1bml0X3NraXAodGVzdCwgJiMzNDtzcmMgYWxsb2MgZmFpbCYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBkYW1vbl9jb21taXRfcHJvYmVzKGRzdCwgc3JjKTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGVyciwgMCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJbnJfZHN0X3Byb2JlcyA9IDA7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3Byb2JlKGRzdF9wcm9iZSwgZHN0KQomIzQzOwkJbnJfZHN0X3Byb2JlcyYjNDM7JiM0Mzs7CiYjNDM7CW5yX3NyY19wcm9iZXMgPSAwOwomIzQzOwlkYW1vbl9mb3JfZWFjaF9wcm9iZShzcmNfcHJvYmUsIHNyYykKJiM0MzsJCW5yX3NyY19wcm9iZXMmIzQzOyYjNDM7OwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbnJfZHN0X3Byb2JlcywgbnJfc3JjX3Byb2Jlcyk7CiYjNDM7CWlmIChucl9kc3RfcHJvYmVzICE9IG5yX3NyY19wcm9iZXMpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJbnJfZHN0X3Byb2JlcyA9IDA7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3Byb2JlKGRzdF9wcm9iZSwgZHN0KSB7CiYjNDM7CQlzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUobnJfZHN0X3Byb2Jlcywgc3JjKTsKJiM0MzsJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzcmNfcHJvYmUtJmd0O3dlaWdodCwgZHN0X3Byb2JlLSZndDt3ZWlnaHQpOwomIzQzOwkJbnJfZHN0X3Byb2JlcyYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MztvdXQ6CiYjNDM7CWRhbW9uX2Rlc3Ryb3lfY3R4KGRzdCk7CiYjNDM7CWRhbW9uX2Rlc3Ryb3lfY3R4KHNyYyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3Byb2JlcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwlkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsCiYjNDM7CQkJKHVuc2lnbmVkIGludFtdKXt9LCAwLCAodW5zaWduZWQgaW50W10pe30sIDApOwomIzQzOwlkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsCiYjNDM7CQkJKHVuc2lnbmVkIGludFtdKXt9LCAwLCAodW5zaWduZWQgaW50W10pezF9LCAxKTsKJiM0MzsJZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LAomIzQzOwkJCSh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXsxLCAyfSwgMik7CiYjNDM7CWRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCwKJiM0MzsJCQkodW5zaWduZWQgaW50W10pezF9LCAxLCAodW5zaWduZWQgaW50W10pezJ9LCAxKTsKJiM0MzsJZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LAomIzQzOwkJCSh1bnNpZ25lZCBpbnRbXSl7MX0sIDEsICh1bnNpZ25lZCBpbnRbXSl7MiwgM30sIDIpOwomIzQzOwlkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsCiYjNDM7CQkJKHVuc2lnbmVkIGludFtdKXsyLCAzfSwgMiwgKHVuc2lnbmVkIGludFtdKXsxfSwgMSk7CiYjNDM7CWRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCwKJiM0MzsJCQkodW5zaWduZWQgaW50W10pezIsIDN9LCAyLCAodW5zaWduZWQgaW50W10pe30sIDApOwomIzQzOwlkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsCiYjNDM7CQkJKHVuc2lnbmVkIGludFtdKXsyfSwgMSwgKHVuc2lnbmVkIGludFtdKXt9LCAwKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9jdHgoc3RydWN0IGt1bml0ICp0ZXN0KQogewogCXN0cnVjdCBkYW1vbl9jdHggKnNyYywgKmRzdDsKQEAgLTE3MjIsNiAmIzQzOzE4NDQsOCBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0gewogCUtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfcGFnZW91dCksCiAJS1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9taWdyYXRlX2hvdCksCiAJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9ucyksCiYjNDM7CUtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfZmlsdGVyKSwKJiM0MzsJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXMpLAogCUtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfY3R4KSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdmFsaWRfcHJvYmVfcGFyYW1zKSwKIAlLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfZmlsdGVyX291dCksCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHkKaW5kZXggZjYwNGI3ZDY1MzBiMy4uZTcwOTVjMzM2NTI0NSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weQpAQCAtNTcwLDYgJiM0Mzs1NzAsMTE3IEBAIGNsYXNzIEludGVydmFsc0dvYWw6CiAgICAgICAgICAgICByZXR1cm4gZXJyCiAgICAgICAgIHJldHVybiBOb25lCiAKJiM0MztjbGFzcyBEYW1vbkZpbHRlcjoKJiM0MzsgICAgdHlwZV8gPSBOb25lCiYjNDM7ICAgIG1hdGNoaW5nID0gTm9uZQomIzQzOyAgICBhbGxvdyA9IE5vbmUKJiM0MzsgICAgZmlsdGVycyA9IE5vbmUKJiM0MzsgICAgcGF0aCA9IE5vbmUKJiM0MzsgICAgaWR4ID0gTm9uZQomIzQzOwomIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV89JiMzOTthbm9uJiMzOTssIG1hdGNoaW5nPUZhbHNlLCBhbGxvdz1GYWxzZSwgcGF0aD1Ob25lKToKJiM0MzsgICAgICAgIHNlbGYudHlwZV8gPSB0eXBlXwomIzQzOyAgICAgICAgc2VsZi5tYXRjaGluZyA9IG1hdGNoaW5nCiYjNDM7ICAgICAgICBzZWxmLmFsbG93ID0gYWxsb3cKJiM0MzsgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKJiM0MzsKJiM0MzsgICAgZGVmIHN5c2ZzX2RpcihzZWxmKToKJiM0MzsgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5maWx0ZXJzLnN5c2ZzX2RpcigpLCAmIzM5OyVkJiMzOTsgJSBzZWxmLmlkeCkKJiM0MzsKJiM0MzsgICAgZGVmIHN0YWdlKHNlbGYpOgomIzQzOyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTt0eXBlJiMzOTspLCBzZWxmLnR5cGVfKQomIzQzOyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIHJldHVybiBlcnIKJiM0MzsgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUob3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICYjMzk7bWF0Y2hpbmcmIzM5OyksCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICYjMzk7WSYjMzk7IGlmIHNlbGYubWF0Y2hpbmcgZWxzZSAmIzM5O04mIzM5OykKJiM0MzsgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgICAgICByZXR1cm4gZXJyCiYjNDM7ICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAmIzM5O2FsbG93JiMzOTspLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAmIzM5O1kmIzM5OyBpZiBzZWxmLmFsbG93IGVsc2UgJiMzOTtOJiMzOTspCiYjNDM7ICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAgcmV0dXJuIGVycgomIzQzOyAgICAgICAgaWYgc2VsZi50eXBlXyA9PSAmIzM5O21lbWNnJiMzOTs6CiYjNDM7ICAgICAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTtwYXRoJiMzOTspLCBzZWxmLnBhdGgpCiYjNDM7ICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gZXJyCiYjNDM7ICAgICAgICByZXR1cm4gTm9uZQomIzQzOwomIzQzO2NsYXNzIERhbW9uRmlsdGVyczoKJiM0MzsgICAgZmlsdGVycyA9IE5vbmUKJiM0MzsgICAgcHJvYmUgPSBOb25lCiYjNDM7CiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWx0ZXJzPU5vbmUpOgomIzQzOyAgICAgICAgaWYgZmlsdGVycyBpcyBOb25lOgomIzQzOyAgICAgICAgICAgIGZpbHRlcnMgPSBbXQomIzQzOyAgICAgICAgc2VsZi5maWx0ZXJzID0gZmlsdGVycwomIzQzOyAgICAgICAgZm9yIGlkeCwgZmlsdGVyIGluIGVudW1lcmF0ZShzZWxmLmZpbHRlcnMpOgomIzQzOyAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzID0gc2VsZgomIzQzOyAgICAgICAgICAgIGZpbHRlci5pZHggPSBpZHgKJiM0MzsKJiM0MzsgICAgZGVmIHN5c2ZzX2RpcihzZWxmKToKJiM0MzsgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5wcm9iZS5zeXNmc19kaXIoKSwgJiMzOTtmaWx0ZXJzJiMzOTspCiYjNDM7CiYjNDM7ICAgIGRlZiBzdGFnZShzZWxmKToKJiM0MzsgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUoCiYjNDM7ICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAmIzM5O25yX2ZpbHRlcnMmIzM5OyksCiYjNDM7ICAgICAgICAgICAgICAgIGxlbihzZWxmLmZpbHRlcnMpKQomIzQzOyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIHJldHVybiBlcnIKJiM0MzsgICAgICAgIGZvciBmaWx0ZXIgaW4gc2VsZi5maWx0ZXJzOgomIzQzOyAgICAgICAgICAgIGVyciA9IGZpbHRlci5zdGFnZSgpCiYjNDM7ICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gZXJyCiYjNDM7ICAgICAgICByZXR1cm4gTm9uZQomIzQzOwomIzQzO2NsYXNzIERhbW9uUHJvYmU6CiYjNDM7ICAgIHdlaWdodCA9IE5vbmUKJiM0MzsgICAgZmlsdGVycyA9IE5vbmUKJiM0MzsgICAgcHJvYmVzID0gTm9uZQomIzQzOyAgICBpZHggPSBOb25lCiYjNDM7CiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3ZWlnaHQ9MCwgZmlsdGVycz1Ob25lKToKJiM0MzsgICAgICAgIHNlbGYud2VpZ2h0ID0gd2VpZ2h0CiYjNDM7ICAgICAgICBpZiBmaWx0ZXJzIGlzIE5vbmU6CiYjNDM7ICAgICAgICAgICAgZmlsdGVycyA9IERhbW9uRmlsdGVycygpCiYjNDM7ICAgICAgICBzZWxmLmZpbHRlcnMgPSBmaWx0ZXJzCiYjNDM7ICAgICAgICBzZWxmLmZpbHRlcnMucHJvYmUgPSBzZWxmCiYjNDM7CiYjNDM7ICAgIGRlZiBzeXNmc19kaXIoc2VsZik6CiYjNDM7ICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYucHJvYmVzLnN5c2ZzX2RpcigpLCAmIzM5OyVkJiMzOTsgJSBzZWxmLmlkeCkKJiM0MzsKJiM0MzsgICAgZGVmIHN0YWdlKHNlbGYpOgomIzQzOyAgICAgICAgZXJyID0gd3JpdGVfZmlsZSgKJiM0MzsgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICYjMzk7d2VpZ2h0JiMzOTspLCAmIzM5OyVkJiMzOTsgJSBzZWxmLndlaWdodCkKJiM0MzsgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgICAgICByZXR1cm4gZXJyCiYjNDM7ICAgICAgICByZXR1cm4gc2VsZi5maWx0ZXJzLnN0YWdlKCkKJiM0MzsKJiM0MztjbGFzcyBEYW1vblByb2JlczoKJiM0MzsgICAgcHJvYmVzID0gTm9uZQomIzQzOyAgICBhdHRycyA9IE5vbmUKJiM0MzsKJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Jlcz1Ob25lKToKJiM0MzsgICAgICAgIGlmIHByb2JlcyBpcyBOb25lOgomIzQzOyAgICAgICAgICAgIHByb2JlcyA9IFtdCiYjNDM7ICAgICAgICBzZWxmLnByb2JlcyA9IHByb2JlcwomIzQzOyAgICAgICAgZm9yIGlkeCwgcHJvYmUgaW4gZW51bWVyYXRlKHNlbGYucHJvYmVzKToKJiM0MzsgICAgICAgICAgICBwcm9iZS5wcm9iZXMgPSBzZWxmCiYjNDM7ICAgICAgICAgICAgcHJvYmUuaWR4ID0gaWR4CiYjNDM7CiYjNDM7ICAgIGRlZiBzeXNmc19kaXIoc2VsZik6CiYjNDM7ICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuYXR0cnMuc3lzZnNfZGlyKCksICYjMzk7cHJvYmVzJiMzOTspCiYjNDM7CiYjNDM7ICAgIGRlZiBzdGFnZShzZWxmKToKJiM0MzsgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUob3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICYjMzk7bnJfcHJvYmVzJiMzOTspLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oc2VsZi5wcm9iZXMpKQomIzQzOyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIHJldHVybiBlcnIKJiM0MzsgICAgICAgIGZvciBwcm9iZSBpbiBzZWxmLnByb2JlczoKJiM0MzsgICAgICAgICAgICBlcnIgPSBwcm9iZS5zdGFnZSgpCiYjNDM7ICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gZXJyCiYjNDM7ICAgICAgICByZXR1cm4gTm9uZQomIzQzOwogY2xhc3MgRGFtb25BdHRyczoKICAgICBzYW1wbGVfdXMgPSBOb25lCiAgICAgYWdncl91cyA9IE5vbmUKQEAgLTU3NywxMSAmIzQzOzY4OCwxMiBAQCBjbGFzcyBEYW1vbkF0dHJzOgogICAgIHVwZGF0ZV91cyA9IE5vbmUKICAgICBtaW5fbnJfcmVnaW9ucyA9IE5vbmUKICAgICBtYXhfbnJfcmVnaW9ucyA9IE5vbmUKJiM0MzsgICAgcHJvYmVzID0gTm9uZQogICAgIGNvbnRleHQgPSBOb25lCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgc2FtcGxlX3VzPTUwMDAsIGFnZ3JfdXM9MTAwMDAwLAogICAgICAgICAgICAgICAgICBpbnRlcnZhbHNfZ29hbD1Ob25lLCB1cGRhdGVfdXM9MTAwMDAwMCwgbWluX25yX3JlZ2lvbnM9MTAsCi0gICAgICAgICAgICAgICAgIG1heF9ucl9yZWdpb25zPTEwMDApOgomIzQzOyAgICAgICAgICAgICAgICAgbWF4X25yX3JlZ2lvbnM9MTAwMCwgcHJvYmVzPU5vbmUpOgogICAgICAgICBzZWxmLnNhbXBsZV91cyA9IHNhbXBsZV91cwogICAgICAgICBzZWxmLmFnZ3JfdXMgPSBhZ2dyX3VzCiAgICAgICAgIGlmIGludGVydmFsc19nb2FsIGlzIE5vbmU6CkBAIC01OTEsNiAmIzQzOzcwMywxMCBAQCBjbGFzcyBEYW1vbkF0dHJzOgogICAgICAgICBzZWxmLnVwZGF0ZV91cyA9IHVwZGF0ZV91cwogICAgICAgICBzZWxmLm1pbl9ucl9yZWdpb25zID0gbWluX25yX3JlZ2lvbnMKICAgICAgICAgc2VsZi5tYXhfbnJfcmVnaW9ucyA9IG1heF9ucl9yZWdpb25zCiYjNDM7ICAgICAgICBpZiBwcm9iZXMgaXMgTm9uZToKJiM0MzsgICAgICAgICAgICBwcm9iZXMgPSBEYW1vblByb2JlcygpCiYjNDM7ICAgICAgICBzZWxmLnByb2JlcyA9IHByb2JlcwomIzQzOyAgICAgICAgc2VsZi5wcm9iZXMuYXR0cnMgPSBzZWxmCiAKICAgICBkZWYgaW50ZXJ2YWxfc3lzZnNfZGlyKHNlbGYpOgogICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJiMzOTttb25pdG9yaW5nX2F0dHJzJiMzOTssCkBAIC02MDAsNiAmIzQzOzcxNiw5IEBAIGNsYXNzIERhbW9uQXR0cnM6CiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5jb250ZXh0LnN5c2ZzX2RpcigpLCAmIzM5O21vbml0b3JpbmdfYXR0cnMmIzM5OywKICAgICAgICAgICAgICAgICAmIzM5O25yX3JlZ2lvbnMmIzM5OykKIAomIzQzOyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOgomIzQzOyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmNvbnRleHQuc3lzZnNfZGlyKCksICYjMzk7bW9uaXRvcmluZ19hdHRycyYjMzk7KQomIzQzOwogICAgIGRlZiBzdGFnZShzZWxmKToKICAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5pbnRlcnZhbF9zeXNmc19kaXIoKSwgJiMzOTtzYW1wbGVfdXMmIzM5OyksCiAgICAgICAgICAgICAgICAgc2VsZi5zYW1wbGVfdXMpCkBAIC02MjksNiAmIzQzOzc0OCwxMCBAQCBjbGFzcyBEYW1vbkF0dHJzOgogICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gZXJyCiAKJiM0MzsgICAgICAgIGVyciA9IHNlbGYucHJvYmVzLnN0YWdlKCkKJiM0MzsgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgICAgICByZXR1cm4gZXJyCiYjNDM7CiBjbGFzcyBEYW1vbkN0eDoKICAgICBvcHMgPSBOb25lCiAgICAgbW9uaXRvcmluZ19hdHRycyA9IE5vbmUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5CmluZGV4IDA5NTUyZTkxYmM3ODIuLjQ2MjIwNDZmZDAxMTggMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weQpAQCAtNDgsNiAmIzQzOzQ4LDM3IEBAIGRlZiBhdHRyc190b19kaWN0KGF0dHJzKToKICAgICAgICAgWyYjMzk7bWF4X25yX3JlZ2lvbnMmIzM5OywgaW50XSwKICAgICAgICAgXSkKIAomIzQzO2RlZiBmaWx0ZXJfdG9fZGljdChkYW1vbl9maWx0ZXIpOgomIzQzOyAgICBmaWx0ZXJfdHlwZV9rZXl3b3JkID0gewomIzQzOyAgICAgICAgICAgIDA6ICYjMzk7YW5vbiYjMzk7LAomIzQzOyAgICAgICAgICAgIDE6ICYjMzk7bWVtY2cmIzM5OywKJiM0MzsgICAgICAgICAgICB9CiYjNDM7ICAgIGRpY3RfID0gewomIzQzOyAgICAgICAgICAgICYjMzk7dHlwZSYjMzk7OiBmaWx0ZXJfdHlwZV9rZXl3b3JkW2ludChkYW1vbl9maWx0ZXIudHlwZSldLAomIzQzOyAgICAgICAgICAgICYjMzk7bWF0Y2hpbmcmIzM5OzogYm9vbChkYW1vbl9maWx0ZXIubWF0Y2hpbmcpLAomIzQzOyAgICAgICAgICAgICYjMzk7YWxsb3cmIzM5OzogYm9vbChkYW1vbl9maWx0ZXIuYWxsb3cpLAomIzQzOyAgICAgICAgICAgIH0KJiM0MzsgICAgdHlwZV8gPSBkaWN0X1smIzM5O3R5cGUmIzM5O10KJiM0MzsgICAgaWYgdHlwZV8gPT0gJiMzOTttZW1jZyYjMzk7OgomIzQzOyAgICAgICAgZGljdF9bJiMzOTttZW1jZ19pZCYjMzk7XSA9IGludChkYW1vbl9maWx0ZXIubWVtY2dfaWQpCiYjNDM7ICAgIHJldHVybiBkaWN0XwomIzQzOwomIzQzO2RlZiBmaWx0ZXJzX3RvX2xpc3QoZmlsdGVycyk6CiYjNDM7ICAgIHJldHVybiBbZmlsdGVyX3RvX2RpY3QoZikKJiM0MzsgICAgICAgICAgICBmb3IgZiBpbiBsaXN0X2Zvcl9lYWNoX2VudHJ5KAomIzQzOyAgICAgICAgICAgICAgICAmIzM5O3N0cnVjdCBkYW1vbl9maWx0ZXImIzM5OywgZmlsdGVycy5hZGRyZXNzX29mXygpLCAmIzM5O2xpc3QmIzM5OyldCiYjNDM7CiYjNDM7ZGVmIHByb2JlX3RvX2RpY3QocHJvYmUpOgomIzQzOyAgICByZXR1cm4gdG9fZGljdChwcm9iZSwgWwomIzQzOyAgICAgICAgWyYjMzk7d2VpZ2h0JiMzOTssIGludF0sCiYjNDM7ICAgICAgICBbJiMzOTtmaWx0ZXJzJiMzOTssIGZpbHRlcnNfdG9fbGlzdF0sCiYjNDM7ICAgICAgICBdKQomIzQzOwomIzQzO2RlZiBwcm9iZXNfdG9fbGlzdChwcm9iZXMpOgomIzQzOyAgICByZXR1cm4gW3Byb2JlX3RvX2RpY3QocCkKJiM0MzsgICAgICAgICAgICBmb3IgcCBpbiBsaXN0X2Zvcl9lYWNoX2VudHJ5KAomIzQzOyAgICAgICAgICAgICAgICAmIzM5O3N0cnVjdCBkYW1vbl9wcm9iZSYjMzk7LCBwcm9iZXMuYWRkcmVzc19vZl8oKSwgJiMzOTtsaXN0JiMzOTspXQomIzQzOwogZGVmIGFkZHJfcmFuZ2VfdG9fZGljdChhZGRyX3JhbmdlKToKICAgICByZXR1cm4gdG9fZGljdChhZGRyX3JhbmdlLCBbCiAgICAgICAgIFsmIzM5O3N0YXJ0JiMzOTssIGludF0sCkBAIC0xOTksNiAmIzQzOzIzMCw3IEBAIGRlZiBkYW1vbl9jdHhfdG9fZGljdChjdHgpOgogICAgIHJldHVybiB0b19kaWN0KGN0eCwgWwogICAgICAgICBbJiMzOTtvcHMmIzM5Oywgb3BzX3RvX2RpY3RdLAogICAgICAgICBbJiMzOTthdHRycyYjMzk7LCBhdHRyc190b19kaWN0XSwKJiM0MzsgICAgICAgIFsmIzM5O3Byb2JlcyYjMzk7LCBwcm9iZXNfdG9fbGlzdF0sCiAgICAgICAgIFsmIzM5O2FkYXB0aXZlX3RhcmdldHMmIzM5OywgdGFyZ2V0c190b19saXN0XSwKICAgICAgICAgWyYjMzk7c2NoZW1lcyYjMzk7LCBzY2hlbWVzX3RvX2xpc3RdLAogICAgICAgICBbJiMzOTtwYXVzZSYjMzk7LCBib29sXSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHkKaW5kZXggODhhMjY0MjJmZjQ0Yy4uNjZjODI2MTg5MzIwZCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHkKQEAgLTE3OCw2ICYjNDM7MTc4LDI0IEBAIGRlZiBhc3NlcnRfbW9uaXRvcmluZ19hdHRyc19jb21taXR0ZWQoYXR0cnMsIGR1bXApOgogICAgIGFzc2VydF90cnVlKGR1bXBbJiMzOTttYXhfbnJfcmVnaW9ucyYjMzk7XSA9PSBhdHRycy5tYXhfbnJfcmVnaW9ucywKICAgICAgICAgICAgICAgICAmIzM5O21heF9ucl9yZWdpb25zJiMzOTssIGR1bXApCiAKJiM0MztkZWYgYXNzZXJ0X2RhbW9uX2ZpbHRlcnNfY29tbWl0dGVkKGZpbHRlcnMsIGR1bXApOgomIzQzOyAgICBhc3NlcnRfdHJ1ZShsZW4oZHVtcCkgPT0gbGVuKGZpbHRlcnMuZmlsdGVycyksICYjMzk7cHJvYmUgZmlsdGVycyYjMzk7LCBkdW1wKQomIzQzOyAgICBmb3IgaWR4LCBkYW1vbl9maWx0ZXIgaW4gZW51bWVyYXRlKGZpbHRlcnMuZmlsdGVycyk6CiYjNDM7ICAgICAgICBmaWx0ZXJfZHVtcCA9IGR1bXBbaWR4XQomIzQzOyAgICAgICAgYXNzZXJ0X3RydWUoZmlsdGVyX2R1bXBbJiMzOTt0eXBlJiMzOTtdID09IGRhbW9uX2ZpbHRlci50eXBlXywgJiMzOTt0eXBlJiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfZHVtcCkKJiM0MzsgICAgICAgIGFzc2VydF90cnVlKGZpbHRlcl9kdW1wWyYjMzk7bWF0Y2hpbmcmIzM5O10gPT0gZGFtb25fZmlsdGVyLm1hdGNoaW5nLAomIzQzOyAgICAgICAgICAgICAgICAgICAgJiMzOTttYXRjaGluZyYjMzk7LCBmaWx0ZXJfZHVtcCkKJiM0MzsgICAgICAgIGFzc2VydF90cnVlKGZpbHRlcl9kdW1wWyYjMzk7YWxsb3cmIzM5O10gPT0gZGFtb25fZmlsdGVyLmFsbG93LCAmIzM5O2FsbG93JiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfZHVtcCkKJiM0MzsKJiM0MztkZWYgYXNzZXJ0X3Byb2Jlc19jb21taXR0ZWQocHJvYmVzLCBkdW1wKToKJiM0MzsgICAgYXNzZXJ0X3RydWUobGVuKGR1bXApID09IGxlbihwcm9iZXMucHJvYmVzKSwgJiMzOTtwcm9iZXMgbGVuZ3RoJiMzOTssIGR1bXApCiYjNDM7ICAgIGZvciBpZHgsIHByb2JlIGluIGVudW1lcmF0ZShwcm9iZXMucHJvYmVzKToKJiM0MzsgICAgICAgIHByb2JlX2R1bXAgPSBkdW1wW2lkeF0KJiM0MzsgICAgICAgIGFzc2VydF90cnVlKHByb2JlLndlaWdodCA9PSBwcm9iZV9kdW1wWyYjMzk7d2VpZ2h0JiMzOTtdLCAmIzM5O3dlaWdodCYjMzk7LCBwcm9iZV9kdW1wKQomIzQzOyAgICAgICAgYXNzZXJ0X2RhbW9uX2ZpbHRlcnNfY29tbWl0dGVkKHByb2JlLmZpbHRlcnMsIHByb2JlX2R1bXBbJiMzOTtmaWx0ZXJzJiMzOTtdKQomIzQzOwogZGVmIGFzc2VydF9tb25pdG9yaW5nX3RhcmdldF9jb21taXR0ZWQodGFyZ2V0LCBkdW1wKToKICAgICAjIHRhcmdldC5waWQgaXMgdGhlIHBpZCAmIzM0O251bWJlciYjMzQ7LCB3aGlsZSBkdW1wWyYjMzk7cGlkJiMzOTtdIGlzICYjMzk7c3RydWN0IHBpZCYjMzk7CiAgICAgIyBwb2ludGVyLCBhbmQgaGVuY2UgY2Fubm90IGJlIGNvbXBhcmVkLgpAQCAtMTk2LDYgJiM0MzsyMTQsNyBAQCBkZWYgYXNzZXJ0X2N0eF9jb21taXR0ZWQoY3R4LCBkdW1wKToKICAgICAgICAgICAgIH0KICAgICBhc3NlcnRfdHJ1ZShkdW1wWyYjMzk7b3BzJiMzOTtdWyYjMzk7aWQmIzM5O10gPT0gb3BzX3ZhbFtjdHgub3BzXSwgJiMzOTtvcHNfaWQmIzM5OywgZHVtcCkKICAgICBhc3NlcnRfbW9uaXRvcmluZ19hdHRyc19jb21taXR0ZWQoY3R4Lm1vbml0b3JpbmdfYXR0cnMsIGR1bXBbJiMzOTthdHRycyYjMzk7XSkKJiM0MzsgICAgYXNzZXJ0X3Byb2Jlc19jb21taXR0ZWQoY3R4Lm1vbml0b3JpbmdfYXR0cnMucHJvYmVzLCBkdW1wWyYjMzk7cHJvYmVzJiMzOTtdKQogICAgIGFzc2VydF9tb25pdG9yaW5nX3RhcmdldHNfY29tbWl0dGVkKGN0eC50YXJnZXRzLCBkdW1wWyYjMzk7YWRhcHRpdmVfdGFyZ2V0cyYjMzk7XSkKICAgICBhc3NlcnRfc2NoZW1lc19jb21taXR0ZWQoY3R4LnNjaGVtZXMsIGR1bXBbJiMzOTtzY2hlbWVzJiMzOTtdKQogICAgIGFzc2VydF90cnVlKGR1bXBbJiMzOTtwYXVzZSYjMzk7XSA9PSBjdHgucGF1c2UsICYjMzk7cGF1c2UmIzM5OywgZHVtcCkKQEAgLTMwMCw3ICYjNDM7MzE5LDIxIEBAIGRlZiBtYWluKCk6CiAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWw9X2RhbW9uX3N5c2ZzLkludGVydmFsc0dvYWwoCiAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc19icD00MDAsIGFnZ3JzPTMsIG1pbl9zYW1wbGVfdXM9NTAwMCwKICAgICAgICAgICAgICAgICAgICAgbWF4X3NhbXBsZV91cz0xMDAwMDAwMCksCi0gICAgICAgICAgICAgICAgdXBkYXRlX3VzPTIwMDAwMDApLAomIzQzOyAgICAgICAgICAgICAgICB1cGRhdGVfdXM9MjAwMDAwMCwKJiM0MzsgICAgICAgICAgICAgICAgcHJvYmVzPV9kYW1vbl9zeXNmcy5EYW1vblByb2JlcygKJiM0MzsgICAgICAgICAgICAgICAgICAgIHByb2Jlcz1bX2RhbW9uX3N5c2ZzLkRhbW9uUHJvYmUoCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0PTQyLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnM9X2RhbW9uX3N5c2ZzLkRhbW9uRmlsdGVycygKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycz1bCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGFtb25fc3lzZnMuRGFtb25GaWx0ZXIoCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV89JiMzOTthbm9uJiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmc9VHJ1ZSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdz1UcnVlLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiYjNDM7ICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgc2NoZW1lcz1bX2RhbW9uX3N5c2ZzLkRhbW9zKAogICAgICAgICAgICAgICAgIGFjdGlvbj0mIzM5O3BhZ2VvdXQmIzM5OywKICAgICAgICAgICAgICAgICBhY2Nlc3NfcGF0dGVybj1fZGFtb25fc3lzZnMuRGFtb3NBY2Nlc3NQYXR0ZXJuKAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDA4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2gqKgoKT2theSwgc28gdGhlIGRpZmYgaXMgcHJldHR5IGZvY3VzZWQuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIGEgZmV3IHRlc3QtcmVsYXRlZCBmaWxlczogYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAsIGFuZCBhIGZldyBweXRob24gc2NyaXB0cyBpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2AgZGlyZWN0b3J5OiBgX2RhbW9uX3N5c2ZzLnB5YCwgYGRyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlgLCBhbmQgYHN5c2ZzLnB5YC4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbiwgc3VnZ2VzdHMgYSBsaW1pdGVkIHNjb3BlLgoKTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgKmlzKiB0aGUgZW50aXJlIHNjb3BlIG9mIHRoZSBjb21taXQuIEV4cGVyaWVuY2UgaGFzIHRhdWdodCBtZSB0byBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSB3aXRoIERBTU9OIHdoZXJlIGludGVyYWN0aW9ucyBjYW4gYmUgc3VidGxlLiBJIG5lZWQgdG8gZWxpbWluYXRlIHRoZSBwb3NzaWJpbGl0eSBvZiBhbnkgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgb3IgaGlkZGVuIG1vZGlmaWNhdGlvbnMuCgpTaW5jZSBJIGhhdmUgdGhlIGZ1bGwgZGlmZiwgSSBkb24mIzM5O3QgbmVlZCB0byBnbyBkaWdnaW5nIGZvciBpdCwgYnV0IGp1c3QgdG8gbWFrZSBzdXJlLCBJIHdpbGwgZG91YmxlIGNoZWNrIHRoYXQgdGhlcmUgaXMgbm90aGluZyBlbHNlIGNoYW5nZWQgaW4gdGhpcyBjb21taXQuCklmIG5lZWRlZCwgSSYjMzk7bGwgZmFsbCBiYWNrIHRvIGBnaXQgZ3JlcGAgb3IgbWF5YmUgZXZlbiBqdXN0IHJlYWQgdGhyb3VnaCB0aGUgZGlmZiBpZiBpdCYjMzk7cyBub3QgdG9vIGxvbmcsIGJ1dCBnaXZlbiB0aGUgbGltaXRlZCBsaXN0aW5nLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgcXVpY2sgdmVyaWZpY2F0aW9uLgpJIG1pZ2h0IGV2ZW4gZ2xhbmNlIGF0IGBtbS9kYW1vbi90ZXN0cy9gIG1vcmUgYnJvYWRseSwganVzdCBpbiBjYXNlIHNvbWV0aGluZyBhZGphY2VudCB3YXMgdG91Y2hlZC4gSXQmIzM5O3MgYSBxdWljayBzYW5pdHkgY2hlY2sgYmVmb3JlIEkgZGlnIGludG8gdGhlIHNwZWNpZmljcyBvZiB0aGUgS1VuaXQgdGVzdHMgYW5kIHRoZSBzeXNmcyB0ZXN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTEzMDc9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMzE4LVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEzMTk6c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTMyMC1cdFx0c3RydWN0IGRhbW9uX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpzcmMpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzMzQtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTMzNTpzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzMzYte1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMzQyLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEzNDM6XHRkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHRlc3QsIFx1MDAyNmRzdCxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMzQ0LVx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb25fZmlsdGVyKXtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTM0OC1cdFx0XHR9KTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMzQ5Olx0ZGFtb25fdGVzdF9jb21taXRfZmlsdGVyX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTM1MC1cdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9uX2ZpbHRlcil7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE4MjM9c3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTg0Ni1cdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfdGFyZ2V0X3JlZ2lvbnMpLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE4NDc6XHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlciksXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTg0OC1cdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfcHJvYmVzKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTA3CgkJCQkJCQlvdXRwdXQ6IDgwCgkJCQkJCQl0aG91Z2h0czogNjM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIFBhdGNoJiMzOTtzIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgY2hhbmdlcyB0aGF0IGFyZSByZWxldmFudCBmb3IgZnV6emluZy4gVGhlIGd1aWRlbGluZXMgY2xlYXJseSBzdGF0ZSB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBmaWxlcywgY29tbWVudHMsIGFuZCBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzIGxpa2UgbG9nZ2luZyBzaG91bGQgYmUgZXhjbHVkZWQuIEFsc28gZXhjbHVkZWQgYXJlIGNoYW5nZXMgdG8gY29uc3RhbnRzIHdpdGhvdXQgaW1wYWN0aW5nIGV4ZWN1dGlvbiBmbG93LCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBjb2RlIHRoYXQgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUsIGFuZCB0ZWFyZG93biBjYWxsYmFja3MuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2AgYW5kIGBtbS9kYW1vbi90ZXN0cy9gLiBBbmQgY29uc2lkZXJpbmcgdGhlIG5hdHVyZSBvZiBLVW5pdCB0ZXN0cyBhbmQgc2VsZnRlc3RzLCB0aGlzIGlzIHRoZSBhcmVhIHRvIGFzc2VzcyBtb3N0IGNsb3NlbHkuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlc2UgdGVzdHMgaW50cm9kdWNlIG5ldyBydW50aW1lIGtlcm5lbCBmdW5jdGlvbmFsaXR5IG9yIGNoYW5nZSBhbnkgcmVhY2hhYmxlIHJ1bnRpbWUgbG9naWMgdGhhdCB3b3VsZCBiZSByZWxldmFudCBmb3IgZnV6emluZy4KCk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBLVW5pdCB0ZXN0cywgbGlrZSB0aG9zZSBpbiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCwgYW5kIHNlbGZ0ZXN0cywgZm91bmQgaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8uLi5gIGRpcmVjdG9yeSwgYXJlICpub3QqIGludGVuZGVkIHRvIG1vZGlmeSBjb3JlIGtlcm5lbCBsb2dpYyBpbiBhIHdheSB0aGF0IGludHJvZHVjZXMgbmV3IGF0dGFjayBzdXJmYWNlcyBmb3IgZnV6emluZy4gS1VuaXQgdGVzdHMgYXJlIGdlbmVyYWxseSBleGVjdXRlZCBvbmNlIG9uIGJvb3Qgb3IgdmlhIGRlYnVnZnMsIHdoaWxlIHNlbGZ0ZXN0cyBhcmUgdXNlci1zcGFjZSBzY3JpcHRzLiBOZWl0aGVyIHdpbGwgY2hhbmdlIHRoZSBmdW5kYW1lbnRhbCBrZXJuZWwgYmVoYXZpb3IgaW4gYW4gZXhwbG9pdGFibGUgd2F5LgoKTm93LCBhIGNydWNpYWwgc3RlcDogSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgZGlmZiB0byBjb25maXJtIHRoZXJlIGFyZW4mIzM5O3QgKmFueSogbW9kaWZpY2F0aW9ucyBvdXRzaWRlIG9mIHRoZXNlIHRlc3QgZGlyZWN0b3JpZXMuIExldCYjMzk7cyBzZWUuLi4gdGhlIGRpZmYgb25seSBpbmNsdWRlcyBjaGFuZ2VzIHRvIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5YCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5YC4KClRoZXJlZm9yZSwgdGhlcmUgYXJlICpubyogY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYywgc3VjaCBhcyBpbiBgbW0vZGFtb24vY29yZS5jYCBvciBgbW0vZGFtb24vc3lzZnMuY2AuIFRoaXMgbWVhbnMgdGhlIHBhdGNoIGlzICpzb2xlbHkqIGFkZGluZyB1bml0IHRlc3RzIChLVW5pdCkgYW5kIHVwZGF0aW5nIHNlbGZ0ZXN0IHB5dGhvbiBzY3JpcHRzLiBUaGVzZSBhcmUgbm90IGNvbnNpZGVyZWQgZnVuY3Rpb25hbCBjaGFuZ2VzIHdoaWNoIGludHJvZHVjZSBhZGRpdGlvbmFsIGF0dGFjayBzdXJmYWNlIG9yIGV4cGxvaXRhYmxlIGtlcm5lbCBiZWhhdmlvciB0aGF0IGlzIGFwcHJvcHJpYXRlIGZvciBmdXp6aW5nLgoKVGh1cywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyB0aGUgcmVzdWx0czogYFdvcnRoRnV6emluZzogZmFsc2VgLCB3aXRoIGVtcHR5IGxpc3RzIGZvciBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBNeSByZWFzb25pbmcgaXMgY29uY2lzZTogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIHVuaXQgdGVzdCBjYXNlcyBpbiBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYW5kIHVwZGF0ZXMgc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uLy4gSXQgZG9lcyBub3QgbWFrZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8ga2VybmVsIGxvZ2ljIG9yIHJ1bnRpbWUgYmVoYXZpb3IuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBLVW5pdCB0ZXN0IGNhc2VzIGluIG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBhbmQgdXBkYXRlcyBzZWxmdGVzdCBzY3JpcHRzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uLy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBLVW5pdCB0ZXN0IGNhc2VzIGluIG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBhbmQgdXBkYXRlcyBzZWxmdGVzdCBzY3JpcHRzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uLy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjQ1OjM2LjMxNDQ1MjgxOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjQwNzgwNTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIEtVbml0IHRlc3QgY2FzZXMgaW4gbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGFuZCB1cGRhdGVzIHNlbGZ0ZXN0IHNjcmlwdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGZ1bmN0aW9uYWwga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NDU6MzYuMzE0NDYwODY4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDY5OTIyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ODg1ZGEwZDZjMTExNzlkOWU3MDZmN2M3ZDJmZDgxYzMyMGVhYWY1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMDk6NDU6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXFxuaW5kZXggYWYyNmIzZDYwOTU3Yi4uZjI1NjhmYmE1NTJlYyAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG4rKysgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG5AQCAtMTMxNiw2ICsxMzE2LDEyOCBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdFxcdFxcdCh1bnNpZ25lZCBsb25nW11bMl0pIHt7MywgOH0sIHs4LCAxMH19LCAyKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuK1xcdFxcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9uX2ZpbHRlciAqc3JjKVxcbit7XFxuK1xcdGRhbW9uX2NvbW1pdF9maWx0ZXIoZHN0LCBzcmMpO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2V0eXBlLCBzcmMtXFx1MDAzZXR5cGUpO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VtYXRjaGluZywgc3JjLVxcdTAwM2VtYXRjaGluZyk7XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZWFsbG93LCBzcmMtXFx1MDAzZWFsbG93KTtcXG4rXFx0c3dpdGNoIChzcmMtXFx1MDAzZXR5cGUpIHtcXG4rXFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcXG4rXFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNlbWVtY2dfaWQsIHNyYy1cXHUwMDNlbWVtY2dfaWQpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fZmlsdGVyIGRzdCA9IHtcXG4rXFx0XFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OLFxcbitcXHRcXHQubWF0Y2hpbmcgPSBmYWxzZSxcXG4rXFx0XFx0LmFsbG93ID0gZmFsc2UsXFxuK1xcdH07XFxuK1xcbitcXHRkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHRlc3QsIFxcdTAwMjZkc3QsXFxuK1xcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9uX2ZpbHRlcil7XFxuK1xcdFxcdFxcdC50eXBlID0gREFNT05fRklMVEVSX1RZUEVfQU5PTixcXG4rXFx0XFx0XFx0Lm1hdGNoaW5nID0gdHJ1ZSxcXG4rXFx0XFx0XFx0LmFsbG93ID0gdHJ1ZSxcXG4rXFx0XFx0XFx0fSk7XFxuK1xcdGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3IodGVzdCwgXFx1MDAyNmRzdCxcXG4rXFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb25fZmlsdGVyKXtcXG4rXFx0XFx0XFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRyxcXG4rXFx0XFx0XFx0Lm1hdGNoaW5nID0gZmFsc2UsXFxuK1xcdFxcdFxcdC5hbGxvdyA9IGZhbHNlLFxcbitcXHRcXHRcXHQubWVtY2dfaWQgPSAxMjMsXFxuK1xcdFxcdFxcdH0pO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fdGVzdF9oZWxwX3NldHVwX3Byb2Jlcyh1bnNpZ25lZCBpbnQgd2VpZ2h0c1tdLFxcbitcXHRcXHRpbnQgbnJfd2VpZ2h0cylcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxuK1xcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xcbitcXHRpZiAoIWN0eClcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl93ZWlnaHRzOyBpKyspIHtcXG4rXFx0XFx0cHJvYmUgPSBkYW1vbl9uZXdfcHJvYmUoKTtcXG4rXFx0XFx0aWYgKCFwcm9iZSkge1xcbitcXHRcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0fVxcbitcXHRcXHRwcm9iZS1cXHUwMDNld2VpZ2h0ID0gd2VpZ2h0c1tpXTtcXG4rXFx0XFx0ZGFtb25fYWRkX3Byb2JlKGN0eCwgcHJvYmUpO1xcbitcXHR9XFxuK1xcdHJldHVybiBjdHg7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbitcXHRcXHR1bnNpZ25lZCBpbnQgZHN0X3dlaWdodHNbXSwgaW50IG5yX2RzdF9wcm9iZXMsXFxuK1xcdFxcdHVuc2lnbmVkIGludCBzcmNfd2VpZ2h0c1tdLCBpbnQgbnJfc3JjX3Byb2JlcylcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsICpzcmM7XFxuK1xcdGludCBlcnI7XFxuK1xcdHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0X3Byb2JlLCAqc3JjX3Byb2JlO1xcbitcXG4rXFx0ZHN0ID0gZGFtb25fdGVzdF9oZWxwX3NldHVwX3Byb2Jlcyhkc3Rfd2VpZ2h0cywgbnJfZHN0X3Byb2Jlcyk7XFxuK1xcdGlmICghZHN0KVxcbitcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJkc3QgYWxsb2MgZmFpbFxcXCIpO1xcbitcXHRzcmMgPSBkYW1vbl90ZXN0X2hlbHBfc2V0dXBfcHJvYmVzKHNyY193ZWlnaHRzLCBucl9zcmNfcHJvYmVzKTtcXG4rXFx0aWYgKCFzcmMpIHtcXG4rXFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoZHN0KTtcXG4rXFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwic3JjIGFsbG9jIGZhaWxcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gZGFtb25fY29tbWl0X3Byb2Jlcyhkc3QsIHNyYyk7XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBlcnIsIDApO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0bnJfZHN0X3Byb2JlcyA9IDA7XFxuK1xcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKGRzdF9wcm9iZSwgZHN0KVxcbitcXHRcXHRucl9kc3RfcHJvYmVzKys7XFxuK1xcdG5yX3NyY19wcm9iZXMgPSAwO1xcbitcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShzcmNfcHJvYmUsIHNyYylcXG4rXFx0XFx0bnJfc3JjX3Byb2JlcysrO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbnJfZHN0X3Byb2JlcywgbnJfc3JjX3Byb2Jlcyk7XFxuK1xcdGlmIChucl9kc3RfcHJvYmVzICE9IG5yX3NyY19wcm9iZXMpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRucl9kc3RfcHJvYmVzID0gMDtcXG4rXFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUoZHN0X3Byb2JlLCBkc3QpIHtcXG4rXFx0XFx0c3JjX3Byb2JlID0gZGFtb25fbnRoX3Byb2JlKG5yX2RzdF9wcm9iZXMsIHNyYyk7XFxuK1xcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzcmNfcHJvYmUtXFx1MDAzZXdlaWdodCwgZHN0X3Byb2JlLVxcdTAwM2V3ZWlnaHQpO1xcbitcXHRcXHRucl9kc3RfcHJvYmVzKys7XFxuK1xcdH1cXG4rb3V0OlxcbitcXHRkYW1vbl9kZXN0cm95X2N0eChkc3QpO1xcbitcXHRkYW1vbl9kZXN0cm95X2N0eChzcmMpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcXG4rXFx0XFx0XFx0KHVuc2lnbmVkIGludFtdKXt9LCAwLCAodW5zaWduZWQgaW50W10pe30sIDApO1xcbitcXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXFxuK1xcdFxcdFxcdCh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXsxfSwgMSk7XFxuK1xcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcXG4rXFx0XFx0XFx0KHVuc2lnbmVkIGludFtdKXt9LCAwLCAodW5zaWduZWQgaW50W10pezEsIDJ9LCAyKTtcXG4rXFx0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxcbitcXHRcXHRcXHQodW5zaWduZWQgaW50W10pezF9LCAxLCAodW5zaWduZWQgaW50W10pezJ9LCAxKTtcXG4rXFx0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxcbitcXHRcXHRcXHQodW5zaWduZWQgaW50W10pezF9LCAxLCAodW5zaWduZWQgaW50W10pezIsIDN9LCAyKTtcXG4rXFx0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxcbitcXHRcXHRcXHQodW5zaWduZWQgaW50W10pezIsIDN9LCAyLCAodW5zaWduZWQgaW50W10pezF9LCAxKTtcXG4rXFx0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxcbitcXHRcXHRcXHQodW5zaWduZWQgaW50W10pezIsIDN9LCAyLCAodW5zaWduZWQgaW50W10pe30sIDApO1xcbitcXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXFxuK1xcdFxcdFxcdCh1bnNpZ25lZCBpbnRbXSl7Mn0sIDEsICh1bnNpZ25lZCBpbnRbXSl7fSwgMCk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2N0eChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIHtcXG4gXFx0c3RydWN0IGRhbW9uX2N0eCAqc3JjLCAqZHN0O1xcbkBAIC0xNzIyLDYgKzE4NDQsOCBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xcbiBcXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3BhZ2VvdXQpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X21pZ3JhdGVfaG90KSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9ucyksXFxuK1xcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfZmlsdGVyKSxcXG4rXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXMpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X2N0eCksXFxuIFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF92YWxpZF9wcm9iZV9wYXJhbXMpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfZmlsdGVyX291dCksXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weVxcbmluZGV4IGY2MDRiN2Q2NTMwYjMuLmU3MDk1YzMzNjUyNDUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XFxuQEAgLTU3MCw2ICs1NzAsMTE3IEBAIGNsYXNzIEludGVydmFsc0dvYWw6XFxuICAgICAgICAgICAgIHJldHVybiBlcnJcXG4gICAgICAgICByZXR1cm4gTm9uZVxcbiBcXG4rY2xhc3MgRGFtb25GaWx0ZXI6XFxuKyAgICB0eXBlXyA9IE5vbmVcXG4rICAgIG1hdGNoaW5nID0gTm9uZVxcbisgICAgYWxsb3cgPSBOb25lXFxuKyAgICBmaWx0ZXJzID0gTm9uZVxcbisgICAgcGF0aCA9IE5vbmVcXG4rICAgIGlkeCA9IE5vbmVcXG4rXFxuKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV89J2Fub24nLCBtYXRjaGluZz1GYWxzZSwgYWxsb3c9RmFsc2UsIHBhdGg9Tm9uZSk6XFxuKyAgICAgICAgc2VsZi50eXBlXyA9IHR5cGVfXFxuKyAgICAgICAgc2VsZi5tYXRjaGluZyA9IG1hdGNoaW5nXFxuKyAgICAgICAgc2VsZi5hbGxvdyA9IGFsbG93XFxuKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aFxcbitcXG4rICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XFxuKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmZpbHRlcnMuc3lzZnNfZGlyKCksICclZCcgJSBzZWxmLmlkeClcXG4rXFxuKyAgICBkZWYgc3RhZ2Uoc2VsZik6XFxuKyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ3R5cGUnKSwgc2VsZi50eXBlXylcXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgIHJldHVybiBlcnJcXG4rICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAnbWF0Y2hpbmcnKSxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICdZJyBpZiBzZWxmLm1hdGNoaW5nIGVsc2UgJ04nKVxcbisgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAgcmV0dXJuIGVyclxcbisgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUob3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICdhbGxvdycpLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgJ1knIGlmIHNlbGYuYWxsb3cgZWxzZSAnTicpXFxuKyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICByZXR1cm4gZXJyXFxuKyAgICAgICAgaWYgc2VsZi50eXBlXyA9PSAnbWVtY2cnOlxcbisgICAgICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAncGF0aCcpLCBzZWxmLnBhdGgpXFxuKyAgICAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAgICAgIHJldHVybiBlcnJcXG4rICAgICAgICByZXR1cm4gTm9uZVxcbitcXG4rY2xhc3MgRGFtb25GaWx0ZXJzOlxcbisgICAgZmlsdGVycyA9IE5vbmVcXG4rICAgIHByb2JlID0gTm9uZVxcbitcXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWx0ZXJzPU5vbmUpOlxcbisgICAgICAgIGlmIGZpbHRlcnMgaXMgTm9uZTpcXG4rICAgICAgICAgICAgZmlsdGVycyA9IFtdXFxuKyAgICAgICAgc2VsZi5maWx0ZXJzID0gZmlsdGVyc1xcbisgICAgICAgIGZvciBpZHgsIGZpbHRlciBpbiBlbnVtZXJhdGUoc2VsZi5maWx0ZXJzKTpcXG4rICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMgPSBzZWxmXFxuKyAgICAgICAgICAgIGZpbHRlci5pZHggPSBpZHhcXG4rXFxuKyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxcbisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5wcm9iZS5zeXNmc19kaXIoKSwgJ2ZpbHRlcnMnKVxcbitcXG4rICAgIGRlZiBzdGFnZShzZWxmKTpcXG4rICAgICAgICBlcnIgPSB3cml0ZV9maWxlKFxcbisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICducl9maWx0ZXJzJyksXFxuKyAgICAgICAgICAgICAgICBsZW4oc2VsZi5maWx0ZXJzKSlcXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgIHJldHVybiBlcnJcXG4rICAgICAgICBmb3IgZmlsdGVyIGluIHNlbGYuZmlsdGVyczpcXG4rICAgICAgICAgICAgZXJyID0gZmlsdGVyLnN0YWdlKClcXG4rICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICAgICAgcmV0dXJuIGVyclxcbisgICAgICAgIHJldHVybiBOb25lXFxuK1xcbitjbGFzcyBEYW1vblByb2JlOlxcbisgICAgd2VpZ2h0ID0gTm9uZVxcbisgICAgZmlsdGVycyA9IE5vbmVcXG4rICAgIHByb2JlcyA9IE5vbmVcXG4rICAgIGlkeCA9IE5vbmVcXG4rXFxuKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2VpZ2h0PTAsIGZpbHRlcnM9Tm9uZSk6XFxuKyAgICAgICAgc2VsZi53ZWlnaHQgPSB3ZWlnaHRcXG4rICAgICAgICBpZiBmaWx0ZXJzIGlzIE5vbmU6XFxuKyAgICAgICAgICAgIGZpbHRlcnMgPSBEYW1vbkZpbHRlcnMoKVxcbisgICAgICAgIHNlbGYuZmlsdGVycyA9IGZpbHRlcnNcXG4rICAgICAgICBzZWxmLmZpbHRlcnMucHJvYmUgPSBzZWxmXFxuK1xcbisgICAgZGVmIHN5c2ZzX2RpcihzZWxmKTpcXG4rICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYucHJvYmVzLnN5c2ZzX2RpcigpLCAnJWQnICUgc2VsZi5pZHgpXFxuK1xcbisgICAgZGVmIHN0YWdlKHNlbGYpOlxcbisgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUoXFxuKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ3dlaWdodCcpLCAnJWQnICUgc2VsZi53ZWlnaHQpXFxuKyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICByZXR1cm4gZXJyXFxuKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsdGVycy5zdGFnZSgpXFxuK1xcbitjbGFzcyBEYW1vblByb2JlczpcXG4rICAgIHByb2JlcyA9IE5vbmVcXG4rICAgIGF0dHJzID0gTm9uZVxcbitcXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9iZXM9Tm9uZSk6XFxuKyAgICAgICAgaWYgcHJvYmVzIGlzIE5vbmU6XFxuKyAgICAgICAgICAgIHByb2JlcyA9IFtdXFxuKyAgICAgICAgc2VsZi5wcm9iZXMgPSBwcm9iZXNcXG4rICAgICAgICBmb3IgaWR4LCBwcm9iZSBpbiBlbnVtZXJhdGUoc2VsZi5wcm9iZXMpOlxcbisgICAgICAgICAgICBwcm9iZS5wcm9iZXMgPSBzZWxmXFxuKyAgICAgICAgICAgIHByb2JlLmlkeCA9IGlkeFxcbitcXG4rICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XFxuKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmF0dHJzLnN5c2ZzX2RpcigpLCAncHJvYmVzJylcXG4rXFxuKyAgICBkZWYgc3RhZ2Uoc2VsZik6XFxuKyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ25yX3Byb2JlcycpLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYucHJvYmVzKSlcXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgIHJldHVybiBlcnJcXG4rICAgICAgICBmb3IgcHJvYmUgaW4gc2VsZi5wcm9iZXM6XFxuKyAgICAgICAgICAgIGVyciA9IHByb2JlLnN0YWdlKClcXG4rICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICAgICAgcmV0dXJuIGVyclxcbisgICAgICAgIHJldHVybiBOb25lXFxuK1xcbiBjbGFzcyBEYW1vbkF0dHJzOlxcbiAgICAgc2FtcGxlX3VzID0gTm9uZVxcbiAgICAgYWdncl91cyA9IE5vbmVcXG5AQCAtNTc3LDExICs2ODgsMTIgQEAgY2xhc3MgRGFtb25BdHRyczpcXG4gICAgIHVwZGF0ZV91cyA9IE5vbmVcXG4gICAgIG1pbl9ucl9yZWdpb25zID0gTm9uZVxcbiAgICAgbWF4X25yX3JlZ2lvbnMgPSBOb25lXFxuKyAgICBwcm9iZXMgPSBOb25lXFxuICAgICBjb250ZXh0ID0gTm9uZVxcbiBcXG4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzYW1wbGVfdXM9NTAwMCwgYWdncl91cz0xMDAwMDAsXFxuICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWw9Tm9uZSwgdXBkYXRlX3VzPTEwMDAwMDAsIG1pbl9ucl9yZWdpb25zPTEwLFxcbi0gICAgICAgICAgICAgICAgIG1heF9ucl9yZWdpb25zPTEwMDApOlxcbisgICAgICAgICAgICAgICAgIG1heF9ucl9yZWdpb25zPTEwMDAsIHByb2Jlcz1Ob25lKTpcXG4gICAgICAgICBzZWxmLnNhbXBsZV91cyA9IHNhbXBsZV91c1xcbiAgICAgICAgIHNlbGYuYWdncl91cyA9IGFnZ3JfdXNcXG4gICAgICAgICBpZiBpbnRlcnZhbHNfZ29hbCBpcyBOb25lOlxcbkBAIC01OTEsNiArNzAzLDEwIEBAIGNsYXNzIERhbW9uQXR0cnM6XFxuICAgICAgICAgc2VsZi51cGRhdGVfdXMgPSB1cGRhdGVfdXNcXG4gICAgICAgICBzZWxmLm1pbl9ucl9yZWdpb25zID0gbWluX25yX3JlZ2lvbnNcXG4gICAgICAgICBzZWxmLm1heF9ucl9yZWdpb25zID0gbWF4X25yX3JlZ2lvbnNcXG4rICAgICAgICBpZiBwcm9iZXMgaXMgTm9uZTpcXG4rICAgICAgICAgICAgcHJvYmVzID0gRGFtb25Qcm9iZXMoKVxcbisgICAgICAgIHNlbGYucHJvYmVzID0gcHJvYmVzXFxuKyAgICAgICAgc2VsZi5wcm9iZXMuYXR0cnMgPSBzZWxmXFxuIFxcbiAgICAgZGVmIGludGVydmFsX3N5c2ZzX2RpcihzZWxmKTpcXG4gICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJ21vbml0b3JpbmdfYXR0cnMnLFxcbkBAIC02MDAsNiArNzE2LDkgQEAgY2xhc3MgRGFtb25BdHRyczpcXG4gICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJ21vbml0b3JpbmdfYXR0cnMnLFxcbiAgICAgICAgICAgICAgICAgJ25yX3JlZ2lvbnMnKVxcbiBcXG4rICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XFxuKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmNvbnRleHQuc3lzZnNfZGlyKCksICdtb25pdG9yaW5nX2F0dHJzJylcXG4rXFxuICAgICBkZWYgc3RhZ2Uoc2VsZik6XFxuICAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5pbnRlcnZhbF9zeXNmc19kaXIoKSwgJ3NhbXBsZV91cycpLFxcbiAgICAgICAgICAgICAgICAgc2VsZi5zYW1wbGVfdXMpXFxuQEAgLTYyOSw2ICs3NDgsMTAgQEAgY2xhc3MgRGFtb25BdHRyczpcXG4gICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XFxuICAgICAgICAgICAgIHJldHVybiBlcnJcXG4gXFxuKyAgICAgICAgZXJyID0gc2VsZi5wcm9iZXMuc3RhZ2UoKVxcbisgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAgcmV0dXJuIGVyclxcbitcXG4gY2xhc3MgRGFtb25DdHg6XFxuICAgICBvcHMgPSBOb25lXFxuICAgICBtb25pdG9yaW5nX2F0dHJzID0gTm9uZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weVxcbmluZGV4IDA5NTUyZTkxYmM3ODIuLjQ2MjIwNDZmZDAxMTggMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlcXG5AQCAtNDgsNiArNDgsMzcgQEAgZGVmIGF0dHJzX3RvX2RpY3QoYXR0cnMpOlxcbiAgICAgICAgIFsnbWF4X25yX3JlZ2lvbnMnLCBpbnRdLFxcbiAgICAgICAgIF0pXFxuIFxcbitkZWYgZmlsdGVyX3RvX2RpY3QoZGFtb25fZmlsdGVyKTpcXG4rICAgIGZpbHRlcl90eXBlX2tleXdvcmQgPSB7XFxuKyAgICAgICAgICAgIDA6ICdhbm9uJyxcXG4rICAgICAgICAgICAgMTogJ21lbWNnJyxcXG4rICAgICAgICAgICAgfVxcbisgICAgZGljdF8gPSB7XFxuKyAgICAgICAgICAgICd0eXBlJzogZmlsdGVyX3R5cGVfa2V5d29yZFtpbnQoZGFtb25fZmlsdGVyLnR5cGUpXSxcXG4rICAgICAgICAgICAgJ21hdGNoaW5nJzogYm9vbChkYW1vbl9maWx0ZXIubWF0Y2hpbmcpLFxcbisgICAgICAgICAgICAnYWxsb3cnOiBib29sKGRhbW9uX2ZpbHRlci5hbGxvdyksXFxuKyAgICAgICAgICAgIH1cXG4rICAgIHR5cGVfID0gZGljdF9bJ3R5cGUnXVxcbisgICAgaWYgdHlwZV8gPT0gJ21lbWNnJzpcXG4rICAgICAgICBkaWN0X1snbWVtY2dfaWQnXSA9IGludChkYW1vbl9maWx0ZXIubWVtY2dfaWQpXFxuKyAgICByZXR1cm4gZGljdF9cXG4rXFxuK2RlZiBmaWx0ZXJzX3RvX2xpc3QoZmlsdGVycyk6XFxuKyAgICByZXR1cm4gW2ZpbHRlcl90b19kaWN0KGYpXFxuKyAgICAgICAgICAgIGZvciBmIGluIGxpc3RfZm9yX2VhY2hfZW50cnkoXFxuKyAgICAgICAgICAgICAgICAnc3RydWN0IGRhbW9uX2ZpbHRlcicsIGZpbHRlcnMuYWRkcmVzc19vZl8oKSwgJ2xpc3QnKV1cXG4rXFxuK2RlZiBwcm9iZV90b19kaWN0KHByb2JlKTpcXG4rICAgIHJldHVybiB0b19kaWN0KHByb2JlLCBbXFxuKyAgICAgICAgWyd3ZWlnaHQnLCBpbnRdLFxcbisgICAgICAgIFsnZmlsdGVycycsIGZpbHRlcnNfdG9fbGlzdF0sXFxuKyAgICAgICAgXSlcXG4rXFxuK2RlZiBwcm9iZXNfdG9fbGlzdChwcm9iZXMpOlxcbisgICAgcmV0dXJuIFtwcm9iZV90b19kaWN0KHApXFxuKyAgICAgICAgICAgIGZvciBwIGluIGxpc3RfZm9yX2VhY2hfZW50cnkoXFxuKyAgICAgICAgICAgICAgICAnc3RydWN0IGRhbW9uX3Byb2JlJywgcHJvYmVzLmFkZHJlc3Nfb2ZfKCksICdsaXN0JyldXFxuK1xcbiBkZWYgYWRkcl9yYW5nZV90b19kaWN0KGFkZHJfcmFuZ2UpOlxcbiAgICAgcmV0dXJuIHRvX2RpY3QoYWRkcl9yYW5nZSwgW1xcbiAgICAgICAgIFsnc3RhcnQnLCBpbnRdLFxcbkBAIC0xOTksNiArMjMwLDcgQEAgZGVmIGRhbW9uX2N0eF90b19kaWN0KGN0eCk6XFxuICAgICByZXR1cm4gdG9fZGljdChjdHgsIFtcXG4gICAgICAgICBbJ29wcycsIG9wc190b19kaWN0XSxcXG4gICAgICAgICBbJ2F0dHJzJywgYXR0cnNfdG9fZGljdF0sXFxuKyAgICAgICAgWydwcm9iZXMnLCBwcm9iZXNfdG9fbGlzdF0sXFxuICAgICAgICAgWydhZGFwdGl2ZV90YXJnZXRzJywgdGFyZ2V0c190b19saXN0XSxcXG4gICAgICAgICBbJ3NjaGVtZXMnLCBzY2hlbWVzX3RvX2xpc3RdLFxcbiAgICAgICAgIFsncGF1c2UnLCBib29sXSxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weVxcbmluZGV4IDg4YTI2NDIyZmY0NGMuLjY2YzgyNjE4OTMyMGQgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weVxcbkBAIC0xNzgsNiArMTc4LDI0IEBAIGRlZiBhc3NlcnRfbW9uaXRvcmluZ19hdHRyc19jb21taXR0ZWQoYXR0cnMsIGR1bXApOlxcbiAgICAgYXNzZXJ0X3RydWUoZHVtcFsnbWF4X25yX3JlZ2lvbnMnXSA9PSBhdHRycy5tYXhfbnJfcmVnaW9ucyxcXG4gICAgICAgICAgICAgICAgICdtYXhfbnJfcmVnaW9ucycsIGR1bXApXFxuIFxcbitkZWYgYXNzZXJ0X2RhbW9uX2ZpbHRlcnNfY29tbWl0dGVkKGZpbHRlcnMsIGR1bXApOlxcbisgICAgYXNzZXJ0X3RydWUobGVuKGR1bXApID09IGxlbihmaWx0ZXJzLmZpbHRlcnMpLCAncHJvYmUgZmlsdGVycycsIGR1bXApXFxuKyAgICBmb3IgaWR4LCBkYW1vbl9maWx0ZXIgaW4gZW51bWVyYXRlKGZpbHRlcnMuZmlsdGVycyk6XFxuKyAgICAgICAgZmlsdGVyX2R1bXAgPSBkdW1wW2lkeF1cXG4rICAgICAgICBhc3NlcnRfdHJ1ZShmaWx0ZXJfZHVtcFsndHlwZSddID09IGRhbW9uX2ZpbHRlci50eXBlXywgJ3R5cGUnLFxcbisgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9kdW1wKVxcbisgICAgICAgIGFzc2VydF90cnVlKGZpbHRlcl9kdW1wWydtYXRjaGluZyddID09IGRhbW9uX2ZpbHRlci5tYXRjaGluZyxcXG4rICAgICAgICAgICAgICAgICAgICAnbWF0Y2hpbmcnLCBmaWx0ZXJfZHVtcClcXG4rICAgICAgICBhc3NlcnRfdHJ1ZShmaWx0ZXJfZHVtcFsnYWxsb3cnXSA9PSBkYW1vbl9maWx0ZXIuYWxsb3csICdhbGxvdycsXFxuKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2R1bXApXFxuK1xcbitkZWYgYXNzZXJ0X3Byb2Jlc19jb21taXR0ZWQocHJvYmVzLCBkdW1wKTpcXG4rICAgIGFzc2VydF90cnVlKGxlbihkdW1wKSA9PSBsZW4ocHJvYmVzLnByb2JlcyksICdwcm9iZXMgbGVuZ3RoJywgZHVtcClcXG4rICAgIGZvciBpZHgsIHByb2JlIGluIGVudW1lcmF0ZShwcm9iZXMucHJvYmVzKTpcXG4rICAgICAgICBwcm9iZV9kdW1wID0gZHVtcFtpZHhdXFxuKyAgICAgICAgYXNzZXJ0X3RydWUocHJvYmUud2VpZ2h0ID09IHByb2JlX2R1bXBbJ3dlaWdodCddLCAnd2VpZ2h0JywgcHJvYmVfZHVtcClcXG4rICAgICAgICBhc3NlcnRfZGFtb25fZmlsdGVyc19jb21taXR0ZWQocHJvYmUuZmlsdGVycywgcHJvYmVfZHVtcFsnZmlsdGVycyddKVxcbitcXG4gZGVmIGFzc2VydF9tb25pdG9yaW5nX3RhcmdldF9jb21taXR0ZWQodGFyZ2V0LCBkdW1wKTpcXG4gICAgICMgdGFyZ2V0LnBpZCBpcyB0aGUgcGlkIFxcXCJudW1iZXJcXFwiLCB3aGlsZSBkdW1wWydwaWQnXSBpcyAnc3RydWN0IHBpZCdcXG4gICAgICMgcG9pbnRlciwgYW5kIGhlbmNlIGNhbm5vdCBiZSBjb21wYXJlZC5cXG5AQCAtMTk2LDYgKzIxNCw3IEBAIGRlZiBhc3NlcnRfY3R4X2NvbW1pdHRlZChjdHgsIGR1bXApOlxcbiAgICAgICAgICAgICB9XFxuICAgICBhc3NlcnRfdHJ1ZShkdW1wWydvcHMnXVsnaWQnXSA9PSBvcHNfdmFsW2N0eC5vcHNdLCAnb3BzX2lkJywgZHVtcClcXG4gICAgIGFzc2VydF9tb25pdG9yaW5nX2F0dHJzX2NvbW1pdHRlZChjdHgubW9uaXRvcmluZ19hdHRycywgZHVtcFsnYXR0cnMnXSlcXG4rICAgIGFzc2VydF9wcm9iZXNfY29tbWl0dGVkKGN0eC5tb25pdG9yaW5nX2F0dHJzLnByb2JlcywgZHVtcFsncHJvYmVzJ10pXFxuICAgICBhc3NlcnRfbW9uaXRvcmluZ190YXJnZXRzX2NvbW1pdHRlZChjdHgudGFyZ2V0cywgZHVtcFsnYWRhcHRpdmVfdGFyZ2V0cyddKVxcbiAgICAgYXNzZXJ0X3NjaGVtZXNfY29tbWl0dGVkKGN0eC5zY2hlbWVzLCBkdW1wWydzY2hlbWVzJ10pXFxuICAgICBhc3NlcnRfdHJ1ZShkdW1wWydwYXVzZSddID09IGN0eC5wYXVzZSwgJ3BhdXNlJywgZHVtcClcXG5AQCAtMzAwLDcgKzMxOSwyMSBAQCBkZWYgbWFpbigpOlxcbiAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWw9X2RhbW9uX3N5c2ZzLkludGVydmFsc0dvYWwoXFxuICAgICAgICAgICAgICAgICAgICAgYWNjZXNzX2JwPTQwMCwgYWdncnM9MywgbWluX3NhbXBsZV91cz01MDAwLFxcbiAgICAgICAgICAgICAgICAgICAgIG1heF9zYW1wbGVfdXM9MTAwMDAwMDApLFxcbi0gICAgICAgICAgICAgICAgdXBkYXRlX3VzPTIwMDAwMDApLFxcbisgICAgICAgICAgICAgICAgdXBkYXRlX3VzPTIwMDAwMDAsXFxuKyAgICAgICAgICAgICAgICBwcm9iZXM9X2RhbW9uX3N5c2ZzLkRhbW9uUHJvYmVzKFxcbisgICAgICAgICAgICAgICAgICAgIHByb2Jlcz1bX2RhbW9uX3N5c2ZzLkRhbW9uUHJvYmUoXFxuKyAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodD00MixcXG4rICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycz1fZGFtb25fc3lzZnMuRGFtb25GaWx0ZXJzKFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycz1bXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RhbW9uX3N5c2ZzLkRhbW9uRmlsdGVyKFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlXz0nYW5vbicsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nPVRydWUsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93PVRydWUsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXFxuKyAgICAgICAgICAgICAgICAgICAgKSxcXG4gICAgICAgICAgICAgc2NoZW1lcz1bX2RhbW9uX3N5c2ZzLkRhbW9zKFxcbiAgICAgICAgICAgICAgICAgYWN0aW9uPSdwYWdlb3V0JyxcXG4gICAgICAgICAgICAgICAgIGFjY2Vzc19wYXR0ZXJuPV9kYW1vbl9zeXNmcy5EYW1vc0FjY2Vzc1BhdHRlcm4oXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjQ1OjM2LjcyMjM4ODc3MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTI4MzI4MzEzOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBLVW5pdCB0ZXN0IGNhc2VzIGluIG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBhbmQgdXBkYXRlcyBzZWxmdGVzdCBzY3JpcHRzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uLy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY4ODVkYTBkNmMxMTE3OWQ5ZTcwNmY3YzdkMmZkODFjMzIwZWFhZjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDA5OjQ1OjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5pbmRleCBhZjI2YjNkNjA5NTdiLi5mMjU2OGZiYTU1MmVjIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG4rKysgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbkBAIC0xMzE2LDYgKzEzMTYsMTI4IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3RhcmdldF9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0XHQodW5zaWduZWQgbG9uZ1tdWzJdKSB7ezMsIDh9LCB7OCwgMTB9fSwgMik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuK1x0XHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpkc3QsIHN0cnVjdCBkYW1vbl9maWx0ZXIgKnNyYylcbit7XG4rXHRkYW1vbl9jb21taXRfZmlsdGVyKGRzdCwgc3JjKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNldHlwZSwgc3JjLVx1MDAzZXR5cGUpO1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VtYXRjaGluZywgc3JjLVx1MDAzZW1hdGNoaW5nKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlYWxsb3csIHNyYy1cdTAwM2VhbGxvdyk7XG4rXHRzd2l0Y2ggKHNyYy1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxuK1x0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZW1lbWNnX2lkLCBzcmMtXHUwMDNlbWVtY2dfaWQpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGJyZWFrO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdHN0cnVjdCBkYW1vbl9maWx0ZXIgZHN0ID0ge1xuK1x0XHQudHlwZSA9IERBTU9OX0ZJTFRFUl9UWVBFX0FOT04sXG4rXHRcdC5tYXRjaGluZyA9IGZhbHNlLFxuK1x0XHQuYWxsb3cgPSBmYWxzZSxcbitcdH07XG4rXG4rXHRkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHRlc3QsIFx1MDAyNmRzdCxcbitcdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9uX2ZpbHRlcil7XG4rXHRcdFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OLFxuK1x0XHRcdC5tYXRjaGluZyA9IHRydWUsXG4rXHRcdFx0LmFsbG93ID0gdHJ1ZSxcbitcdFx0XHR9KTtcbitcdGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3IodGVzdCwgXHUwMDI2ZHN0LFxuK1x0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb25fZmlsdGVyKXtcbitcdFx0XHQudHlwZSA9IERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHLFxuK1x0XHRcdC5tYXRjaGluZyA9IGZhbHNlLFxuK1x0XHRcdC5hbGxvdyA9IGZhbHNlLFxuK1x0XHRcdC5tZW1jZ19pZCA9IDEyMyxcbitcdFx0XHR9KTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3Rlc3RfaGVscF9zZXR1cF9wcm9iZXModW5zaWduZWQgaW50IHdlaWdodHNbXSxcbitcdFx0aW50IG5yX3dlaWdodHMpXG4re1xuK1x0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuK1x0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcbitcdGludCBpO1xuK1xuK1x0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xuK1x0aWYgKCFjdHgpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfd2VpZ2h0czsgaSsrKSB7XG4rXHRcdHByb2JlID0gZGFtb25fbmV3X3Byb2JlKCk7XG4rXHRcdGlmICghcHJvYmUpIHtcbitcdFx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0XHR9XG4rXHRcdHByb2JlLVx1MDAzZXdlaWdodCA9IHdlaWdodHNbaV07XG4rXHRcdGRhbW9uX2FkZF9wcm9iZShjdHgsIHByb2JlKTtcbitcdH1cbitcdHJldHVybiBjdHg7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuK1x0XHR1bnNpZ25lZCBpbnQgZHN0X3dlaWdodHNbXSwgaW50IG5yX2RzdF9wcm9iZXMsXG4rXHRcdHVuc2lnbmVkIGludCBzcmNfd2VpZ2h0c1tdLCBpbnQgbnJfc3JjX3Byb2Jlcylcbit7XG4rXHRzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsICpzcmM7XG4rXHRpbnQgZXJyO1xuK1x0c3RydWN0IGRhbW9uX3Byb2JlICpkc3RfcHJvYmUsICpzcmNfcHJvYmU7XG4rXG4rXHRkc3QgPSBkYW1vbl90ZXN0X2hlbHBfc2V0dXBfcHJvYmVzKGRzdF93ZWlnaHRzLCBucl9kc3RfcHJvYmVzKTtcbitcdGlmICghZHN0KVxuK1x0XHRrdW5pdF9za2lwKHRlc3QsIFwiZHN0IGFsbG9jIGZhaWxcIik7XG4rXHRzcmMgPSBkYW1vbl90ZXN0X2hlbHBfc2V0dXBfcHJvYmVzKHNyY193ZWlnaHRzLCBucl9zcmNfcHJvYmVzKTtcbitcdGlmICghc3JjKSB7XG4rXHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGRzdCk7XG4rXHRcdGt1bml0X3NraXAodGVzdCwgXCJzcmMgYWxsb2MgZmFpbFwiKTtcbitcdH1cbitcbitcdGVyciA9IGRhbW9uX2NvbW1pdF9wcm9iZXMoZHN0LCBzcmMpO1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGVyciwgMCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dDtcbitcdG5yX2RzdF9wcm9iZXMgPSAwO1xuK1x0ZGFtb25fZm9yX2VhY2hfcHJvYmUoZHN0X3Byb2JlLCBkc3QpXG4rXHRcdG5yX2RzdF9wcm9iZXMrKztcbitcdG5yX3NyY19wcm9iZXMgPSAwO1xuK1x0ZGFtb25fZm9yX2VhY2hfcHJvYmUoc3JjX3Byb2JlLCBzcmMpXG4rXHRcdG5yX3NyY19wcm9iZXMrKztcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBucl9kc3RfcHJvYmVzLCBucl9zcmNfcHJvYmVzKTtcbitcdGlmIChucl9kc3RfcHJvYmVzICE9IG5yX3NyY19wcm9iZXMpXG4rXHRcdGdvdG8gb3V0O1xuK1x0bnJfZHN0X3Byb2JlcyA9IDA7XG4rXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdCkge1xuK1x0XHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUobnJfZHN0X3Byb2Jlcywgc3JjKTtcbitcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNyY19wcm9iZS1cdTAwM2V3ZWlnaHQsIGRzdF9wcm9iZS1cdTAwM2V3ZWlnaHQpO1xuK1x0XHRucl9kc3RfcHJvYmVzKys7XG4rXHR9XG4rb3V0OlxuK1x0ZGFtb25fZGVzdHJveV9jdHgoZHN0KTtcbitcdGRhbW9uX2Rlc3Ryb3lfY3R4KHNyYyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3Byb2JlcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuK1x0XHRcdCh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXt9LCAwKTtcbitcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbitcdFx0XHQodW5zaWduZWQgaW50W10pe30sIDAsICh1bnNpZ25lZCBpbnRbXSl7MX0sIDEpO1xuK1x0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuK1x0XHRcdCh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXsxLCAyfSwgMik7XG4rXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4rXHRcdFx0KHVuc2lnbmVkIGludFtdKXsxfSwgMSwgKHVuc2lnbmVkIGludFtdKXsyfSwgMSk7XG4rXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4rXHRcdFx0KHVuc2lnbmVkIGludFtdKXsxfSwgMSwgKHVuc2lnbmVkIGludFtdKXsyLCAzfSwgMik7XG4rXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4rXHRcdFx0KHVuc2lnbmVkIGludFtdKXsyLCAzfSwgMiwgKHVuc2lnbmVkIGludFtdKXsxfSwgMSk7XG4rXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4rXHRcdFx0KHVuc2lnbmVkIGludFtdKXsyLCAzfSwgMiwgKHVuc2lnbmVkIGludFtdKXt9LCAwKTtcbitcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbitcdFx0XHQodW5zaWduZWQgaW50W10pezJ9LCAxLCAodW5zaWduZWQgaW50W10pe30sIDApO1xuK31cbitcbiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9jdHgoc3RydWN0IGt1bml0ICp0ZXN0KVxuIHtcbiBcdHN0cnVjdCBkYW1vbl9jdHggKnNyYywgKmRzdDtcbkBAIC0xNzIyLDYgKzE4NDQsOCBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9wYWdlb3V0KSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfbWlncmF0ZV9ob3QpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9ucyksXG4rXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlciksXG4rXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X3Byb2JlcyksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X2N0eCksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdmFsaWRfcHJvYmVfcGFyYW1zKSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9maWx0ZXJfb3V0KSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHlcbmluZGV4IGY2MDRiN2Q2NTMwYjMuLmU3MDk1YzMzNjUyNDUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weVxuQEAgLTU3MCw2ICs1NzAsMTE3IEBAIGNsYXNzIEludGVydmFsc0dvYWw6XG4gICAgICAgICAgICAgcmV0dXJuIGVyclxuICAgICAgICAgcmV0dXJuIE5vbmVcbiBcbitjbGFzcyBEYW1vbkZpbHRlcjpcbisgICAgdHlwZV8gPSBOb25lXG4rICAgIG1hdGNoaW5nID0gTm9uZVxuKyAgICBhbGxvdyA9IE5vbmVcbisgICAgZmlsdGVycyA9IE5vbmVcbisgICAgcGF0aCA9IE5vbmVcbisgICAgaWR4ID0gTm9uZVxuK1xuKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV89J2Fub24nLCBtYXRjaGluZz1GYWxzZSwgYWxsb3c9RmFsc2UsIHBhdGg9Tm9uZSk6XG4rICAgICAgICBzZWxmLnR5cGVfID0gdHlwZV9cbisgICAgICAgIHNlbGYubWF0Y2hpbmcgPSBtYXRjaGluZ1xuKyAgICAgICAgc2VsZi5hbGxvdyA9IGFsbG93XG4rICAgICAgICBzZWxmLnBhdGggPSBwYXRoXG4rXG4rICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XG4rICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuZmlsdGVycy5zeXNmc19kaXIoKSwgJyVkJyAlIHNlbGYuaWR4KVxuK1xuKyAgICBkZWYgc3RhZ2Uoc2VsZik6XG4rICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAndHlwZScpLCBzZWxmLnR5cGVfKVxuKyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgIHJldHVybiBlcnJcbisgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUob3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICdtYXRjaGluZycpLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAnWScgaWYgc2VsZi5tYXRjaGluZyBlbHNlICdOJylcbisgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICByZXR1cm4gZXJyXG4rICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAnYWxsb3cnKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgJ1knIGlmIHNlbGYuYWxsb3cgZWxzZSAnTicpXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgcmV0dXJuIGVyclxuKyAgICAgICAgaWYgc2VsZi50eXBlXyA9PSAnbWVtY2cnOlxuKyAgICAgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUob3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICdwYXRoJyksIHNlbGYucGF0aClcbisgICAgICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgICAgIHJldHVybiBlcnJcbisgICAgICAgIHJldHVybiBOb25lXG4rXG4rY2xhc3MgRGFtb25GaWx0ZXJzOlxuKyAgICBmaWx0ZXJzID0gTm9uZVxuKyAgICBwcm9iZSA9IE5vbmVcbitcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbHRlcnM9Tm9uZSk6XG4rICAgICAgICBpZiBmaWx0ZXJzIGlzIE5vbmU6XG4rICAgICAgICAgICAgZmlsdGVycyA9IFtdXG4rICAgICAgICBzZWxmLmZpbHRlcnMgPSBmaWx0ZXJzXG4rICAgICAgICBmb3IgaWR4LCBmaWx0ZXIgaW4gZW51bWVyYXRlKHNlbGYuZmlsdGVycyk6XG4rICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMgPSBzZWxmXG4rICAgICAgICAgICAgZmlsdGVyLmlkeCA9IGlkeFxuK1xuKyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxuKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLnByb2JlLnN5c2ZzX2RpcigpLCAnZmlsdGVycycpXG4rXG4rICAgIGRlZiBzdGFnZShzZWxmKTpcbisgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUoXG4rICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAnbnJfZmlsdGVycycpLFxuKyAgICAgICAgICAgICAgICBsZW4oc2VsZi5maWx0ZXJzKSlcbisgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICByZXR1cm4gZXJyXG4rICAgICAgICBmb3IgZmlsdGVyIGluIHNlbGYuZmlsdGVyczpcbisgICAgICAgICAgICBlcnIgPSBmaWx0ZXIuc3RhZ2UoKVxuKyAgICAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICAgICAgcmV0dXJuIGVyclxuKyAgICAgICAgcmV0dXJuIE5vbmVcbitcbitjbGFzcyBEYW1vblByb2JlOlxuKyAgICB3ZWlnaHQgPSBOb25lXG4rICAgIGZpbHRlcnMgPSBOb25lXG4rICAgIHByb2JlcyA9IE5vbmVcbisgICAgaWR4ID0gTm9uZVxuK1xuKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2VpZ2h0PTAsIGZpbHRlcnM9Tm9uZSk6XG4rICAgICAgICBzZWxmLndlaWdodCA9IHdlaWdodFxuKyAgICAgICAgaWYgZmlsdGVycyBpcyBOb25lOlxuKyAgICAgICAgICAgIGZpbHRlcnMgPSBEYW1vbkZpbHRlcnMoKVxuKyAgICAgICAgc2VsZi5maWx0ZXJzID0gZmlsdGVyc1xuKyAgICAgICAgc2VsZi5maWx0ZXJzLnByb2JlID0gc2VsZlxuK1xuKyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxuKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLnByb2Jlcy5zeXNmc19kaXIoKSwgJyVkJyAlIHNlbGYuaWR4KVxuK1xuKyAgICBkZWYgc3RhZ2Uoc2VsZik6XG4rICAgICAgICBlcnIgPSB3cml0ZV9maWxlKFxuKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ3dlaWdodCcpLCAnJWQnICUgc2VsZi53ZWlnaHQpXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgcmV0dXJuIGVyclxuKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsdGVycy5zdGFnZSgpXG4rXG4rY2xhc3MgRGFtb25Qcm9iZXM6XG4rICAgIHByb2JlcyA9IE5vbmVcbisgICAgYXR0cnMgPSBOb25lXG4rXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9iZXM9Tm9uZSk6XG4rICAgICAgICBpZiBwcm9iZXMgaXMgTm9uZTpcbisgICAgICAgICAgICBwcm9iZXMgPSBbXVxuKyAgICAgICAgc2VsZi5wcm9iZXMgPSBwcm9iZXNcbisgICAgICAgIGZvciBpZHgsIHByb2JlIGluIGVudW1lcmF0ZShzZWxmLnByb2Jlcyk6XG4rICAgICAgICAgICAgcHJvYmUucHJvYmVzID0gc2VsZlxuKyAgICAgICAgICAgIHByb2JlLmlkeCA9IGlkeFxuK1xuKyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxuKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmF0dHJzLnN5c2ZzX2RpcigpLCAncHJvYmVzJylcbitcbisgICAgZGVmIHN0YWdlKHNlbGYpOlxuKyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ25yX3Byb2JlcycpLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oc2VsZi5wcm9iZXMpKVxuKyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgIHJldHVybiBlcnJcbisgICAgICAgIGZvciBwcm9iZSBpbiBzZWxmLnByb2JlczpcbisgICAgICAgICAgICBlcnIgPSBwcm9iZS5zdGFnZSgpXG4rICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyXG4rICAgICAgICByZXR1cm4gTm9uZVxuK1xuIGNsYXNzIERhbW9uQXR0cnM6XG4gICAgIHNhbXBsZV91cyA9IE5vbmVcbiAgICAgYWdncl91cyA9IE5vbmVcbkBAIC01NzcsMTEgKzY4OCwxMiBAQCBjbGFzcyBEYW1vbkF0dHJzOlxuICAgICB1cGRhdGVfdXMgPSBOb25lXG4gICAgIG1pbl9ucl9yZWdpb25zID0gTm9uZVxuICAgICBtYXhfbnJfcmVnaW9ucyA9IE5vbmVcbisgICAgcHJvYmVzID0gTm9uZVxuICAgICBjb250ZXh0ID0gTm9uZVxuIFxuICAgICBkZWYgX19pbml0X18oc2VsZiwgc2FtcGxlX3VzPTUwMDAsIGFnZ3JfdXM9MTAwMDAwLFxuICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWw9Tm9uZSwgdXBkYXRlX3VzPTEwMDAwMDAsIG1pbl9ucl9yZWdpb25zPTEwLFxuLSAgICAgICAgICAgICAgICAgbWF4X25yX3JlZ2lvbnM9MTAwMCk6XG4rICAgICAgICAgICAgICAgICBtYXhfbnJfcmVnaW9ucz0xMDAwLCBwcm9iZXM9Tm9uZSk6XG4gICAgICAgICBzZWxmLnNhbXBsZV91cyA9IHNhbXBsZV91c1xuICAgICAgICAgc2VsZi5hZ2dyX3VzID0gYWdncl91c1xuICAgICAgICAgaWYgaW50ZXJ2YWxzX2dvYWwgaXMgTm9uZTpcbkBAIC01OTEsNiArNzAzLDEwIEBAIGNsYXNzIERhbW9uQXR0cnM6XG4gICAgICAgICBzZWxmLnVwZGF0ZV91cyA9IHVwZGF0ZV91c1xuICAgICAgICAgc2VsZi5taW5fbnJfcmVnaW9ucyA9IG1pbl9ucl9yZWdpb25zXG4gICAgICAgICBzZWxmLm1heF9ucl9yZWdpb25zID0gbWF4X25yX3JlZ2lvbnNcbisgICAgICAgIGlmIHByb2JlcyBpcyBOb25lOlxuKyAgICAgICAgICAgIHByb2JlcyA9IERhbW9uUHJvYmVzKClcbisgICAgICAgIHNlbGYucHJvYmVzID0gcHJvYmVzXG4rICAgICAgICBzZWxmLnByb2Jlcy5hdHRycyA9IHNlbGZcbiBcbiAgICAgZGVmIGludGVydmFsX3N5c2ZzX2RpcihzZWxmKTpcbiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5jb250ZXh0LnN5c2ZzX2RpcigpLCAnbW9uaXRvcmluZ19hdHRycycsXG5AQCAtNjAwLDYgKzcxNiw5IEBAIGNsYXNzIERhbW9uQXR0cnM6XG4gICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJ21vbml0b3JpbmdfYXR0cnMnLFxuICAgICAgICAgICAgICAgICAnbnJfcmVnaW9ucycpXG4gXG4rICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XG4rICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJ21vbml0b3JpbmdfYXR0cnMnKVxuK1xuICAgICBkZWYgc3RhZ2Uoc2VsZik6XG4gICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLmludGVydmFsX3N5c2ZzX2RpcigpLCAnc2FtcGxlX3VzJyksXG4gICAgICAgICAgICAgICAgIHNlbGYuc2FtcGxlX3VzKVxuQEAgLTYyOSw2ICs3NDgsMTAgQEAgY2xhc3MgRGFtb25BdHRyczpcbiAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbiAgICAgICAgICAgICByZXR1cm4gZXJyXG4gXG4rICAgICAgICBlcnIgPSBzZWxmLnByb2Jlcy5zdGFnZSgpXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgcmV0dXJuIGVyclxuK1xuIGNsYXNzIERhbW9uQ3R4OlxuICAgICBvcHMgPSBOb25lXG4gICAgIG1vbml0b3JpbmdfYXR0cnMgPSBOb25lXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlcbmluZGV4IDA5NTUyZTkxYmM3ODIuLjQ2MjIwNDZmZDAxMTggMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5XG5AQCAtNDgsNiArNDgsMzcgQEAgZGVmIGF0dHJzX3RvX2RpY3QoYXR0cnMpOlxuICAgICAgICAgWydtYXhfbnJfcmVnaW9ucycsIGludF0sXG4gICAgICAgICBdKVxuIFxuK2RlZiBmaWx0ZXJfdG9fZGljdChkYW1vbl9maWx0ZXIpOlxuKyAgICBmaWx0ZXJfdHlwZV9rZXl3b3JkID0ge1xuKyAgICAgICAgICAgIDA6ICdhbm9uJyxcbisgICAgICAgICAgICAxOiAnbWVtY2cnLFxuKyAgICAgICAgICAgIH1cbisgICAgZGljdF8gPSB7XG4rICAgICAgICAgICAgJ3R5cGUnOiBmaWx0ZXJfdHlwZV9rZXl3b3JkW2ludChkYW1vbl9maWx0ZXIudHlwZSldLFxuKyAgICAgICAgICAgICdtYXRjaGluZyc6IGJvb2woZGFtb25fZmlsdGVyLm1hdGNoaW5nKSxcbisgICAgICAgICAgICAnYWxsb3cnOiBib29sKGRhbW9uX2ZpbHRlci5hbGxvdyksXG4rICAgICAgICAgICAgfVxuKyAgICB0eXBlXyA9IGRpY3RfWyd0eXBlJ11cbisgICAgaWYgdHlwZV8gPT0gJ21lbWNnJzpcbisgICAgICAgIGRpY3RfWydtZW1jZ19pZCddID0gaW50KGRhbW9uX2ZpbHRlci5tZW1jZ19pZClcbisgICAgcmV0dXJuIGRpY3RfXG4rXG4rZGVmIGZpbHRlcnNfdG9fbGlzdChmaWx0ZXJzKTpcbisgICAgcmV0dXJuIFtmaWx0ZXJfdG9fZGljdChmKVxuKyAgICAgICAgICAgIGZvciBmIGluIGxpc3RfZm9yX2VhY2hfZW50cnkoXG4rICAgICAgICAgICAgICAgICdzdHJ1Y3QgZGFtb25fZmlsdGVyJywgZmlsdGVycy5hZGRyZXNzX29mXygpLCAnbGlzdCcpXVxuK1xuK2RlZiBwcm9iZV90b19kaWN0KHByb2JlKTpcbisgICAgcmV0dXJuIHRvX2RpY3QocHJvYmUsIFtcbisgICAgICAgIFsnd2VpZ2h0JywgaW50XSxcbisgICAgICAgIFsnZmlsdGVycycsIGZpbHRlcnNfdG9fbGlzdF0sXG4rICAgICAgICBdKVxuK1xuK2RlZiBwcm9iZXNfdG9fbGlzdChwcm9iZXMpOlxuKyAgICByZXR1cm4gW3Byb2JlX3RvX2RpY3QocClcbisgICAgICAgICAgICBmb3IgcCBpbiBsaXN0X2Zvcl9lYWNoX2VudHJ5KFxuKyAgICAgICAgICAgICAgICAnc3RydWN0IGRhbW9uX3Byb2JlJywgcHJvYmVzLmFkZHJlc3Nfb2ZfKCksICdsaXN0JyldXG4rXG4gZGVmIGFkZHJfcmFuZ2VfdG9fZGljdChhZGRyX3JhbmdlKTpcbiAgICAgcmV0dXJuIHRvX2RpY3QoYWRkcl9yYW5nZSwgW1xuICAgICAgICAgWydzdGFydCcsIGludF0sXG5AQCAtMTk5LDYgKzIzMCw3IEBAIGRlZiBkYW1vbl9jdHhfdG9fZGljdChjdHgpOlxuICAgICByZXR1cm4gdG9fZGljdChjdHgsIFtcbiAgICAgICAgIFsnb3BzJywgb3BzX3RvX2RpY3RdLFxuICAgICAgICAgWydhdHRycycsIGF0dHJzX3RvX2RpY3RdLFxuKyAgICAgICAgWydwcm9iZXMnLCBwcm9iZXNfdG9fbGlzdF0sXG4gICAgICAgICBbJ2FkYXB0aXZlX3RhcmdldHMnLCB0YXJnZXRzX3RvX2xpc3RdLFxuICAgICAgICAgWydzY2hlbWVzJywgc2NoZW1lc190b19saXN0XSxcbiAgICAgICAgIFsncGF1c2UnLCBib29sXSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5XG5pbmRleCA4OGEyNjQyMmZmNDRjLi42NmM4MjYxODkzMjBkIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5XG5AQCAtMTc4LDYgKzE3OCwyNCBAQCBkZWYgYXNzZXJ0X21vbml0b3JpbmdfYXR0cnNfY29tbWl0dGVkKGF0dHJzLCBkdW1wKTpcbiAgICAgYXNzZXJ0X3RydWUoZHVtcFsnbWF4X25yX3JlZ2lvbnMnXSA9PSBhdHRycy5tYXhfbnJfcmVnaW9ucyxcbiAgICAgICAgICAgICAgICAgJ21heF9ucl9yZWdpb25zJywgZHVtcClcbiBcbitkZWYgYXNzZXJ0X2RhbW9uX2ZpbHRlcnNfY29tbWl0dGVkKGZpbHRlcnMsIGR1bXApOlxuKyAgICBhc3NlcnRfdHJ1ZShsZW4oZHVtcCkgPT0gbGVuKGZpbHRlcnMuZmlsdGVycyksICdwcm9iZSBmaWx0ZXJzJywgZHVtcClcbisgICAgZm9yIGlkeCwgZGFtb25fZmlsdGVyIGluIGVudW1lcmF0ZShmaWx0ZXJzLmZpbHRlcnMpOlxuKyAgICAgICAgZmlsdGVyX2R1bXAgPSBkdW1wW2lkeF1cbisgICAgICAgIGFzc2VydF90cnVlKGZpbHRlcl9kdW1wWyd0eXBlJ10gPT0gZGFtb25fZmlsdGVyLnR5cGVfLCAndHlwZScsXG4rICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfZHVtcClcbisgICAgICAgIGFzc2VydF90cnVlKGZpbHRlcl9kdW1wWydtYXRjaGluZyddID09IGRhbW9uX2ZpbHRlci5tYXRjaGluZyxcbisgICAgICAgICAgICAgICAgICAgICdtYXRjaGluZycsIGZpbHRlcl9kdW1wKVxuKyAgICAgICAgYXNzZXJ0X3RydWUoZmlsdGVyX2R1bXBbJ2FsbG93J10gPT0gZGFtb25fZmlsdGVyLmFsbG93LCAnYWxsb3cnLFxuKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2R1bXApXG4rXG4rZGVmIGFzc2VydF9wcm9iZXNfY29tbWl0dGVkKHByb2JlcywgZHVtcCk6XG4rICAgIGFzc2VydF90cnVlKGxlbihkdW1wKSA9PSBsZW4ocHJvYmVzLnByb2JlcyksICdwcm9iZXMgbGVuZ3RoJywgZHVtcClcbisgICAgZm9yIGlkeCwgcHJvYmUgaW4gZW51bWVyYXRlKHByb2Jlcy5wcm9iZXMpOlxuKyAgICAgICAgcHJvYmVfZHVtcCA9IGR1bXBbaWR4XVxuKyAgICAgICAgYXNzZXJ0X3RydWUocHJvYmUud2VpZ2h0ID09IHByb2JlX2R1bXBbJ3dlaWdodCddLCAnd2VpZ2h0JywgcHJvYmVfZHVtcClcbisgICAgICAgIGFzc2VydF9kYW1vbl9maWx0ZXJzX2NvbW1pdHRlZChwcm9iZS5maWx0ZXJzLCBwcm9iZV9kdW1wWydmaWx0ZXJzJ10pXG4rXG4gZGVmIGFzc2VydF9tb25pdG9yaW5nX3RhcmdldF9jb21taXR0ZWQodGFyZ2V0LCBkdW1wKTpcbiAgICAgIyB0YXJnZXQucGlkIGlzIHRoZSBwaWQgXCJudW1iZXJcIiwgd2hpbGUgZHVtcFsncGlkJ10gaXMgJ3N0cnVjdCBwaWQnXG4gICAgICMgcG9pbnRlciwgYW5kIGhlbmNlIGNhbm5vdCBiZSBjb21wYXJlZC5cbkBAIC0xOTYsNiArMjE0LDcgQEAgZGVmIGFzc2VydF9jdHhfY29tbWl0dGVkKGN0eCwgZHVtcCk6XG4gICAgICAgICAgICAgfVxuICAgICBhc3NlcnRfdHJ1ZShkdW1wWydvcHMnXVsnaWQnXSA9PSBvcHNfdmFsW2N0eC5vcHNdLCAnb3BzX2lkJywgZHVtcClcbiAgICAgYXNzZXJ0X21vbml0b3JpbmdfYXR0cnNfY29tbWl0dGVkKGN0eC5tb25pdG9yaW5nX2F0dHJzLCBkdW1wWydhdHRycyddKVxuKyAgICBhc3NlcnRfcHJvYmVzX2NvbW1pdHRlZChjdHgubW9uaXRvcmluZ19hdHRycy5wcm9iZXMsIGR1bXBbJ3Byb2JlcyddKVxuICAgICBhc3NlcnRfbW9uaXRvcmluZ190YXJnZXRzX2NvbW1pdHRlZChjdHgudGFyZ2V0cywgZHVtcFsnYWRhcHRpdmVfdGFyZ2V0cyddKVxuICAgICBhc3NlcnRfc2NoZW1lc19jb21taXR0ZWQoY3R4LnNjaGVtZXMsIGR1bXBbJ3NjaGVtZXMnXSlcbiAgICAgYXNzZXJ0X3RydWUoZHVtcFsncGF1c2UnXSA9PSBjdHgucGF1c2UsICdwYXVzZScsIGR1bXApXG5AQCAtMzAwLDcgKzMxOSwyMSBAQCBkZWYgbWFpbigpOlxuICAgICAgICAgICAgICAgICBpbnRlcnZhbHNfZ29hbD1fZGFtb25fc3lzZnMuSW50ZXJ2YWxzR29hbChcbiAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc19icD00MDAsIGFnZ3JzPTMsIG1pbl9zYW1wbGVfdXM9NTAwMCxcbiAgICAgICAgICAgICAgICAgICAgIG1heF9zYW1wbGVfdXM9MTAwMDAwMDApLFxuLSAgICAgICAgICAgICAgICB1cGRhdGVfdXM9MjAwMDAwMCksXG4rICAgICAgICAgICAgICAgIHVwZGF0ZV91cz0yMDAwMDAwLFxuKyAgICAgICAgICAgICAgICBwcm9iZXM9X2RhbW9uX3N5c2ZzLkRhbW9uUHJvYmVzKFxuKyAgICAgICAgICAgICAgICAgICAgcHJvYmVzPVtfZGFtb25fc3lzZnMuRGFtb25Qcm9iZShcbisgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ9NDIsXG4rICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycz1fZGFtb25fc3lzZnMuRGFtb25GaWx0ZXJzKFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzPVtcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYW1vbl9zeXNmcy5EYW1vbkZpbHRlcihcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlXz0nYW5vbicsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmc9VHJ1ZSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdz1UcnVlLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4rICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgIHNjaGVtZXM9W19kYW1vbl9zeXNmcy5EYW1vcyhcbiAgICAgICAgICAgICAgICAgYWN0aW9uPSdwYWdlb3V0JyxcbiAgICAgICAgICAgICAgICAgYWNjZXNzX3BhdHRlcm49X2RhbW9uX3N5c2ZzLkRhbW9zQWNjZXNzUGF0dGVybihcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjQ1OjM2LjcyMjM5MDg4MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1MzcyOTY3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBkaWZmIGlzIHByZXR0eSBmb2N1c2VkLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byBhIGZldyB0ZXN0LXJlbGF0ZWQgZmlsZXM6IGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLCBhbmQgYSBmZXcgcHl0aG9uIHNjcmlwdHMgaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9gIGRpcmVjdG9yeTogYF9kYW1vbl9zeXNmcy5weWAsIGBkcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5YCwgYW5kIGBzeXNmcy5weWAuIFRoYXQncyBhIGdvb2Qgc2lnbiwgc3VnZ2VzdHMgYSBsaW1pdGVkIHNjb3BlLlxuXG5NeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyAqaXMqIHRoZSBlbnRpcmUgc2NvcGUgb2YgdGhlIGNvbW1pdC4gRXhwZXJpZW5jZSBoYXMgdGF1Z2h0IG1lIHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdpdGggREFNT04gd2hlcmUgaW50ZXJhY3Rpb25zIGNhbiBiZSBzdWJ0bGUuIEkgbmVlZCB0byBlbGltaW5hdGUgdGhlIHBvc3NpYmlsaXR5IG9mIGFueSB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBvciBoaWRkZW4gbW9kaWZpY2F0aW9ucy5cblxuU2luY2UgSSBoYXZlIHRoZSBmdWxsIGRpZmYsIEkgZG9uJ3QgbmVlZCB0byBnbyBkaWdnaW5nIGZvciBpdCwgYnV0IGp1c3QgdG8gbWFrZSBzdXJlLCBJIHdpbGwgZG91YmxlIGNoZWNrIHRoYXQgdGhlcmUgaXMgbm90aGluZyBlbHNlIGNoYW5nZWQgaW4gdGhpcyBjb21taXQuXG5JZiBuZWVkZWQsIEknbGwgZmFsbCBiYWNrIHRvIGBnaXQgZ3JlcGAgb3IgbWF5YmUgZXZlbiBqdXN0IHJlYWQgdGhyb3VnaCB0aGUgZGlmZiBpZiBpdCdzIG5vdCB0b28gbG9uZywgYnV0IGdpdmVuIHRoZSBsaW1pdGVkIGxpc3RpbmcsIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIHF1aWNrIHZlcmlmaWNhdGlvbi5cbkkgbWlnaHQgZXZlbiBnbGFuY2UgYXQgYG1tL2RhbW9uL3Rlc3RzL2AgbW9yZSBicm9hZGx5LCBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGFkamFjZW50IHdhcyB0b3VjaGVkLiBJdCdzIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGJlZm9yZSBJIGRpZyBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIEtVbml0IHRlc3RzIGFuZCB0aGUgc3lzZnMgdGVzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMDgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo0NTo0MS4yNTk2OTAzN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA1MzM4NjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTMwNz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTMxOC1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTMxOTpzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTMyMC1cXHRcXHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpkc3QsIHN0cnVjdCBkYW1vbl9maWx0ZXIgKnNyYylcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMzM0LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMzM1OnN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlcihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzMzYte1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzNDItXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEzNDM6XFx0ZGFtb25fdGVzdF9jb21taXRfZmlsdGVyX2Zvcih0ZXN0LCBcXHUwMDI2ZHN0LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMzQ0LVxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9uX2ZpbHRlcil7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTM0OC1cXHRcXHRcXHR9KTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTM0OTpcXHRkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHRlc3QsIFxcdTAwMjZkc3QsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzNTAtXFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb25fZmlsdGVyKXtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xODIzPXN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTg0Ni1cXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X3RhcmdldF9yZWdpb25zKSxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTg0NzpcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlciksXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE4NDgtXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXMpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo0NTo0Mi44NjUwMzMwNDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NjkwMTYzMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIFBhdGNoJ3MgRnV6emluZyBXb3J0aGluZXNzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgY2hhbmdlcyB0aGF0IGFyZSByZWxldmFudCBmb3IgZnV6emluZy4gVGhlIGd1aWRlbGluZXMgY2xlYXJseSBzdGF0ZSB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBmaWxlcywgY29tbWVudHMsIGFuZCBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzIGxpa2UgbG9nZ2luZyBzaG91bGQgYmUgZXhjbHVkZWQuIEFsc28gZXhjbHVkZWQgYXJlIGNoYW5nZXMgdG8gY29uc3RhbnRzIHdpdGhvdXQgaW1wYWN0aW5nIGV4ZWN1dGlvbiBmbG93LCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBjb2RlIHRoYXQgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUsIGFuZCB0ZWFyZG93biBjYWxsYmFja3MuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vYCBhbmQgYG1tL2RhbW9uL3Rlc3RzL2AuIEFuZCBjb25zaWRlcmluZyB0aGUgbmF0dXJlIG9mIEtVbml0IHRlc3RzIGFuZCBzZWxmdGVzdHMsIHRoaXMgaXMgdGhlIGFyZWEgdG8gYXNzZXNzIG1vc3QgY2xvc2VseS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVzZSB0ZXN0cyBpbnRyb2R1Y2UgbmV3IHJ1bnRpbWUga2VybmVsIGZ1bmN0aW9uYWxpdHkgb3IgY2hhbmdlIGFueSByZWFjaGFibGUgcnVudGltZSBsb2dpYyB0aGF0IHdvdWxkIGJlIHJlbGV2YW50IGZvciBmdXp6aW5nLlxuXG5NeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgS1VuaXQgdGVzdHMsIGxpa2UgdGhvc2UgaW4gYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAsIGFuZCBzZWxmdGVzdHMsIGZvdW5kIGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvLi4uYCBkaXJlY3RvcnksIGFyZSAqbm90KiBpbnRlbmRlZCB0byBtb2RpZnkgY29yZSBrZXJuZWwgbG9naWMgaW4gYSB3YXkgdGhhdCBpbnRyb2R1Y2VzIG5ldyBhdHRhY2sgc3VyZmFjZXMgZm9yIGZ1enppbmcuIEtVbml0IHRlc3RzIGFyZSBnZW5lcmFsbHkgZXhlY3V0ZWQgb25jZSBvbiBib290IG9yIHZpYSBkZWJ1Z2ZzLCB3aGlsZSBzZWxmdGVzdHMgYXJlIHVzZXItc3BhY2Ugc2NyaXB0cy4gTmVpdGhlciB3aWxsIGNoYW5nZSB0aGUgZnVuZGFtZW50YWwga2VybmVsIGJlaGF2aW9yIGluIGFuIGV4cGxvaXRhYmxlIHdheS5cblxuTm93LCBhIGNydWNpYWwgc3RlcDogSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgZGlmZiB0byBjb25maXJtIHRoZXJlIGFyZW4ndCAqYW55KiBtb2RpZmljYXRpb25zIG91dHNpZGUgb2YgdGhlc2UgdGVzdCBkaXJlY3Rvcmllcy4gTGV0J3Mgc2VlLi4uIHRoZSBkaWZmIG9ubHkgaW5jbHVkZXMgY2hhbmdlcyB0byBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weWAsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5YCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weWAuXG5cblRoZXJlZm9yZSwgdGhlcmUgYXJlICpubyogY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYywgc3VjaCBhcyBpbiBgbW0vZGFtb24vY29yZS5jYCBvciBgbW0vZGFtb24vc3lzZnMuY2AuIFRoaXMgbWVhbnMgdGhlIHBhdGNoIGlzICpzb2xlbHkqIGFkZGluZyB1bml0IHRlc3RzIChLVW5pdCkgYW5kIHVwZGF0aW5nIHNlbGZ0ZXN0IHB5dGhvbiBzY3JpcHRzLiBUaGVzZSBhcmUgbm90IGNvbnNpZGVyZWQgZnVuY3Rpb25hbCBjaGFuZ2VzIHdoaWNoIGludHJvZHVjZSBhZGRpdGlvbmFsIGF0dGFjayBzdXJmYWNlIG9yIGV4cGxvaXRhYmxlIGtlcm5lbCBiZWhhdmlvciB0aGF0IGlzIGFwcHJvcHJpYXRlIGZvciBmdXp6aW5nLlxuXG5UaHVzLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgdGhlIHJlc3VsdHM6IGBXb3J0aEZ1enppbmc6IGZhbHNlYCwgd2l0aCBlbXB0eSBsaXN0cyBmb3IgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYC4gTXkgcmVhc29uaW5nIGlzIGNvbmNpc2U6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyB1bml0IHRlc3QgY2FzZXMgaW4gbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGFuZCB1cGRhdGVzIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi8uIEl0IGRvZXMgbm90IG1ha2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGtlcm5lbCBsb2dpYyBvciBydW50aW1lIGJlaGF2aW9yLlwiXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMDcsIk91dHB1dFRva2VucyI6ODAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NDU6NDkuNTU1MTk4NzQyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgS1VuaXQgdGVzdCBjYXNlcyBpbiBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYW5kIHVwZGF0ZXMgc2VsZnRlc3Qgc2NyaXB0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi8uIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgZnVuY3Rpb25hbCBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgS1VuaXQgdGVzdCBjYXNlcyBpbiBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYW5kIHVwZGF0ZXMgc2VsZnRlc3Qgc2NyaXB0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi8uIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgZnVuY3Rpb25hbCBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo0NTo0OS41NTUyMjE4OTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowqkj4n[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 09:43:57 +0000 UTC FinishedAt: 2026-09-03 09:45:51 +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+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIEtVbml0IHRlc3QgY2FzZXMgaW4gbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGFuZCB1cGRhdGVzIHNlbGZ0ZXN0IHNjcmlwdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGZ1bmN0aW9uYWwga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY4ODVkYTBkNmMxMTE3OWQ5ZTcwNmY3YzdkMmZkODFjMzIwZWFhZjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDA5OjQ1OjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuaW5kZXggYWYyNmIzZDYwOTU3Yi4uZjI1NjhmYmE1NTJlYyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5AQCAtMTMxNiw2ICYjNDM7MTMxNiwxMjggQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdCh1bnNpZ25lZCBsb25nW11bMl0pIHt7MywgOH0sIHs4LCAxMH19LCAyKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuJiM0MztcdFx0c3RydWN0IGRhbW9uX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpzcmMpXG4mIzQzO3tcbiYjNDM7XHRkYW1vbl9jb21taXRfZmlsdGVyKGRzdCwgc3JjKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZXR5cGUsIHNyYy1cdTAwM2V0eXBlKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZW1hdGNoaW5nLCBzcmMtXHUwMDNlbWF0Y2hpbmcpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlYWxsb3csIHNyYy1cdTAwM2VhbGxvdyk7XG4mIzQzO1x0c3dpdGNoIChzcmMtXHUwMDNldHlwZSkge1xuJiM0MztcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XG4mIzQzO1x0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZW1lbWNnX2lkLCBzcmMtXHUwMDNlbWVtY2dfaWQpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyKHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9maWx0ZXIgZHN0ID0ge1xuJiM0MztcdFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OLFxuJiM0MztcdFx0Lm1hdGNoaW5nID0gZmFsc2UsXG4mIzQzO1x0XHQuYWxsb3cgPSBmYWxzZSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHRlc3QsIFx1MDAyNmRzdCxcbiYjNDM7XHRcdFx0XHUwMDI2KHN0cnVjdCBkYW1vbl9maWx0ZXIpe1xuJiM0MztcdFx0XHQudHlwZSA9IERBTU9OX0ZJTFRFUl9UWVBFX0FOT04sXG4mIzQzO1x0XHRcdC5tYXRjaGluZyA9IHRydWUsXG4mIzQzO1x0XHRcdC5hbGxvdyA9IHRydWUsXG4mIzQzO1x0XHRcdH0pO1xuJiM0MztcdGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3IodGVzdCwgXHUwMDI2ZHN0LFxuJiM0MztcdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9uX2ZpbHRlcil7XG4mIzQzO1x0XHRcdC50eXBlID0gREFNT05fRklMVEVSX1RZUEVfTUVNQ0csXG4mIzQzO1x0XHRcdC5tYXRjaGluZyA9IGZhbHNlLFxuJiM0MztcdFx0XHQuYWxsb3cgPSBmYWxzZSxcbiYjNDM7XHRcdFx0Lm1lbWNnX2lkID0gMTIzLFxuJiM0MztcdFx0XHR9KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3Rlc3RfaGVscF9zZXR1cF9wcm9iZXModW5zaWduZWQgaW50IHdlaWdodHNbXSxcbiYjNDM7XHRcdGludCBucl93ZWlnaHRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuJiM0MztcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGN0eCA9IGRhbW9uX25ld19jdHgoKTtcbiYjNDM7XHRpZiAoIWN0eClcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3dlaWdodHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRwcm9iZSA9IGRhbW9uX25ld19wcm9iZSgpO1xuJiM0MztcdFx0aWYgKCFwcm9iZSkge1xuJiM0MztcdFx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHByb2JlLVx1MDAzZXdlaWdodCA9IHdlaWdodHNbaV07XG4mIzQzO1x0XHRkYW1vbl9hZGRfcHJvYmUoY3R4LCBwcm9iZSk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBjdHg7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuJiM0MztcdFx0dW5zaWduZWQgaW50IGRzdF93ZWlnaHRzW10sIGludCBucl9kc3RfcHJvYmVzLFxuJiM0MztcdFx0dW5zaWduZWQgaW50IHNyY193ZWlnaHRzW10sIGludCBucl9zcmNfcHJvYmVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX2N0eCAqZHN0LCAqc3JjO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3Byb2JlICpkc3RfcHJvYmUsICpzcmNfcHJvYmU7XG4mIzQzO1xuJiM0MztcdGRzdCA9IGRhbW9uX3Rlc3RfaGVscF9zZXR1cF9wcm9iZXMoZHN0X3dlaWdodHMsIG5yX2RzdF9wcm9iZXMpO1xuJiM0MztcdGlmICghZHN0KVxuJiM0MztcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtkc3QgYWxsb2MgZmFpbFwmIzM0Oyk7XG4mIzQzO1x0c3JjID0gZGFtb25fdGVzdF9oZWxwX3NldHVwX3Byb2JlcyhzcmNfd2VpZ2h0cywgbnJfc3JjX3Byb2Jlcyk7XG4mIzQzO1x0aWYgKCFzcmMpIHtcbiYjNDM7XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGRzdCk7XG4mIzQzO1x0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O3NyYyBhbGxvYyBmYWlsXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGRhbW9uX2NvbW1pdF9wcm9iZXMoZHN0LCBzcmMpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBlcnIsIDApO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRucl9kc3RfcHJvYmVzID0gMDtcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdClcbiYjNDM7XHRcdG5yX2RzdF9wcm9iZXMmIzQzOyYjNDM7O1xuJiM0MztcdG5yX3NyY19wcm9iZXMgPSAwO1xuJiM0MztcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHNyY19wcm9iZSwgc3JjKVxuJiM0MztcdFx0bnJfc3JjX3Byb2JlcyYjNDM7JiM0Mzs7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIG5yX2RzdF9wcm9iZXMsIG5yX3NyY19wcm9iZXMpO1xuJiM0MztcdGlmIChucl9kc3RfcHJvYmVzICE9IG5yX3NyY19wcm9iZXMpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRucl9kc3RfcHJvYmVzID0gMDtcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdCkge1xuJiM0MztcdFx0c3JjX3Byb2JlID0gZGFtb25fbnRoX3Byb2JlKG5yX2RzdF9wcm9iZXMsIHNyYyk7XG4mIzQzO1x0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc3JjX3Byb2JlLVx1MDAzZXdlaWdodCwgZHN0X3Byb2JlLVx1MDAzZXdlaWdodCk7XG4mIzQzO1x0XHRucl9kc3RfcHJvYmVzJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO291dDpcbiYjNDM7XHRkYW1vbl9kZXN0cm95X2N0eChkc3QpO1xuJiM0MztcdGRhbW9uX2Rlc3Ryb3lfY3R4KHNyYyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3Byb2JlcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4mIzQzO1x0XHRcdCh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXt9LCAwKTtcbiYjNDM7XHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4mIzQzO1x0XHRcdCh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXsxfSwgMSk7XG4mIzQzO1x0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuJiM0MztcdFx0XHQodW5zaWduZWQgaW50W10pe30sIDAsICh1bnNpZ25lZCBpbnRbXSl7MSwgMn0sIDIpO1xuJiM0MztcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbiYjNDM7XHRcdFx0KHVuc2lnbmVkIGludFtdKXsxfSwgMSwgKHVuc2lnbmVkIGludFtdKXsyfSwgMSk7XG4mIzQzO1x0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuJiM0MztcdFx0XHQodW5zaWduZWQgaW50W10pezF9LCAxLCAodW5zaWduZWQgaW50W10pezIsIDN9LCAyKTtcbiYjNDM7XHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4mIzQzO1x0XHRcdCh1bnNpZ25lZCBpbnRbXSl7MiwgM30sIDIsICh1bnNpZ25lZCBpbnRbXSl7MX0sIDEpO1xuJiM0MztcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbiYjNDM7XHRcdFx0KHVuc2lnbmVkIGludFtdKXsyLCAzfSwgMiwgKHVuc2lnbmVkIGludFtdKXt9LCAwKTtcbiYjNDM7XHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4mIzQzO1x0XHRcdCh1bnNpZ25lZCBpbnRbXSl7Mn0sIDEsICh1bnNpZ25lZCBpbnRbXSl7fSwgMCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfY3R4KHN0cnVjdCBrdW5pdCAqdGVzdClcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fY3R4ICpzcmMsICpkc3Q7XG5AQCAtMTcyMiw2ICYjNDM7MTg0NCw4IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7XG4gXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3BhZ2VvdXQpLFxuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9taWdyYXRlX2hvdCksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X3RhcmdldF9yZWdpb25zKSxcbiYjNDM7XHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlciksXG4mIzQzO1x0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXMpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF9jdHgpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3ZhbGlkX3Byb2JlX3BhcmFtcyksXG4gXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfZmlsdGVyX291dCksXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XG5pbmRleCBmNjA0YjdkNjUzMGIzLi5lNzA5NWMzMzY1MjQ1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHlcbkBAIC01NzAsNiAmIzQzOzU3MCwxMTcgQEAgY2xhc3MgSW50ZXJ2YWxzR29hbDpcbiAgICAgICAgICAgICByZXR1cm4gZXJyXG4gICAgICAgICByZXR1cm4gTm9uZVxuIFxuJiM0MztjbGFzcyBEYW1vbkZpbHRlcjpcbiYjNDM7ICAgIHR5cGVfID0gTm9uZVxuJiM0MzsgICAgbWF0Y2hpbmcgPSBOb25lXG4mIzQzOyAgICBhbGxvdyA9IE5vbmVcbiYjNDM7ICAgIGZpbHRlcnMgPSBOb25lXG4mIzQzOyAgICBwYXRoID0gTm9uZVxuJiM0MzsgICAgaWR4ID0gTm9uZVxuJiM0MztcbiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlXz0mIzM5O2Fub24mIzM5OywgbWF0Y2hpbmc9RmFsc2UsIGFsbG93PUZhbHNlLCBwYXRoPU5vbmUpOlxuJiM0MzsgICAgICAgIHNlbGYudHlwZV8gPSB0eXBlX1xuJiM0MzsgICAgICAgIHNlbGYubWF0Y2hpbmcgPSBtYXRjaGluZ1xuJiM0MzsgICAgICAgIHNlbGYuYWxsb3cgPSBhbGxvd1xuJiM0MzsgICAgICAgIHNlbGYucGF0aCA9IHBhdGhcbiYjNDM7XG4mIzQzOyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxuJiM0MzsgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5maWx0ZXJzLnN5c2ZzX2RpcigpLCAmIzM5OyVkJiMzOTsgJSBzZWxmLmlkeClcbiYjNDM7XG4mIzQzOyAgICBkZWYgc3RhZ2Uoc2VsZik6XG4mIzQzOyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTt0eXBlJiMzOTspLCBzZWxmLnR5cGVfKVxuJiM0MzsgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgcmV0dXJuIGVyclxuJiM0MzsgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUob3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICYjMzk7bWF0Y2hpbmcmIzM5OyksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAmIzM5O1kmIzM5OyBpZiBzZWxmLm1hdGNoaW5nIGVsc2UgJiMzOTtOJiMzOTspXG4mIzQzOyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICByZXR1cm4gZXJyXG4mIzQzOyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTthbGxvdyYjMzk7KSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICYjMzk7WSYjMzk7IGlmIHNlbGYuYWxsb3cgZWxzZSAmIzM5O04mIzM5OylcbiYjNDM7ICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIHJldHVybiBlcnJcbiYjNDM7ICAgICAgICBpZiBzZWxmLnR5cGVfID09ICYjMzk7bWVtY2cmIzM5OzpcbiYjNDM7ICAgICAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTtwYXRoJiMzOTspLCBzZWxmLnBhdGgpXG4mIzQzOyAgICAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgICAgIHJldHVybiBlcnJcbiYjNDM7ICAgICAgICByZXR1cm4gTm9uZVxuJiM0MztcbiYjNDM7Y2xhc3MgRGFtb25GaWx0ZXJzOlxuJiM0MzsgICAgZmlsdGVycyA9IE5vbmVcbiYjNDM7ICAgIHByb2JlID0gTm9uZVxuJiM0MztcbiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWx0ZXJzPU5vbmUpOlxuJiM0MzsgICAgICAgIGlmIGZpbHRlcnMgaXMgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgZmlsdGVycyA9IFtdXG4mIzQzOyAgICAgICAgc2VsZi5maWx0ZXJzID0gZmlsdGVyc1xuJiM0MzsgICAgICAgIGZvciBpZHgsIGZpbHRlciBpbiBlbnVtZXJhdGUoc2VsZi5maWx0ZXJzKTpcbiYjNDM7ICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMgPSBzZWxmXG4mIzQzOyAgICAgICAgICAgIGZpbHRlci5pZHggPSBpZHhcbiYjNDM7XG4mIzQzOyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxuJiM0MzsgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5wcm9iZS5zeXNmc19kaXIoKSwgJiMzOTtmaWx0ZXJzJiMzOTspXG4mIzQzO1xuJiM0MzsgICAgZGVmIHN0YWdlKHNlbGYpOlxuJiM0MzsgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUoXG4mIzQzOyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTtucl9maWx0ZXJzJiMzOTspLFxuJiM0MzsgICAgICAgICAgICAgICAgbGVuKHNlbGYuZmlsdGVycykpXG4mIzQzOyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICByZXR1cm4gZXJyXG4mIzQzOyAgICAgICAgZm9yIGZpbHRlciBpbiBzZWxmLmZpbHRlcnM6XG4mIzQzOyAgICAgICAgICAgIGVyciA9IGZpbHRlci5zdGFnZSgpXG4mIzQzOyAgICAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgICAgIHJldHVybiBlcnJcbiYjNDM7ICAgICAgICByZXR1cm4gTm9uZVxuJiM0MztcbiYjNDM7Y2xhc3MgRGFtb25Qcm9iZTpcbiYjNDM7ICAgIHdlaWdodCA9IE5vbmVcbiYjNDM7ICAgIGZpbHRlcnMgPSBOb25lXG4mIzQzOyAgICBwcm9iZXMgPSBOb25lXG4mIzQzOyAgICBpZHggPSBOb25lXG4mIzQzO1xuJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdlaWdodD0wLCBmaWx0ZXJzPU5vbmUpOlxuJiM0MzsgICAgICAgIHNlbGYud2VpZ2h0ID0gd2VpZ2h0XG4mIzQzOyAgICAgICAgaWYgZmlsdGVycyBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBmaWx0ZXJzID0gRGFtb25GaWx0ZXJzKClcbiYjNDM7ICAgICAgICBzZWxmLmZpbHRlcnMgPSBmaWx0ZXJzXG4mIzQzOyAgICAgICAgc2VsZi5maWx0ZXJzLnByb2JlID0gc2VsZlxuJiM0MztcbiYjNDM7ICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XG4mIzQzOyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLnByb2Jlcy5zeXNmc19kaXIoKSwgJiMzOTslZCYjMzk7ICUgc2VsZi5pZHgpXG4mIzQzO1xuJiM0MzsgICAgZGVmIHN0YWdlKHNlbGYpOlxuJiM0MzsgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUoXG4mIzQzOyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTt3ZWlnaHQmIzM5OyksICYjMzk7JWQmIzM5OyAlIHNlbGYud2VpZ2h0KVxuJiM0MzsgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgcmV0dXJuIGVyclxuJiM0MzsgICAgICAgIHJldHVybiBzZWxmLmZpbHRlcnMuc3RhZ2UoKVxuJiM0MztcbiYjNDM7Y2xhc3MgRGFtb25Qcm9iZXM6XG4mIzQzOyAgICBwcm9iZXMgPSBOb25lXG4mIzQzOyAgICBhdHRycyA9IE5vbmVcbiYjNDM7XG4mIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvYmVzPU5vbmUpOlxuJiM0MzsgICAgICAgIGlmIHByb2JlcyBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBwcm9iZXMgPSBbXVxuJiM0MzsgICAgICAgIHNlbGYucHJvYmVzID0gcHJvYmVzXG4mIzQzOyAgICAgICAgZm9yIGlkeCwgcHJvYmUgaW4gZW51bWVyYXRlKHNlbGYucHJvYmVzKTpcbiYjNDM7ICAgICAgICAgICAgcHJvYmUucHJvYmVzID0gc2VsZlxuJiM0MzsgICAgICAgICAgICBwcm9iZS5pZHggPSBpZHhcbiYjNDM7XG4mIzQzOyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxuJiM0MzsgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5hdHRycy5zeXNmc19kaXIoKSwgJiMzOTtwcm9iZXMmIzM5OylcbiYjNDM7XG4mIzQzOyAgICBkZWYgc3RhZ2Uoc2VsZik6XG4mIzQzOyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTtucl9wcm9iZXMmIzM5OyksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oc2VsZi5wcm9iZXMpKVxuJiM0MzsgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgcmV0dXJuIGVyclxuJiM0MzsgICAgICAgIGZvciBwcm9iZSBpbiBzZWxmLnByb2JlczpcbiYjNDM7ICAgICAgICAgICAgZXJyID0gcHJvYmUuc3RhZ2UoKVxuJiM0MzsgICAgICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gZXJyXG4mIzQzOyAgICAgICAgcmV0dXJuIE5vbmVcbiYjNDM7XG4gY2xhc3MgRGFtb25BdHRyczpcbiAgICAgc2FtcGxlX3VzID0gTm9uZVxuICAgICBhZ2dyX3VzID0gTm9uZVxuQEAgLTU3NywxMSAmIzQzOzY4OCwxMiBAQCBjbGFzcyBEYW1vbkF0dHJzOlxuICAgICB1cGRhdGVfdXMgPSBOb25lXG4gICAgIG1pbl9ucl9yZWdpb25zID0gTm9uZVxuICAgICBtYXhfbnJfcmVnaW9ucyA9IE5vbmVcbiYjNDM7ICAgIHByb2JlcyA9IE5vbmVcbiAgICAgY29udGV4dCA9IE5vbmVcbiBcbiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNhbXBsZV91cz01MDAwLCBhZ2dyX3VzPTEwMDAwMCxcbiAgICAgICAgICAgICAgICAgIGludGVydmFsc19nb2FsPU5vbmUsIHVwZGF0ZV91cz0xMDAwMDAwLCBtaW5fbnJfcmVnaW9ucz0xMCxcbi0gICAgICAgICAgICAgICAgIG1heF9ucl9yZWdpb25zPTEwMDApOlxuJiM0MzsgICAgICAgICAgICAgICAgIG1heF9ucl9yZWdpb25zPTEwMDAsIHByb2Jlcz1Ob25lKTpcbiAgICAgICAgIHNlbGYuc2FtcGxlX3VzID0gc2FtcGxlX3VzXG4gICAgICAgICBzZWxmLmFnZ3JfdXMgPSBhZ2dyX3VzXG4gICAgICAgICBpZiBpbnRlcnZhbHNfZ29hbCBpcyBOb25lOlxuQEAgLTU5MSw2ICYjNDM7NzAzLDEwIEBAIGNsYXNzIERhbW9uQXR0cnM6XG4gICAgICAgICBzZWxmLnVwZGF0ZV91cyA9IHVwZGF0ZV91c1xuICAgICAgICAgc2VsZi5taW5fbnJfcmVnaW9ucyA9IG1pbl9ucl9yZWdpb25zXG4gICAgICAgICBzZWxmLm1heF9ucl9yZWdpb25zID0gbWF4X25yX3JlZ2lvbnNcbiYjNDM7ICAgICAgICBpZiBwcm9iZXMgaXMgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgcHJvYmVzID0gRGFtb25Qcm9iZXMoKVxuJiM0MzsgICAgICAgIHNlbGYucHJvYmVzID0gcHJvYmVzXG4mIzQzOyAgICAgICAgc2VsZi5wcm9iZXMuYXR0cnMgPSBzZWxmXG4gXG4gICAgIGRlZiBpbnRlcnZhbF9zeXNmc19kaXIoc2VsZik6XG4gICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJiMzOTttb25pdG9yaW5nX2F0dHJzJiMzOTssXG5AQCAtNjAwLDYgJiM0Mzs3MTYsOSBAQCBjbGFzcyBEYW1vbkF0dHJzOlxuICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmNvbnRleHQuc3lzZnNfZGlyKCksICYjMzk7bW9uaXRvcmluZ19hdHRycyYjMzk7LFxuICAgICAgICAgICAgICAgICAmIzM5O25yX3JlZ2lvbnMmIzM5OylcbiBcbiYjNDM7ICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XG4mIzQzOyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmNvbnRleHQuc3lzZnNfZGlyKCksICYjMzk7bW9uaXRvcmluZ19hdHRycyYjMzk7KVxuJiM0MztcbiAgICAgZGVmIHN0YWdlKHNlbGYpOlxuICAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5pbnRlcnZhbF9zeXNmc19kaXIoKSwgJiMzOTtzYW1wbGVfdXMmIzM5OyksXG4gICAgICAgICAgICAgICAgIHNlbGYuc2FtcGxlX3VzKVxuQEAgLTYyOSw2ICYjNDM7NzQ4LDEwIEBAIGNsYXNzIERhbW9uQXR0cnM6XG4gICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4gICAgICAgICAgICAgcmV0dXJuIGVyclxuIFxuJiM0MzsgICAgICAgIGVyciA9IHNlbGYucHJvYmVzLnN0YWdlKClcbiYjNDM7ICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIHJldHVybiBlcnJcbiYjNDM7XG4gY2xhc3MgRGFtb25DdHg6XG4gICAgIG9wcyA9IE5vbmVcbiAgICAgbW9uaXRvcmluZ19hdHRycyA9IE5vbmVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weVxuaW5kZXggMDk1NTJlOTFiYzc4Mi4uNDYyMjA0NmZkMDExOCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlcbkBAIC00OCw2ICYjNDM7NDgsMzcgQEAgZGVmIGF0dHJzX3RvX2RpY3QoYXR0cnMpOlxuICAgICAgICAgWyYjMzk7bWF4X25yX3JlZ2lvbnMmIzM5OywgaW50XSxcbiAgICAgICAgIF0pXG4gXG4mIzQzO2RlZiBmaWx0ZXJfdG9fZGljdChkYW1vbl9maWx0ZXIpOlxuJiM0MzsgICAgZmlsdGVyX3R5cGVfa2V5d29yZCA9IHtcbiYjNDM7ICAgICAgICAgICAgMDogJiMzOTthbm9uJiMzOTssXG4mIzQzOyAgICAgICAgICAgIDE6ICYjMzk7bWVtY2cmIzM5OyxcbiYjNDM7ICAgICAgICAgICAgfVxuJiM0MzsgICAgZGljdF8gPSB7XG4mIzQzOyAgICAgICAgICAgICYjMzk7dHlwZSYjMzk7OiBmaWx0ZXJfdHlwZV9rZXl3b3JkW2ludChkYW1vbl9maWx0ZXIudHlwZSldLFxuJiM0MzsgICAgICAgICAgICAmIzM5O21hdGNoaW5nJiMzOTs6IGJvb2woZGFtb25fZmlsdGVyLm1hdGNoaW5nKSxcbiYjNDM7ICAgICAgICAgICAgJiMzOTthbGxvdyYjMzk7OiBib29sKGRhbW9uX2ZpbHRlci5hbGxvdyksXG4mIzQzOyAgICAgICAgICAgIH1cbiYjNDM7ICAgIHR5cGVfID0gZGljdF9bJiMzOTt0eXBlJiMzOTtdXG4mIzQzOyAgICBpZiB0eXBlXyA9PSAmIzM5O21lbWNnJiMzOTs6XG4mIzQzOyAgICAgICAgZGljdF9bJiMzOTttZW1jZ19pZCYjMzk7XSA9IGludChkYW1vbl9maWx0ZXIubWVtY2dfaWQpXG4mIzQzOyAgICByZXR1cm4gZGljdF9cbiYjNDM7XG4mIzQzO2RlZiBmaWx0ZXJzX3RvX2xpc3QoZmlsdGVycyk6XG4mIzQzOyAgICByZXR1cm4gW2ZpbHRlcl90b19kaWN0KGYpXG4mIzQzOyAgICAgICAgICAgIGZvciBmIGluIGxpc3RfZm9yX2VhY2hfZW50cnkoXG4mIzQzOyAgICAgICAgICAgICAgICAmIzM5O3N0cnVjdCBkYW1vbl9maWx0ZXImIzM5OywgZmlsdGVycy5hZGRyZXNzX29mXygpLCAmIzM5O2xpc3QmIzM5OyldXG4mIzQzO1xuJiM0MztkZWYgcHJvYmVfdG9fZGljdChwcm9iZSk6XG4mIzQzOyAgICByZXR1cm4gdG9fZGljdChwcm9iZSwgW1xuJiM0MzsgICAgICAgIFsmIzM5O3dlaWdodCYjMzk7LCBpbnRdLFxuJiM0MzsgICAgICAgIFsmIzM5O2ZpbHRlcnMmIzM5OywgZmlsdGVyc190b19saXN0XSxcbiYjNDM7ICAgICAgICBdKVxuJiM0MztcbiYjNDM7ZGVmIHByb2Jlc190b19saXN0KHByb2Jlcyk6XG4mIzQzOyAgICByZXR1cm4gW3Byb2JlX3RvX2RpY3QocClcbiYjNDM7ICAgICAgICAgICAgZm9yIHAgaW4gbGlzdF9mb3JfZWFjaF9lbnRyeShcbiYjNDM7ICAgICAgICAgICAgICAgICYjMzk7c3RydWN0IGRhbW9uX3Byb2JlJiMzOTssIHByb2Jlcy5hZGRyZXNzX29mXygpLCAmIzM5O2xpc3QmIzM5OyldXG4mIzQzO1xuIGRlZiBhZGRyX3JhbmdlX3RvX2RpY3QoYWRkcl9yYW5nZSk6XG4gICAgIHJldHVybiB0b19kaWN0KGFkZHJfcmFuZ2UsIFtcbiAgICAgICAgIFsmIzM5O3N0YXJ0JiMzOTssIGludF0sXG5AQCAtMTk5LDYgJiM0MzsyMzAsNyBAQCBkZWYgZGFtb25fY3R4X3RvX2RpY3QoY3R4KTpcbiAgICAgcmV0dXJuIHRvX2RpY3QoY3R4LCBbXG4gICAgICAgICBbJiMzOTtvcHMmIzM5Oywgb3BzX3RvX2RpY3RdLFxuICAgICAgICAgWyYjMzk7YXR0cnMmIzM5OywgYXR0cnNfdG9fZGljdF0sXG4mIzQzOyAgICAgICAgWyYjMzk7cHJvYmVzJiMzOTssIHByb2Jlc190b19saXN0XSxcbiAgICAgICAgIFsmIzM5O2FkYXB0aXZlX3RhcmdldHMmIzM5OywgdGFyZ2V0c190b19saXN0XSxcbiAgICAgICAgIFsmIzM5O3NjaGVtZXMmIzM5Oywgc2NoZW1lc190b19saXN0XSxcbiAgICAgICAgIFsmIzM5O3BhdXNlJiMzOTssIGJvb2xdLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcbmluZGV4IDg4YTI2NDIyZmY0NGMuLjY2YzgyNjE4OTMyMGQgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcbkBAIC0xNzgsNiAmIzQzOzE3OCwyNCBAQCBkZWYgYXNzZXJ0X21vbml0b3JpbmdfYXR0cnNfY29tbWl0dGVkKGF0dHJzLCBkdW1wKTpcbiAgICAgYXNzZXJ0X3RydWUoZHVtcFsmIzM5O21heF9ucl9yZWdpb25zJiMzOTtdID09IGF0dHJzLm1heF9ucl9yZWdpb25zLFxuICAgICAgICAgICAgICAgICAmIzM5O21heF9ucl9yZWdpb25zJiMzOTssIGR1bXApXG4gXG4mIzQzO2RlZiBhc3NlcnRfZGFtb25fZmlsdGVyc19jb21taXR0ZWQoZmlsdGVycywgZHVtcCk6XG4mIzQzOyAgICBhc3NlcnRfdHJ1ZShsZW4oZHVtcCkgPT0gbGVuKGZpbHRlcnMuZmlsdGVycyksICYjMzk7cHJvYmUgZmlsdGVycyYjMzk7LCBkdW1wKVxuJiM0MzsgICAgZm9yIGlkeCwgZGFtb25fZmlsdGVyIGluIGVudW1lcmF0ZShmaWx0ZXJzLmZpbHRlcnMpOlxuJiM0MzsgICAgICAgIGZpbHRlcl9kdW1wID0gZHVtcFtpZHhdXG4mIzQzOyAgICAgICAgYXNzZXJ0X3RydWUoZmlsdGVyX2R1bXBbJiMzOTt0eXBlJiMzOTtdID09IGRhbW9uX2ZpbHRlci50eXBlXywgJiMzOTt0eXBlJiMzOTssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2R1bXApXG4mIzQzOyAgICAgICAgYXNzZXJ0X3RydWUoZmlsdGVyX2R1bXBbJiMzOTttYXRjaGluZyYjMzk7XSA9PSBkYW1vbl9maWx0ZXIubWF0Y2hpbmcsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgJiMzOTttYXRjaGluZyYjMzk7LCBmaWx0ZXJfZHVtcClcbiYjNDM7ICAgICAgICBhc3NlcnRfdHJ1ZShmaWx0ZXJfZHVtcFsmIzM5O2FsbG93JiMzOTtdID09IGRhbW9uX2ZpbHRlci5hbGxvdywgJiMzOTthbGxvdyYjMzk7LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9kdW1wKVxuJiM0MztcbiYjNDM7ZGVmIGFzc2VydF9wcm9iZXNfY29tbWl0dGVkKHByb2JlcywgZHVtcCk6XG4mIzQzOyAgICBhc3NlcnRfdHJ1ZShsZW4oZHVtcCkgPT0gbGVuKHByb2Jlcy5wcm9iZXMpLCAmIzM5O3Byb2JlcyBsZW5ndGgmIzM5OywgZHVtcClcbiYjNDM7ICAgIGZvciBpZHgsIHByb2JlIGluIGVudW1lcmF0ZShwcm9iZXMucHJvYmVzKTpcbiYjNDM7ICAgICAgICBwcm9iZV9kdW1wID0gZHVtcFtpZHhdXG4mIzQzOyAgICAgICAgYXNzZXJ0X3RydWUocHJvYmUud2VpZ2h0ID09IHByb2JlX2R1bXBbJiMzOTt3ZWlnaHQmIzM5O10sICYjMzk7d2VpZ2h0JiMzOTssIHByb2JlX2R1bXApXG4mIzQzOyAgICAgICAgYXNzZXJ0X2RhbW9uX2ZpbHRlcnNfY29tbWl0dGVkKHByb2JlLmZpbHRlcnMsIHByb2JlX2R1bXBbJiMzOTtmaWx0ZXJzJiMzOTtdKVxuJiM0MztcbiBkZWYgYXNzZXJ0X21vbml0b3JpbmdfdGFyZ2V0X2NvbW1pdHRlZCh0YXJnZXQsIGR1bXApOlxuICAgICAjIHRhcmdldC5waWQgaXMgdGhlIHBpZCBcJiMzNDtudW1iZXJcJiMzNDssIHdoaWxlIGR1bXBbJiMzOTtwaWQmIzM5O10gaXMgJiMzOTtzdHJ1Y3QgcGlkJiMzOTtcbiAgICAgIyBwb2ludGVyLCBhbmQgaGVuY2UgY2Fubm90IGJlIGNvbXBhcmVkLlxuQEAgLTE5Niw2ICYjNDM7MjE0LDcgQEAgZGVmIGFzc2VydF9jdHhfY29tbWl0dGVkKGN0eCwgZHVtcCk6XG4gICAgICAgICAgICAgfVxuICAgICBhc3NlcnRfdHJ1ZShkdW1wWyYjMzk7b3BzJiMzOTtdWyYjMzk7aWQmIzM5O10gPT0gb3BzX3ZhbFtjdHgub3BzXSwgJiMzOTtvcHNfaWQmIzM5OywgZHVtcClcbiAgICAgYXNzZXJ0X21vbml0b3JpbmdfYXR0cnNfY29tbWl0dGVkKGN0eC5tb25pdG9yaW5nX2F0dHJzLCBkdW1wWyYjMzk7YXR0cnMmIzM5O10pXG4mIzQzOyAgICBhc3NlcnRfcHJvYmVzX2NvbW1pdHRlZChjdHgubW9uaXRvcmluZ19hdHRycy5wcm9iZXMsIGR1bXBbJiMzOTtwcm9iZXMmIzM5O10pXG4gICAgIGFzc2VydF9tb25pdG9yaW5nX3RhcmdldHNfY29tbWl0dGVkKGN0eC50YXJnZXRzLCBkdW1wWyYjMzk7YWRhcHRpdmVfdGFyZ2V0cyYjMzk7XSlcbiAgICAgYXNzZXJ0X3NjaGVtZXNfY29tbWl0dGVkKGN0eC5zY2hlbWVzLCBkdW1wWyYjMzk7c2NoZW1lcyYjMzk7XSlcbiAgICAgYXNzZXJ0X3RydWUoZHVtcFsmIzM5O3BhdXNlJiMzOTtdID09IGN0eC5wYXVzZSwgJiMzOTtwYXVzZSYjMzk7LCBkdW1wKVxuQEAgLTMwMCw3ICYjNDM7MzE5LDIxIEBAIGRlZiBtYWluKCk6XG4gICAgICAgICAgICAgICAgIGludGVydmFsc19nb2FsPV9kYW1vbl9zeXNmcy5JbnRlcnZhbHNHb2FsKFxuICAgICAgICAgICAgICAgICAgICAgYWNjZXNzX2JwPTQwMCwgYWdncnM9MywgbWluX3NhbXBsZV91cz01MDAwLFxuICAgICAgICAgICAgICAgICAgICAgbWF4X3NhbXBsZV91cz0xMDAwMDAwMCksXG4tICAgICAgICAgICAgICAgIHVwZGF0ZV91cz0yMDAwMDAwKSxcbiYjNDM7ICAgICAgICAgICAgICAgIHVwZGF0ZV91cz0yMDAwMDAwLFxuJiM0MzsgICAgICAgICAgICAgICAgcHJvYmVzPV9kYW1vbl9zeXNmcy5EYW1vblByb2JlcyhcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBwcm9iZXM9W19kYW1vbl9zeXNmcy5EYW1vblByb2JlKFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ9NDIsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnM9X2RhbW9uX3N5c2ZzLkRhbW9uRmlsdGVycyhcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnM9W1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYW1vbl9zeXNmcy5EYW1vbkZpbHRlcihcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV89JiMzOTthbm9uJiMzOTssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nPVRydWUsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93PVRydWUsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICBzY2hlbWVzPVtfZGFtb25fc3lzZnMuRGFtb3MoXG4gICAgICAgICAgICAgICAgIGFjdGlvbj0mIzM5O3BhZ2VvdXQmIzM5OyxcbiAgICAgICAgICAgICAgICAgYWNjZXNzX3BhdHRlcm49X2RhbW9uX3N5c2ZzLkRhbW9zQWNjZXNzUGF0dGVybihcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgS1VuaXQgdGVzdCBjYXNlcyBpbiBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYW5kIHVwZGF0ZXMgc2VsZnRlc3Qgc2NyaXB0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi8uIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgZnVuY3Rpb25hbCBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjg4NWRhMGQ2YzExMTc5ZDllNzA2ZjdjN2QyZmQ4MWMzMjBlYWFmNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDk6NDU6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKaW5kZXggYWYyNmIzZDYwOTU3Yi4uZjI1NjhmYmE1NTJlYyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaApAQCAtMTMxNiw2ICYjNDM7MTMxNiwxMjggQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KQogCQkJKHVuc2lnbmVkIGxvbmdbXVsyXSkge3szLCA4fSwgezgsIDEwfX0sIDIpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsCiYjNDM7CQlzdHJ1Y3QgZGFtb25fZmlsdGVyICpkc3QsIHN0cnVjdCBkYW1vbl9maWx0ZXIgKnNyYykKJiM0Mzt7CiYjNDM7CWRhbW9uX2NvbW1pdF9maWx0ZXIoZHN0LCBzcmMpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LSZndDt0eXBlLCBzcmMtJmd0O3R5cGUpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LSZndDttYXRjaGluZywgc3JjLSZndDttYXRjaGluZyk7CiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtJmd0O2FsbG93LCBzcmMtJmd0O2FsbG93KTsKJiM0MzsJc3dpdGNoIChzcmMtJmd0O3R5cGUpIHsKJiM0MzsJY2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzoKJiM0MzsJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtJmd0O21lbWNnX2lkLCBzcmMtJmd0O21lbWNnX2lkKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9maWx0ZXIgZHN0ID0gewomIzQzOwkJLnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OLAomIzQzOwkJLm1hdGNoaW5nID0gZmFsc2UsCiYjNDM7CQkuYWxsb3cgPSBmYWxzZSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJZGFtb25fdGVzdF9jb21taXRfZmlsdGVyX2Zvcih0ZXN0LCAmYW1wO2RzdCwKJiM0MzsJCQkmYW1wOyhzdHJ1Y3QgZGFtb25fZmlsdGVyKXsKJiM0MzsJCQkudHlwZSA9IERBTU9OX0ZJTFRFUl9UWVBFX0FOT04sCiYjNDM7CQkJLm1hdGNoaW5nID0gdHJ1ZSwKJiM0MzsJCQkuYWxsb3cgPSB0cnVlLAomIzQzOwkJCX0pOwomIzQzOwlkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHRlc3QsICZhbXA7ZHN0LAomIzQzOwkJCSZhbXA7KHN0cnVjdCBkYW1vbl9maWx0ZXIpewomIzQzOwkJCS50eXBlID0gREFNT05fRklMVEVSX1RZUEVfTUVNQ0csCiYjNDM7CQkJLm1hdGNoaW5nID0gZmFsc2UsCiYjNDM7CQkJLmFsbG93ID0gZmFsc2UsCiYjNDM7CQkJLm1lbWNnX2lkID0gMTIzLAomIzQzOwkJCX0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fdGVzdF9oZWxwX3NldHVwX3Byb2Jlcyh1bnNpZ25lZCBpbnQgd2VpZ2h0c1tdLAomIzQzOwkJaW50IG5yX3dlaWdodHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwljdHggPSBkYW1vbl9uZXdfY3R4KCk7CiYjNDM7CWlmICghY3R4KQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl93ZWlnaHRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcHJvYmUgPSBkYW1vbl9uZXdfcHJvYmUoKTsKJiM0MzsJCWlmICghcHJvYmUpIHsKJiM0MzsJCQlkYW1vbl9kZXN0cm95X2N0eChjdHgpOwomIzQzOwkJCXJldHVybiBOVUxMOwomIzQzOwkJfQomIzQzOwkJcHJvYmUtJmd0O3dlaWdodCA9IHdlaWdodHNbaV07CiYjNDM7CQlkYW1vbl9hZGRfcHJvYmUoY3R4LCBwcm9iZSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGN0eDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsCiYjNDM7CQl1bnNpZ25lZCBpbnQgZHN0X3dlaWdodHNbXSwgaW50IG5yX2RzdF9wcm9iZXMsCiYjNDM7CQl1bnNpZ25lZCBpbnQgc3JjX3dlaWdodHNbXSwgaW50IG5yX3NyY19wcm9iZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsICpzcmM7CiYjNDM7CWludCBlcnI7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0X3Byb2JlLCAqc3JjX3Byb2JlOwomIzQzOwomIzQzOwlkc3QgPSBkYW1vbl90ZXN0X2hlbHBfc2V0dXBfcHJvYmVzKGRzdF93ZWlnaHRzLCBucl9kc3RfcHJvYmVzKTsKJiM0MzsJaWYgKCFkc3QpCiYjNDM7CQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7ZHN0IGFsbG9jIGZhaWwmIzM0Oyk7CiYjNDM7CXNyYyA9IGRhbW9uX3Rlc3RfaGVscF9zZXR1cF9wcm9iZXMoc3JjX3dlaWdodHMsIG5yX3NyY19wcm9iZXMpOwomIzQzOwlpZiAoIXNyYykgewomIzQzOwkJZGFtb25fZGVzdHJveV9jdHgoZHN0KTsKJiM0MzsJCWt1bml0X3NraXAodGVzdCwgJiMzNDtzcmMgYWxsb2MgZmFpbCYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBkYW1vbl9jb21taXRfcHJvYmVzKGRzdCwgc3JjKTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGVyciwgMCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJbnJfZHN0X3Byb2JlcyA9IDA7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3Byb2JlKGRzdF9wcm9iZSwgZHN0KQomIzQzOwkJbnJfZHN0X3Byb2JlcyYjNDM7JiM0Mzs7CiYjNDM7CW5yX3NyY19wcm9iZXMgPSAwOwomIzQzOwlkYW1vbl9mb3JfZWFjaF9wcm9iZShzcmNfcHJvYmUsIHNyYykKJiM0MzsJCW5yX3NyY19wcm9iZXMmIzQzOyYjNDM7OwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbnJfZHN0X3Byb2JlcywgbnJfc3JjX3Byb2Jlcyk7CiYjNDM7CWlmIChucl9kc3RfcHJvYmVzICE9IG5yX3NyY19wcm9iZXMpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJbnJfZHN0X3Byb2JlcyA9IDA7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3Byb2JlKGRzdF9wcm9iZSwgZHN0KSB7CiYjNDM7CQlzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUobnJfZHN0X3Byb2Jlcywgc3JjKTsKJiM0MzsJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzcmNfcHJvYmUtJmd0O3dlaWdodCwgZHN0X3Byb2JlLSZndDt3ZWlnaHQpOwomIzQzOwkJbnJfZHN0X3Byb2JlcyYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MztvdXQ6CiYjNDM7CWRhbW9uX2Rlc3Ryb3lfY3R4KGRzdCk7CiYjNDM7CWRhbW9uX2Rlc3Ryb3lfY3R4KHNyYyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3Byb2JlcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwlkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsCiYjNDM7CQkJKHVuc2lnbmVkIGludFtdKXt9LCAwLCAodW5zaWduZWQgaW50W10pe30sIDApOwomIzQzOwlkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsCiYjNDM7CQkJKHVuc2lnbmVkIGludFtdKXt9LCAwLCAodW5zaWduZWQgaW50W10pezF9LCAxKTsKJiM0MzsJZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LAomIzQzOwkJCSh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXsxLCAyfSwgMik7CiYjNDM7CWRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCwKJiM0MzsJCQkodW5zaWduZWQgaW50W10pezF9LCAxLCAodW5zaWduZWQgaW50W10pezJ9LCAxKTsKJiM0MzsJZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LAomIzQzOwkJCSh1bnNpZ25lZCBpbnRbXSl7MX0sIDEsICh1bnNpZ25lZCBpbnRbXSl7MiwgM30sIDIpOwomIzQzOwlkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsCiYjNDM7CQkJKHVuc2lnbmVkIGludFtdKXsyLCAzfSwgMiwgKHVuc2lnbmVkIGludFtdKXsxfSwgMSk7CiYjNDM7CWRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCwKJiM0MzsJCQkodW5zaWduZWQgaW50W10pezIsIDN9LCAyLCAodW5zaWduZWQgaW50W10pe30sIDApOwomIzQzOwlkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsCiYjNDM7CQkJKHVuc2lnbmVkIGludFtdKXsyfSwgMSwgKHVuc2lnbmVkIGludFtdKXt9LCAwKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9jdHgoc3RydWN0IGt1bml0ICp0ZXN0KQogewogCXN0cnVjdCBkYW1vbl9jdHggKnNyYywgKmRzdDsKQEAgLTE3MjIsNiAmIzQzOzE4NDQsOCBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0gewogCUtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfcGFnZW91dCksCiAJS1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9taWdyYXRlX2hvdCksCiAJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9ucyksCiYjNDM7CUtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfZmlsdGVyKSwKJiM0MzsJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXMpLAogCUtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfY3R4KSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdmFsaWRfcHJvYmVfcGFyYW1zKSwKIAlLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfZmlsdGVyX291dCksCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHkKaW5kZXggZjYwNGI3ZDY1MzBiMy4uZTcwOTVjMzM2NTI0NSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weQpAQCAtNTcwLDYgJiM0Mzs1NzAsMTE3IEBAIGNsYXNzIEludGVydmFsc0dvYWw6CiAgICAgICAgICAgICByZXR1cm4gZXJyCiAgICAgICAgIHJldHVybiBOb25lCiAKJiM0MztjbGFzcyBEYW1vbkZpbHRlcjoKJiM0MzsgICAgdHlwZV8gPSBOb25lCiYjNDM7ICAgIG1hdGNoaW5nID0gTm9uZQomIzQzOyAgICBhbGxvdyA9IE5vbmUKJiM0MzsgICAgZmlsdGVycyA9IE5vbmUKJiM0MzsgICAgcGF0aCA9IE5vbmUKJiM0MzsgICAgaWR4ID0gTm9uZQomIzQzOwomIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV89JiMzOTthbm9uJiMzOTssIG1hdGNoaW5nPUZhbHNlLCBhbGxvdz1GYWxzZSwgcGF0aD1Ob25lKToKJiM0MzsgICAgICAgIHNlbGYudHlwZV8gPSB0eXBlXwomIzQzOyAgICAgICAgc2VsZi5tYXRjaGluZyA9IG1hdGNoaW5nCiYjNDM7ICAgICAgICBzZWxmLmFsbG93ID0gYWxsb3cKJiM0MzsgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKJiM0MzsKJiM0MzsgICAgZGVmIHN5c2ZzX2RpcihzZWxmKToKJiM0MzsgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5maWx0ZXJzLnN5c2ZzX2RpcigpLCAmIzM5OyVkJiMzOTsgJSBzZWxmLmlkeCkKJiM0MzsKJiM0MzsgICAgZGVmIHN0YWdlKHNlbGYpOgomIzQzOyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTt0eXBlJiMzOTspLCBzZWxmLnR5cGVfKQomIzQzOyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIHJldHVybiBlcnIKJiM0MzsgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUob3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICYjMzk7bWF0Y2hpbmcmIzM5OyksCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICYjMzk7WSYjMzk7IGlmIHNlbGYubWF0Y2hpbmcgZWxzZSAmIzM5O04mIzM5OykKJiM0MzsgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgICAgICByZXR1cm4gZXJyCiYjNDM7ICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAmIzM5O2FsbG93JiMzOTspLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAmIzM5O1kmIzM5OyBpZiBzZWxmLmFsbG93IGVsc2UgJiMzOTtOJiMzOTspCiYjNDM7ICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAgcmV0dXJuIGVycgomIzQzOyAgICAgICAgaWYgc2VsZi50eXBlXyA9PSAmIzM5O21lbWNnJiMzOTs6CiYjNDM7ICAgICAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJiMzOTtwYXRoJiMzOTspLCBzZWxmLnBhdGgpCiYjNDM7ICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gZXJyCiYjNDM7ICAgICAgICByZXR1cm4gTm9uZQomIzQzOwomIzQzO2NsYXNzIERhbW9uRmlsdGVyczoKJiM0MzsgICAgZmlsdGVycyA9IE5vbmUKJiM0MzsgICAgcHJvYmUgPSBOb25lCiYjNDM7CiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWx0ZXJzPU5vbmUpOgomIzQzOyAgICAgICAgaWYgZmlsdGVycyBpcyBOb25lOgomIzQzOyAgICAgICAgICAgIGZpbHRlcnMgPSBbXQomIzQzOyAgICAgICAgc2VsZi5maWx0ZXJzID0gZmlsdGVycwomIzQzOyAgICAgICAgZm9yIGlkeCwgZmlsdGVyIGluIGVudW1lcmF0ZShzZWxmLmZpbHRlcnMpOgomIzQzOyAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzID0gc2VsZgomIzQzOyAgICAgICAgICAgIGZpbHRlci5pZHggPSBpZHgKJiM0MzsKJiM0MzsgICAgZGVmIHN5c2ZzX2RpcihzZWxmKToKJiM0MzsgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5wcm9iZS5zeXNmc19kaXIoKSwgJiMzOTtmaWx0ZXJzJiMzOTspCiYjNDM7CiYjNDM7ICAgIGRlZiBzdGFnZShzZWxmKToKJiM0MzsgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUoCiYjNDM7ICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAmIzM5O25yX2ZpbHRlcnMmIzM5OyksCiYjNDM7ICAgICAgICAgICAgICAgIGxlbihzZWxmLmZpbHRlcnMpKQomIzQzOyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIHJldHVybiBlcnIKJiM0MzsgICAgICAgIGZvciBmaWx0ZXIgaW4gc2VsZi5maWx0ZXJzOgomIzQzOyAgICAgICAgICAgIGVyciA9IGZpbHRlci5zdGFnZSgpCiYjNDM7ICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gZXJyCiYjNDM7ICAgICAgICByZXR1cm4gTm9uZQomIzQzOwomIzQzO2NsYXNzIERhbW9uUHJvYmU6CiYjNDM7ICAgIHdlaWdodCA9IE5vbmUKJiM0MzsgICAgZmlsdGVycyA9IE5vbmUKJiM0MzsgICAgcHJvYmVzID0gTm9uZQomIzQzOyAgICBpZHggPSBOb25lCiYjNDM7CiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3ZWlnaHQ9MCwgZmlsdGVycz1Ob25lKToKJiM0MzsgICAgICAgIHNlbGYud2VpZ2h0ID0gd2VpZ2h0CiYjNDM7ICAgICAgICBpZiBmaWx0ZXJzIGlzIE5vbmU6CiYjNDM7ICAgICAgICAgICAgZmlsdGVycyA9IERhbW9uRmlsdGVycygpCiYjNDM7ICAgICAgICBzZWxmLmZpbHRlcnMgPSBmaWx0ZXJzCiYjNDM7ICAgICAgICBzZWxmLmZpbHRlcnMucHJvYmUgPSBzZWxmCiYjNDM7CiYjNDM7ICAgIGRlZiBzeXNmc19kaXIoc2VsZik6CiYjNDM7ICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYucHJvYmVzLnN5c2ZzX2RpcigpLCAmIzM5OyVkJiMzOTsgJSBzZWxmLmlkeCkKJiM0MzsKJiM0MzsgICAgZGVmIHN0YWdlKHNlbGYpOgomIzQzOyAgICAgICAgZXJyID0gd3JpdGVfZmlsZSgKJiM0MzsgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICYjMzk7d2VpZ2h0JiMzOTspLCAmIzM5OyVkJiMzOTsgJSBzZWxmLndlaWdodCkKJiM0MzsgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgICAgICByZXR1cm4gZXJyCiYjNDM7ICAgICAgICByZXR1cm4gc2VsZi5maWx0ZXJzLnN0YWdlKCkKJiM0MzsKJiM0MztjbGFzcyBEYW1vblByb2JlczoKJiM0MzsgICAgcHJvYmVzID0gTm9uZQomIzQzOyAgICBhdHRycyA9IE5vbmUKJiM0MzsKJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Jlcz1Ob25lKToKJiM0MzsgICAgICAgIGlmIHByb2JlcyBpcyBOb25lOgomIzQzOyAgICAgICAgICAgIHByb2JlcyA9IFtdCiYjNDM7ICAgICAgICBzZWxmLnByb2JlcyA9IHByb2JlcwomIzQzOyAgICAgICAgZm9yIGlkeCwgcHJvYmUgaW4gZW51bWVyYXRlKHNlbGYucHJvYmVzKToKJiM0MzsgICAgICAgICAgICBwcm9iZS5wcm9iZXMgPSBzZWxmCiYjNDM7ICAgICAgICAgICAgcHJvYmUuaWR4ID0gaWR4CiYjNDM7CiYjNDM7ICAgIGRlZiBzeXNmc19kaXIoc2VsZik6CiYjNDM7ICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuYXR0cnMuc3lzZnNfZGlyKCksICYjMzk7cHJvYmVzJiMzOTspCiYjNDM7CiYjNDM7ICAgIGRlZiBzdGFnZShzZWxmKToKJiM0MzsgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUob3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICYjMzk7bnJfcHJvYmVzJiMzOTspLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oc2VsZi5wcm9iZXMpKQomIzQzOyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIHJldHVybiBlcnIKJiM0MzsgICAgICAgIGZvciBwcm9iZSBpbiBzZWxmLnByb2JlczoKJiM0MzsgICAgICAgICAgICBlcnIgPSBwcm9iZS5zdGFnZSgpCiYjNDM7ICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gZXJyCiYjNDM7ICAgICAgICByZXR1cm4gTm9uZQomIzQzOwogY2xhc3MgRGFtb25BdHRyczoKICAgICBzYW1wbGVfdXMgPSBOb25lCiAgICAgYWdncl91cyA9IE5vbmUKQEAgLTU3NywxMSAmIzQzOzY4OCwxMiBAQCBjbGFzcyBEYW1vbkF0dHJzOgogICAgIHVwZGF0ZV91cyA9IE5vbmUKICAgICBtaW5fbnJfcmVnaW9ucyA9IE5vbmUKICAgICBtYXhfbnJfcmVnaW9ucyA9IE5vbmUKJiM0MzsgICAgcHJvYmVzID0gTm9uZQogICAgIGNvbnRleHQgPSBOb25lCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgc2FtcGxlX3VzPTUwMDAsIGFnZ3JfdXM9MTAwMDAwLAogICAgICAgICAgICAgICAgICBpbnRlcnZhbHNfZ29hbD1Ob25lLCB1cGRhdGVfdXM9MTAwMDAwMCwgbWluX25yX3JlZ2lvbnM9MTAsCi0gICAgICAgICAgICAgICAgIG1heF9ucl9yZWdpb25zPTEwMDApOgomIzQzOyAgICAgICAgICAgICAgICAgbWF4X25yX3JlZ2lvbnM9MTAwMCwgcHJvYmVzPU5vbmUpOgogICAgICAgICBzZWxmLnNhbXBsZV91cyA9IHNhbXBsZV91cwogICAgICAgICBzZWxmLmFnZ3JfdXMgPSBhZ2dyX3VzCiAgICAgICAgIGlmIGludGVydmFsc19nb2FsIGlzIE5vbmU6CkBAIC01OTEsNiAmIzQzOzcwMywxMCBAQCBjbGFzcyBEYW1vbkF0dHJzOgogICAgICAgICBzZWxmLnVwZGF0ZV91cyA9IHVwZGF0ZV91cwogICAgICAgICBzZWxmLm1pbl9ucl9yZWdpb25zID0gbWluX25yX3JlZ2lvbnMKICAgICAgICAgc2VsZi5tYXhfbnJfcmVnaW9ucyA9IG1heF9ucl9yZWdpb25zCiYjNDM7ICAgICAgICBpZiBwcm9iZXMgaXMgTm9uZToKJiM0MzsgICAgICAgICAgICBwcm9iZXMgPSBEYW1vblByb2JlcygpCiYjNDM7ICAgICAgICBzZWxmLnByb2JlcyA9IHByb2JlcwomIzQzOyAgICAgICAgc2VsZi5wcm9iZXMuYXR0cnMgPSBzZWxmCiAKICAgICBkZWYgaW50ZXJ2YWxfc3lzZnNfZGlyKHNlbGYpOgogICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJiMzOTttb25pdG9yaW5nX2F0dHJzJiMzOTssCkBAIC02MDAsNiAmIzQzOzcxNiw5IEBAIGNsYXNzIERhbW9uQXR0cnM6CiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5jb250ZXh0LnN5c2ZzX2RpcigpLCAmIzM5O21vbml0b3JpbmdfYXR0cnMmIzM5OywKICAgICAgICAgICAgICAgICAmIzM5O25yX3JlZ2lvbnMmIzM5OykKIAomIzQzOyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOgomIzQzOyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmNvbnRleHQuc3lzZnNfZGlyKCksICYjMzk7bW9uaXRvcmluZ19hdHRycyYjMzk7KQomIzQzOwogICAgIGRlZiBzdGFnZShzZWxmKToKICAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5pbnRlcnZhbF9zeXNmc19kaXIoKSwgJiMzOTtzYW1wbGVfdXMmIzM5OyksCiAgICAgICAgICAgICAgICAgc2VsZi5zYW1wbGVfdXMpCkBAIC02MjksNiAmIzQzOzc0OCwxMCBAQCBjbGFzcyBEYW1vbkF0dHJzOgogICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gZXJyCiAKJiM0MzsgICAgICAgIGVyciA9IHNlbGYucHJvYmVzLnN0YWdlKCkKJiM0MzsgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgICAgICByZXR1cm4gZXJyCiYjNDM7CiBjbGFzcyBEYW1vbkN0eDoKICAgICBvcHMgPSBOb25lCiAgICAgbW9uaXRvcmluZ19hdHRycyA9IE5vbmUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5CmluZGV4IDA5NTUyZTkxYmM3ODIuLjQ2MjIwNDZmZDAxMTggMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weQpAQCAtNDgsNiAmIzQzOzQ4LDM3IEBAIGRlZiBhdHRyc190b19kaWN0KGF0dHJzKToKICAgICAgICAgWyYjMzk7bWF4X25yX3JlZ2lvbnMmIzM5OywgaW50XSwKICAgICAgICAgXSkKIAomIzQzO2RlZiBmaWx0ZXJfdG9fZGljdChkYW1vbl9maWx0ZXIpOgomIzQzOyAgICBmaWx0ZXJfdHlwZV9rZXl3b3JkID0gewomIzQzOyAgICAgICAgICAgIDA6ICYjMzk7YW5vbiYjMzk7LAomIzQzOyAgICAgICAgICAgIDE6ICYjMzk7bWVtY2cmIzM5OywKJiM0MzsgICAgICAgICAgICB9CiYjNDM7ICAgIGRpY3RfID0gewomIzQzOyAgICAgICAgICAgICYjMzk7dHlwZSYjMzk7OiBmaWx0ZXJfdHlwZV9rZXl3b3JkW2ludChkYW1vbl9maWx0ZXIudHlwZSldLAomIzQzOyAgICAgICAgICAgICYjMzk7bWF0Y2hpbmcmIzM5OzogYm9vbChkYW1vbl9maWx0ZXIubWF0Y2hpbmcpLAomIzQzOyAgICAgICAgICAgICYjMzk7YWxsb3cmIzM5OzogYm9vbChkYW1vbl9maWx0ZXIuYWxsb3cpLAomIzQzOyAgICAgICAgICAgIH0KJiM0MzsgICAgdHlwZV8gPSBkaWN0X1smIzM5O3R5cGUmIzM5O10KJiM0MzsgICAgaWYgdHlwZV8gPT0gJiMzOTttZW1jZyYjMzk7OgomIzQzOyAgICAgICAgZGljdF9bJiMzOTttZW1jZ19pZCYjMzk7XSA9IGludChkYW1vbl9maWx0ZXIubWVtY2dfaWQpCiYjNDM7ICAgIHJldHVybiBkaWN0XwomIzQzOwomIzQzO2RlZiBmaWx0ZXJzX3RvX2xpc3QoZmlsdGVycyk6CiYjNDM7ICAgIHJldHVybiBbZmlsdGVyX3RvX2RpY3QoZikKJiM0MzsgICAgICAgICAgICBmb3IgZiBpbiBsaXN0X2Zvcl9lYWNoX2VudHJ5KAomIzQzOyAgICAgICAgICAgICAgICAmIzM5O3N0cnVjdCBkYW1vbl9maWx0ZXImIzM5OywgZmlsdGVycy5hZGRyZXNzX29mXygpLCAmIzM5O2xpc3QmIzM5OyldCiYjNDM7CiYjNDM7ZGVmIHByb2JlX3RvX2RpY3QocHJvYmUpOgomIzQzOyAgICByZXR1cm4gdG9fZGljdChwcm9iZSwgWwomIzQzOyAgICAgICAgWyYjMzk7d2VpZ2h0JiMzOTssIGludF0sCiYjNDM7ICAgICAgICBbJiMzOTtmaWx0ZXJzJiMzOTssIGZpbHRlcnNfdG9fbGlzdF0sCiYjNDM7ICAgICAgICBdKQomIzQzOwomIzQzO2RlZiBwcm9iZXNfdG9fbGlzdChwcm9iZXMpOgomIzQzOyAgICByZXR1cm4gW3Byb2JlX3RvX2RpY3QocCkKJiM0MzsgICAgICAgICAgICBmb3IgcCBpbiBsaXN0X2Zvcl9lYWNoX2VudHJ5KAomIzQzOyAgICAgICAgICAgICAgICAmIzM5O3N0cnVjdCBkYW1vbl9wcm9iZSYjMzk7LCBwcm9iZXMuYWRkcmVzc19vZl8oKSwgJiMzOTtsaXN0JiMzOTspXQomIzQzOwogZGVmIGFkZHJfcmFuZ2VfdG9fZGljdChhZGRyX3JhbmdlKToKICAgICByZXR1cm4gdG9fZGljdChhZGRyX3JhbmdlLCBbCiAgICAgICAgIFsmIzM5O3N0YXJ0JiMzOTssIGludF0sCkBAIC0xOTksNiAmIzQzOzIzMCw3IEBAIGRlZiBkYW1vbl9jdHhfdG9fZGljdChjdHgpOgogICAgIHJldHVybiB0b19kaWN0KGN0eCwgWwogICAgICAgICBbJiMzOTtvcHMmIzM5Oywgb3BzX3RvX2RpY3RdLAogICAgICAgICBbJiMzOTthdHRycyYjMzk7LCBhdHRyc190b19kaWN0XSwKJiM0MzsgICAgICAgIFsmIzM5O3Byb2JlcyYjMzk7LCBwcm9iZXNfdG9fbGlzdF0sCiAgICAgICAgIFsmIzM5O2FkYXB0aXZlX3RhcmdldHMmIzM5OywgdGFyZ2V0c190b19saXN0XSwKICAgICAgICAgWyYjMzk7c2NoZW1lcyYjMzk7LCBzY2hlbWVzX3RvX2xpc3RdLAogICAgICAgICBbJiMzOTtwYXVzZSYjMzk7LCBib29sXSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHkKaW5kZXggODhhMjY0MjJmZjQ0Yy4uNjZjODI2MTg5MzIwZCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHkKQEAgLTE3OCw2ICYjNDM7MTc4LDI0IEBAIGRlZiBhc3NlcnRfbW9uaXRvcmluZ19hdHRyc19jb21taXR0ZWQoYXR0cnMsIGR1bXApOgogICAgIGFzc2VydF90cnVlKGR1bXBbJiMzOTttYXhfbnJfcmVnaW9ucyYjMzk7XSA9PSBhdHRycy5tYXhfbnJfcmVnaW9ucywKICAgICAgICAgICAgICAgICAmIzM5O21heF9ucl9yZWdpb25zJiMzOTssIGR1bXApCiAKJiM0MztkZWYgYXNzZXJ0X2RhbW9uX2ZpbHRlcnNfY29tbWl0dGVkKGZpbHRlcnMsIGR1bXApOgomIzQzOyAgICBhc3NlcnRfdHJ1ZShsZW4oZHVtcCkgPT0gbGVuKGZpbHRlcnMuZmlsdGVycyksICYjMzk7cHJvYmUgZmlsdGVycyYjMzk7LCBkdW1wKQomIzQzOyAgICBmb3IgaWR4LCBkYW1vbl9maWx0ZXIgaW4gZW51bWVyYXRlKGZpbHRlcnMuZmlsdGVycyk6CiYjNDM7ICAgICAgICBmaWx0ZXJfZHVtcCA9IGR1bXBbaWR4XQomIzQzOyAgICAgICAgYXNzZXJ0X3RydWUoZmlsdGVyX2R1bXBbJiMzOTt0eXBlJiMzOTtdID09IGRhbW9uX2ZpbHRlci50eXBlXywgJiMzOTt0eXBlJiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfZHVtcCkKJiM0MzsgICAgICAgIGFzc2VydF90cnVlKGZpbHRlcl9kdW1wWyYjMzk7bWF0Y2hpbmcmIzM5O10gPT0gZGFtb25fZmlsdGVyLm1hdGNoaW5nLAomIzQzOyAgICAgICAgICAgICAgICAgICAgJiMzOTttYXRjaGluZyYjMzk7LCBmaWx0ZXJfZHVtcCkKJiM0MzsgICAgICAgIGFzc2VydF90cnVlKGZpbHRlcl9kdW1wWyYjMzk7YWxsb3cmIzM5O10gPT0gZGFtb25fZmlsdGVyLmFsbG93LCAmIzM5O2FsbG93JiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfZHVtcCkKJiM0MzsKJiM0MztkZWYgYXNzZXJ0X3Byb2Jlc19jb21taXR0ZWQocHJvYmVzLCBkdW1wKToKJiM0MzsgICAgYXNzZXJ0X3RydWUobGVuKGR1bXApID09IGxlbihwcm9iZXMucHJvYmVzKSwgJiMzOTtwcm9iZXMgbGVuZ3RoJiMzOTssIGR1bXApCiYjNDM7ICAgIGZvciBpZHgsIHByb2JlIGluIGVudW1lcmF0ZShwcm9iZXMucHJvYmVzKToKJiM0MzsgICAgICAgIHByb2JlX2R1bXAgPSBkdW1wW2lkeF0KJiM0MzsgICAgICAgIGFzc2VydF90cnVlKHByb2JlLndlaWdodCA9PSBwcm9iZV9kdW1wWyYjMzk7d2VpZ2h0JiMzOTtdLCAmIzM5O3dlaWdodCYjMzk7LCBwcm9iZV9kdW1wKQomIzQzOyAgICAgICAgYXNzZXJ0X2RhbW9uX2ZpbHRlcnNfY29tbWl0dGVkKHByb2JlLmZpbHRlcnMsIHByb2JlX2R1bXBbJiMzOTtmaWx0ZXJzJiMzOTtdKQomIzQzOwogZGVmIGFzc2VydF9tb25pdG9yaW5nX3RhcmdldF9jb21taXR0ZWQodGFyZ2V0LCBkdW1wKToKICAgICAjIHRhcmdldC5waWQgaXMgdGhlIHBpZCAmIzM0O251bWJlciYjMzQ7LCB3aGlsZSBkdW1wWyYjMzk7cGlkJiMzOTtdIGlzICYjMzk7c3RydWN0IHBpZCYjMzk7CiAgICAgIyBwb2ludGVyLCBhbmQgaGVuY2UgY2Fubm90IGJlIGNvbXBhcmVkLgpAQCAtMTk2LDYgJiM0MzsyMTQsNyBAQCBkZWYgYXNzZXJ0X2N0eF9jb21taXR0ZWQoY3R4LCBkdW1wKToKICAgICAgICAgICAgIH0KICAgICBhc3NlcnRfdHJ1ZShkdW1wWyYjMzk7b3BzJiMzOTtdWyYjMzk7aWQmIzM5O10gPT0gb3BzX3ZhbFtjdHgub3BzXSwgJiMzOTtvcHNfaWQmIzM5OywgZHVtcCkKICAgICBhc3NlcnRfbW9uaXRvcmluZ19hdHRyc19jb21taXR0ZWQoY3R4Lm1vbml0b3JpbmdfYXR0cnMsIGR1bXBbJiMzOTthdHRycyYjMzk7XSkKJiM0MzsgICAgYXNzZXJ0X3Byb2Jlc19jb21taXR0ZWQoY3R4Lm1vbml0b3JpbmdfYXR0cnMucHJvYmVzLCBkdW1wWyYjMzk7cHJvYmVzJiMzOTtdKQogICAgIGFzc2VydF9tb25pdG9yaW5nX3RhcmdldHNfY29tbWl0dGVkKGN0eC50YXJnZXRzLCBkdW1wWyYjMzk7YWRhcHRpdmVfdGFyZ2V0cyYjMzk7XSkKICAgICBhc3NlcnRfc2NoZW1lc19jb21taXR0ZWQoY3R4LnNjaGVtZXMsIGR1bXBbJiMzOTtzY2hlbWVzJiMzOTtdKQogICAgIGFzc2VydF90cnVlKGR1bXBbJiMzOTtwYXVzZSYjMzk7XSA9PSBjdHgucGF1c2UsICYjMzk7cGF1c2UmIzM5OywgZHVtcCkKQEAgLTMwMCw3ICYjNDM7MzE5LDIxIEBAIGRlZiBtYWluKCk6CiAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWw9X2RhbW9uX3N5c2ZzLkludGVydmFsc0dvYWwoCiAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc19icD00MDAsIGFnZ3JzPTMsIG1pbl9zYW1wbGVfdXM9NTAwMCwKICAgICAgICAgICAgICAgICAgICAgbWF4X3NhbXBsZV91cz0xMDAwMDAwMCksCi0gICAgICAgICAgICAgICAgdXBkYXRlX3VzPTIwMDAwMDApLAomIzQzOyAgICAgICAgICAgICAgICB1cGRhdGVfdXM9MjAwMDAwMCwKJiM0MzsgICAgICAgICAgICAgICAgcHJvYmVzPV9kYW1vbl9zeXNmcy5EYW1vblByb2JlcygKJiM0MzsgICAgICAgICAgICAgICAgICAgIHByb2Jlcz1bX2RhbW9uX3N5c2ZzLkRhbW9uUHJvYmUoCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0PTQyLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnM9X2RhbW9uX3N5c2ZzLkRhbW9uRmlsdGVycygKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycz1bCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGFtb25fc3lzZnMuRGFtb25GaWx0ZXIoCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV89JiMzOTthbm9uJiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmc9VHJ1ZSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdz1UcnVlLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiYjNDM7ICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgc2NoZW1lcz1bX2RhbW9uX3N5c2ZzLkRhbW9zKAogICAgICAgICAgICAgICAgIGFjdGlvbj0mIzM5O3BhZ2VvdXQmIzM5OywKICAgICAgICAgICAgICAgICBhY2Nlc3NfcGF0dGVybj1fZGFtb25fc3lzZnMuRGFtb3NBY2Nlc3NQYXR0ZXJuKAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDA4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2gqKgoKT2theSwgc28gdGhlIGRpZmYgaXMgcHJldHR5IGZvY3VzZWQuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIGEgZmV3IHRlc3QtcmVsYXRlZCBmaWxlczogYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAsIGFuZCBhIGZldyBweXRob24gc2NyaXB0cyBpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2AgZGlyZWN0b3J5OiBgX2RhbW9uX3N5c2ZzLnB5YCwgYGRyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlgLCBhbmQgYHN5c2ZzLnB5YC4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbiwgc3VnZ2VzdHMgYSBsaW1pdGVkIHNjb3BlLgoKTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgKmlzKiB0aGUgZW50aXJlIHNjb3BlIG9mIHRoZSBjb21taXQuIEV4cGVyaWVuY2UgaGFzIHRhdWdodCBtZSB0byBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSB3aXRoIERBTU9OIHdoZXJlIGludGVyYWN0aW9ucyBjYW4gYmUgc3VidGxlLiBJIG5lZWQgdG8gZWxpbWluYXRlIHRoZSBwb3NzaWJpbGl0eSBvZiBhbnkgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgb3IgaGlkZGVuIG1vZGlmaWNhdGlvbnMuCgpTaW5jZSBJIGhhdmUgdGhlIGZ1bGwgZGlmZiwgSSBkb24mIzM5O3QgbmVlZCB0byBnbyBkaWdnaW5nIGZvciBpdCwgYnV0IGp1c3QgdG8gbWFrZSBzdXJlLCBJIHdpbGwgZG91YmxlIGNoZWNrIHRoYXQgdGhlcmUgaXMgbm90aGluZyBlbHNlIGNoYW5nZWQgaW4gdGhpcyBjb21taXQuCklmIG5lZWRlZCwgSSYjMzk7bGwgZmFsbCBiYWNrIHRvIGBnaXQgZ3JlcGAgb3IgbWF5YmUgZXZlbiBqdXN0IHJlYWQgdGhyb3VnaCB0aGUgZGlmZiBpZiBpdCYjMzk7cyBub3QgdG9vIGxvbmcsIGJ1dCBnaXZlbiB0aGUgbGltaXRlZCBsaXN0aW5nLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgcXVpY2sgdmVyaWZpY2F0aW9uLgpJIG1pZ2h0IGV2ZW4gZ2xhbmNlIGF0IGBtbS9kYW1vbi90ZXN0cy9gIG1vcmUgYnJvYWRseSwganVzdCBpbiBjYXNlIHNvbWV0aGluZyBhZGphY2VudCB3YXMgdG91Y2hlZC4gSXQmIzM5O3MgYSBxdWljayBzYW5pdHkgY2hlY2sgYmVmb3JlIEkgZGlnIGludG8gdGhlIHNwZWNpZmljcyBvZiB0aGUgS1VuaXQgdGVzdHMgYW5kIHRoZSBzeXNmcyB0ZXN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTEzMDc9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMzE4LVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEzMTk6c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTMyMC1cdFx0c3RydWN0IGRhbW9uX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpzcmMpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzMzQtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTMzNTpzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzMzYte1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMzQyLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEzNDM6XHRkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHRlc3QsIFx1MDAyNmRzdCxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMzQ0LVx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb25fZmlsdGVyKXtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTM0OC1cdFx0XHR9KTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMzQ5Olx0ZGFtb25fdGVzdF9jb21taXRfZmlsdGVyX2Zvcih0ZXN0LCBcdTAwMjZkc3QsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTM1MC1cdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9uX2ZpbHRlcil7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE4MjM9c3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTg0Ni1cdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfdGFyZ2V0X3JlZ2lvbnMpLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE4NDc6XHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlciksXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTg0OC1cdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfcHJvYmVzKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTA3CgkJCQkJCQlvdXRwdXQ6IDgwCgkJCQkJCQl0aG91Z2h0czogNjM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIFBhdGNoJiMzOTtzIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgY2hhbmdlcyB0aGF0IGFyZSByZWxldmFudCBmb3IgZnV6emluZy4gVGhlIGd1aWRlbGluZXMgY2xlYXJseSBzdGF0ZSB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBmaWxlcywgY29tbWVudHMsIGFuZCBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzIGxpa2UgbG9nZ2luZyBzaG91bGQgYmUgZXhjbHVkZWQuIEFsc28gZXhjbHVkZWQgYXJlIGNoYW5nZXMgdG8gY29uc3RhbnRzIHdpdGhvdXQgaW1wYWN0aW5nIGV4ZWN1dGlvbiBmbG93LCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBjb2RlIHRoYXQgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUsIGFuZCB0ZWFyZG93biBjYWxsYmFja3MuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2AgYW5kIGBtbS9kYW1vbi90ZXN0cy9gLiBBbmQgY29uc2lkZXJpbmcgdGhlIG5hdHVyZSBvZiBLVW5pdCB0ZXN0cyBhbmQgc2VsZnRlc3RzLCB0aGlzIGlzIHRoZSBhcmVhIHRvIGFzc2VzcyBtb3N0IGNsb3NlbHkuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlc2UgdGVzdHMgaW50cm9kdWNlIG5ldyBydW50aW1lIGtlcm5lbCBmdW5jdGlvbmFsaXR5IG9yIGNoYW5nZSBhbnkgcmVhY2hhYmxlIHJ1bnRpbWUgbG9naWMgdGhhdCB3b3VsZCBiZSByZWxldmFudCBmb3IgZnV6emluZy4KCk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBLVW5pdCB0ZXN0cywgbGlrZSB0aG9zZSBpbiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCwgYW5kIHNlbGZ0ZXN0cywgZm91bmQgaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8uLi5gIGRpcmVjdG9yeSwgYXJlICpub3QqIGludGVuZGVkIHRvIG1vZGlmeSBjb3JlIGtlcm5lbCBsb2dpYyBpbiBhIHdheSB0aGF0IGludHJvZHVjZXMgbmV3IGF0dGFjayBzdXJmYWNlcyBmb3IgZnV6emluZy4gS1VuaXQgdGVzdHMgYXJlIGdlbmVyYWxseSBleGVjdXRlZCBvbmNlIG9uIGJvb3Qgb3IgdmlhIGRlYnVnZnMsIHdoaWxlIHNlbGZ0ZXN0cyBhcmUgdXNlci1zcGFjZSBzY3JpcHRzLiBOZWl0aGVyIHdpbGwgY2hhbmdlIHRoZSBmdW5kYW1lbnRhbCBrZXJuZWwgYmVoYXZpb3IgaW4gYW4gZXhwbG9pdGFibGUgd2F5LgoKTm93LCBhIGNydWNpYWwgc3RlcDogSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgZGlmZiB0byBjb25maXJtIHRoZXJlIGFyZW4mIzM5O3QgKmFueSogbW9kaWZpY2F0aW9ucyBvdXRzaWRlIG9mIHRoZXNlIHRlc3QgZGlyZWN0b3JpZXMuIExldCYjMzk7cyBzZWUuLi4gdGhlIGRpZmYgb25seSBpbmNsdWRlcyBjaGFuZ2VzIHRvIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5YCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5YC4KClRoZXJlZm9yZSwgdGhlcmUgYXJlICpubyogY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYywgc3VjaCBhcyBpbiBgbW0vZGFtb24vY29yZS5jYCBvciBgbW0vZGFtb24vc3lzZnMuY2AuIFRoaXMgbWVhbnMgdGhlIHBhdGNoIGlzICpzb2xlbHkqIGFkZGluZyB1bml0IHRlc3RzIChLVW5pdCkgYW5kIHVwZGF0aW5nIHNlbGZ0ZXN0IHB5dGhvbiBzY3JpcHRzLiBUaGVzZSBhcmUgbm90IGNvbnNpZGVyZWQgZnVuY3Rpb25hbCBjaGFuZ2VzIHdoaWNoIGludHJvZHVjZSBhZGRpdGlvbmFsIGF0dGFjayBzdXJmYWNlIG9yIGV4cGxvaXRhYmxlIGtlcm5lbCBiZWhhdmlvciB0aGF0IGlzIGFwcHJvcHJpYXRlIGZvciBmdXp6aW5nLgoKVGh1cywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyB0aGUgcmVzdWx0czogYFdvcnRoRnV6emluZzogZmFsc2VgLCB3aXRoIGVtcHR5IGxpc3RzIGZvciBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBNeSByZWFzb25pbmcgaXMgY29uY2lzZTogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIHVuaXQgdGVzdCBjYXNlcyBpbiBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYW5kIHVwZGF0ZXMgc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uLy4gSXQgZG9lcyBub3QgbWFrZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8ga2VybmVsIGxvZ2ljIG9yIHJ1bnRpbWUgYmVoYXZpb3IuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBLVW5pdCB0ZXN0IGNhc2VzIGluIG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBhbmQgdXBkYXRlcyBzZWxmdGVzdCBzY3JpcHRzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uLy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBLVW5pdCB0ZXN0IGNhc2VzIGluIG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBhbmQgdXBkYXRlcyBzZWxmdGVzdCBzY3JpcHRzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uLy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjQ1OjM2LjMxNDQ1MjgxOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjQwNzgwNTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIEtVbml0IHRlc3QgY2FzZXMgaW4gbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGFuZCB1cGRhdGVzIHNlbGZ0ZXN0IHNjcmlwdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGZ1bmN0aW9uYWwga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NDU6MzYuMzE0NDYwODY4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDY5OTIyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ODg1ZGEwZDZjMTExNzlkOWU3MDZmN2M3ZDJmZDgxYzMyMGVhYWY1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMDk6NDU6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXFxuaW5kZXggYWYyNmIzZDYwOTU3Yi4uZjI1NjhmYmE1NTJlYyAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG4rKysgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG5AQCAtMTMxNiw2ICsxMzE2LDEyOCBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdFxcdFxcdCh1bnNpZ25lZCBsb25nW11bMl0pIHt7MywgOH0sIHs4LCAxMH19LCAyKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuK1xcdFxcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9uX2ZpbHRlciAqc3JjKVxcbit7XFxuK1xcdGRhbW9uX2NvbW1pdF9maWx0ZXIoZHN0LCBzcmMpO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2V0eXBlLCBzcmMtXFx1MDAzZXR5cGUpO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VtYXRjaGluZywgc3JjLVxcdTAwM2VtYXRjaGluZyk7XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZWFsbG93LCBzcmMtXFx1MDAzZWFsbG93KTtcXG4rXFx0c3dpdGNoIChzcmMtXFx1MDAzZXR5cGUpIHtcXG4rXFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcXG4rXFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNlbWVtY2dfaWQsIHNyYy1cXHUwMDNlbWVtY2dfaWQpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fZmlsdGVyIGRzdCA9IHtcXG4rXFx0XFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OLFxcbitcXHRcXHQubWF0Y2hpbmcgPSBmYWxzZSxcXG4rXFx0XFx0LmFsbG93ID0gZmFsc2UsXFxuK1xcdH07XFxuK1xcbitcXHRkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHRlc3QsIFxcdTAwMjZkc3QsXFxuK1xcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9uX2ZpbHRlcil7XFxuK1xcdFxcdFxcdC50eXBlID0gREFNT05fRklMVEVSX1RZUEVfQU5PTixcXG4rXFx0XFx0XFx0Lm1hdGNoaW5nID0gdHJ1ZSxcXG4rXFx0XFx0XFx0LmFsbG93ID0gdHJ1ZSxcXG4rXFx0XFx0XFx0fSk7XFxuK1xcdGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3IodGVzdCwgXFx1MDAyNmRzdCxcXG4rXFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb25fZmlsdGVyKXtcXG4rXFx0XFx0XFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRyxcXG4rXFx0XFx0XFx0Lm1hdGNoaW5nID0gZmFsc2UsXFxuK1xcdFxcdFxcdC5hbGxvdyA9IGZhbHNlLFxcbitcXHRcXHRcXHQubWVtY2dfaWQgPSAxMjMsXFxuK1xcdFxcdFxcdH0pO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fdGVzdF9oZWxwX3NldHVwX3Byb2Jlcyh1bnNpZ25lZCBpbnQgd2VpZ2h0c1tdLFxcbitcXHRcXHRpbnQgbnJfd2VpZ2h0cylcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxuK1xcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xcbitcXHRpZiAoIWN0eClcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl93ZWlnaHRzOyBpKyspIHtcXG4rXFx0XFx0cHJvYmUgPSBkYW1vbl9uZXdfcHJvYmUoKTtcXG4rXFx0XFx0aWYgKCFwcm9iZSkge1xcbitcXHRcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0fVxcbitcXHRcXHRwcm9iZS1cXHUwMDNld2VpZ2h0ID0gd2VpZ2h0c1tpXTtcXG4rXFx0XFx0ZGFtb25fYWRkX3Byb2JlKGN0eCwgcHJvYmUpO1xcbitcXHR9XFxuK1xcdHJldHVybiBjdHg7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbitcXHRcXHR1bnNpZ25lZCBpbnQgZHN0X3dlaWdodHNbXSwgaW50IG5yX2RzdF9wcm9iZXMsXFxuK1xcdFxcdHVuc2lnbmVkIGludCBzcmNfd2VpZ2h0c1tdLCBpbnQgbnJfc3JjX3Byb2JlcylcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsICpzcmM7XFxuK1xcdGludCBlcnI7XFxuK1xcdHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0X3Byb2JlLCAqc3JjX3Byb2JlO1xcbitcXG4rXFx0ZHN0ID0gZGFtb25fdGVzdF9oZWxwX3NldHVwX3Byb2Jlcyhkc3Rfd2VpZ2h0cywgbnJfZHN0X3Byb2Jlcyk7XFxuK1xcdGlmICghZHN0KVxcbitcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJkc3QgYWxsb2MgZmFpbFxcXCIpO1xcbitcXHRzcmMgPSBkYW1vbl90ZXN0X2hlbHBfc2V0dXBfcHJvYmVzKHNyY193ZWlnaHRzLCBucl9zcmNfcHJvYmVzKTtcXG4rXFx0aWYgKCFzcmMpIHtcXG4rXFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoZHN0KTtcXG4rXFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwic3JjIGFsbG9jIGZhaWxcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gZGFtb25fY29tbWl0X3Byb2Jlcyhkc3QsIHNyYyk7XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBlcnIsIDApO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0bnJfZHN0X3Byb2JlcyA9IDA7XFxuK1xcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKGRzdF9wcm9iZSwgZHN0KVxcbitcXHRcXHRucl9kc3RfcHJvYmVzKys7XFxuK1xcdG5yX3NyY19wcm9iZXMgPSAwO1xcbitcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShzcmNfcHJvYmUsIHNyYylcXG4rXFx0XFx0bnJfc3JjX3Byb2JlcysrO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbnJfZHN0X3Byb2JlcywgbnJfc3JjX3Byb2Jlcyk7XFxuK1xcdGlmIChucl9kc3RfcHJvYmVzICE9IG5yX3NyY19wcm9iZXMpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRucl9kc3RfcHJvYmVzID0gMDtcXG4rXFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUoZHN0X3Byb2JlLCBkc3QpIHtcXG4rXFx0XFx0c3JjX3Byb2JlID0gZGFtb25fbnRoX3Byb2JlKG5yX2RzdF9wcm9iZXMsIHNyYyk7XFxuK1xcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBzcmNfcHJvYmUtXFx1MDAzZXdlaWdodCwgZHN0X3Byb2JlLVxcdTAwM2V3ZWlnaHQpO1xcbitcXHRcXHRucl9kc3RfcHJvYmVzKys7XFxuK1xcdH1cXG4rb3V0OlxcbitcXHRkYW1vbl9kZXN0cm95X2N0eChkc3QpO1xcbitcXHRkYW1vbl9kZXN0cm95X2N0eChzcmMpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcXG4rXFx0XFx0XFx0KHVuc2lnbmVkIGludFtdKXt9LCAwLCAodW5zaWduZWQgaW50W10pe30sIDApO1xcbitcXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXFxuK1xcdFxcdFxcdCh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXsxfSwgMSk7XFxuK1xcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcXG4rXFx0XFx0XFx0KHVuc2lnbmVkIGludFtdKXt9LCAwLCAodW5zaWduZWQgaW50W10pezEsIDJ9LCAyKTtcXG4rXFx0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxcbitcXHRcXHRcXHQodW5zaWduZWQgaW50W10pezF9LCAxLCAodW5zaWduZWQgaW50W10pezJ9LCAxKTtcXG4rXFx0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxcbitcXHRcXHRcXHQodW5zaWduZWQgaW50W10pezF9LCAxLCAodW5zaWduZWQgaW50W10pezIsIDN9LCAyKTtcXG4rXFx0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxcbitcXHRcXHRcXHQodW5zaWduZWQgaW50W10pezIsIDN9LCAyLCAodW5zaWduZWQgaW50W10pezF9LCAxKTtcXG4rXFx0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxcbitcXHRcXHRcXHQodW5zaWduZWQgaW50W10pezIsIDN9LCAyLCAodW5zaWduZWQgaW50W10pe30sIDApO1xcbitcXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXFxuK1xcdFxcdFxcdCh1bnNpZ25lZCBpbnRbXSl7Mn0sIDEsICh1bnNpZ25lZCBpbnRbXSl7fSwgMCk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2N0eChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIHtcXG4gXFx0c3RydWN0IGRhbW9uX2N0eCAqc3JjLCAqZHN0O1xcbkBAIC0xNzIyLDYgKzE4NDQsOCBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xcbiBcXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3BhZ2VvdXQpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X21pZ3JhdGVfaG90KSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9ucyksXFxuK1xcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9jb21taXRfZmlsdGVyKSxcXG4rXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXMpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X2N0eCksXFxuIFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF92YWxpZF9wcm9iZV9wYXJhbXMpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfZmlsdGVyX291dCksXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weVxcbmluZGV4IGY2MDRiN2Q2NTMwYjMuLmU3MDk1YzMzNjUyNDUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vX2RhbW9uX3N5c2ZzLnB5XFxuQEAgLTU3MCw2ICs1NzAsMTE3IEBAIGNsYXNzIEludGVydmFsc0dvYWw6XFxuICAgICAgICAgICAgIHJldHVybiBlcnJcXG4gICAgICAgICByZXR1cm4gTm9uZVxcbiBcXG4rY2xhc3MgRGFtb25GaWx0ZXI6XFxuKyAgICB0eXBlXyA9IE5vbmVcXG4rICAgIG1hdGNoaW5nID0gTm9uZVxcbisgICAgYWxsb3cgPSBOb25lXFxuKyAgICBmaWx0ZXJzID0gTm9uZVxcbisgICAgcGF0aCA9IE5vbmVcXG4rICAgIGlkeCA9IE5vbmVcXG4rXFxuKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV89J2Fub24nLCBtYXRjaGluZz1GYWxzZSwgYWxsb3c9RmFsc2UsIHBhdGg9Tm9uZSk6XFxuKyAgICAgICAgc2VsZi50eXBlXyA9IHR5cGVfXFxuKyAgICAgICAgc2VsZi5tYXRjaGluZyA9IG1hdGNoaW5nXFxuKyAgICAgICAgc2VsZi5hbGxvdyA9IGFsbG93XFxuKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aFxcbitcXG4rICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XFxuKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmZpbHRlcnMuc3lzZnNfZGlyKCksICclZCcgJSBzZWxmLmlkeClcXG4rXFxuKyAgICBkZWYgc3RhZ2Uoc2VsZik6XFxuKyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ3R5cGUnKSwgc2VsZi50eXBlXylcXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgIHJldHVybiBlcnJcXG4rICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAnbWF0Y2hpbmcnKSxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICdZJyBpZiBzZWxmLm1hdGNoaW5nIGVsc2UgJ04nKVxcbisgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAgcmV0dXJuIGVyclxcbisgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUob3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICdhbGxvdycpLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgJ1knIGlmIHNlbGYuYWxsb3cgZWxzZSAnTicpXFxuKyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICByZXR1cm4gZXJyXFxuKyAgICAgICAgaWYgc2VsZi50eXBlXyA9PSAnbWVtY2cnOlxcbisgICAgICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAncGF0aCcpLCBzZWxmLnBhdGgpXFxuKyAgICAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAgICAgIHJldHVybiBlcnJcXG4rICAgICAgICByZXR1cm4gTm9uZVxcbitcXG4rY2xhc3MgRGFtb25GaWx0ZXJzOlxcbisgICAgZmlsdGVycyA9IE5vbmVcXG4rICAgIHByb2JlID0gTm9uZVxcbitcXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWx0ZXJzPU5vbmUpOlxcbisgICAgICAgIGlmIGZpbHRlcnMgaXMgTm9uZTpcXG4rICAgICAgICAgICAgZmlsdGVycyA9IFtdXFxuKyAgICAgICAgc2VsZi5maWx0ZXJzID0gZmlsdGVyc1xcbisgICAgICAgIGZvciBpZHgsIGZpbHRlciBpbiBlbnVtZXJhdGUoc2VsZi5maWx0ZXJzKTpcXG4rICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMgPSBzZWxmXFxuKyAgICAgICAgICAgIGZpbHRlci5pZHggPSBpZHhcXG4rXFxuKyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxcbisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5wcm9iZS5zeXNmc19kaXIoKSwgJ2ZpbHRlcnMnKVxcbitcXG4rICAgIGRlZiBzdGFnZShzZWxmKTpcXG4rICAgICAgICBlcnIgPSB3cml0ZV9maWxlKFxcbisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICducl9maWx0ZXJzJyksXFxuKyAgICAgICAgICAgICAgICBsZW4oc2VsZi5maWx0ZXJzKSlcXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgIHJldHVybiBlcnJcXG4rICAgICAgICBmb3IgZmlsdGVyIGluIHNlbGYuZmlsdGVyczpcXG4rICAgICAgICAgICAgZXJyID0gZmlsdGVyLnN0YWdlKClcXG4rICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICAgICAgcmV0dXJuIGVyclxcbisgICAgICAgIHJldHVybiBOb25lXFxuK1xcbitjbGFzcyBEYW1vblByb2JlOlxcbisgICAgd2VpZ2h0ID0gTm9uZVxcbisgICAgZmlsdGVycyA9IE5vbmVcXG4rICAgIHByb2JlcyA9IE5vbmVcXG4rICAgIGlkeCA9IE5vbmVcXG4rXFxuKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2VpZ2h0PTAsIGZpbHRlcnM9Tm9uZSk6XFxuKyAgICAgICAgc2VsZi53ZWlnaHQgPSB3ZWlnaHRcXG4rICAgICAgICBpZiBmaWx0ZXJzIGlzIE5vbmU6XFxuKyAgICAgICAgICAgIGZpbHRlcnMgPSBEYW1vbkZpbHRlcnMoKVxcbisgICAgICAgIHNlbGYuZmlsdGVycyA9IGZpbHRlcnNcXG4rICAgICAgICBzZWxmLmZpbHRlcnMucHJvYmUgPSBzZWxmXFxuK1xcbisgICAgZGVmIHN5c2ZzX2RpcihzZWxmKTpcXG4rICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYucHJvYmVzLnN5c2ZzX2RpcigpLCAnJWQnICUgc2VsZi5pZHgpXFxuK1xcbisgICAgZGVmIHN0YWdlKHNlbGYpOlxcbisgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUoXFxuKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ3dlaWdodCcpLCAnJWQnICUgc2VsZi53ZWlnaHQpXFxuKyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICByZXR1cm4gZXJyXFxuKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsdGVycy5zdGFnZSgpXFxuK1xcbitjbGFzcyBEYW1vblByb2JlczpcXG4rICAgIHByb2JlcyA9IE5vbmVcXG4rICAgIGF0dHJzID0gTm9uZVxcbitcXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9iZXM9Tm9uZSk6XFxuKyAgICAgICAgaWYgcHJvYmVzIGlzIE5vbmU6XFxuKyAgICAgICAgICAgIHByb2JlcyA9IFtdXFxuKyAgICAgICAgc2VsZi5wcm9iZXMgPSBwcm9iZXNcXG4rICAgICAgICBmb3IgaWR4LCBwcm9iZSBpbiBlbnVtZXJhdGUoc2VsZi5wcm9iZXMpOlxcbisgICAgICAgICAgICBwcm9iZS5wcm9iZXMgPSBzZWxmXFxuKyAgICAgICAgICAgIHByb2JlLmlkeCA9IGlkeFxcbitcXG4rICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XFxuKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmF0dHJzLnN5c2ZzX2RpcigpLCAncHJvYmVzJylcXG4rXFxuKyAgICBkZWYgc3RhZ2Uoc2VsZik6XFxuKyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ25yX3Byb2JlcycpLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYucHJvYmVzKSlcXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgIHJldHVybiBlcnJcXG4rICAgICAgICBmb3IgcHJvYmUgaW4gc2VsZi5wcm9iZXM6XFxuKyAgICAgICAgICAgIGVyciA9IHByb2JlLnN0YWdlKClcXG4rICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICAgICAgcmV0dXJuIGVyclxcbisgICAgICAgIHJldHVybiBOb25lXFxuK1xcbiBjbGFzcyBEYW1vbkF0dHJzOlxcbiAgICAgc2FtcGxlX3VzID0gTm9uZVxcbiAgICAgYWdncl91cyA9IE5vbmVcXG5AQCAtNTc3LDExICs2ODgsMTIgQEAgY2xhc3MgRGFtb25BdHRyczpcXG4gICAgIHVwZGF0ZV91cyA9IE5vbmVcXG4gICAgIG1pbl9ucl9yZWdpb25zID0gTm9uZVxcbiAgICAgbWF4X25yX3JlZ2lvbnMgPSBOb25lXFxuKyAgICBwcm9iZXMgPSBOb25lXFxuICAgICBjb250ZXh0ID0gTm9uZVxcbiBcXG4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzYW1wbGVfdXM9NTAwMCwgYWdncl91cz0xMDAwMDAsXFxuICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWw9Tm9uZSwgdXBkYXRlX3VzPTEwMDAwMDAsIG1pbl9ucl9yZWdpb25zPTEwLFxcbi0gICAgICAgICAgICAgICAgIG1heF9ucl9yZWdpb25zPTEwMDApOlxcbisgICAgICAgICAgICAgICAgIG1heF9ucl9yZWdpb25zPTEwMDAsIHByb2Jlcz1Ob25lKTpcXG4gICAgICAgICBzZWxmLnNhbXBsZV91cyA9IHNhbXBsZV91c1xcbiAgICAgICAgIHNlbGYuYWdncl91cyA9IGFnZ3JfdXNcXG4gICAgICAgICBpZiBpbnRlcnZhbHNfZ29hbCBpcyBOb25lOlxcbkBAIC01OTEsNiArNzAzLDEwIEBAIGNsYXNzIERhbW9uQXR0cnM6XFxuICAgICAgICAgc2VsZi51cGRhdGVfdXMgPSB1cGRhdGVfdXNcXG4gICAgICAgICBzZWxmLm1pbl9ucl9yZWdpb25zID0gbWluX25yX3JlZ2lvbnNcXG4gICAgICAgICBzZWxmLm1heF9ucl9yZWdpb25zID0gbWF4X25yX3JlZ2lvbnNcXG4rICAgICAgICBpZiBwcm9iZXMgaXMgTm9uZTpcXG4rICAgICAgICAgICAgcHJvYmVzID0gRGFtb25Qcm9iZXMoKVxcbisgICAgICAgIHNlbGYucHJvYmVzID0gcHJvYmVzXFxuKyAgICAgICAgc2VsZi5wcm9iZXMuYXR0cnMgPSBzZWxmXFxuIFxcbiAgICAgZGVmIGludGVydmFsX3N5c2ZzX2RpcihzZWxmKTpcXG4gICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJ21vbml0b3JpbmdfYXR0cnMnLFxcbkBAIC02MDAsNiArNzE2LDkgQEAgY2xhc3MgRGFtb25BdHRyczpcXG4gICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJ21vbml0b3JpbmdfYXR0cnMnLFxcbiAgICAgICAgICAgICAgICAgJ25yX3JlZ2lvbnMnKVxcbiBcXG4rICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XFxuKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmNvbnRleHQuc3lzZnNfZGlyKCksICdtb25pdG9yaW5nX2F0dHJzJylcXG4rXFxuICAgICBkZWYgc3RhZ2Uoc2VsZik6XFxuICAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5pbnRlcnZhbF9zeXNmc19kaXIoKSwgJ3NhbXBsZV91cycpLFxcbiAgICAgICAgICAgICAgICAgc2VsZi5zYW1wbGVfdXMpXFxuQEAgLTYyOSw2ICs3NDgsMTAgQEAgY2xhc3MgRGFtb25BdHRyczpcXG4gICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XFxuICAgICAgICAgICAgIHJldHVybiBlcnJcXG4gXFxuKyAgICAgICAgZXJyID0gc2VsZi5wcm9iZXMuc3RhZ2UoKVxcbisgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAgcmV0dXJuIGVyclxcbitcXG4gY2xhc3MgRGFtb25DdHg6XFxuICAgICBvcHMgPSBOb25lXFxuICAgICBtb25pdG9yaW5nX2F0dHJzID0gTm9uZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weVxcbmluZGV4IDA5NTUyZTkxYmM3ODIuLjQ2MjIwNDZmZDAxMTggMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlcXG5AQCAtNDgsNiArNDgsMzcgQEAgZGVmIGF0dHJzX3RvX2RpY3QoYXR0cnMpOlxcbiAgICAgICAgIFsnbWF4X25yX3JlZ2lvbnMnLCBpbnRdLFxcbiAgICAgICAgIF0pXFxuIFxcbitkZWYgZmlsdGVyX3RvX2RpY3QoZGFtb25fZmlsdGVyKTpcXG4rICAgIGZpbHRlcl90eXBlX2tleXdvcmQgPSB7XFxuKyAgICAgICAgICAgIDA6ICdhbm9uJyxcXG4rICAgICAgICAgICAgMTogJ21lbWNnJyxcXG4rICAgICAgICAgICAgfVxcbisgICAgZGljdF8gPSB7XFxuKyAgICAgICAgICAgICd0eXBlJzogZmlsdGVyX3R5cGVfa2V5d29yZFtpbnQoZGFtb25fZmlsdGVyLnR5cGUpXSxcXG4rICAgICAgICAgICAgJ21hdGNoaW5nJzogYm9vbChkYW1vbl9maWx0ZXIubWF0Y2hpbmcpLFxcbisgICAgICAgICAgICAnYWxsb3cnOiBib29sKGRhbW9uX2ZpbHRlci5hbGxvdyksXFxuKyAgICAgICAgICAgIH1cXG4rICAgIHR5cGVfID0gZGljdF9bJ3R5cGUnXVxcbisgICAgaWYgdHlwZV8gPT0gJ21lbWNnJzpcXG4rICAgICAgICBkaWN0X1snbWVtY2dfaWQnXSA9IGludChkYW1vbl9maWx0ZXIubWVtY2dfaWQpXFxuKyAgICByZXR1cm4gZGljdF9cXG4rXFxuK2RlZiBmaWx0ZXJzX3RvX2xpc3QoZmlsdGVycyk6XFxuKyAgICByZXR1cm4gW2ZpbHRlcl90b19kaWN0KGYpXFxuKyAgICAgICAgICAgIGZvciBmIGluIGxpc3RfZm9yX2VhY2hfZW50cnkoXFxuKyAgICAgICAgICAgICAgICAnc3RydWN0IGRhbW9uX2ZpbHRlcicsIGZpbHRlcnMuYWRkcmVzc19vZl8oKSwgJ2xpc3QnKV1cXG4rXFxuK2RlZiBwcm9iZV90b19kaWN0KHByb2JlKTpcXG4rICAgIHJldHVybiB0b19kaWN0KHByb2JlLCBbXFxuKyAgICAgICAgWyd3ZWlnaHQnLCBpbnRdLFxcbisgICAgICAgIFsnZmlsdGVycycsIGZpbHRlcnNfdG9fbGlzdF0sXFxuKyAgICAgICAgXSlcXG4rXFxuK2RlZiBwcm9iZXNfdG9fbGlzdChwcm9iZXMpOlxcbisgICAgcmV0dXJuIFtwcm9iZV90b19kaWN0KHApXFxuKyAgICAgICAgICAgIGZvciBwIGluIGxpc3RfZm9yX2VhY2hfZW50cnkoXFxuKyAgICAgICAgICAgICAgICAnc3RydWN0IGRhbW9uX3Byb2JlJywgcHJvYmVzLmFkZHJlc3Nfb2ZfKCksICdsaXN0JyldXFxuK1xcbiBkZWYgYWRkcl9yYW5nZV90b19kaWN0KGFkZHJfcmFuZ2UpOlxcbiAgICAgcmV0dXJuIHRvX2RpY3QoYWRkcl9yYW5nZSwgW1xcbiAgICAgICAgIFsnc3RhcnQnLCBpbnRdLFxcbkBAIC0xOTksNiArMjMwLDcgQEAgZGVmIGRhbW9uX2N0eF90b19kaWN0KGN0eCk6XFxuICAgICByZXR1cm4gdG9fZGljdChjdHgsIFtcXG4gICAgICAgICBbJ29wcycsIG9wc190b19kaWN0XSxcXG4gICAgICAgICBbJ2F0dHJzJywgYXR0cnNfdG9fZGljdF0sXFxuKyAgICAgICAgWydwcm9iZXMnLCBwcm9iZXNfdG9fbGlzdF0sXFxuICAgICAgICAgWydhZGFwdGl2ZV90YXJnZXRzJywgdGFyZ2V0c190b19saXN0XSxcXG4gICAgICAgICBbJ3NjaGVtZXMnLCBzY2hlbWVzX3RvX2xpc3RdLFxcbiAgICAgICAgIFsncGF1c2UnLCBib29sXSxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weVxcbmluZGV4IDg4YTI2NDIyZmY0NGMuLjY2YzgyNjE4OTMyMGQgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weVxcbkBAIC0xNzgsNiArMTc4LDI0IEBAIGRlZiBhc3NlcnRfbW9uaXRvcmluZ19hdHRyc19jb21taXR0ZWQoYXR0cnMsIGR1bXApOlxcbiAgICAgYXNzZXJ0X3RydWUoZHVtcFsnbWF4X25yX3JlZ2lvbnMnXSA9PSBhdHRycy5tYXhfbnJfcmVnaW9ucyxcXG4gICAgICAgICAgICAgICAgICdtYXhfbnJfcmVnaW9ucycsIGR1bXApXFxuIFxcbitkZWYgYXNzZXJ0X2RhbW9uX2ZpbHRlcnNfY29tbWl0dGVkKGZpbHRlcnMsIGR1bXApOlxcbisgICAgYXNzZXJ0X3RydWUobGVuKGR1bXApID09IGxlbihmaWx0ZXJzLmZpbHRlcnMpLCAncHJvYmUgZmlsdGVycycsIGR1bXApXFxuKyAgICBmb3IgaWR4LCBkYW1vbl9maWx0ZXIgaW4gZW51bWVyYXRlKGZpbHRlcnMuZmlsdGVycyk6XFxuKyAgICAgICAgZmlsdGVyX2R1bXAgPSBkdW1wW2lkeF1cXG4rICAgICAgICBhc3NlcnRfdHJ1ZShmaWx0ZXJfZHVtcFsndHlwZSddID09IGRhbW9uX2ZpbHRlci50eXBlXywgJ3R5cGUnLFxcbisgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9kdW1wKVxcbisgICAgICAgIGFzc2VydF90cnVlKGZpbHRlcl9kdW1wWydtYXRjaGluZyddID09IGRhbW9uX2ZpbHRlci5tYXRjaGluZyxcXG4rICAgICAgICAgICAgICAgICAgICAnbWF0Y2hpbmcnLCBmaWx0ZXJfZHVtcClcXG4rICAgICAgICBhc3NlcnRfdHJ1ZShmaWx0ZXJfZHVtcFsnYWxsb3cnXSA9PSBkYW1vbl9maWx0ZXIuYWxsb3csICdhbGxvdycsXFxuKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2R1bXApXFxuK1xcbitkZWYgYXNzZXJ0X3Byb2Jlc19jb21taXR0ZWQocHJvYmVzLCBkdW1wKTpcXG4rICAgIGFzc2VydF90cnVlKGxlbihkdW1wKSA9PSBsZW4ocHJvYmVzLnByb2JlcyksICdwcm9iZXMgbGVuZ3RoJywgZHVtcClcXG4rICAgIGZvciBpZHgsIHByb2JlIGluIGVudW1lcmF0ZShwcm9iZXMucHJvYmVzKTpcXG4rICAgICAgICBwcm9iZV9kdW1wID0gZHVtcFtpZHhdXFxuKyAgICAgICAgYXNzZXJ0X3RydWUocHJvYmUud2VpZ2h0ID09IHByb2JlX2R1bXBbJ3dlaWdodCddLCAnd2VpZ2h0JywgcHJvYmVfZHVtcClcXG4rICAgICAgICBhc3NlcnRfZGFtb25fZmlsdGVyc19jb21taXR0ZWQocHJvYmUuZmlsdGVycywgcHJvYmVfZHVtcFsnZmlsdGVycyddKVxcbitcXG4gZGVmIGFzc2VydF9tb25pdG9yaW5nX3RhcmdldF9jb21taXR0ZWQodGFyZ2V0LCBkdW1wKTpcXG4gICAgICMgdGFyZ2V0LnBpZCBpcyB0aGUgcGlkIFxcXCJudW1iZXJcXFwiLCB3aGlsZSBkdW1wWydwaWQnXSBpcyAnc3RydWN0IHBpZCdcXG4gICAgICMgcG9pbnRlciwgYW5kIGhlbmNlIGNhbm5vdCBiZSBjb21wYXJlZC5cXG5AQCAtMTk2LDYgKzIxNCw3IEBAIGRlZiBhc3NlcnRfY3R4X2NvbW1pdHRlZChjdHgsIGR1bXApOlxcbiAgICAgICAgICAgICB9XFxuICAgICBhc3NlcnRfdHJ1ZShkdW1wWydvcHMnXVsnaWQnXSA9PSBvcHNfdmFsW2N0eC5vcHNdLCAnb3BzX2lkJywgZHVtcClcXG4gICAgIGFzc2VydF9tb25pdG9yaW5nX2F0dHJzX2NvbW1pdHRlZChjdHgubW9uaXRvcmluZ19hdHRycywgZHVtcFsnYXR0cnMnXSlcXG4rICAgIGFzc2VydF9wcm9iZXNfY29tbWl0dGVkKGN0eC5tb25pdG9yaW5nX2F0dHJzLnByb2JlcywgZHVtcFsncHJvYmVzJ10pXFxuICAgICBhc3NlcnRfbW9uaXRvcmluZ190YXJnZXRzX2NvbW1pdHRlZChjdHgudGFyZ2V0cywgZHVtcFsnYWRhcHRpdmVfdGFyZ2V0cyddKVxcbiAgICAgYXNzZXJ0X3NjaGVtZXNfY29tbWl0dGVkKGN0eC5zY2hlbWVzLCBkdW1wWydzY2hlbWVzJ10pXFxuICAgICBhc3NlcnRfdHJ1ZShkdW1wWydwYXVzZSddID09IGN0eC5wYXVzZSwgJ3BhdXNlJywgZHVtcClcXG5AQCAtMzAwLDcgKzMxOSwyMSBAQCBkZWYgbWFpbigpOlxcbiAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWw9X2RhbW9uX3N5c2ZzLkludGVydmFsc0dvYWwoXFxuICAgICAgICAgICAgICAgICAgICAgYWNjZXNzX2JwPTQwMCwgYWdncnM9MywgbWluX3NhbXBsZV91cz01MDAwLFxcbiAgICAgICAgICAgICAgICAgICAgIG1heF9zYW1wbGVfdXM9MTAwMDAwMDApLFxcbi0gICAgICAgICAgICAgICAgdXBkYXRlX3VzPTIwMDAwMDApLFxcbisgICAgICAgICAgICAgICAgdXBkYXRlX3VzPTIwMDAwMDAsXFxuKyAgICAgICAgICAgICAgICBwcm9iZXM9X2RhbW9uX3N5c2ZzLkRhbW9uUHJvYmVzKFxcbisgICAgICAgICAgICAgICAgICAgIHByb2Jlcz1bX2RhbW9uX3N5c2ZzLkRhbW9uUHJvYmUoXFxuKyAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodD00MixcXG4rICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycz1fZGFtb25fc3lzZnMuRGFtb25GaWx0ZXJzKFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycz1bXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RhbW9uX3N5c2ZzLkRhbW9uRmlsdGVyKFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlXz0nYW5vbicsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nPVRydWUsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93PVRydWUsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXFxuKyAgICAgICAgICAgICAgICAgICAgKSxcXG4gICAgICAgICAgICAgc2NoZW1lcz1bX2RhbW9uX3N5c2ZzLkRhbW9zKFxcbiAgICAgICAgICAgICAgICAgYWN0aW9uPSdwYWdlb3V0JyxcXG4gICAgICAgICAgICAgICAgIGFjY2Vzc19wYXR0ZXJuPV9kYW1vbl9zeXNmcy5EYW1vc0FjY2Vzc1BhdHRlcm4oXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjQ1OjM2LjcyMjM4ODc3MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTI4MzI4MzEzOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBLVW5pdCB0ZXN0IGNhc2VzIGluIG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBhbmQgdXBkYXRlcyBzZWxmdGVzdCBzY3JpcHRzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uLy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY4ODVkYTBkNmMxMTE3OWQ5ZTcwNmY3YzdkMmZkODFjMzIwZWFhZjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDA5OjQ1OjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5pbmRleCBhZjI2YjNkNjA5NTdiLi5mMjU2OGZiYTU1MmVjIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG4rKysgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbkBAIC0xMzE2LDYgKzEzMTYsMTI4IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3RhcmdldF9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0XHQodW5zaWduZWQgbG9uZ1tdWzJdKSB7ezMsIDh9LCB7OCwgMTB9fSwgMik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuK1x0XHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpkc3QsIHN0cnVjdCBkYW1vbl9maWx0ZXIgKnNyYylcbit7XG4rXHRkYW1vbl9jb21taXRfZmlsdGVyKGRzdCwgc3JjKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNldHlwZSwgc3JjLVx1MDAzZXR5cGUpO1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VtYXRjaGluZywgc3JjLVx1MDAzZW1hdGNoaW5nKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlYWxsb3csIHNyYy1cdTAwM2VhbGxvdyk7XG4rXHRzd2l0Y2ggKHNyYy1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxuK1x0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZW1lbWNnX2lkLCBzcmMtXHUwMDNlbWVtY2dfaWQpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGJyZWFrO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdHN0cnVjdCBkYW1vbl9maWx0ZXIgZHN0ID0ge1xuK1x0XHQudHlwZSA9IERBTU9OX0ZJTFRFUl9UWVBFX0FOT04sXG4rXHRcdC5tYXRjaGluZyA9IGZhbHNlLFxuK1x0XHQuYWxsb3cgPSBmYWxzZSxcbitcdH07XG4rXG4rXHRkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHRlc3QsIFx1MDAyNmRzdCxcbitcdFx0XHRcdTAwMjYoc3RydWN0IGRhbW9uX2ZpbHRlcil7XG4rXHRcdFx0LnR5cGUgPSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OLFxuK1x0XHRcdC5tYXRjaGluZyA9IHRydWUsXG4rXHRcdFx0LmFsbG93ID0gdHJ1ZSxcbitcdFx0XHR9KTtcbitcdGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3IodGVzdCwgXHUwMDI2ZHN0LFxuK1x0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb25fZmlsdGVyKXtcbitcdFx0XHQudHlwZSA9IERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHLFxuK1x0XHRcdC5tYXRjaGluZyA9IGZhbHNlLFxuK1x0XHRcdC5hbGxvdyA9IGZhbHNlLFxuK1x0XHRcdC5tZW1jZ19pZCA9IDEyMyxcbitcdFx0XHR9KTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3Rlc3RfaGVscF9zZXR1cF9wcm9iZXModW5zaWduZWQgaW50IHdlaWdodHNbXSxcbitcdFx0aW50IG5yX3dlaWdodHMpXG4re1xuK1x0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuK1x0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcbitcdGludCBpO1xuK1xuK1x0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xuK1x0aWYgKCFjdHgpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfd2VpZ2h0czsgaSsrKSB7XG4rXHRcdHByb2JlID0gZGFtb25fbmV3X3Byb2JlKCk7XG4rXHRcdGlmICghcHJvYmUpIHtcbitcdFx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0XHR9XG4rXHRcdHByb2JlLVx1MDAzZXdlaWdodCA9IHdlaWdodHNbaV07XG4rXHRcdGRhbW9uX2FkZF9wcm9iZShjdHgsIHByb2JlKTtcbitcdH1cbitcdHJldHVybiBjdHg7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuK1x0XHR1bnNpZ25lZCBpbnQgZHN0X3dlaWdodHNbXSwgaW50IG5yX2RzdF9wcm9iZXMsXG4rXHRcdHVuc2lnbmVkIGludCBzcmNfd2VpZ2h0c1tdLCBpbnQgbnJfc3JjX3Byb2Jlcylcbit7XG4rXHRzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsICpzcmM7XG4rXHRpbnQgZXJyO1xuK1x0c3RydWN0IGRhbW9uX3Byb2JlICpkc3RfcHJvYmUsICpzcmNfcHJvYmU7XG4rXG4rXHRkc3QgPSBkYW1vbl90ZXN0X2hlbHBfc2V0dXBfcHJvYmVzKGRzdF93ZWlnaHRzLCBucl9kc3RfcHJvYmVzKTtcbitcdGlmICghZHN0KVxuK1x0XHRrdW5pdF9za2lwKHRlc3QsIFwiZHN0IGFsbG9jIGZhaWxcIik7XG4rXHRzcmMgPSBkYW1vbl90ZXN0X2hlbHBfc2V0dXBfcHJvYmVzKHNyY193ZWlnaHRzLCBucl9zcmNfcHJvYmVzKTtcbitcdGlmICghc3JjKSB7XG4rXHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGRzdCk7XG4rXHRcdGt1bml0X3NraXAodGVzdCwgXCJzcmMgYWxsb2MgZmFpbFwiKTtcbitcdH1cbitcbitcdGVyciA9IGRhbW9uX2NvbW1pdF9wcm9iZXMoZHN0LCBzcmMpO1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGVyciwgMCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dDtcbitcdG5yX2RzdF9wcm9iZXMgPSAwO1xuK1x0ZGFtb25fZm9yX2VhY2hfcHJvYmUoZHN0X3Byb2JlLCBkc3QpXG4rXHRcdG5yX2RzdF9wcm9iZXMrKztcbitcdG5yX3NyY19wcm9iZXMgPSAwO1xuK1x0ZGFtb25fZm9yX2VhY2hfcHJvYmUoc3JjX3Byb2JlLCBzcmMpXG4rXHRcdG5yX3NyY19wcm9iZXMrKztcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBucl9kc3RfcHJvYmVzLCBucl9zcmNfcHJvYmVzKTtcbitcdGlmIChucl9kc3RfcHJvYmVzICE9IG5yX3NyY19wcm9iZXMpXG4rXHRcdGdvdG8gb3V0O1xuK1x0bnJfZHN0X3Byb2JlcyA9IDA7XG4rXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShkc3RfcHJvYmUsIGRzdCkge1xuK1x0XHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUobnJfZHN0X3Byb2Jlcywgc3JjKTtcbitcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNyY19wcm9iZS1cdTAwM2V3ZWlnaHQsIGRzdF9wcm9iZS1cdTAwM2V3ZWlnaHQpO1xuK1x0XHRucl9kc3RfcHJvYmVzKys7XG4rXHR9XG4rb3V0OlxuK1x0ZGFtb25fZGVzdHJveV9jdHgoZHN0KTtcbitcdGRhbW9uX2Rlc3Ryb3lfY3R4KHNyYyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3Byb2JlcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuK1x0XHRcdCh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXt9LCAwKTtcbitcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbitcdFx0XHQodW5zaWduZWQgaW50W10pe30sIDAsICh1bnNpZ25lZCBpbnRbXSl7MX0sIDEpO1xuK1x0ZGFtb25fdGVzdF9jb21taXRfcHJvYmVzX2Zvcih0ZXN0LFxuK1x0XHRcdCh1bnNpZ25lZCBpbnRbXSl7fSwgMCwgKHVuc2lnbmVkIGludFtdKXsxLCAyfSwgMik7XG4rXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4rXHRcdFx0KHVuc2lnbmVkIGludFtdKXsxfSwgMSwgKHVuc2lnbmVkIGludFtdKXsyfSwgMSk7XG4rXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4rXHRcdFx0KHVuc2lnbmVkIGludFtdKXsxfSwgMSwgKHVuc2lnbmVkIGludFtdKXsyLCAzfSwgMik7XG4rXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4rXHRcdFx0KHVuc2lnbmVkIGludFtdKXsyLCAzfSwgMiwgKHVuc2lnbmVkIGludFtdKXsxfSwgMSk7XG4rXHRkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHRlc3QsXG4rXHRcdFx0KHVuc2lnbmVkIGludFtdKXsyLCAzfSwgMiwgKHVuc2lnbmVkIGludFtdKXt9LCAwKTtcbitcdGRhbW9uX3Rlc3RfY29tbWl0X3Byb2Jlc19mb3IodGVzdCxcbitcdFx0XHQodW5zaWduZWQgaW50W10pezJ9LCAxLCAodW5zaWduZWQgaW50W10pe30sIDApO1xuK31cbitcbiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9jdHgoc3RydWN0IGt1bml0ICp0ZXN0KVxuIHtcbiBcdHN0cnVjdCBkYW1vbl9jdHggKnNyYywgKmRzdDtcbkBAIC0xNzIyLDYgKzE4NDQsOCBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9wYWdlb3V0KSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfbWlncmF0ZV9ob3QpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9ucyksXG4rXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlciksXG4rXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X3Byb2JlcyksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X2N0eCksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdmFsaWRfcHJvYmVfcGFyYW1zKSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9maWx0ZXJfb3V0KSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHlcbmluZGV4IGY2MDRiN2Q2NTMwYjMuLmU3MDk1YzMzNjUyNDUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9fZGFtb25fc3lzZnMucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weVxuQEAgLTU3MCw2ICs1NzAsMTE3IEBAIGNsYXNzIEludGVydmFsc0dvYWw6XG4gICAgICAgICAgICAgcmV0dXJuIGVyclxuICAgICAgICAgcmV0dXJuIE5vbmVcbiBcbitjbGFzcyBEYW1vbkZpbHRlcjpcbisgICAgdHlwZV8gPSBOb25lXG4rICAgIG1hdGNoaW5nID0gTm9uZVxuKyAgICBhbGxvdyA9IE5vbmVcbisgICAgZmlsdGVycyA9IE5vbmVcbisgICAgcGF0aCA9IE5vbmVcbisgICAgaWR4ID0gTm9uZVxuK1xuKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV89J2Fub24nLCBtYXRjaGluZz1GYWxzZSwgYWxsb3c9RmFsc2UsIHBhdGg9Tm9uZSk6XG4rICAgICAgICBzZWxmLnR5cGVfID0gdHlwZV9cbisgICAgICAgIHNlbGYubWF0Y2hpbmcgPSBtYXRjaGluZ1xuKyAgICAgICAgc2VsZi5hbGxvdyA9IGFsbG93XG4rICAgICAgICBzZWxmLnBhdGggPSBwYXRoXG4rXG4rICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XG4rICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuZmlsdGVycy5zeXNmc19kaXIoKSwgJyVkJyAlIHNlbGYuaWR4KVxuK1xuKyAgICBkZWYgc3RhZ2Uoc2VsZik6XG4rICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAndHlwZScpLCBzZWxmLnR5cGVfKVxuKyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgIHJldHVybiBlcnJcbisgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUob3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICdtYXRjaGluZycpLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAnWScgaWYgc2VsZi5tYXRjaGluZyBlbHNlICdOJylcbisgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICByZXR1cm4gZXJyXG4rICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAnYWxsb3cnKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgJ1knIGlmIHNlbGYuYWxsb3cgZWxzZSAnTicpXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgcmV0dXJuIGVyclxuKyAgICAgICAgaWYgc2VsZi50eXBlXyA9PSAnbWVtY2cnOlxuKyAgICAgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUob3MucGF0aC5qb2luKHNlbGYuc3lzZnNfZGlyKCksICdwYXRoJyksIHNlbGYucGF0aClcbisgICAgICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgICAgIHJldHVybiBlcnJcbisgICAgICAgIHJldHVybiBOb25lXG4rXG4rY2xhc3MgRGFtb25GaWx0ZXJzOlxuKyAgICBmaWx0ZXJzID0gTm9uZVxuKyAgICBwcm9iZSA9IE5vbmVcbitcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbHRlcnM9Tm9uZSk6XG4rICAgICAgICBpZiBmaWx0ZXJzIGlzIE5vbmU6XG4rICAgICAgICAgICAgZmlsdGVycyA9IFtdXG4rICAgICAgICBzZWxmLmZpbHRlcnMgPSBmaWx0ZXJzXG4rICAgICAgICBmb3IgaWR4LCBmaWx0ZXIgaW4gZW51bWVyYXRlKHNlbGYuZmlsdGVycyk6XG4rICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMgPSBzZWxmXG4rICAgICAgICAgICAgZmlsdGVyLmlkeCA9IGlkeFxuK1xuKyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxuKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLnByb2JlLnN5c2ZzX2RpcigpLCAnZmlsdGVycycpXG4rXG4rICAgIGRlZiBzdGFnZShzZWxmKTpcbisgICAgICAgIGVyciA9IHdyaXRlX2ZpbGUoXG4rICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLnN5c2ZzX2RpcigpLCAnbnJfZmlsdGVycycpLFxuKyAgICAgICAgICAgICAgICBsZW4oc2VsZi5maWx0ZXJzKSlcbisgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICByZXR1cm4gZXJyXG4rICAgICAgICBmb3IgZmlsdGVyIGluIHNlbGYuZmlsdGVyczpcbisgICAgICAgICAgICBlcnIgPSBmaWx0ZXIuc3RhZ2UoKVxuKyAgICAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICAgICAgcmV0dXJuIGVyclxuKyAgICAgICAgcmV0dXJuIE5vbmVcbitcbitjbGFzcyBEYW1vblByb2JlOlxuKyAgICB3ZWlnaHQgPSBOb25lXG4rICAgIGZpbHRlcnMgPSBOb25lXG4rICAgIHByb2JlcyA9IE5vbmVcbisgICAgaWR4ID0gTm9uZVxuK1xuKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2VpZ2h0PTAsIGZpbHRlcnM9Tm9uZSk6XG4rICAgICAgICBzZWxmLndlaWdodCA9IHdlaWdodFxuKyAgICAgICAgaWYgZmlsdGVycyBpcyBOb25lOlxuKyAgICAgICAgICAgIGZpbHRlcnMgPSBEYW1vbkZpbHRlcnMoKVxuKyAgICAgICAgc2VsZi5maWx0ZXJzID0gZmlsdGVyc1xuKyAgICAgICAgc2VsZi5maWx0ZXJzLnByb2JlID0gc2VsZlxuK1xuKyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxuKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLnByb2Jlcy5zeXNmc19kaXIoKSwgJyVkJyAlIHNlbGYuaWR4KVxuK1xuKyAgICBkZWYgc3RhZ2Uoc2VsZik6XG4rICAgICAgICBlcnIgPSB3cml0ZV9maWxlKFxuKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ3dlaWdodCcpLCAnJWQnICUgc2VsZi53ZWlnaHQpXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgcmV0dXJuIGVyclxuKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsdGVycy5zdGFnZSgpXG4rXG4rY2xhc3MgRGFtb25Qcm9iZXM6XG4rICAgIHByb2JlcyA9IE5vbmVcbisgICAgYXR0cnMgPSBOb25lXG4rXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9iZXM9Tm9uZSk6XG4rICAgICAgICBpZiBwcm9iZXMgaXMgTm9uZTpcbisgICAgICAgICAgICBwcm9iZXMgPSBbXVxuKyAgICAgICAgc2VsZi5wcm9iZXMgPSBwcm9iZXNcbisgICAgICAgIGZvciBpZHgsIHByb2JlIGluIGVudW1lcmF0ZShzZWxmLnByb2Jlcyk6XG4rICAgICAgICAgICAgcHJvYmUucHJvYmVzID0gc2VsZlxuKyAgICAgICAgICAgIHByb2JlLmlkeCA9IGlkeFxuK1xuKyAgICBkZWYgc3lzZnNfZGlyKHNlbGYpOlxuKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmF0dHJzLnN5c2ZzX2RpcigpLCAncHJvYmVzJylcbitcbisgICAgZGVmIHN0YWdlKHNlbGYpOlxuKyAgICAgICAgZXJyID0gd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zeXNmc19kaXIoKSwgJ25yX3Byb2JlcycpLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oc2VsZi5wcm9iZXMpKVxuKyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgIHJldHVybiBlcnJcbisgICAgICAgIGZvciBwcm9iZSBpbiBzZWxmLnByb2JlczpcbisgICAgICAgICAgICBlcnIgPSBwcm9iZS5zdGFnZSgpXG4rICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyXG4rICAgICAgICByZXR1cm4gTm9uZVxuK1xuIGNsYXNzIERhbW9uQXR0cnM6XG4gICAgIHNhbXBsZV91cyA9IE5vbmVcbiAgICAgYWdncl91cyA9IE5vbmVcbkBAIC01NzcsMTEgKzY4OCwxMiBAQCBjbGFzcyBEYW1vbkF0dHJzOlxuICAgICB1cGRhdGVfdXMgPSBOb25lXG4gICAgIG1pbl9ucl9yZWdpb25zID0gTm9uZVxuICAgICBtYXhfbnJfcmVnaW9ucyA9IE5vbmVcbisgICAgcHJvYmVzID0gTm9uZVxuICAgICBjb250ZXh0ID0gTm9uZVxuIFxuICAgICBkZWYgX19pbml0X18oc2VsZiwgc2FtcGxlX3VzPTUwMDAsIGFnZ3JfdXM9MTAwMDAwLFxuICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzX2dvYWw9Tm9uZSwgdXBkYXRlX3VzPTEwMDAwMDAsIG1pbl9ucl9yZWdpb25zPTEwLFxuLSAgICAgICAgICAgICAgICAgbWF4X25yX3JlZ2lvbnM9MTAwMCk6XG4rICAgICAgICAgICAgICAgICBtYXhfbnJfcmVnaW9ucz0xMDAwLCBwcm9iZXM9Tm9uZSk6XG4gICAgICAgICBzZWxmLnNhbXBsZV91cyA9IHNhbXBsZV91c1xuICAgICAgICAgc2VsZi5hZ2dyX3VzID0gYWdncl91c1xuICAgICAgICAgaWYgaW50ZXJ2YWxzX2dvYWwgaXMgTm9uZTpcbkBAIC01OTEsNiArNzAzLDEwIEBAIGNsYXNzIERhbW9uQXR0cnM6XG4gICAgICAgICBzZWxmLnVwZGF0ZV91cyA9IHVwZGF0ZV91c1xuICAgICAgICAgc2VsZi5taW5fbnJfcmVnaW9ucyA9IG1pbl9ucl9yZWdpb25zXG4gICAgICAgICBzZWxmLm1heF9ucl9yZWdpb25zID0gbWF4X25yX3JlZ2lvbnNcbisgICAgICAgIGlmIHByb2JlcyBpcyBOb25lOlxuKyAgICAgICAgICAgIHByb2JlcyA9IERhbW9uUHJvYmVzKClcbisgICAgICAgIHNlbGYucHJvYmVzID0gcHJvYmVzXG4rICAgICAgICBzZWxmLnByb2Jlcy5hdHRycyA9IHNlbGZcbiBcbiAgICAgZGVmIGludGVydmFsX3N5c2ZzX2RpcihzZWxmKTpcbiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5jb250ZXh0LnN5c2ZzX2RpcigpLCAnbW9uaXRvcmluZ19hdHRycycsXG5AQCAtNjAwLDYgKzcxNiw5IEBAIGNsYXNzIERhbW9uQXR0cnM6XG4gICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJ21vbml0b3JpbmdfYXR0cnMnLFxuICAgICAgICAgICAgICAgICAnbnJfcmVnaW9ucycpXG4gXG4rICAgIGRlZiBzeXNmc19kaXIoc2VsZik6XG4rICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuY29udGV4dC5zeXNmc19kaXIoKSwgJ21vbml0b3JpbmdfYXR0cnMnKVxuK1xuICAgICBkZWYgc3RhZ2Uoc2VsZik6XG4gICAgICAgICBlcnIgPSB3cml0ZV9maWxlKG9zLnBhdGguam9pbihzZWxmLmludGVydmFsX3N5c2ZzX2RpcigpLCAnc2FtcGxlX3VzJyksXG4gICAgICAgICAgICAgICAgIHNlbGYuc2FtcGxlX3VzKVxuQEAgLTYyOSw2ICs3NDgsMTAgQEAgY2xhc3MgRGFtb25BdHRyczpcbiAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZTpcbiAgICAgICAgICAgICByZXR1cm4gZXJyXG4gXG4rICAgICAgICBlcnIgPSBzZWxmLnByb2Jlcy5zdGFnZSgpXG4rICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgcmV0dXJuIGVyclxuK1xuIGNsYXNzIERhbW9uQ3R4OlxuICAgICBvcHMgPSBOb25lXG4gICAgIG1vbml0b3JpbmdfYXR0cnMgPSBOb25lXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlcbmluZGV4IDA5NTUyZTkxYmM3ODIuLjQ2MjIwNDZmZDAxMTggMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5XG5AQCAtNDgsNiArNDgsMzcgQEAgZGVmIGF0dHJzX3RvX2RpY3QoYXR0cnMpOlxuICAgICAgICAgWydtYXhfbnJfcmVnaW9ucycsIGludF0sXG4gICAgICAgICBdKVxuIFxuK2RlZiBmaWx0ZXJfdG9fZGljdChkYW1vbl9maWx0ZXIpOlxuKyAgICBmaWx0ZXJfdHlwZV9rZXl3b3JkID0ge1xuKyAgICAgICAgICAgIDA6ICdhbm9uJyxcbisgICAgICAgICAgICAxOiAnbWVtY2cnLFxuKyAgICAgICAgICAgIH1cbisgICAgZGljdF8gPSB7XG4rICAgICAgICAgICAgJ3R5cGUnOiBmaWx0ZXJfdHlwZV9rZXl3b3JkW2ludChkYW1vbl9maWx0ZXIudHlwZSldLFxuKyAgICAgICAgICAgICdtYXRjaGluZyc6IGJvb2woZGFtb25fZmlsdGVyLm1hdGNoaW5nKSxcbisgICAgICAgICAgICAnYWxsb3cnOiBib29sKGRhbW9uX2ZpbHRlci5hbGxvdyksXG4rICAgICAgICAgICAgfVxuKyAgICB0eXBlXyA9IGRpY3RfWyd0eXBlJ11cbisgICAgaWYgdHlwZV8gPT0gJ21lbWNnJzpcbisgICAgICAgIGRpY3RfWydtZW1jZ19pZCddID0gaW50KGRhbW9uX2ZpbHRlci5tZW1jZ19pZClcbisgICAgcmV0dXJuIGRpY3RfXG4rXG4rZGVmIGZpbHRlcnNfdG9fbGlzdChmaWx0ZXJzKTpcbisgICAgcmV0dXJuIFtmaWx0ZXJfdG9fZGljdChmKVxuKyAgICAgICAgICAgIGZvciBmIGluIGxpc3RfZm9yX2VhY2hfZW50cnkoXG4rICAgICAgICAgICAgICAgICdzdHJ1Y3QgZGFtb25fZmlsdGVyJywgZmlsdGVycy5hZGRyZXNzX29mXygpLCAnbGlzdCcpXVxuK1xuK2RlZiBwcm9iZV90b19kaWN0KHByb2JlKTpcbisgICAgcmV0dXJuIHRvX2RpY3QocHJvYmUsIFtcbisgICAgICAgIFsnd2VpZ2h0JywgaW50XSxcbisgICAgICAgIFsnZmlsdGVycycsIGZpbHRlcnNfdG9fbGlzdF0sXG4rICAgICAgICBdKVxuK1xuK2RlZiBwcm9iZXNfdG9fbGlzdChwcm9iZXMpOlxuKyAgICByZXR1cm4gW3Byb2JlX3RvX2RpY3QocClcbisgICAgICAgICAgICBmb3IgcCBpbiBsaXN0X2Zvcl9lYWNoX2VudHJ5KFxuKyAgICAgICAgICAgICAgICAnc3RydWN0IGRhbW9uX3Byb2JlJywgcHJvYmVzLmFkZHJlc3Nfb2ZfKCksICdsaXN0JyldXG4rXG4gZGVmIGFkZHJfcmFuZ2VfdG9fZGljdChhZGRyX3JhbmdlKTpcbiAgICAgcmV0dXJuIHRvX2RpY3QoYWRkcl9yYW5nZSwgW1xuICAgICAgICAgWydzdGFydCcsIGludF0sXG5AQCAtMTk5LDYgKzIzMCw3IEBAIGRlZiBkYW1vbl9jdHhfdG9fZGljdChjdHgpOlxuICAgICByZXR1cm4gdG9fZGljdChjdHgsIFtcbiAgICAgICAgIFsnb3BzJywgb3BzX3RvX2RpY3RdLFxuICAgICAgICAgWydhdHRycycsIGF0dHJzX3RvX2RpY3RdLFxuKyAgICAgICAgWydwcm9iZXMnLCBwcm9iZXNfdG9fbGlzdF0sXG4gICAgICAgICBbJ2FkYXB0aXZlX3RhcmdldHMnLCB0YXJnZXRzX3RvX2xpc3RdLFxuICAgICAgICAgWydzY2hlbWVzJywgc2NoZW1lc190b19saXN0XSxcbiAgICAgICAgIFsncGF1c2UnLCBib29sXSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5XG5pbmRleCA4OGEyNjQyMmZmNDRjLi42NmM4MjYxODkzMjBkIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnB5XG5AQCAtMTc4LDYgKzE3OCwyNCBAQCBkZWYgYXNzZXJ0X21vbml0b3JpbmdfYXR0cnNfY29tbWl0dGVkKGF0dHJzLCBkdW1wKTpcbiAgICAgYXNzZXJ0X3RydWUoZHVtcFsnbWF4X25yX3JlZ2lvbnMnXSA9PSBhdHRycy5tYXhfbnJfcmVnaW9ucyxcbiAgICAgICAgICAgICAgICAgJ21heF9ucl9yZWdpb25zJywgZHVtcClcbiBcbitkZWYgYXNzZXJ0X2RhbW9uX2ZpbHRlcnNfY29tbWl0dGVkKGZpbHRlcnMsIGR1bXApOlxuKyAgICBhc3NlcnRfdHJ1ZShsZW4oZHVtcCkgPT0gbGVuKGZpbHRlcnMuZmlsdGVycyksICdwcm9iZSBmaWx0ZXJzJywgZHVtcClcbisgICAgZm9yIGlkeCwgZGFtb25fZmlsdGVyIGluIGVudW1lcmF0ZShmaWx0ZXJzLmZpbHRlcnMpOlxuKyAgICAgICAgZmlsdGVyX2R1bXAgPSBkdW1wW2lkeF1cbisgICAgICAgIGFzc2VydF90cnVlKGZpbHRlcl9kdW1wWyd0eXBlJ10gPT0gZGFtb25fZmlsdGVyLnR5cGVfLCAndHlwZScsXG4rICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfZHVtcClcbisgICAgICAgIGFzc2VydF90cnVlKGZpbHRlcl9kdW1wWydtYXRjaGluZyddID09IGRhbW9uX2ZpbHRlci5tYXRjaGluZyxcbisgICAgICAgICAgICAgICAgICAgICdtYXRjaGluZycsIGZpbHRlcl9kdW1wKVxuKyAgICAgICAgYXNzZXJ0X3RydWUoZmlsdGVyX2R1bXBbJ2FsbG93J10gPT0gZGFtb25fZmlsdGVyLmFsbG93LCAnYWxsb3cnLFxuKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2R1bXApXG4rXG4rZGVmIGFzc2VydF9wcm9iZXNfY29tbWl0dGVkKHByb2JlcywgZHVtcCk6XG4rICAgIGFzc2VydF90cnVlKGxlbihkdW1wKSA9PSBsZW4ocHJvYmVzLnByb2JlcyksICdwcm9iZXMgbGVuZ3RoJywgZHVtcClcbisgICAgZm9yIGlkeCwgcHJvYmUgaW4gZW51bWVyYXRlKHByb2Jlcy5wcm9iZXMpOlxuKyAgICAgICAgcHJvYmVfZHVtcCA9IGR1bXBbaWR4XVxuKyAgICAgICAgYXNzZXJ0X3RydWUocHJvYmUud2VpZ2h0ID09IHByb2JlX2R1bXBbJ3dlaWdodCddLCAnd2VpZ2h0JywgcHJvYmVfZHVtcClcbisgICAgICAgIGFzc2VydF9kYW1vbl9maWx0ZXJzX2NvbW1pdHRlZChwcm9iZS5maWx0ZXJzLCBwcm9iZV9kdW1wWydmaWx0ZXJzJ10pXG4rXG4gZGVmIGFzc2VydF9tb25pdG9yaW5nX3RhcmdldF9jb21taXR0ZWQodGFyZ2V0LCBkdW1wKTpcbiAgICAgIyB0YXJnZXQucGlkIGlzIHRoZSBwaWQgXCJudW1iZXJcIiwgd2hpbGUgZHVtcFsncGlkJ10gaXMgJ3N0cnVjdCBwaWQnXG4gICAgICMgcG9pbnRlciwgYW5kIGhlbmNlIGNhbm5vdCBiZSBjb21wYXJlZC5cbkBAIC0xOTYsNiArMjE0LDcgQEAgZGVmIGFzc2VydF9jdHhfY29tbWl0dGVkKGN0eCwgZHVtcCk6XG4gICAgICAgICAgICAgfVxuICAgICBhc3NlcnRfdHJ1ZShkdW1wWydvcHMnXVsnaWQnXSA9PSBvcHNfdmFsW2N0eC5vcHNdLCAnb3BzX2lkJywgZHVtcClcbiAgICAgYXNzZXJ0X21vbml0b3JpbmdfYXR0cnNfY29tbWl0dGVkKGN0eC5tb25pdG9yaW5nX2F0dHJzLCBkdW1wWydhdHRycyddKVxuKyAgICBhc3NlcnRfcHJvYmVzX2NvbW1pdHRlZChjdHgubW9uaXRvcmluZ19hdHRycy5wcm9iZXMsIGR1bXBbJ3Byb2JlcyddKVxuICAgICBhc3NlcnRfbW9uaXRvcmluZ190YXJnZXRzX2NvbW1pdHRlZChjdHgudGFyZ2V0cywgZHVtcFsnYWRhcHRpdmVfdGFyZ2V0cyddKVxuICAgICBhc3NlcnRfc2NoZW1lc19jb21taXR0ZWQoY3R4LnNjaGVtZXMsIGR1bXBbJ3NjaGVtZXMnXSlcbiAgICAgYXNzZXJ0X3RydWUoZHVtcFsncGF1c2UnXSA9PSBjdHgucGF1c2UsICdwYXVzZScsIGR1bXApXG5AQCAtMzAwLDcgKzMxOSwyMSBAQCBkZWYgbWFpbigpOlxuICAgICAgICAgICAgICAgICBpbnRlcnZhbHNfZ29hbD1fZGFtb25fc3lzZnMuSW50ZXJ2YWxzR29hbChcbiAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc19icD00MDAsIGFnZ3JzPTMsIG1pbl9zYW1wbGVfdXM9NTAwMCxcbiAgICAgICAgICAgICAgICAgICAgIG1heF9zYW1wbGVfdXM9MTAwMDAwMDApLFxuLSAgICAgICAgICAgICAgICB1cGRhdGVfdXM9MjAwMDAwMCksXG4rICAgICAgICAgICAgICAgIHVwZGF0ZV91cz0yMDAwMDAwLFxuKyAgICAgICAgICAgICAgICBwcm9iZXM9X2RhbW9uX3N5c2ZzLkRhbW9uUHJvYmVzKFxuKyAgICAgICAgICAgICAgICAgICAgcHJvYmVzPVtfZGFtb25fc3lzZnMuRGFtb25Qcm9iZShcbisgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ9NDIsXG4rICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycz1fZGFtb25fc3lzZnMuRGFtb25GaWx0ZXJzKFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzPVtcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYW1vbl9zeXNmcy5EYW1vbkZpbHRlcihcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlXz0nYW5vbicsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmc9VHJ1ZSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdz1UcnVlLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4rICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgIHNjaGVtZXM9W19kYW1vbl9zeXNmcy5EYW1vcyhcbiAgICAgICAgICAgICAgICAgYWN0aW9uPSdwYWdlb3V0JyxcbiAgICAgICAgICAgICAgICAgYWNjZXNzX3BhdHRlcm49X2RhbW9uX3N5c2ZzLkRhbW9zQWNjZXNzUGF0dGVybihcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjQ1OjM2LjcyMjM5MDg4MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1MzcyOTY3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBkaWZmIGlzIHByZXR0eSBmb2N1c2VkLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byBhIGZldyB0ZXN0LXJlbGF0ZWQgZmlsZXM6IGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLCBhbmQgYSBmZXcgcHl0aG9uIHNjcmlwdHMgaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9gIGRpcmVjdG9yeTogYF9kYW1vbl9zeXNmcy5weWAsIGBkcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5YCwgYW5kIGBzeXNmcy5weWAuIFRoYXQncyBhIGdvb2Qgc2lnbiwgc3VnZ2VzdHMgYSBsaW1pdGVkIHNjb3BlLlxuXG5NeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyAqaXMqIHRoZSBlbnRpcmUgc2NvcGUgb2YgdGhlIGNvbW1pdC4gRXhwZXJpZW5jZSBoYXMgdGF1Z2h0IG1lIHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdpdGggREFNT04gd2hlcmUgaW50ZXJhY3Rpb25zIGNhbiBiZSBzdWJ0bGUuIEkgbmVlZCB0byBlbGltaW5hdGUgdGhlIHBvc3NpYmlsaXR5IG9mIGFueSB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBvciBoaWRkZW4gbW9kaWZpY2F0aW9ucy5cblxuU2luY2UgSSBoYXZlIHRoZSBmdWxsIGRpZmYsIEkgZG9uJ3QgbmVlZCB0byBnbyBkaWdnaW5nIGZvciBpdCwgYnV0IGp1c3QgdG8gbWFrZSBzdXJlLCBJIHdpbGwgZG91YmxlIGNoZWNrIHRoYXQgdGhlcmUgaXMgbm90aGluZyBlbHNlIGNoYW5nZWQgaW4gdGhpcyBjb21taXQuXG5JZiBuZWVkZWQsIEknbGwgZmFsbCBiYWNrIHRvIGBnaXQgZ3JlcGAgb3IgbWF5YmUgZXZlbiBqdXN0IHJlYWQgdGhyb3VnaCB0aGUgZGlmZiBpZiBpdCdzIG5vdCB0b28gbG9uZywgYnV0IGdpdmVuIHRoZSBsaW1pdGVkIGxpc3RpbmcsIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIHF1aWNrIHZlcmlmaWNhdGlvbi5cbkkgbWlnaHQgZXZlbiBnbGFuY2UgYXQgYG1tL2RhbW9uL3Rlc3RzL2AgbW9yZSBicm9hZGx5LCBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGFkamFjZW50IHdhcyB0b3VjaGVkLiBJdCdzIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGJlZm9yZSBJIGRpZyBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIEtVbml0IHRlc3RzIGFuZCB0aGUgc3lzZnMgdGVzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMDgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo0NTo0MS4yNTk2OTAzN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA1MzM4NjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTMwNz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTMxOC1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTMxOTpzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTMyMC1cXHRcXHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpkc3QsIHN0cnVjdCBkYW1vbl9maWx0ZXIgKnNyYylcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMzM0LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMzM1OnN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlcihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzMzYte1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzNDItXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEzNDM6XFx0ZGFtb25fdGVzdF9jb21taXRfZmlsdGVyX2Zvcih0ZXN0LCBcXHUwMDI2ZHN0LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMzQ0LVxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGRhbW9uX2ZpbHRlcil7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTM0OC1cXHRcXHRcXHR9KTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTM0OTpcXHRkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHRlc3QsIFxcdTAwMjZkc3QsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzNTAtXFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb25fZmlsdGVyKXtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xODIzPXN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTg0Ni1cXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X3RhcmdldF9yZWdpb25zKSxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTg0NzpcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlciksXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE4NDgtXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXMpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo0NTo0Mi44NjUwMzMwNDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NjkwMTYzMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIFBhdGNoJ3MgRnV6emluZyBXb3J0aGluZXNzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgY2hhbmdlcyB0aGF0IGFyZSByZWxldmFudCBmb3IgZnV6emluZy4gVGhlIGd1aWRlbGluZXMgY2xlYXJseSBzdGF0ZSB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBmaWxlcywgY29tbWVudHMsIGFuZCBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzIGxpa2UgbG9nZ2luZyBzaG91bGQgYmUgZXhjbHVkZWQuIEFsc28gZXhjbHVkZWQgYXJlIGNoYW5nZXMgdG8gY29uc3RhbnRzIHdpdGhvdXQgaW1wYWN0aW5nIGV4ZWN1dGlvbiBmbG93LCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdmVuZG9yLXNwZWNpZmljIGRyaXZlciBjb2RlIHRoYXQgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUsIGFuZCB0ZWFyZG93biBjYWxsYmFja3MuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vYCBhbmQgYG1tL2RhbW9uL3Rlc3RzL2AuIEFuZCBjb25zaWRlcmluZyB0aGUgbmF0dXJlIG9mIEtVbml0IHRlc3RzIGFuZCBzZWxmdGVzdHMsIHRoaXMgaXMgdGhlIGFyZWEgdG8gYXNzZXNzIG1vc3QgY2xvc2VseS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVzZSB0ZXN0cyBpbnRyb2R1Y2UgbmV3IHJ1bnRpbWUga2VybmVsIGZ1bmN0aW9uYWxpdHkgb3IgY2hhbmdlIGFueSByZWFjaGFibGUgcnVudGltZSBsb2dpYyB0aGF0IHdvdWxkIGJlIHJlbGV2YW50IGZvciBmdXp6aW5nLlxuXG5NeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgS1VuaXQgdGVzdHMsIGxpa2UgdGhvc2UgaW4gYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAsIGFuZCBzZWxmdGVzdHMsIGZvdW5kIGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvLi4uYCBkaXJlY3RvcnksIGFyZSAqbm90KiBpbnRlbmRlZCB0byBtb2RpZnkgY29yZSBrZXJuZWwgbG9naWMgaW4gYSB3YXkgdGhhdCBpbnRyb2R1Y2VzIG5ldyBhdHRhY2sgc3VyZmFjZXMgZm9yIGZ1enppbmcuIEtVbml0IHRlc3RzIGFyZSBnZW5lcmFsbHkgZXhlY3V0ZWQgb25jZSBvbiBib290IG9yIHZpYSBkZWJ1Z2ZzLCB3aGlsZSBzZWxmdGVzdHMgYXJlIHVzZXItc3BhY2Ugc2NyaXB0cy4gTmVpdGhlciB3aWxsIGNoYW5nZSB0aGUgZnVuZGFtZW50YWwga2VybmVsIGJlaGF2aW9yIGluIGFuIGV4cGxvaXRhYmxlIHdheS5cblxuTm93LCBhIGNydWNpYWwgc3RlcDogSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgZGlmZiB0byBjb25maXJtIHRoZXJlIGFyZW4ndCAqYW55KiBtb2RpZmljYXRpb25zIG91dHNpZGUgb2YgdGhlc2UgdGVzdCBkaXJlY3Rvcmllcy4gTGV0J3Mgc2VlLi4uIHRoZSBkaWZmIG9ubHkgaW5jbHVkZXMgY2hhbmdlcyB0byBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL19kYW1vbl9zeXNmcy5weWAsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5YCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5weWAuXG5cblRoZXJlZm9yZSwgdGhlcmUgYXJlICpubyogY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYywgc3VjaCBhcyBpbiBgbW0vZGFtb24vY29yZS5jYCBvciBgbW0vZGFtb24vc3lzZnMuY2AuIFRoaXMgbWVhbnMgdGhlIHBhdGNoIGlzICpzb2xlbHkqIGFkZGluZyB1bml0IHRlc3RzIChLVW5pdCkgYW5kIHVwZGF0aW5nIHNlbGZ0ZXN0IHB5dGhvbiBzY3JpcHRzLiBUaGVzZSBhcmUgbm90IGNvbnNpZGVyZWQgZnVuY3Rpb25hbCBjaGFuZ2VzIHdoaWNoIGludHJvZHVjZSBhZGRpdGlvbmFsIGF0dGFjayBzdXJmYWNlIG9yIGV4cGxvaXRhYmxlIGtlcm5lbCBiZWhhdmlvciB0aGF0IGlzIGFwcHJvcHJpYXRlIGZvciBmdXp6aW5nLlxuXG5UaHVzLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgdGhlIHJlc3VsdHM6IGBXb3J0aEZ1enppbmc6IGZhbHNlYCwgd2l0aCBlbXB0eSBsaXN0cyBmb3IgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYC4gTXkgcmVhc29uaW5nIGlzIGNvbmNpc2U6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyB1bml0IHRlc3QgY2FzZXMgaW4gbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGFuZCB1cGRhdGVzIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi8uIEl0IGRvZXMgbm90IG1ha2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGtlcm5lbCBsb2dpYyBvciBydW50aW1lIGJlaGF2aW9yLlwiXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMDcsIk91dHB1dFRva2VucyI6ODAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NDU6NDkuNTU1MTk4NzQyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgS1VuaXQgdGVzdCBjYXNlcyBpbiBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYW5kIHVwZGF0ZXMgc2VsZnRlc3Qgc2NyaXB0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi8uIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgZnVuY3Rpb25hbCBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgS1VuaXQgdGVzdCBjYXNlcyBpbiBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYW5kIHVwZGF0ZXMgc2VsZnRlc3Qgc2NyaXB0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi8uIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgZnVuY3Rpb25hbCBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo0NTo0OS41NTUyMjE4OTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowqkj4n[1] Phase: Running StartedAt: 2026-09-03 09:46:01 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkj4n[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-03 09:46:01 +0000 UTC FinishedAt: 2026-09-03 09:46:06 +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,}