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ZGljdCkgICAgICAgICAjIGl0cyBtZXRhdHlwZQogICAgPHR5cGUgJ3R5cGUnPgogICAgPj4+IGEgPSBkZWZhdWx0ZGljdChkZWZhdWx0PTAuMCkgICAgIyBjcmVhdGUgYW4gaW5zdGFuY2UKICAgID4+PiBwcmludCBhICAgICAgICAgICAgICAgICAgICAgICAgICMgc2hvdyB0aGUgaW5zdGFuY2UKICAgIHt9CiAgICA+Pj4gcHJpbnQgdHlwZShhKSAgICAgICAgICAgICAgICAgICAjIHNob3cgaXRzIHR5cGUKICAgIDxjbGFzcyAndGVzdC50ZXN0X2Rlc2NydHV0LmRlZmF1bHRkaWN0Jz4KICAgID4+PiBwcmludCBhLl9fY2xhc3NfXyAgICAgICAgICAgICAgICMgc2hvdyBpdHMgY2xhc3MKICAgIDxjbGFzcyAndGVzdC50ZXN0X2Rlc2NydHV0LmRlZmF1bHRkaWN0Jz4KICAgID4+PiBwcmludCB0eXBlKGEpIGlzIGEuX19jbGFzc19fICAgICMgaXRzIHR5cGUgaXMgaXRzIGNsYXNzCiAgICBUcnVlCiAgICA+Pj4gYVsxXSA9IDMuMjUgICAgICAgICAgICAgICAgICAgICAjIG1vZGlmeSB0aGUgaW5zdGFuY2UKICAgID4+PiBwcmludCBhICAgICAgICAgICAgICAgICAgICAgICAgICMgc2hvdyB0aGUgbmV3IHZhbHVlCiAgICB7MTogMy4yNX0KICAgID4+PiBwcmludCBhWzFdICAgICAgICAgICAgICAgICAgICAgICMgc2hvdyB0aGUgbmV3IGl0ZW0KICAgIDMuMjUKICAgID4+PiBwcmludCBhWzBdICAgICAgICAgICAgICAgICAgICAgICMgYSBub24tZXhpc3RlbnQgaXRlbQogICAgMC4wCiAgICA+Pj4gYS5tZXJnZSh7MToxMDAsIDI6MjAwfSkgICAgICAgICAjIHVzZSBhIGRpY3QgbWV0aG9kCiAgICA+Pj4gcHJpbnQgc29ydGRpY3QoYSkgICAgICAgICAgICAgICAjIHNob3cgdGhlIHJlc3VsdAogICAgezE6IDMuMjUsIDI6IDIwMH0KICAgID4+PgoKV2UgY2FuIGFsc28gdXNlIHRoZSBuZXcgdHlwZSBpbiBjb250ZXh0cyB3aGVyZSBjbGFzc2ljIG9ubHkgYWxsb3dzICJyZWFsIgpkaWN0aW9uYXJpZXMsIHN1Y2ggYXMgdGhlIGxvY2Fscy9nbG9iYWxzIGRpY3Rpb25hcmllcyBmb3IgdGhlIGV4ZWMKc3RhdGVtZW50IG9yIHRoZSBidWlsdC1pbiBmdW5jdGlvbiBldmFsKCk6CgogICAgPj4+IGRlZiBzb3J0ZWQoc2VxKToKICAgIC4uLiAgICAgc2VxLnNvcnQoa2V5PXN0cikKICAgIC4uLiAgICAgcmV0dXJuIHNlcQogICAgPj4+IHByaW50IHNvcnRlZChhLmtleXMoKSkKICAgIFsxLCAyXQogICAgPj4+IGV4ZWMgInggPSAzOyBwcmludCB4IiBpbiBhCiAgICAzCiAgICA+Pj4gcHJpbnQgc29ydGVkKGEua2V5cygpKQogICAgWzEsIDIsICdfX2J1aWx0aW5zX18nLCAneCddCiAgICA+Pj4gcHJpbnQgYVsneCddCiAgICAzCiAgICA+Pj4KCk5vdyBJJ2xsIHNob3cgdGhhdCBkZWZhdWx0ZGljdCBpbnN0YW5jZXMgaGF2ZSBkeW5hbWljIGluc3RhbmNlIHZhcmlhYmxlcywKanVzdCBsaWtlIGNsYXNzaWMgY2xhc3NlczoKCiAgICA+Pj4gYS5kZWZhdWx0ID0gLTEKICAgID4+PiBwcmludCBhWyJub3dheSJdCiAgICAtMQogICAgPj4+IGEuZGVmYXVsdCA9IC0xMDAwCiAgICA+Pj4gcHJpbnQgYVsibm93YXkiXQogICAgLTEwMDAKICAgID4+PiAnZGVmYXVsdCcgaW4gZGlyKGEpCiAgICBUcnVlCiAgICA+Pj4gYS54MSA9IDEwMAogICAgPj4+IGEueDIgPSAyMDAKICAgID4+PiBwcmludCBhLngxCiAgICAxMDAKICAgID4+PiBkID0gZGlyKGEpCiAgICA+Pj4gJ2RlZmF1bHQnIGluIGQgYW5kICd4MScgaW4gZCBhbmQgJ3gyJyBpbiBkCiAgICBUcnVlCiAgICA+Pj4gcHJpbnQgc29ydGRpY3QoYS5fX2RpY3RfXykKICAgIHsnZGVmYXVsdCc6IC0xMDAwLCAneDEnOiAxMDAsICd4Mic6IDIwMH0KICAgID4+Pgp0DAAAAGRlZmF1bHRkaWN0MmMAAAAAAAAAAAIAAABCAAAAczgAAABlAABaAQBkAABnAQBaAgBkBQBkAQCEAQBaBABkAgCEAABaBQBkAwCEAABaBgBkBACEAABaBwBSUygGAAAAUgQAAABjAgAAAAIAAAACAAAAQwAAAHMaAAAAdAAAagEAfAAAgwEAAXwBAHwAAF8CAGQAAFMoAQAAAE4oAwAAAFICAAAAUgMAAABSBAAAACgCAAAAUgUAAABSBAAAACgAAAAAKAAAAABzWgAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kZXNjcnR1dC5weVIDAAAAawAAAHMEAAAAAAENAWMCAAAAAgAAAAUAAABDAAAAczAAAAB5FAB0AABqAQB8AAB8AQCDAgBTV24VAAR0AgBrCgByKwABAQF8AABqAwBTWGQAAFMoAQAAAE4oBAAAAFICAAAAUgYAAABSBwAAAFIEAAAAKAIAAABSBQAAAFIIAAAAKAAAAAAoAAAAAHNaAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Rlc2NydHV0LnB5UgYAAABvAAAAcwgAAAAAAQMBFAENAWMCAAAAAwAAAAQAAABHAAAAcygAAAB8AgBzFQB8AABqAABmAQB9AgBuAAB0AQBqAgB8AAB8AQB8AgCMAgBTKAEAAABOKAMAAABSBAAAAFICAAAAUgkAAAAoAwAAAFIFAAAAUggAAABSCgAAACgAAAAAKAAAAABzWgAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kZXNjcnR1dC5weVIJAAAAdQAAAHMGAAAAAAEGAQ8BYwIAAAADAAAABAAAAEMAAABzMgAAAHgrAHwBAERdIwB9AgB8AgB8AABrBwByBwB8AQB8AgAZfAAAfAIAPHEHAHEHAFdkAABTKAEAAABOKAAAAAAoAwAAAFIFAAAAUgsAAABSCAAAACgAAAAAKAAAAABzWgAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kZXNjcnR1dC5weVIMAAAAegAAAHMGAAAAAAENAQwBTigIAAAAUg0AAABSDgAAAHQJAAAAX19zbG90c19fUg8AAABSAwAAAFIGAAAAUgkAAABSDAAAACgAAAAAKAAAAAAoAAAAAHNaAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Rlc2NydHV0LnB5UhAAAABoAAAAcwoAAAAGAQkCDAQJBgkFc8kBAAAKClRoZSBfX3Nsb3RzX18gZGVjbGFyYXRpb24gdGFrZXMgYSBsaXN0IG9mIGluc3RhbmNlIHZhcmlhYmxlcywgYW5kIHJlc2VydmVzCnNwYWNlIGZvciBleGFjdGx5IHRoZXNlIGluIHRoZSBpbnN0YW5jZS4gV2hlbiBfX3Nsb3RzX18gaXMgdXNlZCwgb3RoZXIKaW5zdGFuY2UgdmFyaWFibGVzIGNhbm5vdCBiZSBhc3NpZ25lZCB0bzoKCiAgICA+Pj4gYSA9IGRlZmF1bHRkaWN0MihkZWZhdWx0PTAuMCkKICAgID4+PiBhWzFdCiAgICAwLjAKICAgID4+PiBhLmRlZmF1bHQgPSAtMQogICAgPj4+IGFbMV0KICAgIC0xCiAgICA+Pj4gYS54MSA9IDEKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPwogICAgQXR0cmlidXRlRXJyb3I6ICdkZWZhdWx0ZGljdDInIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICd4MScKICAgID4+PgoKcyIIAAAKCkludHJvc3BlY3RpbmcgaW5zdGFuY2VzIG9mIGJ1aWx0LWluIHR5cGVzCgpGb3IgaW5zdGFuY2Ugb2YgYnVpbHQtaW4gdHlwZXMsIHguX19jbGFzc19fIGlzIG5vdyB0aGUgc2FtZSBhcyB0eXBlKHgpOgoKICAgID4+PiB0eXBlKFtdKQogICAgPHR5cGUgJ2xpc3QnPgogICAgPj4+IFtdLl9fY2xhc3NfXwogICAgPHR5cGUgJ2xpc3QnPgogICAgPj4+IGxpc3QKICAgIDx0eXBlICdsaXN0Jz4KICAgID4+PiBpc2luc3RhbmNlKFtdLCBsaXN0KQogICAgVHJ1ZQogICAgPj4+IGlzaW5zdGFuY2UoW10sIGRpY3QpCiAgICBGYWxzZQogICAgPj4+IGlzaW5zdGFuY2UoW10sIG9iamVjdCkKICAgIFRydWUKICAgID4+PgoKVW5kZXIgdGhlIG5ldyBwcm9wb3NhbCwgdGhlIF9fbWV0aG9kc19fIGF0dHJpYnV0ZSBubyBsb25nZXIgZXhpc3RzOgoKICAgID4+PiBbXS5fX21ldGhvZHNfXwogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/CiAgICBBdHRyaWJ1dGVFcnJvcjogJ2xpc3QnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdfX21ldGhvZHNfXycKICAgID4+PgoKSW5zdGVhZCwgeW91IGNhbiBnZXQgdGhlIHNhbWUgaW5mb3JtYXRpb24gZnJvbSB0aGUgbGlzdCB0eXBlOgoKICAgID4+PiBwcHJpbnQucHByaW50KGRpcihsaXN0KSkgICAgIyBsaWtlIGxpc3QuX19kaWN0X18ua2V5cygpLCBidXQgc29ydGVkCiAgICBbJ19fYWRkX18nLAogICAgICdfX2NsYXNzX18nLAogICAgICdfX2NvbnRhaW5zX18nLAogICAgICdfX2RlbGF0dHJfXycsCiAgICAgJ19fZGVsaXRlbV9fJywKICAgICAnX19kZWxzbGljZV9fJywKICAgICAnX19kb2NfXycsCiAgICAgJ19fZXFfXycsCiAgICAgJ19fZm9ybWF0X18nLAogICAgICdfX2dlX18nLAogICAgICdfX2dldGF0dHJpYnV0ZV9fJywKICAgICAnX19nZXRpdGVtX18nLAogICAgICdfX2dldHNsaWNlX18nLAogICAgICdfX2d0X18nLAogICAgICdfX2hhc2hfXycsCiAgICAgJ19faWFkZF9fJywKICAgICAnX19pbXVsX18nLAogICAgICdfX2luaXRfXycsCiAgICAgJ19faXRlcl9fJywKICAgICAnX19sZV9fJywKICAgICAnX19sZW5fXycsCiAgICAgJ19fbHRfXycsCiAgICAgJ19fbXVsX18nLAogICAgICdfX25lX18nLAogICAgICdfX25ld19fJywKICAgICAnX19yZWR1Y2VfXycsCiAgICAgJ19fcmVkdWNlX2V4X18nLAogICAgICdfX3JlcHJfXycsCiAgICAgJ19fcmV2ZXJzZWRfXycsCiAgICAgJ19fcm11bF9fJywKICAgICAnX19zZXRhdHRyX18nLAogICAgICdfX3NldGl0ZW1fXycsCiAgICAgJ19fc2V0c2xpY2VfXycsCiAgICAgJ19fc2l6ZW9mX18nLAogICAgICdfX3N0cl9fJywKICAgICAnX19zdWJjbGFzc2hvb2tfXycsCiAgICAgJ2FwcGVuZCcsCiAgICAgJ2NvdW50JywKICAgICAnZXh0ZW5kJywKICAgICAnaW5kZXgnLAogICAgICdpbnNlcnQnLAogICAgICdwb3AnLAogICAgICdyZW1vdmUnLAogICAgICdyZXZlcnNlJywKICAgICAnc29ydCddCgpUaGUgbmV3IGludHJvc3BlY3Rpb24gQVBJIGdpdmVzIG1vcmUgaW5mb3JtYXRpb24gdGhhbiB0aGUgb2xkIG9uZTogIGluCmFkZGl0aW9uIHRvIHRoZSByZWd1bGFyIG1ldGhvZHMsIGl0IGFsc28gc2hvd3MgdGhlIG1ldGhvZHMgdGhhdCBhcmUKbm9ybWFsbHkgaW52b2tlZCB0aHJvdWdoIHNwZWNpYWwgbm90YXRpb25zLCBlLmcuIF9faWFkZF9fICgrPSksIF9fbGVuX18KKGxlbiksIF9fbmVfXyAoIT0pLiBZb3UgY2FuIGludm9rZSBhbnkgbWV0aG9kIGZyb20gdGhpcyBsaXN0IGRpcmVjdGx5OgoKICAgID4+PiBhID0gWyd0aWMnLCAndGFjJ10KICAgID4+PiBsaXN0Ll9fbGVuX18oYSkgICAgICAgICAgIyBzYW1lIGFzIGxlbihhKQogICAgMgogICAgPj4+IGEuX19sZW5fXygpICAgICAgICAgICAgICAjIGRpdHRvCiAgICAyCiAgICA+Pj4gbGlzdC5hcHBlbmQoYSwgJ3RvZScpICAgICMgc2FtZSBhcyBhLmFwcGVuZCgndG9lJykKICAgID4+PiBhCiAgICBbJ3RpYycsICd0YWMnLCAndG9lJ10KICAgID4+PgoKVGhpcyBpcyBqdXN0IGxpa2UgaXQgaXMgZm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzLgpzdgcAAAoKU3RhdGljIG1ldGhvZHMgYW5kIGNsYXNzIG1ldGhvZHMKClRoZSBuZXcgaW50cm9zcGVjdGlvbiBBUEkgbWFrZXMgaXQgcG9zc2libGUgdG8gYWRkIHN0YXRpYyBtZXRob2RzIGFuZCBjbGFzcwptZXRob2RzLiBTdGF0aWMgbWV0aG9kcyBhcmUgZWFzeSB0byBkZXNjcmliZTogdGhleSBiZWhhdmUgcHJldHR5IG11Y2ggbGlrZQpzdGF0aWMgbWV0aG9kcyBpbiBDKysgb3IgSmF2YS4gSGVyZSdzIGFuIGV4YW1wbGU6CgogICAgPj4+IGNsYXNzIEM6CiAgICAuLi4KICAgIC4uLiAgICAgQHN0YXRpY21ldGhvZAogICAgLi4uICAgICBkZWYgZm9vKHgsIHkpOgogICAgLi4uICAgICAgICAgcHJpbnQgInN0YXRpY21ldGhvZCIsIHgsIHkKCiAgICA+Pj4gQy5mb28oMSwgMikKICAgIHN0YXRpY21ldGhvZCAxIDIKICAgID4+PiBjID0gQygpCiAgICA+Pj4gYy5mb28oMSwgMikKICAgIHN0YXRpY21ldGhvZCAxIDIKCkNsYXNzIG1ldGhvZHMgdXNlIGEgc2ltaWxhciBwYXR0ZXJuIHRvIGRlY2xhcmUgbWV0aG9kcyB0aGF0IHJlY2VpdmUgYW4KaW1wbGljaXQgZmlyc3QgYXJndW1lbnQgdGhhdCBpcyB0aGUgKmNsYXNzKiBmb3Igd2hpY2ggdGhleSBhcmUgaW52b2tlZC4KCiAgICA+Pj4gY2xhc3MgQzoKICAgIC4uLiAgICAgQGNsYXNzbWV0aG9kCiAgICAuLi4gICAgIGRlZiBmb28oY2xzLCB5KToKICAgIC4uLiAgICAgICAgIHByaW50ICJjbGFzc21ldGhvZCIsIGNscywgeQoKICAgID4+PiBDLmZvbygxKQogICAgY2xhc3NtZXRob2QgdGVzdC50ZXN0X2Rlc2NydHV0LkMgMQogICAgPj4+IGMgPSBDKCkKICAgID4+PiBjLmZvbygxKQogICAgY2xhc3NtZXRob2QgdGVzdC50ZXN0X2Rlc2NydHV0LkMgMQoKICAgID4+PiBjbGFzcyBEKEMpOgogICAgLi4uICAgICBwYXNzCgogICAgPj4+IEQuZm9vKDEpCiAgICBjbGFzc21ldGhvZCB0ZXN0LnRlc3RfZGVzY3J0dXQuRCAxCiAgICA+Pj4gZCA9IEQoKQogICAgPj4+IGQuZm9vKDEpCiAgICBjbGFzc21ldGhvZCB0ZXN0LnRlc3RfZGVzY3J0dXQuRCAxCgpUaGlzIHByaW50cyAiY2xhc3NtZXRob2QgX19tYWluX18uRCAxIiBib3RoIHRpbWVzOyBpbiBvdGhlciB3b3JkcywgdGhlCmNsYXNzIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgb2YgZm9vKCkgaXMgdGhlIGNsYXNzIGludm9sdmVkIGluIHRoZQpjYWxsLCBub3QgdGhlIGNsYXNzIGludm9sdmVkIGluIHRoZSBkZWZpbml0aW9uIG9mIGZvbygpLgoKQnV0IG5vdGljZSB0aGlzOgoKICAgID4+PiBjbGFzcyBFKEMpOgogICAgLi4uICAgICBAY2xhc3NtZXRob2QKICAgIC4uLiAgICAgZGVmIGZvbyhjbHMsIHkpOiAjIG92ZXJyaWRlIEMuZm9vCiAgICAuLi4gICAgICAgICBwcmludCAiRS5mb28oKSBjYWxsZWQiCiAgICAuLi4gICAgICAgICBDLmZvbyh5KQoKICAgID4+PiBFLmZvbygxKQogICAgRS5mb28oKSBjYWxsZWQKICAgIGNsYXNzbWV0aG9kIHRlc3QudGVzdF9kZXNjcnR1dC5DIDEKICAgID4+PiBlID0gRSgpCiAgICA+Pj4gZS5mb28oMSkKICAgIEUuZm9vKCkgY2FsbGVkCiAgICBjbGFzc21ldGhvZCB0ZXN0LnRlc3RfZGVzY3J0dXQuQyAxCgpJbiB0aGlzIGV4YW1wbGUsIHRoZSBjYWxsIHRvIEMuZm9vKCkgZnJvbSBFLmZvbygpIHdpbGwgc2VlIGNsYXNzIEMgYXMgaXRzCmZpcnN0IGFyZ3VtZW50LCBub3QgY2xhc3MgRS4gVGhpcyBpcyB0byBiZSBleHBlY3RlZCwgc2luY2UgdGhlIGNhbGwKc3BlY2lmaWVzIHRoZSBjbGFzcyBDLiBCdXQgaXQgc3RyZXNzZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZSBjbGFzcwptZXRob2RzIGFuZCBtZXRob2RzIGRlZmluZWQgaW4gbWV0YWNsYXNzZXMgKHdoZXJlIGFuIHVwY2FsbCB0byBhIG1ldGFtZXRob2QKd291bGQgcGFzcyB0aGUgdGFyZ2V0IGNsYXNzIGFzIGFuIGV4cGxpY2l0IGZpcnN0IGFyZ3VtZW50KS4KcygGAAAKCkF0dHJpYnV0ZXMgZGVmaW5lZCBieSBnZXQvc2V0IG1ldGhvZHMKCgogICAgPj4+IGNsYXNzIHByb3BlcnR5KG9iamVjdCk6CiAgICAuLi4KICAgIC4uLiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdldCwgc2V0PU5vbmUpOgogICAgLi4uICAgICAgICAgc2VsZi5fX2dldCA9IGdldAogICAgLi4uICAgICAgICAgc2VsZi5fX3NldCA9IHNldAogICAgLi4uCiAgICAuLi4gICAgIGRlZiBfX2dldF9fKHNlbGYsIGluc3QsIHR5cGU9Tm9uZSk6CiAgICAuLi4gICAgICAgICByZXR1cm4gc2VsZi5fX2dldChpbnN0KQogICAgLi4uCiAgICAuLi4gICAgIGRlZiBfX3NldF9fKHNlbGYsIGluc3QsIHZhbHVlKToKICAgIC4uLiAgICAgICAgIGlmIHNlbGYuX19zZXQgaXMgTm9uZToKICAgIC4uLiAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvciwgInRoaXMgYXR0cmlidXRlIGlzIHJlYWQtb25seSIKICAgIC4uLiAgICAgICAgIHJldHVybiBzZWxmLl9fc2V0KGluc3QsIHZhbHVlKQoKTm93IGxldCdzIGRlZmluZSBhIGNsYXNzIHdpdGggYW4gYXR0cmlidXRlIHggZGVmaW5lZCBieSBhIHBhaXIgb2YgbWV0aG9kcywKZ2V0eCgpIGFuZCBzZXR4KCk6CgogICAgPj4+IGNsYXNzIEMob2JqZWN0KToKICAgIC4uLgogICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAuLi4gICAgICAgICBzZWxmLl9feCA9IDAKICAgIC4uLgogICAgLi4uICAgICBkZWYgZ2V0eChzZWxmKToKICAgIC4uLiAgICAgICAgIHJldHVybiBzZWxmLl9feAogICAgLi4uCiAgICAuLi4gICAgIGRlZiBzZXR4KHNlbGYsIHgpOgogICAgLi4uICAgICAgICAgaWYgeCA8IDA6IHggPSAwCiAgICAuLi4gICAgICAgICBzZWxmLl9feCA9IHgKICAgIC4uLgogICAgLi4uICAgICB4ID0gcHJvcGVydHkoZ2V0eCwgc2V0eCkKCkhlcmUncyBhIHNtYWxsIGRlbW9uc3RyYXRpb246CgogICAgPj4+IGEgPSBDKCkKICAgID4+PiBhLnggPSAxMAogICAgPj4+IHByaW50IGEueAogICAgMTAKICAgID4+PiBhLnggPSAtMTAKICAgID4+PiBwcmludCBhLngKICAgIDAKICAgID4+PgoKSG1tIC0tIHByb3BlcnR5IGlzIGJ1aWx0aW4gbm93LCBzbyBsZXQncyB0cnkgaXQgdGhhdCB3YXkgdG9vLgoKICAgID4+PiBkZWwgcHJvcGVydHkgICMgdW5tYXNrIHRoZSBidWlsdGluCiAgICA+Pj4gcHJvcGVydHkKICAgIDx0eXBlICdwcm9wZXJ0eSc+CgogICAgPj4+IGNsYXNzIEMob2JqZWN0KToKICAgIC4uLiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgLi4uICAgICAgICAgc2VsZi5fX3ggPSAwCiAgICAuLi4gICAgIGRlZiBnZXR4KHNlbGYpOgogICAgLi4uICAgICAgICAgcmV0dXJuIHNlbGYuX194CiAgICAuLi4gICAgIGRlZiBzZXR4KHNlbGYsIHgpOgogICAgLi4uICAgICAgICAgaWYgeCA8IDA6IHggPSAwCiAgICAuLi4gICAgICAgICBzZWxmLl9feCA9IHgKICAgIC4uLiAgICAgeCA9IHByb3BlcnR5KGdldHgsIHNldHgpCgoKICAgID4+PiBhID0gQygpCiAgICA+Pj4gYS54ID0gMTAKICAgID4+PiBwcmlu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