Name: series-workflowpkq2g Phase: Failed StartedAt: 2026-08-13 12:43:23 +0000 UTC FinishedAt: 2026-08-13 13:02:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkq2g[0] Phase: Succeeded StartedAt: 2026-08-13 12:43:23 +0000 UTC FinishedAt: 2026-08-13 13:02:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkq2g[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 12:43:23 +0000 UTC FinishedAt: 2026-08-13 13:02:35 +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+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIGEgbmV3IHVzZXItc3BhY2UgdGVzdGluZyB0b29sIGluIHRoZSB0b29scy9tbS8gZGlyZWN0b3J5IGFuZCBkb2VzIG5vdCBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlMzJlZjY4NGY4ZTk5MGYzYzMzMTM2YjBlN2NhOWE0MDlkN2FmNzMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTM6MDI6MTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggMGY1MTNiNDJiYzE4Ni4uMmMzMDliMzJjOThlYiAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTEyMDQzLDYgJiM0MzsxMjA0Myw3IEBAIEY6XHRpbmNsdWRlL2xpbnV4L21lbW9yeS1mYWlsdXJlLmhcbiBGOlx0aW5jbHVkZS90cmFjZS9ldmVudHMvbWVtb3J5LWZhaWx1cmUuaFxuIEY6XHRtbS9od3BvaXNvbi1pbmplY3QuY1xuIEY6XHRtbS9tZW1vcnktZmFpbHVyZS5jXG4mIzQzO0Y6XHR0b29scy9tbS9tZW1vcnktZmFpbHVyZS9cbiBGOlx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY1xuIFxuIEhZQ09OIEhZNDZYWCBUT1VDSFNDUkVFTiBTVVBQT1JUXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL21tLy5naXRpZ25vcmVcbmluZGV4IDE0NDZhNjU5ZTU0MDguLmI5YjgwZDkwOWRiNGEgMTAwNjQ0XG4tLS0gYS90b29scy9tbS8uZ2l0aWdub3JlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS8uZ2l0aWdub3JlXG5AQCAtMywzICYjNDM7Myw0IEBAIHNsYWJpbmZvXG4gcGFnZS10eXBlc1xuIHBhZ2Vfb3duZXJfc29ydFxuIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4mIzQzO21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZVxuaW5kZXggODU4MTg2YTZlZWZkYi4uOWY2ZGU5NTdhOTVhMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9NYWtlZmlsZVxuQEAgLTQsNiAmIzQzOzQsNyBAQFxuIGluY2x1ZGUgLi4vc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlXG4gXG4gQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuJiM0MztCVUlMRF9UQVJHRVRTJiM0Mzs9bWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWNcbiBJTlNUQUxMX1RBUkdFVFMgPSAkKEJVSUxEX1RBUkdFVFMpIHRocG1hcHNcbiBcbiBMSUJfRElSID0gLi4vbGliL2FwaVxuQEAgLTI0LDYgJiM0MzsyNSw3IEBAICQoTElCUyk6XG4gXG4gY2xlYW46XG4gXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuJiM0MztcdCQoUk0pIG1lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljXG4gXHRtYWtlIC1DICQoTElCX0RJUikgY2xlYW5cbiBcbiBzYmluZGlyID89IC91c3Ivc2JpblxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljLmMgYi90b29scy9tbS9tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzc3MmM1NTQ4YWRhZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWMuY1xuQEAgLTAsMCAmIzQzOzEsMzU5IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqIGh3cG9pc29uLXBhbmljOiB0cmlnZ2VyIGFuIGludGVudGlvbmFsIGtlcm5lbCBwYW5pYyBieSBpbmplY3RpbmcgYVxuJiM0MzsgKiBod3BvaXNvbiBlcnJvciBvbiBhIGtlcm5lbC1vd25lZCBwYWdlLCB0byBjaGVjayB0aGF0XG4mIzQzOyAqIHZtLnBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUgZmlyZXMuXG4mIzQzOyAqXG4mIzQzOyAqIFRocmVlIGtpbmRzIG9mIGtlcm5lbC1vd25lZCBwYWdlIGNhbiBiZSB0YXJnZXRlZCwgc2VsZWN0ZWQgd2l0aCAta1xuJiM0MzsgKiAoZGVmYXVsdDogcm9kYXRhKTpcbiYjNDM7ICpcbiYjNDM7ICogICByb2RhdGEgIC0gYSBQR19yZXNlcnZlZCBwYWdlIGluIHRoZSBrZXJuZWwgcm9kYXRhIHJhbmdlLCBmcm9tXG4mIzQzOyAqICAgICAgICAgICAgIC9wcm9jL2lvbWVtIFwmIzM0O0tlcm5lbCByb2RhdGFcJiMzNDsuICB4ODYgYW5kIHJpc2N2IG9ubHkuXG4mIzQzOyAqICAgc2xhYiAgICAtIGEgc2xhYiBwYWdlIGZvdW5kIHZpYSAvcHJvYy9rcGFnZWZsYWdzIChLUEZfU0xBQikuXG4mIzQzOyAqICAgcGd0YWJsZSAtIGEgcGFnZS10YWJsZSBwYWdlIGZvdW5kIHZpYSAvcHJvYy9rcGFnZWZsYWdzIChLUEZfUEdUQUJMRSkuXG4mIzQzOyAqXG4mIzQzOyAqIHNsYWIgYW5kIHBndGFibGUgd29yayBldmVyeXdoZXJlOyByb2RhdGEgbmVlZHMgYW4gYXJjaGl0ZWN0dXJlIHRoYXRcbiYjNDM7ICogcHVibGlzaGVzIHRoZSByb2RhdGEgcmVzb3VyY2UgaW4gL3Byb2MvaW9tZW0uXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBzbGFiIGFuZCBwZ3RhYmxlIHZhcmlhbnRzIGV4ZXJjaXNlIG1lbW9yeV9mYWlsdXJlKCkgLVx1MDAzZSBnZXRfYW55X3BhZ2UoKVxuJiM0MzsgKiBvbiBhIG5vbiBQR19yZXNlcnZlZCBrZXJuZWwtb3duZWQgcGFnZSwgY2F0Y2hpbmcgcmVncmVzc2lvbnMgd2hlcmVcbiYjNDM7ICogZ2V0X2FueV9wYWdlKCkgY29sbGFwc2VzIHN1Y2ggcGFnZXMgaW50byBhIHRyYW5zaWVudCAtRUlPIGluc3RlYWQgb2ZcbiYjNDM7ICogLUVOT1RSRUNPVkVSQUJMRS5cbiYjNDM7ICpcbiYjNDM7ICogQSBzdWNjZXNzZnVsIHJ1biBjcmFzaGVzIHRoZSBrZXJuZWwsIHNvIC0teWVzLXBhbmljLW15LWtlcm5lbCBpcyByZXF1aXJlZFxuJiM0MzsgKiBhbmQgdGhlIHRvb2wgaXMgbWVhbnQgZm9yIGEgZGlzcG9zYWJsZSBWTSAoZS5nLiB2aXJ0bWUtbmcpIHdpdGggdGhlIHNlcmlhbFxuJiM0MzsgKiBjb25zb2xlIGNhcHR1cmVkLiAgVGhlIHJlc3VsdCBpcyBvYnNlcnZlZCBleHRlcm5hbGx5OiB0aGUga2VybmVsIHBhbmljcyB3aXRoXG4mIzQzOyAqICAgXCYjMzQ7TWVtb3J5IGZhaWx1cmU6IFx1MDAzY3Bmblx1MDAzZTogdW5yZWNvdmVyYWJsZSBwYWdlXCYjMzQ7XG4mIzQzOyAqIFJldHVybmluZyBhdCBhbGwgbWVhbnMgbm8gcGFuaWMgZmlyZWQsIHNvIGV2ZXJ5IGV4aXQgc3RhdHVzIGlzIG5vbi16ZXJvOlxuJiM0MzsgKiBlaXRoZXIgYSBmYWlsdXJlLCBvciBhbiBpbmNvbmNsdXNpdmUgcnVuIHdoZXJlIHRoZSB0YXJnZXQgUEZOIHJhY2VkIHRvXG4mIzQzOyAqIGFub3RoZXIgcGFnZSB0eXBlIGJlZm9yZSBpbmplY3Rpb24uXG4mIzQzOyAqXG4mIzQzOyAqIEF1dGhvcjogQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzOyNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjRcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NnZXRvcHQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRhcmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi8uLi8uLi9pbmNsdWRlL3VhcGkvbGludXgva2VybmVsLXBhZ2UtZmxhZ3MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi8uLi9pbmNsdWRlL2xpbnV4L3NpemVzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXBpL2ZzL2ZzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgU1lTQ1RMX1BBVEhcdFwmIzM0Oy9wcm9jL3N5cy92bS9wYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSU5KRUNUX1BBVEhcdFwmIzM0Oy9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUFJPQ19LUEFHRUZMQUdTXHRcJiMzNDsvcHJvYy9rcGFnZWZsYWdzXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiBOb3QgZXhwb3J0ZWQgYnkgdGhlIHVhcGkgaGVhZGVyLCBzZWUgdG9vbHMvbW0vcGFnZS10eXBlcy5jLiAqL1xuJiM0MzsjZGVmaW5lIEtQRl9SRVNFUlZFRFx0MzJcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQklUKG5hbWUpXHQoMVVMTCBcdTAwM2NcdTAwM2MgS1BGXyMjbmFtZSlcbiYjNDM7I2RlZmluZSBBUlJBWV9TSVpFKHgpXHQoc2l6ZW9mKHgpIC8gc2l6ZW9mKCh4KVswXSkpXG4mIzQzO1xuJiM0MzsvKiBUaGUga3BhZ2VmbGFncyBiaXQgaWRlbnRpZnlpbmcgZWFjaCBrZXJuZWwtb3duZWQgcGFnZSBraW5kIHdlIHRhcmdldC4gKi9cbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQge1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWU7XG4mIzQzO1x0dWludDY0X3QgYml0O1xuJiM0Mzt9IHBhZ2Vfa2luZHNbXSA9IHtcbiYjNDM7XHR7IFwmIzM0O3JvZGF0YVwmIzM0OywgIEJJVChSRVNFUlZFRCkgfSxcbiYjNDM7XHR7IFwmIzM0O3NsYWJcJiMzNDssICAgIEJJVChTTEFCKSAgICAgfSxcbiYjNDM7XHR7IFwmIzM0O3BndGFibGVcJiMzNDssIEJJVChQR1RBQkxFKSAgfSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGZhdGFsKGNvbnN0IGNoYXIgKngsIC4uLilcbiYjNDM7e1xuJiM0MztcdHZhX2xpc3QgYXA7XG4mIzQzO1xuJiM0MztcdHZhX3N0YXJ0KGFwLCB4KTtcbiYjNDM7XHR2ZnByaW50ZihzdGRlcnIsIHgsIGFwKTtcbiYjNDM7XHR2YV9lbmQoYXApO1xuJiM0MztcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBrcGFnZWZsYWdzX3JlYWQoaW50IGZkLCB1aW50NjRfdCBwZm4sIHVpbnQ2NF90ICpmbGFncylcbiYjNDM7e1xuJiM0MztcdHNzaXplX3QgYnl0ZXM7XG4mIzQzO1xuJiM0MztcdGJ5dGVzID0gcHJlYWQoZmQsIGZsYWdzLCBzaXplb2YoKmZsYWdzKSwgKG9mZl90KXBmbiAqIHNpemVvZigqZmxhZ3MpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJ5dGVzID09IHNpemVvZigqZmxhZ3MpID8gMCA6IC0xO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBpY2tfcm9kYXRhX3BoeXNfYWRkcih1aW50NjRfdCAqcGh5c19hZGRyKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0LCBlbmQ7XG4mIzQzO1x0Y2hhciBsaW5lWzI1Nl0sIGxhYmVsWzY0XTtcbiYjNDM7XHRpbnQgcmV0ID0gLTE7XG4mIzQzO1x0RklMRSAqZjtcbiYjNDM7XG4mIzQzO1x0ZiA9IGZvcGVuKFwmIzM0Oy9wcm9jL2lvbWVtXCYjMzQ7LCBcJiMzNDtyXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIWYpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdC8qIFN1Yi1yZXNvdXJjZXMgYXJlIGluZGVudGVkOiBcJiMzNDsgIDAyNTAwMDAwLTAyZmZmZmZmIDogS2VybmVsIHJvZGF0YVwmIzM0OyAqL1xuJiM0MztcdHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7XG4mIzQzO1x0XHRpZiAoc3NjYW5mKGxpbmUsIFwmIzM0OyAlbGx4LSVsbHggOiAlNjNbXlxcbl1cJiMzNDssIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQsXG4mIzQzO1x0XHRcdCAgIGxhYmVsKSAhPSAzKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChzdHJjbXAobGFiZWwsIFwmIzM0O0tlcm5lbCByb2RhdGFcJiMzNDspIHx8IGVuZCBcdTAwM2M9IHN0YXJ0KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdC8qIFBhZ2UtYWxpZ24gdXAgYW5kIHJldHVybiB0aGUgZmlyc3QgYnl0ZSBvZiB0aGF0IHBhZ2UuICovXG4mIzQzO1x0XHQqcGh5c19hZGRyID0gKChzdGFydCAmIzQzOyBwYWdlX3NpemUgLSAxKSAvIHBhZ2Vfc2l6ZSkgKiBwYWdlX3NpemU7XG4mIzQzO1x0XHRyZXQgPSAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmY2xvc2UoZik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyKHVpbnQ2NF90IHdhbnQsIHVpbnQ2NF90ICpwaHlzX2FkZHIpXG4mIzQzO3tcbiYjNDM7XHR1aW50NjRfdCBwZm4gPSBTWl8xNk0gLyBwYWdlX3NpemU7XG4mIzQzO1x0dWludDY0X3QgZmxhZ3M7XG4mIzQzO1x0aW50IHJldCA9IC0xO1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKFBST0NfS1BBR0VGTEFHUywgT19SRE9OTFkpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7IGtwYWdlZmxhZ3NfcmVhZChmZCwgcGZuLCBcdTAwMjZmbGFncykgPT0gMDsgcGZuJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKChmbGFncyBcdTAwMjYgd2FudCkgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IEJJVChIV1BPSVNPTikpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICEoZmxhZ3MgXHUwMDI2IEJJVChOT1BBR0UpKSBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgQklUKENPTVBPVU5EX1RBSUwpKSkge1xuJiM0MztcdFx0XHQqcGh5c19hZGRyID0gcGZuICogcGFnZV9zaXplO1xuJiM0MztcdFx0XHRyZXQgPSAwO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJlYWRfc3lzY3RsKHVuc2lnbmVkIGxvbmcgKnZhbClcbiYjNDM7e1xuJiM0MztcdEZJTEUgKmYgPSBmb3BlbihTWVNDVExfUEFUSCwgXCYjMzQ7clwmIzM0Oyk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFmKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdHJldCA9IGZzY2FuZihmLCBcJiMzNDslbHVcJiMzNDssIHZhbCkgPT0gMSA/IDAgOiAtMTtcbiYjNDM7XHRmY2xvc2UoZik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgd3JpdGVfc3lzY3RsKHVuc2lnbmVkIGxvbmcgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0RklMRSAqZiA9IGZvcGVuKFNZU0NUTF9QQVRILCBcJiMzNDt3XCYjMzQ7KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIWYpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0cmV0ID0gZnByaW50ZihmLCBcJiMzNDslbHVcJiMzNDssIHZhbCkgXHUwMDNjIDAgPyAtMSA6IDA7XG4mIzQzO1x0ZmNsb3NlKGYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBoYXJkX29mZmxpbmVfcGFnZSgpIGluamVjdHMgd2l0aCBNRl9TV19TSU1VTEFURUQsIHNvIHVucG9pc29uIGlzIGFsbG93ZWQuICovXG4mIzQzO3N0YXRpYyB2b2lkIHVucG9pc29uX3Bmbih1aW50NjRfdCBwZm4pXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHBhdGhbUEFUSF9NQVhdLCBidWZbMzJdO1xuJiM0MztcdGNvbnN0IGNoYXIgKmRlYnVnZnM7XG4mIzQzO1x0aW50IGZkLCBsZW47XG4mIzQzO1xuJiM0MztcdGRlYnVnZnMgPSBkZWJ1Z2ZzX19tb3VudCgpO1xuJiM0MztcdGlmICghZGVidWdmcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcJiMzNDslcy9od3BvaXNvbi91bnBvaXNvbi1wZm5cJiMzNDssIGRlYnVnZnMpO1xuJiM0MztcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDsweCVsbHhcXG5cJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpcGZuKTtcbiYjNDM7XHRpZiAod3JpdGUoZmQsIGJ1ZiwgbGVuKSBcdTAwM2MgMClcbiYjNDM7XHRcdHBlcnJvcihcJiMzNDt1bnBvaXNvbi1wZm5cJiMzNDspO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmluamVjdF9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kLFxuJiM0MztcdFx0XHRcdCAgIHVpbnQ2NF90IHBoeXNfYWRkciwgdWludDY0X3QgcGZuKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbMzJdO1xuJiM0MztcdGludCBmZCwgbGVuO1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHRwcmludGYoXCYjMzQ7aW5qZWN0aW5nIGh3cG9pc29uIGF0IHBoeXMgMHglbGx4IChwZm4gMHglbGx4LCBraW5kPSVzKVxcblwmIzM0OyxcbiYjNDM7XHQgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwaHlzX2FkZHIsICh1bnNpZ25lZCBsb25nIGxvbmcpcGZuLFxuJiM0MztcdCAgICAgICBraW5kLVx1MDAzZW5hbWUpO1xuJiM0MztcdHByaW50ZihcJiMzNDtleHBlY3Rpbmcga2VybmVsIHBhbmljOiAmIzM5O01lbW9yeSBmYWlsdXJlOiBcdTAwM2NwZm5cdTAwM2U6IHVucmVjb3ZlcmFibGUgcGFnZSYjMzk7XFxuXCYjMzQ7KTtcbiYjNDM7XHRmZmx1c2goc3Rkb3V0KTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKElOSkVDVF9QQVRILCBPX1dST05MWSk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIFwmIzM0O2Nhbm5vdCBvcGVuIFwmIzM0OyBJTkpFQ1RfUEFUSDtcbiYjNDM7XG4mIzQzO1x0bGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCYjMzQ7MHglbGx4XCYjMzQ7LCAodW5zaWduZWQgbG9uZyBsb25nKXBoeXNfYWRkcik7XG4mIzQzO1x0cmV0ID0gd3JpdGUoZmQsIGJ1ZiwgbGVuKTtcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgIT0gbGVuKVxuJiM0MztcdFx0cmV0dXJuIFwmIzM0O2luamVjdCBmYWlsZWQgYmVmb3JlIHJlYWNoaW5nIHRoZSBwYW5pYyBwYXRoXCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXCYjMzQ7aW5qZWN0IHJldHVybmVkIHdpdGhvdXQgcGFuaWM7IHN5c2N0bCBpbmVmZmVjdGl2ZVwmIzM0OztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmxvb2t1cF9raW5kKGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwYWdlX2tpbmRzKTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRpZiAoIXN0cmNtcChwYWdlX2tpbmRzW2ldLm5hbWUsIG5hbWUpKVxuJiM0MztcdFx0XHRyZXR1cm4gXHUwMDI2cGFnZV9raW5kc1tpXTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRwcmludGYoXCYjMzQ7aHdwb2lzb24tcGFuaWMgW29wdGlvbnNdXFxuXCYjMzQ7XG4mIzQzO1x0ICAgICAgIFwmIzM0OyAgICAgICAgICAgIC1rfC0ta2luZCBcdTAwM2NraW5kXHUwMDNlICAgICAgIHJvZGF0YSAoZGVmYXVsdCwgeDg2IGFuZCByaXNjdiBvbmx5KSxcXG5cJiMzNDtcbiYjNDM7XHQgICAgICAgXCYjMzQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGFiIG9yIHBndGFibGVcXG5cJiMzNDtcbiYjNDM7XHQgICAgICAgXCYjMzQ7ICAgICAgICAgICAgLS15ZXMtcGFuaWMtbXkta2VybmVsICByZWFsbHkgcnVuIGl0OiB0aGUgbWFjaGluZSBwYW5pY3NcXG5cJiMzNDtcbiYjNDM7XHQgICAgICAgXCYjMzQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZXZlcnkgdW5zYXZlZCB3cml0ZSBpcyBsb3N0XFxuXCYjMzQ7XG4mIzQzO1x0ICAgICAgIFwmIzM0OyAgICAgICAgICAgIC1ofC0taGVscCAgICAgICAgICAgICAgc2hvdyB0aGlzXFxuXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gb3B0c1tdID0ge1xuJiM0MztcdHsgXCYjMzQ7a2luZFwmIzM0OywgICAgICAgICAgICAgICAgIDEsIE5VTEwsICYjMzk7ayYjMzk7IH0sXG4mIzQzO1x0eyBcJiMzNDt5ZXMtcGFuaWMtbXkta2VybmVsXCYjMzQ7LCAgMCwgTlVMTCwgJiMzOTt5JiMzOTsgfSxcbiYjNDM7XHR7IFwmIzM0O2hlbHBcJiMzNDssICAgICAgICAgICAgICAgICAwLCBOVUxMLCAmIzM5O2gmIzM5OyB9LFxuJiM0MztcdHsgTlVMTCwgICAgICAgICAgICAgICAgICAgMCwgTlVMTCwgMCB9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKnBhcnNlX2FyZ3MoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBpbnQgKmFybWVkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZDtcbiYjNDM7XHRjb25zdCBjaGFyICpuYW1lID0gXCYjMzQ7cm9kYXRhXCYjMzQ7O1xuJiM0MztcdGludCBjO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBcJiMzNDtrOmhcJiMzNDssIG9wdHMsIE5VTEwpKSAhPSAtMSkge1xuJiM0MztcdFx0c3dpdGNoIChjKSB7XG4mIzQzO1x0XHRjYXNlICYjMzk7ayYjMzk7OlxuJiM0MztcdFx0XHRuYW1lID0gb3B0YXJnO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTt5JiMzOTs6XG4mIzQzO1x0XHRcdCphcm1lZCA9IDE7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O2gmIzM5OzpcbiYjNDM7XHRcdFx0dXNhZ2UoKTtcbiYjNDM7XHRcdFx0ZXhpdChFWElUX1NVQ0NFU1MpO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0dXNhZ2UoKTtcbiYjNDM7XHRcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a2luZCA9IGxvb2t1cF9raW5kKG5hbWUpO1xuJiM0MztcdGlmICgha2luZClcbiYjNDM7XHRcdGZhdGFsKFwmIzM0O3Vua25vd24ga2luZCAmIzM5OyVzJiMzOTsgKGV4cGVjdGVkOiByb2RhdGF8c2xhYnxwZ3RhYmxlKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgIG5hbWUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4ga2luZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgY2hlY2tfcHJlcmVxcyhpbnQgYXJtZWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZ2V0ZXVpZCgpKVxuJiM0MztcdFx0ZmF0YWwoXCYjMzQ7bXVzdCBydW4gYXMgcm9vdFxcblwmIzM0Oyk7XG4mIzQzO1x0aWYgKGFjY2VzcyhTWVNDVExfUEFUSCwgV19PSykpXG4mIzQzO1x0XHRmYXRhbChcJiMzNDslcyBub3QgcHJlc2VudCAoa2VybmVsIHdpdGhvdXQgdGhlIHN5c2N0bD8pXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgU1lTQ1RMX1BBVEgpO1xuJiM0MztcdGlmIChhY2Nlc3MoSU5KRUNUX1BBVEgsIFdfT0spKVxuJiM0MztcdFx0ZmF0YWwoXCYjMzQ7JXMgbm90IHByZXNlbnQgKG5vIE1FTU9SWV9GQUlMVVJFPylcXG5cJiMzNDssIElOSkVDVF9QQVRIKTtcbiYjNDM7XHRpZiAoIWFybWVkKVxuJiM0MztcdFx0ZmF0YWwoXCYjMzQ7dGhpcyBwYW5pY3MgdGhlIGtlcm5lbDsgcGFzcyAtLXllcy1wYW5pYy1teS1rZXJuZWxcXG5cJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdWludDY0X3QgcGlja19waHlzX2FkZHIoY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZClcbiYjNDM7e1xuJiM0MztcdHVpbnQ2NF90IGFkZHI7XG4mIzQzO1xuJiM0MztcdGlmIChraW5kLVx1MDAzZWJpdCA9PSBCSVQoUkVTRVJWRUQpKSB7XG4mIzQzO1x0XHRpZiAocGlja19yb2RhdGFfcGh5c19hZGRyKFx1MDAyNmFkZHIpKVxuJiM0MztcdFx0XHRmYXRhbChcJiMzNDtubyBcXFwmIzM0O0tlcm5lbCByb2RhdGFcXFwmIzM0OyBpbiAvcHJvYy9pb21lbTsgdHJ5IC1rIHNsYWIgb3IgLWsgcGd0YWJsZVxcblwmIzM0Oyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmIChwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyKGtpbmQtXHUwMDNlYml0LCBcdTAwMjZhZGRyKSlcbiYjNDM7XHRcdFx0ZmF0YWwoXCYjMzQ7bm8gdXNhYmxlICVzIFBGTiBpbiAlc1xcblwmIzM0Oywga2luZC1cdTAwM2VuYW1lLFxuJiM0MztcdFx0XHQgICAgICBQUk9DX0tQQUdFRkxBR1MpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFkZHI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGFybV9zeXNjdGwodW5zaWduZWQgbG9uZyAqcHJpb3IpXG4mIzQzO3tcbiYjNDM7XHRpZiAocmVhZF9zeXNjdGwocHJpb3IpKVxuJiM0MztcdFx0ZmF0YWwoXCYjMzQ7ZmFpbGVkIHRvIHJlYWQgJXNcXG5cJiMzNDssIFNZU0NUTF9QQVRIKTtcbiYjNDM7XHRpZiAod3JpdGVfc3lzY3RsKDEpKVxuJiM0MztcdFx0ZmF0YWwoXCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSAlc1xcblwmIzM0OywgU1lTQ1RMX1BBVEgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByZWNoZWNrX2tpbmQoY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZCwgdWludDY0X3QgcGZuLFxuJiM0MztcdFx0XHQgY29uc3QgY2hhciAqdmVyZGljdClcbiYjNDM7e1xuJiM0MztcdHVpbnQ2NF90IGZsYWdzO1xuJiM0MztcdGludCBmZCwgcmV0O1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4oUFJPQ19LUEFHRUZMQUdTLCBPX1JET05MWSk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0ZmF0YWwoXCYjMzQ7JXMgKGNvdWxkIG5vdCBvcGVuICVzKVxcblwmIzM0OywgdmVyZGljdCwgUFJPQ19LUEFHRUZMQUdTKTtcbiYjNDM7XHRyZXQgPSBrcGFnZWZsYWdzX3JlYWQoZmQsIHBmbiwgXHUwMDI2ZmxhZ3MpO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGZhdGFsKFwmIzM0OyVzIChjb3VsZCBub3QgcmVjb25maXJtIHBhZ2UgdHlwZSB2aWEgJXMpXFxuXCYjMzQ7LCB2ZXJkaWN0LFxuJiM0MztcdFx0ICAgICAgUFJPQ19LUEFHRUZMQUdTKTtcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IGtpbmQtXHUwMDNlYml0KVxuJiM0MztcdFx0ZmF0YWwoXCYjMzQ7JXMgKHBhZ2Ugc3RpbGwgJXMpXFxuXCYjMzQ7LCB2ZXJkaWN0LCBraW5kLVx1MDAzZW5hbWUpO1xuJiM0MztcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7dGFyZ2V0IFBGTiBubyBsb25nZXIgJXM7IHJhY2VkIGJlZm9yZSBpbmplY3QsIGluY29uY2x1c2l2ZVxcblwmIzM0OyxcbiYjNDM7XHRcdGtpbmQtXHUwMDNlbmFtZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiYjNDM7e1xuJiM0MztcdHVpbnQ2NF90IHBoeXNfYWRkciwgcGZuO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmtpbmQ7XG4mIzQzO1x0Y29uc3QgY2hhciAqdmVyZGljdDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHByaW9yO1xuJiM0MztcdGludCBhcm1lZCA9IDA7XG4mIzQzO1xuJiM0MztcdGtpbmQgPSBwYXJzZV9hcmdzKGFyZ2MsIGFyZ3YsIFx1MDAyNmFybWVkKTtcbiYjNDM7XHRjaGVja19wcmVyZXFzKGFybWVkKTtcbiYjNDM7XHRwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpO1xuJiM0MztcbiYjNDM7XHRwaHlzX2FkZHIgPSBwaWNrX3BoeXNfYWRkcihraW5kKTtcbiYjNDM7XHRwZm4gPSBwaHlzX2FkZHIgLyBwYWdlX3NpemU7XG4mIzQzO1x0YXJtX3N5c2N0bChcdTAwMjZwcmlvcik7XG4mIzQzO1xuJiM0MztcdHZlcmRpY3QgPSBpbmplY3RfaHdwb2lzb24oa2luZCwgcGh5c19hZGRyLCBwZm4pO1xuJiM0MztcbiYjNDM7XHQvKiBObyBwYW5pYyBmaXJlZC4gIFB1dCB0aGUgbWFjaGluZSBiYWNrLCB0aGVuIHJlcG9ydC4gKi9cbiYjNDM7XHR3cml0ZV9zeXNjdGwocHJpb3IpO1xuJiM0MztcdHVucG9pc29uX3BmbihwZm4pO1xuJiM0MztcdHJlY2hlY2tfa2luZChraW5kLCBwZm4sIHZlcmRpY3QpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gRVhJVF9GQUlMVVJFO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyB1c2VyLXNwYWNlIHRlc3RpbmcgdG9vbCBpbiB0aGUgdG9vbHMvbW0vIGRpcmVjdG9yeSBhbmQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwgc291cmNlIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTMyZWY2ODRmOGU5OTBmM2MzMzEzNmIwZTdjYTlhNDA5ZDdhZjczMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDEzOjAyOjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCAwZjUxM2I0MmJjMTg2Li4yYzMwOWIzMmM5OGViIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtMTIwNDMsNiAmIzQzOzEyMDQzLDcgQEAgRjoJaW5jbHVkZS9saW51eC9tZW1vcnktZmFpbHVyZS5oCiBGOglpbmNsdWRlL3RyYWNlL2V2ZW50cy9tZW1vcnktZmFpbHVyZS5oCiBGOgltbS9od3BvaXNvbi1pbmplY3QuYwogRjoJbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzO0Y6CXRvb2xzL21tL21lbW9yeS1mYWlsdXJlLwogRjoJdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYwogCiBIWUNPTiBIWTQ2WFggVE9VQ0hTQ1JFRU4gU1VQUE9SVApkaWZmIC0tZ2l0IGEvdG9vbHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL21tLy5naXRpZ25vcmUKaW5kZXggMTQ0NmE2NTllNTQwOC4uYjliODBkOTA5ZGI0YSAxMDA2NDQKLS0tIGEvdG9vbHMvbW0vLmdpdGlnbm9yZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS8uZ2l0aWdub3JlCkBAIC0zLDMgJiM0MzszLDQgQEAgc2xhYmluZm8KIHBhZ2UtdHlwZXMKIHBhZ2Vfb3duZXJfc29ydAogdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QKJiM0MzttZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYwpkaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZQppbmRleCA4NTgxODZhNmVlZmRiLi45ZjZkZTk1N2E5NWEwIDEwMDY0NAotLS0gYS90b29scy9tbS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9NYWtlZmlsZQpAQCAtNCw2ICYjNDM7NCw3IEBACiBpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZQogCiBCVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0CiYjNDM7QlVJTERfVEFSR0VUUyYjNDM7PW1lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljCiBJTlNUQUxMX1RBUkdFVFMgPSAkKEJVSUxEX1RBUkdFVFMpIHRocG1hcHMKIAogTElCX0RJUiA9IC4uL2xpYi9hcGkKQEAgLTI0LDYgJiM0MzsyNSw3IEBAICQoTElCUyk6CiAKIGNsZWFuOgogCSQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0CiYjNDM7CSQoUk0pIG1lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljCiAJbWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuCiAKIHNiaW5kaXIgPz0gL3Vzci9zYmluCmRpZmYgLS1naXQgYS90b29scy9tbS9tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYy5jIGIvdG9vbHMvbW0vbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi43NzcyYzU1NDhhZGFmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWMuYwpAQCAtMCwwICYjNDM7MSwzNTkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogaHdwb2lzb24tcGFuaWM6IHRyaWdnZXIgYW4gaW50ZW50aW9uYWwga2VybmVsIHBhbmljIGJ5IGluamVjdGluZyBhCiYjNDM7ICogaHdwb2lzb24gZXJyb3Igb24gYSBrZXJuZWwtb3duZWQgcGFnZSwgdG8gY2hlY2sgdGhhdAomIzQzOyAqIHZtLnBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUgZmlyZXMuCiYjNDM7ICoKJiM0MzsgKiBUaHJlZSBraW5kcyBvZiBrZXJuZWwtb3duZWQgcGFnZSBjYW4gYmUgdGFyZ2V0ZWQsIHNlbGVjdGVkIHdpdGggLWsKJiM0MzsgKiAoZGVmYXVsdDogcm9kYXRhKToKJiM0MzsgKgomIzQzOyAqICAgcm9kYXRhICAtIGEgUEdfcmVzZXJ2ZWQgcGFnZSBpbiB0aGUga2VybmVsIHJvZGF0YSByYW5nZSwgZnJvbQomIzQzOyAqICAgICAgICAgICAgIC9wcm9jL2lvbWVtICYjMzQ7S2VybmVsIHJvZGF0YSYjMzQ7LiAgeDg2IGFuZCByaXNjdiBvbmx5LgomIzQzOyAqICAgc2xhYiAgICAtIGEgc2xhYiBwYWdlIGZvdW5kIHZpYSAvcHJvYy9rcGFnZWZsYWdzIChLUEZfU0xBQikuCiYjNDM7ICogICBwZ3RhYmxlIC0gYSBwYWdlLXRhYmxlIHBhZ2UgZm91bmQgdmlhIC9wcm9jL2twYWdlZmxhZ3MgKEtQRl9QR1RBQkxFKS4KJiM0MzsgKgomIzQzOyAqIHNsYWIgYW5kIHBndGFibGUgd29yayBldmVyeXdoZXJlOyByb2RhdGEgbmVlZHMgYW4gYXJjaGl0ZWN0dXJlIHRoYXQKJiM0MzsgKiBwdWJsaXNoZXMgdGhlIHJvZGF0YSByZXNvdXJjZSBpbiAvcHJvYy9pb21lbS4KJiM0MzsgKgomIzQzOyAqIFRoZSBzbGFiIGFuZCBwZ3RhYmxlIHZhcmlhbnRzIGV4ZXJjaXNlIG1lbW9yeV9mYWlsdXJlKCkgLSZndDsgZ2V0X2FueV9wYWdlKCkKJiM0MzsgKiBvbiBhIG5vbiBQR19yZXNlcnZlZCBrZXJuZWwtb3duZWQgcGFnZSwgY2F0Y2hpbmcgcmVncmVzc2lvbnMgd2hlcmUKJiM0MzsgKiBnZXRfYW55X3BhZ2UoKSBjb2xsYXBzZXMgc3VjaCBwYWdlcyBpbnRvIGEgdHJhbnNpZW50IC1FSU8gaW5zdGVhZCBvZgomIzQzOyAqIC1FTk9UUkVDT1ZFUkFCTEUuCiYjNDM7ICoKJiM0MzsgKiBBIHN1Y2Nlc3NmdWwgcnVuIGNyYXNoZXMgdGhlIGtlcm5lbCwgc28gLS15ZXMtcGFuaWMtbXkta2VybmVsIGlzIHJlcXVpcmVkCiYjNDM7ICogYW5kIHRoZSB0b29sIGlzIG1lYW50IGZvciBhIGRpc3Bvc2FibGUgVk0gKGUuZy4gdmlydG1lLW5nKSB3aXRoIHRoZSBzZXJpYWwKJiM0MzsgKiBjb25zb2xlIGNhcHR1cmVkLiAgVGhlIHJlc3VsdCBpcyBvYnNlcnZlZCBleHRlcm5hbGx5OiB0aGUga2VybmVsIHBhbmljcyB3aXRoCiYjNDM7ICogICAmIzM0O01lbW9yeSBmYWlsdXJlOiAmbHQ7cGZuJmd0OzogdW5yZWNvdmVyYWJsZSBwYWdlJiMzNDsKJiM0MzsgKiBSZXR1cm5pbmcgYXQgYWxsIG1lYW5zIG5vIHBhbmljIGZpcmVkLCBzbyBldmVyeSBleGl0IHN0YXR1cyBpcyBub24temVybzoKJiM0MzsgKiBlaXRoZXIgYSBmYWlsdXJlLCBvciBhbiBpbmNvbmNsdXNpdmUgcnVuIHdoZXJlIHRoZSB0YXJnZXQgUEZOIHJhY2VkIHRvCiYjNDM7ICogYW5vdGhlciBwYWdlIHR5cGUgYmVmb3JlIGluamVjdGlvbi4KJiM0MzsgKgomIzQzOyAqIEF1dGhvcjogQnJlbm8gTGVpdGFvICZsdDtsZWl0YW9AZGViaWFuLm9yZyZndDsKJiM0MzsgKi8KJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiYjNDM7I2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NAomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtnZXRvcHQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGltaXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGFyZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uLy4uLy4uL2luY2x1ZGUvdWFwaS9saW51eC9rZXJuZWwtcGFnZS1mbGFncy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uLy4uL2luY2x1ZGUvbGludXgvc2l6ZXMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2FwaS9mcy9mcy5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgU1lTQ1RMX1BBVEgJJiMzNDsvcHJvYy9zeXMvdm0vcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZSYjMzQ7CiYjNDM7I2RlZmluZSBJTkpFQ1RfUEFUSAkmIzM0Oy9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlJiMzNDsKJiM0MzsjZGVmaW5lIFBST0NfS1BBR0VGTEFHUwkmIzM0Oy9wcm9jL2twYWdlZmxhZ3MmIzM0OwomIzQzOwomIzQzOy8qIE5vdCBleHBvcnRlZCBieSB0aGUgdWFwaSBoZWFkZXIsIHNlZSB0b29scy9tbS9wYWdlLXR5cGVzLmMuICovCiYjNDM7I2RlZmluZSBLUEZfUkVTRVJWRUQJMzIKJiM0MzsKJiM0MzsjZGVmaW5lIEJJVChuYW1lKQkoMVVMTCAmbHQ7Jmx0OyBLUEZfIyNuYW1lKQomIzQzOyNkZWZpbmUgQVJSQVlfU0laRSh4KQkoc2l6ZW9mKHgpIC8gc2l6ZW9mKCh4KVswXSkpCiYjNDM7CiYjNDM7LyogVGhlIGtwYWdlZmxhZ3MgYml0IGlkZW50aWZ5aW5nIGVhY2gga2VybmVsLW93bmVkIHBhZ2Uga2luZCB3ZSB0YXJnZXQuICovCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgewomIzQzOwljb25zdCBjaGFyICpuYW1lOwomIzQzOwl1aW50NjRfdCBiaXQ7CiYjNDM7fSBwYWdlX2tpbmRzW10gPSB7CiYjNDM7CXsgJiMzNDtyb2RhdGEmIzM0OywgIEJJVChSRVNFUlZFRCkgfSwKJiM0MzsJeyAmIzM0O3NsYWImIzM0OywgICAgQklUKFNMQUIpICAgICB9LAomIzQzOwl7ICYjMzQ7cGd0YWJsZSYjMzQ7LCBCSVQoUEdUQUJMRSkgIH0sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX3NpemU7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZmF0YWwoY29uc3QgY2hhciAqeCwgLi4uKQomIzQzO3sKJiM0MzsJdmFfbGlzdCBhcDsKJiM0MzsKJiM0MzsJdmFfc3RhcnQoYXAsIHgpOwomIzQzOwl2ZnByaW50ZihzdGRlcnIsIHgsIGFwKTsKJiM0MzsJdmFfZW5kKGFwKTsKJiM0MzsJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtwYWdlZmxhZ3NfcmVhZChpbnQgZmQsIHVpbnQ2NF90IHBmbiwgdWludDY0X3QgKmZsYWdzKQomIzQzO3sKJiM0MzsJc3NpemVfdCBieXRlczsKJiM0MzsKJiM0MzsJYnl0ZXMgPSBwcmVhZChmZCwgZmxhZ3MsIHNpemVvZigqZmxhZ3MpLCAob2ZmX3QpcGZuICogc2l6ZW9mKCpmbGFncykpOwomIzQzOwomIzQzOwlyZXR1cm4gYnl0ZXMgPT0gc2l6ZW9mKCpmbGFncykgPyAwIDogLTE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGlja19yb2RhdGFfcGh5c19hZGRyKHVpbnQ2NF90ICpwaHlzX2FkZHIpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGxvbmcgc3RhcnQsIGVuZDsKJiM0MzsJY2hhciBsaW5lWzI1Nl0sIGxhYmVsWzY0XTsKJiM0MzsJaW50IHJldCA9IC0xOwomIzQzOwlGSUxFICpmOwomIzQzOwomIzQzOwlmID0gZm9wZW4oJiMzNDsvcHJvYy9pb21lbSYjMzQ7LCAmIzM0O3ImIzM0Oyk7CiYjNDM7CWlmICghZikKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJLyogU3ViLXJlc291cmNlcyBhcmUgaW5kZW50ZWQ6ICYjMzQ7ICAwMjUwMDAwMC0wMmZmZmZmZiA6IEtlcm5lbCByb2RhdGEmIzM0OyAqLwomIzQzOwl3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkgewomIzQzOwkJaWYgKHNzY2FuZihsaW5lLCAmIzM0OyAlbGx4LSVsbHggOiAlNjNbXlxuXSYjMzQ7LCAmYW1wO3N0YXJ0LCAmYW1wO2VuZCwKJiM0MzsJCQkgICBsYWJlbCkgIT0gMykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChzdHJjbXAobGFiZWwsICYjMzQ7S2VybmVsIHJvZGF0YSYjMzQ7KSB8fCBlbmQgJmx0Oz0gc3RhcnQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQkvKiBQYWdlLWFsaWduIHVwIGFuZCByZXR1cm4gdGhlIGZpcnN0IGJ5dGUgb2YgdGhhdCBwYWdlLiAqLwomIzQzOwkJKnBoeXNfYWRkciA9ICgoc3RhcnQgJiM0MzsgcGFnZV9zaXplIC0gMSkgLyBwYWdlX3NpemUpICogcGFnZV9zaXplOwomIzQzOwkJcmV0ID0gMDsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZjbG9zZShmKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyKHVpbnQ2NF90IHdhbnQsIHVpbnQ2NF90ICpwaHlzX2FkZHIpCiYjNDM7ewomIzQzOwl1aW50NjRfdCBwZm4gPSBTWl8xNk0gLyBwYWdlX3NpemU7CiYjNDM7CXVpbnQ2NF90IGZsYWdzOwomIzQzOwlpbnQgcmV0ID0gLTE7CiYjNDM7CWludCBmZDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKFBST0NfS1BBR0VGTEFHUywgT19SRE9OTFkpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlmb3IgKDsga3BhZ2VmbGFnc19yZWFkKGZkLCBwZm4sICZhbXA7ZmxhZ3MpID09IDA7IHBmbiYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgd2FudCkgJmFtcDsmYW1wOyAhKGZsYWdzICZhbXA7IEJJVChIV1BPSVNPTikpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhKGZsYWdzICZhbXA7IEJJVChOT1BBR0UpKSAmYW1wOyZhbXA7ICEoZmxhZ3MgJmFtcDsgQklUKENPTVBPVU5EX1RBSUwpKSkgewomIzQzOwkJCSpwaHlzX2FkZHIgPSBwZm4gKiBwYWdlX3NpemU7CiYjNDM7CQkJcmV0ID0gMDsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmVhZF9zeXNjdGwodW5zaWduZWQgbG9uZyAqdmFsKQomIzQzO3sKJiM0MzsJRklMRSAqZiA9IGZvcGVuKFNZU0NUTF9QQVRILCAmIzM0O3ImIzM0Oyk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghZikKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcmV0ID0gZnNjYW5mKGYsICYjMzQ7JWx1JiMzNDssIHZhbCkgPT0gMSA/IDAgOiAtMTsKJiM0MzsJZmNsb3NlKGYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHdyaXRlX3N5c2N0bCh1bnNpZ25lZCBsb25nIHZhbCkKJiM0Mzt7CiYjNDM7CUZJTEUgKmYgPSBmb3BlbihTWVNDVExfUEFUSCwgJiMzNDt3JiMzNDspOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIWYpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CXJldCA9IGZwcmludGYoZiwgJiMzNDslbHUmIzM0OywgdmFsKSAmbHQ7IDAgPyAtMSA6IDA7CiYjNDM7CWZjbG9zZShmKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogaGFyZF9vZmZsaW5lX3BhZ2UoKSBpbmplY3RzIHdpdGggTUZfU1dfU0lNVUxBVEVELCBzbyB1bnBvaXNvbiBpcyBhbGxvd2VkLiAqLwomIzQzO3N0YXRpYyB2b2lkIHVucG9pc29uX3Bmbih1aW50NjRfdCBwZm4pCiYjNDM7ewomIzQzOwljaGFyIHBhdGhbUEFUSF9NQVhdLCBidWZbMzJdOwomIzQzOwljb25zdCBjaGFyICpkZWJ1Z2ZzOwomIzQzOwlpbnQgZmQsIGxlbjsKJiM0MzsKJiM0MzsJZGVidWdmcyA9IGRlYnVnZnNfX21vdW50KCk7CiYjNDM7CWlmICghZGVidWdmcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0OyVzL2h3cG9pc29uL3VucG9pc29uLXBmbiYjMzQ7LCBkZWJ1Z2ZzKTsKJiM0MzsJZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDsweCVsbHhcbiYjMzQ7LCAodW5zaWduZWQgbG9uZyBsb25nKXBmbik7CiYjNDM7CWlmICh3cml0ZShmZCwgYnVmLCBsZW4pICZsdDsgMCkKJiM0MzsJCXBlcnJvcigmIzM0O3VucG9pc29uLXBmbiYjMzQ7KTsKJiM0MzsJY2xvc2UoZmQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqaW5qZWN0X2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmtpbmQsCiYjNDM7CQkJCSAgIHVpbnQ2NF90IHBoeXNfYWRkciwgdWludDY0X3QgcGZuKQomIzQzO3sKJiM0MzsJY2hhciBidWZbMzJdOwomIzQzOwlpbnQgZmQsIGxlbjsKJiM0MzsJc3NpemVfdCByZXQ7CiYjNDM7CiYjNDM7CXByaW50ZigmIzM0O2luamVjdGluZyBod3BvaXNvbiBhdCBwaHlzIDB4JWxseCAocGZuIDB4JWxseCwga2luZD0lcylcbiYjMzQ7LAomIzQzOwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwaHlzX2FkZHIsICh1bnNpZ25lZCBsb25nIGxvbmcpcGZuLAomIzQzOwkgICAgICAga2luZC0mZ3Q7bmFtZSk7CiYjNDM7CXByaW50ZigmIzM0O2V4cGVjdGluZyBrZXJuZWwgcGFuaWM6ICYjMzk7TWVtb3J5IGZhaWx1cmU6ICZsdDtwZm4mZ3Q7OiB1bnJlY292ZXJhYmxlIHBhZ2UmIzM5O1xuJiMzNDspOwomIzQzOwlmZmx1c2goc3Rkb3V0KTsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKElOSkVDVF9QQVRILCBPX1dST05MWSk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gJiMzNDtjYW5ub3Qgb3BlbiAmIzM0OyBJTkpFQ1RfUEFUSDsKJiM0MzsKJiM0MzsJbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDsweCVsbHgmIzM0OywgKHVuc2lnbmVkIGxvbmcgbG9uZylwaHlzX2FkZHIpOwomIzQzOwlyZXQgPSB3cml0ZShmZCwgYnVmLCBsZW4pOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CiYjNDM7CWlmIChyZXQgIT0gbGVuKQomIzQzOwkJcmV0dXJuICYjMzQ7aW5qZWN0IGZhaWxlZCBiZWZvcmUgcmVhY2hpbmcgdGhlIHBhbmljIHBhdGgmIzM0OzsKJiM0MzsKJiM0MzsJcmV0dXJuICYjMzQ7aW5qZWN0IHJldHVybmVkIHdpdGhvdXQgcGFuaWM7IHN5c2N0bCBpbmVmZmVjdGl2ZSYjMzQ7OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqbG9va3VwX2tpbmQoY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShwYWdlX2tpbmRzKTsgaSYjNDM7JiM0MzspCiYjNDM7CQlpZiAoIXN0cmNtcChwYWdlX2tpbmRzW2ldLm5hbWUsIG5hbWUpKQomIzQzOwkJCXJldHVybiAmYW1wO3BhZ2Vfa2luZHNbaV07CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQomIzQzO3sKJiM0MzsJcHJpbnRmKCYjMzQ7aHdwb2lzb24tcGFuaWMgW29wdGlvbnNdXG4mIzM0OwomIzQzOwkgICAgICAgJiMzNDsgICAgICAgICAgICAta3wtLWtpbmQgJmx0O2tpbmQmZ3Q7ICAgICAgIHJvZGF0YSAoZGVmYXVsdCwgeDg2IGFuZCByaXNjdiBvbmx5KSxcbiYjMzQ7CiYjNDM7CSAgICAgICAmIzM0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhYiBvciBwZ3RhYmxlXG4mIzM0OwomIzQzOwkgICAgICAgJiMzNDsgICAgICAgICAgICAtLXllcy1wYW5pYy1teS1rZXJuZWwgIHJlYWxseSBydW4gaXQ6IHRoZSBtYWNoaW5lIHBhbmljc1xuJiMzNDsKJiM0MzsJICAgICAgICYjMzQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZXZlcnkgdW5zYXZlZCB3cml0ZSBpcyBsb3N0XG4mIzM0OwomIzQzOwkgICAgICAgJiMzNDsgICAgICAgICAgICAtaHwtLWhlbHAgICAgICAgICAgICAgIHNob3cgdGhpc1xuJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7CiYjNDM7CXsgJiMzNDtraW5kJiMzNDssICAgICAgICAgICAgICAgICAxLCBOVUxMLCAmIzM5O2smIzM5OyB9LAomIzQzOwl7ICYjMzQ7eWVzLXBhbmljLW15LWtlcm5lbCYjMzQ7LCAgMCwgTlVMTCwgJiMzOTt5JiMzOTsgfSwKJiM0MzsJeyAmIzM0O2hlbHAmIzM0OywgICAgICAgICAgICAgICAgIDAsIE5VTEwsICYjMzk7aCYjMzk7IH0sCiYjNDM7CXsgTlVMTCwgICAgICAgICAgICAgICAgICAgMCwgTlVMTCwgMCB9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKnBhcnNlX2FyZ3MoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBpbnQgKmFybWVkKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZDsKJiM0MzsJY29uc3QgY2hhciAqbmFtZSA9ICYjMzQ7cm9kYXRhJiMzNDs7CiYjNDM7CWludCBjOwomIzQzOwomIzQzOwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAmIzM0O2s6aCYjMzQ7LCBvcHRzLCBOVUxMKSkgIT0gLTEpIHsKJiM0MzsJCXN3aXRjaCAoYykgewomIzQzOwkJY2FzZSAmIzM5O2smIzM5OzoKJiM0MzsJCQluYW1lID0gb3B0YXJnOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O3kmIzM5OzoKJiM0MzsJCQkqYXJtZWQgPSAxOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O2gmIzM5OzoKJiM0MzsJCQl1c2FnZSgpOwomIzQzOwkJCWV4aXQoRVhJVF9TVUNDRVNTKTsKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJdXNhZ2UoKTsKJiM0MzsJCQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2luZCA9IGxvb2t1cF9raW5kKG5hbWUpOwomIzQzOwlpZiAoIWtpbmQpCiYjNDM7CQlmYXRhbCgmIzM0O3Vua25vd24ga2luZCAmIzM5OyVzJiMzOTsgKGV4cGVjdGVkOiByb2RhdGF8c2xhYnxwZ3RhYmxlKVxuJiMzNDssCiYjNDM7CQkgICAgICBuYW1lKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGtpbmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGNoZWNrX3ByZXJlcXMoaW50IGFybWVkKQomIzQzO3sKJiM0MzsJaWYgKGdldGV1aWQoKSkKJiM0MzsJCWZhdGFsKCYjMzQ7bXVzdCBydW4gYXMgcm9vdFxuJiMzNDspOwomIzQzOwlpZiAoYWNjZXNzKFNZU0NUTF9QQVRILCBXX09LKSkKJiM0MzsJCWZhdGFsKCYjMzQ7JXMgbm90IHByZXNlbnQgKGtlcm5lbCB3aXRob3V0IHRoZSBzeXNjdGw/KVxuJiMzNDssCiYjNDM7CQkgICAgICBTWVNDVExfUEFUSCk7CiYjNDM7CWlmIChhY2Nlc3MoSU5KRUNUX1BBVEgsIFdfT0spKQomIzQzOwkJZmF0YWwoJiMzNDslcyBub3QgcHJlc2VudCAobm8gTUVNT1JZX0ZBSUxVUkU/KVxuJiMzNDssIElOSkVDVF9QQVRIKTsKJiM0MzsJaWYgKCFhcm1lZCkKJiM0MzsJCWZhdGFsKCYjMzQ7dGhpcyBwYW5pY3MgdGhlIGtlcm5lbDsgcGFzcyAtLXllcy1wYW5pYy1teS1rZXJuZWxcbiYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVpbnQ2NF90IHBpY2tfcGh5c19hZGRyKGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmtpbmQpCiYjNDM7ewomIzQzOwl1aW50NjRfdCBhZGRyOwomIzQzOwomIzQzOwlpZiAoa2luZC0mZ3Q7Yml0ID09IEJJVChSRVNFUlZFRCkpIHsKJiM0MzsJCWlmIChwaWNrX3JvZGF0YV9waHlzX2FkZHIoJmFtcDthZGRyKSkKJiM0MzsJCQlmYXRhbCgmIzM0O25vIFwmIzM0O0tlcm5lbCByb2RhdGFcJiMzNDsgaW4gL3Byb2MvaW9tZW07IHRyeSAtayBzbGFiIG9yIC1rIHBndGFibGVcbiYjMzQ7KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmIChwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyKGtpbmQtJmd0O2JpdCwgJmFtcDthZGRyKSkKJiM0MzsJCQlmYXRhbCgmIzM0O25vIHVzYWJsZSAlcyBQRk4gaW4gJXNcbiYjMzQ7LCBraW5kLSZndDtuYW1lLAomIzQzOwkJCSAgICAgIFBST0NfS1BBR0VGTEFHUyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGFkZHI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGFybV9zeXNjdGwodW5zaWduZWQgbG9uZyAqcHJpb3IpCiYjNDM7ewomIzQzOwlpZiAocmVhZF9zeXNjdGwocHJpb3IpKQomIzQzOwkJZmF0YWwoJiMzNDtmYWlsZWQgdG8gcmVhZCAlc1xuJiMzNDssIFNZU0NUTF9QQVRIKTsKJiM0MzsJaWYgKHdyaXRlX3N5c2N0bCgxKSkKJiM0MzsJCWZhdGFsKCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSAlc1xuJiMzNDssIFNZU0NUTF9QQVRIKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmVjaGVja19raW5kKGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmtpbmQsIHVpbnQ2NF90IHBmbiwKJiM0MzsJCQkgY29uc3QgY2hhciAqdmVyZGljdCkKJiM0Mzt7CiYjNDM7CXVpbnQ2NF90IGZsYWdzOwomIzQzOwlpbnQgZmQsIHJldDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKFBST0NfS1BBR0VGTEFHUywgT19SRE9OTFkpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJZmF0YWwoJiMzNDslcyAoY291bGQgbm90IG9wZW4gJXMpXG4mIzM0OywgdmVyZGljdCwgUFJPQ19LUEFHRUZMQUdTKTsKJiM0MzsJcmV0ID0ga3BhZ2VmbGFnc19yZWFkKGZkLCBwZm4sICZhbXA7ZmxhZ3MpOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlmYXRhbCgmIzM0OyVzIChjb3VsZCBub3QgcmVjb25maXJtIHBhZ2UgdHlwZSB2aWEgJXMpXG4mIzM0OywgdmVyZGljdCwKJiM0MzsJCSAgICAgIFBST0NfS1BBR0VGTEFHUyk7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBraW5kLSZndDtiaXQpCiYjNDM7CQlmYXRhbCgmIzM0OyVzIChwYWdlIHN0aWxsICVzKVxuJiMzNDssIHZlcmRpY3QsIGtpbmQtJmd0O25hbWUpOwomIzQzOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDt0YXJnZXQgUEZOIG5vIGxvbmdlciAlczsgcmFjZWQgYmVmb3JlIGluamVjdCwgaW5jb25jbHVzaXZlXG4mIzM0OywKJiM0MzsJCWtpbmQtJmd0O25hbWUpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiYjNDM7ewomIzQzOwl1aW50NjRfdCBwaHlzX2FkZHIsIHBmbjsKJiM0MzsJY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZDsKJiM0MzsJY29uc3QgY2hhciAqdmVyZGljdDsKJiM0MzsJdW5zaWduZWQgbG9uZyBwcmlvcjsKJiM0MzsJaW50IGFybWVkID0gMDsKJiM0MzsKJiM0MzsJa2luZCA9IHBhcnNlX2FyZ3MoYXJnYywgYXJndiwgJmFtcDthcm1lZCk7CiYjNDM7CWNoZWNrX3ByZXJlcXMoYXJtZWQpOwomIzQzOwlwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpOwomIzQzOwomIzQzOwlwaHlzX2FkZHIgPSBwaWNrX3BoeXNfYWRkcihraW5kKTsKJiM0MzsJcGZuID0gcGh5c19hZGRyIC8gcGFnZV9zaXplOwomIzQzOwlhcm1fc3lzY3RsKCZhbXA7cHJpb3IpOwomIzQzOwomIzQzOwl2ZXJkaWN0ID0gaW5qZWN0X2h3cG9pc29uKGtpbmQsIHBoeXNfYWRkciwgcGZuKTsKJiM0MzsKJiM0MzsJLyogTm8gcGFuaWMgZmlyZWQuICBQdXQgdGhlIG1hY2hpbmUgYmFjaywgdGhlbiByZXBvcnQuICovCiYjNDM7CXdyaXRlX3N5c2N0bChwcmlvcik7CiYjNDM7CXVucG9pc29uX3BmbihwZm4pOwomIzQzOwlyZWNoZWNrX2tpbmQoa2luZCwgcGZuLCB2ZXJkaWN0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIEVYSVRfRkFJTFVSRTsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNzQKCQkJCQkJCW91dHB1dDogNTgKCQkJCQkJCXRob3VnaHRzOiA1OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQ6IEZhbHNlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCBpbnRyb2R1Y2VzIGEgbmV3IHRvb2wsIHNwZWNpZmljYWxseSBgdG9vbHMvbW0vbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWMuY2AuIFRoaXMgdG9vbCBpcyBkZXNpZ25lZCB0byB0cmlnZ2VyIGEgY29udHJvbGxlZCBrZXJuZWwgcGFuaWMgdGhyb3VnaCBhIGhhcmR3YXJlIHBvaXNvbmluZyBldmVudCBvbiBhIGtlcm5lbC1vd25lZCBwYWdlLiBNeSBpbml0aWFsIHNjYW4gc2hvd2VkIG1vZGlmaWNhdGlvbnMgdG8gYE1BSU5UQUlORVJTYCwgdGhlIGAuZ2l0aWdub3JlYCB3aXRoaW4gYHRvb2xzL21tYCwgdGhlIGBNYWtlZmlsZWAgaW4gYHRvb2xzL21tYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBuZXcgc291cmNlIGZpbGUgaXRzZWxmLiBFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBlbnRpcmVseSBjb250YWluZWQgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuCgpJIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmUgKm5vKiBrZXJuZWwgY29kZSBjaGFuZ2VzLiBJJiMzOTt2ZSByZS1jaGVja2VkIHRoZSBkaWZmIC0gaXQmIzM5O3Mgc3RpbGwganVzdCB0aGUgZmlsZXMgSSBtZW50aW9uZWQuIFNvLCBubyBrZXJuZWwgc291cmNlIGNvZGUgaXMgYmVpbmcgdG91Y2hlZC4gRXhjZWxsZW50LgoKTm93LCBJIGhhdmUgdGhlIGluc3RydWN0aW9ucyB0byBmb2xsb3cuIFRoZXkgb3V0bGluZSBjYXNlcyB3aGVyZSBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gV2hpbGUgdGhlIGluc3RydWN0aW9ucyBkb24mIzM5O3QgZXhwbGljaXRseSBjYWxsIG91dCBgdG9vbHMvYCwgdGhlIGxvZ2ljIGlzIGNsZWFyOiBjaGFuZ2VzIHRvIHVzZXItc3BhY2UgdG9vbHMgaW4gYHRvb2xzL2AgZG9uJiMzOTt0IGFmZmVjdCByZWFjaGFibGUga2VybmVsIGxvZ2ljLiBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZnkgbW9kaWZpY2F0aW9ucyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMgd2FycmFudCBgV29ydGhGdXp6aW5nPXRydWVgLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGlzIHBhdGNoIGV4Y2x1c2l2ZWx5IGltcGFjdHMgdGhlIGB0b29scy9gIGRpcmVjdG9yeSwgaXQgZG9lcyAqbm90KiBtb2RpZnkgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiBUaGUgY29kZSBpc24mIzM5O3QgcGFydCBvZiB0aGUgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eS4KCkkmIzM5O3ZlIHJldmlld2VkIHRoZSBkaWZmIHRob3JvdWdobHksIGFuZCBJJiMzOTttIGNvbmZpZGVudC4gVGhlcmUmIzM5O3Mgbm90aGluZyBlbHNlIG9mIHN1YnN0YW5jZSBoZXJlLiBUaGlzIGlzIGEgc2ltcGxlIGFkZGl0aW9uIG9mIGEgdXNlci1zcGFjZSB0b29sLgoKU28sIHRoZSB2ZXJkaWN0IGlzICoqV29ydGhGdXp6aW5nPWZhbHNlKiouIFRoZSByZWFzb24gaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGUgcGF0Y2ggc29sZWx5IGFkZHMgYSB1c2VyLXNwYWNlIHRlc3RpbmcgdG9vbCB3aXRoaW4gdGhlIGB0b29scy9tbS9gIGRpcmVjdG9yeSBhbmQgZG9lc24mIzM5O3QgbW9kaWZ5IGFueSBrZXJuZWwgc291cmNlIGNvZGUuCgpOb3csIGxldCBtZSBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIGEgbmV3IHVzZXItc3BhY2UgdGVzdGluZyB0b29sIGluIHRoZSB0b29scy9tbS8gZGlyZWN0b3J5IGFuZCBkb2VzIG5vdCBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyB1c2VyLXNwYWNlIHRlc3RpbmcgdG9vbCBpbiB0aGUgdG9vbHMvbW0vIGRpcmVjdG9yeSBhbmQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwgc291cmNlIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjAyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzowMjoxNC40Mjg5ODI5MDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Njc1MDczMjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgbmV3IHVzZXItc3BhY2UgdGVzdGluZyB0b29sIGluIHRoZSB0b29scy9tbS8gZGlyZWN0b3J5IGFuZCBkb2VzIG5vdCBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjAyOjE0LjQyODk5MDcyN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAzNTI3NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTMyZWY2ODRmOGU5OTBmM2MzMzEzNmIwZTdjYTlhNDA5ZDdhZjczM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzowMjoxMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggMGY1MTNiNDJiYzE4Ni4uMmMzMDliMzJjOThlYiAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTEyMDQzLDYgKzEyMDQzLDcgQEAgRjpcXHRpbmNsdWRlL2xpbnV4L21lbW9yeS1mYWlsdXJlLmhcXG4gRjpcXHRpbmNsdWRlL3RyYWNlL2V2ZW50cy9tZW1vcnktZmFpbHVyZS5oXFxuIEY6XFx0bW0vaHdwb2lzb24taW5qZWN0LmNcXG4gRjpcXHRtbS9tZW1vcnktZmFpbHVyZS5jXFxuK0Y6XFx0dG9vbHMvbW0vbWVtb3J5LWZhaWx1cmUvXFxuIEY6XFx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbiBcXG4gSFlDT04gSFk0NlhYIFRPVUNIU0NSRUVOIFNVUFBPUlRcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL21tLy5naXRpZ25vcmVcXG5pbmRleCAxNDQ2YTY1OWU1NDA4Li5iOWI4MGQ5MDlkYjRhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL21tLy5naXRpZ25vcmVcXG4rKysgYi90b29scy9tbS8uZ2l0aWdub3JlXFxuQEAgLTMsMyArMyw0IEBAIHNsYWJpbmZvXFxuIHBhZ2UtdHlwZXNcXG4gcGFnZV9vd25lcl9zb3J0XFxuIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XFxuK21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL01ha2VmaWxlIGIvdG9vbHMvbW0vTWFrZWZpbGVcXG5pbmRleCA4NTgxODZhNmVlZmRiLi45ZjZkZTk1N2E5NWEwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL21tL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvbW0vTWFrZWZpbGVcXG5AQCAtNCw2ICs0LDcgQEBcXG4gaW5jbHVkZSAuLi9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGVcXG4gXFxuIEJVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcXG4rQlVJTERfVEFSR0VUUys9bWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWNcXG4gSU5TVEFMTF9UQVJHRVRTID0gJChCVUlMRF9UQVJHRVRTKSB0aHBtYXBzXFxuIFxcbiBMSUJfRElSID0gLi4vbGliL2FwaVxcbkBAIC0yNCw2ICsyNSw3IEBAICQoTElCUyk6XFxuIFxcbiBjbGVhbjpcXG4gXFx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcXG4rXFx0JChSTSkgbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWNcXG4gXFx0bWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuXFxuIFxcbiBzYmluZGlyID89IC91c3Ivc2JpblxcbmRpZmYgLS1naXQgYS90b29scy9tbS9tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYy5jIGIvdG9vbHMvbW0vbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzc3MmM1NTQ4YWRhZlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy9tbS9tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYy5jXFxuQEAgLTAsMCArMSwzNTkgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogaHdwb2lzb24tcGFuaWM6IHRyaWdnZXIgYW4gaW50ZW50aW9uYWwga2VybmVsIHBhbmljIGJ5IGluamVjdGluZyBhXFxuKyAqIGh3cG9pc29uIGVycm9yIG9uIGEga2VybmVsLW93bmVkIHBhZ2UsIHRvIGNoZWNrIHRoYXRcXG4rICogdm0ucGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZSBmaXJlcy5cXG4rICpcXG4rICogVGhyZWUga2luZHMgb2Yga2VybmVsLW93bmVkIHBhZ2UgY2FuIGJlIHRhcmdldGVkLCBzZWxlY3RlZCB3aXRoIC1rXFxuKyAqIChkZWZhdWx0OiByb2RhdGEpOlxcbisgKlxcbisgKiAgIHJvZGF0YSAgLSBhIFBHX3Jlc2VydmVkIHBhZ2UgaW4gdGhlIGtlcm5lbCByb2RhdGEgcmFuZ2UsIGZyb21cXG4rICogICAgICAgICAgICAgL3Byb2MvaW9tZW0gXFxcIktlcm5lbCByb2RhdGFcXFwiLiAgeDg2IGFuZCByaXNjdiBvbmx5LlxcbisgKiAgIHNsYWIgICAgLSBhIHNsYWIgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1NMQUIpLlxcbisgKiAgIHBndGFibGUgLSBhIHBhZ2UtdGFibGUgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1BHVEFCTEUpLlxcbisgKlxcbisgKiBzbGFiIGFuZCBwZ3RhYmxlIHdvcmsgZXZlcnl3aGVyZTsgcm9kYXRhIG5lZWRzIGFuIGFyY2hpdGVjdHVyZSB0aGF0XFxuKyAqIHB1Ymxpc2hlcyB0aGUgcm9kYXRhIHJlc291cmNlIGluIC9wcm9jL2lvbWVtLlxcbisgKlxcbisgKiBUaGUgc2xhYiBhbmQgcGd0YWJsZSB2YXJpYW50cyBleGVyY2lzZSBtZW1vcnlfZmFpbHVyZSgpIC1cXHUwMDNlIGdldF9hbnlfcGFnZSgpXFxuKyAqIG9uIGEgbm9uIFBHX3Jlc2VydmVkIGtlcm5lbC1vd25lZCBwYWdlLCBjYXRjaGluZyByZWdyZXNzaW9ucyB3aGVyZVxcbisgKiBnZXRfYW55X3BhZ2UoKSBjb2xsYXBzZXMgc3VjaCBwYWdlcyBpbnRvIGEgdHJhbnNpZW50IC1FSU8gaW5zdGVhZCBvZlxcbisgKiAtRU5PVFJFQ09WRVJBQkxFLlxcbisgKlxcbisgKiBBIHN1Y2Nlc3NmdWwgcnVuIGNyYXNoZXMgdGhlIGtlcm5lbCwgc28gLS15ZXMtcGFuaWMtbXkta2VybmVsIGlzIHJlcXVpcmVkXFxuKyAqIGFuZCB0aGUgdG9vbCBpcyBtZWFudCBmb3IgYSBkaXNwb3NhYmxlIFZNIChlLmcuIHZpcnRtZS1uZykgd2l0aCB0aGUgc2VyaWFsXFxuKyAqIGNvbnNvbGUgY2FwdHVyZWQuICBUaGUgcmVzdWx0IGlzIG9ic2VydmVkIGV4dGVybmFsbHk6IHRoZSBrZXJuZWwgcGFuaWNzIHdpdGhcXG4rICogICBcXFwiTWVtb3J5IGZhaWx1cmU6IFxcdTAwM2NwZm5cXHUwMDNlOiB1bnJlY292ZXJhYmxlIHBhZ2VcXFwiXFxuKyAqIFJldHVybmluZyBhdCBhbGwgbWVhbnMgbm8gcGFuaWMgZmlyZWQsIHNvIGV2ZXJ5IGV4aXQgc3RhdHVzIGlzIG5vbi16ZXJvOlxcbisgKiBlaXRoZXIgYSBmYWlsdXJlLCBvciBhbiBpbmNvbmNsdXNpdmUgcnVuIHdoZXJlIHRoZSB0YXJnZXQgUEZOIHJhY2VkIHRvXFxuKyAqIGFub3RoZXIgcGFnZSB0eXBlIGJlZm9yZSBpbmplY3Rpb24uXFxuKyAqXFxuKyAqIEF1dGhvcjogQnJlbm8gTGVpdGFvIFxcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1xcdTAwM2VcXG4rICovXFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcXG4rI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NFxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2dldG9wdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGltaXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRhcmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGludC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCIuLi8uLi8uLi9pbmNsdWRlL3VhcGkvbGludXgva2VybmVsLXBhZ2UtZmxhZ3MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIi4uLy4uL2luY2x1ZGUvbGludXgvc2l6ZXMuaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2FwaS9mcy9mcy5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBTWVNDVExfUEFUSFxcdFxcXCIvcHJvYy9zeXMvdm0vcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxcXCJcXG4rI2RlZmluZSBJTkpFQ1RfUEFUSFxcdFxcXCIvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZVxcXCJcXG4rI2RlZmluZSBQUk9DX0tQQUdFRkxBR1NcXHRcXFwiL3Byb2Mva3BhZ2VmbGFnc1xcXCJcXG4rXFxuKy8qIE5vdCBleHBvcnRlZCBieSB0aGUgdWFwaSBoZWFkZXIsIHNlZSB0b29scy9tbS9wYWdlLXR5cGVzLmMuICovXFxuKyNkZWZpbmUgS1BGX1JFU0VSVkVEXFx0MzJcXG4rXFxuKyNkZWZpbmUgQklUKG5hbWUpXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgS1BGXyMjbmFtZSlcXG4rI2RlZmluZSBBUlJBWV9TSVpFKHgpXFx0KHNpemVvZih4KSAvIHNpemVvZigoeClbMF0pKVxcbitcXG4rLyogVGhlIGtwYWdlZmxhZ3MgYml0IGlkZW50aWZ5aW5nIGVhY2gga2VybmVsLW93bmVkIHBhZ2Uga2luZCB3ZSB0YXJnZXQuICovXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFnZV9raW5kIHtcXG4rXFx0Y29uc3QgY2hhciAqbmFtZTtcXG4rXFx0dWludDY0X3QgYml0O1xcbit9IHBhZ2Vfa2luZHNbXSA9IHtcXG4rXFx0eyBcXFwicm9kYXRhXFxcIiwgIEJJVChSRVNFUlZFRCkgfSxcXG4rXFx0eyBcXFwic2xhYlxcXCIsICAgIEJJVChTTEFCKSAgICAgfSxcXG4rXFx0eyBcXFwicGd0YWJsZVxcXCIsIEJJVChQR1RBQkxFKSAgfSxcXG4rfTtcXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTtcXG4rXFxuK3N0YXRpYyB2b2lkIGZhdGFsKGNvbnN0IGNoYXIgKngsIC4uLilcXG4re1xcbitcXHR2YV9saXN0IGFwO1xcbitcXG4rXFx0dmFfc3RhcnQoYXAsIHgpO1xcbitcXHR2ZnByaW50ZihzdGRlcnIsIHgsIGFwKTtcXG4rXFx0dmFfZW5kKGFwKTtcXG4rXFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGtwYWdlZmxhZ3NfcmVhZChpbnQgZmQsIHVpbnQ2NF90IHBmbiwgdWludDY0X3QgKmZsYWdzKVxcbit7XFxuK1xcdHNzaXplX3QgYnl0ZXM7XFxuK1xcbitcXHRieXRlcyA9IHByZWFkKGZkLCBmbGFncywgc2l6ZW9mKCpmbGFncyksIChvZmZfdClwZm4gKiBzaXplb2YoKmZsYWdzKSk7XFxuK1xcbitcXHRyZXR1cm4gYnl0ZXMgPT0gc2l6ZW9mKCpmbGFncykgPyAwIDogLTE7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGlja19yb2RhdGFfcGh5c19hZGRyKHVpbnQ2NF90ICpwaHlzX2FkZHIpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0LCBlbmQ7XFxuK1xcdGNoYXIgbGluZVsyNTZdLCBsYWJlbFs2NF07XFxuK1xcdGludCByZXQgPSAtMTtcXG4rXFx0RklMRSAqZjtcXG4rXFxuK1xcdGYgPSBmb3BlbihcXFwiL3Byb2MvaW9tZW1cXFwiLCBcXFwiclxcXCIpO1xcbitcXHRpZiAoIWYpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdC8qIFN1Yi1yZXNvdXJjZXMgYXJlIGluZGVudGVkOiBcXFwiICAwMjUwMDAwMC0wMmZmZmZmZiA6IEtlcm5lbCByb2RhdGFcXFwiICovXFxuK1xcdHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7XFxuK1xcdFxcdGlmIChzc2NhbmYobGluZSwgXFxcIiAlbGx4LSVsbHggOiAlNjNbXlxcXFxuXVxcXCIsIFxcdTAwMjZzdGFydCwgXFx1MDAyNmVuZCxcXG4rXFx0XFx0XFx0ICAgbGFiZWwpICE9IDMpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoc3RyY21wKGxhYmVsLCBcXFwiS2VybmVsIHJvZGF0YVxcXCIpIHx8IGVuZCBcXHUwMDNjPSBzdGFydClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdC8qIFBhZ2UtYWxpZ24gdXAgYW5kIHJldHVybiB0aGUgZmlyc3QgYnl0ZSBvZiB0aGF0IHBhZ2UuICovXFxuK1xcdFxcdCpwaHlzX2FkZHIgPSAoKHN0YXJ0ICsgcGFnZV9zaXplIC0gMSkgLyBwYWdlX3NpemUpICogcGFnZV9zaXplO1xcbitcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0ZmNsb3NlKGYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBpY2tfa3BhZ2VmbGFnc19waHlzX2FkZHIodWludDY0X3Qgd2FudCwgdWludDY0X3QgKnBoeXNfYWRkcilcXG4re1xcbitcXHR1aW50NjRfdCBwZm4gPSBTWl8xNk0gLyBwYWdlX3NpemU7XFxuK1xcdHVpbnQ2NF90IGZsYWdzO1xcbitcXHRpbnQgcmV0ID0gLTE7XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdGZkID0gb3BlbihQUk9DX0tQQUdFRkxBR1MsIE9fUkRPTkxZKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0Zm9yICg7IGtwYWdlZmxhZ3NfcmVhZChmZCwgcGZuLCBcXHUwMDI2ZmxhZ3MpID09IDA7IHBmbisrKSB7XFxuK1xcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiB3YW50KSBcXHUwMDI2XFx1MDAyNiAhKGZsYWdzIFxcdTAwMjYgQklUKEhXUE9JU09OKSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICEoZmxhZ3MgXFx1MDAyNiBCSVQoTk9QQUdFKSkgXFx1MDAyNlxcdTAwMjYgIShmbGFncyBcXHUwMDI2IEJJVChDT01QT1VORF9UQUlMKSkpIHtcXG4rXFx0XFx0XFx0KnBoeXNfYWRkciA9IHBmbiAqIHBhZ2Vfc2l6ZTtcXG4rXFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJlYWRfc3lzY3RsKHVuc2lnbmVkIGxvbmcgKnZhbClcXG4re1xcbitcXHRGSUxFICpmID0gZm9wZW4oU1lTQ1RMX1BBVEgsIFxcXCJyXFxcIik7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWYpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0cmV0ID0gZnNjYW5mKGYsIFxcXCIlbHVcXFwiLCB2YWwpID09IDEgPyAwIDogLTE7XFxuK1xcdGZjbG9zZShmKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgd3JpdGVfc3lzY3RsKHVuc2lnbmVkIGxvbmcgdmFsKVxcbit7XFxuK1xcdEZJTEUgKmYgPSBmb3BlbihTWVNDVExfUEFUSCwgXFxcIndcXFwiKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghZilcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRyZXQgPSBmcHJpbnRmKGYsIFxcXCIlbHVcXFwiLCB2YWwpIFxcdTAwM2MgMCA/IC0xIDogMDtcXG4rXFx0ZmNsb3NlKGYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyogaGFyZF9vZmZsaW5lX3BhZ2UoKSBpbmplY3RzIHdpdGggTUZfU1dfU0lNVUxBVEVELCBzbyB1bnBvaXNvbiBpcyBhbGxvd2VkLiAqL1xcbitzdGF0aWMgdm9pZCB1bnBvaXNvbl9wZm4odWludDY0X3QgcGZuKVxcbit7XFxuK1xcdGNoYXIgcGF0aFtQQVRIX01BWF0sIGJ1ZlszMl07XFxuK1xcdGNvbnN0IGNoYXIgKmRlYnVnZnM7XFxuK1xcdGludCBmZCwgbGVuO1xcbitcXG4rXFx0ZGVidWdmcyA9IGRlYnVnZnNfX21vdW50KCk7XFxuK1xcdGlmICghZGVidWdmcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiJXMvaHdwb2lzb24vdW5wb2lzb24tcGZuXFxcIiwgZGVidWdmcyk7XFxuK1xcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIweCVsbHhcXFxcblxcXCIsICh1bnNpZ25lZCBsb25nIGxvbmcpcGZuKTtcXG4rXFx0aWYgKHdyaXRlKGZkLCBidWYsIGxlbikgXFx1MDAzYyAwKVxcbitcXHRcXHRwZXJyb3IoXFxcInVucG9pc29uLXBmblxcXCIpO1xcbitcXHRjbG9zZShmZCk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBjaGFyICppbmplY3RfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZCxcXG4rXFx0XFx0XFx0XFx0ICAgdWludDY0X3QgcGh5c19hZGRyLCB1aW50NjRfdCBwZm4pXFxuK3tcXG4rXFx0Y2hhciBidWZbMzJdO1xcbitcXHRpbnQgZmQsIGxlbjtcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcbitcXHRwcmludGYoXFxcImluamVjdGluZyBod3BvaXNvbiBhdCBwaHlzIDB4JWxseCAocGZuIDB4JWxseCwga2luZD0lcylcXFxcblxcXCIsXFxuK1xcdCAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBoeXNfYWRkciwgKHVuc2lnbmVkIGxvbmcgbG9uZylwZm4sXFxuK1xcdCAgICAgICBraW5kLVxcdTAwM2VuYW1lKTtcXG4rXFx0cHJpbnRmKFxcXCJleHBlY3Rpbmcga2VybmVsIHBhbmljOiAnTWVtb3J5IGZhaWx1cmU6IFxcdTAwM2NwZm5cXHUwMDNlOiB1bnJlY292ZXJhYmxlIHBhZ2UnXFxcXG5cXFwiKTtcXG4rXFx0ZmZsdXNoKHN0ZG91dCk7XFxuK1xcbitcXHRmZCA9IG9wZW4oSU5KRUNUX1BBVEgsIE9fV1JPTkxZKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIFxcXCJjYW5ub3Qgb3BlbiBcXFwiIElOSkVDVF9QQVRIO1xcbitcXG4rXFx0bGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXFxcIjB4JWxseFxcXCIsICh1bnNpZ25lZCBsb25nIGxvbmcpcGh5c19hZGRyKTtcXG4rXFx0cmV0ID0gd3JpdGUoZmQsIGJ1ZiwgbGVuKTtcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0aWYgKHJldCAhPSBsZW4pXFxuK1xcdFxcdHJldHVybiBcXFwiaW5qZWN0IGZhaWxlZCBiZWZvcmUgcmVhY2hpbmcgdGhlIHBhbmljIHBhdGhcXFwiO1xcbitcXG4rXFx0cmV0dXJuIFxcXCJpbmplY3QgcmV0dXJuZWQgd2l0aG91dCBwYW5pYzsgc3lzY3RsIGluZWZmZWN0aXZlXFxcIjtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmxvb2t1cF9raW5kKGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwYWdlX2tpbmRzKTsgaSsrKVxcbitcXHRcXHRpZiAoIXN0cmNtcChwYWdlX2tpbmRzW2ldLm5hbWUsIG5hbWUpKVxcbitcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNnBhZ2Vfa2luZHNbaV07XFxuK1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdXNhZ2Uodm9pZClcXG4re1xcbitcXHRwcmludGYoXFxcImh3cG9pc29uLXBhbmljIFtvcHRpb25zXVxcXFxuXFxcIlxcbitcXHQgICAgICAgXFxcIiAgICAgICAgICAgIC1rfC0ta2luZCBcXHUwMDNja2luZFxcdTAwM2UgICAgICAgcm9kYXRhIChkZWZhdWx0LCB4ODYgYW5kIHJpc2N2IG9ubHkpLFxcXFxuXFxcIlxcbitcXHQgICAgICAgXFxcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhYiBvciBwZ3RhYmxlXFxcXG5cXFwiXFxuK1xcdCAgICAgICBcXFwiICAgICAgICAgICAgLS15ZXMtcGFuaWMtbXkta2VybmVsICByZWFsbHkgcnVuIGl0OiB0aGUgbWFjaGluZSBwYW5pY3NcXFxcblxcXCJcXG4rXFx0ICAgICAgIFxcXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBldmVyeSB1bnNhdmVkIHdyaXRlIGlzIGxvc3RcXFxcblxcXCJcXG4rXFx0ICAgICAgIFxcXCIgICAgICAgICAgICAtaHwtLWhlbHAgICAgICAgICAgICAgIHNob3cgdGhpc1xcXFxuXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdHNbXSA9IHtcXG4rXFx0eyBcXFwia2luZFxcXCIsICAgICAgICAgICAgICAgICAxLCBOVUxMLCAnaycgfSxcXG4rXFx0eyBcXFwieWVzLXBhbmljLW15LWtlcm5lbFxcXCIsICAwLCBOVUxMLCAneScgfSxcXG4rXFx0eyBcXFwiaGVscFxcXCIsICAgICAgICAgICAgICAgICAwLCBOVUxMLCAnaCcgfSxcXG4rXFx0eyBOVUxMLCAgICAgICAgICAgICAgICAgICAwLCBOVUxMLCAwIH0sXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqcGFyc2VfYXJncyhpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGludCAqYXJtZWQpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZDtcXG4rXFx0Y29uc3QgY2hhciAqbmFtZSA9IFxcXCJyb2RhdGFcXFwiO1xcbitcXHRpbnQgYztcXG4rXFxuK1xcdHdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIFxcXCJrOmhcXFwiLCBvcHRzLCBOVUxMKSkgIT0gLTEpIHtcXG4rXFx0XFx0c3dpdGNoIChjKSB7XFxuK1xcdFxcdGNhc2UgJ2snOlxcbitcXHRcXHRcXHRuYW1lID0gb3B0YXJnO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAneSc6XFxuK1xcdFxcdFxcdCphcm1lZCA9IDE7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICdoJzpcXG4rXFx0XFx0XFx0dXNhZ2UoKTtcXG4rXFx0XFx0XFx0ZXhpdChFWElUX1NVQ0NFU1MpO1xcbitcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHR1c2FnZSgpO1xcbitcXHRcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0a2luZCA9IGxvb2t1cF9raW5kKG5hbWUpO1xcbitcXHRpZiAoIWtpbmQpXFxuK1xcdFxcdGZhdGFsKFxcXCJ1bmtub3duIGtpbmQgJyVzJyAoZXhwZWN0ZWQ6IHJvZGF0YXxzbGFifHBndGFibGUpXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICBuYW1lKTtcXG4rXFxuK1xcdHJldHVybiBraW5kO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBjaGVja19wcmVyZXFzKGludCBhcm1lZClcXG4re1xcbitcXHRpZiAoZ2V0ZXVpZCgpKVxcbitcXHRcXHRmYXRhbChcXFwibXVzdCBydW4gYXMgcm9vdFxcXFxuXFxcIik7XFxuK1xcdGlmIChhY2Nlc3MoU1lTQ1RMX1BBVEgsIFdfT0spKVxcbitcXHRcXHRmYXRhbChcXFwiJXMgbm90IHByZXNlbnQgKGtlcm5lbCB3aXRob3V0IHRoZSBzeXNjdGw/KVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgU1lTQ1RMX1BBVEgpO1xcbitcXHRpZiAoYWNjZXNzKElOSkVDVF9QQVRILCBXX09LKSlcXG4rXFx0XFx0ZmF0YWwoXFxcIiVzIG5vdCBwcmVzZW50IChubyBNRU1PUllfRkFJTFVSRT8pXFxcXG5cXFwiLCBJTkpFQ1RfUEFUSCk7XFxuK1xcdGlmICghYXJtZWQpXFxuK1xcdFxcdGZhdGFsKFxcXCJ0aGlzIHBhbmljcyB0aGUga2VybmVsOyBwYXNzIC0teWVzLXBhbmljLW15LWtlcm5lbFxcXFxuXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyB1aW50NjRfdCBwaWNrX3BoeXNfYWRkcihjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kKVxcbit7XFxuK1xcdHVpbnQ2NF90IGFkZHI7XFxuK1xcbitcXHRpZiAoa2luZC1cXHUwMDNlYml0ID09IEJJVChSRVNFUlZFRCkpIHtcXG4rXFx0XFx0aWYgKHBpY2tfcm9kYXRhX3BoeXNfYWRkcihcXHUwMDI2YWRkcikpXFxuK1xcdFxcdFxcdGZhdGFsKFxcXCJubyBcXFxcXFxcIktlcm5lbCByb2RhdGFcXFxcXFxcIiBpbiAvcHJvYy9pb21lbTsgdHJ5IC1rIHNsYWIgb3IgLWsgcGd0YWJsZVxcXFxuXFxcIik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmIChwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyKGtpbmQtXFx1MDAzZWJpdCwgXFx1MDAyNmFkZHIpKVxcbitcXHRcXHRcXHRmYXRhbChcXFwibm8gdXNhYmxlICVzIFBGTiBpbiAlc1xcXFxuXFxcIiwga2luZC1cXHUwMDNlbmFtZSxcXG4rXFx0XFx0XFx0ICAgICAgUFJPQ19LUEFHRUZMQUdTKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGFkZHI7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGFybV9zeXNjdGwodW5zaWduZWQgbG9uZyAqcHJpb3IpXFxuK3tcXG4rXFx0aWYgKHJlYWRfc3lzY3RsKHByaW9yKSlcXG4rXFx0XFx0ZmF0YWwoXFxcImZhaWxlZCB0byByZWFkICVzXFxcXG5cXFwiLCBTWVNDVExfUEFUSCk7XFxuK1xcdGlmICh3cml0ZV9zeXNjdGwoMSkpXFxuK1xcdFxcdGZhdGFsKFxcXCJmYWlsZWQgdG8gZW5hYmxlICVzXFxcXG5cXFwiLCBTWVNDVExfUEFUSCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJlY2hlY2tfa2luZChjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kLCB1aW50NjRfdCBwZm4sXFxuK1xcdFxcdFxcdCBjb25zdCBjaGFyICp2ZXJkaWN0KVxcbit7XFxuK1xcdHVpbnQ2NF90IGZsYWdzO1xcbitcXHRpbnQgZmQsIHJldDtcXG4rXFxuK1xcdGZkID0gb3BlbihQUk9DX0tQQUdFRkxBR1MsIE9fUkRPTkxZKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0ZmF0YWwoXFxcIiVzIChjb3VsZCBub3Qgb3BlbiAlcylcXFxcblxcXCIsIHZlcmRpY3QsIFBST0NfS1BBR0VGTEFHUyk7XFxuK1xcdHJldCA9IGtwYWdlZmxhZ3NfcmVhZChmZCwgcGZuLCBcXHUwMDI2ZmxhZ3MpO1xcbitcXHRjbG9zZShmZCk7XFxuK1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRmYXRhbChcXFwiJXMgKGNvdWxkIG5vdCByZWNvbmZpcm0gcGFnZSB0eXBlIHZpYSAlcylcXFxcblxcXCIsIHZlcmRpY3QsXFxuK1xcdFxcdCAgICAgIFBST0NfS1BBR0VGTEFHUyk7XFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IGtpbmQtXFx1MDAzZWJpdClcXG4rXFx0XFx0ZmF0YWwoXFxcIiVzIChwYWdlIHN0aWxsICVzKVxcXFxuXFxcIiwgdmVyZGljdCwga2luZC1cXHUwMDNlbmFtZSk7XFxuK1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInRhcmdldCBQRk4gbm8gbG9uZ2VyICVzOyByYWNlZCBiZWZvcmUgaW5qZWN0LCBpbmNvbmNsdXNpdmVcXFxcblxcXCIsXFxuK1xcdFxcdGtpbmQtXFx1MDAzZW5hbWUpO1xcbit9XFxuK1xcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuK3tcXG4rXFx0dWludDY0X3QgcGh5c19hZGRyLCBwZm47XFxuK1xcdGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmtpbmQ7XFxuK1xcdGNvbnN0IGNoYXIgKnZlcmRpY3Q7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcHJpb3I7XFxuK1xcdGludCBhcm1lZCA9IDA7XFxuK1xcbitcXHRraW5kID0gcGFyc2VfYXJncyhhcmdjLCBhcmd2LCBcXHUwMDI2YXJtZWQpO1xcbitcXHRjaGVja19wcmVyZXFzKGFybWVkKTtcXG4rXFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcXG4rXFxuK1xcdHBoeXNfYWRkciA9IHBpY2tfcGh5c19hZGRyKGtpbmQpO1xcbitcXHRwZm4gPSBwaHlzX2FkZHIgLyBwYWdlX3NpemU7XFxuK1xcdGFybV9zeXNjdGwoXFx1MDAyNnByaW9yKTtcXG4rXFxuK1xcdHZlcmRpY3QgPSBpbmplY3RfaHdwb2lzb24oa2luZCwgcGh5c19hZGRyLCBwZm4pO1xcbitcXG4rXFx0LyogTm8gcGFuaWMgZmlyZWQuICBQdXQgdGhlIG1hY2hpbmUgYmFjaywgdGhlbiByZXBvcnQuICovXFxuK1xcdHdyaXRlX3N5c2N0bChwcmlvcik7XFxuK1xcdHVucG9pc29uX3BmbihwZm4pO1xcbitcXHRyZWNoZWNrX2tpbmQoa2luZCwgcGZuLCB2ZXJkaWN0KTtcXG4rXFxuK1xcdHJldHVybiBFWElUX0ZBSUxVUkU7XFxuK31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MDI6MTUuMDM0NjAwMzg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTA2OTQ0NDQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgbmV3IHVzZXItc3BhY2UgdGVzdGluZyB0b29sIGluIHRoZSB0b29scy9tbS8gZGlyZWN0b3J5IGFuZCBkb2VzIG5vdCBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGUzMmVmNjg0ZjhlOTkwZjNjMzMxMzZiMGU3Y2E5YTQwOWQ3YWY3MzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzowMjoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDBmNTEzYjQyYmMxODYuLjJjMzA5YjMyYzk4ZWIgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0xMjA0Myw2ICsxMjA0Myw3IEBAIEY6XHRpbmNsdWRlL2xpbnV4L21lbW9yeS1mYWlsdXJlLmhcbiBGOlx0aW5jbHVkZS90cmFjZS9ldmVudHMvbWVtb3J5LWZhaWx1cmUuaFxuIEY6XHRtbS9od3BvaXNvbi1pbmplY3QuY1xuIEY6XHRtbS9tZW1vcnktZmFpbHVyZS5jXG4rRjpcdHRvb2xzL21tL21lbW9yeS1mYWlsdXJlL1xuIEY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jXG4gXG4gSFlDT04gSFk0NlhYIFRPVUNIU0NSRUVOIFNVUFBPUlRcbmRpZmYgLS1naXQgYS90b29scy9tbS8uZ2l0aWdub3JlIGIvdG9vbHMvbW0vLmdpdGlnbm9yZVxuaW5kZXggMTQ0NmE2NTllNTQwOC4uYjliODBkOTA5ZGI0YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tLy5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL21tLy5naXRpZ25vcmVcbkBAIC0zLDMgKzMsNCBAQCBzbGFiaW5mb1xuIHBhZ2UtdHlwZXNcbiBwYWdlX293bmVyX3NvcnRcbiB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuK21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZVxuaW5kZXggODU4MTg2YTZlZWZkYi4uOWY2ZGU5NTdhOTVhMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tL01ha2VmaWxlXG4rKysgYi90b29scy9tbS9NYWtlZmlsZVxuQEAgLTQsNiArNCw3IEBAXG4gaW5jbHVkZSAuLi9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGVcbiBcbiBCVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4rQlVJTERfVEFSR0VUUys9bWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWNcbiBJTlNUQUxMX1RBUkdFVFMgPSAkKEJVSUxEX1RBUkdFVFMpIHRocG1hcHNcbiBcbiBMSUJfRElSID0gLi4vbGliL2FwaVxuQEAgLTI0LDYgKzI1LDcgQEAgJChMSUJTKTpcbiBcbiBjbGVhbjpcbiBcdCQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4rXHQkKFJNKSBtZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pY1xuIFx0bWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuXG4gXG4gc2JpbmRpciA/PSAvdXNyL3NiaW5cbmRpZmYgLS1naXQgYS90b29scy9tbS9tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYy5jIGIvdG9vbHMvbW0vbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjc3NzJjNTU0OGFkYWZcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL21tL21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljLmNcbkBAIC0wLDAgKzEsMzU5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIGh3cG9pc29uLXBhbmljOiB0cmlnZ2VyIGFuIGludGVudGlvbmFsIGtlcm5lbCBwYW5pYyBieSBpbmplY3RpbmcgYVxuKyAqIGh3cG9pc29uIGVycm9yIG9uIGEga2VybmVsLW93bmVkIHBhZ2UsIHRvIGNoZWNrIHRoYXRcbisgKiB2bS5wYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlIGZpcmVzLlxuKyAqXG4rICogVGhyZWUga2luZHMgb2Yga2VybmVsLW93bmVkIHBhZ2UgY2FuIGJlIHRhcmdldGVkLCBzZWxlY3RlZCB3aXRoIC1rXG4rICogKGRlZmF1bHQ6IHJvZGF0YSk6XG4rICpcbisgKiAgIHJvZGF0YSAgLSBhIFBHX3Jlc2VydmVkIHBhZ2UgaW4gdGhlIGtlcm5lbCByb2RhdGEgcmFuZ2UsIGZyb21cbisgKiAgICAgICAgICAgICAvcHJvYy9pb21lbSBcIktlcm5lbCByb2RhdGFcIi4gIHg4NiBhbmQgcmlzY3Ygb25seS5cbisgKiAgIHNsYWIgICAgLSBhIHNsYWIgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1NMQUIpLlxuKyAqICAgcGd0YWJsZSAtIGEgcGFnZS10YWJsZSBwYWdlIGZvdW5kIHZpYSAvcHJvYy9rcGFnZWZsYWdzIChLUEZfUEdUQUJMRSkuXG4rICpcbisgKiBzbGFiIGFuZCBwZ3RhYmxlIHdvcmsgZXZlcnl3aGVyZTsgcm9kYXRhIG5lZWRzIGFuIGFyY2hpdGVjdHVyZSB0aGF0XG4rICogcHVibGlzaGVzIHRoZSByb2RhdGEgcmVzb3VyY2UgaW4gL3Byb2MvaW9tZW0uXG4rICpcbisgKiBUaGUgc2xhYiBhbmQgcGd0YWJsZSB2YXJpYW50cyBleGVyY2lzZSBtZW1vcnlfZmFpbHVyZSgpIC1cdTAwM2UgZ2V0X2FueV9wYWdlKClcbisgKiBvbiBhIG5vbiBQR19yZXNlcnZlZCBrZXJuZWwtb3duZWQgcGFnZSwgY2F0Y2hpbmcgcmVncmVzc2lvbnMgd2hlcmVcbisgKiBnZXRfYW55X3BhZ2UoKSBjb2xsYXBzZXMgc3VjaCBwYWdlcyBpbnRvIGEgdHJhbnNpZW50IC1FSU8gaW5zdGVhZCBvZlxuKyAqIC1FTk9UUkVDT1ZFUkFCTEUuXG4rICpcbisgKiBBIHN1Y2Nlc3NmdWwgcnVuIGNyYXNoZXMgdGhlIGtlcm5lbCwgc28gLS15ZXMtcGFuaWMtbXkta2VybmVsIGlzIHJlcXVpcmVkXG4rICogYW5kIHRoZSB0b29sIGlzIG1lYW50IGZvciBhIGRpc3Bvc2FibGUgVk0gKGUuZy4gdmlydG1lLW5nKSB3aXRoIHRoZSBzZXJpYWxcbisgKiBjb25zb2xlIGNhcHR1cmVkLiAgVGhlIHJlc3VsdCBpcyBvYnNlcnZlZCBleHRlcm5hbGx5OiB0aGUga2VybmVsIHBhbmljcyB3aXRoXG4rICogICBcIk1lbW9yeSBmYWlsdXJlOiBcdTAwM2NwZm5cdTAwM2U6IHVucmVjb3ZlcmFibGUgcGFnZVwiXG4rICogUmV0dXJuaW5nIGF0IGFsbCBtZWFucyBubyBwYW5pYyBmaXJlZCwgc28gZXZlcnkgZXhpdCBzdGF0dXMgaXMgbm9uLXplcm86XG4rICogZWl0aGVyIGEgZmFpbHVyZSwgb3IgYW4gaW5jb25jbHVzaXZlIHJ1biB3aGVyZSB0aGUgdGFyZ2V0IFBGTiByYWNlZCB0b1xuKyAqIGFub3RoZXIgcGFnZSB0eXBlIGJlZm9yZSBpbmplY3Rpb24uXG4rICpcbisgKiBBdXRob3I6IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuKyAqL1xuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbisjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0XG4rI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2dldG9wdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRhcmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiLi4vLi4vLi4vaW5jbHVkZS91YXBpL2xpbnV4L2tlcm5lbC1wYWdlLWZsYWdzLmhcIlxuKyNpbmNsdWRlIFwiLi4vLi4vaW5jbHVkZS9saW51eC9zaXplcy5oXCJcbisjaW5jbHVkZSBcdTAwM2NhcGkvZnMvZnMuaFx1MDAzZVxuK1xuKyNkZWZpbmUgU1lTQ1RMX1BBVEhcdFwiL3Byb2Mvc3lzL3ZtL3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcIlxuKyNkZWZpbmUgSU5KRUNUX1BBVEhcdFwiL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2VcIlxuKyNkZWZpbmUgUFJPQ19LUEFHRUZMQUdTXHRcIi9wcm9jL2twYWdlZmxhZ3NcIlxuK1xuKy8qIE5vdCBleHBvcnRlZCBieSB0aGUgdWFwaSBoZWFkZXIsIHNlZSB0b29scy9tbS9wYWdlLXR5cGVzLmMuICovXG4rI2RlZmluZSBLUEZfUkVTRVJWRURcdDMyXG4rXG4rI2RlZmluZSBCSVQobmFtZSlcdCgxVUxMIFx1MDAzY1x1MDAzYyBLUEZfIyNuYW1lKVxuKyNkZWZpbmUgQVJSQVlfU0laRSh4KVx0KHNpemVvZih4KSAvIHNpemVvZigoeClbMF0pKVxuK1xuKy8qIFRoZSBrcGFnZWZsYWdzIGJpdCBpZGVudGlmeWluZyBlYWNoIGtlcm5lbC1vd25lZCBwYWdlIGtpbmQgd2UgdGFyZ2V0LiAqL1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFnZV9raW5kIHtcbitcdGNvbnN0IGNoYXIgKm5hbWU7XG4rXHR1aW50NjRfdCBiaXQ7XG4rfSBwYWdlX2tpbmRzW10gPSB7XG4rXHR7IFwicm9kYXRhXCIsICBCSVQoUkVTRVJWRUQpIH0sXG4rXHR7IFwic2xhYlwiLCAgICBCSVQoU0xBQikgICAgIH0sXG4rXHR7IFwicGd0YWJsZVwiLCBCSVQoUEdUQUJMRSkgIH0sXG4rfTtcbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX3NpemU7XG4rXG4rc3RhdGljIHZvaWQgZmF0YWwoY29uc3QgY2hhciAqeCwgLi4uKVxuK3tcbitcdHZhX2xpc3QgYXA7XG4rXG4rXHR2YV9zdGFydChhcCwgeCk7XG4rXHR2ZnByaW50ZihzdGRlcnIsIHgsIGFwKTtcbitcdHZhX2VuZChhcCk7XG4rXHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3BhZ2VmbGFnc19yZWFkKGludCBmZCwgdWludDY0X3QgcGZuLCB1aW50NjRfdCAqZmxhZ3MpXG4re1xuK1x0c3NpemVfdCBieXRlcztcbitcbitcdGJ5dGVzID0gcHJlYWQoZmQsIGZsYWdzLCBzaXplb2YoKmZsYWdzKSwgKG9mZl90KXBmbiAqIHNpemVvZigqZmxhZ3MpKTtcbitcbitcdHJldHVybiBieXRlcyA9PSBzaXplb2YoKmZsYWdzKSA/IDAgOiAtMTtcbit9XG4rXG4rc3RhdGljIGludCBwaWNrX3JvZGF0YV9waHlzX2FkZHIodWludDY0X3QgKnBoeXNfYWRkcilcbit7XG4rXHR1bnNpZ25lZCBsb25nIGxvbmcgc3RhcnQsIGVuZDtcbitcdGNoYXIgbGluZVsyNTZdLCBsYWJlbFs2NF07XG4rXHRpbnQgcmV0ID0gLTE7XG4rXHRGSUxFICpmO1xuK1xuK1x0ZiA9IGZvcGVuKFwiL3Byb2MvaW9tZW1cIiwgXCJyXCIpO1xuK1x0aWYgKCFmKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHQvKiBTdWItcmVzb3VyY2VzIGFyZSBpbmRlbnRlZDogXCIgIDAyNTAwMDAwLTAyZmZmZmZmIDogS2VybmVsIHJvZGF0YVwiICovXG4rXHR3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkge1xuK1x0XHRpZiAoc3NjYW5mKGxpbmUsIFwiICVsbHgtJWxseCA6ICU2M1teXFxuXVwiLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kLFxuK1x0XHRcdCAgIGxhYmVsKSAhPSAzKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoc3RyY21wKGxhYmVsLCBcIktlcm5lbCByb2RhdGFcIikgfHwgZW5kIFx1MDAzYz0gc3RhcnQpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdC8qIFBhZ2UtYWxpZ24gdXAgYW5kIHJldHVybiB0aGUgZmlyc3QgYnl0ZSBvZiB0aGF0IHBhZ2UuICovXG4rXHRcdCpwaHlzX2FkZHIgPSAoKHN0YXJ0ICsgcGFnZV9zaXplIC0gMSkgLyBwYWdlX3NpemUpICogcGFnZV9zaXplO1xuK1x0XHRyZXQgPSAwO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdGZjbG9zZShmKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGlja19rcGFnZWZsYWdzX3BoeXNfYWRkcih1aW50NjRfdCB3YW50LCB1aW50NjRfdCAqcGh5c19hZGRyKVxuK3tcbitcdHVpbnQ2NF90IHBmbiA9IFNaXzE2TSAvIHBhZ2Vfc2l6ZTtcbitcdHVpbnQ2NF90IGZsYWdzO1xuK1x0aW50IHJldCA9IC0xO1xuK1x0aW50IGZkO1xuK1xuK1x0ZmQgPSBvcGVuKFBST0NfS1BBR0VGTEFHUywgT19SRE9OTFkpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRmb3IgKDsga3BhZ2VmbGFnc19yZWFkKGZkLCBwZm4sIFx1MDAyNmZsYWdzKSA9PSAwOyBwZm4rKykge1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiB3YW50KSBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgQklUKEhXUE9JU09OKSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhKGZsYWdzIFx1MDAyNiBCSVQoTk9QQUdFKSkgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IEJJVChDT01QT1VORF9UQUlMKSkpIHtcbitcdFx0XHQqcGh5c19hZGRyID0gcGZuICogcGFnZV9zaXplO1xuK1x0XHRcdHJldCA9IDA7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcbitcdGNsb3NlKGZkKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmVhZF9zeXNjdGwodW5zaWduZWQgbG9uZyAqdmFsKVxuK3tcbitcdEZJTEUgKmYgPSBmb3BlbihTWVNDVExfUEFUSCwgXCJyXCIpO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghZilcbitcdFx0cmV0dXJuIC0xO1xuK1x0cmV0ID0gZnNjYW5mKGYsIFwiJWx1XCIsIHZhbCkgPT0gMSA/IDAgOiAtMTtcbitcdGZjbG9zZShmKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd3JpdGVfc3lzY3RsKHVuc2lnbmVkIGxvbmcgdmFsKVxuK3tcbitcdEZJTEUgKmYgPSBmb3BlbihTWVNDVExfUEFUSCwgXCJ3XCIpO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghZilcbitcdFx0cmV0dXJuIC0xO1xuK1x0cmV0ID0gZnByaW50ZihmLCBcIiVsdVwiLCB2YWwpIFx1MDAzYyAwID8gLTEgOiAwO1xuK1x0ZmNsb3NlKGYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyogaGFyZF9vZmZsaW5lX3BhZ2UoKSBpbmplY3RzIHdpdGggTUZfU1dfU0lNVUxBVEVELCBzbyB1bnBvaXNvbiBpcyBhbGxvd2VkLiAqL1xuK3N0YXRpYyB2b2lkIHVucG9pc29uX3Bmbih1aW50NjRfdCBwZm4pXG4re1xuK1x0Y2hhciBwYXRoW1BBVEhfTUFYXSwgYnVmWzMyXTtcbitcdGNvbnN0IGNoYXIgKmRlYnVnZnM7XG4rXHRpbnQgZmQsIGxlbjtcbitcbitcdGRlYnVnZnMgPSBkZWJ1Z2ZzX19tb3VudCgpO1xuK1x0aWYgKCFkZWJ1Z2ZzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiJXMvaHdwb2lzb24vdW5wb2lzb24tcGZuXCIsIGRlYnVnZnMpO1xuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcbitcdGlmIChmZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuO1xuK1xuK1x0bGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIweCVsbHhcXG5cIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylwZm4pO1xuK1x0aWYgKHdyaXRlKGZkLCBidWYsIGxlbikgXHUwMDNjIDApXG4rXHRcdHBlcnJvcihcInVucG9pc29uLXBmblwiKTtcbitcdGNsb3NlKGZkKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgKmluamVjdF9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kLFxuK1x0XHRcdFx0ICAgdWludDY0X3QgcGh5c19hZGRyLCB1aW50NjRfdCBwZm4pXG4re1xuK1x0Y2hhciBidWZbMzJdO1xuK1x0aW50IGZkLCBsZW47XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdHByaW50ZihcImluamVjdGluZyBod3BvaXNvbiBhdCBwaHlzIDB4JWxseCAocGZuIDB4JWxseCwga2luZD0lcylcXG5cIixcbitcdCAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBoeXNfYWRkciwgKHVuc2lnbmVkIGxvbmcgbG9uZylwZm4sXG4rXHQgICAgICAga2luZC1cdTAwM2VuYW1lKTtcbitcdHByaW50ZihcImV4cGVjdGluZyBrZXJuZWwgcGFuaWM6ICdNZW1vcnkgZmFpbHVyZTogXHUwMDNjcGZuXHUwMDNlOiB1bnJlY292ZXJhYmxlIHBhZ2UnXFxuXCIpO1xuK1x0ZmZsdXNoKHN0ZG91dCk7XG4rXG4rXHRmZCA9IG9wZW4oSU5KRUNUX1BBVEgsIE9fV1JPTkxZKTtcbitcdGlmIChmZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIFwiY2Fubm90IG9wZW4gXCIgSU5KRUNUX1BBVEg7XG4rXG4rXHRsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIjB4JWxseFwiLCAodW5zaWduZWQgbG9uZyBsb25nKXBoeXNfYWRkcik7XG4rXHRyZXQgPSB3cml0ZShmZCwgYnVmLCBsZW4pO1xuK1x0Y2xvc2UoZmQpO1xuK1xuK1x0aWYgKHJldCAhPSBsZW4pXG4rXHRcdHJldHVybiBcImluamVjdCBmYWlsZWQgYmVmb3JlIHJlYWNoaW5nIHRoZSBwYW5pYyBwYXRoXCI7XG4rXG4rXHRyZXR1cm4gXCJpbmplY3QgcmV0dXJuZWQgd2l0aG91dCBwYW5pYzsgc3lzY3RsIGluZWZmZWN0aXZlXCI7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpsb29rdXBfa2luZChjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdHVuc2lnbmVkIGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwYWdlX2tpbmRzKTsgaSsrKVxuK1x0XHRpZiAoIXN0cmNtcChwYWdlX2tpbmRzW2ldLm5hbWUsIG5hbWUpKVxuK1x0XHRcdHJldHVybiBcdTAwMjZwYWdlX2tpbmRzW2ldO1xuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXG4re1xuK1x0cHJpbnRmKFwiaHdwb2lzb24tcGFuaWMgW29wdGlvbnNdXFxuXCJcbitcdCAgICAgICBcIiAgICAgICAgICAgIC1rfC0ta2luZCBcdTAwM2NraW5kXHUwMDNlICAgICAgIHJvZGF0YSAoZGVmYXVsdCwgeDg2IGFuZCByaXNjdiBvbmx5KSxcXG5cIlxuK1x0ICAgICAgIFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGFiIG9yIHBndGFibGVcXG5cIlxuK1x0ICAgICAgIFwiICAgICAgICAgICAgLS15ZXMtcGFuaWMtbXkta2VybmVsICByZWFsbHkgcnVuIGl0OiB0aGUgbWFjaGluZSBwYW5pY3NcXG5cIlxuK1x0ICAgICAgIFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZXZlcnkgdW5zYXZlZCB3cml0ZSBpcyBsb3N0XFxuXCJcbitcdCAgICAgICBcIiAgICAgICAgICAgIC1ofC0taGVscCAgICAgICAgICAgICAgc2hvdyB0aGlzXFxuXCIpO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7XG4rXHR7IFwia2luZFwiLCAgICAgICAgICAgICAgICAgMSwgTlVMTCwgJ2snIH0sXG4rXHR7IFwieWVzLXBhbmljLW15LWtlcm5lbFwiLCAgMCwgTlVMTCwgJ3knIH0sXG4rXHR7IFwiaGVscFwiLCAgICAgICAgICAgICAgICAgMCwgTlVMTCwgJ2gnIH0sXG4rXHR7IE5VTEwsICAgICAgICAgICAgICAgICAgIDAsIE5VTEwsIDAgfSxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpwYXJzZV9hcmdzKGludCBhcmdjLCBjaGFyICoqYXJndiwgaW50ICphcm1lZClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kO1xuK1x0Y29uc3QgY2hhciAqbmFtZSA9IFwicm9kYXRhXCI7XG4rXHRpbnQgYztcbitcbitcdHdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIFwiazpoXCIsIG9wdHMsIE5VTEwpKSAhPSAtMSkge1xuK1x0XHRzd2l0Y2ggKGMpIHtcbitcdFx0Y2FzZSAnayc6XG4rXHRcdFx0bmFtZSA9IG9wdGFyZztcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAneSc6XG4rXHRcdFx0KmFybWVkID0gMTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnaCc6XG4rXHRcdFx0dXNhZ2UoKTtcbitcdFx0XHRleGl0KEVYSVRfU1VDQ0VTUyk7XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0dXNhZ2UoKTtcbitcdFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHRcdH1cbitcdH1cbitcbitcdGtpbmQgPSBsb29rdXBfa2luZChuYW1lKTtcbitcdGlmICgha2luZClcbitcdFx0ZmF0YWwoXCJ1bmtub3duIGtpbmQgJyVzJyAoZXhwZWN0ZWQ6IHJvZGF0YXxzbGFifHBndGFibGUpXFxuXCIsXG4rXHRcdCAgICAgIG5hbWUpO1xuK1xuK1x0cmV0dXJuIGtpbmQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGNoZWNrX3ByZXJlcXMoaW50IGFybWVkKVxuK3tcbitcdGlmIChnZXRldWlkKCkpXG4rXHRcdGZhdGFsKFwibXVzdCBydW4gYXMgcm9vdFxcblwiKTtcbitcdGlmIChhY2Nlc3MoU1lTQ1RMX1BBVEgsIFdfT0spKVxuK1x0XHRmYXRhbChcIiVzIG5vdCBwcmVzZW50IChrZXJuZWwgd2l0aG91dCB0aGUgc3lzY3RsPylcXG5cIixcbitcdFx0ICAgICAgU1lTQ1RMX1BBVEgpO1xuK1x0aWYgKGFjY2VzcyhJTkpFQ1RfUEFUSCwgV19PSykpXG4rXHRcdGZhdGFsKFwiJXMgbm90IHByZXNlbnQgKG5vIE1FTU9SWV9GQUlMVVJFPylcXG5cIiwgSU5KRUNUX1BBVEgpO1xuK1x0aWYgKCFhcm1lZClcbitcdFx0ZmF0YWwoXCJ0aGlzIHBhbmljcyB0aGUga2VybmVsOyBwYXNzIC0teWVzLXBhbmljLW15LWtlcm5lbFxcblwiKTtcbit9XG4rXG4rc3RhdGljIHVpbnQ2NF90IHBpY2tfcGh5c19hZGRyKGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmtpbmQpXG4re1xuK1x0dWludDY0X3QgYWRkcjtcbitcbitcdGlmIChraW5kLVx1MDAzZWJpdCA9PSBCSVQoUkVTRVJWRUQpKSB7XG4rXHRcdGlmIChwaWNrX3JvZGF0YV9waHlzX2FkZHIoXHUwMDI2YWRkcikpXG4rXHRcdFx0ZmF0YWwoXCJubyBcXFwiS2VybmVsIHJvZGF0YVxcXCIgaW4gL3Byb2MvaW9tZW07IHRyeSAtayBzbGFiIG9yIC1rIHBndGFibGVcXG5cIik7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAocGlja19rcGFnZWZsYWdzX3BoeXNfYWRkcihraW5kLVx1MDAzZWJpdCwgXHUwMDI2YWRkcikpXG4rXHRcdFx0ZmF0YWwoXCJubyB1c2FibGUgJXMgUEZOIGluICVzXFxuXCIsIGtpbmQtXHUwMDNlbmFtZSxcbitcdFx0XHQgICAgICBQUk9DX0tQQUdFRkxBR1MpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGFkZHI7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFybV9zeXNjdGwodW5zaWduZWQgbG9uZyAqcHJpb3IpXG4re1xuK1x0aWYgKHJlYWRfc3lzY3RsKHByaW9yKSlcbitcdFx0ZmF0YWwoXCJmYWlsZWQgdG8gcmVhZCAlc1xcblwiLCBTWVNDVExfUEFUSCk7XG4rXHRpZiAod3JpdGVfc3lzY3RsKDEpKVxuK1x0XHRmYXRhbChcImZhaWxlZCB0byBlbmFibGUgJXNcXG5cIiwgU1lTQ1RMX1BBVEgpO1xuK31cbitcbitzdGF0aWMgdm9pZCByZWNoZWNrX2tpbmQoY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZCwgdWludDY0X3QgcGZuLFxuK1x0XHRcdCBjb25zdCBjaGFyICp2ZXJkaWN0KVxuK3tcbitcdHVpbnQ2NF90IGZsYWdzO1xuK1x0aW50IGZkLCByZXQ7XG4rXG4rXHRmZCA9IG9wZW4oUFJPQ19LUEFHRUZMQUdTLCBPX1JET05MWSk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdGZhdGFsKFwiJXMgKGNvdWxkIG5vdCBvcGVuICVzKVxcblwiLCB2ZXJkaWN0LCBQUk9DX0tQQUdFRkxBR1MpO1xuK1x0cmV0ID0ga3BhZ2VmbGFnc19yZWFkKGZkLCBwZm4sIFx1MDAyNmZsYWdzKTtcbitcdGNsb3NlKGZkKTtcbitcbitcdGlmIChyZXQpXG4rXHRcdGZhdGFsKFwiJXMgKGNvdWxkIG5vdCByZWNvbmZpcm0gcGFnZSB0eXBlIHZpYSAlcylcXG5cIiwgdmVyZGljdCxcbitcdFx0ICAgICAgUFJPQ19LUEFHRUZMQUdTKTtcbitcdGlmIChmbGFncyBcdTAwMjYga2luZC1cdTAwM2ViaXQpXG4rXHRcdGZhdGFsKFwiJXMgKHBhZ2Ugc3RpbGwgJXMpXFxuXCIsIHZlcmRpY3QsIGtpbmQtXHUwMDNlbmFtZSk7XG4rXG4rXHRmcHJpbnRmKHN0ZGVyciwgXCJ0YXJnZXQgUEZOIG5vIGxvbmdlciAlczsgcmFjZWQgYmVmb3JlIGluamVjdCwgaW5jb25jbHVzaXZlXFxuXCIsXG4rXHRcdGtpbmQtXHUwMDNlbmFtZSk7XG4rfVxuK1xuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbit7XG4rXHR1aW50NjRfdCBwaHlzX2FkZHIsIHBmbjtcbitcdGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmtpbmQ7XG4rXHRjb25zdCBjaGFyICp2ZXJkaWN0O1xuK1x0dW5zaWduZWQgbG9uZyBwcmlvcjtcbitcdGludCBhcm1lZCA9IDA7XG4rXG4rXHRraW5kID0gcGFyc2VfYXJncyhhcmdjLCBhcmd2LCBcdTAwMjZhcm1lZCk7XG4rXHRjaGVja19wcmVyZXFzKGFybWVkKTtcbitcdHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4rXG4rXHRwaHlzX2FkZHIgPSBwaWNrX3BoeXNfYWRkcihraW5kKTtcbitcdHBmbiA9IHBoeXNfYWRkciAvIHBhZ2Vfc2l6ZTtcbitcdGFybV9zeXNjdGwoXHUwMDI2cHJpb3IpO1xuK1xuK1x0dmVyZGljdCA9IGluamVjdF9od3BvaXNvbihraW5kLCBwaHlzX2FkZHIsIHBmbik7XG4rXG4rXHQvKiBObyBwYW5pYyBmaXJlZC4gIFB1dCB0aGUgbWFjaGluZSBiYWNrLCB0aGVuIHJlcG9ydC4gKi9cbitcdHdyaXRlX3N5c2N0bChwcmlvcik7XG4rXHR1bnBvaXNvbl9wZm4ocGZuKTtcbitcdHJlY2hlY2tfa2luZChraW5kLCBwZm4sIHZlcmRpY3QpO1xuK1xuK1x0cmV0dXJuIEVYSVRfRkFJTFVSRTtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzowMjoxNS4wMzQ2MDI3NjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDY5NDA2ODE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBGYWxzZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQgaW50cm9kdWNlcyBhIG5ldyB0b29sLCBzcGVjaWZpY2FsbHkgYHRvb2xzL21tL21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljLmNgLiBUaGlzIHRvb2wgaXMgZGVzaWduZWQgdG8gdHJpZ2dlciBhIGNvbnRyb2xsZWQga2VybmVsIHBhbmljIHRocm91Z2ggYSBoYXJkd2FyZSBwb2lzb25pbmcgZXZlbnQgb24gYSBrZXJuZWwtb3duZWQgcGFnZS4gTXkgaW5pdGlhbCBzY2FuIHNob3dlZCBtb2RpZmljYXRpb25zIHRvIGBNQUlOVEFJTkVSU2AsIHRoZSBgLmdpdGlnbm9yZWAgd2l0aGluIGB0b29scy9tbWAsIHRoZSBgTWFrZWZpbGVgIGluIGB0b29scy9tbWAsIGFuZCwgb2YgY291cnNlLCB0aGUgbmV3IHNvdXJjZSBmaWxlIGl0c2VsZi4gRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmUgKm5vKiBrZXJuZWwgY29kZSBjaGFuZ2VzLiBJJ3ZlIHJlLWNoZWNrZWQgdGhlIGRpZmYgLSBpdCdzIHN0aWxsIGp1c3QgdGhlIGZpbGVzIEkgbWVudGlvbmVkLiBTbywgbm8ga2VybmVsIHNvdXJjZSBjb2RlIGlzIGJlaW5nIHRvdWNoZWQuIEV4Y2VsbGVudC5cblxuTm93LCBJIGhhdmUgdGhlIGluc3RydWN0aW9ucyB0byBmb2xsb3cuIFRoZXkgb3V0bGluZSBjYXNlcyB3aGVyZSBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gV2hpbGUgdGhlIGluc3RydWN0aW9ucyBkb24ndCBleHBsaWNpdGx5IGNhbGwgb3V0IGB0b29scy9gLCB0aGUgbG9naWMgaXMgY2xlYXI6IGNoYW5nZXMgdG8gdXNlci1zcGFjZSB0b29scyBpbiBgdG9vbHMvYCBkb24ndCBhZmZlY3QgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYy4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZ5IG1vZGlmaWNhdGlvbnMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzIHdhcnJhbnQgYFdvcnRoRnV6emluZz10cnVlYC5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGlzIHBhdGNoIGV4Y2x1c2l2ZWx5IGltcGFjdHMgdGhlIGB0b29scy9gIGRpcmVjdG9yeSwgaXQgZG9lcyAqbm90KiBtb2RpZnkgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiBUaGUgY29kZSBpc24ndCBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5LlxuXG5JJ3ZlIHJldmlld2VkIHRoZSBkaWZmIHRob3JvdWdobHksIGFuZCBJJ20gY29uZmlkZW50LiBUaGVyZSdzIG5vdGhpbmcgZWxzZSBvZiBzdWJzdGFuY2UgaGVyZS4gVGhpcyBpcyBhIHNpbXBsZSBhZGRpdGlvbiBvZiBhIHVzZXItc3BhY2UgdG9vbC5cblxuU28sIHRoZSB2ZXJkaWN0IGlzICoqV29ydGhGdXp6aW5nPWZhbHNlKiouIFRoZSByZWFzb24gaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGUgcGF0Y2ggc29sZWx5IGFkZHMgYSB1c2VyLXNwYWNlIHRlc3RpbmcgdG9vbCB3aXRoaW4gdGhlIGB0b29scy9tbS9gIGRpcmVjdG9yeSBhbmQgZG9lc24ndCBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UgY29kZS5cblxuTm93LCBsZXQgbWUgY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE3NCwiT3V0cHV0VG9rZW5zIjo1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjAyOjI0LjEwNDAxMjE2NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgbmV3IHVzZXItc3BhY2UgdGVzdGluZyB0b29sIGluIHRoZSB0b29scy9tbS8gZGlyZWN0b3J5IGFuZCBkb2VzIG5vdCBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyB1c2VyLXNwYWNlIHRlc3RpbmcgdG9vbCBpbiB0aGUgdG9vbHMvbW0vIGRpcmVjdG9yeSBhbmQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwgc291cmNlIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzowMjoyNC4xMDQwNDY5MDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowpkq2g[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 12:43:23 +0000 UTC FinishedAt: 2026-08-13 13:02:25 +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+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIGEgbmV3IHVzZXItc3BhY2UgdGVzdGluZyB0b29sIGluIHRoZSB0b29scy9tbS8gZGlyZWN0b3J5IGFuZCBkb2VzIG5vdCBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlMzJlZjY4NGY4ZTk5MGYzYzMzMTM2YjBlN2NhOWE0MDlkN2FmNzMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTM6MDI6MTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggMGY1MTNiNDJiYzE4Ni4uMmMzMDliMzJjOThlYiAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTEyMDQzLDYgJiM0MzsxMjA0Myw3IEBAIEY6XHRpbmNsdWRlL2xpbnV4L21lbW9yeS1mYWlsdXJlLmhcbiBGOlx0aW5jbHVkZS90cmFjZS9ldmVudHMvbWVtb3J5LWZhaWx1cmUuaFxuIEY6XHRtbS9od3BvaXNvbi1pbmplY3QuY1xuIEY6XHRtbS9tZW1vcnktZmFpbHVyZS5jXG4mIzQzO0Y6XHR0b29scy9tbS9tZW1vcnktZmFpbHVyZS9cbiBGOlx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY1xuIFxuIEhZQ09OIEhZNDZYWCBUT1VDSFNDUkVFTiBTVVBQT1JUXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL21tLy5naXRpZ25vcmVcbmluZGV4IDE0NDZhNjU5ZTU0MDguLmI5YjgwZDkwOWRiNGEgMTAwNjQ0XG4tLS0gYS90b29scy9tbS8uZ2l0aWdub3JlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS8uZ2l0aWdub3JlXG5AQCAtMywzICYjNDM7Myw0IEBAIHNsYWJpbmZvXG4gcGFnZS10eXBlc1xuIHBhZ2Vfb3duZXJfc29ydFxuIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4mIzQzO21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZVxuaW5kZXggODU4MTg2YTZlZWZkYi4uOWY2ZGU5NTdhOTVhMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9NYWtlZmlsZVxuQEAgLTQsNiAmIzQzOzQsNyBAQFxuIGluY2x1ZGUgLi4vc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlXG4gXG4gQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuJiM0MztCVUlMRF9UQVJHRVRTJiM0Mzs9bWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWNcbiBJTlNUQUxMX1RBUkdFVFMgPSAkKEJVSUxEX1RBUkdFVFMpIHRocG1hcHNcbiBcbiBMSUJfRElSID0gLi4vbGliL2FwaVxuQEAgLTI0LDYgJiM0MzsyNSw3IEBAICQoTElCUyk6XG4gXG4gY2xlYW46XG4gXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuJiM0MztcdCQoUk0pIG1lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljXG4gXHRtYWtlIC1DICQoTElCX0RJUikgY2xlYW5cbiBcbiBzYmluZGlyID89IC91c3Ivc2JpblxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljLmMgYi90b29scy9tbS9tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzc3MmM1NTQ4YWRhZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWMuY1xuQEAgLTAsMCAmIzQzOzEsMzU5IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqIGh3cG9pc29uLXBhbmljOiB0cmlnZ2VyIGFuIGludGVudGlvbmFsIGtlcm5lbCBwYW5pYyBieSBpbmplY3RpbmcgYVxuJiM0MzsgKiBod3BvaXNvbiBlcnJvciBvbiBhIGtlcm5lbC1vd25lZCBwYWdlLCB0byBjaGVjayB0aGF0XG4mIzQzOyAqIHZtLnBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUgZmlyZXMuXG4mIzQzOyAqXG4mIzQzOyAqIFRocmVlIGtpbmRzIG9mIGtlcm5lbC1vd25lZCBwYWdlIGNhbiBiZSB0YXJnZXRlZCwgc2VsZWN0ZWQgd2l0aCAta1xuJiM0MzsgKiAoZGVmYXVsdDogcm9kYXRhKTpcbiYjNDM7ICpcbiYjNDM7ICogICByb2RhdGEgIC0gYSBQR19yZXNlcnZlZCBwYWdlIGluIHRoZSBrZXJuZWwgcm9kYXRhIHJhbmdlLCBmcm9tXG4mIzQzOyAqICAgICAgICAgICAgIC9wcm9jL2lvbWVtIFwmIzM0O0tlcm5lbCByb2RhdGFcJiMzNDsuICB4ODYgYW5kIHJpc2N2IG9ubHkuXG4mIzQzOyAqICAgc2xhYiAgICAtIGEgc2xhYiBwYWdlIGZvdW5kIHZpYSAvcHJvYy9rcGFnZWZsYWdzIChLUEZfU0xBQikuXG4mIzQzOyAqICAgcGd0YWJsZSAtIGEgcGFnZS10YWJsZSBwYWdlIGZvdW5kIHZpYSAvcHJvYy9rcGFnZWZsYWdzIChLUEZfUEdUQUJMRSkuXG4mIzQzOyAqXG4mIzQzOyAqIHNsYWIgYW5kIHBndGFibGUgd29yayBldmVyeXdoZXJlOyByb2RhdGEgbmVlZHMgYW4gYXJjaGl0ZWN0dXJlIHRoYXRcbiYjNDM7ICogcHVibGlzaGVzIHRoZSByb2RhdGEgcmVzb3VyY2UgaW4gL3Byb2MvaW9tZW0uXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBzbGFiIGFuZCBwZ3RhYmxlIHZhcmlhbnRzIGV4ZXJjaXNlIG1lbW9yeV9mYWlsdXJlKCkgLVx1MDAzZSBnZXRfYW55X3BhZ2UoKVxuJiM0MzsgKiBvbiBhIG5vbiBQR19yZXNlcnZlZCBrZXJuZWwtb3duZWQgcGFnZSwgY2F0Y2hpbmcgcmVncmVzc2lvbnMgd2hlcmVcbiYjNDM7ICogZ2V0X2FueV9wYWdlKCkgY29sbGFwc2VzIHN1Y2ggcGFnZXMgaW50byBhIHRyYW5zaWVudCAtRUlPIGluc3RlYWQgb2ZcbiYjNDM7ICogLUVOT1RSRUNPVkVSQUJMRS5cbiYjNDM7ICpcbiYjNDM7ICogQSBzdWNjZXNzZnVsIHJ1biBjcmFzaGVzIHRoZSBrZXJuZWwsIHNvIC0teWVzLXBhbmljLW15LWtlcm5lbCBpcyByZXF1aXJlZFxuJiM0MzsgKiBhbmQgdGhlIHRvb2wgaXMgbWVhbnQgZm9yIGEgZGlzcG9zYWJsZSBWTSAoZS5nLiB2aXJ0bWUtbmcpIHdpdGggdGhlIHNlcmlhbFxuJiM0MzsgKiBjb25zb2xlIGNhcHR1cmVkLiAgVGhlIHJlc3VsdCBpcyBvYnNlcnZlZCBleHRlcm5hbGx5OiB0aGUga2VybmVsIHBhbmljcyB3aXRoXG4mIzQzOyAqICAgXCYjMzQ7TWVtb3J5IGZhaWx1cmU6IFx1MDAzY3Bmblx1MDAzZTogdW5yZWNvdmVyYWJsZSBwYWdlXCYjMzQ7XG4mIzQzOyAqIFJldHVybmluZyBhdCBhbGwgbWVhbnMgbm8gcGFuaWMgZmlyZWQsIHNvIGV2ZXJ5IGV4aXQgc3RhdHVzIGlzIG5vbi16ZXJvOlxuJiM0MzsgKiBlaXRoZXIgYSBmYWlsdXJlLCBvciBhbiBpbmNvbmNsdXNpdmUgcnVuIHdoZXJlIHRoZSB0YXJnZXQgUEZOIHJhY2VkIHRvXG4mIzQzOyAqIGFub3RoZXIgcGFnZSB0eXBlIGJlZm9yZSBpbmplY3Rpb24uXG4mIzQzOyAqXG4mIzQzOyAqIEF1dGhvcjogQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzOyNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjRcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NnZXRvcHQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRhcmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi8uLi8uLi9pbmNsdWRlL3VhcGkvbGludXgva2VybmVsLXBhZ2UtZmxhZ3MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi8uLi9pbmNsdWRlL2xpbnV4L3NpemVzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXBpL2ZzL2ZzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgU1lTQ1RMX1BBVEhcdFwmIzM0Oy9wcm9jL3N5cy92bS9wYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSU5KRUNUX1BBVEhcdFwmIzM0Oy9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUFJPQ19LUEFHRUZMQUdTXHRcJiMzNDsvcHJvYy9rcGFnZWZsYWdzXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiBOb3QgZXhwb3J0ZWQgYnkgdGhlIHVhcGkgaGVhZGVyLCBzZWUgdG9vbHMvbW0vcGFnZS10eXBlcy5jLiAqL1xuJiM0MzsjZGVmaW5lIEtQRl9SRVNFUlZFRFx0MzJcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQklUKG5hbWUpXHQoMVVMTCBcdTAwM2NcdTAwM2MgS1BGXyMjbmFtZSlcbiYjNDM7I2RlZmluZSBBUlJBWV9TSVpFKHgpXHQoc2l6ZW9mKHgpIC8gc2l6ZW9mKCh4KVswXSkpXG4mIzQzO1xuJiM0MzsvKiBUaGUga3BhZ2VmbGFncyBiaXQgaWRlbnRpZnlpbmcgZWFjaCBrZXJuZWwtb3duZWQgcGFnZSBraW5kIHdlIHRhcmdldC4gKi9cbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQge1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWU7XG4mIzQzO1x0dWludDY0X3QgYml0O1xuJiM0Mzt9IHBhZ2Vfa2luZHNbXSA9IHtcbiYjNDM7XHR7IFwmIzM0O3JvZGF0YVwmIzM0OywgIEJJVChSRVNFUlZFRCkgfSxcbiYjNDM7XHR7IFwmIzM0O3NsYWJcJiMzNDssICAgIEJJVChTTEFCKSAgICAgfSxcbiYjNDM7XHR7IFwmIzM0O3BndGFibGVcJiMzNDssIEJJVChQR1RBQkxFKSAgfSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGZhdGFsKGNvbnN0IGNoYXIgKngsIC4uLilcbiYjNDM7e1xuJiM0MztcdHZhX2xpc3QgYXA7XG4mIzQzO1xuJiM0MztcdHZhX3N0YXJ0KGFwLCB4KTtcbiYjNDM7XHR2ZnByaW50ZihzdGRlcnIsIHgsIGFwKTtcbiYjNDM7XHR2YV9lbmQoYXApO1xuJiM0MztcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBrcGFnZWZsYWdzX3JlYWQoaW50IGZkLCB1aW50NjRfdCBwZm4sIHVpbnQ2NF90ICpmbGFncylcbiYjNDM7e1xuJiM0MztcdHNzaXplX3QgYnl0ZXM7XG4mIzQzO1xuJiM0MztcdGJ5dGVzID0gcHJlYWQoZmQsIGZsYWdzLCBzaXplb2YoKmZsYWdzKSwgKG9mZl90KXBmbiAqIHNpemVvZigqZmxhZ3MpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJ5dGVzID09IHNpemVvZigqZmxhZ3MpID8gMCA6IC0xO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBpY2tfcm9kYXRhX3BoeXNfYWRkcih1aW50NjRfdCAqcGh5c19hZGRyKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0LCBlbmQ7XG4mIzQzO1x0Y2hhciBsaW5lWzI1Nl0sIGxhYmVsWzY0XTtcbiYjNDM7XHRpbnQgcmV0ID0gLTE7XG4mIzQzO1x0RklMRSAqZjtcbiYjNDM7XG4mIzQzO1x0ZiA9IGZvcGVuKFwmIzM0Oy9wcm9jL2lvbWVtXCYjMzQ7LCBcJiMzNDtyXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIWYpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdC8qIFN1Yi1yZXNvdXJjZXMgYXJlIGluZGVudGVkOiBcJiMzNDsgIDAyNTAwMDAwLTAyZmZmZmZmIDogS2VybmVsIHJvZGF0YVwmIzM0OyAqL1xuJiM0MztcdHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7XG4mIzQzO1x0XHRpZiAoc3NjYW5mKGxpbmUsIFwmIzM0OyAlbGx4LSVsbHggOiAlNjNbXlxcbl1cJiMzNDssIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQsXG4mIzQzO1x0XHRcdCAgIGxhYmVsKSAhPSAzKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChzdHJjbXAobGFiZWwsIFwmIzM0O0tlcm5lbCByb2RhdGFcJiMzNDspIHx8IGVuZCBcdTAwM2M9IHN0YXJ0KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdC8qIFBhZ2UtYWxpZ24gdXAgYW5kIHJldHVybiB0aGUgZmlyc3QgYnl0ZSBvZiB0aGF0IHBhZ2UuICovXG4mIzQzO1x0XHQqcGh5c19hZGRyID0gKChzdGFydCAmIzQzOyBwYWdlX3NpemUgLSAxKSAvIHBhZ2Vfc2l6ZSkgKiBwYWdlX3NpemU7XG4mIzQzO1x0XHRyZXQgPSAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmY2xvc2UoZik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyKHVpbnQ2NF90IHdhbnQsIHVpbnQ2NF90ICpwaHlzX2FkZHIpXG4mIzQzO3tcbiYjNDM7XHR1aW50NjRfdCBwZm4gPSBTWl8xNk0gLyBwYWdlX3NpemU7XG4mIzQzO1x0dWludDY0X3QgZmxhZ3M7XG4mIzQzO1x0aW50IHJldCA9IC0xO1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKFBST0NfS1BBR0VGTEFHUywgT19SRE9OTFkpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7IGtwYWdlZmxhZ3NfcmVhZChmZCwgcGZuLCBcdTAwMjZmbGFncykgPT0gMDsgcGZuJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKChmbGFncyBcdTAwMjYgd2FudCkgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IEJJVChIV1BPSVNPTikpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICEoZmxhZ3MgXHUwMDI2IEJJVChOT1BBR0UpKSBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgQklUKENPTVBPVU5EX1RBSUwpKSkge1xuJiM0MztcdFx0XHQqcGh5c19hZGRyID0gcGZuICogcGFnZV9zaXplO1xuJiM0MztcdFx0XHRyZXQgPSAwO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJlYWRfc3lzY3RsKHVuc2lnbmVkIGxvbmcgKnZhbClcbiYjNDM7e1xuJiM0MztcdEZJTEUgKmYgPSBmb3BlbihTWVNDVExfUEFUSCwgXCYjMzQ7clwmIzM0Oyk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFmKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdHJldCA9IGZzY2FuZihmLCBcJiMzNDslbHVcJiMzNDssIHZhbCkgPT0gMSA/IDAgOiAtMTtcbiYjNDM7XHRmY2xvc2UoZik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgd3JpdGVfc3lzY3RsKHVuc2lnbmVkIGxvbmcgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0RklMRSAqZiA9IGZvcGVuKFNZU0NUTF9QQVRILCBcJiMzNDt3XCYjMzQ7KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIWYpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0cmV0ID0gZnByaW50ZihmLCBcJiMzNDslbHVcJiMzNDssIHZhbCkgXHUwMDNjIDAgPyAtMSA6IDA7XG4mIzQzO1x0ZmNsb3NlKGYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBoYXJkX29mZmxpbmVfcGFnZSgpIGluamVjdHMgd2l0aCBNRl9TV19TSU1VTEFURUQsIHNvIHVucG9pc29uIGlzIGFsbG93ZWQuICovXG4mIzQzO3N0YXRpYyB2b2lkIHVucG9pc29uX3Bmbih1aW50NjRfdCBwZm4pXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHBhdGhbUEFUSF9NQVhdLCBidWZbMzJdO1xuJiM0MztcdGNvbnN0IGNoYXIgKmRlYnVnZnM7XG4mIzQzO1x0aW50IGZkLCBsZW47XG4mIzQzO1xuJiM0MztcdGRlYnVnZnMgPSBkZWJ1Z2ZzX19tb3VudCgpO1xuJiM0MztcdGlmICghZGVidWdmcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcJiMzNDslcy9od3BvaXNvbi91bnBvaXNvbi1wZm5cJiMzNDssIGRlYnVnZnMpO1xuJiM0MztcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDsweCVsbHhcXG5cJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpcGZuKTtcbiYjNDM7XHRpZiAod3JpdGUoZmQsIGJ1ZiwgbGVuKSBcdTAwM2MgMClcbiYjNDM7XHRcdHBlcnJvcihcJiMzNDt1bnBvaXNvbi1wZm5cJiMzNDspO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmluamVjdF9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kLFxuJiM0MztcdFx0XHRcdCAgIHVpbnQ2NF90IHBoeXNfYWRkciwgdWludDY0X3QgcGZuKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbMzJdO1xuJiM0MztcdGludCBmZCwgbGVuO1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHRwcmludGYoXCYjMzQ7aW5qZWN0aW5nIGh3cG9pc29uIGF0IHBoeXMgMHglbGx4IChwZm4gMHglbGx4LCBraW5kPSVzKVxcblwmIzM0OyxcbiYjNDM7XHQgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwaHlzX2FkZHIsICh1bnNpZ25lZCBsb25nIGxvbmcpcGZuLFxuJiM0MztcdCAgICAgICBraW5kLVx1MDAzZW5hbWUpO1xuJiM0MztcdHByaW50ZihcJiMzNDtleHBlY3Rpbmcga2VybmVsIHBhbmljOiAmIzM5O01lbW9yeSBmYWlsdXJlOiBcdTAwM2NwZm5cdTAwM2U6IHVucmVjb3ZlcmFibGUgcGFnZSYjMzk7XFxuXCYjMzQ7KTtcbiYjNDM7XHRmZmx1c2goc3Rkb3V0KTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKElOSkVDVF9QQVRILCBPX1dST05MWSk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIFwmIzM0O2Nhbm5vdCBvcGVuIFwmIzM0OyBJTkpFQ1RfUEFUSDtcbiYjNDM7XG4mIzQzO1x0bGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCYjMzQ7MHglbGx4XCYjMzQ7LCAodW5zaWduZWQgbG9uZyBsb25nKXBoeXNfYWRkcik7XG4mIzQzO1x0cmV0ID0gd3JpdGUoZmQsIGJ1ZiwgbGVuKTtcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgIT0gbGVuKVxuJiM0MztcdFx0cmV0dXJuIFwmIzM0O2luamVjdCBmYWlsZWQgYmVmb3JlIHJlYWNoaW5nIHRoZSBwYW5pYyBwYXRoXCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXCYjMzQ7aW5qZWN0IHJldHVybmVkIHdpdGhvdXQgcGFuaWM7IHN5c2N0bCBpbmVmZmVjdGl2ZVwmIzM0OztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmxvb2t1cF9raW5kKGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwYWdlX2tpbmRzKTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRpZiAoIXN0cmNtcChwYWdlX2tpbmRzW2ldLm5hbWUsIG5hbWUpKVxuJiM0MztcdFx0XHRyZXR1cm4gXHUwMDI2cGFnZV9raW5kc1tpXTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRwcmludGYoXCYjMzQ7aHdwb2lzb24tcGFuaWMgW29wdGlvbnNdXFxuXCYjMzQ7XG4mIzQzO1x0ICAgICAgIFwmIzM0OyAgICAgICAgICAgIC1rfC0ta2luZCBcdTAwM2NraW5kXHUwMDNlICAgICAgIHJvZGF0YSAoZGVmYXVsdCwgeDg2IGFuZCByaXNjdiBvbmx5KSxcXG5cJiMzNDtcbiYjNDM7XHQgICAgICAgXCYjMzQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGFiIG9yIHBndGFibGVcXG5cJiMzNDtcbiYjNDM7XHQgICAgICAgXCYjMzQ7ICAgICAgICAgICAgLS15ZXMtcGFuaWMtbXkta2VybmVsICByZWFsbHkgcnVuIGl0OiB0aGUgbWFjaGluZSBwYW5pY3NcXG5cJiMzNDtcbiYjNDM7XHQgICAgICAgXCYjMzQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZXZlcnkgdW5zYXZlZCB3cml0ZSBpcyBsb3N0XFxuXCYjMzQ7XG4mIzQzO1x0ICAgICAgIFwmIzM0OyAgICAgICAgICAgIC1ofC0taGVscCAgICAgICAgICAgICAgc2hvdyB0aGlzXFxuXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gb3B0c1tdID0ge1xuJiM0MztcdHsgXCYjMzQ7a2luZFwmIzM0OywgICAgICAgICAgICAgICAgIDEsIE5VTEwsICYjMzk7ayYjMzk7IH0sXG4mIzQzO1x0eyBcJiMzNDt5ZXMtcGFuaWMtbXkta2VybmVsXCYjMzQ7LCAgMCwgTlVMTCwgJiMzOTt5JiMzOTsgfSxcbiYjNDM7XHR7IFwmIzM0O2hlbHBcJiMzNDssICAgICAgICAgICAgICAgICAwLCBOVUxMLCAmIzM5O2gmIzM5OyB9LFxuJiM0MztcdHsgTlVMTCwgICAgICAgICAgICAgICAgICAgMCwgTlVMTCwgMCB9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKnBhcnNlX2FyZ3MoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBpbnQgKmFybWVkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZDtcbiYjNDM7XHRjb25zdCBjaGFyICpuYW1lID0gXCYjMzQ7cm9kYXRhXCYjMzQ7O1xuJiM0MztcdGludCBjO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBcJiMzNDtrOmhcJiMzNDssIG9wdHMsIE5VTEwpKSAhPSAtMSkge1xuJiM0MztcdFx0c3dpdGNoIChjKSB7XG4mIzQzO1x0XHRjYXNlICYjMzk7ayYjMzk7OlxuJiM0MztcdFx0XHRuYW1lID0gb3B0YXJnO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTt5JiMzOTs6XG4mIzQzO1x0XHRcdCphcm1lZCA9IDE7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O2gmIzM5OzpcbiYjNDM7XHRcdFx0dXNhZ2UoKTtcbiYjNDM7XHRcdFx0ZXhpdChFWElUX1NVQ0NFU1MpO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0dXNhZ2UoKTtcbiYjNDM7XHRcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a2luZCA9IGxvb2t1cF9raW5kKG5hbWUpO1xuJiM0MztcdGlmICgha2luZClcbiYjNDM7XHRcdGZhdGFsKFwmIzM0O3Vua25vd24ga2luZCAmIzM5OyVzJiMzOTsgKGV4cGVjdGVkOiByb2RhdGF8c2xhYnxwZ3RhYmxlKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgIG5hbWUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4ga2luZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgY2hlY2tfcHJlcmVxcyhpbnQgYXJtZWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZ2V0ZXVpZCgpKVxuJiM0MztcdFx0ZmF0YWwoXCYjMzQ7bXVzdCBydW4gYXMgcm9vdFxcblwmIzM0Oyk7XG4mIzQzO1x0aWYgKGFjY2VzcyhTWVNDVExfUEFUSCwgV19PSykpXG4mIzQzO1x0XHRmYXRhbChcJiMzNDslcyBub3QgcHJlc2VudCAoa2VybmVsIHdpdGhvdXQgdGhlIHN5c2N0bD8pXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgU1lTQ1RMX1BBVEgpO1xuJiM0MztcdGlmIChhY2Nlc3MoSU5KRUNUX1BBVEgsIFdfT0spKVxuJiM0MztcdFx0ZmF0YWwoXCYjMzQ7JXMgbm90IHByZXNlbnQgKG5vIE1FTU9SWV9GQUlMVVJFPylcXG5cJiMzNDssIElOSkVDVF9QQVRIKTtcbiYjNDM7XHRpZiAoIWFybWVkKVxuJiM0MztcdFx0ZmF0YWwoXCYjMzQ7dGhpcyBwYW5pY3MgdGhlIGtlcm5lbDsgcGFzcyAtLXllcy1wYW5pYy1teS1rZXJuZWxcXG5cJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdWludDY0X3QgcGlja19waHlzX2FkZHIoY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZClcbiYjNDM7e1xuJiM0MztcdHVpbnQ2NF90IGFkZHI7XG4mIzQzO1xuJiM0MztcdGlmIChraW5kLVx1MDAzZWJpdCA9PSBCSVQoUkVTRVJWRUQpKSB7XG4mIzQzO1x0XHRpZiAocGlja19yb2RhdGFfcGh5c19hZGRyKFx1MDAyNmFkZHIpKVxuJiM0MztcdFx0XHRmYXRhbChcJiMzNDtubyBcXFwmIzM0O0tlcm5lbCByb2RhdGFcXFwmIzM0OyBpbiAvcHJvYy9pb21lbTsgdHJ5IC1rIHNsYWIgb3IgLWsgcGd0YWJsZVxcblwmIzM0Oyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmIChwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyKGtpbmQtXHUwMDNlYml0LCBcdTAwMjZhZGRyKSlcbiYjNDM7XHRcdFx0ZmF0YWwoXCYjMzQ7bm8gdXNhYmxlICVzIFBGTiBpbiAlc1xcblwmIzM0Oywga2luZC1cdTAwM2VuYW1lLFxuJiM0MztcdFx0XHQgICAgICBQUk9DX0tQQUdFRkxBR1MpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFkZHI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGFybV9zeXNjdGwodW5zaWduZWQgbG9uZyAqcHJpb3IpXG4mIzQzO3tcbiYjNDM7XHRpZiAocmVhZF9zeXNjdGwocHJpb3IpKVxuJiM0MztcdFx0ZmF0YWwoXCYjMzQ7ZmFpbGVkIHRvIHJlYWQgJXNcXG5cJiMzNDssIFNZU0NUTF9QQVRIKTtcbiYjNDM7XHRpZiAod3JpdGVfc3lzY3RsKDEpKVxuJiM0MztcdFx0ZmF0YWwoXCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSAlc1xcblwmIzM0OywgU1lTQ1RMX1BBVEgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByZWNoZWNrX2tpbmQoY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZCwgdWludDY0X3QgcGZuLFxuJiM0MztcdFx0XHQgY29uc3QgY2hhciAqdmVyZGljdClcbiYjNDM7e1xuJiM0MztcdHVpbnQ2NF90IGZsYWdzO1xuJiM0MztcdGludCBmZCwgcmV0O1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4oUFJPQ19LUEFHRUZMQUdTLCBPX1JET05MWSk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0ZmF0YWwoXCYjMzQ7JXMgKGNvdWxkIG5vdCBvcGVuICVzKVxcblwmIzM0OywgdmVyZGljdCwgUFJPQ19LUEFHRUZMQUdTKTtcbiYjNDM7XHRyZXQgPSBrcGFnZWZsYWdzX3JlYWQoZmQsIHBmbiwgXHUwMDI2ZmxhZ3MpO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGZhdGFsKFwmIzM0OyVzIChjb3VsZCBub3QgcmVjb25maXJtIHBhZ2UgdHlwZSB2aWEgJXMpXFxuXCYjMzQ7LCB2ZXJkaWN0LFxuJiM0MztcdFx0ICAgICAgUFJPQ19LUEFHRUZMQUdTKTtcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IGtpbmQtXHUwMDNlYml0KVxuJiM0MztcdFx0ZmF0YWwoXCYjMzQ7JXMgKHBhZ2Ugc3RpbGwgJXMpXFxuXCYjMzQ7LCB2ZXJkaWN0LCBraW5kLVx1MDAzZW5hbWUpO1xuJiM0MztcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7dGFyZ2V0IFBGTiBubyBsb25nZXIgJXM7IHJhY2VkIGJlZm9yZSBpbmplY3QsIGluY29uY2x1c2l2ZVxcblwmIzM0OyxcbiYjNDM7XHRcdGtpbmQtXHUwMDNlbmFtZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiYjNDM7e1xuJiM0MztcdHVpbnQ2NF90IHBoeXNfYWRkciwgcGZuO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmtpbmQ7XG4mIzQzO1x0Y29uc3QgY2hhciAqdmVyZGljdDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHByaW9yO1xuJiM0MztcdGludCBhcm1lZCA9IDA7XG4mIzQzO1xuJiM0MztcdGtpbmQgPSBwYXJzZV9hcmdzKGFyZ2MsIGFyZ3YsIFx1MDAyNmFybWVkKTtcbiYjNDM7XHRjaGVja19wcmVyZXFzKGFybWVkKTtcbiYjNDM7XHRwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpO1xuJiM0MztcbiYjNDM7XHRwaHlzX2FkZHIgPSBwaWNrX3BoeXNfYWRkcihraW5kKTtcbiYjNDM7XHRwZm4gPSBwaHlzX2FkZHIgLyBwYWdlX3NpemU7XG4mIzQzO1x0YXJtX3N5c2N0bChcdTAwMjZwcmlvcik7XG4mIzQzO1xuJiM0MztcdHZlcmRpY3QgPSBpbmplY3RfaHdwb2lzb24oa2luZCwgcGh5c19hZGRyLCBwZm4pO1xuJiM0MztcbiYjNDM7XHQvKiBObyBwYW5pYyBmaXJlZC4gIFB1dCB0aGUgbWFjaGluZSBiYWNrLCB0aGVuIHJlcG9ydC4gKi9cbiYjNDM7XHR3cml0ZV9zeXNjdGwocHJpb3IpO1xuJiM0MztcdHVucG9pc29uX3BmbihwZm4pO1xuJiM0MztcdHJlY2hlY2tfa2luZChraW5kLCBwZm4sIHZlcmRpY3QpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gRVhJVF9GQUlMVVJFO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyB1c2VyLXNwYWNlIHRlc3RpbmcgdG9vbCBpbiB0aGUgdG9vbHMvbW0vIGRpcmVjdG9yeSBhbmQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwgc291cmNlIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTMyZWY2ODRmOGU5OTBmM2MzMzEzNmIwZTdjYTlhNDA5ZDdhZjczMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDEzOjAyOjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCAwZjUxM2I0MmJjMTg2Li4yYzMwOWIzMmM5OGViIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtMTIwNDMsNiAmIzQzOzEyMDQzLDcgQEAgRjoJaW5jbHVkZS9saW51eC9tZW1vcnktZmFpbHVyZS5oCiBGOglpbmNsdWRlL3RyYWNlL2V2ZW50cy9tZW1vcnktZmFpbHVyZS5oCiBGOgltbS9od3BvaXNvbi1pbmplY3QuYwogRjoJbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzO0Y6CXRvb2xzL21tL21lbW9yeS1mYWlsdXJlLwogRjoJdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYwogCiBIWUNPTiBIWTQ2WFggVE9VQ0hTQ1JFRU4gU1VQUE9SVApkaWZmIC0tZ2l0IGEvdG9vbHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL21tLy5naXRpZ25vcmUKaW5kZXggMTQ0NmE2NTllNTQwOC4uYjliODBkOTA5ZGI0YSAxMDA2NDQKLS0tIGEvdG9vbHMvbW0vLmdpdGlnbm9yZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS8uZ2l0aWdub3JlCkBAIC0zLDMgJiM0MzszLDQgQEAgc2xhYmluZm8KIHBhZ2UtdHlwZXMKIHBhZ2Vfb3duZXJfc29ydAogdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QKJiM0MzttZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYwpkaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZQppbmRleCA4NTgxODZhNmVlZmRiLi45ZjZkZTk1N2E5NWEwIDEwMDY0NAotLS0gYS90b29scy9tbS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9NYWtlZmlsZQpAQCAtNCw2ICYjNDM7NCw3IEBACiBpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZQogCiBCVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0CiYjNDM7QlVJTERfVEFSR0VUUyYjNDM7PW1lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljCiBJTlNUQUxMX1RBUkdFVFMgPSAkKEJVSUxEX1RBUkdFVFMpIHRocG1hcHMKIAogTElCX0RJUiA9IC4uL2xpYi9hcGkKQEAgLTI0LDYgJiM0MzsyNSw3IEBAICQoTElCUyk6CiAKIGNsZWFuOgogCSQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0CiYjNDM7CSQoUk0pIG1lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljCiAJbWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuCiAKIHNiaW5kaXIgPz0gL3Vzci9zYmluCmRpZmYgLS1naXQgYS90b29scy9tbS9tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYy5jIGIvdG9vbHMvbW0vbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi43NzcyYzU1NDhhZGFmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWMuYwpAQCAtMCwwICYjNDM7MSwzNTkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogaHdwb2lzb24tcGFuaWM6IHRyaWdnZXIgYW4gaW50ZW50aW9uYWwga2VybmVsIHBhbmljIGJ5IGluamVjdGluZyBhCiYjNDM7ICogaHdwb2lzb24gZXJyb3Igb24gYSBrZXJuZWwtb3duZWQgcGFnZSwgdG8gY2hlY2sgdGhhdAomIzQzOyAqIHZtLnBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUgZmlyZXMuCiYjNDM7ICoKJiM0MzsgKiBUaHJlZSBraW5kcyBvZiBrZXJuZWwtb3duZWQgcGFnZSBjYW4gYmUgdGFyZ2V0ZWQsIHNlbGVjdGVkIHdpdGggLWsKJiM0MzsgKiAoZGVmYXVsdDogcm9kYXRhKToKJiM0MzsgKgomIzQzOyAqICAgcm9kYXRhICAtIGEgUEdfcmVzZXJ2ZWQgcGFnZSBpbiB0aGUga2VybmVsIHJvZGF0YSByYW5nZSwgZnJvbQomIzQzOyAqICAgICAgICAgICAgIC9wcm9jL2lvbWVtICYjMzQ7S2VybmVsIHJvZGF0YSYjMzQ7LiAgeDg2IGFuZCByaXNjdiBvbmx5LgomIzQzOyAqICAgc2xhYiAgICAtIGEgc2xhYiBwYWdlIGZvdW5kIHZpYSAvcHJvYy9rcGFnZWZsYWdzIChLUEZfU0xBQikuCiYjNDM7ICogICBwZ3RhYmxlIC0gYSBwYWdlLXRhYmxlIHBhZ2UgZm91bmQgdmlhIC9wcm9jL2twYWdlZmxhZ3MgKEtQRl9QR1RBQkxFKS4KJiM0MzsgKgomIzQzOyAqIHNsYWIgYW5kIHBndGFibGUgd29yayBldmVyeXdoZXJlOyByb2RhdGEgbmVlZHMgYW4gYXJjaGl0ZWN0dXJlIHRoYXQKJiM0MzsgKiBwdWJsaXNoZXMgdGhlIHJvZGF0YSByZXNvdXJjZSBpbiAvcHJvYy9pb21lbS4KJiM0MzsgKgomIzQzOyAqIFRoZSBzbGFiIGFuZCBwZ3RhYmxlIHZhcmlhbnRzIGV4ZXJjaXNlIG1lbW9yeV9mYWlsdXJlKCkgLSZndDsgZ2V0X2FueV9wYWdlKCkKJiM0MzsgKiBvbiBhIG5vbiBQR19yZXNlcnZlZCBrZXJuZWwtb3duZWQgcGFnZSwgY2F0Y2hpbmcgcmVncmVzc2lvbnMgd2hlcmUKJiM0MzsgKiBnZXRfYW55X3BhZ2UoKSBjb2xsYXBzZXMgc3VjaCBwYWdlcyBpbnRvIGEgdHJhbnNpZW50IC1FSU8gaW5zdGVhZCBvZgomIzQzOyAqIC1FTk9UUkVDT1ZFUkFCTEUuCiYjNDM7ICoKJiM0MzsgKiBBIHN1Y2Nlc3NmdWwgcnVuIGNyYXNoZXMgdGhlIGtlcm5lbCwgc28gLS15ZXMtcGFuaWMtbXkta2VybmVsIGlzIHJlcXVpcmVkCiYjNDM7ICogYW5kIHRoZSB0b29sIGlzIG1lYW50IGZvciBhIGRpc3Bvc2FibGUgVk0gKGUuZy4gdmlydG1lLW5nKSB3aXRoIHRoZSBzZXJpYWwKJiM0MzsgKiBjb25zb2xlIGNhcHR1cmVkLiAgVGhlIHJlc3VsdCBpcyBvYnNlcnZlZCBleHRlcm5hbGx5OiB0aGUga2VybmVsIHBhbmljcyB3aXRoCiYjNDM7ICogICAmIzM0O01lbW9yeSBmYWlsdXJlOiAmbHQ7cGZuJmd0OzogdW5yZWNvdmVyYWJsZSBwYWdlJiMzNDsKJiM0MzsgKiBSZXR1cm5pbmcgYXQgYWxsIG1lYW5zIG5vIHBhbmljIGZpcmVkLCBzbyBldmVyeSBleGl0IHN0YXR1cyBpcyBub24temVybzoKJiM0MzsgKiBlaXRoZXIgYSBmYWlsdXJlLCBvciBhbiBpbmNvbmNsdXNpdmUgcnVuIHdoZXJlIHRoZSB0YXJnZXQgUEZOIHJhY2VkIHRvCiYjNDM7ICogYW5vdGhlciBwYWdlIHR5cGUgYmVmb3JlIGluamVjdGlvbi4KJiM0MzsgKgomIzQzOyAqIEF1dGhvcjogQnJlbm8gTGVpdGFvICZsdDtsZWl0YW9AZGViaWFuLm9yZyZndDsKJiM0MzsgKi8KJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiYjNDM7I2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NAomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtnZXRvcHQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGltaXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGFyZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uLy4uLy4uL2luY2x1ZGUvdWFwaS9saW51eC9rZXJuZWwtcGFnZS1mbGFncy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uLy4uL2luY2x1ZGUvbGludXgvc2l6ZXMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2FwaS9mcy9mcy5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgU1lTQ1RMX1BBVEgJJiMzNDsvcHJvYy9zeXMvdm0vcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZSYjMzQ7CiYjNDM7I2RlZmluZSBJTkpFQ1RfUEFUSAkmIzM0Oy9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlJiMzNDsKJiM0MzsjZGVmaW5lIFBST0NfS1BBR0VGTEFHUwkmIzM0Oy9wcm9jL2twYWdlZmxhZ3MmIzM0OwomIzQzOwomIzQzOy8qIE5vdCBleHBvcnRlZCBieSB0aGUgdWFwaSBoZWFkZXIsIHNlZSB0b29scy9tbS9wYWdlLXR5cGVzLmMuICovCiYjNDM7I2RlZmluZSBLUEZfUkVTRVJWRUQJMzIKJiM0MzsKJiM0MzsjZGVmaW5lIEJJVChuYW1lKQkoMVVMTCAmbHQ7Jmx0OyBLUEZfIyNuYW1lKQomIzQzOyNkZWZpbmUgQVJSQVlfU0laRSh4KQkoc2l6ZW9mKHgpIC8gc2l6ZW9mKCh4KVswXSkpCiYjNDM7CiYjNDM7LyogVGhlIGtwYWdlZmxhZ3MgYml0IGlkZW50aWZ5aW5nIGVhY2gga2VybmVsLW93bmVkIHBhZ2Uga2luZCB3ZSB0YXJnZXQuICovCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgewomIzQzOwljb25zdCBjaGFyICpuYW1lOwomIzQzOwl1aW50NjRfdCBiaXQ7CiYjNDM7fSBwYWdlX2tpbmRzW10gPSB7CiYjNDM7CXsgJiMzNDtyb2RhdGEmIzM0OywgIEJJVChSRVNFUlZFRCkgfSwKJiM0MzsJeyAmIzM0O3NsYWImIzM0OywgICAgQklUKFNMQUIpICAgICB9LAomIzQzOwl7ICYjMzQ7cGd0YWJsZSYjMzQ7LCBCSVQoUEdUQUJMRSkgIH0sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX3NpemU7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZmF0YWwoY29uc3QgY2hhciAqeCwgLi4uKQomIzQzO3sKJiM0MzsJdmFfbGlzdCBhcDsKJiM0MzsKJiM0MzsJdmFfc3RhcnQoYXAsIHgpOwomIzQzOwl2ZnByaW50ZihzdGRlcnIsIHgsIGFwKTsKJiM0MzsJdmFfZW5kKGFwKTsKJiM0MzsJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtwYWdlZmxhZ3NfcmVhZChpbnQgZmQsIHVpbnQ2NF90IHBmbiwgdWludDY0X3QgKmZsYWdzKQomIzQzO3sKJiM0MzsJc3NpemVfdCBieXRlczsKJiM0MzsKJiM0MzsJYnl0ZXMgPSBwcmVhZChmZCwgZmxhZ3MsIHNpemVvZigqZmxhZ3MpLCAob2ZmX3QpcGZuICogc2l6ZW9mKCpmbGFncykpOwomIzQzOwomIzQzOwlyZXR1cm4gYnl0ZXMgPT0gc2l6ZW9mKCpmbGFncykgPyAwIDogLTE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGlja19yb2RhdGFfcGh5c19hZGRyKHVpbnQ2NF90ICpwaHlzX2FkZHIpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGxvbmcgc3RhcnQsIGVuZDsKJiM0MzsJY2hhciBsaW5lWzI1Nl0sIGxhYmVsWzY0XTsKJiM0MzsJaW50IHJldCA9IC0xOwomIzQzOwlGSUxFICpmOwomIzQzOwomIzQzOwlmID0gZm9wZW4oJiMzNDsvcHJvYy9pb21lbSYjMzQ7LCAmIzM0O3ImIzM0Oyk7CiYjNDM7CWlmICghZikKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJLyogU3ViLXJlc291cmNlcyBhcmUgaW5kZW50ZWQ6ICYjMzQ7ICAwMjUwMDAwMC0wMmZmZmZmZiA6IEtlcm5lbCByb2RhdGEmIzM0OyAqLwomIzQzOwl3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkgewomIzQzOwkJaWYgKHNzY2FuZihsaW5lLCAmIzM0OyAlbGx4LSVsbHggOiAlNjNbXlxuXSYjMzQ7LCAmYW1wO3N0YXJ0LCAmYW1wO2VuZCwKJiM0MzsJCQkgICBsYWJlbCkgIT0gMykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChzdHJjbXAobGFiZWwsICYjMzQ7S2VybmVsIHJvZGF0YSYjMzQ7KSB8fCBlbmQgJmx0Oz0gc3RhcnQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQkvKiBQYWdlLWFsaWduIHVwIGFuZCByZXR1cm4gdGhlIGZpcnN0IGJ5dGUgb2YgdGhhdCBwYWdlLiAqLwomIzQzOwkJKnBoeXNfYWRkciA9ICgoc3RhcnQgJiM0MzsgcGFnZV9zaXplIC0gMSkgLyBwYWdlX3NpemUpICogcGFnZV9zaXplOwomIzQzOwkJcmV0ID0gMDsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZjbG9zZShmKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyKHVpbnQ2NF90IHdhbnQsIHVpbnQ2NF90ICpwaHlzX2FkZHIpCiYjNDM7ewomIzQzOwl1aW50NjRfdCBwZm4gPSBTWl8xNk0gLyBwYWdlX3NpemU7CiYjNDM7CXVpbnQ2NF90IGZsYWdzOwomIzQzOwlpbnQgcmV0ID0gLTE7CiYjNDM7CWludCBmZDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKFBST0NfS1BBR0VGTEFHUywgT19SRE9OTFkpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlmb3IgKDsga3BhZ2VmbGFnc19yZWFkKGZkLCBwZm4sICZhbXA7ZmxhZ3MpID09IDA7IHBmbiYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgd2FudCkgJmFtcDsmYW1wOyAhKGZsYWdzICZhbXA7IEJJVChIV1BPSVNPTikpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhKGZsYWdzICZhbXA7IEJJVChOT1BBR0UpKSAmYW1wOyZhbXA7ICEoZmxhZ3MgJmFtcDsgQklUKENPTVBPVU5EX1RBSUwpKSkgewomIzQzOwkJCSpwaHlzX2FkZHIgPSBwZm4gKiBwYWdlX3NpemU7CiYjNDM7CQkJcmV0ID0gMDsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmVhZF9zeXNjdGwodW5zaWduZWQgbG9uZyAqdmFsKQomIzQzO3sKJiM0MzsJRklMRSAqZiA9IGZvcGVuKFNZU0NUTF9QQVRILCAmIzM0O3ImIzM0Oyk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghZikKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcmV0ID0gZnNjYW5mKGYsICYjMzQ7JWx1JiMzNDssIHZhbCkgPT0gMSA/IDAgOiAtMTsKJiM0MzsJZmNsb3NlKGYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHdyaXRlX3N5c2N0bCh1bnNpZ25lZCBsb25nIHZhbCkKJiM0Mzt7CiYjNDM7CUZJTEUgKmYgPSBmb3BlbihTWVNDVExfUEFUSCwgJiMzNDt3JiMzNDspOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIWYpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CXJldCA9IGZwcmludGYoZiwgJiMzNDslbHUmIzM0OywgdmFsKSAmbHQ7IDAgPyAtMSA6IDA7CiYjNDM7CWZjbG9zZShmKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogaGFyZF9vZmZsaW5lX3BhZ2UoKSBpbmplY3RzIHdpdGggTUZfU1dfU0lNVUxBVEVELCBzbyB1bnBvaXNvbiBpcyBhbGxvd2VkLiAqLwomIzQzO3N0YXRpYyB2b2lkIHVucG9pc29uX3Bmbih1aW50NjRfdCBwZm4pCiYjNDM7ewomIzQzOwljaGFyIHBhdGhbUEFUSF9NQVhdLCBidWZbMzJdOwomIzQzOwljb25zdCBjaGFyICpkZWJ1Z2ZzOwomIzQzOwlpbnQgZmQsIGxlbjsKJiM0MzsKJiM0MzsJZGVidWdmcyA9IGRlYnVnZnNfX21vdW50KCk7CiYjNDM7CWlmICghZGVidWdmcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0OyVzL2h3cG9pc29uL3VucG9pc29uLXBmbiYjMzQ7LCBkZWJ1Z2ZzKTsKJiM0MzsJZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDsweCVsbHhcbiYjMzQ7LCAodW5zaWduZWQgbG9uZyBsb25nKXBmbik7CiYjNDM7CWlmICh3cml0ZShmZCwgYnVmLCBsZW4pICZsdDsgMCkKJiM0MzsJCXBlcnJvcigmIzM0O3VucG9pc29uLXBmbiYjMzQ7KTsKJiM0MzsJY2xvc2UoZmQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqaW5qZWN0X2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmtpbmQsCiYjNDM7CQkJCSAgIHVpbnQ2NF90IHBoeXNfYWRkciwgdWludDY0X3QgcGZuKQomIzQzO3sKJiM0MzsJY2hhciBidWZbMzJdOwomIzQzOwlpbnQgZmQsIGxlbjsKJiM0MzsJc3NpemVfdCByZXQ7CiYjNDM7CiYjNDM7CXByaW50ZigmIzM0O2luamVjdGluZyBod3BvaXNvbiBhdCBwaHlzIDB4JWxseCAocGZuIDB4JWxseCwga2luZD0lcylcbiYjMzQ7LAomIzQzOwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwaHlzX2FkZHIsICh1bnNpZ25lZCBsb25nIGxvbmcpcGZuLAomIzQzOwkgICAgICAga2luZC0mZ3Q7bmFtZSk7CiYjNDM7CXByaW50ZigmIzM0O2V4cGVjdGluZyBrZXJuZWwgcGFuaWM6ICYjMzk7TWVtb3J5IGZhaWx1cmU6ICZsdDtwZm4mZ3Q7OiB1bnJlY292ZXJhYmxlIHBhZ2UmIzM5O1xuJiMzNDspOwomIzQzOwlmZmx1c2goc3Rkb3V0KTsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKElOSkVDVF9QQVRILCBPX1dST05MWSk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gJiMzNDtjYW5ub3Qgb3BlbiAmIzM0OyBJTkpFQ1RfUEFUSDsKJiM0MzsKJiM0MzsJbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDsweCVsbHgmIzM0OywgKHVuc2lnbmVkIGxvbmcgbG9uZylwaHlzX2FkZHIpOwomIzQzOwlyZXQgPSB3cml0ZShmZCwgYnVmLCBsZW4pOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CiYjNDM7CWlmIChyZXQgIT0gbGVuKQomIzQzOwkJcmV0dXJuICYjMzQ7aW5qZWN0IGZhaWxlZCBiZWZvcmUgcmVhY2hpbmcgdGhlIHBhbmljIHBhdGgmIzM0OzsKJiM0MzsKJiM0MzsJcmV0dXJuICYjMzQ7aW5qZWN0IHJldHVybmVkIHdpdGhvdXQgcGFuaWM7IHN5c2N0bCBpbmVmZmVjdGl2ZSYjMzQ7OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqbG9va3VwX2tpbmQoY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShwYWdlX2tpbmRzKTsgaSYjNDM7JiM0MzspCiYjNDM7CQlpZiAoIXN0cmNtcChwYWdlX2tpbmRzW2ldLm5hbWUsIG5hbWUpKQomIzQzOwkJCXJldHVybiAmYW1wO3BhZ2Vfa2luZHNbaV07CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQomIzQzO3sKJiM0MzsJcHJpbnRmKCYjMzQ7aHdwb2lzb24tcGFuaWMgW29wdGlvbnNdXG4mIzM0OwomIzQzOwkgICAgICAgJiMzNDsgICAgICAgICAgICAta3wtLWtpbmQgJmx0O2tpbmQmZ3Q7ICAgICAgIHJvZGF0YSAoZGVmYXVsdCwgeDg2IGFuZCByaXNjdiBvbmx5KSxcbiYjMzQ7CiYjNDM7CSAgICAgICAmIzM0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhYiBvciBwZ3RhYmxlXG4mIzM0OwomIzQzOwkgICAgICAgJiMzNDsgICAgICAgICAgICAtLXllcy1wYW5pYy1teS1rZXJuZWwgIHJlYWxseSBydW4gaXQ6IHRoZSBtYWNoaW5lIHBhbmljc1xuJiMzNDsKJiM0MzsJICAgICAgICYjMzQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZXZlcnkgdW5zYXZlZCB3cml0ZSBpcyBsb3N0XG4mIzM0OwomIzQzOwkgICAgICAgJiMzNDsgICAgICAgICAgICAtaHwtLWhlbHAgICAgICAgICAgICAgIHNob3cgdGhpc1xuJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7CiYjNDM7CXsgJiMzNDtraW5kJiMzNDssICAgICAgICAgICAgICAgICAxLCBOVUxMLCAmIzM5O2smIzM5OyB9LAomIzQzOwl7ICYjMzQ7eWVzLXBhbmljLW15LWtlcm5lbCYjMzQ7LCAgMCwgTlVMTCwgJiMzOTt5JiMzOTsgfSwKJiM0MzsJeyAmIzM0O2hlbHAmIzM0OywgICAgICAgICAgICAgICAgIDAsIE5VTEwsICYjMzk7aCYjMzk7IH0sCiYjNDM7CXsgTlVMTCwgICAgICAgICAgICAgICAgICAgMCwgTlVMTCwgMCB9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKnBhcnNlX2FyZ3MoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBpbnQgKmFybWVkKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZDsKJiM0MzsJY29uc3QgY2hhciAqbmFtZSA9ICYjMzQ7cm9kYXRhJiMzNDs7CiYjNDM7CWludCBjOwomIzQzOwomIzQzOwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAmIzM0O2s6aCYjMzQ7LCBvcHRzLCBOVUxMKSkgIT0gLTEpIHsKJiM0MzsJCXN3aXRjaCAoYykgewomIzQzOwkJY2FzZSAmIzM5O2smIzM5OzoKJiM0MzsJCQluYW1lID0gb3B0YXJnOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O3kmIzM5OzoKJiM0MzsJCQkqYXJtZWQgPSAxOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O2gmIzM5OzoKJiM0MzsJCQl1c2FnZSgpOwomIzQzOwkJCWV4aXQoRVhJVF9TVUNDRVNTKTsKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJdXNhZ2UoKTsKJiM0MzsJCQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2luZCA9IGxvb2t1cF9raW5kKG5hbWUpOwomIzQzOwlpZiAoIWtpbmQpCiYjNDM7CQlmYXRhbCgmIzM0O3Vua25vd24ga2luZCAmIzM5OyVzJiMzOTsgKGV4cGVjdGVkOiByb2RhdGF8c2xhYnxwZ3RhYmxlKVxuJiMzNDssCiYjNDM7CQkgICAgICBuYW1lKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGtpbmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGNoZWNrX3ByZXJlcXMoaW50IGFybWVkKQomIzQzO3sKJiM0MzsJaWYgKGdldGV1aWQoKSkKJiM0MzsJCWZhdGFsKCYjMzQ7bXVzdCBydW4gYXMgcm9vdFxuJiMzNDspOwomIzQzOwlpZiAoYWNjZXNzKFNZU0NUTF9QQVRILCBXX09LKSkKJiM0MzsJCWZhdGFsKCYjMzQ7JXMgbm90IHByZXNlbnQgKGtlcm5lbCB3aXRob3V0IHRoZSBzeXNjdGw/KVxuJiMzNDssCiYjNDM7CQkgICAgICBTWVNDVExfUEFUSCk7CiYjNDM7CWlmIChhY2Nlc3MoSU5KRUNUX1BBVEgsIFdfT0spKQomIzQzOwkJZmF0YWwoJiMzNDslcyBub3QgcHJlc2VudCAobm8gTUVNT1JZX0ZBSUxVUkU/KVxuJiMzNDssIElOSkVDVF9QQVRIKTsKJiM0MzsJaWYgKCFhcm1lZCkKJiM0MzsJCWZhdGFsKCYjMzQ7dGhpcyBwYW5pY3MgdGhlIGtlcm5lbDsgcGFzcyAtLXllcy1wYW5pYy1teS1rZXJuZWxcbiYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVpbnQ2NF90IHBpY2tfcGh5c19hZGRyKGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmtpbmQpCiYjNDM7ewomIzQzOwl1aW50NjRfdCBhZGRyOwomIzQzOwomIzQzOwlpZiAoa2luZC0mZ3Q7Yml0ID09IEJJVChSRVNFUlZFRCkpIHsKJiM0MzsJCWlmIChwaWNrX3JvZGF0YV9waHlzX2FkZHIoJmFtcDthZGRyKSkKJiM0MzsJCQlmYXRhbCgmIzM0O25vIFwmIzM0O0tlcm5lbCByb2RhdGFcJiMzNDsgaW4gL3Byb2MvaW9tZW07IHRyeSAtayBzbGFiIG9yIC1rIHBndGFibGVcbiYjMzQ7KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmIChwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyKGtpbmQtJmd0O2JpdCwgJmFtcDthZGRyKSkKJiM0MzsJCQlmYXRhbCgmIzM0O25vIHVzYWJsZSAlcyBQRk4gaW4gJXNcbiYjMzQ7LCBraW5kLSZndDtuYW1lLAomIzQzOwkJCSAgICAgIFBST0NfS1BBR0VGTEFHUyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGFkZHI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGFybV9zeXNjdGwodW5zaWduZWQgbG9uZyAqcHJpb3IpCiYjNDM7ewomIzQzOwlpZiAocmVhZF9zeXNjdGwocHJpb3IpKQomIzQzOwkJZmF0YWwoJiMzNDtmYWlsZWQgdG8gcmVhZCAlc1xuJiMzNDssIFNZU0NUTF9QQVRIKTsKJiM0MzsJaWYgKHdyaXRlX3N5c2N0bCgxKSkKJiM0MzsJCWZhdGFsKCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSAlc1xuJiMzNDssIFNZU0NUTF9QQVRIKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmVjaGVja19raW5kKGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmtpbmQsIHVpbnQ2NF90IHBmbiwKJiM0MzsJCQkgY29uc3QgY2hhciAqdmVyZGljdCkKJiM0Mzt7CiYjNDM7CXVpbnQ2NF90IGZsYWdzOwomIzQzOwlpbnQgZmQsIHJldDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKFBST0NfS1BBR0VGTEFHUywgT19SRE9OTFkpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJZmF0YWwoJiMzNDslcyAoY291bGQgbm90IG9wZW4gJXMpXG4mIzM0OywgdmVyZGljdCwgUFJPQ19LUEFHRUZMQUdTKTsKJiM0MzsJcmV0ID0ga3BhZ2VmbGFnc19yZWFkKGZkLCBwZm4sICZhbXA7ZmxhZ3MpOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlmYXRhbCgmIzM0OyVzIChjb3VsZCBub3QgcmVjb25maXJtIHBhZ2UgdHlwZSB2aWEgJXMpXG4mIzM0OywgdmVyZGljdCwKJiM0MzsJCSAgICAgIFBST0NfS1BBR0VGTEFHUyk7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBraW5kLSZndDtiaXQpCiYjNDM7CQlmYXRhbCgmIzM0OyVzIChwYWdlIHN0aWxsICVzKVxuJiMzNDssIHZlcmRpY3QsIGtpbmQtJmd0O25hbWUpOwomIzQzOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDt0YXJnZXQgUEZOIG5vIGxvbmdlciAlczsgcmFjZWQgYmVmb3JlIGluamVjdCwgaW5jb25jbHVzaXZlXG4mIzM0OywKJiM0MzsJCWtpbmQtJmd0O25hbWUpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiYjNDM7ewomIzQzOwl1aW50NjRfdCBwaHlzX2FkZHIsIHBmbjsKJiM0MzsJY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZDsKJiM0MzsJY29uc3QgY2hhciAqdmVyZGljdDsKJiM0MzsJdW5zaWduZWQgbG9uZyBwcmlvcjsKJiM0MzsJaW50IGFybWVkID0gMDsKJiM0MzsKJiM0MzsJa2luZCA9IHBhcnNlX2FyZ3MoYXJnYywgYXJndiwgJmFtcDthcm1lZCk7CiYjNDM7CWNoZWNrX3ByZXJlcXMoYXJtZWQpOwomIzQzOwlwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpOwomIzQzOwomIzQzOwlwaHlzX2FkZHIgPSBwaWNrX3BoeXNfYWRkcihraW5kKTsKJiM0MzsJcGZuID0gcGh5c19hZGRyIC8gcGFnZV9zaXplOwomIzQzOwlhcm1fc3lzY3RsKCZhbXA7cHJpb3IpOwomIzQzOwomIzQzOwl2ZXJkaWN0ID0gaW5qZWN0X2h3cG9pc29uKGtpbmQsIHBoeXNfYWRkciwgcGZuKTsKJiM0MzsKJiM0MzsJLyogTm8gcGFuaWMgZmlyZWQuICBQdXQgdGhlIG1hY2hpbmUgYmFjaywgdGhlbiByZXBvcnQuICovCiYjNDM7CXdyaXRlX3N5c2N0bChwcmlvcik7CiYjNDM7CXVucG9pc29uX3BmbihwZm4pOwomIzQzOwlyZWNoZWNrX2tpbmQoa2luZCwgcGZuLCB2ZXJkaWN0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIEVYSVRfRkFJTFVSRTsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNzQKCQkJCQkJCW91dHB1dDogNTgKCQkJCQkJCXRob3VnaHRzOiA1OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQ6IEZhbHNlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCBpbnRyb2R1Y2VzIGEgbmV3IHRvb2wsIHNwZWNpZmljYWxseSBgdG9vbHMvbW0vbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWMuY2AuIFRoaXMgdG9vbCBpcyBkZXNpZ25lZCB0byB0cmlnZ2VyIGEgY29udHJvbGxlZCBrZXJuZWwgcGFuaWMgdGhyb3VnaCBhIGhhcmR3YXJlIHBvaXNvbmluZyBldmVudCBvbiBhIGtlcm5lbC1vd25lZCBwYWdlLiBNeSBpbml0aWFsIHNjYW4gc2hvd2VkIG1vZGlmaWNhdGlvbnMgdG8gYE1BSU5UQUlORVJTYCwgdGhlIGAuZ2l0aWdub3JlYCB3aXRoaW4gYHRvb2xzL21tYCwgdGhlIGBNYWtlZmlsZWAgaW4gYHRvb2xzL21tYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBuZXcgc291cmNlIGZpbGUgaXRzZWxmLiBFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBlbnRpcmVseSBjb250YWluZWQgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuCgpJIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmUgKm5vKiBrZXJuZWwgY29kZSBjaGFuZ2VzLiBJJiMzOTt2ZSByZS1jaGVja2VkIHRoZSBkaWZmIC0gaXQmIzM5O3Mgc3RpbGwganVzdCB0aGUgZmlsZXMgSSBtZW50aW9uZWQuIFNvLCBubyBrZXJuZWwgc291cmNlIGNvZGUgaXMgYmVpbmcgdG91Y2hlZC4gRXhjZWxsZW50LgoKTm93LCBJIGhhdmUgdGhlIGluc3RydWN0aW9ucyB0byBmb2xsb3cuIFRoZXkgb3V0bGluZSBjYXNlcyB3aGVyZSBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gV2hpbGUgdGhlIGluc3RydWN0aW9ucyBkb24mIzM5O3QgZXhwbGljaXRseSBjYWxsIG91dCBgdG9vbHMvYCwgdGhlIGxvZ2ljIGlzIGNsZWFyOiBjaGFuZ2VzIHRvIHVzZXItc3BhY2UgdG9vbHMgaW4gYHRvb2xzL2AgZG9uJiMzOTt0IGFmZmVjdCByZWFjaGFibGUga2VybmVsIGxvZ2ljLiBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZnkgbW9kaWZpY2F0aW9ucyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMgd2FycmFudCBgV29ydGhGdXp6aW5nPXRydWVgLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGlzIHBhdGNoIGV4Y2x1c2l2ZWx5IGltcGFjdHMgdGhlIGB0b29scy9gIGRpcmVjdG9yeSwgaXQgZG9lcyAqbm90KiBtb2RpZnkgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiBUaGUgY29kZSBpc24mIzM5O3QgcGFydCBvZiB0aGUgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eS4KCkkmIzM5O3ZlIHJldmlld2VkIHRoZSBkaWZmIHRob3JvdWdobHksIGFuZCBJJiMzOTttIGNvbmZpZGVudC4gVGhlcmUmIzM5O3Mgbm90aGluZyBlbHNlIG9mIHN1YnN0YW5jZSBoZXJlLiBUaGlzIGlzIGEgc2ltcGxlIGFkZGl0aW9uIG9mIGEgdXNlci1zcGFjZSB0b29sLgoKU28sIHRoZSB2ZXJkaWN0IGlzICoqV29ydGhGdXp6aW5nPWZhbHNlKiouIFRoZSByZWFzb24gaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGUgcGF0Y2ggc29sZWx5IGFkZHMgYSB1c2VyLXNwYWNlIHRlc3RpbmcgdG9vbCB3aXRoaW4gdGhlIGB0b29scy9tbS9gIGRpcmVjdG9yeSBhbmQgZG9lc24mIzM5O3QgbW9kaWZ5IGFueSBrZXJuZWwgc291cmNlIGNvZGUuCgpOb3csIGxldCBtZSBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIGEgbmV3IHVzZXItc3BhY2UgdGVzdGluZyB0b29sIGluIHRoZSB0b29scy9tbS8gZGlyZWN0b3J5IGFuZCBkb2VzIG5vdCBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyB1c2VyLXNwYWNlIHRlc3RpbmcgdG9vbCBpbiB0aGUgdG9vbHMvbW0vIGRpcmVjdG9yeSBhbmQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwgc291cmNlIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjAyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzowMjoxNC40Mjg5ODI5MDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Njc1MDczMjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgbmV3IHVzZXItc3BhY2UgdGVzdGluZyB0b29sIGluIHRoZSB0b29scy9tbS8gZGlyZWN0b3J5IGFuZCBkb2VzIG5vdCBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjAyOjE0LjQyODk5MDcyN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAzNTI3NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTMyZWY2ODRmOGU5OTBmM2MzMzEzNmIwZTdjYTlhNDA5ZDdhZjczM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzowMjoxMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggMGY1MTNiNDJiYzE4Ni4uMmMzMDliMzJjOThlYiAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTEyMDQzLDYgKzEyMDQzLDcgQEAgRjpcXHRpbmNsdWRlL2xpbnV4L21lbW9yeS1mYWlsdXJlLmhcXG4gRjpcXHRpbmNsdWRlL3RyYWNlL2V2ZW50cy9tZW1vcnktZmFpbHVyZS5oXFxuIEY6XFx0bW0vaHdwb2lzb24taW5qZWN0LmNcXG4gRjpcXHRtbS9tZW1vcnktZmFpbHVyZS5jXFxuK0Y6XFx0dG9vbHMvbW0vbWVtb3J5LWZhaWx1cmUvXFxuIEY6XFx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbiBcXG4gSFlDT04gSFk0NlhYIFRPVUNIU0NSRUVOIFNVUFBPUlRcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL21tLy5naXRpZ25vcmVcXG5pbmRleCAxNDQ2YTY1OWU1NDA4Li5iOWI4MGQ5MDlkYjRhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL21tLy5naXRpZ25vcmVcXG4rKysgYi90b29scy9tbS8uZ2l0aWdub3JlXFxuQEAgLTMsMyArMyw0IEBAIHNsYWJpbmZvXFxuIHBhZ2UtdHlwZXNcXG4gcGFnZV9vd25lcl9zb3J0XFxuIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XFxuK21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL01ha2VmaWxlIGIvdG9vbHMvbW0vTWFrZWZpbGVcXG5pbmRleCA4NTgxODZhNmVlZmRiLi45ZjZkZTk1N2E5NWEwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL21tL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvbW0vTWFrZWZpbGVcXG5AQCAtNCw2ICs0LDcgQEBcXG4gaW5jbHVkZSAuLi9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGVcXG4gXFxuIEJVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcXG4rQlVJTERfVEFSR0VUUys9bWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWNcXG4gSU5TVEFMTF9UQVJHRVRTID0gJChCVUlMRF9UQVJHRVRTKSB0aHBtYXBzXFxuIFxcbiBMSUJfRElSID0gLi4vbGliL2FwaVxcbkBAIC0yNCw2ICsyNSw3IEBAICQoTElCUyk6XFxuIFxcbiBjbGVhbjpcXG4gXFx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcXG4rXFx0JChSTSkgbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWNcXG4gXFx0bWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuXFxuIFxcbiBzYmluZGlyID89IC91c3Ivc2JpblxcbmRpZmYgLS1naXQgYS90b29scy9tbS9tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYy5jIGIvdG9vbHMvbW0vbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzc3MmM1NTQ4YWRhZlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy9tbS9tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYy5jXFxuQEAgLTAsMCArMSwzNTkgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogaHdwb2lzb24tcGFuaWM6IHRyaWdnZXIgYW4gaW50ZW50aW9uYWwga2VybmVsIHBhbmljIGJ5IGluamVjdGluZyBhXFxuKyAqIGh3cG9pc29uIGVycm9yIG9uIGEga2VybmVsLW93bmVkIHBhZ2UsIHRvIGNoZWNrIHRoYXRcXG4rICogdm0ucGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZSBmaXJlcy5cXG4rICpcXG4rICogVGhyZWUga2luZHMgb2Yga2VybmVsLW93bmVkIHBhZ2UgY2FuIGJlIHRhcmdldGVkLCBzZWxlY3RlZCB3aXRoIC1rXFxuKyAqIChkZWZhdWx0OiByb2RhdGEpOlxcbisgKlxcbisgKiAgIHJvZGF0YSAgLSBhIFBHX3Jlc2VydmVkIHBhZ2UgaW4gdGhlIGtlcm5lbCByb2RhdGEgcmFuZ2UsIGZyb21cXG4rICogICAgICAgICAgICAgL3Byb2MvaW9tZW0gXFxcIktlcm5lbCByb2RhdGFcXFwiLiAgeDg2IGFuZCByaXNjdiBvbmx5LlxcbisgKiAgIHNsYWIgICAgLSBhIHNsYWIgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1NMQUIpLlxcbisgKiAgIHBndGFibGUgLSBhIHBhZ2UtdGFibGUgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1BHVEFCTEUpLlxcbisgKlxcbisgKiBzbGFiIGFuZCBwZ3RhYmxlIHdvcmsgZXZlcnl3aGVyZTsgcm9kYXRhIG5lZWRzIGFuIGFyY2hpdGVjdHVyZSB0aGF0XFxuKyAqIHB1Ymxpc2hlcyB0aGUgcm9kYXRhIHJlc291cmNlIGluIC9wcm9jL2lvbWVtLlxcbisgKlxcbisgKiBUaGUgc2xhYiBhbmQgcGd0YWJsZSB2YXJpYW50cyBleGVyY2lzZSBtZW1vcnlfZmFpbHVyZSgpIC1cXHUwMDNlIGdldF9hbnlfcGFnZSgpXFxuKyAqIG9uIGEgbm9uIFBHX3Jlc2VydmVkIGtlcm5lbC1vd25lZCBwYWdlLCBjYXRjaGluZyByZWdyZXNzaW9ucyB3aGVyZVxcbisgKiBnZXRfYW55X3BhZ2UoKSBjb2xsYXBzZXMgc3VjaCBwYWdlcyBpbnRvIGEgdHJhbnNpZW50IC1FSU8gaW5zdGVhZCBvZlxcbisgKiAtRU5PVFJFQ09WRVJBQkxFLlxcbisgKlxcbisgKiBBIHN1Y2Nlc3NmdWwgcnVuIGNyYXNoZXMgdGhlIGtlcm5lbCwgc28gLS15ZXMtcGFuaWMtbXkta2VybmVsIGlzIHJlcXVpcmVkXFxuKyAqIGFuZCB0aGUgdG9vbCBpcyBtZWFudCBmb3IgYSBkaXNwb3NhYmxlIFZNIChlLmcuIHZpcnRtZS1uZykgd2l0aCB0aGUgc2VyaWFsXFxuKyAqIGNvbnNvbGUgY2FwdHVyZWQuICBUaGUgcmVzdWx0IGlzIG9ic2VydmVkIGV4dGVybmFsbHk6IHRoZSBrZXJuZWwgcGFuaWNzIHdpdGhcXG4rICogICBcXFwiTWVtb3J5IGZhaWx1cmU6IFxcdTAwM2NwZm5cXHUwMDNlOiB1bnJlY292ZXJhYmxlIHBhZ2VcXFwiXFxuKyAqIFJldHVybmluZyBhdCBhbGwgbWVhbnMgbm8gcGFuaWMgZmlyZWQsIHNvIGV2ZXJ5IGV4aXQgc3RhdHVzIGlzIG5vbi16ZXJvOlxcbisgKiBlaXRoZXIgYSBmYWlsdXJlLCBvciBhbiBpbmNvbmNsdXNpdmUgcnVuIHdoZXJlIHRoZSB0YXJnZXQgUEZOIHJhY2VkIHRvXFxuKyAqIGFub3RoZXIgcGFnZSB0eXBlIGJlZm9yZSBpbmplY3Rpb24uXFxuKyAqXFxuKyAqIEF1dGhvcjogQnJlbm8gTGVpdGFvIFxcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1xcdTAwM2VcXG4rICovXFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcXG4rI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NFxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2dldG9wdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGltaXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRhcmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGludC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCIuLi8uLi8uLi9pbmNsdWRlL3VhcGkvbGludXgva2VybmVsLXBhZ2UtZmxhZ3MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIi4uLy4uL2luY2x1ZGUvbGludXgvc2l6ZXMuaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2FwaS9mcy9mcy5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBTWVNDVExfUEFUSFxcdFxcXCIvcHJvYy9zeXMvdm0vcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxcXCJcXG4rI2RlZmluZSBJTkpFQ1RfUEFUSFxcdFxcXCIvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZVxcXCJcXG4rI2RlZmluZSBQUk9DX0tQQUdFRkxBR1NcXHRcXFwiL3Byb2Mva3BhZ2VmbGFnc1xcXCJcXG4rXFxuKy8qIE5vdCBleHBvcnRlZCBieSB0aGUgdWFwaSBoZWFkZXIsIHNlZSB0b29scy9tbS9wYWdlLXR5cGVzLmMuICovXFxuKyNkZWZpbmUgS1BGX1JFU0VSVkVEXFx0MzJcXG4rXFxuKyNkZWZpbmUgQklUKG5hbWUpXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgS1BGXyMjbmFtZSlcXG4rI2RlZmluZSBBUlJBWV9TSVpFKHgpXFx0KHNpemVvZih4KSAvIHNpemVvZigoeClbMF0pKVxcbitcXG4rLyogVGhlIGtwYWdlZmxhZ3MgYml0IGlkZW50aWZ5aW5nIGVhY2gga2VybmVsLW93bmVkIHBhZ2Uga2luZCB3ZSB0YXJnZXQuICovXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFnZV9raW5kIHtcXG4rXFx0Y29uc3QgY2hhciAqbmFtZTtcXG4rXFx0dWludDY0X3QgYml0O1xcbit9IHBhZ2Vfa2luZHNbXSA9IHtcXG4rXFx0eyBcXFwicm9kYXRhXFxcIiwgIEJJVChSRVNFUlZFRCkgfSxcXG4rXFx0eyBcXFwic2xhYlxcXCIsICAgIEJJVChTTEFCKSAgICAgfSxcXG4rXFx0eyBcXFwicGd0YWJsZVxcXCIsIEJJVChQR1RBQkxFKSAgfSxcXG4rfTtcXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTtcXG4rXFxuK3N0YXRpYyB2b2lkIGZhdGFsKGNvbnN0IGNoYXIgKngsIC4uLilcXG4re1xcbitcXHR2YV9saXN0IGFwO1xcbitcXG4rXFx0dmFfc3RhcnQoYXAsIHgpO1xcbitcXHR2ZnByaW50ZihzdGRlcnIsIHgsIGFwKTtcXG4rXFx0dmFfZW5kKGFwKTtcXG4rXFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGtwYWdlZmxhZ3NfcmVhZChpbnQgZmQsIHVpbnQ2NF90IHBmbiwgdWludDY0X3QgKmZsYWdzKVxcbit7XFxuK1xcdHNzaXplX3QgYnl0ZXM7XFxuK1xcbitcXHRieXRlcyA9IHByZWFkKGZkLCBmbGFncywgc2l6ZW9mKCpmbGFncyksIChvZmZfdClwZm4gKiBzaXplb2YoKmZsYWdzKSk7XFxuK1xcbitcXHRyZXR1cm4gYnl0ZXMgPT0gc2l6ZW9mKCpmbGFncykgPyAwIDogLTE7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGlja19yb2RhdGFfcGh5c19hZGRyKHVpbnQ2NF90ICpwaHlzX2FkZHIpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0LCBlbmQ7XFxuK1xcdGNoYXIgbGluZVsyNTZdLCBsYWJlbFs2NF07XFxuK1xcdGludCByZXQgPSAtMTtcXG4rXFx0RklMRSAqZjtcXG4rXFxuK1xcdGYgPSBmb3BlbihcXFwiL3Byb2MvaW9tZW1cXFwiLCBcXFwiclxcXCIpO1xcbitcXHRpZiAoIWYpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdC8qIFN1Yi1yZXNvdXJjZXMgYXJlIGluZGVudGVkOiBcXFwiICAwMjUwMDAwMC0wMmZmZmZmZiA6IEtlcm5lbCByb2RhdGFcXFwiICovXFxuK1xcdHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7XFxuK1xcdFxcdGlmIChzc2NhbmYobGluZSwgXFxcIiAlbGx4LSVsbHggOiAlNjNbXlxcXFxuXVxcXCIsIFxcdTAwMjZzdGFydCwgXFx1MDAyNmVuZCxcXG4rXFx0XFx0XFx0ICAgbGFiZWwpICE9IDMpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoc3RyY21wKGxhYmVsLCBcXFwiS2VybmVsIHJvZGF0YVxcXCIpIHx8IGVuZCBcXHUwMDNjPSBzdGFydClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdC8qIFBhZ2UtYWxpZ24gdXAgYW5kIHJldHVybiB0aGUgZmlyc3QgYnl0ZSBvZiB0aGF0IHBhZ2UuICovXFxuK1xcdFxcdCpwaHlzX2FkZHIgPSAoKHN0YXJ0ICsgcGFnZV9zaXplIC0gMSkgLyBwYWdlX3NpemUpICogcGFnZV9zaXplO1xcbitcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0ZmNsb3NlKGYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBpY2tfa3BhZ2VmbGFnc19waHlzX2FkZHIodWludDY0X3Qgd2FudCwgdWludDY0X3QgKnBoeXNfYWRkcilcXG4re1xcbitcXHR1aW50NjRfdCBwZm4gPSBTWl8xNk0gLyBwYWdlX3NpemU7XFxuK1xcdHVpbnQ2NF90IGZsYWdzO1xcbitcXHRpbnQgcmV0ID0gLTE7XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdGZkID0gb3BlbihQUk9DX0tQQUdFRkxBR1MsIE9fUkRPTkxZKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0Zm9yICg7IGtwYWdlZmxhZ3NfcmVhZChmZCwgcGZuLCBcXHUwMDI2ZmxhZ3MpID09IDA7IHBmbisrKSB7XFxuK1xcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiB3YW50KSBcXHUwMDI2XFx1MDAyNiAhKGZsYWdzIFxcdTAwMjYgQklUKEhXUE9JU09OKSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICEoZmxhZ3MgXFx1MDAyNiBCSVQoTk9QQUdFKSkgXFx1MDAyNlxcdTAwMjYgIShmbGFncyBcXHUwMDI2IEJJVChDT01QT1VORF9UQUlMKSkpIHtcXG4rXFx0XFx0XFx0KnBoeXNfYWRkciA9IHBmbiAqIHBhZ2Vfc2l6ZTtcXG4rXFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJlYWRfc3lzY3RsKHVuc2lnbmVkIGxvbmcgKnZhbClcXG4re1xcbitcXHRGSUxFICpmID0gZm9wZW4oU1lTQ1RMX1BBVEgsIFxcXCJyXFxcIik7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWYpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0cmV0ID0gZnNjYW5mKGYsIFxcXCIlbHVcXFwiLCB2YWwpID09IDEgPyAwIDogLTE7XFxuK1xcdGZjbG9zZShmKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgd3JpdGVfc3lzY3RsKHVuc2lnbmVkIGxvbmcgdmFsKVxcbit7XFxuK1xcdEZJTEUgKmYgPSBmb3BlbihTWVNDVExfUEFUSCwgXFxcIndcXFwiKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghZilcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRyZXQgPSBmcHJpbnRmKGYsIFxcXCIlbHVcXFwiLCB2YWwpIFxcdTAwM2MgMCA/IC0xIDogMDtcXG4rXFx0ZmNsb3NlKGYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyogaGFyZF9vZmZsaW5lX3BhZ2UoKSBpbmplY3RzIHdpdGggTUZfU1dfU0lNVUxBVEVELCBzbyB1bnBvaXNvbiBpcyBhbGxvd2VkLiAqL1xcbitzdGF0aWMgdm9pZCB1bnBvaXNvbl9wZm4odWludDY0X3QgcGZuKVxcbit7XFxuK1xcdGNoYXIgcGF0aFtQQVRIX01BWF0sIGJ1ZlszMl07XFxuK1xcdGNvbnN0IGNoYXIgKmRlYnVnZnM7XFxuK1xcdGludCBmZCwgbGVuO1xcbitcXG4rXFx0ZGVidWdmcyA9IGRlYnVnZnNfX21vdW50KCk7XFxuK1xcdGlmICghZGVidWdmcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiJXMvaHdwb2lzb24vdW5wb2lzb24tcGZuXFxcIiwgZGVidWdmcyk7XFxuK1xcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIweCVsbHhcXFxcblxcXCIsICh1bnNpZ25lZCBsb25nIGxvbmcpcGZuKTtcXG4rXFx0aWYgKHdyaXRlKGZkLCBidWYsIGxlbikgXFx1MDAzYyAwKVxcbitcXHRcXHRwZXJyb3IoXFxcInVucG9pc29uLXBmblxcXCIpO1xcbitcXHRjbG9zZShmZCk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBjaGFyICppbmplY3RfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZCxcXG4rXFx0XFx0XFx0XFx0ICAgdWludDY0X3QgcGh5c19hZGRyLCB1aW50NjRfdCBwZm4pXFxuK3tcXG4rXFx0Y2hhciBidWZbMzJdO1xcbitcXHRpbnQgZmQsIGxlbjtcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcbitcXHRwcmludGYoXFxcImluamVjdGluZyBod3BvaXNvbiBhdCBwaHlzIDB4JWxseCAocGZuIDB4JWxseCwga2luZD0lcylcXFxcblxcXCIsXFxuK1xcdCAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBoeXNfYWRkciwgKHVuc2lnbmVkIGxvbmcgbG9uZylwZm4sXFxuK1xcdCAgICAgICBraW5kLVxcdTAwM2VuYW1lKTtcXG4rXFx0cHJpbnRmKFxcXCJleHBlY3Rpbmcga2VybmVsIHBhbmljOiAnTWVtb3J5IGZhaWx1cmU6IFxcdTAwM2NwZm5cXHUwMDNlOiB1bnJlY292ZXJhYmxlIHBhZ2UnXFxcXG5cXFwiKTtcXG4rXFx0ZmZsdXNoKHN0ZG91dCk7XFxuK1xcbitcXHRmZCA9IG9wZW4oSU5KRUNUX1BBVEgsIE9fV1JPTkxZKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIFxcXCJjYW5ub3Qgb3BlbiBcXFwiIElOSkVDVF9QQVRIO1xcbitcXG4rXFx0bGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXFxcIjB4JWxseFxcXCIsICh1bnNpZ25lZCBsb25nIGxvbmcpcGh5c19hZGRyKTtcXG4rXFx0cmV0ID0gd3JpdGUoZmQsIGJ1ZiwgbGVuKTtcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0aWYgKHJldCAhPSBsZW4pXFxuK1xcdFxcdHJldHVybiBcXFwiaW5qZWN0IGZhaWxlZCBiZWZvcmUgcmVhY2hpbmcgdGhlIHBhbmljIHBhdGhcXFwiO1xcbitcXG4rXFx0cmV0dXJuIFxcXCJpbmplY3QgcmV0dXJuZWQgd2l0aG91dCBwYW5pYzsgc3lzY3RsIGluZWZmZWN0aXZlXFxcIjtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmxvb2t1cF9raW5kKGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwYWdlX2tpbmRzKTsgaSsrKVxcbitcXHRcXHRpZiAoIXN0cmNtcChwYWdlX2tpbmRzW2ldLm5hbWUsIG5hbWUpKVxcbitcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNnBhZ2Vfa2luZHNbaV07XFxuK1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdXNhZ2Uodm9pZClcXG4re1xcbitcXHRwcmludGYoXFxcImh3cG9pc29uLXBhbmljIFtvcHRpb25zXVxcXFxuXFxcIlxcbitcXHQgICAgICAgXFxcIiAgICAgICAgICAgIC1rfC0ta2luZCBcXHUwMDNja2luZFxcdTAwM2UgICAgICAgcm9kYXRhIChkZWZhdWx0LCB4ODYgYW5kIHJpc2N2IG9ubHkpLFxcXFxuXFxcIlxcbitcXHQgICAgICAgXFxcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhYiBvciBwZ3RhYmxlXFxcXG5cXFwiXFxuK1xcdCAgICAgICBcXFwiICAgICAgICAgICAgLS15ZXMtcGFuaWMtbXkta2VybmVsICByZWFsbHkgcnVuIGl0OiB0aGUgbWFjaGluZSBwYW5pY3NcXFxcblxcXCJcXG4rXFx0ICAgICAgIFxcXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBldmVyeSB1bnNhdmVkIHdyaXRlIGlzIGxvc3RcXFxcblxcXCJcXG4rXFx0ICAgICAgIFxcXCIgICAgICAgICAgICAtaHwtLWhlbHAgICAgICAgICAgICAgIHNob3cgdGhpc1xcXFxuXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdHNbXSA9IHtcXG4rXFx0eyBcXFwia2luZFxcXCIsICAgICAgICAgICAgICAgICAxLCBOVUxMLCAnaycgfSxcXG4rXFx0eyBcXFwieWVzLXBhbmljLW15LWtlcm5lbFxcXCIsICAwLCBOVUxMLCAneScgfSxcXG4rXFx0eyBcXFwiaGVscFxcXCIsICAgICAgICAgICAgICAgICAwLCBOVUxMLCAnaCcgfSxcXG4rXFx0eyBOVUxMLCAgICAgICAgICAgICAgICAgICAwLCBOVUxMLCAwIH0sXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqcGFyc2VfYXJncyhpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGludCAqYXJtZWQpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZDtcXG4rXFx0Y29uc3QgY2hhciAqbmFtZSA9IFxcXCJyb2RhdGFcXFwiO1xcbitcXHRpbnQgYztcXG4rXFxuK1xcdHdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIFxcXCJrOmhcXFwiLCBvcHRzLCBOVUxMKSkgIT0gLTEpIHtcXG4rXFx0XFx0c3dpdGNoIChjKSB7XFxuK1xcdFxcdGNhc2UgJ2snOlxcbitcXHRcXHRcXHRuYW1lID0gb3B0YXJnO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAneSc6XFxuK1xcdFxcdFxcdCphcm1lZCA9IDE7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICdoJzpcXG4rXFx0XFx0XFx0dXNhZ2UoKTtcXG4rXFx0XFx0XFx0ZXhpdChFWElUX1NVQ0NFU1MpO1xcbitcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHR1c2FnZSgpO1xcbitcXHRcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0a2luZCA9IGxvb2t1cF9raW5kKG5hbWUpO1xcbitcXHRpZiAoIWtpbmQpXFxuK1xcdFxcdGZhdGFsKFxcXCJ1bmtub3duIGtpbmQgJyVzJyAoZXhwZWN0ZWQ6IHJvZGF0YXxzbGFifHBndGFibGUpXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICBuYW1lKTtcXG4rXFxuK1xcdHJldHVybiBraW5kO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBjaGVja19wcmVyZXFzKGludCBhcm1lZClcXG4re1xcbitcXHRpZiAoZ2V0ZXVpZCgpKVxcbitcXHRcXHRmYXRhbChcXFwibXVzdCBydW4gYXMgcm9vdFxcXFxuXFxcIik7XFxuK1xcdGlmIChhY2Nlc3MoU1lTQ1RMX1BBVEgsIFdfT0spKVxcbitcXHRcXHRmYXRhbChcXFwiJXMgbm90IHByZXNlbnQgKGtlcm5lbCB3aXRob3V0IHRoZSBzeXNjdGw/KVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgU1lTQ1RMX1BBVEgpO1xcbitcXHRpZiAoYWNjZXNzKElOSkVDVF9QQVRILCBXX09LKSlcXG4rXFx0XFx0ZmF0YWwoXFxcIiVzIG5vdCBwcmVzZW50IChubyBNRU1PUllfRkFJTFVSRT8pXFxcXG5cXFwiLCBJTkpFQ1RfUEFUSCk7XFxuK1xcdGlmICghYXJtZWQpXFxuK1xcdFxcdGZhdGFsKFxcXCJ0aGlzIHBhbmljcyB0aGUga2VybmVsOyBwYXNzIC0teWVzLXBhbmljLW15LWtlcm5lbFxcXFxuXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyB1aW50NjRfdCBwaWNrX3BoeXNfYWRkcihjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kKVxcbit7XFxuK1xcdHVpbnQ2NF90IGFkZHI7XFxuK1xcbitcXHRpZiAoa2luZC1cXHUwMDNlYml0ID09IEJJVChSRVNFUlZFRCkpIHtcXG4rXFx0XFx0aWYgKHBpY2tfcm9kYXRhX3BoeXNfYWRkcihcXHUwMDI2YWRkcikpXFxuK1xcdFxcdFxcdGZhdGFsKFxcXCJubyBcXFxcXFxcIktlcm5lbCByb2RhdGFcXFxcXFxcIiBpbiAvcHJvYy9pb21lbTsgdHJ5IC1rIHNsYWIgb3IgLWsgcGd0YWJsZVxcXFxuXFxcIik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmIChwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyKGtpbmQtXFx1MDAzZWJpdCwgXFx1MDAyNmFkZHIpKVxcbitcXHRcXHRcXHRmYXRhbChcXFwibm8gdXNhYmxlICVzIFBGTiBpbiAlc1xcXFxuXFxcIiwga2luZC1cXHUwMDNlbmFtZSxcXG4rXFx0XFx0XFx0ICAgICAgUFJPQ19LUEFHRUZMQUdTKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGFkZHI7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGFybV9zeXNjdGwodW5zaWduZWQgbG9uZyAqcHJpb3IpXFxuK3tcXG4rXFx0aWYgKHJlYWRfc3lzY3RsKHByaW9yKSlcXG4rXFx0XFx0ZmF0YWwoXFxcImZhaWxlZCB0byByZWFkICVzXFxcXG5cXFwiLCBTWVNDVExfUEFUSCk7XFxuK1xcdGlmICh3cml0ZV9zeXNjdGwoMSkpXFxuK1xcdFxcdGZhdGFsKFxcXCJmYWlsZWQgdG8gZW5hYmxlICVzXFxcXG5cXFwiLCBTWVNDVExfUEFUSCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJlY2hlY2tfa2luZChjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kLCB1aW50NjRfdCBwZm4sXFxuK1xcdFxcdFxcdCBjb25zdCBjaGFyICp2ZXJkaWN0KVxcbit7XFxuK1xcdHVpbnQ2NF90IGZsYWdzO1xcbitcXHRpbnQgZmQsIHJldDtcXG4rXFxuK1xcdGZkID0gb3BlbihQUk9DX0tQQUdFRkxBR1MsIE9fUkRPTkxZKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0ZmF0YWwoXFxcIiVzIChjb3VsZCBub3Qgb3BlbiAlcylcXFxcblxcXCIsIHZlcmRpY3QsIFBST0NfS1BBR0VGTEFHUyk7XFxuK1xcdHJldCA9IGtwYWdlZmxhZ3NfcmVhZChmZCwgcGZuLCBcXHUwMDI2ZmxhZ3MpO1xcbitcXHRjbG9zZShmZCk7XFxuK1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRmYXRhbChcXFwiJXMgKGNvdWxkIG5vdCByZWNvbmZpcm0gcGFnZSB0eXBlIHZpYSAlcylcXFxcblxcXCIsIHZlcmRpY3QsXFxuK1xcdFxcdCAgICAgIFBST0NfS1BBR0VGTEFHUyk7XFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IGtpbmQtXFx1MDAzZWJpdClcXG4rXFx0XFx0ZmF0YWwoXFxcIiVzIChwYWdlIHN0aWxsICVzKVxcXFxuXFxcIiwgdmVyZGljdCwga2luZC1cXHUwMDNlbmFtZSk7XFxuK1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInRhcmdldCBQRk4gbm8gbG9uZ2VyICVzOyByYWNlZCBiZWZvcmUgaW5qZWN0LCBpbmNvbmNsdXNpdmVcXFxcblxcXCIsXFxuK1xcdFxcdGtpbmQtXFx1MDAzZW5hbWUpO1xcbit9XFxuK1xcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuK3tcXG4rXFx0dWludDY0X3QgcGh5c19hZGRyLCBwZm47XFxuK1xcdGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmtpbmQ7XFxuK1xcdGNvbnN0IGNoYXIgKnZlcmRpY3Q7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcHJpb3I7XFxuK1xcdGludCBhcm1lZCA9IDA7XFxuK1xcbitcXHRraW5kID0gcGFyc2VfYXJncyhhcmdjLCBhcmd2LCBcXHUwMDI2YXJtZWQpO1xcbitcXHRjaGVja19wcmVyZXFzKGFybWVkKTtcXG4rXFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcXG4rXFxuK1xcdHBoeXNfYWRkciA9IHBpY2tfcGh5c19hZGRyKGtpbmQpO1xcbitcXHRwZm4gPSBwaHlzX2FkZHIgLyBwYWdlX3NpemU7XFxuK1xcdGFybV9zeXNjdGwoXFx1MDAyNnByaW9yKTtcXG4rXFxuK1xcdHZlcmRpY3QgPSBpbmplY3RfaHdwb2lzb24oa2luZCwgcGh5c19hZGRyLCBwZm4pO1xcbitcXG4rXFx0LyogTm8gcGFuaWMgZmlyZWQuICBQdXQgdGhlIG1hY2hpbmUgYmFjaywgdGhlbiByZXBvcnQuICovXFxuK1xcdHdyaXRlX3N5c2N0bChwcmlvcik7XFxuK1xcdHVucG9pc29uX3BmbihwZm4pO1xcbitcXHRyZWNoZWNrX2tpbmQoa2luZCwgcGZuLCB2ZXJkaWN0KTtcXG4rXFxuK1xcdHJldHVybiBFWElUX0ZBSUxVUkU7XFxuK31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MDI6MTUuMDM0NjAwMzg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTA2OTQ0NDQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgbmV3IHVzZXItc3BhY2UgdGVzdGluZyB0b29sIGluIHRoZSB0b29scy9tbS8gZGlyZWN0b3J5IGFuZCBkb2VzIG5vdCBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGUzMmVmNjg0ZjhlOTkwZjNjMzMxMzZiMGU3Y2E5YTQwOWQ3YWY3MzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzowMjoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDBmNTEzYjQyYmMxODYuLjJjMzA5YjMyYzk4ZWIgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0xMjA0Myw2ICsxMjA0Myw3IEBAIEY6XHRpbmNsdWRlL2xpbnV4L21lbW9yeS1mYWlsdXJlLmhcbiBGOlx0aW5jbHVkZS90cmFjZS9ldmVudHMvbWVtb3J5LWZhaWx1cmUuaFxuIEY6XHRtbS9od3BvaXNvbi1pbmplY3QuY1xuIEY6XHRtbS9tZW1vcnktZmFpbHVyZS5jXG4rRjpcdHRvb2xzL21tL21lbW9yeS1mYWlsdXJlL1xuIEY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jXG4gXG4gSFlDT04gSFk0NlhYIFRPVUNIU0NSRUVOIFNVUFBPUlRcbmRpZmYgLS1naXQgYS90b29scy9tbS8uZ2l0aWdub3JlIGIvdG9vbHMvbW0vLmdpdGlnbm9yZVxuaW5kZXggMTQ0NmE2NTllNTQwOC4uYjliODBkOTA5ZGI0YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tLy5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL21tLy5naXRpZ25vcmVcbkBAIC0zLDMgKzMsNCBAQCBzbGFiaW5mb1xuIHBhZ2UtdHlwZXNcbiBwYWdlX293bmVyX3NvcnRcbiB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuK21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZVxuaW5kZXggODU4MTg2YTZlZWZkYi4uOWY2ZGU5NTdhOTVhMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tL01ha2VmaWxlXG4rKysgYi90b29scy9tbS9NYWtlZmlsZVxuQEAgLTQsNiArNCw3IEBAXG4gaW5jbHVkZSAuLi9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGVcbiBcbiBCVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4rQlVJTERfVEFSR0VUUys9bWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWNcbiBJTlNUQUxMX1RBUkdFVFMgPSAkKEJVSUxEX1RBUkdFVFMpIHRocG1hcHNcbiBcbiBMSUJfRElSID0gLi4vbGliL2FwaVxuQEAgLTI0LDYgKzI1LDcgQEAgJChMSUJTKTpcbiBcbiBjbGVhbjpcbiBcdCQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4rXHQkKFJNKSBtZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pY1xuIFx0bWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuXG4gXG4gc2JpbmRpciA/PSAvdXNyL3NiaW5cbmRpZmYgLS1naXQgYS90b29scy9tbS9tZW1vcnktZmFpbHVyZS9od3BvaXNvbi1wYW5pYy5jIGIvdG9vbHMvbW0vbWVtb3J5LWZhaWx1cmUvaHdwb2lzb24tcGFuaWMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjc3NzJjNTU0OGFkYWZcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL21tL21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljLmNcbkBAIC0wLDAgKzEsMzU5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIGh3cG9pc29uLXBhbmljOiB0cmlnZ2VyIGFuIGludGVudGlvbmFsIGtlcm5lbCBwYW5pYyBieSBpbmplY3RpbmcgYVxuKyAqIGh3cG9pc29uIGVycm9yIG9uIGEga2VybmVsLW93bmVkIHBhZ2UsIHRvIGNoZWNrIHRoYXRcbisgKiB2bS5wYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlIGZpcmVzLlxuKyAqXG4rICogVGhyZWUga2luZHMgb2Yga2VybmVsLW93bmVkIHBhZ2UgY2FuIGJlIHRhcmdldGVkLCBzZWxlY3RlZCB3aXRoIC1rXG4rICogKGRlZmF1bHQ6IHJvZGF0YSk6XG4rICpcbisgKiAgIHJvZGF0YSAgLSBhIFBHX3Jlc2VydmVkIHBhZ2UgaW4gdGhlIGtlcm5lbCByb2RhdGEgcmFuZ2UsIGZyb21cbisgKiAgICAgICAgICAgICAvcHJvYy9pb21lbSBcIktlcm5lbCByb2RhdGFcIi4gIHg4NiBhbmQgcmlzY3Ygb25seS5cbisgKiAgIHNsYWIgICAgLSBhIHNsYWIgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1NMQUIpLlxuKyAqICAgcGd0YWJsZSAtIGEgcGFnZS10YWJsZSBwYWdlIGZvdW5kIHZpYSAvcHJvYy9rcGFnZWZsYWdzIChLUEZfUEdUQUJMRSkuXG4rICpcbisgKiBzbGFiIGFuZCBwZ3RhYmxlIHdvcmsgZXZlcnl3aGVyZTsgcm9kYXRhIG5lZWRzIGFuIGFyY2hpdGVjdHVyZSB0aGF0XG4rICogcHVibGlzaGVzIHRoZSByb2RhdGEgcmVzb3VyY2UgaW4gL3Byb2MvaW9tZW0uXG4rICpcbisgKiBUaGUgc2xhYiBhbmQgcGd0YWJsZSB2YXJpYW50cyBleGVyY2lzZSBtZW1vcnlfZmFpbHVyZSgpIC1cdTAwM2UgZ2V0X2FueV9wYWdlKClcbisgKiBvbiBhIG5vbiBQR19yZXNlcnZlZCBrZXJuZWwtb3duZWQgcGFnZSwgY2F0Y2hpbmcgcmVncmVzc2lvbnMgd2hlcmVcbisgKiBnZXRfYW55X3BhZ2UoKSBjb2xsYXBzZXMgc3VjaCBwYWdlcyBpbnRvIGEgdHJhbnNpZW50IC1FSU8gaW5zdGVhZCBvZlxuKyAqIC1FTk9UUkVDT1ZFUkFCTEUuXG4rICpcbisgKiBBIHN1Y2Nlc3NmdWwgcnVuIGNyYXNoZXMgdGhlIGtlcm5lbCwgc28gLS15ZXMtcGFuaWMtbXkta2VybmVsIGlzIHJlcXVpcmVkXG4rICogYW5kIHRoZSB0b29sIGlzIG1lYW50IGZvciBhIGRpc3Bvc2FibGUgVk0gKGUuZy4gdmlydG1lLW5nKSB3aXRoIHRoZSBzZXJpYWxcbisgKiBjb25zb2xlIGNhcHR1cmVkLiAgVGhlIHJlc3VsdCBpcyBvYnNlcnZlZCBleHRlcm5hbGx5OiB0aGUga2VybmVsIHBhbmljcyB3aXRoXG4rICogICBcIk1lbW9yeSBmYWlsdXJlOiBcdTAwM2NwZm5cdTAwM2U6IHVucmVjb3ZlcmFibGUgcGFnZVwiXG4rICogUmV0dXJuaW5nIGF0IGFsbCBtZWFucyBubyBwYW5pYyBmaXJlZCwgc28gZXZlcnkgZXhpdCBzdGF0dXMgaXMgbm9uLXplcm86XG4rICogZWl0aGVyIGEgZmFpbHVyZSwgb3IgYW4gaW5jb25jbHVzaXZlIHJ1biB3aGVyZSB0aGUgdGFyZ2V0IFBGTiByYWNlZCB0b1xuKyAqIGFub3RoZXIgcGFnZSB0eXBlIGJlZm9yZSBpbmplY3Rpb24uXG4rICpcbisgKiBBdXRob3I6IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuKyAqL1xuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbisjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0XG4rI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2dldG9wdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRhcmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiLi4vLi4vLi4vaW5jbHVkZS91YXBpL2xpbnV4L2tlcm5lbC1wYWdlLWZsYWdzLmhcIlxuKyNpbmNsdWRlIFwiLi4vLi4vaW5jbHVkZS9saW51eC9zaXplcy5oXCJcbisjaW5jbHVkZSBcdTAwM2NhcGkvZnMvZnMuaFx1MDAzZVxuK1xuKyNkZWZpbmUgU1lTQ1RMX1BBVEhcdFwiL3Byb2Mvc3lzL3ZtL3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcIlxuKyNkZWZpbmUgSU5KRUNUX1BBVEhcdFwiL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2VcIlxuKyNkZWZpbmUgUFJPQ19LUEFHRUZMQUdTXHRcIi9wcm9jL2twYWdlZmxhZ3NcIlxuK1xuKy8qIE5vdCBleHBvcnRlZCBieSB0aGUgdWFwaSBoZWFkZXIsIHNlZSB0b29scy9tbS9wYWdlLXR5cGVzLmMuICovXG4rI2RlZmluZSBLUEZfUkVTRVJWRURcdDMyXG4rXG4rI2RlZmluZSBCSVQobmFtZSlcdCgxVUxMIFx1MDAzY1x1MDAzYyBLUEZfIyNuYW1lKVxuKyNkZWZpbmUgQVJSQVlfU0laRSh4KVx0KHNpemVvZih4KSAvIHNpemVvZigoeClbMF0pKVxuK1xuKy8qIFRoZSBrcGFnZWZsYWdzIGJpdCBpZGVudGlmeWluZyBlYWNoIGtlcm5lbC1vd25lZCBwYWdlIGtpbmQgd2UgdGFyZ2V0LiAqL1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFnZV9raW5kIHtcbitcdGNvbnN0IGNoYXIgKm5hbWU7XG4rXHR1aW50NjRfdCBiaXQ7XG4rfSBwYWdlX2tpbmRzW10gPSB7XG4rXHR7IFwicm9kYXRhXCIsICBCSVQoUkVTRVJWRUQpIH0sXG4rXHR7IFwic2xhYlwiLCAgICBCSVQoU0xBQikgICAgIH0sXG4rXHR7IFwicGd0YWJsZVwiLCBCSVQoUEdUQUJMRSkgIH0sXG4rfTtcbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX3NpemU7XG4rXG4rc3RhdGljIHZvaWQgZmF0YWwoY29uc3QgY2hhciAqeCwgLi4uKVxuK3tcbitcdHZhX2xpc3QgYXA7XG4rXG4rXHR2YV9zdGFydChhcCwgeCk7XG4rXHR2ZnByaW50ZihzdGRlcnIsIHgsIGFwKTtcbitcdHZhX2VuZChhcCk7XG4rXHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3BhZ2VmbGFnc19yZWFkKGludCBmZCwgdWludDY0X3QgcGZuLCB1aW50NjRfdCAqZmxhZ3MpXG4re1xuK1x0c3NpemVfdCBieXRlcztcbitcbitcdGJ5dGVzID0gcHJlYWQoZmQsIGZsYWdzLCBzaXplb2YoKmZsYWdzKSwgKG9mZl90KXBmbiAqIHNpemVvZigqZmxhZ3MpKTtcbitcbitcdHJldHVybiBieXRlcyA9PSBzaXplb2YoKmZsYWdzKSA/IDAgOiAtMTtcbit9XG4rXG4rc3RhdGljIGludCBwaWNrX3JvZGF0YV9waHlzX2FkZHIodWludDY0X3QgKnBoeXNfYWRkcilcbit7XG4rXHR1bnNpZ25lZCBsb25nIGxvbmcgc3RhcnQsIGVuZDtcbitcdGNoYXIgbGluZVsyNTZdLCBsYWJlbFs2NF07XG4rXHRpbnQgcmV0ID0gLTE7XG4rXHRGSUxFICpmO1xuK1xuK1x0ZiA9IGZvcGVuKFwiL3Byb2MvaW9tZW1cIiwgXCJyXCIpO1xuK1x0aWYgKCFmKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHQvKiBTdWItcmVzb3VyY2VzIGFyZSBpbmRlbnRlZDogXCIgIDAyNTAwMDAwLTAyZmZmZmZmIDogS2VybmVsIHJvZGF0YVwiICovXG4rXHR3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkge1xuK1x0XHRpZiAoc3NjYW5mKGxpbmUsIFwiICVsbHgtJWxseCA6ICU2M1teXFxuXVwiLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kLFxuK1x0XHRcdCAgIGxhYmVsKSAhPSAzKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoc3RyY21wKGxhYmVsLCBcIktlcm5lbCByb2RhdGFcIikgfHwgZW5kIFx1MDAzYz0gc3RhcnQpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdC8qIFBhZ2UtYWxpZ24gdXAgYW5kIHJldHVybiB0aGUgZmlyc3QgYnl0ZSBvZiB0aGF0IHBhZ2UuICovXG4rXHRcdCpwaHlzX2FkZHIgPSAoKHN0YXJ0ICsgcGFnZV9zaXplIC0gMSkgLyBwYWdlX3NpemUpICogcGFnZV9zaXplO1xuK1x0XHRyZXQgPSAwO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdGZjbG9zZShmKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGlja19rcGFnZWZsYWdzX3BoeXNfYWRkcih1aW50NjRfdCB3YW50LCB1aW50NjRfdCAqcGh5c19hZGRyKVxuK3tcbitcdHVpbnQ2NF90IHBmbiA9IFNaXzE2TSAvIHBhZ2Vfc2l6ZTtcbitcdHVpbnQ2NF90IGZsYWdzO1xuK1x0aW50IHJldCA9IC0xO1xuK1x0aW50IGZkO1xuK1xuK1x0ZmQgPSBvcGVuKFBST0NfS1BBR0VGTEFHUywgT19SRE9OTFkpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRmb3IgKDsga3BhZ2VmbGFnc19yZWFkKGZkLCBwZm4sIFx1MDAyNmZsYWdzKSA9PSAwOyBwZm4rKykge1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiB3YW50KSBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgQklUKEhXUE9JU09OKSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhKGZsYWdzIFx1MDAyNiBCSVQoTk9QQUdFKSkgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IEJJVChDT01QT1VORF9UQUlMKSkpIHtcbitcdFx0XHQqcGh5c19hZGRyID0gcGZuICogcGFnZV9zaXplO1xuK1x0XHRcdHJldCA9IDA7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcbitcdGNsb3NlKGZkKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmVhZF9zeXNjdGwodW5zaWduZWQgbG9uZyAqdmFsKVxuK3tcbitcdEZJTEUgKmYgPSBmb3BlbihTWVNDVExfUEFUSCwgXCJyXCIpO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghZilcbitcdFx0cmV0dXJuIC0xO1xuK1x0cmV0ID0gZnNjYW5mKGYsIFwiJWx1XCIsIHZhbCkgPT0gMSA/IDAgOiAtMTtcbitcdGZjbG9zZShmKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd3JpdGVfc3lzY3RsKHVuc2lnbmVkIGxvbmcgdmFsKVxuK3tcbitcdEZJTEUgKmYgPSBmb3BlbihTWVNDVExfUEFUSCwgXCJ3XCIpO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghZilcbitcdFx0cmV0dXJuIC0xO1xuK1x0cmV0ID0gZnByaW50ZihmLCBcIiVsdVwiLCB2YWwpIFx1MDAzYyAwID8gLTEgOiAwO1xuK1x0ZmNsb3NlKGYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyogaGFyZF9vZmZsaW5lX3BhZ2UoKSBpbmplY3RzIHdpdGggTUZfU1dfU0lNVUxBVEVELCBzbyB1bnBvaXNvbiBpcyBhbGxvd2VkLiAqL1xuK3N0YXRpYyB2b2lkIHVucG9pc29uX3Bmbih1aW50NjRfdCBwZm4pXG4re1xuK1x0Y2hhciBwYXRoW1BBVEhfTUFYXSwgYnVmWzMyXTtcbitcdGNvbnN0IGNoYXIgKmRlYnVnZnM7XG4rXHRpbnQgZmQsIGxlbjtcbitcbitcdGRlYnVnZnMgPSBkZWJ1Z2ZzX19tb3VudCgpO1xuK1x0aWYgKCFkZWJ1Z2ZzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiJXMvaHdwb2lzb24vdW5wb2lzb24tcGZuXCIsIGRlYnVnZnMpO1xuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcbitcdGlmIChmZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuO1xuK1xuK1x0bGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIweCVsbHhcXG5cIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylwZm4pO1xuK1x0aWYgKHdyaXRlKGZkLCBidWYsIGxlbikgXHUwMDNjIDApXG4rXHRcdHBlcnJvcihcInVucG9pc29uLXBmblwiKTtcbitcdGNsb3NlKGZkKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgKmluamVjdF9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kLFxuK1x0XHRcdFx0ICAgdWludDY0X3QgcGh5c19hZGRyLCB1aW50NjRfdCBwZm4pXG4re1xuK1x0Y2hhciBidWZbMzJdO1xuK1x0aW50IGZkLCBsZW47XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdHByaW50ZihcImluamVjdGluZyBod3BvaXNvbiBhdCBwaHlzIDB4JWxseCAocGZuIDB4JWxseCwga2luZD0lcylcXG5cIixcbitcdCAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBoeXNfYWRkciwgKHVuc2lnbmVkIGxvbmcgbG9uZylwZm4sXG4rXHQgICAgICAga2luZC1cdTAwM2VuYW1lKTtcbitcdHByaW50ZihcImV4cGVjdGluZyBrZXJuZWwgcGFuaWM6ICdNZW1vcnkgZmFpbHVyZTogXHUwMDNjcGZuXHUwMDNlOiB1bnJlY292ZXJhYmxlIHBhZ2UnXFxuXCIpO1xuK1x0ZmZsdXNoKHN0ZG91dCk7XG4rXG4rXHRmZCA9IG9wZW4oSU5KRUNUX1BBVEgsIE9fV1JPTkxZKTtcbitcdGlmIChmZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIFwiY2Fubm90IG9wZW4gXCIgSU5KRUNUX1BBVEg7XG4rXG4rXHRsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIjB4JWxseFwiLCAodW5zaWduZWQgbG9uZyBsb25nKXBoeXNfYWRkcik7XG4rXHRyZXQgPSB3cml0ZShmZCwgYnVmLCBsZW4pO1xuK1x0Y2xvc2UoZmQpO1xuK1xuK1x0aWYgKHJldCAhPSBsZW4pXG4rXHRcdHJldHVybiBcImluamVjdCBmYWlsZWQgYmVmb3JlIHJlYWNoaW5nIHRoZSBwYW5pYyBwYXRoXCI7XG4rXG4rXHRyZXR1cm4gXCJpbmplY3QgcmV0dXJuZWQgd2l0aG91dCBwYW5pYzsgc3lzY3RsIGluZWZmZWN0aXZlXCI7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpsb29rdXBfa2luZChjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdHVuc2lnbmVkIGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwYWdlX2tpbmRzKTsgaSsrKVxuK1x0XHRpZiAoIXN0cmNtcChwYWdlX2tpbmRzW2ldLm5hbWUsIG5hbWUpKVxuK1x0XHRcdHJldHVybiBcdTAwMjZwYWdlX2tpbmRzW2ldO1xuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXG4re1xuK1x0cHJpbnRmKFwiaHdwb2lzb24tcGFuaWMgW29wdGlvbnNdXFxuXCJcbitcdCAgICAgICBcIiAgICAgICAgICAgIC1rfC0ta2luZCBcdTAwM2NraW5kXHUwMDNlICAgICAgIHJvZGF0YSAoZGVmYXVsdCwgeDg2IGFuZCByaXNjdiBvbmx5KSxcXG5cIlxuK1x0ICAgICAgIFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGFiIG9yIHBndGFibGVcXG5cIlxuK1x0ICAgICAgIFwiICAgICAgICAgICAgLS15ZXMtcGFuaWMtbXkta2VybmVsICByZWFsbHkgcnVuIGl0OiB0aGUgbWFjaGluZSBwYW5pY3NcXG5cIlxuK1x0ICAgICAgIFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZXZlcnkgdW5zYXZlZCB3cml0ZSBpcyBsb3N0XFxuXCJcbitcdCAgICAgICBcIiAgICAgICAgICAgIC1ofC0taGVscCAgICAgICAgICAgICAgc2hvdyB0aGlzXFxuXCIpO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7XG4rXHR7IFwia2luZFwiLCAgICAgICAgICAgICAgICAgMSwgTlVMTCwgJ2snIH0sXG4rXHR7IFwieWVzLXBhbmljLW15LWtlcm5lbFwiLCAgMCwgTlVMTCwgJ3knIH0sXG4rXHR7IFwiaGVscFwiLCAgICAgICAgICAgICAgICAgMCwgTlVMTCwgJ2gnIH0sXG4rXHR7IE5VTEwsICAgICAgICAgICAgICAgICAgIDAsIE5VTEwsIDAgfSxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpwYXJzZV9hcmdzKGludCBhcmdjLCBjaGFyICoqYXJndiwgaW50ICphcm1lZClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcGFnZV9raW5kICpraW5kO1xuK1x0Y29uc3QgY2hhciAqbmFtZSA9IFwicm9kYXRhXCI7XG4rXHRpbnQgYztcbitcbitcdHdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIFwiazpoXCIsIG9wdHMsIE5VTEwpKSAhPSAtMSkge1xuK1x0XHRzd2l0Y2ggKGMpIHtcbitcdFx0Y2FzZSAnayc6XG4rXHRcdFx0bmFtZSA9IG9wdGFyZztcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAneSc6XG4rXHRcdFx0KmFybWVkID0gMTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnaCc6XG4rXHRcdFx0dXNhZ2UoKTtcbitcdFx0XHRleGl0KEVYSVRfU1VDQ0VTUyk7XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0dXNhZ2UoKTtcbitcdFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHRcdH1cbitcdH1cbitcbitcdGtpbmQgPSBsb29rdXBfa2luZChuYW1lKTtcbitcdGlmICgha2luZClcbitcdFx0ZmF0YWwoXCJ1bmtub3duIGtpbmQgJyVzJyAoZXhwZWN0ZWQ6IHJvZGF0YXxzbGFifHBndGFibGUpXFxuXCIsXG4rXHRcdCAgICAgIG5hbWUpO1xuK1xuK1x0cmV0dXJuIGtpbmQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGNoZWNrX3ByZXJlcXMoaW50IGFybWVkKVxuK3tcbitcdGlmIChnZXRldWlkKCkpXG4rXHRcdGZhdGFsKFwibXVzdCBydW4gYXMgcm9vdFxcblwiKTtcbitcdGlmIChhY2Nlc3MoU1lTQ1RMX1BBVEgsIFdfT0spKVxuK1x0XHRmYXRhbChcIiVzIG5vdCBwcmVzZW50IChrZXJuZWwgd2l0aG91dCB0aGUgc3lzY3RsPylcXG5cIixcbitcdFx0ICAgICAgU1lTQ1RMX1BBVEgpO1xuK1x0aWYgKGFjY2VzcyhJTkpFQ1RfUEFUSCwgV19PSykpXG4rXHRcdGZhdGFsKFwiJXMgbm90IHByZXNlbnQgKG5vIE1FTU9SWV9GQUlMVVJFPylcXG5cIiwgSU5KRUNUX1BBVEgpO1xuK1x0aWYgKCFhcm1lZClcbitcdFx0ZmF0YWwoXCJ0aGlzIHBhbmljcyB0aGUga2VybmVsOyBwYXNzIC0teWVzLXBhbmljLW15LWtlcm5lbFxcblwiKTtcbit9XG4rXG4rc3RhdGljIHVpbnQ2NF90IHBpY2tfcGh5c19hZGRyKGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmtpbmQpXG4re1xuK1x0dWludDY0X3QgYWRkcjtcbitcbitcdGlmIChraW5kLVx1MDAzZWJpdCA9PSBCSVQoUkVTRVJWRUQpKSB7XG4rXHRcdGlmIChwaWNrX3JvZGF0YV9waHlzX2FkZHIoXHUwMDI2YWRkcikpXG4rXHRcdFx0ZmF0YWwoXCJubyBcXFwiS2VybmVsIHJvZGF0YVxcXCIgaW4gL3Byb2MvaW9tZW07IHRyeSAtayBzbGFiIG9yIC1rIHBndGFibGVcXG5cIik7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAocGlja19rcGFnZWZsYWdzX3BoeXNfYWRkcihraW5kLVx1MDAzZWJpdCwgXHUwMDI2YWRkcikpXG4rXHRcdFx0ZmF0YWwoXCJubyB1c2FibGUgJXMgUEZOIGluICVzXFxuXCIsIGtpbmQtXHUwMDNlbmFtZSxcbitcdFx0XHQgICAgICBQUk9DX0tQQUdFRkxBR1MpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGFkZHI7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFybV9zeXNjdGwodW5zaWduZWQgbG9uZyAqcHJpb3IpXG4re1xuK1x0aWYgKHJlYWRfc3lzY3RsKHByaW9yKSlcbitcdFx0ZmF0YWwoXCJmYWlsZWQgdG8gcmVhZCAlc1xcblwiLCBTWVNDVExfUEFUSCk7XG4rXHRpZiAod3JpdGVfc3lzY3RsKDEpKVxuK1x0XHRmYXRhbChcImZhaWxlZCB0byBlbmFibGUgJXNcXG5cIiwgU1lTQ1RMX1BBVEgpO1xuK31cbitcbitzdGF0aWMgdm9pZCByZWNoZWNrX2tpbmQoY29uc3Qgc3RydWN0IHBhZ2Vfa2luZCAqa2luZCwgdWludDY0X3QgcGZuLFxuK1x0XHRcdCBjb25zdCBjaGFyICp2ZXJkaWN0KVxuK3tcbitcdHVpbnQ2NF90IGZsYWdzO1xuK1x0aW50IGZkLCByZXQ7XG4rXG4rXHRmZCA9IG9wZW4oUFJPQ19LUEFHRUZMQUdTLCBPX1JET05MWSk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdGZhdGFsKFwiJXMgKGNvdWxkIG5vdCBvcGVuICVzKVxcblwiLCB2ZXJkaWN0LCBQUk9DX0tQQUdFRkxBR1MpO1xuK1x0cmV0ID0ga3BhZ2VmbGFnc19yZWFkKGZkLCBwZm4sIFx1MDAyNmZsYWdzKTtcbitcdGNsb3NlKGZkKTtcbitcbitcdGlmIChyZXQpXG4rXHRcdGZhdGFsKFwiJXMgKGNvdWxkIG5vdCByZWNvbmZpcm0gcGFnZSB0eXBlIHZpYSAlcylcXG5cIiwgdmVyZGljdCxcbitcdFx0ICAgICAgUFJPQ19LUEFHRUZMQUdTKTtcbitcdGlmIChmbGFncyBcdTAwMjYga2luZC1cdTAwM2ViaXQpXG4rXHRcdGZhdGFsKFwiJXMgKHBhZ2Ugc3RpbGwgJXMpXFxuXCIsIHZlcmRpY3QsIGtpbmQtXHUwMDNlbmFtZSk7XG4rXG4rXHRmcHJpbnRmKHN0ZGVyciwgXCJ0YXJnZXQgUEZOIG5vIGxvbmdlciAlczsgcmFjZWQgYmVmb3JlIGluamVjdCwgaW5jb25jbHVzaXZlXFxuXCIsXG4rXHRcdGtpbmQtXHUwMDNlbmFtZSk7XG4rfVxuK1xuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbit7XG4rXHR1aW50NjRfdCBwaHlzX2FkZHIsIHBmbjtcbitcdGNvbnN0IHN0cnVjdCBwYWdlX2tpbmQgKmtpbmQ7XG4rXHRjb25zdCBjaGFyICp2ZXJkaWN0O1xuK1x0dW5zaWduZWQgbG9uZyBwcmlvcjtcbitcdGludCBhcm1lZCA9IDA7XG4rXG4rXHRraW5kID0gcGFyc2VfYXJncyhhcmdjLCBhcmd2LCBcdTAwMjZhcm1lZCk7XG4rXHRjaGVja19wcmVyZXFzKGFybWVkKTtcbitcdHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4rXG4rXHRwaHlzX2FkZHIgPSBwaWNrX3BoeXNfYWRkcihraW5kKTtcbitcdHBmbiA9IHBoeXNfYWRkciAvIHBhZ2Vfc2l6ZTtcbitcdGFybV9zeXNjdGwoXHUwMDI2cHJpb3IpO1xuK1xuK1x0dmVyZGljdCA9IGluamVjdF9od3BvaXNvbihraW5kLCBwaHlzX2FkZHIsIHBmbik7XG4rXG4rXHQvKiBObyBwYW5pYyBmaXJlZC4gIFB1dCB0aGUgbWFjaGluZSBiYWNrLCB0aGVuIHJlcG9ydC4gKi9cbitcdHdyaXRlX3N5c2N0bChwcmlvcik7XG4rXHR1bnBvaXNvbl9wZm4ocGZuKTtcbitcdHJlY2hlY2tfa2luZChraW5kLCBwZm4sIHZlcmRpY3QpO1xuK1xuK1x0cmV0dXJuIEVYSVRfRkFJTFVSRTtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzowMjoxNS4wMzQ2MDI3NjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDY5NDA2ODE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBGYWxzZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQgaW50cm9kdWNlcyBhIG5ldyB0b29sLCBzcGVjaWZpY2FsbHkgYHRvb2xzL21tL21lbW9yeS1mYWlsdXJlL2h3cG9pc29uLXBhbmljLmNgLiBUaGlzIHRvb2wgaXMgZGVzaWduZWQgdG8gdHJpZ2dlciBhIGNvbnRyb2xsZWQga2VybmVsIHBhbmljIHRocm91Z2ggYSBoYXJkd2FyZSBwb2lzb25pbmcgZXZlbnQgb24gYSBrZXJuZWwtb3duZWQgcGFnZS4gTXkgaW5pdGlhbCBzY2FuIHNob3dlZCBtb2RpZmljYXRpb25zIHRvIGBNQUlOVEFJTkVSU2AsIHRoZSBgLmdpdGlnbm9yZWAgd2l0aGluIGB0b29scy9tbWAsIHRoZSBgTWFrZWZpbGVgIGluIGB0b29scy9tbWAsIGFuZCwgb2YgY291cnNlLCB0aGUgbmV3IHNvdXJjZSBmaWxlIGl0c2VsZi4gRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmUgKm5vKiBrZXJuZWwgY29kZSBjaGFuZ2VzLiBJJ3ZlIHJlLWNoZWNrZWQgdGhlIGRpZmYgLSBpdCdzIHN0aWxsIGp1c3QgdGhlIGZpbGVzIEkgbWVudGlvbmVkLiBTbywgbm8ga2VybmVsIHNvdXJjZSBjb2RlIGlzIGJlaW5nIHRvdWNoZWQuIEV4Y2VsbGVudC5cblxuTm93LCBJIGhhdmUgdGhlIGluc3RydWN0aW9ucyB0byBmb2xsb3cuIFRoZXkgb3V0bGluZSBjYXNlcyB3aGVyZSBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gV2hpbGUgdGhlIGluc3RydWN0aW9ucyBkb24ndCBleHBsaWNpdGx5IGNhbGwgb3V0IGB0b29scy9gLCB0aGUgbG9naWMgaXMgY2xlYXI6IGNoYW5nZXMgdG8gdXNlci1zcGFjZSB0b29scyBpbiBgdG9vbHMvYCBkb24ndCBhZmZlY3QgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYy4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZ5IG1vZGlmaWNhdGlvbnMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzIHdhcnJhbnQgYFdvcnRoRnV6emluZz10cnVlYC5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGlzIHBhdGNoIGV4Y2x1c2l2ZWx5IGltcGFjdHMgdGhlIGB0b29scy9gIGRpcmVjdG9yeSwgaXQgZG9lcyAqbm90KiBtb2RpZnkgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiBUaGUgY29kZSBpc24ndCBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5LlxuXG5JJ3ZlIHJldmlld2VkIHRoZSBkaWZmIHRob3JvdWdobHksIGFuZCBJJ20gY29uZmlkZW50LiBUaGVyZSdzIG5vdGhpbmcgZWxzZSBvZiBzdWJzdGFuY2UgaGVyZS4gVGhpcyBpcyBhIHNpbXBsZSBhZGRpdGlvbiBvZiBhIHVzZXItc3BhY2UgdG9vbC5cblxuU28sIHRoZSB2ZXJkaWN0IGlzICoqV29ydGhGdXp6aW5nPWZhbHNlKiouIFRoZSByZWFzb24gaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGUgcGF0Y2ggc29sZWx5IGFkZHMgYSB1c2VyLXNwYWNlIHRlc3RpbmcgdG9vbCB3aXRoaW4gdGhlIGB0b29scy9tbS9gIGRpcmVjdG9yeSBhbmQgZG9lc24ndCBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UgY29kZS5cblxuTm93LCBsZXQgbWUgY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE3NCwiT3V0cHV0VG9rZW5zIjo1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjAyOjI0LjEwNDAxMjE2NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgbmV3IHVzZXItc3BhY2UgdGVzdGluZyB0b29sIGluIHRoZSB0b29scy9tbS8gZGlyZWN0b3J5IGFuZCBkb2VzIG5vdCBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyB1c2VyLXNwYWNlIHRlc3RpbmcgdG9vbCBpbiB0aGUgdG9vbHMvbW0vIGRpcmVjdG9yeSBhbmQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwgc291cmNlIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzowMjoyNC4xMDQwNDY5MDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowpkq2g[1] Phase: Running StartedAt: 2026-08-13 13:02:35 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkq2g[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-13 13:02:35 +0000 UTC FinishedAt: 2026-08-13 13:02:41 +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,}