public inbox for gcc-prs@sourceware.org help / color / mirror / Atom feed
From: bangerth@ticam.utexas.edu To: gcc-gnats@gcc.gnu.org Subject: optimization/8392: [-fnew-ra] SegFault in Date: Tue, 29 Oct 2002 13:06:00 -0000 [thread overview] Message-ID: <20021029210235.2088.qmail@sources.redhat.com> (raw) >Number: 8392 >Category: optimization >Synopsis: [-fnew-ra] SegFault in >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Tue Oct 29 13:06:01 PST 2002 >Closed-Date: >Last-Modified: >Originator: Wolfgang Bangerth >Release: unknown-1.0 >Organization: >Environment: gcc CVS from 2002/10/28, Linux i686 unknown >Description: The attached code SegFaults with present CVS and when using -fnew-ra, -O2, and -funroll-all-loops together. The segfault trashes the stack so thoroughly, that I cannot get a backtrace beyond the lowest frame, which is #0 0x0828efc6 in loop_invariant_p (loop=0x8850e88, x=0x4277400c) at ../../gcc-3.3/gcc/loop.c:3276 I am sorry, but I cannot seem to reduce the code much further.Even removing the line numbers the preprocessor introduced seem to make the bug go away... Hope this helps somewhat anyway. Regards Wolfgang >How-To-Repeat: 2/deal.II> time c++ -fnew-ra -fpreprocessed -O2 -funroll-all-loops -c x.ii source/data_out_base.cc: In static member function `static void DataOutBase::write_gnuplot(const std::vector<DataOutBase::Patch<dim, spacedim>, std::allocator<DataOutBase::Patch<dim, spacedim> > >&, const std::vector<std::string, std::allocator<std::string> >&, const DataOutBase::GnuplotFlags&, std::ostream&) [with int dim = 3, int spacedim = 4]': source/data_out_base.cc:3567: instantiated from `void DataOutInterface<dim, spacedim>::write_gnuplot(std::ostream&) const [with int dim = 3, int spacedim = 4]' source/data_out_base.cc:3952: instantiated from here source/data_out_base.cc:1261: internal compiler error: Speicherzugriffsfehler Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions. >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="x.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="x.ii" IyAxICJzb3VyY2UvZGF0YV9vdXRfYmFzZS5jYyIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21t YW5kIGxpbmU+IgojIDEgInNvdXJjZS9kYXRhX291dF9iYXNlLmNjIgojIDE1ICJzb3VyY2UvZGF0 YV9vdXRfYmFzZS5jYyIKIyAxICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jh c2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIgMQojIDE3ICIvaG9tZS9iYW5nZXJ0aC9w L2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKIyAx ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2Nv bmZpZy5oIiAxCiMgMjE5ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2Uv aW5jbHVkZS9iYXNlL2NvbmZpZy5oIgpuYW1lc3BhY2UgZGVhbF9JSV9udW1iZXJzIHsKCgoKICBz dGF0aWMgY29uc3QgZG91YmxlIEUgPSAyLjcxODI4MTgyODQ1OTA0NTIzNTQ7CgoKCgogIHN0YXRp YyBjb25zdCBkb3VibGUgTE9HMkUgPSAxLjQ0MjY5NTA0MDg4ODk2MzQwNzQ7CgoKCgogIHN0YXRp YyBjb25zdCBkb3VibGUgTE9HMTBFID0gMC40MzQyOTQ0ODE5MDMyNTE4Mjc2NTsKCgoKCiAgc3Rh dGljIGNvbnN0IGRvdWJsZSBMTjIgPSAwLjY5MzE0NzE4MDU1OTk0NTMwOTQyOwoKCgoKICBzdGF0 aWMgY29uc3QgZG91YmxlIExOMTAgPSAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAyOwoKCgoKICBzdGF0 aWMgY29uc3QgZG91YmxlIFBJID0gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjsKCgoKCiAgc3RhdGlj IGNvbnN0IGRvdWJsZSBQSV8yID0gMS41NzA3OTYzMjY3OTQ4OTY2MTkyMzsKCgoKCiAgc3RhdGlj IGNvbnN0IGRvdWJsZSBQSV80ID0gMC43ODUzOTgxNjMzOTc0NDgzMDk2MjsKCgoKCiAgc3RhdGlj IGNvbnN0IGRvdWJsZSBTUVJUMiA9IDEuNDE0MjEzNTYyMzczMDk1MDQ4ODA7CgoKCgogIHN0YXRp YyBjb25zdCBkb3VibGUgU1FSVDFfMiA9IDAuNzA3MTA2NzgxMTg2NTQ3NTI0NDA7Cn07CiMgMTgg Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0 YV9vdXRfYmFzZS5oIiAyCiMgMSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9i YXNlL2luY2x1ZGUvYmFzZS9wb2ludC5oIiAxCiMgMTggIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5J SS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcG9pbnQuaCIKIyAxICIvaG9tZS9iYW5nZXJ0 aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2V4Y2VwdGlvbnMuaCIgMQoj IDE5ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNl L2V4Y2VwdGlvbnMuaCIKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk ZS9jKysvMy4zL2V4Y2VwdGlvbiIgMSAzCiMgNDAgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z LXByZS9pbmNsdWRlL2MrKy8zLjMvZXhjZXB0aW9uIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3Bh Y2Ugc3RkCnsKIyA1MiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr LzMuMy9leGNlcHRpb24iIDMKICBjbGFzcyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgZXhj ZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7CgoK ICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICBj bGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBi YWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbigp IHRocm93KCk7CiAgfTsKCgogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsK CiAgdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCgogIHRlcm1pbmF0ZV9o YW5kbGVyIHNldF90ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lk IHRlcm1pbmF0ZSgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogIHVuZXhwZWN0 ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7CgoK ICB2b2lkIHVuZXhwZWN0ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CiMgMTAw ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2V4Y2VwdGlv biIgMwogIGJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uKCkgdGhyb3coKTsKfQoKbmFtZXNwYWNlIF9f Z251X2N4eAp7CiMgMTEzICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j KysvMy4zL2V4Y2VwdGlvbiIgMwogIHZvaWQgX192ZXJib3NlX3Rlcm1pbmF0ZV9oYW5kbGVyICgp Owp9Cgp9CiMgMjAgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs dWRlL2Jhc2UvZXhjZXB0aW9ucy5oIiAyCgoKCgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvb3N0cmVhbSIgMSAzCiMgNDQgIi9ob21lL2JhbmdlcnRo L2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvb3N0cmVhbSIgMwoKIyAxICIvaG9tZS9i YW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2lvcyIgMSAzCiMgNDMgIi9o b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaW9zIiAzCgojIDEg Ii9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaW9zZndkIiAx IDMKIyA0MyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9p b3Nmd2QiIDMKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr LzMuMy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNCAiL2hvbWUv YmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4LWdu dS9iaXRzL2MrK2NvbmZpZy5oIiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl L2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL29zX2RlZmluZXMuaCIgMSAz CiMgMzkgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaTY4 Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVh dHVyZXMuaCIgMSAzIDQKIyAyODMgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzIDQKIyAxICIv dXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDEgMyA0CiMgMjg0ICIvdXNyL2luY2x1ZGUvZmVhdHVy ZXMuaCIgMiAzIDQKIyAzMTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzIDQKIyAxICIvdXNy L2luY2x1ZGUvZ251L3N0dWJzLmgiIDEgMyA0CiMgMzEzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu aCIgMiAzIDQKIyA0MCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr LzMuMy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL29zX2RlZmluZXMuaCIgMiAzCiMgMzUgIi9ob21l L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1n bnUvYml0cy9jKytjb25maWcuaCIgMiAzCiMgNDUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z LXByZS9pbmNsdWRlL2MrKy8zLjMvaW9zZndkIiAyIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4v Z2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RyaW5nZndkLmgiIDEgMwojIDQzICIv aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RyaW5n ZndkLmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAg c3RydWN0IGNoYXJfdHJhaXRzOwoKICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czxjaGFy PjsKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD47CgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBhbGxvY2F0b3I7CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAg ICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFz aWNfc3RyaW5nOwoKCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOwoKICB0eXBl ZGVmIGJhc2ljX3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwp9CiMgNDYgIi9ob21lL2JhbmdlcnRo L2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaW9zZndkIiAyIDMKIyAxICIvaG9tZS9i YW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvZnBvcy5oIiAxIDMK IyA0MyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRz L2Zwb3MuaCIgMwoKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j KysvMy4zL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMSAzCiMgMzUgIi9ob21lL2Jh bmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUv Yml0cy9jKytpby5oIiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1 ZGUvYysrLzMuMy9jc3RkaW8iIDEgMwojIDQ4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1w cmUvaW5jbHVkZS9jKysvMy4zL2NzdGRpbyIgMwoKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9jc3RkZGVmIiAxIDMKIyA0NyAiL2hvbWUvYmFuZ2Vy dGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9jc3RkZGVmIiAzCgojIDEgIi9ob21l L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAxNTEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt My4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRkZWYu aCIgMyA0CnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKIyAyMTMgIi9ob21lL2JhbmdlcnRoL2Jpbi9n Y2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRk ZWYuaCIgMyA0CnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyA0OSAiL2hvbWUvYmFuZ2Vy dGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9jc3RkZGVmIiAyIDMKCm5hbWVzcGFj ZSBzdGQKewogIHVzaW5nIDo6cHRyZGlmZl90OwogIHVzaW5nIDo6c2l6ZV90Owp9CiMgNTEgIi9o b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvY3N0ZGlvIiAyIDMK CiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDEgMyA0CiMgMzkgIi9ob21lL2JhbmdlcnRo L2Jpbi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVk ZS9zdGRpby5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj Yy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGRl Zi5oIiAxIDMgNAojIDQ0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1s aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzIDQKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw ZXMuaCIgMyA0CiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDMwICIvdXNy L2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMgNAoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3Vf Y2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQg aW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5zaW9u X18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5zaW9u X18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2luY2x1ZGUvYml0 cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNp Z25lZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsK dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50 IF9faW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9fZXh0ZW5zaW9u X18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18g dHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVh ZF90ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsKdHlwZWRlZiBfX3Vf aW50IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVmIF9fdV9sb25nIF9f aW5vX3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3VfaW50IF9fbmxpbmtf dDsKdHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90Owp0 eXBlZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5cGVkZWYgX191X2xv bmcgX19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02NF90Owp0eXBlZGVmIF9fdV9p bnQgX19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2Zz aWRfdDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0 eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRz X3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3 YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCgp0eXBlZGVmIGludCBfX2Nsb2Nr aWRfdDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoKCgoKCnR5cGVkZWYgaW50IF9fa2V5X3Q7 CgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKCnR5cGVkZWYgbG9u ZyBpbnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250X3Q7CnR5cGVk ZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2Jsa2NudF90 Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBf X2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRfdDsKCgp0eXBlZGVm IF9fdV9xdWFkX3QgX19pbm82NF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2NF90OwoKCnR5 cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9f dF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVk IGludCBfX3NvY2tsZW5fdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz LmgiIDEgMyA0CiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzIDQKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMgNAojIDY4ICIvdXNyL2luY2x1ZGUvYml0 cy9zY2hlZC5oIiAzIDQKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9w cmlvcml0eTsKICB9OwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMiAz IDQKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGlu dCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0 ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsK ICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hl ZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3Bl OwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9f c3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlw ZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRo cmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1 Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2ln bmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jl c2VydmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGlu dCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVh ZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJl YWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRl ZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBf X3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRl cjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBf X3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9 IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsK ICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2b2xh dGlsZSBpbnQgcHRocmVhZF9zcGlubG9ja190OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3Qg X3B0aHJlYWRfZmFzdGxvY2sgX19iYV9sb2NrOwogIGludCBfX2JhX3JlcXVpcmVkOwogIGludCBf X2JhX3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19iYV93YWl0aW5nOwp9IHB0aHJlYWRfYmFy cmllcl90OwoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfYmFy cmllcmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKIyAx NDQgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMyA0CiMgNDYgIi9ob21lL2JhbmdlcnRo L2Jpbi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVk ZS9zdGRpby5oIiAyIDMgNAojIDU0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkaW8uaCIgMyA0CnR5cGVk ZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7CiMgNjQgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z LXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRpby5oIiAz IDQKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgX19GSUxFOwojIDc0ICIvaG9tZS9iYW5nZXJ0aC9i aW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUv c3RkaW8uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMyA0CiMgMzIgIi91c3Iv aW5jbHVkZS9saWJpby5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMyA0 CiMgMTQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMyA0CiMgMSAiL2hvbWUvYmFuZ2VydGgv YmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRl L3N0ZGRlZi5oIiAxIDMgNAojIDM1NCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgi IDIgMyA0CiMgMjQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMyA0CiMgMSAiL3Vzci9pbmNs dWRlL3djaGFyLmgiIDEgMyA0CiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKIyAxICIv aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5o IiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMgNAojIDUxICIvdXNy L2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQKIyA2NyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNAp0 eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193 Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CiMgMjUg Ii91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzIDQKCnR5cGVkZWYgc3RydWN0CnsKICBfX29m Zl90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0 cnVjdAp7CiAgX19vZmY2NF90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBv czY0X3Q7CiMgNDQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMyA0CiMgMSAiL3Vzci9pbmNs dWRlL2djb252LmgiIDEgMyA0CiMgMjggIi91c3IvaW5jbHVkZS9nY29udi5oIiAzIDQKIyAxICIv dXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzIDQKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMg NAojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyA0OSAiL3Vzci9pbmNsdWRl L3djaGFyLmgiIDIgMyA0CiMgMjkgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMgNAoKCiMgMSAi L2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDMyICIvdXNyL2luY2x1ZGUvZ2NvbnYu aCIgMiAzIDQKCgoKCgplbnVtCnsKICBfX0dDT05WX09LID0gMCwKICBfX0dDT05WX05PQ09OViwK ICBfX0dDT05WX05PREIsCiAgX19HQ09OVl9OT01FTSwKCiAgX19HQ09OVl9FTVBUWV9JTlBVVCwK ICBfX0dDT05WX0ZVTExfT1VUUFVULAogIF9fR0NPTlZfSUxMRUdBTF9JTlBVVCwKICBfX0dDT05W X0lOQ09NUExFVEVfSU5QVVQsCgogIF9fR0NPTlZfSUxMRUdBTF9ERVNDUklQVE9SLAogIF9fR0NP TlZfSU5URVJOQUxfRVJST1IKfTsKCgoKZW51bQp7CiAgX19HQ09OVl9JU19MQVNUID0gMHgwMDAx LAogIF9fR0NPTlZfSUdOT1JFX0VSUk9SUyA9IDB4MDAwMgp9OwoKCgpzdHJ1Y3QgX19nY29udl9z dGVwOwpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGE7CnN0cnVjdCBfX2djb252X2xvYWRlZF9vYmpl Y3Q7CnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGE7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl9m Y3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLCBfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGNoYXIgKiosIHNpemVfdCAqLCBpbnQsIGludCk7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2lu aXRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl9l bmRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252 X3RyYW5zX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLCB1 bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19jb250ZXh0X2ZjdCkgKHZvaWQgKiwg X19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CgoK dHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX3F1ZXJ5X2ZjdCkgKF9fY29uc3QgY2hhciAqLCBf X2NvbnN0IGNoYXIgKioqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19pbml0X2ZjdCkgKHZvaWQg KiosIGNvbnN0IGNoYXIgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkg KHZvaWQgKik7CgpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhCnsKCiAgX19nY29udl90cmFuc19m Y3QgX190cmFuc19mY3Q7CiAgX19nY29udl90cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5zX2NvbnRl eHRfZmN0OwogIF9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAgdm9pZCAq X19kYXRhOwogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fbmV4dDsKfTsKCgoKc3RydWN0 IF9fZ2NvbnZfc3RlcAp7CiAgc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdCAqX19zaGxpYl9o YW5kbGU7CiAgX19jb25zdCBjaGFyICpfX21vZG5hbWU7CgogIGludCBfX2NvdW50ZXI7CgogIGNo YXIgKl9fZnJvbV9uYW1lOwogIGNoYXIgKl9fdG9fbmFtZTsKCiAgX19nY29udl9mY3QgX19mY3Q7 CiAgX19nY29udl9pbml0X2ZjdCBfX2luaXRfZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9m Y3Q7CgoKCiAgaW50IF9fbWluX25lZWRlZF9mcm9tOwogIGludCBfX21heF9uZWVkZWRfZnJvbTsK ICBpbnQgX19taW5fbmVlZGVkX3RvOwogIGludCBfX21heF9uZWVkZWRfdG87CgoKICBpbnQgX19z dGF0ZWZ1bDsKCiAgdm9pZCAqX19kYXRhOwp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEK ewogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmOwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5k OwoKCgogIGludCBfX2ZsYWdzOwoKCgogIGludCBfX2ludm9jYXRpb25fY291bnRlcjsKCgoKICBp bnQgX19pbnRlcm5hbF91c2U7CgogIF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3RhdGVf dCBfX3N0YXRlOwoKCgogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07CgoK CnR5cGVkZWYgc3RydWN0IF9fZ2NvbnZfaW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVj dCBfX2djb252X3N0ZXAgKl9fc3RlcHM7CiAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29udl9z dGVwX2RhdGEgX19kYXRhIFtdOwp9ICpfX2djb252X3Q7CiMgNDUgIi91c3IvaW5jbHVkZS9fR19j b25maWcuaCIgMiAzIDQKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2Nk OwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBf X2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0 eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkp Owp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9f KSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19t b2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRy aWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CiMgMzMgIi91c3IvaW5jbHVkZS9saWJpby5o IiAyIDMgNAojIDUzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMyA0CiMgMSAiL2hvbWUvYmFuZ2Vy dGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNs dWRlL3N0ZGFyZy5oIiAxIDMgNAojIDQzICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkYXJnLmgiIDMgNAp0 eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDU0ICIvdXNyL2luY2x1 ZGUvbGliaW8uaCIgMiAzIDQKIyAxNjAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKc3RydWN0 IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNzAgIi91c3IvaW5jbHVkZS9saWJpby5o IiAzIDQKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewog IHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgog IGludCBfcG9zOwojIDE5MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNAp9OwoKCmVudW0gX19j b2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2RlY3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9f Y29kZWN2dF9lcnJvciwKICBfX2NvZGVjdnRfbm9jb252Cn07CgoKCgpzdHJ1Y3QgX0lPX2NvZGVj dnQKewogIHZvaWQgKCpfX2NvZGVjdnRfZGVzdHIpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAg ZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX291dCkgKHN0cnVjdCBfSU9fY29k ZWN2dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21i c3RhdGVfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCB3Y2hhcl90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHdjaGFyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgd2NoYXJfdCAqKiwgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiopOwogIGVudW0gX19jb2RlY3Z0 X3Jlc3VsdCAoKl9fY29kZWN2dF9kb191bnNoaWZ0KSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVf dCAqLCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICosIGNoYXIgKiopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2 dF9kb19pbikgKHN0cnVjdCBfSU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKiwgd2NoYXJf dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg Kiwgd2NoYXJfdCAqKik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2VuY29kaW5nKSAoc3RydWN0IF9J T19jb2RlY3Z0ICopOwogIGludCAoKl9fY29kZWN2dF9kb19hbHdheXNfbm9jb252KSAoc3RydWN0 IF9JT19jb2RlY3Z0ICopOwogIGludCAoKl9fY29kZWN2dF9kb19sZW5ndGgpIChzdHJ1Y3QgX0lP X2NvZGVjdnQgKiwgX19tYnN0YXRlX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiAgaW50ICgqX19jb2RlY3Z0X2Rv X21heF9sZW5ndGgpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CgogIF9HX2ljb252X3QgX19jZF9p bjsKICBfR19pY29udl90IF9fY2Rfb3V0Owp9OwoKCnN0cnVjdCBfSU9fd2lkZV9kYXRhCnsKICB3 Y2hhcl90ICpfSU9fcmVhZF9wdHI7CiAgd2NoYXJfdCAqX0lPX3JlYWRfZW5kOwogIHdjaGFyX3Qg Kl9JT19yZWFkX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX2Jhc2U7CiAgd2NoYXJfdCAqX0lP X3dyaXRlX3B0cjsKICB3Y2hhcl90ICpfSU9fd3JpdGVfZW5kOwogIHdjaGFyX3QgKl9JT19idWZf YmFzZTsKICB3Y2hhcl90ICpfSU9fYnVmX2VuZDsKCiAgd2NoYXJfdCAqX0lPX3NhdmVfYmFzZTsK ICB3Y2hhcl90ICpfSU9fYmFja3VwX2Jhc2U7CgogIHdjaGFyX3QgKl9JT19zYXZlX2VuZDsKCiAg X19tYnN0YXRlX3QgX0lPX3N0YXRlOwogIF9fbWJzdGF0ZV90IF9JT19sYXN0X3N0YXRlOwogIHN0 cnVjdCBfSU9fY29kZWN2dCBfY29kZWN2dDsKCiAgd2NoYXJfdCBfc2hvcnRidWZbMV07CgogIHN0 cnVjdCBfSU9fanVtcF90ICpfd2lkZV92dGFibGU7Cn07CgoKc3RydWN0IF9JT19GSUxFIHsKICBp bnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9fcmVhZF9wdHI7CiAgY2hhciogX0lPX3JlYWRfZW5k OwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hhciog X0lPX3dyaXRlX3B0cjsKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwogIGNoYXIqIF9JT19idWZfYmFz ZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpf SU9fYmFja3VwX2Jhc2U7CiAgY2hhciAqX0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtl ciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsK ICBpbnQgX2Jsa3NpemU7CiAgX19vZmZfdCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9y dCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9y dGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190ICpfbG9jazsKIyAzMDUgIi91c3IvaW5jbHVkZS9saWJp by5oIiAzIDQKICBfX29mZjY0X3QgX29mZnNldDsKCgogIHN0cnVjdCBfSU9fY29kZWN2dCAqX2Nv ZGVjdnQ7CiAgc3RydWN0IF9JT193aWRlX2RhdGEgKl93aWRlX2RhdGE7CgoKCgogIGludCBfbW9k ZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQg KildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJ TEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18y XzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkZXJyXzsK IyAzNDQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKdHlwZWRlZiBfX3NzaXplX3QgX19pb19y ZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoK CgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19j b25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBf X29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2 b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9faW9fcmVhZF9mbiBjb29raWVfcmVhZF9mdW5j dGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29va2llX3dyaXRlX2Z1bmN0aW9uX3Q7CnR5 cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19j bG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19p b19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVfZm4gKndyaXRlOwogIF9faW9fc2Vla19mbiAq c2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsKfSBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190 Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgY29va2llX2lvX2Z1bmN0aW9uc190 OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpleHRlcm4gdm9pZCBfSU9fY29va2llX2luaXQg KHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2ZpbGUsIGludCBfX3JlYWRfd3JpdGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19jb29raWUsIF9JT19jb29raWVfaW9fZnVu Y3Rpb25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxv dyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikg dGhyb3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAoX0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAo KTsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRl cm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBf X3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90KSB0aHJvdyAoKTsKIyA0MjYgIi91c3IvaW5j bHVkZS9saWJpby5oIiAzIDQKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRo cm93ICgpOwpleHRlcm4gaW50IF9JT19wdXRjIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhy b3cgKCk7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0 ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50 IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g dm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lP X2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxv Y2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKIyA0NTYgIi91c3IvaW5jbHVkZS9saWJpby5o IiAzIDQKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25z dCBjaGFyICogX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xp c3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChf SU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAg ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBf SU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6 ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0 ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGlu dCkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9f b2ZmNjRfdCwgaW50KSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVh IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IF9JT19nZXR3YyAoX0lPX0ZJ TEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9JT19wdXR3YyAod2NoYXJfdCBfX3dj LCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Z3aWRlIChfSU9fRklM RSAqX19mcCwgaW50IF9fbW9kZSkgdGhyb3cgKCk7CiMgNTA1ICIvdXNyL2luY2x1ZGUvbGliaW8u aCIgMyA0CmV4dGVybiBpbnQgX0lPX3Zmd3NjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNv bnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVj X3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3Zmd3By aW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93ICgpOwpleHRlcm4g X19zc2l6ZV90IF9JT193cGFkbiAoX0lPX0ZJTEUgKiwgd2ludF90LCBfX3NzaXplX3QpIHRocm93 ICgpOwpleHRlcm4gdm9pZCBfSU9fZnJlZV93YmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93 ICgpOwoKCgp9CiMgNzUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRpby5oIiAyIDMgNAoKCgoKdHlwZWRl ZiBfX2dudWNfdmFfbGlzdCBfX25vdF92YV9saXN0X187CiMgODkgIi9ob21lL2JhbmdlcnRoL2Jp bi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9z dGRpby5oIiAzIDQKdHlwZWRlZiBfR19mcG9zX3QgZnBvc190OwoKCgoKdHlwZWRlZiBfR19mcG9z NjRfdCBmcG9zNjRfdDsKIyAxMzggIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzIDQKIyAxMzkgIi9ob21lL2JhbmdlcnRo L2Jpbi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVk ZS9zdGRpby5oIiAyIDMgNAoKCgpleHRlcm4gRklMRSAqc3RkaW47CmV4dGVybiBGSUxFICpzdGRv dXQ7CmV4dGVybiBGSUxFICpzdGRlcnI7CgoKCgoKCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0 IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwoKZXh0ZXJuIGludCByZW5hbWUgKF9fY29uc3Qg Y2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJ TEUgKnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwojIDE2NyAiL2hvbWUvYmFuZ2VydGgvYmluL2dj Yy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGlv LmgiIDMgNApleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4g Y2hhciAqdG1wbmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5h bV9yIChjaGFyICpfX3MpIHRocm93ICgpOwojIDE4NyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z LjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGlvLmgi IDMgNApleHRlcm4gY2hhciAqdGVtcG5hbSAoX19jb25zdCBjaGFyICpfX2RpciwgX19jb25zdCBj aGFyICpfX3BmeCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoK CgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBp bnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmZsdXNo X3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZjbG9z ZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CgpleHRlcm4gRklMRSAqZnJlb3BlbiAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAg IEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwojIDIzMSAiL2hvbWUvYmFuZ2Vy dGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNs dWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gRklMRSAqZm9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CmV4dGVybiBGSUxFICpmcmVvcGVuNjQgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAg RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAqZmRv cGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMs CiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2lv X2Z1bmNzKSB0aHJvdyAoKTsKCgpleHRlcm4gRklMRSAqZm1lbW9wZW4gKHZvaWQgKl9fcywgc2l6 ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJ TEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19yZXN0cmljdCBfX2J1ZmxvYywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9jKSB0aHJvdyAo KTsKCgoKCgpleHRlcm4gdm9pZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNo YXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNldHZidWYgKEZJ TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAg ICAgICAgICAgICAgaW50IF9fbW9kZXMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJu IHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3Ry aWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIHRocm93ICgp OwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cg KCk7CgpleHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0 LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9f cywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs IC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBf X3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAg ICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKZXh0ZXJuIGludCB2cHJpbnRmIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQog ICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3Ms IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAg X19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNucHJpbnRmIChj aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBp bnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2du dWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRf XyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgpleHRlcm4gaW50IHZhc3ByaW50ZiAoY2hhciAq Kl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2YsCiAgICAgICAg ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBfX2Fz cHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBhc3By aW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCmV4dGVybiBpbnQgdmRwcmlu dGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsCiAgICAgICAgICAg ICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IGRwcmludGYg KGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgoK CmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgp OwoKZXh0ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAu Li4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX3MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt YXQsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdmZzY2FuZiAoRklMRSAqX19yZXN0cmlj dCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNjYW5mIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDEsIDApKSk7 CgoKZXh0ZXJuIGludCB2c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVj X3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g KF9fc2NhbmZfXywgMiwgMCkpKTsKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFt KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ2V0 Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGNoYXJf dW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAo RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0YyAoaW50IF9fYywg RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2MpIHRocm93 ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19z dHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19jLCBG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50 IF9fYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cg KCk7CgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19u LCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hh ciAqZmdldHNfdW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp OwoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgNDM1ICIvaG9t ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4zL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBfX3NzaXplX3QgX19nZXRkZWxpbSAoY2hh ciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVy biBfX3NzaXplX3QgZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxp bWl0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0 cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5lIChjaGFyICoqX19yZXN0 cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVz dHJpY3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBf X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoK CgpleHRlcm4gaW50IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z LAogICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7 CgoKCmV4dGVybiBzaXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBf X3NpemUsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3Qg X19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAq X19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVf dCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmlj dCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkIChfX2Nv bnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBf X29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklM RSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVh bSkgdGhyb3cgKCk7CiMgNDk4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBp bnQgZnNlZWtvIChGSUxFICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0 aHJvdyAoKTsKCmV4dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwoKCgpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3Nf dCAqX19yZXN0cmljdCBfX3BvcykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZnNldHBvcyAo RklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3BvcykgdGhyb3cgKCk7CiMgNTMyICIv aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4zL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9f c3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4dGVybiBf X29mZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBm Z2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0 IF9fcG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZzZXRwb3M2NCAoRklMRSAqX19zdHJl YW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xl YXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVvZiAoRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFt KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCk7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg KCk7CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lz X2Vycmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAq X19jb25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19z dHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9f c3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIg Kl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdGVy bWlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFy ICpfX3MpIHRocm93ICgpOwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNr X3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikg dGhyb3cgKCk7CmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19y ZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2du dWNfdmFfbGlzdCBfX2FyZ3MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgZmxvY2tmaWxl IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlIChG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUgKEZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA2MzkgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXBy ZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAxIDMgNAojIDMzICIvdXNyL2luY2x1ZGUv Yml0cy9zdGRpby5oIiAzIDQKaW5saW5lIGludAp2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mbXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQp7CiAgcmV0dXJuIHZm cHJpbnRmIChzdGRvdXQsIF9fZm10LCBfX2FyZyk7Cn0KCgppbmxpbmUgaW50CmdldGNoYXIgKHZv aWQpIHRocm93ICgpCnsKICByZXR1cm4gX0lPX2dldGMgKHN0ZGluKTsKfQoKCgoKaW5saW5lIGlu dApnZXRjX3VubG9ja2VkIChGSUxFICpfX2ZwKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoX19mcCkt Pl9JT19yZWFkX3B0ciA+PSAoX19mcCktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKF9fZnApIDog Kih1bnNpZ25lZCBjaGFyICopIChfX2ZwKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKaW5saW5lIGlu dApnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoc3RkaW4pLT5f SU9fcmVhZF9wdHIgPj0gKHN0ZGluKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoc3RkaW4pIDog Kih1bnNpZ25lZCBjaGFyICopIChzdGRpbiktPl9JT19yZWFkX3B0cisrKTsKfQoKCgoKaW5saW5l IGludApwdXRjaGFyIChpbnQgX19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9JT19wdXRjIChfX2Ms IHN0ZG91dCk7Cn0KCgoKCmlubGluZSBpbnQKZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0 ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFtLCAo dW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+X0lP X3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmlubGluZSBpbnQKcHV0Y191bmxvY2tlZCAo aW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJlYW0p LT5fSU9fd3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxv dyAoX19zdHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCoo X19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKaW5saW5lIGludApwdXRj aGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKHN0ZG91dCktPl9J T193cml0ZV9wdHIgPj0gKHN0ZG91dCktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoc3Rk b3V0LCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKHN0ZG91dCkt Pl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgoKCgppbmxpbmUgX19zc2l6ZV90CmdldGxp bmUgKGNoYXIgKipfX2xpbmVwdHIsIHNpemVfdCAqX19uLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cg KCkKewogIHJldHVybiBfX2dldGRlbGltIChfX2xpbmVwdHIsIF9fbiwgJ1xuJywgX19zdHJlYW0p Owp9CgoKCgoKaW5saW5lIGludApmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg KCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MTApICE9IDApOwp9CgoKaW5s aW5lIGludApmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0 dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgyMCkgIT0gMCk7Cn0KIyA2NDAgIi9ob21lL2Jh bmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMv aW5jbHVkZS9zdGRpby5oIiAyIDMgNAoKCn0KIyA1MyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z LjMtcHJlL2luY2x1ZGUvYysrLzMuMy9jc3RkaW8iIDIgMwojIDk3ICIvaG9tZS9iYW5nZXJ0aC9i aW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2NzdGRpbyIgMwpuYW1lc3BhY2Ugc3RkCnsK ICB1c2luZyA6OkZJTEU7CiAgdXNpbmcgOjpmcG9zX3Q7CgogIHVzaW5nIDo6Y2xlYXJlcnI7CiAg dXNpbmcgOjpmY2xvc2U7CiAgdXNpbmcgOjpmZW9mOwogIHVzaW5nIDo6ZmVycm9yOwogIHVzaW5n IDo6ZmZsdXNoOwogIHVzaW5nIDo6ZmdldGM7CiAgdXNpbmcgOjpmZ2V0cG9zOwogIHVzaW5nIDo6 ZmdldHM7CiAgdXNpbmcgOjpmb3BlbjsKICB1c2luZyA6OmZwcmludGY7CiAgdXNpbmcgOjpmcHV0 YzsKICB1c2luZyA6OmZwdXRzOwogIHVzaW5nIDo6ZnJlYWQ7CiAgdXNpbmcgOjpmcmVvcGVuOwog IHVzaW5nIDo6ZnNjYW5mOwogIHVzaW5nIDo6ZnNlZWs7CiAgdXNpbmcgOjpmc2V0cG9zOwogIHVz aW5nIDo6ZnRlbGw7CiAgdXNpbmcgOjpmd3JpdGU7CiAgdXNpbmcgOjpnZXRjOwogIHVzaW5nIDo6 Z2V0Y2hhcjsKICB1c2luZyA6OmdldHM7CiAgdXNpbmcgOjpwZXJyb3I7CiAgdXNpbmcgOjpwcmlu dGY7CiAgdXNpbmcgOjpwdXRjOwogIHVzaW5nIDo6cHV0Y2hhcjsKICB1c2luZyA6OnB1dHM7CiAg dXNpbmcgOjpyZW1vdmU7CiAgdXNpbmcgOjpyZW5hbWU7CiAgdXNpbmcgOjpyZXdpbmQ7CiAgdXNp bmcgOjpzY2FuZjsKICB1c2luZyA6OnNldGJ1ZjsKICB1c2luZyA6OnNldHZidWY7CiAgdXNpbmcg OjpzcHJpbnRmOwogIHVzaW5nIDo6c3NjYW5mOwogIHVzaW5nIDo6dG1wZmlsZTsKICB1c2luZyA6 OnRtcG5hbTsKICB1c2luZyA6OnVuZ2V0YzsKICB1c2luZyA6OnZmcHJpbnRmOwogIHVzaW5nIDo6 dnByaW50ZjsKICB1c2luZyA6OnZzcHJpbnRmOwp9CiMgMTUzICIvaG9tZS9iYW5nZXJ0aC9iaW4v Z2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2NzdGRpbyIgMwpuYW1lc3BhY2UgX19nbnVfY3h4 CnsKICB1c2luZyA6OnNucHJpbnRmOwogIHVzaW5nIDo6dmZzY2FuZjsKICB1c2luZyA6OnZzY2Fu ZjsKICB1c2luZyA6OnZzbnByaW50ZjsKICB1c2luZyA6OnZzc2NhbmY7Cn0KCm5hbWVzcGFjZSBz dGQKewogIHVzaW5nIF9fZ251X2N4eDo6c25wcmludGY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2ZnNj YW5mOwogIHVzaW5nIF9fZ251X2N4eDo6dnNjYW5mOwogIHVzaW5nIF9fZ251X2N4eDo6dnNucHJp bnRmOwogIHVzaW5nIF9fZ251X2N4eDo6dnNzY2FuZjsKfQojIDM2ICIvaG9tZS9iYW5nZXJ0aC9i aW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysr aW8uaCIgMiAzCgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr Ky8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLmgiIDEgMwojIDk4ICIvaG9tZS9iYW5n ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2k2ODYtcGMtbGludXgtZ251L2Jp dHMvZ3Roci5oIiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUv YysrLzMuMy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAxIDMKIyAzNyAi L2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxp bnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj Yy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3B0aHJl YWQuaCIgMSAzIDQKIyAyOSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CiMgMSAiL3Vz ci9pbmNsdWRlL3NjaGVkLmgiIDEgMyA0CiMgMjkgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAzIDQK IyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNAojIDEwNiAiL3Vzci9pbmNsdWRlL3RpbWUu aCIgMyA0CnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIGxvbmcg aW50IHR2X25zZWM7CiAgfTsKIyAzMCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMyA0CgoKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMgNAojIDQ3ICIvdXNyL2luY2x1ZGUvYml0 cy9zY2hlZC5oIiAzIDQKc3RydWN0IHNjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJp b3JpdHk7CiAgfTsKCmV4dGVybiAiQyIgewoKCgpleHRlcm4gaW50IGNsb25lIChpbnQgKCpfX2Zu KSAodm9pZCAqX19hcmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLAogICAgICAgICAgICAgICAgICBp bnQgX19mbGFncywgdm9pZCAqX19hcmcpIHRocm93ICgpOwoKCn0KIyAzMyAiL3Vzci9pbmNsdWRl L3NjaGVkLmgiIDIgMyA0CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IHNjaGVkX3NldHBh cmFtIChfX3BpZF90IF9fcGlkLCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkK ICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dldHBhcmFtIChfX3BpZF90IF9fcGlk LCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2No ZWRfc2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQp IHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfeWllbGQgKHZvaWQpIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9taW4gKGludCBfX2FsZ29yaXRobSkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fcGlkX3QgX19w aWQsIHN0cnVjdCB0aW1lc3BlYyAqX190KSB0aHJvdyAoKTsKCn0KIyAzMCAiL2hvbWUvYmFuZ2Vy dGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNs dWRlL3B0aHJlYWQuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNAojIDMw ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCgoKCgojIDEgIi9ob21l L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAz IDQKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMyA0CiMgNDMgIi91c3IvaW5j bHVkZS90aW1lLmgiIDIgMyA0CiMgNTkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAp0eXBlZGVm IF9fY2xvY2tfdCBjbG9ja190OwojIDcwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKdHlwZWRl ZiBfX3RpbWVfdCB0aW1lX3Q7CiMgODIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAp0eXBlZGVm IF9fY2xvY2tpZF90IGNsb2NraWRfdDsKIyA5NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CnR5 cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMgMTE4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQK c3RydWN0IHRtCnsKICBpbnQgdG1fc2VjOwogIGludCB0bV9taW47CiAgaW50IHRtX2hvdXI7CiAg aW50IHRtX21kYXk7CiAgaW50IHRtX21vbjsKICBpbnQgdG1feWVhcjsKICBpbnQgdG1fd2RheTsK ICBpbnQgdG1feWRheTsKICBpbnQgdG1faXNkc3Q7CgoKICBsb25nIGludCB0bV9nbXRvZmY7CiAg X19jb25zdCBjaGFyICp0bV96b25lOwoKCgoKfTsKCgoKCnN0cnVjdCBpdGltZXJzcGVjCiAgewog ICAgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOwogICAgc3RydWN0IHRpbWVzcGVjIGl0X3Zh bHVlOwogIH07CgoKc3RydWN0IHNpZ2V2ZW50OwoKCgoKCnR5cGVkZWYgX19waWRfdCBwaWRfdDsK CgoKCgoKCmV4dGVybiBjbG9ja190IGNsb2NrICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdGlt ZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBkaWZm dGltZSAodGltZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUwKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gdGltZV90IG1rdGltZSAoc3RydWN0IHRt ICpfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jl c3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBj aGFyICpzdHJwdGltZSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIHN0cnVjdCB0bSAqX190 cCkKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUgKF9fY29uc3Qg dGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1l IChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc3RydWN0IHRt ICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3Ry aWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9f cmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqYXNjdGltZSAoX19jb25z dCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpjdGltZSAoX19jb25z dCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqYXNjdGltZV9y IChfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAogICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqY3Rp bWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIg Kl9fdHpuYW1lWzJdOwpleHRlcm4gaW50IF9fZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCBfX3Rp bWV6b25lOwoKCgoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgoKZXh0ZXJuIHZvaWQgdHpzZXQg KHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQg dGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25zdCB0aW1lX3QgKl9fd2hlbikg dGhyb3cgKCk7CiMgMjcxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJuIHRpbWVfdCB0 aW1lZ20gKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lbG9j YWwgKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkeXNpemUgKGludCBf X3llYXIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4g aW50IG5hbm9zbGVlcCAoX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUs CiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGludCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBz dHJ1Y3QgdGltZXNwZWMgKl9fcmVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX2dldHRp bWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdHApIHRocm93ICgp OwoKCmV4dGVybiBpbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIF9fY29u c3Qgc3RydWN0IHRpbWVzcGVjICpfX3RwKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNs b2NrX25hbm9zbGVlcCAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIGludCBfX2ZsYWdzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbSkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBjbG9ja19nZXRjcHVjbG9ja2lkIChwaWRfdCBfX3BpZCwgY2xvY2tpZF90 ICpfX2Nsb2NrX2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChjbG9j a2lkX3QgX19jbG9ja19pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdldmVu dCAqX19yZXN0cmljdCBfX2V2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgKl9f cmVzdHJpY3QgX190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSAo dGltZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfc2V0dGltZSAo dGltZXJfdCBfX3RpbWVyaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX192YWx1ZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX292YWx1ZSkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwg c3RydWN0IGl0aW1lcnNwZWMgKl9fdmFsdWUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0 aW1lcl9nZXRvdmVycnVuICh0aW1lcl90IF9fdGltZXJpZCkgdGhyb3cgKCk7CiMgMzQyICIvdXNy L2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJuIGludCBnZXRkYXRlX2VycjsKCgoKCgpleHRlcm4g c3RydWN0IHRtICpnZXRkYXRlIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKIyAz NTcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApleHRlcm4gaW50IGdldGRhdGVfciAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHRtICpfX3Jlc3RyaWN0IF9fcmVzYnVmcCkgdGhyb3cgKCk7CgoKCn0KIyAzMSAiL2hvbWUvYmFu Z2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9p bmNsdWRlL3B0aHJlYWQuaCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAz IDQKIyAzMSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzIDQKZXh0ZXJuICJDIiB7CgojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMgNAojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9z aWdzZXQuaCIgMyA0CnR5cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1 Y3QKICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1 bnNpZ25lZCBsb25nIGludCkpKV07CiAgfSBfX3NpZ3NldF90OwojIDM0ICIvdXNyL2luY2x1ZGUv c2lnbmFsLmgiIDIgMyA0CiMgNDggIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMyA0CnR5cGVkZWYg X19zaWdzZXRfdCBzaWdzZXRfdDsKIyAzNzEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMyA0Cn0K IyAzNCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMy9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzIDQKIyAzNSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z LjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3B0aHJlYWQu aCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9pbml0c3Bpbi5oIiAxIDMgNAojIDM2ICIv aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4zL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewojIDY4ICIvaG9t ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4zL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKZW51bQp7CiAgUFRIUkVBRF9DUkVBVEVfSk9JTkFC TEUsCgogIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9JTkhF UklUX1NDSEVELAoKICBQVEhSRUFEX0VYUExJQ0lUX1NDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVB RF9TQ09QRV9TWVNURU0sCgogIFBUSFJFQURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVudW0KewogIFBU SFJFQURfTVVURVhfVElNRURfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRI UkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBUSFJFQURfTVVURVhfQURBUFRJVkVfTlAKCiAg LAogIFBUSFJFQURfTVVURVhfTk9STUFMID0gUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQVEhS RUFEX01VVEVYX1JFQ1VSU0lWRSA9IFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBUSFJF QURfTVVURVhfRVJST1JDSEVDSyA9IFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQVEhS RUFEX01VVEVYX0RFRkFVTFQgPSBQVEhSRUFEX01VVEVYX05PUk1BTAoKCgogICwgUFRIUkVBRF9N VVRFWF9GQVNUX05QID0gUFRIUkVBRF9NVVRFWF9BREFQVElWRV9OUAoKfTsKCmVudW0KewogIFBU SFJFQURfUFJPQ0VTU19QUklWQVRFLAoKICBQVEhSRUFEX1BST0NFU1NfU0hBUkVECgp9OwoKCmVu dW0KewogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9SRUFERVJfTlAsCiAgUFRIUkVBRF9SV0xPQ0tf UFJFRkVSX1dSSVRFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05PTlJFQ1VS U0lWRV9OUCwKICBQVEhSRUFEX1JXTE9DS19ERUZBVUxUX05QID0gUFRIUkVBRF9SV0xPQ0tfUFJF RkVSX1dSSVRFUl9OUAp9OwojIDE0MCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CnN0 cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlcgp7CiAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQg Kik7CiAgdm9pZCAqX19hcmc7CiAgaW50IF9fY2FuY2VsdHlwZTsKICBzdHJ1Y3QgX3B0aHJlYWRf Y2xlYW51cF9idWZmZXIgKl9fcHJldjsKfTsKCgoKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfRU5B QkxFLAoKICBQVEhSRUFEX0NBTkNFTF9ESVNBQkxFCgp9OwplbnVtCnsKICBQVEhSRUFEX0NBTkNF TF9ERUZFUlJFRCwKCiAgUFRIUkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTCgp9OwojIDE3MiAiL2hv bWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMy9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CmV4dGVybiBpbnQgcHRocmVhZF9jcmVhdGUgKHB0 aHJlYWRfdCAqX19yZXN0cmljdCBfX3RociwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZvaWQgKigqX19zdGFydF9yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgdm9pZCAqX19yZXN0cmljdCBfX2FyZykgdGhyb3cgKCk7CgoKZXh0ZXJu IHB0aHJlYWRfdCBwdGhyZWFkX3NlbGYgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo cmVhZF9lcXVhbCAocHRocmVhZF90IF9fdGhyZWFkMSwgcHRocmVhZF90IF9fdGhyZWFkMikgdGhy b3cgKCk7CgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9leGl0ICh2b2lkICpfX3JldHZhbCkKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gaW50IHB0 aHJlYWRfam9pbiAocHRocmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pIHRocm93 ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2ggKHB0aHJlYWRfdCBfX3RoKSB0aHJv dyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQgKHB0aHJlYWRfYXR0cl90 ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0 aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy X3NldGRldGFjaHN0YXRlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZGV0YWNoc3RhdGUpIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlIChfX2NvbnN0IHB0aHJlYWRfYXR0 cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg Kl9fZGV0YWNoc3RhdGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNj aGVkcGFyYW0gKHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9f cmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wYXJhbSkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbSAoX19jb25z dCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAgIHRocm93ICgpOwoK CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9saWN5IChwdGhyZWFkX2F0dHJfdCAq X19hdHRyLCBpbnQgX19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk X2F0dHJfZ2V0c2NoZWRwb2xpY3kgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jl c3RyaWN0IF9fcG9saWN5KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy X3NldGluaGVyaXRzY2hlZCAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19pbmhlcml0KSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IHB0aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQgKF9fY29uc3QgcHRocmVhZF9hdHRy X3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2F0dHIsIGludCAqX19yZXN0cmljdCBfX2luaGVyaXQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdGhyZWFkX2F0dHJfc2V0c2NvcGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBf X3Njb3BlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjb3Bl IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3Njb3BlKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0Z3VhcmRzaXplIChwdGhyZWFkX2F0dHJfdCAq X19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2d1 YXJkc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXpl IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19hdHRyLCBzaXplX3QgKl9fcmVzdHJpY3QgX19ndWFyZHNpemUp CiAgICAgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRk ciAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2b2lkICpfX3N0YWNrYWRkcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk X2F0dHJfZ2V0c3RhY2thZGRyIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCB2b2lkICoqX19yZXN0 cmljdCBfX3N0YWNrYWRkcikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRf YXR0cl9zZXRzdGFjayAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgdm9pZCAqX19zdGFja2FkZHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGFja3NpemUpIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrIChfX2NvbnN0IHB0aHJl YWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZvaWQgKipfX3Jlc3RyaWN0IF9fc3RhY2thZGRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgKHB0aHJlYWRfYXR0cl90 ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f c3RhY2tzaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3Np emUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX3N0YWNrc2l6 ZSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGF0dHJfbnAgKHB0aHJl YWRfdCBfX3RoLCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu IGludCBwdGhyZWFkX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsIGlu dCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3Ry dWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo cmVhZF9nZXRzY2hlZHBhcmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFkLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0 IF9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjb25jdXJy ZW5jeSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNvbmN1cnJlbmN5 IChpbnQgX19sZXZlbCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfeWllbGQg KHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfaW5pdCAocHRo cmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fbXV0ZXhfYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBwdGhyZWFkX211dGV4X2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3RyeWxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAq X19tdXRleCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2xvY2sgKHB0aHJl YWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRl eF90aW1lZGxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19y ZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRo cm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChwdGhyZWFkX211dGV4 X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRy X2luaXQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIp IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHNoYXJlZCAoX19j b25zdCBwdGhyZWFkX211dGV4YXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfbXV0ZXhhdHRyX3Qg Kl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19w c2hhcmVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5 cGUgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwgaW50IF9fa2luZCkKICAgICB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUgKF9fY29uc3QgcHRocmVh ZF9tdXRleGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9fa2luZCkgdGhyb3cgKCk7CgoKCgoKCgpl eHRlcm4gaW50IHB0aHJlYWRfY29uZF9pbml0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBf X2NvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9jb25k YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uZF9h dHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9kZXN0cm95IChwdGhyZWFk X2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9zaWdu YWwgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh ZF9jb25kX2Jyb2FkY2FzdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKCmV4 dGVybiBpbnQgcHRocmVhZF9jb25kX3dhaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9f Y29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jl c3RyaWN0IF9fbXV0ZXgpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3Rp bWVkd2FpdCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVz cGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0 aW1lKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9pbml0IChwdGhy ZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2Nv bmRhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2Nv bmRhdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0 cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg Kl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29u ZGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgoK CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfaW5pdCAocHRocmVhZF9yd2xvY2tfdCAqX19y ZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2Rl c3Ryb3kgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB0aHJlYWRfcndsb2NrX3JkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5cmRsb2NrIChwdGhyZWFkX3J3bG9j a190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdGlt ZWRyZGxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpf X3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGlt ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrIChwdGhyZWFk X3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9j a190cnl3cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGludCBwdGhyZWFkX3J3bG9ja190aW1lZHdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19y ZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhy ZWFkX3J3bG9ja191bmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9pbml0IChwdGhyZWFkX3J3bG9ja2F0 dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9k ZXN0cm95IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4g aW50IHB0aHJlYWRfcndsb2NrYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfcndsb2Nr YXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0 cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9y d2xvY2thdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldGtpbmRfbnAgKF9fY29uc3Qg cHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50ICpfX3ByZWYpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh ZF9yd2xvY2thdHRyX3NldGtpbmRfbnAgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3ByZWYpIHRocm93 ICgpOwojIDUxOCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CmV4dGVybiBpbnQgcHRo cmVhZF9zcGluX2luaXQgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrLCBpbnQgX19wc2hhcmVk KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX2Rlc3Ryb3kgKHB0aHJl YWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bp bl9sb2NrIChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBwdGhyZWFkX3NwaW5fdHJ5bG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX3VubG9jayAocHRocmVhZF9zcGlubG9ja190 ICpfX2xvY2spIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJfaW5pdCAo cHRocmVhZF9iYXJyaWVyX3QgKl9fcmVzdHJpY3QgX19iYXJyaWVyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19yZXN0cmlj dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHVuc2lnbmVkIGludCBf X2NvdW50KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3kgKHB0 aHJlYWRfYmFycmllcl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFk X2JhcnJpZXJhdHRyX2luaXQgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSB0aHJvdyAo KTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9kZXN0cm95IChwdGhyZWFkX2JhcnJp ZXJhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0 dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19w c2hhcmVkKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9zZXRwc2hh cmVkIChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKZXh0ZXJuIGlu dCBwdGhyZWFkX2JhcnJpZXJfd2FpdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgdGhy b3cgKCk7CiMgNTY1ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKZXh0ZXJuIGludCBw dGhyZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdm9pZCAoKl9fZGVzdHJfZnVuY3Rpb24pICh2b2lkICopKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0ZSAocHRocmVhZF9rZXlfdCBfX2tleSkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNwZWNpZmljIChwdGhyZWFkX2tleV90 IF9fa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19w b2ludGVyKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqcHRocmVhZF9nZXRzcGVjaWZpYyAocHRo cmVhZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CiMgNTg1ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj LTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvcHRocmVh ZC5oIiAzIDQKZXh0ZXJuIGludCBwdGhyZWFkX29uY2UgKHB0aHJlYWRfb25jZV90ICpfX29uY2Vf Y29udHJvbCwKICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2luaXRfcm91dGluZSkg KHZvaWQpKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHN0YXRl IChpbnQgX19zdGF0ZSwgaW50ICpfX29sZHN0YXRlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBw dGhyZWFkX3NldGNhbmNlbHR5cGUgKGludCBfX3R5cGUsIGludCAqX19vbGR0eXBlKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY2FuY2VsIChwdGhyZWFkX3QgX190aHIpIHRocm93ICgp OwoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0Y2FuY2VsICh2b2lkKSB0aHJvdyAoKTsKIyA2 MTkgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjMvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNApleHRlcm4gdm9pZCBfcHRocmVhZF9j bGVhbnVwX3B1c2ggKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQg KiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRocm93 ICgpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRo cmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgX19leGVjdXRlKSB0aHJvdyAoKTsKIyA2NDAgIi9ob21lL2JhbmdlcnRoL2Jp bi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9w dGhyZWFkLmgiIDMgNApleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2hfZGVmZXIgKHN0 cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRocm93ICgp OwojIDY1MSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CmV4dGVybiB2b2lkIF9wdGhy ZWFkX2NsZWFudXBfcG9wX3Jlc3RvcmUgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAq X19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf X2V4ZWN1dGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjcHVjbG9ja2lk IChwdGhyZWFkX3QgX190aHJlYWRfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjbG9ja2lkX3QgKl9fY2xvY2tfaWQpIHRocm93ICgpOwoKCgoKIyAxICIvaG9tZS9iYW5nZXJ0 aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1 ZGUvYml0cy9zaWd0aHJlYWQuaCIgMSAzIDQKIyA0MCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z LjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL2JpdHMvc2ln dGhyZWFkLmgiIDMgNApleHRlcm4gaW50IHB0aHJlYWRfc2lnbWFzayAoaW50IF9faG93LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9f bmV3bWFzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2lnc2V0X3QgKl9fcmVzdHJp Y3QgX19vbGRtYXNrKXRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9raWxsIChwdGhyZWFk X3QgX190aHIsIGludCBfX3NpZ25vKSB0aHJvdyAoKTsKIyA2NjUgIi9ob21lL2JhbmdlcnRoL2Jp bi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9w dGhyZWFkLmgiIDIgMyA0CiMgNjgwICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKZXh0 ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgpleHRl cm4gdm9pZCBwdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFkc19ucCAodm9pZCkgdGhyb3cgKCk7Cgp9 CiMgMzggIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaTY4 Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMiAzCgp0eXBlZGVmIHB0aHJlYWRf a2V5X3QgX19ndGhyZWFkX2tleV90Owp0eXBlZGVmIHB0aHJlYWRfb25jZV90IF9fZ3RocmVhZF9v bmNlX3Q7CnR5cGVkZWYgcHRocmVhZF9tdXRleF90IF9fZ3RocmVhZF9tdXRleF90OwoKCgoKCgoj cHJhZ21hIHdlYWsgcHRocmVhZF9vbmNlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9jcmVhdGUK I3ByYWdtYSB3ZWFrIHB0aHJlYWRfa2V5X2RlbGV0ZQojcHJhZ21hIHdlYWsgcHRocmVhZF9nZXRz cGVjaWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9zZXRzcGVjaWZpYwojcHJhZ21hIHdlYWsgcHRo cmVhZF9jcmVhdGUKCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X2xvY2sKI3ByYWdtYSB3ZWFr IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jawojcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF91bmxvY2sK IyA4MCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9pNjg2 LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAzCnN0YXRpYyBpbmxpbmUgaW50Cl9f Z3RocmVhZF9hY3RpdmVfcCAodm9pZCkKewogIHN0YXRpYyB2b2lkICpjb25zdCBfX2d0aHJlYWRf YWN0aXZlX3B0ciA9ICh2b2lkICopICZwdGhyZWFkX2NyZWF0ZTsKICByZXR1cm4gX19ndGhyZWFk X2FjdGl2ZV9wdHIgIT0gMDsKfQojIDQzNyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl L2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAz CnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9vbmNlIChfX2d0aHJlYWRfb25jZV90ICpvbmNl LCB2b2lkICgqZnVuYykgKHZvaWQpKQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAg IHJldHVybiBwdGhyZWFkX29uY2UgKG9uY2UsIGZ1bmMpOwogIGVsc2UKICAgIHJldHVybiAtMTsK fQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tleV9jcmVhdGUgKF9fZ3RocmVhZF9rZXlf dCAqa2V5LCB2b2lkICgqZHRvcikgKHZvaWQgKikpCnsKICByZXR1cm4gcHRocmVhZF9rZXlfY3Jl YXRlIChrZXksIGR0b3IpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfa2V5X2R0b3Ig KF9fZ3RocmVhZF9rZXlfdCBrZXksIHZvaWQgKnB0cikKewoKICBpZiAocHRyKQogICAgcmV0dXJu IHB0aHJlYWRfc2V0c3BlY2lmaWMgKGtleSwgMCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0 YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfZGVsZXRlIChfX2d0aHJlYWRfa2V5X3Qga2V5 KQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2RlbGV0ZSAoa2V5KTsKfQoKc3RhdGljIGlubGluZSB2 b2lkICoKX19ndGhyZWFkX2dldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3Qga2V5KQp7CiAgcmV0 dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMgKGtleSk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3Ro cmVhZF9zZXRzcGVjaWZpYyAoX19ndGhyZWFkX2tleV90IGtleSwgY29uc3Qgdm9pZCAqcHRyKQp7 CiAgcmV0dXJuIHB0aHJlYWRfc2V0c3BlY2lmaWMgKGtleSwgcHRyKTsKfQoKc3RhdGljIGlubGlu ZSBpbnQKX19ndGhyZWFkX211dGV4X2xvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewog IGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF9sb2Nr IChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3Ro cmVhZF9tdXRleF90cnlsb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19n dGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAobXV0 ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRf bXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFk X2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChtdXRleCk7CiAg ZWxzZQogICAgcmV0dXJuIDA7Cn0KIyA5OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl L2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMiAzCiMgMzgg Ii9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1s aW51eC1nbnUvYml0cy9jKytpby5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0eXBlZGVmIGxv bmcgc3RyZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7CgogIHR5cGVkZWYg cHRyZGlmZl90IHdzdHJlYW1zaXplOwoKICB0eXBlZGVmIGZwb3NfdCBfX2Nfc3RyZWFtcG9zOwoK ICB0eXBlZGVmIF9fZ3RocmVhZF9tdXRleF90IF9fY19sb2NrOwoKCiAgdHlwZWRlZiBGSUxFIF9f Y19maWxlOwoKCiAgc3RydWN0IF9faW9zX2ZsYWdzCiAgewogICAgdHlwZWRlZiBzaG9ydCBfX2lu dF90eXBlOwoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jvb2xhbHBoYSA9IDB4MDAw MTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9IDB4MDAwMjsKICAgIHN0YXRp YyBjb25zdCBfX2ludF90eXBlIF9TX2ZpeGVkID0gMHgwMDA0OwogICAgc3RhdGljIGNvbnN0IF9f aW50X3R5cGUgX1NfaGV4ID0gMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf aW50ZXJuYWwgPSAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19sZWZ0ID0g MHgwMDIwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb2N0ID0gMHgwMDQwOwogICAg c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfcmlnaHQgPSAweDAwODA7CiAgICBzdGF0aWMgY29u c3QgX19pbnRfdHlwZSBfU19zY2llbnRpZmljID0gMHgwMTAwOwogICAgc3RhdGljIGNvbnN0IF9f aW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAweDAyMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU19zaG93cG9pbnQgPSAweDA0MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19z aG93cG9zID0gMHgwODAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2tpcHdzID0g MHgxMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdW5pdGJ1ZiA9IDB4MjAwMDsK ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VwcGVyY2FzZSA9IDB4NDAwMDsKICAgIHN0 YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FkanVzdGZpZWxkID0gMHgwMDIwIHwgMHgwMDgwIHwg MHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFzZWZpZWxkID0gMHgwMDAy IHwgMHgwMDQwIHwgMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmxvYXRm aWVsZCA9IDB4MDEwMCB8IDB4MDAwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf YmFkYml0ID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2VvZmJpdCA9IDB4 MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mYWlsYml0ID0gMHgwNDsKCgogICAg c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXBwID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBf X2ludF90eXBlIF9TX2F0ZSA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19i aW4gPSAweDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW4gPSAweDA4OwogICAg c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb3V0ID0gMHgxMDsKICAgIHN0YXRpYyBjb25zdCBf X2ludF90eXBlIF9TX3RydW5jID0gMHgyMDsKICB9Owp9CiMgNDUgIi9ob21lL2JhbmdlcnRoL2Jp bi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9mcG9zLmgiIDIgMwojIDEgIi9ob21l L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvY3djaGFyIiAxIDMKIyA0 OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9jd2NoYXIi IDMKCgoKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4z L2N0aW1lIiAxIDMKIyA0OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUv YysrLzMuMy9jdGltZSIgMwojIDY0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j bHVkZS9jKysvMy4zL2N0aW1lIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6Y2xvY2tfdDsK ICB1c2luZyA6OnRpbWVfdDsKICB1c2luZyA6OnRtOwoKICB1c2luZyA6OmNsb2NrOwogIHVzaW5n IDo6ZGlmZnRpbWU7CiAgdXNpbmcgOjpta3RpbWU7CiAgdXNpbmcgOjp0aW1lOwogIHVzaW5nIDo6 YXNjdGltZTsKICB1c2luZyA6OmN0aW1lOwogIHVzaW5nIDo6Z210aW1lOwogIHVzaW5nIDo6bG9j YWx0aW1lOwogIHVzaW5nIDo6c3RyZnRpbWU7Cn0KIyA1MiAiL2hvbWUvYmFuZ2VydGgvYmluL2dj Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9jd2NoYXIiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRl L3djaGFyLmgiIDEgMyA0CiMgNDAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKIyAxICIvaG9t ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4zL2luY2x1ZGUvc3RkYXJnLmgiIDEgMyA0CiMgNDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAy IDMgNAoKCgoKCgoKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1s aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgNDkgIi91 c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMgNAojIDg1ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMyA0 CnR5cGVkZWYgX19tYnN0YXRlX3QgbWJzdGF0ZV90OwojIDEwNSAiL3Vzci9pbmNsdWRlL3djaGFy LmgiIDMgNApzdHJ1Y3QgdG07CgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2Nw eSAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJf dCAqd2NzbmNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pCiAg ICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NhdCAod2NoYXJfdCAqX19yZXN0cmlj dCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX3NyYykgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJfdCAqd2NzbmNhdCAod2NoYXJfdCAq X19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCB3Y3NjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3My KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCB3 Y3NuY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6 ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0 ZXJuIGludCB3Y3NjYXNlY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJf dCAqX19zMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3NuY2FzZWNtcCAoX19jb25zdCB3Y2hh cl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBfX24pIHRocm93ICgpOwoKCgojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEg MyA0CiMgMjggIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBfX2xv Y2FsZV9zdHJ1Y3QKewoKICBzdHJ1Y3QgbG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sxM107CgoKICBj b25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5cGVf dG9sb3dlcjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG91cHBlcjsKfSAqX19sb2NhbGVfdDsKIyAx NDQgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMgNAoKZXh0ZXJuIGludCBfX3djc2Nhc2VjbXBf bCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGlu dCBfX3djc25jYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90 ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVf dCBfX2xvYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHdjc2NvbGwgKF9fY29uc3Qgd2NoYXJf dCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVf dCB3Y3N4ZnJtICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pIHRocm93ICgp OwoKCgoKCgoKZXh0ZXJuIGludCBfX3djc2NvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBf X2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3Qg X19sb2MpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IF9fd2NzeGZybV9sICh3Y2hhcl90ICpf X3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3 Y3NkdXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19t YWxsb2NfXykpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2hyIChfX2NvbnN0IHdjaGFyX3QgKl9f d2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgpleHRlcm4gd2NoYXJfdCAqd2NzcmNociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgd2No YXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoK ZXh0ZXJuIHdjaGFyX3QgKndjc2Nocm51bCAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHdjaGFyX3Qg X193YykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVy biBzaXplX3Qgd2NzY3NwbiAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90 ICpfX3JlamVjdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpl eHRlcm4gc2l6ZV90IHdjc3NwbiAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hh cl90ICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CmV4dGVybiB3Y2hhcl90ICp3Y3NwYnJrIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0 IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3N0ciAoX19jb25zdCB3Y2hhcl90ICpfX2hheXN0YWNr LCBfX2NvbnN0IHdjaGFyX3QgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2Nzd2NzIChfX2NvbnN0IHdjaGFyX3Qg Kl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3N0b2sgKHdjaGFy X3QgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq Kl9fcmVzdHJpY3QgX19wdHIpIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3Qgd2NzbGVuIChfX2Nv bnN0IHdjaGFyX3QgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK CmV4dGVybiBzaXplX3Qgd2NzbmxlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHNpemVfdCBfX21h eGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVy biB3Y2hhcl90ICp3bWVtY2hyIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2MsIHNp emVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0 ZXJuIGludCB3bWVtY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9f bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gd2No YXJfdCAqd21lbWNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pIHRo cm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd21lbW1vdmUgKHdjaGFyX3QgKl9fczEsIF9fY29u c3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gd2No YXJfdCAqd21lbXNldCAod2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikgdGhy b3cgKCk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd21lbXBjcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19zMSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gd2ludF90IGJ0 b3djIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3RvYiAod2ludF90IF9fYykg dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgbWJzaW5pdCAoX19jb25zdCBtYnN0YXRlX3QgKl9fcHMp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gc2l6ZV90IG1i cnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAg ICAgICAgICBtYnN0YXRlX3QgKl9fcCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3J0b21i IChjaGFyICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJfdCBfX3djLAogICAgICAgICAgICAgICAgICAg ICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90 IF9fbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAg ICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7 CmV4dGVybiBzaXplX3QgbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXpl X3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMp IHRocm93ICgpOwoKCgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IG1icmxlbiAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKQp7IHJldHVybiAoX19wcyAh PSBfX251bGwKICAgICAgICAgID8gbWJydG93YyAoX19udWxsLCBfX3MsIF9fbiwgX19wcykgOiBf X21icmxlbiAoX19zLCBfX24sIF9fbnVsbCkpOyB9CgoKCgpleHRlcm4gc2l6ZV90IG1ic3J0b3dj cyAod2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAg ICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIHNpemVfdCB3Y3NydG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3Qg X19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19w cykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCBtYnNucnRvd2NzICh3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqKl9f cmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX25tYywKICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgX19sZW4sIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIHNpemVfdCB3Y3NucnRvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbndjLCBzaXplX3QgX19sZW4sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoK CgoKCgpleHRlcm4gaW50IHdjd2lkdGggKHdjaGFyX3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGludCB3Y3N3aWR0aCAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgp OwoKCgoKCmV4dGVybiBkb3VibGUgd2NzdG9kIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRw dHIpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgd2NzdG9mIChfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmlj dCBfX2VuZHB0cikgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB3Y3N0b2xkIChfX2NvbnN0 IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25n IGludCB3Y3N0b2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNl KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHdjc3RvdWwgKF9fY29uc3Qg d2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJv dyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgd2NzdG9xIChfX2Nv bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93 ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3Rv dXEgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKTsK CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvbGwgKF9fY29uc3Qg d2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgp OwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3RvdWxs IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKTsK IyA0MTAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9s X2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFy X3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNp b25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFy X3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9f CmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2NzdG91bGxfbCAoX19jb25zdCB3Y2hh cl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9j KQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBfX3djc3RvZF9sIChfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoK ZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0 ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBf X3djc3RvbGRfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90 ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVy biBmbG9hdCBfX3djc3RvZl9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmlj dCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJs ZSBfX3djc3RvbGRfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg X19ncm91cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2ludGVybmFsIChf X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9pbnRlcm5hbCAoX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXAp IHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9s bF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl LCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVk IGxvbmcgbG9uZyBpbnQgX193Y3N0b3VsbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHdjaGFyX3QgKioKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoK CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSB3Y3N0b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y ZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b2RfaW50ZXJuYWwgKF9f bnB0ciwgX19lbmRwdHIsIDApOyB9CmV4dGVybiBfX2lubGluZSBsb25nIGludCB3Y3N0b2wgKF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvbF9p bnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsgfQpleHRlcm4gX19pbmxpbmUg dW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b3VsX2ludGVybmFs IChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9CgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0 IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgp CnsgcmV0dXJuIF9fd2NzdG9mX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsgfQpleHRl cm4gX19pbmxpbmUgbG9uZyBkb3VibGUgd2NzdG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg KipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvbGRfaW50ZXJu YWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOyB9CgoKX19leHRlbnNpb25fXwpleHRlcm4gX19pbmxp bmUgbG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVz dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IF9fYmFzZSkgdGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b2xsX2ludGVybmFsIChfX25wdHIsIF9f ZW5kcHRyLCBfX2Jhc2UsIDApOyB9Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIF9faW5saW5lIHVuc2ln bmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3Y2hhcl90ICoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvdWxsX2ludGVy bmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9CgoKCgoKCgpleHRlcm4gd2NoYXJf dCAqd2NwY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMpIHRocm93 ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2NwbmNweSAod2NoYXJfdCAqX19kZXN0LCBfX2NvbnN0 IHdjaGFyX3QgKl9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu IGludCBmd2lkZSAoX19GSUxFICpfX2ZwLCBpbnQgX19tb2RlKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGludCBmd3ByaW50ZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0 aHJvdyAoKSA7CgpleHRlcm4gaW50IHdwcmludGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3dwcmludGYgKHdj aGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7 CgoKZXh0ZXJuIGludCB2ZndwcmludGYgKF9fRklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAg ICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7Cgpl eHRlcm4gaW50IHZ3cHJpbnRmIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQs CiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgp IDsKCgpleHRlcm4gaW50IHZzd3ByaW50ZiAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVf dCBfX24sCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAg ICB0aHJvdyAoKSA7CgoKCmV4dGVybiBpbnQgZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgd3NjYW5mIChfX2NvbnN0 IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRl cm4gaW50IHN3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAg ICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAg ICAgdGhyb3cgKCkgOwoKCgoKZXh0ZXJuIGludCB2ZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0 IF9fcywKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f Zm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0 aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAg ICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZzd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQog ICAgIHRocm93ICgpIDsKCgoKCmV4dGVybiB3aW50X3QgZmdldHdjIChfX0ZJTEUgKl9fc3RyZWFt KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBnZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cg KCk7CgoKZXh0ZXJuIHdpbnRfdCBnZXR3Y2hhciAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiB3 aW50X3QgZnB1dHdjICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpl eHRlcm4gd2ludF90IHB1dHdjICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwoKCmV4dGVybiB3aW50X3QgcHV0d2NoYXIgKHdjaGFyX3QgX193YykgdGhyb3cgKCk7CgoK CgpleHRlcm4gd2NoYXJfdCAqZmdldHdzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBf X24sCiAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmcHV0d3MgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX3dzLAogICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCB1bmdldHdjICh3aW50X3QgX193YywgX19GSUxFICpf X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHdpbnRfdCBnZXR3Y191bmxvY2tlZCAoX19G SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgZ2V0d2NoYXJfdW5sb2NrZWQg KHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgZmdldHdjX3VubG9ja2VkIChfX0ZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IGZwdXR3Y191bmxvY2tlZCAod2No YXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCBw dXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK ZXh0ZXJuIHdpbnRfdCBwdXR3Y2hhcl91bmxvY2tlZCAod2NoYXJfdCBfX3djKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIHdjaGFyX3QgKmZnZXR3c191bmxvY2tlZCAod2NoYXJfdCAqX19yZXN0cmljdCBf X3dzLCBpbnQgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZnB1dHdzX3VubG9ja2Vk IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy biBzaXplX3Qgd2NzZnRpbWUgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhz aXplLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jl c3RyaWN0IF9fdHApIHRocm93ICgpOwojIDY4MCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNAp9 CiMgNTUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvY3dj aGFyIiAyIDMKIyA2OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr LzMuMy9jd2NoYXIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptYnN0YXRlX3Q7Cn0KIyAx MzMgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvY3djaGFy IiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6d2ludF90OwoKICB1c2luZyA6OmJ0b3djOwog IHVzaW5nIDo6ZmdldHdjOwogIHVzaW5nIDo6ZmdldHdzOwogIHVzaW5nIDo6ZnB1dHdjOwogIHVz aW5nIDo6ZnB1dHdzOwogIHVzaW5nIDo6ZndpZGU7CiAgdXNpbmcgOjpmd3ByaW50ZjsKICB1c2lu ZyA6OmZ3c2NhbmY7CiAgdXNpbmcgOjpnZXR3YzsKICB1c2luZyA6OmdldHdjaGFyOwogIHVzaW5n IDo6bWJybGVuOwogIHVzaW5nIDo6bWJydG93YzsKICB1c2luZyA6Om1ic2luaXQ7CiAgdXNpbmcg OjptYnNydG93Y3M7CiAgdXNpbmcgOjpwdXR3YzsKICB1c2luZyA6OnB1dHdjaGFyOwogIHVzaW5n IDo6c3dwcmludGY7CiAgdXNpbmcgOjpzd3NjYW5mOwogIHVzaW5nIDo6dW5nZXR3YzsKICB1c2lu ZyA6OnZmd3ByaW50ZjsKICB1c2luZyA6OnZmd3NjYW5mOwogIHVzaW5nIDo6dnN3cHJpbnRmOwog IHVzaW5nIDo6dnN3c2NhbmY7CiAgdXNpbmcgOjp2d3ByaW50ZjsKICB1c2luZyA6OnZ3c2NhbmY7 CiAgdXNpbmcgOjp3Y3J0b21iOwogIHVzaW5nIDo6d2NzY2F0OwogIHVzaW5nIDo6d2NzY21wOwog IHVzaW5nIDo6d2NzY29sbDsKICB1c2luZyA6Ondjc2NweTsKICB1c2luZyA6Ondjc2NzcG47CiAg dXNpbmcgOjp3Y3NmdGltZTsKICB1c2luZyA6Ondjc2xlbjsKICB1c2luZyA6Ondjc25jYXQ7CiAg dXNpbmcgOjp3Y3NuY21wOwogIHVzaW5nIDo6d2NzbmNweTsKICB1c2luZyA6Ondjc3J0b21iczsK ICB1c2luZyA6Ondjc3NwbjsKICB1c2luZyA6Ondjc3RvZDsKICB1c2luZyA6Ondjc3RvZjsKICB1 c2luZyA6Ondjc3RvazsKICB1c2luZyA6Ondjc3RvbDsKICB1c2luZyA6Ondjc3RvdWw7CiAgdXNp bmcgOjp3Y3N4ZnJtOwogIHVzaW5nIDo6d2N0b2I7CiAgdXNpbmcgOjp3bWVtY21wOwogIHVzaW5n IDo6d21lbWNweTsKICB1c2luZyA6OndtZW1tb3ZlOwogIHVzaW5nIDo6d21lbXNldDsKICB1c2lu ZyA6OndwcmludGY7CiAgdXNpbmcgOjp3c2NhbmY7CgogIHVzaW5nIDo6d2NzY2hyOwoKICBpbmxp bmUgd2NoYXJfdCoKICB3Y3NjaHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYykKICB7IHJldHVy biB3Y3NjaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jKTsgfQoKICB1c2lu ZyA6Ondjc3Bicms7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc3Bicmsod2NoYXJfdCogX19zMSwg d2NoYXJfdCogX19zMikKICB7IHJldHVybiB3Y3NwYnJrKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJf dCo+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6Ondjc3JjaHI7CgogIGlubGluZSB3Y2hhcl90 KgogIHdjc3JjaHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYykKICB7IHJldHVybiB3Y3NyY2hy KGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcgOjp3Y3Nz dHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc3N0cih3Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBf X3MyKQogIHsgcmV0dXJuIHdjc3N0cihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3MxKSwg X19zMik7IH0KCiAgdXNpbmcgOjp3bWVtY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3bWVtY2hy KHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4gd21lbWNo cihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MsIF9fbik7IH0KfQoKCgoKCgoK bmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjp3Y3N0b2xkOwogIHVzaW5nIDo6d2NzdG9s bDsKICB1c2luZyA6Ondjc3RvdWxsOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9j eHg6Ondjc3RvbGQ7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0b2xsOwogIHVzaW5nIF9fZ251X2N4 eDo6d2NzdG91bGw7Cn0KIyA0NiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1 ZGUvYysrLzMuMy9iaXRzL2Zwb3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgZnBvcwogICAgewogICAgcHVibGljOgoKICAg ICAgdHlwZWRlZiBfU3RhdGVUIF9fc3RhdGVfdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJl YW1vZmYgX01fb2ZmOwogICAgICBfX3N0YXRlX3R5cGUgX01fc3Q7CgogICAgcHVibGljOgogICAg ICBfX3N0YXRlX3R5cGUKICAgICAgc3RhdGUoKSBjb25zdCB7IHJldHVybiBfTV9zdDsgfQoKICAg ICAgdm9pZAogICAgICBzdGF0ZShfX3N0YXRlX3R5cGUgX19zdCkgeyBfTV9zdCA9IF9fc3Q7IH0K CgoKICAgICAgZnBvcygpOiBfTV9vZmYoc3RyZWFtb2ZmKCkpLCBfTV9zdChfX3N0YXRlX3R5cGUo KSkgeyB9CgogICAgICBmcG9zKHN0cmVhbW9mZiBfX29mZiwgX19zdGF0ZV90eXBlIF9fc3QgPSBf X3N0YXRlX3R5cGUoKSkKICAgICAgOiBfTV9vZmYoX19vZmYpLCBfTV9zdChfX3N0KSB7IH0KCiAg ICAgIG9wZXJhdG9yIHN0cmVhbW9mZigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAg ZnBvcyYKICAgICAgb3BlcmF0b3IrPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmICs9IF9fb2Zm OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yLT0oc3RyZWFtb2Zm IF9fb2ZmKSB7IF9NX29mZiAtPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBmcG9zCiAg ICAgIG9wZXJhdG9yKyhzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgq dGhpcyk7CiAgICAgICAgX190ICs9IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0K CiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3ItKHN0cmVhbW9mZiBfX29mZikKICAgICAgewogICAg ICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBfX3QgLT0gX19vZmY7CiAgICAgICAgcmV0dXJu IF9fdDsKICAgICAgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvcj09KGNvbnN0IGZwb3MmIF9f cG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgPT0gX19wb3MuX01fb2ZmOyB9CgogICAg ICBib29sCiAgICAgIG9wZXJhdG9yIT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsg cmV0dXJuIF9NX29mZiAhPSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIHN0cmVhbW9mZgogICAgICBf TV9wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAgdm9pZAogICAgICBf TV9wb3NpdGlvbihzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmID0gX19vZmY7IH0KICAgIH07CgoK ICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7CgogIHR5cGVkZWYgZnBvczxtYnN0 YXRlX3Q+IHdzdHJlYW1wb3M7Cgp9CiMgNDcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXBy ZS9pbmNsdWRlL2MrKy8zLjMvaW9zZndkIiAyIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi9o b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9mdW5jdGV4 Y2VwdC5oIiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr LzMuMy9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNw YWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lk CiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2 b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Ro cm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFp bl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3Vt ZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciog X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK ICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg X190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv d191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lv c19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA0OCAiL2hvbWUvYmFuZ2VydGgvYmluL2dj Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9pb3Nmd2QiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8 X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3M7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFz aWNfc3RyZWFtYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D aGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBi YXNpY19pb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0g YWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nYnVmOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNs YXNzIGJhc2ljX2lzdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUg X0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVh bTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90 cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0No YXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xh c3MgYmFzaWNfZmlsZWJ1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pZnN0cmVhbTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp dHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBj bGFzcyBiYXNpY19mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRl cmF0b3I7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNo YXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjsKCgoKICBj bGFzcyBpb3NfYmFzZTsKCgogIHR5cGVkZWYgYmFzaWNfaW9zPGNoYXI+IGlvczsKICB0eXBlZGVm IGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiBzdHJlYW1idWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFt PGNoYXI+IGlzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXI+IG9zdHJlYW07CiAg dHlwZWRlZiBiYXNpY19pb3N0cmVhbTxjaGFyPiBpb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0 cmluZ2J1ZjxjaGFyPiBzdHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPGNo YXI+IGlzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+IG9z dHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08Y2hhcj4gc3RyaW5nc3Ry ZWFtOwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyPiBmaWxlYnVmOwogIHR5cGVkZWYgYmFz aWNfaWZzdHJlYW08Y2hhcj4gaWZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vZnN0cmVhbTxjaGFy PiBvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08Y2hhcj4gZnN0cmVhbTsKCiAgdHlw ZWRlZiBiYXNpY19pb3M8d2NoYXJfdD4gd2lvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjx3 Y2hhcl90PiB3c3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiB3aXN0 cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08d2NoYXJfdD4gd29zdHJlYW07CiAgdHlwZWRl ZiBiYXNpY19pb3N0cmVhbTx3Y2hhcl90PiB3aW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJp bmdidWY8d2NoYXJfdD4gd3N0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08 d2NoYXJfdD4gd2lzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPHdj aGFyX3Q+IHdvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPHdjaGFy X3Q+IHdzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPHdjaGFyX3Q+IHdmaWxl YnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08d2NoYXJfdD4gd2lmc3RyZWFtOwogIHR5cGVk ZWYgYmFzaWNfb2ZzdHJlYW08d2NoYXJfdD4gd29mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0 cmVhbTx3Y2hhcl90PiB3ZnN0cmVhbTsKfQojIDQ1ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMu My1wcmUvaW5jbHVkZS9jKysvMy4zL2lvcyIgMiAzCgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9n Y2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9jaGFyX3RyYWl0cy5oIiAxIDMKIyA0NCAi L2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2NoYXJf dHJhaXRzLmgiIDMKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUv YysrLzMuMy9jc3RyaW5nIiAxIDMKIyA0OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl L2luY2x1ZGUvYysrLzMuMy9jc3RyaW5nIiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5o IiAxIDMgNAojIDI4ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMgNApleHRlcm4gIkMiIHsKCgoK CiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM0ICIvdXNyL2luY2x1ZGUv c3RyaW5nLmgiIDIgMyA0CgoKCmV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3Qg X19kZXN0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19z cmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1tb3ZlICh2b2lkICpf X2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoK CgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0 IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jLCBz aXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAq X19zLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1lbWNtcCAo X19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNo ciAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHZvaWQgKnJhd21lbWNociAo X19jb25zdCB2b2lkICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1yY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9f Yywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgoKCgpleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0 cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRl cm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNo YXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsCiAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHN0 cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9fY29u c3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19j b25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVz dHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CiMgMTExICIvdXNyL2luY2x1ZGUvc3Ry aW5nLmgiIDMgNApleHRlcm4gaW50IF9fc3RyY29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f Y29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2wpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rl c3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAg KF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykp OwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6 ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDE1 NSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzIDQKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19jb25z dCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKZXh0ZXJuIGNoYXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjaHJu dWwgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3Ms IF9fY29uc3QgY2hhciAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2Nv bnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNo YXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK ZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNo YXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK CgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2Nv bnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKCgpleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFy ICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgpleHRlcm4gY2hh ciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3Nh dmVfcHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1lbW1lbSAoX19jb25zdCB2b2lk ICpfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja2xlbiwKICAgICAgICAgICAgICAgICAgICAg X19jb25zdCB2b2lkICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlbGVuKQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gdm9pZCAqX19tZW1wY3B5ICh2 b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2 b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQg Km1lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAg X19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4gKF9fY29uc3Qg Y2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50IF9fZXJybnVt KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hh ciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBfX2J6 ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29w eSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3QgX19uKSB0aHJvdyAo KTsKCgpleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3My LCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK CmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29u c3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCgoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19sKSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBpbnQgZmZz bGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwg X19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25z dCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKCgoKCmV4dGVybiBpbnQgX19zdHJjYXNlY21wX2wgKF9fY29uc3QgY2hhciAq X19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xv Y2FsZV90IF9fbG9jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVy biBpbnQgX19zdHJuY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq X19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3Qg X19sb2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0 ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAogICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7CgoK CgpleHRlcm4gaW50IHN0cnZlcnNjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy ICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy biBjaGFyICpzdHJzaWduYWwgKGludCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKl9f c3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fc3JjKQogICAgIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwY3B5IChjaGFyICpfX3Jlc3Ry aWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgp OwoKCgpleHRlcm4gY2hhciAqX19zdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXpl X3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3Qg X19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f c3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyZnJ5IChjaGFyICpf X3N0cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbWZyb2IgKHZvaWQgKl9fcywgc2l6 ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBj aGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKIyAzNjQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIg MyA0Cn0KIyA1MiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu My9jc3RyaW5nIiAyIDMKIyA3NyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1 ZGUvYysrLzMuMy9jc3RyaW5nIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWVtY3B5Owog IHVzaW5nIDo6bWVtbW92ZTsKICB1c2luZyA6OnN0cmNweTsKICB1c2luZyA6OnN0cm5jcHk7CiAg dXNpbmcgOjpzdHJjYXQ7CiAgdXNpbmcgOjpzdHJuY2F0OwogIHVzaW5nIDo6bWVtY21wOwogIHVz aW5nIDo6c3RyY21wOwogIHVzaW5nIDo6c3RyY29sbDsKICB1c2luZyA6OnN0cm5jbXA7CiAgdXNp bmcgOjpzdHJ4ZnJtOwogIHVzaW5nIDo6c3RyY3NwbjsKICB1c2luZyA6OnN0cnNwbjsKICB1c2lu ZyA6OnN0cnRvazsKICB1c2luZyA6Om1lbXNldDsKICB1c2luZyA6OnN0cmVycm9yOwogIHVzaW5n IDo6c3RybGVuOwoKICB1c2luZyA6Om1lbWNocjsKCiAgaW5saW5lIHZvaWQqCiAgbWVtY2hyKHZv aWQqIF9fcCwgaW50IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiBtZW1jaHIoY29uc3RfY2Fz dDxjb25zdCB2b2lkKj4oX19wKSwgX19jLCBfX24pOyB9CgogIHVzaW5nIDo6c3RyY2hyOwoKICBp bmxpbmUgY2hhcioKICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1 aWx0aW5fc3RyY2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVz aW5nIDo6c3RycGJyazsKCiAgaW5saW5lIGNoYXIqCiAgc3RycGJyayhjaGFyKiBfX3MxLCBjb25z dCBjaGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJwYnJrKGNvbnN0X2Nhc3Q8Y29u c3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6OnN0cnJjaHI7CgogIGlubGluZSBj aGFyKgogIHN0cnJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5f c3RycmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6 OnN0cnN0cjsKCiAgaW5saW5lIGNoYXIqCiAgc3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIq IF9fczIpCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnN0cihjb25zdF9jYXN0PGNvbnN0IGNoYXIq PihfX3MxKSwgX19zMik7IH0KfQojIDQ2ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUv aW5jbHVkZS9jKysvMy4zL2JpdHMvY2hhcl90cmFpdHMuaCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7 CiMgNjEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0 cy9jaGFyX3RyYWl0cy5oIiAzCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0IGNo YXJfdHJhaXRzCiAgICB7CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIHR5 cGVkZWYgdW5zaWduZWQgbG9uZyBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9z X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIG1i c3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWduKGNoYXJf dHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKTsKCiAgICAgIHN0YXRpYyBib29sCiAg ICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKTsKCiAg ICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hh cl90eXBlJiBfX2MyKTsKCiAgICAgIHN0YXRpYyBpbnQKICAgICAgY29tcGFyZShjb25zdCBjaGFy X3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbik7CgogICAgICBz dGF0aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcyk7CgogICAgICBz dGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBz aXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSk7CgogICAgICBzdGF0aWMgY2hhcl90eXBl KgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXpl X3QgX19uKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHkoY2hhcl90eXBlKiBf X3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pOwoKICAgICAgc3RhdGljIGNo YXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5 cGUgX19hKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0 IGludF90eXBlJiBfX2MpOwoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIHRvX2ludF90eXBl KGNvbnN0IGNoYXJfdHlwZSYgX19jKTsKCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90 eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMik7CgogICAgICBz dGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCk7CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAg bm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKTsKICAgIH07CgoKCiAgdGVtcGxhdGU8PgogICAg c3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5 cGU7CiAgICAgIHR5cGVkZWYgaW50IGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbXBvcyBw b3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYg bWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hh cl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9IF9fYzI7 IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29u c3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAg IHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90 eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoKICAgICAgc3RhdGljIGlu dAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBf X3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBtZW1jbXAoX19zMSwgX19zMiwgX19uKTsg fQoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3Mp CiAgICAgIHsgcmV0dXJuIHN0cmxlbihfX3MpOyB9CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90 eXBlKgogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBj aGFyX3R5cGUmIF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcl90eXBl Kj4obWVtY2hyKF9fcywgX19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAg ICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9f bikKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtbW92ZShfX3MxLCBf X3MyLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5 cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtY3B5KF9fczEsIF9fczIsIF9fbikpOyB9Cgog ICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVf dCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlw ZSo+KG1lbXNldChfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAg ICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIHN0YXRp Y19jYXN0PGNoYXJfdHlwZT4oX19jKTsgfQoKCgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAg dG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j YXN0PGludF90eXBlPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpKTsgfQoKICAgICAg c3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0 IGludF90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0 YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4o KC0xKSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90 eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIChfX2MgPT0gZW9mKCkpID8gMCA6IF9fYzsgfQogIH07 CgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czx3Y2hhcl90PgogICAgewog ICAgICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHdpbnRfdCBpbnRf dHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgd3N0 cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAg ICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJf dHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAg ICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAg IHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29u c3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJu IF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgY2hh cl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsg cmV0dXJuIHdtZW1jbXAoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIHNpemVfdAog ICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCiAgICAgIHsgcmV0dXJuIHdjc2xlbihf X3MpOyB9CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNvbnN0IGNo YXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKICAgICAgeyBy ZXR1cm4gd21lbWNocihfX3MsIF9fYSwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoK ICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgaW50X3R5 cGUgX19uKQogICAgICB7IHJldHVybiB3bWVtbW92ZShfX3MxLCBfX3MyLCBfX24pOyB9CgogICAg ICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hh cl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiB3bWVtY3B5KF9fczEsIF9f czIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5 cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgeyByZXR1cm4gd21lbXNl dChfX3MsIF9fYSwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFy X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykgeyByZXR1cm4gY2hhcl90eXBlKF9fYyk7IH0KCiAg ICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9f YykgeyByZXR1cm4gaW50X3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFf aW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQogICAg ICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBl b2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oKDB4ZmZmZmZmZmZ1KSk7IH0KCiAg ICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpCiAg ICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywgZW9mKCkpID8gMCA6IF9fYzsgfQogIH07CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3Qg X0NoYXJfdHJhaXRzX21hdGNoCiAgICB7CiAgICAgIF9DaGFyVCBfTV9jOwogICAgICBfQ2hhcl90 cmFpdHNfbWF0Y2goX0NoYXJUIGNvbnN0JiBfX2MpIDogX01fYyhfX2MpIHsgfQoKICAgICAgYm9v bAogICAgICBvcGVyYXRvcigpKF9DaGFyVCBjb25zdCYgX19hKSB7IHJldHVybiBfVHJhaXRzOjpl cShfTV9jLCBfX2EpOyB9CiAgICB9Owp9CiMgNDcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z LXByZS9pbmNsdWRlL2MrKy8zLjMvaW9zIiAyIDMKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyA0NCAiL2hv bWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZWZ3 ZC5oIiAzCgoKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysv My4zL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDEgMwojIDM2ICIvaG9tZS9i YW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2k2ODYtcGMtbGludXgtZ251 L2JpdHMvYysrbG9jYWxlLmgiIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUv aW5jbHVkZS9jKysvMy4zL2Nsb2NhbGUiIDEgMwojIDQ4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Nsb2NhbGUiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2xv Y2FsZS5oIiAxIDMgNAojIDI5ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMgNAojIDEgIi9ob21l L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzMCAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAy IDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAxIDMgNAojIDI3ICIvdXNyL2lu Y2x1ZGUvYml0cy9sb2NhbGUuaCIgMyA0CmVudW0KewogIF9fTENfQ1RZUEUgPSAwLAogIF9fTENf TlVNRVJJQyA9IDEsCiAgX19MQ19USU1FID0gMiwKICBfX0xDX0NPTExBVEUgPSAzLAogIF9fTENf TU9ORVRBUlkgPSA0LAogIF9fTENfTUVTU0FHRVMgPSA1LAogIF9fTENfQUxMID0gNiwKICBfX0xD X1BBUEVSID0gNywKICBfX0xDX05BTUUgPSA4LAogIF9fTENfQUREUkVTUyA9IDksCiAgX19MQ19U RUxFUEhPTkUgPSAxMCwKICBfX0xDX01FQVNVUkVNRU5UID0gMTEsCiAgX19MQ19JREVOVElGSUNB VElPTiA9IDEyCn07CiMgMzEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzIDQKCmV4dGVybiAi QyIgewojIDUyICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMgNApzdHJ1Y3QgbGNvbnYKewoKCiAg Y2hhciAqZGVjaW1hbF9wb2ludDsKICBjaGFyICp0aG91c2FuZHNfc2VwOwoKCgoKCiAgY2hhciAq Z3JvdXBpbmc7CgoKCgoKICBjaGFyICppbnRfY3Vycl9zeW1ib2w7CiAgY2hhciAqY3VycmVuY3lf c3ltYm9sOwogIGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50OwogIGNoYXIgKm1vbl90aG91c2FuZHNf c2VwOwogIGNoYXIgKm1vbl9ncm91cGluZzsKICBjaGFyICpwb3NpdGl2ZV9zaWduOwogIGNoYXIg Km5lZ2F0aXZlX3NpZ247CiAgY2hhciBpbnRfZnJhY19kaWdpdHM7CiAgY2hhciBmcmFjX2RpZ2l0 czsKCiAgY2hhciBwX2NzX3ByZWNlZGVzOwoKICBjaGFyIHBfc2VwX2J5X3NwYWNlOwoKICBjaGFy IG5fY3NfcHJlY2VkZXM7CgogIGNoYXIgbl9zZXBfYnlfc3BhY2U7CgoKCgoKCiAgY2hhciBwX3Np Z25fcG9zbjsKICBjaGFyIG5fc2lnbl9wb3NuOwoKCiAgY2hhciBpbnRfcF9jc19wcmVjZWRlczsK CiAgY2hhciBpbnRfcF9zZXBfYnlfc3BhY2U7CgogIGNoYXIgaW50X25fY3NfcHJlY2VkZXM7Cgog IGNoYXIgaW50X25fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIgaW50X3Bfc2lnbl9wb3NuOwog IGNoYXIgaW50X25fc2lnbl9wb3NuOwojIDExOSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzIDQK fTsKCgoKZXh0ZXJuIGNoYXIgKnNldGxvY2FsZSAoaW50IF9fY2F0ZWdvcnksIF9fY29uc3QgY2hh ciAqX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiBzdHJ1Y3QgbGNvbnYgKmxvY2FsZWNvbnYg KHZvaWQpIHRocm93ICgpOwojIDE0OSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzIDQKZXh0ZXJu IF9fbG9jYWxlX3QgX19uZXdsb2NhbGUgKGludCBfX2NhdGVnb3J5X21hc2ssIF9fY29uc3QgY2hh ciAqX19sb2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9f YmFzZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBfX2xvY2FsZV90IF9fZHVwbG9jYWxlIChfX2xvY2Fs ZV90IF9fZGF0YXNldCkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIF9fZnJlZWxvY2FsZSAoX19s b2NhbGVfdCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCn0KIyA1MCAiL2hvbWUvYmFuZ2VydGgvYmlu L2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9jbG9jYWxlIiAyIDMKCgoKCgpuYW1lc3BhY2Ug c3RkCnsKICB1c2luZyA6Omxjb252OwogIHVzaW5nIDo6c2V0bG9jYWxlOwogIHVzaW5nIDo6bG9j YWxlY29udjsKfQojIDM3ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j KysvMy4zL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDIgMwojIDEgIi91c3Iv aW5jbHVkZS9sYW5naW5mby5oIiAxIDMgNAojIDI0ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIg MyA0CiMgMSAiL3Vzci9pbmNsdWRlL25sX3R5cGVzLmgiIDEgMyA0CiMgMzEgIi91c3IvaW5jbHVk ZS9ubF90eXBlcy5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKdHlwZWRlZiB2b2lkICpubF9jYXRkOwoK CnR5cGVkZWYgaW50IG5sX2l0ZW07CgoKZXh0ZXJuIG5sX2NhdGQgY2F0b3BlbiAoX19jb25zdCBj aGFyICpfX2NhdF9uYW1lLCBpbnQgX19mbGFnKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmNh dGdldHMgKG5sX2NhdGQgX19jYXRhbG9nLCBpbnQgX19zZXQsIGludCBfX251bWJlciwKICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVy biBpbnQgY2F0Y2xvc2UgKG5sX2NhdGQgX19jYXRhbG9nKSB0aHJvdyAoKTsKCn0KIyAyNSAiL3Vz ci9pbmNsdWRlL2xhbmdpbmZvLmgiIDIgMyA0CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2Fs ZS5oIiAxIDMgNAojIDI3ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMiAzIDQKCgpleHRlcm4g IkMiIHsKIyA0MyAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMgNAplbnVtCnsKCgoKICBBQkRB WV8xID0gKCgoX19MQ19USU1FKSA8PCAxNikgfCAoMCkpLAoKICBBQkRBWV8yLAoKICBBQkRBWV8z LAoKICBBQkRBWV80LAoKICBBQkRBWV81LAoKICBBQkRBWV82LAoKICBBQkRBWV83LAoKCgogIERB WV8xLAoKICBEQVlfMiwKCiAgREFZXzMsCgogIERBWV80LAoKICBEQVlfNSwKCiAgREFZXzYsCgog IERBWV83LAoKCgogIEFCTU9OXzEsCgogIEFCTU9OXzIsCgogIEFCTU9OXzMsCgogIEFCTU9OXzQs CgogIEFCTU9OXzUsCgogIEFCTU9OXzYsCgogIEFCTU9OXzcsCgogIEFCTU9OXzgsCgogIEFCTU9O XzksCgogIEFCTU9OXzEwLAoKICBBQk1PTl8xMSwKCiAgQUJNT05fMTIsCgoKCiAgTU9OXzEsCgog IE1PTl8yLAoKICBNT05fMywKCiAgTU9OXzQsCgogIE1PTl81LAoKICBNT05fNiwKCiAgTU9OXzcs CgogIE1PTl84LAoKICBNT05fOSwKCiAgTU9OXzEwLAoKICBNT05fMTEsCgogIE1PTl8xMiwKCgog IEFNX1NUUiwKCiAgUE1fU1RSLAoKCiAgRF9UX0ZNVCwKCiAgRF9GTVQsCgogIFRfRk1ULAoKICBU X0ZNVF9BTVBNLAoKCiAgRVJBLAoKICBfX0VSQV9ZRUFSLAoKCgogIEVSQV9EX0ZNVCwKCiAgQUxU X0RJR0lUUywKCiAgRVJBX0RfVF9GTVQsCgogIEVSQV9UX0ZNVCwKCgogIF9OTF9USU1FX0VSQV9O VU1fRU5UUklFUywKICBfTkxfVElNRV9FUkFfRU5UUklFUywKCiAgX05MX1dBQkRBWV8xLAogIF9O TF9XQUJEQVlfMiwKICBfTkxfV0FCREFZXzMsCiAgX05MX1dBQkRBWV80LAogIF9OTF9XQUJEQVlf NSwKICBfTkxfV0FCREFZXzYsCiAgX05MX1dBQkRBWV83LAoKCiAgX05MX1dEQVlfMSwKICBfTkxf V0RBWV8yLAogIF9OTF9XREFZXzMsCiAgX05MX1dEQVlfNCwKICBfTkxfV0RBWV81LAogIF9OTF9X REFZXzYsCiAgX05MX1dEQVlfNywKCgogIF9OTF9XQUJNT05fMSwKICBfTkxfV0FCTU9OXzIsCiAg X05MX1dBQk1PTl8zLAogIF9OTF9XQUJNT05fNCwKICBfTkxfV0FCTU9OXzUsCiAgX05MX1dBQk1P Tl82LAogIF9OTF9XQUJNT05fNywKICBfTkxfV0FCTU9OXzgsCiAgX05MX1dBQk1PTl85LAogIF9O TF9XQUJNT05fMTAsCiAgX05MX1dBQk1PTl8xMSwKICBfTkxfV0FCTU9OXzEyLAoKCiAgX05MX1dN T05fMSwKICBfTkxfV01PTl8yLAogIF9OTF9XTU9OXzMsCiAgX05MX1dNT05fNCwKICBfTkxfV01P Tl81LAogIF9OTF9XTU9OXzYsCiAgX05MX1dNT05fNywKICBfTkxfV01PTl84LAogIF9OTF9XTU9O XzksCiAgX05MX1dNT05fMTAsCiAgX05MX1dNT05fMTEsCiAgX05MX1dNT05fMTIsCgogIF9OTF9X QU1fU1RSLAogIF9OTF9XUE1fU1RSLAoKICBfTkxfV0RfVF9GTVQsCiAgX05MX1dEX0ZNVCwKICBf TkxfV1RfRk1ULAogIF9OTF9XVF9GTVRfQU1QTSwKCiAgX05MX1dFUkFfWUVBUiwKICBfTkxfV0VS QV9EX0ZNVCwKICBfTkxfV0FMVF9ESUdJVFMsCiAgX05MX1dFUkFfRF9UX0ZNVCwKICBfTkxfV0VS QV9UX0ZNVCwKCiAgX05MX1RJTUVfV0VFS19OREFZUywKICBfTkxfVElNRV9XRUVLXzFTVERBWSwK ICBfTkxfVElNRV9XRUVLXzFTVFdFRUssCiAgX05MX1RJTUVfRklSU1RfV0VFS0RBWSwKICBfTkxf VElNRV9GSVJTVF9XT1JLREFZLAogIF9OTF9USU1FX0NBTF9ESVJFQ1RJT04sCiAgX05MX1RJTUVf VElNRVpPTkUsCgogIF9EQVRFX0ZNVCwKCiAgX05MX1dfREFURV9GTVQsCgogIF9OTF9USU1FX0NP REVTRVQsCgogIF9OTF9OVU1fTENfVElNRSwKCgoKCiAgX05MX0NPTExBVEVfTlJVTEVTID0gKCgo X19MQ19DT0xMQVRFKSA8PCAxNikgfCAoMCkpLAogIF9OTF9DT0xMQVRFX1JVTEVTRVRTLAogIF9O TF9DT0xMQVRFX1RBQkxFTUIsCiAgX05MX0NPTExBVEVfV0VJR0hUTUIsCiAgX05MX0NPTExBVEVf RVhUUkFNQiwKICBfTkxfQ09MTEFURV9JTkRJUkVDVE1CLAogIF9OTF9DT0xMQVRFX0dBUDEsCiAg X05MX0NPTExBVEVfR0FQMiwKICBfTkxfQ09MTEFURV9HQVAzLAogIF9OTF9DT0xMQVRFX1RBQkxF V0MsCiAgX05MX0NPTExBVEVfV0VJR0hUV0MsCiAgX05MX0NPTExBVEVfRVhUUkFXQywKICBfTkxf Q09MTEFURV9JTkRJUkVDVFdDLAogIF9OTF9DT0xMQVRFX1NZTUJfSEFTSF9TSVpFTUIsCiAgX05M X0NPTExBVEVfU1lNQl9UQUJMRU1CLAogIF9OTF9DT0xMQVRFX1NZTUJfRVhUUkFNQiwKICBfTkxf Q09MTEFURV9DT0xMU0VRTUIsCiAgX05MX0NPTExBVEVfQ09MTFNFUVdDLAogIF9OTF9DT0xMQVRF X0NPREVTRVQsCiAgX05MX05VTV9MQ19DT0xMQVRFLAoKCgoKICBfTkxfQ1RZUEVfQ0xBU1MgPSAo KChfX0xDX0NUWVBFKSA8PCAxNikgfCAoMCkpLAogIF9OTF9DVFlQRV9UT1VQUEVSLAogIF9OTF9D VFlQRV9HQVAxLAogIF9OTF9DVFlQRV9UT0xPV0VSLAogIF9OTF9DVFlQRV9HQVAyLAogIF9OTF9D VFlQRV9DTEFTUzMyLAogIF9OTF9DVFlQRV9HQVAzLAogIF9OTF9DVFlQRV9HQVA0LAogIF9OTF9D VFlQRV9HQVA1LAogIF9OTF9DVFlQRV9HQVA2LAogIF9OTF9DVFlQRV9DTEFTU19OQU1FUywKICBf TkxfQ1RZUEVfTUFQX05BTUVTLAogIF9OTF9DVFlQRV9XSURUSCwKICBfTkxfQ1RZUEVfTUJfQ1VS X01BWCwKICBfTkxfQ1RZUEVfQ09ERVNFVF9OQU1FLAogIENPREVTRVQgPSBfTkxfQ1RZUEVfQ09E RVNFVF9OQU1FLAoKICBfTkxfQ1RZUEVfVE9VUFBFUjMyLAogIF9OTF9DVFlQRV9UT0xPV0VSMzIs CiAgX05MX0NUWVBFX0NMQVNTX09GRlNFVCwKICBfTkxfQ1RZUEVfTUFQX09GRlNFVCwKICBfTkxf Q1RZUEVfSU5ESUdJVFNfTUJfTEVOLAogIF9OTF9DVFlQRV9JTkRJR0lUUzBfTUIsCiAgX05MX0NU WVBFX0lORElHSVRTMV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMyX01CLAogIF9OTF9DVFlQRV9J TkRJR0lUUzNfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTNF9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJ VFM1X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzZfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTN19N QiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM4X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzlfTUIsCiAg X05MX0NUWVBFX0lORElHSVRTX1dDX0xFTiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMwX1dDLAogIF9O TF9DVFlQRV9JTkRJR0lUUzFfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTMl9XQywKICBfTkxfQ1RZ UEVfSU5ESUdJVFMzX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzRfV0MsCiAgX05MX0NUWVBFX0lO RElHSVRTNV9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM2X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lU UzdfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTOF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM5X1dD LAogIF9OTF9DVFlQRV9PVVRESUdJVDBfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUMV9NQiwKICBf TkxfQ1RZUEVfT1VURElHSVQyX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDNfTUIsCiAgX05MX0NU WVBFX09VVERJR0lUNF9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ1X01CLAogIF9OTF9DVFlQRV9P VVRESUdJVDZfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUN19NQiwKICBfTkxfQ1RZUEVfT1VURElH SVQ4X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDlfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUMF9X QywKICBfTkxfQ1RZUEVfT1VURElHSVQxX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDJfV0MsCiAg X05MX0NUWVBFX09VVERJR0lUM19XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ0X1dDLAogIF9OTF9D VFlQRV9PVVRESUdJVDVfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUNl9XQywKICBfTkxfQ1RZUEVf T1VURElHSVQ3X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDhfV0MsCiAgX05MX0NUWVBFX09VVERJ R0lUOV9XQywKICBfTkxfQ1RZUEVfVFJBTlNMSVRfVEFCX1NJWkUsCiAgX05MX0NUWVBFX1RSQU5T TElUX0ZST01fSURYLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX1RCTCwKICBfTkxfQ1RZUEVf VFJBTlNMSVRfVE9fSURYLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9UT19UQkwsCiAgX05MX0NUWVBF X1RSQU5TTElUX0RFRkFVTFRfTUlTU0lOR19MRU4sCiAgX05MX0NUWVBFX1RSQU5TTElUX0RFRkFV TFRfTUlTU0lORywKICBfTkxfQ1RZUEVfVFJBTlNMSVRfSUdOT1JFX0xFTiwKICBfTkxfQ1RZUEVf VFJBTlNMSVRfSUdOT1JFLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMSwKICBfTkxfQ1RZUEVfRVhU UkFfTUFQXzIsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8zLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBf NCwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzUsCiAgX05MX0NUWVBFX0VYVFJBX01BUF82LAogIF9O TF9DVFlQRV9FWFRSQV9NQVBfNywKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzgsCiAgX05MX0NUWVBF X0VYVFJBX01BUF85LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTAsCiAgX05MX0NUWVBFX0VYVFJB X01BUF8xMSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEyLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBf MTMsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xNCwKICBfTkxfTlVNX0xDX0NUWVBFLAoKCgoKICBf X0lOVF9DVVJSX1NZTUJPTCA9ICgoKF9fTENfTU9ORVRBUlkpIDw8IDE2KSB8ICgwKSksCgoKCiAg X19DVVJSRU5DWV9TWU1CT0wsCgoKCiAgX19NT05fREVDSU1BTF9QT0lOVCwKCgoKICBfX01PTl9U SE9VU0FORFNfU0VQLAoKCgogIF9fTU9OX0dST1VQSU5HLAoKCgogIF9fUE9TSVRJVkVfU0lHTiwK CgoKICBfX05FR0FUSVZFX1NJR04sCgoKCiAgX19JTlRfRlJBQ19ESUdJVFMsCgoKCiAgX19GUkFD X0RJR0lUUywKCgoKICBfX1BfQ1NfUFJFQ0VERVMsCgoKCiAgX19QX1NFUF9CWV9TUEFDRSwKCgoK ICBfX05fQ1NfUFJFQ0VERVMsCgoKCiAgX19OX1NFUF9CWV9TUEFDRSwKCgoKICBfX1BfU0lHTl9Q T1NOLAoKCgogIF9fTl9TSUdOX1BPU04sCgoKCiAgX05MX01PTkVUQVJZX0NSTkNZU1RSLAoKICBf X0lOVF9QX0NTX1BSRUNFREVTLAoKCgogIF9fSU5UX1BfU0VQX0JZX1NQQUNFLAoKCgogIF9fSU5U X05fQ1NfUFJFQ0VERVMsCgoKCiAgX19JTlRfTl9TRVBfQllfU1BBQ0UsCgoKCiAgX19JTlRfUF9T SUdOX1BPU04sCgoKCiAgX19JTlRfTl9TSUdOX1BPU04sCgoKCiAgX05MX01PTkVUQVJZX0RVT19J TlRfQ1VSUl9TWU1CT0wsCiAgX05MX01PTkVUQVJZX0RVT19DVVJSRU5DWV9TWU1CT0wsCiAgX05M X01PTkVUQVJZX0RVT19JTlRfRlJBQ19ESUdJVFMsCiAgX05MX01PTkVUQVJZX0RVT19GUkFDX0RJ R0lUUywKICBfTkxfTU9ORVRBUllfRFVPX1BfQ1NfUFJFQ0VERVMsCiAgX05MX01PTkVUQVJZX0RV T19QX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX05fQ1NfUFJFQ0VERVMsCiAgX05M X01PTkVUQVJZX0RVT19OX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9QX0NT X1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX1BfU0VQX0JZX1NQQUNFLAogIF9OTF9N T05FVEFSWV9EVU9fSU5UX05fQ1NfUFJFQ0VERVMsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfTl9T RVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19QX1NJR05fUE9TTiwKICBfTkxfTU9ORVRB UllfRFVPX05fU0lHTl9QT1NOLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX1BfU0lHTl9QT1NOLAog IF9OTF9NT05FVEFSWV9EVU9fSU5UX05fU0lHTl9QT1NOLAogIF9OTF9NT05FVEFSWV9VTk9fVkFM SURfRlJPTSwKICBfTkxfTU9ORVRBUllfVU5PX1ZBTElEX1RPLAogIF9OTF9NT05FVEFSWV9EVU9f VkFMSURfRlJPTSwKICBfTkxfTU9ORVRBUllfRFVPX1ZBTElEX1RPLAogIF9OTF9NT05FVEFSWV9D T05WRVJTSU9OX1JBVEUsCiAgX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsCiAgX05MX01P TkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsCiAgX05MX01PTkVUQVJZX0NPREVTRVQsCiAgX05MX05V TV9MQ19NT05FVEFSWSwKCgoKICBfX0RFQ0lNQUxfUE9JTlQgPSAoKChfX0xDX05VTUVSSUMpIDw8 IDE2KSB8ICgwKSksCgoKCiAgUkFESVhDSEFSID0gX19ERUNJTUFMX1BPSU5ULAoKICBfX1RIT1VT QU5EU19TRVAsCgoKCiAgVEhPVVNFUCA9IF9fVEhPVVNBTkRTX1NFUCwKCiAgX19HUk9VUElORywK CgoKICBfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLAogIF9OTF9OVU1FUklDX1RIT1VTQU5E U19TRVBfV0MsCiAgX05MX05VTUVSSUNfQ09ERVNFVCwKICBfTkxfTlVNX0xDX05VTUVSSUMsCgog IF9fWUVTRVhQUiA9ICgoKF9fTENfTUVTU0FHRVMpIDw8IDE2KSB8ICgwKSksCgogIF9fTk9FWFBS LAoKICBfX1lFU1NUUiwKCgoKICBfX05PU1RSLAoKCgogIF9OTF9NRVNTQUdFU19DT0RFU0VULAog IF9OTF9OVU1fTENfTUVTU0FHRVMsCgogIF9OTF9QQVBFUl9IRUlHSFQgPSAoKChfX0xDX1BBUEVS KSA8PCAxNikgfCAoMCkpLAogIF9OTF9QQVBFUl9XSURUSCwKICBfTkxfUEFQRVJfQ09ERVNFVCwK ICBfTkxfTlVNX0xDX1BBUEVSLAoKICBfTkxfTkFNRV9OQU1FX0ZNVCA9ICgoKF9fTENfTkFNRSkg PDwgMTYpIHwgKDApKSwKICBfTkxfTkFNRV9OQU1FX0dFTiwKICBfTkxfTkFNRV9OQU1FX01SLAog IF9OTF9OQU1FX05BTUVfTVJTLAogIF9OTF9OQU1FX05BTUVfTUlTUywKICBfTkxfTkFNRV9OQU1F X01TLAogIF9OTF9OQU1FX0NPREVTRVQsCiAgX05MX05VTV9MQ19OQU1FLAoKICBfTkxfQUREUkVT U19QT1NUQUxfRk1UID0gKCgoX19MQ19BRERSRVNTKSA8PCAxNikgfCAoMCkpLAogIF9OTF9BRERS RVNTX0NPVU5UUllfTkFNRSwKICBfTkxfQUREUkVTU19DT1VOVFJZX1BPU1QsCiAgX05MX0FERFJF U1NfQ09VTlRSWV9BQjIsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9BQjMsCiAgX05MX0FERFJFU1Nf Q09VTlRSWV9DQVIsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9OVU0sCiAgX05MX0FERFJFU1NfQ09V TlRSWV9JU0JOLAogIF9OTF9BRERSRVNTX0xBTkdfTkFNRSwKICBfTkxfQUREUkVTU19MQU5HX0FC LAogIF9OTF9BRERSRVNTX0xBTkdfVEVSTSwKICBfTkxfQUREUkVTU19MQU5HX0xJQiwKICBfTkxf QUREUkVTU19DT0RFU0VULAogIF9OTF9OVU1fTENfQUREUkVTUywKCiAgX05MX1RFTEVQSE9ORV9U RUxfSU5UX0ZNVCA9ICgoKF9fTENfVEVMRVBIT05FKSA8PCAxNikgfCAoMCkpLAogIF9OTF9URUxF UEhPTkVfVEVMX0RPTV9GTVQsCiAgX05MX1RFTEVQSE9ORV9JTlRfU0VMRUNULAogIF9OTF9URUxF UEhPTkVfSU5UX1BSRUZJWCwKICBfTkxfVEVMRVBIT05FX0NPREVTRVQsCiAgX05MX05VTV9MQ19U RUxFUEhPTkUsCgogIF9OTF9NRUFTVVJFTUVOVF9NRUFTVVJFTUVOVCA9ICgoKF9fTENfTUVBU1VS RU1FTlQpIDw8IDE2KSB8ICgwKSksCiAgX05MX01FQVNVUkVNRU5UX0NPREVTRVQsCiAgX05MX05V TV9MQ19NRUFTVVJFTUVOVCwKCiAgX05MX0lERU5USUZJQ0FUSU9OX1RJVExFID0gKCgoX19MQ19J REVOVElGSUNBVElPTikgPDwgMTYpIHwgKDApKSwKICBfTkxfSURFTlRJRklDQVRJT05fU09VUkNF LAogIF9OTF9JREVOVElGSUNBVElPTl9BRERSRVNTLAogIF9OTF9JREVOVElGSUNBVElPTl9DT05U QUNULAogIF9OTF9JREVOVElGSUNBVElPTl9FTUFJTCwKICBfTkxfSURFTlRJRklDQVRJT05fVEVM LAogIF9OTF9JREVOVElGSUNBVElPTl9GQVgsCiAgX05MX0lERU5USUZJQ0FUSU9OX0xBTkdVQUdF LAogIF9OTF9JREVOVElGSUNBVElPTl9URVJSSVRPUlksCiAgX05MX0lERU5USUZJQ0FUSU9OX0FV RElFTkNFLAogIF9OTF9JREVOVElGSUNBVElPTl9BUFBMSUNBVElPTiwKICBfTkxfSURFTlRJRklD QVRJT05fQUJCUkVWSUFUSU9OLAogIF9OTF9JREVOVElGSUNBVElPTl9SRVZJU0lPTiwKICBfTkxf SURFTlRJRklDQVRJT05fREFURSwKICBfTkxfSURFTlRJRklDQVRJT05fQ0FURUdPUlksCiAgX05M X0lERU5USUZJQ0FUSU9OX0NPREVTRVQsCiAgX05MX05VTV9MQ19JREVOVElGSUNBVElPTiwKCgog IF9OTF9OVU0KfTsKIyA1NzUgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzIDQKZXh0ZXJuIGNo YXIgKm5sX2xhbmdpbmZvIChubF9pdGVtIF9faXRlbSkgdGhyb3cgKCk7CiMgNTg2ICIvdXNyL2lu Y2x1ZGUvbGFuZ2luZm8uaCIgMyA0CmV4dGVybiBjaGFyICpfX25sX2xhbmdpbmZvX2wgKG5sX2l0 ZW0gX19pdGVtLCBfX2xvY2FsZV90IGwpOwoKCn0KIyAzOCAiL2hvbWUvYmFuZ2VydGgvYmluL2dj Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2Fs ZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvaWNvbnYuaCIgMSAzIDQKIyAyNCAiL3Vzci9pbmNs dWRlL2ljb252LmgiIDMgNAojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAy NSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7CgoKdHlwZWRlZiB2 b2lkICppY29udl90OwoKCgoKZXh0ZXJuIGljb252X3QgaWNvbnZfb3BlbiAoX19jb25zdCBjaGFy ICpfX3RvY29kZSwgX19jb25zdCBjaGFyICpfX2Zyb21jb2RlKQogICAgIHRocm93ICgpOwoKCgoK ZXh0ZXJuIHNpemVfdCBpY29udiAoaWNvbnZfdCBfX2NkLCBjaGFyICoqX19yZXN0cmljdCBfX2lu YnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19pbmJ5dGVzbGVm dCwKICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19vdXRidWYsCiAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX291dGJ5dGVzbGVmdCk7CgoKZXh0 ZXJuIGludCBpY29udl9jbG9zZSAoaWNvbnZfdCBfX2NkKSB0aHJvdyAoKTsKCn0KIyAzOSAiL2hv bWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4 LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvbGliaW50bC5oIiAx IDMgNAojIDMwICIvdXNyL2luY2x1ZGUvbGliaW50bC5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCgpl eHRlcm4gY2hhciAqZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX21zZ2lkKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGNoYXIgKmRnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgX19jb25z dCBjaGFyICpfX21zZ2lkKQogICAgIHRocm93ICgpOwpleHRlcm4gY2hhciAqX19kZ2V0dGV4dCAo X19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZCkKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSk7CgoKCmV4dGVybiBj aGFyICpkY2dldHRleHQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KSB0aHJvdyAo KTsKZXh0ZXJuIGNoYXIgKl9fZGNnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2Nh dGVnb3J5KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikp KTsKCgoKCmV4dGVybiBjaGFyICpuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX21zZ2lkMSwgX19j b25zdCBjaGFyICpfX21zZ2lkMiwKICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n IGludCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgx KSkpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKTsKCgoKZXh0ZXJuIGNoYXIg KmRuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19t c2dpZDEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19tc2dpZDIsIHVu c2lnbmVkIGxvbmcgaW50IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt YXRfYXJnX18gKDIpKSkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgzKSkpOwoKCgpl eHRlcm4gY2hhciAqZGNuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29u c3QgY2hhciAqX19tc2dpZDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19jYXRlZ29yeSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRf YXJnX18gKDIpKSkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgzKSkpOwoKCgoKCmV4 dGVybiBjaGFyICp0ZXh0ZG9tYWluIChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSkgdGhyb3cg KCk7CgoKCmV4dGVybiBjaGFyICpiaW5kdGV4dGRvbWFpbiAoX19jb25zdCBjaGFyICpfX2RvbWFp bm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2Rpcm5h bWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKF9f Y29uc3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgY2hhciAqX19jb2Rlc2V0KSB0aHJvdyAoKTsKCgoKCgoKCiMgMSAiL2hv bWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDk1ICIvdXNyL2luY2x1ZGUvbGliaW50bC5o IiAyIDMgNAojIDExNSAiL3Vzci9pbmNsdWRlL2xpYmludGwuaCIgMyA0Cn0KIyA0MCAiL2hvbWUv YmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4LWdu dS9iaXRzL2MrK2xvY2FsZS5oIiAyIDMKIyA1MiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMt cHJlL2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAz Cm5hbWVzcGFjZSBzdGQKewogIHR5cGVkZWYgX19sb2NhbGVfdCBfX2NfbG9jYWxlOwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHY+CiAgICBpbnQKICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19v dXQsIGNvbnN0IGludCBfX3NpemUsIGNvbnN0IGNoYXIqIF9fZm10LAoKCgoKCiAgICAgICAgICAg ICAgICAgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjID0gLTEpCiAg ICB7CiAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKF9fTENfQUxMLCBfX251bGwpOwogICAg ICBjaGFyKiBfX3NhdiA9IHN0YXRpY19jYXN0PGNoYXIqPihtYWxsb2Moc3RybGVuKF9fb2xkKSAr IDEpKTsKICAgICAgaWYgKF9fc2F2KQogICAgICAgIHN0cmNweShfX3NhdiwgX19vbGQpOwogICAg ICBzZXRsb2NhbGUoX19MQ19BTEwsICJDIik7CgoKICAgICAgaW50IF9fcmV0OwoKICAgICAgaWYg KF9fcHJlYyA+PSAwKQogICAgICAgIF9fcmV0ID0gc25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19m bXQsIF9fcHJlYywgX192KTsKICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gc25wcmludGYoX19v dXQsIF9fc2l6ZSwgX19mbXQsIF9fdik7CiMgODkgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z LXByZS9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIg MwogICAgICBzZXRsb2NhbGUoX19MQ19BTEwsIF9fc2F2KTsKICAgICAgZnJlZShfX3Nhdik7Cgog ICAgICByZXR1cm4gX19yZXQ7CiAgICB9Cn0KIyA0NyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z LjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvaG9tZS9i YW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2NsaW1pdHMiIDEgMwojIDQ4 ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2NsaW1pdHMi IDMKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuMy9pbmNsdWRlL2xpbWl0cy5oIiAxIDMgNAojIDExICIvaG9tZS9iYW5n ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2lu Y2x1ZGUvbGltaXRzLmgiIDMgNAojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAz IDQKCgoKCgoKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0CiMgMTIyICIvaG9t ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4zL2luY2x1ZGUvbGltaXRzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMSAz IDQKIyAxNDQgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvcG9zaXgxX2xpbS5oIiAxIDMgNAojIDEyNiAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xp bS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAzIDQKIyAzNiAi L3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9saW51 eC9saW1pdHMuaCIgMSAzIDQKIyAzNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDIg MyA0CiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMyA0CiMgMTQ1ICIv dXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9z aXgyX2xpbS5oIiAxIDMgNAojIDE0OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAoKCgoj IDEgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAxIDMgNAojIDM0ICIvdXNyL2luY2x1 ZGUvYml0cy94b3Blbl9saW0uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGlt LmgiIDEgMyA0CiMgMzUgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMgNAojIDE1 MyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAojIDEyMyAiL2hvbWUvYmFuZ2VydGgvYmlu L2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL2xp bWl0cy5oIiAyIDMgNAojIDggIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzIDQKIyAx MiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMy9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAojIDUwICIvaG9tZS9iYW5nZXJ0aC9i aW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2NsaW1pdHMiIDIgMwojIDQ4ICIvaG9tZS9i YW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlZndkLmgi IDIgMwojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMv Y2N0eXBlIiAxIDMKIyA0NyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUv YysrLzMuMy9jY3R5cGUiIDMKCgojIDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMgNAojIDI5 ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CmV4dGVybiAiQyIgewojIDQwICIvdXNyL2luY2x1 ZGUvY3R5cGUuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMgNAojIDM3ICIv dXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5o IiAxIDMgNAojIDM4ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMyA0CiMgNDEgIi91c3IvaW5j bHVkZS9jdHlwZS5oIiAyIDMgNAoKCgoKCgplbnVtCnsKICBfSVN1cHBlciA9ICgoMCkgPCA4ID8g KCgxIDw8ICgwKSkgPDwgOCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIgPSAoKDEp IDwgOCA/ICgoMSA8PCAoMSkpIDw8IDgpIDogKCgxIDw8ICgxKSkgPj4gOCkpLAogIF9JU2FscGhh ID0gKCgyKSA8IDggPyAoKDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikpID4+IDgpKSwKICBf SVNkaWdpdCA9ICgoMykgPCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMpKSA+PiA4 KSksCiAgX0lTeGRpZ2l0ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQpKSA8PCA4KSA6ICgoMSA8PCAo NCkpID4+IDgpKSwKICBfSVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwgOCkgOiAo KDEgPDwgKDUpKSA+PiA4KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwgOCA/ICgoMSA8PCAoNikpIDw8 IDgpIDogKCgxIDw8ICg2KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8IDggPyAoKDEgPDwg KDcpKSA8PCA4KSA6ICgoMSA8PCAoNykpID4+IDgpKSwKICBfSVNibGFuayA9ICgoOCkgPCA4ID8g KCgxIDw8ICg4KSkgPDwgOCkgOiAoKDEgPDwgKDgpKSA+PiA4KSksCiAgX0lTY250cmwgPSAoKDkp IDwgOCA/ICgoMSA8PCAoOSkpIDw8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9JU3B1bmN0 ID0gKCgxMCkgPCA4ID8gKCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+IDgpKSwK ICBfSVNhbG51bSA9ICgoMTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgoMSA8PCAoMTEp KSA+PiA4KSkKfTsKIyA3NSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNApleHRlcm4gX19jb25z dCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90 ICpfX2N0eXBlX3RvbG93ZXI7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b3Vw cGVyOwojIDkxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CmV4dGVybiBpbnQgaXNhbG51bSAo aW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIHRocm93ICgpOwpleHRlcm4g aW50IGlzY250cmwgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdCAoaW50KSB0aHJv dyAoKTsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZ3Jh cGggKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwcmludCAoaW50KSB0aHJvdyAoKTsKZXh0 ZXJuIGludCBpc3B1bmN0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2UgKGludCkg dGhyb3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBp c3hkaWdpdCAoaW50KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzYmxhbmsgKGludCkgdGhyb3cg KCk7CgoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBp bnQgdG91cHBlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaSAo aW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdG9hc2NpaSAoaW50IF9fYykgdGhyb3cg KCk7CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX3Rv bG93ZXIgKGludCkgdGhyb3cgKCk7CiMgMjIzICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CmV4 dGVybiBpbnQgX19pc2FsbnVtX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBp bnQgX19pc2FscGhhX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19p c2NudHJsX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2RpZ2l0 X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2xvd2VyX2wgKGlu dCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2dyYXBoX2wgKGludCwgX19s b2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3ByaW50X2wgKGludCwgX19sb2NhbGVf dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3B1bmN0X2wgKGludCwgX19sb2NhbGVfdCkgdGhy b3cgKCk7CmV4dGVybiBpbnQgX19pc3NwYWNlX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7 CmV4dGVybiBpbnQgX19pc3VwcGVyX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVy biBpbnQgX19pc3hkaWdpdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKZXh0ZXJuIGlu dCBfX2lzYmxhbmtfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBf X3RvbG93ZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCmV4dGVybiBp bnQgX190b3VwcGVyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKIyAyNzYg Ii91c3IvaW5jbHVkZS9jdHlwZS5oIiAzIDQKfQojIDUwICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2NjdHlwZSIgMiAzCiMgNjYgIi9ob21lL2JhbmdlcnRo L2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvY2N0eXBlIiAzCm5hbWVzcGFjZSBzdGQK ewogIHVzaW5nIDo6aXNhbG51bTsKICB1c2luZyA6OmlzYWxwaGE7CiAgdXNpbmcgOjppc2NudHJs OwogIHVzaW5nIDo6aXNkaWdpdDsKICB1c2luZyA6OmlzZ3JhcGg7CiAgdXNpbmcgOjppc2xvd2Vy OwogIHVzaW5nIDo6aXNwcmludDsKICB1c2luZyA6OmlzcHVuY3Q7CiAgdXNpbmcgOjppc3NwYWNl OwogIHVzaW5nIDo6aXN1cHBlcjsKICB1c2luZyA6OmlzeGRpZ2l0OwogIHVzaW5nIDo6dG9sb3dl cjsKICB1c2luZyA6OnRvdXBwZXI7Cn0KIyA0OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMt cHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvaG9tZS9iYW5n ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL3N0cmluZyIgMSAzCiMgNDQgIi9o b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvc3RyaW5nIiAzCgoK CgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvbWVt b3J5IiAxIDMKIyA1MyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr LzMuMy9tZW1vcnkiIDMKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1 ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAxIDMKIyA2NyAiL2hvbWUvYmFuZ2VydGgv YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiMg MSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9jc3RkbGli IiAxIDMKIyA0OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu My9jc3RkbGliIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzIDQKIyAzMyAi L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMu My1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkZGVmLmgi IDEgMyA0CiMgMzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKCmV4dGVybiAiQyIgewoK CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRmbGFncy5oIiAxIDMgNAojIDQzICIvdXNy L2luY2x1ZGUvc3RkbGliLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1 cy5oIiAxIDMgNAojIDY1ICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDMgNAp1bmlv biB3YWl0CiAgewogICAgaW50IHdfc3RhdHVzOwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAg dW5zaWduZWQgaW50IF9fd190ZXJtc2lnOjc7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19jb3Jl ZHVtcDoxOwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfcmV0Y29kZTo4OwogICAgICAgIHVuc2ln bmVkIGludDoxNjsKCgoKCgoKCiAgICAgIH0gX193YWl0X3Rlcm1pbmF0ZWQ7CiAgICBzdHJ1Y3QK ICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3B2YWw6ODsKICAgICAgICB1bnNp Z25lZCBpbnQgX193X3N0b3BzaWc6ODsKICAgICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCiAg ICAgIH0gX193YWl0X3N0b3BwZWQ7CiAgfTsKIyA0NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAy IDMgNAojIDk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNAp0eXBlZGVmIHN0cnVjdAogIHsK ICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAog IHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2X3Q7CgoKCgoK X19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsK ICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZfdDsKIyAxMzMgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMyA0CmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCAodm9pZCkg dGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBhdG9pIChfX2Nv bnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl eHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcg aW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzdHJ0b2YgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xkIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQg c3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7 CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVuc2lv bl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNp Z25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKCgpfX2V4dGVuc2lv bl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVu c2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKIyAyMTUgIi91c3Iv aW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9sIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25n IGludCBfX3N0cnRvdWxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xv Y2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBp bnQgX19zdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50 IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19s b2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlu dCBfX3N0cnRvdWxsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f YmFzZSwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgX19z dHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykK ICAgICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBfX3N0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91 YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK CgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9h dCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg aW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRf aW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7 CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBp bnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpl eHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVu c2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwg KF9fY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg aW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gX19pbmxpbmUgZG91Ymxl CnN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJp Y3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJuYWwgKF9fbnB0 ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0b2wgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog ICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xfaW50ZXJuYWwg KF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVk IGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAg cmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsK fQoKCmV4dGVybiBfX2lubGluZSBmbG9hdApzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJu IF9fc3RydG9mX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19pbmxp bmUgbG9uZyBkb3VibGUKc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xk X2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQoKCgpfX2V4dGVuc2lvbl9fIGV4dGVy biBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkg dGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIs IF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9u ZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewog IHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDAp Owp9CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9s bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xs X2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18g ZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwgKF9fY29uc3Qg Y2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg ICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5h bCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBkb3Vi bGUKYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9k IChfX25wdHIsIChjaGFyICoqKSBfX251bGwpOwp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRvaSAo X19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gKGludCkgc3RydG9sIChf X25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQK YXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9sIChf X25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9f aW5saW5lIGxvbmcgbG9uZyBpbnQKYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAo KQp7CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9CiMg Mzg0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqbDY0YSAobG9uZyBp bnQgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFyICpf X3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCiMgMSAiL3Vzci9pbmNs dWRlL3N5cy90eXBlcy5oIiAxIDMgNAojIDI4ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMg NApleHRlcm4gIkMiIHsKCgoKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vf c2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVf bG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRf dDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKCgp0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsK CgoKdHlwZWRlZiBfX2lub190IGlub190OwoKCgoKCgp0eXBlZGVmIF9faW5vNjRfdCBpbm82NF90 OwoKCgoKdHlwZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoK CgoKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190 OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsK CgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsKIyAxMDQgIi91c3IvaW5jbHVkZS9zeXMv dHlwZXMuaCIgMyA0CnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBlZGVmIF9fc3NpemVfdCBz c2l6ZV90OwoKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19jYWRkcl90 IGNhZGRyX3Q7CgoKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwojIDEzNiAiL3Vzci9pbmNsdWRl L3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBfX3VzZWNvbmRzX3QgdXNlY29uZHNfdDsKCgoKdHlw ZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoKCiMgMSAiL2hvbWUvYmFuZ2VydGgv YmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRl L3N0ZGRlZi5oIiAxIDMgNAojIDE0NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAoK Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0 IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTkwICIvdXNyL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9f bW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9f bW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9f bW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9f bW9kZV9fIChfX0RJX18pKSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRy aWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50 MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgdV9pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBl ZGVmIHVuc2lnbmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJ X18pKSk7Cgp0eXBlZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo X193b3JkX18pKSk7CiMgMjE1ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAojIDEgIi91 c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMyA0CiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2Vs ZWN0LmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMgNAojIDMyICIv dXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv c2lnc2V0LmgiIDEgMyA0CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMyA0CiMg NDYgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRz L3RpbWUuaCIgMSAzIDQKIyA2NyAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzIDQKc3RydWN0 IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1c2Vjb25kc190IHR2X3Vz ZWM7CiAgfTsKIyA0NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzIDQKIyA1NSAiL3Vz ci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0CnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwoK CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAv ICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRl ZiBfX2ZkX21hc2sgZmRfbWFzazsKIyA5NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0 CmV4dGVybiAiQyIgewoKCgoKCgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0 ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0 cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9f ZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3Qg X190aW1lb3V0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHBzZWxlY3QgKGludCBfX25mZHMs IGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0 ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jl c3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1l c3BlYyAqX19yZXN0cmljdCBfX3RpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgX19z aWdzZXRfdCAqX19yZXN0cmljdCBfX3NpZ21hc2spIHRocm93ICgpOwoKCn0KIyAyMTYgIi91c3Iv aW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFj cm9zLmgiIDEgMyA0CiMgMjE5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoKCgp0 eXBlZGVmIF9fYmxrc2l6ZV90IGJsa3NpemVfdDsKCgoKCgoKdHlwZWRlZiBfX2Jsa2NudF90IGJs a2NudF90OwoKCgp0eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Jsa2NudF90OwoKCgp0eXBlZGVmIF9f ZnNmaWxjbnRfdCBmc2ZpbGNudF90OwojIDI1NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAz IDQKdHlwZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzYmxrY250NjRf dCBmc2Jsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2ZpbGNudDY0X3QgZnNmaWxjbnQ2NF90OwoKCn0K IyAzOTEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKCgoKCgoKZXh0ZXJuIGxvbmcgaW50 IHJhbmRvbSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQg aW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSAodW5zaWdu ZWQgaW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fc3RhdGVsZW4pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc2V0c3RhdGUgKGNo YXIgKl9fc3RhdGVidWYpIHRocm93ICgpOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewog ICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsK ICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAg ICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFu ZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qg Kl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVu c2lnbmVkIGludCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRocm93ICgpOwoK ZXh0ZXJuIGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19yZXN0 cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxl biwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0 IF9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmlj dCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAq X19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSB0 aHJvdyAoKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0aHJvdyAoKTsK CgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBkb3Vi bGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4 dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IG5y YW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4g bG9uZyBpbnQgbXJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4 ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQg c3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJuIHVuc2lnbmVkIHNo b3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSB0aHJvdyAo KTsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIHRo cm93ICgpOwoKCgoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBp bnQgX194WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAgICB1bnNpZ25l ZCBzaG9ydCBpbnQgX19jOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsKICAgIHVuc2ln bmVkIGxvbmcgbG9uZyBpbnQgX19hOwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVj dCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg ICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGVyYW5k NDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAg ICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4g aW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwK ICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJv dyAoKTsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNd LAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBf X2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVz dWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0 YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpf X3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2ln bmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRy YW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxv bmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNyYW5k NDhfciAobG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikK ICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBf X3NlZWQxNnZbM10sCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f YnVmZmVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBp bnQgX19wYXJhbVs3XSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEg Kl9fYnVmZmVyKSB0aHJvdyAoKTsKIyA1MjcgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4 dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6 ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoK CgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2b2lkICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkIGZyZWUgKHZv aWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSB0 aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMyA0CiMgMjUgIi91c3Iv aW5jbHVkZS9hbGxvY2EuaCIgMyA0CiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMg NAojIDI2ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMyA0CgpleHRlcm4gIkMiIHsKCgoKCgpl eHRlcm4gdm9pZCAqYWxsb2NhIChzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCgp9CiMgNTQ3 ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMyA0CgoKCgpleHRlcm4gdm9pZCAqdmFsbG9jIChz aXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoK ZXh0ZXJuIGludCBwb3NpeF9tZW1hbGlnbiAodm9pZCAqKl9fbWVtcHRyLCBzaXplX3QgX19hbGln bm1lbnQsIHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs bG9jX18pKTsKCgoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX25vcmV0dXJuX18pKTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMp ICh2b2lkKSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMp IChpbnQgX19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfRXhpdCAoaW50IF9fc3RhdHVz KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gY2hh ciAqZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFy ICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBp bnQgc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBp bnQgX19yZXBsYWNlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9fY29u c3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9p ZCkgdGhyb3cgKCk7CiMgNjIzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hh ciAqbWt0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQg bWtzdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjQwICIvdXNyL2luY2x1ZGUv c3RkbGliLmgiIDMgNApleHRlcm4gaW50IG1rc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkgdGhy b3cgKCk7CiMgNjUwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqbWtk dGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN5c3RlbSAo X19jb25zdCBjaGFyICpfX2NvbW1hbmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqY2Fu b25pY2FsaXplX2ZpbGVfbmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwojIDY3 MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIg Kl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgdGhyb3cgKCk7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19j b21wYXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRlZiBf X2NvbXBhcl9mbl90IGNvbXBhcmlzb25fZm5fdDsKCgoKCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAo X19jb25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2Nv bXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1i LCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBh cik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcg bG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIs IGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK ZXh0ZXJuIGxkaXZfdCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18g ZXh0ZXJuIGxsZGl2X3QgbGxkaXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyA3MjggIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMyA0CmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0 LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0 cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3Zh bHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAg ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq Z2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgp OwoKCgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGln aXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19y ZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91Ymxl IF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJp Y3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFy ICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1Zikg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25k aWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9f cmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAg ICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3Zh bHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAg ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAg ICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHFlY3Z0 X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAg ICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAg ICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93 ICgpOwpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp dCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jl c3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm LCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0 IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtYnRvd2MgKHdj aGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjdG9t YiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90 IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7 CgpleHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90 IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBj aGFyICpfX3Jlc3BvbnNlKSB0aHJvdyAoKTsKIyA4MDggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg MyA0CmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsCiAg ICAgICAgICAgICAgICAgICAgICBjaGFyICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLAog ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIHRocm93ICgp OwoKCgoKCmV4dGVybiB2b2lkIHNldGtleSAoX19jb25zdCBjaGFyICpfX2tleSkgdGhyb3cgKCk7 CgoKCgoKCgpleHRlcm4gaW50IHBvc2l4X29wZW5wdCAoaW50IF9fb2ZsYWcpIHRocm93ICgpOwoK CgoKCgoKZXh0ZXJuIGludCBncmFudHB0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgdW5sb2NrcHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpwdHNuYW1l IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRzbmFtZV9yIChpbnQgX19m ZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBn ZXRwdCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgZ2V0bG9hZGF2ZyAoZG91Ymxl IF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkgdGhyb3cgKCk7CgoKCgoKfQojIDUzICIvaG9tZS9i YW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2NzdGRsaWIiIDIgMwojIDg0 ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2NzdGRsaWIi IDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpkaXZfdDsKICB1c2luZyA6OmxkaXZfdDsKCiAg dXNpbmcgOjphYm9ydDsKICB1c2luZyA6OmFiczsKICB1c2luZyA6OmF0ZXhpdDsKICB1c2luZyA6 OmF0b2Y7CiAgdXNpbmcgOjphdG9pOwogIHVzaW5nIDo6YXRvbDsKICB1c2luZyA6OmJzZWFyY2g7 CiAgdXNpbmcgOjpjYWxsb2M7CiAgdXNpbmcgOjpkaXY7CiAgdXNpbmcgOjpleGl0OwogIHVzaW5n IDo6ZnJlZTsKICB1c2luZyA6OmdldGVudjsKICB1c2luZyA6OmxhYnM7CiAgdXNpbmcgOjpsZGl2 OwogIHVzaW5nIDo6bWFsbG9jOwogIHVzaW5nIDo6bWJsZW47CiAgdXNpbmcgOjptYnN0b3djczsK ICB1c2luZyA6Om1idG93YzsKICB1c2luZyA6OnFzb3J0OwogIHVzaW5nIDo6cmFuZDsKICB1c2lu ZyA6OnJlYWxsb2M7CiAgdXNpbmcgOjpzcmFuZDsKICB1c2luZyA6OnN0cnRvZDsKICB1c2luZyA6 OnN0cnRvbDsKICB1c2luZyA6OnN0cnRvdWw7CiAgdXNpbmcgOjpzeXN0ZW07CiAgdXNpbmcgOjp3 Y3N0b21iczsKICB1c2luZyA6OndjdG9tYjsKCiAgaW5saW5lIGxvbmcKICBhYnMobG9uZyBfX2kp IHsgcmV0dXJuIGxhYnMoX19pKTsgfQoKICBpbmxpbmUgbGRpdl90CiAgZGl2KGxvbmcgX19pLCBs b25nIF9faikgeyByZXR1cm4gbGRpdihfX2ksIF9faik7IH0KfQojIDEzNiAiL2hvbWUvYmFuZ2Vy dGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9jc3RkbGliIiAzCm5hbWVzcGFjZSBf X2dudV9jeHgKewogIHVzaW5nIDo6bGxkaXZfdDsKICB1c2luZyA6Ol9FeGl0OwoKICBpbmxpbmUg bG9uZyBsb25nCiAgYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194IDog LV9feDsgfQoKICBpbmxpbmUgbG9uZyBsb25nCiAgbGxhYnMobG9uZyBsb25nIF9feCkgeyByZXR1 cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsbGRpdl90CiAgZGl2KGxvbmcg bG9uZyBfX24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24g LyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgaW5saW5lIGxsZGl2 X3QKICBsbGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZfdCBfX3E7 IF9fcS5xdW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19xOyB9 CgogIHVzaW5nIDo6YXRvbGw7CiAgdXNpbmcgOjpzdHJ0b2Y7CiAgdXNpbmcgOjpzdHJ0b2xsOwog IHVzaW5nIDo6c3RydG91bGw7CiAgdXNpbmcgOjpzdHJ0b2xkOwp9CgpuYW1lc3BhY2Ugc3RkCnsK ICB1c2luZyBfX2dudV9jeHg6OmxsZGl2X3Q7CiAgdXNpbmcgX19nbnVfY3h4OjpfRXhpdDsKICB1 c2luZyBfX2dudV9jeHg6OmFiczsKICB1c2luZyBfX2dudV9jeHg6OmxsYWJzOwogIHVzaW5nIF9f Z251X2N4eDo6ZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXY7CiAgdXNpbmcgX19nbnVfY3h4 OjphdG9sbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvZjsKICB1c2luZyBfX2dudV9jeHg6OnN0 cnRvbGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b3VsbDsKICB1c2luZyBfX2dudV9jeHg6OnN0 cnRvbGQ7Cn0KIyA2OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr LzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9uZXciIDEgMwojIDQ0ICIvaG9tZS9iYW5nZXJ0aC9i aW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL25ldyIgMwpleHRlcm4gIkMrKyIgewoKbmFt ZXNwYWNlIHN0ZAp7CgoKCgoKICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uCiAg ewogIHB1YmxpYzoKICAgIGJhZF9hbGxvYygpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJh ZF9hbGxvYygpIHRocm93KCk7CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7IH07CiAgZXh0ZXJu IGNvbnN0IG5vdGhyb3dfdCBub3Rocm93OwoKCiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIp KCk7CgogIG5ld19oYW5kbGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcikgdGhyb3coKTsK fQojIDgyICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL25l dyIgMwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxv Yyk7CnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxs b2MpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBk ZWxldGVbXSh2b2lkKikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCBj b25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6 c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVs ZXRlKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3Ig ZGVsZXRlW10odm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKCgppbmxpbmUg dm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCB2b2lkKiBfX3ApIHRocm93KCkgeyByZXR1 cm4gX19wOyB9CmlubGluZSB2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgdm9pZCog X19wKSB0aHJvdygpIHsgcmV0dXJuIF9fcDsgfQoKCmlubGluZSB2b2lkIG9wZXJhdG9yIGRlbGV0 ZSAodm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfTsKaW5saW5lIHZvaWQgb3BlcmF0b3IgZGVsZXRl W10odm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfTsKCn0KIyA3MCAiL2hvbWUvYmFuZ2VydGgvYmlu L2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMg MSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0 bF9wYWlyLmgiIDEgMwojIDY0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk ZS9jKysvMy4zL2JpdHMvc3RsX3BhaXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBmaXJzdF90 eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNlY29u ZDsKCgoKCiAgcGFpcigpIDogZmlyc3QoKSwgc2Vjb25kKCkge30KCgoKCiAgcGFpcihjb25zdCBf VDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30KCgog IHRlbXBsYXRlIDxjbGFzcyBfVTEsIGNsYXNzIF9VMj4KICBwYWlyKGNvbnN0IHBhaXI8X1UxLCBf VTI+JiBfX3ApIDogZmlyc3QoX19wLmZpcnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQpIHt9Cn07CgoK dGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv bnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICBy ZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5zZWNvbmQ7 Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9y PChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7 CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fAogICAgICAgICAoIShfX3kuZmlyc3Qg PCBfX3guZmlyc3QpICYmIF9feC5zZWNvbmQgPCBfX3kuc2Vjb25kKTsKfQoKCnRlbXBsYXRlIDxj bGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBwYWlyPF9U MSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX194 ID09IF9feSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29s IG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1Qy PiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNs YXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194 LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoK CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShj b25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAg cmV0dXJuICEoX194IDwgX195KTsKfQojIDE0MCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMt cHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9wYWlyLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9U MSwgY2xhc3MgX1QyPgoKCmlubGluZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIoX1QxIF9feCwg X1QyIF9feSkKCgoKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCn0KIyA3 MiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0 bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j bHVkZS9jKysvMy4zL2JpdHMvdHlwZV90cmFpdHMuaCIgMSAzCiMgNTMgIi9ob21lL2JhbmdlcnRo L2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy90eXBlX3RyYWl0cy5oIiAzCiMg OTAgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy90 eXBlX3RyYWl0cy5oIiAzCnN0cnVjdCBfX3RydWVfdHlwZSB7fTsKc3RydWN0IF9fZmFsc2VfdHlw ZSB7fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzIHsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSB0aGlzX2R1bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0OwojIDExMyAi L2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3R5cGVf dHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v cGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZTw+IHN0 cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBj aGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90 cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1 bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50 X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj dCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl PD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90 eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBp bnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry YWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f dHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1w bGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5 cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmcgbG9u Zz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh aXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f dHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4g c3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9 OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19p bnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdy YWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxjaGFyPiB7CiAgdHlwZWRlZiBf X3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxz aWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxh dGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVl X3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJf dD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1 Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7CiAgdHlw ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50 ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRl PD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewogIHR5cGVkZWYgX190cnVlX3R5 cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZz4gewog IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz X2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRl ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl cjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK fTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3Igewog ICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfTm9ybWFsOwp9OwoKCm5hbWVzcGFjZSBfX2dudV9jeHgK ewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4gY2xh c3MgX19ub3JtYWxfaXRlcmF0b3I7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlw ZW5hbWUgX0NvbnRhaW5lcj4Kc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3I8IF9fZ251X2N4eDo6 X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiA+IHsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBfTm9ybWFsOwp9OwojIDczICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1w cmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9ob21lL2Jh bmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3Jf YmFzZV90eXBlcy5oIiAxIDMKIyA2OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2lu Y2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKCm5hbWVzcGFj ZSBzdGQKewojIDc5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysv My4zL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwogIHN0cnVjdCBpbnB1dF9pdGVy YXRvcl90YWcge307CgogIHN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3Qg Zm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBz dHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9yd2FyZF9pdGVyYXRv cl90YWcge307CgogIHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBi aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKIyAxMDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9n Y2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NhdGVnb3J5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1l IF9EaXN0YW5jZSA9IHB0cmRpZmZfdCwKICAgICAgICAgICB0eXBlbmFtZSBfUG9pbnRlciA9IF9U cCosIHR5cGVuYW1lIF9SZWZlcmVuY2UgPSBfVHAmPgogICAgc3RydWN0IGl0ZXJhdG9yCiAgICB7 CgogICAgICB0eXBlZGVmIF9DYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKCiAgICAgIHR5cGVk ZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5 cGU7CgogICAgICB0eXBlZGVmIF9Qb2ludGVyIHBvaW50ZXI7CgogICAgICB0eXBlZGVmIF9SZWZl cmVuY2UgcmVmZXJlbmNlOwogICAgfTsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh dG9yPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyIHBvaW50ZXI7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgfTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAq PiB7CiAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0 ZWdvcnk7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlm Zl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgICAgIHR5 cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg ICBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsKICAgICAgdHlwZWRlZiByYW5k b21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICAgICAgdHlwZWRlZiBf VHAgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwog ICAgICB0eXBlZGVmIGNvbnN0IF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAm IHJlZmVyZW5jZTsKICAgIH07CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAg aW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5 CiAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJikKICAgIHsgcmV0dXJuIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCk7IH0KCn0KIyA3 NCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0 bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j bHVkZS9jKysvMy4zL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMSAzCiMgNjggIi9o b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRl cmF0b3JfYmFzZV9mdW5jcy5oIiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl L2luY2x1ZGUvYysrLzMuMy9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgMzkgIi9ob21lL2Jh bmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9jb25jZXB0X2NoZWNr LmgiIDMKIyA2OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAg dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICBpbmxpbmUgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBfX2Rpc3Rh bmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg ICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCiAgICAgIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAw OwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICArK19fZmlyc3Q7ICsr X19uOwogICAgICB9CiAgICAgIHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBfX2Rpc3RhbmNl KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAg ICAgCiAgICAgIHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0OwogICAgfQojIDEwOSAiL2hvbWUvYmFu Z2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9pdGVyYXRvcl9i YXNlX2Z1bmNzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgIGlu bGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNl X3R5cGUKICAgIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y IF9fbGFzdCkKICAgIHsKCiAgICAgIHJldHVybiBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlubGluZSB2b2lkCiAgICBfX2Fk dmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcp CiAgICB7CgogICAgIAogICAgICB3aGlsZSAoX19uLS0pICsrX19pOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAg ICBpbmxpbmUgdm9pZAogICAgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwg X0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykK ICAgIHsKCiAgICAgCgogICAgICBpZiAoX19uID4gMCkKICAgICAgICB3aGlsZSAoX19uLS0pICsr X19pOwogICAgICBlbHNlCiAgICAgICAgd2hpbGUgKF9fbisrKSAtLV9faTsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+ CiAgICBpbmxpbmUgdm9pZAogICAgX19hZHZhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19p LCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn KQogICAgewoKICAgICAKICAgICAgX19pICs9IF9fbjsKICAgIH0KIyAxNjIgIi9ob21lL2Jhbmdl cnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3JfYmFz ZV9mdW5jcy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1l IF9EaXN0YW5jZT4KICAgIGlubGluZSB2b2lkCiAgICBhZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBf X2ksIF9EaXN0YW5jZSBfX24pCiAgICB7CgogICAgICBfX2FkdmFuY2UoX19pLCBfX24sIF9faXRl cmF0b3JfY2F0ZWdvcnkoX19pKSk7CiAgICB9Cn0KIyA3NSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIv aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2l0 ZXJhdG9yLmgiIDEgMwojIDY4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk ZS9jKysvMy4zL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgODkgIi9o b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRl cmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGNsYXNzIHJldmVy c2VfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAgICAgIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAgICAgICAg ICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVu Y2VfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KICAgIHsKICAgIHByb3RlY3RlZDoKICAg ICAgX0l0ZXJhdG9yIGN1cnJlbnQ7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9JdGVyYXRv ciBpdGVyYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogICAgICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UgcmVm ZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+ Ojpwb2ludGVyIHBvaW50ZXI7CgogICAgcHVibGljOgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9y KCkgeyB9CgoKCgogICAgICBleHBsaWNpdAogICAgICByZXZlcnNlX2l0ZXJhdG9yKGl0ZXJhdG9y X3R5cGUgX194KSA6IGN1cnJlbnQoX194KSB7IH0KCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3Io Y29uc3QgcmV2ZXJzZV9pdGVyYXRvciYgX194KQogICAgICA6IGN1cnJlbnQoX194LmN1cnJlbnQp IHsgfQoKCgoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAgICAgIHJldmVyc2Vf aXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkKICAgICAgICA6IGN1 cnJlbnQoX194LmJhc2UoKSkgeyB9CgoKCgogICAgICBpdGVyYXRvcl90eXBlCiAgICAgIGJhc2Uo KSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9CgoKCgoKCiAgICAgIHJlZmVyZW5jZQogICAgICBv cGVyYXRvciooKSBjb25zdAogICAgICB7CiAgICAgICAgX0l0ZXJhdG9yIF9fdG1wID0gY3VycmVu dDsKICAgICAgICByZXR1cm4gKi0tX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcG9pbnRlcgog ICAgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCgoKCgoK ICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAgICAg ICAtLWN1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJl dmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICByZXZl cnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAgLS1jdXJyZW50OwogICAgICAgIHJl dHVybiBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBv cGVyYXRvci0tKCkKICAgICAgewogICAgICAgICsrY3VycmVudDsKICAgICAgICByZXR1cm4gKnRo aXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciBvcGVyYXRvci0tKGludCkK ICAgICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgICAgICAr K2N1cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVy c2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0CiAg ICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3VycmVudCAtIF9fbik7IH0KCgoKCgoKICAg ICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19u KQogICAgICB7CiAgICAgICAgY3VycmVudCAtPSBfX247CiAgICAgICAgcmV0dXJuICp0aGlzOwog ICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItKGRpZmZl cmVuY2VfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3Vy cmVudCArIF9fbik7IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0 b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY3VycmVudCArPSBfX247 CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJlZmVyZW5jZQogICAg ICBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooKnRoaXMg KyBfX24pOyB9CiAgICB9OwojIDI2OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2lu Y2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9p dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRl cmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFz ZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAg ICBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAg ICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJl dHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl cmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCByZXZlcnNlX2l0ZXJh dG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRv cjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29u c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3Qg cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kgPCBfX3g7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9w ZXJhdG9yPD0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAg ICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0 dXJuICEoX195IDwgX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBp bmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRv cj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+ JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0l0ZXJhdG9yPgogICAgaW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y Pjo6ZGlmZmVyZW5jZV90eXBlCiAgICBvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf SXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl cmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxf SXRlcmF0b3I+CiAgICBvcGVyYXRvcisodHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0 b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRl cmF0b3I8X0l0ZXJhdG9yPiYgX194KQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRl cmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOyB9CiMgMzI5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3IKICAg IDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQs IHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsK CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CgoK ICAgICAgZXhwbGljaXQKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194 KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyAzNTUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z LXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBiYWNrX2lu c2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0 X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7CiAgICAgICAgY29udGFpbmVyLT5wdXNoX2JhY2so X192YWx1ZSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgYmFja19pbnNl cnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAg YmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsg fQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJl dHVybiAqdGhpczsgfQogICAgfTsKIyAzODYgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXBy ZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l cj4KICAgIGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQogICAgeyByZXR1cm4gYmFja19p bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsgfQojIDQwMSAiL2hvbWUvYmFuZ2VydGgv YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGZyb250X2luc2VydF9pdGVy YXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9p ZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29u dGFpbmVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJf dHlwZTsKCgogICAgICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYg X194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyA0MjYgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBmcm9u dF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFpbmVyOjpj b25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogICAgICAgIGNvbnRhaW5lci0+cHVzaF9m cm9udChfX3ZhbHVlKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBmcm9u dF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoK ICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4g KnRoaXM7IH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhp bnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwojIDQ1NyAiL2hvbWUvYmFuZ2VydGgvYmluL2dj Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGlubGluZSBmcm9udF9pbnNlcnRfaXRlcmF0b3I8 X0NvbnRhaW5lcj4KICAgIGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkKICAgIHsgcmV0 dXJuIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CiMgNDc2ICIvaG9t ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2l0ZXJh dG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgaW5zZXJ0 X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lk LCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVy KiBjb250YWluZXI7CiAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7Cgog ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCgoK CiAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWlu ZXI6Oml0ZXJhdG9yIF9faSkKICAgICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQoj IDUxOCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRz L3N0bF9pdGVyYXRvci5oIiAzCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9 KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAg ICB7CiAgICAgICAgaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9fdmFsdWUpOwogICAg ICAgICsraXRlcjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBpbnNlcnRf aXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgaW5z ZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAg ICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsg fQogICAgfTsKIyA1NTAgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr Ky8zLjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWlu ZXIsIHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBpbnNlcnRfaXRlcmF0b3I8X0NvbnRh aW5lcj4KICAgIGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJhdG9yIF9faSkKICAgIHsK ICAgICAgcmV0dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0 b3IoX19pKSk7CiAgICB9Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgKewoKCgoKCgoKICB1c2luZyBz dGQ6Oml0ZXJhdG9yX3RyYWl0czsKICB1c2luZyBzdGQ6Oml0ZXJhdG9yOwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIF9fbm9ybWFs X2l0ZXJhdG9yCiAgICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAgICAgICAg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAg ICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZm ZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgogICAgewogICAgcHJvdGVj dGVkOgogICAgICBfSXRlcmF0b3IgX01fY3VycmVudDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRlcjsKCiAgICAgIF9f bm9ybWFsX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigpKSB7IH0KCiAgICAgIGV4 cGxpY2l0CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pKSA6IF9N X2N1cnJlbnQoX19pKSB7IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAg aW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyLCBf Q29udGFpbmVyPiYgX19pKQogICAgICAgIDogX01fY3VycmVudChfX2kuYmFzZSgpKSB7IH0KCgog ICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKl9NX2N1cnJl bnQ7IH0KCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIF9N X2N1cnJlbnQ7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkg eyArK19NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IK ICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJl bnQrKyk7IH0KCgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItLSgpIHsg LS1fTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAg ICAgIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50 LS0pOyB9CgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oY29uc3QgZGlmZmVyZW5j ZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQoKICAg ICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgZGlmZmVyZW5jZV90 eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhpczsgfQoKICAg ICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGNvbnN0IGRpZmZlcmVuY2VfdHlw ZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50 ICsgX19uKTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLT0oY29u c3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCAtPSBfX247IHJldHVy biAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItKGNvbnN0 IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVy YXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQoKICAgICAgY29uc3QgX0l0ZXJhdG9yJgogICAgICBi YXNlKCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQogICAgfTsKIyA2NTEgIi9ob21lL2Jh bmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3Iu aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIs IHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj09KGNvbnN0IF9f bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAg ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3Jo cykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAog IG9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVy PiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3Is IF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFz ZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRv clIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvciE9KGNvbnN0 IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAg ICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBf X3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9v bAogIG9wZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFp bmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0 b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMu YmFzZSgpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRl cmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8KGNv bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAg ICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4m IF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJv b2wKICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFp bmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0 b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5i YXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJh dG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPihjb25z dCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAg ICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBf X3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29s CiAgb3BlcmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5l cj4mIF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3Is IF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNl KCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9y UiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPD0oY29uc3Qg X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAg ICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9f cmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29s CiAgb3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu ZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv ciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5i YXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJh dG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPj0oY29u c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAg ICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4m IF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBi b29sCiAgb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250 YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy YXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jo cy5iYXNlKCk7IH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1l IF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIHR5cGVuYW1lIF9fbm9y bWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUKICBv cGVyYXRvci0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4m IF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwg X0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAtIF9fcmhzLmJhc2Uo KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+ CiAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4KICBvcGVy YXRvcisodHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPjo6 ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8 X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQogIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9y PF9JdGVyYXRvciwgX0NvbnRhaW5lcj4oX19pLmJhc2UoKSArIF9fbik7IH0KfQojIDc2ICIvaG9t ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29i YXNlLmgiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewojIDkxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgaW5s aW5lIHZvaWQKICAgIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBf X2IpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJk SXRlcjE+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsKCgog ICAgIAogICAgIAogICAgIAogICAgIAoKICAgICAgX1ZhbHVlVHlwZTEgX190bXAgPSAqX19hOwog ICAgICAqX19hID0gKl9fYjsKICAgICAgKl9fYiA9IF9fdG1wOwogICAgfQojIDExOCAiL2hvbWUv YmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFz ZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAo X1RwJiBfX2EsIF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAgIF9UcCBfX3RtcCA9IF9fYTsK ICAgICAgX19hID0gX19iOwogICAgICBfX2IgPSBfX3RtcDsKICAgIH0KIyAxNDYgIi9ob21lL2Jh bmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jhc2Uu aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBt aW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAgIGlm IChfX2IgPCBfX2EpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMgMTY2ICIvaG9tZS9i YW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29iYXNl LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAg bWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBp ZiAoX19hIDwgX19iKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE4NiAiL2hvbWUv YmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFz ZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlu bGluZSBjb25zdCBfVHAmCiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBf Q29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYiwgX19hKSkgcmV0dXJu IF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAyMDQgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z LXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAg bWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQogICAg ewoKICAgICAgaWYgKF9fY29tcChfX2EsIF9fYikpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAg ICB9CiMgMjIxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4z L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0 eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5KF9J bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgX091dHB1dEl0 ZXIgX19yZXN1bHQsCiAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBm b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAgICAgICAg Kl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgog ICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz dWx0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZl cmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlOwogICAgICBmb3IgKF9EaXN0YW5jZSBfX24g PSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgewogICAgICAgICpfX3Jlc3VsdCA9 ICpfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgICArK19fcmVzdWx0OwogICAgICB9 CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog ICAgaW5saW5lIF9UcCoKICAgIF9fY29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJzdCwgY29u c3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICB7CiAgICAgIG1lbW1vdmUoX19yZXN1 bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAgICAgcmV0 dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0 SXRlcgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAg ICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9j YXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlw ZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9hdXgy KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBf T3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19m aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgy KF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdWx0 LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFz dCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAq CiAgICBfX2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LAog ICAgICAgICAgICAgICAgX1RwKiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBf X2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0 cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAg ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2 YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f dHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IK ICAgICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX091dHB1dEl0ZXIoX19jb3B5X2F1eDIo X19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19y ZXN1bHQuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZp YWwoKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf T3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRl ciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+OjpoYXNf dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICAgICAgcmV0 dXJuIF9fY29weV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSk7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAg aW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3Ry dWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9y PF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIo X19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+ CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs IF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0 ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29w eV9uaTIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CiMgMzM5 ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3Rs X2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf T3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgY29weShfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAg ICAgCiAgICAgCgoKICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxf SW5wdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgIHJldHVybiBfX2NvcHlfbmkxKF9f Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0 ZXIyPgogICAgaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIKICAgIF9fY29weV9iYWNrd2FyZChf QmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAg ICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxl IChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICAg ICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj ZXNzSXRlciwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIF9CaWRpcmVj dGlvbmFsSXRlcgogICAgX19jb3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVy YXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj ZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX247CiAgICAgIGZvciAoX19uID0gX19sYXN0IC0g X19maXJzdDsgX19uID4gMDsgLS1fX24pCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7 CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAg ICAgICB0eXBlbmFtZSBfQm9vbFR5cGU+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3Bh dGNoCiAgICB7CiAgICAgIHN0YXRpYyBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICAgIGNvcHkoX0Jp ZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0 dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRl cmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCos IF9fdHJ1ZV90eXBlPgogICAgewogICAgICBzdGF0aWMgX1RwKgogICAgICBjb3B5KGNvbnN0IF9U cCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAgIHsKICAg ICAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgICAgbWVt bW92ZShfX3Jlc3VsdCAtIF9OdW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAgICAg ICAgcmV0dXJuIF9fcmVzdWx0IC0gX051bTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwPgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAq LCBfVHAqLCBfX3RydWVfdHlwZT4KICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29weShj b25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAg ICB7CiAgICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBf X3RydWVfdHlwZT4KICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsK ICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4K ICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfYXV4KF9CSTEgX19maXJzdCwgX0JJ MSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190 eXBlX3RyYWl0czx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0 b3IgX1RyaXZpYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJMSwg X0JJMiwgX1RyaXZpYWw+CiAgICAgICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3Qs IF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9C STI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRl cmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1 cm4gX0JJMihfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQuYmFz ZSgpKSk7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBp bmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJ MSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29w eV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGUg PHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5 X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0 LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0 ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3 YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jl c3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBl bmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3Jt YWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAg ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3Jt YWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9p dGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNDc3ICIv aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2Fs Z29iYXNlLmgiIDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAg IGlubGluZSBfQkkyCiAgICBjb3B5X2JhY2t3YXJkKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3Qs IF9CSTIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMT46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAg ICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3Qs IF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwogICAgfQojIDUwOSAiL2hvbWUvYmFuZ2VydGgvYmlu L2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBm aWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAm IF9fdmFsdWUpCiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg KytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAgIH0KIyA1MzEgIi9ob21l L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jh c2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwg dHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIGZpbGxfbihfT3V0cHV0SXRlciBfX2Zp cnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCgogICAgICBm b3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX3Zh bHVlOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKICBpbmxpbmUgdm9pZAogIGZpbGwo dW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LCBjb25zdCB1bnNp Z25lZCBjaGFyJiBfX2MpCiAgewogICAgdW5zaWduZWQgY2hhciBfX3RtcCA9IF9fYzsKICAgIG1l bXNldChfX2ZpcnN0LCBfX3RtcCwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUgdm9p ZAogIGZpbGwoc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHNpZ25lZCBjaGFyKiBfX2xhc3QsIGNvbnN0 IHNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgICBt ZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBfX2xhc3Qg LSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB2b2lkCiAgZmlsbChjaGFyKiBfX2ZpcnN0LCBjaGFy KiBfX2xhc3QsIGNvbnN0IGNoYXImIF9fYykKICB7CiAgICBjaGFyIF9fdG1wID0gX19jOwogICAg bWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0 IC0gX19maXJzdCk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSB1 bnNpZ25lZCBjaGFyKgogICAgZmlsbF9uKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIF9TaXplIF9f biwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmlyc3QsIF9f Zmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBzaWduZWQgY2hhcioKICAgIGZpbGxf bihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAgICB7 CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9f Zmlyc3QgKyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5l IGNoYXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBjaGFyJiBf X2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAgICAg cmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CiMgNjA2ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBwYWlyPF9J bnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4KICAgIG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIp CiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEg IT0gX19sYXN0MSAmJiAqX19maXJzdDEgPT0gKl9fZmlyc3QyKSB7CiAgICAgICAgKytfX2ZpcnN0 MTsKICAgICAgICArK19fZmlyc3QyOwogICAgICB9CiAgICAgIHJldHVybiBwYWlyPF9JbnB1dEl0 ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKICAgIH0KIyA2NDAgIi9ob21l L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jh c2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJ dGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9J bnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx IF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAg IF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAg ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwg Kl9fZmlyc3QyKSkgewogICAgICAgICsrX19maXJzdDE7CiAgICAgICAgKytfX2ZpcnN0MjsKICAg ICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3Qx LCBfX2ZpcnN0Mik7CiAgICB9CiMgNjY4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUv aW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBpbmxpbmUgYm9vbAogICAg ZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAg IGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAg ICAgICBpZiAoISgqX19maXJzdDEgPT0gKl9fZmlyc3QyKSkKICAgICAgICAgIHJldHVybiBmYWxz ZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiMgNjk5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9C aW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgYm9vbAogICAgZXF1YWwoX0lucHV0SXRlcjEgX19m aXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0 MiwKICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAg CiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsr X19maXJzdDIpCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3Qy KSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiMgNzMy ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3Rs X2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUg X0lucHV0SXRlcjI+CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJ dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoK ICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICAgICAgOyArK19fZmlyc3QxLCArK19f Zmlyc3QyKSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgICAgIHJl dHVybiB0cnVlOwogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICBy ZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYg X19maXJzdDIgIT0gX19sYXN0MjsKICAgIH0KIyA3NjcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0Nv bXBhcmU+CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBf X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAg IGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAg ICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9f Zmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKF9f Y29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg IH0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0 MjsKICAgIH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1 bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwgY29u c3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKICB7CiAgICBjb25zdCBzaXplX3QgX19sZW4xID0g X19sYXN0MSAtIF9fZmlyc3QxOwogICAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBf X2ZpcnN0MjsKICAgIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJz dDIsIG1pbihfX2xlbjEsIF9fbGVuMikpOwogICAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jl c3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7CiAgfQoKICBpbmxpbmUgYm9vbAogIGxleGljb2dy YXBoaWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3Qx LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBj aGFyKiBfX2xhc3QyKQogIHsKCiAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNv bnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsKCgoK CgoKICB9Cgp9CiMgNTUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr Ky8zLjMvbWVtb3J5IiAyIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j bHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDg4ICIvaG9tZS9iYW5nZXJ0aC9i aW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsbG9jLmgiIDMKIyAxICIv aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Nhc3NlcnQiIDEg MwojIDQ3ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Nh c3NlcnQiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMgNAojIDY1ICIvdXNyL2lu Y2x1ZGUvYXNzZXJ0LmgiIDMgNApleHRlcm4gIkMiIHsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9m YWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwgX19jb25zdCBjaGFy ICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18p KTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJybnVtLCBfX2Nv bnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1 cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9fYXNzZXJ0aW9u LCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCn0KIyA0OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z LjMtcHJlL2luY2x1ZGUvYysrLzMuMy9jYXNzZXJ0IiAyIDMKIyA4OSAiL2hvbWUvYmFuZ2VydGgv YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAx ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvZnVu Y3RleGNlcHQuaCIgMSAzCiMgMzQgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNs dWRlL2MrKy8zLjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmlu L2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAz NSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Z1 bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9l eGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2 b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVp ZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7 CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk CiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf X3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19v dXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9l cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFy KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19z KTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA5 MCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0 bF9hbGxvYy5oIiAyIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk ZS9jKysvMy4zL2JpdHMvc3RsX3RocmVhZHMuaCIgMSAzCiMgNTQgIi9ob21lL2JhbmdlcnRoL2Jp bi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCm5hbWVz cGFjZSBzdGQKewoKCgoKICBzdHJ1Y3QgX1JlZmNvdW50X0Jhc2UKICB7CgogICAgdHlwZWRlZiBz aXplX3QgX1JDX3Q7CgoKICAgIHZvbGF0aWxlIF9SQ190IF9NX3JlZl9jb3VudDsKCgogICAgX19n dGhyZWFkX211dGV4X3QgX01fcmVmX2NvdW50X2xvY2s7CgogICAgX1JlZmNvdW50X0Jhc2UoX1JD X3QgX19uKSA6IF9NX3JlZl9jb3VudChfX24pCiAgICB7CgogICAgICBfX2d0aHJlYWRfbXV0ZXhf dCBfX3RtcCA9IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAgfX07CiAg ICAgIF9NX3JlZl9jb3VudF9sb2NrID0gX190bXA7CgoKCgoKICAgIH0KCiAgICB2b2lkCiAgICBf TV9pbmNyKCkKICAgIHsKICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9s b2NrKTsKICAgICAgKytfTV9yZWZfY291bnQ7CiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2so Jl9NX3JlZl9jb3VudF9sb2NrKTsKICAgIH0KCiAgICBfUkNfdAogICAgX01fZGVjcigpCiAgICB7 CiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICAgIHZv bGF0aWxlIF9SQ190IF9fdG1wID0gLS1fTV9yZWZfY291bnQ7CiAgICAgIF9fZ3RocmVhZF9tdXRl eF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgcmV0dXJuIF9fdG1wOwogICAgfQog IH07CiMgMTA5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4z L2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHRlbXBsYXRlPGludCBfX2R1bW15PgogICAgc3RydWN0 IF9Td2FwX2xvY2tfc3RydWN0CiAgICB7IHN0YXRpYyBfX2d0aHJlYWRfbXV0ZXhfdCBfU19zd2Fw X2xvY2s7IH07CgogIHRlbXBsYXRlPGludCBfX2R1bW15PgogICAgX19ndGhyZWFkX211dGV4X3QK ICAgIF9Td2FwX2xvY2tfc3RydWN0PF9fZHVtbXk+OjpfU19zd2FwX2xvY2sgPSB7MCwgMCwgMCwg UFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAwLCAwIH19OwoKCgogIGlubGluZSB1bnNpZ25lZCBs b25nCiAgX0F0b21pY19zd2FwKHVuc2lnbmVkIGxvbmcgKiBfX3AsIHVuc2lnbmVkIGxvbmcgX19x KQogIHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfU3dhcF9sb2NrX3N0cnVjdDwwPjo6X1Nf c3dhcF9sb2NrKTsKICAgIHVuc2lnbmVkIGxvbmcgX19yZXN1bHQgPSAqX19wOwogICAgKl9fcCA9 IF9fcTsKICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9Td2FwX2xvY2tfc3RydWN0PDA+Ojpf U19zd2FwX2xvY2spOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCn0KIyAxNTUgIi9ob21lL2Jh bmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfdGhyZWFkcy5o IiAzCm5hbWVzcGFjZSBzdGQKewogIHN0cnVjdCBfU1RMX211dGV4X2xvY2sKICB7CgoKCgoKICAg IF9fZ3RocmVhZF9tdXRleF90IF9NX2xvY2s7CgogICAgdm9pZAogICAgX01faW5pdGlhbGl6ZSgp CiAgICB7CiMgMTkyICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysv My4zL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogICAgfQoKICAgIHZvaWQKICAgIF9NX2FjcXVpcmVf bG9jaygpCiAgICB7CgoKCiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9sb2NrKTsKICAg IH0KCiAgICB2b2lkCiAgICBfTV9yZWxlYXNlX2xvY2soKQogICAgewoKCgogICAgICBfX2d0aHJl YWRfbXV0ZXhfdW5sb2NrKCZfTV9sb2NrKTsKICAgIH0KICB9OwojIDIyOCAiL2hvbWUvYmFuZ2Vy dGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF90aHJlYWRzLmgiIDMK ICBzdHJ1Y3QgX1NUTF9hdXRvX2xvY2sKICB7CiAgICBfU1RMX211dGV4X2xvY2smIF9NX2xvY2s7 CgogICAgX1NUTF9hdXRvX2xvY2soX1NUTF9tdXRleF9sb2NrJiBfX2xvY2spIDogX01fbG9jayhf X2xvY2spCiAgICB7IF9NX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0KCiAgICB+X1NUTF9hdXRv X2xvY2soKSB7IF9NX2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH0KCiAgcHJpdmF0ZToKICAgIHZv aWQgb3BlcmF0b3I9KGNvbnN0IF9TVExfYXV0b19sb2NrJik7CiAgICBfU1RMX2F1dG9fbG9jayhj b25zdCBfU1RMX2F1dG9fbG9jayYpOwogIH07Cgp9CiMgOTEgIi9ob21lL2JhbmdlcnRoL2Jpbi9n Y2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCgojIDEgIi9o b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51 eC1nbnUvYml0cy9hdG9taWNpdHkuaCIgMSAzCiMgMzMgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9hdG9taWNpdHku aCIgMwp0eXBlZGVmIGludCBfQXRvbWljX3dvcmQ7CgpzdGF0aWMgaW5saW5lIF9BdG9taWNfd29y ZApfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fZXhjaGFuZ2VfYW5kX2FkZCAodm9sYXRp bGUgX0F0b21pY193b3JkICpfX21lbSwgaW50IF9fdmFsKQp7CiAgcmVnaXN0ZXIgX0F0b21pY193 b3JkIF9fcmVzdWx0OwogIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgeGFkZGwgJTAsJTIi CiAgICAgICAgICAgICAgICAgICAgICAgIDogIj1yIiAoX19yZXN1bHQpCiAgICAgICAgICAgICAg ICAgICAgICAgIDogIjAiIChfX3ZhbCksICJtIiAoKl9fbWVtKQogICAgICAgICAgICAgICAgICAg ICAgICA6ICJtZW1vcnkiKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnN0YXRpYyBpbmxpbmUgdm9p ZApfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fYXRvbWljX2FkZCAodm9sYXRpbGUgX0F0 b21pY193b3JkKiBfX21lbSwgaW50IF9fdmFsKQp7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJs b2NrOyBhZGRsICUwLCUxIgogICAgICAgICAgICAgICAgICAgICAgICA6IDogImlyIiAoX192YWwp LCAibSIgKCpfX21lbSkgOiAibWVtb3J5Iik7Cn0KIyA5MyAiL2hvbWUvYmFuZ2VydGgvYmluL2dj Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKCm5hbWVzcGFj ZSBzdGQKewojIDEwNCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr LzMuMy9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgY2xhc3MgX19uZXdfYWxsb2MKICB7CiAgcHVibGlj OgogICAgc3RhdGljIHZvaWQqCiAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4g OjpvcGVyYXRvciBuZXcoX19uKTsgfQoKICAgIHN0YXRpYyB2b2lkCiAgICBkZWFsbG9jYXRlKHZv aWQqIF9fcCwgc2l6ZV90KQogICAgeyA6Om9wZXJhdG9yIGRlbGV0ZShfX3ApOyB9CiAgfTsKIyAx MjcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9z dGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICBjbGFzcyBfX21hbGxvY19h bGxvY190ZW1wbGF0ZQogICAgewogICAgcHJpdmF0ZToKICAgICAgc3RhdGljIHZvaWQqIF9TX29v bV9tYWxsb2Moc2l6ZV90KTsKCgoKICAgICAgc3RhdGljIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nf b29tX2hhbmRsZXIpKCk7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxs b2NhdGUoc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9j KF9fbik7CiAgICAgICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxv YyhfX24pOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQoKICAgICAgc3RhdGljIHZv aWQKICAgICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCApCiAgICAgIHsgZnJlZShfX3Ap OyB9CiMgMTYxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4z L2JpdHMvc3RsX2FsbG9jLmgiIDMKICAgICAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hh bmRsZXIodm9pZCAoKl9fZikoKSkpKCkKICAgICAgewogICAgICAgIHZvaWQgKCogX19vbGQpKCkg PSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBfX21hbGxvY19hbGxvY19vb21f aGFuZGxlciA9IF9fZjsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KICAgIH07CgoKICB0 ZW1wbGF0ZTxpbnQgX19pbnN0PgogICAgdm9pZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxf X2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7CgogIHRlbXBsYXRlPGlu dCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6 CiAgICBfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCiAgICB7CiAgICAgIHZvaWQgKCogX19teV9t YWxsb2NfaGFuZGxlcikoKTsKICAgICAgdm9pZCogX19yZXN1bHQ7CgogICAgICBmb3IgKDs7KQog ICAgICAgIHsKICAgICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19v b21faGFuZGxlcjsKICAgICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpCiAgICAg ICAgICAgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKICAgICAgICAgICgqX19teV9tYWxsb2Nf aGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgICBp ZiAoX19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICB9CiAgICB9 CiMgMjE2ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Jp dHMvc3RsX2FsbG9jLmgiIDMKICB0eXBlZGVmIF9fbmV3X2FsbG9jIF9fbWVtX2ludGVyZmFjZTsK IyAyMjkgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0 cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9j PgogICAgY2xhc3MgX19zaW1wbGVfYWxsb2MKICAgIHsKICAgIHB1YmxpYzoKICAgICAgc3RhdGlj IF9UcCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gMCA9PSBfX24g PyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHApKTsgfQoKICAg ICAgc3RhdGljIF9UcCoKICAgICAgYWxsb2NhdGUoKQogICAgICB7IHJldHVybiAoX1RwKikgX0Fs bG9jOjphbGxvY2F0ZShzaXplb2YgKF9UcCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBk ZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgICB7IGlmICgwICE9IF9fbikgX0Fs bG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mIChfVHApKTsgfQoKICAgICAgc3RhdGlj IHZvaWQKICAgICAgZGVhbGxvY2F0ZShfVHAqIF9fcCkKICAgICAgeyBfQWxsb2M6OmRlYWxsb2Nh dGUoX19wLCBzaXplb2YgKF9UcCkpOyB9CiAgICB9OwojIDI2NSAiL2hvbWUvYmFuZ2VydGgvYmlu L2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgX19kZWJ1Z19hbGxvYwogICAgewogICAgcHJp dmF0ZToKCgogICAgICBlbnVtIHtfU19leHRyYSA9IDh9OwoKICAgIHB1YmxpYzoKICAgICAgc3Rh dGljIHZvaWQqCiAgICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICBjaGFy KiBfX3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRlKF9fbiArIChpbnQpIF9TX2V4dHJh KTsKICAgICAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX247CiAgICAgICAgcmV0dXJuIF9fcmVz dWx0ICsgKGludCkgX1NfZXh0cmE7CiAgICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRl YWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgY2hhciogX19y ZWFsX3AgPSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0cmE7CiAgICAgICAgKHN0YXRpY19jYXN0 PHZvaWQ+ICgoKihzaXplX3QqKV9fcmVhbF9wID09IF9fbikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwg KCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19uIiwgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z LXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxsb2MuaCIsIDI4NiwgX19QUkVUVFlfRlVO Q1RJT05fXyksIDApKSk7CiAgICAgICAgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcmVhbF9wLCBfX24g KyAoaW50KSBfU19leHRyYSk7CiAgICAgIH0KIyAzMDMgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxsb2MuaCIgMwogICAgfTsKIyAzMzYg Ii9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxf YWxsb2MuaCIgMwogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2xh c3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlCiAgICB7CiAgICBwcml2YXRlOgogICAgICBlbnVt IHtfQUxJR04gPSA4fTsKICAgICAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICAgIGVudW0g e19ORlJFRUxJU1RTID0gX01BWF9CWVRFUyAvIF9BTElHTn07CgogICAgICB1bmlvbiBfT2JqCiAg ICAgIHsKICAgICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICBjaGFy IF9NX2NsaWVudF9kYXRhWzFdOwogICAgICB9OwoKICAgICAgc3RhdGljIF9PYmoqIHZvbGF0aWxl IF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107CgoKICAgICAgc3RhdGljIGNoYXIqIF9TX3N0YXJ0 X2ZyZWU7CiAgICAgIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICAgICAgc3RhdGljIHNpemVf dCBfU19oZWFwX3NpemU7CgogICAgICBzdGF0aWMgX1NUTF9tdXRleF9sb2NrIF9TX25vZGVfYWxs b2NhdG9yX2xvY2s7CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIF9TX3JvdW5kX3VwKHNpemVf dCBfX2J5dGVzKQogICAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpIF9BTElHTi0x KSAmIH4oKHNpemVfdCkgX0FMSUdOIC0gMSkpOyB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAg IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKQogICAgICB7IHJldHVybiAoKChfX2J5 dGVzKSArIChzaXplX3QpX0FMSUdOLTEpLyhzaXplX3QpX0FMSUdOIC0gMSk7IH0KCgoKICAgICAg c3RhdGljIHZvaWQqCiAgICAgIF9TX3JlZmlsbChzaXplX3QgX19uKTsKCgoKICAgICAgc3RhdGlj IGNoYXIqCiAgICAgIF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7 CgoKCiAgICAgIHN0cnVjdCBfTG9jawogICAgICB7CiAgICAgICAgX0xvY2soKSB7IGlmIChfX3Ro cmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0KICAgICAg ICB+X0xvY2soKSB7IGlmIChfX3RocmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01fcmVs ZWFzZV9sb2NrKCk7IH0KICAgICAgfSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOwogICAg ICBmcmllbmQgc3RydWN0IF9Mb2NrOwoKICAgICAgc3RhdGljIF9BdG9taWNfd29yZCBfU19mb3Jj ZV9uZXc7CgogICAgcHVibGljOgoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIGFsbG9jYXRlKHNp emVfdCBfX24pCiAgICAgIHsKICAgICAgICB2b2lkKiBfX3JldCA9IDA7CgoKCgogICAgICAgIGlm IChfU19mb3JjZV9uZXcgPT0gMCkKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKGdldGVudigi R0xJQkNQUF9GT1JDRV9ORVciKSkKICAgICAgICAgICAgICBfX2F0b21pY19hZGQoJl9TX2ZvcmNl X25ldywgMSk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBfX2F0b21pY19hZGQoJl9T X2ZvcmNlX25ldywgLTEpOwoKICAgICAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoX1NfZm9y Y2VfbmV3ICE9IDApID8gMCA6IChfX2Fzc2VydF9mYWlsICgiX1NfZm9yY2VfbmV3ICE9IDAiLCAi L2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9h bGxvYy5oIiwgNDA1LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAgICAgIH0KCiAg ICAgICAgaWYgKChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB8fCAoX1NfZm9yY2VfbmV3ID4g MCkpCiAgICAgICAgICBfX3JldCA9IF9fbmV3X2FsbG9jOjphbGxvY2F0ZShfX24pOwogICAgICAg IGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9s aXN0ID0gX1NfZnJlZV9saXN0CiAgICAgICAgICAgICAgKyBfU19mcmVlbGlzdF9pbmRleChfX24p OwoKCgogICAgICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CiAgICAgICAgICAgIF9PYmoq IF9fcmVzdHJpY3RfXyBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgaWYg KF9fcmVzdWx0ID09IDApCiAgICAgICAgICAgICAgX19yZXQgPSBfU19yZWZpbGwoX1Nfcm91bmRf dXAoX19uKSk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAqX19teV9mcmVlX2xpc3QgPSBfX3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAg ICAgICAgICAgIF9fcmV0ID0gX19yZXN1bHQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQog ICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRl YWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgaWYgKChfX24g PiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB8fCAoX1NfZm9yY2VfbmV3ID4gMCkpCiAgICAgICAgICBf X25ld19hbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7CiAgICAgICAgZWxzZQogICAgICAgICAg ewogICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xp c3QKICAgICAgICAgICAgICArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAgICAgICAgIF9P YmoqIF9fcSA9IChfT2JqKilfX3A7CgoKCgogICAgICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFu Y2U7CiAgICAgICAgICAgIF9fcSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlz dDsKICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19xOwogICAgICAgICAgfQogICAgICB9 CgoKCgoKICAgIH07CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PiBfQXRv bWljX3dvcmQKICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+Ojpf U19mb3JjZV9uZXcgPSAwOwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4K ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1w bGF0ZTxfX3RocmVhZHMsX19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9h bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0PiYpCiAgICB7IHJldHVybiB0cnVlOyB9Cgog IHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAg IG9wZXJhdG9yIT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2lu c3Q+JiwKICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy ZWFkcyxfX2luc3Q+JikKICAgIHsgcmV0dXJuIGZhbHNlOyB9CgoKCgoKICB0ZW1wbGF0ZTxib29s IF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGNoYXIqCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVt cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjoKICAgIF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3Np emUsIGludCYgX19ub2JqcykKICAgIHsKICAgICAgY2hhciogX19yZXN1bHQ7CiAgICAgIHNpemVf dCBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgICAgc2l6ZV90IF9fYnl0ZXNf bGVmdCA9IF9TX2VuZF9mcmVlIC0gX1Nfc3RhcnRfZnJlZTsKCiAgICAgIGlmIChfX2J5dGVzX2xl ZnQgPj0gX190b3RhbF9ieXRlcykKICAgICAgICB7CiAgICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0 YXJ0X2ZyZWU7CiAgICAgICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAg ICAgICByZXR1cm4gX19yZXN1bHQgOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19ieXRlc19s ZWZ0ID49IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRl c19sZWZ0L19fc2l6ZSk7CiAgICAgICAgICBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2Jq czsKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgIF9TX3N0YXJ0 X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAg ICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19ieXRlc190b19nZXQg PQogICAgICAgICAgICAyICogX190b3RhbF9ieXRlcyArIF9TX3JvdW5kX3VwKF9TX2hlYXBfc2l6 ZSA+PiA0KTsKCiAgICAgICAgICBpZiAoX19ieXRlc19sZWZ0ID4gMCkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9CiAgICAgICAgICAg ICAgICBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2J5dGVzX2xlZnQpOwoKICAg ICAgICAgICAgICAoKF9PYmoqKV9TX3N0YXJ0X2ZyZWUpIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0g Kl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IChfT2JqKilf U19zdGFydF9mcmVlOwogICAgICAgICAgICB9CiAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNo YXIqKSBfX25ld19hbGxvYzo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOwogICAgICAgICAgaWYg KDAgPT0gX1Nfc3RhcnRfZnJlZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBf X2k7CiAgICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0OwogICAgICAg ICAgICAgIF9PYmoqIF9fcDsKCgoKICAgICAgICAgICAgICBfX2kgPSBfX3NpemU7CiAgICAgICAg ICAgICAgZm9yICg7IF9faSA8PSAoc2l6ZV90KSBfTUFYX0JZVEVTOyBfX2kgKz0gKHNpemVfdCkg X0FMSUdOKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX215X2ZyZWVfbGlz dCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9faSk7CiAgICAgICAgICAgICAg ICAgIF9fcCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICAgICAgaWYgKDAgIT0gX19w KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICpfX215X2ZyZWVf bGlzdCA9IF9fcCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICAgICAgICAgICAgICAgIF9T X3N0YXJ0X2ZyZWUgPSAoY2hhciopX19wOwogICAgICAgICAgICAgICAgICAgICAgX1NfZW5kX2Zy ZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9T X2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2Jqcyk7CgoKICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSAwOwogICAgICAgICAg ICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19uZXdfYWxsb2M6OmFsbG9jYXRlKF9fYnl0ZXNf dG9fZ2V0KTsKCgogICAgICAgICAgICB9CiAgICAgICAgICBfU19oZWFwX3NpemUgKz0gX19ieXRl c190b19nZXQ7CiAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVz X3RvX2dldDsKICAgICAgICAgIHJldHVybiBfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMp OwogICAgICAgIH0KICAgIH0KCgoKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19p bnN0PgogICAgdm9pZCoKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9f aW5zdD46Ol9TX3JlZmlsbChzaXplX3QgX19uKQogICAgewogICAgICBpbnQgX19ub2JqcyA9IDIw OwogICAgICBjaGFyKiBfX2NodW5rID0gX1NfY2h1bmtfYWxsb2MoX19uLCBfX25vYmpzKTsKICAg ICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0OwogICAgICBfT2JqKiBfX3Jlc3VsdDsK ICAgICAgX09iaiogX19jdXJyZW50X29iajsKICAgICAgX09iaiogX19uZXh0X29iajsKICAgICAg aW50IF9faTsKCiAgICAgIGlmICgxID09IF9fbm9ianMpCiAgICAgICAgcmV0dXJuIF9fY2h1bms7 CiAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgo X19uKTsKCgogICAgICBfX3Jlc3VsdCA9IChfT2JqKilfX2NodW5rOwogICAgICAqX19teV9mcmVl X2xpc3QgPSBfX25leHRfb2JqID0gKF9PYmoqKShfX2NodW5rICsgX19uKTsKICAgICAgZm9yIChf X2kgPSAxOyA7IF9faSsrKQogICAgICAgIHsKICAgICAgICAgIF9fY3VycmVudF9vYmogPSBfX25l eHRfb2JqOwogICAgICAgICAgX19uZXh0X29iaiA9IChfT2JqKikoKGNoYXIqKV9fbmV4dF9vYmog KyBfX24pOwogICAgICAgICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSAwOwogICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAg IF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSBfX25leHRfb2JqOwogICAgICAg IH0KICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KIyA2MDcgIi9ob21lL2JhbmdlcnRoL2Jp bi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBs YXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgX1NUTF9tdXRleF9sb2NrCiAgICBf X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD46Ol9TX25vZGVfYWxsb2Nh dG9yX2xvY2sKICAgID0geyB7MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAwLCAw IH19IH07CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2hhciog X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19zdGFydF9mcmVl ID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBjaGFyKiBf X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD46Ol9TX2VuZF9mcmVlID0g MDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBzaXplX3QgX19k ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19oZWFwX3NpemUgPSAw OwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIHR5cGVuYW1lIF9f ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0Pjo6X09iaiogdm9sYXRpbGUK ICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0Pjo6X1NfZnJlZV9s aXN0W19ORlJFRUxJU1RTXTsKCiAgdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1 ZSwwPiBfX2FsbG9jOwogIHR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNlLDA+ IF9fc2luZ2xlX2NsaWVudF9hbGxvYzsKIyA2NDMgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z LXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4KICAgIGNsYXNzIGFsbG9jYXRvcgogICAgewogICAgICB0eXBlZGVmIF9fYWxsb2Mg X0FsbG9jOwogICAgcHVibGljOgogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICAg IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBfVHAqIHBv aW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBl ZGVmIF9UcCYgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJl bmNlOwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwMT4KICAgICAgICBzdHJ1Y3QgcmViaW5kCiAgICAgICAgeyB0eXBlZGVmIGFsbG9jYXRv cjxfVHAxPiBvdGhlcjsgfTsKCiAgICAgIGFsbG9jYXRvcigpIHRocm93KCkge30KICAgICAgYWxs b2NhdG9yKGNvbnN0IGFsbG9jYXRvciYpIHRocm93KCkge30KICAgICAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwMT4KICAgICAgICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+JikgdGhyb3co KSB7fQogICAgICB+YWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICAgICAgcG9pbnRlcgogICAgICBh ZGRyZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCiAgICAgIGNvbnN0 X3BvaW50ZXIKICAgICAgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVy biAmX194OyB9CgoKCiAgICAgIF9UcCoKICAgICAgYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29u c3Qgdm9pZCogPSAwKQogICAgICB7CiAgICAgICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAgICA/ IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKSA6 IDA7CiAgICAgIH0KCgogICAgICB2b2lkCiAgICAgIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNp emVfdHlwZSBfX24pCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9m KF9UcCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbWF4X3NpemUoKSBjb25zdCB0aHJvdygp IHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICAgICAgdm9pZCBjb25zdHJ1 Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsg fQogICAgICB2b2lkIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KICAgIH07 CgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGFsbG9jYXRvcjx2b2lkPgogICAgewogICAgcHVibGlj OgogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90 IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB2b2lkKiBwb2ludGVyOwogICAgICB0eXBl ZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgdm9pZCB2YWx1ZV90 eXBlOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBzdHJ1Y3QgcmViaW5k CiAgICAgICAgeyB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsgfTsKICAgIH07CgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9UMj4KICAgIGlubGluZSBib29sCiAgICBv cGVyYXRvcj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQog ICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9U Mj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGFsbG9jYXRvcjxfVDE+Jiwg Y29uc3QgYWxsb2NhdG9yPF9UMj4mKQogICAgeyByZXR1cm4gZmFsc2U7IH0KIyA3MzEgIi9ob21l L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxsb2Mu aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgc3RydWN0 IF9fYWxsb2NhdG9yCiAgICB7CiAgICAgIF9BbGxvYyBfX3VuZGVybHlpbmdfYWxsb2M7CgogICAg ICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl cmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29u c3QgX1RwKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogICAg ICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIF9UcCB2 YWx1ZV90eXBlOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBzdHJ1Y3Qg cmViaW5kCiAgICAgICAgeyB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7 IH07CgogICAgICBfX2FsbG9jYXRvcigpIHRocm93KCkge30KICAgICAgX19hbGxvY2F0b3IoY29u c3QgX19hbGxvY2F0b3ImIF9fYSkgdGhyb3coKQogICAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhf X2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4K ICAgICAgICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2Ep IHRocm93KCkKICAgICAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2Fs bG9jKSB7fQoKICAgICAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICAgICAgcG9pbnRlcgog ICAgICBhZGRyZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCiAgICAg IGNvbnN0X3BvaW50ZXIKICAgICAgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7 IHJldHVybiAmX194OyB9CgoKICAgIF9UcCoKICAgIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNv bnN0IHZvaWQqID0gMCkKICAgIHsKICAgICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAgPyBzdGF0 aWNfY2FzdDxfVHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9mKF9U cCkpKQogICAgICAgIDogMDsKICAgIH0KCgogICAgdm9pZAogICAgZGVhbGxvY2F0ZShwb2ludGVy IF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUo X19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0KCiAgICBzaXplX3R5cGUKICAgIG1heF9zaXplKCkg Y29uc3QgdGhyb3coKSB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgICB2 b2lkCiAgICBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9f cCkgX1RwKF9fdmFsKTsgfQoKICAgIHZvaWQKICAgIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19w LT5+X1RwKCk7IH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3Qg X19hbGxvY2F0b3I8dm9pZCwgX0FsbG9jPgogICAgewogICAgICB0eXBlZGVmIHNpemVfdCBzaXpl X3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlw ZWRlZiB2b2lkKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50 ZXI7CiAgICAgIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwoKICAgICAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwMT4KICAgICAgICBzdHJ1Y3QgcmViaW5kCiAgICAgICAgeyB0eXBlZGVmIF9fYWxsb2Nh dG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7IH07CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0 IF9fYWxsb2NhdG9yPF9UcCxfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICBjb25zdCBfX2Fs bG9jYXRvcjxfVHAsX0FsbG9jPiYgX19hMikKICAgIHsgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5n X2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29u c3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICBjb25zdCBf X2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCiAgICB7IHJldHVybiBfX2ExLl9fdW5kZXJs eWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsgfQoKCgoKCgoKICB0ZW1wbGF0 ZTxpbnQgaW5zdD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9j X2FsbG9jX3RlbXBsYXRlPGluc3Q+JiwKICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxs b2NfdGVtcGxhdGU8aW5zdD4mKQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTxpbnQg X19pbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxs b2NfdGVtcGxhdGU8X19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9j X3RlbXBsYXRlPF9faW5zdD4mKQogICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19kZWJ1 Z19hbGxvYzxfQWxsb2M+JiwgY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikKICAgIHsgcmV0 dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wK ICAgIG9wZXJhdG9yIT0oY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JiwgY29uc3QgX19kZWJ1 Z19hbGxvYzxfQWxsb2M+JikKICAgIHsgcmV0dXJuIGZhbHNlOyB9CiMgODgyICIvaG9tZS9iYW5n ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsbG9jLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CiAgICBzdHJ1Y3Qg X0FsbG9jX3RyYWl0cwogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxl c3MgPSBmYWxzZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjp0ZW1wbGF0ZSBy ZWJpbmQ8X1RwPjo6b3RoZXIgYWxsb2NhdG9yX3R5cGU7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CiAgICBjb25zdCBib29sIF9BbGxvY190cmFp dHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNzOwoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwLCB0eXBlbmFtZSBfVHAxPgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBhbGxv Y2F0b3I8X1RwMT4gPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxl c3MgPSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19hbGxvYz4gX0Fs bG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7CiAg ICB9OwoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGludCBfX2luc3Q+CiAgICBzdHJ1Y3Qg X0FsbG9jX3RyYWl0czxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPgogICAg ewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0 eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0 PiA+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2Nf YWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwogICAgfTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwLCBib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIHN0cnVjdCBf QWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p bnN0PiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRy dWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVt cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVk ZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBf X2luc3Q+ID4KICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19k ZWJ1Z19hbGxvYzxfQWxsb2M+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5z dGFuY2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVi dWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9y PF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7CiAgICB9OwoKCgoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxLCBpbnQgX19pbnN0PgogICAg c3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICAgICAgX19hbGxv Y2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+ID4KICAgIHsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRl ZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBf QWxsb2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9j X3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4KICAgIHN0 cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1RwMSwgX19kZWZhdWx0X2FsbG9j X3RlbXBsYXRlPF9fdGhyLCBfX2luc3Q+ID4gPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9v bCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9U cCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICBfQWxsb2Nf dHlwZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1w bGF0ZTxfX3RocixfX2luc3Q+ID4KICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgICB9OwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHN0 cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1RwMSwgX19kZWJ1Z19hbGxvYzxf QWxsb2M+ID4gPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3Mg PSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxf QWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2Rl YnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgoKCgoKICBleHRlcm4g dGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9yPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBh bGxvY2F0b3I8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fZGVmYXVsdF9hbGxv Y190ZW1wbGF0ZTx0cnVlLDA+Owp9CiMgNTYgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXBy ZS9pbmNsdWRlL2MrKy8zLjMvbWVtb3J5IiAyIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyA2NyAi L2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9j b25zdHJ1Y3QuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1Qx LCBjbGFzcyBfVDI+CiAgICBpbmxpbmUgdm9pZAogICAgX0NvbnN0cnVjdChfVDEqIF9fcCwgY29u c3QgX1QyJiBfX3ZhbHVlKQogICAgeyBuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihfX3ApKSBfVDEo X192YWx1ZSk7IH0KCgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UMT4KICAgIGlubGluZSB2b2lk CiAgICBfQ29uc3RydWN0KF9UMSogX19wKQogICAgeyBuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihf X3ApKSBfVDEoKTsgfQojIDk4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk ZS9jKysvMy4zL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0 ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAg ICB7IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgX0Rlc3Ryb3koJipfX2Zp cnN0KTsgfQojIDExMiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr LzMuMy9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRv ciwgX0ZvcndhcmRJdGVyYXRvciwgX190cnVlX3R5cGUpCiAgICB7IH0KCgoKCgoKICB0ZW1wbGF0 ZSA8Y2xhc3MgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9UcCogX19wb2ludGVy KQogICAgeyBfX3BvaW50ZXItPn5fVHAoKTsgfQojIDEzNCAiL2hvbWUvYmFuZ2VydGgvYmluL2dj Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95 KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAgICB7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+ Ojp2YWx1ZV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlX3R5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVfdHlwZT46Omhhc190cml2aWFsX2Rl c3RydWN0b3IKICAgICAgICAgICAgICAgICAgICAgICBfSGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK CiAgICAgIF9fZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfSGFzX3RyaXZpYWxfZGVzdHJ1 Y3RvcigpKTsKICAgIH0KfQojIDU3ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j bHVkZS9jKysvMy4zL21lbW9yeSIgMiAzCgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z LXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyA2NiAi L2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF91 bmluaXRpYWxpemVkLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRl cgogICAgX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0 SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQogICAgeyBy ZXR1cm4gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIK ICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jl c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICB7CiAg ICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogICAgICB0cnkgewogICAgICAgIGZv ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX2N1cikKICAgICAgICAgIF9D b25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgICAgIHJldHVybiBfX2N1cjsKICAgICAg fQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQs IF9fY3VyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KIyAxMDYgIi9ob21lL2Jh bmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfdW5pbml0aWFs aXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Zvcndh cmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgdW5pbml0aWFsaXplZF9jb3B5KF9J bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9Gb3J3YXJkSXRlciBfX3Jlc3Vs dCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJ dGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw ZV90cmFpdHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIHJldHVybiBf X3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BP RCgpKTsKICAgIH0KCiAgaW5saW5lIGNoYXIqCiAgdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IGNo YXIqIF9fZmlyc3QsIGNvbnN0IGNoYXIqIF9fbGFzdCwgY2hhciogX19yZXN1bHQpCiAgewogICAg bWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4g X19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUgd2NoYXJfdCoKICB1 bmluaXRpYWxpemVkX2NvcHkoY29uc3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCog X19sYXN0LAogICAgICAgICAgICAgICAgICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkKICB7CiAgICBt ZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19m aXJzdCkpOwogICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGlu ZSB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg X1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgeyBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZv aWQKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm IF9feCwgX19mYWxzZV90eXBlKQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2Zp cnN0OwogICAgICB0cnkgewogICAgICAgIGZvciAoIDsgX19jdXIgIT0gX19sYXN0OyArK19fY3Vy KQogICAgICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgICB9CiAgICAgIGNhdGNo KC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7CiAgICAg ICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CiMgMTY0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZv aWQKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ dGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlw ZSBfSXNfUE9EOwogICAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX19maXJzdCwgX19sYXN0 LCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ dGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9Gb3J3YXJkSXRl cgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9T aXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBf X3RydWVfdHlwZSkKICAgIHsKICAgICAgcmV0dXJuIGZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCk7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUs IHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxf bl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIF9G b3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICggOyBf X24gPiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194 KTsKICAgICAgICByZXR1cm4gX19jdXI7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAg IHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKICAgICAgICAgIHRocm93Owog ICAgICAgIH0KICAgIH0KIyAyMTAgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNs dWRlL2MrKy8zLjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5l IF9Gb3J3YXJkSXRlcgogICAgdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0Rf dHlwZSBfSXNfUE9EOwogICAgICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX19m aXJzdCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CiMgMjI3ICIvaG9tZS9iYW5nZXJ0aC9i aW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwg dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmlu aXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs IF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3 YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gdW5pbml0 aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIHRyeSB7CiAg ICAgICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQp OwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShf X3Jlc3VsdCwgX19taWQpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQoKCgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0lu cHV0SXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9maWxs X2NvcHkoX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIgX19taWQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0KQogICAgewog ICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBfX3gpOwogICAgICB0cnkg ewogICAgICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX21p ZCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95 KF9fcmVzdWx0LCBfX21pZCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw ZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2ZpbGwo X0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3Qy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKICAgIHsKICAg ICAgX0ZvcndhcmRJdGVyIF9fbWlkMiA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19s YXN0MSwgX19maXJzdDIpOwogICAgICB0cnkgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChf X21pZDIsIF9fbGFzdDIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsK ICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QyLCBfX21pZDIpOwogICAgICAgICAgdGhyb3c7CiAg ICAgICAgfQogICAgfQoKfQojIDU5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j bHVkZS9jKysvMy4zL21lbW9yeSIgMiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMt cHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDEgMwojIDY0 ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3Rs X3Jhd19zdG9yYWdlX2l0ZXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KICBjbGFzcyByYXdfc3RvcmFnZV9pdGVy YXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9p ZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0ZvcndhcmRJdGVyYXRv ciBfTV9pdGVyOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgcmF3X3N0b3JhZ2Vf aXRlcmF0b3IoX0ZvcndhcmRJdGVyYXRvciBfX3gpIDogX01faXRlcihfX3gpIHt9CgogICAgICBy YXdfc3RvcmFnZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0K CiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3QgX1RwJiBf X2VsZW1lbnQpCiAgICAgIHsKICAgICAgICBfQ29uc3RydWN0KCYqX01faXRlciwgX19lbGVtZW50 KTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJh dG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4mCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAg ICAgICAgKytfTV9pdGVyOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgcmF3 X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPgogICAgICBvcGVyYXRvcisr KGludCkKICAgICAgewogICAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0 b3IsIF9UcD4gX190bXAgPSAqdGhpczsKICAgICAgICArK19NX2l0ZXI7CiAgICAgICAgcmV0dXJu IF9fdG1wOwogICAgICB9CiAgICB9Owp9CiMgNjAgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z LXByZS9pbmNsdWRlL2MrKy8zLjMvbWVtb3J5IiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDcxICIv aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL21lbW9yeSIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHBhaXI8X1RwKiwgcHRyZGlmZl90PgogICAgX19n ZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopCiAgICB7CiAgICAgIGlm IChfX2xlbiA+IHB0cmRpZmZfdCgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgICAgIF9f bGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkK ICAgICAgICB7CiAgICAgICAgICBfVHAqIF9fdG1wID0gKF9UcCopIHN0ZDo6bWFsbG9jKChzdGQ6 OnNpemVfdClfX2xlbiAqIHNpemVvZihfVHApKTsKICAgICAgICAgIGlmIChfX3RtcCAhPSAwKQog ICAgICAgICAgICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KF9fdG1wLCBfX2xlbik7CiAg ICAgICAgICBfX2xlbiAvPSAyOwogICAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X1RwKiwgcHRy ZGlmZl90PigoX1RwKikwLCAwKTsKICAgIH0KIyAxMDMgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvbWVtb3J5IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PgogICAgaW5saW5lIHBhaXI8X1RwKixwdHJkaWZmX3Q+CiAgICBnZXRfdGVtcG9yYXJ5X2J1ZmZl cihwdHJkaWZmX3QgX19sZW4pCiAgICB7IHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9f bGVuLCAoX1RwKikgMCk7IH0KIyAxMTUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9p bmNsdWRlL2MrKy8zLjMvbWVtb3J5IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgdm9p ZAogICAgcmV0dXJuX3RlbXBvcmFyeV9idWZmZXIoX1RwKiBfX3ApCiAgICB7IHN0ZDo6ZnJlZShf X3ApOyB9CiMgMTI3ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysv My4zL21lbW9yeSIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICBzdHJ1Y3QgYXV0b19w dHJfcmVmCiAgICB7CiAgICAgIF9UcDEqIF9NX3B0cjsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGF1 dG9fcHRyX3JlZihfVHAxKiBfX3ApOiBfTV9wdHIoX19wKSB7IH0KICAgIH07CiMgMTY2ICIvaG9t ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL21lbW9yeSIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNsYXNzIGF1dG9fcHRyCiAgICB7CiAgICBwcml2YXRl OgogICAgICBfVHAqIF9NX3B0cjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9UcCBlbGVt ZW50X3R5cGU7CgoKCgoKCgogICAgICBleHBsaWNpdAogICAgICBhdXRvX3B0cihlbGVtZW50X3R5 cGUqIF9fcCA9IDApIHRocm93KCkgOiBfTV9wdHIoX19wKSB7IH0KIyAxOTIgIi9ob21lL2Jhbmdl cnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvbWVtb3J5IiAzCiAgICAgIGF1dG9f cHRyKGF1dG9fcHRyJiBfX2EpIHRocm93KCkgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkgeyB9CiMg MjAzICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL21lbW9y eSIgMwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIGF1dG9fcHRyKGF1dG9f cHRyPF9UcDE+JiBfX2EpIHRocm93KCkgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkgeyB9CiMgMjE0 ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL21lbW9yeSIg MwogICAgICBhdXRvX3B0ciYKICAgICAgb3BlcmF0b3I9KGF1dG9fcHRyJiBfX2EpIHRocm93KCkK ICAgICAgewogICAgICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkpOwogICAgICAgIHJldHVybiAqdGhp czsKICAgICAgfQojIDIzMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUv YysrLzMuMy9tZW1vcnkiIDMKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBh dXRvX3B0ciYKICAgICAgICBvcGVyYXRvcj0oYXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKQog ICAgICAgIHsKICAgICAgICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkpOwogICAgICAgICAgcmV0dXJu ICp0aGlzOwogICAgICAgIH0KIyAyNTEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9p bmNsdWRlL2MrKy8zLjMvbWVtb3J5IiAzCiAgICAgIH5hdXRvX3B0cigpIHsgZGVsZXRlIF9NX3B0 cjsgfQojIDI2MSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu My9tZW1vcnkiIDMKICAgICAgZWxlbWVudF90eXBlJgogICAgICBvcGVyYXRvciooKSBjb25zdCB0 aHJvdygpIHsgcmV0dXJuICpfTV9wdHI7IH0KCgoKCgoKCiAgICAgIGVsZW1lbnRfdHlwZSoKICAg ICAgb3BlcmF0b3ItPigpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gX01fcHRyOyB9CiMgMjgzICIv aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL21lbW9yeSIgMwog ICAgICBlbGVtZW50X3R5cGUqCiAgICAgIGdldCgpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gX01f cHRyOyB9CiMgMjk3ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysv My4zL21lbW9yeSIgMwogICAgICBlbGVtZW50X3R5cGUqCiAgICAgIHJlbGVhc2UoKSB0aHJvdygp CiAgICAgIHsKICAgICAgICBlbGVtZW50X3R5cGUqIF9fdG1wID0gX01fcHRyOwogICAgICAgIF9N X3B0ciA9IDA7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CiMgMzEyICIvaG9tZS9iYW5n ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL21lbW9yeSIgMwogICAgICB2b2lk CiAgICAgIHJlc2V0KGVsZW1lbnRfdHlwZSogX19wID0gMCkgdGhyb3coKQogICAgICB7CiAgICAg ICAgaWYgKF9fcCAhPSBfTV9wdHIpCiAgICAgICAgICB7CiAgICAgICAgICAgIGRlbGV0ZSBfTV9w dHI7CiAgICAgICAgICAgIF9NX3B0ciA9IF9fcDsKICAgICAgICAgIH0KICAgICAgfQojIDMzMyAi L2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9tZW1vcnkiIDMK ICAgICAgYXV0b19wdHIoYXV0b19wdHJfcmVmPGVsZW1lbnRfdHlwZT4gX19yZWYpIHRocm93KCkK ICAgICAgOiBfTV9wdHIoX19yZWYuX01fcHRyKSB7IH0KCiAgICAgIGF1dG9fcHRyJgogICAgICBv cGVyYXRvcj0oYXV0b19wdHJfcmVmPGVsZW1lbnRfdHlwZT4gX19yZWYpIHRocm93KCkKICAgICAg ewogICAgICAgIGlmIChfX3JlZi5fTV9wdHIgIT0gdGhpcy0+Z2V0KCkpCiAgICAgICAgICB7CiAg ICAgICAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgICAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0 cjsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgb3BlcmF0b3IgYXV0b19wdHJfcmVmPF9UcDE+KCkg dGhyb3coKQogICAgICAgIHsgcmV0dXJuIGF1dG9fcHRyX3JlZjxfVHAxPih0aGlzLT5yZWxlYXNl KCkpOyB9CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIG9wZXJhdG9yIGF1 dG9fcHRyPF9UcDE+KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIGF1dG9fcHRyPF9UcDE+KHRo aXMtPnJlbGVhc2UoKSk7IH0KCiAgfTsKfQojIDQ5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMu My1wcmUvaW5jbHVkZS9jKysvMy4zL3N0cmluZyIgMiAzCgoKCiMgMSAiL2hvbWUvYmFuZ2VydGgv YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAxIDMK IyA2NCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRz L3N0bF9mdW5jdGlvbi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDEwMSAiL2hvbWUvYmFuZ2VydGgv YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRl bXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24g ewogIHR5cGVkZWYgX0FyZyBhcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRf dHlwZTsKfTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9S ZXN1bHQ+CnN0cnVjdCBiaW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJn dW1lbnRfdHlwZTsKICB0eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVk ZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKIyAxMjcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxf VHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv bnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj dCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3Bl cmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9f eCAtIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtdWx0aXBsaWVzIDog cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNv bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICogX195OyB9 Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMgOiBwdWJsaWMgYmluYXJ5 X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7IH0KfTsKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw LF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBf X3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+ CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4KewogIF9UcCBv cGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAtX194OyB9Cn07CiMgMTcz ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3Rs X2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVxdWFsX3RvIDogcHVi bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29u c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0gX195OyB9 Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5vdF9lcXVhbF90byA6IHB1YmxpYyBi aW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9U cCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICE9IF9feTsgfQp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5j dGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNv bnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxi b29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg Y29uc3QgeyByZXR1cm4gX194IDwgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry dWN0IGdyZWF0ZXJfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4K ewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0 IHsgcmV0dXJuIF9feCA+PSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg bGVzc19lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9v bCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1 cm4gX194IDw9IF9feTsgfQp9OwojIDIyMiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl L2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBf VHA+CnN0cnVjdCBsb2dpY2FsX2FuZCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxi b29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg Y29uc3QgeyByZXR1cm4gX194ICYmIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0 cnVjdCBsb2dpY2FsX29yIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsK ICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7 IHJldHVybiBfX3ggfHwgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxv Z2ljYWxfbm90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxib29sPgp7CiAgYm9vbCBvcGVy YXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAhX194OyB9Cn07CiMgMjcxICIv aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2Z1 bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0 ZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50 X3R5cGUsIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgog IGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChf X3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3Vt ZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCk7CiAgfQp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNh dGU+Cm5vdDEoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0 ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNs YXNzIGJpbmFyeV9uZWdhdGUKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1By ZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg dHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVi bGljOgogIGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9N X3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRl OjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVu YW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAg cmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVk aWNhdGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDIoY29uc3QgX1ByZWRp Y2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVk KTsKfQojIDM0OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uPgpjbGFz cyBiaW5kZXIxc3QKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9u OjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFt ZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsK ICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6 CiAgYmluZGVyMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAgY29uc3QgdHlw ZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX195KQogICAgICA6IG9wKF9f eCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9w ZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUm IF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOwogIH0KCgogIHR5cGVuYW1l IF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9u OjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUs IF9feCk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgpp bmxpbmUgYmluZGVyMXN0PF9PcGVyYXRpb24+CmJpbmQxc3QoY29uc3QgX09wZXJhdGlvbiYgX19m biwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0 X2FyZ3VtZW50X3R5cGUgX0FyZzFfdHlwZTsKICByZXR1cm4gYmluZGVyMXN0PF9PcGVyYXRpb24+ KF9fZm4sIF9BcmcxX3R5cGUoX194KSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4K Y2xhc3MgYmluZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJh dGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl bmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBv cDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVi bGljOgogIGJpbmRlcjJuZChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNvbnN0 IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDog b3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBl CiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90 eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9CgoKICB0eXBl bmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09wZXJh dGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194 LCB2YWx1ZSk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1Rw PgppbmxpbmUgYmluZGVyMm5kPF9PcGVyYXRpb24+CmJpbmQybmQoY29uc3QgX09wZXJhdGlvbiYg X19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OnNl Y29uZF9hcmd1bWVudF90eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjJuZDxfT3BlcmF0 aW9uPihfX2ZuLCBfQXJnMl90eXBlKF9feCkpOwp9CiMgNDM4ICIvaG9tZS9iYW5nZXJ0aC9iaW4v Z2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxh dGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fdW5hcnlfZnVu Y3Rpb24gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6 CiAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZyk7CnB1YmxpYzoKICBwb2ludGVyX3RvX3VuYXJ5X2Z1 bmN0aW9uKCkge30KICBleHBsaWNpdCBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKF9SZXN1bHQg KCpfX3gpKF9BcmcpKSA6IF9NX3B0cihfX3gpIHt9CiAgX1Jlc3VsdCBvcGVyYXRvcigpKF9Bcmcg X194KSBjb25zdCB7IHJldHVybiBfTV9wdHIoX194KTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf QXJnLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJn LCBfUmVzdWx0PiBwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcpKQp7CiAgcmV0dXJuIHBvaW50 ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxj bGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9f YmluYXJ5X2Z1bmN0aW9uIDoKICBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9S ZXN1bHQ+IHsKcHJvdGVjdGVkOgogICAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZzEsIF9BcmcyKTsK cHVibGljOgogICAgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oKSB7fQogICAgZXhwbGljaXQg cG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkK ICAgICAgOiBfTV9wdHIoX194KSB7fQogICAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcxIF9feCwg X0FyZzIgX195KSBjb25zdCB7CiAgICAgIHJldHVybiBfTV9wdHIoX194LCBfX3kpOwogICAgfQp9 OwoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+Cmlu bGluZSBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PgpwdHJf ZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpIHsKICByZXR1cm4gcG9pbnRlcl90b19i aW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxj bGFzcyBfVHA+CnN0cnVjdCBfSWRlbnRpdHkgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9U cD4gewogIF9UcCYgb3BlcmF0b3IoKShfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9CiAg Y29uc3QgX1RwJiBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7 IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3Qxc3QgOiBwdWJsaWMg dW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlPiB7CiAgdHlw ZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3Qgewog ICAgcmV0dXJuIF9feC5maXJzdDsKICB9CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5 cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5m aXJzdDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0Mm5kIDog cHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGU+ CnsKICB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkg Y29uc3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWly OjpzZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICBy ZXR1cm4gX194LnNlY29uZDsKICB9Cn07CiMgNTI4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMu My1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNs YXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0 aW9uPF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6 Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29u c3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9m KSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21l bV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsKcHVibGlj OgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6 IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsg cmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBj b25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVu X3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBs aWNpdCBtZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQog IF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsg fQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9S ZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9m dW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZf dChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJh dG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJp dmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf UmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMgYmlu YXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVu MV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJh dG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoX194 KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxj bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3Qg OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoK ICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0 KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9Bcmcg X194KSBjb25zdAogICAgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBf UmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5h cnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFf cmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3Bl cmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9f eCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9y ZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAg ZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29u c3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0Fy ZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0 IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFz cyBtZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+ IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9N X2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9N X2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxj bGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5 X2Z1bmN0aW9uPGNvbnN0IF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVt X2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQg b3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2 YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U cD4KY2xhc3MgbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u PF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6 Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29u c3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9U cD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0 IGNvbnN0X21lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9f cGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9N X2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwgX1RwLCBf QXJnPiA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgog IGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3Bm KSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+ Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZv aWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJn LHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoq X19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25z dCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0 ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAg OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxp Y2l0IG1lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikg e30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9N X2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2 b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+ IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9f cGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3Qg X1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToK ICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQg KF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRl bXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1Jl dCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0 X21lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz IF9UcD4KaW5saW5lIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9U cDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZf dDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0 dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFz cyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1Rw LF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVu MV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf VHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1l bV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1f ZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz cyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBt ZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Jl Zl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf VHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJn PgptZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNv bnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCgoKfQojIDUzICIvaG9t ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL3N0cmluZyIgMiAzCiMg MSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Jh c2ljX3N0cmluZy5oIiAxIDMKIyA0NCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2lu Y2x1ZGUvYysrLzMuMy9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCgoKCm5hbWVzcGFjZSBzdGQKewoj IDEwOCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRz L2Jhc2ljX3N0cmluZy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBiYXNpY19zdHJpbmcKICAgIHsKCiAg ICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfVHJhaXRzOjpjaGFyX3R5cGUgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBf QWxsb2MgYWxsb2NhdG9yX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXpl X3R5cGUgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlmZmVyZW5j ZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnJl ZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9y ZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6 cG9pbnRlciBwb2ludGVyOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcG9p bnRlciBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVmIF9fZ251X2N4eDo6X19ub3JtYWxfaXRl cmF0b3I8cG9pbnRlciwgYmFzaWNfc3RyaW5nPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfX2du dV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIGJhc2ljX3N0cmluZz4KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3RfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0 X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHN0ZDo6cmV2 ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBwcml2YXRlOgoj IDE0MyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRz L2Jhc2ljX3N0cmluZy5oIiAzCiAgICAgIHN0cnVjdCBfUmVwCiAgICAgIHsKCiAgICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxjaGFyPjo6b3RoZXIgX1Jhd19i eXRlc19hbGxvYzsKIyAxNjEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRl L2MrKy8zLjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICAgIHN0YXRpYyBjb25zdCBzaXpl X3R5cGUgX1NfbWF4X3NpemU7CiAgICAgICAgc3RhdGljIGNvbnN0IF9DaGFyVCBfU190ZXJtaW5h bDsKCiAgICAgICAgc2l6ZV90eXBlIF9NX2xlbmd0aDsKICAgICAgICBzaXplX3R5cGUgX01fY2Fw YWNpdHk7CiAgICAgICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CgogICAgICAgIGJvb2wK ICAgICAgICBfTV9pc19sZWFrZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5j ZXMgPCAwOyB9CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19zaGFyZWQoKSBjb25zdAogICAg ICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPiAwOyB9CgogICAgICAgIHZvaWQKICAgICAgICBf TV9zZXRfbGVha2VkKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAtMTsgfQoKICAgICAgICB2 b2lkCiAgICAgICAgX01fc2V0X3NoYXJhYmxlKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAw OyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9yZWZkYXRhKCkgdGhyb3coKQogICAgICAg IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8X0NoYXJUKj4odGhpcyArIDEpOyB9CgogICAgICAg IF9DaGFyVCYKICAgICAgICBvcGVyYXRvcltdKHNpemVfdCBfX3MpIHRocm93KCkKICAgICAgICB7 IHJldHVybiBfTV9yZWZkYXRhKCkgW19fc107IH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9N X2dyYWIoY29uc3QgX0FsbG9jJiBfX2FsbG9jMSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jMikKICAg ICAgICB7CiAgICAgICAgICByZXR1cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9PSBf X2FsbG9jMikKICAgICAgICAgICAgICAgICAgPyBfTV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2Fs bG9jMSk7CiAgICAgICAgfQoKCiAgICAgICAgc3RhdGljIF9SZXAqCiAgICAgICAgX1NfY3JlYXRl KHNpemVfdCwgY29uc3QgX0FsbG9jJik7CgogICAgICAgIHZvaWQKICAgICAgICBfTV9kaXNwb3Nl KGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX2V4Y2hhbmdlX2Fu ZF9hZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA8PSAwKQogICAgICAgICAgICBfTV9kZXN0cm95KF9f YSk7CiAgICAgICAgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGVzdHJveShjb25zdCBfQWxs b2MmKSB0aHJvdygpOwoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fcmVmY29weSgpIHRocm93 KCkKICAgICAgICB7CiAgICAgICAgICBfX2F0b21pY19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOwog ICAgICAgICAgcmV0dXJuIF9NX3JlZmRhdGEoKTsKICAgICAgICB9CgogICAgICAgIF9DaGFyVCoK ICAgICAgICBfTV9jbG9uZShjb25zdCBfQWxsb2MmLCBzaXplX3R5cGUgX19yZXMgPSAwKTsKICAg ICAgfTsKCgogICAgICBzdHJ1Y3QgX0FsbG9jX2hpZGVyIDogX0FsbG9jCiAgICAgIHsKICAgICAg ICBfQWxsb2NfaGlkZXIoX0NoYXJUKiBfX2RhdCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAg OiBfQWxsb2MoX19hKSwgX01fcChfX2RhdCkgeyB9CgogICAgICAgIF9DaGFyVCogX01fcDsKICAg ICAgfTsKCiAgICBwdWJsaWM6CgoKCiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgbnBvcyA9 IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpOwoKICAgIHByaXZhdGU6CgogICAgICBtdXRhYmxl IF9BbGxvY19oaWRlciBfTV9kYXRhcGx1czsKCgoKICAgICAgc3RhdGljIHNpemVfdHlwZSBfU19l bXB0eV9yZXBfc3RvcmFnZVsoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yo c2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCiAgICAgIF9DaGFyVCoKICAgICAg X01fZGF0YSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RhdGFwbHVzLl9NX3A7IH0KCiAgICAg IF9DaGFyVCoKICAgICAgX01fZGF0YShfQ2hhclQqIF9fcCkKICAgICAgeyByZXR1cm4gKF9NX2Rh dGFwbHVzLl9NX3AgPSBfX3ApOyB9CgogICAgICBfUmVwKgogICAgICBfTV9yZXAoKSBjb25zdAog ICAgICB7IHJldHVybiAmKChyZWludGVycHJldF9jYXN0PF9SZXAqPiAoX01fZGF0YSgpKSlbLTFd KTsgfQoKCgogICAgICBpdGVyYXRvcgogICAgICBfTV9pYmVnaW4oKSBjb25zdCB7IHJldHVybiBp dGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBfTV9pZW5kKCkgY29u c3QgeyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAg dm9pZAogICAgICBfTV9sZWFrKCkKICAgICAgewogICAgICAgIGlmICghX01fcmVwKCktPl9NX2lz X2xlYWtlZCgpKQogICAgICAgICAgX01fbGVha19oYXJkKCk7CiAgICAgIH0KCiAgICAgIGl0ZXJh dG9yCiAgICAgIF9NX2NoZWNrKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgewogICAgICAg IGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3Jhbmdl KCJiYXNpY19zdHJpbmc6Ol9NX2NoZWNrIik7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsg X19wb3M7CiAgICAgIH0KCgogICAgICBpdGVyYXRvcgogICAgICBfTV9mb2xkKHNpemVfdHlwZSBf X3Bvcywgc2l6ZV90eXBlIF9fb2ZmKSBjb25zdAogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3Rv ZmYgPSBfX29mZiA8IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHNpemVfdHlwZSBfX25l d29mZiA9IF9fdGVzdG9mZiA/IF9fb2ZmIDogdGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAg cmV0dXJuIChfTV9pYmVnaW4oKSArIF9fcG9zICsgX19uZXdvZmYpOwogICAgICB9CgoKCiAgICAg IHRlbXBsYXRlPGNsYXNzIF9JdGVyYXRvcj4KICAgICAgICBzdGF0aWMgdm9pZAogICAgICAgIF9T X2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9JdGVyYXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikK ICAgICAgICB7CiAgICAgICAgICBmb3IgKDsgX19rMSAhPSBfX2syOyArK19fazEsICsrX19wKQog ICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3AsICpfX2sxKTsKICAgICAgICB9Cgog ICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBpdGVyYXRv ciBfX2sxLCBpdGVyYXRvciBfX2syKQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJh c2UoKSwgX19rMi5iYXNlKCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2No YXJzKF9DaGFyVCogX19wLCBjb25zdF9pdGVyYXRvciBfX2sxLCBjb25zdF9pdGVyYXRvciBfX2sy KQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9 CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfQ2hh clQqIF9fazEsIF9DaGFyVCogX19rMikKICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9f azEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFy cyhfQ2hhclQqIF9fcCwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQqIF9fazIpCiAg ICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAg IHZvaWQKICAgICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwg c2l6ZV90eXBlIF9fbGVuMik7CgogICAgICB2b2lkCiAgICAgIF9NX2xlYWtfaGFyZCgpOwoKICAg ICAgc3RhdGljIF9SZXAmCiAgICAgIF9TX2VtcHR5X3JlcCgpCiAgICAgIHsgcmV0dXJuICpyZWlu dGVycHJldF9jYXN0PF9SZXAqPigmX1NfZW1wdHlfcmVwX3N0b3JhZ2UpOyB9CgogICAgcHVibGlj OgoKCgoKICAgICAgaW5saW5lCiAgICAgIGJhc2ljX3N0cmluZygpOwoKICAgICAgZXhwbGljaXQK ICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxvYyYgX19hKTsKCgogICAgICBiYXNpY19zdHJp bmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBi YXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBz aXplX3R5cGUgX19uID0gbnBvcyk7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJp bmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUg X19uLCBjb25zdCBfQWxsb2MmIF9fYSk7CgogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJU KiBfX3MsIHNpemVfdHlwZSBfX24sCiAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9f YSA9IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25z dCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5nKHNpemVfdHlwZSBf X24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgdGVt cGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0 ZXJhdG9yIF9fYmVnLCBfSW5wdXRJdGVyYXRvciBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAg Y29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CgogICAgICB+YmFzaWNfc3RyaW5nKCkKICAg ICAgeyBfTV9yZXAoKS0+X01fZGlzcG9zZSh0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOyB9CgogICAg ICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry KSB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAg ICAgIG9wZXJhdG9yPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9f cyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpIHsg cmV0dXJuIHRoaXMtPmFzc2lnbigxLCBfX2MpOyB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgYmVn aW4oKQogICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBpdGVyYXRvcihf TV9kYXRhKCkpOwogICAgICB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNv bnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0 ZXJhdG9yCiAgICAgIGVuZCgpCiAgICAgIHsKICAgICAgICAgX01fbGVhaygpOwogICAgICAgICBy ZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsKICAgICAgfQoKICAgICAg Y29uc3RfaXRlcmF0b3IKICAgICAgZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfaXRl cmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRv cgogICAgICByYmVnaW4oKQogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVu ZCgpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKSBjb25z dAogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoK ICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkKICAgICAgeyByZXR1cm4gcmV2ZXJz ZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRv cgogICAgICByZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRv cih0aGlzLT5iZWdpbigpKTsgfQoKICAgIHB1YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBz aXplKCkgY29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90 eXBlCiAgICAgIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0K CiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9SZXA6Ol9T X21heF9zaXplOyB9CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hh clQgX19jKTsKCiAgICAgIHZvaWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24pIHsgdGhpcy0+ cmVzaXplKF9fbiwgX0NoYXJUKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgY2FwYWNpdHko KSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fY2FwYWNpdHk7IH0KCiAgICAgIHZvaWQKICAg ICAgcmVzZXJ2ZShzaXplX3R5cGUgX19yZXNfYXJnID0gMCk7CgogICAgICB2b2lkCiAgICAgIGNs ZWFyKCkgeyBfTV9tdXRhdGUoMCwgdGhpcy0+c2l6ZSgpLCAwKTsgfQoKICAgICAgYm9vbAogICAg ICBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOyB9CgoKICAgICAgY29u c3RfcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10gKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAg ICAgeyByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9w ZXJhdG9yW10oc2l6ZV90eXBlIF9fcG9zKQogICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAg ICAgIHJldHVybiBfTV9kYXRhKClbX19wb3NdOwogICAgICB9CgogICAgICBjb25zdF9yZWZlcmVu Y2UKICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX24g Pj0gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0 cmluZzo6YXQiKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0KCiAgICAg IHJlZmVyZW5jZQogICAgICBhdChzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgaWYgKF9f biA+PSBzaXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5n OjphdCIpOwogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07 CiAgICAgIH0KCgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fc3RyKTsgfQoKICAgICAg YmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVy biB0aGlzLT5hcHBlbmQoX19zKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRv cis9KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChzaXplX3R5cGUoMSksIF9fYyk7 IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYg X19zdHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3Ry aW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2lj X3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKTsK CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zKQogICAg ICB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9 CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQg X19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2lj X3N0cmluZyYKICAgICAgICBhcHBlbmQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl cmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBf TV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNr KF9DaGFyVCBfX2MpCiAgICAgIHsgdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwg MSwgX19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNf c3RyaW5nJiBfX3N0cik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBi YXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICAg IHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAg ICAgIGlmIChfX3BvcyA+IF9fc3Ryc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3Jhbmdl KCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAgIGNvbnN0IGJvb2wgX190ZXN0biA9IF9f biA8IF9fc3Ryc2l6ZSAtIF9fcG9zOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld3NpemUg PSBfX3Rlc3RuID8gX19uIDogX19zdHJzaXplIC0gX19wb3M7CiAgICAgICAgcmV0dXJuIHRoaXMt PmFzc2lnbihfX3N0ci5fTV9kYXRhKCkgKyBfX3BvcywgX19uZXdzaXplKTsKICAgICAgfQoKICAg ICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw ZSBfX24pCiAgICAgIHsKICAgICAgICBpZiAoX19uID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAg ICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAg IGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9f cywgX01fZGF0YSgpKQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0 YSgpICsgdGhpcy0+c2l6ZSgpLCBfX3MpKQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2Fm ZShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICAgICAgZWxzZQog ICAgICAgICAgewoKICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcG9zID0gX19zIC0gX01f ZGF0YSgpOwogICAgICAgICAgICBpZiAoX19wb3MgPj0gX19uKQogICAgICAgICAgICAgIHRyYWl0 c190eXBlOjpjb3B5KF9NX2RhdGEoKSwgX19zLCBfX24pOwogICAgICAgICAgICBlbHNlIGlmIChf X3BvcykKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6bW92ZShfTV9kYXRhKCksIF9fcywgX19u KTsKICAgICAgICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbjsKICAgICAgICAgICAgX01f ZGF0YSgpW19fbl0gPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAgICAgcmV0dXJuICp0aGlz OwogICAgICAgICAgfQogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihj b25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcywgdHJhaXRz X3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24o c2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShf TV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNz IF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBhc3NpZ24oX0lu cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0 dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0 KTsgfQoKICAgICAgdm9pZAogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBzaXplX3R5cGUgX19u LCBfQ2hhclQgX19jKQogICAgICB7IHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fbiwgX19jKTsg fQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgdm9pZCBpbnNl cnQoaXRlcmF0b3IgX19wLCBfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19l bmQpCiAgICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX2JlZywgX19lbmQpOyB9Cgog ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBi YXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBf X3N0ciwgMCwgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNl cnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAg ICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjb25z dCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIGlmIChfX3BvczIg PiBfX3N0cnNpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5n OjppbnNlcnQiKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0cnNpemUg LSBfX3BvczI7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3c2l6ZSA9IF9fdGVzdG4gPyBf X24gOiBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgICAgcmV0dXJuIHRoaXMtPmluc2VydChfX3Bv czEsIF9fc3RyLl9NX2RhdGEoKSArIF9fcG9zMiwgX19uZXdzaXplKTsKICAgICAgfQoKICAgICAg YmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQq IF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3Np emUgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgICAg X190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgaWYg KF9fc2l6ZSA+IHRoaXMtPm1heF9zaXplKCkgLSBfX24pCiAgICAgICAgICBfX3Rocm93X2xlbmd0 aF9lcnJvcigiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9N X2lzX3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAg ICAgICAgICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19z KSkKICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBfX3Bvcywg X01faWJlZ2luKCkgKyBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19z LCBfX3MgKyBfX24pOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKCgoKICAgICAgICAgICAgY29u c3Qgc2l6ZV90eXBlIF9fb2ZmID0gX19zIC0gX01fZGF0YSgpOwogICAgICAgICAgICBfTV9tdXRh dGUoX19wb3MsIDAsIF9fbik7CiAgICAgICAgICAgIF9fcyA9IF9NX2RhdGEoKSArIF9fb2ZmOwog ICAgICAgICAgICBfQ2hhclQqIF9fcCA9IF9NX2RhdGEoKSArIF9fcG9zOwogICAgICAgICAgICBp ZiAoX19zICsgX19uIDw9IF9fcCkKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3As IF9fcywgX19uKTsKICAgICAgICAgICAgZWxzZSBpZiAoX19zID49IF9fcCkKICAgICAgICAgICAg ICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcyArIF9fbiwgX19uKTsKICAgICAgICAgICAgZWxz ZQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCwg X19zLCBfX3AgLSBfX3MpOwogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wICsg KF9fcCAtIF9fcyksIF9fcCArIF9fbiwgX19uIC0gKF9fcCAtIF9fcykpOwogICAgICAgICAgICAg IH0KICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICAgfQogICAgICAgfQoKICAgICAg YmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQq IF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBl OjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVf dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgewogICAgICAgIHRo aXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIF9fbiwgX19jKTsKICAgICAgICByZXR1cm4gKnRo aXM7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9D aGFyVCBfX2MgPSBfQ2hhclQoKSkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3BvcyA9IF9f cCAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIHNp emVfdHlwZSgxKSwgX19jKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAg ICAgIHJldHVybiB0aGlzLT5fTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgogICAgICBiYXNp Y19zdHJpbmcmCiAgICAgIGVyYXNlKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24g PSBucG9zKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19w b3MpLCBfTV9mb2xkKF9fcG9zLCBfX24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9N X2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2Uo aXRlcmF0b3IgX19wb3NpdGlvbikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bv c2l0aW9uIC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0aW9uLCBf X3Bvc2l0aW9uICsgMSwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5f TV9zZXRfbGVha2VkKCk7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19pOwogICAgICB9 CgogICAgICBpdGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBf X2xhc3QpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19maXJzdCAtIF9NX2liZWdp bigpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19maXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9N X2RhdGEoKSk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgIHJldHVy biBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBy ZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5n JiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvcywgX19uLCBfX3N0ci5f TV9kYXRhKCksIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVw bGFjZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5n JiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMik7 CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXpl X3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9f bjIpCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgp OwogICAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3Jh bmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4x ID0gX19uMSA8IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2ZvbGRu MSA9IF9fdGVzdG4xID8gX19uMSA6IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgIGlmIChfX3NpemUg LSBfX2ZvbGRuMSA+IHRoaXMtPm1heF9zaXplKCkgLSBfX24yKQogICAgICAgICAgX190aHJvd19s ZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICAgIGlmIChfTV9yZXAo KS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgp KQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgX19zaXpl LCBfX3MpKQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4oKSArIF9f cG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9pYmVnaW4oKSArIF9fcG9z ICsgX19mb2xkbjEsIF9fcywgX19zICsgX19uMik7CgogICAgICAgIGVsc2UgcmV0dXJuCiAgICAg ICAgICAgICAgIF9NX3JlcGxhY2UoX01faWJlZ2luKCkgKyBfX3BvcywgX01faWJlZ2luKCkgKyBf X3BvcyArIF9fZm9sZG4xLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19u MiwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8Y29u c3QgX0NoYXJUKj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOwogICAgICB9CgogICAgICBiYXNpY19z dHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29u c3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbjEs IF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog ICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBf X24yLCBfQ2hhclQgX19jKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9f cG9zKSwgX01fZm9sZChfX3BvcywgX19uMSksIF9fbjIsIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0 cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBi YXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9f aTIsIF9fc3RyLl9NX2RhdGEoKSwgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5n JgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7 IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsIF9f cywgX19uKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9f aTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlz LT5yZXBsYWNlKF9faTEsIF9faTIsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoK ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9y IF9faTIsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3Mg X0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIHJlcGxhY2UoaXRl cmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9y IF9fazEsIF9JbnB1dEl0ZXJhdG9yIF9fazIpCiAgICAgICAgeyByZXR1cm4gX01fcmVwbGFjZShf X2kxLCBfX2kyLCBfX2sxLCBfX2syLAogICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7IH0KCgoKICAgICAgYmFz aWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9D aGFyVCogX19rMSwgX0NoYXJUKiBfX2syKQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2Uo X19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBy ZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19rMSwg Y29uc3QgX0NoYXJUKiBfX2syKQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAt IF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNl KGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9yIF9f azIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9f aTIgLSBfX2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMS5iYXNlKCksIF9f azIgLSBfX2sxKTsKICAgICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uo aXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3Rf aXRlcmF0b3IgX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9p YmVnaW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sx LmJhc2UoKSwgX19rMiAtIF9fazEpOwogICAgICAgIH0KCiAgICBwcml2YXRlOgogICAgICB0ZW1w bGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAg X01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyYXRvciBf X2sxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19rMiwgaW5wdXRfaXRlcmF0 b3JfdGFnKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICAgICAg YmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2Vfc2FmZShpdGVyYXRvciBfX2kxLCBpdGVy YXRvciBfX2kyLCBfRm9yd2FyZEl0ZXJhdG9yIF9fazEsCiAgICAgICAgICAgICAgICAgICBfRm9y d2FyZEl0ZXJhdG9yIF9fazIpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAg ICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVn LCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAg ICAgIF9fZmFsc2VfdHlwZSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSW5JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX1RhZzsKICAgICAgICAg IHJldHVybiBfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EsIF9UYWcoKSk7CiAgICAgICAg fQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgog ICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29u c3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKICAg ICAgICB7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KHN0YXRpY19jYXN0PHNpemVfdHlw ZT4oX19iZWcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1 ZV90eXBlPihfX2VuZCksIF9fYSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lu SXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVy IF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAg ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9Jbkl0ZXI+OjpfSW50ZWdyYWwgX0lu dGVncmFsOwogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBf X2EsIF9JbnRlZ3JhbCgpKTsKICAgICAgICB9CgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRl cj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBf X2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAg ICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRl cj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfRndkSXRlciBf X2JlZywgX0Z3ZEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAg ICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgogICAgICBzdGF0aWMgX0NoYXJUKgogICAgICBf U19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fcmVxLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9f YSk7CgogICAgcHVibGljOgoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNvcHkoX0NoYXJUKiBfX3Ms IHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgdm9pZAog ICAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcyk7CgoK ICAgICAgY29uc3QgX0NoYXJUKgogICAgICBjX3N0cigpIGNvbnN0CiAgICAgIHsKCiAgICAgICAg c2l6ZV90eXBlIF9fbiA9IHRoaXMtPnNpemUoKTsKICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWdu KF9NX2RhdGEoKVtfX25dLCBfUmVwOjpfU190ZXJtaW5hbCk7CiAgICAgICAgcmV0dXJuIF9NX2Rh dGEoKTsKICAgICAgfQoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBkYXRhKCkgY29uc3QgeyBy ZXR1cm4gX01fZGF0YSgpOyB9CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2Nh dG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YXBsdXM7IH0KCiAgICAgIHNpemVfdHlwZQogICAg ICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p IGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBf X3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+Zmlu ZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUK ICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3Ro KF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5 cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBi YXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5yZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9 CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZp bmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19z KSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUg X19wb3MgPSBucG9zKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29m KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAg ICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19z dHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3Qg X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAg ICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90 eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihf X3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUK ICAgICAgZmluZF9maXJzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25z dAogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fYywgX19wb3MpOyB9CgogICAgICBzaXplX3R5 cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlw ZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihf X3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAg ICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVf dHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25z dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1 cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19z KSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6 ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19j LCBfX3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25z dCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0 ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29u c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9u b3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBl OjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9v ZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlw ZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVf dHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9u b3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90 eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf X3BvcywKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsKICAgICAg c2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf dHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9u b3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6 ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9z ID0gbnBvcykgY29uc3Q7CgogICAgICBiYXNpY19zdHJpbmcKICAgICAgc3Vic3RyKHNpemVfdHlw ZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKSBjb25zdAogICAgICB7CiAgICAgICAg aWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2Uo ImJhc2ljX3N0cmluZzo6c3Vic3RyIik7CiAgICAgICAgcmV0dXJuIGJhc2ljX3N0cmluZygqdGhp cywgX19wb3MsIF9fbik7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IGJh c2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19zaXpl ID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgp OwogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3NpemUsIF9fb3NpemUpOwoKICAgICAg ICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3N0ci5kYXRhKCks IF9fbGVuKTsKICAgICAgICBpZiAoIV9fcikKICAgICAgICAgIF9fciA9IF9fc2l6ZSAtIF9fb3Np emU7CiAgICAgICAgcmV0dXJuIF9fcjsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUo c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry KSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVf dHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgIHNpemVf dHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21w YXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCgoKICAgICAgaW50CiAgICAgIGNvbXBhcmUo c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0 OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u MSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0 OwogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZygpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2VtcHR5X3Jl cCgpLl9NX3JlZmNvcHkoKSwgX0FsbG9jKCkpIHsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwogICAgICBf X3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBf Q2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1Ry YWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJh aXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmlu ZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgIGNv bnN0IF9DaGFyVCogX19yaHMpCiAgICB7CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAg ICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywgX0NoYXJUIF9fcmhzKQogICAgewogICAgICB0 eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXpl X3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBl bmQoX19zaXplX3R5cGUoMSksIF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xo cy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh dG9yPT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5j b21wYXJlKF9fbGhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y PT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAg ICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21w YXJlKF9fcmhzKSA9PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9 KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAg ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf X3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAg ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3Jo cykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp bmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykK ICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpICE9IDA7IH0KCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s aW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19y aHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAg Y29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwg MDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgX0NoYXJUKiBf X2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID4gMDsgfQoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19s aHMuY29tcGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh dG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywK ICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29t cGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihj b25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShf X2xocykgPCAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0 IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAg ICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykK ICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp bmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAg IHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg Ym9vbAogICAgb3BlcmF0b3I8PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBj b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICB7IHJl dHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29s CiAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49 IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29u c3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBfQ2hhclQqIF9f bGhzLAogICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA8PSAwOyB9CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JiBfX3JocykKICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JiBfX29zLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs X1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19p cywKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19z dHIsIF9DaGFyVCBfX2RlbGltKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hh clQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYg X19pcywKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19zdHIpOwp9CiMgNTQgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr Ky8zLjMvc3RyaW5nIiAyIDMKCgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9p bmNsdWRlL2MrKy8zLjMvYWxnb3JpdGhtIiAxIDMKIyA2NSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9hbGdvcml0aG0iIDMKCgoKCiMgMSAiL2hvbWUvYmFu Z2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDEg MwojIDY0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Jp dHMvc3RsX2FsZ28uaCIgMwojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNs dWRlL2MrKy8zLjMvYml0cy9zdGxfaGVhcC5oIiAxIDMKIyA2MyAiL2hvbWUvYmFuZ2VydGgvYmlu L2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9oZWFwLmgiIDMKbmFtZXNwYWNl IHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBl bmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fcHVzaF9oZWFwKF9S YW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9f aG9sZUluZGV4LCBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAg IF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgd2hpbGUg KF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9fZmlyc3QgKyBfX3BhcmVudCkgPCBfX3Zh bHVlKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19w YXJlbnQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICAgICAgX19wYXJlbnQg PSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIH0KICAgICAgKihfX2ZpcnN0ICsgX19ob2xl SW5kZXgpID0gX192YWx1ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIHB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRl cmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6 dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAg ICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgX19wdXNoX2hlYXAo X19maXJzdCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3RhbmNl VHlwZSgwKSwKICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSk7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUg X0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgog ICAgdm9pZAogICAgX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9E aXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4 LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX19w YXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIHdoaWxlIChfX2hvbGVJbmRleCA+ IF9fdG9wSW5kZXggJiYgX19jb21wKCooX19maXJzdCArIF9fcGFyZW50KSwgX192YWx1ZSkpIHsK ICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7 CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAgICAgICBfX3BhcmVudCA9IChfX2hv bGVJbmRleCAtIDEpIC8gMjsKICAgICAgfQogICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkg PSBfX3ZhbHVlOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0 b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHB1c2hfaGVhcChfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwK ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAg ICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3Rh bmNlVHlwZTsKCgogICAgIAoKCiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5 cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAg ICAgICAgIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSksIF9fY29tcCk7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0 eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgICAgIF9E aXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3RvcElu ZGV4ID0gX19ob2xlSW5kZXg7CiAgICAgIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9f aG9sZUluZGV4ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAg ICAgIGlmICgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSA8ICooX19maXJzdCArIChfX3NlY29u ZENoaWxkIC0gMSkpKQogICAgICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgICAgICooX19maXJz dCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgICAgIF9f aG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgICAgICBfX3NlY29uZENoaWxkID0gMiAqIChf X3NlY29uZENoaWxkICsgMSk7CiAgICAgIH0KICAgICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19s ZW4pIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19z ZWNvbmRDaGlsZCAtIDEpKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAx OwogICAgICB9CiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcElu ZGV4LCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX19wb3BfaGVhcChfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwK ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1 ZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgKl9fcmVzdWx0 ID0gKl9fZmlyc3Q7CiAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBf RGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fdmFsdWUpOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgcG9wX2hl YXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf X2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k b21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAK CiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVl VHlwZSgqKF9fbGFzdCAtIDEpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B Y2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLAogICAgICAgICAgIHR5cGVuYW1lIF9U cCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2FkanVzdF9oZWFwKF9SYW5kb21B Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAg ICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAg IHsKICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsKICAgICAgX0Rpc3Rh bmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogICAgICB3aGlsZSAoX19z ZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICAgICAgaWYgKF9fY29tcCgqKF9fZmlyc3QgKyBfX3Nl Y29uZENoaWxkKSwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpKQogICAgICAgICAg X19zZWNvbmRDaGlsZC0tOwogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19m aXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGls ZDsKICAgICAgICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgICAg IH0KICAgICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsKICAgICAgICAqKF9fZmlyc3Qg KyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAgICAg ICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogICAgICB9CiAgICAgIF9fcHVzaF9o ZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlLCBfX2NvbXApOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1l IF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgX19wb3BfaGVhcChf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz dCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192 YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3Rh bmNlOwogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgX19hZGp1c3RfaGVhcChfX2Zp cnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwKICAgICAgICAg ICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQK ICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAg ICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz SXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIF9fcG9wX2hlYXAoX19maXJz dCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSwgX19j b21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgog ICAgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAg ICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu ZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5 cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVy bjsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9E aXN0YW5jZVR5cGUgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICAgICAgd2hpbGUgKHRydWUp IHsKICAgICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1ZhbHVl VHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpKTsKICAgICAgICBpZiAoX19wYXJlbnQgPT0gMCkg cmV0dXJuOwogICAgICAgIF9fcGFyZW50LS07CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGlu ZSB2b2lkCiAgICBtYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5k b21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQog ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz SXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJl bmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCgogICAgICBpZiAoX19s YXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9f bGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19wYXJlbnQgPSAoX19sZW4gLSAy KS8yOwoKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3Qs IF9fcGFyZW50LCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2Zp cnN0ICsgX19wYXJlbnQpKSwgX19jb21wKTsKICAgICAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0 dXJuOwogICAgICAgIF9fcGFyZW50LS07CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgdm9pZAogICAgc29ydF9oZWFwKF9SYW5kb21B Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAg ewoKICAgICAKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAxKQogICAg ICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAg IHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAg IAoKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgICAgICBwb3BfaGVhcChf X2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsKICAgIH0KCn0KIyA2NSAiL2hvbWUvYmFuZ2VydGgv YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDIgMwojIDEg Ii9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxf dGVtcGJ1Zi5oIiAxIDMKIyA2NCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1 ZGUvYysrLzMuMy9iaXRzL3N0bF90ZW1wYnVmLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgNzQgIi9o b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfdGVt cGJ1Zi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CiAg Y2xhc3MgX1RlbXBvcmFyeV9idWZmZXIKewoKIAoKICBwdHJkaWZmX3QgX01fb3JpZ2luYWxfbGVu OwogIHB0cmRpZmZfdCBfTV9sZW47CiAgX1RwKiBfTV9idWZmZXI7CgoKICB2b2lkIF9NX2FsbG9j YXRlX2J1ZmZlcigpIHsKICAgIF9NX29yaWdpbmFsX2xlbiA9IF9NX2xlbjsKICAgIF9NX2J1ZmZl ciA9IDA7CgogICAgaWYgKF9NX2xlbiA+IChwdHJkaWZmX3QpKDIxNDc0ODM2NDcgLyBzaXplb2Yo X1RwKSkpCiAgICAgIF9NX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgICB3aGls ZSAoX01fbGVuID4gMCkgewogICAgICBfTV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xlbiAq IHNpemVvZihfVHApKTsKICAgICAgaWYgKF9NX2J1ZmZlcikKICAgICAgICBicmVhazsKICAgICAg X01fbGVuIC89IDI7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0 IF9UcCYsIF9fdHJ1ZV90eXBlKSB7fQogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3Qg X1RwJiB2YWwsIF9fZmFsc2VfdHlwZSkgewogICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fYnVm ZmVyLCBfTV9sZW4sIHZhbCk7CiAgfQoKcHVibGljOgoKICBwdHJkaWZmX3Qgc2l6ZSgpIGNvbnN0 IHsgcmV0dXJuIF9NX2xlbjsgfQoKICBwdHJkaWZmX3QgcmVxdWVzdGVkX3NpemUoKSBjb25zdCB7 IHJldHVybiBfTV9vcmlnaW5hbF9sZW47IH0KCiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9NX2J1 ZmZlcjsgfQoKICBfVHAqIGVuZCgpIHsgcmV0dXJuIF9NX2J1ZmZlciArIF9NX2xlbjsgfQoKICBf VGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0 b3IgX19sYXN0KSB7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhh c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3IKICAgICAgICAgICAgX1RyaXZpYWw7CgogICAg dHJ5IHsKICAgICAgX01fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX01f YWxsb2NhdGVfYnVmZmVyKCk7CiAgICAgIGlmIChfTV9sZW4gPiAwKQogICAgICAgIF9NX2luaXRp YWxpemVfYnVmZmVyKCpfX2ZpcnN0LCBfVHJpdmlhbCgpKTsKICAgIH0KICAgIGNhdGNoKC4uLikK ICAgICAgewogICAgICAgIGZyZWUoX01fYnVmZmVyKTsKICAgICAgICBfTV9idWZmZXIgPSAwOwog ICAgICAgIF9NX2xlbiA9IDA7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICB9CgogIH5fVGVtcG9y YXJ5X2J1ZmZlcigpIHsKICAgIF9EZXN0cm95KF9NX2J1ZmZlciwgX01fYnVmZmVyICsgX01fbGVu KTsKICAgIGZyZWUoX01fYnVmZmVyKTsKICB9Cgpwcml2YXRlOgoKICBfVGVtcG9yYXJ5X2J1ZmZl cihjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9CiAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1Rl bXBvcmFyeV9idWZmZXImKSB7fQp9OwoKfQojIDY2ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMu My1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMiAzCgoKCm5hbWVzcGFjZSBz dGQKewojIDg0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4z L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUgY29u c3QgX1RwJgogICAgX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25z dCBfVHAmIF9fYykKICAgIHsKCiAgICAgCiAgICAgIGlmIChfX2EgPCBfX2IpCiAgICAgICAgaWYg KF9fYiA8IF9fYykKICAgICAgICAgIHJldHVybiBfX2I7CiAgICAgICAgZWxzZSBpZiAoX19hIDwg X19jKQogICAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4g X19hOwogICAgICBlbHNlIGlmIChfX2EgPCBfX2MpCiAgICAgICAgcmV0dXJuIF9fYTsKICAgICAg ZWxzZSBpZiAoX19iIDwgX19jKQogICAgICAgIHJldHVybiBfX2M7CiAgICAgIGVsc2UKICAgICAg ICByZXR1cm4gX19iOwogICAgfQojIDExOCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl L2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFu KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MsIF9Db21wYXJl IF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgIGlmIChfX2NvbXAoX19hLCBfX2IpKQogICAgICAg IGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9fYjsKICAgICAgICBlbHNl IGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgICBlbHNl CiAgICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQog ICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICAg ICAgcmV0dXJuIF9fYzsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfX2I7CiAgICB9CiMgMTUw ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9GdW5j dGlvbj4KICAgIF9GdW5jdGlvbgogICAgZm9yX2VhY2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w dXRJdGVyIF9fbGFzdCwgX0Z1bmN0aW9uIF9fZikKICAgIHsKCiAgICAgCiAgICAgIGZvciAoIDsg X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBfX2YoKl9fZmlyc3QpOwogICAg ICByZXR1cm4gX19mOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIs IHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kKF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAg ICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0g X19sYXN0ICYmICEoKl9fZmlyc3QgPT0gX192YWwpKQogICAgICAgICsrX19maXJzdDsKICAgICAg cmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl ciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kX2lm KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgIF9QcmVk aWNhdGUgX19wcmVkLAogICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAg IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAr K19fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfUmFuZG9tQWNjZXNz SXRlcgogICAgZmluZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl ciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgIHJhbmRvbV9hY2Nl c3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh bmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICAgICAgPSAo X19sYXN0IC0gX19maXJzdCkgPj4gMjsKCiAgICAgIGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7 IC0tX190cmlwX2NvdW50KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4g X19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3Zh bCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoKl9fZmly c3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAg aWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7 CiAgICAgIH0KCiAgICAgIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgICAgIGNhc2UgMzoK ICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsr X19maXJzdDsKICAgICAgY2FzZSAyOgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0 dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDE6CiAgICAgICAgaWYg KCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAg ICAgIGNhc2UgMDoKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9 CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVu YW1lIF9QcmVkaWNhdGU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgZmluZF9pZihfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAg IF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh ZykKICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy Pjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgICAgID0gKF9fbGFzdCAtIF9fZmly c3QpID4+IDI7CgogICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3Vu dCkgewogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAg ICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJz dDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1 cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmly c3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KCiAgICAgIHN3 aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgICAgIGNhc2UgMzoKICAgICAgICBpZiAoX19wcmVk KCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNl IDI6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAg ICsrX19maXJzdDsKICAgICAgY2FzZSAxOgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSBy ZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMDoKICAgICAgZGVm YXVsdDoKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CiMgMjg5ICIvaG9tZS9i YW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGlu ZSBfSW5wdXRJdGVyCiAgICBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh c3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CgogICAgIAogICAgIAoKICAgICAg cmV0dXJuIGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19pdGVyYXRvcl9jYXRlZ29yeShf X2ZpcnN0KSk7CiAgICB9CiMgMzA5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j bHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmlu ZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICBf UHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICByZXR1cm4gZmluZF9p ZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7 CiAgICB9CiMgMzI5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysv My4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4K ICAgIF9Gb3J3YXJkSXRlcgogICAgYWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwg X0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICBpZiAoX19maXJz dCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9f bmV4dCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgICAg IGlmICgqX19maXJzdCA9PSAqX19uZXh0KQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAg ICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgfQogICAgICByZXR1cm4gX19sYXN0OwogICAgfQoj IDM1OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l IF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFjZW50X2ZpbmQoX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg IF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAg ICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIF9G b3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19fbmV4dCAhPSBfX2xh c3QpIHsKICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCiAgICAg ICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICB9CiAg ICAgIHJldHVybiBfX2xhc3Q7CiAgICB9CiMgMzg3ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMu My1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBjb3VudChfSW5wdXRJdGVyIF9fZmly c3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAog ICAgIAoKICAgICAKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojpk aWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg KytfX2ZpcnN0KQogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbHVlKQogICAgICAgICAgKytf X247CiAgICAgIHJldHVybiBfX247CiAgICB9CiMgNDExICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgY291bnRfaWYoX0lu cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCiAg ICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0 ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9f bGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgICAg KytfX247CiAgICAgIHJldHVybiBfX247CiAgICB9CiMgNDUwICIvaG9tZS9iYW5nZXJ0aC9iaW4v Z2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9y d2FyZEl0ZXIxCiAgICBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVy MSBfX2xhc3QxLAogICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRl cjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCgogICAgICBpZiAoX19maXJz dDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2Zp cnN0MTsKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICAgICAgKytfX3Rt cDsKICAgICAgaWYgKF9fdG1wID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGZpbmQoX19maXJz dDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CgoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19w OwoKICAgICAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogICAgICBfRm9yd2FyZEl0ZXIxIF9f Y3VycmVudCA9IF9fZmlyc3QxOwoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsK ICAgICAgICBfX2ZpcnN0MSA9IGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAg ICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsK CiAgICAgICAgX19wID0gX19wMTsKICAgICAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgICAg ICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAgICAgIHJldHVybiBfX2xhc3QxOwoK ICAgICAgICB3aGlsZSAoKl9fY3VycmVudCA9PSAqX19wKSB7CiAgICAgICAgICBpZiAoKytfX3Ag PT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICAgICAgaWYgKCsr X19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICAg IH0KCiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDE7CiAg ICB9CiMgNTIyICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4z L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5 cGVuYW1lIF9Gb3J3YXJkSXRlcjIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkPgogICAgX0ZvcndhcmRJ dGVyMQogICAgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19s YXN0MSwKICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9f bGFzdDIsCiAgICAgICAgICAgX0JpbmFyeVByZWQgX19wcmVkaWNhdGUpCiAgICB7CgogICAgIAog ICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIg PT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoKICAgICAgX0ZvcndhcmRJdGVy MiBfX3RtcChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAgIGlmIChfX3RtcCA9PSBfX2xh c3QyKSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRl KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgcmV0 dXJuIF9fZmlyc3QxOwogICAgICB9CgoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoK ICAgICAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogICAgICBfRm9yd2FyZEl0ZXIxIF9fY3Vy cmVudCA9IF9fZmlyc3QxOwoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAg ICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICAgICAgaWYgKF9fcHJlZGlj YXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAr K19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm JiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0 MTsKICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgIHJldHVybiBfX2xh c3QxOwoKICAgICAgICBfX3AgPSBfX3AxOwogICAgICAgIF9fY3VycmVudCA9IF9fZmlyc3QxOwog ICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKSByZXR1cm4gX19sYXN0MTsKCiAgICAg ICAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKSB7CiAgICAgICAgICBpZiAo KytfX3AgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICAgICAg aWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX2xhc3QxOwog ICAgICAgIH0KCiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJz dDE7CiAgICB9CiMgNTk2ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j KysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl ciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAg c2VhcmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg ICAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKICAgICAK ICAgICAKCiAgICAgCgogICAgICBpZiAoX19jb3VudCA8PSAwKQogICAgICAgIHJldHVybiBfX2Zp cnN0OwogICAgICBlbHNlIHsKICAgICAgICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3Qs IF9fdmFsKTsKICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIF9J bnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9f Zmlyc3Q7CiAgICAgICAgICArK19faTsKICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYm IF9fbiAhPSAwICYmICpfX2kgPT0gX192YWwpIHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAg ICAgIC0tX19uOwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAg ICByZXR1cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19maXJzdCA9IGZp bmQoX19pLCBfX2xhc3QsIF9fdmFsKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fbGFzdDsK ICAgICAgfQogICAgfQojIDY0MyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1 ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXIsIHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgdHlwZW5h bWUgX0JpbmFyeVByZWQ+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRl ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgX0ludGVnZXIgX19j b3VudCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5 X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2NvdW50IDw9IDApCiAgICAg ICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgewogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9 IF9fbGFzdCkgewogICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkK ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgfQogICAgICAg IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICAgX0ludGVnZXIgX19uID0gX19j b3VudCAtIDE7CiAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgICAg ICsrX19pOwogICAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19i aW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpIHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAg IC0tX19uOwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICBy ZXR1cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICB3aGlsZSAoX19pICE9 IF9fbGFzdCkgewogICAgICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkK ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICB9 CiAgICAgICAgICAgIF9fZmlyc3QgPSBfX2k7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAg IHJldHVybiBfX2xhc3Q7CiAgICAgIH0KICAgIH0KIyA2OTcgIi9ob21lL2JhbmdlcnRoL2Jpbi9n Y2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3 YXJkSXRlcjIKICAgIHN3YXBfcmFuZ2VzKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJk SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIpCiAg ICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEg IT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpdGVyX3N3YXAoX19m aXJzdDEsIF9fZmlyc3QyKTsKICAgICAgcmV0dXJuIF9fZmlyc3QyOwogICAgfQojIDczMiAiL2hv bWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRl ciwgdHlwZW5hbWUgX1VuYXJ5T3BlcmF0aW9uPgogICAgX091dHB1dEl0ZXIKICAgIHRyYW5zZm9y bShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9P dXRwdXRJdGVyIF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRpb24gX191bmFyeV9vcCkKICAgIHsKCiAg ICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwg KytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX3VuYXJ5X29wKCpfX2ZpcnN0KTsKICAg ICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDc2NSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z LjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJ dGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlPcGVyYXRpb24+CiAgICBfT3V0cHV0SXRl cgogICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx LAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfT3V0cHV0SXRlciBfX3Jlc3Vs dCwKICAgICAgICAgICAgICBfQmluYXJ5T3BlcmF0aW9uIF9fYmluYXJ5X29wKQogICAgewoKICAg ICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19f Zmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVzdWx0KQogICAgICAgICpfX3Jlc3VsdCA9IF9fYmlu YXJ5X29wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg fQojIDc5NiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9i aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVu YW1lIF9UcD4KICAgIHZvaWQKICAgIHJlcGxhY2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0 IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3Ig KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09 IF9fb2xkX3ZhbHVlKQogICAgICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKICAgIH0KIyA4 MjUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9z dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBf UHJlZGljYXRlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICByZXBsYWNlX2lmKF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfUHJlZGlj YXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgog ICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAg ICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7 CiAgICB9CiMgODU2ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysv My4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5 cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVw bGFjZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgY29uc3QgX1Rw JiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAg CgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytf X3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdCA9PSBfX29sZF92YWx1ZSA/IF9f bmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA4ODgg Ii9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxf YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1 dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCiAgICAgICAgICAgdHlwZW5hbWUgX1RwPgogICAg X091dHB1dEl0ZXIKICAgIHJlcGxhY2VfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAog ICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3Zh bHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9 IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgICAgICpfX3Jlc3VsdCA9IF9fcHJl ZCgqX19maXJzdCkgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1 bHQ7CiAgICB9CiMgOTE4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j KysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl ciwgdHlwZW5hbWUgX0dlbmVyYXRvcj4KICAgIHZvaWQKICAgIGdlbmVyYXRlKF9Gb3J3YXJkSXRl ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfR2VuZXJhdG9yIF9fZ2VuKQogICAgewoK ICAgICAKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp CiAgICAgICAgKl9fZmlyc3QgPSBfX2dlbigpOwogICAgfQojIDk0MiAiL2hvbWUvYmFuZ2VydGgv YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9HZW5l cmF0b3I+CiAgICBfT3V0cHV0SXRlcgogICAgZ2VuZXJhdGVfbihfT3V0cHV0SXRlciBfX2ZpcnN0 LCBfU2l6ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4pCiAgICB7CgogICAgIAoKCgogICAgICBmb3Ig KCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX2dlbigp OwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyA5NjkgIi9ob21lL2JhbmdlcnRoL2Jpbi9n Y2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4K ICAgIF9PdXRwdXRJdGVyCiAgICByZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0 IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsg X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoISgqX19maXJzdCA9PSBf X3ZhbHVlKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgICArK19f cmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEwMDMgIi9o b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxn by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0 ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfT3V0cHV0SXRlcgogICAgcmVtb3ZlX2NvcHlf aWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAg CiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz dCkKICAgICAgICBpZiAoIV9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9 ICpfX2ZpcnN0OwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVybiBf X3Jlc3VsdDsKICAgIH0KIyAxMDM5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j bHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3 YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICByZW1vdmUoX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgX1Rw JiBfX3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgX19maXJzdCA9IGZp bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlKTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9f Zmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHkoKytfX2ksIF9fbGFzdCwgX19maXJz dCwgX192YWx1ZSk7CiAgICB9CiMgMTA3MyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl L2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHJl bW92ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgX19m aXJzdCA9IGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOwogICAgICBfRm9yd2FyZEl0 ZXIgX19pID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJz dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weV9pZigrK19faSwg X19sYXN0LCBfX2ZpcnN0LCBfX3ByZWQpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBf X3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBvdXRw dXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J bnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgKl9fcmVzdWx0 ID0gX192YWx1ZTsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYg KCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsKICAgICAgICAgIF9fdmFsdWUgPSAqX19maXJzdDsK ICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgICB9CiAgICAgIHJldHVybiAr K19fcmVzdWx0OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0 eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pcXVlX2NvcHko X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y X3RhZykKICAgIHsKCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICB3aGlsZSAoKytf X2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoISgqX19yZXN1bHQgPT0gKl9fZmlyc3QpKQog ICAgICAgICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuICsrX19yZXN1bHQ7 CiAgICB9CiMgMTE0NSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr LzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0 eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgdW5pcXVlX2Nv cHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg IF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXI+OjppdGVyYXRvcl9j YXRlZ29yeSBfSXRlclR5cGU7CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBf X3Jlc3VsdDsKICAgICAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jl c3VsdCwgX0l0ZXJUeXBlKCkpOwogICAgfQojIDExNzAgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQ cmVkaWNhdGU+CiAgICBfT3V0cHV0SXRlcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVk LAogICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgoK ICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9f dmFsdWUgPSAqX19maXJzdDsKICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hpbGUg KCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKF9fdmFsdWUs ICpfX2ZpcnN0KSkgewogICAgICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAgICAgKisr X19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICAgIH0KICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAg ICB9CiMgMTE5OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2Fy ZEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAg ICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAg IGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgoKICAgICAgKl9fcmVzdWx0ID0g Kl9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICgh X19iaW5hcnlfcHJlZCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgKisrX19yZXN1bHQgPSAqX19maXJz dDsKICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CiMgMTIzMiAiL2hvbWUvYmFuZ2VydGgv YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUg X0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgdW5pcXVlX2NvcHko X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9P dXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2Jp bmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsK CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogICAgICByZXR1 cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsCl9fcmVzdWx0LCBfX2JpbmFyeV9wcmVk LCBfSXRlclR5cGUoKSk7CiAgICB9CiMgMTI2MyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMt cHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVuaXF1ZShfRm9yd2FyZEl0ZXIg X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgICAgIAogICAgICAgICAK CgogICAgICAgICAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0KTsKICAg ICAgICAgIHJldHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QpOwogICAg fQojIDEyOTAgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMv Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBl bmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgX0JpbmFyeVBy ZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgX19maXJz dCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0LCBfX2JpbmFyeV9wcmVkKTsKICAgICAg cmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCwgX19iaW5hcnlfcHJl ZCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4K ICAgIHZvaWQKICAgIF9fcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGly ZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlv bmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAg ICBpZiAoX19maXJzdCA9PSBfX2xhc3QgfHwgX19maXJzdCA9PSAtLV9fbGFzdCkKICAgICAgICAg ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIGl0ZXJf c3dhcChfX2ZpcnN0KyssIF9fbGFzdCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19yZXZlcnNlKF9SYW5kb21BY2Nlc3NJ dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgICAgIHdoaWxl IChfX2ZpcnN0IDwgX19sYXN0KQogICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCAtLV9f bGFzdCk7CiAgICB9CiMgMTM0OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1 ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl Y3Rpb25hbEl0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0 ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgICAgIAoK ICAgICAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnko X19maXJzdCkpOwogICAgfQojIDEzNzQgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9p bmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp ZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAg ICByZXZlcnNlX2NvcHkoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFs SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y ZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz dCkgewogICAgICAgIC0tX19sYXN0OwogICAgICAgICpfX3Jlc3VsdCA9ICpfX2xhc3Q7CiAgICAg ICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgMTM5 OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0 bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXVjbGlkZWFuUmluZ0VsZW1lbnQ+CiAg ICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQKICAgIF9fZ2NkKF9FdWNsaWRlYW5SaW5nRWxlbWVudCBf X20sIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX24pCiAgICB7CiAgICAgIHdoaWxlIChfX24gIT0g MCkgewogICAgICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX3QgPSBfX20gJSBfX247CiAgICAg ICAgX19tID0gX19uOwogICAgICAgIF9fbiA9IF9fdDsKICAgICAgfQogICAgICByZXR1cm4gX19t OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIHZvaWQK ICAgIF9fcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgX0ZvcndhcmRJ dGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKChfX2ZpcnN0ID09IF9f bWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKICAgICAgICByZXR1cm47CgogICAgICBf Rm9yd2FyZEl0ZXIgX19maXJzdDIgPSBfX21pZGRsZTsKICAgICAgZG8gewogICAgICAgIHN3YXAo Kl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxl KQogICAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICAgICAgfSB3aGlsZSAoX19maXJzdDIg IT0gX19sYXN0KTsKCiAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7CgogICAgICB3aGlsZSAoX19m aXJzdDIgIT0gX19sYXN0KSB7CiAgICAgICAgc3dhcCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7 CiAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAgICAgICBfX21pZGRsZSA9IF9f Zmlyc3QyOwogICAgICAgIGVsc2UgaWYgKF9fZmlyc3QyID09IF9fbGFzdCkKICAgICAgICAgIF9f Zmlyc3QyID0gX19taWRkbGU7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0ZShfQmlkaXJlY3Rpb25h bEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwK ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgYmlk aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKCiAgICAgIGlmICgoX19maXJz dCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoK ICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y X3RhZygpKTsKICAgICAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsIGJpZGlyZWN0aW9uYWxf aXRlcmF0b3JfdGFnKCkpOwoKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19taWRkbGUgJiYgX19t aWRkbGUgIT0gX19sYXN0KQogICAgICAgIHN3YXAgKCpfX2ZpcnN0KyssICotLV9fbGFzdCk7Cgog ICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkgewogICAgICAgIF9fcmV2ZXJzZShfX21pZGRs ZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAgfQogICAgICBl bHNlIHsKICAgICAgICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0aW9uYWxf aXRlcmF0b3JfdGFnKCkpOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0ZShfUmFuZG9tQWNjZXNzSXRl ciBfX2ZpcnN0LAogICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICByYW5kb21fYWNj ZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKChfX2ZpcnN0ID09IF9f bWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKICAgICAgICByZXR1cm47CgogICAgICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZl cmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgX0Rp c3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZSBfX2sgPSBfX21p ZGRsZSAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZSBfX2wgPSBfX24gLSBfX2s7CgogICAgICBp ZiAoX19rID09IF9fbCkgewogICAgICAgIHN3YXBfcmFuZ2VzKF9fZmlyc3QsIF9fbWlkZGxlLCBf X21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBfRGlzdGFuY2UgX19kID0g X19nY2QoX19uLCBfX2spOwoKICAgICAgZm9yIChfRGlzdGFuY2UgX19pID0gMDsgX19pIDwgX19k OyBfX2krKykgewogICAgICAgIF9WYWx1ZVR5cGUgX190bXAgPSAqX19maXJzdDsKICAgICAgICBf UmFuZG9tQWNjZXNzSXRlciBfX3AgPSBfX2ZpcnN0OwoKICAgICAgICBpZiAoX19rIDwgX19sKSB7 CiAgICAgICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2wvX19kOyBfX2orKykg ewogICAgICAgICAgICBpZiAoX19wID4gX19maXJzdCArIF9fbCkgewogICAgICAgICAgICAgICpf X3AgPSAqKF9fcCAtIF9fbCk7CiAgICAgICAgICAgICAgX19wIC09IF9fbDsKICAgICAgICAgICAg fQoKICAgICAgICAgICAgKl9fcCA9ICooX19wICsgX19rKTsKICAgICAgICAgICAgX19wICs9IF9f azsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVsc2UgewogICAgICAgICAgZm9yIChf RGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19rL19fZCAtIDE7IF9faiArKykgewogICAgICAgICAg ICBpZiAoX19wIDwgX19sYXN0IC0gX19rKSB7CiAgICAgICAgICAgICAgKl9fcCA9ICooX19wICsg X19rKTsKICAgICAgICAgICAgICBfX3AgKz0gX19rOwogICAgICAgICAgICB9CgogICAgICAgICAg ICAqX19wID0gKiAoX19wIC0gX19sKTsKICAgICAgICAgICAgX19wIC09IF9fbDsKICAgICAgICAg IH0KICAgICAgICB9CgogICAgICAgICpfX3AgPSBfX3RtcDsKICAgICAgICArK19fZmlyc3Q7CiAg ICAgIH0KICAgIH0KIyAxNTYxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk ZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlcj4KICAgIGlubGluZSB2b2lkCiAgICByb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G b3J3YXJkSXRlciBfX21pZGRsZSwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCgog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjppdGVy YXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7CiAgICAgIF9fcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxl LCBfX2xhc3QsIF9JdGVyVHlwZSgpKTsKICAgIH0KIyAxNTg5ICIvaG9tZS9iYW5nZXJ0aC9iaW4v Z2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0 SXRlcgogICAgcm90YXRlX2NvcHkoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X21pZGRsZSwKICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsIF9PdXRwdXRJdGVy IF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgogICAgICByZXR1cm4gY29weShfX2ZpcnN0 LCBfX21pZGRsZSwgY29weShfX21pZGRsZSwgX19sYXN0LCBfX3Jlc3VsdCkpOwogICAgfQojIDE2 MTIgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9z dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIF9E aXN0YW5jZQogICAgX19yYW5kb21fbnVtYmVyKF9EaXN0YW5jZSBfX24pCiAgICB7CgogICAgICBy ZXR1cm4gbHJhbmQ0OCgpICUgX19uOwoKCgogICAgfQojIDE2MzQgIi9ob21lL2JhbmdlcnRoL2Jp bi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgcmFuZG9t X3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s YXN0KQogICAgewoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsK ICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9f bGFzdDsgKytfX2kpCiAgICAgICAgaXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZG9tX251 bWJlcigoX19pIC0gX19maXJzdCkgKyAxKSk7CiAgICB9CiMgMTY2MCAiL2hvbWUvYmFuZ2VydGgv YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1JhbmRvbU51bWJlckdl bmVyYXRvcj4KICAgIHZvaWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9f Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIF9SYW5k b21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9fZmly c3QgPT0gX19sYXN0KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0g X19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJfc3dhcChfX2ks IF9fZmlyc3QgKyBfX3JhbmQoKF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQoKCgoKCgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBf Rm9yd2FyZEl0ZXIKICAgIF9fcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAg ICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0g X19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgICAgIHdoaWxlIChfX3ByZWQoKl9fZmlyc3QpKQog ICAgICAgIGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgICAgIF9G b3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwoKICAgICAgd2hpbGUgKCsrX19uZXh0ICE9IF9f bGFzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7CiAgICAgICAgICBzd2FwKCpfX2Zp cnN0LCAqX19uZXh0KTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICB9CgogICAgICByZXR1 cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIKICAgIF9f cGFydGl0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAg ICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKHRydWUpIHsK ICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAg ICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIGlmIChfX3ByZWQoKl9fZmly c3QpKQogICAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGJy ZWFrOwogICAgICAgIC0tX19sYXN0OwogICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgaWYg KF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICAg IGVsc2UgaWYgKCFfX3ByZWQoKl9fbGFzdCkpCiAgICAgICAgICAgIC0tX19sYXN0OwogICAgICAg ICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19s YXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxNzQ4ICIvaG9tZS9iYW5n ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAg IGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHBhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwg X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAg IHsKCiAgICAgCiAgICAgCgoKICAgICAgcmV0dXJuIF9fcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFz dCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KCgoKCgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBl bmFtZSBfRGlzdGFuY2U+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9faW5wbGFjZV9zdGFibGVfcGFy dGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xl bikKICAgIHsKICAgICAgaWYgKF9fbGVuID09IDEpCiAgICAgICAgcmV0dXJuIF9fcHJlZCgqX19m aXJzdCkgPyBfX2xhc3QgOiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBf X2ZpcnN0OwogICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogICAgICBfRm9yd2Fy ZEl0ZXIgX19iZWdpbiA9IF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbWlk ZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2xlbiAvIDIpOwogICAgICBfRm9yd2FyZEl0ZXIgX19lbmQgPSBfX2lucGxh Y2Vfc3RhYmxlX3BhcnRpdGlvbihfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAy KTsKICAgICAgcm90YXRlKF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7CiAgICAgIGFkdmFuY2Uo X19iZWdpbiwgZGlzdGFuY2UoX19taWRkbGUsIF9fZW5kKSk7CiAgICAgIHJldHVybiBfX2JlZ2lu OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUg X1BvaW50ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3Rh bmNlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAg aWYgKF9fbGVuIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1 bHQxID0gX19maXJzdDsKICAgICAgICBfUG9pbnRlciBfX3Jlc3VsdDIgPSBfX2J1ZmZlcjsKICAg ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0IDsgKytfX2ZpcnN0KQogICAgICAgICAgaWYg KF9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgICAgICAgKl9fcmVzdWx0MSA9ICpfX2ZpcnN0Owog ICAgICAgICAgICArK19fcmVzdWx0MTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAg ICAgICAgICAqX19yZXN1bHQyID0gKl9fZmlyc3Q7CiAgICAgICAgICAgICsrX19yZXN1bHQyOwog ICAgICAgICAgfQogICAgICAgIGNvcHkoX19idWZmZXIsIF9fcmVzdWx0MiwgX19yZXN1bHQxKTsK ICAgICAgICByZXR1cm4gX19yZXN1bHQxOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9G b3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwg X19sZW4gLyAyKTsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19iZWdpbiA9IF9fc3RhYmxlX3BhcnRp dGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19lbmQgPSBf X3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2xlbiAtIF9fbGVuIC8gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICByb3Rh dGUoX19iZWdpbiwgX19taWRkbGUsIF9fZW5kKTsKICAgICAgICBhZHZhbmNlKF9fYmVnaW4sIGRp c3RhbmNlKF9fbWlkZGxlLCBfX2VuZCkpOwogICAgICAgIHJldHVybiBfX2JlZ2luOwogICAgICB9 CiAgICB9CiMgMTg0OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr LzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs IHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHN0YWJsZV9wYXJ0aXRp b24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBp ZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UK ICAgICAgewogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJk SXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlw ZTsKCiAgICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyLCBfVmFsdWVUeXBlPiBf X2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgIGlmIChfX2J1Zi5zaXplKCkgPiAwKQogICAg ICAgICAgcmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3Qs IF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp c3RhbmNlVHlwZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX19idWYuc2l6ZSgpKTsKICAg ICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19m aXJzdCwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0Rpc3RhbmNlVHlwZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSk7CiAgICAgIH0K ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5h bWUgX1RwPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihf UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2b3QpCiAgICB7CiAgICAgIHdoaWxlICh0cnVl KSB7CiAgICAgICAgd2hpbGUgKCpfX2ZpcnN0IDwgX19waXZvdCkKICAgICAgICAgICsrX19maXJz dDsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAoX19waXZvdCA8ICpfX2xhc3QpCiAg ICAgICAgICAtLV9fbGFzdDsKICAgICAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAg ICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwog ICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAg X1JhbmRvbUFjY2Vzc0l0ZXIKICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgX1RwIF9fcGl2b3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgd2hpbGUg KHRydWUpIHsKICAgICAgICB3aGlsZSAoX19jb21wKCpfX2ZpcnN0LCBfX3Bpdm90KSkKICAgICAg ICAgICsrX19maXJzdDsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAoX19jb21wKF9f cGl2b3QsICpfX2xhc3QpKQogICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgaWYgKCEoX19maXJz dCA8IF9fbGFzdCkpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBpdGVyX3N3YXAo X19maXJzdCwgX19sYXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxOTI5 ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3Rs X2FsZ28uaCIgMwogIGVudW0geyBfTV90aHJlc2hvbGQgPSAxNiB9OwoKCgoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBf X3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9f dmFsKQogICAgewogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAgICAg IC0tX19uZXh0OwogICAgICB3aGlsZSAoX192YWwgPCAqX19uZXh0KSB7CiAgICAgICAgKl9fbGFz dCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0OwogICAgICAgIC0tX19uZXh0Owog ICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4K ICAgIHZvaWQKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg X19sYXN0LCBfVHAgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAgd2hpbGUgKF9f Y29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAgICAgICAqX19sYXN0ID0gKl9fbmV4dDsKICAgICAg ICBfX2xhc3QgPSBfX25leHQ7CiAgICAgICAgLS1fX25leHQ7CiAgICAgIH0KICAgICAgKl9fbGFz dCA9IF9fdmFsOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ dGVyPgogICAgdm9pZAogICAgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0ID09 IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2Zp cnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsKICAgICAgICB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsID0gKl9f aTsKICAgICAgICBpZiAoX192YWwgPCAqX19maXJzdCkgewogICAgICAgICAgY29weV9iYWNrd2Fy ZChfX2ZpcnN0LCBfX2ksIF9faSArIDEpOwogICAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbDsKICAg ICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChf X2ksIF9fdmFsKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k b21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9faW5zZXJ0aW9u X3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChf X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBf X2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsKICAgICAgICB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9f dmFsID0gKl9faTsKICAgICAgICBpZiAoX19jb21wKF9fdmFsLCAqX19maXJzdCkpIHsKICAgICAg ICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBfX2kgKyAxKTsKICAgICAgICAgICpfX2Zp cnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fdW5ndWFyZGVk X2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCwgX19jb21wKTsKICAgICAgfQogICAgfQoKCgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAg IF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7Cgog ICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7 ICsrX19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFsdWVUeXBl KCpfX2kpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl ciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmd1YXJkZWRfaW5z ZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQog ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz SXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0 ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAgX191bmd1YXJk ZWRfbGluZWFyX2luc2VydChfX2ksIF9WYWx1ZVR5cGUoKl9faSksIF9fY29tcCk7CiAgICB9CgoK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBf X2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfTV90 aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBf TV90aHJlc2hvbGQpOwogICAgICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qg KyBfTV90aHJlc2hvbGQsIF9fbGFzdCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9faW5z ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBf X2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19j b21wKQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkgewog ICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9NX3RocmVzaG9sZCwg X19jb21wKTsKICAgICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX01f dGhyZXNob2xkLCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9f aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIF9TaXplCiAgICBfX2xnKF9TaXplIF9f bikKICAgIHsKICAgICAgX1NpemUgX19rOwogICAgICBmb3IgKF9fayA9IDA7IF9fbiAhPSAxOyBf X24gPj49IDEpICsrX19rOwogICAgICByZXR1cm4gX19rOwogICAgfQoKCgoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZT4KICAgIHZvaWQKICAg IF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0KQog ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz SXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2Zp cnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewog ICAgICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0KTsKICAgICAgICAg IHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1fX2RlcHRoX2xpbWl0OwogICAgICAgIF9SYW5k b21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2Zp cnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShf X21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkp KSk7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xpbWl0 KTsKICAgICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX0Nv bXBhcmU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyIF9f Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX1Np emUgX19kZXB0aF9saW1pdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1Zh bHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7 CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICAgICAgcGFydGlhbF9zb3J0 KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICAgICAgcmV0dXJuOwogICAg ICAgIH0KICAgICAgICAtLV9fZGVwdGhfbGltaXQ7CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2Zp cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwgX19jb21wKSksCiAg ICAgICAgICAgX19jb21wKTsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3Qs IF9fZGVwdGhfbGltaXQsIF9fY29tcCk7CiAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAgICAgIH0K ICAgIH0KIyAyMTY2ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysv My4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ dGVyPgogICAgaW5saW5lIHZvaWQKICAgIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsK CgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIF9f aW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICog Mik7CiAgICAgICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAg ICB9CiAgICB9CiMgMjE5NyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUv YysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj ZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgc29ydChfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJl IF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh bmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgog ICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9f Zmlyc3QsIF9fbGFzdCwgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIsIF9fY29tcCk7CiAgICAg ICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAg IH0KICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAg ICB2b2lkCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19m aXJzdCA8IDE1KSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwog ICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9 IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogICAgICBfX2lucGxhY2Vfc3RhYmxl X3NvcnQoX19maXJzdCwgX19taWRkbGUpOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19t aWRkbGUsIF9fbGFzdCk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19t aWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSAtIF9f Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19taWRkbGUpOwog ICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFt ZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19m aXJzdCA8IDE1KSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9f Y29tcCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f bWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7CiAgICAgIF9faW5wbGFj ZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICAgICAgX19pbnBsYWNl X3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIF9fbWVyZ2Vfd2l0 aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19sYXN0IC0gX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21w KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIxLCB0eXBlbmFt ZSBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAg dm9pZAogICAgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj ZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSkKICAgIHsKICAgICAgX0Rp c3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CgogICAgICB3aGlsZSAoX19sYXN0 IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICAgICAgX19yZXN1bHQgPSBtZXJnZShfX2Zp cnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2Zp cnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAogICAgICAgICAgICAgICAg ICAgICAgICAgX19yZXN1bHQpOwogICAgICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICAgICAg fQoKICAgICAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBf X3N0ZXBfc2l6ZSk7CiAgICAgIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwg X19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgICAgIF9fcmVzdWx0KTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIxLCB0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBf Q29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVy MSBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUsCiAg ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5j ZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9f Zmlyc3QgPj0gX190d29fc3RlcCkgewogICAgICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwg X19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgX19maXJzdCAr IF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAg ICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICBf X2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0KICAgICAgX19zdGVwX3NpemUgPSBtaW4oX0Rp c3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CgogICAgICBtZXJnZShfX2Zp cnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBf c2l6ZSwgX19sYXN0LAogICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAgICAgX19jb21wKTsK ICAgIH0KCiAgZW51bSB7IF9NX2NodW5rX3NpemUgPSA3IH07CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX2No dW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1 bmtfc2l6ZSkKICAgIHsKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19z aXplKSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19jaHVu a19zaXplKTsKICAgICAgICBfX2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKICAgICAgfQogICAgICBf X2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21w YXJlPgogICAgdm9pZAogICAgX19jaHVua19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRl ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg ICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiAgICAgICAgX19p bnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19jaHVua19zaXplLCBfX2NvbXApOwog ICAgICAgIF9fZmlyc3QgKz0gX19jaHVua19zaXplOwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9u X3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXI+CiAgICB2b2lkCiAgICBfX21l cmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9f YnVmZmVyKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu ZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CgogICAgICBfRGlzdGFu Y2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0 ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgICAgIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9NX2No dW5rX3NpemU7CiAgICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBf X3N0ZXBfc2l6ZSk7CgogICAgICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewogICAgICAg IF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXpl KTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9f YnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSk7CiAgICAgICAgX19z dGVwX3NpemUgKj0gMjsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9p ZAogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf UG9pbnRlciBfX2J1ZmZlciwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlw ZSBfRGlzdGFuY2U7CgogICAgICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0Owog ICAgICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgICAgIF9E aXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9NX2NodW5rX3NpemU7CiAgICAgIF9fY2h1bmtfaW5zZXJ0 aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKCiAgICAgIHdo aWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19m aXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUsIF9fY29tcCk7CiAgICAgICAgX19z dGVwX3NpemUgKj0gMjsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZm ZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CiAgICAgICAgX19zdGVwX3Np emUgKj0gMjsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz SXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAg IF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBf X2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBf X2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogICAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICAgICAgaWYgKF9fbGVuID4gX19idWZmZXJf c2l6ZSkgewogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUs IF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZl KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgfQogICAg ICBlbHNlIHsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRk bGUsIF9fYnVmZmVyKTsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19taWRkbGUs IF9fbGFzdCwgX19idWZmZXIpOwogICAgICB9CiAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJz dCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAg ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZmZXIs IF9fYnVmZmVyX3NpemUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz SXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwKICAgICAgICAgICB0 eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVy X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsK ICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAgICAg IF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogICAgICBpZiAo X19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShf X2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUo X19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9f bWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fY29t cCk7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9f YnVmZmVyLCBfX2NvbXApOwogICAgICB9CiAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwg X19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAgICAg ICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9f YnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KIyAyNDMw ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5s aW5lIHZvaWQKICAgIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlm ZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBfVGVtcG9y YXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1ZhbHVlVHlwZT4gYnVmKF9fZmlyc3QsIF9f bGFzdCk7CiAgICAgIGlmIChidWYuYmVnaW4oKSA9PSAwKQogICAgICAgIF9faW5wbGFjZV9zdGFi bGVfc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBlbHNlCiAgICAgICAgX19zdGFibGVfc29y dF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKGJ1 Zi5zaXplKCkpKTsKICAgIH0KIyAyNDY2ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUv aW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9S YW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBz dGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6 ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgX1Rl bXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9WYWx1ZVR5cGU+IGJ1ZihfX2ZpcnN0 LCBfX2xhc3QpOwogICAgICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX2lucGxhY2Vf c3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICBlbHNlCiAgICAgICAg X19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLCBfRGlz dGFuY2VUeXBlKGJ1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j b21wKTsKICAgIH0KIyAyNTAyICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk ZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B Y2Nlc3NJdGVyPgogICAgdm9pZAogICAgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9f Zmlyc3QsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAg ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUg X1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIG1ha2VfaGVhcChfX2ZpcnN0LCBfX21p ZGRsZSk7CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8 IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaWYgKCpfX2kgPCAqX19maXJzdCkKICAgICAgICAgIF9f cG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7CiAgICAg IHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICB9CiMgMjU0MCAiL2hvbWUvYmFuZ2Vy dGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAg ICB2b2lkCiAgICBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAg ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICBf UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj ZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBt YWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgIGZvciAoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaWYg KF9fY29tcCgqX19pLCAqX19maXJzdCkpCiAgICAgICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9f bWlkZGxlLCBfX2ksIF9WYWx1ZVR5cGUoKl9faSksIF9fY29tcCk7CiAgICAgIHNvcnRfaGVhcChf X2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICAgIH0KIyAyNTc5ICIvaG9tZS9iYW5nZXJ0aC9i aW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAg X1JhbmRvbUFjY2Vzc0l0ZXIKICAgIHBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJz dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz SXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fcmVzdWx0X2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9JbnB1dFZhbHVlVHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90 eXBlIF9PdXRwdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoK ICAgICAKICAgICAKICAgICAKICAgICAKCiAgICAgIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jl c3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgICAgIHdoaWxlKF9fZmlyc3Qg IT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAgICAg ICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgICAgICsrX19yZXN1bHRfcmVh bF9sYXN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgICBtYWtlX2hlYXAoX19yZXN1 bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9f bGFzdCkgewogICAgICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdF9maXJzdCkKICAgICAgICAg IF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAg ICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19yZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1 bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRWYWx1ZVR5cGUoKl9fZmly c3QpKTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgICAgc29ydF9oZWFwKF9fcmVzdWx0 X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogICAgICByZXR1cm4gX19yZXN1bHRfcmVhbF9s YXN0OwogICAgfQojIDI2MzMgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRl L2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl ciwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX1Jh bmRvbUFjY2Vzc0l0ZXIKICAgIHBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy IF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAg ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2 YWx1ZV90eXBlIF9JbnB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9PdXRwdXRWYWx1ZVR5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy Pjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKICAg ICAKCgogICAgICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9f cmVzdWx0X2xhc3Q7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9 IF9fcmVzdWx0X2ZpcnN0OwogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3Vs dF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAgICAgICpfX3Jlc3VsdF9yZWFsX2xh c3QgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICAgICArK19f Zmlyc3Q7CiAgICAgIH0KICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9y ZWFsX2xhc3QsIF9fY29tcCk7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAg ICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdF9maXJzdCkpCiAgICAgICAgICBfX2Fk anVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAg ICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2Zp cnN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSwK ICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICArK19fZmlyc3Q7CiAgICAg IH0KICAgICAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9f Y29tcCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICB9CiMgMjY4NiAiL2hv bWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAg IG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICBf UmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh bmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAgICAKCiAg ICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigq X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAgICAg ICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgICAg IGVsc2UKICAgICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9u X3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KIyAyNzI4ICIvaG9tZS9iYW5nZXJ0aC9iaW4v Z2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQK ICAgIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAg ICBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkK ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz c0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAgICAKCgogICAgICB3aGls ZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1 dCA9CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9f Zmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKSksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICBpZiAoX19jdXQgPD0gX19udGgp CiAgICAgICAgICBfX2ZpcnN0ID0gX19jdXQ7CiAgICAgICAgZWxzZQogICAgICAgICAgX19sYXN0 ID0gX19jdXQ7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3Qs IF9fY29tcCk7CiAgICB9CiMgMjc2OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2lu Y2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y d2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgbG93ZXJfYm91bmQo X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192 YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJk SXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7 CgoKCgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlz dGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAg IF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAg ICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAg ICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmICgqX19taWRkbGUgPCBfX3Zh bCkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0Owog ICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAgIGVs c2UKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0 OwogICAgfQojIDI4MTYgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr Ky8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBs b3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVf dHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf Rm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAg IAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7 CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7 CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsK ICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19o YWxmKTsKICAgICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgICAgICBf X2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9 IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX19s ZW4gPSBfX2hhbGY7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjg1NiAi L2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9h bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4K ICAgIF9Gb3J3YXJkSXRlcgogICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G b3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVl VHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVy Pjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCiAgICAgCiAgICAgCiAgICAgCgog ICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAg ICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAg ICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAg ICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYp OwogICAgICAgIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAgICAgIF9fbGVuID0gX19oYWxm OwogICAgICAgIGVsc2UgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAg KytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAg fQogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI5MDEgIi9ob21lL2Jhbmdl cnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192 YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5 cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xl biA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxm OwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7 CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7 CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX19jb21wKF9f dmFsLCAqX19taWRkbGUpKQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxzZSB7 CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAg ICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgIH0KICAgICAg cmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjk0OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMt cHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9y d2FyZEl0ZXI+CiAgICBlcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ dGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZm ZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9E aXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlz dGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9f cmlnaHQ7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4g Pj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRs ZSwgX19oYWxmKTsKICAgICAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgICAgIF9f Zmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0g X19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX3ZhbCA8ICpf X21pZGRsZSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAg ICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsKTsKICAgICAg ICAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICAgICAgICAgX19yaWdodCA9IHVwcGVyX2Jv dW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsKTsKICAgICAgICAgIHJldHVybiBwYWlyPF9G b3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQpOwogICAgICAgIH0KICAg ICAgfQogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJz dCwgX19maXJzdCk7CiAgICB9CiMgMzAwMyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl L2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBwYWlyPF9G b3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgogICAgZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAg ICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90 eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5 cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBl IF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7Cgog ICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAg ICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxm KTsKICAgICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgICAgICBfX2Zp cnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9f bGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKF9fdmFs LCAqX19taWRkbGUpKQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxzZSB7CiAg ICAgICAgICBfX2xlZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwsIF9f Y29tcCk7CiAgICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAgICAgIF9fcmln aHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCwgX19jb21wKTsKICAg ICAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9f cmlnaHQpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIs IF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7CiAgICB9CiMgMzA1MiAiL2hvbWUvYmFu Z2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGJvb2wK ICAgIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CgoKICAgICAKICAg ICAKCiAgICAgCgogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwg X19sYXN0LCBfX3ZhbCk7CiAgICAgIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICEoX192YWwgPCAq X19pKTsKICAgIH0KIyAzMDgzICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk ZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIGJpbmFy eV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAg ICAgCiAgICAgCgogICAgIAoKCiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChf X2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXApOwogICAgICByZXR1cm4gX19pICE9IF9fbGFz dCAmJiAhX19jb21wKF9fdmFsLCAqX19pKTsKICAgIH0KIyAzMTE1ICIvaG9tZS9iYW5nZXJ0aC9i aW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUg X091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJz dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg X0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAg ewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJz dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKCpfX2Zp cnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAg ICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19y ZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAg ICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3Qy LCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQojIDMxNjYgIi9ob21l L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIy LCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAg IF9PdXRwdXRJdGVyCiAgICBtZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg X19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xh c3QyLAogICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAg IHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2Zp cnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoX19j b21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmly c3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAg ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAg IH0KICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3Qy LCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKCgoK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3Rh bmNlPgogICAgdm9pZAogICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0 ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlz dGFuY2UgX19sZW4yKQogICAgewogICAgICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDAp CiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgICAg ICBpZiAoKl9fbWlkZGxlIDwgKl9fZmlyc3QpCiAgICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmly c3QsIF9fbWlkZGxlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f c2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAg IF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAg ICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9f bGVuMTEpOwogICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xh c3QsICpfX2ZpcnN0X2N1dCk7CiAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBf X3NlY29uZF9jdXQpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbGVuMjIgPSBfX2xl bjIgLyAyOwogICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICBf X2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0 KTsKICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAg ICB9CiAgICAgIHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPSBfX2ZpcnN0X2N1dDsKICAgICAg YWR2YW5jZShfX25ld19taWRkbGUsIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpKTsK ICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdf bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIpOwog ICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19s ZW4yIC0gX19sZW4yMik7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0 aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9p ZAogICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4y LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg IGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGlm IChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAgICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCAq X19maXJzdCkpCiAgICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAg ICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0 ID0gX19maXJzdDsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlk ZGxlOwogICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjIy ID0gMDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICAgIF9fbGVuMTEgPSBfX2xl bjEgLyAyOwogICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICAgIF9f c2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwg X19jb21wKTsKICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1 dCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAg ICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAgIF9fZmlyc3RfY3V0 ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7 CiAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAg fQogICAgICByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAg ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0gX19maXJzdF9jdXQ7CiAgICAgIGFk dmFuY2UoX19uZXdfbWlkZGxlLCBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KSk7CiAg ICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21p ZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjExLCBfX2xlbjIyLCBfX2Nv bXApOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRf Y3V0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4x MSwgX19sZW4yIC0gX19sZW4yMiwgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAog ICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEKICAg IF9fcm90YXRlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwKICAgICAgICAg ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19taWRkbGUsCiAgICAgICAgICAgICAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg IF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAg ICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgX0Rp c3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19i dWZmZXJfZW5kOwogICAgICBpZiAoX19sZW4xID4gX19sZW4yICYmIF9fbGVuMiA8PSBfX2J1ZmZl cl9zaXplKSB7CiAgICAgICAgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBf X2J1ZmZlcik7CiAgICAgICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0 KTsKICAgICAgICByZXR1cm4gY29weShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2ZpcnN0KTsK ICAgICAgfQogICAgICBlbHNlIGlmIChfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAg IF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAg ICBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogICAgICAgIHJldHVybiBjb3B5X2Jh Y2t3YXJkKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgICAgIH0KICAgICAgZWxz ZSB7CiAgICAgICAgcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwogICAgICAgIGFk dmFuY2UoX19maXJzdCwgZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCkpOwogICAgICAgIHJldHVy biBfX2ZpcnN0OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly ZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0 eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIzPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMwogICAg X19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rp b25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl cjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAg ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCkKICAgIHsKICAgICAgaWYgKF9fZmly c3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsIF9f bGFzdDIsIF9fcmVzdWx0KTsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAg cmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAg LS1fX2xhc3QxOwogICAgICAtLV9fbGFzdDI7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAg aWYgKCpfX2xhc3QyIDwgKl9fbGFzdDEpIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFz dDE7CiAgICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJu IGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAgICAg LS1fX2xhc3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICotLV9fcmVzdWx0 ID0gKl9fbGFzdDI7CiAgICAgICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICAg ICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwog ICAgICAgICAgLS1fX2xhc3QyOwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFs SXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMywgdHlwZW5hbWUg X0NvbXBhcmU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzCiAgICBfX21lcmdlX2JhY2t3YXJkKF9C aWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwK ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGly ZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIzIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAg ICB7CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5X2Jh Y2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlmIChfX2ZpcnN0MiA9 PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3Qx LCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgICAgLS1fX2xhc3QyOwogICAgICB3aGls ZSAodHJ1ZSkgewogICAgICAgIGlmIChfX2NvbXAoKl9fbGFzdDIsICpfX2xhc3QxKSkgewogICAg ICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAgICAgIGlmIChfX2ZpcnN0MSA9PSBf X2xhc3QxKQogICAgICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xh c3QyLCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9fbGFzdDE7CiAgICAgICAgfQogICAgICAgIGVs c2UgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsKICAgICAgICAgIGlmIChfX2Zp cnN0MiA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0 MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9fbGFzdDI7CiAgICAgICAgfQog ICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVy LCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Qb2ludGVyPgogICAgdm9pZAogICAgX19t ZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Ug X19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBf X2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgICAgICBpZiAoX19s ZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBf UG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7 CiAgICAgICAgICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xh c3QsIF9fZmlyc3QpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX19sZW4yIDw9IF9f YnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShf X21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgICAgICAgIF9fbWVyZ2VfYmFja3dhcmQo X19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgICAg ICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f Zmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vj b25kX2N1dCA9IF9fbWlkZGxlOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAg ICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgICAgICAgaWYgKF9fbGVuMSA+ IF9fbGVuMikgewogICAgICAgICAgICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAg ICAgICAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAgICAgICAg ICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0 X2N1dCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19z ZWNvbmRfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg ICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19z ZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICAgICAgICAgICAgX19maXJzdF9jdXQgPSB1cHBl cl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgICAgICAgICAg ICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgICAgICAg IH0KICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICAgICAg ICAgICAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNv bmRfY3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xl bjExLCBfX2xlbjIyLCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwg X19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICAgIF9f bWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4x IC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIy LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICB9CiAgICB9CgoKCgoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5 cGVuYW1lIF9Qb2ludGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAog ICAgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAg ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAg ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfRGlz dGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICBfUG9p bnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAg ICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgICAgIGlmIChfX2xlbjEgPD0gX19sZW4y ICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVm ZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAgICAgICAg bWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCwg X19jb21wKTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZl cl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRk bGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgICAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmly c3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgICB9CiAg ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0 ID0gX19maXJzdDsKICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9 IF9fbWlkZGxlOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgICAgICAg IF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikg ewogICAgICAgICAgICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICAgICAgICAg ICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAgICAgICAgICAgIF9fc2Vj b25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwgX19j b21wKTsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3Nl Y29uZF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg ICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShfX3Nl Y29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAgICAgICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVy X2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICAg ICAgICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAg ICAgICAgICB9CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQog ICAgICAgICAgICAgICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUs IF9fc2Vjb25kX2N1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4x IC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9f Zmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7 CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQs IF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKICAgICAg ICAgIH0KICAgIH0KIyAzNTA4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk ZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVj dGlvbmFsSXRlcj4KICAgIHZvaWQKICAgIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVy IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwK ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFs dWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAg ICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19t aWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAgICAgIF9EaXN0 YW5jZVR5cGUgX19sZW4xID0gZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOwogICAgICBfRGlz dGFuY2VUeXBlIF9fbGVuMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoKICAgICAgX1Rl bXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2Zp cnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgICAgIF9fbWVy Z2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xl bjIpOwogICAgICBlbHNlCiAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRs ZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVm LmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSk7CiAgICB9CiMgMzU1OSAiL2hv bWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgdm9pZAogICAgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19m aXJzdCwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAg ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFs SXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoK ICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xh c3QpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjEgPSBkaXN0YW5j ZShfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4yID0gZGlzdGFu Y2UoX19taWRkbGUsIF9fbGFzdCk7CgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rp b25hbEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChf X2J1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0 LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwgX19jb21wKTsKICAgICAgZWxzZQog ICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4x LCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFu Y2VUeXBlKF9fYnVmLnNpemUoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwog ICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w dXRJdGVyMj4KICAgIGJvb2wKICAgIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5w dXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1 dEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKICAgICAg d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAg ICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg ICAgIGVsc2UgaWYoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICAgICAgKytfX2ZpcnN0MTsK ICAgICAgICBlbHNlCiAgICAgICAgICArK19fZmlyc3QxLCArK19fZmlyc3QyOwoKICAgICAgcmV0 dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29s CiAgICBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwK ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLCBf Q29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKCiAgICAg IHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAg ICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFs c2U7CiAgICAgICAgZWxzZSBpZihfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAg ICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlCiAgICAgICAgICArK19fZmlyc3QxLCArK19fZmly c3QyOwoKICAgICAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091 dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmly c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz dWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGls ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAg aWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmly c3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoKl9f Zmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAg ICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpf X3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19f Zmlyc3QyOwogICAgICAgIH0KICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVy biBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3Vs dCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lu cHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21w YXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg X0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg X0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAK CgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0 MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAg ICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0K ICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAg ICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0K ICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAg ICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICArK19f cmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5 KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy PgogICAgX091dHB1dEl0ZXIKICAgIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJz dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIy IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBfT3V0 cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAg CgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0 MikKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICAgICAgKytfX2ZpcnN0 MTsKICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICArK19f Zmlyc3QyOwogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwog ICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19f cmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9P dXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIK ICAgIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f bGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJ dGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg X0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAK CgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0 MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsr X19maXJzdDE7CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkK ICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQg PSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsK ICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVy MiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2RpZmZlcmVu Y2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAg ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAg ICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBf X2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsK ICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAg ICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgqX19maXJzdDIg PCAqX19maXJzdDEpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2UgewogICAgICAg ICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1 cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRw dXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAg IHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx LAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f bGFzdDIsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUg X19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAg d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAg ICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0 ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7 CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkp CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0 MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2Zp cnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAg X091dHB1dEl0ZXIKICAgIHNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2Zp cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf SW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAg ICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg X19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7 CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwog ICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3Qy IDwgKl9fZmlyc3QxKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAg ICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxz ZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9 CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xh c3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwg dHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5 cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9zeW1tZXRyaWNfZGlmZmVy ZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s YXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAg IAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0g X19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmly c3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAg ICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAg ZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAgICAgKl9fcmVz dWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1 bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAg ICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19s YXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCgoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxl bWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAg ICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsK ICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19m aXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCpfX3Jlc3VsdCA8ICpfX2ZpcnN0KQogICAgICAg ICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9y d2FyZEl0ZXIKICAgIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAK ICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAg ICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJz dCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9fY29tcCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgX19y ZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWluX2VsZW1lbnQo X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAog ICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAg IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3Qg IT0gX19sYXN0KQogICAgICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdCkKICAgICAgICAgIF9f cmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJ dGVyCiAgICBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAg CgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9G b3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0g X19sYXN0KQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdCkpCiAgICAgICAg ICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgYm9vbAogICAgbmV4dF9w ZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0 KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9f Zmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9fbGFzdCkKICAgICAgICByZXR1 cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1fX2k7CgogICAgICBmb3IoOzsp IHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgICAgICAtLV9faTsK ICAgICAgICBpZiAoKl9faSA8ICpfX2lpKSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUgKCEoKl9faSA8ICotLV9faikpCiAgICAgICAg ICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShf X2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlm IChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwog ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9v bAogICAgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGly ZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w KQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAg ICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7 CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFs c2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAg ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAg ICBpZiAoX19jb21wKCpfX2ksICpfX2lpKSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxlICghX19jb21wKCpfX2ksICotLV9faikpCiAg ICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2 ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAg ICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xh c3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBib29sCiAgICBwcmV2X3Bl cm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIg X19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19m aXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0gX19sYXN0KQogICAgICAgIHJldHVy biBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7Oykg ewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgICAgIC0tX19pOwog ICAgICAgIGlmICgqX19paSA8ICpfX2kpIHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf X2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAoISgqLS1fX2ogPCAqX19pKSkKICAgICAgICAg ICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgICAgICByZXZlcnNlKF9f aWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYg KF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAg ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29s CiAgICBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJl Y3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp CiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAg ICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsK ICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxz ZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7OykgewogICAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgICAgIC0tX19pOwogICAgICAg IGlmIChfX2NvbXAoKl9faWksICpfX2kpKSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUgKCFfX2NvbXAoKi0tX19qLCAqX19pKSkKICAg ICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgICAgICByZXZl cnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAg ICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFz dCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAg X0lucHV0SXRlcgogICAgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJ dGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0Zv cndhcmRJdGVyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICBmb3Ig KCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICAgICAgZm9yIChfRm9yd2Fy ZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xhc3QyOyArK19faXRlcikKICAg ICAgICAgIGlmICgqX19maXJzdDEgPT0gKl9faXRlcikKICAgICAgICAgICAgcmV0dXJuIF9fZmly c3QxOwogICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRl PgogICAgX0lucHV0SXRlcgogICAgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBf SW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0 MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNh dGUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKCgogICAgICBmb3Ig KCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICAgICAgZm9yIChfRm9yd2Fy ZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xhc3QyOyArK19faXRlcikKICAg ICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19pdGVyKSkKICAgICAgICAgICAgcmV0dXJu IF9fZmlyc3QxOwogICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KIyA0MjAxICIvaG9tZS9iYW5n ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+ CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEs IF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2Zp cnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJh dG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MiA9 PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBf Rm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgICAgICB3aGlsZSAoMSkgewogICAg ICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAgICAgICAgPSBzZWFyY2goX19m aXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgICAgICAgIGlmIChfX25ld19y ZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAgICAg ZWxzZSB7CiAgICAgICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICBf X2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAg IH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ dGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5 UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIx IF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9Gb3J3YXJk SXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgZm9y d2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICBf QmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFz dDIpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJk SXRlcjEgX19yZXN1bHQgPSBfX2xhc3QxOwogICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAgICBf Rm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgICAgICA9IHNlYXJjaChfX2ZpcnN0MSwg X19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsIF9fY29tcCk7CiAgICAgICAgICBpZiAoX19uZXdf cmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICAg IGVsc2UgewogICAgICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAg X19maXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg ICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl Y3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyPgogICAgX0JpZGlyZWN0 aW9uYWxJdGVyMQogICAgX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBf QmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAg ICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn KQogICAgewoKICAgICAKICAgICAKCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlk aXJlY3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRv cjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogICAgICBfUmV2SXRlcjEgX19ybGFz dDEoX19maXJzdDEpOwogICAgICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOwogICAgICBf UmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBf X3JsYXN0Mik7CgogICAgICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAgICAgIHJldHVy biBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVz dWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKICAgICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFu Y2UoX19maXJzdDIsIF9fbGFzdDIpKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0K ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUg X0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRl PgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMQogICAgX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0 ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0 MiwKICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9u YWxfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkK ICAgIHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGly ZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8 X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAgX1Jldkl0ZXIxIF9fcmxhc3Qx KF9fZmlyc3QxKTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICAgICAgX1Jl dkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19y bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKCiAgICAg IGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAg IGVsc2UgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQu YmFzZSgpOwogICAgICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5jZShfX2ZpcnN0MiwgX19s YXN0MikpOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQogICAgfQoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBp bmxpbmUgX0ZvcndhcmRJdGVyMQogICAgZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwg X0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0 MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAg ICAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3Qy LAogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwK ICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MikpOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUg X0ZvcndhcmRJdGVyMQogICAgZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0Zvcndh cmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zv cndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXAp CiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICByZXR1cm4gX19maW5kX2VuZChfX2Zp cnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg IF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgICAgICBf X2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwKICAgICAgICAgICAgICAgICAgICAgICAgX19j b21wKTsKICAgIH0KCn0KIyA3MCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1 ZGUvYysrLzMuMy9hbGdvcml0aG0iIDIgMwojIDU3ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMu My1wcmUvaW5jbHVkZS9jKysvMy4zL3N0cmluZyIgMiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmlu L2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDEgMwoj IDQ1ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMv YmFzaWNfc3RyaW5nLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCB0eXBl bmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1NfbWF4 X3NpemUgPSAoKChucG9zIC0gc2l6ZW9mKF9SZXApKS9zaXplb2YoX0NoYXJUKSkgLSAxKSAvIDQ7 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgY29uc3QgX0NoYXJUCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjoKICAgIF9SZXA6Ol9TX3Rlcm1pbmFsID0gX0NoYXJUKCk7CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg Y29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6 ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpucG9zOwoK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpf U19lbXB0eV9yZXBfc3RvcmFnZVsKICAgIChzaXplb2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSAr IHNpemVvZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOwoKCgoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyPgogICAgICBfQ2hhclQqCiAgICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfU19jb25zdHJ1Y3QoX0luSXRl ciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAg ICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKICAgICAgICBpZiAoX19iZWcgPT0gX19l bmQgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9N X3JlZmNvcHkoKTsKCiAgICAgICAgX0NoYXJUIF9fYnVmWzEwMF07CiAgICAgICAgc2l6ZV90eXBl IF9faSA9IDA7CiAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9faSA8IHNpemVvZihf X2J1ZikgLyBzaXplb2YoX0NoYXJUKSkKICAgICAgICAgIHsKICAgICAgICAgICAgX19idWZbX19p KytdID0gKl9fYmVnOwogICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgfQogICAgICAgIF9S ZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2ksIF9fYSk7CiAgICAgICAgdHJhaXRzX3R5cGU6 OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9fYnVmLCBfX2kpOwogICAgICAgIF9fci0+X01fbGVu Z3RoID0gX19pOwogICAgICAgIHRyeQogICAgICAgICAgewoKCgogICAgICAgICAgICBmb3IgKDs7 KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19wID0gX19yLT5fTV9y ZWZkYXRhKCkgKyBfX3ItPl9NX2xlbmd0aDsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19sYXN0 ID0gX19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2NhcGFjaXR5OwogICAgICAgICAgICAgICAg Zm9yICg7OykKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmIChfX2Jl ZyA9PSBfX2VuZCkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg ICAgX19yLT5fTV9sZW5ndGggPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAg ICAgICAgICAgICAgKl9fcCA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgICAgaWYgKF9fcCA9PSBfX2xhc3QpCiAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAqX19wKysgPSAqX19iZWc7CiAgICAgICAgICAg ICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHNp emVfdHlwZSBfX2xlbiA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAg X1JlcCogX19hbm90aGVyID0gX1JlcDo6X1NfY3JlYXRlKF9fbGVuICsgMSwgX19hKTsKICAgICAg ICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fYW5vdGhlci0+X01fcmVmZGF0YSgpLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yLT5fTV9yZWZkYXRhKCksIF9fbGVuKTsK ICAgICAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICAgICAgX19y ID0gX19hbm90aGVyOwogICAgICAgICAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2xlbjsKICAg ICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgewog ICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgdGhyb3c7CiAgICAg ICAgICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8Y2xh c3MgX0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIg X19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVy YXRvcl90YWcpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19kbmV3ID0gc3RhdGljX2Nhc3Q8 c2l6ZV90eXBlPihkaXN0YW5jZShfX2JlZywgX19lbmQpKTsKCiAgICAgICAgaWYgKF9fYmVnID09 IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAo KS5fTV9yZWZjb3B5KCk7CgoKICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX2JlZyA9PSBf SW5JdGVyKCksIDApKQogICAgICAgICAgX190aHJvd19sb2dpY19lcnJvcigiYXR0ZW1wdCB0byBj cmVhdGUgc3RyaW5nIHdpdGggbnVsbCBwb2ludGVyIik7CgoKICAgICAgICBfUmVwKiBfX3IgPSBf UmVwOjpfU19jcmVhdGUoX19kbmV3LCBfX2EpOwogICAgICAgIHRyeQogICAgICAgICAgeyBfU19j b3B5X2NoYXJzKF9fci0+X01fcmVmZGF0YSgpLCBfX2JlZywgX19lbmQpOyB9CiAgICAgICAgY2F0 Y2goLi4uKQogICAgICAgICAgewogICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAg ICAgICAgICAgdGhyb3c7CiAgICAgICAgICB9CiAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2Ru ZXc7CgogICAgICAgIF9fci0+X01fcmVmZGF0YSgpW19fZG5ld10gPSBfUmVwOjpfU190ZXJtaW5h bDsKICAgICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBf Q2hhclQqCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9T X2NvbnN0cnVjdChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkK ICAgIHsKICAgICAgaWYgKF9fbiA9PSAwICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICByZXR1 cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgIF9SZXAqIF9fciA9IF9SZXA6 Ol9TX2NyZWF0ZShfX24sIF9fYSk7CiAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIGlmIChf X24pCiAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX19yLT5fTV9yZWZkYXRhKCksIF9f biwgX19jKTsKICAgICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBf X3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgX19y LT5fTV9sZW5ndGggPSBfX247CiAgICAgIF9fci0+X01fcmVmZGF0YSgpW19fbl0gPSBfUmVwOjpf U190ZXJtaW5hbDsKICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3Ry aW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICA6IF9NX2RhdGFwbHVzKF9fc3RyLl9N X3JlcCgpLT5fTV9ncmFiKF9BbGxvYygpLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpLAogICAgICAg ICAgICAgICAgIF9fc3RyLmdldF9hbGxvY2F0b3IoKSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0 IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlKCks IF9DaGFyVCgpLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJp bmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICA6IF9NX2RhdGFw bHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfQWxsb2MoKSksIF9BbGxv YygpKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90 eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYg X19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3Mp LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19u KSwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf dHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1 Y3QoX19zLCBfX3MgKyBfX24sIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9D aGFyVCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3Ry dWN0KF9fcywgX19zID8gX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpIDoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fcyArIG5wb3MsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNf c3RyaW5nKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAg OiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19uLCBfX2MsIF9fYSksIF9fYSkKICAgIHsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyIF9f YmVnLCBfSW5wdXRJdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBs dXMoX1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OmFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9f c3RyKQogICAgewogICAgICBpZiAoX01fcmVwKCkgIT0gX19zdHIuX01fcmVwKCkpCiAgICAgICAg ewoKICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IHRoaXMtPmdldF9hbGxvY2F0b3IoKTsK ICAgICAgICAgIF9DaGFyVCogX190bXAgPSBfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfX2EsIF9f c3RyLmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2Ep OwogICAgICAgICAgX01fZGF0YShfX3RtcCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6X1JlcDo6CiAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYgX19hKSB0aHJvdyAo KQogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gc2l6ZW9mKF9SZXApICsgKF9NX2NhcGFj aXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKTsKICAgICAgX1Jhd19ieXRlc19hbGxvYyhfX2EpLmRl YWxsb2NhdGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcyksIF9fc2l6ZSk7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 X01fbGVha19oYXJkKCkKICAgIHsKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkK ICAgICAgICBfTV9tdXRhdGUoMCwgMCwgMCk7CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2Vk KCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6CiAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5 cGUgX19sZW4xLCBzaXplX3R5cGUgX19sZW4yKQogICAgewogICAgICBzaXplX3R5cGUgX19vbGRf c2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3X3NpemUgPSBf X29sZF9zaXplICsgX19sZW4yIC0gX19sZW4xOwogICAgICBjb25zdCBfQ2hhclQqIF9fc3JjID0g X01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjE7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2hvd19t dWNoID0gX19vbGRfc2l6ZSAtIF9fcG9zIC0gX19sZW4xOwoKICAgICAgaWYgKF9NX3JlcCgpLT5f TV9pc19zaGFyZWQoKSB8fCBfX25ld19zaXplID4gY2FwYWNpdHkoKSkKICAgICAgICB7CgogICAg ICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOwoKCiAgICAgICAgICBj b25zdCBzaXplX3R5cGUgX19wYWdlc2l6ZSA9IDQwOTY7CiAgICAgICAgICBjb25zdCBzaXplX3R5 cGUgX19tYWxsb2NfaGVhZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7CgogICAgICAgICAg Y29uc3Qgc2l6ZV90eXBlIF9fcGFnZV9jYXBhY2l0eSA9IChfX3BhZ2VzaXplIC0gX19tYWxsb2Nf aGVhZGVyX3NpemUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LSBzaXplb2YoX1JlcCkgLSBzaXplb2YoX0NoYXJUKSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyBzaXplb2YoX0NoYXJUKTsKICAgICAgICAgIF9SZXAqIF9f cjsKICAgICAgICAgIGlmIChfX25ld19zaXplID4gY2FwYWNpdHkoKSAmJiBfX25ld19zaXplID4g X19wYWdlX2NhcGFjaXR5KQoKICAgICAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbmV3 X3NpemUgPiAyKmNhcGFjaXR5KCkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19uZXdfc2l6ZSA6IDIqY2FwYWNpdHkoKSwgX19hKTsKICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbmV3X3NpemUsIF9fYSk7CiAgICAgICAgICB0cnkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfX3BvcykKICAgICAgICAgICAgICAgIHRy YWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfTV9kYXRhKCksIF9fcG9zKTsKICAg ICAgICAgICAgICBpZiAoX19ob3dfbXVjaCkKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpj b3B5KF9fci0+X01fcmVmZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX3NyYywgX19ob3dfbXVjaCk7CiAgICAgICAgICAgIH0KICAgICAg ICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fci0+X01fZGlzcG9z ZShnZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg ICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01fZGF0YShfX3It Pl9NX3JlZmRhdGEoKSk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19ob3dfbXVjaCAmJiBfX2xl bjEgIT0gX19sZW4yKQogICAgICAgIHsKCiAgICAgICAgICB0cmFpdHNfdHlwZTo6bW92ZShfTV9k YXRhKCkgKyBfX3BvcyArIF9fbGVuMiwgX19zcmMsIF9faG93X211Y2gpOwogICAgICAgIH0KICAg ICAgX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfTV9yZXAoKS0+X01fbGVuZ3Ro ID0gX19uZXdfc2l6ZTsKICAgICAgX01fZGF0YSgpW19fbmV3X3NpemVdID0gX1JlcDo6X1NfdGVy bWluYWw7CgogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz46OnJlc2VydmUoc2l6ZV90eXBlIF9fcmVzKQogICAgewogICAgICBpZiAo X19yZXMgPiB0aGlzLT5jYXBhY2l0eSgpIHx8IF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkKICAg ICAgICB7CiAgICAgICAgICBpZiAoX19yZXMgPiB0aGlzLT5tYXhfc2l6ZSgpKQogICAgICAgICAg ICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNlcnZlIik7CgogICAgICAg ICAgaWYgKF9fcmVzIDwgdGhpcy0+c2l6ZSgpKQogICAgICAgICAgICBfX3JlcyA9IHRoaXMtPnNp emUoKTsKICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKICAg ICAgICAgIF9DaGFyVCogX190bXAgPSBfTV9yZXAoKS0+X01fY2xvbmUoX19hLCBfX3JlcyAtIHRo aXMtPnNpemUoKSk7CiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAg ICAgX01fZGF0YShfX3RtcCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c3dhcChiYXNpY19zdHJpbmcmIF9fcykK ICAgIHsKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICBfTV9yZXAo KS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIGlmIChfX3MuX01fcmVwKCktPl9NX2lzX2xlYWtl ZCgpKQogICAgICAgIF9fcy5fTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIGlmICh0 aGlzLT5nZXRfYWxsb2NhdG9yKCkgPT0gX19zLmdldF9hbGxvY2F0b3IoKSkKICAgICAgICB7CiAg ICAgICAgICBfQ2hhclQqIF9fdG1wID0gX01fZGF0YSgpOwogICAgICAgICAgX01fZGF0YShfX3Mu X01fZGF0YSgpKTsKICAgICAgICAgIF9fcy5fTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CgogICAg ICBlbHNlCiAgICAgICAgewogICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMShfTV9pYmVnaW4o KSwgX01faWVuZCgpLCBfX3MuZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgIGJhc2ljX3N0cmlu ZyBfX3RtcDIoX19zLl9NX2liZWdpbigpLCBfX3MuX01faWVuZCgpLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgKnRoaXMgPSBf X3RtcDI7CiAgICAgICAgICBfX3MgPSBfX3RtcDE7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXAqCiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9TX2Ny ZWF0ZShzaXplX3QgX19jYXBhY2l0eSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jKQogICAgewogICAg ICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdf dHlwZTsKCgogICAgICBpZiAoX19jYXBhY2l0eSA+IF9TX21heF9zaXplKQoKCgogICAgICAgIF9f dGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6Ol9TX2NyZWF0ZSIpOwoKCgoKICAgICAg c2l6ZV90IF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKSArIHNpemVv ZihfUmVwKTsKIyA0MjEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr Ky8zLjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCiAgICAgIGNvbnN0IHNpemVfdCBfX3BhZ2Vz aXplID0gNDA5NjsKICAgICAgY29uc3Qgc2l6ZV90IF9fc3VicGFnZXNpemUgPSAxMjg7CiAgICAg IGNvbnN0IHNpemVfdCBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsK ICAgICAgaWYgKChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgPiBfX3BhZ2VzaXplKQog ICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2V4dHJhID0KICAgICAgICAgICAgKF9fcGFnZXNp emUgLSAoKF9fc2l6ZSArIF9fbWFsbG9jX2hlYWRlcl9zaXplKSAlIF9fcGFnZXNpemUpKQogICAg ICAgICAgICAlIF9fcGFnZXNpemU7CiAgICAgICAgICBfX2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBz aXplb2YoX0NoYXJUKTsKICAgICAgICAgIF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXpl b2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fc2l6 ZSA+IF9fc3VicGFnZXNpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fZXh0cmEgPQog ICAgICAgICAgICAoX19zdWJwYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3Np emUpICUgX19zdWJwYWdlc2l6ZSkpCiAgICAgICAgICAgICUgX19zdWJwYWdlc2l6ZTsKICAgICAg ICAgIF9fY2FwYWNpdHkgKz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX19z aXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwog ICAgICAgIH0KCgoKICAgICAgdm9pZCogX19wbGFjZSA9IF9SYXdfYnl0ZXNfYWxsb2MoX19hbGxv YykuYWxsb2NhdGUoX19zaXplKTsKICAgICAgX1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVw OwogICAgICBfX3AtPl9NX2NhcGFjaXR5ID0gX19jYXBhY2l0eTsKICAgICAgX19wLT5fTV9zZXRf c2hhcmFibGUoKTsKICAgICAgX19wLT5fTV9sZW5ndGggPSAwOwogICAgICByZXR1cm4gX19wOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46Ol9SZXA6OgogICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXpl X3R5cGUgX19yZXMpCiAgICB7CgogICAgICBjb25zdCBzaXplX3R5cGUgX19yZXF1ZXN0ZWRfY2Fw ID0gX01fbGVuZ3RoICsgX19yZXM7CgogICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdlc2l6ZSA9 IDQwOTY7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBz aXplb2YgKHZvaWQqKTsKCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VfY2FwYWNpdHkgPQog ICAgICAgIChfX3BhZ2VzaXplIC0gX19tYWxsb2NfaGVhZGVyX3NpemUgLSBzaXplb2YoX1JlcCkg LSBzaXplb2YoX0NoYXJUKSkKICAgICAgICAvIHNpemVvZihfQ2hhclQpOwogICAgICBfUmVwKiBf X3I7CiAgICAgIGlmIChfX3JlcXVlc3RlZF9jYXAgPiBfTV9jYXBhY2l0eSAmJiBfX3JlcXVlc3Rl ZF9jYXAgPiBfX3BhZ2VfY2FwYWNpdHkpCgogICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShf X3JlcXVlc3RlZF9jYXAgPiAyKl9NX2NhcGFjaXR5ID8KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19yZXF1ZXN0ZWRfY2FwIDogMipfTV9jYXBhY2l0eSwgX19hbGxvYyk7CiAgICAgIGVs c2UKICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19yZXF1ZXN0ZWRfY2FwLCBfX2FsbG9j KTsKCiAgICAgIGlmIChfTV9sZW5ndGgpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg ICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX3JlZmRhdGEoKSwg X01fbGVuZ3RoKTsgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgX19yLT5fTV9kZXN0cm95KF9fYWxsb2MpOwogICAgICAgICAgICAgIHRocm93OwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgICBfX3ItPl9NX2xlbmd0aCA9IF9NX2xlbmd0aDsKICAg ICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2l6ZShzaXplX3R5cGUgX19u LCBfQ2hhclQgX19jKQogICAgewogICAgICBpZiAoX19uID4gbWF4X3NpemUoKSkKICAgICAgICBf X3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNpemUiKTsKICAgICAgc2l6ZV90 eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSA8IF9fbikKICAgICAg ICB0aGlzLT5hcHBlbmQoX19uIC0gX19zaXplLCBfX2MpOwogICAgICBlbHNlIGlmIChfX24gPCBf X3NpemUpCiAgICAgICAgdGhpcy0+ZXJhc2UoX19uKTsKCiAgICB9CgoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVt cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6CiAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0 SXRlciBfX2sxLAogICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19rMiwgaW5wdXRfaXRlcmF0 b3JfdGFnKQogICAgICB7CgogICAgICAgIGJhc2ljX3N0cmluZyBfX3MoX19rMSwgX19rMik7CiAg ICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfX2kxLCBfX2kyLCBfX3MuX01faWJlZ2luKCks IF9fcy5fTV9pZW5kKCkpOwogICAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUg X0ZvcndhcmRJdGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01f cmVwbGFjZV9zYWZlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9Gb3J3YXJkSXRlciBf X2sxLAogICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fazIpCiAgICAgIHsKICAg ICAgICBzaXplX3R5cGUgX19kbmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihkaXN0YW5jZShf X2sxLCBfX2syKSk7CiAgICAgICAgc2l6ZV90eXBlIF9fZG9sZCA9IF9faTIgLSBfX2kxOwogICAg ICAgIHNpemVfdHlwZSBfX2RtYXggPSB0aGlzLT5tYXhfc2l6ZSgpOwoKICAgICAgICBpZiAoX19k bWF4IDw9IF9fZG5ldykKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJp bmc6Ol9NX3JlcGxhY2UiKTsKICAgICAgICBzaXplX3R5cGUgX19vZmYgPSBfX2kxIC0gX01faWJl Z2luKCk7CiAgICAgICAgX01fbXV0YXRlKF9fb2ZmLCBfX2RvbGQsIF9fZG5ldyk7CgoKICAgICAg ICBpZiAoX19kbmV3KQogICAgICAgICAgX1NfY29weV9jaGFycyhfTV9kYXRhKCkgKyBfX29mZiwg X19rMSwgX19rMik7CgogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6 ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVf dHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKQogICAgewogICAgICBjb25zdCBzaXplX3R5cGUg X19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MyID4gX19zdHJzaXplKQog ICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAg ICAgY29uc3QgYm9vbCBfX3Rlc3RuMiA9IF9fbjIgPCBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAg IGNvbnN0IHNpemVfdHlwZSBfX2ZvbGRuMiA9IF9fdGVzdG4yID8gX19uMiA6IF9fc3Ryc2l6ZSAt IF9fcG9zMjsKICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MxLCBfX24xLAogICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9kYXRhKCkgKyBfX3BvczIsIF9fZm9sZG4yKTsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Jgog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoY29u c3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIHsKCgoKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9 IF9fc3RyLnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zaXplICsgdGhpcy0+c2l6 ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJl c2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01f aWVuZCgpLCBfX3N0ci5fTV9pYmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X3N0ci5fTV9pZW5kKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3Ms IHNpemVfdHlwZSBfX24pCiAgICB7CgoKCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3N0 ci5zaXplKCkgLSBfX3BvcywgX19uKSArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4g dGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0 dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01fY2hlY2so X19wb3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3Ms IF9fbikpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFw cGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgIHsKICAgICAgc2l6ZV90 eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5j YXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01f cmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKHNpemVfdHlw ZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRo aXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0 aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQo KSwgX01faWVuZCgpLCBfX24sIF9fYyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMs CiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5n X3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBf VHJhaXRzOjpsZW5ndGgoX19saHMpOwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyOwogICAgICBf X3N0ci5yZXNlcnZlKF9fbGVuICsgX19yaHMuc2l6ZSgpKTsKICAgICAgX19zdHIuYXBwZW5kKF9f bGhzLCBfX2xocyArIF9fbGVuKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0 dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAg IF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX19yaHMuc2l6 ZSgpOwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgMSk7CiAgICAgIF9fc3RyLmFwcGVuZChf X3NpemVfdHlwZSgxKSwgX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICBy ZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog ICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uMiwg X0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbjEgPSBfX2kyIC0gX19pMTsKICAg ICAgc2l6ZV90eXBlIF9fb2ZmMSA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAgICAgaWYgKG1heF9z aXplKCkgLSAodGhpcy0+c2l6ZSgpIC0gX19uMSkgPD0gX19uMikKICAgICAgICBfX3Rocm93X2xl bmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgIF9NX211dGF0ZSAoX19v ZmYxLCBfX24xLCBfX24yKTsKCiAgICAgIGlmIChfX24yKQogICAgICAgIHRyYWl0c190eXBlOjph c3NpZ24oX01fZGF0YSgpICsgX19vZmYxLCBfX24yLCBfX2MpOwogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjoKICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3Bv cykgY29uc3QKICAgIHsKICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgIF9f dGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvcHkiKTsKCiAgICAgIGlmIChfX24g PiB0aGlzLT5zaXplKCkgLSBfX3BvcykKICAgICAgICBfX24gPSB0aGlzLT5zaXplKCkgLSBfX3Bv czsKCiAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01fZGF0YSgpICsgX19wb3MsIF9fbik7 CgogICAgICByZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBf X3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAg Y29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgIGZvciAoOyBfX3hwb3MgKyBf X24gPD0gX19zaXplOyArK19feHBvcykKICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUo X19kYXRhICsgX194cG9zLCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgIHJldHVybiBfX3hwb3M7 CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBf X3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsK ICAgICAgc2l6ZV90eXBlIF9fcmV0ID0gbnBvczsKICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQog ICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAg ICAgICAgc2l6ZV90eXBlIF9fbiA9IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgICAgY29uc3QgX0No YXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX2RhdGEgKyBfX3BvcywgX19uLCBfX2MpOwog ICAgICAgICAgaWYgKF9fcCkKICAgICAgICAgICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7CiAgICAg ICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZmluZChjb25zdCBfQ2hhclQqIF9f cywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXpl X3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19uIDw9IF9fc2l6ZSkKICAg ICAgICB7CiAgICAgICAgICBfX3BvcyA9IHN0ZDo6bWluKF9fc2l6ZSAtIF9fbiwgX19wb3MpOwog ICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgICAgICBkbwog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0 YSArIF9fcG9zLCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiBfX3BvczsK ICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fcG9zLS0gPiAwKTsKICAgICAgICB9CiAg ICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19w b3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAg ICAgIGlmIChfX3NpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9feHBvcyA9IF9fc2l6 ZSAtIDE7CiAgICAgICAgICBpZiAoX194cG9zID4gX19wb3MpCiAgICAgICAgICAgIF9feHBvcyA9 IF9fcG9zOwoKICAgICAgICAgIGZvciAoKytfX3hwb3M7IF9feHBvcy0tID4gMDsgKQogICAgICAg ICAgICBpZiAodHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAg ICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog ICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXpl X3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBmb3IgKDsgX19uICYmIF9fcG9zIDwgdGhpcy0+ c2l6ZSgpOyArK19fcG9zKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0g dHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3Bvc10pOwogICAgICAgICAg aWYgKF9fcCkKICAgICAgICAgICAgcmV0dXJuIF9fcG9zOwogICAgICAgIH0KICAgICAgcmV0dXJu IG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl IF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXpl ID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAgICAgICB7CiAgICAg ICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAg ICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpm aW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4g X19zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0gIT0gMCk7CiAg ICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoY29u c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAg IHsKICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBmb3IgKDsgX194cG9zIDwgdGhp cy0+c2l6ZSgpOyArK19feHBvcykKICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywg X19uLCBfTV9kYXRhKClbX194cG9zXSkpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICBy ZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90 eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAg IGZvciAoOyBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJh aXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9f eHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3Qg X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsK ICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkK ICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19z aXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYg KCF0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAg ICAgICAgICAgcmV0dXJuIF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9f c2l6ZS0tKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5 cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rf bm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6 ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7 CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19w b3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNf dHlwZTo6ZXEoX01fZGF0YSgpW19fc2l6ZV0sIF9fYykpCiAgICAgICAgICAgICAgICByZXR1cm4g X19zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAg IH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9z LCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgewog ICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19v c2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9f dGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVf dHlwZSBfX3JzaXplPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbik7CiAgICAgIHNpemVfdHlwZSBf X2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBl Ojpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAg aWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBf X3I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEs IGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIs IHNpemVfdHlwZSBfX24yKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhp cy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAg aWYgKF9fcG9zMSA+IF9fc2l6ZSB8fCBfX3BvczIgPiBfX29zaXplKQogICAgICAgIF9fdGhyb3df b3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBf X3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zMSwgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX3Jv c2l6ZSA9IG1pbihfX29zaXplIC0gX19wb3MyLCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fbGVu ID0gbWluKF9fcnNpemUsIF9fcm9zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpj b21wYXJlKF9NX2RhdGEoKSArIF9fcG9zMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fc3RyLmRhdGEoKSArIF9fcG9zMiwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAg ICAgICBfX3IgPSBfX3JzaXplIC0gX19yb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 CiAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAogICAgewogICAgICBzaXplX3R5 cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNv bXBhcmUoX01fZGF0YSgpLCBfX3MsIF9fc2l6ZSk7CiAgICAgIGlmICghX19yKQogICAgICAgIF9f ciA9IF9fc2l6ZSAtIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgcmV0dXJuIF9fcjsK ICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmcgPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNv bnN0IF9DaGFyVCogX19zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhp cy0+c2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRf b2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fb3Np emUgPSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0g bWluKF9fc2l6ZSAtIF9fcG9zLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9f cnNpemUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01f ZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3Ig PSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp bnQKICAgIGJhc2ljX3N0cmluZyA8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBh cmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAg ICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19z aXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgX190 aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90 eXBlIF9fb3NpemUgPSBtaW4odHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpLCBfX24yKTsKICAgICAg c2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbjEpOwogICAgICBzaXpl X3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFp dHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7CiAgICAgIGlm ICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19y OwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBf QWxsb2M+CiAgICB2b2lkCiAgICBfU19zdHJpbmdfY29weShjb25zdCBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwKICAgICAgICAgICAgICAgICAgIF9DaGFyVCog X19idWYsIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIF9fYnVmc2l6KQogICAgewogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgc2l6ZV90 eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fYnl0ZXMgPSBt aW4oX19zdHJzaXplLCBfX2J1ZnNpeiAtIDEpOwogICAgICBfVHJhaXRzOjpjb3B5KF9fYnVmLCBf X3N0ci5kYXRhKCksIF9fYnl0ZXMpOwogICAgICBfX2J1ZltfX2J5dGVzXSA9IF9DaGFyVCgpOwog ICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5nPGNoYXI+OwogIGV4 dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYKICAgIG9wZXJhdG9yPj4oYmFz aWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNf b3N0cmVhbTxjaGFyPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyPiYsIGNvbnN0 IHN0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYKICAg IGdldGxpbmUoYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYsIGNoYXIpOwogIGV4dGVybiB0 ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVh bTxjaGFyPiYsIHN0cmluZyYpOwoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5n PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYK ICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYsIHdzdHJpbmcmKTsKICBleHRl cm4gdGVtcGxhdGUKICAgIGJhc2ljX29zdHJlYW08d2NoYXJfdD4mCiAgICBvcGVyYXRvcjw8KGJh c2ljX29zdHJlYW08d2NoYXJfdD4mLCBjb25zdCB3c3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRl CiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPHdj aGFyX3Q+Jiwgd3N0cmluZyYsIHdjaGFyX3QpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNf aXN0cmVhbTx3Y2hhcl90PiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYsIHdz dHJpbmcmKTsKfQojIDU4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j KysvMy4zL3N0cmluZyIgMiAzCiMgNTAgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9p bmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgv YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwoj IDM0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMv ZnVuY3RleGNlcHQuaCIgMwojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNs dWRlL2MrKy8zLjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi9ob21lL2JhbmdlcnRo L2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMK Cm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoK CiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFk X2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lk CiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv d19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxp ZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJy b3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0 IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciog X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg dm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog IF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190 aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNTEgIi9ob21lL2JhbmdlcnRo L2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzCgoK bmFtZXNwYWNlIHN0ZAp7CgogIGNsYXNzIGxvY2FsZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3NwYWNlKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3ByaW50 KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg IGlubGluZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3VwcGVyKF9DaGFyVCwg Y29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBi b29sCiAgICBpc2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FscGhhKF9DaGFyVCwgY29uc3QgbG9j YWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp c2RpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIGlubGluZSBib29sCiAgICBpc3B1bmN0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3hkaWdpdChf Q2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp bmxpbmUgYm9vbAogICAgaXNhbG51bShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChfQ2hhclQsIGNv bnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0No YXJUCiAgICB0b3VwcGVyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvbG93ZXIoX0NoYXJULCBjb25zdCBs b2NhbGUmKTsKCgoKICBjbGFzcyBjdHlwZV9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIGNsYXNzIGN0eXBlOwogIHRlbXBsYXRlPD4gY2xhc3MgY3R5cGU8Y2hhcj47CgogIHRl bXBsYXRlPD4gY2xhc3MgY3R5cGU8d2NoYXJfdD47CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIGNsYXNzIGN0eXBlX2J5bmFtZTsKCgogIGNsYXNzIGNvZGVjdnRfYmFzZTsKICBjbGFz cyBfX2VuY190cmFpdHM7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9F eHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dDsKICB0ZW1wbGF0ZTw+ IGNsYXNzIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PjsKCiAgdGVtcGxhdGU8PiBjbGFz cyBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD47CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNz IGNvZGVjdnRfYnluYW1lOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf SW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG51bV9nZXQ7 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1i dWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBudW1fcHV0OwogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4gY2xhc3MgbnVtcHVuY3Q7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBj bGFzcyBudW1wdW5jdF9ieW5hbWU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBj bGFzcyBjb2xsYXRlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MKICAgIGNvbGxh dGVfYnluYW1lOwoKCiAgY2xhc3MgdGltZV9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBj bGFzcyB0aW1lX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0 ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9nZXRfYnlu YW1lOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3Ry ZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9wdXQ7CiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8 X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWU7CgoKICBjbGFzcyBtb25leV9iYXNl OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1i dWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBtb25leV9nZXQ7CiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0No YXJUPiA+CiAgICBjbGFzcyBtb25leV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBi b29sIF9JbnRsID0gZmFsc2U+CiAgICBjbGFzcyBtb25leXB1bmN0OwogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPgogICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5h bWU7CgoKICBjbGFzcyBtZXNzYWdlc19iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K ICAgIGNsYXNzIG1lc3NhZ2VzOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNz IG1lc3NhZ2VzX2J5bmFtZTsKCgogIGNsYXNzIGxvY2FsZQogIHsKICBwdWJsaWM6CgogICAgdHlw ZWRlZiB1bnNpZ25lZCBpbnQgY2F0ZWdvcnk7CgoKICAgIGNsYXNzIGZhY2V0OwogICAgY2xhc3Mg aWQ7CiAgICBjbGFzcyBfSW1wbDsKCiAgICBmcmllbmQgY2xhc3MgZmFjZXQ7CiAgICBmcmllbmQg Y2xhc3MgX0ltcGw7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQg Y29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CgogICAgdGVtcGxh dGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29u c3QgbG9jYWxlJikgdGhyb3coKTsKCgoKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBub25lID0g MDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjdHlwZSA9IDFMIDw8IDA7CiAgICBzdGF0aWMg Y29uc3QgY2F0ZWdvcnkgbnVtZXJpYyA9IDFMIDw8IDE7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdv cnkgY29sbGF0ZSA9IDFMIDw8IDI7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgdGltZSA9IDFM IDw8IDM7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbW9uZXRhcnkgPSAxTCA8PCA0OwogICAg c3RhdGljIGNvbnN0IGNhdGVnb3J5IG1lc3NhZ2VzID0gMUwgPDwgNTsKICAgIHN0YXRpYyBjb25z dCBjYXRlZ29yeSBhbGwgPSAoY3R5cGUgfCBudW1lcmljIHwgY29sbGF0ZSB8CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lIHwgbW9uZXRhcnkgfCBtZXNzYWdl cyk7CgoKICAgIGxvY2FsZSgpIHRocm93KCk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19v dGhlcikgdGhyb3coKTsKCiAgICBleHBsaWNpdAogICAgbG9jYWxlKGNvbnN0IGNoYXIqIF9fcyk7 CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBjaGFyKiBfX3MsIGNhdGVn b3J5IF9fY2F0KTsKCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxvY2Fs ZSYgX19hZGQsIGNhdGVnb3J5IF9fY2F0KTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+ CiAgICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19mKTsKCiAgICB+ bG9jYWxlKCkgdGhyb3coKTsKCiAgICBjb25zdCBsb2NhbGUmCiAgICBvcGVyYXRvcj0oY29uc3Qg bG9jYWxlJiBfX290aGVyKSB0aHJvdygpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4K ICAgICAgbG9jYWxlCiAgICAgIGNvbWJpbmUoY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdDsK CgogICAgc3RyaW5nCiAgICBuYW1lKCkgY29uc3Q7CgogICAgYm9vbAogICAgb3BlcmF0b3I9PShj b25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRocm93ICgpOwoKICAgIGlubGluZSBib29sCiAg ICBvcGVyYXRvciE9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QgdGhyb3cgKCkKICAgIHsg cmV0dXJuICEodGhpcy0+b3BlcmF0b3I9PShfX290aGVyKSk7IH0KCiAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhciwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgICBib29s CiAgICAgIG9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxs b2M+JiBfX3MxLAogICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhciwgX1Ry YWl0cywgX0FsbG9jPiYgX19zMikgY29uc3Q7CgoKICAgIHN0YXRpYyBsb2NhbGUKICAgIGdsb2Jh bChjb25zdCBsb2NhbGUmKTsKCiAgICBzdGF0aWMgY29uc3QgbG9jYWxlJgogICAgY2xhc3NpYygp OwoKICBwcml2YXRlOgoKICAgIF9JbXBsKiBfTV9pbXBsOwoKCiAgICBzdGF0aWMgX0ltcGwqIF9T X2NsYXNzaWM7CgoKICAgIHN0YXRpYyBfSW1wbCogX1NfZ2xvYmFsOwoKCgoKCgogICAgc3RhdGlj IGNvbnN0IHNpemVfdCBfU19jYXRlZ29yaWVzX3NpemUgPSA2OwoKCgoKCgogICAgc3RhdGljIGNv bnN0IHNpemVfdCBfU19leHRyYV9jYXRlZ29yaWVzX3NpemUgPSA2OwoKCgoKCiAgICBzdGF0aWMg Y29uc3QgY2hhciogX1NfY2F0ZWdvcmllc1tfU19jYXRlZ29yaWVzX3NpemUKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICArIF9TX2V4dHJhX2NhdGVnb3JpZXNfc2l6ZV07Cgog ICAgZXhwbGljaXQKICAgIGxvY2FsZShfSW1wbCopIHRocm93KCk7CgogICAgc3RhdGljIGlubGlu ZSB2b2lkCiAgICBfU19pbml0aWFsaXplKCkKICAgIHsKICAgICAgaWYgKCFfU19jbGFzc2ljKQog ICAgICAgIGNsYXNzaWMoKTsKICAgIH0KCiAgICBzdGF0aWMgY2F0ZWdvcnkKICAgIF9TX25vcm1h bGl6ZV9jYXRlZ29yeShjYXRlZ29yeSk7CgogICAgdm9pZAogICAgX01fY29hbGVzY2UoY29uc3Qg bG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxvY2FsZSYgX19hZGQsIGNhdGVnb3J5IF9fY2F0KTsKICB9 OwoKCgogIGNsYXNzIGxvY2FsZTo6X0ltcGwKICB7CiAgcHVibGljOgoKICAgIGZyaWVuZCBjbGFz cyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpmYWNldDsKCiAgICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNl dChjb25zdCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZy aWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOwoKICBwcml2 YXRlOgoKICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwogICAgZmFjZXQqKiBfTV9mYWNl dHM7CiAgICBzaXplX3QgX01fZmFjZXRzX3NpemU7CgogICAgY2hhciogX01fbmFtZXNbX1NfY2F0 ZWdvcmllc19zaXplCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICArIF9TX2V4dHJhX2NhdGVnb3JpZXNfc2l6ZV07CiAgICBzdGF0aWMgY29uc3QgbG9jYWxl OjppZCogY29uc3QgX1NfaWRfY3R5cGVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBj b25zdCBfU19pZF9udW1lcmljW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3Qg X1NfaWRfY29sbGF0ZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lk X3RpbWVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9tb25ldGFy eVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21lc3NhZ2VzW107 CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QqIGNvbnN0IF9TX2ZhY2V0X2NhdGVn b3JpZXNbXTsKCiAgICBpbmxpbmUgdm9pZAogICAgX01fYWRkX3JlZmVyZW5jZSgpIHRocm93KCkK ICAgIHsgX19hdG9taWNfYWRkKCZfTV9yZWZlcmVuY2VzLCAxKTsgfQoKICAgIGlubGluZSB2b2lk CiAgICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgdGhyb3coKQogICAgewogICAgICBpZiAoX19leGNo YW5nZV9hbmRfYWRkKCZfTV9yZWZlcmVuY2VzLCAtMSkgPT0gMSkKICAgICAgICB7CiAgICAgICAg ICB0cnkKICAgICAgICAgICAgeyBkZWxldGUgdGhpczsgfQogICAgICAgICAgY2F0Y2goLi4uKQog ICAgICAgICAgICB7IH0KICAgICAgICB9CiAgICB9CgogICAgX0ltcGwoY29uc3QgX0ltcGwmLCBz aXplX3QpOwogICAgX0ltcGwoY29uc3QgY2hhciosIHNpemVfdCk7CiAgICBfSW1wbChmYWNldCoq LCBzaXplX3QsIGJvb2wpOwoKICAgfl9JbXBsKCkgdGhyb3coKTsKCiAgICBfSW1wbChjb25zdCBf SW1wbCYpOwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBfSW1wbCYpOwoKICAgIGlubGlu ZSBib29sCiAgICBfTV9jaGVja19zYW1lX25hbWUoKQogICAgewogICAgICBib29sIF9fcmV0ID0g dHJ1ZTsKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsKICAgICAgICAgICBfX3JldCAmJiBfX2kg PCBfU19jYXRlZ29yaWVzX3NpemUgKyBfU19leHRyYV9jYXRlZ29yaWVzX3NpemUgLSAxOwogICAg ICAgICAgICsrX19pKQogICAgICAgIF9fcmV0ICY9IChzdHJjbXAoX01fbmFtZXNbX19pXSwgX01f bmFtZXNbX19pICsgMV0pID09IDApOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogICAgdm9p ZAogICAgX01fcmVwbGFjZV9jYXRlZ29yaWVzKGNvbnN0IF9JbXBsKiwgY2F0ZWdvcnkpOwoKICAg IHZvaWQKICAgIF9NX3JlcGxhY2VfY2F0ZWdvcnkoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6 OmlkKiBjb25zdCopOwoKICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfZmFjZXQoY29uc3QgX0ltcGwq LCBjb25zdCBsb2NhbGU6OmlkKik7CgogICAgdm9pZAogICAgX01faW5zdGFsbF9mYWNldChjb25z dCBsb2NhbGU6OmlkKiwgZmFjZXQqKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAg ICAgIGlubGluZSB2b2lkCiAgICAgIF9NX2luaXRfZmFjZXQoX0ZhY2V0KiBfX2ZhY2V0KQogICAg ICB7IF9NX2luc3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZmFjZXQpOyB9CiAgfTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgbG9jYWxlOjpsb2NhbGUoY29uc3QgbG9jYWxlJiBf X290aGVyLCBfRmFjZXQqIF9fZikKICAgIHsKICAgICAgX01faW1wbCA9IG5ldyBfSW1wbCgqX19v dGhlci5fTV9pbXBsLCAxKTsKICAgICAgX01faW1wbC0+X01faW5zdGFsbF9mYWNldCgmX0ZhY2V0 OjppZCwgX19mKTsKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsKICAgICAgICAgICBfX2kgPCBf U19jYXRlZ29yaWVzX3NpemUgKyBfU19leHRyYV9jYXRlZ29yaWVzX3NpemU7ICsrX19pKQogICAg ICAgIHsKICAgICAgICAgIGRlbGV0ZSBbXSBfTV9pbXBsLT5fTV9uYW1lc1tfX2ldOwogICAgICAg ICAgY2hhciogX19uZXcgPSBuZXcgY2hhclsyXTsKICAgICAgICAgIHN0cmNweShfX25ldywgIioi KTsKICAgICAgICAgIF9NX2ltcGwtPl9NX25hbWVzW19faV0gPSBfX25ldzsKICAgICAgICB9CiAg ICB9CgoKICBjbGFzcyBsb2NhbGU6OmZhY2V0CiAgewogIHByaXZhdGU6CiAgICBmcmllbmQgY2xh c3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7CgogICAgX0F0b21pY193 b3JkIF9NX3JlZmVyZW5jZXM7CgogIHByb3RlY3RlZDoKCgogICAgc3RhdGljIF9fY19sb2NhbGUg X1NfY19sb2NhbGU7CgogICAgZXhwbGljaXQKICAgIGZhY2V0KHNpemVfdCBfX3JlZnMgPSAwKSB0 aHJvdygpOwoKICAgIHZpcnR1YWwKICAgIH5mYWNldCgpOwoKICAgIHN0YXRpYyB2b2lkCiAgICBf U19jcmVhdGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCiAg ICAgICAgICAgICAgICAgICAgICAgX19jX2xvY2FsZSBfX29sZCA9IDApOwoKICAgIHN0YXRpYyBf X2NfbG9jYWxlCiAgICBfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOwoKICAg IHN0YXRpYyB2b2lkCiAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYyk7 CgogIHByaXZhdGU6CiAgICB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAg ICB2b2lkCiAgICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAgICBmYWNldChjb25z dCBmYWNldCYpOwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBmYWNldCYpOwogIH07CgoK CiAgY2xhc3MgbG9jYWxlOjppZAogIHsKICBwcml2YXRlOgogICAgZnJpZW5kIGNsYXNzIGxvY2Fs ZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6Ol9JbXBsOwogICAgdGVtcGxhdGU8dHlwZW5hbWUg X0ZhY2V0PgogICAgICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3Qg bG9jYWxlJik7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29s CiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdyAoKTsKCgoKCiAgICBtdXRhYmxl IHNpemVfdCBfTV9pbmRleDsKCgogICAgc3RhdGljIF9BdG9taWNfd29yZCBfU19oaWdod2F0ZXI7 CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IGlkJik7CgogICAgaWQoY29uc3QgaWQmKTsK CiAgcHVibGljOgoKCiAgICBpZCgpOwoKICAgIGlubGluZSBzaXplX3QKICAgIF9NX2lkKCkgY29u c3QKICAgIHsKICAgICAgaWYgKCFfTV9pbmRleCkKICAgICAgICBfTV9pbmRleCA9IDEgKyBfX2V4 Y2hhbmdlX2FuZF9hZGQoJl9TX2hpZ2h3YXRlciwgMSk7CiAgICAgIHJldHVybiBfTV9pbmRleCAt IDE7CiAgICB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0Zh Y2V0JgogICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRmFjZXQ+CiAgICBib29sCiAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykg dGhyb3coKTsKfQojIDQ5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j KysvMy4zL2lvcyIgMiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1 ZGUvYysrLzMuMy9iaXRzL2lvc19iYXNlLmgiIDEgMwojIDQ0ICIvaG9tZS9iYW5nZXJ0aC9iaW4v Z2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvaW9zX2Jhc2UuaCIgMwoKCgpuYW1lc3Bh Y2Ugc3RkCnsKCgoKCiAgZW51bSBfSW9zX0ZtdGZsYWdzIHsgX01faW9zX2ZtdGZsYWdzX2VuZCA9 IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3ImKF9Jb3NfRm10 ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0 YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5l IF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcnwoX0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10Zmxh Z3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwg c3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJh dG9yXihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX0lv c19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikp OyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J8PShfSW9zX0ZtdGZsYWdzJiBf X2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBp bmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yJj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9z X0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9J b3NfRm10ZmxhZ3MKICBvcGVyYXRvcl49KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFn cyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZs YWdzCiAgb3BlcmF0b3J+KF9Jb3NfRm10ZmxhZ3MgX19hKQogIHsgcmV0dXJuIF9Jb3NfRm10Zmxh Z3MofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCgogIGVudW0gX0lvc19PcGVubW9kZSB7IF9N X2lvc19vcGVubW9kZV9lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19PcGVubW9kZQog IG9wZXJhdG9yJihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1 cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+ KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J8KF9Jb3NfT3Blbm1v ZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRp Y19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9J b3NfT3Blbm1vZGUKICBvcGVyYXRvcl4oX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUg X19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3Rh dGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9y fD0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2Eg PSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvciY9KF9Jb3Nf T3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hICYg X19iOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3JePShfSW9zX09wZW5tb2Rl JiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoK ICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfihfSW9zX09wZW5tb2RlIF9fYSkKICB7 IHJldHVybiBfSW9zX09wZW5tb2RlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgoKICBlbnVt IF9Jb3NfSW9zdGF0ZSB7IF9NX2lvc19pb3N0YXRlX2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGlu ZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciYoX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRl IF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3Rh dGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8 KF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0 YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAg aW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lv c3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkg XiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVy YXRvcnw9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9f YSA9IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3ImPShfSW9z X0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBf X2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXj0oX0lvc19Jb3N0YXRlJiBf X2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlu bGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcn4oX0lvc19Jb3N0YXRlIF9fYSkKICB7IHJldHVy biBfSW9zX0lvc3RhdGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCiAgZW51bSBfSW9zX1Nl ZWtkaXIgeyBfTV9pb3Nfc2Vla2Rpcl9lbmQgPSAxTCA8PCAxNiB9OwoKCiAgY2xhc3MgaW9zX2Jh c2UKICB7CiAgcHVibGljOgoKCiAgICBjbGFzcyBmYWlsdXJlIDogcHVibGljIGV4Y2VwdGlvbgog ICAgewogICAgcHVibGljOgoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGZhaWx1cmUoY29uc3Qgc3Ry aW5nJiBfX3N0cikgdGhyb3coKTsKCgoKICAgICAgdmlydHVhbAogICAgICB+ZmFpbHVyZSgpIHRo cm93KCk7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIHdoYXQoKSBjb25zdCB0aHJv dygpOwoKICAgIHByaXZhdGU6CiAgICAgIGVudW0geyBfTV9idWZzaXplID0gMjU2IH07CiAgICAg IGNoYXIgX01fbmFtZVtfTV9idWZzaXplXTsKCiAgICB9OwoKCiAgICB0eXBlZGVmIF9Jb3NfRm10 ZmxhZ3MgZm10ZmxhZ3M7CgogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGJvb2xhbHBoYSA9IGZt dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19ib29sYWxwaGEpOwogICAgc3RhdGljIGNvbnN0IGZtdGZs YWdzIGRlYyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19kZWMpOwogICAgc3RhdGljIGNvbnN0 IGZtdGZsYWdzIGZpeGVkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2ZpeGVkKTsKICAgIHN0 YXRpYyBjb25zdCBmbXRmbGFncyBoZXggPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfaGV4KTsK ICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBpbnRlcm5hbCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdz OjpfU19pbnRlcm5hbCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgbGVmdCA9IGZtdGZsYWdz KF9faW9zX2ZsYWdzOjpfU19sZWZ0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBvY3QgPSBm bXRmbGFncyhfX2lvc19mbGFnczo6X1Nfb2N0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBy aWdodCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19yaWdodCk7CiAgICBzdGF0aWMgY29uc3Qg Zm10ZmxhZ3Mgc2NpZW50aWZpYyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zY2llbnRpZmlj KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93YmFzZSA9IGZtdGZsYWdzKF9faW9zX2Zs YWdzOjpfU19zaG93YmFzZSk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd3BvaW50ID0g Zm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dwb2ludCk7CiAgICBzdGF0aWMgY29uc3QgZm10 ZmxhZ3Mgc2hvd3BvcyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93cG9zKTsKICAgIHN0 YXRpYyBjb25zdCBmbXRmbGFncyBza2lwd3MgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2tp cHdzKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1bml0YnVmID0gZm10ZmxhZ3MoX19pb3Nf ZmxhZ3M6Ol9TX3VuaXRidWYpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHVwcGVyY2FzZSA9 IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU191cHBlcmNhc2UpOwogICAgc3RhdGljIGNvbnN0IGZt dGZsYWdzIGFkanVzdGZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2FkanVzdGZpZWxk KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBiYXNlZmllbGQgPSBmbXRmbGFncyhfX2lvc19m bGFnczo6X1NfYmFzZWZpZWxkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmbG9hdGZpZWxk ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Zsb2F0ZmllbGQpOwoKCiAgICB0eXBlZGVmIF9J b3NfSW9zdGF0ZSBpb3N0YXRlOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgYmFkYml0ID0gaW9z dGF0ZShfX2lvc19mbGFnczo6X1NfYmFkYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGVv ZmJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2VvZmJpdCk7CiAgICBzdGF0aWMgY29uc3Qg aW9zdGF0ZSBmYWlsYml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1NfZmFpbGJpdCk7CiAgICBz dGF0aWMgY29uc3QgaW9zdGF0ZSBnb29kYml0ID0gaW9zdGF0ZSgwKTsKCgogICAgdHlwZWRlZiBf SW9zX09wZW5tb2RlIG9wZW5tb2RlOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGFwcCA9IG9w ZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19hcHApOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGF0 ZSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19hdGUpOwogICAgc3RhdGljIGNvbnN0IG9wZW5t b2RlIGJpbmFyeSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19iaW4pOwogICAgc3RhdGljIGNv bnN0IG9wZW5tb2RlIGluID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2luKTsKICAgIHN0YXRp YyBjb25zdCBvcGVubW9kZSBvdXQgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1Nfb3V0KTsKICAg IHN0YXRpYyBjb25zdCBvcGVubW9kZSB0cnVuYyA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU190 cnVuYyk7CgoKICAgIHR5cGVkZWYgX0lvc19TZWVrZGlyIHNlZWtkaXI7CiAgICBzdGF0aWMgY29u c3Qgc2Vla2RpciBiZWcgPSBzZWVrZGlyKDApOwogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgY3Vy ID0gc2Vla2RpcigxKTsKICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGVuZCA9IHNlZWtkaXIoMik7 CiMgMjMwICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Jp dHMvaW9zX2Jhc2UuaCIgMwogICAgZW51bSBldmVudAogICAgewogICAgICBlcmFzZV9ldmVudCwK ICAgICAgaW1idWVfZXZlbnQsCiAgICAgIGNvcHlmbXRfZXZlbnQKICAgIH07CgogICAgdHlwZWRl ZiB2b2lkICgqZXZlbnRfY2FsbGJhY2spIChldmVudCwgaW9zX2Jhc2UmLCBpbnQpOwoKICAgIHZv aWQKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKGV2ZW50X2NhbGxiYWNrIF9fZm4sIGludCBfX2luZGV4 KTsKCiAgcHJvdGVjdGVkOgoKICAgIHN0cmVhbXNpemUgX01fcHJlY2lzaW9uOwogICAgc3RyZWFt c2l6ZSBfTV93aWR0aDsKICAgIGZtdGZsYWdzIF9NX2ZsYWdzOwogICAgaW9zdGF0ZSBfTV9leGNl cHRpb247CiAgICBpb3N0YXRlIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsKCgoKICAgIHN0cnVjdCBfQ2Fs bGJhY2tfbGlzdAogICAgewoKICAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX25leHQ7CiAgICAgIGlv c19iYXNlOjpldmVudF9jYWxsYmFjayBfTV9mbjsKICAgICAgaW50IF9NX2luZGV4OwogICAgICBf QXRvbWljX3dvcmQgX01fcmVmY291bnQ7CgogICAgICBfQ2FsbGJhY2tfbGlzdChpb3NfYmFzZTo6 ZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9faW5kZXgsCiAgICAgICAgICAgICAgICAgICAgIF9D YWxsYmFja19saXN0KiBfX2NiKQogICAgICA6IF9NX25leHQoX19jYiksIF9NX2ZuKF9fZm4pLCBf TV9pbmRleChfX2luZGV4KSwgX01fcmVmY291bnQoMCkgeyB9CgogICAgICB2b2lkCiAgICAgIF9N X2FkZF9yZWZlcmVuY2UoKSB7IF9fYXRvbWljX2FkZCgmX01fcmVmY291bnQsIDEpOyB9CgoKICAg ICAgaW50CiAgICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB7IHJldHVybiBfX2V4Y2hhbmdlX2Fu ZF9hZGQoJl9NX3JlZmNvdW50LCAtMSk7IH0KICAgIH07CgogICAgIF9DYWxsYmFja19saXN0KiBf TV9jYWxsYmFja3M7CgogICAgdm9pZAogICAgX01fY2FsbF9jYWxsYmFja3MoZXZlbnQgX19ldikg dGhyb3coKTsKCiAgICB2b2lkCiAgICBfTV9kaXNwb3NlX2NhbGxiYWNrcyh2b2lkKTsKCgogICAg c3RydWN0IF9Xb3JkcwogICAgewogICAgICB2b2lkKiBfTV9wd29yZDsKICAgICAgbG9uZyBfTV9p d29yZDsKICAgICAgX1dvcmRzKCkgOiBfTV9wd29yZCgwKSwgX01faXdvcmQoMCkgeyB9CiAgICB9 OwoKCiAgICBfV29yZHMgX01fd29yZF96ZXJvOwoKCiAgICBzdGF0aWMgY29uc3QgaW50IF9TX2xv Y2FsX3dvcmRfc2l6ZSA9IDg7CiAgICBfV29yZHMgX01fbG9jYWxfd29yZFtfU19sb2NhbF93b3Jk X3NpemVdOwoKCiAgICBpbnQgX01fd29yZF9zaXplOwogICAgX1dvcmRzKiBfTV93b3JkOwoKICAg IF9Xb3JkcyYKICAgIF9NX2dyb3dfd29yZHMoaW50IF9faW5kZXgpOwoKCiAgICBsb2NhbGUgX01f aW9zX2xvY2FsZTsKCiAgICB2b2lkCiAgICBfTV9pbml0KCk7CgogIHB1YmxpYzoKCgoKCgogICAg Y2xhc3MgSW5pdAogICAgewogICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7CiAgICBwdWJsaWM6 CiAgICAgIEluaXQoKTsKICAgICAgfkluaXQoKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9T X2lvc19jcmVhdGUoYm9vbCBfX3N5bmMpOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfaW9z X2Rlc3Ryb3koKTsKCiAgICBwcml2YXRlOgogICAgICBzdGF0aWMgaW50IF9TX2lvc19iYXNlX2lu aXQ7CiAgICAgIHN0YXRpYyBib29sIF9TX3N5bmNlZF93aXRoX3N0ZGlvOwogICAgfTsKCgogICAg aW5saW5lIGZtdGZsYWdzCiAgICBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9NX2ZsYWdzOyB9Cgog ICAgaW5saW5lIGZtdGZsYWdzCiAgICBmbGFncyhmbXRmbGFncyBfX2ZtdGZsKQogICAgewogICAg ICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyA9IF9fZm10Zmw7CiAg ICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIHNldGYoZm10 ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAg ICAgX01fZmxhZ3MgfD0gX19mbXRmbDsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlu bGluZSBmbXRmbGFncwogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsLCBmbXRmbGFncyBfX21hc2sp CiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzICY9 IH5fX21hc2s7CiAgICAgIF9NX2ZsYWdzIHw9IChfX2ZtdGZsICYgX19tYXNrKTsKICAgICAgcmV0 dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSB2b2lkCiAgICB1bnNldGYoZm10ZmxhZ3MgX19t YXNrKSB7IF9NX2ZsYWdzICY9IH5fX21hc2s7IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAg cHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX01fcHJlY2lzaW9uOyB9CgogICAgaW5saW5lIHN0 cmVhbXNpemUKICAgIHByZWNpc2lvbihzdHJlYW1zaXplIF9fcHJlYykKICAgIHsKICAgICAgc3Ry ZWFtc2l6ZSBfX29sZCA9IF9NX3ByZWNpc2lvbjsKICAgICAgX01fcHJlY2lzaW9uID0gX19wcmVj OwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHdp ZHRoKCkgY29uc3QgeyByZXR1cm4gX01fd2lkdGg7IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQog ICAgd2lkdGgoc3RyZWFtc2l6ZSBfX3dpZGUpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19vbGQg PSBfTV93aWR0aDsKICAgICAgX01fd2lkdGggPSBfX3dpZGU7CiAgICAgIHJldHVybiBfX29sZDsK ICAgIH0KCiAgICBzdGF0aWMgYm9vbAogICAgc3luY193aXRoX3N0ZGlvKGJvb2wgX19zeW5jID0g dHJ1ZSk7CgoKICAgIGxvY2FsZQogICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAg aW5saW5lIGxvY2FsZQogICAgZ2V0bG9jKCkgY29uc3QgeyByZXR1cm4gX01faW9zX2xvY2FsZTsg fQoKCiAgICBzdGF0aWMgaW50CiAgICB4YWxsb2MoKSB0aHJvdygpOwoKICAgIGlubGluZSBsb25n JgogICAgaXdvcmQoaW50IF9faXgpCiAgICB7CiAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9faXgg PCBfTV93b3JkX3NpemUpCiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29yZFtfX2l4XSA6 IF9NX2dyb3dfd29yZHMoX19peCk7CiAgICAgIHJldHVybiBfX3dvcmQuX01faXdvcmQ7CiAgICB9 CgogICAgaW5saW5lIHZvaWQqJgogICAgcHdvcmQoaW50IF9faXgpCiAgICB7CiAgICAgIF9Xb3Jk cyYgX193b3JkID0gKF9faXggPCBfTV93b3JkX3NpemUpCiAgICAgICAgICAgICAgICAgICAgICAg ID8gX01fd29yZFtfX2l4XSA6IF9NX2dyb3dfd29yZHMoX19peCk7CiAgICAgIHJldHVybiBfX3dv cmQuX01fcHdvcmQ7CiAgICB9CgoKICAgIH5pb3NfYmFzZSgpOwoKICBwcm90ZWN0ZWQ6CiAgICBp b3NfYmFzZSgpOwoKCgogIHByaXZhdGU6CiAgICBpb3NfYmFzZShjb25zdCBpb3NfYmFzZSYpOwoK ICAgIGlvc19iYXNlJgogICAgb3BlcmF0b3I9KGNvbnN0IGlvc19iYXNlJik7CgogIH07CgoKICBp bmxpbmUgaW9zX2Jhc2UmCiAgYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i YXNlLnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAg aW5saW5lIGlvc19iYXNlJgogIG5vYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAg X19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAg fQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAg ICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9 CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewog ICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsK ICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7 CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7 CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkK ICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOwogICAgcmV0dXJuIF9f YmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9zKGlvc19iYXNlJiBfX2Jhc2Up CiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOwogICAgcmV0dXJuIF9fYmFz ZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkK ICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBfX2Jh c2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAg ewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7CiAgICByZXR1cm4gX19iYXNlOwog IH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewog ICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAgIHJldHVybiBfX2Jhc2U7CiAg fQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewog ICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1cm4gX19iYXNlOwog IH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAg ewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsKICAgIHJldHVybiBfX2Jh c2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQog IHsKICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFz ZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3VuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkK ICB7CiAgICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9f YmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgaW50ZXJuYWwoaW9zX2Jhc2UmIF9fYmFz ZSkKICB7CiAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmludGVybmFsLCBpb3NfYmFzZTo6YWRq dXN0ZmllbGQpOwogICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAg bGVmdChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpsZWZ0 LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGlu ZSBpb3NfYmFzZSYKICByaWdodChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRm KGlvc19iYXNlOjpyaWdodCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgIHJldHVybiBfX2Jh c2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGRlYyhpb3NfYmFzZSYgX19iYXNlKQogIHsK ICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpkZWMsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAg cmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBoZXgoaW9zX2Jhc2UmIF9f YmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aGV4LCBpb3NfYmFzZTo6YmFzZWZp ZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgb2N0KGlv c19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6Om9jdCwgaW9zX2Jh c2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFz ZSYKICBmaXhlZChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNl OjpmaXhlZCwgaW9zX2Jhc2U6OmZsb2F0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9Cgog IGlubGluZSBpb3NfYmFzZSYKICBzY2llbnRpZmljKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAg X19iYXNlLnNldGYoaW9zX2Jhc2U6OnNjaWVudGlmaWMsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsK ICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKfQojIDUwICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMu My1wcmUvaW5jbHVkZS9jKysvMy4zL2lvcyIgMiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9zdHJlYW1idWYiIDEgMwojIDQ0ICIvaG9tZS9iYW5n ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL3N0cmVhbWJ1ZiIgMwoKCgoKCgoK bmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPF9DaGFy VCwgX1RyYWl0cz4mIF9pb3MsCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8 X0NoYXJULCBfVHJhaXRzPiogX19zYmluLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3Ry ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQpOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVmCiAgICB7 CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVk ZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlw ZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6 OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpv ZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGN0eXBlPGNoYXJfdHlwZT4gX19jdHlw ZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190 eXBlPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBl OjpzdGF0ZV90eXBlIF9fc3RhdGVfdHlwZTsKCiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pb3M8 Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pc3RyZWFt PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfb3N0cmVh bTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGlzdHJlYW1idWZf aXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBvc3Ry ZWFtYnVmX2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwoKICAgICAgZnJpZW5kIHN0 cmVhbXNpemUKICAgICAgX19jb3B5X3N0cmVhbWJ1ZnM8PihiYXNpY19pb3M8Y2hhcl90eXBlLCB0 cmFpdHNfdHlwZT4mIF9faW9zLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVm X3R5cGUqIF9fc2JpbixfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KTsKCiAgICBwcm90ZWN0ZWQ6 CgoKCgoKICAgICAgY2hhcl90eXBlKiBfTV9idWY7CgoKICAgICAgc2l6ZV90IF9NX2J1Zl9zaXpl OwoKCiAgICAgIHNpemVfdCBfTV9idWZfc2l6ZV9vcHQ7CgoKCiAgICAgIGJvb2wgX01fYnVmX3Vu aWZpZWQ7CgoKCgoKCiAgICAgIGNoYXJfdHlwZSogX01faW5fYmVnOwogICAgICBjaGFyX3R5cGUq IF9NX2luX2N1cjsKICAgICAgY2hhcl90eXBlKiBfTV9pbl9lbmQ7CiAgICAgIGNoYXJfdHlwZSog X01fb3V0X2JlZzsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRfY3VyOwogICAgICBjaGFyX3R5cGUq IF9NX291dF9lbmQ7CgoKICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9NX21vZGU7CgoKICAgICAg bG9jYWxlIF9NX2J1Zl9sb2NhbGU7CgoKICAgICAgYm9vbCBfTV9idWZfbG9jYWxlX2luaXQ7CgoK CgoKCiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgX1NfcGJhY2tfc2l6ZSA9IDE7CiAgICAgIGNo YXJfdHlwZSBfTV9wYmFja1tfU19wYmFja19zaXplXTsKICAgICAgY2hhcl90eXBlKiBfTV9wYmFj a19jdXJfc2F2ZTsKICAgICAgY2hhcl90eXBlKiBfTV9wYmFja19lbmRfc2F2ZTsKICAgICAgYm9v bCBfTV9wYmFja19pbml0OwoKCiAgICAgIGZwb3M8X19zdGF0ZV90eXBlPiBfTV9wb3M7CgoKCgog ICAgICB2b2lkCiAgICAgIF9NX3BiYWNrX2NyZWF0ZSgpCiAgICAgIHsKICAgICAgICBpZiAoIV9N X3BiYWNrX2luaXQpCiAgICAgICAgICB7CiAgICAgICAgICAgIHNpemVfdCBfX2Rpc3QgPSBfTV9p bl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9IG1pbihfU19wYmFj a19zaXplLCBfX2Rpc3QpOwogICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9wYmFjaywg X01faW5fY3VyLCBfX2xlbik7CiAgICAgICAgICAgIF9NX3BiYWNrX2N1cl9zYXZlID0gX01faW5f Y3VyOwogICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9IF9NX2luX2VuZDsKICAgICAgICAg ICAgdGhpcy0+c2V0ZyhfTV9wYmFjaywgX01fcGJhY2ssIF9NX3BiYWNrICsgX19sZW4pOwogICAg ICAgICAgICBfTV9wYmFja19pbml0ID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgfQoKCgoKICAg ICAgdm9pZAogICAgICBfTV9wYmFja19kZXN0cm95KCkKICAgICAgewogICAgICAgIGlmIChfTV9w YmFja19pbml0KQogICAgICAgICAgewoKICAgICAgICAgICAgc2l6ZV90IF9fb2ZmX2N1ciA9IF9N X2luX2N1ciAtIF9NX3BiYWNrOwoKCiAgICAgICAgICAgIHNpemVfdCBfX29mZl9lbmQgPSAwOwog ICAgICAgICAgICBzaXplX3QgX19wYmFja19sZW4gPSBfTV9pbl9lbmQgLSBfTV9wYmFjazsKICAg ICAgICAgICAgc2l6ZV90IF9fc2F2ZV9sZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9NX2J1ZjsK ICAgICAgICAgICAgaWYgKF9fcGJhY2tfbGVuID4gX19zYXZlX2xlbikKICAgICAgICAgICAgICBf X29mZl9lbmQgPSBfX3BiYWNrX2xlbiAtIF9fc2F2ZV9sZW47CgogICAgICAgICAgICB0aGlzLT5z ZXRnKF9NX2J1ZiwgX01fcGJhY2tfY3VyX3NhdmUgKyBfX29mZl9jdXIsCiAgICAgICAgICAgICAg ICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgKyBfX29mZl9lbmQpOwogICAgICAgICAgICBfTV9w YmFja19jdXJfc2F2ZSA9IF9fbnVsbDsKICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgPSBf X251bGw7CiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSBmYWxzZTsKICAgICAgICAgIH0KICAg ICAgfQoKCgogICAgICB2b2lkCiAgICAgIF9NX2luX2N1cl9tb3ZlKG9mZl90eXBlIF9fbikKICAg ICAgewogICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fb3V0X2N1cjsKICAgICAgICBfTV9pbl9j dXIgKz0gX19uOwogICAgICAgIGlmIChfX3Rlc3RvdXQgJiYgX01fYnVmX3VuaWZpZWQpCiAgICAg ICAgICBfTV9vdXRfY3VyICs9IF9fbjsKICAgICAgfQojIDIwMiAiL2hvbWUvYmFuZ2VydGgvYmlu L2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9zdHJlYW1idWYiIDMKICAgICAgdm9pZAogICAg ICBfTV9vdXRfY3VyX21vdmUob2ZmX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rl c3RpbiA9IF9NX2luX2N1cjsKCiAgICAgICAgX01fb3V0X2N1ciArPSBfX247CiAgICAgICAgaWYg KF9fdGVzdGluICYmIF9NX2J1Zl91bmlmaWVkKQogICAgICAgICAgX01faW5fY3VyICs9IF9fbjsK ICAgICAgICBpZiAoX01fb3V0X2N1ciA+IF9NX291dF9lbmQpCiAgICAgICAgICB7CiAgICAgICAg ICAgIF9NX291dF9lbmQgPSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAgaWYgKF9fdGVzdGluKQog ICAgICAgICAgICAgIF9NX2luX2VuZCArPSBfX247CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAg ICAgIG9mZl90eXBlCiAgICAgIF9NX291dF9idWZfc2l6ZSgpCiAgICAgIHsKICAgICAgICBvZmZf dHlwZSBfX3JldCA9IDA7CiAgICAgICAgaWYgKF9NX291dF9jdXIpCiAgICAgICAgICB7CgogICAg ICAgICAgICBpZiAoX01fb3V0X2JlZyA9PSBfTV9idWYpCiAgICAgICAgICAgICAgX19yZXQgPSBf TV9vdXRfYmVnICsgX01fYnVmX3NpemUgLSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgIF9fcmV0ID0gX01fb3V0X2VuZCAtIF9NX291dF9jdXI7CiAgICAgICAgICB9 CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogIHB1YmxpYzoKICAgICAgdmlydHVhbAog ICAgICB+YmFzaWNfc3RyZWFtYnVmKCkKICAgICAgewogICAgICAgIF9NX2J1Zl91bmlmaWVkID0g ZmFsc2U7CiAgICAgICAgX01fYnVmX3NpemUgPSAwOwogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9 IDA7CiAgICAgICAgX01fbW9kZSA9IGlvc19iYXNlOjpvcGVubW9kZSgwKTsKICAgICAgICBfTV9i dWZfbG9jYWxlX2luaXQgPSBmYWxzZTsKICAgICAgfQoKCiAgICAgIGxvY2FsZQogICAgICBwdWJp bWJ1ZShjb25zdCBsb2NhbGUgJl9fbG9jKQogICAgICB7CiAgICAgICAgbG9jYWxlIF9fdG1wKHRo aXMtPmdldGxvYygpKTsKICAgICAgICB0aGlzLT5pbWJ1ZShfX2xvYyk7CiAgICAgICAgcmV0dXJu IF9fdG1wOwogICAgICB9CgogICAgICBsb2NhbGUKICAgICAgZ2V0bG9jKCkgY29uc3QKICAgICAg ewogICAgICAgIGlmIChfTV9idWZfbG9jYWxlX2luaXQpCiAgICAgICAgICByZXR1cm4gX01fYnVm X2xvY2FsZTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gbG9jYWxlKCk7CiAgICAgIH0K CgogICAgICBfX3N0cmVhbWJ1Zl90eXBlKgogICAgICBwdWJzZXRidWYoY2hhcl90eXBlKiBfX3Ms IHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5zZXRidWYoX19zLCBfX24pOyB9 CgogICAgICBwb3NfdHlwZQogICAgICBwdWJzZWVrb2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFz ZTo6c2Vla2RpciBfX3dheSwKICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19t b2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gdGhpcy0+ c2Vla29mZihfX29mZiwgX193YXksIF9fbW9kZSk7IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1 YnNlZWtwb3MocG9zX3R5cGUgX19zcCwKICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1v ZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4g dGhpcy0+c2Vla3BvcyhfX3NwLCBfX21vZGUpOyB9CgogICAgICBpbnQKICAgICAgcHVic3luYygp IHsgcmV0dXJuIHRoaXMtPnN5bmMoKTsgfQoKCgogICAgICBzdHJlYW1zaXplCiAgICAgIGluX2F2 YWlsKCkKICAgICAgewogICAgICAgIHN0cmVhbXNpemUgX19yZXQ7CiAgICAgICAgaWYgKF9NX2lu X2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlm IChfTV9wYmFja19pbml0KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHNpemVfdCBf X3NhdmVfbGVuID0gX01fcGJhY2tfZW5kX3NhdmUgLSBfTV9wYmFja19jdXJfc2F2ZTsKICAgICAg ICAgICAgICAgIHNpemVfdCBfX3BiYWNrX2xlbiA9IF9NX2luX2N1ciAtIF9NX3BiYWNrOwogICAg ICAgICAgICAgICAgX19yZXQgPSBfX3NhdmVfbGVuIC0gX19wYmFja19sZW47CiAgICAgICAgICAg ICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgX19yZXQgPSB0aGlzLT5lZ3B0cigp IC0gdGhpcy0+Z3B0cigpOwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0 ID0gdGhpcy0+c2hvd21hbnljKCk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogICAg ICBpbnRfdHlwZQogICAgICBzbmV4dGMoKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19lb2Yg PSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgcmV0dXJuICh0cmFpdHNfdHlwZTo6ZXFfaW50 X3R5cGUodGhpcy0+c2J1bXBjKCksIF9fZW9mKQogICAgICAgICAgICAgICAgPyBfX2VvZiA6IHRo aXMtPnNnZXRjKCkpOwogICAgICB9CgogICAgICBpbnRfdHlwZQogICAgICBzYnVtcGMoKTsKCiAg ICAgIGludF90eXBlCiAgICAgIHNnZXRjKCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fcmV0 OwogICAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAg ICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKih0aGlzLT5ncHRyKCkpKTsKICAg ICAgICBlbHNlCiAgICAgICAgICBfX3JldCA9IHRoaXMtPnVuZGVyZmxvdygpOwogICAgICAgIHJl dHVybiBfX3JldDsKICAgICAgfQoKICAgICAgc3RyZWFtc2l6ZQogICAgICBzZ2V0bihjaGFyX3R5 cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhzZ2V0bihfX3Ms IF9fbik7IH0KCgogICAgICBpbnRfdHlwZQogICAgICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYyk7 CgogICAgICBpbnRfdHlwZQogICAgICBzdW5nZXRjKCk7CgoKICAgICAgaW50X3R5cGUKICAgICAg c3B1dGMoY2hhcl90eXBlIF9fYyk7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHNwdXRuKGNvbnN0 IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+eHNw dXRuKF9fcywgX19uKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgYmFzaWNfc3RyZWFtYnVmKCkK ICAgICAgOiBfTV9idWYoX19udWxsKSwgX01fYnVmX3NpemUoMCksIF9NX2J1Zl9zaXplX29wdCg4 MTkyKSwKICAgICAgX01fYnVmX3VuaWZpZWQoZmFsc2UpLCBfTV9pbl9iZWcoMCksIF9NX2luX2N1 cigwKSwgX01faW5fZW5kKDApLAogICAgICBfTV9vdXRfYmVnKDApLCBfTV9vdXRfY3VyKDApLCBf TV9vdXRfZW5kKDApLAogICAgICBfTV9tb2RlKGlvc19iYXNlOjpvcGVubW9kZSgwKSksIF9NX2J1 Zl9sb2NhbGUobG9jYWxlKCkpLAogICAgICBfTV9idWZfbG9jYWxlX2luaXQoZmFsc2UpLCBfTV9w YmFja19jdXJfc2F2ZSgwKSwgX01fcGJhY2tfZW5kX3NhdmUoMCksCiAgICAgIF9NX3BiYWNrX2lu aXQoZmFsc2UpCiAgICAgIHsgfQoKCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZWJhY2soKSBjb25z dCB7IHJldHVybiBfTV9pbl9iZWc7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZ3B0cigpIGNv bnN0IHsgcmV0dXJuIF9NX2luX2N1cjsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBlZ3B0cigp IGNvbnN0IHsgcmV0dXJuIF9NX2luX2VuZDsgfQoKICAgICAgdm9pZAogICAgICBnYnVtcChpbnQg X19uKSB7IF9NX2luX2N1ciArPSBfX247IH0KCiAgICAgIHZvaWQKICAgICAgc2V0ZyhjaGFyX3R5 cGUqIF9fZ2JlZywgY2hhcl90eXBlKiBfX2duZXh0LCBjaGFyX3R5cGUqIF9fZ2VuZCkKICAgICAg ewogICAgICAgIF9NX2luX2JlZyA9IF9fZ2JlZzsKICAgICAgICBfTV9pbl9jdXIgPSBfX2duZXh0 OwogICAgICAgIF9NX2luX2VuZCA9IF9fZ2VuZDsKICAgICAgICBpZiAoIShfTV9tb2RlICYgaW9z X2Jhc2U6OmluKSAmJiBfX2diZWcgJiYgX19nbmV4dCAmJiBfX2dlbmQpCiAgICAgICAgICBfTV9t b2RlID0gX01fbW9kZSB8IGlvc19iYXNlOjppbjsKICAgICAgfQoKCiAgICAgIGNoYXJfdHlwZSoK ICAgICAgcGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfYmVnOyB9CgogICAgICBjaGFyX3R5 cGUqCiAgICAgIHBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfY3VyOyB9CgogICAgICBjaGFy X3R5cGUqCiAgICAgIGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2VuZDsgfQoKICAgICAg dm9pZAogICAgICBwYnVtcChpbnQgX19uKSB7IF9NX291dF9jdXIgKz0gX19uOyB9CgogICAgICB2 b2lkCiAgICAgIHNldHAoY2hhcl90eXBlKiBfX3BiZWcsIGNoYXJfdHlwZSogX19wZW5kKQogICAg ICB7CiAgICAgICAgX01fb3V0X2JlZyA9IF9NX291dF9jdXIgPSBfX3BiZWc7CiAgICAgICAgX01f b3V0X2VuZCA9IF9fcGVuZDsKICAgICAgICBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkg JiYgX19wYmVnICYmIF9fcGVuZCkKICAgICAgICAgIF9NX21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jh c2U6Om91dDsKICAgICAgfQoKCgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAgaW1idWUoY29uc3Qg bG9jYWxlJiBfX2xvYykKICAgICAgewogICAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9IHRydWU7 CiAgICAgICAgaWYgKF9NX2J1Zl9sb2NhbGUgIT0gX19sb2MpCiAgICAgICAgICBfTV9idWZfbG9j YWxlID0gX19sb2M7CiAgICAgIH0KCgogICAgICB2aXJ0dWFsIGJhc2ljX3N0cmVhbWJ1ZjxjaGFy X3R5cGUsX1RyYWl0cz4qCiAgICAgIHNldGJ1ZihjaGFyX3R5cGUqLCBzdHJlYW1zaXplKQogICAg ICB7IHJldHVybiB0aGlzOyB9CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtvZmYo b2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVu bW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHBvc190 eXBlKG9mZl90eXBlKC0xKSk7IH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla3Bv cyhwb3NfdHlwZSwKICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6 aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiBwb3NfdHlwZShvZmZfdHlwZSgtMSkp OyB9CgogICAgICB2aXJ0dWFsIGludAogICAgICBzeW5jKCkgeyByZXR1cm4gMDsgfQoKCiAgICAg IHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICBzaG93bWFueWMoKSB7IHJldHVybiAwOyB9CgogICAg ICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1z aXplIF9fbik7CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHVuZGVyZmxvdygpCiAgICAg IHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQoKICAgICAgdmlydHVhbCBpbnRfdHlwZQog ICAgICB1ZmxvdygpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBl Ojplb2YoKTsKICAgICAgICBib29sIF9fdGVzdGVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlw ZSh0aGlzLT51bmRlcmZsb3coKSwgX19yZXQpOwogICAgICAgIGJvb2wgX190ZXN0cGVuZGluZyA9 IF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQ7CiAgICAgICAgaWYgKCFfX3Rlc3Rl b2YgJiYgX190ZXN0cGVuZGluZykKICAgICAgICAgIHsKICAgICAgICAgICAgX19yZXQgPSB0cmFp dHNfdHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1cik7CiAgICAgICAgICAgICsrX01faW5fY3Vy OwogICAgICAgICAgICBpZiAoX01fYnVmX3VuaWZpZWQgJiYgX01fbW9kZSAmIGlvc19iYXNlOjpv dXQpCiAgICAgICAgICAgICAgKytfTV9vdXRfY3VyOwogICAgICAgICAgfQogICAgICAgIHJldHVy biBfX3JldDsKICAgICAgfQoKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgcGJhY2tmYWls KGludF90eXBlID0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlw ZTo6ZW9mKCk7IH0KCgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNwdXRuKGNvbnN0 IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICB2aXJ0dWFsIGludF90eXBl CiAgICAgIG92ZXJmbG93KGludF90eXBlID0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICB7IHJl dHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KIyA0ODcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvc3RyZWFtYnVmIiAzCiAgICBwcml2YXRlOgogICAgICBi YXNpY19zdHJlYW1idWYoY29uc3QgX19zdHJlYW1idWZfdHlwZSYpIHsgfTsKCiAgICAgIF9fc3Ry ZWFtYnVmX3R5cGUmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfX3N0cmVhbWJ1Zl90eXBlJikgeyBy ZXR1cm4gKnRoaXM7IH07CgogICAgfTsKfQoKCgoKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0cmVhbWJ1Zi50Y2MiIDEgMwojIDM5ICIv aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RyZWFt YnVmLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgY29uc3Qgc2l6ZV90CiAgICBiYXNpY19zdHJlYW1idWY8X0No YXJULCBfVHJhaXRzPjo6X1NfcGJhY2tfc2l6ZTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg X1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6 CiAgICBzYnVtcGMoKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX2lu X2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgewogICAgICAgICAgY2hhcl90 eXBlIF9fYyA9ICoodGhpcy0+Z3B0cigpKTsKICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKDEpOwog ICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKTsKICAgICAgICB9 CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPnVmbG93KCk7CiAgICAgIHJldHVybiBf X3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBl CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0YmFja2MoY2hh cl90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGJvb2wgX190ZXN0 cG9zID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1cjsKICAgICAgYm9vbCBfX3Rl c3RuZSA9IF9NX2luX2N1ciAmJiAhdHJhaXRzX3R5cGU6OmVxKF9fYywgdGhpcy0+Z3B0cigpWy0x XSk7CiAgICAgIGlmICghX190ZXN0cG9zIHx8IF9fdGVzdG5lKQogICAgICAgIF9fcmV0ID0gcGJh Y2tmYWlsKHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsKICAgICAgZWxzZQogICAgICAg IHsKICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRz X3R5cGU6OnRvX2ludF90eXBlKCp0aGlzLT5ncHRyKCkpOwogICAgICAgIH0KICAgICAgcmV0dXJu IF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5 cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHN1bmdldGMoKQog ICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9i ZWcgPCBfTV9pbl9jdXIpCiAgICAgICAgewogICAgICAgICAgX01faW5fY3VyX21vdmUoLTEpOwog ICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1cik7CiAg ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0aGlzLT5wYmFja2ZhaWwoKTsKICAg ICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9U cmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Ogog ICAgc3B1dGMoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAg IGlmIChfTV9vdXRfYnVmX3NpemUoKSkKICAgICAgICB7CiAgICAgICAgICAqX01fb3V0X2N1ciA9 IF9fYzsKICAgICAgICAgIF9NX291dF9jdXJfbW92ZSgxKTsKICAgICAgICAgIF9fcmV0ID0gdHJh aXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYyk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg X19yZXQgPSB0aGlzLT5vdmVyZmxvdyh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSk7CiAg ICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg X1RyYWl0cz46OgogICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAg IHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHdoaWxlIChfX3JldCA8IF9fbikK ICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19idWZfbGVuID0gX01faW5fZW5kIC0gX01faW5f Y3VyOwogICAgICAgICAgaWYgKF9fYnVmX2xlbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBzaXplX3QgX19yZW1haW5pbmcgPSBfX24gLSBfX3JldDsKICAgICAgICAgICAgICBzaXpl X3QgX19sZW4gPSBtaW4oX19idWZfbGVuLCBfX3JlbWFpbmluZyk7CiAgICAgICAgICAgICAgdHJh aXRzX3R5cGU6OmNvcHkoX19zLCBfTV9pbl9jdXIsIF9fbGVuKTsKICAgICAgICAgICAgICBfX3Jl dCArPSBfX2xlbjsKICAgICAgICAgICAgICBfX3MgKz0gX19sZW47CiAgICAgICAgICAgICAgX01f aW5fY3VyX21vdmUoX19sZW4pOwogICAgICAgICAgICB9CgogICAgICAgICAgaWYgKF9fcmV0IDwg X19uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gdGhpcy0+dWZs b3coKTsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRy YWl0c190eXBlOjplb2YoKSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHRy YWl0c190eXBlOjphc3NpZ24oKl9fcysrLCB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykp OwogICAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFtYnVmPF9D aGFyVCwgX1RyYWl0cz46OgogICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1z aXplIF9fbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHdoaWxlIChf X3JldCA8IF9fbikKICAgICAgICB7CiAgICAgICAgICBvZmZfdHlwZSBfX2J1Zl9sZW4gPSBfTV9v dXRfYnVmX3NpemUoKTsKICAgICAgICAgIGlmIChfX2J1Zl9sZW4gPiAwKQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19yZW1haW5pbmcgPSBfX24gLSBfX3JldDsKICAgICAg ICAgICAgICBvZmZfdHlwZSBfX2xlbiA9IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsKICAg ICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9vdXRfY3VyLCBfX3MsIF9fbGVuKTsKICAg ICAgICAgICAgICBfX3JldCArPSBfX2xlbjsKICAgICAgICAgICAgICBfX3MgKz0gX19sZW47CiAg ICAgICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKF9fbGVuKTsKICAgICAgICAgICAgfQoKICAgICAg ICAgIGlmIChfX3JldCA8IF9fbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIGludF90eXBl IF9fYyA9IHRoaXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX19zKSk7CiAg ICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlw ZTo6ZW9mKCkpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19fcmV0Owog ICAgICAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBl bHNlCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg cmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNf aW9zPF9DaGFyVCwgX1RyYWl0cz4mIF9faW9zLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNf c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAgICAgICAg IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KQogIHsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKCiAgICAgIHN0cmVhbXNp emUgX19yZXQgPSAwOwogICAgICBzdHJlYW1zaXplIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZh aWwoKTsKICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0OwogICAgICBib29sIF9fdGVzdHB1dCA9IF9f c2JvdXQtPl9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICB0cnkKICAgICAgICB7CiAgICAg ICAgICB3aGlsZSAoX190ZXN0cHV0ICYmIF9fYnVmc2l6ZSAhPSAtMSkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIGlmIChfX2J1ZnNpemUgIT0gMCAmJiBfX3NiaW4tPmdwdHIoKSAhPSBfX251 bGwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9feHRyY3QgPSBfX3Nib3V0 LT5zcHV0bihfX3NiaW4tPmdwdHIoKSwgX19idWZzaXplKTsKICAgICAgICAgICAgICAgICAgX19y ZXQgKz0gX194dHJjdDsKICAgICAgICAgICAgICAgICAgX19zYmluLT5fTV9pbl9jdXJfbW92ZShf X3h0cmN0KTsKICAgICAgICAgICAgICAgICAgaWYgKF9feHRyY3QgIT0gX19idWZzaXplKQogICAg ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVs c2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX0NoYXJUIF9fYnVmWzI1Nl07 CiAgICAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX19jaGFyc3JlYWQgPSBfX3NiaW4tPnNnZXRu KF9fYnVmLCBzaXplb2YoX19idWYpKTsKICAgICAgICAgICAgICAgICAgX194dHJjdCA9IF9fc2Jv dXQtPnNwdXRuKF9fYnVmLCBfX2NoYXJzcmVhZCk7CiAgICAgICAgICAgICAgICAgIF9fcmV0ICs9 IF9feHRyY3Q7CiAgICAgICAgICAgICAgICAgIGlmIChfX3h0cmN0ICE9IF9fY2hhcnNyZWFkKQog ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg IGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX3NiaW4tPnNnZXRjKCksIF9UcmFpdHM6OmVvZigp KSkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIF9fYnVmc2l6ZSA9IF9fc2Jp bi0+aW5fYXZhaWwoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgY2F0Y2goZXhjZXB0 aW9uJiBfX2ZhaWwpCiAgICAgICAgewogICAgICAgICAgX19pb3Muc2V0c3RhdGUoaW9zX2Jhc2U6 OmZhaWxiaXQpOwogICAgICAgICAgaWYgKChfX2lvcy5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6 ZmFpbGJpdCkgIT0gMCkKICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICByZXR1cm4g X19yZXQ7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJlYW1idWY8 Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFt YnVmcyhiYXNpY19pb3M8Y2hhcj4mLCBiYXNpY19zdHJlYW1idWY8Y2hhcj4qLAogICAgICAgICAg ICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPGNoYXI+Kik7CgogIGV4dGVybiB0ZW1wbGF0ZSBj bGFzcyBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBzdHJl YW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8d2NoYXJfdD4mLCBiYXNpY19z dHJlYW1idWY8d2NoYXJfdD4qLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVm PHdjaGFyX3Q+Kik7Cn0KIyA1MDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNs dWRlL2MrKy8zLjMvc3RyZWFtYnVmIiAyIDMKIyA1MSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z LjMtcHJlL2luY2x1ZGUvYysrLzMuMy9pb3MiIDIgMwojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9n Y2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9iYXNpY19pb3MuaCIgMSAzCiMgMzkgIi9o b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9iYXNpY19p b3MuaCIgMwoKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysv My4zL2JpdHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmgiIDEgMwojIDQyICIvaG9tZS9iYW5nZXJ0aC9i aW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmgi IDMKCm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVy YXRvcjxpbnB1dF9pdGVyYXRvcl90YWcsIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5 cGUsCiAgICAgICAgICAgICAgICAgICAgICBfQ2hhclQqLCBfQ2hhclQmPgogICAgewogICAgcHVi bGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFp dHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUg aW50X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4g c3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+IGlzdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgoKCgoKCgoKICAgICAgbXV0YWJsZSBzdHJl YW1idWZfdHlwZSogX01fc2J1ZjsKICAgICAgaW50X3R5cGUgX01fYzsKCiAgICBwdWJsaWM6CiAg ICAgIGlzdHJlYW1idWZfaXRlcmF0b3IoKSB0aHJvdygpCiAgICAgIDogX01fc2J1ZigwKSwgX01f Yyh0cmFpdHNfdHlwZTo6ZW9mKCkpIHsgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcihpc3Ry ZWFtX3R5cGUmIF9fcykgdGhyb3coKQogICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9j KHRyYWl0c190eXBlOjplb2YoKSkgeyB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKHN0cmVh bWJ1Zl90eXBlKiBfX3MpIHRocm93KCkKICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2ModHJhaXRz X3R5cGU6OmVvZigpKSB7IH0KCgogICAgICBjaGFyX3R5cGUKICAgICAgb3BlcmF0b3IqKCkgY29u c3QKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfTV9nZXQoKSk7IH0K CiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAg ICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAg aWYgKF9NX3NidWYgJiYgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9NX3NidWYtPnNidW1wYygp LCBfX2VvZikpCiAgICAgICAgICBfTV9zYnVmID0gMDsKICAgICAgICBlbHNlCiAgICAgICAgICBf TV9jID0gX19lb2Y7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBpc3RyZWFt YnVmX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgY29uc3Qg aW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgaXN0cmVhbWJ1Zl9p dGVyYXRvciBfX29sZCA9ICp0aGlzOwogICAgICAgIGlmIChfTV9zYnVmCiAgICAgICAgICAgICYm IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZSgoX19vbGQuX01fYyA9IF9NX3NidWYtPnNidW1wYygp KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZW9mKSkKICAgICAg ICAgIF9NX3NidWYgPSAwOwogICAgICAgIGVsc2UKICAgICAgICAgIF9NX2MgPSBfX2VvZjsKICAg ICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KCgoKCiAgICAgIGJvb2wKICAgICAgZXF1YWwoY29u c3QgaXN0cmVhbWJ1Zl9pdGVyYXRvciYgX19iKSBjb25zdAogICAgICB7CiAgICAgICAgY29uc3Qg aW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgYm9vbCBfX3RoaXNl b2YgPSB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX01fZ2V0KCksIF9fZW9mKTsKICAgICAgICBi b29sIF9fYmVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2IuX01fZ2V0KCksIF9fZW9m KTsKICAgICAgICByZXR1cm4gKF9fdGhpc2VvZiAmJiBfX2Jlb2YgfHwgKCFfX3RoaXNlb2YgJiYg IV9fYmVvZikpOwogICAgICB9CgoKICAgIHByaXZhdGU6CiAgICAgIGludF90eXBlCiAgICAgIF9N X2dldCgpIGNvbnN0CiAgICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0 c190eXBlOjplb2YoKTsKICAgICAgICBpbnRfdHlwZSBfX3JldCA9IF9fZW9mOwogICAgICAgIGlm IChfTV9zYnVmKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9p bnRfdHlwZShfTV9jLCBfX2VvZikpCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9jOwogICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZSgoX19y ZXQgPSBfTV9zYnVmLT5zZ2V0YygpKSwgX19lb2YpKQogICAgICAgICAgICAgICAgX01fc2J1ZiA9 IDA7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CiAgICB9OwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYm9v bAogICAgb3BlcmF0b3I9PShjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0 cz4mIF9fYSwKICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQs IF9UcmFpdHM+JiBfX2IpCiAgICB7IHJldHVybiBfX2EuZXF1YWwoX19iKTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYm9vbAogICAg b3BlcmF0b3IhPShjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9f YSwKICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFp dHM+JiBfX2IpCiAgICB7IHJldHVybiAhX19hLmVxdWFsKF9fYik7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVy YXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9p ZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo YXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVm IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IHN0cmVhbWJ1Zl90eXBlOwogICAgICB0 eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7CgogICAg cHJpdmF0ZToKICAgICAgc3RyZWFtYnVmX3R5cGUqIF9NX3NidWY7CiAgICAgIGJvb2wgX01fZmFp bGVkOwoKICAgIHB1YmxpYzoKICAgICAgaW5saW5lCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3Io b3N0cmVhbV90eXBlJiBfX3MpIHRocm93ICgpCiAgICAgIDogX01fc2J1ZihfX3MucmRidWYoKSks IF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKHN0cmVh bWJ1Zl90eXBlKiBfX3MpIHRocm93ICgpCiAgICAgIDogX01fc2J1ZihfX3MpLCBfTV9mYWlsZWQo IV9NX3NidWYpIHsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9 KF9DaGFyVCBfX2MpOwoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3Iq KCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVy YXRvciYKICAgICAgb3BlcmF0b3IrKyhpbnQpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRoaXM7 IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBib29sCiAgICAgIGZhaWxlZCgpIGNvbnN0 IHRocm93KCkKICAgICAgeyByZXR1cm4gX01fZmFpbGVkOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgb3N0cmVhbWJ1Zl9p dGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQs IF9UcmFpdHM+OjpvcGVyYXRvcj0oX0NoYXJUIF9fYykKICAgIHsKICAgICAgaWYgKCFfTV9mYWls ZWQgJiYKICAgICAgICAgIF9UcmFpdHM6OmVxX2ludF90eXBlKF9NX3NidWYtPnNwdXRjKF9fYyks IF9UcmFpdHM6OmVvZigpKSkKICAgICAgICBfTV9mYWlsZWQgPSB0cnVlOwogICAgICByZXR1cm4g KnRoaXM7CiAgICB9Cn0KIyA0MSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1 ZGUvYysrLzMuMy9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4v Z2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAxIDMKIyA0 NCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xv Y2FsZV9mYWNldHMuaCIgMwoKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2lu Y2x1ZGUvYysrLzMuMy9jd2N0eXBlIiAxIDMKIyA0OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z LjMtcHJlL2luY2x1ZGUvYysrLzMuMy9jd2N0eXBlIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS93 Y3R5cGUuaCIgMSAzIDQKIyAzNSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzIDQKIyAxICIvaG9t ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzYgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIg MiAzIDQKIyA2MSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzIDQKdHlwZWRlZiB1bnNpZ25lZCBs b25nIGludCB3Y3R5cGVfdDsKIyA3OSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzIDQKZW51bQp7 CiAgX19JU3d1cHBlciA9IDAsCiAgX19JU3dsb3dlciA9IDEsCiAgX19JU3dhbHBoYSA9IDIsCiAg X19JU3dkaWdpdCA9IDMsCiAgX19JU3d4ZGlnaXQgPSA0LAogIF9fSVN3c3BhY2UgPSA1LAogIF9f SVN3cHJpbnQgPSA2LAogIF9fSVN3Z3JhcGggPSA3LAogIF9fSVN3YmxhbmsgPSA4LAogIF9fSVN3 Y250cmwgPSA5LAogIF9fSVN3cHVuY3QgPSAxMCwKICBfX0lTd2FsbnVtID0gMTEsCgogIF9JU3d1 cHBlciA9ICgoX19JU3d1cHBlcikgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3dXBwZXIpKSA8 PCAyNCkgOiAoKF9fSVN3dXBwZXIpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBlcikp IDw8IDgpIDogKChfX0lTd3VwcGVyKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3dXBwZXIp KSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPj4gMjQpKSkpLAogIF9JU3ds b3dlciA9ICgoX19JU3dsb3dlcikgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3bG93ZXIpKSA8 PCAyNCkgOiAoKF9fSVN3bG93ZXIpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dlcikp IDw8IDgpIDogKChfX0lTd2xvd2VyKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3bG93ZXIp KSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPj4gMjQpKSkpLAogIF9JU3dh bHBoYSA9ICgoX19JU3dhbHBoYSkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxwaGEpKSA8 PCAyNCkgOiAoKF9fSVN3YWxwaGEpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBoYSkp IDw8IDgpIDogKChfX0lTd2FscGhhKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxwaGEp KSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPj4gMjQpKSkpLAogIF9JU3dk aWdpdCA9ICgoX19JU3dkaWdpdCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3ZGlnaXQpKSA8 PCAyNCkgOiAoKF9fSVN3ZGlnaXQpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdpdCkp IDw8IDgpIDogKChfX0lTd2RpZ2l0KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3ZGlnaXQp KSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPj4gMjQpKSkpLAogIF9JU3d4 ZGlnaXQgPSAoKF9fSVN3eGRpZ2l0KSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3d4ZGlnaXQp KSA8PCAyNCkgOiAoKF9fSVN3eGRpZ2l0KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3eGRp Z2l0KSkgPDwgOCkgOiAoKF9fSVN3eGRpZ2l0KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3 eGRpZ2l0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3d4ZGlnaXQpKSA+PiAyNCkpKSks CiAgX0lTd3NwYWNlID0gKChfX0lTd3NwYWNlKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dz cGFjZSkpIDw8IDI0KSA6ICgoX19JU3dzcGFjZSkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lT d3NwYWNlKSkgPDwgOCkgOiAoKF9fSVN3c3BhY2UpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19J U3dzcGFjZSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA+PiAyNCkpKSks CiAgX0lTd3ByaW50ID0gKChfX0lTd3ByaW50KSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dw cmludCkpIDw8IDI0KSA6ICgoX19JU3dwcmludCkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lT d3ByaW50KSkgPDwgOCkgOiAoKF9fSVN3cHJpbnQpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19J U3dwcmludCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA+PiAyNCkpKSks CiAgX0lTd2dyYXBoID0gKChfX0lTd2dyYXBoKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dn cmFwaCkpIDw8IDI0KSA6ICgoX19JU3dncmFwaCkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lT d2dyYXBoKSkgPDwgOCkgOiAoKF9fSVN3Z3JhcGgpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19J U3dncmFwaCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA+PiAyNCkpKSks CiAgX0lTd2JsYW5rID0gKChfX0lTd2JsYW5rKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3di bGFuaykpIDw8IDI0KSA6ICgoX19JU3dibGFuaykgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lT d2JsYW5rKSkgPDwgOCkgOiAoKF9fSVN3YmxhbmspIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19J U3dibGFuaykpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA+PiAyNCkpKSks CiAgX0lTd2NudHJsID0gKChfX0lTd2NudHJsKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dj bnRybCkpIDw8IDI0KSA6ICgoX19JU3djbnRybCkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lT d2NudHJsKSkgPDwgOCkgOiAoKF9fSVN3Y250cmwpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19J U3djbnRybCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA+PiAyNCkpKSks CiAgX0lTd3B1bmN0ID0gKChfX0lTd3B1bmN0KSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dw dW5jdCkpIDw8IDI0KSA6ICgoX19JU3dwdW5jdCkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lT d3B1bmN0KSkgPDwgOCkgOiAoKF9fSVN3cHVuY3QpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19J U3dwdW5jdCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA+PiAyNCkpKSks CiAgX0lTd2FsbnVtID0gKChfX0lTd2FsbnVtKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dh bG51bSkpIDw8IDI0KSA6ICgoX19JU3dhbG51bSkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lT d2FsbnVtKSkgPDwgOCkgOiAoKF9fSVN3YWxudW0pIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19J U3dhbG51bSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA+PiAyNCkpKSkK fTsKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgpleHRlcm4gaW50IGlzd2FsbnVtICh3aW50X3QgX193 YykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBpc3dhbHBoYSAod2ludF90IF9fd2MpIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgaXN3Y250cmwgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGludCBpc3dkaWdpdCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlz d2dyYXBoICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd2xvd2VyICh3 aW50X3QgX193YykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBpc3dwcmludCAod2ludF90IF9fd2Mp IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dwdW5jdCAod2ludF90IF9fd2MpIHRocm93ICgp OwoKCgoKZXh0ZXJuIGludCBpc3dzcGFjZSAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGludCBpc3d1cHBlciAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBp c3d4ZGlnaXQgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGlzd2JsYW5r ICh3aW50X3QgX193YykgdGhyb3cgKCk7CiMgMTc4ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMg NApleHRlcm4gd2N0eXBlX3Qgd2N0eXBlIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHkpIHRocm93 ICgpOwoKCgpleHRlcm4gaW50IGlzd2N0eXBlICh3aW50X3QgX193Yywgd2N0eXBlX3QgX19kZXNj KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB1bnNpZ25lZCBpbnQgKl9fY3R5cGUzMl9iOwojIDI0OSAi L3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzIDQKdHlwZWRlZiBfX2NvbnN0IF9faW50MzJfdCAqd2N0 cmFuc190OwoKCmV4dGVybiB3aW50X3QgdG93bG93ZXIgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsK CgpleHRlcm4gd2ludF90IHRvd3VwcGVyICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRl cm4gY29uc3Qgd2ludF90ICpfX2N0eXBlMzJfdG9sb3dlcjsKZXh0ZXJuIGNvbnN0IHdpbnRfdCAq X19jdHlwZTMyX3RvdXBwZXI7CiMgMjc1ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMgNAp9CiMg Mjg4ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMgNApleHRlcm4gIkMiIHsKCgoKZXh0ZXJuIHdj dHJhbnNfdCB3Y3RyYW5zIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHkpIHRocm93ICgpOwoKCmV4 dGVybiB3aW50X3QgdG93Y3RyYW5zICh3aW50X3QgX193Yywgd2N0cmFuc190IF9fZGVzYykgdGhy b3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IF9faXN3YWxudW1fbCAod2ludF90IF9fd2MsIF9fbG9j YWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgX19pc3dhbHBoYV9sICh3 aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBf X2lzd2NudHJsX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGludCBfX2lzd2RpZ2l0X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9j YWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2lzd2dyYXBoX2wgKHdpbnRfdCBfX3djLCBf X2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3dsb3dlcl9s ICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBfX2lzd3ByaW50X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBpbnQgX19pc3dwdW5jdF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBf X2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3c3BhY2VfbCAod2ludF90IF9f d2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd3Vw cGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBpbnQgX19pc3d4ZGlnaXRfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUp IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd2JsYW5rX2wgKHdpbnRfdCBfX3djLCBfX2xv Y2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjdHlwZV90IF9fd2N0eXBlX2wg KF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSwgX19sb2NhbGVfdCBfX2xvY2FsZSkKICAgICB0aHJv dyAoKTsKCgoKZXh0ZXJuIGludCBfX2lzd2N0eXBlX2wgKHdpbnRfdCBfX3djLCB3Y3R5cGVfdCBf X2Rlc2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4g d2ludF90IF9fdG93bG93ZXJfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRo cm93ICgpOwoKCmV4dGVybiB3aW50X3QgX190b3d1cHBlcl9sICh3aW50X3QgX193YywgX19sb2Nh bGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y3RyYW5zX3QgX193Y3RyYW5zX2wg KF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSwgX19sb2NhbGVfdCBfX2xvY2FsZSkKICAgICB0aHJv dyAoKTsKCgpleHRlcm4gd2ludF90IF9fdG93Y3RyYW5zX2wgKHdpbnRfdCBfX3djLCB3Y3RyYW5z X3QgX19kZXNjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2Nh bGUpIHRocm93ICgpOwoKCgp9CiMgNTMgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9p bmNsdWRlL2MrKy8zLjMvY3djdHlwZSIgMiAzCiMgNzcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvY3djdHlwZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2lu ZyA6OndpbnRfdDsKCiAgdXNpbmcgOjp3Y3R5cGVfdDsKICB1c2luZyA6OndjdHJhbnNfdDsKCiAg dXNpbmcgOjppc3dhbG51bTsKICB1c2luZyA6Omlzd2FscGhhOwogIHVzaW5nIDo6aXN3Ymxhbms7 CiAgdXNpbmcgOjppc3djbnRybDsKICB1c2luZyA6Omlzd2RpZ2l0OwogIHVzaW5nIDo6aXN3Z3Jh cGg7CiAgdXNpbmcgOjppc3dsb3dlcjsKICB1c2luZyA6Omlzd3ByaW50OwogIHVzaW5nIDo6aXN3 cHJpbnQ7CiAgdXNpbmcgOjppc3dwdW5jdDsKICB1c2luZyA6Omlzd3NwYWNlOwogIHVzaW5nIDo6 aXN3dXBwZXI7CiAgdXNpbmcgOjppc3d4ZGlnaXQ7CiAgdXNpbmcgOjppc3djdHlwZTsKICB1c2lu ZyA6OnRvd2xvd2VyOwogIHVzaW5nIDo6dG93dXBwZXI7CiAgdXNpbmcgOjp0b3djdHJhbnM7CiAg dXNpbmcgOjp3Y3RyYW5zOwogIHVzaW5nIDo6d2N0eXBlOwp9CiMgNDcgIi9ob21lL2JhbmdlcnRo L2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIg MwojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaW9z IiAxIDMKIyA0OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9fcGFk OwoKCgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMv aTY4Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9iYXNlLmgiIDEgMwojIDM2ICIvaG9tZS9iYW5n ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2k2ODYtcGMtbGludXgtZ251L2Jp dHMvY3R5cGVfYmFzZS5oIiAzCiAgc3RydWN0IGN0eXBlX2Jhc2UKICB7CgogICAgdHlwZWRlZiBj b25zdCBpbnQqIF9fdG9fdHlwZTsKCgoKICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbWFzazsK ICAgIHN0YXRpYyBjb25zdCBtYXNrIHVwcGVyID0gX0lTdXBwZXI7CiAgICBzdGF0aWMgY29uc3Qg bWFzayBsb3dlciA9IF9JU2xvd2VyOwogICAgc3RhdGljIGNvbnN0IG1hc2sgYWxwaGEgPSBfSVNh bHBoYTsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGRpZ2l0ID0gX0lTZGlnaXQ7CiAgICBzdGF0aWMg Y29uc3QgbWFzayB4ZGlnaXQgPSBfSVN4ZGlnaXQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayBzcGFj ZSA9IF9JU3NwYWNlOwogICAgc3RhdGljIGNvbnN0IG1hc2sgcHJpbnQgPSBfSVNwcmludDsKICAg IHN0YXRpYyBjb25zdCBtYXNrIGdyYXBoID0gX0lTZ3JhcGg7CiAgICBzdGF0aWMgY29uc3QgbWFz ayBjbnRybCA9IF9JU2NudHJsOwogICAgc3RhdGljIGNvbnN0IG1hc2sgcHVuY3QgPSBfSVNwdW5j dDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGFsbnVtID0gX0lTYWxudW07CiAgfTsKIyA2NCAiL2hv bWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZV9m YWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBfX2N0 eXBlX2Fic3RyYWN0X2Jhc2UgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGN0eXBlX2Jh c2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAg ICAgIGJvb2wKICAgICAgaXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX2lzKF9fbSwgX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgog ICAgICBpcyhjb25zdCBjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSAqX19oaSwgbWFz ayAqX192ZWMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbG8sIF9faGksIF9f dmVjKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBzY2FuX2lzKG1hc2sgX19tLCBj b25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9pcyhfX20sIF9fbG8sIF9faGkpOyB9CgogICAgICBjb25z dCBjaGFyX3R5cGUqCiAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9f bG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f c2Nhbl9ub3QoX19tLCBfX2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRvdXBw ZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihf X2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlICpf X2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X3RvdXBwZXIoX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0b2xvd2VyKGNo YXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19jKTsg fQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b2xvd2VyKGNoYXJfdHlwZSogX19sbywg Y29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190b2xv d2VyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgd2lkZW4oY2hhciBfX2Mp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fYyk7IH0KCiAgICAgIGNvbnN0 IGNoYXIqCiAgICAgIHdpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNo YXJfdHlwZSogX190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19sbywg X19oaSwgX190byk7IH0KCiAgICAgIGNoYXIKICAgICAgbmFycm93KGNoYXJfdHlwZSBfX2MsIGNo YXIgX19kZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25hcnJvdyhfX2MsIF9f ZGZhdWx0KTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBuYXJyb3coY29uc3QgY2hh cl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgY2hhciBf X2RmYXVsdCwgY2hhciAqX190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93 KF9fbG8sIF9faGksIF9fZGZhdWx0LCBfX3RvKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgZXhw bGljaXQKICAgICAgX19jdHlwZV9hYnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMgPSAwKTogbG9j YWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X19jdHlwZV9hYnN0 cmFjdF9iYXNlKCkgeyB9CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20s IGNoYXJfdHlwZSBfX2MpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl KgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o aSwKICAgICAgICAgICAgbWFzayogX192ZWMpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29u c3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUq IF9fbG8sCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7 CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBf X20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90 eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190 b3VwcGVyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5 cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f aGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIo Y2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAg ICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29u c3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29u c3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBj aGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLAogICAgICAgICAgICAgICBjaGFyX3R5cGUqIF9f ZGVzdCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFy X3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh cl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFy X3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0 KSBjb25zdCA9IDA7CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xh c3MgY3R5cGUgOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4KICAgIHsKICAg IHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBjdHlwZTo6bWFzayBtYXNrOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7Cgog ICAgICBleHBsaWNpdAogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCkgOiBfX2N0eXBlX2Fi c3RyYWN0X2Jhc2U8X0NoYXJUPihfX3JlZnMpIHsgfQoKICAgcHJvdGVjdGVkOgogICAgICB2aXJ0 dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sg X19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl KgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o aSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAg ICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hh cl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAg ICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFy X3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1 YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29u c3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAg IGRvX3RvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNo YXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw ZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRlbihj aGFyIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVu KGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBj b25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFy IF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBk b19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAg ICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwogICAgfTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBjdHlwZTxfQ2hhclQ+ OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGN0eXBlPGNoYXI+IDogcHVibGljIF9fY3R5 cGVfYWJzdHJhY3RfYmFzZTxjaGFyPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBj aGFyIGNoYXJfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9j YWxlX2N0eXBlOwogICAgICBib29sIF9NX2RlbDsKICAgICAgX190b190eXBlIF9NX3RvdXBwZXI7 CiAgICAgIF9fdG9fdHlwZSBfTV90b2xvd2VyOwogICAgICBjb25zdCBtYXNrKiBfTV90YWJsZTsK CiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwogICAgICBzdGF0aWMgY29u c3Qgc2l6ZV90IHRhYmxlX3NpemUgPSAxICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oLTEp OwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoY29uc3QgbWFzayogX190YWJsZSA9IDAsIGJv b2wgX19kZWwgPSBmYWxzZSwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgZXhwbGljaXQKICAg ICAgY3R5cGUoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IG1hc2sqIF9fdGFibGUgPSAwLCBib29s IF9fZGVsID0gZmFsc2UsCiAgICAgICAgICAgIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGlu bGluZSBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3Q7CgogICAgICBpbmxp bmUgY29uc3QgY2hhcioKICAgICAgaXMoY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19o aSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNj YW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0 OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25z dCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgICBwcm90ZWN0ZWQ6CiAg ICAgIGNvbnN0IG1hc2sqCiAgICAgIHRhYmxlKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVy biBfTV90YWJsZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IG1hc2sqCiAgICAgIGNsYXNzaWNfdGFi bGUoKSB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1 YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAg ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBf X2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZp cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBj aGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNo YXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBj b25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBl KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVy KGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZp cnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAg IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19s bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl CiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgog ICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5 cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNo YXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf dHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90 eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBj b25zdDsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0eXBlPGNoYXI+JgogICAgdXNl X2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7CgoKCiAgdGVtcGxhdGU8 PgogICAgY2xhc3MgY3R5cGU8d2NoYXJfdD4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNl PHdjaGFyX3Q+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90 eXBlOwogICAgICB0eXBlZGVmIHdjdHlwZV90IF9fd21hc2tfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6 CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY3R5cGU7CgogICAgcHVibGljOgoKICAgICAg c3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShzaXplX3Qg X19yZWZzID0gMCk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShfX2NfbG9jYWxlIF9fY2xv Yywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgX193bWFza190eXBl CiAgICAgIF9NX2NvbnZlcnRfdG9fd21hc2soY29uc3QgbWFzayBfX20pIGNvbnN0OwoKICAgICAg dmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyht YXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf dHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUq IF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl KgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0 IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoK ICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwg Y2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1 YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29u c3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAg IGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90 eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf X2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIp IGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBj aGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7Cgog ICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVs dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93 KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAg ICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKCiAgICB9OwoKICB0ZW1w bGF0ZTw+CiAgICBjb25zdCBjdHlwZTx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxjdHlwZTx3Y2hh cl90PiA+KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKCgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9n Y2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9p bmxpbmUuaCIgMSAzCiMgMzcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRl L2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9pbmxpbmUuaCIgMwogIGJvb2wK ICBjdHlwZTxjaGFyPjo6CiAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25zdAogIHsgcmV0dXJu IF9NX3RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldICYgX19tOyB9CgogIGNv bnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIGlzKGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBj aGFyKiBfX2hpZ2gsIG1hc2sqIF9fdmVjKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9f aGlnaCkKICAgICAgKl9fdmVjKysgPSBfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy PigqX19sb3crKyldOwogICAgcmV0dXJuIF9faGlnaDsKICB9CgogIGNvbnN0IGNoYXIqCiAgY3R5 cGU8Y2hhcj46OgogIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBj aGFyKiBfX2hpZ2gpIGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoCiAgICAgICAg ICAgJiYgIShfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3cpXSAmIF9f bSkpCiAgICAgICsrX19sb3c7CiAgICByZXR1cm4gX19sb3c7CiAgfQoKICBjb25zdCBjaGFyKgog IGN0eXBlPGNoYXI+OjoKICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNv bnN0IGNoYXIqIF9faGlnaCkgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gKICAg ICAgICAgICAmJiAoX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV0g JiBfX20pICE9IDApCiAgICAgICsrX19sb3c7CiAgICByZXR1cm4gX19sb3c7CiAgfQojIDQwMSAi L2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2Fs ZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBj dHlwZV9ieW5hbWUgOiBwdWJsaWMgY3R5cGU8X0NoYXJUPgogICAgewogICAgcHVibGljOgogICAg ICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZV9i eW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVk OgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZV9ieW5hbWUoKSB7IH07CiAgICB9OwoKCiAgdGVt cGxhdGU8PgogICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhcios IHNpemVfdCByZWZzKTsKCiAgdGVtcGxhdGU8PgogICAgY3R5cGVfYnluYW1lPHdjaGFyX3Q+Ojpj dHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzKTsKCgojIDEgIi9ob21lL2Jhbmdl cnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9jb2RlY3Z0LmgiIDEgMwoj IDQ1ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMv Y29kZWN2dC5oIiAzCgoKICBjbGFzcyBjb2RlY3Z0X2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51 bSByZXN1bHQKICAgIHsKICAgICAgb2ssCiAgICAgIHBhcnRpYWwsCiAgICAgIGVycm9yLAogICAg ICBub2NvbnYKICAgIH07CiAgfTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0 eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIF9fY29kZWN2dF9h YnN0cmFjdF9iYXNlCiAgICA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgY29kZWN2dF9i YXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0 IHJlc3VsdDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRl ZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfU3RhdGVUIHN0YXRlX3R5cGU7 CgoKICAgICAgcmVzdWx0CiAgICAgIG91dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRl cm5fdHlwZSogX19mcm9tLAogICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQs IGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICBleHRlcm5fdHlwZSog X190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3Rv X25leHQpIGNvbnN0CiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+ZG9fb3V0KF9fc3RhdGUs IF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsKICAgICAgfQoKICAgICAgcmVzdWx0CiAg ICAgIHVuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVy bl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdW5zaGlmdChfX3N0YXRlLCBfX3RvLF9fdG9f ZW5kLF9fdG9fbmV4dCk7IH0KCiAgICAgIHJlc3VsdAogICAgICBpbihzdGF0ZV90eXBlJiBfX3N0 YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICBjb25zdCBleHRlcm5fdHlw ZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAg aW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgaW50ZXJu X3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+ZG9f aW4oX19zdGF0ZSwgX19mcm9tLCBfX2Zyb21fZW5kLCBfX2Zyb21fbmV4dCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgX190bywgX190b19lbmQsIF9fdG9fbmV4dCk7CiAgICAgIH0KCiAgICAg IGludAogICAgICBlbmNvZGluZygpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ ZG9fZW5jb2RpbmcoKTsgfQoKICAgICAgYm9vbAogICAgICBhbHdheXNfbm9jb252KCkgY29uc3Qg dGhyb3coKQogICAgICB7IHJldHVybiB0aGlzLT5kb19hbHdheXNfbm9jb252KCk7IH0KCiAgICAg IGludAogICAgICBsZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJu X3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6 ZV90IF9fbWF4KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19sZW5ndGgoX19zdGF0ZSwg X19mcm9tLCBfX2VuZCwgX19tYXgpOyB9CgogICAgICBpbnQKICAgICAgbWF4X2xlbmd0aCgpIGNv bnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbWF4X2xlbmd0aCgpOyB9CgogICAg cHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZShz aXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICB2aXJ0 dWFsCiAgICAgIH5fX2NvZGVjdnRfYWJzdHJhY3RfYmFzZSgpIHsgfQoKICAgICAgdmlydHVhbCBy ZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBl KiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29u c3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBf X3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9f dG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlm dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAg ICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9 IDA7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRl LCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlw ZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAg ICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAg aW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAg ICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKSA9IDA7CgogICAgICB2aXJ0dWFsIGJvb2wK ICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCkgPSAwOwoKICAgICAgdmlydHVh bCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlw ZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXpl X3QgX19tYXgpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5n dGgoKSBjb25zdCB0aHJvdygpID0gMDsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu dGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29k ZWN2dAogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRl cm5ULCBfU3RhdGVUPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jh c2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAg ICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBz dGF0ZV90eXBlOwoKICAgIHByb3RlY3RlZDoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9j b2RlY3Z0OwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBl eHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29kZWN2 dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4gKF9fcmVmcykgeyB9 CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3Qg X19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0 KCkgeyB9CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19z dGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVy bl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAg ICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAg ICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVz dWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9f dG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSom IF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0 ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBj b25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21f bmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2Vu ZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmly dHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVh bCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmly dHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5f dHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBz aXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0 aCgpIGNvbnN0IHRocm93KCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwg dHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBsb2NhbGU6OmlkIGNvZGVj dnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBj bGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4KICAgIDogcHVibGljIF9fY29kZWN2 dF9hYnN0cmFjdF9iYXNlPGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4KICAgIHsKICAgIHB1YmxpYzoK CiAgICAgIHR5cGVkZWYgY2hhciBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyIGV4dGVy bl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgIHByb3RlY3Rl ZDoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9jb2RlY3Z0OwoKICAgIHB1YmxpYzoKICAg ICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNp emVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoX19jX2xvY2Fs ZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1 YWwKICAgICAgfmNvZGVjdnQoKTsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChz dGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAg ICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19m cm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9f dG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAg ICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBl eHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQs IGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAg ICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20s CiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5f dHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJu X3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29u c3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7 CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93 KCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYs IGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5f dHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAg ICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgogIHRlbXBsYXRlPD4KICAg IGNsYXNzIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PgogICAgOiBwdWJsaWMgX19j b2RlY3Z0X2Fic3RyYWN0X2Jhc2U8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PgogICAgewogICAg cHVibGljOgoKICAgICAgdHlwZWRlZiB3Y2hhcl90IGludGVybl90eXBlOwogICAgICB0eXBlZGVm IGNoYXIgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7Cgog ICAgcHJvdGVjdGVkOgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX2NvZGVjdnQ7CgogICAg cHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAg IGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2 dChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoK ICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAg ICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20s CiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJu X3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRl cm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkg Y29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUm IF9fc3RhdGUsCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBl KiBfX3RvX2VuZCwKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29u c3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRl LAogICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwgY29uc3QgZXh0ZXJuX3R5 cGUqIF9fZnJvbV9lbmQsCiAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9u ZXh0LAogICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2Vu ZCwKICAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZp cnR1YWwKICAgICAgaW50IGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1 YWwKICAgICAgYm9vbCBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZp cnR1YWwKICAgICAgaW50IGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJu X3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19l bmQsIHNpemVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhf bGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu dGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29k ZWN2dF9ieW5hbWUgOiBwdWJsaWMgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+ CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnRfYnluYW1lKGNv bnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogY29kZWN2dDxfSW50ZXJu VCwgX0V4dGVyblQsIF9TdGF0ZVQ+KF9fcmVmcykKICAgICAgewogICAgICAgIGlmIChfTV9jX2xv Y2FsZV9jb2RlY3Z0ICE9IF9TX2NfbG9jYWxlKQogICAgICAgICAgX1NfZGVzdHJveV9jX2xvY2Fs ZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19s b2NhbGVfY29kZWN2dCwgX19zKTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVh bAogICAgICB+Y29kZWN2dF9ieW5hbWUoKSB7IH0KICAgIH07CgoKCgojIDEgIi9ob21lL2Jhbmdl cnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0 cy9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5oIiAxIDMKIyA0NiAiL2hvbWUvYmFuZ2VydGgvYmlu L2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2NvZGVj dnRfc3BlY2lhbGl6YXRpb25zLmgiIDMKICBjbGFzcyBfX2VuY190cmFpdHMKICB7CiAgcHVibGlj OgoKCgogICAgdHlwZWRlZiBpY29udl90IF9fZGVzY190eXBlOwoKICBwcm90ZWN0ZWQ6CgoKICAg IHN0YXRpYyBjb25zdCBpbnQgX1NfbWF4X3NpemUgPSAzMjsKCiAgICBjaGFyIF9NX2ludF9lbmNb X1NfbWF4X3NpemVdOwoKICAgIGNoYXIgX01fZXh0X2VuY1tfU19tYXhfc2l6ZV07CgoKICAgIF9f ZGVzY190eXBlIF9NX2luX2Rlc2M7CgogICAgX19kZXNjX3R5cGUgX01fb3V0X2Rlc2M7CgoKICAg IGludCBfTV9leHRfYm9tOwoKCiAgICBpbnQgX01faW50X2JvbTsKCiAgcHVibGljOgogICAgZXhw bGljaXQgX19lbmNfdHJhaXRzKCkKICAgIDogX01faW5fZGVzYygwKSwgX01fb3V0X2Rlc2MoMCks IF9NX2V4dF9ib20oMCksIF9NX2ludF9ib20oMCkKICAgIHsKICAgICAgbWVtc2V0KF9NX2ludF9l bmMsIDAsIF9TX21heF9zaXplKTsKICAgICAgbWVtc2V0KF9NX2V4dF9lbmMsIDAsIF9TX21heF9z aXplKTsKICAgIH0KCiAgICBleHBsaWNpdCBfX2VuY190cmFpdHMoY29uc3QgY2hhciogX19pbnQs IGNvbnN0IGNoYXIqIF9fZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2lib20g PSAwLCBpbnQgX19lYm9tID0gMCkKICAgIDogX01faW5fZGVzYygwKSwgX01fb3V0X2Rlc2MoMCks IF9NX2V4dF9ib20oMCksIF9NX2ludF9ib20oMCkKICAgIHsKICAgICAgc3RybmNweShfTV9pbnRf ZW5jLCBfX2ludCwgX1NfbWF4X3NpemUpOwogICAgICBzdHJuY3B5KF9NX2V4dF9lbmMsIF9fZXh0 LCBfU19tYXhfc2l6ZSk7CiAgICB9CgoKCgoKCiAgICBfX2VuY190cmFpdHMoY29uc3QgX19lbmNf dHJhaXRzJiBfX29iaik6IF9NX2luX2Rlc2MoMCksIF9NX291dF9kZXNjKDApCiAgICB7CiAgICAg IHN0cm5jcHkoX01faW50X2VuYywgX19vYmouX01faW50X2VuYywgX1NfbWF4X3NpemUpOwogICAg ICBzdHJuY3B5KF9NX2V4dF9lbmMsIF9fb2JqLl9NX2V4dF9lbmMsIF9TX21heF9zaXplKTsKICAg ICAgX01fZXh0X2JvbSA9IF9fb2JqLl9NX2V4dF9ib207CiAgICAgIF9NX2ludF9ib20gPSBfX29i ai5fTV9pbnRfYm9tOwogICAgfQoKCiAgICBfX2VuY190cmFpdHMmCiAgICBvcGVyYXRvcj0oY29u c3QgX19lbmNfdHJhaXRzJiBfX29iaikKICAgIHsKICAgICAgc3RybmNweShfTV9pbnRfZW5jLCBf X29iai5fTV9pbnRfZW5jLCBfU19tYXhfc2l6ZSk7CiAgICAgIHN0cm5jcHkoX01fZXh0X2VuYywg X19vYmouX01fZXh0X2VuYywgX1NfbWF4X3NpemUpOwogICAgICBfTV9pbl9kZXNjID0gMDsKICAg ICAgX01fb3V0X2Rlc2MgPSAwOwogICAgICBfTV9leHRfYm9tID0gX19vYmouX01fZXh0X2JvbTsK ICAgICAgX01faW50X2JvbSA9IF9fb2JqLl9NX2ludF9ib207CiAgICAgIHJldHVybiAqdGhpczsK ICAgIH0KCiAgICB+X19lbmNfdHJhaXRzKCkKICAgIHsKICAgICAgX19kZXNjX3R5cGUgX19lcnIg PSByZWludGVycHJldF9jYXN0PGljb252X3Q+KC0xKTsKICAgICAgaWYgKF9NX2luX2Rlc2MgJiYg X01faW5fZGVzYyAhPSBfX2VycikKICAgICAgICBpY29udl9jbG9zZShfTV9pbl9kZXNjKTsKICAg ICAgaWYgKF9NX291dF9kZXNjICYmIF9NX291dF9kZXNjICE9IF9fZXJyKQogICAgICAgIGljb252 X2Nsb3NlKF9NX291dF9kZXNjKTsKICAgIH0KCiAgICB2b2lkCiAgICBfTV9pbml0KCkKICAgIHsK ICAgICAgY29uc3QgX19kZXNjX3R5cGUgX19lcnIgPSByZWludGVycHJldF9jYXN0PGljb252X3Q+ KC0xKTsKICAgICAgaWYgKCFfTV9pbl9kZXNjKQogICAgICAgIHsKICAgICAgICAgIF9NX2luX2Rl c2MgPSBpY29udl9vcGVuKF9NX2ludF9lbmMsIF9NX2V4dF9lbmMpOwogICAgICAgICAgaWYgKF9N X2luX2Rlc2MgPT0gX19lcnIpCiAgICAgICAgICAgIF9fdGhyb3dfcnVudGltZV9lcnJvcigiY3Jl YXRpbmcgaWNvbnYgaW5wdXQgZGVzY3JpcHRvciBmYWlsZWQuIik7CiAgICAgICAgfQogICAgICBp ZiAoIV9NX291dF9kZXNjKQogICAgICAgIHsKICAgICAgICAgIF9NX291dF9kZXNjID0gaWNvbnZf b3BlbihfTV9leHRfZW5jLCBfTV9pbnRfZW5jKTsKICAgICAgICAgIGlmIChfTV9vdXRfZGVzYyA9 PSBfX2VycikKICAgICAgICAgICAgX190aHJvd19ydW50aW1lX2Vycm9yKCJjcmVhdGluZyBpY29u diBvdXRwdXQgZGVzY3JpcHRvciBmYWlsZWQuIik7CiAgICAgICAgfQogICAgfQoKICAgIGJvb2wK ICAgIF9NX2dvb2QoKQogICAgewogICAgICBjb25zdCBfX2Rlc2NfdHlwZSBfX2VyciA9IHJlaW50 ZXJwcmV0X2Nhc3Q8aWNvbnZfdD4oLTEpOwogICAgICBib29sIF9fdGVzdCA9IF9NX2luX2Rlc2Mg JiYgX01faW5fZGVzYyAhPSBfX2VycjsKICAgICAgX190ZXN0ICY9IF9NX291dF9kZXNjICYmIF9N X291dF9kZXNjICE9IF9fZXJyOwogICAgICByZXR1cm4gX190ZXN0OwogICAgfQoKICAgIGNvbnN0 IF9fZGVzY190eXBlKgogICAgX01fZ2V0X2luX2Rlc2NyaXB0b3IoKQogICAgeyByZXR1cm4gJl9N X2luX2Rlc2M7IH0KCiAgICBjb25zdCBfX2Rlc2NfdHlwZSoKICAgIF9NX2dldF9vdXRfZGVzY3Jp cHRvcigpCiAgICB7IHJldHVybiAmX01fb3V0X2Rlc2M7IH0KCiAgICBpbnQKICAgIF9NX2dldF9l eHRlcm5hbF9ib20oKQogICAgeyByZXR1cm4gX01fZXh0X2JvbTsgfQoKICAgIGludAogICAgX01f Z2V0X2ludGVybmFsX2JvbSgpCiAgICB7IHJldHVybiBfTV9pbnRfYm9tOyB9CgogICAgY29uc3Qg Y2hhcioKICAgIF9NX2dldF9pbnRlcm5hbF9lbmMoKQogICAgeyByZXR1cm4gX01faW50X2VuYzsg fQoKICAgIGNvbnN0IGNoYXIqCiAgICBfTV9nZXRfZXh0ZXJuYWxfZW5jKCkKICAgIHsgcmV0dXJu IF9NX2V4dF9lbmM7IH0KICB9OwoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw ZW5hbWUgX0V4dGVyblQ+CiAgICBjbGFzcyBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19l bmNfdHJhaXRzPgogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQs IF9FeHRlcm5ULCBfX2VuY190cmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVm IGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRl cm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRl ZiBfX2VuY190cmFpdHMgc3RhdGVfdHlwZTsKICAgICAgdHlwZWRlZiBfX2VuY190cmFpdHM6Ol9f ZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICB0eXBlZGVmIF9fZW5jX3RyYWl0cyBfX2VuY190 eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAg Y29kZWN2dChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFz ZTxpbnRlcm5fdHlwZSwgZXh0ZXJuX3R5cGUsIHN0YXRlX3R5cGU+KF9fcmVmcykKICAgICAgeyB9 CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KF9fZW5jX3R5cGUqIF9fZW5jLCBzaXplX3Qg X19yZWZzID0gMCkKICAgICAgOiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxpbnRlcm5fdHlwZSwg ZXh0ZXJuX3R5cGUsIHN0YXRlX3R5cGU+KF9fcmVmcykKICAgICAgeyB9CgogICAgcHJvdGVjdGVk OgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9CgogICAgICB2aXJ0dWFsIHJlc3Vs dAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9f ZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBp bnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8s IGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19u ZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVf dHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJu X3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2 aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRl cm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2Vu ZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5 cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUq JiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2Rpbmco KSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2Nv bnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNv bnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAg ICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAg dmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgICB9OwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBsb2Nh bGU6OmlkCiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6aWQ7 CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVD4KICAgIGlubGluZSBzaXplX3QKICAgIF9faWNv bnZfYWRhcHRvcihzaXplX3QoKl9fZnVuYykoaWNvbnZfdCwgX1QsIHNpemVfdCosIGNoYXIqKiwg c2l6ZV90KiksCiAgICAgICAgICAgICAgICAgICAgaWNvbnZfdCBfX2NkLCBjaGFyKiogX19pbmJ1 Ziwgc2l6ZV90KiBfX2luYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgY2hhcioqIF9fb3V0YnVm LCBzaXplX3QqIF9fb3V0Ynl0ZXMpCiAgICB7IHJldHVybiBfX2Z1bmMoX19jZCwgKF9UKV9faW5i dWYsIF9faW5ieXRlcywgX19vdXRidWYsIF9fb3V0Ynl0ZXMpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGNvZGVjdnRfYmFzZTo6cmVzdWx0 CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19v dXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAg ICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBf X2Zyb21fbmV4dCwKICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9f dG9fZW5kLAogICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgewog ICAgICByZXN1bHQgX19yZXQgPSBlcnJvcjsKICAgICAgaWYgKF9fc3RhdGUuX01fZ29vZCgpKQog ICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgc3RhdGVfdHlwZTo6X19kZXNjX3R5cGUgX19kZXNj X3R5cGU7CiAgICAgICAgICBjb25zdCBfX2Rlc2NfdHlwZSogX19kZXNjID0gX19zdGF0ZS5fTV9n ZXRfb3V0X2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2ZtdWx0aXBsZSA9 IHNpemVvZihpbnRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX19mYnl0ZXMgPSBfX2ZtdWx0 aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3Rt dWx0aXBsZSA9IHNpemVvZihleHRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX190Ynl0ZXMg PSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pOwoKCgogICAgICAgICAgY2hhciogX19j dG8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3RvKTsKICAgICAgICAgIGNoYXIqIF9fY2Zy b207CiAgICAgICAgICBzaXplX3QgX19jb252OwoKCgoKCgogICAgICAgICAgaW50IF9faW50X2Jv bSA9IF9fc3RhdGUuX01fZ2V0X2ludGVybmFsX2JvbSgpOwogICAgICAgICAgaWYgKF9faW50X2Jv bSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBfX3NpemUgPSBfX2Zyb21fZW5k IC0gX19mcm9tOwogICAgICAgICAgICAgIGludGVybl90eXBlKiBfX2NmaXhlZCA9IHN0YXRpY19j YXN0PGludGVybl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoaW50ZXJuX3R5cGUpICog KF9fc2l6ZSArIDEpKSk7CiAgICAgICAgICAgICAgX19jZml4ZWRbMF0gPSBzdGF0aWNfY2FzdDxp bnRlcm5fdHlwZT4oX19pbnRfYm9tKTsKICAgICAgICAgICAgICBjaGFyX3RyYWl0czxpbnRlcm5f dHlwZT46OmNvcHkoX19jZml4ZWQgKyAxLCBfX2Zyb20sIF9fc2l6ZSk7CiAgICAgICAgICAgICAg X19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAgICAgICAgICAg ICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nmcm9tLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fZmJ5dGVzLCAmX19jdG8sICZf X3RieXRlcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAg ICAgICAgICAgIGludGVybl90eXBlKiBfX2NmaXhlZCA9IGNvbnN0X2Nhc3Q8aW50ZXJuX3R5cGUq PihfX2Zyb20pOwogICAgICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIq PihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252 LCAqX19kZXNjLCAmX19jZnJvbSwgJl9fZmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmX19jdG8sICZfX3RieXRlcyk7CiAgICAgICAgICAgIH0KCiAgICAgICAg ICBpZiAoX19jb252ICE9IHNpemVfdCgtMSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBf X2Zyb21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50ZXJuX3R5cGUqPihfX2Nmcm9t KTsKICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGV4dGVybl90eXBl Kj4oX19jdG8pOwogICAgICAgICAgICAgIF9fcmV0ID0gb2s7CiAgICAgICAgICAgIH0KICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfX2ZieXRlcyA8IF9fZm11 bHRpcGxlICogKF9fZnJvbV9lbmQgLSBfX2Zyb20pKQogICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICBfX2Zyb21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50ZXJuX3R5 cGUqPihfX2Nmcm9tKTsKICAgICAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRf Y2FzdDxleHRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAgICAgICAgICAgICAgX19yZXQgPSBwYXJ0 aWFsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg IF9fcmV0ID0gZXJyb3I7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jl dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5U PgogICAgY29kZWN2dF9iYXNlOjpyZXN1bHQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5U LCBfX2VuY190cmFpdHM+OjoKICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0 ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0 ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICB7CiAgICAgIHJlc3VsdCBfX3JldCA9IGVy cm9yOwogICAgICBpZiAoX19zdGF0ZS5fTV9nb29kKCkpCiAgICAgICAgewogICAgICAgICAgdHlw ZWRlZiBzdGF0ZV90eXBlOjpfX2Rlc2NfdHlwZSBfX2Rlc2NfdHlwZTsKICAgICAgICAgIGNvbnN0 IF9fZGVzY190eXBlKiBfX2Rlc2MgPSBfX3N0YXRlLl9NX2dldF9pbl9kZXNjcmlwdG9yKCk7CiAg ICAgICAgICBjb25zdCBzaXplX3QgX190bXVsdGlwbGUgPSBzaXplb2YoaW50ZXJuX3R5cGUpOwog ICAgICAgICAgc2l6ZV90IF9fdGxlbiA9IF9fdG11bHRpcGxlICogKF9fdG9fZW5kIC0gX190byk7 CgoKCiAgICAgICAgICBjaGFyKiBfX2N0byA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fdG8p OwogICAgICAgICAgc2l6ZV90IF9fY29udiA9IF9faWNvbnZfYWRhcHRvcihpY29udiwqX19kZXNj LCBfX251bGwsIF9fbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJl9fY3RvLCAmX190bGVuKTsKCiAgICAgICAgICBpZiAoX19jb252ICE9IHNpemVfdCgtMSkp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0 PGV4dGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgIGlmIChfX3RsZW4gPT0gX190bXVs dGlwbGUgKiAoX190b19lbmQgLSBfX3RvKSkKICAgICAgICAgICAgICAgIF9fcmV0ID0gbm9jb252 OwogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGxlbiA9PSAwKQogICAgICAgICAgICAgICAgX19y ZXQgPSBvazsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IHBhcnRp YWw7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19yZXQgPSBlcnJv cjsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgY29kZWN2dF9iYXNlOjpyZXN1bHQK ICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2lu KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAg ICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zy b21fbmV4dCwKICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19l bmQsCiAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgIHsKICAgICAg cmVzdWx0IF9fcmV0ID0gZXJyb3I7CiAgICAgIGlmIChfX3N0YXRlLl9NX2dvb2QoKSkKICAgICAg ICB7CiAgICAgICAgICB0eXBlZGVmIHN0YXRlX3R5cGU6Ol9fZGVzY190eXBlIF9fZGVzY190eXBl OwogICAgICAgICAgY29uc3QgX19kZXNjX3R5cGUqIF9fZGVzYyA9IF9fc3RhdGUuX01fZ2V0X2lu X2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2ZtdWx0aXBsZSA9IHNpemVv ZihleHRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX19mbGVuID0gX19mbXVsdGlwbGUgKiAo X19mcm9tX2VuZCAtIF9fZnJvbSk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX190bXVsdGlwbGUg PSBzaXplb2YoaW50ZXJuX3R5cGUpOwogICAgICAgICAgc2l6ZV90IF9fdGxlbiA9IF9fdG11bHRp cGxlICogKF9fdG9fZW5kIC0gX190byk7CgoKCiAgICAgICAgICBjaGFyKiBfX2N0byA9IHJlaW50 ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fdG8pOwogICAgICAgICAgY2hhciogX19jZnJvbTsKICAgICAg ICAgIHNpemVfdCBfX2NvbnY7CgoKCgoKCiAgICAgICAgICBpbnQgX19leHRfYm9tID0gX19zdGF0 ZS5fTV9nZXRfZXh0ZXJuYWxfYm9tKCk7CiAgICAgICAgICBpZiAoX19leHRfYm9tKQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSA9IF9fZnJvbV9lbmQgLSBfX2Zyb207 CiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fY2ZpeGVkID0gc3RhdGljX2Nhc3Q8ZXh0ZXJu X3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihleHRlcm5fdHlwZSkgKiAoX19zaXplICsg MSkpKTsKICAgICAgICAgICAgICBfX2NmaXhlZFswXSA9IHN0YXRpY19jYXN0PGV4dGVybl90eXBl PihfX2V4dF9ib20pOwogICAgICAgICAgICAgIGNoYXJfdHJhaXRzPGV4dGVybl90eXBlPjo6Y29w eShfX2NmaXhlZCArIDEsIF9fZnJvbSwgX19zaXplKTsKICAgICAgICAgICAgICBfX2Nmcm9tID0g cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQpOwogICAgICAgICAgICAgIF9fY29udiA9 IF9faWNvbnZfYWRhcHRvcihpY29udiwgKl9fZGVzYywgJl9fY2Zyb20sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZsZW4sICZfX2N0bywgJl9fdGxlbik7CiAgICAg ICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgIGV4dGVy bl90eXBlKiBfX2NmaXhlZCA9IGNvbnN0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2Zyb20pOwogICAg ICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CiAg ICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAmX19j ZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fZmxlbiwgJl9f Y3RvLCAmX190bGVuKTsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBpZiAoX19jb252ICE9IHNp emVfdCgtMSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2Zyb21fbmV4dCA9IHJlaW50 ZXJwcmV0X2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihfX2Nmcm9tKTsKICAgICAgICAgICAgICBf X3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGludGVybl90eXBlKj4oX19jdG8pOwogICAgICAg ICAgICAgIF9fcmV0ID0gb2s7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgewogICAgICAgICAgICAgIGlmIChfX2ZsZW4gPCBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fZnJv bV9lbmQgLSBfX2Zyb20pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2Zy b21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihfX2Nmcm9tKTsK ICAgICAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRlcm5fdHlw ZSo+KF9fY3RvKTsKICAgICAgICAgICAgICAgICAgX19yZXQgPSBwYXJ0aWFsOwogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fcmV0ID0gZXJyb3I7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgaW50CiAgICBj b2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19lbmNvZGlu ZygpIGNvbnN0IHRocm93KCkKICAgIHsKICAgICAgaW50IF9fcmV0ID0gMDsKICAgICAgaWYgKHNp emVvZihfRXh0ZXJuVCkgPD0gc2l6ZW9mKF9JbnRlcm5UKSkKICAgICAgICBfX3JldCA9IHNpemVv ZihfSW50ZXJuVCkvc2l6ZW9mKF9FeHRlcm5UKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBib29s CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19h bHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgaW50CiAgICBj b2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19sZW5ndGgo Y29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAg ICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CiAgICB7IHJl dHVybiBtaW4oX19tYXgsIHN0YXRpY19jYXN0PHNpemVfdD4oX19lbmQgLSBfX2Zyb20pKTsgfQoK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGlu dAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAgZG9f bWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIDE7IH0KIyAzNTggIi9ob21l L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9jb2RlY3Z0Lmgi IDIgMwojIDQyNiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKCiAgY2xhc3MgX19udW1fYmFzZQogIHsKICBw cm90ZWN0ZWQ6CgoKICAgIHN0YXRpYyBjb25zdCBjaGFyIF9TX2F0b21zW107CgogICAgZW51bQog ICAgewogICAgICBfTV96ZXJvLAogICAgICBfTV9lID0gX01femVybyArIDEwLAogICAgICBfTV9F ID0gX01femVybyArIDExLAogICAgICBfTV9zaXplID0gMjEgKyAxCiAgICB9OwoKCgogICAgc3Rh dGljIGJvb2wKICAgIF9TX2Zvcm1hdF9mbG9hdChjb25zdCBpb3NfYmFzZSYgX19pbywgY2hhciog X19mcHRyLCBjaGFyIF9fbW9kLAogICAgICAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX19wcmVj KTsKCgogICAgc3RhdGljIHZvaWQKICAgIF9TX2Zvcm1hdF9pbnQoY29uc3QgaW9zX2Jhc2UmIF9f aW8sIGNoYXIqIF9fZnB0ciwgY2hhciBfX21vZCwgY2hhciBfX21vZGwpOwogIH07CgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBudW1wdW5jdCA6IHB1YmxpYyBsb2NhbGU6 OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7 CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBz dGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICBwcml2YXRlOgogICAgICBjaGFyX3R5cGUgX01fZGVj aW1hbF9wb2ludDsKICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7CiAgICAgIGNvbnN0 IGNoYXIqIF9NX2dyb3VwaW5nOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX3RydWVuYW1lOwog ICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX2ZhbHNlbmFtZTsKCiAgICBwdWJsaWM6CiAgICAgIGV4 cGxpY2l0CiAgICAgIG51bXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQo X19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoKTsgfQoKICAgICAgZXhwbGlj aXQKICAgICAgbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKSA6 IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19j bG9jKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5kb19kZWNpbWFsX3BvaW50KCk7IH0KCiAgICAgIGNoYXJfdHlwZQog ICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdGhvdXNh bmRzX3NlcCgpOyB9CgogICAgICBzdHJpbmcKICAgICAgZ3JvdXBpbmcoKSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5kb19ncm91cGluZygpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICB0 cnVlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RydWVuYW1lKCk7IH0KCiAg ICAgIHN0cmluZ190eXBlCiAgICAgIGZhbHNlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmRvX2ZhbHNlbmFtZSgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg IH5udW1wdW5jdCgpOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fZGVjaW1hbF9w b2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RlY2ltYWxfcG9pbnQ7IH0KCiAgICAgIHZp cnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3Rob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJl dHVybiBfTV90aG91c2FuZHNfc2VwOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZwogICAgICBkb19n cm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2dyb3VwaW5nOyB9CgogICAgICB2aXJ0 dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX3RydWVuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4g X01fdHJ1ZW5hbWU7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fZmFsc2Vu YW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZmFsc2VuYW1lOyB9CgoKICAgICAgdm9pZAog ICAgICBfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX19udWxsKTsK ICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgbnVtcHVu Y3Q8X0NoYXJUPjo6aWQ7CgogIHRlbXBsYXRlPD4KICAgIG51bXB1bmN0PGNoYXI+Ojp+bnVtcHVu Y3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRp YWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCiAgdGVtcGxhdGU8PgogICAgbnVt cHVuY3Q8d2NoYXJfdD46On5udW1wdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBu dW1wdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xv Yyk7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBudW1wdW5jdF9ieW5h bWUgOiBwdWJsaWMgbnVtcHVuY3Q8X0NoYXJUPgogICAgewoKICAgICAgX19jX2xvY2FsZSBfTV9j X2xvY2FsZV9udW1wdW5jdDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf dHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAg ICAgIGV4cGxpY2l0CiAgICAgIG51bXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVf dCBfX3JlZnMgPSAwKQogICAgICA6IG51bXB1bmN0PF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAg ICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX251bXB1bmN0LCBfX3MpOwogICAg ICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX01fY19sb2NhbGVfbnVtcHVuY3QpOwogICAgICB9 CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1wdW5jdF9ieW5hbWUoKQog ICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QpOyB9CiAgICB9 OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFz cyBudW1fZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBfX251bV9iYXNlCiAgICB7 CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVk ZWYgX0luSXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAg IGV4cGxpY2l0CiAgICAgIG51bV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNl dChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwg aXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlJiBfX2VyciwgYm9vbCYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQo X19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAg Z2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAg ICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwg aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2ln bmVkIHNob3J0JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBf X2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRl cl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9Cgog ICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQs IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNp Z25lZCBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBf X2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0 ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyBy ZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAg ICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBp b3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWdu ZWQgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2lu LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0 KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBjb25zdAogICAgICB7IHJl dHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAg ICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlv c19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUm IF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lv LCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19p biwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90 eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg X19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2Vyciwg X192KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbCB+bnVtX2dldCgpIHsgfQoKICAg ICAgaXRlcl90eXBlCiAgICAgIF9NX2V4dHJhY3RfZmxvYXQoaXRlcl90eXBlLCBpdGVyX3R5cGUs IGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAogICAgICAgICAgICAgICAgICAgICAgIHN0 cmluZyYgX194dHJjKSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9leHRyYWN0X2lu dChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsCiAg ICAgICAgICAgICAgICAgICAgIHN0cmluZyYgX194dHJjLCBpbnQmIF9fYmFzZSkgY29uc3Q7Cgog ICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUs IGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBib29sJikgY29uc3Q7CgoKICAgICAgdmly dHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFz ZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVy X3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19i YXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCYpIGNvbnN0 OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90 eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIHVu c2lnbmVkIGludCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0 KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcmKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0 ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9z X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBsb25nJikgY29uc3Q7Cgog ICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUs IGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgdW5zaWdu ZWQgbG9uZyBsb25nJikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f Z2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBf X2VyciwKICAgICAgICAgICAgIGZsb2F0JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw ZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZG91YmxlJikgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNl JiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBkb3VibGUmKSBj b25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0 ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAg ICB2b2lkKiYpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Omlk OwojIDcyMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9i aXRzL2xvY2FsZV9mYWNldHMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX091dEl0ZXI+CiAgICBjbGFzcyBudW1fcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1 YmxpYyBfX251bV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBj aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGlj IGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBudW1fcHV0KHNpemVfdCBfX3Jl ZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg ICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgYm9v bCBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxs LCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19i YXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVy biB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBl CiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxs LAogICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt PmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAg IHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBsb25n IGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9f ZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBp b3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgdW5zaWduZWQgbG9uZyBs b25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2Zp bGwsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlv c19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVy X3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBf X2ZpbGwsCiAgICAgICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAg ICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAg ICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1 dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVmFsdWVUPgogICAgICAgIGl0ZXJfdHlwZQogICAgICAgIF9NX2NvbnZlcnRf ZmxvYXQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgX19tb2QsIF9WYWx1ZVQgX192KSBjb25zdDsKCiAgICAg IHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICAgICAgaXRlcl90eXBlCiAgICAgICAgX01f Y29udmVydF9pbnQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwK ICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fbW9kLCBjaGFyIF9fbW9kbCwgX1ZhbHVlVCBf X3YpIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX3dpZGVuX2Zsb2F0KGl0ZXJfdHlw ZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAgICAg ICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01f d2lkZW5faW50KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNo YXIqIF9fY3MsCiAgICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0OwoKICAgICAgaXRl cl90eXBlCiAgICAgIF9NX2luc2VydChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5 cGUgX19maWxsLAogICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3dzLCBpbnQgX19s ZW4pIGNvbnN0OwoKICAgICAgdmlydHVhbAogICAgICB+bnVtX3B1dCgpIHsgfTsKCiAgICAgIHZp cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90 eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAg ICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9f dikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBl LCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcpIGNvbnN0OwoKCiAg ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwg Y2hhcl90eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0 ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2Zp bGwsIHVuc2lnbmVkIGxvbmcgbG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK ICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBkb3Vi bGUgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVy X3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX192KSBjb25z dDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19i YXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgdm9pZCogX192KSBjb25zdDsKICAgIH07Cgog IHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxl OjppZCBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4KICAgIGNsYXNzIGNvbGxhdGUgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewog ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVm IGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgIHByb3RlY3RlZDoKCgogICAg ICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX2NvbGxhdGU7CgogICAgcHVibGljOgogICAgICBzdGF0 aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGUoc2l6ZV90IF9f cmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01fY19sb2Nh bGVfY29sbGF0ZSA9IF9TX2NfbG9jYWxlOyB9CgogICAgICBleHBsaWNpdAogICAgICBjb2xsYXRl KF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZh Y2V0KF9fcmVmcykKICAgICAgeyBfTV9jX2xvY2FsZV9jb2xsYXRlID0gX1NfY2xvbmVfY19sb2Nh bGUoX19jbG9jKTsgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xv MSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8y LCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jb21w YXJlKF9fbG8xLCBfX2hpMSwgX19sbzIsIF9faGkyKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAg ICAgdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25z dAogICAgICB7IHJldHVybiB0aGlzLT5kb190cmFuc2Zvcm0oX19sbywgX19oaSk7IH0KCiAgICAg IGxvbmcKICAgICAgaGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faGFzaChfX2xvLCBfX2hpKTsgfQoKCiAgICAg IGludAogICAgICBfTV9jb21wYXJlKGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNvbnN0 OwoKICAgICAgc2l6ZV90CiAgICAgIF9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hhclQq LCBzaXplX3QpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvbGxh dGUoKQogICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0ZSk7IH0K CiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwg Y29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8y LCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUK ICAgICAgZG9fdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hp KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgbG9uZwogICAgICBkb19oYXNoKGNvbnN0IF9DaGFyVCog X19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgY29sbGF0ZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBs YXRlPD4KICAgIGludAogICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiwg Y29uc3QgY2hhciopIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBzaXplX3QKICAgIGNvbGxhdGU8 Y2hhcj46Ol9NX3RyYW5zZm9ybShjaGFyKiwgY29uc3QgY2hhciosIHNpemVfdCkgY29uc3Q7CgoK ICB0ZW1wbGF0ZTw+CiAgICBpbnQKICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX2NvbXBhcmUoY29u c3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgc2l6 ZV90CiAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCosIGNvbnN0IHdj aGFyX3QqLCBzaXplX3QpIGNvbnN0OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg Y2xhc3MgY29sbGF0ZV9ieW5hbWUgOiBwdWJsaWMgY29sbGF0ZTxfQ2hhclQ+CiAgICB7CiAgICBw dWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp Y19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxh dGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogY29s bGF0ZTxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUo X01fY19sb2NhbGVfY29sbGF0ZSk7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9j YWxlX2NvbGxhdGUsIF9fcyk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwK ICAgICAgfmNvbGxhdGVfYnluYW1lKCkgeyB9CiAgICB9OwoKCiAgY2xhc3MgdGltZV9iYXNlCiAg ewogIHB1YmxpYzoKICAgIGVudW0gZGF0ZW9yZGVyIHsgbm9fb3JkZXIsIGRteSwgbWR5LCB5bWQs IHlkbSB9OwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9fdGlt ZXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5 cGVkZWYgX0NoYXJUIF9fY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hh clQ+IF9fc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCgogICAgICBz dGF0aWMgY29uc3QgX0NoYXJUKiBfU190aW1lem9uZXNbMTRdOwoKICAgIHByb3RlY3RlZDoKICAg ICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV90aW1lcHVuY3Q7CiAgICAgIGNoYXIqIF9NX25hbWVf dGltZXB1bmN0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfZm9ybWF0OwogICAgICBjb25z dCBfQ2hhclQqIF9NX2RhdGVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV90aW1l X2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIGNv bnN0IF9DaGFyVCogX01fZGF0ZV90aW1lX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9k YXRlX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbTsKICAgICAgY29u c3QgX0NoYXJUKiBfTV9wbTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbV9wbV9mb3JtYXQ7CgoK ICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXkxOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTI7 CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5MzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk0 OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5 NjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk3OwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01f ZGF5X2ExOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hMjsKICAgICAgY29uc3QgX0NoYXJU KiBfTV9kYXlfYTM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E0OwogICAgICBjb25zdCBf Q2hhclQqIF9NX2RheV9hNTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTY7CiAgICAgIGNv bnN0IF9DaGFyVCogX01fZGF5X2E3OwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwMTsK ICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDAyOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21v bnRoMDM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwNDsKICAgICAgY29uc3QgX0NoYXJU KiBfTV9tb250aDA1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDY7CiAgICAgIGNvbnN0 IF9DaGFyVCogX01fbW9udGgwNzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA4OwogICAg ICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDk7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgx MDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDExOwogICAgICBjb25zdCBfQ2hhclQqIF9N X21vbnRoMTI7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDE7CiAgICAgIGNvbnN0 IF9DaGFyVCogX01fbW9udGhfYTAyOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwMzsK ICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01f bW9udGhfYTA1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNjsKICAgICAgY29uc3Qg X0NoYXJUKiBfTV9tb250aF9hMDc7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA4Owog ICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwOTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9t b250aF9hMTA7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTExOwogICAgICBjb25zdCBf Q2hhclQqIF9NX21vbnRoX2ExMjsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9f dGltZXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZz KQogICAgICB7CiAgICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBuZXcgY2hhclsyXTsKICAgICAg ICBzdHJjcHkoX01fbmFtZV90aW1lcHVuY3QsICJDIik7CiAgICAgICAgX01faW5pdGlhbGl6ZV90 aW1lcHVuY3QoKTsKICAgICAgfQoKICAgICAgZXhwbGljaXQKICAgICAgX190aW1lcHVuY3QoX19j X2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAg IDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsKICAgICAgICBfTV9uYW1lX3RpbWVwdW5j dCA9IG5ldyBjaGFyW3N0cmxlbihfX3MpICsgMV07CiAgICAgICAgc3RyY3B5KF9NX25hbWVfdGlt ZXB1bmN0LCBfX3MpOwogICAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7CiAg ICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fcHV0KF9DaGFyVCogX19zLCBzaXplX3QgX19tYXhs ZW4sIGNvbnN0IF9DaGFyVCogX19mb3JtYXQsCiAgICAgICAgICAgICBjb25zdCB0bSogX190bSkg Y29uc3Q7CgogICAgICB2b2lkCiAgICAgIF9NX2RhdGVfZm9ybWF0cyhjb25zdCBfQ2hhclQqKiBf X2RhdGUpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgX19kYXRlWzBdID0gX01fZGF0ZV9mb3JtYXQ7 CiAgICAgICAgX19kYXRlWzFdID0gX01fZGF0ZV9lcmFfZm9ybWF0OwogICAgICB9CgogICAgICB2 b2lkCiAgICAgIF9NX3RpbWVfZm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX3RpbWUpIGNvbnN0CiAg ICAgIHsKCiAgICAgICAgX190aW1lWzBdID0gX01fdGltZV9mb3JtYXQ7CiAgICAgICAgX190aW1l WzFdID0gX01fdGltZV9lcmFfZm9ybWF0OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX2Ft cG0oY29uc3QgX0NoYXJUKiogX19hbXBtKSBjb25zdAogICAgICB7CiAgICAgICAgX19hbXBtWzBd ID0gX01fYW07CiAgICAgICAgX19hbXBtWzFdID0gX01fcG07CiAgICAgIH0KCiAgICAgIHZvaWQK ICAgICAgX01fZGF0ZV90aW1lX2Zvcm1hdHMoY29uc3QgX0NoYXJUKiogX19kdCkgY29uc3QKICAg ICAgewoKICAgICAgICBfX2R0WzBdID0gX01fZGF0ZV90aW1lX2Zvcm1hdDsKICAgICAgICBfX2R0 WzFdID0gX01fZGF0ZV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAg X01fZGF5cyhjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNvbnN0CiAgICAgIHsKICAgICAgICBfX2Rh eXNbMF0gPSBfTV9kYXkxOwogICAgICAgIF9fZGF5c1sxXSA9IF9NX2RheTI7CiAgICAgICAgX19k YXlzWzJdID0gX01fZGF5MzsKICAgICAgICBfX2RheXNbM10gPSBfTV9kYXk0OwogICAgICAgIF9f ZGF5c1s0XSA9IF9NX2RheTU7CiAgICAgICAgX19kYXlzWzVdID0gX01fZGF5NjsKICAgICAgICBf X2RheXNbNl0gPSBfTV9kYXk3OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX2RheXNfYWJi cmV2aWF0ZWQoY29uc3QgX0NoYXJUKiogX19kYXlzKSBjb25zdAogICAgICB7CiAgICAgICAgX19k YXlzWzBdID0gX01fZGF5X2ExOwogICAgICAgIF9fZGF5c1sxXSA9IF9NX2RheV9hMjsKICAgICAg ICBfX2RheXNbMl0gPSBfTV9kYXlfYTM7CiAgICAgICAgX19kYXlzWzNdID0gX01fZGF5X2E0Owog ICAgICAgIF9fZGF5c1s0XSA9IF9NX2RheV9hNTsKICAgICAgICBfX2RheXNbNV0gPSBfTV9kYXlf YTY7CiAgICAgICAgX19kYXlzWzZdID0gX01fZGF5X2E3OwogICAgICB9CgogICAgICB2b2lkCiAg ICAgIF9NX21vbnRocyhjb25zdCBfQ2hhclQqKiBfX21vbnRocykgY29uc3QKICAgICAgewogICAg ICAgIF9fbW9udGhzWzBdID0gX01fbW9udGgwMTsKICAgICAgICBfX21vbnRoc1sxXSA9IF9NX21v bnRoMDI7CiAgICAgICAgX19tb250aHNbMl0gPSBfTV9tb250aDAzOwogICAgICAgIF9fbW9udGhz WzNdID0gX01fbW9udGgwNDsKICAgICAgICBfX21vbnRoc1s0XSA9IF9NX21vbnRoMDU7CiAgICAg ICAgX19tb250aHNbNV0gPSBfTV9tb250aDA2OwogICAgICAgIF9fbW9udGhzWzZdID0gX01fbW9u dGgwNzsKICAgICAgICBfX21vbnRoc1s3XSA9IF9NX21vbnRoMDg7CiAgICAgICAgX19tb250aHNb OF0gPSBfTV9tb250aDA5OwogICAgICAgIF9fbW9udGhzWzldID0gX01fbW9udGgxMDsKICAgICAg ICBfX21vbnRoc1sxMF0gPSBfTV9tb250aDExOwogICAgICAgIF9fbW9udGhzWzExXSA9IF9NX21v bnRoMTI7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fbW9udGhzX2FiYnJldmlhdGVkKGNv bnN0IF9DaGFyVCoqIF9fbW9udGhzKSBjb25zdAogICAgICB7CiAgICAgICAgX19tb250aHNbMF0g PSBfTV9tb250aF9hMDE7CiAgICAgICAgX19tb250aHNbMV0gPSBfTV9tb250aF9hMDI7CiAgICAg ICAgX19tb250aHNbMl0gPSBfTV9tb250aF9hMDM7CiAgICAgICAgX19tb250aHNbM10gPSBfTV9t b250aF9hMDQ7CiAgICAgICAgX19tb250aHNbNF0gPSBfTV9tb250aF9hMDU7CiAgICAgICAgX19t b250aHNbNV0gPSBfTV9tb250aF9hMDY7CiAgICAgICAgX19tb250aHNbNl0gPSBfTV9tb250aF9h MDc7CiAgICAgICAgX19tb250aHNbN10gPSBfTV9tb250aF9hMDg7CiAgICAgICAgX19tb250aHNb OF0gPSBfTV9tb250aF9hMDk7CiAgICAgICAgX19tb250aHNbOV0gPSBfTV9tb250aF9hMTA7CiAg ICAgICAgX19tb250aHNbMTBdID0gX01fbW9udGhfYTExOwogICAgICAgIF9fbW9udGhzWzExXSA9 IF9NX21vbnRoX2ExMjsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg ICB+X190aW1lcHVuY3QoKQogICAgICB7CiAgICAgICAgZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1 bmN0OwogICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsK ICAgICAgfQoKCiAgICAgIHZvaWQKICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xv Y2FsZSBfX2Nsb2MgPSBfX251bGwpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgbG9jYWxlOjppZCBfX3RpbWVwdW5jdDxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4K ICAgIGNvbnN0IGNoYXIqCiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X1NfdGltZXpvbmVzWzE0XTsK CiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxp emVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAog ICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX3B1dChjaGFyKiwgc2l6ZV90LCBjb25zdCBjaGFyKiwg Y29uc3QgdG0qKSBjb25zdDsKCgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IHdjaGFyX3QqCiAgICBf X3RpbWVwdW5jdDx3Y2hhcl90Pjo6X1NfdGltZXpvbmVzWzE0XTsKCiAgdGVtcGxhdGU8PgogICAg dm9pZAogICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9f Y19sb2NhbGUgX19jbG9jKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8 d2NoYXJfdD46Ol9NX3B1dCh3Y2hhcl90Kiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90KiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG0qKSBjb25zdDsKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjb25zdCBfQ2hhclQqIF9fdGltZXB1bmN0PF9DaGFyVD46 Ol9TX3RpbWV6b25lc1sxNF07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9Jbkl0ZXI+CiAgICBjbGFzcyB0aW1lX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJs aWMgdGltZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy X3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz aWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6Omlk IGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApCiAg ICAgIDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSB7IH0KCiAgICAgIGRhdGVvcmRlcgogICAgICBk YXRlX29yZGVyKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGF0ZV9vcmRlcigpOyB9 CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3RpbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5 cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0 ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfdGlt ZShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAg ICAgIGdldF9kYXRlKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg X19pbywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X2RhdGUoX19iZWcsIF9fZW5kLCBfX2lv LCBfX2VyciwgX190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfd2Vla2RheShpdGVy X3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX2dldF93ZWVrZGF5KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9f dG0pOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19i ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+ZG9fZ2V0X21vbnRobmFtZShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsg fQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF95ZWFyKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90 eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh dGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3ll YXIoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAg ICAgIHZpcnR1YWwKICAgICAgfnRpbWVfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsIGRhdGVvcmRl cgogICAgICBkb19kYXRlX29yZGVyKCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQog ICAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh c2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0q IF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X2RhdGUo aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX2Jl ZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVy X3R5cGUKICAgICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf X2VuZCwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl JiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg ZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf X2lvLAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3Rt KSBjb25zdDsKCgogICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3RfbnVtKGl0ZXJfdHlwZSYgX19i ZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIsCiAgICAgICAgICAgICAgICAgICAg IGludCBfX21pbiwgaW50IF9fbWF4LCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsCiAgICAgICAgICAgICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlJiBfX2VycikgY29uc3Q7CgoKCiAgICAgIHZvaWQKICAgICAgX01fZXh0cmFj dF9uYW1lKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIs CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqKiBfX25hbWVzLCBzaXplX3QgX19p bmRleGxlbiwKICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vycikg Y29uc3Q7CgoKICAgICAgdm9pZAogICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoaXRlcl90eXBl JiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCkgY29uc3Q7CiAgICB9 OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2Nh bGU6OmlkIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5hbWUgOiBw dWJsaWMgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPgogICAgewogICAgcHVibGljOgoKICAgICAg dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBl OwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXpl X3QgX19yZWZzID0gMCkKICAgICAgOiB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+KF9fcmVmcykg eyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX2dldF9ieW5hbWUo KSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0 ZXI+CiAgICBjbGFzcyB0aW1lX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgdGlt ZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7 CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6 aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX3B1dChzaXplX3QgX19yZWZzID0gMCkK ICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAg cHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjb25z dCB0bSogX190bSwKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFyVCog X19lbmQpIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBp b3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGNvbnN0IHRtKiBfX3Rt LCBjaGFyIF9fZm9ybWF0LCBjaGFyIF9fbW9kID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fcHV0KF9fcywgX19pbywgX19maWxsLCBfX3RtLCBfX2Zvcm1hdCwgX19tb2QpOyB9Cgog ICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX3B1dCgpCiAgICAgIHsgfQoK ICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19i YXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB0bSogX190bSwKICAgICAgICAgICAg IGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2QpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgdGltZV9wdXQ8 X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9PdXRJdGVyPgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1lIDogcHVibGljIHRpbWVfcHV0 PF9DaGFyVCwgX091dEl0ZXI+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFy VCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhw bGljaXQKICAgICAgdGltZV9wdXRfYnluYW1lKGNvbnN0IGNoYXIqICwgc2l6ZV90IF9fcmVmcyA9 IDApCiAgICAgIDogdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4oX19yZWZzKQogICAgICB7IH07 CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX3B1dF9ieW5hbWUoKSB7 IH0KICAgIH07CgoKICBjbGFzcyBtb25leV9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0gcGFy dCB7IG5vbmUsIHNwYWNlLCBzeW1ib2wsIHNpZ24sIHZhbHVlIH07CiAgICBzdHJ1Y3QgcGF0dGVy biB7IGNoYXIgZmllbGRbNF07IH07CgogICAgc3RhdGljIGNvbnN0IHBhdHRlcm4gX1NfZGVmYXVs dF9wYXR0ZXJuOwoKCgogICAgc3RhdGljIHBhdHRlcm4KICAgIF9TX2NvbnN0cnVjdF9wYXR0ZXJu KGNoYXIgX19wcmVjZWRlcywgY2hhciBfX3NwYWNlLCBjaGFyIF9fcG9zbik7CiAgfTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlwdW5jdCA6 IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbW9uZXlfYmFzZQogICAgewogICAgcHVibGlj OgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0 cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9 IF9JbnRsOwogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICBwcml2YXRlOgogICAgICBj b25zdCBjaGFyKiBfTV9ncm91cGluZzsKICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7 CiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOwogICAgICBjb25zdCBjaGFyX3R5cGUq IF9NX2N1cnJfc3ltYm9sOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX3Bvc2l0aXZlX3NpZ247 CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fbmVnYXRpdmVfc2lnbjsKICAgICAgaW50IF9NX2Zy YWNfZGlnaXRzOwogICAgICBwYXR0ZXJuIF9NX3Bvc19mb3JtYXQ7CiAgICAgIHBhdHRlcm4gX01f bmVnX2Zvcm1hdDsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3Qo c2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5p dGlhbGl6ZV9tb25leXB1bmN0KCk7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3Qo X19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAg ICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1 bmN0KF9fY2xvYywgX19zKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIGRlY2ltYWxfcG9pbnQo KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19kZWNpbWFsX3BvaW50KCk7IH0KCiAgICAg IGNoYXJfdHlwZQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fdGhvdXNhbmRzX3NlcCgpOyB9CgogICAgICBzdHJpbmcKICAgICAgZ3JvdXBpbmcoKSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19ncm91cGluZygpOyB9CgogICAgICBzdHJpbmdf dHlwZQogICAgICBjdXJyX3N5bWJvbCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2N1 cnJfc3ltYm9sKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHBvc2l0aXZlX3NpZ24oKSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wb3NpdGl2ZV9zaWduKCk7IH0KCiAgICAgIHN0 cmluZ190eXBlCiAgICAgIG5lZ2F0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5kb19uZWdhdGl2ZV9zaWduKCk7IH0KCiAgICAgIGludAogICAgICBmcmFjX2RpZ2l0cygpIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2ZyYWNfZGlnaXRzKCk7IH0KCiAgICAgIHBhdHRl cm4KICAgICAgcG9zX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bvc19m b3JtYXQoKTsgfQoKICAgICAgcGF0dGVybgogICAgICBuZWdfZm9ybWF0KCkgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fbmVnX2Zvcm1hdCgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2 aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0KCk7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAg ICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGVjaW1hbF9wb2lu dDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdGhvdXNhbmRzX3NlcCgpIGNv bnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0KCiAgICAgIHZpcnR1YWwgc3Ry aW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZ3JvdXBpbmc7 IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fY3Vycl9zeW1ib2woKSBjb25z dAogICAgICB7IHJldHVybiBfTV9jdXJyX3N5bWJvbDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdf dHlwZQogICAgICBkb19wb3NpdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fcG9z aXRpdmVfc2lnbjsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19uZWdhdGl2 ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fbmVnYXRpdmVfc2lnbjsgfQoKICAgICAg dmlydHVhbCBpbnQKICAgICAgZG9fZnJhY19kaWdpdHMoKSBjb25zdAogICAgICB7IHJldHVybiBf TV9mcmFjX2RpZ2l0czsgfQoKICAgICAgdmlydHVhbCBwYXR0ZXJuCiAgICAgIGRvX3Bvc19mb3Jt YXQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9wb3NfZm9ybWF0OyB9CgogICAgICB2aXJ0dWFs IHBhdHRlcm4KICAgICAgZG9fbmVnX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX25l Z19mb3JtYXQ7IH0KCgogICAgICAgdm9pZAogICAgICAgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0 KF9fY19sb2NhbGUgX19jbG9jID0gX19udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIqIF9fbmFtZSA9IF9fbnVsbCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBsb2NhbGU6OmlkIG1vbmV5cHVuY3Q8X0NoYXJU LCBfSW50bD46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAg ICBjb25zdCBib29sIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmludGw7CgogIHRlbXBsYXRl PD4KICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRl PD4KICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpOwoKICB0ZW1wbGF0 ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+OjpfTV9pbml0aWFsaXplX21v bmV5cHVuY3QoX19jX2xvY2FsZSwgY29uc3QgY2hhciopOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lk CiAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9f Y19sb2NhbGUsIGNvbnN0IGNoYXIqKTsKCgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8d2No YXJfdCwgdHJ1ZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8 d2NoYXJfdCwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAg ICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19j X2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyKik7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG1vbmV5cHVu Y3Q8d2NoYXJfdCwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciopOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgog ICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWUgOiBwdWJsaWMgbW9uZXlwdW5jdDxfQ2hhclQsIF9J bnRsPgogICAgewogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX21vbmV5cHVuY3Q7CgogICAg cHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz aWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp bnRsID0gX0ludGw7CgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0X2J5bmFtZShjb25z dCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IG1vbmV5cHVuY3Q8X0NoYXJU LCBfSW50bD4oX19yZWZzKQogICAgICB7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2Nf bG9jYWxlX21vbmV5cHVuY3QsIF9fcyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0 KF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2 aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0X2J5bmFtZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xv Y2FsZShfTV9jX2xvY2FsZV9tb25leXB1bmN0KTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0X2J5bmFtZTxf Q2hhclQsIF9JbnRsPjo6aW50bDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfSW5JdGVyPgogICAgY2xhc3MgbW9uZXlfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAg IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw ZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJU PiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGlj aXQKICAgICAgbW9uZXlfZ2V0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19y ZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90 eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdAogICAgICB7IHJl dHVybiB0aGlzLT5kb19nZXQoX19zLCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2VyciwgX191bml0 cyk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBl IF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIsIHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgICAgeyByZXR1 cm4gdGhpcy0+ZG9fZ2V0KF9fcywgX19lbmQsIF9faW50bCwgX19pbywgX19lcnIsIF9fZGlnaXRz KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlfZ2V0KCkgeyB9 CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRl cl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5 cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdDsKICAgIH07 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2Fs ZTo6aWQgbW9uZXlfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgbW9uZXlfcHV0IDogcHVibGlj IGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh cl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBi YXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6Omlk IGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlfcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6 IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRl cl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgY2hhcl90 eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9fdW5pdHMpOyB9CgogICAgICBp dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYg X19pbywKICAgICAgICAgIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHN0cmluZ190eXBlJiBfX2Rp Z2l0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lv LCBfX2ZpbGwsIF9fZGlnaXRzKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg ICB+bW9uZXlfcHV0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQo aXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19m aWxsLAogICAgICAgICAgICAgbG9uZyBkb3VibGUgX191bml0cykgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlv c19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgICAgY29uc3Qgc3RyaW5n X3R5cGUmIF9fZGlnaXRzKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X3B1dDxfQ2hhclQsIF9P dXRJdGVyPjo6aWQ7CgoKICBzdHJ1Y3QgbWVzc2FnZXNfYmFzZQogIHsKICAgIHR5cGVkZWYgaW50 IGNhdGFsb2c7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVz c2FnZXMgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIG1lc3NhZ2VzX2Jhc2UKICAgIHsK ICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRl ZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgoKICAg ICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9tZXNzYWdlczsKCgogICAgICBjaGFyKiBfTV9uYW1l X21lc3NhZ2VzOwoKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAg ICAgZXhwbGljaXQKICAgICAgbWVzc2FnZXMoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9j YWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsKICAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gbmV3 IGNoYXJbMl07CiAgICAgICAgc3RyY3B5KF9NX25hbWVfbWVzc2FnZXMsICJDIik7CiAgICAgICAg X01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jX2xvY2FsZTsKICAgICAgfQoKCiAgICAgIGV4cGxp Y2l0CiAgICAgIG1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIHNp emVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7CiAg ICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IG5ldyBjaGFyW3N0cmxlbihfX3MpICsgMV07CiAgICAg ICAgc3RyY3B5KF9NX25hbWVfbWVzc2FnZXMsIF9fcyk7CiAgICAgICAgX01fY19sb2NhbGVfbWVz c2FnZXMgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOwogICAgICB9CgogICAgICBjYXRhbG9n CiAgICAgIG9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYg X19sb2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7IH0K CgogICAgICBjYXRhbG9nCiAgICAgIG9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiwgY29u c3QgbG9jYWxlJiwgY29uc3QgY2hhciopIGNvbnN0OwoKICAgICAgc3RyaW5nX3R5cGUKICAgICAg Z2V0KGNhdGFsb2cgX19jLCBpbnQgX19zZXQsIGludCBfX21zZ2lkLCBjb25zdCBzdHJpbmdfdHlw ZSYgX19zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19jLCBfX3NldCwgX19t c2dpZCwgX19zKTsgfQoKICAgICAgdm9pZAogICAgICBjbG9zZShjYXRhbG9nIF9fYykgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fY2xvc2UoX19jKTsgfQoKICAgIHByb3RlY3RlZDoKICAg ICAgdmlydHVhbAogICAgICB+bWVzc2FnZXMoKQogICAgICAgewogICAgICAgICBkZWxldGUgW10g X01fbmFtZV9tZXNzYWdlczsKICAgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2Fs ZV9tZXNzYWdlcyk7CiAgICAgICB9CgogICAgICB2aXJ0dWFsIGNhdGFsb2cKICAgICAgZG9fb3Bl bihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdDsKCiAgICAg IHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25z dCBzdHJpbmdfdHlwZSYgX19kZmF1bHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCB2b2lkCiAgICAg IGRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0OwoKCiAgICAgIGNoYXIqCiAgICAgIF9NX2NvbnZlcnRf dG9fY2hhcihjb25zdCBzdHJpbmdfdHlwZSYgX19tc2cpIGNvbnN0CiAgICAgIHsKCiAgICAgICAg cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19tc2cu Y19zdHIoKSkpOwogICAgICB9CgoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgX01fY29udmVydF9m cm9tX2NoYXIoY2hhciogX19tc2cpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgc2l6ZV90IF9fbGVu ID0gY2hhcl90cmFpdHM8Y2hhcj46Omxlbmd0aChfX21zZykgLSAxOwojIDE3MzYgIi9ob21lL2Jh bmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRz LmgiIDMKICAgICAgICByZXR1cm4gc3RyaW5nX3R5cGUoKTsKICAgICAgfQogICAgIH07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgbWVzc2FnZXM8X0NoYXJUPjo6 aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJpbmcKICAgIG1lc3NhZ2VzPGNoYXI+Ojpkb19nZXQo Y2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZyYpIGNvbnN0OwoKCiAgdGVtcGxhdGU8Pgog ICAgd3N0cmluZwogICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX2dldChjYXRhbG9nLCBpbnQsIGlu dCwgY29uc3Qgd3N0cmluZyYpIGNvbnN0OwoKCgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9tZXNzYWdlc19t ZW1iZXJzLmgiIDEgMwojIDM3ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk ZS9jKysvMy4zL2k2ODYtcGMtbGludXgtZ251L2JpdHMvbWVzc2FnZXNfbWVtYmVycy5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6 Y2F0YWxvZwogICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hh cj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciogX19kaXIpIGNvbnN0CiAgICB7CiAgICAgIGJpbmR0ZXh0ZG9tYWluKF9fcy5j X3N0cigpLCBfX2Rpcik7CiAgICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBtZXNzYWdlczxf Q2hhclQ+OjpjYXRhbG9nCiAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19vcGVuKGNvbnN0IGJhc2lj X3N0cmluZzxjaGFyPiYgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBs b2NhbGUmKSBjb25zdAogICAgewoKCiAgICAgIHRleHRkb21haW4oX19zLmNfc3RyKCkpOwogICAg ICByZXR1cm4gMDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdm9pZAog ICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fY2xvc2UoY2F0YWxvZykgY29uc3QKICAgIHsgfQojIDE3 NTYgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9s b2NhbGVfZmFjZXRzLmgiIDIgMwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFz cyBtZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVzc2FnZXM8X0NoYXJUPgogICAgewogICAgcHVi bGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf c3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBtZXNzYWdl c19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBtZXNz YWdlczxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAgICAgIGRlbGV0ZSBbXSBfTV9uYW1lX21l c3NhZ2VzOwogICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBuZXcgY2hhcltzdHJsZW4oX19zKSAr IDFdOwogICAgICAgIHN0cmNweShfTV9uYW1lX21lc3NhZ2VzLCBfX3MpOwogICAgICAgIF9TX2Rl c3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOwogICAgICAgIF9TX2NyZWF0ZV9j X2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsKICAgICAgfQoKICAgIHByb3RlY3Rl ZDoKICAgICAgdmlydHVhbAogICAgICB+bWVzc2FnZXNfYnluYW1lKCkKICAgICAgeyB9CiAgICB9 OwoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp c3NwYWNlKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2Vf ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwcmlu dChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0 PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6cHJpbnQsIF9fYyk7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzY250cmwoX0No YXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlw ZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmNudHJsLCBfX2MpOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3VwcGVyKF9DaGFyVCBf X2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0No YXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjp1cHBlciwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbCBpc2xvd2VyKF9DaGFyVCBfX2MsIGNvbnN0 IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f bG9jKS5pcyhjdHlwZV9iYXNlOjpsb3dlciwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbHBoYShfQ2hhclQgX19jLCBjb25zdCBsb2Nh bGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku aXMoY3R5cGVfYmFzZTo6YWxwaGEsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgaW5saW5lIGJvb2wKICAgIGlzZGlnaXQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBf X2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0 eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg IGlubGluZSBib29sCiAgICBpc3B1bmN0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2Mp CiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9i YXNlOjpwdW5jdCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxp bmUgYm9vbAogICAgaXN4ZGlnaXQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAg IHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6 OnhkaWdpdCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg Ym9vbAogICAgaXNhbG51bShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyBy ZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6YWxu dW0sIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK ICAgIGlzZ3JhcGgoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJu IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmdyYXBoLCBf X2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAg IHRvdXBwZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVz ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLnRvdXBwZXIoX19jKTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b2xvd2VyKF9DaGFyVCBf X2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0No YXJUPiA+KF9fbG9jKS50b2xvd2VyKF9fYyk7IH0KfQojIDQyICIvaG9tZS9iYW5nZXJ0aC9iaW4v Z2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwoKbmFtZXNw YWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGNsYXNzIGJhc2ljX2lvcyA6IHB1YmxpYyBpb3NfYmFzZQogICAgewogICAgcHVibGljOgoK ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9U cmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6 OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90 eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAg dHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBvc3RyZWFt YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5 cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBlOwog ICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJl YW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0 ZXI+IF9fbnVtZ2V0X3R5cGU7CgoKICAgIHByb3RlY3RlZDoKICAgICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+KiBfTV90aWU7CiAgICAgIG11dGFibGUgY2hhcl90eXBlIF9NX2ZpbGw7 CiAgICAgIG11dGFibGUgYm9vbCBfTV9maWxsX2luaXQ7CiAgICAgIGJhc2ljX3N0cmVhbWJ1Zjxf Q2hhclQsIF9UcmFpdHM+KiBfTV9zdHJlYW1idWY7CgoKICAgICAgY29uc3QgX19jdHlwZV90eXBl KiBfTV9mY3R5cGU7CgogICAgICBjb25zdCBfX251bXB1dF90eXBlKiBfTV9mbnVtcHV0OwoKICAg ICAgY29uc3QgX19udW1nZXRfdHlwZSogX01fZm51bWdldDsKCiAgICBwdWJsaWM6CiAgICAgIG9w ZXJhdG9yIHZvaWQqKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpID8gMCA6IGNv bnN0X2Nhc3Q8YmFzaWNfaW9zKj4odGhpcyk7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3Ih KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpOyB9CgogICAgICBpb3N0YXRlCiAg ICAgIHJkc3RhdGUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWZfc3RhdGU7IH0K CiAgICAgIHZvaWQKICAgICAgY2xlYXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29vZGJpdCk7CgogICAg ICB2b2lkCiAgICAgIHNldHN0YXRlKGlvc3RhdGUgX19zdGF0ZSkKICAgICAgeyB0aGlzLT5jbGVh cih0aGlzLT5yZHN0YXRlKCkgfCBfX3N0YXRlKTsgfQoKICAgICAgYm9vbAogICAgICBnb29kKCkg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmRzdGF0ZSgpID09IDA7IH0KCiAgICAgIGJvb2wK ICAgICAgZW9mKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGVvZmJp dCkgIT0gMDsgfQoKICAgICAgYm9vbAogICAgICBmYWlsKCkgY29uc3QKICAgICAgeyByZXR1cm4g KHRoaXMtPnJkc3RhdGUoKSAmIChiYWRiaXQgfCBmYWlsYml0KSkgIT0gMDsgfQoKICAgICAgYm9v bAogICAgICBiYWQoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgYmFk Yml0KSAhPSAwOyB9CgogICAgICBpb3N0YXRlCiAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdAogICAg ICB7IHJldHVybiBfTV9leGNlcHRpb247IH0KCiAgICAgIHZvaWQKICAgICAgZXhjZXB0aW9ucyhp b3N0YXRlIF9fZXhjZXB0KQogICAgICB7CiAgICAgICAgX01fZXhjZXB0aW9uID0gX19leGNlcHQ7 CiAgICAgICAgdGhpcy0+Y2xlYXIoX01fc3RyZWFtYnVmX3N0YXRlKTsKICAgICAgfQoKCiAgICAg IGV4cGxpY2l0CiAgICAgIGJhc2ljX2lvcyhiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz PiogX19zYikgOiBpb3NfYmFzZSgpCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQoKICAgICAg dmlydHVhbAogICAgICB+YmFzaWNfaW9zKCkgeyB9CgoKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+KgogICAgICB0aWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aWU7IH0K CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiogX190aWVzdHIpCiAgICAgIHsKICAgICAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fdGllOwogICAgICAgIF9NX3RpZSA9 IF9fdGllc3RyOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKICAgICAgYmFzaWNfc3Ry ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAgeyByZXR1 cm4gX01fc3RyZWFtYnVmOyB9CgogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz PioKICAgICAgcmRidWYoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoK ICAgICAgYmFzaWNfaW9zJgogICAgICBjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19yaHMpOwoK ICAgICAgY2hhcl90eXBlCiAgICAgIGZpbGwoKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKCFf TV9maWxsX2luaXQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX2ZpbGwgPSB0aGlzLT53aWRl bignICcpOwogICAgICAgICAgICBfTV9maWxsX2luaXQgPSB0cnVlOwogICAgICAgICAgfQogICAg ICAgIHJldHVybiBfTV9maWxsOwogICAgICB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZmlsbChj aGFyX3R5cGUgX19jaCkKICAgICAgewogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IHRoaXMtPmZp bGwoKTsKICAgICAgICBfTV9maWxsID0gX19jaDsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAg IH0KCgogICAgICBsb2NhbGUKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAg ICBjaGFyCiAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsK CiAgICAgIGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3Q7CgogICAgcHJvdGVj dGVkOgoKICAgICAgYmFzaWNfaW9zKCkgOiBpb3NfYmFzZSgpCiAgICAgIHsgfQoKICAgICAgdm9p ZAogICAgICBpbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsKCiAg ICAgIGJvb2wKICAgICAgX01fY2hlY2tfZmFjZXQoY29uc3QgbG9jYWxlOjpmYWNldCogX19mKSBj b25zdAogICAgICB7CiAgICAgICAgaWYgKCFfX2YpCiAgICAgICAgICBfX3Rocm93X2JhZF9jYXN0 KCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fY2Fj aGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpOwogICAgfTsKfQoKCgojIDEgIi9ob21lL2Jh bmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9iYXNpY19pb3MudGNj IiAxIDMKIyAzNCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu My9iaXRzL2Jhc2ljX2lvcy50Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2lvczxfQ2hh clQsIF9UcmFpdHM+OjpjbGVhcihpb3N0YXRlIF9fc3RhdGUpCiAgICB7CiAgICAgIGlmICh0aGlz LT5yZGJ1ZigpKQogICAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc3RhdGU7CiAgICAgIGVs c2UKICAgICAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc3RhdGUgfCBiYWRiaXQ7CiAgICAg IGlmICgodGhpcy0+cmRzdGF0ZSgpICYgdGhpcy0+ZXhjZXB0aW9ucygpKSkKICAgICAgICBfX3Ro cm93X2lvc19mYWlsdXJlKCJiYXNpY19pb3M6OmNsZWFyKGlvc3RhdGUpIGNhdXNlZCBleGNlcHRp b24iKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAgICBiYXNpY19pb3M8X0No YXJULCBfVHJhaXRzPjo6cmRidWYoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9f c2IpCiAgICB7CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX29sZCA9 IF9NX3N0cmVhbWJ1ZjsKICAgICAgX01fc3RyZWFtYnVmID0gX19zYjsKICAgICAgdGhpcy0+Y2xl YXIoKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYKICAg IGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojpjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19y aHMpCiAgICB7CgoKCgogICAgICBfV29yZHMqIF9fd29yZHMgPSAoX19yaHMuX01fd29yZF9zaXpl IDw9IF9TX2xvY2FsX3dvcmRfc2l6ZSkgPwogICAgICAgIF9NX2xvY2FsX3dvcmQgOiBuZXcgX1dv cmRzW19fcmhzLl9NX3dvcmRfc2l6ZV07CgoKICAgICAgX0NhbGxiYWNrX2xpc3QqIF9fY2IgPSBf X3Jocy5fTV9jYWxsYmFja3M7CiAgICAgIGlmIChfX2NiKQogICAgICAgIF9fY2ItPl9NX2FkZF9y ZWZlcmVuY2UoKTsKICAgICAgX01fY2FsbF9jYWxsYmFja3MoZXJhc2VfZXZlbnQpOwogICAgICBp ZiAoX01fd29yZCAhPSBfTV9sb2NhbF93b3JkKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSBb XSBfTV93b3JkOwogICAgICAgICAgX01fd29yZCA9IDA7CiAgICAgICAgfQogICAgICBfTV9kaXNw b3NlX2NhbGxiYWNrcygpOwoKICAgICAgX01fY2FsbGJhY2tzID0gX19jYjsKICAgICAgZm9yIChp bnQgX19pID0gMDsgX19pIDwgX19yaHMuX01fd29yZF9zaXplOyArK19faSkKICAgICAgICBfX3dv cmRzW19faV0gPSBfX3Jocy5fTV93b3JkW19faV07CiAgICAgIGlmIChfTV93b3JkICE9IF9NX2xv Y2FsX3dvcmQpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIFtdIF9NX3dvcmQ7CiAgICAgICAg ICBfTV93b3JkID0gMDsKICAgICAgICB9CiAgICAgIF9NX3dvcmQgPSBfX3dvcmRzOwogICAgICBf TV93b3JkX3NpemUgPSBfX3Jocy5fTV93b3JkX3NpemU7CgogICAgICB0aGlzLT5mbGFncyhfX3Jo cy5mbGFncygpKTsKICAgICAgdGhpcy0+d2lkdGgoX19yaHMud2lkdGgoKSk7CiAgICAgIHRoaXMt PnByZWNpc2lvbihfX3Jocy5wcmVjaXNpb24oKSk7CiAgICAgIHRoaXMtPnRpZShfX3Jocy50aWUo KSk7CiAgICAgIHRoaXMtPmZpbGwoX19yaHMuZmlsbCgpKTsKCiAgICAgIHRoaXMtPmV4Y2VwdGlv bnMoX19yaHMuZXhjZXB0aW9ucygpKTsKCiAgICAgIF9NX2NhbGxfY2FsbGJhY2tzKGNvcHlmbXRf ZXZlbnQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNoYXIKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9U cmFpdHM+OjpuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QKICAgIHsK ICAgICAgY2hhciBfX3JldCA9IF9fZGZhdWx0OwogICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01f ZmN0eXBlKSkKICAgICAgICBfX3JldCA9IF9NX2ZjdHlwZS0+bmFycm93KF9fYywgX19kZmF1bHQp OwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIF9DaGFyVAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0 cz46OndpZGVuKGNoYXIgX19jKSBjb25zdAogICAgewogICAgICBjaGFyX3R5cGUgX19yZXQgPSBj aGFyX3R5cGUoKTsKICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZjdHlwZSkpCiAgICAgICAg X19yZXQgPSBfTV9mY3R5cGUtPndpZGVuKF9fYyk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0K CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGxvY2Fs ZQogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmltYnVlKGNvbnN0IGxvY2FsZSYgX19s b2MpCiAgICB7CiAgICAgIGxvY2FsZSBfX29sZCh0aGlzLT5nZXRsb2MoKSk7CiAgICAgIGlvc19i YXNlOjppbWJ1ZShfX2xvYyk7CiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhfX2xvYyk7CiAgICAgIGlm ICh0aGlzLT5yZGJ1ZigpICE9IDApCiAgICAgICAgdGhpcy0+cmRidWYoKS0+cHViaW1idWUoX19s b2MpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFp dHM+Ojppbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKQogICAgewoK ICAgICAgaW9zX2Jhc2U6Ol9NX2luaXQoKTsKICAgICAgX01fY2FjaGVfZmFjZXRzKF9NX2lvc19s b2NhbGUpOwogICAgICBfTV90aWUgPSAwOwojIDE1OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z LjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Jhc2ljX2lvcy50Y2MiIDMKICAgICAgX01fZmls bCA9IF9DaGFyVCgpOwogICAgICBfTV9maWxsX2luaXQgPSBmYWxzZTsKCiAgICAgIF9NX2V4Y2Vw dGlvbiA9IGdvb2RiaXQ7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9fc2I7CiAgICAgIF9NX3N0cmVh bWJ1Zl9zdGF0ZSA9IF9fc2IgPyBnb29kYml0IDogYmFkYml0OwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19pb3M8 X0NoYXJULCBfVHJhaXRzPjo6X01fY2FjaGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAg ICB7CiAgICAgIGlmIChoYXNfZmFjZXQ8X19jdHlwZV90eXBlPihfX2xvYykpCiAgICAgICAgX01f ZmN0eXBlID0gJnVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9fbG9jKTsKICAgICAgZWxzZQogICAg ICAgIF9NX2ZjdHlwZSA9IDA7CgogICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9f bG9jKSkKICAgICAgICBfTV9mbnVtcHV0ID0gJnVzZV9mYWNldDxfX251bXB1dF90eXBlPihfX2xv Yyk7CiAgICAgIGVsc2UKICAgICAgICBfTV9mbnVtcHV0ID0gMDsKICAgICAgaWYgKGhhc19mYWNl dDxfX251bWdldF90eXBlPihfX2xvYykpCiAgICAgICAgX01fZm51bWdldCA9ICZ1c2VfZmFjZXQ8 X19udW1nZXRfdHlwZT4oX19sb2MpOwogICAgICBlbHNlCiAgICAgICAgX01fZm51bWdldCA9IDA7 CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pb3M8Y2hhcj47CiAgZXh0 ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lvczx3Y2hhcl90PjsKfQojIDIwOCAiL2hvbWUvYmFu Z2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Jhc2ljX2lvcy5oIiAy IDMKIyA1MiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9p b3MiIDIgMwojIDQ2ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysv My4zL29zdHJlYW0iIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW0gOiB2aXJ0dWFs IHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAg ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFp dHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBv c190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBl IG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlw ZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwog ICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAg IHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwog ICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX29zdHJl YW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0 ZXI+IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5 cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfb3N0cmVhbShfX3N0cmVhbWJ1Zl90eXBl KiBfX3NiKQogICAgICB7IHRoaXMtPmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAg fmJhc2ljX29zdHJlYW0oKSB7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBj bGFzcyBzZW50cnk7CgoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KF9f b3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0cmVhbV90eXBlJikpOwoKICAgICAgX19vc3RyZWFt X3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikp OwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19w ZikgKGlvc19iYXNlJikpOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8 KGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2ln bmVkIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGJv b2wgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHNob3J0IF9f bikKICAgICAgewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdz KCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpv Y3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJh dG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX19uKSkpOwogICAgICAgIGVs c2UKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9f bikpOwogICAgICB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNp Z25lZCBzaG9ydCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nh c3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv cGVyYXRvcjw8KGludCBfX24pCiAgICAgIHsKICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19m bXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICBpZiAoX19m bXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAgIHJl dHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX24p KSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGlj X2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv cGVyYXRvcjw8KHVuc2lnbmVkIGludCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9y PDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCgogICAgICBfX29zdHJlYW1f dHlwZSYKICAgICAgb3BlcmF0b3I8PChsb25nIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90 eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24pOwoKCiAgICAgIF9f b3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGRvdWJsZSBfX2YpOwoKICAgICAgX19vc3Ry ZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoZmxvYXQgX19mKQogICAgICB7IHJldHVybiB0aGlz LT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7IH0KCiAgICAgIF9fb3N0cmVh bV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fZik7CgogICAgICBfX29zdHJl YW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX3ApOwoKICAgICAgX19vc3Ry ZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYik7CgoKICAg ICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHB1dChjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9fb3N0 cmVhbV90eXBlJgogICAgICB3cml0ZShjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf X24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIGZsdXNoKCk7CgoKICAgICAgcG9zX3R5 cGUKICAgICAgdGVsbHAoKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBzZWVrcChwb3Nf dHlwZSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgc2Vla3Aob2ZmX3R5cGUsIGlvc19i YXNlOjpzZWVrZGlyKTsKICAgIH07CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpz ZW50cnkKICAgIHsKCiAgICAgIGJvb2wgX01fb2s7CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LF9UcmFpdHM+JiBfTV9vczsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIHNlbnRy eShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcyk7CgogICAgICB+c2VudHJ5KCkK ICAgICAgewoKICAgICAgICBpZiAoX01fb3MuZmxhZ3MoKSAmIGlvc19iYXNlOjp1bml0YnVmICYm ICF1bmNhdWdodF9leGNlcHRpb24oKSkKICAgICAgICAgIHsKCiAgICAgICAgICAgIGlmIChfTV9v cy5yZGJ1ZigpICYmIF9NX29zLnJkYnVmKCktPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAg ICBfTV9vcy5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgIH0KICAgICAgfQoK ICAgICAgb3BlcmF0b3IgYm9vbCgpCiAgICAgIHsgcmV0dXJuIF9NX29rOyB9CiAgICB9OwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYgX19vdXQsIF9DaGFyVCBfX2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNo YXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IF9fb3V0LndpZGVuKF9fYykpOyB9CgoKICB0 ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4m CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFy IF9fYyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFy LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYg X19vdXQsIHNpZ25lZCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2Fz dDxjaGFyPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0 cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBf VHJhaXRzPiYgX19vdXQsIHVuc2lnbmVkIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8 IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg IG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3Qg X0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChi YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpOwoK CiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0 cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBj b25zdCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29z dHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwg X1RyYWl0cz4mIF9fb3V0LCBjb25zdCBzaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9f b3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRl PGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ICYKICAgIG9w ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHVuc2ln bmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX291dCA8PCByZWludGVycHJldF9jYXN0PGNv bnN0IGNoYXIqPihfX3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZW5kbChi YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBmbHVzaChf X29zLnB1dChfX29zLndpZGVuKCdcbicpKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog ICAgZW5kcyhiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVy biBfX29zLnB1dChfQ2hhclQoKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZmx1 c2goYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4gX19v cy5mbHVzaCgpOyB9Cgp9CgoKCgoKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUv aW5jbHVkZS9jKysvMy4zL2JpdHMvb3N0cmVhbS50Y2MiIDEgMwojIDM2ICIvaG9tZS9iYW5nZXJ0 aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvb3N0cmVhbS50Y2MiIDMKCiMg MSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9sb2NhbGUi IDEgMwojIDQzICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4z L2xvY2FsZSIgMwoKCgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRl L2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMSAzCiMgMzcgIi9ob21lL2JhbmdlcnRo L2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIg MwoKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Nl cnJubyIgMSAzCiMgNDcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr Ky8zLjMvY2Vycm5vIiAzCgojIDEgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAxIDMgNAojIDMyICIv dXNyL2luY2x1ZGUvZXJybm8uaCIgMyA0CmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL2Vycm5vLmgiIDEgMyA0CiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMg NAojIDEgIi91c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIiAxIDMgNAoKCgojIDEgIi91c3IvaW5j bHVkZS9hc20vZXJybm8uaCIgMSAzIDQKIyA1ICIvdXNyL2luY2x1ZGUvbGludXgvZXJybm8uaCIg MiAzIDQKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMiAzIDQKIyAzNiAiL3Vzci9p bmNsdWRlL2JpdHMvZXJybm8uaCIgMyA0CmV4dGVybiBpbnQgZXJybm87CgoKZXh0ZXJuIGludCAq X19lcnJub19sb2NhdGlvbiAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwojIDM3ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMiAzIDQKIyA1NSAiL3Vzci9pbmNsdWRl L2Vycm5vLmgiIDMgNApleHRlcm4gY2hhciAqcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUsICpwcm9n cmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsKCgoKfQojIDY5ICIvdXNyL2luY2x1ZGUvZXJybm8u aCIgMyA0CnR5cGVkZWYgaW50IGVycm9yX3Q7CiMgNDkgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvY2Vycm5vIiAyIDMKIyAzOSAiL2hvbWUvYmFuZ2VydGgv YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAy IDMKCgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMv Y21hdGgiIDEgMwojIDQ4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j KysvMy4zL2NtYXRoIiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMSAzIDQKIyAyOSAi L3Vzci9pbmNsdWRlL21hdGguaCIgMyA0CmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL2h1Z2VfdmFsLmgiIDEgMyA0CiMgMzQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMyA0 CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbmFuLmgiIDEgMyA0CiMgMzggIi91c3IvaW5jbHVk ZS9tYXRoLmgiIDIgMyA0CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDEgMyA0 CiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMyA0CnR5cGVkZWYgbG9uZyBkb3Vi bGUgZmxvYXRfdDsKCnR5cGVkZWYgbG9uZyBkb3VibGUgZG91YmxlX3Q7CiMgNDEgIi91c3IvaW5j bHVkZS9tYXRoLmgiIDIgMyA0CiMgNjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMgNAojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMgNAojIDU0ICIvdXNyL2luY2x1ZGUvYml0 cy9tYXRoY2FsbHMuaCIgMyA0CmV4dGVybiBkb3VibGUgYWNvcyAoZG91YmxlIF9feCkgdGhyb3cg KCk7IGV4dGVybiBkb3VibGUgX19hY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBk b3VibGUgYXNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hc2luIChk b3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbiAoZG91YmxlIF9feCkgdGhy b3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVy biBkb3VibGUgYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVy biBkb3VibGUgY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NvcyAo ZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHNpbiAoZG91YmxlIF9feCkgdGhy b3cgKCk7IGV4dGVybiBkb3VibGUgX19zaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu IGRvdWJsZSB0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGFuIChk b3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zIChkb3VibGUgX194LCBk b3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3Np bmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAo KTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGRvdWJsZSBfX2Nvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW5o IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbmggKGRvdWJsZSBfX3gp IHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX3RhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91Ymxl IGFjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3NoIChkb3Vi bGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIHRocm93 ICgpOyBleHRlcm4gZG91YmxlIF9fYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu IGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFu aCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBleHAgKGRvdWJsZSBf X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwIChkb3VibGUgX194KSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGRvdWJsZSBleHAxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi bGUgX19leHAxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHBvdzEwIChk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3BvdzEwIChkb3VibGUgX194KSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBmcmV4cCAoZG91YmxlIF9feCwgaW50ICpfX2V4cG9u ZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZyZXhwIChkb3VibGUgX194LCBpbnQgKl9f ZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbGRleHAgKGRvdWJsZSBfX3gsIGlu dCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xkZXhwIChkb3VibGUgX194 LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cgKGRvdWJsZSBf X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nIChkb3VibGUgX194KSB0aHJvdyAoKTsK CgpleHRlcm4gZG91YmxlIGxvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs ZSBfX2xvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG1vZGYgKGRv dWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX21vZGYg KGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBl eHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHBtMSAoZG91Ymxl IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxcCAoZG91YmxlIF9feCkgdGhyb3cg KCk7IGV4dGVybiBkb3VibGUgX19sb2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJu IGRvdWJsZSBsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZ2Ig KGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBleHAyIChkb3VibGUgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cDIgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoK CmV4dGVybiBkb3VibGUgbG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg X19sb2cyIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBwb3cgKGRv dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93IChkb3Vi bGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIHNxcnQgKGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc3FydCAoZG91YmxlIF9feCkgdGhyb3cg KCk7CgoKCmV4dGVybiBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93 ICgpOyBleHRlcm4gZG91YmxlIF9faHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBjYnJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGRvdWJsZSBfX2NicnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91Ymxl IGNlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY2VpbCAoZG91Ymxl IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmYWJzIChkb3VibGUgX194KSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19mYWJzIChkb3Vi bGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRv dWJsZSBmbG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbG9vciAo ZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbW9kIChkb3VibGUgX194LCBk b3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKGRvdWJsZSBfX3gsIGRv dWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUgX192YWx1 ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19m aW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlIChkb3VibGUgX192YWx1 ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUg ZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19k cmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBz aWduaWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaWduaWZp Y2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGNvcHlzaWduIChk b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7IGV4dGVybiBkb3VibGUgX19jb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJsZSBuYW4g KF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7IGV4dGVybiBkb3VibGUgX19uYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW4gKGRvdWJs ZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVy biBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX2owIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGoxIChkb3VibGUpIHRo cm93ICgpOyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3Vi bGUgam4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2puIChpbnQsIGRv dWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy biBkb3VibGUgX195MCAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5MSAoZG91Ymxl KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4g ZG91YmxlIHluIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195biAoaW50 LCBkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUpIHRocm93 ICgpOyBleHRlcm4gZG91YmxlIF9fZXJmIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91Ymxl IGVyZmMgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19lcmZjIChkb3VibGUpIHRo cm93ICgpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX2xnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSB0Z2FtbWEg KGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190Z2FtbWEgKGRvdWJsZSkgdGhyb3cg KCk7CgoKCgpleHRlcm4gZG91YmxlIGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91 YmxlIF9fZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgbGdhbW1h X3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xn YW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBk b3VibGUgcmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yaW50IChk b3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG5leHRhZnRlciAoZG91YmxlIF9f eCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl cm4gZG91YmxlIF9fbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZG91YmxlIG5leHR0b3dhcmQgKGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dHRvd2FyZCAoZG91YmxlIF9feCwgbG9uZyBkb3Vi bGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBk b3VibGUgcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJu IGRvdWJsZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoK CmV4dGVybiBkb3VibGUgc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgpOyBl eHRlcm4gZG91YmxlIF9fc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgpOwoK CgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOyBl eHRlcm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGludCBpbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9n YiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibG4gKGRvdWJs ZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2FsYmxuIChk b3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIG5lYXJi eWludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19uZWFyYnlpbnQgKGRv dWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHJvdW5kIChkb3VibGUgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGRvdWJsZSB0cnVuYyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fdHJ1bmMgKGRvdWJsZSBfX3gpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBkb3VibGUgcmVtcXVvIChk b3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs ZSBfX3JlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7 CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy biBsb25nIGludCBfX2xyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9u ZyBpbnQgbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQg X19sbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5k IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kIChkb3VibGUg X194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZCAoZG91YmxlIF9feCkg dGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZCAoZG91YmxlIF9feCkgdGhy b3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhy b3cgKCk7IGV4dGVybiBkb3VibGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv dyAoKTsKCgpleHRlcm4gZG91YmxlIGZtYXggKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93 ICgpOyBleHRlcm4gZG91YmxlIF9fZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cg KCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWluIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAo KTsgZXh0ZXJuIGRvdWJsZSBfX2ZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgp OwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeSAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAg ICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0IChk b3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKCmV4dGVybiBkb3VibGUgZm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196 KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYSAoZG91YmxlIF9feCwgZG91YmxlIF9feSwg ZG91YmxlIF9feikgdGhyb3cgKCk7CiMgNjQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMyA0CiMg ODIgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhj YWxscy5oIiAxIDMgNAojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMyA0CmV4 dGVybiBmbG9hdCBhY29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYWNv c2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXNpbmYgKGZsb2F0IF9feCkg dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2FzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0 ZXJuIGZsb2F0IGF0YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFu ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhdGFuMmYgKGZsb2F0IF9feSwg ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbjJmIChmbG9hdCBfX3ksIGZs b2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGNvc2YgKGZsb2F0IF9feCkgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX2Nvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxv YXQgc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2luZiAoZmxvYXQg X194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB0YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBl eHRlcm4gZmxvYXQgX190YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBz aW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0ICpfX2Nvc3gpIHRocm93ICgp OyBleHRlcm4gdm9pZCBfX3NpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxvYXQg Kl9fY29zeCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBjb3NoZiAoZmxvYXQgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRl cm4gZmxvYXQgc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Npbmhm IChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHRhbmhmIChmbG9hdCBfX3gpIHRo cm93ICgpOyBleHRlcm4gZmxvYXQgX190YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYWNv c2hmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5oZiAoZmxvYXQgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoK ZXh0ZXJuIGZsb2F0IGF0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f YXRhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBmbG9hdCBleHBmIChmbG9h dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBmIChmbG9hdCBfX3gpIHRocm93ICgp OwoKCgpleHRlcm4gZmxvYXQgZXhwMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxv YXQgX19leHAxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgcG93MTBmIChm bG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19wb3cxMGYgKGZsb2F0IF9feCkgdGhy b3cgKCk7CgoKCmV4dGVybiBmbG9hdCBmcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50 KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBv bmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoZmxvYXQgX194LCBpbnQgX19l eHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xkZXhwZiAoZmxvYXQgX194LCBpbnQg X19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2YgKGZsb2F0IF9feCkgdGhy b3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZ2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJu IGZsb2F0IGxvZzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMTBm IChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBtb2RmZiAoZmxvYXQgX194LCBm bG9hdCAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbW9kZmYgKGZsb2F0IF9feCwg ZmxvYXQgKl9faXB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBleHBtMWYgKGZsb2F0IF9f eCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cG0xZiAoZmxvYXQgX194KSB0aHJvdyAoKTsK CgpleHRlcm4gZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg X19sb2cxcGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2JmIChmbG9h dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2diZiAoZmxvYXQgX194KSB0aHJvdyAo KTsKCgoKCmV4dGVybiBmbG9hdCBleHAyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs b2F0IF9fZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzJmIChm bG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cyZiAoZmxvYXQgX194KSB0aHJv dyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IHBvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJv dyAoKTsgZXh0ZXJuIGZsb2F0IF9fcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgp OwoKCmV4dGVybiBmbG9hdCBzcXJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0 IF9fc3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBoeXBvdGYgKGZs b2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9faHlwb3RmIChmbG9h dCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgY2JydGYgKGZsb2F0 IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2NicnRmIChmbG9hdCBfX3gpIHRocm93ICgp OwoKCgoKCgpleHRlcm4gZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm bG9hdCBfX2NlaWxmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmYWJzZiAo ZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBm bG9hdCBfX2ZhYnNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgpleHRlcm4gZmxvYXQgZmxvb3JmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4g ZmxvYXQgX19mbG9vcmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtb2Rm IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Ztb2RmIChm bG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXNpbmZmIChm bG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0 ZXJuIGludCBfX2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmZmIChmbG9hdCBfX3ZhbHVlKSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVmIChm bG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0 ZXJuIGZsb2F0IGRyZW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBm bG9hdCBfX2RyZW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBm bG9hdCBzaWduaWZpY2FuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Np Z25pZmljYW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBjb3B5c2ln bmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7IGV4dGVybiBmbG9hdCBfX2NvcHlzaWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBmbG9hdCBuYW5m IChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOyBleHRlcm4gZmxvYXQgX19uYW5mIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBfX2lzbmFuZiAoZmxv YXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRl cm4gaW50IGlzbmFuZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBqMGYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZs b2F0IF9fajBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBqMWYgKGZsb2F0KSB0aHJv dyAoKTsgZXh0ZXJuIGZsb2F0IF9fajFmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBq bmYgKGludCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19qbmYgKGludCwgZmxvYXQp IHRocm93ICgpOwpleHRlcm4gZmxvYXQgeTBmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h dCBfX3kwZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgeTFmIChmbG9hdCkgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX3kxZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgeW5m IChpbnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feW5mIChpbnQsIGZsb2F0KSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZXJmZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4g ZmxvYXQgX19lcmZmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBlcmZjZiAoZmxvYXQp IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19lcmZjZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4g ZmxvYXQgbGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZ2FtbWFmIChm bG9hdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCB0Z2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7 IGV4dGVybiBmbG9hdCBfX3RnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9h dCBnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZ2FtbWFmIChmbG9hdCkg dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBsZ2FtbWFmX3IgKGZsb2F0LCBpbnQgKl9fc2ln bmdhbXApIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZ2FtbWFmX3IgKGZsb2F0LCBpbnQgKl9f c2lnbmdhbXApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgcmludGYgKGZsb2F0IF9feCkg dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4 dGVybiBmbG9hdCBuZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19uZXh0YWZ0ZXJmIChmbG9h dCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK ZXh0ZXJuIGZsb2F0IG5leHR0b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19uZXh0dG93 YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGZsb2F0IHJlbWFpbmRlcmYgKGZsb2F0IF9feCwgZmxv YXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmVtYWluZGVyZiAoZmxvYXQgX194LCBm bG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc2NhbGJmIChmbG9hdCBfX3gsIGZs b2F0IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NjYWxiZiAoZmxvYXQgX194LCBmbG9h dCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IHNjYWxibmYgKGZsb2F0IF9feCwgaW50 IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NjYWxibmYgKGZsb2F0IF9feCwgaW50IF9f bikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl eHRlcm4gaW50IF9faWxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0 IHNjYWxibG5mIChmbG9hdCBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9h dCBfX3NjYWxibG5mIChmbG9hdCBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVy biBmbG9hdCBuZWFyYnlpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19u ZWFyYnlpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgcm91bmRmIChm bG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yb3VuZGYgKGZsb2F0IF9feCkgdGhy b3cgKCk7CgoKCmV4dGVybiBmbG9hdCB0cnVuY2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX190cnVuY2YgKGZsb2F0IF9feCkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGZsb2F0IHJl bXF1b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJu IGZsb2F0IF9fcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIHRocm93 ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl eHRlcm4gbG9uZyBpbnQgX19scmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25n IGxvbmcgaW50IGxscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcg aW50IF9fbGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxy b3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyb3VuZGYgKGZs b2F0IF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmRmIChmbG9hdCBf X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmRmIChmbG9hdCBfX3gp IHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0 aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJv dyAoKTsKCgpleHRlcm4gZmxvYXQgZm1heGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAo KTsgZXh0ZXJuIGZsb2F0IF9fZm1heGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsK CgpleHRlcm4gZmxvYXQgZm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0 ZXJuIGZsb2F0IF9fZm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGludCBfX2ZwY2xhc3NpZnlmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdGYgKGZsb2F0IF9f dmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRl cm4gZmxvYXQgZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikgdGhyb3cgKCk7 IGV4dGVybiBmbG9hdCBfX2ZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opIHRo cm93ICgpOwojIDgzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMgNAojIDk5ICIvdXNyL2luY2x1 ZGUvbWF0aC5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzIDQK IyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMgNApleHRlcm4gbG9uZyBkb3Vi bGUgYWNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf X2Fjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFz aW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2lu bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFubCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmwgKGxv bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbjJsIChsb25n IGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK CmV4dGVybiBsb25nIGRvdWJsZSBjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gbG9uZyBkb3VibGUgX19jb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu IGxvbmcgZG91YmxlIHNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n IGRvdWJsZSBfX3NpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBk b3VibGUgdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29z bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19j b3N4KSB0aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19zaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxv bmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpl eHRlcm4gbG9uZyBkb3VibGUgY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX2Nvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu IGxvbmcgZG91YmxlIHNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u ZyBkb3VibGUgX19zaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25n IGRvdWJsZSB0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRv dWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2Fjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJs ZSBhc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf X2FzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBh dGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0 YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUg ZXhwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhw bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDEw bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMTBs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvdzEwbCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93MTBsIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZnJleHBsIChs b25nIGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv dWJsZSBfX2ZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgp OwoKCmV4dGVybiBsb25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhw b25lbnQpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZGV4cGwgKGxvbmcgZG91Ymxl IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2ds IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxMGwgKGxv bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzEwbCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbW9kZmwgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv dWJsZSBfX21vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93 ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzFwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp OwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK CgpleHRlcm4gbG9uZyBkb3VibGUgZXhwMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2V4cDJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4 dGVybiBsb25nIGRvdWJsZSBsb2cybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fbG9nMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiBsb25nIGRvdWJsZSBwb3dsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKGxvbmcg ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRv dWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf X2h5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGNicnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gbG9uZyBkb3VibGUgX19jYnJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gbG9uZyBkb3VibGUgX19jZWlsbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRl cm4gbG9uZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mYWJzbCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxv bmcgZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25n IGRvdWJsZSBmbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgp OyBleHRlcm4gbG9uZyBkb3VibGUgX19mbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs ZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mbCAobG9uZyBkb3VibGUgX192 YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQg X19maW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRl bCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv dWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19kcmVtbCAobG9uZyBkb3Vi bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUg c2lnbmlmaWNhbmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19zaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g bG9uZyBkb3VibGUgY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUg X19jb3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbmFubCAo X19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmFubCAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19pc25hbmwg KGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgoKZXh0ZXJuIGludCBpc25hbmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgajBsIChsb25n IGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2owbCAobG9uZyBkb3VibGUp IHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgajFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2oxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4g bG9uZyBkb3VibGUgam5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fam5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91 YmxlIHkwbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MGwg KGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHkxbCAobG9uZyBkb3Vi bGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MWwgKGxvbmcgZG91YmxlKSB0aHJv dyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX3lubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoK CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fZXJmbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBk b3VibGUgZXJmY2wgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f ZXJmY2wgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWwg KGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbCAobG9u ZyBkb3VibGUpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgdGdhbW1hbCAobG9uZyBk b3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190Z2FtbWFsIChsb25nIGRvdWJs ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZ2FtbWFsIChsb25nIGRvdWJsZSkg dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2dhbW1hbCAobG9uZyBkb3VibGUpIHRocm93 ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbF9yIChsb25nIGRvdWJsZSwgaW50 ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbF9yIChs b25nIGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcg ZG91YmxlIHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19yaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3Vi bGUgbmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dGFm dGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0dG93YXJkbCAobG9u ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dHRvd2FyZGwgKGxvbmcgZG91Ymxl IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1haW5kZXJsIChsb25nIGRvdWJsZSBfX3gsIGxv bmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JlbWFpbmRlcmwg KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxv bmcgZG91YmxlIHNjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRocm93 ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk b3VibGUgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYm5sIChsb25n IGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2Fs Ym5sIChsb25nIGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGls b2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2dibCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYmxubCAo bG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19zY2FsYmxubCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoK CgpleHRlcm4gbG9uZyBkb3VibGUgbmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgdHJ1bmNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdHJ1 bmNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1xdW9sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg ZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Jl bXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJv dyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp OwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp OyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCk7CgoKCmV4dGVybiBsb25nIGludCBscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp OyBleHRlcm4gbG9uZyBpbnQgX19scm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwpl eHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZkaW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91 YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZkaW1sIChsb25nIGRvdWJs ZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZt YXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBs b25nIGRvdWJsZSBfX2ZtYXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhy b3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtaW5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg ZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtaW5sIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19mcGNs YXNzaWZ5bCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRsIChsb25nIGRvdWJsZSBfX3Zh bHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJu IGxvbmcgZG91YmxlIGZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBsb25n IGRvdWJsZSBfX3opIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWFsIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KSB0aHJvdyAoKTsKIyAx MDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMyA0CiMgMTEzICIvdXNyL2luY2x1ZGUvbWF0aC5o IiAzIDQKZXh0ZXJuIGludCBzaWduZ2FtOwojIDE1NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMyA0 CmVudW0KICB7CiAgICBGUF9OQU4sCgogICAgRlBfSU5GSU5JVEUsCgogICAgRlBfWkVSTywKCiAg ICBGUF9TVUJOT1JNQUwsCgogICAgRlBfTk9STUFMCgogIH07CiMgMjQwICIvdXNyL2luY2x1ZGUv bWF0aC5oIiAzIDQKdHlwZWRlZiBlbnVtCnsKICBfSUVFRV8gPSAtMSwKICBfU1ZJRF8sCiAgX1hP UEVOXywKICBfUE9TSVhfLAogIF9JU09DXwp9IF9MSUJfVkVSU0lPTl9UWVBFOwoKCgoKZXh0ZXJu IF9MSUJfVkVSU0lPTl9UWVBFIF9MSUJfVkVSU0lPTjsKIyAyNjMgIi91c3IvaW5jbHVkZS9tYXRo LmgiIDMgNApzdHJ1Y3QgX19leGNlcHRpb24KCgoKICB7CiAgICBpbnQgdHlwZTsKICAgIGNoYXIg Km5hbWU7CiAgICBkb3VibGUgYXJnMTsKICAgIGRvdWJsZSBhcmcyOwogICAgZG91YmxlIHJldHZh bDsKICB9OwoKCmV4dGVybiBpbnQgbWF0aGVyciAoc3RydWN0IF9fZXhjZXB0aW9uICpfX2V4Yykg dGhyb3cgKCk7CiMgMzUwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzIDQKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy9tYXRoaW5saW5lLmgiIDEgMyA0CiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRo aW5saW5lLmgiIDMgNApfX2lubGluZSBpbnQKX19zaWduYml0ZiAoZmxvYXQgX194KSB0aHJvdyAo KQp7CiAgX19leHRlbnNpb25fXyB1bmlvbiB7IGZsb2F0IF9fZjsgaW50IF9faTsgfSBfX3UgPSB7 IF9fZjogX194IH07CiAgcmV0dXJuIF9fdS5fX2kgPCAwOwp9Cl9faW5saW5lIGludApfX3NpZ25i aXQgKGRvdWJsZSBfX3gpIHRocm93ICgpCnsKICBfX2V4dGVuc2lvbl9fIHVuaW9uIHsgZG91Ymxl IF9fZDsgaW50IF9faVsyXTsgfSBfX3UgPSB7IF9fZDogX194IH07CiAgcmV0dXJuIF9fdS5fX2lb MV0gPCAwOwp9Cl9faW5saW5lIGludApfX3NpZ25iaXRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpCnsKICBfX2V4dGVuc2lvbl9fIHVuaW9uIHsgbG9uZyBkb3VibGUgX19sOyBpbnQgX19pWzNd OyB9IF9fdSA9IHsgX19sOiBfX3ggfTsKICByZXR1cm4gKF9fdS5fX2lbMl0gJiAweDgwMDApICE9 IDA7Cn0KIyAyOTEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMyA0Cl9faW5saW5l IGRvdWJsZSBfX3NnbiAoZG91YmxlKSB0aHJvdyAoKTsgX19pbmxpbmUgZG91YmxlIF9fc2duIChk b3VibGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAu MCA/IDEuMCA6IC0xLjApOyB9IF9faW5saW5lIGZsb2F0IF9fc2duZiAoZmxvYXQpIHRocm93ICgp OyBfX2lubGluZSBmbG9hdCBfX3NnbmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX194 ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfSBfX2lubGluZSBsb25n IGRvdWJsZSBfX3NnbmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgX19pbmxpbmUgbG9uZyBkb3Vi bGUgX19zZ25sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9feCA9PSAwLjAg PyAwLjAgOiAoX194ID4gMC4wID8gMS4wIDogLTEuMCk7IH0KIyA0MjUgIi91c3IvaW5jbHVkZS9i aXRzL21hdGhpbmxpbmUuaCIgMyA0Cl9faW5saW5lIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwg ZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2Fz bSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1 IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBhdGFu MmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6 ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5s aW5lIGxvbmcgZG91YmxlIGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gp IHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGls ZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAi c3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KX19pbmxpbmUgbG9uZyBkb3VibGUgX19hdGFuMmwg KGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxv bmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChf X3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVl OyB9CgoKX19pbmxpbmUgZG91YmxlIGZtb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93 ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgi MToJZnByZW1cblx0IiAiZm5zdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQi IChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImF4IiwgImNjIik7IHJldHVybiBf X3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhy b3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18g KCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9 dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJu IF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwg bG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7 IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInNh aGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6 ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfQojIDQ0MCAiL3Vzci9pbmNsdWRlL2JpdHMv bWF0aGlubGluZS5oIiAzIDQKX19pbmxpbmUgZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIHRocm93 ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3Fy dCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19p bmxpbmUgZmxvYXQgc3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBmbG9hdCBf X3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDog IjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIHNxcnRs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1 bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAo X194KSk7IHJldHVybiBfX3Jlc3VsdDsgfQpfX2lubGluZSBsb25nIGRvdWJsZSBfX3NxcnRsIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7 IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194 KSk7IHJldHVybiBfX3Jlc3VsdDsgfQoKCl9faW5saW5lIGRvdWJsZSBmYWJzIChkb3VibGUgX194 KSB0aHJvdyAoKSB7IHJldHVybiBfX2J1aWx0aW5fZmFicyAoX194KTsgfQpfX2lubGluZSBmbG9h dCBmYWJzZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YgKF9f eCk7IH0KX19pbmxpbmUgbG9uZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsIChfX3gpOyB9Cl9faW5saW5lIGxvbmcgZG91Ymxl IF9fZmFic2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX19idWlsdGluX2Zh YnNsIChfX3gpOyB9CiMgNDY2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMgNApf X2lubGluZSBkb3VibGUgYXRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3Vi bGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChf X3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5s aW5lIGZsb2F0IGF0YW5mIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgZmxvYXQgX19y ZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3Vs dCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGxv bmcgZG91YmxlIGF0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9u ZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZDE7IGZwYXRhbiIgOiAi PXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9 CgpfX2lubGluZSBsb25nIGRvdWJsZSBfX3NnbjFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IF9f aW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyBf X2V4dGVuc2lvbl9fIHVuaW9uIHsgbG9uZyBkb3VibGUgX194bGQ7IHVuc2lnbmVkIGludCBfX3hp WzNdOyB9IF9fbiA9IHsgX194bGQ6IF9feCB9OyBfX24uX194aVsyXSA9IChfX24uX194aVsyXSAm IDB4ODAwMCkgfCAweDNmZmY7IF9fbi5fX3hpWzFdID0gMHg4MDAwMDAwMDsgX19uLl9feGlbMF0g PSAwOyByZXR1cm4gX19uLl9feGxkOyB9CiMgNDkyICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5s aW5lLmgiIDMgNApfX2lubGluZSBkb3VibGUgZmxvb3IgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBp bnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192 b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4 ZjNmZikgfCAweDA0MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19j d3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIw IiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyBy ZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCkgdGhyb3cg KCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNo b3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2Fz bSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3 ICYgMHhmM2ZmKSB8IDB4MDQwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0i IChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUp IDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3 KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGZsb29ybCAobG9uZyBk b3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9s YXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQg aW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykp OyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3ZvbGF0aWxlICgi ZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQi IDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cg JTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1MDMgIi91c3IvaW5jbHVk ZS9iaXRzL21hdGhpbmxpbmUuaCIgMyA0Cl9faW5saW5lIGRvdWJsZSBjZWlsIChkb3VibGUgX194 KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5z aWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0 bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1w ID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAi IDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAo X192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAi bSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgY2VpbGYgKGZsb2F0 IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxl IHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBf X2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19j d3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3 ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9 dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6 IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGNl aWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192 YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNp Z25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAi PW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4MDA7IF9fYXNtIF9f dm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxl ICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRp bGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfQojIDUyMSAi L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzIDQKX19pbmxpbmUgZG91YmxlCmxkZXhw IChkb3VibGUgX194LCBpbnQgX195KSB0aHJvdyAoKQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUg X192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDog IjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195KSk7IHJldHVybiBfX3ZhbHVlOwp9CiMg NTM5ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMgNApfX2lubGluZSBkb3VibGUg bG9nMXAgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1 ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4 MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAo ImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIg KF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgbG9nMXBm IChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYg KF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9f dmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxu MlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkg OiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nMXBs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1 ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4 MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAo ImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIg KF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1NTMgIi91c3IvaW5jbHVkZS9i aXRzL21hdGhpbmxpbmUuaCIgMyA0Cl9faW5saW5lIGRvdWJsZSBhc2luaCAoZG91YmxlIF9feCkg dGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1 cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjAp ICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9IF9faW5saW5lIGZsb2F0IGFzaW5oZiAoZmxvYXQg X194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7 IHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195ICsgMS4wKSAr IDEuMCkgKyBfX3kpICogX19zZ24xbCAoX194KSk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgYXNp bmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195 ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIChsb2cxcGwgKF9feSAqIF9feSAvIChfX3NxcnRsIChf X3kgKiBfX3kgKyAxLjApICsgMS4wKSArIF9feSkgKiBfX3NnbjFsIChfX3gpKTsgfQoKCgoKX19p bmxpbmUgZG91YmxlIGFjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBsb2dsIChf X3ggKyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0gX19pbmxp bmUgZmxvYXQgYWNvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmV0dXJuIGxvZ2wgKF9feCAr IF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3ggKyAxLjApKTsgfSBfX2lubGluZSBs b25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gbG9n bCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkpOyB9CgoK X19pbmxpbmUgZG91YmxlIGF0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxv bmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9f eSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gpOyB9IF9faW5saW5lIGZsb2F0 IGF0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9 IF9fZmFic2wgKF9feCk7IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4w ICsgX195KSkgKiBfX3NnbjFsIChfX3gpOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW5obCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9f ZmFic2wgKF9feCk7IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsg X195KSkgKiBfX3NnbjFsIChfX3gpOyB9CgoKCgpfX2lubGluZSBkb3VibGUgaHlwb3QgKGRvdWJs ZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCAr IF9feSAqIF9feSk7IH0gX19pbmxpbmUgZmxvYXQgaHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9f eSkgdGhyb3cgKCkgeyByZXR1cm4gX19zcXJ0bCAoX194ICogX194ICsgX195ICogX195KTsgfSBf X2lubGluZSBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195KSB0aHJvdyAoKSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpOyB9 CgpfX2lubGluZSBkb3VibGUgbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBs b25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2p1bms7IF9fYXNtIF9f dm9sYXRpbGVfXyAoImZ4dHJhY3Rcblx0IiA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUp IDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgbG9nYmYgKGZs b2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3Rl ciBsb25nIGRvdWJsZSBfX2p1bms7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZ4dHJhY3Rcblx0IiA6 ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFs dWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBf X2p1bms7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZ4dHJhY3Rcblx0IiA6ICI9dCIgKF9fanVuayks ICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1ODMgIi91 c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMyA0Cl9faW5saW5lIGZsb2F0CmxkZXhwZiAo ZmxvYXQgX194LCBpbnQgX195KSB0aHJvdyAoKQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192 YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAi IChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195KSk7IHJldHVybiBfX3ZhbHVlOwp9CgpfX2lu bGluZSBsb25nIGRvdWJsZQpsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9feSkgdGhyb3cg KCkKewogIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAo ImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiICgobG9uZyBkb3VibGUp IF9feSkpOyByZXR1cm4gX192YWx1ZTsKfQojIDYwNyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlu bGluZS5oIiAzIDQKX19pbmxpbmUgbG9uZyBpbnQKbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgp CnsKICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbCAl MCIgOiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19scmlu dHJlczsKfQpfX2lubGluZSBsb25nIGludApscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCkKewog IGxvbmcgaW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsICUwIiA6 ICI9bSIgKF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBfX2xyaW50cmVz Owp9Cl9faW5saW5lIGxvbmcgaW50CmxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKQp7 CiAgbG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGwgJTAi IDogIj1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbHJpbnRy ZXM7Cn0KIyA2MzAgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMyA0Cl9faW5saW5l IGxvbmcgbG9uZyBpbnQKbGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKQp7CiAgbG9uZyBsb25n IGludCBfX2xscmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGxsICUwIiA6ICI9 bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19sbHJpbnRyZXM7 Cn0KX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpCnsK ICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3Rw bGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBf X2xscmludHJlczsKfQpfX2lubGluZSBsb25nIGxvbmcgaW50CmxscmludGwgKGxvbmcgZG91Ymxl IF9feCkgdGhyb3cgKCkKewogIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRyZXM7IF9fYXNtX18gX192 b2xhdGlsZV9fICgiZmlzdHBsbCAlMCIgOiAiPW0iIChfX2xscmludHJlcykgOiAidCIgKF9feCkg OiAic3QiKTsgcmV0dXJuIF9fbGxyaW50cmVzOwp9CgoKCgoKCgpfX2lubGluZSBkb3VibGUgZHJl bSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3VibGUgX192 YWx1ZTsgcmVnaXN0ZXIgaW50IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglm cHJlbTFcblx0IiAiZnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9f dmFsdWUpLCAiPSZhIiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2Mi KTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwgZmxv YXQgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBpbnQg X19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJmc3Rzdwkl JWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSksICI9JmEiIChfX2Ns b2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192YWx1ZTsg fSBfX2lubGluZSBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs ZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGludCBf X2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW0xXG5cdCIgImZzdHN3CSUl YXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9fY2xv YmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7IHJldHVybiBfX3ZhbHVlOyB9 CiMgNjY1ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMgNApfX2lubGluZSBpbnQK X19maW5pdGUgKGRvdWJsZSBfX3gpIHRocm93ICgpCnsKICByZXR1cm4gKF9fZXh0ZW5zaW9uX18K ICAgICAgICAgICgoKCgodW5pb24geyBkb3VibGUgX19kOyBpbnQgX19pWzJdOyB9KSB7X19kOiBf X3h9KS5fX2lbMV0KICAgICAgICAgICAgIHwgMHg4MDBmZmZmZnUpICsgMSkgPj4gMzEpKTsKfQoj IDM1MSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzIDQKIyA0MTEgIi91c3IvaW5jbHVkZS9tYXRo LmgiIDMgNAp9CiMgNTIgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr Ky8zLjMvY21hdGgiIDIgMwojIDc5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j bHVkZS9jKysvMy4zL2NtYXRoIiAzCm5hbWVzcGFjZSBzdGQKewoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPiBfVHAgX19jbWF0aF9wb3dlcihfVHAsIHVuc2lnbmVkIGludCk7CgogIGlubGluZSBk b3VibGUKICBhYnMoZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFicyhfX3gpOyB9 CgogIGlubGluZSBmbG9hdAogIGFicyhmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2Zh YnNmKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYWJzKGxvbmcgZG91YmxlIF9feCkK ICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2woX194KTsgfQoKCiAgaW5saW5lIGZsb2F0CiAgYWNv cyhmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YWNvc2YoX194KTsgfQoKCgoKCiAgdXNpbmcgOjphY29z OwoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYWNvcyhsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJu IDo6YWNvc2woX194KTsgfQoKCgoKCiAgdXNpbmcgOjphc2luOwoKCiAgaW5saW5lIGZsb2F0CiAg YXNpbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YXNpbmYoX194KTsgfQoKCgoKCgogIGlubGluZSBs b25nIGRvdWJsZQogIGFzaW4obG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmFzaW5sKF9feCk7 IH0KCgoKCgogIHVzaW5nIDo6YXRhbjsKCgogIGlubGluZSBmbG9hdAogIGF0YW4oZmxvYXQgX194 KSB7IHJldHVybiA6OmF0YW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBh dGFuKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphdGFubChfX3gpOyB9CgoKCgoKICB1c2lu ZyA6OmF0YW4yOwoKCiAgaW5saW5lIGZsb2F0CiAgYXRhbjIoZmxvYXQgX195LCBmbG9hdCBfX3gp IHsgcmV0dXJuIDo6YXRhbjJmKF9feSwgX194KTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBkb3Vi bGUKICBhdGFuMihsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjph dGFuMmwoX195LCBfX3gpOyB9CgoKCgoKCiAgdXNpbmcgOjpjZWlsOwoKCiAgaW5saW5lIGZsb2F0 CiAgY2VpbChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6Y2VpbGYoX194KTsgfQoKCgoKCgogIGlubGlu ZSBsb25nIGRvdWJsZQogIGNlaWwobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmNlaWxsKF9f eCk7IH0KCgoKCgogIHVzaW5nIDo6Y29zOwoKICBpbmxpbmUgZmxvYXQKICBjb3MoZmxvYXQgX194 KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9jb3NmKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91Ymxl CiAgY29zKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fY29zbChfX3gpOyB9 CgogIHVzaW5nIDo6Y29zaDsKCgogIGlubGluZSBmbG9hdAogIGNvc2goZmxvYXQgX194KSB7IHJl dHVybiA6OmNvc2hmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjb3NoKGxv bmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpjb3NobChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmV4 cDsKCgogIGlubGluZSBmbG9hdAogIGV4cChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6ZXhwZihfX3gp OyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgZXhwKGxvbmcgZG91YmxlIF9feCkgeyBy ZXR1cm4gOjpleHBsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6ZmFiczsKCiAgaW5saW5lIGZsb2F0 CiAgZmFicyhmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNmKF9feCk7IH0KCiAg aW5saW5lIGxvbmcgZG91YmxlCiAgZmFicyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19i dWlsdGluX2ZhYnNsKF9feCk7IH0KCiAgdXNpbmcgOjpmbG9vcjsKCgogIGlubGluZSBmbG9hdAog IGZsb29yKGZsb2F0IF9feCkgeyByZXR1cm4gOjpmbG9vcmYoX194KTsgfQoKCgoKCgogIGlubGlu ZSBsb25nIGRvdWJsZQogIGZsb29yKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpmbG9vcmwo X194KTsgfQoKCgoKCiAgdXNpbmcgOjpmbW9kOwoKCiAgaW5saW5lIGZsb2F0CiAgZm1vZChmbG9h dCBfX3gsIGZsb2F0IF9feSkgeyByZXR1cm4gOjpmbW9kZihfX3gsIF9feSk7IH0KCgoKCgoKCiAg aW5saW5lIGxvbmcgZG91YmxlCiAgZm1vZChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f eSkgeyByZXR1cm4gOjpmbW9kbChfX3gsIF9feSk7IH0KCgoKCgoKICB1c2luZyA6OmZyZXhwOwoK CiAgaW5saW5lIGZsb2F0CiAgZnJleHAoZmxvYXQgX194LCBpbnQqIF9fZXhwKSB7IHJldHVybiA6 OmZyZXhwZihfX3gsIF9fZXhwKTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGZyZXhw KGxvbmcgZG91YmxlIF9feCwgaW50KiBfX2V4cCkgeyByZXR1cm4gOjpmcmV4cGwoX194LCBfX2V4 cCk7IH0KCgoKCgoKICB1c2luZyA6OmxkZXhwOwoKCiAgaW5saW5lIGZsb2F0CiAgbGRleHAoZmxv YXQgX194LCBpbnQgX19leHApIHsgcmV0dXJuIDo6bGRleHBmKF9feCwgX19leHApOyB9CgoKCgoK CgogIGlubGluZSBsb25nIGRvdWJsZQogIGxkZXhwKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhw KSB7IHJldHVybiA6OmxkZXhwbChfX3gsIF9fZXhwKTsgfQoKCgoKCgogIHVzaW5nIDo6bG9nOwoK CiAgaW5saW5lIGZsb2F0CiAgbG9nKGZsb2F0IF9feCkgeyByZXR1cm4gOjpsb2dmKF9feCk7IH0K CgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBsb2cobG9uZyBkb3VibGUgX194KSB7IHJldHVy biA6OmxvZ2woX194KTsgfQoKCgoKCiAgdXNpbmcgOjpsb2cxMDsKCgogIGlubGluZSBmbG9hdAog IGxvZzEwKGZsb2F0IF9feCkgeyByZXR1cm4gOjpsb2cxMGYoX194KTsgfQoKCgoKCgogIGlubGlu ZSBsb25nIGRvdWJsZQogIGxvZzEwKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpsb2cxMGwo X194KTsgfQoKCgoKCiAgdXNpbmcgOjptb2RmOwoKCiAgaW5saW5lIGZsb2F0CiAgbW9kZihmbG9h dCBfX3gsIGZsb2F0KiBfX2lwdHIpIHsgcmV0dXJuIDo6bW9kZmYoX194LCBfX2lwdHIpOyB9CiMg Mzc1ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2NtYXRo IiAzCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbW9kZihsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91 YmxlKiBfX2lwdHIpIHsgcmV0dXJuIDo6bW9kZmwoX194LCBfX2lwdHIpOyB9CiMgMzg4ICIvaG9t ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2NtYXRoIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcAogICAgX19wb3dfaGVscGVyKF9UcCBf X3gsIGludCBfX24pCiAgICB7CiAgICAgIHJldHVybiBfX24gPCAwCiAgICAgICAgPyBfVHAoMSkv X19jbWF0aF9wb3dlcihfX3gsIC1fX24pCiAgICAgICAgOiBfX2NtYXRoX3Bvd2VyKF9feCwgX19u KTsKICAgIH0KCiAgdXNpbmcgOjpwb3c7CgoKICBpbmxpbmUgZmxvYXQKICBwb3coZmxvYXQgX194 LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6cG93ZihfX3gsIF9feSk7IH0KCgoKCgoKCiAgaW5saW5l IGxvbmcgZG91YmxlCiAgcG93KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7IHJl dHVybiA6OnBvd2woX194LCBfX3kpOyB9CgoKCgoKCiAgaW5saW5lIGRvdWJsZQogIHBvdyhkb3Vi bGUgX194LCBpbnQgX19pKQogIHsgcmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9faSk7IH0KCiAg aW5saW5lIGZsb2F0CiAgcG93KGZsb2F0IF9feCwgaW50IF9fbikKICB7IHJldHVybiBfX3Bvd19o ZWxwZXIoX194LCBfX24pOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHBvdyhsb25nIGRvdWJs ZSBfX3gsIGludCBfX24pCiAgeyByZXR1cm4gX19wb3dfaGVscGVyKF9feCwgX19uKTsgfQoKICB1 c2luZyA6OnNpbjsKCiAgaW5saW5lIGZsb2F0CiAgc2luKGZsb2F0IF9feCkKICB7IHJldHVybiBf X2J1aWx0aW5fc2luZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHNpbihsb25nIGRv dWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3NpbmwoX194KTsgfQoKICB1c2luZyA6OnNp bmg7CgoKICBpbmxpbmUgZmxvYXQKICBzaW5oKGZsb2F0IF9feCkgeyByZXR1cm4gOjpzaW5oZihf X3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgc2luaChsb25nIGRvdWJsZSBfX3gp IHsgcmV0dXJuIDo6c2luaGwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpzcXJ0OwoKICBpbmxpbmUg ZmxvYXQKICBzcXJ0KGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc3FydGYoX194KTsg fQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBzcXJ0KGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVy biBfX2J1aWx0aW5fc3FydGwoX194KTsgfQoKICB1c2luZyA6OnRhbjsKCgogIGlubGluZSBmbG9h dAogIHRhbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6dGFuZihfX3gpOyB9CgoKCgoKCiAgaW5saW5l IGxvbmcgZG91YmxlCiAgdGFuKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjp0YW5sKF9feCk7 IH0KCgoKCgogIHVzaW5nIDo6dGFuaDsKCgogIGlubGluZSBmbG9hdAogIHRhbmgoZmxvYXQgX194 KSB7IHJldHVybiA6OnRhbmhmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICB0 YW5oKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjp0YW5obChfX3gpOyB9CgoKCgp9CgoKCgoK Cm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAog ICAgX19jYXB0dXJlX2ZwY2xhc3NpZnkoX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9 PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0g c2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX2YpIDogX19mcGNsYXNzaWZ5bCAoX19m KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNm aW5pdGUoX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/ IF9fZmluaXRlZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2Zp bml0ZSAoX19mKSA6IF9fZmluaXRlbCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNpbmYoX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAo X19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9faXNpbmZmIChfX2YpIDogc2l6ZW9mIChfX2YpID09 IHNpemVvZiAoZG91YmxlKSA/IF9faXNpbmYgKF9fZikgOiBfX2lzaW5mbCAoX19mKSk7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNuYW4oX1RwIF9f ZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9faXNuYW5mIChf X2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9faXNuYW4gKF9fZikgOiBf X2lzbmFubCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBf X2NhcHR1cmVfaXNub3JtYWwoX1RwIF9fZikgeyByZXR1cm4gKChzaXplb2YgKF9fZikgPT0gc2l6 ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVv ZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX19mKSA6IF9fZnBjbGFzc2lmeWwgKF9fZikpID09 IEZQX05PUk1BTCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2Nh cHR1cmVfc2lnbmJpdChfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAo ZmxvYXQpID8gX19zaWduYml0ZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJs ZSkgPyBfX3NpZ25iaXQgKF9fZikgOiBfX3NpZ25iaXRsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc2dyZWF0ZXIoX1RwIF9fZjEsIF9U cCBfX2YyKQogICAgeyByZXR1cm4gX19idWlsdGluX2lzZ3JlYXRlciAoX19mMSwgX19mMik7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc2dyZWF0 ZXJlcXVhbChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyByZXR1cm4gX19idWlsdGluX2lzZ3Jl YXRlcmVxdWFsIChfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAg aW50CiAgICAgX19jYXB0dXJlX2lzbGVzcyhfVHAgX19mMSwgX1RwIF9fZjIpIHsgcmV0dXJuIF9f YnVpbHRpbl9pc2xlc3MgKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K ICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXNsZXNzZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQog ICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc2xlc3NlcXVhbCAoX19mMSwgX19mMik7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc2xlc3NncmVhdGVy KF9UcCBfX2YxLCBfVHAgX19mMikKICAgICB7IHJldHVybiBfX2J1aWx0aW5faXNsZXNzZ3JlYXRl ciAoX19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAg IF9fY2FwdHVyZV9pc3Vub3JkZXJlZChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyByZXR1cm4g X19idWlsdGluX2lzdW5vcmRlcmVkIChfX2YxLCBfX2YyKTsgfQp9CiMgNTgwICIvaG9tZS9iYW5n ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2NtYXRoIiAzCm5hbWVzcGFjZSBf X2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgZnBjbGFzc2lm eShfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfZnBjbGFzc2lmeShfX2YpOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNmaW5pdGUoX1RwIF9fZikgeyByZXR1cm4g X19jYXB0dXJlX2lzZmluaXRlKF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg aW50CiAgICBpc2luZihfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfaXNpbmYoX19mKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbmFuKF9UcCBfX2YpIHsgcmV0 dXJuIF9fY2FwdHVyZV9pc25hbihfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAg IGludAogICAgaXNub3JtYWwoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzbm9ybWFsKF9f Zik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBzaWduYml0KF9UcCBf X2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9zaWduYml0KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgogICAgaW50CiAgICBpc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJldHVy biBfX2NhcHR1cmVfaXNncmVhdGVyKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4KICAgIGludAogICAgaXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAg eyByZXR1cm4gX19jYXB0dXJlX2lzZ3JlYXRlcmVxdWFsKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzKF9UcCBfX2YxLCBfVHAgX19mMikg eyByZXR1cm4gX19jYXB0dXJlX2lzbGVzcyhfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAg IHsgcmV0dXJuIF9fY2FwdHVyZV9pc2xlc3NlcXVhbChfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbGVzc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBf X2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJlX2lzbGVzc2dyZWF0ZXIoX19mMSwgX19mMik7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc3Vub3JkZXJlZChfVHAgX19m MSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXN1bm9yZGVyZWQoX19mMSwgX19m Mik7IH0KfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpmcGNsYXNzaWZ5Owog IHVzaW5nIF9fZ251X2N4eDo6aXNmaW5pdGU7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2luZjsKICB1 c2luZyBfX2dudV9jeHg6OmlzbmFuOwogIHVzaW5nIF9fZ251X2N4eDo6aXNub3JtYWw7CiAgdXNp bmcgX19nbnVfY3h4OjpzaWduYml0OwogIHVzaW5nIF9fZ251X2N4eDo6aXNncmVhdGVyOwogIHVz aW5nIF9fZ251X2N4eDo6aXNncmVhdGVyZXF1YWw7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xlc3M7 CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xlc3NlcXVhbDsKICB1c2luZyBfX2dudV9jeHg6OmlzbGVz c2dyZWF0ZXI7CiAgdXNpbmcgX19nbnVfY3h4Ojppc3Vub3JkZXJlZDsKfQoKCgoKIyAxICIvaG9t ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvY21hdGgudGNj IiAxIDMKIyAzNSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu My9iaXRzL2NtYXRoLnRjYyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgICBfVHAKICAgIF9fY21hdGhfcG93ZXIoX1RwIF9feCwgdW5zaWduZWQgaW50IF9fbikK ICAgIHsKICAgICAgX1RwIF9feSA9IF9fbiAlIDIgPyBfX3ggOiAxOwoKICAgICAgd2hpbGUgKF9f biA+Pj0gMSkKICAgICAgICB7CiAgICAgICAgICBfX3ggPSBfX3ggKiBfX3g7CiAgICAgICAgICBp ZiAoX19uICUgMikKICAgICAgICAgICAgX195ID0gX195ICogX194OwogICAgICAgIH0KCiAgICAg IHJldHVybiBfX3k7CiAgICB9Cn0KIyA2NTUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXBy ZS9pbmNsdWRlL2MrKy8zLjMvY21hdGgiIDIgMwojIDQyICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKIyAx ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2xpbWl0cyIg MSAzCiMgNDcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMv bGltaXRzIiAzCiMgMTUwICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j KysvMy4zL2xpbWl0cyIgMwpuYW1lc3BhY2Ugc3RkCnsKICBlbnVtIGZsb2F0X3JvdW5kX3N0eWxl CiAgewogICAgcm91bmRfaW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgcm91bmRfdG93YXJkX3plcm8g PSAwLAogICAgcm91bmRfdG9fbmVhcmVzdCA9IDEsCiAgICByb3VuZF90b3dhcmRfaW5maW5pdHkg PSAyLAogICAgcm91bmRfdG93YXJkX25lZ19pbmZpbml0eSA9IDMKICB9OwoKICBlbnVtIGZsb2F0 X2Rlbm9ybV9zdHlsZQogIHsKICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0gLTEsCiAgICBkZW5v cm1fYWJzZW50ID0gMCwKICAgIGRlbm9ybV9wcmVzZW50ID0gMQogIH07CgoKCgogIHN0cnVjdCBf X251bWVyaWNfbGltaXRzX2Jhc2UKICB7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFs aXplZCA9IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMDsKICAgIHN0YXRp YyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVk ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGludCBy YWRpeCA9IDA7CgogICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgc3Rh dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1h eF9leHBvbmVudCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsK CiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0 eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0g ZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gZmFsc2U7CiAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICBzdGF0aWMgY29uc3QgYm9vbCB0 cmFwcyA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFs c2U7CiAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3Vu ZF90b3dhcmRfemVybzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3Qg bnVtZXJpY19saW1pdHMgOiBwdWJsaWMgX19udW1lcmljX2xpbWl0c19iYXNlCiAgICB7CiAgICAg IHN0YXRpYyBfVHAgbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9 CiAgICAgIHN0YXRpYyBfVHAgbWF4KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+ KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZXBzaWxvbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHJvdW5kX2Vycm9yKCkgdGhyb3coKSB7 IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgaW5maW5pdHko KSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9U cCBxdWlldF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAg ICAgc3RhdGljIF9UcCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2Fz dDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZGVub3JtX21pbigpIHRocm93KCkgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1 Y3QgbnVtZXJpY19saW1pdHM8Ym9vbD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf c3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGJvb2wgbWluKCkgdGhyb3coKQogICAg ICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBtYXgoKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIHRydWU7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTsKICAg ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0g dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0 aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGJvb2wgZXBzaWxvbigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgcm91bmRfZXJyb3Io KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50 IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAg PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0g ZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0g ZmFsc2U7CgogICAgICBzdGF0aWMgYm9vbCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1 cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7 IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBzaWduYWxpbmdfTmFOKCkgdGhyb3co KQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBkZW5vcm1fbWluKCkg dGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0 cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCgoKCiAgICAg IHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg dGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9z dHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8 PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjaGFyIG1pbigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gKCgoY2hhcikoLTEpIDwgMCkgPyAoY2hhcikxIDw8IChzaXpl b2YoY2hhcikgKiA4IC0gKChjaGFyKSgtMSkgPCAwKSkgOiAoY2hhcikwKTsgfQogICAgICBzdGF0 aWMgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgoKGNoYXIpKC0xKSA8IDApID8g KChjaGFyKTEgPDwgKHNpemVvZihjaGFyKSAqIDggLSAoKGNoYXIpKC0xKSA8IDApKSkgLSAxIDog fihjaGFyKTApOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IChzaXplb2YoY2hh cikgKiA4IC0gKChjaGFyKSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz MTAgPSAoKHNpemVvZihjaGFyKSAqIDggLSAoKGNoYXIpKC0xKSA8IDApKSAqIDY0MyAvIDIxMzYp OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSAoKGNoYXIpKC0xKSA8IDApOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g MjsKICAgICAgc3RhdGljIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg fQogICAgICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4g MDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0 aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt YXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0g MDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNoYXIgaW5m aW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0aWMgY2hh ciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0 aWMgY2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0K ICAgICAgc3RhdGljIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3Rh dGljX2Nhc3Q8Y2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9 IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBi b29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3Jl ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHls ZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51 bWVyaWNfbGltaXRzPHNpZ25lZCBjaGFyPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgbWluKCkgdGhy b3coKQogICAgICB7IHJldHVybiAtMTI3IC0gMTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIg bWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxMjc7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp bnQgZGlnaXRzID0gKHNpemVvZihzaWduZWQgY2hhcikgKiA4IC0gKChzaWduZWQgY2hhcikoLTEp IDwgMCkpOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gKChzaXplb2Yoc2lnbmVk IGNoYXIpICogOCAtICgoc2lnbmVkIGNoYXIpKC0xKSA8IDApKSAqIDY0MyAvIDIxMzYpOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3Qg PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHNp Z25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3Rh dGljIHNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9 CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l eHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rl bm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIg aW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFy PigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAg ICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHNp Z25lZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j YXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgZGVub3JtX21p bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9 CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy bzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25l ZCBjaGFyPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRy dWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWF4KCkgdGhyb3coKQogICAgICB7 IHJldHVybiAxMjcgKiAyVSArIDE7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0g KHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDggLSAoKHVuc2lnbmVkIGNoYXIpKC0xKSA8IDApKTsK ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9ICgoc2l6ZW9mKHVuc2lnbmVkIGNoYXIp ICogOCAtICgodW5zaWduZWQgY2hhcikoLTEpIDwgMCkpICogNjQzIC8gMjEzNik7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0 cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2ln bmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0 aWMgdW5zaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf ZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsK CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9k ZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGNo YXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk IGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAg c3RhdGljIHVuc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVk IGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z aWduZWQgY2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s IHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9 IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVy aWNfbGltaXRzPHdjaGFyX3Q+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp YWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB3Y2hhcl90IG1pbigpIHRocm93KCkKICAgICAg eyByZXR1cm4gKCgod2NoYXJfdCkoLTEpIDwgMCkgPyAod2NoYXJfdCkxIDw8IChzaXplb2Yod2No YXJfdCkgKiA4IC0gKCh3Y2hhcl90KSgtMSkgPCAwKSkgOiAod2NoYXJfdCkwKTsgfQogICAgICBz dGF0aWMgd2NoYXJfdCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgoKHdjaGFyX3QpKC0x KSA8IDApID8gKCh3Y2hhcl90KTEgPDwgKHNpemVvZih3Y2hhcl90KSAqIDggLSAoKHdjaGFyX3Qp KC0xKSA8IDApKSkgLSAxIDogfih3Y2hhcl90KTApOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50 IGRpZ2l0cyA9IChzaXplb2Yod2NoYXJfdCkgKiA4IC0gKCh3Y2hhcl90KSgtMSkgPCAwKSk7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZih3Y2hhcl90KSAqIDggLSAo KHdjaGFyX3QpKC0xKSA8IDApKSAqIDY0MyAvIDIxMzYpOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19zaWduZWQgPSAoKHdjaGFyX3QpKC0xKSA8IDApOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0 cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHdjaGFy X3QgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgd2No YXJfdCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3Rh dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1p bl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAw OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu YWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUg aGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k ZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHdjaGFyX3QgaW5maW5pdHkoKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBxdWll dF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMg d2NoYXJfdCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7 IH0KICAgICAgc3RhdGljIHdjaGFyX3QgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gd2NoYXJfdCgpOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0 cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBy b3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmlj X2xpbWl0czxzaG9ydD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6 ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHNob3J0IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gLTMyNzY3IC0gMTsgfQogICAgICBzdGF0aWMgc2hvcnQgbWF4KCkgdGhyb3coKQogICAgICB7 IHJldHVybiAzMjc2NzsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAoc2l6ZW9m KHNob3J0KSAqIDggLSAoKHNob3J0KSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg ZGlnaXRzMTAgPSAoKHNpemVvZihzaG9ydCkgKiA4IC0gKChzaG9ydCkoLTEpIDwgMCkpICogNjQz IC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwog ICAgICBzdGF0aWMgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQog ICAgICBzdGF0aWMgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7 IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGlj IGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4 X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7 CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRf ZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBzaG9ydCBpbmZp bml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hv cnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CiAgICAgIHN0 YXRpYyBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgp OyB9CiAgICAgIHN0YXRpYyBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy biBzaG9ydCgpOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBz ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5k X3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGlt aXRzPHVuc2lnbmVkIHNob3J0PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVj aWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWluKCkgdGhyb3co KQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtYXgoKSB0 aHJvdygpCiAgICAgIHsgcmV0dXJuIDMyNzY3ICogMlUgKyAxOyB9CgogICAgICBzdGF0aWMgY29u c3QgaW50IGRpZ2l0cyA9IChzaXplb2YodW5zaWduZWQgc2hvcnQpICogOCAtICgodW5zaWduZWQg c2hvcnQpKC0xKSA8IDApKTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9ICgoc2l6 ZW9mKHVuc2lnbmVkIHNob3J0KSAqIDggLSAoKHVuc2lnbmVkIHNob3J0KSgtMSkgPCAwKSkgKiA2 NDMgLyAyMTM2KTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAy OwogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p dHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJz ZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg ICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25l ZCBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu c2lnbmVkIHNob3J0PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2lnbmFsaW5n X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+ KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQog ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0 cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZs b2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoK ICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8aW50PgogICAgewogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgaW50 IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gLTIxNDc0ODM2NDcgLSAxOyB9CiAgICAgIHN0 YXRpYyBpbnQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3OyB9CgogICAg ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IChzaXplb2YoaW50KSAqIDggLSAoKGludCkoLTEp IDwgMCkpOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gKChzaXplb2YoaW50KSAq IDggLSAoKGludCkoLTEpIDwgMCkpICogNjQzIC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIg PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgaW50IGVwc2lsb24oKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGludCByb3VuZF9lcnJvcigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw b25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAg ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg aW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZp bml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAg ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9h YnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoK ICAgICAgc3RhdGljIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IHF1aWV0X05hTigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IHNpZ25h bGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0K ICAgICAgc3RhdGljIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDxpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0 cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s IHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9 IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVy aWNfbGltaXRzPHVuc2lnbmVkIGludD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf c3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtaW4oKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtYXgoKSB0 aHJvdygpCiAgICAgIHsgcmV0dXJuIDIxNDc0ODM2NDcgKiAyVSArIDE7IH0KCiAgICAgIHN0YXRp YyBjb25zdCBpbnQgZGlnaXRzID0gKHNpemVvZih1bnNpZ25lZCBpbnQpICogOCAtICgodW5zaWdu ZWQgaW50KSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNp emVvZih1bnNpZ25lZCBpbnQpICogOCAtICgodW5zaWduZWQgaW50KSgtMSkgPCAwKSkgKiA2NDMg LyAyMTM2KTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwog ICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAw OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGlj IGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l eHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRp YyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3Rh dGljIHVuc2lnbmVkIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHF1aWV0 X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pigw KTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAgc3RhdGlj IHVuc2lnbmVkIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf Y2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1 NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25z dCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVm b3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z dHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0 IG51bWVyaWNfbGltaXRzPGxvbmc+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Nw ZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBsb25nIG1pbigpIHRocm93KCkKICAgICAg eyByZXR1cm4gLTIxNDc0ODM2NDdMIC0gMTsgfQogICAgICBzdGF0aWMgbG9uZyBtYXgoKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIDIxNDc0ODM2NDdMOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50 IGRpZ2l0cyA9IChzaXplb2YobG9uZykgKiA4IC0gKChsb25nKSgtMSkgPCAwKSk7CiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZihsb25nKSAqIDggLSAoKGxvbmcpKC0x KSA8IDApKSAqIDY0MyAvIDIxMzYpOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQg PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50 IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gMDsgfQogICAgICBzdGF0aWMgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAg eyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwog ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNv bnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv bmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGlj IGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+ KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgc2lnbmFsaW5nX05h TigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAg c3RhdGljIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh c3Q8bG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJh cHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91 bmRfdG93YXJkX3plcm87CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19s aW1pdHM8dW5zaWduZWQgbG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl Y2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWluKCkgdGhyb3co KQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heCgpIHRo cm93KCkKICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0N0wgKiAyVUwgKyAxOyB9CgogICAgICBzdGF0 aWMgY29uc3QgaW50IGRpZ2l0cyA9IChzaXplb2YodW5zaWduZWQgbG9uZykgKiA4IC0gKCh1bnNp Z25lZCBsb25nKSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAo KHNpemVvZih1bnNpZ25lZCBsb25nKSAqIDggLSAoKHVuc2lnbmVkIGxvbmcpKC0xKSA8IDApKSAq IDY0MyAvIDIxMzYpOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9 IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p dHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJz ZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg ICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQg bG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln bmVkIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNpZ25hbGluZ19OYU4o KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9 CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3Vu ZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAg ICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3Vu ZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxh dGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgbG9uZz4KICAgIHsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcg bG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIC05MjIzMzcyMDM2ODU0Nzc1ODA3TEwg LSAxOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVy biA5MjIzMzcyMDM2ODU0Nzc1ODA3TEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz ID0gKHNpemVvZihsb25nIGxvbmcpICogOCAtICgobG9uZyBsb25nKSgtMSkgPCAwKSk7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZihsb25nIGxvbmcpICogOCAtICgo bG9uZyBsb25nKSgtMSkgPCAwKSkgKiA2NDMgLyAyMTM2KTsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9 IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3Rh dGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgZXBzaWxvbigp IHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIHJvdW5k X2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3Qg aW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50 MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWll dF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3Jt ID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz ID0gZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAg ICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25n IGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25n IGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0 aWMgbG9uZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j YXN0PGxvbmcgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9 IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUg PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxl ID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVt ZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZyBsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBs b25nIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWdu ZWQgbG9uZyBsb25nIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gOTIyMzM3MjAzNjg1NDc3 NTgwN0xMICogMlVMTCArIDE7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gKHNp emVvZih1bnNpZ25lZCBsb25nIGxvbmcpICogOCAtICgodW5zaWduZWQgbG9uZyBsb25nKSgtMSkg PCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZih1bnNpZ25l ZCBsb25nIGxvbmcpICogOCAtICgodW5zaWduZWQgbG9uZyBsb25nKSgtMSkgPCAwKSkgKiA2NDMg LyAyMTM2KTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwog ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyByb3VuZF9lcnJvcigp IHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f ZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsK ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29u c3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19p bmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9y bV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNl OwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAg ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICBz dGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5z aWduZWQgbG9uZyBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0 YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVk IGxvbmcgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz dDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p ZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBj b25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3Nf YmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu ZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3Ry dWN0IG51bWVyaWNfbGltaXRzPGZsb2F0PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgZmxvYXQgbWluKCkgdGhyb3coKQog ICAgICB7IHJldHVybiAxLjE3NTQ5NDM1ZS0zOEY7IH0KICAgICAgc3RhdGljIGZsb2F0IG1heCgp IHRocm93KCkKICAgICAgeyByZXR1cm4gMy40MDI4MjM0N2UrMzhGOyB9CgogICAgICBzdGF0aWMg Y29uc3QgaW50IGRpZ2l0cyA9IDI0OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0g NjsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAg c3RhdGljIGZsb2F0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTkyMDkyOTBl LTdGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gMC41RjsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAoLTEy NSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAoLTM3KTsKICAgICAg c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxMjg7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWF4X2V4cG9uZW50MTAgPSAzODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZp bml0eQogICAgICAgID0gX19idWlsdGluX2h1Z2VfdmFsZiAoKSAvIDIgPT0gX19idWlsdGluX2h1 Z2VfdmFsZiAoKTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTgogICAgICAg ID0gX19idWlsdGluX25hbmYgKCIiKSAhPSBfX2J1aWx0aW5fbmFuZiAoIiIpOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGhhc19xdWlldF9OYU47CiAgICAgIHN0 YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybQogICAgICAgID0gMS40MDEy OTg0NmUtNDVGID8gZGVub3JtX3ByZXNlbnQgOiBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBmbG9hdCBp bmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gX19idWlsdGluX2h1Z2VfdmFsZiAoKTsg fQogICAgICBzdGF0aWMgZmxvYXQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBf X2J1aWx0aW5fbmFuZiAoIiIpOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBzaWduYWxpbmdfTmFOKCkg dGhyb3coKQogICAgICB7IHJldHVybiBfX2J1aWx0aW5fbmFuc2YgKCIiKTsgfQogICAgICBzdGF0 aWMgZmxvYXQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS40MDEyOTg0NmUt NDVGOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkKICAgICAgICA9IGhhc19p bmZpbml0eSAmJiBoYXNfcXVpZXRfTmFOICYmIGhhc19kZW5vcm0gPT0gZGVub3JtX3ByZXNlbnQ7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRy YXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBy b3VuZF90b19uZWFyZXN0OwogICAgfTsKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1l cmljX2xpbWl0czxkb3VibGU+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp YWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBkb3VibGUgbWluKCkgdGhyb3coKQogICAgICB7 IHJldHVybiAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwODsgfQogICAgICBzdGF0aWMgZG91YmxlIG1h eCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7IH0KCiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNTM7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg ZGlnaXRzMTAgPSAxNTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4 ID0gMjsKICAgICAgc3RhdGljIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVy biAyLjIyMDQ0NjA0OTI1MDMxMzFlLTE2OyB9CiAgICAgIHN0YXRpYyBkb3VibGUgcm91bmRfZXJy b3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuNTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtaW5fZXhwb25lbnQgPSAoLTEwMjEpOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv bmVudDEwID0gKC0zMDcpOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEw MjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzMDg7CgogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkKICAgICAgICA9IF9fYnVpbHRpbl9odWdlX3Zh bCAoKSAvIDIgPT0gX19idWlsdGluX2h1Z2VfdmFsICgpOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfcXVpZXRfTmFOCiAgICAgICAgPSBfX2J1aWx0aW5fbmFuICgiIikgIT0gX19idWlsdGlu X25hbiAoIiIpOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGhh c19xdWlldF9OYU47CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rl bm9ybQogICAgICAgID0gNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjQgPyBkZW5vcm1fcHJlc2VudCA6 IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9 IGZhbHNlOwoKICAgICAgc3RhdGljIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gX19idWlsdGluX2h1Z2VfdmFsKCk7IH0KICAgICAgc3RhdGljIGRvdWJsZSBxdWlldF9O YU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9uYW4gKCIiKTsgfQogICAgICBz dGF0aWMgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9fYnVp bHRpbl9uYW5zICgiIik7IH0KICAgICAgc3RhdGljIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3co KQogICAgICB7IHJldHVybiA0Ljk0MDY1NjQ1ODQxMjQ2NTRlLTMyNDsgfQoKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfaWVjNTU5CiAgICAgICAgPSBoYXNfaW5maW5pdHkgJiYgaGFzX3F1aWV0 X05hTiAmJiBoYXNfZGVub3JtID09IGRlbm9ybV9wcmVzZW50OwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxv ID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG9fbmVhcmVzdDsKICAg IH07CgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZyBkb3Vi bGU+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsK CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMu MzYyMTAzMTQzMTEyMDkzNTA2MjZlLTQ5MzJMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBt YXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTg5NzMxNDk1MzU3MjMxNzY1MDJlKzQ5MzJM OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDY0OwogICAgICBzdGF0aWMgY29u c3QgaW50IGRpZ2l0czEwID0gMTg7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9 IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGlu dCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQog ICAgICB7IHJldHVybiAxLjA4NDIwMjE3MjQ4NTUwNDQzNDAxZS0xOUw7IH0KICAgICAgc3RhdGlj IGxvbmcgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjVMOyB9 CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9ICgtMTYzODEpOwogICAgICBz dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gKC00OTMxKTsKICAgICAgc3RhdGljIGNv bnN0IGludCBtYXhfZXhwb25lbnQgPSAxNjM4NDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf ZXhwb25lbnQxMCA9IDQ5MzI7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkK ICAgICAgICA9IF9fYnVpbHRpbl9odWdlX3ZhbGwgKCkgLyAyID09IF9fYnVpbHRpbl9odWdlX3Zh bGwgKCk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4KICAgICAgICA9IF9f YnVpbHRpbl9uYW5sICgiIikgIT0gX19idWlsdGluX25hbmwgKCIiKTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBoYXNfcXVpZXRfTmFOOwogICAgICBzdGF0aWMg Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0KICAgICAgICA9IDMuNjQ1MTk5NTMx ODgyNDc0NjAyNTNlLTQ5NTFMID8gZGVub3JtX3ByZXNlbnQgOiBkZW5vcm1fYWJzZW50OwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MKICAgICAgICA9IGZhbHNlOwoKICAg ICAgc3RhdGljIGxvbmcgZG91YmxlIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBf X2J1aWx0aW5faHVnZV92YWxsICgpOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBxdWlldF9O YU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9uYW5sICgiIik7IH0KICAgICAg c3RhdGljIGxvbmcgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IF9fYnVpbHRpbl9uYW5zbCAoIiIpOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBkZW5vcm1f bWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAzLjY0NTE5OTUzMTg4MjQ3NDYwMjUzZS00OTUx TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5CiAgICAgICAgPSBoYXNfaW5m aW5pdHkgJiYgaGFzX3F1aWV0X05hTiAmJiBoYXNfZGVub3JtID09IGRlbm9ybV9wcmVzZW50Owog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw cyA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91 bmRfdG9fbmVhcmVzdDsKICAgIH07CgoKCgoKfQojIDQ0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKIyAx ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL3R5cGVpbmZv IiAxIDMKIyA0MCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu My90eXBlaW5mbyIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIF9fY3h4YWJpdjEKewogIGNs YXNzIF9fY2xhc3NfdHlwZV9pbmZvOwp9CiMgNTUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z LXByZS9pbmNsdWRlL2MrKy8zLjMvdHlwZWluZm8iIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAg Y2xhc3MgdHlwZV9pbmZvCiAgewogIHB1YmxpYzoKCgoKCiAgICB2aXJ0dWFsIH50eXBlX2luZm8o KTsKCiAgcHJpdmF0ZToKCiAgICB0eXBlX2luZm8mIG9wZXJhdG9yPShjb25zdCB0eXBlX2luZm8m KTsKICAgIHR5cGVfaW5mbyhjb25zdCB0eXBlX2luZm8mKTsKCiAgcHJvdGVjdGVkOgogICAgY29u c3QgY2hhciAqX19uYW1lOwoKICBwcm90ZWN0ZWQ6CiAgICBleHBsaWNpdCB0eXBlX2luZm8oY29u c3QgY2hhciAqX19uKTogX19uYW1lKF9fbikgeyB9CgogIHB1YmxpYzoKCgoKICAgIGNvbnN0IGNo YXIqIG5hbWUoKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lOyB9CiMgMTAxICIvaG9tZS9iYW5n ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL3R5cGVpbmZvIiAzCiAgICBib29s IGJlZm9yZShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1l IDwgX19hcmcuX19uYW1lOyB9CiAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgdHlwZV9pbmZvJiBf X2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZSA9PSBfX2FyZy5fX25hbWU7IH0KCiAgICBi b29sIG9wZXJhdG9yIT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJu ICFvcGVyYXRvcj09KF9fYXJnKTsgfQoKCiAgcHVibGljOgoKICAgIHZpcnR1YWwgYm9vbCBfX2lz X3BvaW50ZXJfcCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgYm9vbCBfX2lzX2Z1bmN0aW9uX3AoKSBj b25zdDsKCgoKCgoKCiAgICB2aXJ0dWFsIGJvb2wgX19kb19jYXRjaChjb25zdCB0eXBlX2luZm8g Kl9fdGhyX3R5cGUsIHZvaWQgKipfX3Rocl9vYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsKCgogICAgdmlydHVhbCBib29sIF9fZG9fdXBjYXN0 KGNvbnN0IF9fY3h4YWJpdjE6Ol9fY2xhc3NfdHlwZV9pbmZvICpfX3RhcmdldCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19vYmpfcHRyKSBjb25zdDsKICB9OwoKCgoKCgog IGNsYXNzIGJhZF9jYXN0IDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRf Y2FzdCgpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9jYXN0KCkgdGhyb3coKTsKICB9 OwoKCiAgY2xhc3MgYmFkX3R5cGVpZCA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgog ICAgYmFkX3R5cGVpZCAoKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfdHlwZWlkKCkg dGhyb3coKTsKICB9Owp9Cgp9CiMgNDYgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9p bmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCgpuYW1lc3BhY2Ugc3Rk CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGUKICAgIGxvY2FsZTo6Y29t YmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0CiAgICB7CiAgICAgIF9JbXBsKiBfX3Rt cCA9IG5ldyBfSW1wbCgqX01faW1wbCwgMSk7CiAgICAgIF9fdG1wLT5fTV9yZXBsYWNlX2ZhY2V0 KF9fb3RoZXIuX01faW1wbCwgJl9GYWNldDo6aWQpOwogICAgICByZXR1cm4gbG9jYWxlKF9fdG1w KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBib29sCiAgICBsb2NhbGU6Om9wZXJhdG9yKCkoY29uc3QgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3My KSBjb25zdAogICAgewogICAgICB0eXBlZGVmIHN0ZDo6Y29sbGF0ZTxfQ2hhclQ+IF9fY29sbGF0 ZV90eXBlOwogICAgICBjb25zdCBfX2NvbGxhdGVfdHlwZSYgX19jb2xsYXRlID0gdXNlX2ZhY2V0 PF9fY29sbGF0ZV90eXBlPigqdGhpcyk7CiAgICAgIHJldHVybiAoX19jb2xsYXRlLmNvbXBhcmUo X19zMS5kYXRhKCksIF9fczEuZGF0YSgpICsgX19zMS5sZW5ndGgoKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX3MyLmRhdGEoKSwgX19zMi5kYXRhKCkgKyBfX3MyLmxlbmd0aCgp KSA8IDApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBjb25zdCBfRmFj ZXQmCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAgc2l6ZV90 IF9faSA9IF9GYWNldDo6aWQuX01faWQoKTsKICAgICAgbG9jYWxlOjpmYWNldCoqIF9fZmFjZXRz ID0gX19sb2MuX01faW1wbC0+X01fZmFjZXRzOwogICAgICBpZiAoIShfX2kgPCBfX2xvYy5fTV9p bXBsLT5fTV9mYWNldHNfc2l6ZSAmJiBfX2ZhY2V0c1tfX2ldKSkKICAgICAgICBfX3Rocm93X2Jh ZF9jYXN0KCk7CiAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBfRmFjZXQmPigqX19mYWNl dHNbX19pXSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGJvb2wKICAg IGhhc19mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKSB0aHJvdygpCiAgICB7CiAgICAgIHNpemVf dCBfX2kgPSBfRmFjZXQ6OmlkLl9NX2lkKCk7CiAgICAgIGxvY2FsZTo6ZmFjZXQqKiBfX2ZhY2V0 cyA9IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsKICAgICAgcmV0dXJuIChfX2kgPCBfX2xvYy5f TV9pbXBsLT5fTV9mYWNldHNfc2l6ZSAmJiBfX2ZhY2V0c1tfX2ldKTsKICAgIH0KCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBu dW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF9mbG9hdChfSW5JdGVyIF9f YmVnLCBfSW5JdGVyIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmcmIF9feHRyYykgY29uc3QKICAgIHsKICAg ICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgIGNvbnN0 IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4m IF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3Qg bnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19s b2MpOwoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3BsdXMgPSBfX2N0eXBlLndpZGVuKCcrJyk7 CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX21pbnVzID0gX19jdHlwZS53aWRlbignLScpOwogICAg ICBpbnQgX19wb3MgPSAwOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBpZiAo KF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19wbHVzKSB8fCBfX3RyYWl0c190eXBlOjplcShfX2Ms IF9fbWludXMpKQogICAgICAgICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAg ICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICsrX19w b3M7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgIH0KCgogICAgICBjb25zdCBj aGFyX3R5cGUgX196ZXJvID0gX19jdHlwZS53aWRlbihfU19hdG9tc1tfTV96ZXJvXSk7CiAgICAg IGJvb2wgX19mb3VuZF96ZXJvID0gZmFsc2U7CiAgICAgIHdoaWxlIChfX3RyYWl0c190eXBlOjpl cShfX2MsIF9femVybykgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgX19j ID0gKigrK19fYmVnKTsKICAgICAgICAgIF9fZm91bmRfemVybyA9IHRydWU7CiAgICAgICAgfQog ICAgICBpZiAoX19mb3VuZF96ZXJvKQogICAgICAgIHsKICAgICAgICAgIF9feHRyYyArPSBfU19h dG9tc1tfTV96ZXJvXTsKICAgICAgICAgICsrX19wb3M7CiAgICAgICAgfQoKCiAgICAgIGNvbnN0 IHNpemVfdCBfX2xlbiA9IF9NX0UgLSBfTV96ZXJvICsgMTsKICAgICAgY2hhcl90eXBlIF9fd2F0 b21zW19fbGVuXTsKICAgICAgX19jdHlwZS53aWRlbihfU19hdG9tcywgX1NfYXRvbXMgKyBfX2xl biwgX193YXRvbXMpOwogICAgICBib29sIF9fZm91bmRfZGVjID0gZmFsc2U7CiAgICAgIGJvb2wg X19mb3VuZF9zY2kgPSBmYWxzZTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fZGVjID0gX19ucC5k ZWNpbWFsX3BvaW50KCk7CgogICAgICBzdHJpbmcgX19mb3VuZF9ncm91cGluZzsKICAgICAgY29u c3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGJvb2wgX19jaGVj a19ncm91cGluZyA9IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICBpbnQgX19zZXBfcG9zID0gMDsK ICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0gX19ucC50aG91c2FuZHNfc2VwKCk7CgogICAg ICB3aGlsZSAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewoKICAgICAgICAgIGNvbnN0IGNoYXJf dHlwZSogX19wID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dhdG9tcywgMTAsIF9fYyk7CgoKICAg ICAgICAgIGlmIChfX3AgJiYgIV9fdHJhaXRzX3R5cGU6OmVxKF9fYywgY2hhcl90eXBlKCkpKQog ICAgICAgICAgICB7CgogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX194dHJj ICs9IF9TX2F0b21zW19fcCAtIF9fd2F0b21zXTsKICAgICAgICAgICAgICArK19fc2VwX3BvczsK ICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICB9CiAgICAgICAgICBl bHNlIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fc2VwKQogICAgICAgICAgICAgICAgICAg JiYgX19jaGVja19ncm91cGluZyAmJiAhX19mb3VuZF9kZWMpCiAgICAgICAgICAgIHsKCgogICAg ICAgICAgICAgIGlmIChfX3NlcF9wb3MpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAg ICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAgX19jID0gKigr K19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg ICAgICAgZWxzZSBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX2RlYykgJiYgIV9fZm91bmRf ZGVjKQogICAgICAgICAgICB7CgoKCiAgICAgICAgICAgICAgaWYgKF9fZm91bmRfZ3JvdXBpbmcu c2l6ZSgpKQogICAgICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxj aGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX194 dHJjICs9ICcuJzsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAg IF9fZm91bmRfZGVjID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoKF9f dHJhaXRzX3R5cGU6OmVxKF9fYywgX193YXRvbXNbX01fZV0pCiAgICAgICAgICAgICAgICAgICAg fHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3dhdG9tc1tfTV9FXSkpCiAgICAgICAgICAgICAg ICAgICAmJiAhX19mb3VuZF9zY2kgJiYgX19wb3MpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAg ICAgKytfX3BvczsKICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBj aGFyKCkpOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CgoKICAgICAgICAgICAgICBp ZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3BsdXMpCiAgICAgICAgICAgICAgICAgIHx8IF9f dHJhaXRzX3R5cGU6OmVxKF9fYywgX19taW51cykpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5h cnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19mb3VuZF9zY2kgPSB0cnVlOwogICAgICAg ICAgICB9CiAgICAgICAgICBlbHNlCgogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgoKCiAg ICAgIGlmIChfX2NoZWNrX2dyb3VwaW5nICYmIF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQogICAg ICAgIHsKCiAgICAgICAgICBpZiAoIV9fZm91bmRfZGVjKQogICAgICAgICAgICBfX2ZvdW5kX2dy b3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICBpZiAoIV9f dmVyaWZ5X2dyb3VwaW5nKF9fZ3JvdXBpbmcsIF9fZm91bmRfZ3JvdXBpbmcpKQogICAgICAgICAg ICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAgICAgX194dHJjICs9 IGNoYXIoKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19i YXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0No YXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X2ludChfSW5JdGVyIF9fYmVnLCBfSW5JdGVy IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlJiBfX2Vyciwgc3RyaW5nJiBfX3h0cmMsIGludCYgX19iYXNlKSBjb25zdAogICAgewogICAg ICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAgY29uc3Qg bG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYg X19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25zdCBu dW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xv Yyk7CgoKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19pby5mbGFncygp ICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNl OjpvY3QpCiAgICAgICAgX19iYXNlID0gODsKICAgICAgZWxzZSBpZiAoX19iYXNlZmllbGQgPT0g aW9zX2Jhc2U6OmhleCkKICAgICAgICBfX2Jhc2UgPSAxNjsKICAgICAgZWxzZQogICAgICAgIF9f YmFzZSA9IDEwOwoKCiAgICAgIGludCBfX3BvcyA9IDA7CiAgICAgIGNoYXJfdHlwZSBfX2MgPSAq X19iZWc7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3BsdXMgPSBfX2N0eXBlLndpZGVuKCcrJyk7 CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX21pbnVzID0gX19jdHlwZS53aWRlbignLScpOwoKICAg ICAgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fcGx1cykgfHwgX190cmFpdHNfdHlwZTo6 ZXEoX19jLCBfX21pbnVzKSkKICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsK ICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAg ICArK19fcG9zOwogICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICB9CgoKICAgICAg Y29uc3QgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oX1NfYXRvbXNbX01femVyb10p OwogICAgICBjb25zdCBjaGFyX3R5cGUgX194ID0gX19jdHlwZS53aWRlbigneCcpOwogICAgICBj b25zdCBjaGFyX3R5cGUgX19YID0gX19jdHlwZS53aWRlbignWCcpOwogICAgICBpZiAoX19iYXNl ID09IDEwKQogICAgICAgIHsKICAgICAgICAgIGJvb2wgX19mb3VuZF96ZXJvID0gZmFsc2U7CiAg ICAgICAgICB3aGlsZSAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3plcm8pICYmIF9fYmVnICE9 IF9fZW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAg ICAgICAgICAgICBfX2ZvdW5kX3plcm8gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICBp ZiAoX19mb3VuZF96ZXJvKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX194dHJjICs9IF9T X2F0b21zW19NX3plcm9dOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgaWYg KF9fYmFzZWZpZWxkID09IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlm ICgoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3gpCiAgICAgICAgICAgICAgICAgICAgICAgfHwg X190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX1gpKQogICAgICAgICAgICAgICAgICAgICAgJiYgX19i ZWcgIT0gX19lbmQpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg X194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICAgICAgICAg ICAgICsrX19wb3M7CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAg ICAgICAgICAgICAgICAgICAgX19iYXNlID0gMTY7CiAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19iYXNlID0gODsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19iYXNl ID09IDE2KQogICAgICAgIHsKICAgICAgICAgIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9f emVybykgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3h0 cmMgKz0gX1NfYXRvbXNbX01femVyb107CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAg ICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIGlmICgoX190cmFpdHNfdHlwZTo6 ZXEoX19jLCBfX3gpIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19YKSkKICAgICAgICAgICAg ICAgICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICAgICAg ICAgICsrX19wb3M7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgoKCiAgICAgIHNpemVfdCBfX2xlbjsK ICAgICAgaWYgKF9fYmFzZSA9PSAxNikKICAgICAgICBfX2xlbiA9IF9NX3NpemU7CiAgICAgIGVs c2UKICAgICAgICBfX2xlbiA9IF9fYmFzZTsKCgogICAgICBjaGFyX3R5cGUgX193YXRvbXNbX01f c2l6ZV07CiAgICAgIF9fY3R5cGUud2lkZW4oX1NfYXRvbXMsIF9TX2F0b21zICsgX19sZW4sIF9f d2F0b21zKTsKICAgICAgc3RyaW5nIF9fZm91bmRfZ3JvdXBpbmc7CiAgICAgIGNvbnN0IHN0cmlu ZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBib29sIF9fY2hlY2tfZ3JvdXBp bmcgPSBfX2dyb3VwaW5nLnNpemUoKTsKICAgICAgaW50IF9fc2VwX3BvcyA9IDA7CiAgICAgIGNv bnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOwogICAgICB3aGlsZSAo X19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3Ag PSBfX3RyYWl0c190eXBlOjpmaW5kKF9fd2F0b21zLCBfX2xlbiwgX19jKTsKCgogICAgICAgICAg aWYgKF9fcCAmJiAhX190cmFpdHNfdHlwZTo6ZXEoX19jLCBjaGFyX3R5cGUoKSkpCiAgICAgICAg ICAgIHsKCiAgICAgICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19fcCAtIF9fd2F0b21zXTsK ICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgICsrX19zZXBfcG9zOwogICAgICAg ICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYg KF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19zZXApICYmIF9fY2hlY2tfZ3JvdXBpbmcpCiAgICAg ICAgICAgIHsKCgogICAgICAgICAgICAgIGlmIChfX3NlcF9wb3MpCiAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4o X19zZXBfcG9zKTsKICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAg ICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBl bHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNl OjpmYWlsYml0OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgfQogICAgICAgICAgZWxzZQoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoK CgogICAgICBpZiAoX19jaGVja19ncm91cGluZyAmJiBfX2ZvdW5kX2dyb3VwaW5nLnNpemUoKSkK ICAgICAgICB7CgogICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFy PihfX3NlcF9wb3MpOwogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGluZyhfX2dyb3VwaW5n LCBfX2ZvdW5kX2dyb3VwaW5nKSkKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxi aXQ7CiAgICAgICAgfQoKCiAgICAgIF9feHRyYyArPSBjaGFyKCk7CiAgICAgIGlmIChfX2JlZyA9 PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4g X19iZWc7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J dGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dl dChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBib29sJiBfX3YpIGNvbnN0CiAgICB7Cgog ICAgICBpZiAoIShfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSkKICAgICAgICB7 CgoKICAgICAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgICAgICBpbnQgX19iYXNlOwogICAgICAg ICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0 cmMsIF9fYmFzZSk7CgogICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAgICAgICAgX19j b252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19i YXNlKTsKICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpICYmIF9fdWwg PD0gMSkKICAgICAgICAgICAgX192ID0gX191bDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAg X19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgfQoKCiAgICAgIGVsc2UKICAgICAg ICB7CiAgICAgICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsK ICAgICAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsKCiAg ICAgICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICAgICAgY29uc3QgbnVt cHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2Mp OwogICAgICAgICAgY29uc3QgX19zdHJpbmdfdHlwZSBfX3RydWUgPSBfX25wLnRydWVuYW1lKCk7 CiAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBlIF9fZmFsc2UgPSBfX25wLmZhbHNlbmFtZSgp OwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3RydWVzID0gX190cnVlLmNfc3RyKCk7CiAg ICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZmFsc2VzID0gX19mYWxzZS5jX3N0cigpOwogICAg ICAgICAgY29uc3Qgc2l6ZV90IF9fdHJ1ZW4gPSBfX3RydWUuc2l6ZSgpIC0gMTsKICAgICAgICAg IGNvbnN0IHNpemVfdCBfX2ZhbHNlbiA9IF9fZmFsc2Uuc2l6ZSgpIC0gMTsKCiAgICAgICAgICBm b3IgKHNpemVfdCBfX24gPSAwOyBfX2JlZyAhPSBfX2VuZDsgKytfX24pCiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnKys7CiAgICAgICAgICAgICAgYm9v bCBfX3Rlc3RmID0gX19uIDw9IF9fZmFsc2VuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg PyBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fZmFsc2VzW19fbl0pIDogZmFsc2U7CiAgICAgICAg ICAgICAgYm9vbCBfX3Rlc3R0ID0gX19uIDw9IF9fdHJ1ZW4KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA/IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX190cnVlc1tfX25dKSA6IGZhbHNlOwog ICAgICAgICAgICAgIGlmICghKF9fdGVzdGYgfHwgX190ZXN0dCkpCiAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAg ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmIChf X3Rlc3RmICYmIF9fbiA9PSBfX2ZhbHNlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgX192ID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0dCAmJiBfX24gPT0gX190cnVlbikKICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX192ID0gMTsKICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX2Jl ZyA9PSBfX2VuZCkKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAg ICB9CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5J dGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i YXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyYgX192 KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAg ICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRy YywgX19iYXNlKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19l cnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAg IG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBp dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlJiBfX2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5n IF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChf X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIHVuc2lnbmVk IGxvbmcgX191bDsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9f ZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6 ZmFpbGJpdCkKICAgICAgICAgICYmIF9fdWwgPD0gbnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hv cnQ+OjptYXgoKSkKICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX191 bCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAg cmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAg ZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywK ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBj b25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBf X2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywg X19iYXNlKTsKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAgICBfX2NvbnZlcnRfdG9fdihf X3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICBp ZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX191bCA8PSBudW1l cmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSkKICAgICAgICBfX3YgPSBzdGF0aWNfY2Fz dDx1bnNpZ25lZCBpbnQ+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jh c2U6OmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hh clQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2Vu ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1 bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAg IGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBf X2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMu Y19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBf X2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl cj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQo aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICB7 CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01f ZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwog ICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2Nh bGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hh clQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2Vu ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1 bnNpZ25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsK ICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19l bmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVydF90b192KF9f eHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgcmV0 dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf SW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRv X2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBjb25zdAogICAg ewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9f YmVnID0gX01fZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMp OwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19s b2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBf SW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlv c19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91Ymxl JiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIF9feHRyYy5yZXNl cnZlKDMyKTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBfX2VuZCwgX19p bywgX19lcnIsIF9feHRyYyk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBf X3YsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAg bnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0 ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh dGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194 dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9m bG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOwogICAgICBfX2NvbnZlcnRf dG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1 cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu SXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19n ZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikgY29uc3QKICAgIHsK CiAgICAgIHR5cGVkZWYgaW9zX2Jhc2U6OmZtdGZsYWdzIGZtdGZsYWdzOwogICAgICBmbXRmbGFn cyBfX2ZtdCA9IF9faW8uZmxhZ3MoKTsKICAgICAgZm10ZmxhZ3MgX19mbXRtYXNrID0gfihpb3Nf YmFzZTo6c2hvd3BvcyB8IGlvc19iYXNlOjpiYXNlZmllbGQKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8IGlvc19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50ZXJuYWwpOwogICAg ICBfX2lvLmZsYWdzKF9fZm10ICYgX19mbXRtYXNrIHwgKGlvc19iYXNlOjpoZXggfCBpb3NfYmFz ZTo6c2hvd2Jhc2UpKTsKCiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAg ICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194 dHJjLCBfX2Jhc2UpOwoKCiAgICAgIF9faW8uZmxhZ3MoX19mbXQpOwoKICAgICAgdW5zaWduZWQg bG9uZyBfX3VsOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19l cnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpm YWlsYml0KSkKICAgICAgICBfX3YgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihfX3VsKTsKICAg ICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICByZXR1cm4g X19iZWc7CiAgICB9CiMgNjE4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk ZS9jKysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4K ICAgICAgX091dEl0ZXIKICAgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICAgIF9N X2NvbnZlcnRfZmxvYXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmls bCwgY2hhciBfX21vZCwKICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUIF9fdikgY29uc3QK ICAgICAgewoKCiAgICAgICAgY29uc3QgaW50IF9fbWF4X2RpZ2l0cyA9IG51bWVyaWNfbGltaXRz PF9WYWx1ZVQ+OjpkaWdpdHMxMCArIDE7CiAgICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMgPSBfX2lv LnByZWNpc2lvbigpOwoKICAgICAgICBpZiAoX19wcmVjID4gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6 ZT4oX19tYXhfZGlnaXRzKSkKICAgICAgICAgIF9fcHJlYyA9IHN0YXRpY19jYXN0PHN0cmVhbXNp emU+KF9fbWF4X2RpZ2l0cyk7CgoKICAgICAgICBjaGFyIF9fZmJ1ZlsxNl07CgoKICAgICAgICBp bnQgX19sZW47CgoKCiAgICAgICAgaW50IF9fY3Nfc2l6ZSA9IF9fbWF4X2RpZ2l0cyAqIDM7CiAg ICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9f Y3Nfc2l6ZSkpOwoKICAgICAgICBjb25zdCBib29sIF9fZnAgPSBfU19mb3JtYXRfZmxvYXQoX19p bywgX19mYnVmLCBfX21vZCwgX19wcmVjKTsKICAgICAgICBpZiAoX19mcCkKICAgICAgICAgIF9f bGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlLCBfX3ByZWMpOwogICAg ICAgIGVsc2UKICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3Np emUsIF9fZmJ1ZiwgX192LCBfU19jX2xvY2FsZSk7CgoKICAgICAgICBpZiAoX19sZW4gPj0gX19j c19zaXplKQogICAgICAgICAgewogICAgICAgICAgICBfX2NzX3NpemUgPSBfX2xlbiArIDE7CiAg ICAgICAgICAgIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2Nz X3NpemUpKTsKICAgICAgICAgICAgaWYgKF9fZnApCiAgICAgICAgICAgICAgX19sZW4gPSBfX2Nv bnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlLCBfX3ByZWMpOwogICAgICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nf c2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9TX2NfbG9jYWxlKTsKICAgICAgICAgIH0KIyA2ODEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogICAgICAg IHJldHVybiBfTV93aWRlbl9mbG9hdChfX3MsIF9faW8sIF9fZmlsbCwgX19jcywgX19sZW4pOwog ICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgogICAgICBfT3V0SXRlcgogICAgICBudW1fcHV0 PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgICAgX01fY29udmVydF9pbnQoX091dEl0ZXIgX19zLCBp b3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciBfX21vZCwKICAgICAgICAgICAgICAg ICAgICAgY2hhciBfX21vZGwsIF9WYWx1ZVQgX192KSBjb25zdAogICAgICB7CgoKCiAgICAgICAg Y2hhciBfX2ZidWZbMTZdOwogICAgICAgIF9TX2Zvcm1hdF9pbnQoX19pbywgX19mYnVmLCBfX21v ZCwgX19tb2RsKTsKCgogICAgICAgIGludCBfX2NzX3NpemUgPSA2NDsKICAgICAgICBjaGFyKiBf X2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAg ICAgICAgaW50IF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1 ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUp OwoKICAgICAgICBpZiAoX19sZW4gPj0gX19jc19zaXplKQogICAgICAgICAgewogICAgICAgICAg ICBfX2NzX3NpemUgPSBfX2xlbiArIDE7CiAgICAgICAgICAgIF9fY3MgPSBzdGF0aWNfY2FzdDxj aGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAgICAgICAgX19sZW4gPSBf X2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSk7CiAgICAgICAgICB9CgoKCgoK CiAgICAgICAgcmV0dXJuIF9NX3dpZGVuX2ludChfX3MsIF9faW8sIF9fZmlsbCwgX19jcywgX19s ZW4pOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0 ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV93 aWRlbl9mbG9hdChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBj aGFyKiBfX2NzLAogICAgICAgICAgICAgICAgICAgaW50IF9fbGVuKSBjb25zdAogICAgewogICAg ICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKCgogICAgICBjb25z dCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+ JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9DaGFy VCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9D aGFyVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqIF9fbGVuKSk7CgoKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9D aGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbiAqIDIpKTsK ICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwoKCiAgICAgIGNv bnN0IF9DaGFyVCogX19wOwogICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNl X2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGlmIChfX3AgPSBfX3RyYWl0 c190eXBlOjpmaW5kKF9fd3MsIF9fbGVuLCBfX2N0eXBlLndpZGVuKCcuJykpKQogICAgICAgIF9f d3NbX19wIC0gX193c10gPSBfX25wLmRlY2ltYWxfcG9pbnQoKTsKCgoKCiAgICAgIGNvbnN0IHN0 cmluZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBpb3NfYmFzZTo6Zm10Zmxh Z3MgX19iYXNlZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAg ICBpZiAoX19ncm91cGluZy5zaXplKCkpCiAgICAgICAgewogICAgICAgICAgX0NoYXJUKiBfX3Ay OwogICAgICAgICAgaW50IF9fZGVjbGVuID0gX19wID8gX19wIC0gX193cyA6IF9fbGVuOwogICAg ICAgICAgX19wMiA9IF9fYWRkX2dyb3VwaW5nKF9fd3MyLCBfX25wLnRob3VzYW5kc19zZXAoKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZy5jX3N0cigpICsgX19ncm91cGlu Zy5zaXplKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193cywgX193cyArIF9f ZGVjbGVuKTsKICAgICAgICAgIGludCBfX25ld2xlbiA9IF9fcDIgLSBfX3dzMjsKCgogICAgICAg ICAgaWYgKF9fcCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fdHJhaXRzX3R5cGU6OmNv cHkoX19wMiwgX19wLCBfX2xlbiAtIF9fZGVjbGVuKTsKICAgICAgICAgICAgICBfX25ld2xlbiAr PSBfX2xlbiAtIF9fZGVjbGVuOwogICAgICAgICAgICB9CgoKICAgICAgICAgIF9fd3MgPSBfX3dz MjsKICAgICAgICAgIF9fbGVuID0gX19uZXdsZW47CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9N X2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX193cywgX19sZW4pOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51 bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgX01fd2lkZW5faW50KF9PdXRJdGVyIF9fcywg aW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAgICAgICAgICAg ICAgaW50IF9fbGVuKSBjb25zdAogICAgewoKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9f aW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFj ZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX0NoYXJUKiBfX3dzID0gc3RhdGljX2Nh c3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19sZW4pKTsK CgogICAgICBfQ2hhclQqIF9fd3MyID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2Fs bG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqIF9fbGVuICogMikpOwogICAgICBfX2N0eXBlLndpZGVu KF9fY3MsIF9fY3MgKyBfX2xlbiwgX193cyk7CgoKICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJU PiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25z dCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAgICAgY29uc3QgaW9zX2Jh c2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2Vm aWVsZDsKICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgIHsKCgoKCgogICAgICAg ICAgc3RyZWFtc2l6ZSBfX29mZiA9IDA7CiAgICAgICAgICBpZiAoKF9faW8uZmxhZ3MoKSAmIGlv c19iYXNlOjpzaG93YmFzZSkgJiYgX19sZW4gPiAxKQogICAgICAgICAgICBpZiAoX19iYXNlZmll bGQgPT0gaW9zX2Jhc2U6Om9jdCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfX29m ZiA9IDE7CiAgICAgICAgICAgICAgICAqX193czIgPSAqX193czsKICAgICAgICAgICAgICB9CiAg ICAgICAgICAgIGVsc2UgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgpCiAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgX19vZmYgPSAyOwogICAgICAgICAgICAgICAgKl9fd3My ID0gKl9fd3M7CiAgICAgICAgICAgICAgICAqKF9fd3MyICsgMSkgPSAqKF9fd3MgKyAxKTsKICAg ICAgICAgICAgICB9CiAgICAgICAgICBfQ2hhclQqIF9fcDsKICAgICAgICAgIF9fcCA9IF9fYWRk X2dyb3VwaW5nKF9fd3MyICsgX19vZmYsIF9fbnAudGhvdXNhbmRzX3NlcCgpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZy5jX3N0cigpLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19ncm91cGluZy5jX3N0cigpICsgX19ncm91cGluZy5zaXplKCksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dzICsgX19vZmYsIF9fd3MgKyBfX2xlbik7 CiAgICAgICAgICBfX2xlbiA9IF9fcCAtIF9fd3MyOwoKICAgICAgICAgIF9fd3MgPSBfX3dzMjsK ICAgICAgICB9CiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fd3Ms IF9fbGVuKTsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P dXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAg X01faW5zZXJ0KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNv bnN0IF9DaGFyVCogX193cywKICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0CiAgICB7CiAg ICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwoKICAgICAgc3Ry ZWFtc2l6ZSBfX3cgPSBfX2lvLndpZHRoKCk7CiAgICAgIF9DaGFyVCogX193czIgPSBzdGF0aWNf Y2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX193KSk7 CiAgICAgIGlmIChfX3cgPiBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2xlbikpCiAgICAgICAg ewogICAgICAgICAgX19wYWQ8X0NoYXJULCBfX3RyYWl0c190eXBlPjo6X1NfcGFkKF9faW8sIF9f ZmlsbCwgX193czIsIF9fd3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX193LCBfX2xlbiwgdHJ1ZSk7CiAgICAgICAgICBfX2xlbiA9IHN0YXRpY19jYXN0 PGludD4oX193KTsKCiAgICAgICAgICBfX3dzID0gX193czI7CiAgICAgICAgfQogICAgICBfX2lv LndpZHRoKDApOwoKCgogICAgICBmb3IgKGludCBfX2ogPSAwOyBfX2ogPCBfX2xlbjsgKytfX2os ICsrX19zKQogICAgICAgICpfX3MgPSBfX3dzW19fal07CiAgICAgIHJldHVybiBfX3M7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0 SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBl IF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdAog ICAgewogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faW8uZmxhZ3MoKTsKICAg ICAgaWYgKChfX2ZsYWdzICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkgPT0gMCkKICAgICAgICB7CiAg ICAgICAgICB1bnNpZ25lZCBsb25nIF9fdXYgPSBfX3Y7CiAgICAgICAgICBfX3MgPSBfTV9jb252 ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCBjaGFyKCksIF9fdXYpOwogICAgICAgIH0K ICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFy VD4gX19zdHJpbmdfdHlwZTsKICAgICAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7 CiAgICAgICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1 bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgICAgICBfX3N0cmluZ190eXBlIF9fbmFtZTsKICAg ICAgICAgIGlmIChfX3YpCiAgICAgICAgICAgIF9fbmFtZSA9IF9fbnAudHJ1ZW5hbWUoKTsKICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgX19uYW1lID0gX19ucC5mYWxzZW5hbWUoKTsKICAgICAg ICAgIF9fcyA9IF9NX2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX19uYW1lLmNfc3RyKCksIF9f bmFtZS5zaXplKCkpOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBu dW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3Nf YmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVy biBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ2QnLCBjaGFyKCksIF9fdik7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJ dGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUg X19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICB1bnNpZ25l ZCBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywg X19maWxsLCAndScsIGNoYXIoKSwgX192KTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091 dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19iLCBjaGFyX3R5 cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9p bnQoX19zLCBfX2IsIF9fZmlsbCwgJ2QnLCAnbCcsIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9D aGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19p bywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBj b25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1Jywg J2wnLCBfX3YpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJ dGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9f cHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBkb3Vi bGUgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9mbG9hdChfX3MsIF9faW8sIF9f ZmlsbCwgY2hhcigpLCBfX3YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6 CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2Zp bGwsCiAgICAgICAgICAgbG9uZyBkb3VibGUgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29u dmVydF9mbG9hdChfX3MsIF9faW8sIF9fZmlsbCwgJ0wnLCBfX3YpOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1 dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2Um IF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgY29uc3Qgdm9pZCogX192KSBjb25z dAogICAgewogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faW8uZmxhZ3MoKTsK ICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gfihpb3NfYmFzZTo6c2hvd3BvcyB8IGlv c19iYXNlOjpiYXNlZmllbGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlv c19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50ZXJuYWwpOwogICAgICBfX2lvLmZsYWdz KF9fZmxhZ3MgJiBfX2ZtdCB8IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7 CiAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIF9fcyA9IF9NX2NvbnZlcnRfaW50KF9fcywg X19pbywgX19maWxsLCAndScsIGNoYXIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgbG9uZz4oX192KSk7CiAgICAgICAgICBfX2lvLmZs YWdzKF9fZmxhZ3MpOwogICAgICAgIH0KICAgICAgY2F0Y2ggKC4uLikKICAgICAgICB7CiAgICAg ICAgICBfX2lvLmZsYWdzKF9fZmxhZ3MpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAg ICByZXR1cm4gX19zOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbW9uZXlfZ2V0PF9DaGFyVCwgX0luSXRlcj46Ogog ICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwg aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25n IGRvdWJsZSYgX191bml0cykgY29uc3QKICAgIHsKICAgICAgc3RyaW5nX3R5cGUgX19zdHI7CiAg ICAgIF9fYmVnID0gdGhpcy0+ZG9fZ2V0KF9fYmVnLCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2Vy ciwgX19zdHIpOwoKICAgICAgY29uc3QgaW50IF9fbiA9IG51bWVyaWNfbGltaXRzPGxvbmcgZG91 YmxlPjo6ZGlnaXRzMTA7CiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19i dWlsdGluX2FsbG9jYShfX24pKTsKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRs b2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlw ZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25zdCBfQ2hhclQqIF9fd2NzID0gX19zdHIuY19z dHIoKTsKICAgICAgX19jdHlwZS5uYXJyb3coX193Y3MsIF9fd2NzICsgX19zdHIuc2l6ZSgpICsg MSwgY2hhcigpLCBfX2NzKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX19jcywgX191bml0cywgX19l cnIsIF9TX2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBtb25leV9n ZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5 cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZ190eXBlJiBfX3VuaXRzKSBjb25zdAogICAgewoKICAg ICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgdHJ1ZT4gX19tb25leV90cnVlOwogICAgICB0 eXBlZGVmIG1vbmV5cHVuY3Q8X0NoYXJULCBmYWxzZT4gX19tb25leV9mYWxzZTsKICAgICAgdHlw ZWRlZiBtb25leV9iYXNlOjpwYXJ0IHBhcnQ7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RyaW5n X3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CgogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBf X2lvLmdldGxvYygpOwogICAgICBjb25zdCBfX21vbmV5X3RydWUmIF9fbXB0ID0gdXNlX2ZhY2V0 PF9fbW9uZXlfdHJ1ZT4oX19sb2MpOwogICAgICBjb25zdCBfX21vbmV5X2ZhbHNlJiBfX21wZiA9 IHVzZV9mYWNldDxfX21vbmV5X2ZhbHNlPihfX2xvYyk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFy VD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCiAgICAgIGNv bnN0IG1vbmV5X2Jhc2U6OnBhdHRlcm4gX19wID0gX19pbnRsID8gX19tcHQubmVnX2Zvcm1hdCgp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYubmVn X2Zvcm1hdCgpOwoKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19wb3Nfc2lnbiA9X19pbnRsID8g X19tcHQucG9zaXRpdmVfc2lnbigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6IF9fbXBmLnBvc2l0aXZlX3NpZ24oKTsKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUg X19uZWdfc2lnbiA9X19pbnRsID8gX19tcHQubmVnYXRpdmVfc2lnbigpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLm5lZ2F0aXZlX3NpZ24oKTsKICAg ICAgY29uc3QgY2hhcl90eXBlIF9fZCA9IF9faW50bCA/IF9fbXB0LmRlY2ltYWxfcG9pbnQoKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZGVjaW1hbF9wb2ludCgp OwogICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX2ludGwgPyBfX21wdC50aG91c2FuZHNf c2VwKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYudGhvdXNh bmRzX3NlcCgpOwoKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX2ludGwgPyBfX21w dC5ncm91cGluZygpIDogX19tcGYuZ3JvdXBpbmcoKTsKCgogICAgICBzdHJpbmdfdHlwZSBfX3Np Z247CgogICAgICBzdHJpbmcgX19ncm91cGluZ190bXA7CgogICAgICBpbnQgX19zZXBfcG9zID0g MDsKCiAgICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOwoKICAgICAgYm9vbCBfX3Rlc3RkZWNm b3VuZCA9IGZhbHNlOwoKCiAgICAgIHN0cmluZ190eXBlIF9fdGVtcF91bml0czsKCiAgICAgIGNo YXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAgIGNoYXJfdHlwZSBfX2VvZiA9IHN0YXRpY19jYXN0 PGNoYXJfdHlwZT4oY2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6ZW9mKCkpOwogICAgICBmb3IgKGlu dCBfX2kgPSAwOyBfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCA0ICYmIF9fdGVzdHZhbGlkOyArK19f aSkKICAgICAgICB7CiAgICAgICAgICBwYXJ0IF9fd2hpY2ggPSBzdGF0aWNfY2FzdDxwYXJ0Pihf X3AuZmllbGRbX19pXSk7CiAgICAgICAgICBzd2l0Y2ggKF9fd2hpY2gpCiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnN5bWJvbDoKICAgICAgICAgICAg ICAgICAgaWYgKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZQogICAgICAgICAgICAg ICAgICAgICAgfHwgX19pIDwgMiB8fCBfX3NpZ24uc2l6ZSgpID4gMQogICAgICAgICAgICAgICAg ICAgICAgfHwgKChzdGF0aWNfY2FzdDxwYXJ0PihfX3AuZmllbGRbM10pICE9IG1vbmV5X2Jhc2U6 Om5vbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgX19pID09IDIpKQogICAgICAgICAg ICAgICAgICAgIHsKCgoKCgogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUg X19zeW1ib2wgPSBfX2ludGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuY3Vycl9zeW1i b2woKTsKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fc3ltYm9sLnNp emUoKTsKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX2ogPSAwOwogICAgICAgICAg ICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiYgX19qIDwgX19sZW4gJiYgX19zeW1ib2xbX19qXSA9PSBfX2MpCiAgICAgICAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcp OwogICAgICAgICAgICAgICAgICAgICAgICAgICsrX19qOwogICAgICAgICAgICAgICAgICAgICAg ICB9CgoKICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2ogIT0gX19sZW4gJiYgKF9faW8uZmxh Z3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVz dHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c2lnbjoKCiAgICAgICAgICAg ICAgICAgIGlmIChfX3Bvc19zaWduLnNpemUoKSAmJiBfX25lZ19zaWduLnNpemUoKSkKICAgICAg ICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICBpZiAoX19jID09IF9fcG9zX3NpZ25b MF0pCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fc2ln biA9IF9fcG9zX3NpZ247CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7 CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19j ID09IF9fbmVnX3NpZ25bMF0pCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgICAgIF9fc2lnbiA9IF9fbmVnX3NpZ247CiAgICAgICAgICAgICAgICAgICAgICAgIF9f YyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX3Bvc19zaWduLnNpemUo KSAmJiBfX2MgPT0gX19wb3Nfc2lnblswXSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICAgICBfX3NpZ24gPSBfX3Bvc19zaWduOwogICAgICAgICAgICAgICAgICAgICAg X19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg IGVsc2UgaWYgKF9fbmVnX3NpZ24uc2l6ZSgpICYmIF9fYyA9PSBfX25lZ19zaWduWzBdKQogICAg ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9fbmVnX3Np Z247CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1v bmV5X2Jhc2U6OnZhbHVlOgoKCiAgICAgICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2Vu ZAogICAgICAgICAgICAgICAgICAgICAgICAgJiYgKF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGln aXQsIF9fYykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoX19jID09IF9fZCAmJiAh X190ZXN0ZGVjZm91bmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX19jID09IF9f c2VwKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoX19j ID09IF9fZCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg ICAgIF9fZ3JvdXBpbmdfdG1wICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3Rlc3RkZWNmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9fYyA9PSBfX3NlcCkKICAgICAgICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUo KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fZ3JvdXBpbmdfdG1wICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Rlc3R2 YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgX190ZW1wX3VuaXRzICs9IF9fYzsKICAgICAgICAgICAgICAgICAgICAg ICAgICArK19fc2VwX3BvczsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzcGFjZToK ICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6bm9uZToKCiAgICAgICAgICAgICAgICAg IGlmIChfX2kgIT0gMykKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQK ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFj ZSwgX19jKSkKICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgogICAgICBpZiAo X19zaWduLnNpemUoKSA+IDEpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0g X19zaWduLnNpemUoKTsKICAgICAgICAgIHNpemVfdHlwZSBfX2kgPSAxOwogICAgICAgICAgZm9y ICg7IF9fYyAhPSBfX2VvZiAmJiBfX2kgPCBfX2xlbjsgKytfX2kpCiAgICAgICAgICAgIHdoaWxl IChfX2JlZyAhPSBfX2VuZCAmJiBfX2MgIT0gX19zaWduW19faV0pCiAgICAgICAgICAgICAgX19j ID0gKigrK19fYmVnKTsKCiAgICAgICAgICBpZiAoX19pICE9IF9fbGVuKQogICAgICAgICAgICBf X3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgIH0KCgogICAgICB3aGlsZSAoX190ZW1wX3VuaXRz WzBdID09IF9fY3R5cGUud2lkZW4oJzAnKSkKICAgICAgICBfX3RlbXBfdW5pdHMuZXJhc2UoX190 ZW1wX3VuaXRzLmJlZ2luKCkpOwoKICAgICAgaWYgKF9fc2lnbi5zaXplKCkgJiYgX19zaWduID09 IF9fbmVnX3NpZ24pCiAgICAgICAgX190ZW1wX3VuaXRzLmluc2VydChfX3RlbXBfdW5pdHMuYmVn aW4oKSwgX19jdHlwZS53aWRlbignLScpKTsKCgogICAgICBpZiAoX19ncm91cGluZy5zaXplKCkg JiYgX19ncm91cGluZ190bXAuc2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgIGlmICghX192ZXJp ZnlfZ3JvdXBpbmcoX19ncm91cGluZywgX19ncm91cGluZ190bXApKQogICAgICAgICAgICBfX3Rl c3R2YWxpZCA9IGZhbHNlOwogICAgICAgIH0KCgogICAgICBpZiAoX19jID09IF9fZW9mKQogICAg ICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CgoKICAgICAgaWYgKCFfX3Rlc3R2YWxpZCB8 fCAhX190ZW1wX3VuaXRzLnNpemUoKSkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp dDsKICAgICAgZWxzZQoKICAgICAgICBfX3RlbXBfdW5pdHMuc3dhcChfX3VuaXRzKTsKCiAgICAg IHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46 OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywg Y2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdAog ICAgewogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25z dCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv Yyk7CgoKICAgICAgaW50IF9fY3Nfc2l6ZSA9IDY0OwogICAgICBjaGFyKiBfX2NzID0gc3RhdGlj X2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAgICAgIGludCBfX2xl biA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCAiJS4wMUxmIiwgX191bml0cywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSk7CgogICAgICBp ZiAoX19sZW4gPj0gX19jc19zaXplKQogICAgICAgIHsKICAgICAgICAgIF9fY3Nfc2l6ZSA9IF9f bGVuICsgMTsKICAgICAgICAgIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2Fs bG9jYShfX2NzX3NpemUpKTsKICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2Nz LCBfX2NzX3NpemUsICIlLjAxTGYiLCBfX3VuaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9TX2NfbG9jYWxlKTsKICAgICAgICB9CgoKCgoKCgogICAgICBfQ2hhclQqIF9f d3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQp ICogX19jc19zaXplKSk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVuLCBf X3dzKTsKICAgICAgc3RyaW5nX3R5cGUgX19kaWdpdHMoX193cyk7CiAgICAgIHJldHVybiB0aGlz LT5kb19wdXQoX19zLCBfX2ludGwsIF9faW8sIF9fZmlsbCwgX19kaWdpdHMpOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIK ICAgIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9f cywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAg ICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBzdHJpbmdfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgdHlwZWRl ZiBtb25leV9iYXNlOjpwYXJ0IHBhcnQ7CgogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lv LmdldGxvYygpOwogICAgICBjb25zdCBzaXplX3R5cGUgX193aWR0aCA9IHN0YXRpY19jYXN0PHNp emVfdHlwZT4oX19pby53aWR0aCgpKTsKCgogICAgICB0eXBlZGVmIG1vbmV5cHVuY3Q8X0NoYXJU LCB0cnVlPiBfX21vbmV5X3RydWU7CiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIGZh bHNlPiBfX21vbmV5X2ZhbHNlOwogICAgICBjb25zdCBfX21vbmV5X3RydWUmIF9fbXB0ID0gdXNl X2ZhY2V0PF9fbW9uZXlfdHJ1ZT4oX19sb2MpOwogICAgICBjb25zdCBfX21vbmV5X2ZhbHNlJiBf X21wZiA9IHVzZV9mYWNldDxfX21vbmV5X2ZhbHNlPihfX2xvYyk7CiAgICAgIGNvbnN0IGN0eXBl PF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCgoK ICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2JlZyA9IF9fZGlnaXRzLmRhdGEoKTsKICAgICAgY29u c3QgY2hhcl90eXBlKiBfX2VuZCA9IF9fYmVnICsgX19kaWdpdHMuc2l6ZSgpOwogICAgICBtb25l eV9iYXNlOjpwYXR0ZXJuIF9fcDsKICAgICAgc3RyaW5nX3R5cGUgX19zaWduOwogICAgICBpZiAo Kl9fYmVnICE9IF9fY3R5cGUud2lkZW4oJy0nKSkKICAgICAgICB7CiAgICAgICAgICBfX3AgPSBf X2ludGwgPyBfX21wdC5wb3NfZm9ybWF0KCkgOiBfX21wZi5wb3NfZm9ybWF0KCk7CiAgICAgICAg ICBfX3NpZ24gPV9faW50bCA/IF9fbXB0LnBvc2l0aXZlX3NpZ24oKSA6IF9fbXBmLnBvc2l0aXZl X3NpZ24oKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfX3AgPSBf X2ludGwgPyBfX21wdC5uZWdfZm9ybWF0KCkgOiBfX21wZi5uZWdfZm9ybWF0KCk7CiAgICAgICAg ICBfX3NpZ24gPV9faW50bCA/IF9fbXB0Lm5lZ2F0aXZlX3NpZ24oKSA6IF9fbXBmLm5lZ2F0aXZl X3NpZ24oKTsKICAgICAgICAgICsrX19iZWc7CiAgICAgICAgfQoKCiAgICAgIF9fZW5kID0gX19j dHlwZS5zY2FuX25vdChjdHlwZV9iYXNlOjpkaWdpdCwgX19iZWcsIF9fZW5kKTsKICAgICAgaWYg KF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKCgoKICAgICAgICAgIHN0cmluZ190eXBlIF9fcmVz OwogICAgICAgICAgc3RyaW5nX3R5cGUgX192YWx1ZTsKICAgICAgICAgIGNvbnN0IHN0cmluZ190 eXBlIF9fc3ltYm9sID0gX19pbnRsID8gX19tcHQuY3Vycl9zeW1ib2woKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5jdXJyX3N5bWJvbCgpOwoK CiAgICAgICAgICBjb25zdCBpbnQgX19mcmFjID0gX19pbnRsID8gX19tcHQuZnJhY19kaWdpdHMo KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmZyYWNfZGlnaXRz KCk7CiAgICAgICAgICBpZiAoX19mcmFjID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAg IGNvbnN0IGNoYXJfdHlwZSBfX2QgPSBfX2ludGwgPyBfX21wdC5kZWNpbWFsX3BvaW50KCkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZGVjaW1hbF9w b2ludCgpOwogICAgICAgICAgICAgIGlmIChfX2VuZCAtIF9fYmVnID49IF9fZnJhYykKICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX192YWx1ZSA9IHN0cmluZ190eXBlKF9fZW5k IC0gX19mcmFjLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFs dWUuYmVnaW4oKSwgX19kKTsKICAgICAgICAgICAgICAgICAgX19lbmQgLT0gX19mcmFjOwogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKCiAgICAg ICAgICAgICAgICAgIF9fdmFsdWUgPSBzdHJpbmdfdHlwZShfX2JlZywgX19lbmQpOwogICAgICAg ICAgICAgICAgICBpbnQgX19wYWRkZWMgPSBfX2ZyYWMgLSAoX19lbmQgLSBfX2JlZyk7CiAgICAg ICAgICAgICAgICAgIGNoYXJfdHlwZSBfX3plcm8gPSBfX2N0eXBlLndpZGVuKCcwJyk7CiAgICAg ICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFsdWUuYmVnaW4oKSwgX19wYWRkZWMsIF9f emVybyk7CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFsdWUuYmVnaW4oKSwg X19kKTsKICAgICAgICAgICAgICAgICAgX19iZWcgPSBfX2VuZDsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgfQoKCgogICAgICAgICAgaWYgKF9fYmVnICE9IF9fZW5kKQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX2ludGwgPyBfX21w dC5ncm91cGluZygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOiBfX21wZi5ncm91cGluZygpOwogICAgICAgICAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUo KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlIF9f c2VwID0gX19pbnRsID8gX19tcHQudGhvdXNhbmRzX3NlcCgpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLnRob3VzYW5kc19zZXAoKTsKICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19nYmVnID0gX19ncm91cGluZy5jX3N0cigpOwog ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2dlbmQgPSBfX2diZWcgKyBfX2dyb3VwaW5n LnNpemUoKTsKICAgICAgICAgICAgICAgICAgY29uc3QgaW50IF9fbiA9IChfX2VuZCAtIF9fYmVn KSAqIDI7CiAgICAgICAgICAgICAgICAgIF9DaGFyVCogX193czIgPQogICAgICAgICAgICAgICAg ICAgIHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkg KiBfX24pKTsKICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX3dzX2VuZCA9IF9fYWRkX2dyb3Vw aW5nKF9fd3MyLCBfX3NlcCwgX19nYmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19nZW5kLCBfX2JlZywgX19lbmQpOwogICAgICAgICAgICAg ICAgICBfX3ZhbHVlLmluc2VydCgwLCBfX3dzMiwgX193c19lbmQgLSBfX3dzMik7CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX192YWx1ZS5pbnNl cnQoMCwgc3RyaW5nX3R5cGUoX19iZWcsIF9fZW5kKSk7CiAgICAgICAgICAgIH0KCgogICAgICAg ICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZiA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1 c3RmaWVsZDsKICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fdmFsdWUuc2l6ZSgpICsgX19z aWduLnNpemUoKTsKICAgICAgICAgIF9fbGVuICs9IChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6 c2hvd2Jhc2UpID8gX19zeW1ib2wuc2l6ZSgpIDogMDsKICAgICAgICAgIGJvb2wgX190ZXN0aXBh ZCA9IF9fZiA9PSBpb3NfYmFzZTo6aW50ZXJuYWwgJiYgX19sZW4gPCBfX3dpZHRoOwoKCiAgICAg ICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCA0OyArK19faSkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIHBhcnQgX193aGljaCA9IHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFtfX2ld KTsKICAgICAgICAgICAgICBzd2l0Y2ggKF9fd2hpY2gpCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnN5bWJvbDoKICAgICAgICAgICAgICAgICAgaWYg KF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkKICAgICAgICAgICAgICAgICAgICBf X3JlcyArPSBfX3N5bWJvbDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg ICBjYXNlIG1vbmV5X2Jhc2U6OnNpZ246CgoKCiAgICAgICAgICAgICAgICAgIGlmIChfX3NpZ24u c2l6ZSgpKQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fc2lnblswXTsKICAgICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnZhbHVlOgog ICAgICAgICAgICAgICAgICBfX3JlcyArPSBfX3ZhbHVlOwogICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3BhY2U6CgoKCiAgICAgICAgICAg ICAgICAgIGlmIChfX3Rlc3RpcGFkKQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IHN0cmlu Z190eXBlKF9fd2lkdGggLSBfX2xlbiwgX19maWxsKTsKICAgICAgICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fY3R5cGUud2lkZW4oX19maWxsKTsKICAgICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6Om5vbmU6 CiAgICAgICAgICAgICAgICAgIGlmIChfX3Rlc3RpcGFkKQogICAgICAgICAgICAgICAgICAgIF9f cmVzICs9IHN0cmluZ190eXBlKF9fd2lkdGggLSBfX2xlbiwgX19maWxsKTsKICAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCgogICAgICAgICAg aWYgKF9fc2lnbi5zaXplKCkgPiAxKQogICAgICAgICAgICBfX3JlcyArPSBzdHJpbmdfdHlwZShf X3NpZ24uYmVnaW4oKSArIDEsIF9fc2lnbi5lbmQoKSk7CgoKICAgICAgICAgIF9fbGVuID0gX19y ZXMuc2l6ZSgpOwogICAgICAgICAgaWYgKF9fd2lkdGggPiBfX2xlbikKICAgICAgICAgICAgewog ICAgICAgICAgICAgIGlmIChfX2YgPT0gaW9zX2Jhc2U6OmxlZnQpCgogICAgICAgICAgICAgICAg X19yZXMuYXBwZW5kKF9fd2lkdGggLSBfX2xlbiwgX19maWxsKTsKICAgICAgICAgICAgICBlbHNl CgogICAgICAgICAgICAgICAgX19yZXMuaW5zZXJ0KDAsIHN0cmluZ190eXBlKF9fd2lkdGggLSBf X2xlbiwgX19maWxsKSk7CiAgICAgICAgICAgICAgX19sZW4gPSBfX3dpZHRoOwogICAgICAgICAg ICB9CgoKICAgICAgICAgIGZvciAoc2l6ZV90eXBlIF9faiA9IDA7IF9faiA8IF9fbGVuOyArK19f aiwgKytfX3MpCiAgICAgICAgICAgICpfX3MgPSBfX3Jlc1tfX2pdOwogICAgICAgIH0KICAgICAg X19pby53aWR0aCgwKTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIHRpbWVfYmFzZTo6ZGF0ZW9yZGVy CiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+Ojpkb19kYXRlX29yZGVyKCkgY29uc3QKICAg IHsgcmV0dXJuIHRpbWVfYmFzZTo6bm9fb3JkZXI7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5J dGVyPjo6CiAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90 eXBlJiBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW9z X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSwKICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBfQ2hhclQqIF9fZm9ybWF0KSBjb25zdAogICAgewogICAgICBsb2NhbGUgX19sb2Mg PSBfX2lvLmdldGxvYygpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0g dXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IGN0eXBl PF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAg ICAgc2l6ZV90IF9fbGVuID0gY2hhcl90cmFpdHM8X0NoYXJUPjo6bGVuZ3RoKF9fZm9ybWF0KTsK CiAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9fYmVnICE9IF9fZW5kICYmIF9faSA8IF9fbGVu ICYmICFfX2VycjsgKytfX2kpCiAgICAgICAgewogICAgICAgICAgY2hhciBfX2MgPSBfX2Zvcm1h dFtfX2ldOwogICAgICAgICAgaWYgKF9fYyA9PSAnJScpCiAgICAgICAgICAgIHsKCiAgICAgICAg ICAgICAgX19jID0gX19mb3JtYXRbKytfX2ldOwogICAgICAgICAgICAgIGNoYXIgX19tb2QgPSAw OwogICAgICAgICAgICAgIGludCBfX21lbSA9IDA7CiAgICAgICAgICAgICAgaWYgKF9fYyA9PSAn RScgfHwgX19jID09ICdPJykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19t b2QgPSBfX2M7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fZm9ybWF0WysrX19pXTsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICBzd2l0Y2ggKF9fYykKICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19jczsKICAgICAgICAgICAgICAgICAgX0No YXJUIF9fd2NzWzEwXTsKICAgICAgICAgICAgICAgIGNhc2UgJ2EnOgoKICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhcl90eXBlKiBfX2RheXMxWzddOwogICAgICAgICAgICAgICAgICBfX3RwLl9N X2RheXNfYWJicmV2aWF0ZWQoX19kYXlzMSk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3Rf bmFtZShfX2JlZywgX19lbmQsIF9fdG0tPnRtX3dkYXksIF9fZGF5czEsIDcsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICAgICAgY2FzZSAnQSc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5 cGUqIF9fZGF5czJbN107CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF5cyhfX2RheXMyKTsK ICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1f d2RheSwgX19kYXlzMiwgNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJy KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdoJzoKICAg ICAgICAgICAgICAgIGNhc2UgJ2InOgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBl KiBfX21vbnRoczFbMTJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX21vbnRoc19hYmJyZXZp YXRlZChfX21vbnRoczEpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcs IF9fZW5kLCBfX3RtLT50bV9tb24sIF9fbW9udGhzMSwgMTIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgY2FzZSAnQic6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9u dGhzMlsxMl07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fbW9udGhzKF9fbW9udGhzMik7CiAg ICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21v biwgX19tb250aHMyLCAxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJy KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdjJzoKCiAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kdFsyXTsKICAgICAgICAgICAgICAg ICAgX190cC5fTV9kYXRlX3RpbWVfZm9ybWF0cyhfX2R0KTsKICAgICAgICAgICAgICAgICAgX01f ZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2R0WzBdKTsKICAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdkJzoKCiAgICAgICAgICAgICAgICAg IF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWRheSwgMSwgMzEsIDIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdEJzoKCiAgICAgICAgICAgICAg ICAgIF9fY3MgPSAiJW0vJWQvJXkiOwogICAgICAgICAgICAgICAgICBfX2N0eXBlLndpZGVuKF9f Y3MsIF9fY3MgKyA5LCBfX3djcyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zv cm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX193Y3MpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgICAgIGNhc2UgJ0gnOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0o X19iZWcsIF9fZW5kLCBfX3RtLT50bV9ob3VyLCAwLCAyMywgMiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgIGNhc2UgJ0knOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9u dW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9ob3VyLCAxLCAxMiwgMiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgICAgIGNhc2UgJ20nOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFj dF9udW0oX19iZWcsIF9fZW5kLCBfX21lbSwgMSwgMTIsIDIsIF9fY3R5cGUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgaWYgKCFfX2Vy cikKICAgICAgICAgICAgICAgICAgICBfX3RtLT50bV9tb24gPSBfX21lbSAtIDE7CiAgICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnTSc6CgogICAgICAgICAgICAg ICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21pbiwgMCwgNTksIDIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICduJzoKICAgICAgICAgICAg ICAgICAgaWYgKF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkgPT0gJ1xuJykKICAgICAgICAgICAg ICAgICAgICArK19fYmVnOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg ICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICAgICAgY2FzZSAnUic6CgogICAgICAgICAgICAgICAgICBfX2NzID0gIiVIOiVN IjsKICAgICAgICAgICAgICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgNiwgX193Y3Mp OwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBf X2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fd2NzKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdT JzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+ dG1fc2VjLCAwLCA1OSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlw ZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug J3QnOgogICAgICAgICAgICAgICAgICBpZiAoX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKSA9PSAn XHQnKQogICAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1QnOgoKICAgICAgICAgICAgICAgICAg X19jcyA9ICIlSDolTTolUyI7CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4oX19jcywg X19jcyArIDksIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0 KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgY2FzZSAneCc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f ZGF0ZXNbMl07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF0ZV9mb3JtYXRzKF9fZGF0ZXMp OwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBf X2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fZGF0ZXNbMF0pOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNh c2UgJ1gnOgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3RpbWVzWzJdOwog ICAgICAgICAgICAgICAgICBfX3RwLl9NX3RpbWVfZm9ybWF0cyhfX3RpbWVzKTsKICAgICAgICAg ICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIs IF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RpbWVzWzBd KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICd5JzoKCiAg ICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1feWVh ciwgMCwgOTksIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9f ZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdZJzoK CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX19tZW0sIDAs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWNfbGltaXRzPGludD46Om1h eCgpLCA0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7 CiAgICAgICAgICAgICAgICAgIGlmICghX19lcnIpCiAgICAgICAgICAgICAgICAgICAgX190bS0+ dG1feWVhciA9IF9fbWVtIC0gMTkwMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgICAgICBjYXNlICdaJzoKCiAgICAgICAgICAgICAgICAgIGlmIChfX2N0eXBlLmlzKGN0eXBl X2Jhc2U6OnVwcGVyLCAqX19iZWcpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgICAgIGludCBfX3RtcDsKICAgICAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFt ZShfX2JlZywgX19lbmQsIF9fdG1wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9TX3RpbWV6b25lcywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAxNCwgX19lcnIpOwoKCiAgICAgICAgICAgICAgICAgICAgICBj aGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICAgICAgICAgICAgICAgICAgaWYgKCFfX2VyciAm JiBfX3RtcCA9PSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKF9fYyA9PSBfX2N0eXBl LndpZGVuKCctJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX19jID09IF9fY3R5 cGUud2lkZW4oJysnKSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG1wLCAwLCAyMywgMiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIp OwogICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwg X190bXAsIDAsIDU5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg ICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKCiAgICAgICAgICAgICAgICAg ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewoKICAg ICAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApKQogICAg ICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgIH0K ICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu SXRlcj4KICAgIHZvaWQKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0 cmFjdF9udW0oaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJl ciwKICAgICAgICAgICAgICAgICAgIGludCBfX21pbiwgaW50IF9fbWF4LCBzaXplX3QgX19sZW4s CiAgICAgICAgICAgICAgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlLAogICAgICAg ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdAogICAgewogICAgICBz aXplX3QgX19pID0gMDsKICAgICAgc3RyaW5nIF9fZGlnaXRzOwogICAgICBib29sIF9fdGVzdHZh bGlkID0gdHJ1ZTsKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgd2hpbGUgKF9f YmVnICE9IF9fZW5kICYmIF9faSA8IF9fbGVuCiAgICAgICAgICAgICAmJiBfX2N0eXBlLmlzKGN0 eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpKQogICAgICAgIHsKICAgICAgICAgIF9fZGlnaXRzICs9IF9f Y3R5cGUubmFycm93KF9fYywgMCk7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAg ICAgKytfX2k7CiAgICAgICAgfQogICAgICBpZiAoX19pID09IF9fbGVuKQogICAgICAgIHsKICAg ICAgICAgIGludCBfX3ZhbHVlID0gYXRvaShfX2RpZ2l0cy5jX3N0cigpKTsKICAgICAgICAgIGlm IChfX21pbiA8PSBfX3ZhbHVlICYmIF9fdmFsdWUgPD0gX19tYXgpCiAgICAgICAgICAgIF9fbWVt YmVyID0gX192YWx1ZTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBm YWxzZTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwog ICAgICBpZiAoIV9fdGVzdHZhbGlkKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0 OwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K ICAgIHZvaWQKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF9u YW1lKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIsCiAg ICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiogX19uYW1lcywgc2l6ZV90IF9faW5kZXhs ZW4sCiAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdAog ICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAg ICAgaW50KiBfX21hdGNoZXMgPSBzdGF0aWNfY2FzdDxpbnQqPihfX2J1aWx0aW5fYWxsb2NhKHNp emVvZihpbnQpICogX19pbmRleGxlbikpOwogICAgICBzaXplX3QgX19ubWF0Y2hlcyA9IDA7CiAg ICAgIHNpemVfdCBfX3BvcyA9IDA7CiAgICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOwogICAg ICBjb25zdCBjaGFyX3R5cGUqIF9fbmFtZTsKCiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7 CgogICAgICBmb3IgKHNpemVfdCBfX2kxID0gMDsgX19pMSA8IF9faW5kZXhsZW47ICsrX19pMSkK ICAgICAgICBpZiAoX19jID09IF9fbmFtZXNbX19pMV1bMF0pCiAgICAgICAgICBfX21hdGNoZXNb X19ubWF0Y2hlcysrXSA9IF9faTE7CgogICAgICB3aGlsZShfX25tYXRjaGVzID4gMSkKICAgICAg ICB7CgogICAgICAgICAgc2l6ZV90IF9fbWlubGVuID0gMTA7CiAgICAgICAgICBmb3IgKHNpemVf dCBfX2kyID0gMDsgX19pMiA8IF9fbm1hdGNoZXM7ICsrX19pMikKICAgICAgICAgICAgX19taW5s ZW4gPSBtaW4oX19taW5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJhaXRzX3R5 cGU6Omxlbmd0aChfX25hbWVzW19fbWF0Y2hlc1tfX2kyXV0pKTsKCiAgICAgICAgICBpZiAoX19w b3MgPCBfX21pbmxlbiAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgewogICAgICAgICAg ICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAg ICBmb3IgKHNpemVfdCBfX2kzID0gMDsgX19pMyA8IF9fbm1hdGNoZXM7ICsrX19pMykKICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19uYW1lID0gX19uYW1lc1tfX21hdGNoZXNb X19pM11dOwogICAgICAgICAgICAgICAgICBpZiAoX19uYW1lW19fcG9zXSAhPSBfX2MpCiAgICAg ICAgICAgICAgICAgICAgX19tYXRjaGVzW19faTNdID0gX19tYXRjaGVzWy0tX19ubWF0Y2hlc107 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgaWYgKF9fbm1hdGNoZXMgPT0gMSkKICAgICAgICB7 CgogICAgICAgICAgX19uYW1lID0gX19uYW1lc1tfX21hdGNoZXNbMF1dOwogICAgICAgICAgY29u c3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZSk7CiAgICAgICAg ICB3aGlsZSAoX19wb3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZCAmJiBfX25hbWVbX19wb3Nd ID09ICpfX2JlZykKICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsKCiAgICAgICAgICBpZiAo X19sZW4gPT0gX19wb3MpCiAgICAgICAgICAgIF9fbWVtYmVyID0gX19tYXRjaGVzWzBdOwogICAg ICAgICAgZWxzZQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAg ICAgZWxzZQogICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgIGlmICghX190ZXN0dmFs aWQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVf Z2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X3RpbWUoaXRlcl90eXBlIF9fYmVnLCBp dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgIHsKICAgICAgX0NoYXJUIF9fd2Nz WzNdOwogICAgICBjb25zdCBjaGFyKiBfX2NzID0gIiVYIjsKICAgICAgbG9jYWxlIF9fbG9jID0g X19pby5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9m YWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9f Y3MgKyAzLCBfX3djcyk7CiAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQs IF9faW8sIF9fZXJyLCBfX3RtLCBfX3djcyk7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAg ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0 ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X2RhdGUoaXRlcl90 eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgIHsKICAgICAg X0NoYXJUIF9fd2NzWzNdOwogICAgICBjb25zdCBjaGFyKiBfX2NzID0gIiV4IjsKICAgICAgbG9j YWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19j dHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfX2N0eXBlLndp ZGVuKF9fY3MsIF9fY3MgKyAzLCBfX3djcyk7CiAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChf X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLCBfX3djcyk7CiAgICAgIGlmIChfX2JlZyA9 PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4g X19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl cj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0 X3dlZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv LAogICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkg Y29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5 cGU7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIF9fdGltZXB1bmN0 PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9f bG9jKTsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2RheXNbN107CiAgICAgIF9fdHAuX01fZGF5 c19hYmJyZXZpYXRlZChfX2RheXMpOwogICAgICBpbnQgX190bXB3ZGF5OwogICAgICBfTV9leHRy YWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtcHdkYXksIF9fZGF5cywgNywgX19lcnIpOwoKCgoK CgoKICAgICAgaWYgKCFfX2VycikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19wb3MgPSBf X3RyYWl0c190eXBlOjpsZW5ndGgoX19kYXlzW19fdG1wd2RheV0pOwogICAgICAgICAgX190cC5f TV9kYXlzKF9fZGF5cyk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbmFtZSA9IF9fZGF5 c1tfX3RtcHdkYXldOwogICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAg ICAgICAgICB7CgogICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fdHJhaXRzX3R5 cGU6Omxlbmd0aChfX25hbWUpOwogICAgICAgICAgICAgIHdoaWxlIChfX3BvcyA8IF9fbGVuICYm IF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICYmIF9fbmFtZVtfX3Bvc10gPT0g Kl9fYmVnKQogICAgICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsKICAgICAgICAgICAgICBp ZiAoX19sZW4gIT0gX19wb3MpCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFp bGJpdDsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAgX190 bS0+dG1fd2RheSA9IF9fdG1wd2RheTsKICAgICAgICB9CiAgICAgIGlmIChfX2JlZyA9PSBfX2Vu ZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7 CiAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg ICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF9tb250 aG5hbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsCiAgICAgICAgICAgICAgICAg ICAgIGlvc19iYXNlJiBfX2lvLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBj b25zdAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlw ZTsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVuY3Q8 X0NoYXJUPiBjb25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19s b2MpOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhzWzEyXTsKICAgICAgX190cC5fTV9t b250aHNfYWJicmV2aWF0ZWQoX19tb250aHMpOwogICAgICBpbnQgX190bXBtb247CiAgICAgIF9N X2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG1wbW9uLCBfX21vbnRocywgMTIsIF9fZXJy KTsKCgoKCgoKCiAgICAgIGlmICghX19lcnIpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9f cG9zID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbW9udGhzW19fdG1wbW9uXSk7CiAgICAgICAg ICBfX3RwLl9NX21vbnRocyhfX21vbnRocyk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f bmFtZSA9IF9fbW9udGhzW19fdG1wbW9uXTsKICAgICAgICAgIGlmIChfX25hbWVbX19wb3NdID09 ICpfX2JlZykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBjb25zdCBzaXplX3QgX19sZW4g PSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAgICAgICAgICB3aGlsZSAoX19w b3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZAogICAgICAgICAgICAgICAgICAgICAmJiBfX25h bWVbX19wb3NdID09ICpfX2JlZykKICAgICAgICAgICAgICAgICsrX19iZWcsICsrX19wb3M7CiAg ICAgICAgICAgICAgaWYgKF9fbGVuICE9IF9fcG9zKQogICAgICAgICAgICAgICAgX19lcnIgfD0g aW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICghX19lcnIpCiAg ICAgICAgICAgIF9fdG0tPnRtX21vbiA9IF9fdG1wbW9uOwogICAgICAgIH0KCiAgICAgIGlmIChf X2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICBy ZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAg ZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf X2lvLAogICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkg Y29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29u c3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19s b2MpOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgc2l6ZV90IF9faSA9IDA7 CiAgICAgIHN0cmluZyBfX2RpZ2l0czsKICAgICAgd2hpbGUgKF9faSA8IDQgJiYgX19iZWcgIT0g X19lbmQgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKSkKICAgICAgICB7CiAg ICAgICAgICBfX2RpZ2l0cyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIDApOwogICAgICAgICAgX19j ID0gKigrK19fYmVnKTsKICAgICAgICAgICsrX19pOwogICAgICAgIH0KICAgICAgaWYgKF9faSA9 PSAyIHx8IF9faSA9PSA0KQogICAgICAgIHsKICAgICAgICAgIGxvbmcgX19sOwogICAgICAgICAg X19jb252ZXJ0X3RvX3YoX19kaWdpdHMuY19zdHIoKSwgX19sLCBfX2VyciwgX1NfY19sb2NhbGUp OwogICAgICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgJiYgX19sIDw9IDIx NDc0ODM2NDcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2wgPSBfX2kgPT0gMiA/IF9f bCA6IF9fbCAtIDE5MDA7CiAgICAgICAgICAgICAgX190bS0+dG1feWVhciA9IHN0YXRpY19jYXN0 PGludD4oX19sKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9f ZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAg ICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0 ZXIKICAgIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIHB1dChpdGVyX3R5cGUgX19z LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlLCBjb25zdCB0bSogX190bSwKICAgICAgICBjb25z dCBfQ2hhclQqIF9fYmVnLCBjb25zdCBfQ2hhclQqIF9fZW5kKSBjb25zdAogICAgewogICAgICBs b2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBf X2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIHdoaWxlIChf X2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICBjaGFyIF9fYyA9IF9fY3R5cGUubmFy cm93KCpfX2JlZywgMCk7CiAgICAgICAgICArK19fYmVnOwogICAgICAgICAgaWYgKF9fYyA9PSAn JScpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFyIF9fZm9ybWF0OwogICAgICAgICAg ICAgIGNoYXIgX19tb2QgPSAwOwogICAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9IDE7CiAgICAg ICAgICAgICAgX19jID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICAgICAr K19fYmVnOwogICAgICAgICAgICAgIGlmIChfX2MgPT0gJ0UnIHx8IF9fYyA9PSAnTycpCiAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbW9kID0gX19jOwogICAgICAgICAgICAg ICAgICBfX2Zvcm1hdCA9IF9fY3R5cGUubmFycm93KCpfX2JlZywgMCk7CiAgICAgICAgICAgICAg ICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICAgICAgX19mb3JtYXQgPSBfX2M7CiAgICAgICAgICAgICAgX19zID0gdGhpcy0+ZG9fcHV0 KF9fcywgX19pbywgY2hhcl90eXBlKCksIF9fdG0sIF9fZm9ybWF0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX21vZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgewogICAgICAgICAgICAgICpfX3MgPSBfX2M7CiAgICAgICAgICAgICAgKytfX3M7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAg dGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlv c19iYXNlJiBfX2lvLCBjaGFyX3R5cGUsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgICAgIGNoYXIg X19mb3JtYXQsIGNoYXIgX19tb2QpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9f aW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1c2VfZmFj ZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBjb25z dCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCgogICAg ICBjb25zdCBzaXplX3QgX19tYXhsZW4gPSA2NDsKICAgICAgY2hhcl90eXBlKiBfX3JlcyA9CiAg ICAgICAgc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoY2hh cl90eXBlKSAqIF9fbWF4bGVuKSk7CgoKCgoKCiAgICAgIGNoYXJfdHlwZSBfX2ZtdFs0XTsKICAg ICAgX19mbXRbMF0gPSBfX2N0eXBlLndpZGVuKCclJyk7CiAgICAgIGlmICghX19tb2QpCiAgICAg ICAgewogICAgICAgICAgX19mbXRbMV0gPSBfX2Zvcm1hdDsKICAgICAgICAgIF9fZm10WzJdID0g Y2hhcl90eXBlKCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX19m bXRbMV0gPSBfX21vZDsKICAgICAgICAgIF9fZm10WzJdID0gX19mb3JtYXQ7CiAgICAgICAgICBf X2ZtdFszXSA9IGNoYXJfdHlwZSgpOwogICAgICAgIH0KCiAgICAgIF9fdHAuX01fcHV0KF9fcmVz LCBfX21heGxlbiwgX19mbXQsIF9fdG0pOwoKCiAgICAgIHNpemVfdCBfX2xlbiA9IGNoYXJfdHJh aXRzPGNoYXJfdHlwZT46Omxlbmd0aChfX3Jlcyk7CiAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7 IF9faSA8IF9fbGVuOyArK19faSwgKytfX3MpCiAgICAgICAgKl9fcyA9IF9fcmVzW19faV07CiAg ICAgIHJldHVybiBfX3M7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg aW50CiAgICBjb2xsYXRlPF9DaGFyVD46Ol9NX2NvbXBhcmUoY29uc3QgX0NoYXJUKiwgY29uc3Qg X0NoYXJUKikgY29uc3QKICAgIHsgcmV0dXJuIDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4KICAgIHNpemVfdAogICAgY29sbGF0ZTxfQ2hhclQ+OjpfTV90cmFuc2Zvcm0oX0NoYXJU KiwgY29uc3QgX0NoYXJUKiwgc2l6ZV90KSBjb25zdAogICAgeyByZXR1cm4gMDsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAgIGNvbGxhdGU8X0NoYXJUPjo6CiAgICBk b19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNvbnN0IF9DaGFyVCogX19oaTEsCiAgICAg ICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0 CiAgICB7CiAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9fb25lKF9fbG8xLCBfX2hpMSk7CiAgICAg IGNvbnN0IHN0cmluZ190eXBlIF9fdHdvKF9fbG8yLCBfX2hpMik7CiAgICAgIHJldHVybiBfTV9j b21wYXJlKF9fb25lLmNfc3RyKCksIF9fdHdvLmNfc3RyKCkpOwogICAgfQoKIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVuYW1lIGNvbGxhdGU8X0NoYXJUPjo6c3RyaW5nX3R5cGUK ICAgIGNvbGxhdGU8X0NoYXJUPjo6CiAgICBkb190cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xv LCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX2xlbiA9IChf X2hpIC0gX19sbykgKiAyOwoKICAgICAgX0NoYXJUKiBfX2MgPQogICAgICAgIHN0YXRpY19jYXN0 PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX2xlbikpOwogICAg ICBzaXplX3QgX19yZXMgPSBfTV90cmFuc2Zvcm0oX19jLCBfX2xvLCBfX2xlbik7CgogICAgICBp ZiAoX19yZXMgPj0gX19sZW4pCiAgICAgICAgewogICAgICAgICAgX19jID0KICAgICAgICAgICAg c3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIChf X3JlcyArIDEpKSk7CiAgICAgICAgICBfTV90cmFuc2Zvcm0oX19jLCBfX2xvLCBfX3JlcyArIDEp OwogICAgICAgIH0KICAgICAgcmV0dXJuIHN0cmluZ190eXBlKF9fYyk7CiAgICB9CgogdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9uZwogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRv X2hhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CiAgICB7 CiAgICAgIHVuc2lnbmVkIGxvbmcgX192YWwgPSAwOwogICAgICBmb3IgKDsgX19sbyA8IF9faGk7 ICsrX19sbykKICAgICAgICBfX3ZhbCA9ICpfX2xvICsgKChfX3ZhbCA8PCA3KSB8CiAgICAgICAg ICAgICAgICAgICAgICAgKF9fdmFsID4+IChudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nPjo6 ZGlnaXRzIC0gNykpKTsKICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KF9fdmFsKTsKICAg IH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgogICAgdm9pZAogICAgX19jb252ZXJ0X3Rv X3YoY29uc3QgY2hhciogX19pbiwgX1R2JiBfX291dCwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy LAogICAgICAgICAgICAgICAgICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19iYXNl ID0gMTApOwoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICBpbnQKICAgIF9fY29udmVy dF9mcm9tX3YoY2hhciogX19vdXQsIGNvbnN0IGludCBfX3NpemUsIGNvbnN0IGNoYXIqIF9fZm10 LAogICAgICAgICAgICAgICAgICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9f cHJlYyA9IC0xKTsKIyAxOTkwICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk ZS9jKysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3QgX19wYWQKICAgIHsKICAgICAgc3Rh dGljIHZvaWQKICAgICAgX1NfcGFkKGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBfQ2hh clQqIF9fbmV3cywKICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19vbGRzLCBjb25zdCBzdHJl YW1zaXplIF9fbmV3bGVuLAogICAgICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX29sZGxlbiwg Y29uc3QgYm9vbCBfX251bSk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19w YWQoaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0NoYXJUKiBfX25ld3MsIGNvbnN0IF9DaGFyVCogX19vbGRzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19uZXdsZW4sCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX29sZGxl biwgY29uc3QgYm9vbCBfX251bSkKICAgIHsKICAgICAgc2l6ZV90IF9fcGxlbiA9IHN0YXRpY19j YXN0PHNpemVfdD4oX19uZXdsZW4gLSBfX29sZGxlbik7CiAgICAgIF9DaGFyVCogX19wYWRzID0g c3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9f cGxlbikpOwogICAgICBfVHJhaXRzOjphc3NpZ24oX19wYWRzLCBfX3BsZW4sIF9fZmlsbCk7Cgog ICAgICBfQ2hhclQqIF9fYmVnOwogICAgICBfQ2hhclQqIF9fZW5kOwogICAgICBzaXplX3QgX19t b2QgPSAwOwogICAgICBzaXplX3QgX19iZWdsZW47CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBf X2FkanVzdCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsKCiAgICAgIGlm IChfX2FkanVzdCA9PSBpb3NfYmFzZTo6bGVmdCkKICAgICAgICB7CgogICAgICAgICAgX19iZWcg PSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyk7CiAgICAgICAgICBfX2JlZ2xlbiA9IF9fb2xk bGVuOwogICAgICAgICAgX19lbmQgPSBfX3BhZHM7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChf X2FkanVzdCA9PSBpb3NfYmFzZTo6aW50ZXJuYWwgJiYgX19udW0pCiAgICAgICAgewoKCgogICAg ICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IGN0eXBl PF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAg ICAgICAgIGNvbnN0IF9DaGFyVCBfX21pbnVzID0gX19jdHlwZS53aWRlbignLScpOwogICAgICAg ICAgY29uc3QgX0NoYXJUIF9fcGx1cyA9IF9fY3R5cGUud2lkZW4oJysnKTsKICAgICAgICAgIGJv b2wgX190ZXN0c2lnbiA9IF9UcmFpdHM6OmVxKF9fb2xkc1swXSwgX19taW51cykKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHx8IF9UcmFpdHM6OmVxKF9fb2xkc1swXSwgX19wbHVzKTsKCiAg ICAgICAgICBib29sIF9fdGVzdGhleCA9IF9UcmFpdHM6OmVxKF9fY3R5cGUud2lkZW4oJzAnKSwg X19vbGRzWzBdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX1RyYWl0czo6ZXEoX19j dHlwZS53aWRlbigneCcpLCBfX29sZHNbMV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8fCBfVHJhaXRzOjplcShfX2N0eXBlLndpZGVuKCdYJyksIF9fb2xkc1sxXSkpOwogICAgICAg ICAgaWYgKF9fdGVzdGhleCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fbmV3c1swXSA9 IF9fb2xkc1swXTsKICAgICAgICAgICAgICBfX25ld3NbMV0gPSBfX29sZHNbMV07CiAgICAgICAg ICAgICAgX19tb2QgKz0gMjsKICAgICAgICAgICAgICBfX25ld3MgKz0gMjsKICAgICAgICAgICAg ICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAgICAg ICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzICsgX19tb2QpOwogICAg ICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3Rlc3RzaWduKQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgX1RyYWl0czo6ZXEoKF9fbmV3c1swXSA9IF9fb2xkc1swXSksIF9fcGx1cykg PyBfX3BsdXMgOiBfX21pbnVzOwogICAgICAgICAgICAgICsrX19tb2Q7CiAgICAgICAgICAgICAg KytfX25ld3M7CiAgICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICAgICAgX19i ZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+ KF9fb2xkcyArIF9fbW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAg ICB7CgogICAgICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAgICAgIF9fYmVnbGVu ID0gX19wbGVuOwogICAgICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29s ZHMpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewoKICAgICAg ICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAg ICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzKTsKICAgICAgICB9CiAgICAgIF9U cmFpdHM6OmNvcHkoX19uZXdzLCBfX2JlZywgX19iZWdsZW4pOwogICAgICBfVHJhaXRzOjpjb3B5 KF9fbmV3cyArIF9fYmVnbGVuLCBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX25l d2xlbiAtIF9fYmVnbGVuIC0gX19tb2QpOwogICAgfQojIDIwODUgIi9ob21lL2JhbmdlcnRoL2Jp bi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGJvb2wKICAgIF9fdmVyaWZ5X2dyb3VwaW5n KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQ+JiBfX2dyb3VwaW5nLAogICAgICAgICAgICAgICAg ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVD4mIF9fZ3JvdXBpbmdfdG1wKQogICAgewogICAgICBp bnQgX19pID0gMDsKICAgICAgaW50IF9faiA9IDA7CiAgICAgIGNvbnN0IGludCBfX2xlbiA9IF9f Z3JvdXBpbmcuc2l6ZSgpOwogICAgICBjb25zdCBpbnQgX19uID0gX19ncm91cGluZ190bXAuc2l6 ZSgpOwogICAgICBib29sIF9fdGVzdCA9IHRydWU7CgoKCgogICAgICB3aGlsZSAoX190ZXN0ICYm IF9faSA8IF9fbiAtIDEpCiAgICAgICAgZm9yIChfX2ogPSAwOyBfX3Rlc3QgJiYgX19qIDwgX19s ZW4gJiYgX19pIDwgX19uIC0gMTsgKytfX2osKytfX2kpCiAgICAgICAgICBfX3Rlc3QgJj0gX19n cm91cGluZ1tfX2pdID09IF9fZ3JvdXBpbmdfdG1wW19fbiAtIF9faSAtIDFdOwoKCiAgICAgIF9f aiA9PSBfX2xlbiA/IF9faiA9IDAgOiBfX2o7CiAgICAgIF9fdGVzdCAmPSBfX2dyb3VwaW5nW19f al0gPj0gX19ncm91cGluZ190bXBbX19uIC0gX19pIC0gMV07CiAgICAgIHJldHVybiBfX3Rlc3Q7 CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgX0NoYXJUKgogICAg X19hZGRfZ3JvdXBpbmcoX0NoYXJUKiBfX3MsIF9DaGFyVCBfX3NlcCwKICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIqIF9fZ2JlZywgY29uc3QgY2hhciogX19nZW5kLAogICAgICAgICAgICAg ICAgICAgY29uc3QgX0NoYXJUKiBfX2ZpcnN0LCBjb25zdCBfQ2hhclQqIF9fbGFzdCkKICAgIHsK ICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiAqX19nYmVnKQogICAgICAgIHsKICAgICAgICAg IF9fcyA9IF9fYWRkX2dyb3VwaW5nKF9fcywgX19zZXAsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoX19nYmVnICsgMSA9PSBfX2dlbmQgPyBfX2diZWcgOiBfX2diZWcgKyAxKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ2VuZCwgX19maXJzdCwgX19sYXN0IC0gKl9f Z2JlZyk7CiAgICAgICAgICBfX2ZpcnN0ID0gX19sYXN0IC0gKl9fZ2JlZzsKICAgICAgICAgICpf X3MrKyA9IF9fc2VwOwogICAgICAgIH0KICAgICAgZG8KICAgICAgICAqX19zKysgPSAqX19maXJz dCsrOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpOwogICAgICByZXR1cm4gX19zOwog ICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT47 CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT47CiAgZXh0ZXJu IHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPGNoYXIsIGZhbHNlPjsKICBleHRlcm4g dGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8Y2hhciwgdHJ1ZT47CiAgZXh0ZXJuIHRl bXBsYXRlIGNsYXNzIG1vbmV5X2dldDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9u ZXlfcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PHdjaGFyX3Qs IGZhbHNlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVl PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8d2NoYXJfdCwgZmFs c2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTx3Y2hhcl90LCB0 cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfZ2V0PHdjaGFyX3Q+OwogIGV4dGVy biB0ZW1wbGF0ZSBjbGFzcyBtb25leV9wdXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIG51bXB1bmN0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdF9ieW5h bWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9nZXQ8Y2hhcj47CiAgZXh0ZXJu IHRlbXBsYXRlIGNsYXNzIG51bV9wdXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51 bXB1bmN0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdF9ieW5hbWU8 d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9nZXQ8d2NoYXJfdD47CiAgZXh0 ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9wdXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIF9fdGltZXB1bmN0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dDxj aGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXRfYnluYW1lPGNoYXI+OwogIGV4 dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xh c3MgdGltZV9nZXRfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX3RpbWVw dW5jdDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXQ8d2NoYXJfdD47 CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTx3Y2hhcl90PjsKICBleHRl cm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIHRpbWVfZ2V0X2J5bmFtZTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVz c2FnZXM8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZTxjaGFy PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXM8d2NoYXJfdD47CiAgZXh0ZXJuIHRl bXBsYXRlIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUg Y2xhc3MgY3R5cGVfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjdHlwZV9i eW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvZGVjdnRfYnluYW1lPGNo YXIsIGNoYXIsIG1ic3RhdGVfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvZGVjdnRfYnlu YW1lPHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNv bGxhdGU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxhdGVfYnluYW1lPGNoYXI+ OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1w bGF0ZSBjbGFzcyBjb2xsYXRlX2J5bmFtZTx3Y2hhcl90PjsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg ICBjb25zdCBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4mCiAgICB1c2VfZmFjZXQ8Y29k ZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0 ZW1wbGF0ZQogICAgY29uc3QgY29sbGF0ZTxjaGFyPiYKICAgIHVzZV9mYWNldDxjb2xsYXRlPGNo YXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtcHVu Y3Q8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bnVtcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsK CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1fcHV0PGNoYXI+JgogICAgdXNlX2ZhY2V0 PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBj b25zdCBudW1fZ2V0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bV9nZXQ8Y2hhcj4gPihjb25zdCBs b2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leXB1bmN0PGNoYXIsIHRy dWU+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT4gPihjb25zdCBsb2NhbGUm KTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leXB1bmN0PGNoYXIsIGZhbHNlPiYK ICAgIHVzZV9mYWNldDxtb25leXB1bmN0PGNoYXIsIGZhbHNlPiA+KGNvbnN0IGxvY2FsZSYpOwoK ICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5X3B1dDxjaGFyPiYKICAgIHVzZV9mYWNl dDxtb25leV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg ICBjb25zdCBtb25leV9nZXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bW9uZXlfZ2V0PGNoYXI+ID4o Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgX190aW1lcHVuY3Q8 Y2hhcj4mCiAgICB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsK CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0aW1lX3B1dDxjaGFyPiYKICAgIHVzZV9mYWNl dDx0aW1lX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg IGNvbnN0IHRpbWVfZ2V0PGNoYXI+JgogICAgdXNlX2ZhY2V0PHRpbWVfZ2V0PGNoYXI+ID4oY29u c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbWVzc2FnZXM8Y2hhcj4m CiAgICB1c2VfZmFjZXQ8bWVzc2FnZXM8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJu IHRlbXBsYXRlCiAgICBjb25zdCBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4mCiAg ICB1c2VfZmFjZXQ8Y29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+ID4obG9jYWxlIGNv bnN0Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29sbGF0ZTx3Y2hhcl90PiYKICAg IHVzZV9mYWNldDxjb2xsYXRlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0 ZW1wbGF0ZQogICAgY29uc3QgbnVtcHVuY3Q8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bnVtcHVu Y3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25z dCBudW1fcHV0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG51bV9wdXQ8d2NoYXJfdD4gPihjb25z dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1fZ2V0PHdjaGFyX3Q+ JgogICAgdXNlX2ZhY2V0PG51bV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0 ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+JgogICAgdXNl X2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0 ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPiYKICAgIHVz ZV9mYWNldDxtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl eHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5X3B1dDx3Y2hhcl90PiYKICAgIHVzZV9mYWNl dDxtb25leV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl CiAgICBjb25zdCBtb25leV9nZXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bW9uZXlfZ2V0PHdj aGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgX190 aW1lcHVuY3Q8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8d2NoYXJfdD4gPihj b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0aW1lX3B1dDx3Y2hh cl90PiYKICAgIHVzZV9mYWNldDx0aW1lX3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoK ICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfZ2V0PHdjaGFyX3Q+JgogICAgdXNlX2Zh Y2V0PHRpbWVfZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0 ZQogICAgY29uc3QgbWVzc2FnZXM8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bWVzc2FnZXM8d2No YXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAg aGFzX2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0 ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+ KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNl dDxjb2xsYXRlPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg Ym9vbAogICAgaGFzX2ZhY2V0PG51bXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4 dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bV9wdXQ8Y2hhcj4gPihjb25z dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVt X2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wK ICAgIGhhc19mYWNldDxtb25leXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVy biB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5X3B1dDxjaGFyPiA+KGNvbnN0 IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25l eV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29s CiAgICBoYXNfZmFjZXQ8X190aW1lcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0 ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9wdXQ8Y2hhcj4gPihjb25z dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGlt ZV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29s CiAgICBoYXNfZmFjZXQ8bWVzc2FnZXM8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiBleHRlcm4g dGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjdHlwZTx3Y2hhcl90PiA+KGNvbnN0IGxv Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2RlY3Z0 PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl bXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y29sbGF0ZTx3Y2hhcl90PiA+KGNvbnN0IGxv Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1wdW5j dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wK ICAgIGhhc19mYWNldDxudW1fcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVy biB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bV9nZXQ8d2NoYXJfdD4gPihjb25z dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9u ZXlwdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg IGJvb2wKICAgIGhhc19mYWNldDxtb25leV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsK CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfZ2V0PHdjaGFy X3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFz X2ZhY2V0PF9fdGltZXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0 ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PHRpbWVfcHV0PHdjaGFyX3Q+ID4oY29uc3Qg bG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PHRpbWVf Z2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9v bAogICAgaGFzX2ZhY2V0PG1lc3NhZ2VzPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7Cn0KIyA0 NyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9sb2NhbGUi IDIgMwojIDM4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4z L2JpdHMvb3N0cmVhbS50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+ JiBfX29zKQogICAgOiBfTV9vayhfX29zLmdvb2QoKSksIF9NX29zKF9fb3MpCiAgICB7CgogICAg ICBpZiAoX01fb2sgJiYgX19vcy50aWUoKSkKICAgICAgICBfX29zLnRpZSgpLT5mbHVzaCgpOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpfX3BmKShfX29zdHJl YW1fdHlwZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9f Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsg fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRo aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19pb3Nf dHlwZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2Vy YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQog ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikp CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAg ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAg ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjpvcGVyYXRvcjw8KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbikKICAgIHsKICAgICAgc2Vu dHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zYmluKQogICAgICAgIHsK ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCFfX2NvcHlfc3Ry ZWFtYnVmcygqdGhpcywgX19zYmluLCB0aGlzLT5yZGJ1ZigpKSkKICAgICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAg Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zYmluKQogICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6b3BlcmF0b3I8PChib29sIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAg ICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+Zmls bCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9 CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh aXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25n IF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIp CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFy X3R5cGUgX19jID0gdGhpcy0+ZmlsbCgpOwogICAgICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFn cyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgICAg ICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgYm9vbCBfX2IgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgaWYgKChf X2ZtdCAmIGlvc19iYXNlOjpvY3QpIHx8IChfX2ZtdCAmIGlvc19iYXNlOjpoZXgpKQogICAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX19sID0g c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKTsKICAgICAgICAgICAgICAgICAgICAgIF9f YiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsKICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg ICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbikuZmFpbGVk KCk7CiAgICAgICAgICAgICAgICAgIGlmIChfX2IpCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0 aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pCiAgICB7CiAgICAg IHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N X2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRo aXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpv cGVyYXRvcjw8KGxvbmcgbG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMp OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9IHRoaXMtPmZpbGwoKTsKICAgICAgICAgICAg ICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJh c2VmaWVsZDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGJvb2wgX19iID0gZmFsc2U7CiAgICAg ICAgICAgICAgICAgIGlmICgoX19mbXQgJiBpb3NfYmFzZTo6b2N0KSB8fCAoX19mbXQgJiBpb3Nf YmFzZTo6aGV4KSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBsb25nIGxvbmcgX19sOwogICAgICAgICAgICAgICAgICAgICAgX19sID0gc3RhdGlj X2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihfX24pOwogICAgICAgICAgICAgICAgICAgICAgX19i ID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX2wpLmZhaWxlZCgpOwogICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg ICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQo KTsKICAgICAgICAgICAgICAgICAgaWYgKF9fYikKICAgICAgICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRo aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgX19uKQogICAgewog ICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNl dChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMs ICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBj YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6b3BlcmF0b3I8PChkb3VibGUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg ewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAg ICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9f bikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6 YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgZG91Ymxl IF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIp CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAo X01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1 dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRo aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX24pCiAgICB7CiAgICAgIHNl bnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2Zu dW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMs IHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4 Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnB1dChj aGFyX3R5cGUgX19jKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYg KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBpbnRfdHlwZSBfX3B1dCA9IHJkYnVmKCktPnNw dXRjKF9fYyk7CiAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fcHV0LCB0 cmFpdHNfdHlwZTo6ZW9mKCkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp3cml0ZShj b25zdCBfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2Nl cmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHN0cmVhbXNp emUgX19wdXQgPSB0aGlzLT5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbik7CiAgICAgICAgICBpZiAo IF9fcHV0ICE9IF9fbikKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6Zmx1c2goKQogICAg ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7 CiAgICAgICAgICBpZiAodGhpcy0+cmRidWYoKSAmJiB0aGlzLT5yZGJ1ZigpLT5wdWJzeW5jKCkg PT0gLTEpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz46OnBvc190eXBlCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnRl bGxwKCkKICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZSgtMSk7CiAgICAgIGlm ICghdGhpcy0+ZmFpbCgpKQogICAgICAgIF9fcmV0ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29m ZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6b3V0KTsKICAgICAgcmV0dXJuIF9fcmV0Owog ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+OjpzZWVrcChwb3NfdHlwZSBfX3BvcykKICAgIHsKICAgICAgaWYgKCF0aGlzLT5m YWlsKCkpCiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVm KCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjpvdXQpOwoKCiAgICAgICAgICBpZiAoX19l cnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjoKICAgIHNlZWtwKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2QpCiAg ICB7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQogICAgICAgIHsKCgogICAgICAgICAgcG9zX3R5 cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLCBfX2QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om91 dCk7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAgIH0KICAg ICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3Bl cmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQgX19j KQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29z dHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIo X19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAg ICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGlu X2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIChfX3cgKyAxKSkpOwogICAgICAgICAgICAgIF9fcGFk c1swXSA9IF9fYzsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsKICAgICAgICAg ICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg IF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3Bh ZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19j LCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcGFkcywgX19sZW4pOwog ICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQu c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNl cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgogIHRl bXBsYXRlIDxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYK ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIg X19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gX19v c3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJi KF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg ICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAg ICAgICAgICAgICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2Fs bG9jYShfX3cgKyAxKSk7CiAgICAgICAgICAgICAgX19wYWRzWzBdID0gX19jOwogICAgICAgICAg ICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikK ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQ8Y2hhciwgX1RyYWl0cz46 Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fYywgX193LCBfX2xlbiwgZmFsc2UpOwogICAg ICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICBfX291dC53cml0ZShfX3BhZHMsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgw KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg ICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgICByZXR1cm4gX19vdXQ7CiAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBv cGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IF9D aGFyVCogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh aXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRy eSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiICYmIF9fcykKICAgICAgICB7CiAgICAg ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19v dXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9D aGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAg ICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX1RyYWl0czo6 bGVuZ3RoKF9fcykpOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9f b3V0LCBfX291dC5maWxsKCksIF9fcGFkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fcywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAg ICAgICBfX3MgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19sZW4pOwogICAgICAg ICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25z KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3MpCiAgICAgICAgX19vdXQuc2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoKCgogICAgICB0eXBl ZGVmIGNoYXJfdHJhaXRzPGNoYXI+IF9fdHJhaXRzX3R5cGU7CgogICAgICB0eXBlbmFtZSBfX29z dHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19z KQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2NsZW4gPSBfX3RyYWl0c190eXBlOjpsZW5n dGgoX19zKTsKICAgICAgICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9f YnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX19jbGVuICsgMSkpKTsKICAgICAgICAg IGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fY2xlbjsgKytfX2kpCiAgICAgICAgICAgIF9f d3NbX19pXSA9IF9fb3V0LndpZGVuKF9fc1tfX2ldKTsKICAgICAgICAgIF9DaGFyVCogX19zdHIg PSBfX3dzOwoKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFt c2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fY2xlbik7CiAgICAgICAgICAg ICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIF9DaGFyVCog X19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0No YXJUKSAqIF9fdykpOwoKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChf X291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3dzLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAg ICAgICAgIF9fc3RyID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3N0ciwgX19sZW4pOwog ICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQu c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNl cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3MpCiAgICAgICAgX19v dXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiBfX291dDsKICAgIH0K CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFp dHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwg Y29uc3QgY2hhciogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwg X1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpz ZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3MpCiAgICAgICAgewog ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9 IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8 Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX193KSk7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBf X2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsKCiAg ICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICBfX3BhZDxjaGFyLCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCks IF9fcGFkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fcywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7 CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRo KDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg ICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9 CiAgICAgIGVsc2UgaWYgKCFfX3MpCiAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mIF9fb3V0LAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0 cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg ICB7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcyA9IF9fc3RyLmRhdGEoKTsKICAgICAgICAg IHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgIF9DaGFyVCogX19wYWRz ID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAq IF9fdykpOwogICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNp emU+KF9fc3RyLnNpemUoKSk7CgoKCiAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQs IF9fb3V0LmZpbGwoKSwgX19wYWRzLCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICBfX3MgPSBf X3BhZHM7CiAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgIH0KICAgICAgICAg IHN0cmVhbXNpemUgX19yZXMgPSBfX291dC5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbGVuKTsKICAg ICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgaWYgKF9fcmVzICE9IF9fbGVuKQogICAg ICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgfQogICAg ICByZXR1cm4gX19vdXQ7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19v c3RyZWFtPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBlbmRsKG9zdHJlYW0mKTsK ICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZW5kcyhvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBs YXRlIG9zdHJlYW0mIGZsdXNoKG9zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYg b3BlcmF0b3I8PChvc3RyZWFtJiwgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9w ZXJhdG9yPDwob3N0cmVhbSYsIHVuc2lnbmVkIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3Ry ZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBzaWduZWQgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRl IG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IGNoYXIqKTsKICBleHRlcm4gdGVt cGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgdW5zaWduZWQgY2hhciop OwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCBz aWduZWQgY2hhciopOwoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX29zdHJlYW08d2No YXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBlbmRsKHdvc3RyZWFtJik7CiAgZXh0 ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBlbmRzKHdvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRl IHdvc3RyZWFtJiBmbHVzaCh3b3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYg b3BlcmF0b3I8PCh3b3N0cmVhbSYsIHdjaGFyX3QpOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVh bSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVh bSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNvbnN0IHdjaGFyX3QqKTsKICBleHRlcm4gdGVtcGxh dGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBjb25zdCBjaGFyKik7Cgp9CiMgMjc2 ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL29zdHJlYW0i IDIgMwojIDI1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVk ZS9iYXNlL2V4Y2VwdGlvbnMuaCIgMgojIDMxMyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9leGNlcHRpb25zLmgiCmNsYXNzIEV4Y2VwdGlvbkJh c2UgOiBwdWJsaWMgc3RkOjpleGNlcHRpb24KewogIHB1YmxpYzoKCgoKICAgIEV4Y2VwdGlvbkJh c2UgKCk7CgoKCgoKCgogICAgRXhjZXB0aW9uQmFzZSAoY29uc3QgY2hhciogZiwgY29uc3QgaW50 IGwsIGNvbnN0IGNoYXIgKmZ1bmMsCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjLCBj b25zdCBjaGFyICplKTsKIyAzNDEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkv YmFzZS9pbmNsdWRlL2Jhc2UvZXhjZXB0aW9ucy5oIgogICAgdmlydHVhbCB+RXhjZXB0aW9uQmFz ZSAoKSB0aHJvdygpOwoKCgoKCgoKICAgIHZvaWQgU2V0RmllbGRzIChjb25zdCBjaGFyICpmLAog ICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsLAogICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKmZ1bmMsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYywKICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICplKTsKCgoKCgogICAgdm9pZCBQcmludEV4Y0RhdGEgKHN0 ZDo6b3N0cmVhbSAmb3V0KSBjb25zdDsKCgoKCgoKICAgIHZpcnR1YWwgdm9pZCBQcmludEluZm8g KHN0ZDo6b3N0cmVhbSAmb3V0KSBjb25zdDsKIyAzODEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5J SS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZXhjZXB0aW9ucy5oIgogICAgdmlydHVhbCBj b25zdCBjaGFyICogd2hhdCAoKSBjb25zdCB0aHJvdyAoKTsKCiAgcHJvdGVjdGVkOgoKCgogICAg Y29uc3QgY2hhciAqZmlsZTsKCgoKCiAgICB1bnNpZ25lZCBpbnQgbGluZTsKCgoKCiAgICBjb25z dCBjaGFyICpmdW5jdGlvbjsKCgoKCiAgICBjb25zdCBjaGFyICpjb25kOwoKCgoKICAgIGNvbnN0 IGNoYXIgKmV4YzsKfTsKIyA0MTcgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkv YmFzZS9pbmNsdWRlL2Jhc2UvZXhjZXB0aW9ucy5oIgpuYW1lc3BhY2UgZGVhbF9JSV9leGNlcHRp b25zCnsKIyA0NTEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs dWRlL2Jhc2UvZXhjZXB0aW9ucy5oIgogIHZvaWQgc2V0X2FkZGl0aW9uYWxfYXNzZXJ0X291dHB1 dCAoY29uc3QgY2hhciAqIGNvbnN0IHApOwojIDQ2MCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJ LzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9leGNlcHRpb25zLmgiCiAgbmFtZXNwYWNlIGlu dGVybmFscwogIHsKIyA0NzAgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFz ZS9pbmNsdWRlL2Jhc2UvZXhjZXB0aW9ucy5oIgogICAgdm9pZCBpc3N1ZV9lcnJvcl9hc3NlcnQg KGNvbnN0IGNoYXIgKmZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZnVuY3Rpb24sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29uZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICpleGNfbmFtZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBFeGNlcHRpb25CYXNlICZlKTsKIyA0ODUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5J SS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZXhjZXB0aW9ucy5oIgogICAgdGVtcGxhdGUg PGNsYXNzIGV4Yz4KICAgIHZvaWQgaXNzdWVfZXJyb3JfdGhyb3cgKGNvbnN0IGNoYXIgKmZpbGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKmV4Y19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjIGUpCiAgICB7CgoK ICAgICAgZS5TZXRGaWVsZHMgKGZpbGUsIGxpbmUsIGZ1bmN0aW9uLCBjb25kLCBleGNfbmFtZSk7 CiAgICAgIHRocm93IGU7CiAgICB9CiMgNTEwICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9k ZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2V4Y2VwdGlvbnMuaCIKICAgIHRlbXBsYXRlIDxjbGFz cyBleGM+CiAgICBpbmxpbmUKICAgIHZvaWQgaXNzdWVfZXJyb3JfYXNzZXJ0XzEgKGNvbnN0IGNo YXIgKmZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29uZCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmV4Y19uYW1lLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZXhjIGUpCiAgICB7CiAgICAgIGlzc3VlX2Vycm9yX2Fzc2VydCAoZmlsZSxsaW5l LGZ1bmN0aW9uLGNvbmQsZXhjX25hbWUsZSk7CiAgICB9CiMgNTMwICIvaG9tZS9iYW5nZXJ0aC9w L2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2V4Y2VwdGlvbnMuaCIKICAgIHZv aWQgYWJvcnQgKCk7CgogIH0KCn07CiMgNzUzICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9k ZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2V4Y2VwdGlvbnMuaCIKbmFtZXNwYWNlIFN0YW5kYXJk RXhjZXB0aW9ucwp7CgoKCgogIGNsYXNzIEV4Y0RpdmlkZUJ5WmVybyA6IHB1YmxpYyBFeGNlcHRp b25CYXNlIHt9OwoKCgoKCgogIGNsYXNzIEV4Y091dE9mTWVtb3J5IDogcHVibGljIEV4Y2VwdGlv bkJhc2Uge307CgoKCgoKICBjbGFzcyBFeGNJTyA6IHB1YmxpYyBFeGNlcHRpb25CYXNlIHt9OwoK CgoKICBjbGFzcyBFeGNGaWxlTm90T3BlbiA6IHB1YmxpYyBFeGNlcHRpb25CYXNlIHsgcHVibGlj OiBFeGNGaWxlTm90T3BlbiAoY29uc3QgY2hhciogYTEpIDogYXJnMSAoYTEpIHt9OyB2aXJ0dWFs IH5FeGNGaWxlTm90T3BlbiAoKSB0aHJvdyAoKSB7fTsgdmlydHVhbCB2b2lkIFByaW50SW5mbyAo c3RkOjpvc3RyZWFtICZvdXQpIGNvbnN0IHsgb3V0IDw8ICJDb3VsZCBub3Qgb3BlbiBmaWxlICIg PDwgYXJnMSA8PCBzdGQ6OmVuZGw7IH07IHByaXZhdGU6IGNvbnN0IGNoYXIqIGFyZzE7IH07CiMg Nzk2ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNl L2V4Y2VwdGlvbnMuaCIKICBjbGFzcyBFeGNOb3RJbXBsZW1lbnRlZCA6IHB1YmxpYyBFeGNlcHRp b25CYXNlIHt9OwojIDg0MiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNl L2luY2x1ZGUvYmFzZS9leGNlcHRpb25zLmgiCiAgY2xhc3MgRXhjSW50ZXJuYWxFcnJvciA6IHB1 YmxpYyBFeGNlcHRpb25CYXNlIHt9OwojIDg1NSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9leGNlcHRpb25zLmgiCiAgY2xhc3MgRXhjUHVyZUZ1 bmN0aW9uQ2FsbGVkIDogcHVibGljIEV4Y2VwdGlvbkJhc2Uge307CgoKCgoKICBjbGFzcyBFeGNO b3RJbml0aWFsaXplZCA6IHB1YmxpYyBFeGNlcHRpb25CYXNlIHt9OwoKCgoKCgoKICBjbGFzcyBF eGNJbXBvc3NpYmxlSW5EaW0gOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7IHB1YmxpYzogRXhjSW1w b3NzaWJsZUluRGltIChjb25zdCBpbnQgYTEpIDogYXJnMSAoYTEpIHt9OyB2aXJ0dWFsIH5FeGNJ bXBvc3NpYmxlSW5EaW0gKCkgdGhyb3cgKCkge307IHZpcnR1YWwgdm9pZCBQcmludEluZm8gKHN0 ZDo6b3N0cmVhbSAmb3V0KSBjb25zdCB7IG91dCA8PCAiSW1wb3NzaWJsZSBpbiAiIDw8IGFyZzEg PDwgImQuIiA8PCBzdGQ6OmVuZGw7IH07IHByaXZhdGU6IGNvbnN0IGludCBhcmcxOyB9OwojIDg3 OSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9l eGNlcHRpb25zLmgiCiAgY2xhc3MgRXhjRGltZW5zaW9uTWlzbWF0Y2ggOiBwdWJsaWMgRXhjZXB0 aW9uQmFzZSB7IHB1YmxpYzogRXhjRGltZW5zaW9uTWlzbWF0Y2ggKGNvbnN0IGludCBhMSwgY29u c3QgaW50IGEyKSA6IGFyZzEgKGExKSwgYXJnMihhMikge307IHZpcnR1YWwgfkV4Y0RpbWVuc2lv bk1pc21hdGNoICgpIHRocm93ICgpIHt9OyB2aXJ0dWFsIHZvaWQgUHJpbnRJbmZvIChzdGQ6Om9z dHJlYW0gJm91dCkgY29uc3QgeyBvdXQgPDwgIkRpbWVuc2lvbiAiIDw8IGFyZzEgPDwgIiBub3Qg ZXF1YWwgdG8gIiA8PCBhcmcyIDw8IHN0ZDo6ZW5kbDsgfTsgcHJpdmF0ZTogY29uc3QgaW50IGFy ZzE7IGNvbnN0IGludCBhcmcyOyB9OwojIDg5MiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9leGNlcHRpb25zLmgiCiAgY2xhc3MgRXhjSW5kZXhS YW5nZSA6IHB1YmxpYyBFeGNlcHRpb25CYXNlIHsgcHVibGljOiBFeGNJbmRleFJhbmdlIChjb25z dCBpbnQgYTEsIGNvbnN0IGludCBhMiwgY29uc3QgaW50IGEzKSA6IGFyZzEgKGExKSwgYXJnMihh MiksIGFyZzMoYTMpIHt9OyB2aXJ0dWFsIH5FeGNJbmRleFJhbmdlICgpIHRocm93ICgpIHt9OyB2 aXJ0dWFsIHZvaWQgUHJpbnRJbmZvIChzdGQ6Om9zdHJlYW0gJm91dCkgY29uc3QgeyBvdXQgPDwg IkluZGV4ICIgPDwgYXJnMSA8PCAiIGlzIG5vdCBpbiBbIiA8PCBhcmcyIDw8ICIsIiA8PCBhcmcz IDw8ICJbIiA8PCBzdGQ6OmVuZGw7IH07IHByaXZhdGU6IGNvbnN0IGludCBhcmcxOyBjb25zdCBp bnQgYXJnMjsgY29uc3QgaW50IGFyZzM7IH07CiMgOTAyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwu SUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2V4Y2VwdGlvbnMuaCIKICBjbGFzcyBFeGNJ dGVyYXRvclBhc3RFbmQgOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7fTsKIyA5MjEgIi9ob21lL2Jh bmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZXhjZXB0aW9ucy5o IgogIGNsYXNzIEV4Y01lc3NhZ2UgOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7IHB1YmxpYzogRXhj TWVzc2FnZSAoY29uc3QgY2hhciogYTEpIDogYXJnMSAoYTEpIHt9OyB2aXJ0dWFsIH5FeGNNZXNz YWdlICgpIHRocm93ICgpIHt9OyB2aXJ0dWFsIHZvaWQgUHJpbnRJbmZvIChzdGQ6Om9zdHJlYW0g Jm91dCkgY29uc3QgeyBvdXQgPDwgYXJnMSA8PCBzdGQ6OmVuZGw7IH07IHByaXZhdGU6IGNvbnN0 IGNoYXIqIGFyZzE7IH07CgoKCgoKCgogIGNsYXNzIEV4Y0NvbXBhdGliaWxpdHkgOiBwdWJsaWMg RXhjZXB0aW9uQmFzZSB7IHB1YmxpYzogRXhjQ29tcGF0aWJpbGl0eSAoY29uc3QgY2hhciogYTEp IDogYXJnMSAoYTEpIHt9OyB2aXJ0dWFsIH5FeGNDb21wYXRpYmlsaXR5ICgpIHRocm93ICgpIHt9 OyB2aXJ0dWFsIHZvaWQgUHJpbnRJbmZvIChzdGQ6Om9zdHJlYW0gJm91dCkgY29uc3QgeyBvdXQg PDwgIllvdSBhcmUgdXNpbmcgYSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZlYXR1cmVcbiIgPDwg InRoYXQgeW91IGhhdmUgZGlzYWJsZWQgZHVyaW5nIGNvbmZpZ3VyYXRpb24gb2ZcbiIgPDwgInRo ZSBsaWJyYXJ5IGJ5IHRoZSAtLWRpc2FibGUtY29tcGF0PSIgPDwgYXJnMSA8PCAiIHN3aXRjaC4g WW91IHNob3VsZCBlaXRoZXIgdXNlIGFuXG4iIDw8ICJhbHRlcm5hdGl2ZSBmdW5jdGlvbiwgb3Ig Y29uZmlndXJlIGFnYWluIHdpdGhvdXRcbiIgPDwgInRoaXMgc3dpdGNoIGFuZCByZWNvbXBpbGUg dGhlIGxpYnJhcnkuIiA8PCBzdGQ6OmVuZGw7IH07IHByaXZhdGU6IGNvbnN0IGNoYXIqIGFyZzE7 IH07CgoKCgoKCgp9OwoKCnVzaW5nIG5hbWVzcGFjZSBTdGFuZGFyZEV4Y2VwdGlvbnM7CiMgMTkg Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcG9p bnQuaCIgMgojIDEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs dWRlL2Jhc2UvdGVuc29yX2Jhc2UuaCIgMQojIDI1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkv Mi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RlbnNvcl9iYXNlLmgiCiMgMSAiL2hvbWUvYmFu Z2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy92ZWN0b3IiIDEgMwojIDY1ICIv aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL3ZlY3RvciIgMwoK IyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMv ZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9p bmNsdWRlL2MrKy8zLjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgv YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMK IyAzNSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRz L2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2Jh ZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoK ICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5 cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9f cyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2 b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK ICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv d19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGlt ZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihj b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBj aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciog X19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0K IyA2NyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy92ZWN0 b3IiIDIgMwoKCgoKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j KysvMy4zL2JpdHMvc3RsX3ZlY3Rvci5oIiAxIDMKIyA2NSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF92ZWN0b3IuaCIgMwojIDEgIi9ob21l L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9mdW5jdGV4Y2Vw dC5oIiAxIDMKIyAzNCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr LzMuMy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMu My1wcmUvaW5jbHVkZS9jKysvMy4zL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvaG9t ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvZnVuY3RleGNl cHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlv bih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBf X3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQp OwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p ZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro cm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df bGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9y YW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIq IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7 CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAg dm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDY2ICIvaG9t ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3ZlY3Rv ci5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1Rw LCB0eXBlbmFtZSBfQWxsb2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KICAgIGNsYXNzIF9WZWN0b3Jf YWxsb2NfYmFzZQogIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFp dHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgICAgYWxsb2NhdG9y X3R5cGU7CgogICAgYWxsb2NhdG9yX3R5cGUKICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJl dHVybiBfTV9kYXRhX2FsbG9jYXRvcjsgfQoKICAgIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBh bGxvY2F0b3JfdHlwZSYgX19hKQogICAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0 YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAgICB7fQoKICBwcm90 ZWN0ZWQ6CiAgICBhbGxvY2F0b3JfdHlwZSBfTV9kYXRhX2FsbG9jYXRvcjsKICAgIF9UcCogX01f c3RhcnQ7CiAgICBfVHAqIF9NX2ZpbmlzaDsKICAgIF9UcCogX01fZW5kX29mX3N0b3JhZ2U7Cgog ICAgX1RwKgogICAgX01fYWxsb2NhdGUoc2l6ZV90IF9fbikgeyByZXR1cm4gX01fZGF0YV9hbGxv Y2F0b3IuYWxsb2NhdGUoX19uKTsgfQoKICAgIHZvaWQKICAgIF9NX2RlYWxsb2NhdGUoX1RwKiBf X3AsIHNpemVfdCBfX24pCiAgICB7IGlmIChfX3ApIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2Nh dGUoX19wLCBfX24pOyB9CiAgfTsKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l IF9BbGxvY2F0b3I+CiAgICBjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9y LCB0cnVlPgogIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8 X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgICAgYWxsb2NhdG9yX3R5 cGU7CgogICAgYWxsb2NhdG9yX3R5cGUKICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVy biBhbGxvY2F0b3JfdHlwZSgpOyB9CgogICAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9j YXRvcl90eXBlJikKICAgICAgOiBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zf c3RvcmFnZSgwKQogICAge30KCiAgcHJvdGVjdGVkOgogICAgX1RwKiBfTV9zdGFydDsKICAgIF9U cCogX01fZmluaXNoOwogICAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgICB0eXBlZGVmIHR5 cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUgX0FsbG9j X3R5cGU7CgogICAgX1RwKgogICAgX01fYWxsb2NhdGUoc2l6ZV90IF9fbikgeyByZXR1cm4gX0Fs bG9jX3R5cGU6OmFsbG9jYXRlKF9fbik7IH0KCiAgICB2b2lkCiAgICBfTV9kZWFsbG9jYXRlKF9U cCogX19wLCBzaXplX3QgX19uKSB7IF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgX19uKTt9 CiAgfTsKCgoKCgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgog ICAgc3RydWN0IF9WZWN0b3JfYmFzZQogICAgOiBwdWJsaWMgX1ZlY3Rvcl9hbGxvY19iYXNlPF9U cCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8 X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgewogIHB1YmxpYzoKICAgIHR5cGVkZWYg X1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAg ICAgICAgX0Jhc2U7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBh bGxvY2F0b3JfdHlwZTsKCiAgICBfVmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9f YSkKICAgICAgOiBfQmFzZShfX2EpIHt9CiAgICBfVmVjdG9yX2Jhc2Uoc2l6ZV90IF9fbiwgY29u c3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAgOiBfQmFzZShfX2EpCiAgICB7CiAgICAgIF9N X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgICAgX01fZmluaXNoID0gX01fc3RhcnQ7CiAg ICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICB9CgogICAgfl9WZWN0 b3JfYmFzZSgpIHsgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBf TV9zdGFydCk7IH0KICB9OwojIDE4MiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2lu Y2x1ZGUvYysrLzMuMy9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBf VHAsIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4KICAgIGNsYXNzIHZlY3RvciA6 IHByb3RlY3RlZCBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxsb2M+CiAgewoKICAgCgogICAgdHlwZWRl ZiBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxsb2M+IF9CYXNlOwogICAgdHlwZWRlZiB2ZWN0b3I8X1Rw LCBfQWxsb2M+IHZlY3Rvcl90eXBlOwoKICBwdWJsaWM6CiAgICB0eXBlZGVmIF9UcCB2YWx1ZV90 eXBlOwogICAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogICAgdHlwZWRlZiBjb25zdCB2 YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFs X2l0ZXJhdG9yPHBvaW50ZXIsIHZlY3Rvcl90eXBlPiBpdGVyYXRvcjsKICAgIHR5cGVkZWYgX19n bnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCB2ZWN0b3JfdHlwZT4KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0X2l0ZXJhdG9yOwogICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRl cmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9p dGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVkZWYgdmFsdWVfdHlw ZSYgcmVmZXJlbmNlOwogICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVu Y2U7CiAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBk aWZmZXJlbmNlX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlw ZSBhbGxvY2F0b3JfdHlwZTsKCiAgcHJvdGVjdGVkOgoKCgoKCgoKICAgIHVzaW5nIF9CYXNlOjpf TV9hbGxvY2F0ZTsKICAgIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlOwogICAgdXNpbmcgX0Jh c2U6Ol9NX3N0YXJ0OwogICAgdXNpbmcgX0Jhc2U6Ol9NX2ZpbmlzaDsKICAgIHVzaW5nIF9CYXNl OjpfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgcHVibGljOgoKCgoKCiAgICBleHBsaWNpdAogICAgdmVj dG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6 IF9CYXNlKF9fYSkge30KIyAyMzcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNs dWRlL2MrKy8zLjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAgIHZlY3RvcihzaXplX3R5cGUgX19u LCBjb25zdCB2YWx1ZV90eXBlJiBfX3ZhbHVlLAogICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90 eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9CYXNlKF9fbiwgX19hKQogICAg ICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9fdmFs dWUpOyB9CiMgMjQ5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysv My4zL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgICBleHBsaWNpdAogICAgdmVjdG9yKHNpemVfdHlw ZSBfX24pCiAgICAgIDogX0Jhc2UoX19uLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgICB7IF9NX2Zp bmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIHZhbHVlX3R5cGUoKSk7 IH0KIyAyNjIgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMv Yml0cy9zdGxfdmVjdG9yLmgiIDMKICAgIHZlY3Rvcihjb25zdCB2ZWN0b3ImIF9feCkKICAgICAg OiBfQmFzZShfX3guc2l6ZSgpLCBfX3guZ2V0X2FsbG9jYXRvcigpKQogICAgICB7IF9NX2Zpbmlz aCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7 IH0KIyAyNzkgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMv Yml0cy9zdGxfdmVjdG9yLmgiIDMKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyYXRv cj4KICAgICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCwKICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3Jf dHlwZSgpKQogICAgICAgIDogX0Jhc2UoX19hKQogICAgICB7CgogICAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwog ICAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwo KSk7CiAgICAgIH0KCgoKCgoKICAgIH52ZWN0b3IoKSB7IF9EZXN0cm95KF9NX3N0YXJ0LCBfTV9m aW5pc2gpOyB9CiMgMzA0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j KysvMy4zL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgICB2ZWN0b3ImCiAgICBvcGVyYXRvcj0oY29u c3QgdmVjdG9yJiBfX3gpOwojIDMxNyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2lu Y2x1ZGUvYysrLzMuMy9iaXRzL3N0bF92ZWN0b3IuaCIgMwogICAgdm9pZAogICAgYXNzaWduKHNp emVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKSB7IF9NX2ZpbGxfYXNzaWduKF9f biwgX192YWwpOyB9CiMgMzMyICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk ZS9jKysvMy4zL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyYXRvcj4KICAgICAgdm9pZAogICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJz dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICB7CgogICAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAg ICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAg ICAgfQoKCiAgICBhbGxvY2F0b3JfdHlwZQogICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0 dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCgoKCgoKICAgIGl0ZXJhdG9yCiAgICBiZWdp bigpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9zdGFydCk7IH0KCgoKCgogICAgY29uc3RfaXRlcmF0 b3IKICAgIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKF9NX3N0YXJ0KTsg fQoKCgoKCiAgICBpdGVyYXRvcgogICAgZW5kKCkgeyByZXR1cm4gaXRlcmF0b3IgKF9NX2Zpbmlz aCk7IH0KCgoKCgogICAgY29uc3RfaXRlcmF0b3IKICAgIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGNv bnN0X2l0ZXJhdG9yIChfTV9maW5pc2gpOyB9CgoKCgoKICAgIHJldmVyc2VfaXRlcmF0b3IKICAg IHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CgoKCgoKICAgIGNv bnN0X3JldmVyc2VfaXRlcmF0b3IKICAgIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3Jl dmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CgoKCgoKCiAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICBy ZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKCgoKCgogICAgY29u c3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3JldmVy c2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCgoKICAgIHNpemVfdHlwZQogICAgc2l6ZSgpIGNvbnN0 IHsgcmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2luKCkpOyB9CgoKICAgIHNpemVfdHlwZQog ICAgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpIC8gc2l6ZW9mKHZhbHVl X3R5cGUpOyB9CiMgNDIzICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j KysvMy4zL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgICB2b2lkCiAgICByZXNpemUoc2l6ZV90eXBl IF9fbmV3X3NpemUsIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAgIHsKICAgICAgaWYgKF9fbmV3 X3NpemUgPCBzaXplKCkpCiAgICAgICAgZXJhc2UoYmVnaW4oKSArIF9fbmV3X3NpemUsIGVuZCgp KTsKICAgICAgZWxzZQogICAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwg X194KTsKICAgIH0KIyA0NDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRl L2MrKy8zLjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAgIHZvaWQKICAgIHJlc2l6ZShzaXplX3R5 cGUgX19uZXdfc2l6ZSkgeyByZXNpemUoX19uZXdfc2l6ZSwgdmFsdWVfdHlwZSgpKTsgfQoKCgoK CiAgICBzaXplX3R5cGUKICAgIGNhcGFjaXR5KCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlw ZShjb25zdF9pdGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFnZSkgLSBiZWdpbigpKTsgfQoKCgoKICAg IGJvb2wKICAgIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQojIDQ3 MyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0 bF92ZWN0b3IuaCIgMwogICAgdm9pZAogICAgcmVzZXJ2ZShzaXplX3R5cGUgX19uKTsKIyA0ODYg Ii9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxf dmVjdG9yLmgiIDMKICAgIHJlZmVyZW5jZQogICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSB7 IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CiMgNDk4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgICBjb25zdF9y ZWZlcmVuY2UKICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKihi ZWdpbigpICsgX19uKTsgfQoKICBwcm90ZWN0ZWQ6CgogICAgdm9pZAogICAgX01fcmFuZ2VfY2hl Y2soc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgaWYgKF9fbiA+PSB0aGlzLT5zaXpl KCkpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoInZlY3RvciBbXSBhY2Nlc3Mgb3V0IG9m IHJhbmdlIik7CiAgICB9CgogIHB1YmxpYzoKIyA1MjEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAgIHJlZmVyZW5j ZQogICAgYXQoc2l6ZV90eXBlIF9fbikgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0 aGlzKVtfX25dOyB9CiMgNTM0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk ZS9jKysvMy4zL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgICBjb25zdF9yZWZlcmVuY2UKICAgIGF0 KHNpemVfdHlwZSBfX24pIGNvbnN0IHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhp cylbX19uXTsgfQoKCgoKCiAgICByZWZlcmVuY2UKICAgIGZyb250KCkgeyByZXR1cm4gKmJlZ2lu KCk7IH0KCgoKCgogICAgY29uc3RfcmVmZXJlbmNlCiAgICBmcm9udCgpIGNvbnN0IHsgcmV0dXJu ICpiZWdpbigpOyB9CgoKCgoKICAgIHJlZmVyZW5jZQogICAgYmFjaygpIHsgcmV0dXJuICooZW5k KCkgLSAxKTsgfQoKCgoKCiAgICBjb25zdF9yZWZlcmVuY2UKICAgIGJhY2soKSBjb25zdCB7IHJl dHVybiAqKGVuZCgpIC0gMSk7IH0KIyA1NzUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXBy ZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAgIHZvaWQKICAgIHB1c2hf YmFjayhjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7CiAgICAgIGlmIChfTV9maW5pc2ggIT0g X01fZW5kX29mX3N0b3JhZ2UpCiAgICAgIHsKICAgICAgICBfQ29uc3RydWN0KF9NX2ZpbmlzaCwg X194KTsKICAgICAgICArK19NX2ZpbmlzaDsKICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX01f aW5zZXJ0X2F1eChlbmQoKSwgX194KTsKICAgIH0KIyA1OTUgIi9ob21lL2JhbmdlcnRoL2Jpbi9n Y2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAgIHZvaWQK ICAgIHBvcF9iYWNrKCkKICAgIHsKICAgICAgLS1fTV9maW5pc2g7CiAgICAgIF9EZXN0cm95KF9N X2ZpbmlzaCk7CiAgICB9CiMgNjEzICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j bHVkZS9jKysvMy4zL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgICBpdGVyYXRvcgogICAgaW5zZXJ0 KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CiMgNjQ5ICIvaG9t ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3ZlY3Rv ci5oIiAzCiAgICB2b2lkCiAgICBpbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19u LCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24s IF9feCk7IH0KIyA2NjUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr Ky8zLjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0 ZXJhdG9yPgogICAgICB2b2lkCiAgICAgIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRl cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsKCiAgICAgICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFs IF9JbnRlZ3JhbDsKICAgICAgICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwg X19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICAgICAgfQojIDY4OCAiL2hvbWUvYmFuZ2VydGgvYmlu L2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF92ZWN0b3IuaCIgMwogICAgaXRl cmF0b3IKICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pOwojIDcwOCAiL2hvbWUvYmFuZ2Vy dGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF92ZWN0b3IuaCIgMwog ICAgaXRlcmF0b3IKICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCk7 CiMgNzIwICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Jp dHMvc3RsX3ZlY3Rvci5oIiAzCiAgICB2b2lkCiAgICBzd2FwKHZlY3RvciYgX194KQogICAgewog ICAgICBzdGQ6OnN3YXAoX01fc3RhcnQsIF9feC5fTV9zdGFydCk7CiAgICAgIHN0ZDo6c3dhcChf TV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3Jh Z2UsIF9feC5fTV9lbmRfb2Zfc3RvcmFnZSk7CiAgICB9CgoKCgoKCgogICAgdm9pZAogICAgY2xl YXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQoKICBwcm90ZWN0ZWQ6CgoKCgoKCiAgICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KICAgIHBvaW50ZXIKICAgICAgX01f YWxsb2NhdGVfYW5kX2NvcHkoc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICAg IHsKICAgICAgcG9pbnRlciBfX3Jlc3VsdCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICAgIHRyeQog ICAgICAgIHsKICAgICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9f cmVzdWx0KTsKICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIGNhdGNo KC4uLikKICAgICAgICB7CiAgICAgICAgX01fZGVhbGxvY2F0ZShfX3Jlc3VsdCwgX19uKTsKICAg ICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CgoKCgoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnRlZ2VyPgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIg X19uLCBfSW50ZWdlciBfX3ZhbHVlLCBfX3RydWVfdHlwZSkKICAgICAgewogICAgICAgIF9NX3N0 YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0 YXJ0ICsgX19uOwogICAgICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0 YXJ0LCBfX24sIF9fdmFsdWUpOwogICAgICB9CgoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXI+CiAgICAgIHZvaWQKICAgICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fZmFsc2VfdHlwZSkKICAgICAgewogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JbnB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgICAgICAgICAgICAgICAg ICAgICAgX0l0ZXJDYXRlZ29yeTsKICAgICAgICBfTV9yYW5nZV9pbml0aWFsaXplKF9fZmlyc3Qs IF9fbGFzdCwgX0l0ZXJDYXRlZ29yeSgpKTsKICAgICAgfQoKCiAgICB0ZW1wbGF0ZSA8dHlwZW5h bWUgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkCiAgICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX0lu cHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy YXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgZm9yICggOyBfX2Zp cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAg ICB9CgoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgogICAgdm9pZCBf TV9yYW5nZV9pbml0aWFsaXplKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgZm9yd2FyZF9pdGVyYXRv cl90YWcpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX24gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xh c3QpOwogICAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICAgIF9NX2VuZF9vZl9z dG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRf Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICAgIH0KCgoKCgoKICAgIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnRlZ2VyPgogICAgICB2b2lkCiAgICAgICBfTV9hc3NpZ25fZGlzcGF0Y2go X0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICAgICB7CiAgICAg ICAgIF9NX2ZpbGxfYXNzaWduKHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19uKSwKICAgICAgICAg ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dmFsdWVfdHlwZT4oX192YWwpKTsKICAgICAgIH0K CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgICAgdm9pZAogICAgICBfTV9h c3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19m YWxzZV90eXBlKQogICAgICB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0lucHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICAgICAgICAgICAgICAgICAgICAg ICBfSXRlckNhdGVnb3J5OwogICAgICAgIF9NX2Fzc2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBf SXRlckNhdGVnb3J5KCkpOwogICAgICB9CgoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJ dGVyYXRvcj4KICAgICAgdm9pZAogICAgICBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9f Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl cmF0b3JfdGFnKTsKCgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CiAg ICAgIHZvaWQKICAgICAgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9G b3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y X3RhZyk7CgoKCiAgICB2b2lkCiAgICBfTV9maWxsX2Fzc2lnbihzaXplX3R5cGUgX19uLCBjb25z dCB2YWx1ZV90eXBlJiBfX3ZhbCk7CgoKCgoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlZ2Vy PgogICAgICB2b2lkCiAgICAgIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0lu dGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1 ZV90eXBlKQogICAgICB7CiAgICAgICAgX01fZmlsbF9pbnNlcnQoX19wb3MsIHN0YXRpY19jYXN0 PHNpemVfdHlwZT4oX19uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh c3Q8dmFsdWVfdHlwZT4oX192YWwpKTsKICAgICAgfQoKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyYXRvcj4KICAgICAgdm9pZAogICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0 b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgICAgewogICAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3Jf Y2F0ZWdvcnkKICAgICAgICAgICAgICAgICAgICAgICAgIF9JdGVyQ2F0ZWdvcnk7CiAgICAgICAg X01fcmFuZ2VfaW5zZXJ0KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JdGVyQ2F0ZWdvcnkoKSk7 CiAgICAgIH0KCgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICB2 b2lkCiAgICAgIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAg ICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgoKICAgIHRlbXBsYXRlIDx0 eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgogICAgICB2b2lkCiAgICAgIF9NX3JhbmdlX2luc2Vy dChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3Ig X19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBm b3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgoKCiAgICB2b2lkCiAgICBfTV9maWxsX2luc2VydCAoaXRl cmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CgoKICAg IHZvaWQKICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVf dHlwZSYgX194KTsKCgoKCgogIH07CiMgOTExICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1w cmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdGVtcGxhdGUgPHR5cGVu YW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0o Y29uc3QgdmVjdG9yPF9UcCxfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsX0FsbG9jPiYg X195KQogICAgewogICAgICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYmCiAgICAg ICAgICAgICBlcXVhbChfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7CiAgICB9 CiMgOTMwICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Jp dHMvc3RsX3ZlY3Rvci5oIiAzCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Fs bG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCB2ZWN0b3I8X1RwLF9BbGxv Yz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7CiAgICAgIHJldHVy biBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7CiAg ICB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp bmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCB2ZWN0b3I8X1RwLF9BbGxvYz4mIF9feCwgY29u c3QgdmVjdG9yPF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9 CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg Ym9vbAogICAgb3BlcmF0b3I+KGNvbnN0IHZlY3RvcjxfVHAsX0FsbG9jPiYgX194LCBjb25zdCB2 ZWN0b3I8X1RwLF9BbGxvYz4mIF9feSkKICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQoKCiAgdGVt cGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg IG9wZXJhdG9yPD0oY29uc3QgdmVjdG9yPF9UcCxfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3Rvcjxf VHAsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CgoKICB0ZW1wbGF0 ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl cmF0b3I+PShjb25zdCB2ZWN0b3I8X1RwLF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCxf QWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KCgogIHRlbXBsYXRlIDx0 eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKHZl Y3RvcjxfVHAsX0FsbG9jPiYgX194LCB2ZWN0b3I8X1RwLF9BbGxvYz4mIF9feSkKICAgIHsgX194 LnN3YXAoX195KTsgfQp9CiMgNzIgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNs dWRlL2MrKy8zLjMvdmVjdG9yIiAyIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1w cmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMSAzCiMgNjQgIi9ob21lL2Jh bmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYnZlY3Rvci5o IiAzCm5hbWVzcGFjZSBzdGQKewogIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBfQml0X3R5cGU7CiAg ZW51bSB7IF9NX3dvcmRfYml0ID0gaW50KDggKiBzaXplb2YoX0JpdF90eXBlKSkgfTsKCnN0cnVj dCBfQml0X3JlZmVyZW5jZSB7CgogIF9CaXRfdHlwZSAqIF9NX3A7CiAgX0JpdF90eXBlIF9NX21h c2s7CiAgX0JpdF9yZWZlcmVuY2UoX0JpdF90eXBlICogX194LCBfQml0X3R5cGUgX195KQogICAg OiBfTV9wKF9feCksIF9NX21hc2soX195KSB7fQoKcHVibGljOgogIF9CaXRfcmVmZXJlbmNlKCkg OiBfTV9wKDApLCBfTV9tYXNrKDApIHt9CiAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu ICEhKCpfTV9wICYgX01fbWFzayk7IH0KICBfQml0X3JlZmVyZW5jZSYgb3BlcmF0b3I9KGJvb2wg X194KQogIHsKICAgIGlmIChfX3gpICpfTV9wIHw9IF9NX21hc2s7CiAgICBlbHNlICpfTV9wICY9 IH5fTV9tYXNrOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfQml0X3JlZmVyZW5jZSYgb3BlcmF0 b3I9KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpCiAgICB7IHJldHVybiAqdGhpcyA9IGJvb2wo X194KTsgfQogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25z dAogICAgeyByZXR1cm4gYm9vbCgqdGhpcykgPT0gYm9vbChfX3gpOyB9CiAgYm9vbCBvcGVyYXRv cjwoY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkgY29uc3QKICAgIHsgcmV0dXJuICFib29sKCp0 aGlzKSAmJiBib29sKF9feCk7IH0KICB2b2lkIGZsaXAoKSB7ICpfTV9wIF49IF9NX21hc2s7IH0K fTsKCnN0cnVjdCBfQml0X2l0ZXJhdG9yX2Jhc2UgOiBwdWJsaWMgaXRlcmF0b3I8cmFuZG9tX2Fj Y2Vzc19pdGVyYXRvcl90YWcsIGJvb2w+CnsKICBfQml0X3R5cGUgKiBfTV9wOwogIHVuc2lnbmVk IGludCBfTV9vZmZzZXQ7CgogIF9CaXRfaXRlcmF0b3JfYmFzZShfQml0X3R5cGUgKiBfX3gsIHVu c2lnbmVkIGludCBfX3kpCiAgICA6IF9NX3AoX194KSwgX01fb2Zmc2V0KF9feSkge30KCiAgdm9p ZCBfTV9idW1wX3VwKCkgewogICAgaWYgKF9NX29mZnNldCsrID09IF9NX3dvcmRfYml0IC0gMSkg ewogICAgICBfTV9vZmZzZXQgPSAwOwogICAgICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQgX01f YnVtcF9kb3duKCkgewogICAgaWYgKF9NX29mZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0 ID0gX01fd29yZF9iaXQgLSAxOwogICAgICAtLV9NX3A7CiAgICB9CiAgfQoKICB2b2lkIF9NX2lu Y3IocHRyZGlmZl90IF9faSkgewogICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9faSArIF9NX29m ZnNldDsKICAgIF9NX3AgKz0gX19uIC8gX01fd29yZF9iaXQ7CiAgICBfX24gPSBfX24gJSBfTV93 b3JkX2JpdDsKICAgIGlmIChfX24gPCAwKSB7CiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBp bnQpIF9fbiArIF9NX3dvcmRfYml0OwogICAgICAtLV9NX3A7CiAgICB9IGVsc2UKICAgICAgX01f b2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19uOwogIH0KCiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0 IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gX01fcCA9PSBfX2ku X01fcCAmJiBfTV9vZmZzZXQgPT0gX19pLl9NX29mZnNldDsKICB9CiAgYm9vbCBvcGVyYXRvcjwo Y29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wIDwg X19pLl9NX3AgfHwgKF9NX3AgPT0gX19pLl9NX3AgJiYgX01fb2Zmc2V0IDwgX19pLl9NX29mZnNl dCk7CiAgfQogIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkg Y29uc3QgewogICAgcmV0dXJuICEoKnRoaXMgPT0gX19pKTsKICB9CiAgYm9vbCBvcGVyYXRvcj4o Y29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBfX2kgPCAq dGhpczsKICB9CiAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19p KSBjb25zdCB7CiAgICByZXR1cm4gIShfX2kgPCAqdGhpcyk7CiAgfQogIGJvb2wgb3BlcmF0b3I+ PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuICEoKnRo aXMgPCBfX2kpOwogIH0KfTsKCmlubGluZSBwdHJkaWZmX3QKb3BlcmF0b3ItKGNvbnN0IF9CaXRf aXRlcmF0b3JfYmFzZSYgX194LCBjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9feSkgewogIHJl dHVybiBfTV93b3JkX2JpdCAqIChfX3guX01fcCAtIF9feS5fTV9wKSArIF9feC5fTV9vZmZzZXQg LSBfX3kuX01fb2Zmc2V0Owp9CgoKc3RydWN0IF9CaXRfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9p dGVyYXRvcl9iYXNlCnsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBl ZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVy YXRvcjsKCiAgX0JpdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAg X0JpdF9pdGVyYXRvcihfQml0X3R5cGUgKiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9C aXRfaXRlcmF0b3JfYmFzZShfX3gsIF9feSkge30KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNv bnN0IHsgcmV0dXJuIHJlZmVyZW5jZShfTV9wLCAxVUwgPDwgX01fb2Zmc2V0KTsgfQogIGl0ZXJh dG9yJiBvcGVyYXRvcisrKCkgewogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlzOwog IH0KICBpdGVyYXRvciBvcGVyYXRvcisrKGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhp czsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgaXRlcmF0b3ImIG9w ZXJhdG9yLS0oKSB7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAg aXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAg ICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgaXRlcmF0b3ImIG9wZXJh dG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgX01faW5jcihfX2kpOwogICAgcmV0dXJu ICp0aGlzOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7 CiAgICAqdGhpcyArPSAtX19pOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVy YXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgaXRlcmF0b3IgX190bXAgPSAq dGhpczsKICAgIHJldHVybiBfX3RtcCArPSBfX2k7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yLShk aWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwog ICAgcmV0dXJuIF9fdG1wIC09IF9faTsKICB9CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZl cmVuY2VfdHlwZSBfX2kpIHsgcmV0dXJuICooKnRoaXMgKyBfX2kpOyB9Cn07CgppbmxpbmUgX0Jp dF9pdGVyYXRvcgpvcGVyYXRvcisocHRyZGlmZl90IF9fbiwgY29uc3QgX0JpdF9pdGVyYXRvciYg X194KSB7IHJldHVybiBfX3ggKyBfX247IH0KCgpzdHJ1Y3QgX0JpdF9jb25zdF9pdGVyYXRvciA6 IHB1YmxpYyBfQml0X2l0ZXJhdG9yX2Jhc2UKewogIHR5cGVkZWYgYm9vbCByZWZlcmVuY2U7CiAg dHlwZWRlZiBib29sIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IGJvb2wqIHBvaW50 ZXI7CiAgdHlwZWRlZiBfQml0X2NvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoKICBfQml0 X2NvbnN0X2l0ZXJhdG9yKCkgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoMCwgMCkge30KICBfQml0X2Nv bnN0X2l0ZXJhdG9yKF9CaXRfdHlwZSAqIF9feCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX0Jp dF9pdGVyYXRvcl9iYXNlKF9feCwgX195KSB7fQogIF9CaXRfY29uc3RfaXRlcmF0b3IoY29uc3Qg X0JpdF9pdGVyYXRvciYgX194KQogICAgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoX194Ll9NX3AsIF9f eC5fTV9vZmZzZXQpIHt9CgogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAg ICByZXR1cm4gX0JpdF9yZWZlcmVuY2UoX01fcCwgMVVMIDw8IF9NX29mZnNldCk7CiAgfQogIGNv bnN0X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJu ICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisrKGludCkgewogICAgY29uc3Rf aXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiBfX3Rt cDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBfTV9idW1wX2Rvd24o KTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQp IHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX2Rvd24oKTsK ICAgIHJldHVybiBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVy ZW5jZV90eXBlIF9faSkgewogICAgX01faW5jcihfX2kpOwogICAgcmV0dXJuICp0aGlzOwogIH0K ICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICAq dGhpcyArPSAtX19pOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVy YXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgY29uc3RfaXRlcmF0b3IgX190 bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCArPSBfX2k7CiAgfQogIGNvbnN0X2l0ZXJhdG9y IG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9pdGVyYXRv ciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9faTsKICB9CiAgY29uc3RfcmVm ZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgcmV0dXJuICooKnRo aXMgKyBfX2kpOwogIH0KfTsKCmlubGluZSBfQml0X2NvbnN0X2l0ZXJhdG9yCm9wZXJhdG9yKyhw dHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2NvbnN0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9f eCArIF9fbjsgfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfX2lzX3N0 YXRpYz4KY2xhc3MgX0J2ZWN0b3JfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVu YW1lIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAg ICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29u c3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShj b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBf TV9zdGFydCgpLCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3Rl ZDoKICBfQml0X3R5cGUgKiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9N X2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRlKChfX24gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRf Yml0KTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQog ICAgICBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5f TV9wKTsKICB9CgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X0JpdF90eXBlLCBfQWxsb2NhdG9y Pjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9yOwogIF9CaXRfaXRl cmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgX0JpdF90eXBlICog X01fZW5kX29mX3N0b3JhZ2U7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNz IF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jYXRvciwgdHJ1ZT4gewpwdWJsaWM6CiAgdHlwZWRl ZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlw ZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRv cigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX0J2ZWN0b3JfYWxsb2Nf YmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9NX3N0YXJ0KCksIF9NX2ZpbmlzaCgp LCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7fQoKcHJvdGVjdGVkOgogIHR5cGVkZWYgdHlwZW5hbWUg X0FsbG9jX3RyYWl0czxfQml0X3R5cGUsIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZQogICAgICAg ICAgX0FsbG9jX3R5cGU7CgogIF9CaXRfdHlwZSAqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQog ICAgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRlKChfX24gKyBfTV93b3JkX2JpdCAtIDEp L19NX3dvcmRfYml0KTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFy dC5fTV9wKQogICAgICBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9wLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0Ll9N X3ApOwogIH0KCiAgX0JpdF9pdGVyYXRvciBfTV9zdGFydDsKICBfQml0X2l0ZXJhdG9yIF9NX2Zp bmlzaDsKICBfQml0X3R5cGUgKiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsKCnRlbXBsYXRlIDxjbGFz cyBfQWxsb2M+CmNsYXNzIF9CdmVjdG9yX2Jhc2UKICA6IHB1YmxpYyBfQnZlY3Rvcl9hbGxvY19i YXNlPF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8 Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfQnZlY3Rvcl9hbGxv Y19iYXNlPF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0 czxib29sLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKcHVibGlj OgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBl OwoKICBfQnZlY3Rvcl9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19h KSB7fQogIH5fQnZlY3Rvcl9iYXNlKCkgeyBfQmFzZTo6X01fZGVhbGxvY2F0ZSgpOyB9Cn07Cgp9 CgoKCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPHR5cGVuYW1lIF9BbGxvYz4KICBjbGFzcyB2 ZWN0b3I8Ym9vbCwgX0FsbG9jPiA6IHB1YmxpYyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4KICB7CiAg cHVibGljOgogICAgdHlwZWRlZiBib29sIHZhbHVlX3R5cGU7CiAgICB0eXBlZGVmIHNpemVfdCBz aXplX3R5cGU7CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICB0eXBl ZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIHR5cGVkZWYgYm9vbCBjb25zdF9yZWZl cmVuY2U7CiAgICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogICAgdHlwZWRlZiBj b25zdCBib29sKiBjb25zdF9wb2ludGVyOwoKICAgIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVy YXRvcjsKICAgIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAg ICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2 ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9y PiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFzZTxf QWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICAgIGFsbG9jYXRvcl90eXBl IGdldF9hbGxvY2F0b3IoKSBjb25zdCB7CiAgICAgIHJldHVybiBfQnZlY3Rvcl9iYXNlPF9BbGxv Yz46OmdldF9hbGxvY2F0b3IoKTsKICAgIH0KCiAgcHJvdGVjdGVkOgogICAgdXNpbmcgX0J2ZWN0 b3JfYmFzZTxfQWxsb2M+OjpfTV9iaXRfYWxsb2M7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9B bGxvYz46Ol9NX2RlYWxsb2NhdGU7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9N X3N0YXJ0OwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9maW5pc2g7CiAgICB1 c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2VuZF9vZl9zdG9yYWdlOwoKICBwcm90ZWN0 ZWQ6CiAgICB2b2lkIF9NX2luaXRpYWxpemUoc2l6ZV90eXBlIF9fbikgewogICAgICBfQml0X3R5 cGUgKiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBf X3EgKyAoX19uICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAgX01fc3RhcnQg PSBpdGVyYXRvcihfX3EsIDApOwogICAgICBfTV9maW5pc2ggPSBfTV9zdGFydCArIGRpZmZlcmVu Y2VfdHlwZShfX24pOwogICAgfQogICAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9z aXRpb24sIGJvb2wgX194KSB7CiAgICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zf c3RvcmFnZSkgewogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01fZmluaXNoLCBf TV9maW5pc2ggKyAxKTsKICAgICAgICAqX19wb3NpdGlvbiA9IF9feDsKICAgICAgICArK19NX2Zp bmlzaDsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXpl KCkKICAgICAgICAgICAgICAgICAgICAgICAgICA/IDIgKiBzaXplKCkgOiBzdGF0aWNfY2FzdDxz aXplX3R5cGU+KF9NX3dvcmRfYml0KTsKICAgICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRf YWxsb2MoX19sZW4pOwogICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3Np dGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgKl9faSsrID0gX194OwogICAgICAgIF9N X2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgX01fZGVhbGxv Y2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX01fd29y ZF9iaXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwg MCk7CiAgICAgIH0KICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg ICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0 SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJh dG9yX3RhZykgewogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKCk7CiAgICAgIF9NX2ZpbmlzaCA9 IGl0ZXJhdG9yKCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gMDsKICAgICAgZm9yICggOyBf X2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7 CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9N X2luaXRpYWxpemVfcmFuZ2UoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJh dG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y X3RhZykgewogICAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsK ICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01f c3RhcnQpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZv aWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAg ICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGZvciAoIDsgX19m aXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewogICAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9z LCAqX19maXJzdCk7CiAgICAgICAgKytfX3BvczsKICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRl IDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0 b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3Ig X19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsK ICAgICAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAg ICBpZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24pIHsKICAgICAgICAgIGNvcHlfYmFja3dh cmQoX19wb3NpdGlvbiwgZW5kKCksIF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsK ICAgICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgICAgIF9N X2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7 CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwog ICAgICAgICAgX0JpdF90eXBlICogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICAg IGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAw KSk7CiAgICAgICAgICBfX2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsKICAgICAgICAg IF9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgICBfTV9k ZWFsbG9jYXRlKCk7CiAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiAr IF9NX3dvcmRfYml0IC0gMSkvX01fd29yZF9iaXQ7CiAgICAgICAgICBfTV9zdGFydCA9IGl0ZXJh dG9yKF9fcSwgMCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHB1YmxpYzoKICAgIGl0ZXJh dG9yIGJlZ2luKCkgeyByZXR1cm4gX01fc3RhcnQ7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2lu KCkgY29uc3QgeyByZXR1cm4gX01fc3RhcnQ7IH0KICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJu IF9NX2ZpbmlzaDsgfQogICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01f ZmluaXNoOyB9CgogICAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNl X2l0ZXJhdG9yKGVuZCgpKTsgfQogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBj b25zdCB7CiAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsKICAgIH0K ICAgIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVn aW4oKSk7IH0KICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsKICAgICAg cmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7CiAgICB9CgogICAgc2l6ZV90 eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQog ICAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQog ICAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3QgewogICAgICByZXR1cm4gc2l6ZV90eXBlKGNv bnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdlLCAwKSAtIGJlZ2luKCkpOwogICAgfQogICAg Ym9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0KCiAgICByZWZl cmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKQogICAgICB7IHJldHVybiAqKGJlZ2luKCkg KyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltd KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVu Y2VfdHlwZShfX24pKTsgfQoKICAgIHZvaWQgX01fcmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikg Y29uc3QgewogICAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAgICBfX3Rocm93X291 dF9vZl9yYW5nZSgidmVjdG9yPGJvb2w+Iik7CiAgICB9CgogICAgcmVmZXJlbmNlIGF0KHNpemVf dHlwZSBfX24pCiAgICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19u XTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsg X01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKICAgIGV4cGxpY2l0 IHZlY3Rvcihjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAg ICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19hKSB7fQoKICAgIHZlY3RvcihzaXplX3R5cGUg X19uLCBib29sIF9fdmFsdWUsCiAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9f YSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkK ICAgIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3As IF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAwKTsKICAgIH0KCiAgICBleHBsaWNp dCB2ZWN0b3Ioc2l6ZV90eXBlIF9fbikKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oYWxs b2NhdG9yX3R5cGUoKSkKICAgIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxs KF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCAwKTsKICAgIH0KCiAgICB2ZWN0b3Io Y29uc3QgdmVjdG9yJiBfX3gpIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9feC5nZXRfYWxsb2Nh dG9yKCkpIHsKICAgICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgICAgY29weShfX3gu YmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xh c3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19u LCBfSW50ZWdlciBfX3gsIF9fdHJ1ZV90eXBlKSB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsK ICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAw KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9N X2luaXRpYWxpemVfZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0 b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkg ewogICAgICBfTV9pbml0aWFsaXplX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9j YXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh dG9yPgogICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCwKICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3Jf dHlwZSgpKQogICAgICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0lu dGVncmFsOwogICAgICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0lu dGVncmFsKCkpOwogICAgfQoKICAgIH52ZWN0b3IoKSB7IH0KCiAgICB2ZWN0b3ImIG9wZXJhdG9y PShjb25zdCB2ZWN0b3ImIF9feCkgewogICAgICBpZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRo aXM7CiAgICAgIGlmIChfX3guc2l6ZSgpID4gY2FwYWNpdHkoKSkgewogICAgICAgIF9NX2RlYWxs b2NhdGUoKTsKICAgICAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgICB9CiAgICAg IGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7CiAgICAgIF9NX2ZpbmlzaCA9 IGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX194LnNpemUoKSk7CiAgICAgIHJldHVybiAqdGhp czsKICAgIH0KCgoKCgoKICAgIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBf X3gpIHsKICAgICAgaWYgKF9fbiA+IHNpemUoKSkgewogICAgICAgIGZpbGwoX01fc3RhcnQuX01f cCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAgICAgaW5zZXJ0KGVuZCgp LCBfX24gLSBzaXplKCksIF9feCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgZXJhc2Uo YmVnaW4oKSArIF9fbiwgZW5kKCkpOwogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5k X29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGFzc2ln bihzaXplX3QgX19uLCBib29sIF9feCkgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9feCk7IH0KCiAg ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIGFzc2lnbihfSW5wdXRJ dGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7 CiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsK ICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9k aXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgICAg eyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90KSBfX24sIChib29sKSBfX3ZhbCk7IH0KCiAgICB0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICAgIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1 dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgICAgeyBf TV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0 KSk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fz c2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBpdGVyYXRv ciBfX2N1ciA9IGJlZ2luKCk7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19j dXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJzdCkKICAgICAgICAqX19jdXIgPSAqX19maXJz dDsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIGVyYXNlKF9fY3VyLCBlbmQo KSk7CiAgICAgIGVsc2UKICAgICAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CiAg ICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fz c2lnbl9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBz aXplX3R5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19s ZW4gPCBzaXplKCkpCiAgICAgICAgZXJhc2UoY29weShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkp LCBlbmQoKSk7CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBf X2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7CiAgICAgICAgY29weShfX2Zp cnN0LCBfX21pZCwgYmVnaW4oKSk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX21pZCwgX19sYXN0 KTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7CiAgICAg IGlmIChjYXBhY2l0eSgpIDwgX19uKSB7CiAgICAgICAgX0JpdF90eXBlICogX19xID0gX01fYml0 X2FsbG9jKF9fbik7CiAgICAgICAgX01fZmluaXNoID0gY29weShiZWdpbigpLCBlbmQoKSwgaXRl cmF0b3IoX19xLCAwKSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX3N0YXJ0 ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChf X24gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRfYml0OwogICAgICB9CiAgICB9CgogICAgcmVm ZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2luKCk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBm cm9udCgpIGNvbnN0IHsgcmV0dXJuICpiZWdpbigpOyB9CiAgICByZWZlcmVuY2UgYmFjaygpIHsg cmV0dXJuICooZW5kKCkgLSAxKTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7 IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIHZvaWQgcHVzaF9iYWNrKGJvb2wgX194KSB7CiAg ICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkKICAgICAgICAqX01f ZmluaXNoKysgPSBfX3g7CiAgICAgIGVsc2UKICAgICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBf X3gpOwogICAgfQogICAgdm9pZCBzd2FwKHZlY3Rvcjxib29sLCBfQWxsb2M+JiBfX3gpIHsKICAg ICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgICBzdGQ6OnN3YXAoX01f ZmluaXNoLCBfX3guX01fZmluaXNoKTsKICAgICAgc3RkOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdl LCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOwogICAgfQoKCiAgICBzdGF0aWMgdm9pZCBzd2FwKHJl ZmVyZW5jZSBfX3gsIHJlZmVyZW5jZSBfX3kpIHsKICAgICAgYm9vbCBfX3RtcCA9IF9feDsKICAg ICAgX194ID0gX195OwogICAgICBfX3kgPSBfX3RtcDsKICAgIH0KCiAgICBpdGVyYXRvciBpbnNl cnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgYm9vbCBfX3ggPSBib29sKCkpIHsKICAgICAgZGlmZmVy ZW5jZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgICBpZiAoX01fZmluaXNo Ll9NX3AgIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkKICAgICAg ICAqX01fZmluaXNoKysgPSBfX3g7CiAgICAgIGVsc2UKICAgICAgICBfTV9pbnNlcnRfYXV4KF9f cG9zaXRpb24sIF9feCk7CiAgICAgIHJldHVybiBiZWdpbigpICsgX19uOwogICAgfQoKCgogICAg dGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRl cmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgX190cnVlX3R5cGUpIHsKICAgICAgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9f biwgX194KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2 b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgICBfTV9pbnNl cnRfcmFuZ2UoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2Zp cnN0KSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9p ZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJh dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAg ICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVn cmFsKCkpOwogICAgfQoKICAgIHZvaWQgX01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlv biwgc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsKICAgICAgaWYgKF9fbiA9PSAwKSByZXR1cm47 CiAgICAgIGlmIChjYXBhY2l0eSgpIC0gc2l6ZSgpID49IF9fbikgewogICAgICAgIGNvcHlfYmFj a3dhcmQoX19wb3NpdGlvbiwgZW5kKCksIF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24p KTsKICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBkaWZmZXJlbmNlX3R5cGUo X19uKSwgX194KTsKICAgICAgICBfTV9maW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAg ICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4 KHNpemUoKSwgX19uKTsKICAgICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxsb2MoX19s ZW4pOwogICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRl cmF0b3IoX19xLCAwKSk7CiAgICAgICAgZmlsbF9uKF9faSwgX19uLCBfX3gpOwogICAgICAgIF9N X2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSArIGRpZmZlcmVuY2VfdHlwZShf X24pKTsKICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2Ug PSBfX3EgKyAoX19sZW4gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRfYml0OwogICAgICAgIF9N X3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgaW5zZXJ0 KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGJvb2wgX194KSB7CiAgICAgIF9N X2ZpbGxfaW5zZXJ0KF9fcG9zaXRpb24sIF9fbiwgX194KTsKICAgIH0KCiAgICB2b2lkIHBvcF9i YWNrKCkgeyAtLV9NX2ZpbmlzaDsgfQogICAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3Np dGlvbikgewogICAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkpCiAgICAgICAgY29weShf X3Bvc2l0aW9uICsgMSwgZW5kKCksIF9fcG9zaXRpb24pOwogICAgICAgIC0tX01fZmluaXNoOwog ICAgICByZXR1cm4gX19wb3NpdGlvbjsKICAgIH0KICAgIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9y IF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgICBfTV9maW5pc2ggPSBjb3B5KF9fbGFz dCwgZW5kKCksIF9fZmlyc3QpOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KICAgIHZvaWQg cmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBib29sIF9feCA9IGJvb2woKSkgewogICAgICBp ZiAoX19uZXdfc2l6ZSA8IHNpemUoKSkKICAgICAgICBlcmFzZShiZWdpbigpICsgZGlmZmVyZW5j ZV90eXBlKF9fbmV3X3NpemUpLCBlbmQoKSk7CiAgICAgIGVsc2UKICAgICAgICBpbnNlcnQoZW5k KCksIF9fbmV3X3NpemUgLSBzaXplKCksIF9feCk7CiAgICB9CiAgICB2b2lkIGZsaXAoKSB7CiAg ICAgIGZvciAoX0JpdF90eXBlICogX19wID0gX01fc3RhcnQuX01fcDsgX19wICE9IF9NX2VuZF9v Zl9zdG9yYWdlOyArK19fcCkKICAgICAgICAqX19wID0gfipfX3A7CiAgICB9CgogICAgdm9pZCBj bGVhcigpIHsgZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9CiAgfTsKCgp0eXBlZGVmIHZlY3Rvcjxi b29sLCBfX2FsbG9jPiBiaXRfdmVjdG9yOwoKfQojIDczICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL3ZlY3RvciIgMiAzCgoKIyAxICIvaG9tZS9iYW5nZXJ0 aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvdmVjdG9yLnRjYyIgMSAzCiMg NjQgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy92 ZWN0b3IudGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAsIHR5 cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIHZlY3RvcjxfVHAsX0FsbG9jPjo6CiAgICByZXNl cnZlKHNpemVfdHlwZSBfX24pCiAgICB7CiAgICAgIGlmIChjYXBhY2l0eSgpIDwgX19uKQogICAg ICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICAgICAg cG9pbnRlciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbiwgX01fc3RhcnQsIF9NX2Zp bmlzaCk7CiAgICAgICAgX0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01f ZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAg ICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgICBfTV9maW5pc2ggPSBfX3RtcCArIF9fb2xkX3Np emU7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgICAgfQog ICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBl bmFtZSB2ZWN0b3I8X1RwLF9BbGxvYz46Oml0ZXJhdG9yCiAgICB2ZWN0b3I8X1RwLF9BbGxvYz46 OgogICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkK ICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgICBp ZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkp CiAgICAgIHsKICAgICAgICBfQ29uc3RydWN0KF9NX2ZpbmlzaCwgX194KTsKICAgICAgICArK19N X2ZpbmlzaDsKICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0 aW9uLCBfX3gpOwogICAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICAgIH0KCiAgdGVtcGxhdGUg PHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgdmVjdG9yPF9UcCxf QWxsb2M+OjppdGVyYXRvcgogICAgdmVjdG9yPF9UcCxfQWxsb2M+OjoKICAgIGVyYXNlKGl0ZXJh dG9yIF9fcG9zaXRpb24pCiAgICB7CiAgICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkK ICAgICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAgIC0t X01fZmluaXNoOwogICAgICBfRGVzdHJveShfTV9maW5pc2gpOwogICAgICByZXR1cm4gX19wb3Np dGlvbjsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgog ICAgdHlwZW5hbWUgdmVjdG9yPF9UcCxfQWxsb2M+OjppdGVyYXRvcgogICAgdmVjdG9yPF9UcCxf QWxsb2M+OjoKICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAg IHsKICAgICAgaXRlcmF0b3IgX19pKGNvcHkoX19sYXN0LCBlbmQoKSwgX19maXJzdCkpOwogICAg ICBfRGVzdHJveShfX2ksIGVuZCgpKTsKICAgICAgX01fZmluaXNoID0gX01fZmluaXNoIC0gKF9f bGFzdCAtIF9fZmlyc3QpOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCiAgdGVtcGxhdGUg PHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdmVjdG9yPF9UcCxfQWxsb2M+Jgog ICAgdmVjdG9yPF9UcCxfQWxsb2M+OjoKICAgIG9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1RwLF9B bGxvYz4mIF9feCkKICAgIHsKICAgICAgaWYgKCZfX3ggIT0gdGhpcykKICAgICAgewogICAgICAg IGNvbnN0IHNpemVfdHlwZSBfX3hsZW4gPSBfX3guc2l6ZSgpOwogICAgICAgIGlmIChfX3hsZW4g PiBjYXBhY2l0eSgpKQogICAgICAgIHsKICAgICAgICAgIHBvaW50ZXIgX190bXAgPSBfTV9hbGxv Y2F0ZV9hbmRfY29weShfX3hsZW4sIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOwogICAgICAgICAg X0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9N X3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgICAgIF9NX3N0YXJ0 ID0gX190bXA7CiAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX194bGVu OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChzaXplKCkgPj0gX194bGVuKQogICAgICAgIHsK ICAgICAgICAgIGl0ZXJhdG9yIF9faShjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIGJlZ2lu KCkpKTsKICAgICAgICAgIF9EZXN0cm95KF9faSwgZW5kKCkpOwogICAgICAgIH0KICAgICAgICBl bHNlCiAgICAgICAgewogICAgICAgICAgY29weShfX3guYmVnaW4oKSwgX194LmJlZ2luKCkgKyBz aXplKCksIF9NX3N0YXJ0KTsKICAgICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3guYmVnaW4o KSArIHNpemUoKSwgX194LmVuZCgpLCBfTV9maW5pc2gpOwogICAgICAgIH0KICAgICAgICBfTV9m aW5pc2ggPSBfTV9zdGFydCArIF9feGxlbjsKICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg ICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQK ICAgIHZlY3RvcjxfVHAsX0FsbG9jPjo6CiAgICBfTV9maWxsX2Fzc2lnbihzaXplX3QgX19uLCBj b25zdCB2YWx1ZV90eXBlJiBfX3ZhbCkKICAgIHsKICAgICAgaWYgKF9fbiA+IGNhcGFjaXR5KCkp CiAgICAgIHsKICAgICAgICB2ZWN0b3IgX190bXAoX19uLCBfX3ZhbCwgZ2V0X2FsbG9jYXRvcigp KTsKICAgICAgICBfX3RtcC5zd2FwKCp0aGlzKTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX24g PiBzaXplKCkpCiAgICAgIHsKICAgICAgICBmaWxsKGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7CiAg ICAgICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBz aXplKCksIF9fdmFsKTsKICAgICAgfQogICAgICBlbHNlCiAgICAgICAgZXJhc2UoZmlsbF9uKGJl Z2luKCksIF9fbiwgX192YWwpLCBlbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBf VHAsIHR5cGVuYW1lIF9BbGxvYz4gdGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICB2 b2lkCiAgICB2ZWN0b3I8X1RwLF9BbGxvYz46OgogICAgX01fYXNzaWduX2F1eChfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CiAg ICAgIGl0ZXJhdG9yIF9fY3VyKGJlZ2luKCkpOwogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s YXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3QpCiAgICAgICAgKl9fY3Vy ID0gKl9fZmlyc3Q7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICBlcmFzZShf X2N1ciwgZW5kKCkpOwogICAgICBlbHNlCiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX2ZpcnN0LCBf X2xhc3QpOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+ IHRlbXBsYXRlIDx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICB2b2lkCiAgICB2ZWN0b3I8X1Rw LF9BbGxvYz46OgogICAgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAg ICB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7Cgog ICAgICBpZiAoX19sZW4gPiBjYXBhY2l0eSgpKQogICAgICB7CiAgICAgICAgcG9pbnRlciBfX3Rt cChfTV9hbGxvY2F0ZV9hbmRfY29weShfX2xlbiwgX19maXJzdCwgX19sYXN0KSk7CiAgICAgICAg X0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZGVhbGxvY2F0ZShfTV9z dGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgICAgX01fc3RhcnQgPSBf X3RtcDsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsg X19sZW47CiAgICAgIH0KICAgICAgZWxzZSBpZiAoc2l6ZSgpID49IF9fbGVuKQogICAgICB7CiAg ICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKGNvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFy dCkpOwogICAgICAgIF9EZXN0cm95KF9fbmV3X2ZpbmlzaCwgZW5kKCkpOwogICAgICAgIF9NX2Zp bmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAg ICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlk LCBzaXplKCkpOwogICAgICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9NX3N0YXJ0KTsKICAgICAg ICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNo KTsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxs b2M+CiAgICB2b2lkCiAgICB2ZWN0b3I8X1RwLF9BbGxvYz46OgogICAgX01faW5zZXJ0X2F1eChp dGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkKICAgIHsKICAgICAgaWYgKF9NX2Zp bmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkKICAgICAgewogICAgICAgIF9Db25zdHJ1Y3QoX01f ZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICAgICArK19NX2ZpbmlzaDsKICAgICAgICBf VHAgX194X2NvcHkgPSBfX3g7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBpdGVy YXRvcihfTV9maW5pc2gtMiksIGl0ZXJhdG9yKF9NX2ZpbmlzaC0xKSk7CiAgICAgICAgKl9fcG9z aXRpb24gPSBfX3hfY29weTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICBjb25z dCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgICBjb25zdCBzaXplX3R5cGUg X19sZW4gPSBfX29sZF9zaXplICE9IDAgPyAyICogX19vbGRfc2l6ZSA6IDE7CiAgICAgICAgaXRl cmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAgICAgICBpdGVyYXRvciBf X25ld19maW5pc2goX19uZXdfc3RhcnQpOwogICAgICAgIHRyeQogICAgICAgICAgewogICAgICAg ICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQp LCBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19uZXdfc3RhcnQpOwogICAgICAgICAgICBfQ29uc3RydWN0KF9fbmV3X2ZpbmlzaC5iYXNl KCksIF9feCk7CiAgICAgICAgICAgICsrX19uZXdfZmluaXNoOwogICAgICAgICAgICBfX25ld19m aW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNo KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2Zp bmlzaCk7CiAgICAgICAgICB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgewogICAgICAg ICAgICBfRGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpOwogICAgICAgICAgICBfTV9k ZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbik7CiAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgfQogICAgICAgIF9EZXN0cm95KGJlZ2luKCksIGVuZCgpKTsKICAgICAgICBfTV9k ZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAg ICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgICAgICBfTV9maW5pc2ggPSBfX25l d19maW5pc2guYmFzZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQu YmFzZSgpICsgX19sZW47CiAgICAgIH0KICAgIH0KIyAzMDMgIi9ob21lL2JhbmdlcnRoL2Jpbi9n Y2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy92ZWN0b3IudGNjIiAzCiAgdGVtcGxhdGUg PHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgdmVjdG9yPF9UcCxf QWxsb2M+OjoKICAgIF9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlw ZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAgIHsKICAgICAgaWYgKF9fbiAhPSAwKQog ICAgICB7CiAgICAgICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2Zpbmlz aCkgPj0gX19uKSB7CiAgICAgICAgICB2YWx1ZV90eXBlIF9feF9jb3B5ID0gX194OwogICAgICAg ICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAg ICAgICAgICBpdGVyYXRvciBfX29sZF9maW5pc2goX01fZmluaXNoKTsKICAgICAgICAgIGlmIChf X2VsZW1zX2FmdGVyID4gX19uKQogICAgICAgICAgewogICAgICAgICAgICB1bmluaXRpYWxpemVk X2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgICAg IF9NX2ZpbmlzaCArPSBfX247CiAgICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwg X19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgICAgICBmaWxsKF9fcG9z aXRpb24sIF9fcG9zaXRpb24gKyBfX24sIF9feF9jb3B5KTsKICAgICAgICAgIH0KICAgICAgICAg IGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fZmlu aXNoLCBfX24gLSBfX2VsZW1zX2FmdGVyLCBfX3hfY29weSk7CiAgICAgICAgICAgIF9NX2Zpbmlz aCArPSBfX24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgICAgICB1bmluaXRpYWxpemVkX2NvcHko X19wb3NpdGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgICAgICBfTV9maW5p c2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX29sZF9m aW5pc2gsIF9feF9jb3B5KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAg ICAgIHsKICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAg ICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSArIG1heChfX29sZF9zaXpl LCBfX24pOwogICAgICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4p KTsKICAgICAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAgICAg ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlh bGl6ZWRfY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zdGFydCk7CiAgICAgICAgICAgICAgX19uZXdf ZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX19uZXdfZmluaXNoLCBfX24sIF9feCk7CiAg ICAgICAgICAgICAgX19uZXdfZmluaXNoCiAgICAgICAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRf Y29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19uZXdfZmluaXNoKTsKICAgICAgICAgICAgfQogICAg ICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX0Rlc3Ryb3koX19u ZXdfc3RhcnQsX19uZXdfZmluaXNoKTsKICAgICAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3 X3N0YXJ0LmJhc2UoKSxfX2xlbik7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K ICAgICAgICAgIF9EZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICAgICAgX01fZGVh bGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgICAg ICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgICAgICAgIF9NX2ZpbmlzaCA9IF9f bmV3X2ZpbmlzaC5iYXNlKCk7CiAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0 YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+IHRlbXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJ dGVyYXRvcj4KICAgIHZvaWQKICAgIHZlY3RvcjxfVHAsX0FsbG9jPjo6CiAgICBfTV9yYW5nZV9p bnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3Ig X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIGlucHV0 X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf X2ZpcnN0KQogICAgICB7CiAgICAgICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsK ICAgICAgICArK19fcG9zOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAs IHR5cGVuYW1lIF9BbGxvYz4gdGVtcGxhdGUgPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CiAg ICB2b2lkCiAgICB2ZWN0b3I8X1RwLF9BbGxvYz46OgogICAgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJh dG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2Zp cnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBmb3J3YXJk X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgICB7 CiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAg ICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2ZpbmlzaCkgPj0gX19uKQog ICAgICAgIHsKICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVyID0gZW5kKCkg LSBfX3Bvc2l0aW9uOwogICAgICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7 CiAgICAgICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikKICAgICAgICAgIHsKICAgICAgICAg ICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2ZpbmlzaCAtIF9fbiwgX01fZmluaXNoLCBfTV9maW5p c2gpOwogICAgICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgICAgICBjb3B5X2JhY2t3 YXJkKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAg ICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRpb24pOwogICAgICAgICAgfQogICAg ICAgICAgZWxzZQogICAgICAgICAgewogICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlk ID0gX19maXJzdDsKICAgICAgICAgICAgYWR2YW5jZShfX21pZCwgX19lbGVtc19hZnRlcik7CiAg ICAgICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX21pZCwgX19sYXN0LCBfTV9maW5pc2gpOwog ICAgICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0gX19lbGVtc19hZnRlcjsKICAgICAgICAgICAg dW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01fZmluaXNoKTsK ICAgICAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgICAgIGNvcHko X19maXJzdCwgX19taWQsIF9fcG9zaXRpb24pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAg ICBlbHNlCiAgICAgICAgewogICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBz aXplKCk7CiAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4 KF9fb2xkX3NpemUsIF9fbik7CiAgICAgICAgICBpdGVyYXRvciBfX25ld19zdGFydChfTV9hbGxv Y2F0ZShfX2xlbikpOwogICAgICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0 KTsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19uZXdfZmluaXNo ID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQp OwogICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0 LCBfX2xhc3QsIF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgICAgICAgX19uZXdfZmluaXNoID0gdW5p bml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAg ICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgewogICAgICAgICAg ICAgIF9EZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgICAgICAgX01f ZGVhbGxvY2F0ZShfX25ld19zdGFydC5iYXNlKCksIF9fbGVuKTsKICAgICAgICAgICAgICB0aHJv dzsKICAgICAgICAgICAgfQogICAgICAgICAgX0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7 CiAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9N X3N0YXJ0KTsKICAgICAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgICAg ICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgICAgICAgIF9NX2VuZF9vZl9z dG9yYWdlID0gX19uZXdfc3RhcnQuYmFzZSgpICsgX19sZW47CiAgICAgICAgfQogICAgICB9CiAg ICB9Cn0KIyA3NiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu My92ZWN0b3IiIDIgMwojIDI2ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jh c2UvaW5jbHVkZS9iYXNlL3RlbnNvcl9iYXNlLmgiIDIKIyAzNSAiL2hvbWUvYmFuZ2VydGgvcC9k ZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90ZW5zb3JfYmFzZS5oIgp0ZW1wbGF0 ZSA8dHlwZW5hbWUgbnVtYmVyPiBjbGFzcyBWZWN0b3I7CnRlbXBsYXRlIDxpbnQgZGltPiBjbGFz cyBQb2ludDsKCgoKdGVtcGxhdGUgPGludCByYW5rLCBpbnQgZGltPiBjbGFzcyBUZW5zb3I7CnRl bXBsYXRlIDxpbnQgZGltPiBjbGFzcyBUZW5zb3I8MSxkaW0+OwojIDUyICIvaG9tZS9iYW5nZXJ0 aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RlbnNvcl9iYXNlLmgiCnRl bXBsYXRlIDxpbnQgZGltPgpjbGFzcyBUZW5zb3I8MSxkaW0+CnsKICBwdWJsaWM6CiMgNzMgIi9o b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGVuc29y X2Jhc2UuaCIKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZGltZW5zaW9uID0gZGltOwoK CgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJhbmsgPSAxOwoKCgoKCgogICAgdHlw ZWRlZiBkb3VibGUgdmFsdWVfdHlwZTsKIyA5OSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90ZW5zb3JfYmFzZS5oIgogICAgdHlwZWRlZiBkb3Vi bGUgYXJyYXlfdHlwZVsoZGltIT0wKSA/IGRpbSA6IDEwMDAwMDAwMF07CgoKCgoKCiAgICBleHBs aWNpdCBUZW5zb3IgKGNvbnN0IGJvb2wgaW5pdGlhbGl6ZSA9IHRydWUpOwoKCgoKCgogICAgVGVu c29yIChjb25zdCBhcnJheV90eXBlICZpbml0aWFsaXplcik7CgoKCgogICAgVGVuc29yIChjb25z dCBUZW5zb3I8MSxkaW0+ICYpOwojIDEzMCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh bC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90ZW5zb3JfYmFzZS5oIgogICAgZG91YmxlIG9wZXJhdG9y IFtdIChjb25zdCB1bnNpZ25lZCBpbnQgaW5kZXgpIGNvbnN0OwojIDE0MiAiL2hvbWUvYmFuZ2Vy dGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90ZW5zb3JfYmFzZS5oIgog ICAgZG91YmxlICYgb3BlcmF0b3IgW10gKGNvbnN0IHVuc2lnbmVkIGludCBpbmRleCk7CgoKCgog ICAgVGVuc29yPDEsZGltPiAmIG9wZXJhdG9yID0gKGNvbnN0IFRlbnNvcjwxLGRpbT4gJik7CgoK CgogICAgYm9vbCBvcGVyYXRvciA9PSAoY29uc3QgVGVuc29yPDEsZGltPiAmKSBjb25zdDsKCgoK CiAgICBib29sIG9wZXJhdG9yICE9IChjb25zdCBUZW5zb3I8MSxkaW0+ICYpIGNvbnN0OwoKCgoK CgogICAgVGVuc29yPDEsZGltPiAmIG9wZXJhdG9yICs9IChjb25zdCBUZW5zb3I8MSxkaW0+ICYp OwoKCgogICAgVGVuc29yPDEsZGltPiAmIG9wZXJhdG9yIC09IChjb25zdCBUZW5zb3I8MSxkaW0+ ICYpOwoKCgoKCgogICAgVGVuc29yPDEsZGltPiAmIG9wZXJhdG9yICo9IChjb25zdCBkb3VibGUg JmZhY3Rvcik7CgoKCgogICAgVGVuc29yPDEsZGltPiAmIG9wZXJhdG9yIC89IChjb25zdCBkb3Vi bGUgJmZhY3Rvcik7CgoKCgoKICAgIGRvdWJsZSBvcGVyYXRvciAqIChjb25zdCBUZW5zb3I8MSxk aW0+ICYpIGNvbnN0OwoKCgoKCgoKICAgIFRlbnNvcjwxLGRpbT4gb3BlcmF0b3IgKyAoY29uc3Qg VGVuc29yPDEsZGltPiAmKSBjb25zdDsKIyAyMDMgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8y L2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGVuc29yX2Jhc2UuaCIKICAgIFRlbnNvcjwxLGRp bT4gb3BlcmF0b3IgLSAoY29uc3QgVGVuc29yPDEsZGltPiAmKSBjb25zdDsKCgoKCiAgICBUZW5z b3I8MSxkaW0+IG9wZXJhdG9yIC0gKCkgY29uc3Q7CgoKCgogICAgdm9pZCBjbGVhciAoKTsKIyAy MjQgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2Uv dGVuc29yX2Jhc2UuaCIKICAgIHZvaWQgdW5yb2xsIChWZWN0b3I8ZG91YmxlPiAmcmVzdWx0KSBj b25zdDsKCgoKCgoKCiAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlvbiAo KTsKCgoKCiAgICBjbGFzcyBFeGNEaW1Ub29TbWFsbCA6IHB1YmxpYyBFeGNlcHRpb25CYXNlIHsg cHVibGljOiBFeGNEaW1Ub29TbWFsbCAoY29uc3QgaW50IGExKSA6IGFyZzEgKGExKSB7fTsgdmly dHVhbCB+RXhjRGltVG9vU21hbGwgKCkgdGhyb3cgKCkge307IHZpcnR1YWwgdm9pZCBQcmludElu Zm8gKHN0ZDo6b3N0cmVhbSAmb3V0KSBjb25zdCB7IG91dCA8PCAiR2l2ZW4gZGltZW5zaW9ucyBt dXN0IGJlID49IDEsIGJ1dCB3YXMgIiA8PCBhcmcxIDw8IHN0ZDo6ZW5kbDsgfTsgcHJpdmF0ZTog Y29uc3QgaW50IGFyZzE7IH07CgoKCiAgcHJpdmF0ZToKIyAyNTEgIi9ob21lL2JhbmdlcnRoL3Av ZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGVuc29yX2Jhc2UuaCIKICAgIGRv dWJsZSB2YWx1ZXNbKGRpbSE9MCkgPyAoZGltKSA6IDFdOwojIDI2NyAiL2hvbWUvYmFuZ2VydGgv cC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90ZW5zb3JfYmFzZS5oIgogICAg dm9pZCB1bnJvbGxfcmVjdXJzaW9uIChWZWN0b3I8ZG91YmxlPiAmcmVzdWx0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgJnN0YXJ0X2luZGV4KSBjb25zdDsKCiAgcHJp dmF0ZToKIyAyODQgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs dWRlL2Jhc2UvdGVuc29yX2Jhc2UuaCIKICAgIHRlbXBsYXRlPGludCBvdGhlcnJhbmssIGludCBv dGhlcmRpbT4gZnJpZW5kIGNsYXNzIFRlbnNvcjsKCgoKCgoKICAgIGZyaWVuZCBjbGFzcyBQb2lu dDxkaW0+Owp9OwoKCgoKCgp0ZW1wbGF0ZSA8aW50IGRpbT4Kc3RkOjpvc3RyZWFtICYgb3BlcmF0 b3IgPDwgKHN0ZDo6b3N0cmVhbSAmb3V0LCBjb25zdCBUZW5zb3I8MSxkaW0+ICZwKTsKCgoKCgp0 ZW1wbGF0ZSA8aW50IGRpbT4KaW5saW5lClRlbnNvcjwxLGRpbT46OlRlbnNvciAoY29uc3QgYm9v bCBpbml0aWFsaXplKQp7CiAgeyB9OwoKICBpZiAoaW5pdGlhbGl6ZSkKICAgIGZvciAodW5zaWdu ZWQgaW50IGk9MDsgaSE9ZGltOyArK2kpCiAgICAgIHZhbHVlc1tpXSA9IDA7Cn07CgoKCnRlbXBs YXRlIDxpbnQgZGltPgppbmxpbmUKVGVuc29yPDEsZGltPjo6VGVuc29yIChjb25zdCBhcnJheV90 eXBlICZpbml0aWFsaXplcikKewogIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxkaW07ICsraSkK ICAgIHZhbHVlc1tpXSA9IGluaXRpYWxpemVyW2ldOwp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbT4K aW5saW5lClRlbnNvcjwxLGRpbT46OlRlbnNvciAoY29uc3QgVGVuc29yPDEsZGltPiAmcCkKewog IGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxkaW07ICsraSkKICAgIHZhbHVlc1tpXSA9IHAudmFs dWVzW2ldOwp9OwoKCgp0ZW1wbGF0ZSA8PgppbmxpbmUKVGVuc29yPDEsMD46OlRlbnNvciAoY29u c3QgVGVuc29yPDEsMD4gJikKewojIDM1MyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh bC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90ZW5zb3JfYmFzZS5oIgp9OwoKCgp0ZW1wbGF0ZSA8aW50 IGRpbT4KaW5saW5lCmRvdWJsZSBUZW5zb3I8MSxkaW0+OjpvcGVyYXRvciBbXSAoY29uc3QgdW5z aWduZWQgaW50IGluZGV4KSBjb25zdAp7CiAgeyB9OwogIHJldHVybiB2YWx1ZXNbaW5kZXhdOwp9 OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbT4KaW5saW5lCmRvdWJsZSAmIFRlbnNvcjwxLGRpbT46Om9w ZXJhdG9yIFtdIChjb25zdCB1bnNpZ25lZCBpbnQgaW5kZXgpCnsKICB7IH07CiAgcmV0dXJuIHZh bHVlc1tpbmRleF07Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxpbmUKVGVuc29yPDEsZGlt PiAmIFRlbnNvcjwxLGRpbT46Om9wZXJhdG9yID0gKGNvbnN0IFRlbnNvcjwxLGRpbT4gJnApCnsK ICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8ZGltOyArK2kpCiAgICB2YWx1ZXNbaV0gPSBwLnZh bHVlc1tpXTsKICByZXR1cm4gKnRoaXM7Cn07CgoKCnRlbXBsYXRlIDw+CmlubGluZQpUZW5zb3I8 MSwwPiAmIFRlbnNvcjwxLDA+OjpvcGVyYXRvciA9IChjb25zdCBUZW5zb3I8MSwwPiAmKQp7CiMg NDAyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNl L3RlbnNvcl9iYXNlLmgiCiAgcmV0dXJuICp0aGlzOwp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbT4K aW5saW5lCmJvb2wgVGVuc29yPDEsZGltPjo6b3BlcmF0b3IgPT0gKGNvbnN0IFRlbnNvcjwxLGRp bT4gJnApIGNvbnN0CnsKICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8ZGltOyArK2kpCiAgICBp ZiAodmFsdWVzW2ldICE9IHAudmFsdWVzW2ldKSByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7 Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxpbmUKYm9vbCBUZW5zb3I8MSxkaW0+OjpvcGVy YXRvciAhPSAoY29uc3QgVGVuc29yPDEsZGltPiAmcCkgY29uc3QKewogIHJldHVybiAhKCgqdGhp cykgPT0gcCk7Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxpbmUKVGVuc29yPDEsZGltPiAm IFRlbnNvcjwxLGRpbT46Om9wZXJhdG9yICs9IChjb25zdCBUZW5zb3I8MSxkaW0+ICZwKQp7CiAg Zm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPGRpbTsgKytpKQogICAgdmFsdWVzW2ldICs9IHAudmFs dWVzW2ldOwogIHJldHVybiAqdGhpczsKfTsKCgoKdGVtcGxhdGUgPGludCBkaW0+CmlubGluZQpU ZW5zb3I8MSxkaW0+ICYgVGVuc29yPDEsZGltPjo6b3BlcmF0b3IgLT0gKGNvbnN0IFRlbnNvcjwx LGRpbT4gJnApCnsKICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8ZGltOyArK2kpCiAgICB2YWx1 ZXNbaV0gLT0gcC52YWx1ZXNbaV07CiAgcmV0dXJuICp0aGlzOwp9OwoKCgp0ZW1wbGF0ZSA8aW50 IGRpbT4KaW5saW5lClRlbnNvcjwxLGRpbT4gJiBUZW5zb3I8MSxkaW0+OjpvcGVyYXRvciAqPSAo Y29uc3QgZG91YmxlICZzKQp7CiAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPGRpbTsgKytpKQog ICAgdmFsdWVzW2ldICo9IHM7CiAgcmV0dXJuICp0aGlzOwp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRp bT4KaW5saW5lClRlbnNvcjwxLGRpbT4gJiBUZW5zb3I8MSxkaW0+OjpvcGVyYXRvciAvPSAoY29u c3QgZG91YmxlICZzKQp7CiAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPGRpbTsgKytpKQogICAg dmFsdWVzW2ldIC89IHM7CiAgcmV0dXJuICp0aGlzOwp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbT4K aW5saW5lCmRvdWJsZSBUZW5zb3I8MSxkaW0+OjpvcGVyYXRvciAqIChjb25zdCBUZW5zb3I8MSxk aW0+ICZwKSBjb25zdAp7CiAgZG91YmxlIHE9MDsKICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8 ZGltOyArK2kpCiAgICBxICs9IHZhbHVlc1tpXSAqIHAudmFsdWVzW2ldOwogIHJldHVybiBxOwp9 OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbT4KaW5saW5lClRlbnNvcjwxLGRpbT4gVGVuc29yPDEsZGlt Pjo6b3BlcmF0b3IgKyAoY29uc3QgVGVuc29yPDEsZGltPiAmcCkgY29uc3QKewogIHJldHVybiAo VGVuc29yPDEsZGltPigqdGhpcykgKz0gcCk7Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxp bmUKVGVuc29yPDEsZGltPiBUZW5zb3I8MSxkaW0+OjpvcGVyYXRvciAtIChjb25zdCBUZW5zb3I8 MSxkaW0+ICZwKSBjb25zdAp7CiAgcmV0dXJuIChUZW5zb3I8MSxkaW0+KCp0aGlzKSAtPSBwKTsK fTsKCgoKdGVtcGxhdGUgPGludCBkaW0+CmlubGluZQpUZW5zb3I8MSxkaW0+IFRlbnNvcjwxLGRp bT46Om9wZXJhdG9yIC0gKCkgY29uc3QKewogIFRlbnNvcjwxLGRpbT4gcmVzdWx0OwogIGZvciAo dW5zaWduZWQgaW50IGk9MDsgaTxkaW07ICsraSkKICAgIHJlc3VsdC52YWx1ZXNbaV0gPSAtdmFs dWVzW2ldOwogIHJldHVybiByZXN1bHQ7Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxpbmUK dm9pZCBUZW5zb3I8MSxkaW0+OjpjbGVhciAoKQp7CiAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBp PGRpbTsgKytpKQogICAgdmFsdWVzW2ldID0gMDsKfTsKCgoKdGVtcGxhdGUgPGludCBkaW0+Cmlu bGluZQp1bnNpZ25lZCBpbnQKVGVuc29yPDEsZGltPjo6bWVtb3J5X2NvbnN1bXB0aW9uICgpCnsK ICByZXR1cm4gc2l6ZW9mKFRlbnNvcjwxLGRpbT4pOwp9OwoKCgoKCgoKdGVtcGxhdGUgPGludCBk aW0+CmlubGluZQpzdGQ6Om9zdHJlYW0gJiBvcGVyYXRvciA8PCAoc3RkOjpvc3RyZWFtICZvdXQs IGNvbnN0IFRlbnNvcjwxLGRpbT4gJnApCnsKICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8ZGlt LTE7ICsraSkKICAgIG91dCA8PCBwW2ldIDw8ICcgJzsKICBvdXQgPDwgcFtkaW0tMV07CgogIHJl dHVybiBvdXQ7Cn07CiMgNTU1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jh c2UvaW5jbHVkZS9iYXNlL3RlbnNvcl9iYXNlLmgiCmlubGluZQpzdGQ6Om9zdHJlYW0gJiBvcGVy YXRvciA8PCAoc3RkOjpvc3RyZWFtICZvdXQsIGNvbnN0IFRlbnNvcjwxLDE+ICZwKQp7CiAgb3V0 IDw8IHBbMF07CgogIHJldHVybiBvdXQ7Cn07CgoKCgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxp bmUKVGVuc29yPDEsZGltPgpvcGVyYXRvciAqIChjb25zdCBUZW5zb3I8MSxkaW0+ICZ0LAogICAg ICAgICAgICBjb25zdCBkb3VibGUgZmFjdG9yKQp7CiAgVGVuc29yPDEsZGltPiB0dDsKICBmb3Ig KHVuc2lnbmVkIGludCBkPTA7IGQ8ZGltOyArK2QpCiAgICB0dFtkXSA9IHRbZF0gKiBmYWN0b3I7 CiAgcmV0dXJuIHR0Owp9OwoKCgoKCgp0ZW1wbGF0ZSA8aW50IGRpbT4KaW5saW5lClRlbnNvcjwx LGRpbT4Kb3BlcmF0b3IgKiAoY29uc3QgZG91YmxlIGZhY3RvciwKICAgICAgICAgICAgY29uc3Qg VGVuc29yPDEsZGltPiAmdCkKewogIFRlbnNvcjwxLGRpbT4gdHQ7CiAgZm9yICh1bnNpZ25lZCBp bnQgZD0wOyBkPGRpbTsgKytkKQogICAgdHRbZF0gPSB0W2RdICogZmFjdG9yOwogIHJldHVybiB0 dDsKfTsKCgoKCgoKdGVtcGxhdGUgPGludCBkaW0+CmlubGluZQpUZW5zb3I8MSxkaW0+Cm9wZXJh dG9yIC8gKGNvbnN0IFRlbnNvcjwxLGRpbT4gJnQsCiAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBm YWN0b3IpCnsKICBUZW5zb3I8MSxkaW0+IHR0OwogIGZvciAodW5zaWduZWQgaW50IGQ9MDsgZDxk aW07ICsrZCkKICAgIHR0W2RdID0gdFtkXSAvIGZhY3RvcjsKICByZXR1cm4gdHQ7Cn07CiMgMjAg Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcG9p bnQuaCIgMgojIDQ1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5j bHVkZS9iYXNlL3BvaW50LmgiCnRlbXBsYXRlIDxpbnQgZGltPgpjbGFzcyBQb2ludCA6IHB1Ymxp YyBUZW5zb3I8MSxkaW0+CnsKICBwdWJsaWM6CgoKCiAgICBQb2ludCAoKTsKCgoKCiAgICBleHBs aWNpdCBQb2ludCAoY29uc3QgYm9vbCBpbml0aWFsaXplKTsKCgoKCgoKICAgIFBvaW50IChjb25z dCBUZW5zb3I8MSxkaW0+ICYpOwoKCgoKCgoKICAgIGV4cGxpY2l0IFBvaW50IChjb25zdCBkb3Vi bGUgeCk7CgoKCgoKCgogICAgUG9pbnQgKGNvbnN0IGRvdWJsZSB4LCBjb25zdCBkb3VibGUgeSk7 CgoKCgoKCgogICAgUG9pbnQgKGNvbnN0IGRvdWJsZSB4LCBjb25zdCBkb3VibGUgeSwgY29uc3Qg ZG91YmxlIHopOwoKCgoKICAgIGRvdWJsZSBvcGVyYXRvciAoKSAoY29uc3QgdW5zaWduZWQgaW50 IGluZGV4KSBjb25zdDsKCgoKCgogICAgZG91YmxlICYgb3BlcmF0b3IgKCkgKGNvbnN0IHVuc2ln bmVkIGludCBpbmRleCk7CiMgMTExICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJ L2Jhc2UvaW5jbHVkZS9iYXNlL3BvaW50LmgiCiAgICBQb2ludDxkaW0+IG9wZXJhdG9yICsgKGNv bnN0IFRlbnNvcjwxLGRpbT4mKSBjb25zdDsKCgoKCgoKICAgIFBvaW50PGRpbT4gb3BlcmF0b3Ig LSAoY29uc3QgVGVuc29yPDEsZGltPiYpIGNvbnN0OwoKCgoKICAgIFBvaW50PGRpbT4gb3BlcmF0 b3IgLSAoKSBjb25zdDsKIyAxMzMgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkv YmFzZS9pbmNsdWRlL2Jhc2UvcG9pbnQuaCIKICAgIFBvaW50PGRpbT4gb3BlcmF0b3IgKiAoY29u c3QgZG91YmxlKSBjb25zdDsKCgoKCiAgICBkb3VibGUgb3BlcmF0b3IgKiAoY29uc3QgVGVuc29y PDEsZGltPiAmKSBjb25zdDsKCgoKCgoKICAgIFBvaW50PGRpbT4gb3BlcmF0b3IgLyAoY29uc3Qg ZG91YmxlKSBjb25zdDsKCgoKCgoKICAgIGRvdWJsZSBzcXVhcmUgKCkgY29uc3Q7CgoKCgoKICAg IGRvdWJsZSBkaXN0YW5jZSAoY29uc3QgUG9pbnQ8ZGltPiAmcCkgY29uc3Q7CgoKCgoKICAgIGNs YXNzIEV4Y0RpbVRvb1NtYWxsIDogcHVibGljIEV4Y2VwdGlvbkJhc2UgeyBwdWJsaWM6IEV4Y0Rp bVRvb1NtYWxsIChjb25zdCBpbnQgYTEpIDogYXJnMSAoYTEpIHt9OyB2aXJ0dWFsIH5FeGNEaW1U b29TbWFsbCAoKSB0aHJvdyAoKSB7fTsgdmlydHVhbCB2b2lkIFByaW50SW5mbyAoc3RkOjpvc3Ry ZWFtICZvdXQpIGNvbnN0IHsgb3V0IDw8ICJHaXZlbiBkaW1lbnNpb25zIG11c3QgYmUgPj0gMSwg YnV0IHdhcyAiIDw8IGFyZzEgPDwgc3RkOjplbmRsOyB9OyBwcml2YXRlOiBjb25zdCBpbnQgYXJn MTsgfTsKCgoKCgogICAgY2xhc3MgRXhjSW52YWxpZENvbnN0cnVjdG9yQ2FsbGVkIDogcHVibGlj IEV4Y2VwdGlvbkJhc2Uge307Cn07CgoKCgp0ZW1wbGF0ZSA8aW50IGRpbT4KaW5saW5lClBvaW50 PGRpbT46OlBvaW50ICgpCnt9OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbT4KaW5saW5lClBvaW50PGRp bT46OlBvaW50IChjb25zdCBib29sIGluaXRpYWxpemUpIDoKICAgICAgICAgICAgICAgIFRlbnNv cjwxLGRpbT4oaW5pdGlhbGl6ZSkKe307CgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxpbmUKUG9p bnQ8ZGltPjo6UG9pbnQgKGNvbnN0IFRlbnNvcjwxLGRpbT4gJnQpIDoKICAgICAgICAgICAgICAg IFRlbnNvcjwxLGRpbT4odCkKe307CgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxpbmUKUG9pbnQ8 ZGltPjo6UG9pbnQgKGNvbnN0IGRvdWJsZSB4KQp7CiAgeyB9OwogIHRoaXMtPnZhbHVlc1swXSA9 IHg7Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxpbmUKUG9pbnQ8ZGltPjo6UG9pbnQgKGNv bnN0IGRvdWJsZSB4LCBjb25zdCBkb3VibGUgeSkKewogIHsgfTsKICB0aGlzLT52YWx1ZXNbMF0g PSB4OwogIHRoaXMtPnZhbHVlc1sxXSA9IHk7Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxp bmUKUG9pbnQ8ZGltPjo6UG9pbnQgKGNvbnN0IGRvdWJsZSB4LCBjb25zdCBkb3VibGUgeSwgY29u c3QgZG91YmxlIHopCnsKICB7IH07CiAgdGhpcy0+dmFsdWVzWzBdID0geDsKICB0aGlzLT52YWx1 ZXNbMV0gPSB5OwogIHRoaXMtPnZhbHVlc1syXSA9IHo7Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGlt PgppbmxpbmUKZG91YmxlIFBvaW50PGRpbT46Om9wZXJhdG9yICgpIChjb25zdCB1bnNpZ25lZCBp bnQgaW5kZXgpIGNvbnN0CnsKICB7IH07CiAgcmV0dXJuIHRoaXMtPnZhbHVlc1tpbmRleF07Cn07 CgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxpbmUKZG91YmxlICYgUG9pbnQ8ZGltPjo6b3BlcmF0 b3IgKCkgKGNvbnN0IHVuc2lnbmVkIGludCBpbmRleCkKewogIHsgfTsKICByZXR1cm4gdGhpcy0+ dmFsdWVzW2luZGV4XTsKfTsKCgoKdGVtcGxhdGUgPGludCBkaW0+CmlubGluZQpQb2ludDxkaW0+ IFBvaW50PGRpbT46Om9wZXJhdG9yICsgKGNvbnN0IFRlbnNvcjwxLGRpbT4gJnApIGNvbnN0CnsK ICByZXR1cm4gKFBvaW50PGRpbT4oKnRoaXMpICs9IHApOwp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRp bT4KaW5saW5lClBvaW50PGRpbT4gUG9pbnQ8ZGltPjo6b3BlcmF0b3IgLSAoY29uc3QgVGVuc29y PDEsZGltPiAmcCkgY29uc3QKewogIHJldHVybiAoUG9pbnQ8ZGltPigqdGhpcykgLT0gcCk7Cn07 CgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxpbmUKUG9pbnQ8ZGltPiBQb2ludDxkaW0+OjpvcGVy YXRvciAtICgpIGNvbnN0CnsKICBQb2ludDxkaW0+IHJlc3VsdDsKICBmb3IgKHVuc2lnbmVkIGlu dCBpPTA7IGk8ZGltOyArK2kpCiAgICByZXN1bHQudmFsdWVzW2ldID0gLXRoaXMtPnZhbHVlc1tp XTsKICByZXR1cm4gcmVzdWx0Owp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbT4KaW5saW5lClBvaW50 PGRpbT4gUG9pbnQ8ZGltPjo6b3BlcmF0b3IgKiAoY29uc3QgZG91YmxlIGZhY3RvcikgY29uc3QK ewogIHJldHVybiAoUG9pbnQ8ZGltPigqdGhpcykgKj0gZmFjdG9yKTsKfTsKCgoKdGVtcGxhdGUg PGludCBkaW0+CmlubGluZQpkb3VibGUgUG9pbnQ8ZGltPjo6b3BlcmF0b3IgKiAoY29uc3QgVGVu c29yPDEsZGltPiAmcCkgY29uc3QKewoKICByZXR1cm4gVGVuc29yPDEsZGltPjo6b3BlcmF0b3Ig KiAocCk7Cn07CgoKdGVtcGxhdGUgPGludCBkaW0+CmlubGluZQpkb3VibGUgUG9pbnQ8ZGltPjo6 c3F1YXJlICgpIGNvbnN0CnsKICBkb3VibGUgcT0wOwogIGZvciAodW5zaWduZWQgaW50IGk9MDsg aTxkaW07ICsraSkKICAgIHEgKz0gdGhpcy0+dmFsdWVzW2ldICogdGhpcy0+dmFsdWVzW2ldOwog IHJldHVybiBxOwp9OwoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxpbmUKZG91YmxlIFBvaW50PGRp bT46OmRpc3RhbmNlIChjb25zdCBQb2ludDxkaW0+ICZwKSBjb25zdAp7CiAgZG91YmxlIHN1bT0w OwogIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxkaW07ICsraSkKICAgIHsKICAgICAgY29uc3Qg ZG91YmxlIGRpZmY9dGhpcy0+dmFsdWVzW2ldLXAoaSk7CiAgICAgIHN1bSArPSBkaWZmKmRpZmY7 CiAgICB9CgogIHJldHVybiBzdGQ6OnNxcnQoc3VtKTsKfQoKCnRlbXBsYXRlIDxpbnQgZGltPgpp bmxpbmUKUG9pbnQ8ZGltPiBQb2ludDxkaW0+OjpvcGVyYXRvciAvIChjb25zdCBkb3VibGUgZmFj dG9yKSBjb25zdAp7CiAgcmV0dXJuIChQb2ludDxkaW0+KCp0aGlzKSAvPSBmYWN0b3IpOwp9Owoj IDM0MSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFz ZS9wb2ludC5oIgp0ZW1wbGF0ZSA8aW50IGRpbT4KaW5saW5lClBvaW50PGRpbT4gb3BlcmF0b3Ig KiAoY29uc3QgZG91YmxlIGZhY3RvciwgY29uc3QgUG9pbnQ8ZGltPiAmcCkKewogIHJldHVybiBw KmZhY3RvcjsKfTsKCgoKCgoKdGVtcGxhdGUgPGludCBkaW0+CmlubGluZQpzdGQ6Om9zdHJlYW0g JiBvcGVyYXRvciA8PCAoc3RkOjpvc3RyZWFtICZvdXQsIGNvbnN0IFBvaW50PGRpbT4gJnApCnsK ICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8ZGltLTE7ICsraSkKICAgIG91dCA8PCBwW2ldIDw8 ICcgJzsKICBvdXQgPDwgcFtkaW0tMV07CgogIHJldHVybiBvdXQ7Cn07CiMgMzcxICIvaG9tZS9i YW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3BvaW50LmgiCmlu bGluZQpzdGQ6Om9zdHJlYW0gJiBvcGVyYXRvciA8PCAoc3RkOjpvc3RyZWFtICZvdXQsIGNvbnN0 IFBvaW50PDE+ICZwKQp7CiAgb3V0IDw8IHBbMF07CgogIHJldHVybiBvdXQ7Cn07CiMgMTkgIi9o b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9v dXRfYmFzZS5oIiAyCiMgMSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNl L2luY2x1ZGUvYmFzZS90YWJsZS5oIiAxCiMgMTggIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8y L2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKIyAxICIvaG9tZS9iYW5nZXJ0aC9w L2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3N1YnNjcmlwdG9yLmgiIDEKIyAz NSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9z dWJzY3JpcHRvci5oIgpjbGFzcyBTdWJzY3JpcHRvcgp7CiAgcHVibGljOgoKCgogICAgU3Vic2Ny aXB0b3IoKTsKIyA1MCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2lu Y2x1ZGUvYmFzZS9zdWJzY3JpcHRvci5oIgogICAgU3Vic2NyaXB0b3IoY29uc3QgU3Vic2NyaXB0 b3ImKTsKCgoKCgogICAgdmlydHVhbCB+U3Vic2NyaXB0b3IoKTsKIyA2NyAiL2hvbWUvYmFuZ2Vy dGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9zdWJzY3JpcHRvci5oIgog ICAgU3Vic2NyaXB0b3ImIG9wZXJhdG9yID0gKGNvbnN0IFN1YnNjcmlwdG9yJik7CgoKCgogICAg dm9pZCBzdWJzY3JpYmUgKCkgY29uc3Q7CgoKCgogICAgdm9pZCB1bnN1YnNjcmliZSAoKSBjb25z dDsKIyA4OCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUv YmFzZS9zdWJzY3JpcHRvci5oIgogICAgdW5zaWduZWQgaW50IG5fc3Vic2NyaXB0aW9ucyAoKSBj b25zdDsKCgoKCgoKICAgIGNsYXNzIEV4Y0luVXNlIDogcHVibGljIEV4Y2VwdGlvbkJhc2UgeyBw dWJsaWM6IEV4Y0luVXNlIChjb25zdCBpbnQgYTEsIGNvbnN0IGNoYXIgKiBhMikgOiBhcmcxIChh MSksIGFyZzIoYTIpIHt9OyB2aXJ0dWFsIH5FeGNJblVzZSAoKSB0aHJvdyAoKSB7fTsgdmlydHVh bCB2b2lkIFByaW50SW5mbyAoc3RkOjpvc3RyZWFtICZvdXQpIGNvbnN0IHsgb3V0IDw8ICJPYmpl Y3Qgb2YgY2xhc3MgIiA8PCBhcmcyIDw8ICIgaXMgc3RpbGwgdXNlZCBieSAiIDw8IGFyZzEgPDwg IiBvdGhlciBvYmplY3RzLiIgPDwgc3RkOjplbmRsOyB9OyBwcml2YXRlOiBjb25zdCBpbnQgYXJn MTsgY29uc3QgY2hhciAqIGFyZzI7IH07CiMgMTA0ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkv Mi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3N1YnNjcmlwdG9yLmgiCiAgICBjbGFzcyBFeGNO b3RVc2VkIDogcHVibGljIEV4Y2VwdGlvbkJhc2Uge307CgoKICBwcml2YXRlOgojIDEyMyAiL2hv bWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9zdWJzY3Jp cHRvci5oIgogICAgbXV0YWJsZSB1bnNpZ25lZCBpbnQgY291bnRlcjsKIyAxMzYgIi9ob21lL2Jh bmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2Uvc3Vic2NyaXB0b3Iu aCIKICAgIG11dGFibGUgY29uc3Qgc3RkOjp0eXBlX2luZm8gKiBvYmplY3RfaW5mbzsKfTsKIyAx OSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90 YWJsZS5oIiAyCgoKCgoKCnRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVD4gY2xhc3MgVGFibGVC YXNlOwp0ZW1wbGF0ZSA8aW50IE4sIHR5cGVuYW1lIFQ+IGNsYXNzIFRhYmxlOwp0ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4gY2xhc3MgVGFibGU8MSxUPjsKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNz IFRhYmxlPDIsVD47CnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBUYWJsZTwzLFQ+Owp0ZW1w bGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgVGFibGU8NCxUPjsKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ IGNsYXNzIFRhYmxlPDUsVD47CnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBUYWJsZTw2LFQ+ OwojIDQ1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9i YXNlL3RhYmxlLmgiCnRlbXBsYXRlIDxpbnQgTj4KY2xhc3MgVGFibGVJbmRpY2VzQmFzZQp7CiAg cHVibGljOgoKCgoKICAgIHVuc2lnbmVkIGludCBvcGVyYXRvcltdIChjb25zdCB1bnNpZ25lZCBp bnQgaSkgY29uc3Q7CgogIHByb3RlY3RlZDoKCgoKICAgIHVuc2lnbmVkIGluZGljZXNbTl07Cn07 CiMgNzcgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jh c2UvdGFibGUuaCIKdGVtcGxhdGUgPGludCBOPgpjbGFzcyBUYWJsZUluZGljZXMKe307CiMgOTUg Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFi bGUuaCIKdGVtcGxhdGUgPD4KY2xhc3MgVGFibGVJbmRpY2VzPDE+IDogcHVibGljIFRhYmxlSW5k aWNlc0Jhc2U8MT4KewogIHB1YmxpYzoKCgoKCiAgICBUYWJsZUluZGljZXMgKCk7CgoKCgoKICAg IFRhYmxlSW5kaWNlcyAoY29uc3QgdW5zaWduZWQgaW50IGluZGV4MSk7Cn07CiMgMTI1ICIvaG9t ZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgi CnRlbXBsYXRlIDw+CmNsYXNzIFRhYmxlSW5kaWNlczwyPiA6IHB1YmxpYyBUYWJsZUluZGljZXNC YXNlPDI+CnsKICBwdWJsaWM6CgoKCgogICAgVGFibGVJbmRpY2VzICgpOwoKCgoKCiAgICBUYWJs ZUluZGljZXMgKGNvbnN0IHVuc2lnbmVkIGludCBpbmRleDEsCiAgICAgICAgICAgICAgICAgIGNv bnN0IHVuc2lnbmVkIGludCBpbmRleDIpOwp9OwojIDE1NiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFs LklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgp0ZW1wbGF0ZSA8PgpjbGFz cyBUYWJsZUluZGljZXM8Mz4gOiBwdWJsaWMgVGFibGVJbmRpY2VzQmFzZTwzPgp7CiAgcHVibGlj OgoKCgoKICAgIFRhYmxlSW5kaWNlcyAoKTsKCgoKCgogICAgVGFibGVJbmRpY2VzIChjb25zdCB1 bnNpZ25lZCBpbnQgaW5kZXgxLAogICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg aW5kZXgyLAogICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgaW5kZXgzKTsKfTsK IyAxODcgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jh c2UvdGFibGUuaCIKdGVtcGxhdGUgPD4KY2xhc3MgVGFibGVJbmRpY2VzPDQ+IDogcHVibGljIFRh YmxlSW5kaWNlc0Jhc2U8ND4KewogIHB1YmxpYzoKCgoKCiAgICBUYWJsZUluZGljZXMgKCk7CgoK CgoKICAgIFRhYmxlSW5kaWNlcyAoY29uc3QgdW5zaWduZWQgaW50IGluZGV4MSwKICAgICAgICAg ICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGluZGV4MiwKICAgICAgICAgICAgICAgICAgY29u c3QgdW5zaWduZWQgaW50IGluZGV4MywKICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg aW50IGluZGV4NCk7Cn07CiMgMjE5ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJ L2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCnRlbXBsYXRlIDw+CmNsYXNzIFRhYmxlSW5kaWNl czw1PiA6IHB1YmxpYyBUYWJsZUluZGljZXNCYXNlPDU+CnsKICBwdWJsaWM6CgoKCgogICAgVGFi bGVJbmRpY2VzICgpOwoKCgoKCiAgICBUYWJsZUluZGljZXMgKGNvbnN0IHVuc2lnbmVkIGludCBp bmRleDEsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBpbmRleDIsCiAgICAg ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBpbmRleDMsCiAgICAgICAgICAgICAgICAg IGNvbnN0IHVuc2lnbmVkIGludCBpbmRleDQsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln bmVkIGludCBpbmRleDUpOwp9OwojIDI1MiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh bC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgp0ZW1wbGF0ZSA8PgpjbGFzcyBUYWJsZUlu ZGljZXM8Nj4gOiBwdWJsaWMgVGFibGVJbmRpY2VzQmFzZTw2Pgp7CiAgcHVibGljOgoKCgoKICAg IFRhYmxlSW5kaWNlcyAoKTsKCgoKCgogICAgVGFibGVJbmRpY2VzIChjb25zdCB1bnNpZ25lZCBp bnQgaW5kZXgxLAogICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgaW5kZXgyLAog ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgaW5kZXgzLAogICAgICAgICAgICAg ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgaW5kZXg0LAogICAgICAgICAgICAgICAgICBjb25zdCB1 bnNpZ25lZCBpbnQgaW5kZXg1LAogICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg aW5kZXg2KTsKfTsKIyAyOTIgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFz ZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKbmFtZXNwYWNlIFRhYmxlQmFzZUFjY2Vzc29ycwp7CgoK CgoKCgogIHRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVCwgYm9vbCBDb25zdG5lc3M+CiAgY2xh c3MgVHlwZXMKICB7fTsKCgoKCgoKICB0ZW1wbGF0ZSA8aW50IE4sIHR5cGVuYW1lIFQ+IHN0cnVj dCBUeXBlczxOLFQsdHJ1ZT4KICB7CiAgICAgIHR5cGVkZWYgY29uc3QgVCB2YWx1ZV90eXBlOwog ICAgICB0eXBlZGVmIGNvbnN0IFRhYmxlQmFzZTxOLFQ+IFRhYmxlVHlwZTsKICB9OwoKCgoKCgog IHRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVD4gc3RydWN0IFR5cGVzPE4sVCxmYWxzZT4KICB7 CiAgICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIFRhYmxlQmFzZTxOLFQ+ IFRhYmxlVHlwZTsKICB9OwojIDM2NiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5J SS9iYXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgogIHRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUg VCwgYm9vbCBDLCB1bnNpZ25lZCBpbnQgUD4KICBjbGFzcyBBY2Nlc3NvcgogIHsKICAgIHB1Ymxp YzoKCgoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVHlwZXM8TixULEM+Ojp2YWx1ZV90eXBlICog cG9pbnRlcjsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBUeXBlczxOLFQsQz46OlRhYmxlVHlwZSBU YWJsZVR5cGU7CgogICAgcHJpdmF0ZToKIyA0MDAgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8y L2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgICAgQWNjZXNzb3IgKGNvbnN0 IFRhYmxlVHlwZSAmdGFibGUsCiAgICAgICAgICAgICAgICBjb25zdCBwb2ludGVyIGRhdGEpOwoK CgoKCgogICAgICBBY2Nlc3NvciAoKTsKCgoKCgogICAgICBBY2Nlc3NvciAoY29uc3QgQWNjZXNz b3IgJmEpOwoKICAgIHB1YmxpYzoKCgoKCgogICAgICBBY2Nlc3NvcjxOLFQsQyxQLTE+IG9wZXJh dG9yIFtdIChjb25zdCB1bnNpZ25lZCBpbnQgaSkgY29uc3Q7CiMgNDMxICIvaG9tZS9iYW5nZXJ0 aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCiAgICAgIGNs YXNzIEV4Y0luZGV4UmFuZ2UgOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7IHB1YmxpYzogRXhjSW5k ZXhSYW5nZSAoY29uc3QgaW50IGExLCBjb25zdCBpbnQgYTIsIGNvbnN0IGludCBhMykgOiBhcmcx IChhMSksIGFyZzIoYTIpLCBhcmczKGEzKSB7fTsgdmlydHVhbCB+RXhjSW5kZXhSYW5nZSAoKSB0 aHJvdyAoKSB7fTsgdmlydHVhbCB2b2lkIFByaW50SW5mbyAoc3RkOjpvc3RyZWFtICZvdXQpIGNv bnN0IHsgb3V0IDw8ICJUaGUgIiA8PCBOLVArMSA8PCAidGggaW5kZXggaGFzIGEgdmFsdWUgb2Yg IiA8PCBhcmcxIDw8ICIgYnV0IG5lZWRzIHRvIGJlIGluIHRoZSByYW5nZSBbIiA8PCBhcmcyIDw8 ICIsIiA8PCBhcmczIDw8ICJbIiA8PCBzdGQ6OmVuZGw7IH07IHByaXZhdGU6IGNvbnN0IGludCBh cmcxOyBjb25zdCBpbnQgYXJnMjsgY29uc3QgaW50IGFyZzM7IH07CgoKCiAgICBwcml2YXRlOgoj IDQ0NCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFz ZS90YWJsZS5oIgogICAgICBjb25zdCBUYWJsZVR5cGUgJnRhYmxlOwogICAgICBjb25zdCBwb2lu dGVyIGRhdGE7CgoKCgoKCiAgICAgIHRlbXBsYXRlIDxpbnQgTjEsIHR5cGVuYW1lIFQxPiBmcmll bmQgY2xhc3MgVGFibGU7CiAgICAgIHRlbXBsYXRlIDxpbnQgTjEsIHR5cGVuYW1lIFQxLCBib29s IEMxLCB1bnNpZ25lZCBpbnQgUDE+CiAgICAgIGZyaWVuZCBjbGFzcyBBY2Nlc3NvcjsKIyA0NjMg Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFi bGUuaCIKICB9OwojIDQ3NiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNl L2luY2x1ZGUvYmFzZS90YWJsZS5oIgogIHRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVCwgYm9v bCBDPgogIGNsYXNzIEFjY2Vzc29yPE4sVCxDLDE+CiAgewogICAgcHVibGljOgojIDQ4OSAiL2hv bWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90YWJsZS5o IgogICAgICB0eXBlZGVmIHR5cGVuYW1lIFR5cGVzPE4sVCxDPjo6dmFsdWVfdHlwZSB2YWx1ZV90 eXBlOwogICAgICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29u c3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlKiBp dGVyYXRvcjsKICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9pdGVyYXRvcjsK ICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3Qg dmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5 cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCgoKCgogICAgICB0 eXBlZGVmIHR5cGVuYW1lIFR5cGVzPE4sVCxDPjo6VGFibGVUeXBlIFRhYmxlVHlwZTsKCiAgICBw cml2YXRlOgojIDUzMSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2lu Y2x1ZGUvYmFzZS90YWJsZS5oIgogICAgICBBY2Nlc3NvciAoY29uc3QgVGFibGVUeXBlICZ0YWJs ZSwKICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50ZXIgZGF0YSk7CgoKCgoKCiAgICAgIEFjY2Vz c29yICgpOwoKCgoKCgogICAgICBBY2Nlc3NvciAoY29uc3QgQWNjZXNzb3IgJmEpOwoKICAgIHB1 YmxpYzoKCgoKCgogICAgICByZWZlcmVuY2Ugb3BlcmF0b3IgW10gKGNvbnN0IHVuc2lnbmVkIGlu dCkgY29uc3Q7CgoKCgoKCgogICAgICB1bnNpZ25lZCBpbnQgc2l6ZSAoKSBjb25zdDsKCgoKCgoK ICAgICAgaXRlcmF0b3IgYmVnaW4gKCkgY29uc3Q7CgoKCgoKCiAgICAgIGl0ZXJhdG9yIGVuZCAo KSBjb25zdDsKIyA1ODUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9p bmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgICAgY2xhc3MgRXhjSW5kZXhSYW5nZSA6IHB1YmxpYyBF eGNlcHRpb25CYXNlIHsgcHVibGljOiBFeGNJbmRleFJhbmdlIChjb25zdCBpbnQgYTEsIGNvbnN0 IGludCBhMiwgY29uc3QgaW50IGEzKSA6IGFyZzEgKGExKSwgYXJnMihhMiksIGFyZzMoYTMpIHt9 OyB2aXJ0dWFsIH5FeGNJbmRleFJhbmdlICgpIHRocm93ICgpIHt9OyB2aXJ0dWFsIHZvaWQgUHJp bnRJbmZvIChzdGQ6Om9zdHJlYW0gJm91dCkgY29uc3QgeyBvdXQgPDwgIlRoZSAiIDw8IE4gPDwg InRoIGluZGV4IGhhcyBhIHZhbHVlIG9mICIgPDwgYXJnMSA8PCAiIGJ1dCBuZWVkcyB0byBiZSBp biB0aGUgcmFuZ2UgWyIgPDwgYXJnMiA8PCAiLCIgPDwgYXJnMyA8PCAiWyIgPDwgc3RkOjplbmRs OyB9OyBwcml2YXRlOiBjb25zdCBpbnQgYXJnMTsgY29uc3QgaW50IGFyZzI7IGNvbnN0IGludCBh cmczOyB9OwoKCgogICAgcHJpdmF0ZToKIyA1OTggIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8y L2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgICAgY29uc3QgVGFibGVUeXBl ICZ0YWJsZTsKICAgICAgY29uc3QgcG9pbnRlciBkYXRhOwoKCgoKCgogICAgICB0ZW1wbGF0ZSA8 aW50IE4xLCB0eXBlbmFtZSBUMT4gZnJpZW5kIGNsYXNzIFRhYmxlOwogICAgICB0ZW1wbGF0ZSA8 aW50IE4xLCB0eXBlbmFtZSBUMSwgYm9vbCBDMSwgdW5zaWduZWQgaW50IFAxPgogICAgICBmcmll bmQgY2xhc3MgQWNjZXNzb3I7CiMgNjE3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFs LklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCiAgfTsKfTsKIyA2OTcgIi9ob21lL2Jhbmdl cnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKdGVtcGxh dGUgPGludCBOLCB0eXBlbmFtZSBUPgpjbGFzcyBUYWJsZUJhc2UgOiBwdWJsaWMgU3Vic2NyaXB0 b3IKewogIHB1YmxpYzoKCgoKCiAgICBUYWJsZUJhc2UgKCk7CgoKCgoKCgogICAgVGFibGVCYXNl IChjb25zdCBUYWJsZUluZGljZXM8Tj4gJnNpemVzKTsKCgoKCgogICAgVGFibGVCYXNlIChjb25z dCBUYWJsZUJhc2U8TixUPiAmc3JjKTsKCgoKCgoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUMj4K ICAgIFRhYmxlQmFzZSAoY29uc3QgVGFibGVCYXNlPE4sVDI+ICZzcmMpOwoKCgoKICAgIH5UYWJs ZUJhc2UgKCk7CiMgNzQ2ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2Uv aW5jbHVkZS9iYXNlL3RhYmxlLmgiCiAgICBUYWJsZUJhc2U8TixUPiYgb3BlcmF0b3IgPSAoY29u c3QgVGFibGVCYXNlPE4sVD4mIHNyYyk7CiMgNzU4ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkv Mi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCiAgICB0ZW1wbGF0ZTx0eXBlbmFt ZSBUMj4KICAgIFRhYmxlQmFzZTxOLFQ+JiBvcGVyYXRvciA9IChjb25zdCBUYWJsZUJhc2U8TixU Mj4gJnNyYyk7CgoKCgoKCgogICAgdm9pZCBjbGVhciAoKTsKIyA3NzcgIi9ob21lL2JhbmdlcnRo L3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgIHZvaWQg cmVpbml0IChjb25zdCBUYWJsZUluZGljZXM8Tj4gJm5ld19zaXplKTsKCgoKCgogICAgY29uc3Qg VGFibGVJbmRpY2VzPE4+ICYgc2l6ZSAoKSBjb25zdDsKCgoKCgoKCiAgICB1bnNpZ25lZCBpbnQg bl9lbGVtZW50cyAoKSBjb25zdDsKIyA4MDAgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2Rl YWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgIGJvb2wgZW1wdHkgKCkgY29uc3Q7 CiMgODI2ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9i YXNlL3RhYmxlLmgiCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMj4KICAgIHZvaWQgZmlsbCAoY29u c3QgVDIgKmVudHJpZXMpOwoKCgoKCiAgICBUICYgb3BlcmF0b3IoKSAoY29uc3QgVGFibGVJbmRp Y2VzPE4+ICZpbmRpY2VzKTsKIyA4NDggIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwu SUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgIGNvbnN0IFQgJiBvcGVyYXRvcigpIChj b25zdCBUYWJsZUluZGljZXM8Tj4gJmluZGljZXMpIGNvbnN0OwoKCgoKCgogICAgdW5zaWduZWQg aW50IG1lbW9yeV9jb25zdW1wdGlvbiAoKSBjb25zdDsKCiAgcHJvdGVjdGVkOgoKCgoKCgoKICAg IHVuc2lnbmVkIGludCBwb3NpdGlvbiAoY29uc3QgVGFibGVJbmRpY2VzPE4+ICZpbmRpY2VzKSBj b25zdDsKIyA4NzYgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs dWRlL2Jhc2UvdGFibGUuaCIKICAgIFQgJiBlbCAoY29uc3QgVGFibGVJbmRpY2VzPE4+ICZpbmRp Y2VzKTsKIyA4OTYgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs dWRlL2Jhc2UvdGFibGUuaCIKICAgIGNvbnN0IFQgJiBlbCAoY29uc3QgVGFibGVJbmRpY2VzPE4+ ICZpbmRpY2VzKSBjb25zdDsKIyA5MDUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwu SUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgIGNvbnN0IFQqIGRhdGEgKCkgY29uc3Q7 CgogIHByb3RlY3RlZDoKCgoKICAgIFQqIHZhbDsKIyA5MjEgIi9ob21lL2JhbmdlcnRoL3AvZGVh bC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgIHVuc2lnbmVkIGlu dCB2YWxfc2l6ZTsKCgoKCgogICAgVGFibGVJbmRpY2VzPE4+IHRhYmxlX3NpemU7Cn07CiMgOTQ0 ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3Rh YmxlLmgiCnRlbXBsYXRlIDxpbnQgTix0eXBlbmFtZSBUPgpjbGFzcyBUYWJsZSA6IHB1YmxpYyBU YWJsZUJhc2U8TixUPgp7fTsKIyA5NjEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwu SUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNz IFRhYmxlPDEsVD4gOiBwdWJsaWMgVGFibGVCYXNlPDEsVD4KewogIHB1YmxpYzoKCgoKCiAgICBU YWJsZSAoKTsKCgoKCgoKICAgIFRhYmxlIChjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZSk7CiMgOTg1 ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3Rh YmxlLmgiCiAgICBjb25zdCBUICYKICAgIG9wZXJhdG9yIFtdIChjb25zdCB1bnNpZ25lZCBpbnQg aSkgY29uc3Q7CiMgOTk1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2Uv aW5jbHVkZS9iYXNlL3RhYmxlLmgiCiAgICBUICYKICAgIG9wZXJhdG9yIFtdIChjb25zdCB1bnNp Z25lZCBpbnQgaSk7CiMgMTAwNSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9i YXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgogICAgY29uc3QgVCAmCiAgICBvcGVyYXRvciAoKSAo Y29uc3QgdW5zaWduZWQgaW50IGkpIGNvbnN0OwojIDEwMTUgIi9ob21lL2JhbmdlcnRoL3AvZGVh bC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgIFQgJgogICAgb3Bl cmF0b3IgKCkgKGNvbnN0IHVuc2lnbmVkIGludCBpKTsKfTsKIyAxMDMzICIvaG9tZS9iYW5nZXJ0 aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCnRlbXBsYXRl IDx0eXBlbmFtZSBUPgpjbGFzcyBUYWJsZTwyLFQ+IDogcHVibGljIFRhYmxlQmFzZTwyLFQ+CnsK ICBwdWJsaWM6CgoKCgogICAgVGFibGUgKCk7CgoKCgoKCiAgICBUYWJsZSAoY29uc3QgdW5zaWdu ZWQgaW50IHNpemUxLAogICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplMik7CiMgMTA2 MSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90 YWJsZS5oIgogICAgdm9pZCByZWluaXQgKGNvbnN0IHVuc2lnbmVkIGludCBzaXplMSwKICAgICAg ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZTIpOwojIDEwNzQgIi9ob21lL2Jhbmdl cnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgIFRh YmxlQmFzZUFjY2Vzc29yczo6QWNjZXNzb3I8MixULHRydWUsMT4KICAgIG9wZXJhdG9yIFtdIChj b25zdCB1bnNpZ25lZCBpbnQgaSkgY29uc3Q7CiMgMTA4NyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFs LklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgogICAgVGFibGVCYXNlQWNj ZXNzb3JzOjpBY2Nlc3NvcjwyLFQsZmFsc2UsMT4KICAgIG9wZXJhdG9yIFtdIChjb25zdCB1bnNp Z25lZCBpbnQgaSk7CiMgMTA5OSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9i YXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgogICAgY29uc3QgVCAmIG9wZXJhdG9yICgpIChjb25z dCB1bnNpZ25lZCBpbnQgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu ZWQgaW50IGopIGNvbnN0OwojIDExMTIgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwu SUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgIFQgJiBvcGVyYXRvciAoKSAoY29uc3Qg dW5zaWduZWQgaW50IGksCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBq KTsKIyAxMTIyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVk ZS9iYXNlL3RhYmxlLmgiCiAgICB1bnNpZ25lZCBpbnQgbl9yb3dzICgpIGNvbnN0OwoKCgoKCgoK ICAgIHVuc2lnbmVkIGludCBuX2NvbHMgKCkgY29uc3Q7CgogIHByb3RlY3RlZDoKIyAxMTQ4ICIv aG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxl LmgiCiAgICBUICYgZWwgKGNvbnN0IHVuc2lnbmVkIGludCBpLAogICAgICAgICAgICBjb25zdCB1 bnNpZ25lZCBpbnQgaik7CiMgMTE3NSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5J SS9iYXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgogICAgY29uc3QgVCAmIGVsIChjb25zdCB1bnNp Z25lZCBpbnQgaSwKICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGopIGNvbnN0 Owp9OwojIDExOTAgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs dWRlL2Jhc2UvdGFibGUuaCIKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIFRhYmxlPDMsVD4g OiBwdWJsaWMgVGFibGVCYXNlPDMsVD4KewogIHB1YmxpYzoKCgoKCiAgICBUYWJsZSAoKTsKCgoK CgoKICAgIFRhYmxlIChjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZTEsCiAgICAgICAgICAgY29uc3Qg dW5zaWduZWQgaW50IHNpemUyLAogICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplMyk7 CiMgMTIyMCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUv YmFzZS90YWJsZS5oIgogICAgVGFibGVCYXNlQWNjZXNzb3JzOjpBY2Nlc3NvcjwzLFQsdHJ1ZSwy PgogICAgb3BlcmF0b3IgW10gKGNvbnN0IHVuc2lnbmVkIGludCBpKSBjb25zdDsKIyAxMjM0ICIv aG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxl LmgiCiAgICBUYWJsZUJhc2VBY2Nlc3NvcnM6OkFjY2Vzc29yPDMsVCxmYWxzZSwyPgogICAgb3Bl cmF0b3IgW10gKGNvbnN0IHVuc2lnbmVkIGludCBpKTsKIyAxMjQ2ICIvaG9tZS9iYW5nZXJ0aC9w L2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCiAgICBjb25zdCBU ICYgb3BlcmF0b3IgKCkgKGNvbnN0IHVuc2lnbmVkIGludCBpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgaW50IGspIGNvbnN0OwojIDEyNjAgIi9ob21lL2JhbmdlcnRoL3AvZGVh bC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgIFQgJiBvcGVyYXRv ciAoKSAoY29uc3QgdW5zaWduZWQgaW50IGksCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGludCBqLAogICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgayk7 Cn07CiMgMTI3NiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1 ZGUvYmFzZS90YWJsZS5oIgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KY2xhc3MgVGFibGU8NCxUPiA6 IHB1YmxpYyBUYWJsZUJhc2U8NCxUPgp7CiAgcHVibGljOgoKCgoKICAgIFRhYmxlICgpOwoKCgoK CgogICAgVGFibGUgKGNvbnN0IHVuc2lnbmVkIGludCBzaXplMSwKICAgICAgICAgICBjb25zdCB1 bnNpZ25lZCBpbnQgc2l6ZTIsCiAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNpemUzLAog ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplNCk7CiMgMTMwNyAiL2hvbWUvYmFuZ2Vy dGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgogICAgVGFi bGVCYXNlQWNjZXNzb3JzOjpBY2Nlc3Nvcjw0LFQsdHJ1ZSwzPgogICAgb3BlcmF0b3IgW10gKGNv bnN0IHVuc2lnbmVkIGludCBpKSBjb25zdDsKIyAxMzIxICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwu SUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCiAgICBUYWJsZUJhc2VBY2Nl c3NvcnM6OkFjY2Vzc29yPDQsVCxmYWxzZSwzPgogICAgb3BlcmF0b3IgW10gKGNvbnN0IHVuc2ln bmVkIGludCBpKTsKIyAxMzMzICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jh c2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCiAgICBjb25zdCBUICYgb3BlcmF0b3IgKCkgKGNvbnN0 IHVuc2lnbmVkIGludCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBpbnQgaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGss CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBsKSBjb25zdDsK IyAxMzQ4ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9i YXNlL3RhYmxlLmgiCiAgICBUICYgb3BlcmF0b3IgKCkgKGNvbnN0IHVuc2lnbmVkIGludCBpLAog ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgaiwKICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgaW50IGssCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGludCBsKTsKfTsKIyAxMzY1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFs LklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpjbGFz cyBUYWJsZTw1LFQ+IDogcHVibGljIFRhYmxlQmFzZTw1LFQ+CnsKICBwdWJsaWM6CgoKCgogICAg VGFibGUgKCk7CgoKCgoKCiAgICBUYWJsZSAoY29uc3QgdW5zaWduZWQgaW50IHNpemUxLAogICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplMiwKICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBpbnQgc2l6ZTMsCiAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNpemU0LAogICAgICAg ICAgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplNSk7CiMgMTM5NyAiL2hvbWUvYmFuZ2VydGgvcC9k ZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgogICAgVGFibGVCYXNl QWNjZXNzb3JzOjpBY2Nlc3Nvcjw1LFQsdHJ1ZSw0PgogICAgb3BlcmF0b3IgW10gKGNvbnN0IHVu c2lnbmVkIGludCBpKSBjb25zdDsKIyAxNDExICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9k ZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCiAgICBUYWJsZUJhc2VBY2Nlc3NvcnM6 OkFjY2Vzc29yPDUsVCxmYWxzZSw0PgogICAgb3BlcmF0b3IgW10gKGNvbnN0IHVuc2lnbmVkIGlu dCBpKTsKIyAxNDIzICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5j bHVkZS9iYXNlL3RhYmxlLmgiCiAgICBjb25zdCBUICYgb3BlcmF0b3IgKCkgKGNvbnN0IHVuc2ln bmVkIGludCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg aiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGssCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBsLAogICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbSkgY29uc3Q7CiMgMTQzOSAiL2hvbWUv YmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgog ICAgVCAmIG9wZXJhdG9yICgpIChjb25zdCB1bnNpZ25lZCBpbnQgaSwKICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgaW50IGosCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGludCBrLAogICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbCwK ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG0pOwp9OwojIDE0NTcgIi9o b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUu aCIKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIFRhYmxlPDYsVD4gOiBwdWJsaWMgVGFibGVC YXNlPDYsVD4KewogIHB1YmxpYzoKCgoKCiAgICBUYWJsZSAoKTsKCgoKCgoKICAgIFRhYmxlIChj b25zdCB1bnNpZ25lZCBpbnQgc2l6ZTEsCiAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNp emUyLAogICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplMywKICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBpbnQgc2l6ZTQsCiAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNpemU1 LAogICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplNik7CiMgMTQ5MCAiL2hvbWUvYmFu Z2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgogICAg VGFibGVCYXNlQWNjZXNzb3JzOjpBY2Nlc3Nvcjw2LFQsdHJ1ZSw1PgogICAgb3BlcmF0b3IgW10g KGNvbnN0IHVuc2lnbmVkIGludCBpKSBjb25zdDsKIyAxNTA0ICIvaG9tZS9iYW5nZXJ0aC9wL2Rl YWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCiAgICBUYWJsZUJhc2VB Y2Nlc3NvcnM6OkFjY2Vzc29yPDYsVCxmYWxzZSw1PgogICAgb3BlcmF0b3IgW10gKGNvbnN0IHVu c2lnbmVkIGludCBpKTsKIyAxNTE2ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJ L2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCiAgICBjb25zdCBUICYgb3BlcmF0b3IgKCkgKGNv bnN0IHVuc2lnbmVkIGludCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp Z25lZCBpbnQgaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50 IGssCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBsLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG4pIGNvbnN0OwojIDE1MzMgIi9ob21l L2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIK ICAgIFQgJiBvcGVyYXRvciAoKSAoY29uc3QgdW5zaWduZWQgaW50IGksCiAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBqLAogICAgICAgICAgICAgICAgICAgICBjb25zdCB1 bnNpZ25lZCBpbnQgaywKICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGws CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBtLAogICAgICAgICAgICAg ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbik7Cn07CiMgMTU0OCAiL2hvbWUvYmFuZ2VydGgv cC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgp0ZW1wbGF0ZSA8 aW50IE4+CmlubGluZQp1bnNpZ25lZCBpbnQKVGFibGVJbmRpY2VzQmFzZTxOPjo6b3BlcmF0b3Ig W10gKGNvbnN0IHVuc2lnbmVkIGludCBpKSBjb25zdAp7CiAgeyB9OwogIHJldHVybiBpbmRpY2Vz W2ldOwp9OwoKCgppbmxpbmUKVGFibGVJbmRpY2VzPDE+OjpUYWJsZUluZGljZXMgKCkKewogIHRo aXMtPmluZGljZXNbMF0gPSAwOwp9OwoKCgppbmxpbmUKVGFibGVJbmRpY2VzPDE+OjpUYWJsZUlu ZGljZXMgKGNvbnN0IHVuc2lnbmVkIGludCBpbmRleDEpCnsKICB0aGlzLT5pbmRpY2VzWzBdID0g aW5kZXgxOwp9OwoKCgppbmxpbmUKVGFibGVJbmRpY2VzPDI+OjpUYWJsZUluZGljZXMgKCkKewog IHRoaXMtPmluZGljZXNbMF0gPSB0aGlzLT5pbmRpY2VzWzFdID0gMDsKfTsKCgoKaW5saW5lClRh YmxlSW5kaWNlczwyPjo6VGFibGVJbmRpY2VzIChjb25zdCB1bnNpZ25lZCBpbnQgaW5kZXgxLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGluZGV4MikK ewogIHRoaXMtPmluZGljZXNbMF0gPSBpbmRleDE7CiAgdGhpcy0+aW5kaWNlc1sxXSA9IGluZGV4 MjsKfTsKCgoKaW5saW5lClRhYmxlSW5kaWNlczwzPjo6VGFibGVJbmRpY2VzICgpCnsKICB0aGlz LT5pbmRpY2VzWzBdID0gdGhpcy0+aW5kaWNlc1sxXSA9IHRoaXMtPmluZGljZXNbMl0gPSAwOwp9 OwoKCgppbmxpbmUKVGFibGVJbmRpY2VzPDM+OjpUYWJsZUluZGljZXMgKGNvbnN0IHVuc2lnbmVk IGludCBpbmRleDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBpbnQgaW5kZXgyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu ZWQgaW50IGluZGV4MykKewogIHRoaXMtPmluZGljZXNbMF0gPSBpbmRleDE7CiAgdGhpcy0+aW5k aWNlc1sxXSA9IGluZGV4MjsKICB0aGlzLT5pbmRpY2VzWzJdID0gaW5kZXgzOwp9OwoKCmlubGlu ZQpUYWJsZUluZGljZXM8ND46OlRhYmxlSW5kaWNlcyAoKQp7CiAgdGhpcy0+aW5kaWNlc1swXSA9 IHRoaXMtPmluZGljZXNbMV0gPSB0aGlzLT5pbmRpY2VzWzJdID0gdGhpcy0+aW5kaWNlc1szXSA9 IDA7Cn07CgoKCmlubGluZQpUYWJsZUluZGljZXM8ND46OlRhYmxlSW5kaWNlcyAoY29uc3QgdW5z aWduZWQgaW50IGluZGV4MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGludCBpbmRleDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1 bnNpZ25lZCBpbnQgaW5kZXgzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg dW5zaWduZWQgaW50IGluZGV4NCkKewogIHRoaXMtPmluZGljZXNbMF0gPSBpbmRleDE7CiAgdGhp cy0+aW5kaWNlc1sxXSA9IGluZGV4MjsKICB0aGlzLT5pbmRpY2VzWzJdID0gaW5kZXgzOwogIHRo aXMtPmluZGljZXNbM10gPSBpbmRleDQ7Cn07CgoKCmlubGluZQpUYWJsZUluZGljZXM8NT46OlRh YmxlSW5kaWNlcyAoKQp7CiAgdGhpcy0+aW5kaWNlc1swXSA9IHRoaXMtPmluZGljZXNbMV0gPSB0 aGlzLT5pbmRpY2VzWzJdID0gdGhpcy0+aW5kaWNlc1szXSA9IHRoaXMtPmluZGljZXNbNF0gPSAw Owp9OwoKCgppbmxpbmUKVGFibGVJbmRpY2VzPDU+OjpUYWJsZUluZGljZXMgKGNvbnN0IHVuc2ln bmVkIGludCBpbmRleDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp Z25lZCBpbnQgaW5kZXgyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5z aWduZWQgaW50IGluZGV4MywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGludCBpbmRleDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1 bnNpZ25lZCBpbnQgaW5kZXg1KQp7CiAgdGhpcy0+aW5kaWNlc1swXSA9IGluZGV4MTsKICB0aGlz LT5pbmRpY2VzWzFdID0gaW5kZXgyOwogIHRoaXMtPmluZGljZXNbMl0gPSBpbmRleDM7CiAgdGhp cy0+aW5kaWNlc1szXSA9IGluZGV4NDsKICB0aGlzLT5pbmRpY2VzWzRdID0gaW5kZXg1Owp9OwoK CgppbmxpbmUKVGFibGVJbmRpY2VzPDY+OjpUYWJsZUluZGljZXMgKCkKewogIHRoaXMtPmluZGlj ZXNbMF0gPSB0aGlzLT5pbmRpY2VzWzFdID0gdGhpcy0+aW5kaWNlc1syXQogICAgICAgICAgICAg ICAgICAgPSB0aGlzLT5pbmRpY2VzWzNdID0gdGhpcy0+aW5kaWNlc1s0XSA9IDA7Cn07CgoKCmlu bGluZQpUYWJsZUluZGljZXM8Nj46OlRhYmxlSW5kaWNlcyAoY29uc3QgdW5zaWduZWQgaW50IGlu ZGV4MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBp bmRleDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg aW5kZXgzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50 IGluZGV4NCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu dCBpbmRleDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBp bnQgaW5kZXg2KQp7CiAgdGhpcy0+aW5kaWNlc1swXSA9IGluZGV4MTsKICB0aGlzLT5pbmRpY2Vz WzFdID0gaW5kZXgyOwogIHRoaXMtPmluZGljZXNbMl0gPSBpbmRleDM7CiAgdGhpcy0+aW5kaWNl c1szXSA9IGluZGV4NDsKICB0aGlzLT5pbmRpY2VzWzRdID0gaW5kZXg1OwogIHRoaXMtPmluZGlj ZXNbNV0gPSBpbmRleDY7Cn07CgoKCnRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVD4KVGFibGVC YXNlPE4sVD46OlRhYmxlQmFzZSAoKQogICAgICAgICAgICAgICAgOgogICAgICAgICAgICAgICAg dmFsICgwKSwKICAgICAgICAgICAgICAgIHZhbF9zaXplICgwKQp7fTsKCgoKdGVtcGxhdGUgPGlu dCBOLCB0eXBlbmFtZSBUPgpUYWJsZUJhc2U8TixUPjo6VGFibGVCYXNlIChjb25zdCBUYWJsZUlu ZGljZXM8Tj4gJnNpemVzKQogICAgICAgICAgICAgICAgOgogICAgICAgICAgICAgICAgdmFsICgw KSwKICAgICAgICAgICAgICAgIHZhbF9zaXplICgwKQp7CiAgcmVpbml0IChzaXplcyk7Cn07CgoK CnRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVD4KVGFibGVCYXNlPE4sVD46OlRhYmxlQmFzZSAo Y29uc3QgVGFibGVCYXNlPE4sVD4gJnNyYykKICAgICAgICAgICAgICAgIDoKICAgICAgICAgICAg ICAgIFN1YnNjcmlwdG9yICgpLAogICAgICAgICAgICAgICAgdmFsICgwKSwKICAgICAgICAgICAg ICAgIHZhbF9zaXplICgwKQp7CiAgcmVpbml0IChzcmMudGFibGVfc2l6ZSk7CiAgZmlsbCAoc3Jj LmRhdGEoKSk7Cn07CgoKCnRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVD4KdGVtcGxhdGUgPHR5 cGVuYW1lIFQyPgpUYWJsZUJhc2U8TixUPjo6VGFibGVCYXNlIChjb25zdCBUYWJsZUJhc2U8TixU Mj4gJnNyYykKICAgICAgICAgICAgICAgIDoKICAgICAgICAgICAgICAgIHZhbCAoMCksCiAgICAg ICAgICAgICAgICB2YWxfc2l6ZSAoMCkKewogIHJlaW5pdCAoc3JjLnRhYmxlX3NpemUpOwogIGZp bGwgKHNyYy5kYXRhKCkpOwp9OwoKCgpuYW1lc3BhY2UgVGFibGVCYXNlQWNjZXNzb3JzCnsKICB0 ZW1wbGF0ZSA8aW50IE4sIHR5cGVuYW1lIFQsIGJvb2wgQywgdW5zaWduZWQgaW50IFA+CiAgaW5s aW5lCiAgQWNjZXNzb3I8TixULEMsUD46OkFjY2Vzc29yIChjb25zdCBUYWJsZVR5cGUgJnRhYmxl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9pbnRlciBkYXRhKQogICAg ICAgICAgICAgICAgICA6CiAgICAgICAgICAgICAgICAgIHRhYmxlICh0YWJsZSksCiAgICAgICAg ICAgICAgICAgIGRhdGEgKGRhdGEpCiAge307CgoKCiAgdGVtcGxhdGUgPGludCBOLCB0eXBlbmFt ZSBULCBib29sIEMsIHVuc2lnbmVkIGludCBQPgogIGlubGluZQogIEFjY2Vzc29yPE4sVCxDLFA+ OjpBY2Nlc3NvciAoY29uc3QgQWNjZXNzb3IgJikKICAgICAgICAgICAgICAgICAgOgogICAgICAg ICAgICAgICAgICB0YWJsZSAoKnN0YXRpY19jYXN0PGNvbnN0IFRhYmxlVHlwZSo+KDApKSwKICAg ICAgICAgICAgICAgICAgZGF0YSAoMCkKICB7CgoKCiAgICB7IH07CiAgfTsKCgoKICB0ZW1wbGF0 ZSA8aW50IE4sIHR5cGVuYW1lIFQsIGJvb2wgQywgdW5zaWduZWQgaW50IFA+CiAgaW5saW5lCiAg QWNjZXNzb3I8TixULEMsUD46OkFjY2Vzc29yICgpCiAgICAgICAgICAgICAgICAgIDoKICAgICAg ICAgICAgICAgICAgdGFibGUgKCpzdGF0aWNfY2FzdDxjb25zdCBUYWJsZVR5cGUqPigwKSksCiAg ICAgICAgICAgICAgICAgIGRhdGEgKDApCiAgewoKCgogICAgeyB9OwogIH07CgoKCiAgdGVtcGxh dGUgPGludCBOLCB0eXBlbmFtZSBULCBib29sIEMsIHVuc2lnbmVkIGludCBQPgogIGlubGluZQog IEFjY2Vzc29yPE4sVCxDLFAtMT4KICBBY2Nlc3NvcjxOLFQsQyxQPjo6b3BlcmF0b3IgW10gKGNv bnN0IHVuc2lnbmVkIGludCBpKSBjb25zdAogIHsKICAgIHsgfTsKCgoKCgogICAgaWYgKGk9PTAp CiAgICAgIHJldHVybiBBY2Nlc3NvcjxOLFQsQyxQLTE+ICh0YWJsZSwgZGF0YSk7CiAgICBlbHNl CiAgICAgIHsKCgoKICAgICAgICB1bnNpZ25lZCBpbnQgc3Vib2JqZWN0X3NpemUgPSB0YWJsZS5z aXplKClbTi0xXTsKICAgICAgICBmb3IgKGludCBwPVAtMTsgcD4xOyAtLXApCiAgICAgICAgICBz dWJvYmplY3Rfc2l6ZSAqPSB0YWJsZS5zaXplKClbTi1wXTsKICAgICAgICBjb25zdCBwb2ludGVy IG5ld19kYXRhID0gZGF0YSArIGkqc3Vib2JqZWN0X3NpemU7CiAgICAgICAgcmV0dXJuIEFjY2Vz c29yPE4sVCxDLFAtMT4gKHRhYmxlLCBuZXdfZGF0YSk7CiAgICAgIH07CiAgfTsKCgoKICB0ZW1w bGF0ZSA8aW50IE4sIHR5cGVuYW1lIFQsIGJvb2wgQz4KICBpbmxpbmUKICBBY2Nlc3NvcjxOLFQs QywxPjo6QWNjZXNzb3IgKGNvbnN0IFRhYmxlVHlwZSAmdGFibGUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBwb2ludGVyIGRhdGEpCiAgICAgICAgICAgICAgICAgIDoKICAg ICAgICAgICAgICAgICAgdGFibGUgKHRhYmxlKSwKICAgICAgICAgICAgICAgICAgZGF0YSAoZGF0 YSkKICB7fTsKCgoKICB0ZW1wbGF0ZSA8aW50IE4sIHR5cGVuYW1lIFQsIGJvb2wgQz4KICBpbmxp bmUKICBBY2Nlc3NvcjxOLFQsQywxPjo6QWNjZXNzb3IgKCkKICAgICAgICAgICAgICAgICAgOgog ICAgICAgICAgICAgICAgICB0YWJsZSAoKnN0YXRpY19jYXN0PGNvbnN0IFRhYmxlVHlwZSo+KDAp KSwKICAgICAgICAgICAgICAgICAgZGF0YSAoMCkKICB7CgoKCiAgICB7IH07CiAgfTsKCgoKICB0 ZW1wbGF0ZSA8aW50IE4sIHR5cGVuYW1lIFQsIGJvb2wgQz4KICBpbmxpbmUKICBBY2Nlc3NvcjxO LFQsQywxPjo6QWNjZXNzb3IgKGNvbnN0IEFjY2Vzc29yICYpCiAgICAgICAgICAgICAgICAgIDoK ICAgICAgICAgICAgICAgICAgdGFibGUgKCpzdGF0aWNfY2FzdDxjb25zdCBUYWJsZVR5cGUqPigw KSksCiAgICAgICAgICAgICAgICAgIGRhdGEgKDApCiAgewoKCgogICAgeyB9OwogIH07CgoKCiAg dGVtcGxhdGUgPGludCBOLCB0eXBlbmFtZSBULCBib29sIEM+CiAgaW5saW5lCiAgdHlwZW5hbWUg QWNjZXNzb3I8TixULEMsMT46OnJlZmVyZW5jZQogIEFjY2Vzc29yPE4sVCxDLDE+OjpvcGVyYXRv ciBbXSAoY29uc3QgdW5zaWduZWQgaW50IGkpIGNvbnN0CiAgewogICAgeyB9OwoKICAgIHJldHVy biBkYXRhW2ldOwogIH07CgoKCiAgdGVtcGxhdGUgPGludCBOLCB0eXBlbmFtZSBULCBib29sIEM+ CiAgaW5saW5lCiAgdW5zaWduZWQgaW50CiAgQWNjZXNzb3I8TixULEMsMT46OnNpemUgKCkgY29u c3QKICB7CiAgICByZXR1cm4gdGFibGUuc2l6ZSgpW04tMV07CiAgfTsKCgoKICB0ZW1wbGF0ZSA8 aW50IE4sIHR5cGVuYW1lIFQsIGJvb2wgQz4KICBpbmxpbmUKICB0eXBlbmFtZSBBY2Nlc3NvcjxO LFQsQywxPjo6aXRlcmF0b3IKICBBY2Nlc3NvcjxOLFQsQywxPjo6YmVnaW4gKCkgY29uc3QKICB7 CiAgICByZXR1cm4gZGF0YTsKICB9OwoKCgogIHRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVCwg Ym9vbCBDPgogIGlubGluZQogIHR5cGVuYW1lIEFjY2Vzc29yPE4sVCxDLDE+OjppdGVyYXRvcgog IEFjY2Vzc29yPE4sVCxDLDE+OjplbmQgKCkgY29uc3QKICB7CiAgICByZXR1cm4gZGF0YSt0YWJs ZS5zaXplKClbTi0xXTsKICB9Owp9OwoKCgp0ZW1wbGF0ZSA8aW50IE4sIHR5cGVuYW1lIFQ+Cmlu bGluZQpUYWJsZUJhc2U8TixUPjo6flRhYmxlQmFzZSAoKQp7CiAgaWYgKHZhbCAhPSAwKQogICAg ZGVsZXRlW10gdmFsOwp9OwoKCgp0ZW1wbGF0ZSA8aW50IE4sIHR5cGVuYW1lIFQ+ClRhYmxlQmFz ZTxOLFQ+JgpUYWJsZUJhc2U8TixUPjo6b3BlcmF0b3IgPSAoY29uc3QgVGFibGVCYXNlPE4sVD4m IG0pCnsKICByZWluaXQgKG0uc2l6ZSgpKTsKICBpZiAoIWVtcHR5KCkpCiAgICBzdGQ6OmNvcHkg KCZtLnZhbFswXSwgJm0udmFsW25fZWxlbWVudHMoKV0sICZ2YWxbMF0pOwoKICByZXR1cm4gKnRo aXM7Cn0KCgoKdGVtcGxhdGUgPGludCBOLCB0eXBlbmFtZSBUPgp0ZW1wbGF0ZSA8dHlwZW5hbWUg VDI+ClRhYmxlQmFzZTxOLFQ+JgpUYWJsZUJhc2U8TixUPjo6b3BlcmF0b3IgPSAoY29uc3QgVGFi bGVCYXNlPE4sVDI+JiBtKQp7CiAgcmVpbml0IChtLnNpemUoKSk7CiAgaWYgKCFlbXB0eSgpKQog ICAgc3RkOjpjb3B5ICgmbS52YWxbMF0sICZtLnZhbFtuX2VsZW1lbnRzKCldLCAmdmFsWzBdKTsK CiAgcmV0dXJuICp0aGlzOwp9CgoKCnRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVD4KaW5saW5l CnZvaWQKVGFibGVCYXNlPE4sVD46OmNsZWFyICgpCnsKICB7IH07CgogIHN0ZDo6ZmlsbF9uICh2 YWwsIG5fZWxlbWVudHMoKSwgVCgpKTsKfTsKCgoKdGVtcGxhdGUgPGludCBOLCB0eXBlbmFtZSBU Pgp2b2lkClRhYmxlQmFzZTxOLFQ+OjpyZWluaXQgKGNvbnN0IFRhYmxlSW5kaWNlczxOPiAmbmV3 X3NpemVzKQp7CiAgdGFibGVfc2l6ZSA9IG5ld19zaXplczsKCiAgY29uc3QgdW5zaWduZWQgaW50 IG5ld19zaXplID0gbl9lbGVtZW50cygpOwoKCgogIGlmIChuZXdfc2l6ZSA9PSAwKQogICAgewog ICAgICBpZiAodmFsICE9IDApCiAgICAgICAgZGVsZXRlW10gdmFsOwoKICAgICAgdmFsID0gMDsK ICAgICAgdmFsX3NpemUgPSAwOwoKCgoKCiAgICAgIHRhYmxlX3NpemUgPSBUYWJsZUluZGljZXM8 Tj4oKTsKCiAgICAgIHJldHVybjsKICAgIH07CgoKCgogIGlmICh2YWxfc2l6ZTxuZXdfc2l6ZSkK ICAgIHsKICAgICAgaWYgKHZhbCAhPSAwKQogICAgICAgIGRlbGV0ZVtdIHZhbDsKCiAgICAgIHZh bF9zaXplID0gbmV3X3NpemU7CiAgICAgIHZhbCA9IG5ldyBUW3ZhbF9zaXplXTsKICAgIH07CgoK CiAgY2xlYXIgKCk7Cn07CgoKCnRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVD4KY29uc3QgVGFi bGVJbmRpY2VzPE4+ICYKVGFibGVCYXNlPE4sVD46OnNpemUgKCkgY29uc3QKewogIHJldHVybiB0 YWJsZV9zaXplOwp9OwoKCgp0ZW1wbGF0ZSA8aW50IE4sIHR5cGVuYW1lIFQ+CnVuc2lnbmVkIGlu dApUYWJsZUJhc2U8TixUPjo6bl9lbGVtZW50cyAoKSBjb25zdAp7CiAgdW5zaWduZWQgcyA9IDE7 CiAgZm9yICh1bnNpZ25lZCBpbnQgbj0wOyBuPE47ICsrbikKICAgIHMgKj0gdGFibGVfc2l6ZVtu XTsKICByZXR1cm4gczsKfTsKCgoKdGVtcGxhdGUgPGludCBOLCB0eXBlbmFtZSBUPgpib29sClRh YmxlQmFzZTxOLFQ+OjplbXB0eSAoKSBjb25zdAp7CiAgcmV0dXJuIChuX2VsZW1lbnRzKCkgPT0g MCk7Cn07CgoKCnRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVD4KdGVtcGxhdGUgPHR5cGVuYW1l IFQyPgppbmxpbmUKdm9pZApUYWJsZUJhc2U8TixUPjo6ZmlsbCAoY29uc3QgVDIqIGVudHJpZXMp CnsKICBpZiAodmFsX3NpemUgIT0gMCkKICAgIHN0ZDo6Y29weSAoZW50cmllcywgZW50cmllcytu X2VsZW1lbnRzKCksIHZhbCk7Cn0KCgoKdGVtcGxhdGUgPGludCBOLCB0eXBlbmFtZSBUPgp1bnNp Z25lZCBpbnQKVGFibGVCYXNlPE4sVD46Om1lbW9yeV9jb25zdW1wdGlvbiAoKSBjb25zdAp7CiAg cmV0dXJuIHNpemVvZigqdGhpcykgKyB2YWxfc2l6ZSpzaXplb2YoVCk7Cn0KCgp0ZW1wbGF0ZSA8 aW50IE4sIHR5cGVuYW1lIFQ+CmlubGluZQp1bnNpZ25lZCBpbnQKVGFibGVCYXNlPE4sVD46OnBv c2l0aW9uIChjb25zdCBUYWJsZUluZGljZXM8Tj4gJmluZGljZXMpIGNvbnN0CnsKCgoKCgogIHN3 aXRjaCAoTikKICAgIHsKICAgICAgY2FzZSAxOgogICAgICAgICAgICByZXR1cm4gaW5kaWNlc1sw XTsKICAgICAgY2FzZSAyOgogICAgICAgICAgICByZXR1cm4gaW5kaWNlc1swXSp0YWJsZV9zaXpl WzFdICsgaW5kaWNlc1sxXTsKICAgICAgY2FzZSAzOgogICAgICAgICAgICByZXR1cm4gKChpbmRp Y2VzWzBdKnRhYmxlX3NpemVbMV0gKyBpbmRpY2VzWzFdKSp0YWJsZV9zaXplWzJdCiAgICAgICAg ICAgICAgICAgICAgKyBpbmRpY2VzWzJdKTsKICAgICAgZGVmYXVsdDoKICAgICAgewogICAgICAg IHVuc2lnbmVkIGludCBzID0gaW5kaWNlc1swXTsKICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBu PTE7IG48TjsgKytuKQogICAgICAgICAgcyA9IHMqdGFibGVfc2l6ZVtuXSArIGluZGljZXNbbl07 CiAgICAgICAgcmV0dXJuIHM7CiAgICAgIH07CiAgICB9Owp9OwoKCgoKdGVtcGxhdGUgPGludCBO LCB0eXBlbmFtZSBUPgppbmxpbmUgY29uc3QgVCAmClRhYmxlQmFzZTxOLFQ+OjpvcGVyYXRvcigp IChjb25zdCBUYWJsZUluZGljZXM8Tj4gJmluZGljZXMpIGNvbnN0CnsKICBmb3IgKHVuc2lnbmVk IGludCBuPTA7IG48TjsgKytuKQogICAgeyB9OwoKICByZXR1cm4gZWwoaW5kaWNlcyk7Cn07CgoK CnRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVD4KaW5saW5lIFQgJgpUYWJsZUJhc2U8TixUPjo6 b3BlcmF0b3IoKSAoY29uc3QgVGFibGVJbmRpY2VzPE4+ICZpbmRpY2VzKQp7CiAgZm9yICh1bnNp Z25lZCBpbnQgbj0wOyBuPE47ICsrbikKICAgIHsgfTsKCiAgcmV0dXJuIGVsKGluZGljZXMpOwp9 OwoKCgp0ZW1wbGF0ZSA8aW50IE4sIHR5cGVuYW1lIFQ+CmlubGluZSBjb25zdCBUICYKVGFibGVC YXNlPE4sVD46OmVsIChjb25zdCBUYWJsZUluZGljZXM8Tj4gJmluZGljZXMpIGNvbnN0CnsKICBy ZXR1cm4gdmFsW3Bvc2l0aW9uKGluZGljZXMpXTsKfTsKCgoKdGVtcGxhdGUgPGludCBOLCB0eXBl bmFtZSBUPgppbmxpbmUgVCAmClRhYmxlQmFzZTxOLFQ+OjplbCAoY29uc3QgVGFibGVJbmRpY2Vz PE4+ICZpbmRpY2VzKQp7CiAgcmV0dXJuIHZhbFtwb3NpdGlvbihpbmRpY2VzKV07Cn07CgoKCnRl bXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVD4KaW5saW5lCmNvbnN0IFQgKgpUYWJsZUJhc2U8TixU Pjo6ZGF0YSAoKSBjb25zdAp7CiAgcmV0dXJuIHZhbDsKfQoKCgoKdGVtcGxhdGUgPHR5cGVuYW1l IFQ+ClRhYmxlPDEsVD46OlRhYmxlICgpCnt9OwoKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KVGFi bGU8MSxUPjo6VGFibGUgKGNvbnN0IHVuc2lnbmVkIGludCBzaXplKQogICAgICAgICAgICAgICAg OgogICAgICAgICAgICAgICAgVGFibGVCYXNlPDEsVD4gKFRhYmxlSW5kaWNlczwxPiAoc2l6ZSkp Cnt9OwoKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KY29uc3QgVCAmClRhYmxlPDEsVD46Om9wZXJh dG9yIFtdIChjb25zdCB1bnNpZ25lZCBpbnQgaSkgY29uc3QKewogIHsgfTsKCiAgcmV0dXJuIHRo aXMtPnZhbFtpXTsKfTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ClQgJgpUYWJsZTwxLFQ+Ojpv cGVyYXRvciBbXSAoY29uc3QgdW5zaWduZWQgaW50IGkpCnsKICB7IH07CgogIHJldHVybiB0aGlz LT52YWxbaV07Cn07CgoKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgppbmxpbmUKY29uc3QgVCAmClRh YmxlPDEsVD46Om9wZXJhdG9yICgpIChjb25zdCB1bnNpZ25lZCBpbnQgaSkgY29uc3QKewogIHsg fTsKCiAgcmV0dXJuIHRoaXMtPnZhbFtpXTsKfTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cmlu bGluZQpUICYKVGFibGU8MSxUPjo6b3BlcmF0b3IgKCkgKGNvbnN0IHVuc2lnbmVkIGludCBpKQp7 CiAgeyB9OwoKICByZXR1cm4gdGhpcy0+dmFsW2ldOwp9OwoKCgoKdGVtcGxhdGUgPHR5cGVuYW1l IFQ+ClRhYmxlPDIsVD46OlRhYmxlICgpCnt9OwoKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KVGFi bGU8MixUPjo6VGFibGUgKGNvbnN0IHVuc2lnbmVkIGludCBzaXplMSwKICAgICAgICAgICAgICAg ICAgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplMikKICAgICAgICAgICAgICAgIDoKICAgICAgICAg ICAgICAgIFRhYmxlQmFzZTwyLFQ+IChUYWJsZUluZGljZXM8Mj4gKHNpemUxLCBzaXplMikpCnt9 OwoKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kdm9pZApUYWJsZTwyLFQ+OjpyZWluaXQgKGNvbnN0 IHVuc2lnbmVkIGludCBzaXplMSwKICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBp bnQgc2l6ZTIpCnsKICB0aGlzLT5UYWJsZUJhc2U8MixUPjo6cmVpbml0IChUYWJsZUluZGljZXM8 Mj4gKHNpemUxLCBzaXplMikpOwp9OwoKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KaW5saW5lClRh YmxlQmFzZUFjY2Vzc29yczo6QWNjZXNzb3I8MixULHRydWUsMT4KVGFibGU8MixUPjo6b3BlcmF0 b3IgW10gKGNvbnN0IHVuc2lnbmVkIGludCBpKSBjb25zdAp7CiAgeyB9OwoKICByZXR1cm4gVGFi bGVCYXNlQWNjZXNzb3JzOjpBY2Nlc3NvcjwyLFQsdHJ1ZSwxPigqdGhpcywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT52YWwraSpuX2NvbHMo KSk7Cn07CgoKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgppbmxpbmUKVGFibGVCYXNlQWNjZXNzb3Jz OjpBY2Nlc3NvcjwyLFQsZmFsc2UsMT4KVGFibGU8MixUPjo6b3BlcmF0b3IgW10gKGNvbnN0IHVu c2lnbmVkIGludCBpKQp7CiAgeyB9OwoKICByZXR1cm4gVGFibGVCYXNlQWNjZXNzb3JzOjpBY2Nl c3NvcjwyLFQsZmFsc2UsMT4oKnRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRoaXMtPnZhbCtpKm5fY29scygpKTsKfTsKCgoKdGVtcGxhdGUg PHR5cGVuYW1lIFQ+CmlubGluZQpjb25zdCBUICYKVGFibGU8MixUPjo6b3BlcmF0b3IgKCkgKGNv bnN0IHVuc2lnbmVkIGludCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu ZWQgaW50IGopIGNvbnN0CnsKICB7IH07CgogIHsgfTsKCiAgcmV0dXJuIHRoaXMtPnZhbFtpKnRo aXMtPnRhYmxlX3NpemVbMV0ral07Cn07CgoKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgppbmxpbmUK VCAmClRhYmxlPDIsVD46Om9wZXJhdG9yICgpIChjb25zdCB1bnNpZ25lZCBpbnQgaSwKICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBqKQp7CiAgeyB9OwoKICB7IH07 CgogIHJldHVybiB0aGlzLT52YWxbaSp0aGlzLT50YWJsZV9zaXplWzFdK2pdOwp9OwoKCgp0ZW1w bGF0ZSA8dHlwZW5hbWUgVD4KaW5saW5lCmNvbnN0IFQgJgpUYWJsZTwyLFQ+OjplbCAoY29uc3Qg dW5zaWduZWQgaW50IGksCiAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgaikgY29u c3QKewogIHJldHVybiB0aGlzLT52YWxbaSp0aGlzLT50YWJsZV9zaXplWzFdK2pdOwp9OwoKCgp0 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KaW5saW5lClQgJgpUYWJsZTwyLFQ+OjplbCAoY29uc3QgdW5z aWduZWQgaW50IGksCiAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgaikKewogIHJl dHVybiB0aGlzLT52YWxbaSp0aGlzLT50YWJsZV9zaXplWzFdK2pdOwp9OwoKCgp0ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4KaW5saW5lCnVuc2lnbmVkIGludApUYWJsZTwyLFQ+OjpuX3Jvd3MgKCkgY29u c3QKewogIHJldHVybiB0aGlzLT50YWJsZV9zaXplWzBdOwp9OwoKCgp0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4KaW5saW5lCnVuc2lnbmVkIGludApUYWJsZTwyLFQ+OjpuX2NvbHMgKCkgY29uc3QKewog IHJldHVybiB0aGlzLT50YWJsZV9zaXplWzFdOwp9OwoKCgoKCnRlbXBsYXRlIDx0eXBlbmFtZSBU PgpUYWJsZTwzLFQ+OjpUYWJsZSAoKQp7fTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ClRhYmxl PDMsVD46OlRhYmxlIChjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZTEsCiAgICAgICAgICAgICAgICAg ICBjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZTIsCiAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp Z25lZCBpbnQgc2l6ZTMpCiAgICAgICAgICAgICAgICA6CiAgICAgICAgICAgICAgICBUYWJsZUJh c2U8MyxUPiAoVGFibGVJbmRpY2VzPDM+IChzaXplMSwgc2l6ZTIsIHNpemUzKSkKe307CgoKCnRl bXBsYXRlIDx0eXBlbmFtZSBUPgppbmxpbmUKVGFibGVCYXNlQWNjZXNzb3JzOjpBY2Nlc3Nvcjwz LFQsdHJ1ZSwyPgpUYWJsZTwzLFQ+OjpvcGVyYXRvciBbXSAoY29uc3QgdW5zaWduZWQgaW50IGkp IGNvbnN0CnsKICB7IH07CgogIGNvbnN0IHVuc2lnbmVkIGludCBzdWJvYmplY3Rfc2l6ZSA9IHRo aXMtPnRhYmxlX3NpemVbMV0gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRoaXMtPnRhYmxlX3NpemVbMl07CiAgcmV0dXJuIChUYWJsZUJhc2VBY2Nlc3NvcnM6OkFjY2Vz c29yPDMsVCx0cnVlLDI+CiAgICAgICAgICAoKnRoaXMsCiAgICAgICAgICAgdGhpcy0+dmFsK2kq c3Vib2JqZWN0X3NpemUpKTsKfTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmlubGluZQpUYWJs ZUJhc2VBY2Nlc3NvcnM6OkFjY2Vzc29yPDMsVCxmYWxzZSwyPgpUYWJsZTwzLFQ+OjpvcGVyYXRv ciBbXSAoY29uc3QgdW5zaWduZWQgaW50IGkpCnsKICB7IH07CgogIGNvbnN0IHVuc2lnbmVkIGlu dCBzdWJvYmplY3Rfc2l6ZSA9IHRoaXMtPnRhYmxlX3NpemVbMV0gKgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnRhYmxlX3NpemVbMl07CiAgcmV0dXJuIChUYWJs ZUJhc2VBY2Nlc3NvcnM6OkFjY2Vzc29yPDMsVCxmYWxzZSwyPgogICAgICAgICAgKCp0aGlzLAog ICAgICAgICAgIHRoaXMtPnZhbCtpKnN1Ym9iamVjdF9zaXplKSk7Cn07CgoKCnRlbXBsYXRlIDx0 eXBlbmFtZSBUPgppbmxpbmUKY29uc3QgVCAmClRhYmxlPDMsVD46Om9wZXJhdG9yICgpIChjb25z dCB1bnNpZ25lZCBpbnQgaSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk IGludCBqLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGspIGNv bnN0CnsKICB7IH07CgogIHsgfTsKCiAgeyB9OwoKICByZXR1cm4gdGhpcy0+dmFsWyhpKnRoaXMt PnRhYmxlX3NpemVbMV0raikKICAgICAgICAgICAgICAgICAgKnRoaXMtPnRhYmxlX3NpemVbMl0g KyBrXTsKfTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmlubGluZQpUICYKVGFibGU8MyxUPjo6 b3BlcmF0b3IgKCkgKGNvbnN0IHVuc2lnbmVkIGludCBpLAogICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgdW5zaWduZWQgaW50IGosCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1 bnNpZ25lZCBpbnQgaykKewogIHsgfTsKCiAgeyB9OwoKICB7IH07CgogIHJldHVybiB0aGlzLT52 YWxbKGkqdGhpcy0+dGFibGVfc2l6ZVsxXStqKQogICAgICAgICAgICAgICAgICAqdGhpcy0+dGFi bGVfc2l6ZVsyXSArIGtdOwp9OwoKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KVGFibGU8NCxUPjo6 VGFibGUgKCkKe307CgoKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpUYWJsZTw0LFQ+OjpUYWJsZSAo Y29uc3QgdW5zaWduZWQgaW50IHNpemUxLAogICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu ZWQgaW50IHNpemUyLAogICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNpemUz LAogICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNpemU0KQogICAgICAgICAg ICAgICAgOgogICAgICAgICAgICAgICAgVGFibGVCYXNlPDQsVD4gKFRhYmxlSW5kaWNlczw0PiAo c2l6ZTEsIHNpemUyLCBzaXplMywgc2l6ZTQpKQp7fTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ CmlubGluZQpUYWJsZUJhc2VBY2Nlc3NvcnM6OkFjY2Vzc29yPDQsVCx0cnVlLDM+ClRhYmxlPDQs VD46Om9wZXJhdG9yIFtdIChjb25zdCB1bnNpZ25lZCBpbnQgaSkgY29uc3QKewogIHsgfTsKCiAg Y29uc3QgdW5zaWduZWQgaW50IHN1Ym9iamVjdF9zaXplID0gdGhpcy0+dGFibGVfc2l6ZVsxXSAq CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+dGFibGVfc2l6ZVsy XSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+dGFibGVfc2l6 ZVszXTsKICByZXR1cm4gKFRhYmxlQmFzZUFjY2Vzc29yczo6QWNjZXNzb3I8NCxULHRydWUsMz4K ICAgICAgICAgICgqdGhpcywKICAgICAgICAgICB0aGlzLT52YWwraSpzdWJvYmplY3Rfc2l6ZSkp Owp9OwoKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KaW5saW5lClRhYmxlQmFzZUFjY2Vzc29yczo6 QWNjZXNzb3I8NCxULGZhbHNlLDM+ClRhYmxlPDQsVD46Om9wZXJhdG9yIFtdIChjb25zdCB1bnNp Z25lZCBpbnQgaSkKewogIHsgfTsKCiAgY29uc3QgdW5zaWduZWQgaW50IHN1Ym9iamVjdF9zaXpl ID0gdGhpcy0+dGFibGVfc2l6ZVsxXSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGhpcy0+dGFibGVfc2l6ZVsyXSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGhpcy0+dGFibGVfc2l6ZVszXTsKICByZXR1cm4gKFRhYmxlQmFzZUFjY2Vzc29y czo6QWNjZXNzb3I8NCxULGZhbHNlLDM+CiAgICAgICAgICAoKnRoaXMsCiAgICAgICAgICAgdGhp cy0+dmFsK2kqc3Vib2JqZWN0X3NpemUpKTsKfTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cmlu bGluZQpjb25zdCBUICYKVGFibGU8NCxUPjo6b3BlcmF0b3IgKCkgKGNvbnN0IHVuc2lnbmVkIGlu dCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGosCiAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgaywKICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBsKSBjb25zdAp7CiAgeyB9OwoKICB7IH07Cgog IHsgfTsKCiAgeyB9OwoKICByZXR1cm4gdGhpcy0+dmFsWygoaSp0aGlzLT50YWJsZV9zaXplWzFd K2opCiAgICAgICAgICAgICAgICAgICAgKnRoaXMtPnRhYmxlX3NpemVbMl0gKyBrKQogICAgICAg ICAgICAgICAgICAqdGhpcy0+dGFibGVfc2l6ZVszXSArIGxdOwp9OwoKCgp0ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KaW5saW5lClQgJgpUYWJsZTw0LFQ+OjpvcGVyYXRvciAoKSAoY29uc3QgdW5zaWdu ZWQgaW50IGksCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgaiwK ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBrLAogICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGwpCnsKICB7IH07CgogIHsgfTsKCiAg eyB9OwoKICB7IH07CgogIHJldHVybiB0aGlzLT52YWxbKChpKnRoaXMtPnRhYmxlX3NpemVbMV0r aikKICAgICAgICAgICAgICAgICAgICAqdGhpcy0+dGFibGVfc2l6ZVsyXSArIGspCiAgICAgICAg ICAgICAgICAgICp0aGlzLT50YWJsZV9zaXplWzNdICsgbF07Cn07CgoKCgp0ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KVGFibGU8NSxUPjo6VGFibGUgKCkKe307CgoKCnRlbXBsYXRlIDx0eXBlbmFtZSBU PgpUYWJsZTw1LFQ+OjpUYWJsZSAoY29uc3QgdW5zaWduZWQgaW50IHNpemUxLAogICAgICAgICAg ICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNpemUyLAogICAgICAgICAgICAgICAgICAgY29u c3QgdW5zaWduZWQgaW50IHNpemUzLAogICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg aW50IHNpemU0LAogICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNpemU1KQog ICAgICAgICAgICAgICAgOgogICAgICAgICAgICAgICAgVGFibGVCYXNlPDUsVD4gKFRhYmxlSW5k aWNlczw1PiAoc2l6ZTEsIHNpemUyLCBzaXplMywgc2l6ZTQsIHNpemU1KSkKe307CgoKCnRlbXBs YXRlIDx0eXBlbmFtZSBUPgppbmxpbmUKVGFibGVCYXNlQWNjZXNzb3JzOjpBY2Nlc3Nvcjw1LFQs dHJ1ZSw0PgpUYWJsZTw1LFQ+OjpvcGVyYXRvciBbXSAoY29uc3QgdW5zaWduZWQgaW50IGkpIGNv bnN0CnsKICB7IH07CgogIGNvbnN0IHVuc2lnbmVkIGludCBzdWJvYmplY3Rfc2l6ZSA9IHRoaXMt PnRhYmxlX3NpemVbMV0gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo aXMtPnRhYmxlX3NpemVbMl0gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRoaXMtPnRhYmxlX3NpemVbM10gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRoaXMtPnRhYmxlX3NpemVbNF07CiAgcmV0dXJuIChUYWJsZUJhc2VBY2Nlc3NvcnM6OkFj Y2Vzc29yPDUsVCx0cnVlLDQ+CiAgICAgICAgICAoKnRoaXMsCiAgICAgICAgICAgdGhpcy0+dmFs K2kqc3Vib2JqZWN0X3NpemUpKTsKfTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmlubGluZQpU YWJsZUJhc2VBY2Nlc3NvcnM6OkFjY2Vzc29yPDUsVCxmYWxzZSw0PgpUYWJsZTw1LFQ+OjpvcGVy YXRvciBbXSAoY29uc3QgdW5zaWduZWQgaW50IGkpCnsKICB7IH07CgogIGNvbnN0IHVuc2lnbmVk IGludCBzdWJvYmplY3Rfc2l6ZSA9IHRoaXMtPnRhYmxlX3NpemVbMV0gKgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnRhYmxlX3NpemVbMl0gKgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnRhYmxlX3NpemVbM10gKgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnRhYmxlX3NpemVbNF07CiAgcmV0 dXJuIChUYWJsZUJhc2VBY2Nlc3NvcnM6OkFjY2Vzc29yPDUsVCxmYWxzZSw0PgogICAgICAgICAg KCp0aGlzLAogICAgICAgICAgIHRoaXMtPnZhbCtpKnN1Ym9iamVjdF9zaXplKSk7Cn07CgoKCnRl bXBsYXRlIDx0eXBlbmFtZSBUPgppbmxpbmUKY29uc3QgVCAmClRhYmxlPDUsVD46Om9wZXJhdG9y ICgpIChjb25zdCB1bnNpZ25lZCBpbnQgaSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVuc2lnbmVkIGludCBqLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg aW50IGssCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbCwKICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBtKSBjb25zdAp7CiAgeyB9 OwoKICB7IH07CgogIHsgfTsKCiAgeyB9OwoKICB7IH07CgogIHJldHVybiB0aGlzLT52YWxbKCgo aSp0aGlzLT50YWJsZV9zaXplWzFdK2opCiAgICAgICAgICAgICAgICAgICAgICp0aGlzLT50YWJs ZV9zaXplWzJdICsgaykKICAgICAgICAgICAgICAgICAgICAqdGhpcy0+dGFibGVfc2l6ZVszXSAr IGwpCiAgICAgICAgICAgICAgICAgICp0aGlzLT50YWJsZV9zaXplWzRdICsgbV07Cn07CgoKCnRl bXBsYXRlIDx0eXBlbmFtZSBUPgppbmxpbmUKVCAmClRhYmxlPDUsVD46Om9wZXJhdG9yICgpIChj b25zdCB1bnNpZ25lZCBpbnQgaSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln bmVkIGludCBqLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGss CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbCwKICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBtKQp7CiAgeyB9OwoKICB7IH07Cgog IHsgfTsKCiAgeyB9OwoKICB7IH07CgogIHJldHVybiB0aGlzLT52YWxbKCgoaSp0aGlzLT50YWJs ZV9zaXplWzFdK2opCiAgICAgICAgICAgICAgICAgICAgICp0aGlzLT50YWJsZV9zaXplWzJdICsg aykKICAgICAgICAgICAgICAgICAgICAqdGhpcy0+dGFibGVfc2l6ZVszXSArIGwpCiAgICAgICAg ICAgICAgICAgICp0aGlzLT50YWJsZV9zaXplWzRdICsgbV07Cn07CgoKCnRlbXBsYXRlIDx0eXBl bmFtZSBUPgpUYWJsZTw2LFQ+OjpUYWJsZSAoKQp7fTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ ClRhYmxlPDYsVD46OlRhYmxlIChjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZTEsCiAgICAgICAgICAg ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZTIsCiAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBpbnQgc2l6ZTMsCiAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBp bnQgc2l6ZTQsCiAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZTUsCiAg ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZTYpCiAgICAgICAgICAgICAg ICA6CiAgICAgICAgICAgICAgICBUYWJsZUJhc2U8NixUPiAoVGFibGVJbmRpY2VzPDY+IChzaXpl MSwgc2l6ZTIsIHNpemUzLCBzaXplNCwgc2l6ZTUsIHNpemU2KSkKe307CgoKCnRlbXBsYXRlIDx0 eXBlbmFtZSBUPgppbmxpbmUKVGFibGVCYXNlQWNjZXNzb3JzOjpBY2Nlc3Nvcjw2LFQsdHJ1ZSw1 PgpUYWJsZTw2LFQ+OjpvcGVyYXRvciBbXSAoY29uc3QgdW5zaWduZWQgaW50IGkpIGNvbnN0CnsK ICB7IH07CgogIGNvbnN0IHVuc2lnbmVkIGludCBzdWJvYmplY3Rfc2l6ZSA9IHRoaXMtPnRhYmxl X3NpemVbMV0gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnRh YmxlX3NpemVbMl0gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMt PnRhYmxlX3NpemVbM10gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo aXMtPnRhYmxlX3NpemVbNF0gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRoaXMtPnRhYmxlX3NpemVbNV07CiAgcmV0dXJuIChUYWJsZUJhc2VBY2Nlc3NvcnM6OkFjY2Vz c29yPDYsVCx0cnVlLDU+CiAgICAgICAgICAoKnRoaXMsCiAgICAgICAgICAgdGhpcy0+dmFsK2kq c3Vib2JqZWN0X3NpemUpKTsKfTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmlubGluZQpUYWJs ZUJhc2VBY2Nlc3NvcnM6OkFjY2Vzc29yPDYsVCxmYWxzZSw1PgpUYWJsZTw2LFQ+OjpvcGVyYXRv ciBbXSAoY29uc3QgdW5zaWduZWQgaW50IGkpCnsKICB7IH07CgogIGNvbnN0IHVuc2lnbmVkIGlu dCBzdWJvYmplY3Rfc2l6ZSA9IHRoaXMtPnRhYmxlX3NpemVbMV0gKgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnRhYmxlX3NpemVbMl0gKgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnRhYmxlX3NpemVbM10gKgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnRhYmxlX3NpemVbNF0gKgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnRhYmxlX3NpemVbNV07CiAgcmV0 dXJuIChUYWJsZUJhc2VBY2Nlc3NvcnM6OkFjY2Vzc29yPDYsVCxmYWxzZSw1PgogICAgICAgICAg KCp0aGlzLAogICAgICAgICAgIHRoaXMtPnZhbCtpKnN1Ym9iamVjdF9zaXplKSk7Cn07CgoKCnRl bXBsYXRlIDx0eXBlbmFtZSBUPgppbmxpbmUKY29uc3QgVCAmClRhYmxlPDYsVD46Om9wZXJhdG9y ICgpIChjb25zdCB1bnNpZ25lZCBpbnQgaSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVuc2lnbmVkIGludCBqLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg aW50IGssCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbCwKICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBtLAogICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG4pIGNvbnN0CnsKICB7IH07CgogIHsgfTsK CiAgeyB9OwoKICB7IH07CgogIHsgfTsKCiAgeyB9OwoKICByZXR1cm4gdGhpcy0+dmFsWygoKChp KnRoaXMtPnRhYmxlX3NpemVbMV0raikKICAgICAgICAgICAgICAgICAgICAgICp0aGlzLT50YWJs ZV9zaXplWzJdICsgaykKICAgICAgICAgICAgICAgICAgICAgKnRoaXMtPnRhYmxlX3NpemVbM10g KyBsKQogICAgICAgICAgICAgICAgICAgICp0aGlzLT50YWJsZV9zaXplWzRdICsgbSkKICAgICAg ICAgICAgICAgICAgKnRoaXMtPnRhYmxlX3NpemVbNV0gKyBuXTsKfTsKCgoKdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+CmlubGluZQpUICYKVGFibGU8NixUPjo6b3BlcmF0b3IgKCkgKGNvbnN0IHVuc2ln bmVkIGludCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGos CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgaywKICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBsLAogICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgaW50IG0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBpbnQgbikKewogIHsgfTsKCiAgeyB9OwoKICB7IH07CgogIHsgfTsKCiAgeyB9 OwoKICB7IH07CgogIHJldHVybiB0aGlzLT52YWxbKCgoKGkqdGhpcy0+dGFibGVfc2l6ZVsxXStq KQogICAgICAgICAgICAgICAgICAgICAgKnRoaXMtPnRhYmxlX3NpemVbMl0gKyBrKQogICAgICAg ICAgICAgICAgICAgICAqdGhpcy0+dGFibGVfc2l6ZVszXSArIGwpCiAgICAgICAgICAgICAgICAg ICAgKnRoaXMtPnRhYmxlX3NpemVbNF0gKyBtKQogICAgICAgICAgICAgICAgICAqdGhpcy0+dGFi bGVfc2l6ZVs1XSArIG5dOwp9OwojIDIwICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFs LklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIgMgojIDEgIi9ob21lL2Jhbmdl cnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvZGVhbC5JSS9pbmNsdWRlL2dyaWQvZ2VvbWV0cnlfaW5m by5oIiAxCiMgMzIgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvZGVhbC5JSS9p bmNsdWRlL2dyaWQvZ2VvbWV0cnlfaW5mby5oIgp0ZW1wbGF0ZSA8aW50IGRpbT4Kc3RydWN0IEdl b21ldHJ5SW5mbwp7fTsKIyA1NyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9k ZWFsLklJL2luY2x1ZGUvZ3JpZC9nZW9tZXRyeV9pbmZvLmgiCnRlbXBsYXRlIDw+CnN0cnVjdCBH ZW9tZXRyeUluZm88MD4KewoKCgoKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZGltID0g MDsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNoaWxkcmVuX3Blcl9jZWxsID0g MTsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGZhY2VzX3Blcl9jZWxsID0gMDsK CgoKCgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzdWJmYWNlc19wZXJfZmFjZSA9IDA7 CgoKCgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB2ZXJ0aWNlc19wZXJfY2VsbCA9IDE7 CiMgOTYgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvZGVhbC5JSS9pbmNsdWRl L2dyaWQvZ2VvbWV0cnlfaW5mby5oIgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB2ZXJ0 aWNlc19wZXJfZmFjZSA9IDA7CgoKCgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsaW5l c19wZXJfZmFjZSA9IDA7CgoKCgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBxdWFkc19w ZXJfZmFjZSA9IDA7CgoKCgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsaW5lc19wZXJf Y2VsbCA9IDA7CgoKCgoKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcXVhZHNfcGVyX2Nl bGwgPSAwOwoKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGhleGVzX3Blcl9jZWxs ID0gMDsKfTsKIyAxNDMgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvZGVhbC5J SS9pbmNsdWRlL2dyaWQvZ2VvbWV0cnlfaW5mby5oIgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgR2VvbWV0 cnlJbmZvPDE+CnsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGRpbSA9IDE7CgoK CgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjaGlsZHJlbl9wZXJfY2VsbCA9IDI7CgoK CgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBmYWNlc19wZXJfY2VsbCA9IDI7CgoKCgoK ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3ViZmFjZXNfcGVyX2ZhY2UgPSAwOwoKCgoK ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdmVydGljZXNfcGVyX2NlbGwgPSAyOwojIDE4 MiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9kZWFsLklJL2luY2x1ZGUvZ3Jp ZC9nZW9tZXRyeV9pbmZvLmgiCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHZlcnRpY2Vz X3Blcl9mYWNlID0gMTsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGxpbmVzX3Bl cl9mYWNlID0gMDsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHF1YWRzX3Blcl9m YWNlID0gMDsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGxpbmVzX3Blcl9jZWxs ID0gMTsKCgoKCgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBxdWFkc19wZXJfY2VsbCA9 IDA7CgoKCgoKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaGV4ZXNfcGVyX2NlbGwgPSAw OwojIDIxOCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9kZWFsLklJL2luY2x1 ZGUvZ3JpZC9nZW9tZXRyeV9pbmZvLmgiCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG9w cG9zaXRlX2ZhY2VbZmFjZXNfcGVyX2NlbGxdOwojIDI0MCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFs LklJLzIvZGVhbC5JSS9kZWFsLklJL2luY2x1ZGUvZ3JpZC9nZW9tZXRyeV9pbmZvLmgiCiAgICBz dGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGR4X3RvX2RlYWxbdmVydGljZXNfcGVyX2NlbGxdOwoj IDI4MiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9kZWFsLklJL2luY2x1ZGUv Z3JpZC9nZW9tZXRyeV9pbmZvLmgiCiAgICBzdGF0aWMgdW5zaWduZWQgaW50IGNoaWxkX2NlbGxf b25fZmFjZSAoY29uc3QgdW5zaWduZWQgaW50IGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHN1YmZhY2UpOwojIDI5NCAi L2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9kZWFsLklJL2luY2x1ZGUvZ3JpZC9n ZW9tZXRyeV9pbmZvLmgiCiAgICBzdGF0aWMgUG9pbnQ8MT4gdW5pdF9jZWxsX3ZlcnRleCAoY29u c3QgdW5zaWduZWQgaW50IHZlcnRleCk7CiMgMzIxICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkv Mi9kZWFsLklJL2RlYWwuSUkvaW5jbHVkZS9ncmlkL2dlb21ldHJ5X2luZm8uaCIKICAgIHN0YXRp YyB1bnNpZ25lZCBpbnQgdmVydGljZXNfYWRqYWNlbnRfdG9fbGluZSAoY29uc3QgdW5zaWduZWQg aW50IGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHVuc2lnbmVkIGludCB2ZXJ0ZXgpOwp9OwojIDM0MiAiL2hvbWUvYmFuZ2VydGgv cC9kZWFsLklJLzIvZGVhbC5JSS9kZWFsLklJL2luY2x1ZGUvZ3JpZC9nZW9tZXRyeV9pbmZvLmgi CnRlbXBsYXRlIDw+CnN0cnVjdCBHZW9tZXRyeUluZm88Mj4KewoKCgoKICAgIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBpbnQgZGltID0gMjsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50 IGNoaWxkcmVuX3Blcl9jZWxsID0gNDsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50 IGZhY2VzX3Blcl9jZWxsID0gNDsKCgoKCgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBz dWJmYWNlc19wZXJfZmFjZSA9IDI7CgoKCgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB2 ZXJ0aWNlc19wZXJfY2VsbCA9IDQ7CiMgMzgxICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9k ZWFsLklJL2RlYWwuSUkvaW5jbHVkZS9ncmlkL2dlb21ldHJ5X2luZm8uaCIKICAgIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBpbnQgdmVydGljZXNfcGVyX2ZhY2UgPSAyOwoKCgoKICAgIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBpbnQgbGluZXNfcGVyX2ZhY2UgPSAxOwoKCgoKICAgIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBpbnQgcXVhZHNfcGVyX2ZhY2UgPSAwOwoKCgoKICAgIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBpbnQgbGluZXNfcGVyX2NlbGwgPSA0OwoKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5z aWduZWQgaW50IHF1YWRzX3Blcl9jZWxsID0gMTsKCgoKCgogICAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGludCBoZXhlc19wZXJfY2VsbCA9IDA7CiMgNDE3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwu SUkvMi9kZWFsLklJL2RlYWwuSUkvaW5jbHVkZS9ncmlkL2dlb21ldHJ5X2luZm8uaCIKICAgIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgb3Bwb3NpdGVfZmFjZVtmYWNlc19wZXJfY2VsbF07CiMg NDM4ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2RlYWwuSUkvaW5jbHVkZS9n cmlkL2dlb21ldHJ5X2luZm8uaCIKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZHhfdG9f ZGVhbFt2ZXJ0aWNlc19wZXJfY2VsbF07CiMgNDgwICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkv Mi9kZWFsLklJL2RlYWwuSUkvaW5jbHVkZS9ncmlkL2dlb21ldHJ5X2luZm8uaCIKICAgIHN0YXRp YyB1bnNpZ25lZCBpbnQgY2hpbGRfY2VsbF9vbl9mYWNlIChjb25zdCB1bnNpZ25lZCBpbnQgZmFj ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp Z25lZCBpbnQgc3ViZmFjZSk7CiMgNDkzICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFs LklJL2RlYWwuSUkvaW5jbHVkZS9ncmlkL2dlb21ldHJ5X2luZm8uaCIKICAgIHN0YXRpYyBQb2lu dDwyPiB1bml0X2NlbGxfdmVydGV4IChjb25zdCB1bnNpZ25lZCBpbnQgaSk7CiMgNTIwICIvaG9t ZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2RlYWwuSUkvaW5jbHVkZS9ncmlkL2dlb21l dHJ5X2luZm8uaCIKICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgdmVydGljZXNfYWRqYWNlbnRfdG9f bGluZSAoY29uc3QgdW5zaWduZWQgaW50IGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCB2ZXJ0ZXgpOwp9Owoj IDU0MSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9kZWFsLklJL2luY2x1ZGUv Z3JpZC9nZW9tZXRyeV9pbmZvLmgiCnRlbXBsYXRlIDw+CnN0cnVjdCBHZW9tZXRyeUluZm88Mz4K ewoKCgoKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZGltID0gMzsKCgoKCiAgICBzdGF0 aWMgY29uc3QgdW5zaWduZWQgaW50IGNoaWxkcmVuX3Blcl9jZWxsID0gODsKCgoKCiAgICBzdGF0 aWMgY29uc3QgdW5zaWduZWQgaW50IGZhY2VzX3Blcl9jZWxsID0gNjsKCgoKCgogICAgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGludCBzdWJmYWNlc19wZXJfZmFjZSA9IDQ7CgoKCgogICAgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGludCB2ZXJ0aWNlc19wZXJfY2VsbCA9IDg7CiMgNTgwICIvaG9tZS9i YW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2RlYWwuSUkvaW5jbHVkZS9ncmlkL2dlb21ldHJ5 X2luZm8uaCIKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdmVydGljZXNfcGVyX2ZhY2Ug PSA0OwoKCgoKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGluZXNfcGVyX2ZhY2UgPSA0 OwoKCgoKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcXVhZHNfcGVyX2ZhY2UgPSAxOwoK CgoKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGluZXNfcGVyX2NlbGwgPSAxMjsKCgoK CgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBxdWFkc19wZXJfY2VsbCA9IDY7CgoKCgoK ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaGV4ZXNfcGVyX2NlbGwgPSAxOwojIDYxNiAi L2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9kZWFsLklJL2luY2x1ZGUvZ3JpZC9n ZW9tZXRyeV9pbmZvLmgiCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG9wcG9zaXRlX2Zh Y2VbZmFjZXNfcGVyX2NlbGxdOwojIDYzNyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh bC5JSS9kZWFsLklJL2luY2x1ZGUvZ3JpZC9nZW9tZXRyeV9pbmZvLmgiCiAgICBzdGF0aWMgY29u c3QgdW5zaWduZWQgaW50IGR4X3RvX2RlYWxbdmVydGljZXNfcGVyX2NlbGxdOwojIDY3OSAiL2hv bWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9kZWFsLklJL2luY2x1ZGUvZ3JpZC9nZW9t ZXRyeV9pbmZvLmgiCiAgICBzdGF0aWMgdW5zaWduZWQgaW50IGNoaWxkX2NlbGxfb25fZmFjZSAo Y29uc3QgdW5zaWduZWQgaW50IGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHN1YmZhY2UpOwojIDY5MCAiL2hvbWUvYmFu Z2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9kZWFsLklJL2luY2x1ZGUvZ3JpZC9nZW9tZXRyeV9p bmZvLmgiCiAgICBzdGF0aWMgUG9pbnQ8Mz4gdW5pdF9jZWxsX3ZlcnRleCAoY29uc3QgdW5zaWdu ZWQgaW50IGkpOwojIDcxNyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9kZWFs LklJL2luY2x1ZGUvZ3JpZC9nZW9tZXRyeV9pbmZvLmgiCiAgICBzdGF0aWMgdW5zaWduZWQgaW50 IHZlcnRpY2VzX2FkamFjZW50X3RvX2xpbmUgKGNvbnN0IHVuc2lnbmVkIGludCBsaW5lLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp Z25lZCBpbnQgdmVydGV4KTsKfTsKIyA3NDIgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2Rl YWwuSUkvZGVhbC5JSS9pbmNsdWRlL2dyaWQvZ2VvbWV0cnlfaW5mby5oIgp0ZW1wbGF0ZSA8Pgpz dHJ1Y3QgR2VvbWV0cnlJbmZvPDQ+CnsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50 IGRpbSA9IDQ7CgoKCgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjaGlsZHJlbl9wZXJf Y2VsbCA9IDE2OwoKCgoKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZmFjZXNfcGVyX2Nl bGwgPSA4OwoKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHN1YmZhY2VzX3Blcl9m YWNlID0gODsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHZlcnRpY2VzX3Blcl9j ZWxsID0gMTY7CiMgNzgxICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2RlYWwu SUkvaW5jbHVkZS9ncmlkL2dlb21ldHJ5X2luZm8uaCIKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBpbnQgdmVydGljZXNfcGVyX2ZhY2UgPSA4OwoKCgoKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBpbnQgbGluZXNfcGVyX2ZhY2UgPSAxMjsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg aW50IHF1YWRzX3Blcl9mYWNlID0gNjsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50 IGxpbmVzX3Blcl9jZWxsID0gMzI7CgoKCgoKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQg cXVhZHNfcGVyX2NlbGwgPSAyNDsKCgoKCgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBo ZXhlc19wZXJfY2VsbCA9IDg7Cn07CgoKCgppbmxpbmUKUG9pbnQ8MT4KR2VvbWV0cnlJbmZvPDE+ Ojp1bml0X2NlbGxfdmVydGV4IChjb25zdCB1bnNpZ25lZCBpbnQgdmVydGV4KQp7CiAgeyB9OwoK CiAgY29uc3QgUG9pbnQ8ZGltPiB2ZXJ0aWNlc1t2ZXJ0aWNlc19wZXJfY2VsbF0gPQogICAgeyBQ b2ludDxkaW0+KDAuKSwgUG9pbnQ8ZGltPigxLikgfTsKICByZXR1cm4gdmVydGljZXNbdmVydGV4 XTsKfTsKCgoKaW5saW5lClBvaW50PDI+Ckdlb21ldHJ5SW5mbzwyPjo6dW5pdF9jZWxsX3ZlcnRl eCAoY29uc3QgdW5zaWduZWQgaW50IHZlcnRleCkKewogIHsgfTsKCgogIGNvbnN0IFBvaW50PGRp bT4gdmVydGljZXNbdmVydGljZXNfcGVyX2NlbGxdID0KICAgIHsgUG9pbnQ8ZGltPigwLiwgMC4p LCBQb2ludDxkaW0+KDEuLCAwLiksCiAgICAgIFBvaW50PGRpbT4oMS4sMS4pLCBQb2ludDxkaW0+ KDAuLDEuKSB9OwogIHJldHVybiB2ZXJ0aWNlc1t2ZXJ0ZXhdOwp9OwoKCgppbmxpbmUKUG9pbnQ8 Mz4KR2VvbWV0cnlJbmZvPDM+Ojp1bml0X2NlbGxfdmVydGV4IChjb25zdCB1bnNpZ25lZCBpbnQg dmVydGV4KQp7CiAgeyB9OwoKCiAgY29uc3QgUG9pbnQ8ZGltPiB2ZXJ0aWNlc1t2ZXJ0aWNlc19w ZXJfY2VsbF0gPQogICAgeyBQb2ludDxkaW0+KDAuLCAwLiwgMC4pLCBQb2ludDxkaW0+KDEuLCAw LiwgMC4pLAogICAgICBQb2ludDxkaW0+KDEuLCAwLiwgMS4pLCBQb2ludDxkaW0+KDAuLCAwLiwg MS4pLAogICAgICBQb2ludDxkaW0+KDAuLCAxLiwgMC4pLCBQb2ludDxkaW0+KDEuLCAxLiwgMC4p LAogICAgICBQb2ludDxkaW0+KDEuLCAxLiwgMS4pLCBQb2ludDxkaW0+KDAuLCAxLiwgMS4pIH07 CiAgcmV0dXJuIHZlcnRpY2VzW3ZlcnRleF07Cn07CgoKCmlubGluZQp1bnNpZ25lZCBpbnQKR2Vv bWV0cnlJbmZvPDE+Ojp2ZXJ0aWNlc19hZGphY2VudF90b19saW5lIChjb25zdCB1bnNpZ25lZCBp bnQgbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBpbnQgdmVydGV4KQp7CiAgeyB9OwoKICB7IH07CgoKICByZXR1cm4gdmVydGV4 Owp9OwoKCgppbmxpbmUKdW5zaWduZWQgaW50Ckdlb21ldHJ5SW5mbzwyPjo6dmVydGljZXNfYWRq YWNlbnRfdG9fbGluZSAoY29uc3QgdW5zaWduZWQgaW50IGxpbmUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHZlcnRleCkKewog IHsgfTsKCiAgeyB9OwoKCiAgY29uc3QgdW5zaWduZWQgaW50IHZlcnRleF9pbmRpY2VzW2xpbmVz X3Blcl9jZWxsXVsyXSA9CiAgICB7IHswLCAxfSwgezEsIDJ9LCB7MywgMn0sIHswLCAzfSB9OwoK ICByZXR1cm4gdmVydGV4X2luZGljZXNbbGluZV1bdmVydGV4XTsKfTsKCgoKaW5saW5lCnVuc2ln bmVkIGludApHZW9tZXRyeUluZm88Mz46OnZlcnRpY2VzX2FkamFjZW50X3RvX2xpbmUgKGNvbnN0 IHVuc2lnbmVkIGludCBsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCB2ZXJ0ZXgpCnsKICB7IH07CgogIHsgfTsKCgogIGNv bnN0IHVuc2lnbmVkIGludCB2ZXJ0ZXhfaW5kaWNlc1tsaW5lc19wZXJfY2VsbF1bMl0gPQogICAg eyB7MCwgMX0sIHsxLCAyfSwgezMsIDJ9LCB7MCwgM30sCiAgICAgIHs0LCA1fSwgezUsIDZ9LCB7 NywgNn0sIHs0LCA3fSwKICAgICAgezAsIDR9LCB7MSwgNX0sIHsyLCA2fSwgezMsIDd9IH07Cgog IHJldHVybiB2ZXJ0ZXhfaW5kaWNlc1tsaW5lXVt2ZXJ0ZXhdOwp9OwojIDIxICIvaG9tZS9iYW5n ZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2Uu aCIgMgojIDQxICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVk ZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKY2xhc3MgUGFyYW1ldGVySGFuZGxlcjsKIyAzNDIgIi9o b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9v dXRfYmFzZS5oIgpjbGFzcyBEYXRhT3V0QmFzZQp7CiAgcHVibGljOgojIDM3MSAiL2hvbWUvYmFu Z2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRhX291dF9iYXNl LmgiCiAgICB0ZW1wbGF0ZSA8aW50IGRpbSwgaW50IHNwYWNlZGltPWRpbT4KICAgIHN0cnVjdCBQ YXRjaAogICAgewojIDM4NCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNl L2luY2x1ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICAgICAgUG9pbnQ8c3BhY2VkaW0+IHZl cnRpY2VzW0dlb21ldHJ5SW5mbzxkaW0+Ojp2ZXJ0aWNlc19wZXJfY2VsbF07CiMgMzk4ICIvaG9t ZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0 X2Jhc2UuaCIKICAgICAgICB1bnNpZ25lZCBpbnQgbmVpZ2hib3JzW0dlb21ldHJ5SW5mbzxkaW0+ OjpmYWNlc19wZXJfY2VsbF07CiMgNDA3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFs LklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgICAgICB1bnNpZ25lZCBp bnQgcGF0Y2hfaW5kZXg7CiMgNDE3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJ L2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgICAgICB1bnNpZ25lZCBpbnQg bl9zdWJkaXZpc2lvbnM7CiMgNDkwICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJ L2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgICAgICBUYWJsZTwyLGZsb2F0 PiBkYXRhOwoKCgoKCiAgICAgICAgUGF0Y2ggKCk7CiMgNTE0ICIvaG9tZS9iYW5nZXJ0aC9wL2Rl YWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgICAg ICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uICgpIGNvbnN0OwoKCgoKICAgICAgICBz dGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5vX25laWdoYm9yID0gc3RhdGljX2Nhc3Q8dW5zaWdu ZWQgaW50PigtMSk7CgoKCgogICAgICAgIGNsYXNzIEV4Y0ludmFsaWRDb21iaW5hdGlvbk9mRGlt ZW5zaW9ucyA6IHB1YmxpYyBFeGNlcHRpb25CYXNlIHsgcHVibGljOiBFeGNJbnZhbGlkQ29tYmlu YXRpb25PZkRpbWVuc2lvbnMgKGNvbnN0IGludCBhMSwgY29uc3QgaW50IGEyKSA6IGFyZzEgKGEx KSwgYXJnMihhMikge307IHZpcnR1YWwgfkV4Y0ludmFsaWRDb21iaW5hdGlvbk9mRGltZW5zaW9u cyAoKSB0aHJvdyAoKSB7fTsgdmlydHVhbCB2b2lkIFByaW50SW5mbyAoc3RkOjpvc3RyZWFtICZv dXQpIGNvbnN0IHsgb3V0IDw8ICJJdCBpcyBub3QgcG9zc2libGUgdG8gaGF2ZSBhIHN0cnVjdHVy YWwgZGltZW5zaW9uIG9mICIgPDwgYXJnMSA8PCAiIHRvIGJlIGxhcmdlciB0aGFuIHRoZSBzcGFj ZSBkaW1lbnNpb24gb2YgdGhlIHN1cnJvdW5kaW5nIiA8PCAiIHNwYWNlICIgPDwgYXJnMiA8PCBz dGQ6OmVuZGw7IH07IHByaXZhdGU6IGNvbnN0IGludCBhcmcxOyBjb25zdCBpbnQgYXJnMjsgfTsK CgoKCiAgICB9OwoKCgoKCgoKICAgIHN0cnVjdCBEWEZsYWdzCiAgICB7CgoKCgoKCiAgICAgICAg Ym9vbCB3cml0ZV9tdWx0aWdyaWQ7CgoKCgogICAgICAgIGJvb2wgd3JpdGVfbmVpZ2hib3JzOwoK CgoKICAgICAgICBEWEZsYWdzIChjb25zdCBib29sIHdyaXRlX211bHRpZ3JpZCA9IGZhbHNlLAog ICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgd3JpdGVfbmVpZ2hib3JzID0gZmFsc2UpOwoKICAg ICAgcHVibGljOgoKCgoKCiAgICAgICAgc3RhdGljIHZvaWQgZGVjbGFyZV9wYXJhbWV0ZXJzIChQ YXJhbWV0ZXJIYW5kbGVyICZwcm0pOwojIDU3NSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICAgICAgdm9pZCBw YXJzZV9wYXJhbWV0ZXJzIChQYXJhbWV0ZXJIYW5kbGVyICZwcm0pOwoKCgoKCgoKICAgICAgICB1 bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uICgpIGNvbnN0OwogICAgfTsKCgoKCgogICAg c3RydWN0IFVjZEZsYWdzCiAgICB7CiMgNjA0ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9k ZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgICAgICBib29sIHdy aXRlX3ByZWFtYmxlOwoKCgoKICAgICAgICBVY2RGbGFncyAoY29uc3QgYm9vbCB3cml0ZV9wcmVh bWJsZSA9IHRydWUpOwoKCgoKCgogICAgICAgIHN0YXRpYyB2b2lkIGRlY2xhcmVfcGFyYW1ldGVy cyAoUGFyYW1ldGVySGFuZGxlciAmcHJtKTsKIyA2MjcgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5J SS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgICAgIHZv aWQgcGFyc2VfcGFyYW1ldGVycyAoUGFyYW1ldGVySGFuZGxlciAmcHJtKTsKIyA2NDUgIi9ob21l L2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRf YmFzZS5oIgogICAgICAgIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3VtcHRpb24gKCkgY29uc3Q7 CiAgICB9OwoKCgoKCgogICAgc3RydWN0IEdudXBsb3RGbGFncwogICAgewogICAgICBwcml2YXRl OgojIDY2NCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUv YmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICAgICAgaW50IGR1bW15OwoKICAgICAgcHVibGljOgoK CgoKCiAgICAgICAgc3RhdGljIHZvaWQgZGVjbGFyZV9wYXJhbWV0ZXJzIChQYXJhbWV0ZXJIYW5k bGVyICZwcm0pOwojIDY4MyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNl L2luY2x1ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICAgICAgdm9pZCBwYXJzZV9wYXJhbWV0 ZXJzIChQYXJhbWV0ZXJIYW5kbGVyICZwcm0pOwojIDcwMSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFs LklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICAgICAg dW5zaWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlvbiAoKSBjb25zdDsKICAgIH07CiMgNzExICIv aG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFf b3V0X2Jhc2UuaCIKICAgIHN0cnVjdCBQb3ZyYXlGbGFncwogICAgewoKCgoKCgogICAgICAgIGJv b2wgc21vb3RoOwoKCgoKCgoKICAgICAgICBib29sIGJpY3ViaWNfcGF0Y2g7CiMgNzM3ICIvaG9t ZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0 X2Jhc2UuaCIKICAgICAgICBib29sIGV4dGVybmFsX2RhdGE7CgoKCgogICAgICAgIFBvdnJheUZs YWdzIChjb25zdCBib29sIHNtb290aCA9IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICBjb25z dCBib29sIGJpY3ViaWNfcGF0Y2ggPSBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Ym9vbCBleHRlcm5hbF9kYXRhID0gZmFsc2UpOwoKCgoKCgogICAgICAgIHN0YXRpYyB2b2lkIGRl Y2xhcmVfcGFyYW1ldGVycyAoUGFyYW1ldGVySGFuZGxlciAmcHJtKTsKIyA3NjIgIi9ob21lL2Jh bmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFz ZS5oIgogICAgICAgIHZvaWQgcGFyc2VfcGFyYW1ldGVycyAoUGFyYW1ldGVySGFuZGxlciAmcHJt KTsKIyA3ODAgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRl L2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgICAgIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3Vt cHRpb24gKCkgY29uc3Q7CiAgICB9OwoKCgoKCgoKICAgIHN0cnVjdCBFcHNGbGFncwogICAgewoj IDgwMiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFz ZS9kYXRhX291dF9iYXNlLmgiCiAgICAgICAgdW5zaWduZWQgaW50IGhlaWdodF92ZWN0b3I7CgoK CgoKCgogICAgICAgIHVuc2lnbmVkIGludCBjb2xvcl92ZWN0b3I7CiMgODE5ICIvaG9tZS9iYW5n ZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2Uu aCIKICAgICAgICBlbnVtIFNpemVUeXBlIHsKICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0CiAg ICAgICAgfTsKCgoKCiAgICAgICAgU2l6ZVR5cGUgc2l6ZV90eXBlOwojIDg0MCAiL2hvbWUvYmFu Z2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRhX291dF9iYXNl LmgiCiAgICAgICAgdW5zaWduZWQgaW50IHNpemU7CgoKCgoKICAgICAgICBkb3VibGUgbGluZV93 aWR0aDsKIyA4NTUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs dWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgICAgIGRvdWJsZSBhemltdXRfYW5nbGU7CiMg ODg3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNl L2RhdGFfb3V0X2Jhc2UuaCIKICAgICAgICBkb3VibGUgdHVybl9hbmdsZTsKIyA5MDUgIi9ob21l L2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRf YmFzZS5oIgogICAgICAgIGRvdWJsZSB6X3NjYWxpbmc7CiMgOTE1ICIvaG9tZS9iYW5nZXJ0aC9w L2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAg ICAgICBib29sIGRyYXdfbWVzaDsKIyA5NDEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2Rl YWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgICAgIGJvb2wgZHJh d19jZWxsczsKIyA5NTQgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9p bmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgICAgIGJvb2wgc2hhZGVfY2VsbHM7CgoK CgoKICAgICAgICBzdHJ1Y3QgUmdiVmFsdWVzCiAgICAgICAgewogICAgICAgICAgICBmbG9hdCBy ZWQ7CiAgICAgICAgICAgIGZsb2F0IGdyZWVuOwogICAgICAgICAgICBmbG9hdCBibHVlOwojIDk3 NCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9k YXRhX291dF9iYXNlLmgiCiAgICAgICAgICAgIGJvb2wgaXNfZ3JleSAoKSBjb25zdDsKICAgICAg ICB9OwojIDk4OCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1 ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICAgICAgdHlwZWRlZiBSZ2JWYWx1ZXMgKCpDb2xv ckZ1bmN0aW9uKSAoY29uc3QgZG91YmxlIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBtaW5fdmFsdWUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIG1heF92YWx1ZSk7CiMg OTk5ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNl L2RhdGFfb3V0X2Jhc2UuaCIKICAgICAgICBDb2xvckZ1bmN0aW9uIGNvbG9yX2Z1bmN0aW9uOwoj IDEwMTQgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jh c2UvZGF0YV9vdXRfYmFzZS5oIgogICAgICAgIHN0YXRpYyBSZ2JWYWx1ZXMgZGVmYXVsdF9jb2xv cl9mdW5jdGlvbiAoY29uc3QgZG91YmxlIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIG1pbl92YWx1ZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBtYXhf dmFsdWUpOwojIDEwMjcgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9p bmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgICAgIHN0YXRpYyBSZ2JWYWx1ZXMgZ3Jl eV9zY2FsZV9jb2xvcl9mdW5jdGlvbiAoY29uc3QgZG91YmxlIHZhbHVlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIG1pbl92 YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGRvdWJsZSBtYXhfdmFsdWUpOwojIDEwNDUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5J SS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgICAgIHN0 YXRpYyBSZ2JWYWx1ZXMgcmV2ZXJzZV9ncmV5X3NjYWxlX2NvbG9yX2Z1bmN0aW9uIChjb25zdCBk b3VibGUgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBtaW5fdmFsdWUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBt YXhfdmFsdWUpOwoKCgoKICAgICAgICBFcHNGbGFncyAoY29uc3QgdW5zaWduZWQgaW50IGhlaWdo dF92ZWN0b3IgPSAwLAogICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgY29sb3Jf dmVjdG9yID0gMCwKICAgICAgICAgICAgICAgICAgY29uc3QgU2l6ZVR5cGUgc2l6ZV90eXBlID0g d2lkdGgsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplID0gMzAwLAog ICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgbGluZV93aWR0aCA9IDAuNSwKICAgICAgICAg ICAgICAgICAgY29uc3QgZG91YmxlIGF6aW11dF9hbmdsZSA9IDYwLAogICAgICAgICAgICAgICAg ICBjb25zdCBkb3VibGUgdHVybl9hbmdsZSA9IDMwLAogICAgICAgICAgICAgICAgICBjb25zdCBk b3VibGUgel9zY2FsaW5nID0gMS4wLAogICAgICAgICAgICAgICAgICBjb25zdCBib29sIGRyYXdf bWVzaCA9IHRydWUsCiAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgZHJhd19jZWxscyA9IHRy dWUsCiAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgc2hhZGVfY2VsbHMgPSB0cnVlLAogICAg ICAgICAgICAgICAgICBjb25zdCBDb2xvckZ1bmN0aW9uIGNvbG9yX2Z1bmN0aW9uPSAmZGVmYXVs dF9jb2xvcl9mdW5jdGlvbik7CiMgMTA3NCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh bC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICAgICAgc3RhdGljIHZv aWQgZGVjbGFyZV9wYXJhbWV0ZXJzIChQYXJhbWV0ZXJIYW5kbGVyICZwcm0pOwojIDEwODUgIi9o b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9v dXRfYmFzZS5oIgogICAgICAgIHZvaWQgcGFyc2VfcGFyYW1ldGVycyAoUGFyYW1ldGVySGFuZGxl ciAmcHJtKTsKIyAxMTAzICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2Uv aW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgICAgICB1bnNpZ25lZCBpbnQgbWVtb3J5 X2NvbnN1bXB0aW9uICgpIGNvbnN0OwogICAgfTsKCgoKCgoKICAgIHN0cnVjdCBHbXZGbGFncwog ICAgewogICAgICBwcml2YXRlOgojIDExMjIgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2Rl YWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgICAgIGludCBkdW1t eTsKCiAgICAgIHB1YmxpYzoKCgoKCgogICAgICAgIHN0YXRpYyB2b2lkIGRlY2xhcmVfcGFyYW1l dGVycyAoUGFyYW1ldGVySGFuZGxlciAmcHJtKTsKIyAxMTQxICIvaG9tZS9iYW5nZXJ0aC9wL2Rl YWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgICAg ICB2b2lkIHBhcnNlX3BhcmFtZXRlcnMgKFBhcmFtZXRlckhhbmRsZXIgJnBybSk7CiMgMTE1OSAi L2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRh X291dF9iYXNlLmgiCiAgICAgICAgdW5zaWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlvbiAoKSBj b25zdDsKICAgIH07CgoKCgoKCiAgICBzdHJ1Y3QgVGVjcGxvdEZsYWdzCiAgICB7CgogICAgICBw dWJsaWM6CiMgMTE4MSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2lu Y2x1ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICAgICAgY29uc3QgY2hhciogdGVjcGxvdF9i aW5hcnlfZmlsZV9uYW1lOwoKCgoKICAgICAgICBUZWNwbG90RmxhZ3MgKGNvbnN0IGNoYXIqIHRl Y3Bsb3RfYmluYXJ5X2ZpbGVfbmFtZSA9IF9fbnVsbCk7CgoKCgoKCiAgICAgICAgc3RhdGljIHZv aWQgZGVjbGFyZV9wYXJhbWV0ZXJzIChQYXJhbWV0ZXJIYW5kbGVyICZwcm0pOwojIDEyMDQgIi9o b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9v dXRfYmFzZS5oIgogICAgICAgIHZvaWQgcGFyc2VfcGFyYW1ldGVycyAoUGFyYW1ldGVySGFuZGxl ciAmcHJtKTsKIyAxMjIyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2Uv aW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgICAgICB1bnNpZ25lZCBpbnQgbWVtb3J5 X2NvbnN1bXB0aW9uICgpIGNvbnN0OwogICAgfTsKCgoKCgoKCiAgICBzdHJ1Y3QgVnRrRmxhZ3MK ICAgIHsKICAgICAgcHJpdmF0ZToKIyAxMjQyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9k ZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgICAgICBpbnQgZHVt bXk7CgogICAgICBwdWJsaWM6CgoKCgoKICAgICAgICBzdGF0aWMgdm9pZCBkZWNsYXJlX3BhcmFt ZXRlcnMgKFBhcmFtZXRlckhhbmRsZXIgJnBybSk7CiMgMTI2MSAiL2hvbWUvYmFuZ2VydGgvcC9k ZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICAg ICAgdm9pZCBwYXJzZV9wYXJhbWV0ZXJzIChQYXJhbWV0ZXJIYW5kbGVyICZwcm0pOwojIDEyNzkg Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0 YV9vdXRfYmFzZS5oIgogICAgICAgIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3VtcHRpb24gKCkg Y29uc3Q7CiAgICB9OwojIDEyODkgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkv YmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgdGVtcGxhdGUgPGludCBkaW0s IGludCBzcGFjZWRpbT4KICAgIHN0YXRpYyB2b2lkIHdyaXRlX2R4IChjb25zdCBzdGQ6OnZlY3Rv cjxQYXRjaDxkaW0sc3BhY2VkaW0+ID4gJnBhdGNoZXMsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZkYXRhX25hbWVzLAogICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IERYRmxhZ3MgJmZsYWdzLAogICAgICAgICAgICAgICAgICAg ICAgICAgIHN0ZDo6b3N0cmVhbSAmb3V0KTsKIyAxMzAyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwu SUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgIHRlbXBs YXRlIDxpbnQgZGltLCBpbnQgc3BhY2VkaW0+CiAgICBzdGF0aWMgdm9pZCB3cml0ZV91Y2QgKGNv bnN0IHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPiAmcGF0Y2hlcywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZkYXRhX25h bWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVY2RGbGFncyAmZmxhZ3MsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbSAmb3V0KTsKIyAxMzE1ICIvaG9t ZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0 X2Jhc2UuaCIKICAgIHRlbXBsYXRlIDxpbnQgZGltLCBpbnQgc3BhY2VkaW0+CiAgICBzdGF0aWMg dm9pZCB3cml0ZV9nbnVwbG90IChjb25zdCBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ ID4gJnBhdGNoZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZl Y3RvcjxzdGQ6OnN0cmluZz4gJmRhdGFfbmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBHbnVwbG90RmxhZ3MgJmZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RkOjpvc3RyZWFtICZvdXQpOwojIDEzMjggIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5J SS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgdGVtcGxh dGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4KICAgIHN0YXRpYyB2b2lkIHdyaXRlX3BvdnJheSAo Y29uc3Qgc3RkOjp2ZWN0b3I8UGF0Y2g8ZGltLHNwYWNlZGltPiA+ICZwYXRjaGVzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gJmRh dGFfbmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBvdnJheUZsYWdz ICZmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtICZvdXQp OwojIDEzNDEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRl L2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRp bT4KICAgIHN0YXRpYyB2b2lkIHdyaXRlX2VwcyAoY29uc3Qgc3RkOjp2ZWN0b3I8UGF0Y2g8ZGlt LHNwYWNlZGltPiA+ICZwYXRjaGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gJmRhdGFfbmFtZXMsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IEVwc0ZsYWdzICZmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RkOjpvc3RyZWFtICZvdXQpOwojIDEzNTQgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2Rl YWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgdGVtcGxhdGUgPGlu dCBkaW0sIGludCBzcGFjZWRpbT4KICAgIHN0YXRpYyB2b2lkIHdyaXRlX2dtdiAoY29uc3Qgc3Rk Ojp2ZWN0b3I8UGF0Y2g8ZGltLHNwYWNlZGltPiA+ICZwYXRjaGVzLAogICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gJmRhdGFfbmFtZXMsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdtdkZsYWdzICZmbGFncywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtICZvdXQpOwojIDEzNjcgIi9ob21lL2Jhbmdl cnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5o IgogICAgdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4KICAgIHN0YXRpYyB2b2lkIHdy aXRlX3RlY3Bsb3QgKGNvbnN0IHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPiAmcGF0 Y2hlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0 ZDo6c3RyaW5nPiAmZGF0YV9uYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFRlY3Bsb3RGbGFncyAmZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dGQ6Om9zdHJlYW0gJm91dCk7CiMgMTM4OCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh bC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICB0ZW1wbGF0ZSA8aW50 IGRpbSwgaW50IHNwYWNlZGltPgogICAgc3RhdGljIHZvaWQgd3JpdGVfdGVjcGxvdF9iaW5hcnkg KGNvbnN0IHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPiAmcGF0Y2hlcywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0 cmluZz4gJmRhdGFfbmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgVGVjcGxvdEZsYWdzICZmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdGQ6Om9zdHJlYW0gJm91dCk7CiMgMTQwMSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFs LklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICB0ZW1w bGF0ZSA8aW50IGRpbSwgaW50IHNwYWNlZGltPgogICAgc3RhdGljIHZvaWQgd3JpdGVfdnRrIChj b25zdCBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ID4gJnBhdGNoZXMsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAmZGF0YV9u YW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVnRrRmxhZ3MgJmZsYWdzLAog ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW0gJm91dCk7CiMgMTQyMyAiL2hv bWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRhX291 dF9iYXNlLmgiCiAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlvbiAoKTsK CgoKCiAgICBjbGFzcyBFeGNVbmV4cGVjdGVkTnVtYmVyT2ZEYXRhc2V0cyA6IHB1YmxpYyBFeGNl cHRpb25CYXNlIHsgcHVibGljOiBFeGNVbmV4cGVjdGVkTnVtYmVyT2ZEYXRhc2V0cyAoY29uc3Qg aW50IGExLCBjb25zdCBpbnQgYTIpIDogYXJnMSAoYTEpLCBhcmcyKGEyKSB7fTsgdmlydHVhbCB+ RXhjVW5leHBlY3RlZE51bWJlck9mRGF0YXNldHMgKCkgdGhyb3cgKCkge307IHZpcnR1YWwgdm9p ZCBQcmludEluZm8gKHN0ZDo6b3N0cmVhbSAmb3V0KSBjb25zdCB7IG91dCA8PCAiVGhlIG51bWJl ciBvZiBkYXRhIHNldHMgb24gdGhpcyBwYXRjaCBpcyAiIDw8IGFyZzEgPDwgIiwgYnV0IHdlIGV4 cGVjdGVkICIgPDwgYXJnMiA8PCBzdGQ6OmVuZGw7IH07IHByaXZhdGU6IGNvbnN0IGludCBhcmcx OyBjb25zdCBpbnQgYXJnMjsgfTsKCgoKCgoKCiAgICBjbGFzcyBFeGNJbnZhbGlkRGF0YXNldFNp emUgOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7IHB1YmxpYzogRXhjSW52YWxpZERhdGFzZXRTaXpl IChjb25zdCBpbnQgYTEsIGNvbnN0IGludCBhMikgOiBhcmcxIChhMSksIGFyZzIoYTIpIHt9OyB2 aXJ0dWFsIH5FeGNJbnZhbGlkRGF0YXNldFNpemUgKCkgdGhyb3cgKCkge307IHZpcnR1YWwgdm9p ZCBQcmludEluZm8gKHN0ZDo6b3N0cmVhbSAmb3V0KSBjb25zdCB7IG91dCA8PCAiVGhlIG51bWJl ciBvZiBwb2ludHMgaW4gdGhpcyBkYXRhIHNldCBpcyAiIDw8IGFyZzEgPDwgIiwgYnV0IHdlIGV4 cGVjdGVkICIgPDwgYXJnMiA8PCAiIGluIGVhY2ggc3BhY2UgZGlyZWN0aW9uLiIgPDwgc3RkOjpl bmRsOyB9OyBwcml2YXRlOiBjb25zdCBpbnQgYXJnMTsgY29uc3QgaW50IGFyZzI7IH07CgoKCgoK CiAgICBjbGFzcyBFeGNJbnZhbGlkVmVjdG9yTnVtYmVyIDogcHVibGljIEV4Y2VwdGlvbkJhc2Ug eyBwdWJsaWM6IEV4Y0ludmFsaWRWZWN0b3JOdW1iZXIgKGNvbnN0IGludCBhMSwgY29uc3QgaW50 IGEyKSA6IGFyZzEgKGExKSwgYXJnMihhMikge307IHZpcnR1YWwgfkV4Y0ludmFsaWRWZWN0b3JO dW1iZXIgKCkgdGhyb3cgKCkge307IHZpcnR1YWwgdm9pZCBQcmludEluZm8gKHN0ZDo6b3N0cmVh bSAmb3V0KSBjb25zdCB7IG91dCA8PCAiVGhlIG51bWJlciAiIDw8IGFyZzEgPDwgIiBvZiB0aGUg dmVjdG9yIHRvIGJlIHVzZWQgZm9yICIgPDwgInRoaXMgaW5mb3JtYXRpb24gaXMgaW52YWxpZCwg c2luY2UgdGhlcmUgYXJlIG9ubHkgIiA8PCBhcmcyIDw8ICIgZGF0YSBzZXRzLiIgPDwgc3RkOjpl bmRsOyB9OyBwcml2YXRlOiBjb25zdCBpbnQgYXJnMTsgY29uc3QgaW50IGFyZzI7IH07CgoKCgoK CgogICAgY2xhc3MgRXhjVW5leHBlY3RlZE51bWJlck9mU3ViZGl2aXNpb25zIDogcHVibGljIEV4 Y2VwdGlvbkJhc2UgeyBwdWJsaWM6IEV4Y1VuZXhwZWN0ZWROdW1iZXJPZlN1YmRpdmlzaW9ucyAo Y29uc3QgaW50IGExLCBjb25zdCBpbnQgYTIpIDogYXJnMSAoYTEpLCBhcmcyKGEyKSB7fTsgdmly dHVhbCB+RXhjVW5leHBlY3RlZE51bWJlck9mU3ViZGl2aXNpb25zICgpIHRocm93ICgpIHt9OyB2 aXJ0dWFsIHZvaWQgUHJpbnRJbmZvIChzdGQ6Om9zdHJlYW0gJm91dCkgY29uc3QgeyBvdXQgPDwg IlRoZSBudW1iZXIgb2Ygc3ViZGl2aXNpb25zIGlzICIgPDwgYXJnMSA8PCAiLCBidXQgd2UgZXhj ZXB0ZWQgIiA8PCBhcmcyPDwgIiBmb3IgYmljdWJpYyBwYXRjaCIgPDwgc3RkOjplbmRsOyB9OyBw cml2YXRlOiBjb25zdCBpbnQgYXJnMTsgY29uc3QgaW50IGFyZzI7IH07CgoKCgoKCiAgICBjbGFz cyBFeGNOb1BhdGNoZXMgOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7fTsKCgoKICAgIGNsYXNzIEV4 Y0lPIDogcHVibGljIEV4Y2VwdGlvbkJhc2Uge307CgoKCiAgICBjbGFzcyBFeGNUZWNwbG90QVBJ RXJyb3IgOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7fTsKCgoKICAgIGNsYXNzIEV4Y0Vycm9yT3Bl bmluZ1RlY3Bsb3RGaWxlIDogcHVibGljIEV4Y2VwdGlvbkJhc2UgeyBwdWJsaWM6IEV4Y0Vycm9y T3BlbmluZ1RlY3Bsb3RGaWxlIChjb25zdCBjaGFyKiBhMSkgOiBhcmcxIChhMSkge307IHZpcnR1 YWwgfkV4Y0Vycm9yT3BlbmluZ1RlY3Bsb3RGaWxlICgpIHRocm93ICgpIHt9OyB2aXJ0dWFsIHZv aWQgUHJpbnRJbmZvIChzdGQ6Om9zdHJlYW0gJm91dCkgY29uc3QgeyBvdXQgPDwgIlRoZXJlIHdh cyBhbiBlcnJvciBvcGVuaW5nIFRlY3Bsb3QgZmlsZSAiIDw8IGFyZzEgPDwgIiBmb3Igb3V0cHV0 IiA8PCBzdGQ6OmVuZGw7IH07IHByaXZhdGU6IGNvbnN0IGNoYXIqIGFyZzE7IH07CgoKCgoKICBw cml2YXRlOgojIDE0ODYgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9p bmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgY2xhc3MgRXBzQ2VsbDJkCiAgICB7CiAg ICAgIHB1YmxpYzoKCgoKCiAgICAgICAgUG9pbnQ8Mj4gdmVydGljZXNbNF07CgoKCgoKCgogICAg ICAgIGZsb2F0IGNvbG9yX3ZhbHVlOwoKCgoKCgoKICAgICAgICBmbG9hdCBkZXB0aDsKCgoKCgog ICAgICAgIGJvb2wgb3BlcmF0b3IgPCAoY29uc3QgRXBzQ2VsbDJkICYpIGNvbnN0OwogICAgfTsK IyAxNTM5ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9i YXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgIHRlbXBsYXRlIDxpbnQgZGltLCBpbnQgc3BhY2VkaW0+ CiAgICBzdGF0aWMgdm9pZAogICAgd3JpdGVfZ212X3Jlb3JkZXJfZGF0YV92ZWN0b3JzIChjb25z dCBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ID4gJnBhdGNoZXMsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlPDIsZG91YmxlPiAmZGF0YV92ZWN0b3JzKTsK Cn07CiMgMTY2MSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1 ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCnRlbXBsYXRlIDxpbnQgZGltLCBpbnQgc3BhY2VkaW09 ZGltPgpjbGFzcyBEYXRhT3V0SW50ZXJmYWNlIDogcHJpdmF0ZSBEYXRhT3V0QmFzZQp7CiAgcHVi bGljOgoKCgoKCiAgICBlbnVtIE91dHB1dEZvcm1hdCB7IGRlZmF1bHRfZm9ybWF0LCBkeCwgdWNk LCBnbnVwbG90LCBwb3ZyYXksIGVwcywgZ212LCB0ZWNwbG90LCB0ZWNwbG90X2JpbmFyeSwgdnRr IH07CgoKCgoKCgogICAgdm9pZCB3cml0ZV9keCAoc3RkOjpvc3RyZWFtICZvdXQpIGNvbnN0OwoK CgoKCgoKICAgIHZvaWQgd3JpdGVfdWNkIChzdGQ6Om9zdHJlYW0gJm91dCkgY29uc3Q7CgoKCgoK CgogICAgdm9pZCB3cml0ZV9nbnVwbG90IChzdGQ6Om9zdHJlYW0gJm91dCkgY29uc3Q7CgoKCgoK CgogICAgdm9pZCB3cml0ZV9wb3ZyYXkgKHN0ZDo6b3N0cmVhbSAmb3V0KSBjb25zdDsKCgoKCgoK CiAgICB2b2lkIHdyaXRlX2VwcyAoc3RkOjpvc3RyZWFtICZvdXQpIGNvbnN0OwoKCgoKCgoKICAg IHZvaWQgd3JpdGVfZ212IChzdGQ6Om9zdHJlYW0gJm91dCkgY29uc3Q7CiMgMTcyNyAiL2hvbWUv YmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRhX291dF9i YXNlLmgiCiAgICB2b2lkIHdyaXRlX3RlY3Bsb3QgKHN0ZDo6b3N0cmVhbSAmb3V0KSBjb25zdDsK IyAxNzM3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9i YXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgIHZvaWQgd3JpdGVfdGVjcGxvdF9iaW5hcnkgKHN0ZDo6 b3N0cmVhbSAmb3V0KSBjb25zdDsKCgoKCgoKCiAgICB2b2lkIHdyaXRlX3Z0ayAoc3RkOjpvc3Ry ZWFtICZvdXQpIGNvbnN0OwojIDE3NjEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwu SUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgdm9pZCB3cml0ZSAoc3Rk Ojpvc3RyZWFtICZvdXQsCiAgICAgICAgICAgICAgICBjb25zdCBPdXRwdXRGb3JtYXQgb3V0cHV0 X2Zvcm1hdCA9IGRlZmF1bHRfZm9ybWF0KSBjb25zdDsKIyAxNzcxICIvaG9tZS9iYW5nZXJ0aC9w L2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAg IHZvaWQgc2V0X2RlZmF1bHRfZm9ybWF0IChjb25zdCBPdXRwdXRGb3JtYXQgZGVmYXVsdF9mb3Jt YXQpOwoKCgoKCiAgICB2b2lkIHNldF9mbGFncyAoY29uc3QgRFhGbGFncyAmZHhfZmxhZ3MpOwoK CgoKCiAgICB2b2lkIHNldF9mbGFncyAoY29uc3QgVWNkRmxhZ3MgJnVjZF9mbGFncyk7CgoKCgoK ICAgIHZvaWQgc2V0X2ZsYWdzIChjb25zdCBHbnVwbG90RmxhZ3MgJmdudXBsb3RfZmxhZ3MpOwoK CgoKCiAgICB2b2lkIHNldF9mbGFncyAoY29uc3QgUG92cmF5RmxhZ3MgJnBvdnJheV9mbGFncyk7 CgoKCgoKICAgIHZvaWQgc2V0X2ZsYWdzIChjb25zdCBFcHNGbGFncyAmZXBzX2ZsYWdzKTsKCgoK CgogICAgdm9pZCBzZXRfZmxhZ3MgKGNvbnN0IEdtdkZsYWdzICZnbXZfZmxhZ3MpOwoKCgoKCiAg ICB2b2lkIHNldF9mbGFncyAoY29uc3QgVGVjcGxvdEZsYWdzICZ0ZWNwbG90X2ZsYWdzKTsKCgoK CgogICAgdm9pZCBzZXRfZmxhZ3MgKGNvbnN0IFZ0a0ZsYWdzICZ2dGtfZmxhZ3MpOwojIDE4NDMg Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0 YV9vdXRfYmFzZS5oIgogICAgc3RkOjpzdHJpbmcgZGVmYXVsdF9zdWZmaXggKGNvbnN0IE91dHB1 dEZvcm1hdCBvdXRwdXRfZm9ybWF0ID0gZGVmYXVsdF9mb3JtYXQpIGNvbnN0OwojIDE4NzMgIi9o b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9v dXRfYmFzZS5oIgogICAgc3RhdGljIE91dHB1dEZvcm1hdCBwYXJzZV9vdXRwdXRfZm9ybWF0IChj b25zdCBzdGQ6OnN0cmluZyAmZm9ybWF0X25hbWUpOwojIDE4ODMgIi9ob21lL2JhbmdlcnRoL3Av ZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAg c3RhdGljIHN0ZDo6c3RyaW5nIGdldF9vdXRwdXRfZm9ybWF0X25hbWVzICgpOwojIDE5MTEgIi9o b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9v dXRfYmFzZS5oIgogICAgc3RhdGljIHZvaWQgZGVjbGFyZV9wYXJhbWV0ZXJzIChQYXJhbWV0ZXJI YW5kbGVyICZwcm0pOwojIDE5MjUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkv YmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgdm9pZCBwYXJzZV9wYXJhbWV0 ZXJzIChQYXJhbWV0ZXJIYW5kbGVyICZwcm0pOwojIDE5NDMgIi9ob21lL2JhbmdlcnRoL3AvZGVh bC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgdW5z aWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlvbiAoKSBjb25zdDsKCgoKCiAgICBjbGFzcyBFeGNJ bnZhbGlkU3RhdGUgOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7fTsKCiAgcHJvdGVjdGVkOgojIDE5 NjQgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2Uv ZGF0YV9vdXRfYmFzZS5oIgogICAgdmlydHVhbCBjb25zdCBzdGQ6OnZlY3Rvcjx0eXBlbmFtZSBE YXRhT3V0QmFzZTo6UGF0Y2g8ZGltLHNwYWNlZGltPiA+ICYKICAgIGdldF9wYXRjaGVzICgpIGNv bnN0ID0gMDsKIyAxOTc0ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2Uv aW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3Rk OjpzdHJpbmc+IGdldF9kYXRhc2V0X25hbWVzICgpIGNvbnN0ID0gMDsKCiAgcHJpdmF0ZToKIyAx OTg1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNl L2RhdGFfb3V0X2Jhc2UuaCIKICAgIE91dHB1dEZvcm1hdCBkZWZhdWx0X2ZtdDsKCgoKCgoKCiAg ICBEWEZsYWdzIGR4X2ZsYWdzOwoKCgoKCgoKICAgIFVjZEZsYWdzIHVjZF9mbGFnczsKCgoKCgoK CiAgICBHbnVwbG90RmxhZ3MgZ251cGxvdF9mbGFnczsKCgoKCgoKCiAgICBQb3ZyYXlGbGFncyBw b3ZyYXlfZmxhZ3M7CiMgMjAyNiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9i YXNlL2luY2x1ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICBFcHNGbGFncyBlcHNfZmxhZ3M7 CiMgMjAzNSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUv YmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICBHbXZGbGFncyBnbXZfZmxhZ3M7CiMgMjA0NCAiL2hv bWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRhX291 dF9iYXNlLmgiCiAgICBUZWNwbG90RmxhZ3MgdGVjcGxvdF9mbGFnczsKIyAyMDUzICIvaG9tZS9i YW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jh c2UuaCIKICAgIFZ0a0ZsYWdzIHZ0a19mbGFnczsKfTsKCgoKCgppbmxpbmUKYm9vbApEYXRhT3V0 QmFzZTo6RXBzRmxhZ3M6OlJnYlZhbHVlczo6aXNfZ3JleSAoKSBjb25zdAp7CiAgcmV0dXJuIChy ZWQgPT0gZ3JlZW4pICYmIChyZWQgPT0gYmx1ZSk7Cn07CiMgMTYgInNvdXJjZS9kYXRhX291dF9i YXNlLmNjIiAyCiMgMSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2lu Y2x1ZGUvYmFzZS9wYXJhbWV0ZXJfaGFuZGxlci5oIiAxCiMgMjAgIi9ob21lL2JhbmdlcnRoL3Av ZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIK IyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL21hcCIg MSAzCiMgNjUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMv bWFwIiAzCgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8z LjMvYml0cy9zdGxfdHJlZS5oIiAxIDMKIyA5MSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMt cHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF90cmVlLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAg ZW51bSBfUmJfdHJlZV9jb2xvciB7IF9NX3JlZCA9IGZhbHNlLCBfTV9ibGFjayA9IHRydWUgfTsK CiAgc3RydWN0IF9SYl90cmVlX25vZGVfYmFzZQogIHsKICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9k ZV9iYXNlKiBfQmFzZV9wdHI7CgogICAgX1JiX3RyZWVfY29sb3IgX01fY29sb3I7CiAgICBfQmFz ZV9wdHIgX01fcGFyZW50OwogICAgX0Jhc2VfcHRyIF9NX2xlZnQ7CiAgICBfQmFzZV9wdHIgX01f cmlnaHQ7CgogICAgc3RhdGljIF9CYXNlX3B0cgogICAgX1NfbWluaW11bShfQmFzZV9wdHIgX194 KQogICAgewogICAgICB3aGlsZSAoX194LT5fTV9sZWZ0ICE9IDApIF9feCA9IF9feC0+X01fbGVm dDsKICAgICAgcmV0dXJuIF9feDsKICAgIH0KCiAgICBzdGF0aWMgX0Jhc2VfcHRyCiAgICBfU19t YXhpbXVtKF9CYXNlX3B0ciBfX3gpCiAgICB7CiAgICAgIHdoaWxlIChfX3gtPl9NX3JpZ2h0ICE9 IDApIF9feCA9IF9feC0+X01fcmlnaHQ7CiAgICAgIHJldHVybiBfX3g7CiAgICB9CiAgfTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KICAgIHN0cnVjdCBfUmJfdHJlZV9ub2RlIDogcHVibGlj IF9SYl90cmVlX25vZGVfYmFzZQogICAgewogICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1Zh bD4qIF9MaW5rX3R5cGU7CiAgICAgIF9WYWwgX01fdmFsdWVfZmllbGQ7CiAgICB9OwoKICBzdHJ1 Y3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvcgogIHsKICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9i YXNlOjpfQmFzZV9wdHIgX0Jhc2VfcHRyOwogICAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJh dG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVu Y2VfdHlwZTsKCiAgICBfQmFzZV9wdHIgX01fbm9kZTsKCiAgICB2b2lkCiAgICBfTV9pbmNyZW1l bnQoKQogICAgewogICAgICBpZiAoX01fbm9kZS0+X01fcmlnaHQgIT0gMCkKICAgICAgICB7CiAg ICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fcmlnaHQ7CiAgICAgICAgICB3aGlsZSAoX01f bm9kZS0+X01fbGVmdCAhPSAwKQogICAgICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fbGVm dDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfQmFzZV9wdHIgX195 ID0gX01fbm9kZS0+X01fcGFyZW50OwogICAgICAgICAgd2hpbGUgKF9NX25vZGUgPT0gX195LT5f TV9yaWdodCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAg ICAgICAgICAgX195ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlm IChfTV9ub2RlLT5fTV9yaWdodCAhPSBfX3kpCiAgICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAg ICAgICAgfQogICAgfQoKICAgIHZvaWQKICAgIF9NX2RlY3JlbWVudCgpCiAgICB7CiAgICAgIGlm IChfTV9ub2RlLT5fTV9jb2xvciA9PSBfTV9yZWQKICAgICAgICAgICYmIF9NX25vZGUtPl9NX3Bh cmVudC0+X01fcGFyZW50ID09IF9NX25vZGUpCiAgICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9N X3JpZ2h0OwogICAgICBlbHNlIGlmIChfTV9ub2RlLT5fTV9sZWZ0ICE9IDApCiAgICAgICAgewog ICAgICAgICAgX0Jhc2VfcHRyIF9feSA9IF9NX25vZGUtPl9NX2xlZnQ7CiAgICAgICAgICB3aGls ZSAoX195LT5fTV9yaWdodCAhPSAwKQogICAgICAgICAgICBfX3kgPSBfX3ktPl9NX3JpZ2h0Owog ICAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAg ICAgICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01fcGFyZW50OwogICAgICAgICAgd2hp bGUgKF9NX25vZGUgPT0gX195LT5fTV9sZWZ0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg X01fbm9kZSA9IF9feTsKICAgICAgICAgICAgICBfX3kgPSBfX3ktPl9NX3BhcmVudDsKICAgICAg ICAgICAgfQogICAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICB9CiAgICB9CiAgfTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KICAg IHN0cnVjdCBfUmJfdHJlZV9pdGVyYXRvciA6IHB1YmxpYyBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9y CiAgICB7CiAgICAgIHR5cGVkZWYgX1ZhbCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIF9SZWYg cmVmZXJlbmNlOwogICAgICB0eXBlZGVmIF9QdHIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfUmJf dHJlZV9pdGVyYXRvcjxfVmFsLCBfVmFsJiwgX1ZhbCo+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVm IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIGNvbnN0IF9WYWwmLCBjb25zdCBfVmFsKj4KICAgICAg Y29uc3RfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1Jl ZiwgX1B0cj4gX1NlbGY7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFsPiogX0xpbmtf dHlwZTsKCiAgICAgIF9SYl90cmVlX2l0ZXJhdG9yKCkge30KICAgICAgX1JiX3RyZWVfaXRlcmF0 b3IoX0xpbmtfdHlwZSBfX3gpIHsgX01fbm9kZSA9IF9feDsgfQogICAgICBfUmJfdHJlZV9pdGVy YXRvcihjb25zdCBpdGVyYXRvciYgX19pdCkgeyBfTV9ub2RlID0gX19pdC5fTV9ub2RlOyB9Cgog ICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX0xpbmtfdHlw ZShfTV9ub2RlKS0+X01fdmFsdWVfZmllbGQ7IH0KCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0 b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogICAgICBfU2VsZiYKICAg ICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAgICAgICBfTV9pbmNyZW1lbnQoKTsKICAgICAgICBy ZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIF9TZWxmCiAgICAgIG9wZXJhdG9yKysoaW50KQog ICAgICB7CiAgICAgICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICAgICBfTV9pbmNyZW1lbnQo KTsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIF9TZWxmJgogICAgICBvcGVy YXRvci0tKCkgeyBfTV9kZWNyZW1lbnQoKTsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfU2VsZgog ICAgICBvcGVyYXRvci0tKGludCkKICAgICAgewogICAgICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7 CiAgICAgICAgX01fZGVjcmVtZW50KCk7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CiAg fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0 cj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9y PF9WYWwsIF9SZWYsIF9QdHI+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0 ZXJhdG9yPF9WYWwsIF9SZWYsIF9QdHI+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSA9 PSBfX3kuX01fbm9kZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1Zh bCYsIGNvbnN0IF9WYWwqPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVy YXRvcjxfVmFsLCBfVmFsJiwgX1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSA9 PSBfX3kuX01fbm9kZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYsIF9W YWwqPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBj b25zdCBfVmFsJiwgY29uc3QgX1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSA9 PSBfX3kuX01fbm9kZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfUmVm LCB0eXBlbmFtZSBfUHRyPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX1Ji X3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1JlZiwgX1B0cj4mIF9feCwKICAgICAgICAgICAgICAgY29u c3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1JlZiwgX1B0cj4mIF9feSkKICAgIHsgcmV0dXJu IF9feC5fTV9ub2RlICE9IF9feS5fTV9ub2RlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+ CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxf VmFsLCBjb25zdCBfVmFsJiwgY29uc3QgX1ZhbCo+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0 IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9WYWwmLCBfVmFsKj4mIF9feSkKICAgIHsgcmV0dXJu IF9feC5fTV9ub2RlICE9IF9feS5fTV9ub2RlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+ CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxf VmFsLCBfVmFsJiwgX1ZhbCo+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0 ZXJhdG9yPF9WYWwsIGNvbnN0IF9WYWwmLCBjb25zdCBfVmFsKj4mIF9feSkKICAgIHsgcmV0dXJu IF9feC5fTV9ub2RlICE9IF9feS5fTV9ub2RlOyB9CgogIGlubGluZSB2b2lkCiAgX1JiX3RyZWVf cm90YXRlX2xlZnQoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSom IF9fcm9vdCkKICB7CiAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fcmlnaHQ7 CiAgICBfX3gtPl9NX3JpZ2h0ID0gX195LT5fTV9sZWZ0OwogICAgaWYgKF9feS0+X01fbGVmdCAh PTApCiAgICAgIF9feS0+X01fbGVmdC0+X01fcGFyZW50ID0gX194OwogICAgX195LT5fTV9wYXJl bnQgPSBfX3gtPl9NX3BhcmVudDsKCiAgICBpZiAoX194ID09IF9fcm9vdCkKICAgICAgX19yb290 ID0gX195OwogICAgZWxzZSBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0KQogICAg ICBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feTsKICAgIGVsc2UKICAgICAgX194LT5fTV9w YXJlbnQtPl9NX3JpZ2h0ID0gX195OwogICAgX195LT5fTV9sZWZ0ID0gX194OwogICAgX194LT5f TV9wYXJlbnQgPSBfX3k7CiAgfQoKICBpbmxpbmUgdm9pZAogIF9SYl90cmVlX3JvdGF0ZV9yaWdo dChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290KQog IHsKICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9sZWZ0OwogICAgX194LT5f TV9sZWZ0ID0gX195LT5fTV9yaWdodDsKICAgIGlmIChfX3ktPl9NX3JpZ2h0ICE9IDApCiAgICAg IF9feS0+X01fcmlnaHQtPl9NX3BhcmVudCA9IF9feDsKICAgIF9feS0+X01fcGFyZW50ID0gX194 LT5fTV9wYXJlbnQ7CgogICAgaWYgKF9feCA9PSBfX3Jvb3QpCiAgICAgIF9fcm9vdCA9IF9feTsK ICAgIGVsc2UgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQpCiAgICAgIF9feC0+ X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICAgIGVsc2UKICAgICAgX194LT5fTV9wYXJlbnQt Pl9NX2xlZnQgPSBfX3k7CiAgICBfX3ktPl9NX3JpZ2h0ID0gX194OwogICAgX194LT5fTV9wYXJl bnQgPSBfX3k7CiAgfQoKICBpbmxpbmUgdm9pZAogIF9SYl90cmVlX3JlYmFsYW5jZShfUmJfdHJl ZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290KQogIHsKICAgIF9f eC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICB3aGlsZSAoX194ICE9IF9fcm9vdAogICAgICAgICAg ICYmIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAgIHsKICAgICAgICBp ZiAoX194LT5fTV9wYXJlbnQgPT0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fbGVmdCkK ICAgICAgICAgIHsKICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9N X3BhcmVudC0+X01fcGFyZW50LT5fTV9yaWdodDsKICAgICAgICAgICAgaWYgKF9feSAmJiBfX3kt Pl9NX2NvbG9yID09IF9NX3JlZCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfX3gt Pl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgIF9feS0+X01f Y29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJl bnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgX194ID0gX194LT5fTV9wYXJl bnQtPl9NX3BhcmVudDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9yaWdo dCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIF9feCA9IF9feC0+X01f cGFyZW50OwogICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feCwgX19y b290KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQt Pl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01f cGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0 ZV9yaWdodChfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAg IH0KICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgIF9SYl90 cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fbGVmdDsK ICAgICAgICAgICAgaWYgKF9feSAmJiBfX3ktPl9NX2NvbG9yID09IF9NX3JlZCkKICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9ibGFj azsKICAgICAgICAgICAgICAgIF9feS0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAg ICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAg ICAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgICAgICAgICB9 CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoX194 ID09IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0KQogICAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgICAgICAgICAgX1Ji X3RyZWVfcm90YXRlX3JpZ2h0KF9feCwgX19yb290KTsKICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAg ICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAg ICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feC0+X01fcGFyZW50LT5fTV9wYXJl bnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICB9CiAgICBfX3Jv b3QtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgfQoKICBpbmxpbmUgX1JiX3RyZWVfbm9kZV9iYXNl KgogIF9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3os CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jv b3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBf X2xlZnRtb3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9i YXNlKiYgX19yaWdodG1vc3QpCiAgewogICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3o7 CiAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCA9IDA7CiAgICBfUmJfdHJlZV9ub2RlX2Jhc2Uq IF9feF9wYXJlbnQgPSAwOwogICAgaWYgKF9feS0+X01fbGVmdCA9PSAwKQogICAgICBfX3ggPSBf X3ktPl9NX3JpZ2h0OwogICAgZWxzZQogICAgICBpZiAoX195LT5fTV9yaWdodCA9PSAwKQogICAg ICAgIF9feCA9IF9feS0+X01fbGVmdDsKICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICBf X3kgPSBfX3ktPl9NX3JpZ2h0OwogICAgICAgICAgd2hpbGUgKF9feS0+X01fbGVmdCAhPSAwKQog ICAgICAgICAgICBfX3kgPSBfX3ktPl9NX2xlZnQ7CiAgICAgICAgICBfX3ggPSBfX3ktPl9NX3Jp Z2h0OwogICAgICAgIH0KICAgIGlmIChfX3kgIT0gX196KQogICAgICB7CgogICAgICAgIF9fei0+ X01fbGVmdC0+X01fcGFyZW50ID0gX195OwogICAgICAgIF9feS0+X01fbGVmdCA9IF9fei0+X01f bGVmdDsKICAgICAgICBpZiAoX195ICE9IF9fei0+X01fcmlnaHQpCiAgICAgICAgICB7CiAgICAg ICAgICAgIF9feF9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgICAgICAgaWYgKF9feCkg X194LT5fTV9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgICAgICAgX195LT5fTV9wYXJl bnQtPl9NX2xlZnQgPSBfX3g7CiAgICAgICAgICAgIF9feS0+X01fcmlnaHQgPSBfX3otPl9NX3Jp Z2h0OwogICAgICAgICAgICBfX3otPl9NX3JpZ2h0LT5fTV9wYXJlbnQgPSBfX3k7CiAgICAgICAg ICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX194X3BhcmVudCA9IF9feTsKICAgICAgICBpZiAo X19yb290ID09IF9feikKICAgICAgICAgIF9fcm9vdCA9IF9feTsKICAgICAgICBlbHNlIGlmIChf X3otPl9NX3BhcmVudC0+X01fbGVmdCA9PSBfX3opCiAgICAgICAgICBfX3otPl9NX3BhcmVudC0+ X01fbGVmdCA9IF9feTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3otPl9NX3BhcmVudC0+X01f cmlnaHQgPSBfX3k7CiAgICAgICAgX195LT5fTV9wYXJlbnQgPSBfX3otPl9NX3BhcmVudDsKICAg ICAgICBzdGQ6OnN3YXAoX195LT5fTV9jb2xvciwgX196LT5fTV9jb2xvcik7CiAgICAgICAgX195 ID0gX196OwoKICAgICAgfQogICAgZWxzZQogICAgICB7CiAgICAgICAgX194X3BhcmVudCA9IF9f eS0+X01fcGFyZW50OwogICAgICAgIGlmIChfX3gpCiAgICAgICAgICBfX3gtPl9NX3BhcmVudCA9 IF9feS0+X01fcGFyZW50OwogICAgICAgIGlmIChfX3Jvb3QgPT0gX196KQogICAgICAgICAgX19y b290ID0gX194OwogICAgICAgIGVsc2UKICAgICAgICAgIGlmIChfX3otPl9NX3BhcmVudC0+X01f bGVmdCA9PSBfX3opCiAgICAgICAgICAgIF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX194Owog ICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3g7 CiAgICAgICAgaWYgKF9fbGVmdG1vc3QgPT0gX196KQogICAgICAgICAgaWYgKF9fei0+X01fcmln aHQgPT0gMCkKICAgICAgICAgICAgX19sZWZ0bW9zdCA9IF9fei0+X01fcGFyZW50OwoKICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgX19sZWZ0bW9zdCA9IF9SYl90cmVlX25vZGVfYmFzZTo6X1Nf bWluaW11bShfX3gpOwogICAgICAgIGlmIChfX3JpZ2h0bW9zdCA9PSBfX3opCiAgICAgICAgICBp ZiAoX196LT5fTV9sZWZ0ID09IDApCiAgICAgICAgICAgIF9fcmlnaHRtb3N0ID0gX196LT5fTV9w YXJlbnQ7CgogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3JpZ2h0bW9zdCA9IF9SYl90cmVl X25vZGVfYmFzZTo6X1NfbWF4aW11bShfX3gpOwogICAgICB9CiAgICBpZiAoX195LT5fTV9jb2xv ciAhPSBfTV9yZWQpCiAgICAgIHsKICAgICAgICB3aGlsZSAoX194ICE9IF9fcm9vdCAmJiAoX194 ID09IDAgfHwgX194LT5fTV9jb2xvciA9PSBfTV9ibGFjaykpCiAgICAgICAgICBpZiAoX194ID09 IF9feF9wYXJlbnQtPl9NX2xlZnQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfUmJfdHJl ZV9ub2RlX2Jhc2UqIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgICAgICAgIGlm IChfX3ctPl9NX2NvbG9yID09IF9NX3JlZCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgX193LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgICBfX3hfcGFy ZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRl X2xlZnQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgICAgICAgICAgX193ID0gX194X3Bh cmVudC0+X01fcmlnaHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKChfX3ct Pl9NX2xlZnQgPT0gMCB8fAogICAgICAgICAgICAgICAgICAgX193LT5fTV9sZWZ0LT5fTV9jb2xv ciA9PSBfTV9ibGFjaykgJiYKICAgICAgICAgICAgICAgICAgKF9fdy0+X01fcmlnaHQgPT0gMCB8 fAogICAgICAgICAgICAgICAgICAgX193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX01fYmxhY2sp KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01f cmVkOwogICAgICAgICAgICAgICAgICBfX3ggPSBfX3hfcGFyZW50OwogICAgICAgICAgICAgICAg ICBfX3hfcGFyZW50ID0gX194X3BhcmVudC0+X01fcGFyZW50OwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYg KF9fdy0+X01fcmlnaHQgPT0gMAogICAgICAgICAgICAgICAgICAgICAgfHwgX193LT5fTV9yaWdo dC0+X01fY29sb3IgPT0gX01fYmxhY2spCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCkgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9IF9N X2JsYWNrOwogICAgICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9NX3JlZDsKICAg ICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3csIF9fcm9vdCk7CiAg ICAgICAgICAgICAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50 LT5fTV9jb2xvcjsKICAgICAgICAgICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfTV9i bGFjazsKICAgICAgICAgICAgICAgICAgaWYgKF9fdy0+X01fcmlnaHQpCiAgICAgICAgICAgICAg ICAgICAgX193LT5fTV9yaWdodC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAg ICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVs c2UKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fdyA9 IF9feF9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgICAgICAgaWYgKF9fdy0+X01fY29sb3IgPT0g X01fcmVkKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9y ID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX01f cmVkOwogICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194X3BhcmVudCwg X19yb290KTsKICAgICAgICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoKF9fdy0+X01fcmlnaHQgPT0gMCB8fAog ICAgICAgICAgICAgICAgICAgX193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX01fYmxhY2spICYm CiAgICAgICAgICAgICAgICAgIChfX3ctPl9NX2xlZnQgPT0gMCB8fAogICAgICAgICAgICAgICAg ICAgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9PSBfTV9ibGFjaykpCiAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAg ICAgIF9feCA9IF9feF9wYXJlbnQ7CiAgICAgICAgICAgICAgICAgIF9feF9wYXJlbnQgPSBfX3hf cGFyZW50LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoX193LT5fTV9sZWZ0ID09IDAg fHwgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9PSBfTV9ibGFjaykKICAgICAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoX193LT5fTV9yaWdodCkgX193LT5fTV9yaWdo dC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29s b3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChf X3csIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9s ZWZ0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xv ciA9IF9feF9wYXJlbnQtPl9NX2NvbG9yOwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50LT5f TV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgICBpZiAoX193LT5fTV9sZWZ0KQog ICAgICAgICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAg ICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7 CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9 CiAgICAgICAgaWYgKF9feCkgX194LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICB9CiAgICBy ZXR1cm4gX195OwogIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf QWxsb2MsIGJvb2wgX1NfaW5zdGFuY2VsZXNzPgogICAgY2xhc3MgX1JiX3RyZWVfYWxsb2NfYmFz ZQogICAgewogICAgcHVibGljOgogICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9U cCwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogICAgICBhbGxvY2F0 b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9hbGxv Y2F0b3I7IH0KCiAgICAgIF9SYl90cmVlX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUm IF9fYSkKICAgICAgOiBfTV9ub2RlX2FsbG9jYXRvcihfX2EpLCBfTV9oZWFkZXIoMCkge30KCiAg ICBwcm90ZWN0ZWQ6CiAgICAgIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1JiX3RyZWVfbm9kZTxf VHA+LCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZQogICAgICBfTV9ub2RlX2FsbG9jYXRvcjsKCiAg ICAgIF9SYl90cmVlX25vZGU8X1RwPiogX01faGVhZGVyOwoKICAgICAgX1JiX3RyZWVfbm9kZTxf VHA+KgogICAgICBfTV9nZXRfbm9kZSgpIHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yLmFsbG9j YXRlKDEpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX3B1dF9ub2RlKF9SYl90cmVlX25vZGU8X1Rw PiogX19wKQogICAgICB7IF9NX25vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCAxKTsgfQog ICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xh c3MgX1JiX3RyZWVfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywgdHJ1ZT4KICAgIHsKICAgIHB1Ymxp YzoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFsbG9j YXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogICAgICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2Nh dG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICAgICAgX1JiX3RyZWVf YWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpIDogX01faGVhZGVyKDApIHt9CgogICAg cHJvdGVjdGVkOgogICAgICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9NX2hlYWRlcjsKCiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfUmJfdHJlZV9ub2RlPF9UcD4sIF9BbGxvYz46 Ol9BbGxvY190eXBlCiAgICAgIF9BbGxvY190eXBlOwoKICAgICAgX1JiX3RyZWVfbm9kZTxfVHA+ KgogICAgICBfTV9nZXRfbm9kZSgpIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgxKTsg fQoKICAgICAgdm9pZAogICAgICBfTV9wdXRfbm9kZShfUmJfdHJlZV9ub2RlPF9UcD4qIF9fcCkg eyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIDEpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHN0cnVjdCBfUmJfdHJlZV9iYXNlIDog cHVibGljIF9SYl90cmVlX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2Vs ZXNzPgogICAgewogICAgICB0eXBlZGVmIF9SYl90cmVlX2FsbG9jX2Jhc2U8X1RwLAogICAgICAg IF9BbGxvYywgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4gX0Jh c2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRv cl90eXBlOwoKICAgICAgX1JiX3RyZWVfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQog ICAgICA6IF9CYXNlKF9fYSkgeyBfTV9oZWFkZXIgPSBfTV9nZXRfbm9kZSgpOyB9CiAgICAgIH5f UmJfdHJlZV9iYXNlKCkgeyBfTV9wdXRfbm9kZShfTV9oZWFkZXIpOyB9CiAgICB9OwoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUs CiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRv cjxfVmFsPiA+CiAgICBjbGFzcyBfUmJfdHJlZSA6IHByb3RlY3RlZCBfUmJfdHJlZV9iYXNlPF9W YWwsIF9BbGxvYz4KICAgIHsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9iYXNlPF9WYWwsIF9BbGxv Yz4gX0Jhc2U7CgogICAgcHJvdGVjdGVkOgogICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFz ZSogX0Jhc2VfcHRyOwogICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbD4gX1JiX3RyZWVf bm9kZTsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICAgICAgdHlw ZWRlZiBfVmFsIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsK ICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBl ZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBl JiBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZSogX0xpbmtfdHlw ZTsKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZf dCBkaWZmZXJlbmNlX3R5cGU7CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0 b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICAgICAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRv cigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCiAgICBwcm90ZWN0 ZWQ6CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9nZXRfbm9kZTsKICAgICAgdXNpbmcgX0Jhc2U6Ol9N X3B1dF9ub2RlOwogICAgICB1c2luZyBfQmFzZTo6X01faGVhZGVyOwoKICAgICAgX0xpbmtfdHlw ZQogICAgICBfTV9jcmVhdGVfbm9kZShjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICAgIHsKICAg ICAgICBfTGlua190eXBlIF9fdG1wID0gX01fZ2V0X25vZGUoKTsKICAgICAgICB0cnkKICAgICAg ICAgIHsgX0NvbnN0cnVjdCgmX190bXAtPl9NX3ZhbHVlX2ZpZWxkLCBfX3gpOyB9CiAgICAgICAg Y2F0Y2goLi4uKQogICAgICAgICAgewogICAgICAgICAgX01fcHV0X25vZGUoX190bXApOwogICAg ICAgICAgdGhyb3c7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9Cgog ICAgICBfTGlua190eXBlCiAgICAgIF9NX2Nsb25lX25vZGUoX0xpbmtfdHlwZSBfX3gpCiAgICAg IHsKICAgICAgICBfTGlua190eXBlIF9fdG1wID0gX01fY3JlYXRlX25vZGUoX194LT5fTV92YWx1 ZV9maWVsZCk7CiAgICAgICAgX190bXAtPl9NX2NvbG9yID0gX194LT5fTV9jb2xvcjsKICAgICAg ICBfX3RtcC0+X01fbGVmdCA9IDA7CiAgICAgICAgX190bXAtPl9NX3JpZ2h0ID0gMDsKICAgICAg ICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgZGVzdHJveV9ub2RlKF9M aW5rX3R5cGUgX19wKQogICAgICB7CiAgICAgICAgX0Rlc3Ryb3koJl9fcC0+X01fdmFsdWVfZmll bGQpOwogICAgICAgIF9NX3B1dF9ub2RlKF9fcCk7CiAgICAgIH0KCiAgICAgIHNpemVfdHlwZSBf TV9ub2RlX2NvdW50OwogICAgICBfQ29tcGFyZSBfTV9rZXlfY29tcGFyZTsKCiAgICAgIF9MaW5r X3R5cGUmCiAgICAgIF9NX3Jvb3QoKSBjb25zdCB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hl YWRlci0+X01fcGFyZW50OyB9CgogICAgICBfTGlua190eXBlJgogICAgICBfTV9sZWZ0bW9zdCgp IGNvbnN0IHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVyLT5fTV9sZWZ0OyB9CgogICAg ICBfTGlua190eXBlJgogICAgICBfTV9yaWdodG1vc3QoKSBjb25zdCB7IHJldHVybiAoX0xpbmtf dHlwZSYpIF9NX2hlYWRlci0+X01fcmlnaHQ7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgog ICAgICBfU19sZWZ0KF9MaW5rX3R5cGUgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+ X01fbGVmdCk7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgogICAgICBfU19yaWdodChfTGlu a190eXBlIF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3JpZ2h0KTsgfQoKICAg ICAgc3RhdGljIF9MaW5rX3R5cGUmCiAgICAgIF9TX3BhcmVudChfTGlua190eXBlIF9feCkgeyBy ZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3BhcmVudCk7IH0KCiAgICAgIHN0YXRpYyByZWZl cmVuY2UKICAgICAgX1NfdmFsdWUoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIF9feC0+X01fdmFs dWVfZmllbGQ7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBfS2V5JgogICAgICBfU19rZXkoX0xpbmtf dHlwZSBfX3gpIHsgcmV0dXJuIF9LZXlPZlZhbHVlKCkoX1NfdmFsdWUoX194KSk7IH0KCiAgICAg IHN0YXRpYyBfUmJfdHJlZV9jb2xvciYKICAgICAgX1NfY29sb3IoX0xpbmtfdHlwZSBfX3gpIHsg cmV0dXJuIF9feC0+X01fY29sb3I7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgogICAgICBf U19sZWZ0KF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9sZWZ0 KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUmCiAgICAgIF9TX3JpZ2h0KF9CYXNlX3B0ciBf X3gpIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9yaWdodCk7IH0KCiAgICAgIHN0YXRp YyBfTGlua190eXBlJgogICAgICBfU19wYXJlbnQoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4gKF9M aW5rX3R5cGUmKShfX3gtPl9NX3BhcmVudCk7IH0KCiAgICAgIHN0YXRpYyByZWZlcmVuY2UKICAg ICAgX1NfdmFsdWUoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4gKChfTGlua190eXBlKV9feCktPl9N X3ZhbHVlX2ZpZWxkOyB9CgogICAgICBzdGF0aWMgY29uc3QgX0tleSYKICAgICAgX1Nfa2V5KF9C YXNlX3B0ciBfX3gpIHsgcmV0dXJuIF9LZXlPZlZhbHVlKCkoX1NfdmFsdWUoX0xpbmtfdHlwZShf X3gpKSk7fQoKICAgICAgc3RhdGljIF9SYl90cmVlX2NvbG9yJgogICAgICBfU19jb2xvcihfQmFz ZV9wdHIgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZShfX3gpLT5fTV9jb2xvcik7IH0KCiAgICAg IHN0YXRpYyBfTGlua190eXBlCiAgICAgIF9TX21pbmltdW0oX0xpbmtfdHlwZSBfX3gpCiAgICAg IHsgcmV0dXJuIChfTGlua190eXBlKSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194 KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUKICAgICAgX1NfbWF4aW11bShfTGlua190eXBl IF9feCkKICAgICAgeyByZXR1cm4gKF9MaW5rX3R5cGUpIF9SYl90cmVlX25vZGVfYmFzZTo6X1Nf bWF4aW11bShfX3gpOyB9CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJh dG9yPHZhbHVlX3R5cGUsIHJlZmVyZW5jZSwgcG9pbnRlcj4gaXRlcmF0b3I7CiAgICAgIHR5cGVk ZWYgX1JiX3RyZWVfaXRlcmF0b3I8dmFsdWVfdHlwZSwgY29uc3RfcmVmZXJlbmNlLCBjb25zdF9w b2ludGVyPgogICAgICBjb25zdF9pdGVyYXRvcjsKCiAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNl X2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0 eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsK CiAgICBwcml2YXRlOgogICAgICBpdGVyYXRvcgogICAgICBfTV9pbnNlcnQoX0Jhc2VfcHRyIF9f eCwgX0Jhc2VfcHRyIF9feSwgY29uc3QgdmFsdWVfdHlwZSYgX192KTsKCiAgICAgIF9MaW5rX3R5 cGUKICAgICAgX01fY29weShfTGlua190eXBlIF9feCwgX0xpbmtfdHlwZSBfX3ApOwoKICAgICAg dm9pZAogICAgICBfTV9lcmFzZShfTGlua190eXBlIF9feCk7CgogICAgcHVibGljOgoKICAgICAg X1JiX3RyZWUoKQogICAgICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSksIF9NX25vZGVfY291 bnQoMCksIF9NX2tleV9jb21wYXJlKCkKICAgICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0K CiAgICAgIF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXApCiAgICAgICAgOiBfQmFzZShh bGxvY2F0b3JfdHlwZSgpKSwgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX19jb21w KQogICAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoKICAgICAgX1JiX3RyZWUoY29uc3Qg X0NvbXBhcmUmIF9fY29tcCwgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAgICA6IF9C YXNlKF9fYSksIF9NX25vZGVfY291bnQoMCksIF9NX2tleV9jb21wYXJlKF9fY29tcCkKICAgICAg eyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAgICAgIF9SYl90cmVlKGNvbnN0IF9SYl90cmVl PF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpCiAgICAgICAgOiBf QmFzZShfX3guZ2V0X2FsbG9jYXRvcigpKSwgX01fbm9kZV9jb3VudCgwKSwKICAgICAgICAgICAg ICAgICBfTV9rZXlfY29tcGFyZShfX3guX01fa2V5X2NvbXBhcmUpCiAgICAgIHsKICAgICAgICBp ZiAoX194Ll9NX3Jvb3QoKSA9PSAwKQogICAgICAgICAgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOwog ICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgX1NfY29sb3IoX01faGVhZGVyKSA9 IF9NX3JlZDsKICAgICAgICAgICAgX01fcm9vdCgpID0gX01fY29weShfX3guX01fcm9vdCgpLCBf TV9oZWFkZXIpOwogICAgICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX1NfbWluaW11bShfTV9yb290 KCkpOwogICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9TX21heGltdW0oX01fcm9vdCgpKTsK ICAgICAgICAgIH0KICAgICAgICBfTV9ub2RlX2NvdW50ID0gX194Ll9NX25vZGVfY291bnQ7CiAg ICAgIH0KCiAgICAgIH5fUmJfdHJlZSgpIHsgY2xlYXIoKTsgfQoKICAgICAgX1JiX3RyZWU8X0tl eSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mCiAgICAgIG9wZXJhdG9yPShjb25z dCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194KTsK CiAgICBwcml2YXRlOgogICAgICB2b2lkIF9NX2VtcHR5X2luaXRpYWxpemUoKQogICAgICB7CiAg ICAgICAgX1NfY29sb3IoX01faGVhZGVyKSA9IF9NX3JlZDsKCiAgICAgICAgX01fcm9vdCgpID0g MDsKICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX01faGVhZGVyOwogICAgICAgIF9NX3JpZ2h0bW9z dCgpID0gX01faGVhZGVyOwogICAgICB9CgogICAgcHVibGljOgoKICAgICAgX0NvbXBhcmUKICAg ICAga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV9rZXlfY29tcGFyZTsgfQoKICAgICAgaXRl cmF0b3IKICAgICAgYmVnaW4oKSB7IHJldHVybiBfTV9sZWZ0bW9zdCgpOyB9CgogICAgICBjb25z dF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX2xlZnRtb3N0KCk7IH0K CiAgICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgpIHsgcmV0dXJuIF9NX2hlYWRlcjsgfQoKICAgICAg Y29uc3RfaXRlcmF0b3IKICAgICAgZW5kKCkgY29uc3QgeyByZXR1cm4gX01faGVhZGVyOyB9Cgog ICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRl cmF0b3IoZW5kKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdp bigpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CgogICAg ICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9y KGJlZ2luKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKSBj b25zdCB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CgogICAgICBi b29sCiAgICAgIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9jb3VudCA9PSAwOyB9Cgog ICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGVfY291bnQ7 IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVf dHlwZSgtMSk7IH0KCiAgICAgIHZvaWQKICAgICAgc3dhcChfUmJfdHJlZTxfS2V5LF9WYWwsX0tl eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX190KQogICAgICB7CiAgICAgICAgc3RkOjpzd2Fw KF9NX2hlYWRlciwgX190Ll9NX2hlYWRlcik7CiAgICAgICAgc3RkOjpzd2FwKF9NX25vZGVfY291 bnQsIF9fdC5fTV9ub2RlX2NvdW50KTsKICAgICAgICBzdGQ6OnN3YXAoX01fa2V5X2NvbXBhcmUs IF9fdC5fTV9rZXlfY29tcGFyZSk7CiAgICAgIH0KCgogICAgICBwYWlyPGl0ZXJhdG9yLGJvb2w+ CiAgICAgIGluc2VydF91bmlxdWUoY29uc3QgdmFsdWVfdHlwZSYgX194KTsKCiAgICAgIGl0ZXJh dG9yCiAgICAgIGluc2VydF9lcXVhbChjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICAgICAgaXRl cmF0b3IKICAgICAgaW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1 ZV90eXBlJiBfX3gpOwoKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0X2VxdWFsKGl0ZXJhdG9y IF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CgogICAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgdm9pZAogICAgICBpbnNlcnRfdW5pcXVlKF9JbnB1 dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCk7CgogICAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgdm9pZAogICAgICBpbnNlcnRfZXF1YWwo X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KTsKCiAgICAgIHZv aWQKICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbik7CgogICAgICBzaXplX3R5cGUKICAg ICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCk7CgogICAgICB2b2lkCiAgICAgIGVyYXNlKGl0 ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCk7CgogICAgICB2b2lkCiAgICAgIGVyYXNl KGNvbnN0IGtleV90eXBlKiBfX2ZpcnN0LCBjb25zdCBrZXlfdHlwZSogX19sYXN0KTsKCiAgICAg IHZvaWQKICAgICAgY2xlYXIoKQogICAgICB7CiAgICAgICAgaWYgKF9NX25vZGVfY291bnQgIT0g MCkKICAgICAgICAgIHsKICAgICAgICAgICAgX01fZXJhc2UoX01fcm9vdCgpKTsKICAgICAgICAg ICAgX01fbGVmdG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAgICAgICAgX01fcm9vdCgpID0gMDsK ICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgICAgICAgIF9NX25v ZGVfY291bnQgPSAwOwogICAgICAgICAgfQogICAgICB9CgoKICAgICAgaXRlcmF0b3IKICAgICAg ZmluZChjb25zdCBrZXlfdHlwZSYgX194KTsKCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGZp bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgY291 bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CgogICAgICBpdGVyYXRvcgogICAgICBsb3dl cl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KTsKCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAg IGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwoKICAgICAgaXRlcmF0b3IK ICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CgogICAgICBjb25zdF9pdGVy YXRvcgogICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKCiAgICAg IHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+CiAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBl JiBfX3gpOwoKICAgICAgcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+CiAgICAg IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwoKCiAgICAgIGJvb2wKICAg ICAgX19yYl92ZXJpZnkoKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXks IHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1l IF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9 PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYg X194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs X0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgewogICAgICByZXR1cm4gX194LnNpemUoKSA9PSBf X3kuc2l6ZSgpICYmCiAgICAgICAgZXF1YWwoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX195LmJl Z2luKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0 eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5h bWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBfUmJfdHJlZTxf S2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAg IGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBf X3kpCiAgICB7CiAgICAgIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4o KSwgX194LmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJl Z2luKCksIF9feS5lbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVu YW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21w YXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25z dCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAog ICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBh cmUsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAg ICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yPihjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0Nv bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1Zh bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiBfX3kgPCBf X3g7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUg X0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IF9SYl90cmVlPF9LZXksX1Zh bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0 IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAg eyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVu YW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21w YXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25z dCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAog ICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBh cmUsX0FsbG9jPiYgX195KQogIHsgcmV0dXJuICEoX194IDwgX195KTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAg ICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIHZvaWQK ICAgIHN3YXAoX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4m IF9feCwKICAgICAgICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B bGxvYz4mIF9feSkKICAgIHsgX194LnN3YXAoX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf S2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBl bmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9L ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9m VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBvcGVyYXRvcj0oY29uc3QgX1JiX3RyZWU8X0tl eSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCkKICAgIHsKICAgICAgaWYg KHRoaXMgIT0gJl9feCkKICAgICAgICB7CgogICAgICAgICAgY2xlYXIoKTsKICAgICAgICAgIF9N X25vZGVfY291bnQgPSAwOwogICAgICAgICAgX01fa2V5X2NvbXBhcmUgPSBfX3guX01fa2V5X2Nv bXBhcmU7CiAgICAgICAgICBpZiAoX194Ll9NX3Jvb3QoKSA9PSAwKQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgICAgICAgICBfTV9sZWZ0bW9zdCgpID0g X01faGVhZGVyOwogICAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwogICAg ICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9y b290KCkgPSBfTV9jb3B5KF9feC5fTV9yb290KCksIF9NX2hlYWRlcik7CiAgICAgICAgICAgICAg X01fbGVmdG1vc3QoKSA9IF9TX21pbmltdW0oX01fcm9vdCgpKTsKICAgICAgICAgICAgICBfTV9y aWdodG1vc3QoKSA9IF9TX21heGltdW0oX01fcm9vdCgpKTsKICAgICAgICAgICAgICBfTV9ub2Rl X2NvdW50ID0gX194Ll9NX25vZGVfY291bnQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUg X1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUs IHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9L ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgX01faW5zZXJ0KF9CYXNlX3B0ciBfX3hf LCBfQmFzZV9wdHIgX195XywgY29uc3QgX1ZhbCYgX192KQogICAgewogICAgICBfTGlua190eXBl IF9feCA9IChfTGlua190eXBlKSBfX3hfOwogICAgICBfTGlua190eXBlIF9feSA9IChfTGlua190 eXBlKSBfX3lfOwogICAgICBfTGlua190eXBlIF9fejsKCiAgICAgIGlmIChfX3kgPT0gX01faGVh ZGVyIHx8IF9feCAhPSAwIHx8CiAgICAgICAgICBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgp KF9fdiksIF9TX2tleShfX3kpKSkKICAgICAgICB7CiAgICAgICAgICBfX3ogPSBfTV9jcmVhdGVf bm9kZShfX3YpOwogICAgICAgICAgX1NfbGVmdChfX3kpID0gX196OwoKICAgICAgICAgIGlmIChf X3kgPT0gX01faGVhZGVyKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fcm9vdCgpID0g X196OwogICAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX196OwogICAgICAgICAgICB9CiAg ICAgICAgICBlbHNlIGlmIChfX3kgPT0gX01fbGVmdG1vc3QoKSkKICAgICAgICAgICAgX01fbGVm dG1vc3QoKSA9IF9fejsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBf X3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAgICAgICAgX1NfcmlnaHQoX195KSA9IF9fejsK CiAgICAgICAgICBpZiAoX195ID09IF9NX3JpZ2h0bW9zdCgpKQogICAgICAgICAgICBfTV9yaWdo dG1vc3QoKSA9IF9fejsKICAgICAgICB9CiAgICAgIF9TX3BhcmVudChfX3opID0gX195OwogICAg ICBfU19sZWZ0KF9feikgPSAwOwogICAgICBfU19yaWdodChfX3opID0gMDsKICAgICAgX1JiX3Ry ZWVfcmViYWxhbmNlKF9feiwgX01faGVhZGVyLT5fTV9wYXJlbnQpOwogICAgICArK19NX25vZGVf Y291bnQ7CiAgICAgIHJldHVybiBpdGVyYXRvcihfX3opOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAg ICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3Ry ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBf UmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBpbnNl cnRfZXF1YWwoY29uc3QgX1ZhbCYgX192KQogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9N X2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CiAgICAgIHdoaWxlIChf X3ggIT0gMCkKICAgICAgICB7CiAgICAgICAgICBfX3kgPSBfX3g7CiAgICAgICAgICBfX3ggPSBf TV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3gpKSA/CiAgICAgICAg ICAgIF9TX2xlZnQoX194KSA6IF9TX3JpZ2h0KF9feCk7CiAgICAgICAgfQogICAgICByZXR1cm4g X01faW5zZXJ0KF9feCwgX195LCBfX3YpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5 LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFt ZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxf S2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IsCiAgICBib29s PgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Ogog ICAgaW5zZXJ0X3VuaXF1ZShjb25zdCBfVmFsJiBfX3YpCiAgICB7CiAgICAgIF9MaW5rX3R5cGUg X195ID0gX01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKICAgICAg Ym9vbCBfX2NvbXAgPSB0cnVlOwogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgewogICAg ICAgICAgX195ID0gX194OwogICAgICAgICAgX19jb21wID0gX01fa2V5X2NvbXBhcmUoX0tleU9m VmFsdWUoKShfX3YpLCBfU19rZXkoX194KSk7CiAgICAgICAgICBfX3ggPSBfX2NvbXAgPyBfU19s ZWZ0KF9feCkgOiBfU19yaWdodChfX3gpOwogICAgICAgIH0KICAgICAgaXRlcmF0b3IgX19qID0g aXRlcmF0b3IoX195KTsKICAgICAgaWYgKF9fY29tcCkKICAgICAgICBpZiAoX19qID09IGJlZ2lu KCkpCiAgICAgICAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfTV9pbnNlcnQoX194LCBf X3ksIF9fdiksIHRydWUpOwogICAgICAgIGVsc2UKICAgICAgICAgIC0tX19qOwogICAgICBpZiAo X01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fai5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKSkK ICAgICAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfTV9pbnNlcnQoX194LCBfX3ksIF9f diksIHRydWUpOwogICAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfX2osIGZhbHNlKTsK ICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1l IF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxs b2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBh cmUsIF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1 ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgogICAgaW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0 aW9uLCBjb25zdCBfVmFsJiBfX3YpCiAgICB7CiAgICAgIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUg PT0gX01faGVhZGVyLT5fTV9sZWZ0KQogICAgICAgIHsKCiAgICAgICAgICBpZiAoc2l6ZSgpID4g MCAmJgogICAgICAgICAgICAgIF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nf a2V5KF9fcG9zaXRpb24uX01fbm9kZSkpKQogICAgICAgICAgICByZXR1cm4gX01faW5zZXJ0KF9f cG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2RlLCBfX3YpOwoKICAgICAgICAgIGVs c2UKICAgICAgICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUoX192KS5maXJzdDsKICAgICAgICB9 CiAgICAgIGVsc2UgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXIpCiAgICAgICAg ewoKICAgICAgICAgIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXkoX01fcmlnaHRtb3N0KCkpLCBf S2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICAgICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9NX3Jp Z2h0bW9zdCgpLCBfX3YpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0 X3VuaXF1ZShfX3YpLmZpcnN0OwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAg ICAgIGl0ZXJhdG9yIF9fYmVmb3JlID0gX19wb3NpdGlvbjsKICAgICAgICAgIC0tX19iZWZvcmU7 CiAgICAgICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fYmVmb3JlLl9NX25vZGUpLCBf S2V5T2ZWYWx1ZSgpKF9fdikpCiAgICAgICAgICAgICAgJiYgX01fa2V5X2NvbXBhcmUoX0tleU9m VmFsdWUoKShfX3YpLF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpKSkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIGlmIChfU19yaWdodChfX2JlZm9yZS5fTV9ub2RlKSA9PSAwKQogICAgICAg ICAgICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfX2JlZm9yZS5fTV9ub2RlLCBfX3YpOwogICAg ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlv bi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgICAgICAgICB9CiAgICAg ICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAg ICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0 eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5h bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9D b21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs dWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBpbnNlcnRfZXF1YWwoaXRlcmF0b3IgX19wb3NpdGlv biwgY29uc3QgX1ZhbCYgX192KQogICAgewogICAgICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09 IF9NX2hlYWRlci0+X01fbGVmdCkKICAgICAgICB7CgogICAgICAgICAgaWYgKHNpemUoKSA+IDAg JiYKICAgICAgICAgICAgICAhX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9k ZSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19w b3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgICAgICAgZWxz ZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgICAgICAgfQogICAgICBl bHNlIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyKQogICAgICAgIHsKCiAgICAg ICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9NX3Jp Z2h0bW9zdCgpKSkpCiAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0 KCksIF9fdik7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwo X192KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBpdGVyYXRvciBf X2JlZm9yZSA9IF9fcG9zaXRpb247CiAgICAgICAgICAtLV9fYmVmb3JlOwogICAgICAgICAgaWYg KCFfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX2JlZm9yZS5fTV9u b2RlKSkKICAgICAgICAgICAgICAmJiAhX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24u X01fbm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9LZXlPZlZhbHVlKCko X192KSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX1NfcmlnaHQoX19iZWZvcmUu X01fbm9kZSkgPT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZv cmUuX01fbm9kZSwgX192KTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXR1 cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Yp OwoKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0 X2VxdWFsKF9fdik7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0 eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS29WLAogICAgICAgICAgIHR5cGVuYW1lIF9DbXAsIHR5 cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPGNsYXNzIF9JST4KICAgICAgdm9pZAogICAgICBf UmJfdHJlZTxfS2V5LF9WYWwsX0tvVixfQ21wLF9BbGxvYz46OgogICAgICBpbnNlcnRfZXF1YWwo X0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpCiAgICAgIHsKICAgICAgICBmb3IgKCA7IF9fZmlyc3Qg IT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgICBpbnNlcnRfZXF1YWwoKl9fZmlyc3QpOwog ICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1l IF9Lb1YsCiAgICAgICAgICAgdHlwZW5hbWUgX0NtcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVt cGxhdGU8Y2xhc3MgX0lJPgogICAgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0Nt cCxfQWxsb2M+OjoKICAgIGluc2VydF91bmlxdWUoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpCiAg ICB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBp bnNlcnRfdW5pcXVlKCpfX2ZpcnN0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwg dHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUg X0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBfUmJfdHJlZTxf S2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6ZXJhc2UoaXRlcmF0b3IgX19w b3NpdGlvbikKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPQogICAgICAgIChfTGlua190eXBl KSBfUmJfdHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNlKF9fcG9zaXRpb24uX01fbm9kZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9N X3BhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfTV9oZWFkZXItPl9NX2xlZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX01faGVhZGVyLT5fTV9yaWdodCk7CiAgICAgIGRlc3Ryb3lfbm9kZShf X3kpOwogICAgICAtLV9NX25vZGVfY291bnQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9L ZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVu YW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5 LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBfUmJfdHJl ZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6ZXJhc2UoY29uc3QgX0tl eSYgX194KQogICAgewogICAgICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBfX3AgPSBlcXVhbF9y YW5nZShfX3gpOwogICAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19wLmZpcnN0LCBfX3Au c2Vjb25kKTsKICAgICAgZXJhc2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kKTsKICAgICAgcmV0dXJu IF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlw ZW5hbWUgX0tvViwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9j PgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxv Yz46Ol9MaW5rX3R5cGUKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9Db21wYXJlLF9BbGxv Yz46OgogICAgX01fY29weShfTGlua190eXBlIF9feCwgX0xpbmtfdHlwZSBfX3ApCiAgICB7Cgog ICAgICBfTGlua190eXBlIF9fdG9wID0gX01fY2xvbmVfbm9kZShfX3gpOwogICAgICBfX3RvcC0+ X01fcGFyZW50ID0gX19wOwoKICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgaWYgKF9feC0+ X01fcmlnaHQpCiAgICAgICAgICAgIF9fdG9wLT5fTV9yaWdodCA9IF9NX2NvcHkoX1NfcmlnaHQo X194KSwgX190b3ApOwogICAgICAgICAgX19wID0gX190b3A7CiAgICAgICAgICBfX3ggPSBfU19s ZWZ0KF9feCk7CgogICAgICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9jbG9uZV9ub2RlKF9feCk7CiAgICAgICAgICAg ICAgX19wLT5fTV9sZWZ0ID0gX195OwogICAgICAgICAgICAgIF9feS0+X01fcGFyZW50ID0gX19w OwogICAgICAgICAgICAgIGlmIChfX3gtPl9NX3JpZ2h0KQogICAgICAgICAgICAgICAgX195LT5f TV9yaWdodCA9IF9NX2NvcHkoX1NfcmlnaHQoX194KSwgX195KTsKICAgICAgICAgICAgICBfX3Ag PSBfX3k7CiAgICAgICAgICAgICAgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX01fZXJhc2UoX190 b3ApOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICByZXR1cm4gX190b3A7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlP ZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICB2b2lkCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j Pjo6X01fZXJhc2UoX0xpbmtfdHlwZSBfX3gpCiAgICB7CgogICAgICB3aGlsZSAoX194ICE9IDAp CiAgICAgICAgewogICAgICAgICAgX01fZXJhc2UoX1NfcmlnaHQoX194KSk7CiAgICAgICAgICBf TGlua190eXBlIF9feSA9IF9TX2xlZnQoX194KTsKICAgICAgICAgIGRlc3Ryb3lfbm9kZShfX3gp OwogICAgICAgICAgX194ID0gX195OwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAg dHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIF9SYl90cmVl PF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGVyYXNlKGl0ZXJh dG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0g YmVnaW4oKSAmJiBfX2xhc3QgPT0gZW5kKCkpCiAgICAgICAgY2xlYXIoKTsKICAgICAgZWxzZQog ICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgZXJhc2UoX19maXJzdCsrKTsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9m VmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAg IHZvaWQKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+ OjoKICAgIGVyYXNlKGNvbnN0IF9LZXkqIF9fZmlyc3QsIGNvbnN0IF9LZXkqIF9fbGFzdCkKICAg IHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGVyYXNlKCpfX2ZpcnN0 KyspOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBl bmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUg X0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21w YXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs X0NvbXBhcmUsX0FsbG9jPjo6ZmluZChjb25zdCBfS2V5JiBfX2spCiAgICB7CiAgICAgIF9MaW5r X3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsK CiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tl eShfX3gpLCBfX2spKQogICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAg ICAgICAgZWxzZQogICAgICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgICAgIGl0ZXJhdG9y IF9faiA9IGl0ZXJhdG9yKF9feSk7CiAgICAgIHJldHVybiAoX19qID09IGVuZCgpIHx8IF9NX2tl eV9jb21wYXJlKF9faywgX1Nfa2V5KF9fai5fTV9ub2RlKSkpID8KICAgICAgICBlbmQoKSA6IF9f ajsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5h bWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9B bGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy ZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZh bHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgZmluZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CiAg ICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9f eCA9IF9NX3Jvb3QoKTsKCiAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgewogICAgICAgICBp ZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICAgICAgIF9feSA9IF9f eCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgX194ID0gX1Nf cmlnaHQoX194KTsKICAgICAgIH0KICAgICBjb25zdF9pdGVyYXRvciBfX2ogPSBjb25zdF9pdGVy YXRvcihfX3kpOwogICAgIHJldHVybiAoX19qID09IGVuZCgpIHx8IF9NX2tleV9jb21wYXJlKF9f aywgX1Nfa2V5KF9fai5fTV9ub2RlKSkpID8KICAgICAgIGVuZCgpIDogX19qOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1 ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlw ZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OnNp emVfdHlwZQogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv Yz46OgogICAgY291bnQoY29uc3QgX0tleSYgX19rKSBjb25zdAogICAgewogICAgICBwYWlyPGNv bnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4gX19wID0gZXF1YWxfcmFuZ2UoX19rKTsKICAg ICAgc2l6ZV90eXBlIF9fbiA9IGRpc3RhbmNlKF9fcC5maXJzdCwgX19wLnNlY29uZCk7CiAgICAg IHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9W YWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs dWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5 T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGxvd2VyX2JvdW5kKGNvbnN0IF9LZXkmIF9f aykKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5 cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlmICgh X01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgICAgICBfX3kgPSBfX3gsIF9f eCA9IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3ggPSBfU19yaWdodChf X3gpOwoKICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9feSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAg IHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJl ZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IK ICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAg IGxvd2VyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykgY29uc3QKICAgIHsKICAgICAgX0xpbmtfdHlw ZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAg ICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9f eCksIF9faykpCiAgICAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICAg ICBlbHNlCiAgICAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICAgICAgcmV0dXJuIGNvbnN0 X2l0ZXJhdG9yKF9feSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1l IF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJl LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9m VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxf S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIHVwcGVyX2JvdW5kKGNvbnN0IF9LZXkm IF9faykKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5r X3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlm IChfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX3gpKSkKICAgICAgICAgIF9feSA9IF9feCwg X194ID0gX1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9feCA9IF9TX3JpZ2h0 KF9feCk7CgogICAgICByZXR1cm4gaXRlcmF0b3IoX195KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAg ICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90 cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRv cgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Ogog ICAgdXBwZXJfYm91bmQoY29uc3QgX0tleSYgX19rKSBjb25zdAogICAgewogICAgICBfTGlua190 eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7Cgog ICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9faywgX1Nf a2V5KF9feCkpKQogICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAg ICAgZWxzZQogICAgICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgICAgIHJldHVybiBjb25z dF9pdGVyYXRvcihfX3kpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFt ZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFy ZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lCiAgICBwYWlyPHR5cGVuYW1lIF9SYl90cmVl PF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs b2M+OjppdGVyYXRvcj4KICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy ZSxfQWxsb2M+OjoKICAgIGVxdWFsX3JhbmdlKGNvbnN0IF9LZXkmIF9faykKICAgIHsgcmV0dXJu IHBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPihsb3dlcl9ib3VuZChfX2spLCB1cHBlcl9ib3VuZChf X2spKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFt ZSBfS29WLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAg aW5saW5lCiAgcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ29tcGFy ZSwgX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5 LCBfVmFsLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3I+CiAgX1JiX3Ry ZWU8X0tleSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz4KICA6OmVxdWFsX3JhbmdlKGNv bnN0IF9LZXkmIF9faykgY29uc3QKICB7CiAgICByZXR1cm4gcGFpcjxjb25zdF9pdGVyYXRvcixj b25zdF9pdGVyYXRvcj4obG93ZXJfYm91bmQoX19rKSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1cHBlcl9ib3VuZChfX2spKTsKICB9CgogIGlubGluZSBp bnQKICBfX2JsYWNrX2NvdW50KF9SYl90cmVlX25vZGVfYmFzZSogX19ub2RlLCBfUmJfdHJlZV9u b2RlX2Jhc2UqIF9fcm9vdCkKICB7CiAgICBpZiAoX19ub2RlID09IDApCiAgICAgIHJldHVybiAw OwogICAgaW50IF9fc3VtID0gMDsKICAgIGRvCiAgICAgIHsKICAgICAgICBpZiAoX19ub2RlLT5f TV9jb2xvciA9PSBfTV9ibGFjaykKICAgICAgICAgICsrX19zdW07CiAgICAgICAgaWYgKF9fbm9k ZSA9PSBfX3Jvb3QpCiAgICAgICAgICBicmVhazsKICAgICAgICBfX25vZGUgPSBfX25vZGUtPl9N X3BhcmVudDsKICAgICAgfQogICAgd2hpbGUgKDEpOwogICAgcmV0dXJuIF9fc3VtOwogIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFs dWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJv b2wKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpf X3JiX3ZlcmlmeSgpIGNvbnN0CiAgICB7CiAgICBpZiAoX01fbm9kZV9jb3VudCA9PSAwIHx8IGJl Z2luKCkgPT0gZW5kKCkpCiAgICAgIHJldHVybiBfTV9ub2RlX2NvdW50ID09IDAgJiYgYmVnaW4o KSA9PSBlbmQoKSAmJgogICAgICAgIF9NX2hlYWRlci0+X01fbGVmdCA9PSBfTV9oZWFkZXIgJiYg X01faGVhZGVyLT5fTV9yaWdodCA9PSBfTV9oZWFkZXI7CgogICAgaW50IF9fbGVuID0gX19ibGFj a19jb3VudChfTV9sZWZ0bW9zdCgpLCBfTV9yb290KCkpOwogICAgZm9yIChjb25zdF9pdGVyYXRv ciBfX2l0ID0gYmVnaW4oKTsgX19pdCAhPSBlbmQoKTsgKytfX2l0KQogICAgICB7CiAgICAgICAg X0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtfdHlwZSkgX19pdC5fTV9ub2RlOwogICAgICAgIF9MaW5r X3R5cGUgX19MID0gX1NfbGVmdChfX3gpOwogICAgICAgIF9MaW5rX3R5cGUgX19SID0gX1Nfcmln aHQoX194KTsKCiAgICAgICAgaWYgKF9feC0+X01fY29sb3IgPT0gX01fcmVkKQogICAgICAgICAg aWYgKChfX0wgJiYgX19MLT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICAgICAgfHwgKF9f UiAmJiBfX1ItPl9NX2NvbG9yID09IF9NX3JlZCkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsK CiAgICAgICAgaWYgKF9fTCAmJiBfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX1Nfa2V5KF9f TCkpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChfX1IgJiYgX01fa2V5X2Nv bXBhcmUoX1Nfa2V5KF9fUiksIF9TX2tleShfX3gpKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsK CiAgICAgICAgaWYgKCFfX0wgJiYgIV9fUiAmJiBfX2JsYWNrX2NvdW50KF9feCwgX01fcm9vdCgp KSAhPSBfX2xlbikKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgIGlmIChfTV9s ZWZ0bW9zdCgpICE9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfTV9yb290KCkpKQog ICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoX01fcmlnaHRtb3N0KCkgIT0gX1JiX3RyZWVfbm9k ZV9iYXNlOjpfU19tYXhpbXVtKF9NX3Jvb3QoKSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIHJl dHVybiB0cnVlOwogICAgfQp9CiMgNjcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9p bmNsdWRlL2MrKy8zLjMvbWFwIiAyIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1w cmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5oIiAxIDMKIyA2NiAiL2hvbWUvYmFuZ2Vy dGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tYXAuaCIgMwpuYW1l c3BhY2Ugc3RkCnsKIyA4OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUv YysrLzMuMy9iaXRzL3N0bF9tYXAuaCIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBl bmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgICAgdHlw ZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPHBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KICAgIGNs YXNzIG1hcAogIHsKCiAgIAogICAKCiAgcHVibGljOgogICAgdHlwZWRlZiBfS2V5IGtleV90eXBl OwogICAgdHlwZWRlZiBfVHAgbWFwcGVkX3R5cGU7CiAgICB0eXBlZGVmIHBhaXI8Y29uc3QgX0tl eSwgX1RwPiB2YWx1ZV90eXBlOwogICAgdHlwZWRlZiBfQ29tcGFyZSBrZXlfY29tcGFyZTsKCiAg ICBjbGFzcyB2YWx1ZV9jb21wYXJlCiAgICAgIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx2YWx1 ZV90eXBlLCB2YWx1ZV90eXBlLCBib29sPgogICAgICB7CiAgICAgICAgZnJpZW5kIGNsYXNzIG1h cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+OwogICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgX0Nv bXBhcmUgY29tcDsKICAgICAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykgOiBjb21wKF9f Yykge30KICAgICAgcHVibGljOgogICAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1ZV90 eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3QKICAgICAgICB7IHJldHVybiBj b21wKF9feC5maXJzdCwgX195LmZpcnN0KTsgfQogICAgICB9OwoKICBwcml2YXRlOgoKICAgIHR5 cGVkZWYgX1JiX3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAg IF9TZWxlY3Qxc3Q8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlwZTsK CiAgICBfUmVwX3R5cGUgX01fdDsKCiAgcHVibGljOgoKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9S ZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVu YW1lIF9SZXBfdHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUg X1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogICAgdHlwZWRlZiB0 eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogICAgdHlwZWRlZiB0eXBlbmFt ZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogICAgdHlwZWRlZiB0 eXBlbmFtZSBfUmVwX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVu YW1lIF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICAgIHR5cGVk ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgICB0eXBlZGVmIHR5cGVu YW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogICAgdHlwZWRlZiB0 eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICAg IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0 X3JldmVyc2VfaXRlcmF0b3I7CiMgMTQ0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUv aW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5oIiAzCiAgICBtYXAoKSA6IF9NX3QoX0NvbXBh cmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkgeyB9CgoKCgoKICAgIGV4cGxpY2l0CiAgICBtYXAoY29u c3QgX0NvbXBhcmUmIF9fY29tcCwgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv cl90eXBlKCkpCiAgICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyB9CiMgMTYxICIvaG9tZS9iYW5n ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5oIiAzCiAg ICBtYXAoY29uc3QgbWFwJiBfX3gpCiAgICAgIDogX01fdChfX3guX01fdCkgeyB9CiMgMTczICIv aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21h cC5oIiAzCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAgIG1hcChf SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgIDogX01f dChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgICB7IF9NX3QuaW5zZXJ0X3VuaXF1 ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CiMgMTg5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1w cmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5oIiAzCiAgICB0ZW1wbGF0ZSA8dHlwZW5h bWUgX0lucHV0SXRlcmF0b3I+CiAgICAgIG1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w dXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICBjb25zdCBfQ29tcGFyZSYgX19jb21wLCBjb25z dCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfTV90KF9f Y29tcCwgX19hKQogICAgICB7IF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9 CiMgMjExICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Jp dHMvc3RsX21hcC5oIiAzCiAgICBtYXAmCiAgICBvcGVyYXRvcj0oY29uc3QgbWFwJiBfX3gpCiAg ICB7CiAgICAgIF9NX3QgPSBfX3guX01fdDsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAg ICBhbGxvY2F0b3JfdHlwZQogICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX3Qu Z2V0X2FsbG9jYXRvcigpOyB9CgoKCgoKCiAgICBpdGVyYXRvcgogICAgYmVnaW4oKSB7IHJldHVy biBfTV90LmJlZ2luKCk7IH0KCgoKCgoKICAgIGNvbnN0X2l0ZXJhdG9yCiAgICBiZWdpbigpIGNv bnN0IHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQoKCgoKCiAgICBpdGVyYXRvcgogICAgZW5kKCkg eyByZXR1cm4gX01fdC5lbmQoKTsgfQoKCgoKCgogICAgY29uc3RfaXRlcmF0b3IKICAgIGVuZCgp IGNvbnN0IHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KCgoKCgogICAgcmV2ZXJzZV9pdGVyYXRvcgog ICAgcmJlZ2luKCkgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQoKCgoKCgogICAgY29uc3RfcmV2 ZXJzZV9pdGVyYXRvcgogICAgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsg fQoKCgoKCgogICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgcmVuZCgpIHsgcmV0dXJuIF9NX3QucmVu ZCgpOyB9CgoKCgoKCiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICByZW5kKCkgY29uc3Qg eyByZXR1cm4gX01fdC5yZW5kKCk7IH0KCgoKICAgIGJvb2wKICAgIGVtcHR5KCkgY29uc3QgeyBy ZXR1cm4gX01fdC5lbXB0eSgpOyB9CgoKICAgIHNpemVfdHlwZQogICAgc2l6ZSgpIGNvbnN0IHsg cmV0dXJuIF9NX3Quc2l6ZSgpOyB9CgoKICAgIHNpemVfdHlwZQogICAgbWF4X3NpemUoKSBjb25z dCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KIyAzMTAgIi9ob21lL2JhbmdlcnRoL2Jpbi9n Y2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbWFwLmgiIDMKICAgIG1hcHBlZF90 eXBlJgogICAgb3BlcmF0b3JbXShjb25zdCBrZXlfdHlwZSYgX19rKQogICAgewoKICAgICAKCiAg ICAgIGl0ZXJhdG9yIF9faSA9IGxvd2VyX2JvdW5kKF9fayk7CgogICAgICBpZiAoX19pID09IGVu ZCgpIHx8IGtleV9jb21wKCkoX19rLCAoKl9faSkuZmlyc3QpKQogICAgICAgIF9faSA9IGluc2Vy dChfX2ksIHZhbHVlX3R5cGUoX19rLCBtYXBwZWRfdHlwZSgpKSk7CiAgICAgIHJldHVybiAoKl9f aSkuc2Vjb25kOwogICAgfQojIDMzOCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2lu Y2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tYXAuaCIgMwogICAgcGFpcjxpdGVyYXRvcixib29sPgog ICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAgIHsgcmV0dXJuIF9NX3QuaW5zZXJ0 X3VuaXF1ZShfX3gpOyB9CiMgMzYyICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j bHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5oIiAzCiAgICBpdGVyYXRvcgogICAgaW5zZXJ0KGl0 ZXJhdG9yIHBvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7IHJldHVybiBfTV90 Lmluc2VydF91bmlxdWUocG9zaXRpb24sIF9feCk7IH0KIyAzNzQgIi9ob21lL2JhbmdlcnRoL2Jp bi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbWFwLmgiIDMKICAgIHRlbXBs YXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgdm9pZAogICAgICBpbnNlcnQoX0lu cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICB7IF9NX3Qu aW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CiMgMzg4ICIvaG9tZS9iYW5nZXJ0aC9i aW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5oIiAzCiAgICB2b2lk CiAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7IF9NX3QuZXJhc2UoX19wb3NpdGlvbik7 IH0KIyA0MDIgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMv Yml0cy9zdGxfbWFwLmgiIDMKICAgIHNpemVfdHlwZQogICAgZXJhc2UoY29uc3Qga2V5X3R5cGUm IF9feCkgeyByZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9CiMgNDE1ICIvaG9tZS9iYW5nZXJ0aC9i aW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5oIiAzCiAgICB2b2lk CiAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsgX01fdC5lcmFz ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CiMgNDI5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1w cmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5oIiAzCiAgICB2b2lkCiAgICBzd2FwKG1h cCYgX194KSB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0KCgoKCgoKCiAgICB2b2lkCiAgICBjbGVh cigpIHsgX01fdC5jbGVhcigpOyB9CgoKCgoKICAgIGtleV9jb21wYXJlCiAgICBrZXlfY29tcCgp IGNvbnN0IHsgcmV0dXJuIF9NX3Qua2V5X2NvbXAoKTsgfQoKCgoKCiAgICB2YWx1ZV9jb21wYXJl CiAgICB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gdmFsdWVfY29tcGFyZShfTV90LmtleV9j b21wKCkpOyB9CiMgNDY3ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j KysvMy4zL2JpdHMvc3RsX21hcC5oIiAzCiAgICBpdGVyYXRvcgogICAgZmluZChjb25zdCBrZXlf dHlwZSYgX194KSB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQojIDQ4MSAiL2hvbWUvYmFuZ2Vy dGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tYXAuaCIgMwogICAg Y29uc3RfaXRlcmF0b3IKICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1 cm4gX01fdC5maW5kKF9feCk7IH0KIyA0OTIgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXBy ZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbWFwLmgiIDMKICAgIHNpemVfdHlwZQogICAgY291 bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIF9NX3QuZmluZChfX3gp ID09IF9NX3QuZW5kKCkgPyAwIDogMTsgfQojIDUwNyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z LjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tYXAuaCIgMwogICAgaXRlcmF0b3IKICAg IGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QubG93ZXJfYm91 bmQoX194KTsgfQojIDUyMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUv YysrLzMuMy9iaXRzL3N0bF9tYXAuaCIgMwogICAgY29uc3RfaXRlcmF0b3IKICAgIGxvd2VyX2Jv dW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQo X194KTsgfQojIDUzMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr LzMuMy9iaXRzL3N0bF9tYXAuaCIgMwogICAgaXRlcmF0b3IKICAgIHVwcGVyX2JvdW5kKGNvbnN0 IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsgfQojIDU0MiAi L2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9t YXAuaCIgMwogICAgY29uc3RfaXRlcmF0b3IKICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBl JiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KIyA1NjEg Ii9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxf bWFwLmgiIDMKICAgIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+CiAgICBlcXVhbF9yYW5nZShjb25z dCBrZXlfdHlwZSYgX194KQogICAgeyByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOyB9CiMg NTgwICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMv c3RsX21hcC5oIiAzCiAgICBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPgogICAg ZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIF9NX3Qu ZXF1YWxfcmFuZ2UoX194KTsgfQoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfSzEsIHR5cGVuYW1l IF9UMSwgdHlwZW5hbWUgX0MxLCB0eXBlbmFtZSBfQTE+CiAgICBmcmllbmQgYm9vbCBvcGVyYXRv cj09IChjb25zdCBtYXA8X0sxLF9UMSxfQzEsX0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBtYXA8X0sxLF9UMSxfQzEsX0ExPiYpOwogICAgdGVtcGxhdGUgPHR5cGVuYW1l IF9LMSwgdHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfQzEsIHR5cGVuYW1lIF9BMT4KICAgIGZyaWVu ZCBib29sIG9wZXJhdG9yPCAoY29uc3QgbWFwPF9LMSxfVDEsX0MxLF9BMT4mLAogICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0sxLF9UMSxfQzEsX0ExPiYpOwogIH07CiMgNjAz ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3Rs X21hcC5oIiAzCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5h bWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv cj09KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAg ICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVy biBfX3guX01fdCA9PSBfX3kuX01fdDsgfQojIDYyMCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z LjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tYXAuaCIgMwogIHRlbXBsYXRlIDx0eXBl bmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29t cGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21w YXJlLF9BbGxvYz4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV90IDwgX195Ll9NX3Q7IH0KCgog IHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJl LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBt YXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBt YXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPT0g X195KTsgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5h bWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv cj4oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAg ICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4g X195IDwgX194OyB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0 eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9w ZXJhdG9yPD0oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAg ICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsg cmV0dXJuICEoX195IDwgX194KTsgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVu YW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi b29sCiAgICBvcGVyYXRvcj49KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf X3gsCiAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf X3kpCiAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBf S2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBpbmxpbmUgdm9pZAogICAgc3dhcChtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194 LCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyBfX3guc3dhcChfX3kp OyB9Cn0KIyA2OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu My9tYXAiIDIgMwojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr Ky8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMSAzCiMgNjYgIi9ob21lL2JhbmdlcnRoL2Jpbi9n Y2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwpuYW1lc3Bh Y2Ugc3RkCnsKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCiAgICAg ICAgICAgIHR5cGVuYW1lIF9Db21wYXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgICAgdHlwZW5h bWUgX0FsbG9jID0gYWxsb2NhdG9yPHBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KICBjbGFzcyBt dWx0aW1hcDsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5h bWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv bnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f eSk7CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D b21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11 bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KTsKIyAx MDQgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9z dGxfbXVsdGltYXAuaCIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAs IHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBtdWx0aW1hcAog IHsKCiAgIAogICAKCiAgcHVibGljOgogICAgdHlwZWRlZiBfS2V5IGtleV90eXBlOwogICAgdHlw ZWRlZiBfVHAgbWFwcGVkX3R5cGU7CiAgICB0eXBlZGVmIHBhaXI8Y29uc3QgX0tleSwgX1RwPiB2 YWx1ZV90eXBlOwogICAgdHlwZWRlZiBfQ29tcGFyZSBrZXlfY29tcGFyZTsKCiAgICBjbGFzcyB2 YWx1ZV9jb21wYXJlCiAgICAgIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2 YWx1ZV90eXBlLCBib29sPgogICAgICB7CiAgICAgICAgZnJpZW5kIGNsYXNzIG11bHRpbWFwPF9L ZXksX1RwLF9Db21wYXJlLF9BbGxvYz47CiAgICAgIHByb3RlY3RlZDoKICAgICAgICBfQ29tcGFy ZSBjb21wOwogICAgICAgIHZhbHVlX2NvbXBhcmUoX0NvbXBhcmUgX19jKSA6IGNvbXAoX19jKSB7 fQogICAgICBwdWJsaWM6CiAgICAgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHZhbHVlX3R5cGUm IF9feCwgY29uc3QgdmFsdWVfdHlwZSYgX195KSBjb25zdAogICAgICAgIHsgcmV0dXJuIGNvbXAo X194LmZpcnN0LCBfX3kuZmlyc3QpOyB9CiAgICB9OwoKICBwcml2YXRlOgoKICAgIHR5cGVkZWYg X1JiX3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgX1NlbGVj dDFzdDx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBlOwoKICAgIF9S ZXBfdHlwZSBfTV90OwoKICBwdWJsaWM6CgoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1Jl cF90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5 cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgICB0eXBlZGVmIHR5cGVuYW1l IF9SZXBfdHlwZTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBf dHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgICB0eXBlZGVmIHR5cGVuYW1l IF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1Jl cF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgdHlwZWRlZiB0eXBl bmFtZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1Jl cF90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgICB0eXBlZGVmIHR5cGVuYW1l IF9SZXBfdHlwZTo6cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOwogICAgdHlwZWRl ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJz ZV9pdGVyYXRvcjsKCgoKCgoKCiAgICBtdWx0aW1hcCgpIDogX01fdChfQ29tcGFyZSgpLCBhbGxv Y2F0b3JfdHlwZSgpKSB7IH0KCgoKCgogICAgZXhwbGljaXQKICAgIG11bHRpbWFwKGNvbnN0IF9D b21wYXJlJiBfX2NvbXAsIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlw ZSgpKQogICAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgfQojIDE3NCAiL2hvbWUvYmFuZ2VydGgv YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAg ICBtdWx0aW1hcChjb25zdCBtdWx0aW1hcCYgX194KQogICAgICA6IF9NX3QoX194Ll9NX3QpIHsg fQojIDE4NiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9i aXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0lucHV0SXRlcmF0 b3I+CiAgICAgIG11bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y IF9fbGFzdCkKICAgICAgICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAg ICAgICB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0KIyAyMDIgIi9ob21l L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbXVsdGlt YXAuaCIgMwogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICBtdWx0 aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAg ICAgICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAgICAgIGNvbnN0IGFs bG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICAgIDogX01fdChfX2Nv bXAsIF9fYSkKICAgICAgICB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0K IyAyMjUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0 cy9zdGxfbXVsdGltYXAuaCIgMwogICAgbXVsdGltYXAmCiAgICBvcGVyYXRvcj0oY29uc3QgbXVs dGltYXAmIF9feCkKICAgIHsKICAgICAgX01fdCA9IF9feC5fTV90OwogICAgICByZXR1cm4gKnRo aXM7CiAgICB9CgoKICAgIGFsbG9jYXRvcl90eXBlCiAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3Qg eyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KCgoKCgoKICAgIGl0ZXJhdG9yCiAgICBi ZWdpbigpIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQoKCgoKCgogICAgY29uc3RfaXRlcmF0b3IK ICAgIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CgoKCgoKICAgIGl0ZXJh dG9yCiAgICBlbmQoKSB7IHJldHVybiBfTV90LmVuZCgpOyB9CgoKCgoKCiAgICBjb25zdF9pdGVy YXRvcgogICAgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQoKCgoKCgogICAgcmV2 ZXJzZV9pdGVyYXRvcgogICAgcmJlZ2luKCkgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQoKCgoK CgogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4g X01fdC5yYmVnaW4oKTsgfQoKCgoKCgogICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgcmVuZCgpIHsg cmV0dXJuIF9NX3QucmVuZCgpOyB9CgoKCgoKCiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAg ICByZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KCgoKICAgIGJvb2wKICAgIGVt cHR5KCkgY29uc3QgeyByZXR1cm4gX01fdC5lbXB0eSgpOyB9CgoKICAgIHNpemVfdHlwZQogICAg c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Quc2l6ZSgpOyB9CgoKICAgIHNpemVfdHlwZQogICAg bWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KIyAzMjUgIi9ob21l L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbXVsdGlt YXAuaCIgMwogICAgaXRlcmF0b3IKICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsg cmV0dXJuIF9NX3QuaW5zZXJ0X2VxdWFsKF9feCk7IH0KIyAzNDggIi9ob21lL2JhbmdlcnRoL2Jp bi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogICAg aXRlcmF0b3IKICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBl JiBfX3gpCiAgICB7IHJldHVybiBfTV90Lmluc2VydF9lcXVhbChfX3Bvc2l0aW9uLCBfX3gpOyB9 CiMgMzYwICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Jp dHMvc3RsX211bHRpbWFwLmgiIDMKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyYXRv cj4KICAgICAgdm9pZAogICAgICBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0 SXRlcmF0b3IgX19sYXN0KQogICAgICB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFz dCk7IH0KIyAzNzQgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8z LjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogICAgdm9pZAogICAgZXJhc2UoaXRlcmF0b3IgX19w b3NpdGlvbikgeyBfTV90LmVyYXNlKF9fcG9zaXRpb24pOyB9CiMgMzg4ICIvaG9tZS9iYW5nZXJ0 aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX211bHRpbWFwLmgiIDMK ICAgIHNpemVfdHlwZQogICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01f dC5lcmFzZShfX3gpOyB9CiMgNDAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j bHVkZS9jKysvMy4zL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICAgIHZvaWQKICAgIGVyYXNlKGl0 ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgeyBfTV90LmVyYXNlKF9fZmlyc3QsIF9f bGFzdCk7IH0KIyA0MTUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr Ky8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogICAgdm9pZAogICAgc3dhcChtdWx0aW1hcCYg X194KSB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0KCgoKCgoKCiAgICB2b2lkCiAgICBjbGVhcigp IHsgX01fdC5jbGVhcigpOyB9CgoKCgoKCiAgICBrZXlfY29tcGFyZQogICAga2V5X2NvbXAoKSBj b25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KCgoKCgogICAgdmFsdWVfY29tcGFyZQog ICAgdmFsdWVfY29tcCgpIGNvbnN0IHsgcmV0dXJuIHZhbHVlX2NvbXBhcmUoX01fdC5rZXlfY29t cCgpKTsgfQojIDQ1NCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr LzMuMy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgICBpdGVyYXRvcgogICAgZmluZChjb25zdCBr ZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQojIDQ2OCAiL2hvbWUvYmFu Z2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tdWx0aW1hcC5o IiAzCiAgICBjb25zdF9pdGVyYXRvcgogICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25z dCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQoKCgoKCgogICAgc2l6ZV90eXBlCiAgICBjb3Vu dChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmNvdW50KF9feCk7IH0K IyA0OTAgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0 cy9zdGxfbXVsdGltYXAuaCIgMwogICAgaXRlcmF0b3IKICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtl eV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsgfQojIDUwNCAiL2hv bWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tdWx0 aW1hcC5oIiAzCiAgICBjb25zdF9pdGVyYXRvcgogICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5 cGUmIF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CgoKCgoKCiAg ICBpdGVyYXRvcgogICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4g X01fdC51cHBlcl9ib3VuZChfX3gpOyB9CgoKCgoKCgogICAgY29uc3RfaXRlcmF0b3IKICAgIHVw cGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QudXBwZXJf Ym91bmQoX194KTsgfQojIDUzNyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1 ZGUvYysrLzMuMy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgICBwYWlyPGl0ZXJhdG9yLGl0ZXJh dG9yPgogICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5l cXVhbF9yYW5nZShfX3gpOyB9CiMgNTUzICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUv aW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICAgIHBhaXI8Y29uc3RfaXRl cmF0b3IsY29uc3RfaXRlcmF0b3I+CiAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194 KSBjb25zdCB7IHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7IH0KCiAgICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgX0sxLCB0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9DMSwgdHlwZW5hbWUgX0ExPgog ICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgbXVsdGltYXA8X0sxLF9UMSxfQzEsX0Ex PiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfSzEsX1QxLF9D MSxfQTE+Jik7CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0sxLCB0eXBlbmFtZSBfVDEsIHR5cGVu YW1lIF9DMSwgdHlwZW5hbWUgX0ExPgogICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8IChjb25zdCBt dWx0aW1hcDxfSzEsX1QxLF9DMSxfQTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgbXVsdGltYXA8X0sxLF9UMSxfQzEsX0ExPiYpOwogIH07CiMgNTc1ICIvaG9tZS9iYW5nZXJ0 aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX211bHRpbWFwLmgiIDMK ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFy ZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3Qg bXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBj b25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7CiAgICAg IHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKICAgIH0KIyA1OTQgIi9ob21lL2JhbmdlcnRo L2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwog IHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJl LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IG11 bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICBjb25z dCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiBf X3guX01fdCA8IF9feS5fTV90OyB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5h bWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yIT0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j PiYgX194LAogICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf QWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CgoKICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUg X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBtdWx0aW1hcDxfS2V5 LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8 X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gX195IDwgX194OyB9 CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29t cGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29u c3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAg ICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJl dHVybiAhKF9feSA8IF9feCk7IH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFt ZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v bAogICAgb3BlcmF0b3I+PShjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+ JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B bGxvYz4mIF9feSkKICAgIHsgcmV0dXJuICEoX194IDwgX195KTsgfQoKCiAgdGVtcGxhdGUgPHR5 cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJl LF9BbGxvYz4mIF9feCwKICAgICAgICAgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j PiYgX195KQogICAgeyBfX3guc3dhcChfX3kpOyB9Cn0KIyA2OSAiL2hvbWUvYmFuZ2VydGgvYmlu L2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9tYXAiIDIgMwojIDIxICIvaG9tZS9iYW5nZXJ0 aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3BhcmFtZXRlcl9oYW5kbGVy LmgiIDIKCgoKCgpjbGFzcyBQYXJhbWV0ZXJIYW5kbGVyOwpjbGFzcyBNdWx0aXBsZVBhcmFtZXRl ckxvb3A7CgoKCgpjbGFzcyBMb2dTdHJlYW07CgoKCgoKCgpuYW1lc3BhY2UgUGF0dGVybnMKewoK CgoKICBjbGFzcyBQYXR0ZXJuQmFzZQogIHsKICAgIHB1YmxpYzoKCgoKCiAgICAgIHZpcnR1YWwg flBhdHRlcm5CYXNlICgpOwoKCgoKCiAgICAgIHZpcnR1YWwgYm9vbCBtYXRjaCAoY29uc3Qgc3Rk OjpzdHJpbmcgJnRlc3Rfc3RyaW5nKSBjb25zdCA9IDA7CgoKCgoKICAgICAgdmlydHVhbCBzdGQ6 OnN0cmluZyBkZXNjcmlwdGlvbiAoKSBjb25zdCA9IDA7CiMgODUgIi9ob21lL2JhbmdlcnRoL3Av ZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIK ICAgICAgdmlydHVhbCBQYXR0ZXJuQmFzZSAqIGNsb25lICgpIGNvbnN0ID0gMDsKIyAxMjQgIi9o b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1l dGVyX2hhbmRsZXIuaCIKICAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0 aW9uICgpIGNvbnN0OwogIH07CiMgMTYxICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFs LklJL2Jhc2UvaW5jbHVkZS9iYXNlL3BhcmFtZXRlcl9oYW5kbGVyLmgiCiAgY2xhc3MgSW50ZWdl ciA6IHB1YmxpYyBQYXR0ZXJuQmFzZQogIHsKICAgIHB1YmxpYzoKIyAxNzQgIi9ob21lL2Jhbmdl cnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRs ZXIuaCIKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5faW50X3ZhbHVlOwojIDE4NiAiL2hvbWUv YmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9wYXJhbWV0ZXJf aGFuZGxlci5oIgogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9pbnRfdmFsdWU7CiMgMjAwICIv aG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3BhcmFt ZXRlcl9oYW5kbGVyLmgiCiAgICAgIEludGVnZXIgKGNvbnN0IGludCBsb3dlcl9ib3VuZCA9IG1p bl9pbnRfdmFsdWUsCiAgICAgICAgICAgICAgIGNvbnN0IGludCB1cHBlcl9ib3VuZCA9IG1heF9p bnRfdmFsdWUpOwoKCgoKCgoKICAgICAgdmlydHVhbCBib29sIG1hdGNoIChjb25zdCBzdGQ6OnN0 cmluZyAmdGVzdF9zdHJpbmcpIGNvbnN0OwojIDIyMSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJ LzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9wYXJhbWV0ZXJfaGFuZGxlci5oIgogICAgICB2 aXJ0dWFsIHN0ZDo6c3RyaW5nIGRlc2NyaXB0aW9uICgpIGNvbnN0OwojIDIzMiAiL2hvbWUvYmFu Z2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9wYXJhbWV0ZXJfaGFu ZGxlci5oIgogICAgICB2aXJ0dWFsIFBhdHRlcm5CYXNlICogY2xvbmUgKCkgY29uc3Q7CgogICAg cHJpdmF0ZToKIyAyNDUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9p bmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIKICAgICAgY29uc3QgaW50IGxvd2VyX2Jv dW5kOwojIDI1NyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1 ZGUvYmFzZS9wYXJhbWV0ZXJfaGFuZGxlci5oIgogICAgICBjb25zdCBpbnQgdXBwZXJfYm91bmQ7 CiAgfTsKIyAyOTUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs dWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIKICBjbGFzcyBEb3VibGUgOiBwdWJsaWMgUGF0 dGVybkJhc2UKICB7CiAgICBwdWJsaWM6CiMgMzA4ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkv Mi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3BhcmFtZXRlcl9oYW5kbGVyLmgiCiAgICAgIHN0 YXRpYyBjb25zdCBkb3VibGUgbWluX2RvdWJsZV92YWx1ZTsKIyAzMjAgIi9ob21lL2JhbmdlcnRo L3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIu aCIKICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBtYXhfZG91YmxlX3ZhbHVlOwojIDMzNCAiL2hv bWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9wYXJhbWV0 ZXJfaGFuZGxlci5oIgogICAgICBEb3VibGUgKGNvbnN0IGRvdWJsZSBsb3dlcl9ib3VuZCA9IG1p bl9kb3VibGVfdmFsdWUsCiAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHVwcGVyX2JvdW5kID0g bWF4X2RvdWJsZV92YWx1ZSk7CgoKCgoKCgogICAgICB2aXJ0dWFsIGJvb2wgbWF0Y2ggKGNvbnN0 IHN0ZDo6c3RyaW5nICZ0ZXN0X3N0cmluZykgY29uc3Q7CiMgMzU1ICIvaG9tZS9iYW5nZXJ0aC9w L2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3BhcmFtZXRlcl9oYW5kbGVyLmgi CiAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgZGVzY3JpcHRpb24gKCkgY29uc3Q7CiMgMzY2ICIv aG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3BhcmFt ZXRlcl9oYW5kbGVyLmgiCiAgICAgIHZpcnR1YWwgUGF0dGVybkJhc2UgKiBjbG9uZSAoKSBjb25z dDsKCiAgICBwcml2YXRlOgojIDM3OSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5J SS9iYXNlL2luY2x1ZGUvYmFzZS9wYXJhbWV0ZXJfaGFuZGxlci5oIgogICAgICBjb25zdCBkb3Vi bGUgbG93ZXJfYm91bmQ7CiMgMzkxICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJ L2Jhc2UvaW5jbHVkZS9iYXNlL3BhcmFtZXRlcl9oYW5kbGVyLmgiCiAgICAgIGNvbnN0IGRvdWJs ZSB1cHBlcl9ib3VuZDsKICB9OwojIDQwOCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh bC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9wYXJhbWV0ZXJfaGFuZGxlci5oIgogIGNsYXNzIFNlbGVj dGlvbiA6IHB1YmxpYyBQYXR0ZXJuQmFzZQogIHsKICAgIHB1YmxpYzoKCgoKCgoKICAgICAgU2Vs ZWN0aW9uIChjb25zdCBzdGQ6OnN0cmluZyAmc2VxKTsKCgoKCgoKCiAgICAgIHZpcnR1YWwgYm9v bCBtYXRjaCAoY29uc3Qgc3RkOjpzdHJpbmcgJnRlc3Rfc3RyaW5nKSBjb25zdDsKIyA0MzUgIi9o b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1l dGVyX2hhbmRsZXIuaCIKICAgICAgdmlydHVhbCBzdGQ6OnN0cmluZyBkZXNjcmlwdGlvbiAoKSBj b25zdDsKIyA0NDYgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs dWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIKICAgICAgdmlydHVhbCBQYXR0ZXJuQmFzZSAq IGNsb25lICgpIGNvbnN0OwoKCgoKCgogICAgICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0 aW9uICgpIGNvbnN0OwoKICAgIHByaXZhdGU6CiMgNDY0ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwu SUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3BhcmFtZXRlcl9oYW5kbGVyLmgiCiAgICAg IHN0ZDo6c3RyaW5nIHNlcXVlbmNlOwogIH07CiMgNDg4ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwu SUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3BhcmFtZXRlcl9oYW5kbGVyLmgiCiAgY2xh c3MgTXVsdGlwbGVTZWxlY3Rpb24gOiBwdWJsaWMgUGF0dGVybkJhc2UKICB7CiAgICBwdWJsaWM6 CgoKCgoKCiAgICAgIE11bHRpcGxlU2VsZWN0aW9uIChjb25zdCBzdGQ6OnN0cmluZyAmc2VxKTsK CgoKCgoKCiAgICAgIHZpcnR1YWwgYm9vbCBtYXRjaCAoY29uc3Qgc3RkOjpzdHJpbmcgJnRlc3Rf c3RyaW5nKSBjb25zdDsKIyA1MTUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkv YmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIKICAgICAgdmlydHVhbCBzdGQ6 OnN0cmluZyBkZXNjcmlwdGlvbiAoKSBjb25zdDsKIyA1MjYgIi9ob21lL2JhbmdlcnRoL3AvZGVh bC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIKICAg ICAgdmlydHVhbCBQYXR0ZXJuQmFzZSAqIGNsb25lICgpIGNvbnN0OwoKCgoKCgogICAgICB1bnNp Z25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uICgpIGNvbnN0OwoKCgoKICAgICAgY2xhc3MgRXhj Q29tbWFzTm90QWxsb3dlZCA6IHB1YmxpYyBFeGNlcHRpb25CYXNlIHsgcHVibGljOiBFeGNDb21t YXNOb3RBbGxvd2VkIChjb25zdCBpbnQgYTEpIDogYXJnMSAoYTEpIHt9OyB2aXJ0dWFsIH5FeGND b21tYXNOb3RBbGxvd2VkICgpIHRocm93ICgpIHt9OyB2aXJ0dWFsIHZvaWQgUHJpbnRJbmZvIChz dGQ6Om9zdHJlYW0gJm91dCkgY29uc3QgeyBvdXQgPDwgIkEgY29tbWEgd2FzIGZvdW5kIGF0IHBv c2l0aW9uICIgPDwgYXJnMSA8PCAiIG9mIHlvdXIgaW5wdXQgc3RyaW5nLCBidXQgY29tbWFzIGFy ZSBub3QgYWxsb3dlZCBoZXJlLiIgPDwgc3RkOjplbmRsOyB9OyBwcml2YXRlOiBjb25zdCBpbnQg YXJnMTsgfTsKCgoKCiAgICBwcml2YXRlOgojIDU1MiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJ LzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9wYXJhbWV0ZXJfaGFuZGxlci5oIgogICAgICBz dGQ6OnN0cmluZyBzZXF1ZW5jZTsKICB9OwoKCgoKCgoKICBjbGFzcyBCb29sIDogcHVibGljIFNl bGVjdGlvbgogIHsKICAgIHB1YmxpYzoKCgoKICAgICAgQm9vbCAoKTsKIyA1NzggIi9ob21lL2Jh bmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hh bmRsZXIuaCIKICAgICAgdmlydHVhbCBQYXR0ZXJuQmFzZSAqIGNsb25lICgpIGNvbnN0OwogIH07 CgoKCgoKICBjbGFzcyBBbnl0aGluZyA6IHB1YmxpYyBQYXR0ZXJuQmFzZQogIHsKICAgIHB1Ymxp YzoKCgoKCgoKCiAgICAgIEFueXRoaW5nICgpOwoKCgoKCgogICAgICB2aXJ0dWFsIGJvb2wgbWF0 Y2ggKGNvbnN0IHN0ZDo6c3RyaW5nICZ0ZXN0X3N0cmluZykgY29uc3Q7CiMgNjExICIvaG9tZS9i YW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3BhcmFtZXRlcl9o YW5kbGVyLmgiCiAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgZGVzY3JpcHRpb24gKCkgY29uc3Q7 CiMgNjIyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9i YXNlL3BhcmFtZXRlcl9oYW5kbGVyLmgiCiAgICAgIHZpcnR1YWwgUGF0dGVybkJhc2UgKiBjbG9u ZSAoKSBjb25zdDsKICB9Owp9OwojIDEwNTkgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2Rl YWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIKY2xhc3MgUGFyYW1l dGVySGFuZGxlcgp7CiAgcHJpdmF0ZToKCgoKCiAgICBQYXJhbWV0ZXJIYW5kbGVyKGNvbnN0IFBh cmFtZXRlckhhbmRsZXImKTsKCgoKCgogICAgUGFyYW1ldGVySGFuZGxlciYgb3BlcmF0b3I9KGNv bnN0IFBhcmFtZXRlckhhbmRsZXImKTsKCiAgcHVibGljOgoKCgoKICAgIGVudW0gT3V0cHV0U3R5 bGUgewogICAgICAgICAgVGV4dCwgTGFUZVgsIEhUTUwKICAgIH07CgoKCgoKCiAgICBQYXJhbWV0 ZXJIYW5kbGVyICgpOwoKCgoKCgoKICAgIHZpcnR1YWwgflBhcmFtZXRlckhhbmRsZXIgKCk7CgoK CgoKCgogICAgdmlydHVhbCBib29sIHJlYWRfaW5wdXQgKHN0ZDo6aXN0cmVhbSAmaW5wdXQpOwoj IDExMTYgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jh c2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIKICAgIHZpcnR1YWwgYm9vbCByZWFkX2lucHV0IChjb25z dCBzdGQ6OnN0cmluZyAmZmlsZW5hbWUpOwojIDExMjUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5J SS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIKICAgIHZp cnR1YWwgYm9vbCByZWFkX2lucHV0X2Zyb21fc3RyaW5nIChjb25zdCBjaGFyICpzKTsKCgoKCgog ICAgYm9vbCBvayAoKSBjb25zdDsKCgoKCiAgICB2b2lkIGNsZWFyICgpOwojIDExNTAgIi9ob21l L2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVy X2hhbmRsZXIuaCIKICAgIGJvb2wgZGVjbGFyZV9lbnRyeSAoY29uc3Qgc3RkOjpzdHJpbmcgJmVu dHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmZGVmYXVs dF92YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGF0dGVybnM6OlBhdHRl cm5CYXNlICZwYXR0ZXJuID0gUGF0dGVybnM6OkFueXRoaW5nKCkpOwoKCgoKCiAgICB2b2lkIGVu dGVyX3N1YnNlY3Rpb24gKGNvbnN0IHN0ZDo6c3RyaW5nICZzdWJzZWN0aW9uKTsKCgoKCgoKCiAg ICBib29sIGxlYXZlX3N1YnNlY3Rpb24gKCk7CiMgMTE3OCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFs LklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9wYXJhbWV0ZXJfaGFuZGxlci5oIgogICAg Y29uc3Qgc3RkOjpzdHJpbmcgJiBnZXQgKGNvbnN0IHN0ZDo6c3RyaW5nICZlbnRyeV9zdHJpbmcp IGNvbnN0OwoKCgoKCiAgICBsb25nIGludCBnZXRfaW50ZWdlciAoY29uc3Qgc3RkOjpzdHJpbmcg JmVudHJ5X3N0cmluZykgY29uc3Q7CgoKCgoKICAgIGRvdWJsZSBnZXRfZG91YmxlIChjb25zdCBz dGQ6OnN0cmluZyAmZW50cnlfc3RyaW5nKSBjb25zdDsKCgoKCgogICAgYm9vbCBnZXRfYm9vbCAo Y29uc3Qgc3RkOjpzdHJpbmcgJmVudHJ5X3N0cmluZykgY29uc3Q7CiMgMTIxMyAiL2hvbWUvYmFu Z2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9wYXJhbWV0ZXJfaGFu ZGxlci5oIgogICAgc3RkOjpvc3RyZWFtICYgcHJpbnRfcGFyYW1ldGVycyAoc3RkOjpvc3RyZWFt ICZvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPdXRwdXRT dHlsZSBzdHlsZSk7CgoKCgoKCiAgICB2b2lkIHByaW50X3BhcmFtZXRlcnNfc2VjdGlvbiAoc3Rk Ojpvc3RyZWFtICZvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg T3V0cHV0U3R5bGUgc3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdW5zaWduZWQgaW50IGluZGVudF9sZXZlbCk7CiMgMTIzMiAiL2hvbWUvYmFuZ2VydGgvcC9k ZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9wYXJhbWV0ZXJfaGFuZGxlci5oIgog ICAgdm9pZCBsb2dfcGFyYW1ldGVycyAoTG9nU3RyZWFtJiBvdXQpOwojIDEyNDEgIi9ob21lL2Jh bmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hh bmRsZXIuaCIKICAgIHZvaWQgbG9nX3BhcmFtZXRlcnNfc2VjdGlvbiAoTG9nU3RyZWFtJiBvdXQp OwoKCgoKCgoKICAgIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3VtcHRpb24gKCkgY29uc3Q7CgoK CgogICAgY2xhc3MgRXhjRW50cnlBbHJlYWR5RXhpc3RzIDogcHVibGljIEV4Y2VwdGlvbkJhc2Ug eyBwdWJsaWM6IEV4Y0VudHJ5QWxyZWFkeUV4aXN0cyAoY29uc3Qgc3RkOjpzdHJpbmcgYTEpIDog YXJnMSAoYTEpIHt9OyB2aXJ0dWFsIH5FeGNFbnRyeUFscmVhZHlFeGlzdHMgKCkgdGhyb3cgKCkg e307IHZpcnR1YWwgdm9pZCBQcmludEluZm8gKHN0ZDo6b3N0cmVhbSAmb3V0KSBjb25zdCB7IG91 dCA8PCAiVGhlIGZvbGxvd2luZyBlbnRyeSBhbHJlYWR5IGV4aXN0czogIiA8PCBhcmcxIDw8IHN0 ZDo6ZW5kbDsgfTsgcHJpdmF0ZTogY29uc3Qgc3RkOjpzdHJpbmcgYXJnMTsgfTsKCgoKCgogICAg Y2xhc3MgRXhjRGVmYXVsdERvZXNOb3RNYXRjaFBhdHRlcm4gOiBwdWJsaWMgRXhjZXB0aW9uQmFz ZSB7IHB1YmxpYzogRXhjRGVmYXVsdERvZXNOb3RNYXRjaFBhdHRlcm4gKGNvbnN0IHN0ZDo6c3Ry aW5nIGExLCBjb25zdCBzdGQ6OnN0cmluZyBhMikgOiBhcmcxIChhMSksIGFyZzIoYTIpIHt9OyB2 aXJ0dWFsIH5FeGNEZWZhdWx0RG9lc05vdE1hdGNoUGF0dGVybiAoKSB0aHJvdyAoKSB7fTsgdmly dHVhbCB2b2lkIFByaW50SW5mbyAoc3RkOjpvc3RyZWFtICZvdXQpIGNvbnN0IHsgb3V0IDw8ICJU aGUgZGVmYXVsdCBzdHJpbmcgPCIgPDwgYXJnMSA8PCAiPiBkb2VzIG5vdCBtYXRjaCB0aGUgZ2l2 ZW4gcGF0dGVybiA8IiA8PCBhcmcyIDw8ICI+IiA8PCBzdGQ6OmVuZGw7IH07IHByaXZhdGU6IGNv bnN0IHN0ZDo6c3RyaW5nIGFyZzE7IGNvbnN0IHN0ZDo6c3RyaW5nIGFyZzI7IH07CgoKCgoKCiAg ICBjbGFzcyBFeGNBbHJlYWR5QXRUb3BMZXZlbCA6IHB1YmxpYyBFeGNlcHRpb25CYXNlIHt9OwoK CgogICAgY2xhc3MgRXhjRW50cnlVbmRlY2xhcmVkIDogcHVibGljIEV4Y2VwdGlvbkJhc2UgeyBw dWJsaWM6IEV4Y0VudHJ5VW5kZWNsYXJlZCAoY29uc3Qgc3RkOjpzdHJpbmcgYTEpIDogYXJnMSAo YTEpIHt9OyB2aXJ0dWFsIH5FeGNFbnRyeVVuZGVjbGFyZWQgKCkgdGhyb3cgKCkge307IHZpcnR1 YWwgdm9pZCBQcmludEluZm8gKHN0ZDo6b3N0cmVhbSAmb3V0KSBjb25zdCB7IG91dCA8PCAiWW91 IGNhbnQgYXNrIGZvciBlbnRyeSA8IiA8PCBhcmcxIDw8ICI+IHlvdSBoYXZlIG5vdCB5ZXQgZGVj bGFyZWQiIDw8IHN0ZDo6ZW5kbDsgfTsgcHJpdmF0ZTogY29uc3Qgc3RkOjpzdHJpbmcgYXJnMTsg fTsKCgoKCgogICAgY2xhc3MgRXhjQ29udmVyc2lvbkVycm9yIDogcHVibGljIEV4Y2VwdGlvbkJh c2UgeyBwdWJsaWM6IEV4Y0NvbnZlcnNpb25FcnJvciAoY29uc3Qgc3RkOjpzdHJpbmcgYTEpIDog YXJnMSAoYTEpIHt9OyB2aXJ0dWFsIH5FeGNDb252ZXJzaW9uRXJyb3IgKCkgdGhyb3cgKCkge307 IHZpcnR1YWwgdm9pZCBQcmludEluZm8gKHN0ZDo6b3N0cmVhbSAmb3V0KSBjb25zdCB7IG91dCA8 PCAiRXJyb3Igd2hlbiB0cnlpbmcgdG8gY29udmVydCB0aGUgZm9sbG93aW5nIHN0cmluZzogIiA8 PCBhcmcxIDw8IHN0ZDo6ZW5kbDsgfTsgcHJpdmF0ZTogY29uc3Qgc3RkOjpzdHJpbmcgYXJnMTsg fTsKCgoKICBwcml2YXRlOgoKCgogICAgYm9vbCBzdGF0dXM7CgoKCgoKCgogICAgc3RydWN0IFNl Y3Rpb24KICAgIHsKICAgICAgICB+U2VjdGlvbiAoKTsKCiAgICAgICAgdHlwZWRlZiBzdGQ6Om1h cDxzdGQ6OnN0cmluZywgc3RkOjpwYWlyPHN0ZDo6c3RyaW5nLFBhdHRlcm5zOjpQYXR0ZXJuQmFz ZSo+ID4gRW50cnlUeXBlOwoKICAgICAgICBFbnRyeVR5cGUgZW50cmllczsKICAgICAgICBzdGQ6 Om1hcDxzdGQ6OnN0cmluZywgU2VjdGlvbio+IHN1YnNlY3Rpb25zOwojIDEzMTggIi9ob21lL2Jh bmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hh bmRsZXIuaCIKICAgICAgICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uICgpIGNvbnN0 OwogICAgfTsKCgoKCgoKICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzdWJzZWN0aW9uX3Bh dGg7CgoKCgoKCiAgICBTZWN0aW9uIGRlZmF1bHRzOwojIDEzNDYgIi9ob21lL2JhbmdlcnRoL3Av ZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIK ICAgIFNlY3Rpb24gY2hhbmdlZF9lbnRyaWVzOwojIDEzNjkgIi9ob21lL2JhbmdlcnRoL3AvZGVh bC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIKICAg IGJvb2wgc2Nhbl9saW5lIChzdGQ6OnN0cmluZyBsaW5lLAogICAgICAgICAgICAgICAgICAgIGNv bnN0IHVuc2lnbmVkIGludCBsaW5lbm8pOwojIDEzNzkgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5J SS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIKICAgIFNl Y3Rpb24qIGdldF9wcmVzZW50X2RlZmF1bHRzX3N1YnNlY3Rpb24gKCk7CgoKCgogICAgY29uc3Qg U2VjdGlvbiogZ2V0X3ByZXNlbnRfZGVmYXVsdHNfc3Vic2VjdGlvbiAoKSBjb25zdDsKCgoKCgoK ICAgIFNlY3Rpb24qIGdldF9wcmVzZW50X2NoYW5nZWRfc3Vic2VjdGlvbiAoKTsKCgoKCiAgICBj b25zdCBTZWN0aW9uKiBnZXRfcHJlc2VudF9jaGFuZ2VkX3N1YnNlY3Rpb24gKCkgY29uc3Q7Cgog ICAgZnJpZW5kIGNsYXNzIE11bHRpcGxlUGFyYW1ldGVyTG9vcDsKfTsKIyAxNjIwICIvaG9tZS9i YW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3BhcmFtZXRlcl9o YW5kbGVyLmgiCmNsYXNzIE11bHRpcGxlUGFyYW1ldGVyTG9vcCA6IHB1YmxpYyBQYXJhbWV0ZXJI YW5kbGVyCnsKICBwdWJsaWM6CgoKCgogICAgY2xhc3MgVXNlckNsYXNzCiAgICB7CiAgICAgIHB1 YmxpYzoKCgoKCgogICAgICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVfbmV3IChjb25zdCB1bnNpZ25l ZCBpbnQgcnVuTm8pID0gMDsKCgoKCgoKICAgICAgICB2aXJ0dWFsIHZvaWQgZGVjbGFyZV9wYXJh bWV0ZXJzIChQYXJhbWV0ZXJIYW5kbGVyICZwcm0pID0gMDsKCgoKCgogICAgICAgIHZpcnR1YWwg dm9pZCBydW4gKFBhcmFtZXRlckhhbmRsZXIgJnBybSkgPSAwOwogICAgfTsKCgoKCiAgICBNdWx0 aXBsZVBhcmFtZXRlckxvb3AgKCk7CgoKCgoKCgogICAgdmlydHVhbCB+TXVsdGlwbGVQYXJhbWV0 ZXJMb29wICgpOwoKCgoKCiAgICB2aXJ0dWFsIGJvb2wgcmVhZF9pbnB1dCAoc3RkOjppc3RyZWFt ICZJbnB1dCk7CgoKCgoKICAgIHZpcnR1YWwgYm9vbCByZWFkX2lucHV0IChjb25zdCBzdGQ6OnN0 cmluZyAmRmlsZU5hbWUpOwoKCgoKCgogICAgdmlydHVhbCBib29sIHJlYWRfaW5wdXRfZnJvbV9z dHJpbmcgKGNvbnN0IGNoYXIgKnMpOwoKCgoKICAgIHZvaWQgbG9vcCAoVXNlckNsYXNzICZ1Yyk7 CgoKCgoKCgogICAgdW5zaWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlvbiAoKSBjb25zdDsKCiAg cHJpdmF0ZToKCgoKCgogICAgY2xhc3MgRW50cnkKICAgIHsKICAgICAgcHVibGljOgoKCgoKCgoK ICAgICAgZW51bSBNdWx0aXBsZUVudHJ5VHlwZQogICAgICB7CiAgICAgICAgdmFyaWFudCwgYXJy YXkKICAgICAgfTsKCgoKCiAgICAgICAgRW50cnkgKCkge307CgoKCgoKCgogICAgICAgIEVudHJ5 IChjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gJlBhdGgsCiAgICAgICAgICAgICAgIGNv bnN0IHN0ZDo6c3RyaW5nICZOYW1lLAogICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAm VmFsdWUpOwoKCgoKCiAgICAgICAgdm9pZCBzcGxpdF9kaWZmZXJlbnRfdmFsdWVzICgpOwoKCgoK ICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc3Vic2VjdGlvbl9wYXRoOwoKCgoKICAg ICAgICBzdGQ6OnN0cmluZyBlbnRyeV9uYW1lOwoKCgoKICAgICAgICBzdGQ6OnN0cmluZyBlbnRy eV92YWx1ZTsKCgoKCgoKICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGlmZmVyZW50 X3ZhbHVlczsKCgoKCgogICAgICAgIE11bHRpcGxlRW50cnlUeXBlIHR5cGU7CgoKCgoKCgogICAg ICAgIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3VtcHRpb24gKCkgY29uc3Q7CiAgICB9OwoKCgoK ICAgIHN0ZDo6dmVjdG9yPEVudHJ5PiBtdWx0aXBsZV9jaG9pY2VzOwojIDE3ODggIi9ob21lL2Jh bmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hh bmRsZXIuaCIKICAgIHVuc2lnbmVkIGludCBuX2JyYW5jaGVzOwoKCgoKCgogICAgdm9pZCBpbml0 X2JyYW5jaGVzICgpOwoKCgoKCiAgICB2b2lkIGluaXRfYnJhbmNoZXNfc2VjdGlvbiAoY29uc3Qg UGFyYW1ldGVySGFuZGxlcjo6U2VjdGlvbiAmc2VjKTsKCgoKCgogICAgdm9pZCBmaWxsX2VudHJ5 X3ZhbHVlcyAoY29uc3QgdW5zaWduZWQgaW50IHJ1bl9ubyk7Cn07CgoKCgppbmxpbmUKYm9vbApQ YXJhbWV0ZXJIYW5kbGVyOjpvaygpIGNvbnN0CnsKICByZXR1cm4gc3RhdHVzOwp9CiMgMTcgInNv dXJjZS9kYXRhX291dF9iYXNlLmNjIiAyCiMgMSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIiAxCiMgMjAgIi9o b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFk X21hbmFnZW1lbnQuaCIKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk ZS9jKysvMy4zL3V0aWxpdHkiIDEgMwojIDY1ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1w cmUvaW5jbHVkZS9jKysvMy4zL3V0aWxpdHkiIDMKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9yZWxvcHMuaCIgMSAzCiMgNzQgIi9o b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfcmVs b3BzLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgbmFtZXNwYWNlIHJlbF9vcHMKICB7CiMgOTAgIi9o b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfcmVs b3BzLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z dCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoj IDEwMyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRz L3N0bF9yZWxvcHMuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRv cj4oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsK fQojIDExNiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9i aXRzL3N0bF9yZWxvcHMuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVy YXRvcjw9KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feSA8 IF9feCk7Cn0KIyAxMjkgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr Ky8zLjMvYml0cy9zdGxfcmVsb3BzLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJv b2wgb3BlcmF0b3I+PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4g IShfX3ggPCBfX3kpOwp9CgogIH0KfQojIDY3ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1w cmUvaW5jbHVkZS9jKysvMy4zL3V0aWxpdHkiIDIgMwojIDIxICIvaG9tZS9iYW5nZXJ0aC9wL2Rl YWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiIDIK CiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9pdGVy YXRvciIgMSAzCiMgNjUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr Ky8zLjMvaXRlcmF0b3IiIDMKCgoKCgoKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1w cmUvaW5jbHVkZS9jKysvMy4zL2lzdHJlYW0iIDEgMwojIDQzICIvaG9tZS9iYW5nZXJ0aC9iaW4v Z2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2lzdHJlYW0iIDMKCgoKCm5hbWVzcGFjZSBzdGQK ewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFz cyBiYXNpY19pc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0 cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRz IHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry YWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8X0NoYXJULCBf VHJhaXRzPiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9y PF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dl dDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwogICAgICB0eXBlZGVm IGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIHN0cmVh bXNpemUgX01fZ2NvdW50OwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2lj X2lzdHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKICAgICAgewogICAgICAgIHRoaXMtPmlu aXQoX19zYik7CiAgICAgICAgX01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsKICAgICAgfQoKICAg ICAgdmlydHVhbAogICAgICB+YmFzaWNfaXN0cmVhbSgpCiAgICAgIHsgX01fZ2NvdW50ID0gc3Ry ZWFtc2l6ZSgwKTsgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNl bnRyeTsKCgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pc3RyZWFt X3R5cGUmICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYK ICAgICAgb3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAg ICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3Nf YmFzZSYpKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihib29sJiBf X24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbik7 CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYg X19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGludCYgX19uKTsK CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYgX19u KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcmIF9fbik7Cgog ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24p OwoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgbG9uZyYgX19u KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcg bG9uZyYgX19uKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihmbG9h dCYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGRvdWJsZSYg X19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgZG91Ymxl JiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odm9pZComIF9f cCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90 eXBlKiBfX3NiKTsKCgogICAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgICBnY291bnQodm9pZCkg Y29uc3QKICAgICAgeyByZXR1cm4gX01fZ2NvdW50OyB9CgogICAgICBpbnRfdHlwZQogICAgICBn ZXQodm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSYgX19j KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVh bXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5 cGUmCiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0 dXJuIHRoaXMtPmdldChfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lz dHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBf X2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFt YnVmX3R5cGUmIF9fc2IpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmdldChfX3NiLCB0aGlzLT53aWRl bignXG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlw ZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5l IF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXpl IF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0bGluZShfX3MsIF9fbiwgdGhpcy0+d2lkZW4o J1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgaWdub3JlKHN0cmVhbXNpemUg X19uID0gMSwgaW50X3R5cGUgX19kZWxpbSA9IHRyYWl0c190eXBlOjplb2YoKSk7CgogICAgICBp bnRfdHlwZQogICAgICBwZWVrKHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHJl YWQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHN0cmVhbXNpemUKICAg ICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIF9faXN0 cmVhbV90eXBlJgogICAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19pc3RyZWFt X3R5cGUmCiAgICAgIHVuZ2V0KHZvaWQpOwoKICAgICAgaW50CiAgICAgIHN5bmModm9pZCk7Cgog ICAgICBwb3NfdHlwZQogICAgICB0ZWxsZyh2b2lkKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgog ICAgICBzZWVrZyhwb3NfdHlwZSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2co b2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6c2VudHJ5CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX1RyYWl0 cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh aXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJl YW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfVHJhaXRzOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgc2Vu dHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywgYm9vbCBfX25vc2tpcHdz ID0gZmFsc2UpOwoKICAgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuIF9NX29rOyB9CgogICAg cHJpdmF0ZToKICAgICAgYm9vbCBfTV9vazsKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwg X0NoYXJUJiBfX2MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh bTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJh aXRzPiYgX19pbiwgdW5zaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVp bnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4K ICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz dHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyJiBfX2MpCiAgICB7IHJldHVy biAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYgX19pbiwgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFz aWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNo YXIsX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX2lu ID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9U cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJh c2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXIqIF9fcykKICAgIHsg cmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19p b3N0cmVhbQogICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+LAogICAg ICBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6 CgoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh aXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpv ZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCgog ICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlw ZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFt X3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3N0cmVhbShiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX3NiKSwg X19vc3RyZWFtX3R5cGUoX19zYikKICAgICAgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNp Y19pb3N0cmVhbSgpIHsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIHdz KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcyk7Cn0KCgoKCgojIDEgIi9ob21l L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9pc3RyZWFtLnRj YyIgMSAzCiMgMzYgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8z LjMvYml0cy9pc3RyZWFtLnRjYyIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiYgX19pbiwgYm9vbCBfX25vc2tpcHdzKQogICAgewogICAgICBpZiAoX19pbi5nb29kKCkp CiAgICAgICAgewogICAgICAgICAgaWYgKF9faW4udGllKCkpCiAgICAgICAgICAgIF9faW4udGll KCktPmZsdXNoKCk7CiAgICAgICAgICBpZiAoIV9fbm9za2lwd3MgJiYgKF9faW4uZmxhZ3MoKSAm IGlvc19iYXNlOjpza2lwd3MpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgX19p bnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVh bWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgICAgIF9faW50X3R5cGUg X19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgaWYgKF9faW4uX01fY2hlY2tfZmFj ZXQoX19pbi5fTV9mY3R5cGUpKQogICAgICAgICAgICAgICAgd2hpbGUgKCF0cmFpdHNfdHlwZTo6 ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2luLl9N X2ZjdHlwZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSkpCiAgICAg ICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwoKCgogICAgICAgICAgICAgIGlmICh0 cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICBfX2lu LnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAgICAgICAgfQogICAgICAgIH0KCiAg ICAgIGlmIChfX2luLmdvb2QoKSkKICAgICAgICBfTV9vayA9IHRydWU7CiAgICAgIGVsc2UKICAg ICAgICB7CiAgICAgICAgICBfTV9vayA9IGZhbHNlOwogICAgICAgICAgX19pbi5zZXRzdGF0ZShp b3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihf X2lzdHJlYW1fdHlwZSYgKCpfX3BmKShfX2lzdHJlYW1fdHlwZSYpKQogICAgewogICAgICBfX3Bm KCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihf X2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7 CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oaW9zX2Jhc2Um ICgqX19wZikoaW9zX2Jhc2UmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVy biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKQogICAgewogICAg ICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAg ewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z dGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAg ICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBf TV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4 Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg b3BlcmF0b3I+PihzaG9ydCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBm YWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBsb25nIF9fbDsKICAgICAg ICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBf TV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19sKTsKCgogICAgICAgICAg ICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAgICAgICAgICYm IChudW1lcmljX2xpbWl0czxzaG9ydD46Om1pbigpIDw9IF9fbAogICAgICAgICAgICAgICAgICAg ICAgJiYgX19sIDw9IG51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWF4KCkpKQogICAgICAgICAgICAg ICAgX19uID0gX19sOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fZXJyIHw9 IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7 CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9y dCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlm IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNl Ojpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkp CiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg X19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0K ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19l cnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAg bG9uZyBfX2w7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQog ICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9f bCk7CgoKICAgICAgICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAg ICAgICAgICAgICAgICAmJiAobnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkgPD0gX19sCiAgICAg ICAgICAgICAgICAgICAgICAmJiBfX2wgPD0gbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQog ICAgICAgICAgICAgICAgX19uID0gX19sOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg ICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQog ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1 bnNpZ25lZCBpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2Up OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0 ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N X2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhp cywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAg ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKQogICAgewog ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAg ICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAg ICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Ogog ICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2Nl cmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0 cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0g aW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChf TV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdl dCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihs b25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwog ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShp b3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2Zu dW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywg X19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAg ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYgX19u KQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2Nl cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29k Yml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAg ICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAg ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9f Y2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIg PSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYg KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+ Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K ICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4o ZG91YmxlJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAg ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9z X2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVt Z2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9f ZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAg ICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX24pCiAgICB7 CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAg ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNl Ojppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwog ICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAg ICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0 Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93 OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6 CiAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo aXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg ICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jh c2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVj a19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhp cywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9f ZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9fc3RyZWFt YnVmX3R5cGUqIF9fc2JvdXQpCiAgICB7CiAgICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxz ZSk7CiAgICAgICBpZiAoX19jZXJiKQogICAgICAgICB7CiAgICAgICAgICAgdHJ5CiAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7CiAgICAgICAgICAg ICAgIGlmIChfX3Nib3V0KQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgIF9f c3RyZWFtYnVmX3R5cGUqIF9fc2JpbiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgICAg ICBfX3h0cmN0ID0gX19jb3B5X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgX19zYm91dCk7CiAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoIV9fc2JvdXQgfHwgIV9feHRyY3Qp CiAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAg ICAgICAgICAgfQogICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAg ICAgewoKCiAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp ICE9IDApCiAgICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K ICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjppbnRfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdl dCh2b2lkKQogICAgewogICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjpl b2YoKTsKICAgICAgaW50X3R5cGUgX19jID0gX19lb2Y7CiAgICAgIF9NX2djb3VudCA9IDA7CiAg ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jID0gdGhpcy0+ cmRidWYoKS0+c2J1bXBjKCk7CgogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2lu dF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgX01fZ2NvdW50ID0gMTsKICAgICAg ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9m Yml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX2M7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBn ZXQoY2hhcl90eXBlJiBfX2MpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRy eSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2Yg PSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19idWZ2YWwgPSB0 aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6 ZXFfaW50X3R5cGUoX19idWZ2YWwsIF9fZW9mKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgX01fZ2NvdW50ID0gMTsKICAgICAgICAgICAgICAgICAgX19jID0gdHJhaXRzX3R5 cGU6OnRvX2NoYXJfdHlwZShfX2J1ZnZhbCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8 IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0 aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQo Y2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsK ICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAg ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRf dHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0 c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhp cy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoK ICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50ICsgMSA8IF9fbgogICAgICAgICAgICAgICAg ICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAg ICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkpCiAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0 b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7 CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgfQog ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAqX19zID0gY2hhcl90 eXBlKCk7CiAgICAgIGlmICghX01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i YXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KF9f c3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9n Y291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9f Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg IGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVs aW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVv ZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fdGhpc19zYiA9IHRoaXMtPnJk YnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX190aGlzX3NiLT5zZ2V0YygpOwog ICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MyID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShf X2MpOwoKICAgICAgICAgICAgICB3aGlsZSAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2Ms IF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBl KF9fYywgX19pZGVsaW0pCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFf aW50X3R5cGUoX19zYi5zcHV0YyhfX2MyKSwgX19lb2YpKQogICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgX19jID0gX190aGlz X3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgICAgX19jMiA9IHRyYWl0c190eXBlOjp0b19j aGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRz X3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4 Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg ICAgICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBl IF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIo KnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFp dHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5 cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZf dHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0g X19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCArIDEgPCBfX24K ICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9f ZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9f YywgX19pZGVsaW0pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAqX19zKysg PSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgICAgIF9fYyA9 IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywg X19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7 CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBp ZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pKQogICAgICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fc2ItPnNidW1wYygpOwogICAgICAgICAg ICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmZhaWxiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNl cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsKICAgICAg aWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQp OwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBpZ25vcmUoc3RyZWFtc2l6ZSBf X24sIGludF90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNl bnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiICYmIF9fbiA+IDApCiAg ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBp bnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVh bWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBf X2M7CgogICAgICAgICAgICAgIF9fbiA9IG1pbihfX24sIG51bWVyaWNfbGltaXRzPHN0cmVhbXNp emU+OjptYXgoKSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbgogICAgICAg ICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYyA9IF9fc2ItPnNi dW1wYygpLCBfX2VvZikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrX01f Z2NvdW50OwogICAgICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9f YywgX19kZWxpbSkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkK ICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAg ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlw ZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHBlZWsodm9pZCkKICAg IHsKICAgICAgaW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBfTV9nY291 bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2Vy YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX2MgPSB0aGlzLT5yZGJ1 ZigpLT5zZ2V0YygpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0 KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICAgIHJldHVybiBfX2M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJl YW1zaXplIF9fbikKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5 CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9nY291bnQgPSB0aGlzLT5yZGJ1ZigpLT5z Z2V0bihfX3MsIF9fbik7CiAgICAgICAgICAgICAgaWYgKF9NX2djb3VudCAhPSBfX24pCiAgICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZh aWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6 YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7 CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+OjoKICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikK ICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1 ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gdGhpcy0+cmRidWYoKS0+aW5fYXZh aWwoKTsKICAgICAgICAgICAgICBpZiAoX19udW0gPiAwKQogICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICBfX251bSA9IG1pbihfX251bSwgX19uKTsKICAgICAgICAgICAgICAgICAg aWYgKF9fbnVtKQogICAgICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IHRoaXMtPnJkYnVmKCkt PnNnZXRuKF9fcywgX19udW0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAg ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UK ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBf TV9nY291bnQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAg ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5 cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZf dHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaWYgKCFfX3NiCiAgICAg ICAgICAgICAgICAgIHx8IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3NiLT5zcHV0YmFja2Mo X19jKSwgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsK ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgdW5nZXQodm9pZCkKICAgIHsKICAg ICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAg IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAg ICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAg ICAgICBpZiAoIV9fc2IKICAgICAgICAgICAgICAgICAgfHwgdHJhaXRzX3R5cGU6OmVxX2ludF90 eXBlKF9fc2ItPnN1bmdldGMoKSwgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg ICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i YXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbnQKICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzeW5jKHZvaWQpCiAgICB7CiAgICAgIGludCBfX3JldCA9 IC0xOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg ewogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwog ICAgICAgICAgICAgIGlmIChfX3NiKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICBpZiAoX19zYi0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICAgICAgX19yZXQgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAg ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg dHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHRlbGxnKHZvaWQpCiAgICB7CiAgICAg IHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAgICBfTV9nY291bnQgPSAwOwogICAg ICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7 CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgX19yZXQgPSB0aGlzLT5y ZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjppbik7CiAgICAg ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7 CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0 dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtnKHBvc190eXBlIF9fcG9zKQogICAgewog ICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAg ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewoKCiAg ICAgICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9f cG9zLCBpb3NfYmFzZTo6aW4pOwoKCiAgICAgICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBl KG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 ZmFpbGJpdCk7CgogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtnKG9mZl90eXBl IF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikKICAgIHsKICAgICAgX01fZ2NvdW50ID0g MDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHBvc190 eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kaXIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19i YXNlOjppbik7CgoKICAgICAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUo LTEpKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsK CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3Bl cmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19j KQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lz dHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIo X19pbiwgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog ICAgICAgICAgICB7IF9faW4uZ2V0KF9fYyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19i YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19pbi5leGNlcHRpb25zKCkgJiBpb3Nf YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K ICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWls Yml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK ICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hh clQqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6 Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90 eXBlOwogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwogICAgICBzdHJl YW1zaXplIF9fZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpz ZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg ICAgICAgICB0cnkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVt ID0gX19pbi53aWR0aCgpOwogICAgICAgICAgICAgIGlmIChfX251bSA9PSAwKQogICAgICAgICAg ICAgICAgX19udW0gPSBudW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCk7CgogICAgICAg ICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5 cGU+KF9faW4uZ2V0bG9jKCkpOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0g X1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9f aW4ucmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoK ICAgICAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBfX251bSAtIDEKICAgICAgICAgICAg ICAgICAgICAgJiYgX19jICE9IF9fZW9mICYmICFfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNl LCBfX2MpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAqX19zKysgPSBfX2M7 CiAgICAgICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAgICAgICAgIF9fYyA9 IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChfX2Mg PT0gX19lb2YpCiAgICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQp OwoKCgogICAgICAgICAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsKCiAgICAgICAgICAgICAgX19p bi53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX2luLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg ICAgIH0KICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19i YXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCxf VHJhaXRzPiYKICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2luKQogICAg ewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1f dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZf dHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90 eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f aXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgY29uc3QgX19jdHlwZV90 eXBlJiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19pbi5nZXRsb2MoKSk7CiAg ICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgX19zdHJl YW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgX19pbnRfdHlwZSBfX2MgPSBf X3NiLT5zZ2V0YygpOwoKICAgICAgd2hpbGUgKF9fYyAhPSBfX2VvZiAmJiBfX2N0eXBlLmlzKGN0 eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAg ICBpZiAoX19jID09IF9fZW9mKQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJp dCk7CgogICAgICByZXR1cm4gX19pbjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mIF9faW4sCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mIF9fc3RyKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJl YW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lz dHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwog ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJp bmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUg X19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5 cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAg aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBfX3N0ci5lcmFzZSgpOwogICAgICAgICAg c3RyZWFtc2l6ZSBfX3cgPSBfX2luLndpZHRoKCk7CiAgICAgICAgICBfX3NpemVfdHlwZSBfX247 CiAgICAgICAgICBfX24gPSBfX3cgPiAwID8gc3RhdGljX2Nhc3Q8X19zaXplX3R5cGU+KF9fdykg OiBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlw ZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOwogICAgICAgICAgY29u c3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgX19zdHJlYW1i dWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgIF9faW50X3R5cGUgX19jID0g X19zYi0+c2dldGMoKTsKCiAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBfX24KICAgICAg ICAgICAgICAgICAmJiBfX2MgIT0gX19lb2YgJiYgIV9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3Bh Y2UsIF9fYykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0ciArPSBfVHJhaXRzOjp0 b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAg ICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19j ID09IF9fZW9mKQogICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwog ICAgICAgICAgX19pbi53aWR0aCgwKTsKICAgICAgICB9CgoKICAgICAgaWYgKCFfX2V4dHJhY3Rl ZCkKICAgICAgICBfX2luLnNldHN0YXRlIChpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICByZXR1 cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m CiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAg ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsIF9DaGFy VCBfX2RlbGltKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlw ZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1f dHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0 eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXpl X3R5cGU7CgogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9IDA7CiAgICAgIGJvb2wgX190 ZXN0ZGVsaW0gPSBmYWxzZTsKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBf X2NlcmIoX19pbiwgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg X19zdHIuZXJhc2UoKTsKICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbiA9IF9fc3RyLm1heF9zaXpl KCk7CgogICAgICAgICAgX19pbnRfdHlwZSBfX2lkZWxpbSA9IF9UcmFpdHM6OnRvX2ludF90eXBl KF9fZGVsaW0pOwogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYo KTsKICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICBj b25zdCBfX2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICBfX3Rlc3Rk ZWxpbSA9IF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pOwoKICAgICAgICAgIHdo aWxlIChfX2V4dHJhY3RlZCA8PSBfX24KICAgICAgICAgICAgICAgICAmJiAhX1RyYWl0czo6ZXFf aW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAmJiAhX190ZXN0ZGVsaW0pCiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUo X19jKTsKICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAgICAgIF9fYyA9IF9f c2ItPnNidW1wYygpOwogICAgICAgICAgICAgIF9fdGVzdGRlbGltID0gX1RyYWl0czo6ZXFfaW50 X3R5cGUoX19jLCBfX2lkZWxpbSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfVHJhaXRz OjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3Nf YmFzZTo6ZW9mYml0KTsKICAgICAgICB9CiAgICAgIGlmICghX19leHRyYWN0ZWQgJiYgIV9fdGVz dGRlbGltKQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICBy ZXR1cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRz LCBjbGFzcyBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4m CiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAg ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fc3RyKQogICAgeyBy ZXR1cm4gZ2V0bGluZShfX2luLCBfX3N0ciwgX19pbi53aWRlbignXG4nKSk7IH0KCgoKCiAgZXh0 ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lzdHJlYW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRl IGlzdHJlYW0mIHdzKGlzdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0 b3I+Pihpc3RyZWFtJiwgY2hhciYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRv cj4+KGlzdHJlYW0mLCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9y Pj4oaXN0cmVhbSYsIHVuc2lnbmVkIGNoYXImKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYg b3BlcmF0b3I+Pihpc3RyZWFtJiwgc2lnbmVkIGNoYXImKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0 cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgdW5zaWduZWQgY2hhciopOwogIGV4dGVybiB0ZW1w bGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBzaWduZWQgY2hhciopOwoKCiAgZXh0 ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lzdHJlYW08d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBs YXRlIHdpc3RyZWFtJiB3cyh3aXN0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYg b3BlcmF0b3I+Pih3aXN0cmVhbSYsIHdjaGFyX3QmKTsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJl YW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCB3Y2hhcl90Kik7Cgp9CiMgMjk4ICIvaG9tZS9iYW5n ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2lzdHJlYW0iIDIgMwojIDcyICIv aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2l0ZXJhdG9yIiAy IDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Jp dHMvc3RyZWFtX2l0ZXJhdG9yLmgiIDEgMwojIDM5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMu My1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RyZWFtX2l0ZXJhdG9yLmgiIDMKCm5hbWVzcGFj ZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NoYXJUID0gY2hhciwK ICAgICAgICAgICB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwgdHlwZW5h bWUgX0Rpc3QgPSBwdHJkaWZmX3Q+CiAgICBjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yCiAgICAgIDog cHVibGljIGl0ZXJhdG9yPGlucHV0X2l0ZXJhdG9yX3RhZywgX1RwLCBfRGlzdCwgY29uc3QgX1Rw KiwgY29uc3QgX1RwJj4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh cl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsKCiAgICBwcml2YXRl OgogICAgICBpc3RyZWFtX3R5cGUqIF9NX3N0cmVhbTsKICAgICAgX1RwIF9NX3ZhbHVlOwogICAg ICBib29sIF9NX29rOwoKICAgIHB1YmxpYzoKICAgICAgaXN0cmVhbV9pdGVyYXRvcigpIDogX01f c3RyZWFtKDApLCBfTV9vayhmYWxzZSkge30KCiAgICAgIGlzdHJlYW1faXRlcmF0b3IoaXN0cmVh bV90eXBlJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpIHsgX01fcmVhZCgpOyB9CgogICAgICBpc3Ry ZWFtX2l0ZXJhdG9yKGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImIF9fb2JqKQogICAgICA6IF9NX3N0 cmVhbShfX29iai5fTV9zdHJlYW0pLCBfTV92YWx1ZShfX29iai5fTV92YWx1ZSksCiAgICAgICAg X01fb2soX19vYmouX01fb2spCiAgICAgIHsgfQoKICAgICAgY29uc3QgX1RwJgogICAgICBvcGVy YXRvciooKSBjb25zdCB7IHJldHVybiBfTV92YWx1ZTsgfQoKICAgICAgY29uc3QgX1RwKgogICAg ICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgICAgIGlz dHJlYW1faXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7IF9NX3JlYWQoKTsgcmV0 dXJuICp0aGlzOyB9CgogICAgICBpc3RyZWFtX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50 KQogICAgICB7CiAgICAgICAgaXN0cmVhbV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAg IF9NX3JlYWQoKTsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIGJvb2wKICAg ICAgX01fZXF1YWwoY29uc3QgaXN0cmVhbV9pdGVyYXRvciYgX194KSBjb25zdAogICAgICB7IHJl dHVybiAoX01fb2sgPT0gX194Ll9NX29rKSAmJiAoIV9NX29rIHx8IF9NX3N0cmVhbSA9PSBfX3gu X01fc3RyZWFtKTt9CgogICAgcHJpdmF0ZToKICAgICAgdm9pZAogICAgICBfTV9yZWFkKCkKICAg ICAgewogICAgICAgIF9NX29rID0gKF9NX3N0cmVhbSAmJiAqX01fc3RyZWFtKSA/IHRydWUgOiBm YWxzZTsKICAgICAgICBpZiAoX01fb2spCiAgICAgICAgICB7CiAgICAgICAgICAgICpfTV9zdHJl YW0gPj4gX01fdmFsdWU7CiAgICAgICAgICAgIF9NX29rID0gKl9NX3N0cmVhbSA/IHRydWUgOiBm YWxzZTsKICAgICAgICAgIH0KICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw LCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9EaXN0PgogICAg aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9D aGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1f aXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX195KQogICAgeyByZXR1cm4g X194Ll9NX2VxdWFsKF9feSk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0NoYXJU LCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfRGlzdD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv ciE9KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYg X194LAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBf VHJhaXRzLCBfRGlzdD4mIF9feSkKICAgIHsgcmV0dXJuICFfX3guX01fZXF1YWwoX195KTsgfQoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ2hhclQgPSBjaGFyLAogICAgICAg ICAgIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIG9z dHJlYW1faXRlcmF0b3IKICAgICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3Rh Zywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl ZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAg ICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsK CiAgICBwcml2YXRlOgogICAgICBvc3RyZWFtX3R5cGUqIF9NX3N0cmVhbTsKICAgICAgY29uc3Qg X0NoYXJUKiBfTV9zdHJpbmc7CgogICAgcHVibGljOgogICAgICBvc3RyZWFtX2l0ZXJhdG9yKG9z dHJlYW1fdHlwZSYgX19zKSA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKDApIHt9CgogICAg ICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19zLCBjb25zdCBfQ2hhclQqIF9fYykK ICAgICAgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZyhfX2MpIHsgfQoKICAgICAgb3N0cmVh bV9pdGVyYXRvcihjb25zdCBvc3RyZWFtX2l0ZXJhdG9yJiBfX29iaikKICAgICAgOiBfTV9zdHJl YW0oX19vYmouX01fc3RyZWFtKSwgX01fc3RyaW5nKF9fb2JqLl9NX3N0cmluZykgeyB9CgogICAg ICBvc3RyZWFtX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX3ZhbHVlKQog ICAgICB7CiAgICAgICAgKl9NX3N0cmVhbSA8PCBfX3ZhbHVlOwogICAgICAgIGlmIChfTV9zdHJp bmcpICpfTV9zdHJlYW0gPDwgX01fc3RyaW5nOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAg fQoKICAgICAgb3N0cmVhbV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRo aXM7IH0KCiAgICAgIG9zdHJlYW1faXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVy biAqdGhpczsgfQoKICAgICAgb3N0cmVhbV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKyhpbnQp IHsgcmV0dXJuICp0aGlzOyB9CiAgICB9Owp9CiMgNzMgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaXRlcmF0b3IiIDIgMwojIDIzICIvaG9tZS9iYW5nZXJ0 aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50 LmgiIDIKIyAzNiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1 ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgpuYW1lc3BhY2UgVGhyZWFkcwp7CgogIGNsYXNz IEZ1bkRhdGFCYXNlOwojIDU0ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jh c2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgY2xhc3MgRHVtbXlUaHJlYWRN dXRleAogIHsKICAgIHB1YmxpYzoKCgoKCgoKCiAgICAgIGlubGluZSB2b2lkIGFjcXVpcmUgKCkg Y29uc3Qge307CiMgNzMgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9p bmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgaW5saW5lIHZvaWQgcmVsZWFz ZSAoKSBjb25zdCB7fTsKICB9OwojIDkxICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFs LklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgY2xhc3MgRHVtbXlU aHJlYWRNYW5hZ2VyCiAgewogICAgcHVibGljOgoKCgoKCiAgICAgIHR5cGVkZWYgdm9pZCAqICgq RnVuUHRyKSAodm9pZCAqKTsKIyAxMTAgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwu SUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgdm9pZCBzcGF3 biAoY29uc3QgRnVuUHRyIGZ1bl9wdHIsCiAgICAgICAgICAgICAgICAgIHZvaWQgKiBmdW5fZGF0 YSwKICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKSBjb25zdDsKIyAxMjIgIi9ob21lL2Jhbmdl cnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1l bnQuaCIKICAgICAgaW5saW5lIHZvaWQgd2FpdCAoKSBjb25zdCB7fTsKICB9OwojIDE0MiAiL2hv bWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRf bWFuYWdlbWVudC5oIgogIGNsYXNzIER1bW15QmFycmllcgogIHsKICAgIHB1YmxpYzoKIyAxNTUg Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhy ZWFkX21hbmFnZW1lbnQuaCIKICAgICAgRHVtbXlCYXJyaWVyIChjb25zdCB1bnNpZ25lZCBpbnQg Y291bnQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IDAsCiAgICAgICAg ICAgICAgICAgICAgdm9pZCAqYXJnID0gMCk7CiMgMTY3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwu SUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAg IGludCB3YWl0ICgpIHsgcmV0dXJuIDA7IH07CgoKCgoKICAgICAgdm9pZCBkdW1wICgpIHt9OwoK CgoKICAgICAgY2xhc3MgRXhjQmFycmllclNpemVOb3RVc2VmdWwgOiBwdWJsaWMgRXhjZXB0aW9u QmFzZSB7IHB1YmxpYzogRXhjQmFycmllclNpemVOb3RVc2VmdWwgKGNvbnN0IGludCBhMSkgOiBh cmcxIChhMSkge307IHZpcnR1YWwgfkV4Y0JhcnJpZXJTaXplTm90VXNlZnVsICgpIHRocm93ICgp IHt9OyB2aXJ0dWFsIHZvaWQgUHJpbnRJbmZvIChzdGQ6Om9zdHJlYW0gJm91dCkgY29uc3QgeyBv dXQgPDwgIkluIHNpbmdsZS10aHJlYWQgbW9kZSwgb3RoZXIgYmFycmllciBzaXplcyB0aGFuIDEg YXJlIG5vdCAiIDw8ICJ1c2VmdWwuIFlvdSBnYXZlICIgPDwgYXJnMSA8PCBzdGQ6OmVuZGw7IH07 IHByaXZhdGU6IGNvbnN0IGludCBhcmcxOyB9OwoKCgogIH07CiMgMzk2ICIvaG9tZS9iYW5nZXJ0 aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50 LmgiCiAgdHlwZWRlZiBEdW1teVRocmVhZE11dGV4IFRocmVhZE11dGV4OwogIHR5cGVkZWYgRHVt bXlUaHJlYWRNYW5hZ2VyIFRocmVhZE1hbmFnZXI7CiAgdHlwZWRlZiBEdW1teUJhcnJpZXIgQmFy cmllcjsKIyA0MDkgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs dWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIGNs YXNzIFJldFR5cGU+CiAgc3RydWN0IE1lbUZ1blB0cjAKICB7CiAgICAgIHR5cGVkZWYgUmV0VHlw ZSAoQ2xhc3M6Oip0eXBlKSAoKTsKICB9OwojIDQzNiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJ LzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBs YXRlIDxjbGFzcyBDbGFzcywgY2xhc3MgQXJnMSwgY2xhc3MgUmV0VHlwZT4KICBzdHJ1Y3QgTWVt RnVuUHRyMQogIHsKICAgICAgdHlwZWRlZiBSZXRUeXBlIChDbGFzczo6KnR5cGUpIChBcmcxKTsK ICB9OwojIDQ2MyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1 ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgY2xh c3MgQXJnMSwgY2xhc3MgQXJnMiwgY2xhc3MgUmV0VHlwZT4KICBzdHJ1Y3QgTWVtRnVuUHRyMgog IHsKICAgICAgdHlwZWRlZiBSZXRUeXBlIChDbGFzczo6KnR5cGUpIChBcmcxLCBBcmcyKTsKICB9 OwojIDQ5MSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUv YmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgY2xhc3Mg QXJnMSwgY2xhc3MgQXJnMiwgY2xhc3MgQXJnMywgY2xhc3MgUmV0VHlwZT4KICBzdHJ1Y3QgTWVt RnVuUHRyMwogIHsKICAgICAgdHlwZWRlZiBSZXRUeXBlIChDbGFzczo6KnR5cGUpIChBcmcxLCBB cmcyLCBBcmczKTsKICB9OwojIDUxOSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5J SS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFz cyBDbGFzcywgY2xhc3MgQXJnMSwgY2xhc3MgQXJnMiwgY2xhc3MgQXJnMywgY2xhc3MgQXJnNCwg Y2xhc3MgUmV0VHlwZT4KICBzdHJ1Y3QgTWVtRnVuUHRyNAogIHsKICAgICAgdHlwZWRlZiBSZXRU eXBlIChDbGFzczo6KnR5cGUpIChBcmcxLCBBcmcyLCBBcmczLCBBcmc0KTsKICB9OwojIDU0NyAi L2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJl YWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgY2xhc3MgQXJnMSwgY2xh c3MgQXJnMiwgY2xhc3MgQXJnMywgY2xhc3MgQXJnNCwgY2xhc3MgQXJnNSwgY2xhc3MgUmV0VHlw ZT4KICBzdHJ1Y3QgTWVtRnVuUHRyNQogIHsKICAgICAgdHlwZWRlZiBSZXRUeXBlIChDbGFzczo6 KnR5cGUpIChBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1KTsKICB9OwojIDU3NSAiL2hvbWUv YmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFu YWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgY2xhc3MgQXJnMSwgY2xhc3MgQXJn MiwgY2xhc3MgQXJnMywgY2xhc3MgQXJnNCwgY2xhc3MgQXJnNSwgY2xhc3MgQXJnNiwgY2xhc3Mg UmV0VHlwZT4KICBzdHJ1Y3QgTWVtRnVuUHRyNgogIHsKICAgICAgdHlwZWRlZiBSZXRUeXBlIChD bGFzczo6KnR5cGUpIChBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2KTsKICB9Owoj IDYwMyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFz ZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgY2xhc3MgQXJn MSwgY2xhc3MgQXJnMiwgY2xhc3MgQXJnMywgY2xhc3MgQXJnNCwgY2xhc3MgQXJnNSwgY2xhc3Mg QXJnNiwgY2xhc3MgQXJnNywgY2xhc3MgUmV0VHlwZT4KICBzdHJ1Y3QgTWVtRnVuUHRyNwogIHsK ICAgICAgdHlwZWRlZiBSZXRUeXBlIChDbGFzczo6KnR5cGUpIChBcmcxLCBBcmcyLCBBcmczLCBB cmc0LCBBcmc1LCBBcmc2LCBBcmc3KTsKICB9OwojIDYzMiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFs LklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRl bXBsYXRlIDxjbGFzcyBDbGFzcywgY2xhc3MgQXJnMSwgY2xhc3MgQXJnMiwgY2xhc3MgQXJnMywg Y2xhc3MgQXJnNCwgY2xhc3MgQXJnNSwgY2xhc3MgQXJnNiwgY2xhc3MgQXJnNywgY2xhc3MgQXJn OCwgY2xhc3MgUmV0VHlwZT4KICBzdHJ1Y3QgTWVtRnVuUHRyOAogIHsKICAgICAgdHlwZWRlZiBS ZXRUeXBlIChDbGFzczo6KnR5cGUpIChBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2 LCBBcmc3LCBBcmc4KTsKICB9OwojIDY2MiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh bC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxj bGFzcyBDbGFzcywgY2xhc3MgQXJnMSwgY2xhc3MgQXJnMiwgY2xhc3MgQXJnMywgY2xhc3MgQXJn NCwgY2xhc3MgQXJnNSwgY2xhc3MgQXJnNiwgY2xhc3MgQXJnNywgY2xhc3MgQXJnOCwgY2xhc3Mg QXJnOSwgY2xhc3MgUmV0VHlwZT4KICBzdHJ1Y3QgTWVtRnVuUHRyOQogIHsKICAgICAgdHlwZWRl ZiBSZXRUeXBlIChDbGFzczo6KnR5cGUpIChBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBB cmc2LCBBcmc3LCBBcmc4LCBBcmc5KTsKICB9OwojIDY5MyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFs LklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRl bXBsYXRlIDxjbGFzcyBDbGFzcywgY2xhc3MgQXJnMSwgY2xhc3MgQXJnMiwgY2xhc3MgQXJnMywg Y2xhc3MgQXJnNCwgY2xhc3MgQXJnNSwgY2xhc3MgQXJnNiwgY2xhc3MgQXJnNywgY2xhc3MgQXJn OCwgY2xhc3MgQXJnOSwgY2xhc3MgQXJnMTAsIGNsYXNzIFJldFR5cGU+CiAgc3RydWN0IE1lbUZ1 blB0cjEwCiAgewogICAgICB0eXBlZGVmIFJldFR5cGUgKENsYXNzOjoqdHlwZSkgKEFyZzEsIEFy ZzIsIEFyZzMsIEFyZzQsIEFyZzUsIEFyZzYsIEFyZzcsIEFyZzgsIEFyZzksIEFyZzEwKTsKICB9 OwojIDcyNCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUv YmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIGNsYXNzIEZ1bkVuY2Fwc3VsYXRpb24KICB7CiAg ICBwcml2YXRlOgojIDczNSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNl L2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICBGdW5FbmNhcHN1bGF0aW9u ICgpOwoKICAgIHB1YmxpYzoKCgoKCgogICAgICBGdW5FbmNhcHN1bGF0aW9uIChjb25zdCBGdW5F bmNhcHN1bGF0aW9uICZmdW5fZW5jYXBzdWxhdGlvbik7CiMgNzUyICIvaG9tZS9iYW5nZXJ0aC9w L2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50Lmgi CiAgICAgIEZ1bkVuY2Fwc3VsYXRpb24gKEZ1bkRhdGFCYXNlICpmdW5fZGF0YV9iYXNlKTsKCgoK CgogICAgICB+RnVuRW5jYXBzdWxhdGlvbiAoKTsKCgoKCgoKICAgICAgY29uc3QgRnVuRW5jYXBz dWxhdGlvbiAmIG9wZXJhdG9yID0gKGNvbnN0IEZ1bkVuY2Fwc3VsYXRpb24gJmZ1bl9lbmNhcHN1 bGF0aW9uKTsKCgoKCgogICAgICBjb25zdCBGdW5EYXRhQmFzZSAqIGZ1bl9kYXRhX2Jhc2U7CiAg fTsKIyA3ODMgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRl L2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICBjbGFzcyBGdW5EYXRhQmFzZQogIHsKICAgIHB1 YmxpYzoKCgoKCgoKICAgICAgdHlwZWRlZiB2b2lkICogKCpUaHJlYWRFbnRyeVBvaW50KSAodm9p ZCAqKTsKCgoKCgoKCiAgICAgIEZ1bkRhdGFCYXNlIChjb25zdCBUaHJlYWRFbnRyeVBvaW50IHRo cmVhZF9lbnRyeV9wb2ludCk7CgoKCgogICAgICBGdW5EYXRhQmFzZSAoY29uc3QgRnVuRGF0YUJh c2UgJik7CgoKCgoKCgogICAgICB2aXJ0dWFsIH5GdW5EYXRhQmFzZSAoKTsKIyA4MjMgIi9ob21l L2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21h bmFnZW1lbnQuaCIKICAgICAgdmlydHVhbCBGdW5EYXRhQmFzZSAqIGNsb25lICgpIGNvbnN0ID0g MDsKIyA4MzQgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRl L2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgbXV0YWJsZSBUaHJlYWRNdXRleCBsb2Nr OwoKICAgIHByaXZhdGU6CgoKCgoKCgogICAgICBUaHJlYWRFbnRyeVBvaW50IHRocmVhZF9lbnRy eV9wb2ludDsKCgoKCgoKCiAgICAgIGZyaWVuZCB2b2lkIHNwYXduIChUaHJlYWRNYW5hZ2VyICZ0 aHJlYWRfbWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZ1bkVuY2Fwc3Vs YXRpb24gJmZ1bl9kYXRhKTsKICB9OwojIDg2NSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRl IDx0eXBlbmFtZSBSZXRUeXBlPgogIGNsYXNzIEZ1bkRhdGEwIDogcHVibGljIEZ1bkRhdGFCYXNl CiAgewogICAgcHVibGljOgoKCgoKCiAgICAgIHR5cGVkZWYgUmV0VHlwZSAoKkZ1blB0cikgKCk7 CgoKCgoKCiAgICAgIEZ1bkRhdGEwIChGdW5QdHIgZnVuX3B0cik7CgoKCgogICAgICBGdW5EYXRh MCAoY29uc3QgRnVuRGF0YTAgJmZ1bl9kYXRhMCk7CgoKCgogICAgICB2aXJ0dWFsIEZ1bkRhdGFC YXNlICogY2xvbmUgKCkgY29uc3Q7CgogICAgcHJpdmF0ZToKCgoKCgoKICAgICAgRnVuUHRyIGZ1 bl9wdHI7CgoKCgoKICAgICAgc3RhdGljIHZvaWQgKiB0aHJlYWRfZW50cnlfcG9pbnQgKHZvaWQg KmFyZyk7CgoKCiAgcHVibGljOgoKCgoKCgoKICAgICAgY2xhc3MgQXJnQ29sbGVjdG9yCiAgICAg IHsKICAgICAgICBwdWJsaWM6CgoKCgoKCiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEZ1bkRh dGEwPFJldFR5cGU+OjpGdW5QdHIgRnVuUHRyOwoKCgoKCgogICAgICAgICAgQXJnQ29sbGVjdG9y IChGdW5QdHIgZnVuX3B0cik7CiMgOTUyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFs LklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgICAgICBGdW5F bmNhcHN1bGF0aW9uIGNvbGxlY3RfYXJncyAoKTsKCiAgICAgICAgcHJpdmF0ZToKCgoKCiAgICAg ICAgICBGdW5QdHIgZnVuX3B0cjsKICAgICAgfTsKIyA5NzIgIi9ob21lL2JhbmdlcnRoL3AvZGVh bC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB9 OwojIDk4MyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUv YmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBl bmFtZSBSZXRUeXBlPgogIGNsYXNzIEZ1bkRhdGExIDogcHVibGljIEZ1bkRhdGFCYXNlCiAgewog ICAgcHVibGljOgoKCgoKCiAgICAgIHR5cGVkZWYgUmV0VHlwZSAoKkZ1blB0cikgKEFyZzEpOwoK CgoKCgogICAgICBGdW5EYXRhMSAoRnVuUHRyIGZ1bl9wdHIsCiAgICAgICAgICAgICAgICBBcmcx IGFyZzEpOwoKCgoKICAgICAgRnVuRGF0YTEgKGNvbnN0IEZ1bkRhdGExICZmdW5fZGF0YTEpOwoK CgoKICAgICAgdmlydHVhbCBGdW5EYXRhQmFzZSAqIGNsb25lICgpIGNvbnN0OwoKICAgIHByaXZh dGU6CgoKCgoKCiAgICAgIEZ1blB0ciBmdW5fcHRyOwoKCgoKCiAgICAgIEFyZzEgYXJnMTsKCgoK CgogICAgICBzdGF0aWMgdm9pZCAqIHRocmVhZF9lbnRyeV9wb2ludCAodm9pZCAqYXJnKTsKIyAx MDQwICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNl L3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgIGNsYXNzIEFyZ0NvbGxlY3RvcgogICAgICB7CiAg ICAgICAgcHVibGljOgoKCgoKCgogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBGdW5EYXRhMTxB cmcxLFJldFR5cGU+OjpGdW5QdHIgRnVuUHRyOwoKCgoKCgogICAgICAgICAgQXJnQ29sbGVjdG9y IChGdW5QdHIgZnVuX3B0cik7CiMgMTA2NSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh bC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICAgICAgRnVu RW5jYXBzdWxhdGlvbiBjb2xsZWN0X2FyZ3MgKEFyZzEgYXJnMSk7CgogICAgICAgIHByaXZhdGU6 CgoKCgogICAgICAgICAgRnVuUHRyIGZ1bl9wdHI7CiAgICAgIH07CgoKCgoKCiAgICAgIHRlbXBs YXRlIDx0eXBlbmFtZSBBcmcxXz4KICAgICAgZnJpZW5kCiAgICAgIHR5cGVuYW1lIEZ1bkRhdGEx PEFyZzFfLHZvaWQ+OjpBcmdDb2xsZWN0b3IKICAgICAgZW5jYXBzdWxhdGUgKHZvaWQgKCpmdW5f cHRyKShBcmcxXykpOwogIH07CiMgMTA5NSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh bC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDx0 eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBSZXRUeXBlPgogIGNsYXNzIEZ1 bkRhdGEyIDogcHVibGljIEZ1bkRhdGFCYXNlCiAgewogICAgcHVibGljOgoKCgoKCiAgICAgIHR5 cGVkZWYgUmV0VHlwZSAoKkZ1blB0cikgKEFyZzEsIEFyZzIpOwoKCgoKCgogICAgICBGdW5EYXRh MiAoRnVuUHRyIGZ1bl9wdHIsCiAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAg ICAgICBBcmcyIGFyZzIpOwoKCgoKICAgICAgRnVuRGF0YTIgKGNvbnN0IEZ1bkRhdGEyICZmdW5f ZGF0YTIpOwoKCgoKICAgICAgdmlydHVhbCBGdW5EYXRhQmFzZSAqIGNsb25lICgpIGNvbnN0OwoK ICAgIHByaXZhdGU6CgoKCgoKCiAgICAgIEZ1blB0ciBmdW5fcHRyOwoKCgoKCiAgICAgIEFyZzEg YXJnMTsKICAgICAgQXJnMiBhcmcyOwoKCgoKCiAgICAgIHN0YXRpYyB2b2lkICogdGhyZWFkX2Vu dHJ5X3BvaW50ICh2b2lkICphcmcpOwojIDExNTQgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8y L2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgY2xh c3MgQXJnQ29sbGVjdG9yCiAgICAgIHsKICAgICAgICBwdWJsaWM6CgoKCgoKCiAgICAgICAgICB0 eXBlZGVmIHR5cGVuYW1lIEZ1bkRhdGEyPEFyZzEsQXJnMixSZXRUeXBlPjo6RnVuUHRyIEZ1blB0 cjsKCgoKCgoKICAgICAgICAgIEFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpOwojIDExNzkg Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhy ZWFkX21hbmFnZW1lbnQuaCIKICAgICAgICAgIEZ1bkVuY2Fwc3VsYXRpb24gY29sbGVjdF9hcmdz IChBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJn MiBhcmcyKTsKCiAgICAgICAgcHJpdmF0ZToKCgoKCiAgICAgICAgICBGdW5QdHIgZnVuX3B0cjsK ICAgICAgfTsKCgoKCgoKICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzFfLCB0eXBlbmFtZSBB cmcyXz4KICAgICAgZnJpZW5kCiAgICAgIHR5cGVuYW1lIEZ1bkRhdGEyPEFyZzFfLEFyZzJfLHZv aWQ+OjpBcmdDb2xsZWN0b3IKICAgICAgZW5jYXBzdWxhdGUgKHZvaWQgKCpmdW5fcHRyKShBcmcx XywgQXJnMl8pKTsKICB9OwojIDEyMDkgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwu SUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8dHlw ZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgUmV0VHlw ZT4KICBjbGFzcyBGdW5EYXRhMyA6IHB1YmxpYyBGdW5EYXRhQmFzZQogIHsKICAgIHB1YmxpYzoK CgoKCgogICAgICB0eXBlZGVmIFJldFR5cGUgKCpGdW5QdHIpIChBcmcxLCBBcmcyLCBBcmczKTsK CgoKCgoKICAgICAgRnVuRGF0YTMgKEZ1blB0ciBmdW5fcHRyLAogICAgICAgICAgICAgICAgQXJn MSBhcmcxLAogICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgQXJnMyBh cmczKTsKCgoKCiAgICAgIEZ1bkRhdGEzIChjb25zdCBGdW5EYXRhMyAmZnVuX2RhdGEzKTsKCgoK CiAgICAgIHZpcnR1YWwgRnVuRGF0YUJhc2UgKiBjbG9uZSAoKSBjb25zdDsKCiAgICBwcml2YXRl OgoKCgoKCgogICAgICBGdW5QdHIgZnVuX3B0cjsKCgoKCgogICAgICBBcmcxIGFyZzE7CiAgICAg IEFyZzIgYXJnMjsKICAgICAgQXJnMyBhcmczOwoKCgoKCiAgICAgIHN0YXRpYyB2b2lkICogdGhy ZWFkX2VudHJ5X3BvaW50ICh2b2lkICphcmcpOwojIDEyNzAgIi9ob21lL2JhbmdlcnRoL3AvZGVh bC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAg ICAgY2xhc3MgQXJnQ29sbGVjdG9yCiAgICAgIHsKICAgICAgICBwdWJsaWM6CgoKCgoKCiAgICAg ICAgICB0eXBlZGVmIHR5cGVuYW1lIEZ1bkRhdGEzPEFyZzEsQXJnMixBcmczLFJldFR5cGU+OjpG dW5QdHIgRnVuUHRyOwoKCgoKCgogICAgICAgICAgQXJnQ29sbGVjdG9yIChGdW5QdHIgZnVuX3B0 cik7CiMgMTI5NSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1 ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICAgICAgRnVuRW5jYXBzdWxhdGlvbiBj b2xsZWN0X2FyZ3MgKEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQXJnMyBhcmczKTsKCiAgICAgICAgcHJpdmF0ZToKCgoKCiAgICAgICAgICBGdW5QdHIgZnVu X3B0cjsKICAgICAgfTsKCgoKCgoKICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzFfLCB0eXBl bmFtZSBBcmcyXywgdHlwZW5hbWUgQXJnM18+CiAgICAgIGZyaWVuZAogICAgICB0eXBlbmFtZSBG dW5EYXRhMzxBcmcxXyxBcmcyXyxBcmczXyx2b2lkPjo6QXJnQ29sbGVjdG9yCiAgICAgIGVuY2Fw c3VsYXRlICh2b2lkICgqZnVuX3B0cikoQXJnMV8sQXJnMl8sQXJnM18pKTsKICB9OwojIDEzMjYg Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhy ZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJn MiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgUmV0VHlwZT4KICBjbGFz cyBGdW5EYXRhNCA6IHB1YmxpYyBGdW5EYXRhQmFzZQogIHsKICAgIHB1YmxpYzoKCgoKCgogICAg ICB0eXBlZGVmIFJldFR5cGUgKCpGdW5QdHIpIChBcmcxLCBBcmcyLCBBcmczLCBBcmc0KTsKCgoK CgoKICAgICAgRnVuRGF0YTQgKEZ1blB0ciBmdW5fcHRyLAogICAgICAgICAgICAgICAgQXJnMSBh cmcxLAogICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgQXJnMyBhcmcz LAogICAgICAgICAgICAgICAgQXJnNCBhcmc0KTsKCgoKCiAgICAgIEZ1bkRhdGE0IChjb25zdCBG dW5EYXRhNCAmZnVuX2RhdGE0KTsKCgoKCiAgICAgIHZpcnR1YWwgRnVuRGF0YUJhc2UgKiBjbG9u ZSAoKSBjb25zdDsKCiAgICBwcml2YXRlOgoKCgoKCgogICAgICBGdW5QdHIgZnVuX3B0cjsKCgoK CgogICAgICBBcmcxIGFyZzE7CiAgICAgIEFyZzIgYXJnMjsKICAgICAgQXJnMyBhcmczOwogICAg ICBBcmc0IGFyZzQ7CgoKCgoKICAgICAgc3RhdGljIHZvaWQgKiB0aHJlYWRfZW50cnlfcG9pbnQg KHZvaWQgKmFyZyk7CiMgMTM4OSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9i YXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICBjbGFzcyBBcmdDb2xs ZWN0b3IKICAgICAgewogICAgICAgIHB1YmxpYzoKCgoKCgoKICAgICAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgRnVuRGF0YTQ8QXJnMSxBcmcyLEFyZzMsQXJnNCxSZXRUeXBlPjo6RnVuUHRyIEZ1blB0 cjsKCgoKCgoKICAgICAgICAgIEFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpOwojIDE0MTQg Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhy ZWFkX21hbmFnZW1lbnQuaCIKICAgICAgICAgIEZ1bkVuY2Fwc3VsYXRpb24gY29sbGVjdF9hcmdz IChBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJn MiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJn MywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQpOwoK ICAgICAgICBwcml2YXRlOgoKCgoKICAgICAgICAgIEZ1blB0ciBmdW5fcHRyOwogICAgICB9OwoK CgoKCgogICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMV8sIHR5cGVuYW1lIEFyZzJfLCB0eXBl bmFtZSBBcmczXywgdHlwZW5hbWUgQXJnNF8+CiAgICAgIGZyaWVuZAogICAgICB0eXBlbmFtZSBG dW5EYXRhNDxBcmcxXyxBcmcyXyxBcmczXyxBcmc0Xyx2b2lkPjo6QXJnQ29sbGVjdG9yCiAgICAg IGVuY2Fwc3VsYXRlICh2b2lkICgqZnVuX3B0cikoQXJnMV8sIEFyZzJfLCBBcmczXywgQXJnNF8p KTsKICB9OwojIDE0NDcgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9p bmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJn MSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUg QXJnNSwgdHlwZW5hbWUgUmV0VHlwZT4KICBjbGFzcyBGdW5EYXRhNSA6IHB1YmxpYyBGdW5EYXRh QmFzZQogIHsKICAgIHB1YmxpYzoKCgoKCgogICAgICB0eXBlZGVmIFJldFR5cGUgKCpGdW5QdHIp IChBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1KTsKCgoKCgoKICAgICAgRnVuRGF0YTUgKEZ1 blB0ciBmdW5fcHRyLAogICAgICAgICAgICAgICAgQXJnMSBhcmcxLAogICAgICAgICAgICAgICAg QXJnMiBhcmcyLAogICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAgICAgICAgICAgQXJn NCBhcmc0LAogICAgICAgICAgICAgICAgQXJnNSBhcmc1KTsKCgoKCiAgICAgIEZ1bkRhdGE1IChj b25zdCBGdW5EYXRhNSAmZnVuX2RhdGE1KTsKCgoKCiAgICAgIHZpcnR1YWwgRnVuRGF0YUJhc2Ug KiBjbG9uZSAoKSBjb25zdDsKCiAgICBwcml2YXRlOgoKCgoKCgogICAgICBGdW5QdHIgZnVuX3B0 cjsKCgoKCgogICAgICBBcmcxIGFyZzE7CiAgICAgIEFyZzIgYXJnMjsKICAgICAgQXJnMyBhcmcz OwogICAgICBBcmc0IGFyZzQ7CiAgICAgIEFyZzUgYXJnNTsKCgoKCgogICAgICBzdGF0aWMgdm9p ZCAqIHRocmVhZF9lbnRyeV9wb2ludCAodm9pZCAqYXJnKTsKIyAxNTEyICIvaG9tZS9iYW5nZXJ0 aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50 LmgiCiAgICAgIGNsYXNzIEFyZ0NvbGxlY3RvcgogICAgICB7CiAgICAgICAgcHVibGljOgoKCgoK CgogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBGdW5EYXRhNTxBcmcxLEFyZzIsQXJnMyxBcmc0 LEFyZzUsUmV0VHlwZT46OkZ1blB0ciBGdW5QdHI7CgoKCgoKCiAgICAgICAgICBBcmdDb2xsZWN0 b3IgKEZ1blB0ciBmdW5fcHRyKTsKIyAxNTM3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9k ZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgICAgICBG dW5FbmNhcHN1bGF0aW9uIGNvbGxlY3RfYXJncyAoQXJnMSBhcmcxLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBcmczIGFyZzMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQXJnNCBhcmc0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFyZzUgYXJnNSk7CgogICAgICAgIHByaXZhdGU6CgoKCgogICAgICAgICAgRnVu UHRyIGZ1bl9wdHI7CiAgICAgIH07CgoKCgoKCiAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcx XywgdHlwZW5hbWUgQXJnMl8sIHR5cGVuYW1lIEFyZzNfLCB0eXBlbmFtZSBBcmc0XywgdHlwZW5h bWUgQXJnNV8+CiAgICAgIGZyaWVuZAogICAgICB0eXBlbmFtZSBGdW5EYXRhNTxBcmcxXyxBcmcy XyxBcmczXyxBcmc0XyxBcmc1Xyx2b2lkPjo6QXJnQ29sbGVjdG9yCiAgICAgIGVuY2Fwc3VsYXRl ICh2b2lkICgqZnVuX3B0cikoQXJnMV8sIEFyZzJfLCBBcmczXywgQXJnNF8sIEFyZzVfKSk7CiAg fTsKIyAxNTcwICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVk ZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5 cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUs IHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIFJldFR5cGU+CiAgY2xhc3MgRnVuRGF0YTYgOiBwdWJs aWMgRnVuRGF0YUJhc2UKICB7CiAgICBwdWJsaWM6CgoKCgoKICAgICAgdHlwZWRlZiBSZXRUeXBl ICgqRnVuUHRyKSAoQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSwgQXJnNik7CgoKCgoKCiAg ICAgIEZ1bkRhdGE2IChGdW5QdHIgZnVuX3B0ciwKICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwK ICAgICAgICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAg ICAgICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAgIEFyZzUgYXJnNSwKICAgICAg ICAgICAgICAgIEFyZzYgYXJnNik7CgoKCgogICAgICBGdW5EYXRhNiAoY29uc3QgRnVuRGF0YTYg JmZ1bl9kYXRhNik7CgoKCgogICAgICB2aXJ0dWFsIEZ1bkRhdGFCYXNlICogY2xvbmUgKCkgY29u c3Q7CgogICAgcHJpdmF0ZToKCgoKCgoKICAgICAgRnVuUHRyIGZ1bl9wdHI7CgoKCgoKICAgICAg QXJnMSBhcmcxOwogICAgICBBcmcyIGFyZzI7CiAgICAgIEFyZzMgYXJnMzsKICAgICAgQXJnNCBh cmc0OwogICAgICBBcmc1IGFyZzU7CiAgICAgIEFyZzYgYXJnNjsKCgoKCgogICAgICBzdGF0aWMg dm9pZCAqIHRocmVhZF9lbnRyeV9wb2ludCAodm9pZCAqYXJnKTsKIyAxNjM3ICIvaG9tZS9iYW5n ZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2Vt ZW50LmgiCiAgICAgIGNsYXNzIEFyZ0NvbGxlY3RvcgogICAgICB7CiAgICAgICAgcHVibGljOgoK CgoKCgogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBGdW5EYXRhNjxBcmcxLEFyZzIsQXJnMyxB cmc0LEFyZzUsQXJnNixSZXRUeXBlPjo6RnVuUHRyIEZ1blB0cjsKCgoKCgoKICAgICAgICAgIEFy Z0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpOwojIDE2NjIgIi9ob21lL2JhbmdlcnRoL3AvZGVh bC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAg ICAgICAgIEZ1bkVuY2Fwc3VsYXRpb24gY29sbGVjdF9hcmdzIChBcmcxIGFyZzEsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEFyZzYgYXJnNik7CgogICAgICAgIHByaXZhdGU6CgoKCgogICAgICAgICAg RnVuUHRyIGZ1bl9wdHI7CiAgICAgIH07CgoKCgoKCiAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBB cmcxXywgdHlwZW5hbWUgQXJnMl8sIHR5cGVuYW1lIEFyZzNfLCB0eXBlbmFtZSBBcmc0XywgdHlw ZW5hbWUgQXJnNV8sIHR5cGVuYW1lIEFyZzZfPgogICAgICBmcmllbmQKICAgICAgdHlwZW5hbWUg RnVuRGF0YTY8QXJnMV8sQXJnMl8sQXJnM18sQXJnNF8sQXJnNV8sQXJnNl8sdm9pZD46OkFyZ0Nv bGxlY3RvcgogICAgICBlbmNhcHN1bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzFfLCBBcmcyXywg QXJnM18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNF8sIEFyZzVfLCBB cmc2XykpOwogIH07CiMgMTY5NyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9i YXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDx0eXBlbmFt ZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBl bmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBSZXRUeXBl PgogIGNsYXNzIEZ1bkRhdGE3IDogcHVibGljIEZ1bkRhdGFCYXNlCiAgewogICAgcHVibGljOgoK CgoKCiAgICAgIHR5cGVkZWYgUmV0VHlwZSAoKkZ1blB0cikgKEFyZzEsIEFyZzIsIEFyZzMsIEFy ZzQsIEFyZzUsIEFyZzYsIEFyZzcpOwoKCgoKCgogICAgICBGdW5EYXRhNyAoRnVuUHRyIGZ1bl9w dHIsCiAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICBBcmcyIGFyZzIs CiAgICAgICAgICAgICAgICBBcmczIGFyZzMsCiAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAg ICAgICAgICAgICAgICBBcmc1IGFyZzUsCiAgICAgICAgICAgICAgICBBcmc2IGFyZzYsCiAgICAg ICAgICAgICAgICBBcmc3IGFyZzcpOwoKCgoKICAgICAgRnVuRGF0YTcgKGNvbnN0IEZ1bkRhdGE3 ICZmdW5fZGF0YTcpOwoKCgoKICAgICAgdmlydHVhbCBGdW5EYXRhQmFzZSAqIGNsb25lICgpIGNv bnN0OwoKICAgIHByaXZhdGU6CgoKCgoKCiAgICAgIEZ1blB0ciBmdW5fcHRyOwoKCgoKCiAgICAg IEFyZzEgYXJnMTsKICAgICAgQXJnMiBhcmcyOwogICAgICBBcmczIGFyZzM7CiAgICAgIEFyZzQg YXJnNDsKICAgICAgQXJnNSBhcmc1OwogICAgICBBcmc2IGFyZzY7CiAgICAgIEFyZzcgYXJnNzsK CgoKCgogICAgICBzdGF0aWMgdm9pZCAqIHRocmVhZF9lbnRyeV9wb2ludCAodm9pZCAqYXJnKTsK IyAxNzY2ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9i YXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgIGNsYXNzIEFyZ0NvbGxlY3RvcgogICAgICB7 CiAgICAgICAgcHVibGljOgoKCgoKCgogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBGdW5EYXRh NzxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LFJldFR5cGU+OjpGdW5QdHIgRnVu UHRyOwoKCgoKCgogICAgICAgICAgQXJnQ29sbGVjdG9yIChGdW5QdHIgZnVuX3B0cik7CiMgMTc5 MSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90 aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICAgICAgRnVuRW5jYXBzdWxhdGlvbiBjb2xsZWN0X2Fy Z3MgKEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB cmcyIGFyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBh cmczLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQgYXJnNCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc1IGFyZzUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzcgYXJnNyk7CgogICAgICAgIHByaXZh dGU6CgoKCgogICAgICAgICAgRnVuUHRyIGZ1bl9wdHI7CiAgICAgIH07CgoKCgoKCiAgICAgIHRl bXBsYXRlIDx0eXBlbmFtZSBBcmcxXywgdHlwZW5hbWUgQXJnMl8sIHR5cGVuYW1lIEFyZzNfLCB0 eXBlbmFtZSBBcmc0XywgdHlwZW5hbWUgQXJnNV8sIHR5cGVuYW1lIEFyZzZfLCB0eXBlbmFtZSBB cmc3Xz4KICAgICAgZnJpZW5kCiAgICAgIHR5cGVuYW1lIEZ1bkRhdGE3PEFyZzFfLEFyZzJfLEFy ZzNfLEFyZzRfLEFyZzVfLEFyZzZfLEFyZzdfLHZvaWQ+OjpBcmdDb2xsZWN0b3IKICAgICAgZW5j YXBzdWxhdGUgKHZvaWQgKCpmdW5fcHRyKShBcmcxXywgQXJnMl8sIEFyZzNfLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzRfLCBBcmc1XywgQXJnNl8sIEFyZzdfKSk7CiAg fTsKIyAxODI3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVk ZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5 cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUs IHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIFJl dFR5cGU+CiAgY2xhc3MgRnVuRGF0YTggOiBwdWJsaWMgRnVuRGF0YUJhc2UKICB7CiAgICBwdWJs aWM6CgoKCgoKICAgICAgdHlwZWRlZiBSZXRUeXBlICgqRnVuUHRyKSAoQXJnMSwgQXJnMiwgQXJn MywgQXJnNCwgQXJnNSwgQXJnNiwgQXJnNywgQXJnOCk7CgoKCgoKCiAgICAgIEZ1bkRhdGE4IChG dW5QdHIgZnVuX3B0ciwKICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAg IEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAgIEFy ZzQgYXJnNCwKICAgICAgICAgICAgICAgIEFyZzUgYXJnNSwKICAgICAgICAgICAgICAgIEFyZzYg YXJnNiwKICAgICAgICAgICAgICAgIEFyZzcgYXJnNywKICAgICAgICAgICAgICAgIEFyZzggYXJn OCk7CgoKCgogICAgICBGdW5EYXRhOCAoY29uc3QgRnVuRGF0YTggJmZ1bl9kYXRhOCk7CgoKCgog ICAgICB2aXJ0dWFsIEZ1bkRhdGFCYXNlICogY2xvbmUgKCkgY29uc3Q7CgogICAgcHJpdmF0ZToK CgoKCgoKICAgICAgRnVuUHRyIGZ1bl9wdHI7CgoKCgoKICAgICAgQXJnMSBhcmcxOwogICAgICBB cmcyIGFyZzI7CiAgICAgIEFyZzMgYXJnMzsKICAgICAgQXJnNCBhcmc0OwogICAgICBBcmc1IGFy ZzU7CiAgICAgIEFyZzYgYXJnNjsKICAgICAgQXJnNyBhcmc3OwogICAgICBBcmc4IGFyZzg7CgoK CgoKICAgICAgc3RhdGljIHZvaWQgKiB0aHJlYWRfZW50cnlfcG9pbnQgKHZvaWQgKmFyZyk7CiMg MTg5OCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFz ZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICBjbGFzcyBBcmdDb2xsZWN0b3IKICAgICAgewog ICAgICAgIHB1YmxpYzoKCgoKCgoKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgRnVuRGF0YTg8 QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LFJldFR5cGU+OjpGdW5QdHIg RnVuUHRyOwoKCgoKCgogICAgICAgICAgQXJnQ29sbGVjdG9yIChGdW5QdHIgZnVuX3B0cik7CiMg MTkyMyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFz ZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICAgICAgRnVuRW5jYXBzdWxhdGlvbiBjb2xsZWN0 X2FyZ3MgKEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBBcmcyIGFyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJn MyBhcmczLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQgYXJn NCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc1IGFyZzUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzcgYXJnNywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc4IGFyZzgpOwoKICAgICAgICBwcml2YXRl OgoKCgoKICAgICAgICAgIEZ1blB0ciBmdW5fcHRyOwogICAgICB9OwoKCgoKCgogICAgICB0ZW1w bGF0ZSA8dHlwZW5hbWUgQXJnMV8sIHR5cGVuYW1lIEFyZzJfLCB0eXBlbmFtZSBBcmczXywgdHlw ZW5hbWUgQXJnNF8sIHR5cGVuYW1lIEFyZzVfLCB0eXBlbmFtZSBBcmc2XywgdHlwZW5hbWUgQXJn N18sIHR5cGVuYW1lIEFyZzhfPgogICAgICBmcmllbmQKICAgICAgdHlwZW5hbWUgRnVuRGF0YTg8 QXJnMV8sQXJnMl8sQXJnM18sQXJnNF8sQXJnNV8sQXJnNl8sQXJnN18sQXJnOF8sdm9pZD46OkFy Z0NvbGxlY3RvcgogICAgICBlbmNhcHN1bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzFfLCBBcmcy XywgQXJnM18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNF8sIEFyZzVf LCBBcmc2XywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc3XywgQXJnOF8p KTsKICB9OwojIDE5NjEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9p bmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJn MSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUg QXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwgdHlwZW5h bWUgQXJnOSwgdHlwZW5hbWUgUmV0VHlwZT4KICBjbGFzcyBGdW5EYXRhOSA6IHB1YmxpYyBGdW5E YXRhQmFzZQogIHsKICAgIHB1YmxpYzoKCgoKCgogICAgICB0eXBlZGVmIFJldFR5cGUgKCpGdW5Q dHIpIChBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2LCBBcmc3LCBBcmc4LCBBcmc5 KTsKCgoKCgoKICAgICAgRnVuRGF0YTkgKEZ1blB0ciBmdW5fcHRyLAogICAgICAgICAgICAgICAg QXJnMSBhcmcxLAogICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgQXJn MyBhcmczLAogICAgICAgICAgICAgICAgQXJnNCBhcmc0LAogICAgICAgICAgICAgICAgQXJnNSBh cmc1LAogICAgICAgICAgICAgICAgQXJnNiBhcmc2LAogICAgICAgICAgICAgICAgQXJnNyBhcmc3 LAogICAgICAgICAgICAgICAgQXJnOCBhcmc4LAogICAgICAgICAgICAgICAgQXJnOSBhcmc5KTsK CgoKCiAgICAgIEZ1bkRhdGE5IChjb25zdCBGdW5EYXRhOSAmZnVuX2RhdGE5KTsKCgoKCiAgICAg IHZpcnR1YWwgRnVuRGF0YUJhc2UgKiBjbG9uZSAoKSBjb25zdDsKCiAgICBwcml2YXRlOgoKCgoK CgogICAgICBGdW5QdHIgZnVuX3B0cjsKCgoKCgogICAgICBBcmcxIGFyZzE7CiAgICAgIEFyZzIg YXJnMjsKICAgICAgQXJnMyBhcmczOwogICAgICBBcmc0IGFyZzQ7CiAgICAgIEFyZzUgYXJnNTsK ICAgICAgQXJnNiBhcmc2OwogICAgICBBcmc3IGFyZzc7CiAgICAgIEFyZzggYXJnODsKICAgICAg QXJnOSBhcmc5OwoKCgoKCiAgICAgIHN0YXRpYyB2b2lkICogdGhyZWFkX2VudHJ5X3BvaW50ICh2 b2lkICphcmcpOwojIDIwMzQgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFz ZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgY2xhc3MgQXJnQ29sbGVj dG9yCiAgICAgIHsKICAgICAgICBwdWJsaWM6CgoKCgoKCiAgICAgICAgICB0eXBlZGVmIHR5cGVu YW1lIEZ1bkRhdGE5PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxBcmc5 LFJldFR5cGU+OjpGdW5QdHIgRnVuUHRyOwoKCgoKCgogICAgICAgICAgQXJnQ29sbGVjdG9yIChG dW5QdHIgZnVuX3B0cik7CiMgMjA1OSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5J SS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICAgICAgRnVuRW5j YXBzdWxhdGlvbiBjb2xsZWN0X2FyZ3MgKEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBcmc1IGFyZzUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QXJnNiBhcmc2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzcg YXJnNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc4IGFyZzgs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnOSBhcmc5KTsKCiAg ICAgICAgcHJpdmF0ZToKCgoKCiAgICAgICAgICBGdW5QdHIgZnVuX3B0cjsKICAgICAgfTsKCgoK CgoKICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzFfLCB0eXBlbmFtZSBBcmcyXywgdHlwZW5h bWUgQXJnM18sIHR5cGVuYW1lIEFyZzRfLCB0eXBlbmFtZSBBcmc1XywgdHlwZW5hbWUgQXJnNl8s IHR5cGVuYW1lIEFyZzdfLCB0eXBlbmFtZSBBcmc4XywgdHlwZW5hbWUgQXJnOV8+CiAgICAgIGZy aWVuZAogICAgICB0eXBlbmFtZSBGdW5EYXRhOTxBcmcxXyxBcmcyXyxBcmczXyxBcmc0XyxBcmc1 XyxBcmc2XyxBcmc3XyxBcmc4XyxBcmc5Xyx2b2lkPjo6QXJnQ29sbGVjdG9yCiAgICAgIGVuY2Fw c3VsYXRlICh2b2lkICgqZnVuX3B0cikoQXJnMV8sIEFyZzJfLCBBcmczXywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBcmc0XywgQXJnNV8sIEFyZzZfLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEFyZzdfLCBBcmc4XywgQXJnOV8pKTsKICB9OwojIDIwOTgg Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhy ZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJn MiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUg QXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgQXJnOSwgdHlwZW5h bWUgQXJnMTAsIHR5cGVuYW1lIFJldFR5cGU+CiAgY2xhc3MgRnVuRGF0YTEwIDogcHVibGljIEZ1 bkRhdGFCYXNlCiAgewogICAgcHVibGljOgoKCgoKCiAgICAgIHR5cGVkZWYgUmV0VHlwZSAoKkZ1 blB0cikgKEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUsIEFyZzYsIEFyZzcsIEFyZzgsIEFy ZzksIEFyZzEwKTsKCgoKCgoKICAgICAgRnVuRGF0YTEwIChGdW5QdHIgZnVuX3B0ciwKICAgICAg ICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAg ICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAg ICAgICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgIEFyZzYgYXJnNiwKICAgICAgICAg ICAgICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICAgICAgQXJnOCBhcmc4LAogICAgICAgICAg ICAgICAgIEFyZzkgYXJnOSwKICAgICAgICAgICAgICAgICBBcmcxMCBhcmcxMCk7CgoKCgogICAg ICBGdW5EYXRhMTAgKGNvbnN0IEZ1bkRhdGExMCAmZnVuX2RhdGExMCk7CgoKCgogICAgICB2aXJ0 dWFsIEZ1bkRhdGFCYXNlICogY2xvbmUgKCkgY29uc3Q7CgogICAgcHJpdmF0ZToKCgoKCgoKICAg ICAgRnVuUHRyIGZ1bl9wdHI7CgoKCgoKICAgICAgQXJnMSBhcmcxOwogICAgICBBcmcyIGFyZzI7 CiAgICAgIEFyZzMgYXJnMzsKICAgICAgQXJnNCBhcmc0OwogICAgICBBcmc1IGFyZzU7CiAgICAg IEFyZzYgYXJnNjsKICAgICAgQXJnNyBhcmc3OwogICAgICBBcmc4IGFyZzg7CiAgICAgIEFyZzkg YXJnOTsKICAgICAgQXJnMTAgYXJnMTA7CgoKCgoKICAgICAgc3RhdGljIHZvaWQgKiB0aHJlYWRf ZW50cnlfcG9pbnQgKHZvaWQgKmFyZyk7CiMgMjE3MyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJ LzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICBj bGFzcyBBcmdDb2xsZWN0b3IKICAgICAgewogICAgICAgIHB1YmxpYzoKCgoKCgoKICAgICAgICAg IHR5cGVkZWYgdHlwZW5hbWUgRnVuRGF0YTEwPEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2 LEFyZzcsQXJnOCxBcmc5LEFyZzEwLFJldFR5cGU+OjpGdW5QdHIgRnVuUHRyOwoKCgoKCgogICAg ICAgICAgQXJnQ29sbGVjdG9yIChGdW5QdHIgZnVuX3B0cik7CiMgMjE5OCAiL2hvbWUvYmFuZ2Vy dGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVu dC5oIgogICAgICAgICAgRnVuRW5jYXBzdWxhdGlvbiBjb2xsZWN0X2FyZ3MgKEFyZzEgYXJnMSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc1IGFyZzUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFyZzcgYXJnNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBcmc4IGFyZzgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQXJnOSBhcmc5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEFyZzEwIGFyZzEwKTsKCiAgICAgICAgcHJpdmF0ZToKCgoKCiAgICAgICAgICBGdW5QdHIgZnVu X3B0cjsKICAgICAgfTsKCgoKCgoKICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzFfLCB0eXBl bmFtZSBBcmcyXywgdHlwZW5hbWUgQXJnM18sIHR5cGVuYW1lIEFyZzRfLCB0eXBlbmFtZSBBcmc1 XywgdHlwZW5hbWUgQXJnNl8sIHR5cGVuYW1lIEFyZzdfLCB0eXBlbmFtZSBBcmc4XywgdHlwZW5h bWUgQXJnOV8sIHR5cGVuYW1lIEFyZzEwXz4KICAgICAgZnJpZW5kCiAgICAgIHR5cGVuYW1lIEZ1 bkRhdGExMDxBcmcxXyxBcmcyXyxBcmczXyxBcmc0XyxBcmc1XyxBcmc2XyxBcmc3XyxBcmc4XyxB cmc5XyxBcmcxMF8sdm9pZD46OkFyZ0NvbGxlY3RvcgogICAgICBlbmNhcHN1bGF0ZSAodm9pZCAo KmZ1bl9wdHIpKEFyZzFfLCBBcmcyXywgQXJnM18sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQXJnNF8sIEFyZzVfLCBBcmc2XywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBcmc3XywgQXJnOF8sIEFyZzlfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFyZzEwXykpOwogIH07CiMgMjIzOSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRl IDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgUmV0VHlwZT4KICBjbGFzcyBNZW1GdW5EYXRhMCA6IHB1 YmxpYyBGdW5EYXRhQmFzZQogIHsKICAgIHB1YmxpYzoKCgoKCgogICAgICB0eXBlZGVmIHR5cGVu YW1lIE1lbUZ1blB0cjA8Q2xhc3MsUmV0VHlwZT46OnR5cGUgRnVuUHRyOwoKCgoKCgogICAgICBN ZW1GdW5EYXRhMCAoRnVuUHRyIGZ1bl9wdHIsCiAgICAgICAgICAgICAgICAgICBDbGFzcyAqb2Jq ZWN0KTsKCgoKCiAgICAgIE1lbUZ1bkRhdGEwIChjb25zdCBNZW1GdW5EYXRhMCAmZnVuX2RhdGEw KTsKCgoKCiAgICAgIHZpcnR1YWwgRnVuRGF0YUJhc2UgKiBjbG9uZSAoKSBjb25zdDsKCiAgICBw cml2YXRlOgoKCgoKCgogICAgICBGdW5QdHIgZnVuX3B0cjsKCgoKCgogICAgICBDbGFzcyAqb2Jq ZWN0OwoKCgoKCiAgICAgIHN0YXRpYyB2b2lkICogdGhyZWFkX2VudHJ5X3BvaW50ICh2b2lkICph cmcpOwojIDIyOTYgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs dWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgY2xhc3MgQXJnQ29sbGVjdG9yCiAg ICAgIHsKICAgICAgICBwdWJsaWM6CgoKCgoKCiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIE1l bUZ1bkRhdGEwPENsYXNzLFJldFR5cGU+OjpGdW5QdHIgRnVuUHRyOwoKCgoKCgogICAgICAgICAg QXJnQ29sbGVjdG9yIChGdW5QdHIgZnVuX3B0cik7CiMgMjMyMSAiL2hvbWUvYmFuZ2VydGgvcC9k ZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgog ICAgICAgICAgRnVuRW5jYXBzdWxhdGlvbiBjb2xsZWN0X2FyZ3MgKENsYXNzICpvYmplY3QpOwoj IDIzMzUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jh c2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgICAgIEZ1bkVuY2Fwc3VsYXRpb24gY29sbGVj dF9hcmdzIChDbGFzcyAmb2JqZWN0KTsKCiAgICAgICAgcHJpdmF0ZToKCgoKCiAgICAgICAgICBG dW5QdHIgZnVuX3B0cjsKICAgICAgfTsKCgoKCgoKICAgICAgdGVtcGxhdGUgPGNsYXNzIENsYXNz Xz4KICAgICAgZnJpZW5kCiAgICAgIHR5cGVuYW1lIE1lbUZ1bkRhdGEwPENsYXNzXyx2b2lkPjo6 QXJnQ29sbGVjdG9yCiAgICAgIGVuY2Fwc3VsYXRlICh2b2lkIChDbGFzc186OipmdW5fcHRyKSgp KTsKCgoKCgoKCiAgfTsKIyAyMzcyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJ L2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgdGVtcGxhdGUgPGNsYXNz IENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBSZXRUeXBlPgogIGNsYXNzIE1lbUZ1bkRh dGExIDogcHVibGljIEZ1bkRhdGFCYXNlCiAgewogICAgcHVibGljOgoKCgoKCiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgTWVtRnVuUHRyMTxDbGFzcyxBcmcxLFJldFR5cGU+Ojp0eXBlIEZ1blB0cjsK CgoKCgoKICAgICAgTWVtRnVuRGF0YTEgKEZ1blB0ciBmdW5fcHRyLAogICAgICAgICAgICAgICAg ICAgQ2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSk7CgoKCgogICAg ICBNZW1GdW5EYXRhMSAoY29uc3QgTWVtRnVuRGF0YTEgJmZ1bl9kYXRhMSk7CgoKCgogICAgICB2 aXJ0dWFsIEZ1bkRhdGFCYXNlICogY2xvbmUgKCkgY29uc3Q7CgogICAgcHJpdmF0ZToKCgoKCgoK ICAgICAgRnVuUHRyIGZ1bl9wdHI7CgoKCgoKICAgICAgQ2xhc3MgKm9iamVjdDsKCgoKCgogICAg ICBBcmcxIGFyZzE7CgoKCgoKICAgICAgc3RhdGljIHZvaWQgKiB0aHJlYWRfZW50cnlfcG9pbnQg KHZvaWQgKmFyZyk7CiMgMjQzNiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9i YXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICBjbGFzcyBBcmdDb2xs ZWN0b3IKICAgICAgewogICAgICAgIHB1YmxpYzoKCgoKCgoKICAgICAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgTWVtRnVuRGF0YTE8Q2xhc3MsQXJnMSxSZXRUeXBlPjo6RnVuUHRyIEZ1blB0cjsKCgoK CgoKICAgICAgICAgIEFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpOwojIDI0NjEgIi9ob21l L2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21h bmFnZW1lbnQuaCIKICAgICAgICAgIEZ1bkVuY2Fwc3VsYXRpb24gY29sbGVjdF9hcmdzIChDbGFz cyAqb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEg YXJnMSk7CiMgMjQ3NiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2lu Y2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICAgICAgRnVuRW5jYXBzdWxhdGlv biBjb2xsZWN0X2FyZ3MgKENsYXNzICZvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQXJnMSBhcmcxKTsKCiAgICAgICAgcHJpdmF0ZToKCgoKCiAgICAgICAg ICBGdW5QdHIgZnVuX3B0cjsKICAgICAgfTsKCgoKCgoKICAgICAgdGVtcGxhdGUgPGNsYXNzIENs YXNzXywgdHlwZW5hbWUgQXJnMV8+CiAgICAgIGZyaWVuZAogICAgICB0eXBlbmFtZSBNZW1GdW5E YXRhMTxDbGFzc18sQXJnMV8sdm9pZD46OkFyZ0NvbGxlY3RvcgogICAgICBlbmNhcHN1bGF0ZSAo dm9pZCAoQ2xhc3NfOjoqZnVuX3B0cikoQXJnMV8pKTsKCgoKCgoKCiAgfTsKIyAyNTE0ICIvaG9t ZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9t YW5hZ2VtZW50LmgiCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBl bmFtZSBBcmcyLCB0eXBlbmFtZSBSZXRUeXBlPgogIGNsYXNzIE1lbUZ1bkRhdGEyIDogcHVibGlj IEZ1bkRhdGFCYXNlCiAgewogICAgcHVibGljOgoKCgoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg TWVtRnVuUHRyMjxDbGFzcyxBcmcxLEFyZzIsUmV0VHlwZT46OnR5cGUgRnVuUHRyOwoKCgoKCgog ICAgICBNZW1GdW5EYXRhMiAoRnVuUHRyIGZ1bl9wdHIsCiAgICAgICAgICAgICAgICAgICBDbGFz cyAqb2JqZWN0LAogICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxLAogICAgICAgICAgICAgICAg ICAgQXJnMiBhcmcyKTsKCgoKCiAgICAgIE1lbUZ1bkRhdGEyIChjb25zdCBNZW1GdW5EYXRhMiAm ZnVuX2RhdGEyKTsKCgoKCiAgICAgIHZpcnR1YWwgRnVuRGF0YUJhc2UgKiBjbG9uZSAoKSBjb25z dDsKCiAgICBwcml2YXRlOgoKCgoKCgogICAgICBGdW5QdHIgZnVuX3B0cjsKCgoKCgogICAgICBD bGFzcyAqb2JqZWN0OwoKCgoKCiAgICAgIEFyZzEgYXJnMTsKICAgICAgQXJnMiBhcmcyOwoKCgoK CiAgICAgIHN0YXRpYyB2b2lkICogdGhyZWFkX2VudHJ5X3BvaW50ICh2b2lkICphcmcpOwojIDI1 ODAgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2Uv dGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgY2xhc3MgQXJnQ29sbGVjdG9yCiAgICAgIHsKICAg ICAgICBwdWJsaWM6CgoKCgoKCiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIE1lbUZ1bkRhdGEy PENsYXNzLEFyZzEsQXJnMixSZXRUeXBlPjo6RnVuUHRyIEZ1blB0cjsKCgoKCgoKICAgICAgICAg IEFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpOwojIDI2MDUgIi9ob21lL2JhbmdlcnRoL3Av ZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIK ICAgICAgICAgIEZ1bkVuY2Fwc3VsYXRpb24gY29sbGVjdF9hcmdzIChDbGFzcyAqb2JqZWN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIpOwojIDI2MjEgIi9o b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFk X21hbmFnZW1lbnQuaCIKICAgICAgICAgIEZ1bkVuY2Fwc3VsYXRpb24gY29sbGVjdF9hcmdzIChD bGFzcyAmb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFy ZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIGFy ZzIpOwoKICAgICAgICBwcml2YXRlOgoKCgoKICAgICAgICAgIEZ1blB0ciBmdW5fcHRyOwogICAg ICB9OwoKCgoKCgogICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3NfLCB0eXBlbmFtZSBBcmcxXywg dHlwZW5hbWUgQXJnMl8+CiAgICAgIGZyaWVuZAogICAgICB0eXBlbmFtZSBNZW1GdW5EYXRhMjxD bGFzc18sQXJnMV8sQXJnMl8sdm9pZD46OkFyZ0NvbGxlY3RvcgogICAgICBlbmNhcHN1bGF0ZSAo dm9pZCAoQ2xhc3NfOjoqZnVuX3B0cikoQXJnMV8sIEFyZzJfKSk7CgoKCgoKCgogIH07CiMgMjY1 OSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90 aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJn MSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgUmV0VHlwZT4KICBjbGFz cyBNZW1GdW5EYXRhMyA6IHB1YmxpYyBGdW5EYXRhQmFzZQogIHsKICAgIHB1YmxpYzoKCgoKCgog ICAgICB0eXBlZGVmIHR5cGVuYW1lIE1lbUZ1blB0cjM8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsUmV0 VHlwZT46OnR5cGUgRnVuUHRyOwoKCgoKCgogICAgICBNZW1GdW5EYXRhMyAoRnVuUHRyIGZ1bl9w dHIsCiAgICAgICAgICAgICAgICAgICBDbGFzcyAqb2JqZWN0LAogICAgICAgICAgICAgICAgICAg QXJnMSBhcmcxLAogICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAg ICAgQXJnMyBhcmczKTsKCgoKCiAgICAgIE1lbUZ1bkRhdGEzIChjb25zdCBNZW1GdW5EYXRhMyAm ZnVuX2RhdGEzKTsKCgoKCiAgICAgIHZpcnR1YWwgRnVuRGF0YUJhc2UgKiBjbG9uZSAoKSBjb25z dDsKCiAgICBwcml2YXRlOgoKCgoKCgogICAgICBGdW5QdHIgZnVuX3B0cjsKCgoKCgogICAgICBD bGFzcyAqb2JqZWN0OwoKCgoKCiAgICAgIEFyZzEgYXJnMTsKICAgICAgQXJnMiBhcmcyOwogICAg ICBBcmczIGFyZzM7CgoKCgoKICAgICAgc3RhdGljIHZvaWQgKiB0aHJlYWRfZW50cnlfcG9pbnQg KHZvaWQgKmFyZyk7CiMgMjcyNyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9i YXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICBjbGFzcyBBcmdDb2xs ZWN0b3IKICAgICAgewogICAgICAgIHB1YmxpYzoKCgoKCgoKICAgICAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgTWVtRnVuRGF0YTM8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsUmV0VHlwZT46OkZ1blB0ciBG dW5QdHI7CgoKCgoKCiAgICAgICAgICBBcmdDb2xsZWN0b3IgKEZ1blB0ciBmdW5fcHRyKTsKIyAy NzUyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNl L3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgICAgICBGdW5FbmNhcHN1bGF0aW9uIGNvbGxlY3Rf YXJncyAoQ2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMg YXJnMyk7CiMgMjc2OSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2lu Y2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICAgICAgRnVuRW5jYXBzdWxhdGlv biBjb2xsZWN0X2FyZ3MgKENsYXNzICZvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQXJnMSBhcmcxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBcmczIGFyZzMpOwoKICAgICAgICBwcml2YXRlOgoKCgoKICAgICAgICAgIEZ1blB0ciBm dW5fcHRyOwogICAgICB9OwoKCgoKCgogICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3NfLCB0eXBl bmFtZSBBcmcxXywgdHlwZW5hbWUgQXJnMl8sIHR5cGVuYW1lIEFyZzNfPgogICAgICBmcmllbmQK ICAgICAgdHlwZW5hbWUgTWVtRnVuRGF0YTM8Q2xhc3NfLEFyZzFfLEFyZzJfLEFyZzNfLHZvaWQ+ OjpBcmdDb2xsZWN0b3IKICAgICAgZW5jYXBzdWxhdGUgKHZvaWQgKENsYXNzXzo6KmZ1bl9wdHIp KEFyZzFfLEFyZzJfLEFyZzNfKSk7CgoKCgoKCgogIH07CiMgMjgwOSAiL2hvbWUvYmFuZ2VydGgv cC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5o IgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwg dHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgUmV0VHlwZT4KICBjbGFzcyBN ZW1GdW5EYXRhNCA6IHB1YmxpYyBGdW5EYXRhQmFzZQogIHsKICAgIHB1YmxpYzoKCgoKCgogICAg ICB0eXBlZGVmIHR5cGVuYW1lIE1lbUZ1blB0cjQ8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxS ZXRUeXBlPjo6dHlwZSBGdW5QdHI7CgoKCgoKCiAgICAgIE1lbUZ1bkRhdGE0IChGdW5QdHIgZnVu X3B0ciwKICAgICAgICAgICAgICAgICAgIENsYXNzICpvYmplY3QsCiAgICAgICAgICAgICAgICAg ICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAgICAg ICAgICBBcmczIGFyZzMsCiAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQpOwoKCgoKICAgICAg TWVtRnVuRGF0YTQgKGNvbnN0IE1lbUZ1bkRhdGE0ICZmdW5fZGF0YTQpOwoKCgoKICAgICAgdmly dHVhbCBGdW5EYXRhQmFzZSAqIGNsb25lICgpIGNvbnN0OwoKICAgIHByaXZhdGU6CgoKCgoKCiAg ICAgIEZ1blB0ciBmdW5fcHRyOwoKCgoKCiAgICAgIENsYXNzICpvYmplY3Q7CgoKCgoKICAgICAg QXJnMSBhcmcxOwogICAgICBBcmcyIGFyZzI7CiAgICAgIEFyZzMgYXJnMzsKICAgICAgQXJnNCBh cmc0OwoKCgoKCiAgICAgIHN0YXRpYyB2b2lkICogdGhyZWFkX2VudHJ5X3BvaW50ICh2b2lkICph cmcpOwojIDI4NzkgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs dWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgY2xhc3MgQXJnQ29sbGVjdG9yCiAg ICAgIHsKICAgICAgICBwdWJsaWM6CgoKCgoKCiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIE1l bUZ1bkRhdGE0PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsUmV0VHlwZT46OkZ1blB0ciBGdW5Q dHI7CgoKCgoKCiAgICAgICAgICBBcmdDb2xsZWN0b3IgKEZ1blB0ciBmdW5fcHRyKTsKIyAyOTA0 ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3Ro cmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgICAgICBGdW5FbmNhcHN1bGF0aW9uIGNvbGxlY3RfYXJn cyAoQ2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJn MiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJn MywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQpOwoj IDI5MjIgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jh c2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgICAgIEZ1bkVuY2Fwc3VsYXRpb24gY29sbGVj dF9hcmdzIChDbGFzcyAmb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBBcmcyIGFyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJn MyBhcmczLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQgYXJn NCk7CiAgICAgICAgcHJpdmF0ZToKCgoKCiAgICAgICAgICBGdW5QdHIgZnVuX3B0cjsKICAgICAg fTsKCgoKCgoKICAgICAgdGVtcGxhdGUgPGNsYXNzIENsYXNzXywgdHlwZW5hbWUgQXJnMV8sIHR5 cGVuYW1lIEFyZzJfLCB0eXBlbmFtZSBBcmczXywgdHlwZW5hbWUgQXJnNF8+CiAgICAgIGZyaWVu ZAogICAgICB0eXBlbmFtZSBNZW1GdW5EYXRhNDxDbGFzc18sQXJnMV8sQXJnMl8sQXJnM18sQXJn NF8sdm9pZD46OkFyZ0NvbGxlY3RvcgogICAgICBlbmNhcHN1bGF0ZSAodm9pZCAoQ2xhc3NfOjoq ZnVuX3B0cikoQXJnMV8sIEFyZzJfLCBBcmczXywgQXJnNF8pKTsKCgoKCgoKCn07CiMgMjk2MiAi L2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJl YWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwg dHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJn NSwgdHlwZW5hbWUgUmV0VHlwZT4KICBjbGFzcyBNZW1GdW5EYXRhNSA6IHB1YmxpYyBGdW5EYXRh QmFzZQogIHsKICAgIHB1YmxpYzoKCgoKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIE1lbUZ1blB0 cjU8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LFJldFR5cGU+Ojp0eXBlIEZ1blB0cjsK CgoKCgoKICAgICAgTWVtRnVuRGF0YTUgKEZ1blB0ciBmdW5fcHRyLAogICAgICAgICAgICAgICAg ICAgQ2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAg ICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAg ICAgICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAgICAgIEFyZzUgYXJnNSk7CgoK CgogICAgICBNZW1GdW5EYXRhNSAoY29uc3QgTWVtRnVuRGF0YTUgJmZ1bl9kYXRhNSk7CgoKCgog ICAgICB2aXJ0dWFsIEZ1bkRhdGFCYXNlICogY2xvbmUgKCkgY29uc3Q7CgogICAgcHJpdmF0ZToK CgoKCgoKICAgICAgRnVuUHRyIGZ1bl9wdHI7CgoKCgoKICAgICAgQ2xhc3MgKm9iamVjdDsKCgoK CgogICAgICBBcmcxIGFyZzE7CiAgICAgIEFyZzIgYXJnMjsKICAgICAgQXJnMyBhcmczOwogICAg ICBBcmc0IGFyZzQ7CiAgICAgIEFyZzUgYXJnNTsKCgoKCgogICAgICBzdGF0aWMgdm9pZCAqIHRo cmVhZF9lbnRyeV9wb2ludCAodm9pZCAqYXJnKTsKIyAzMDM0ICIvaG9tZS9iYW5nZXJ0aC9wL2Rl YWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAg ICAgIGNsYXNzIEFyZ0NvbGxlY3RvcgogICAgICB7CiAgICAgICAgcHVibGljOgoKCgoKCgogICAg ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBNZW1GdW5EYXRhNTxDbGFzcyxBcmcxLEFyZzIsQXJnMyxB cmc0LEFyZzUsUmV0VHlwZT46OkZ1blB0ciBGdW5QdHI7CgoKCgoKCiAgICAgICAgICBBcmdDb2xs ZWN0b3IgKEZ1blB0ciBmdW5fcHRyKTsKIyAzMDU5ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkv Mi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgICAg ICBGdW5FbmNhcHN1bGF0aW9uIGNvbGxlY3RfYXJncyAoQ2xhc3MgKm9iamVjdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQXJnNSBhcmc1KTsKIyAzMDc4ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkv Mi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgICAg ICBGdW5FbmNhcHN1bGF0aW9uIGNvbGxlY3RfYXJncyAoQ2xhc3MgJm9iamVjdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQXJnNSBhcmc1KTsKICAgICAgICBwcml2YXRlOgoKCgoKICAgICAgICAgIEZ1 blB0ciBmdW5fcHRyOwogICAgICB9OwoKCgoKCgogICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3Nf LCB0eXBlbmFtZSBBcmcxXywgdHlwZW5hbWUgQXJnMl8sIHR5cGVuYW1lIEFyZzNfLCB0eXBlbmFt ZSBBcmc0XywgdHlwZW5hbWUgQXJnNV8+CiAgICAgIGZyaWVuZAogICAgICB0eXBlbmFtZSBNZW1G dW5EYXRhNTxDbGFzc18sQXJnMV8sQXJnMl8sQXJnM18sQXJnNF8sQXJnNV8sdm9pZD46OkFyZ0Nv bGxlY3RvcgogICAgICBlbmNhcHN1bGF0ZSAodm9pZCAoQ2xhc3NfOjoqZnVuX3B0cikoQXJnMV8s IEFyZzJfLCBBcmczXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEFyZzRfLCBBcmc1XykpOwojIDMxMTAgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwu SUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB9OwojIDMxMjEgIi9o b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFk X21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5 cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUs IHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIFJldFR5cGU+CiAgY2xhc3MgTWVtRnVuRGF0YTYgOiBw dWJsaWMgRnVuRGF0YUJhc2UKICB7CiAgICBwdWJsaWM6CgoKCgoKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBNZW1GdW5QdHI2PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LFJldFR5 cGU+Ojp0eXBlIEZ1blB0cjsKCgoKCgoKICAgICAgTWVtRnVuRGF0YTYgKEZ1blB0ciBmdW5fcHRy LAogICAgICAgICAgICAgICAgICAgQ2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAgICAgIEFy ZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgICAg IEFyZzMgYXJnMywKICAgICAgICAgICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAg ICAgIEFyZzUgYXJnNSwKICAgICAgICAgICAgICAgICAgIEFyZzYgYXJnNik7CgoKCgogICAgICBN ZW1GdW5EYXRhNiAoY29uc3QgTWVtRnVuRGF0YTYgJmZ1bl9kYXRhNik7CgoKCgogICAgICB2aXJ0 dWFsIEZ1bkRhdGFCYXNlICogY2xvbmUgKCkgY29uc3Q7CgogICAgcHJpdmF0ZToKCgoKCgoKICAg ICAgRnVuUHRyIGZ1bl9wdHI7CgoKCgoKICAgICAgQ2xhc3MgKm9iamVjdDsKCgoKCgogICAgICBB cmcxIGFyZzE7CiAgICAgIEFyZzIgYXJnMjsKICAgICAgQXJnMyBhcmczOwogICAgICBBcmc0IGFy ZzQ7CiAgICAgIEFyZzUgYXJnNTsKICAgICAgQXJnNiBhcmc2OwoKCgoKCiAgICAgIHN0YXRpYyB2 b2lkICogdGhyZWFkX2VudHJ5X3BvaW50ICh2b2lkICphcmcpOwojIDMxOTUgIi9ob21lL2Jhbmdl cnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1l bnQuaCIKICAgICAgY2xhc3MgQXJnQ29sbGVjdG9yCiAgICAgIHsKICAgICAgICBwdWJsaWM6CgoK CgoKCiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIE1lbUZ1bkRhdGE2PENsYXNzLEFyZzEsQXJn MixBcmczLEFyZzQsQXJnNSxBcmc2LFJldFR5cGU+OjpGdW5QdHIgRnVuUHRyOwoKCgoKCgogICAg ICAgICAgQXJnQ29sbGVjdG9yIChGdW5QdHIgZnVuX3B0cik7CiMgMzIyMCAiL2hvbWUvYmFuZ2Vy dGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVu dC5oIgogICAgICAgICAgRnVuRW5jYXBzdWxhdGlvbiBjb2xsZWN0X2FyZ3MgKENsYXNzICpvYmpl Y3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmczIGFyZzMsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNCBhcmc0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzUgYXJnNSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBcmc2IGFyZzYpOwojIDMyNDAgIi9ob21lL2JhbmdlcnRoL3Av ZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIK ICAgICAgICAgIEZ1bkVuY2Fwc3VsYXRpb24gY29sbGVjdF9hcmdzIChDbGFzcyAmb2JqZWN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBcmc1IGFyZzUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQXJnNiBhcmc2KTsKICAgICAgICBwcml2YXRlOgoKCgoKICAgICAgICAg IEZ1blB0ciBmdW5fcHRyOwogICAgICB9OwoKCgoKCgogICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xh c3NfLCB0eXBlbmFtZSBBcmcxXywgdHlwZW5hbWUgQXJnMl8sIHR5cGVuYW1lIEFyZzNfLCB0eXBl bmFtZSBBcmc0XywgdHlwZW5hbWUgQXJnNV8sIHR5cGVuYW1lIEFyZzZfPgogICAgICBmcmllbmQK ICAgICAgdHlwZW5hbWUgTWVtRnVuRGF0YTY8Q2xhc3NfLEFyZzFfLEFyZzJfLEFyZzNfLEFyZzRf LEFyZzVfLEFyZzZfLHZvaWQ+OjpBcmdDb2xsZWN0b3IKICAgICAgZW5jYXBzdWxhdGUgKHZvaWQg KENsYXNzXzo6KmZ1bl9wdHIpKEFyZzFfLCBBcmcyXywgQXJnM18sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0XywgQXJnNV8sIEFyZzZfKSk7CiMgMzI3MyAi L2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJl YWRfbWFuYWdlbWVudC5oIgogIH07CiMgMzI4NCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRl IDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJn MywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUg QXJnNywgdHlwZW5hbWUgUmV0VHlwZT4KICBjbGFzcyBNZW1GdW5EYXRhNyA6IHB1YmxpYyBGdW5E YXRhQmFzZQogIHsKICAgIHB1YmxpYzoKCgoKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIE1lbUZ1 blB0cjc8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxSZXRUeXBlPjo6 dHlwZSBGdW5QdHI7CgoKCgoKCiAgICAgIE1lbUZ1bkRhdGE3IChGdW5QdHIgZnVuX3B0ciwKICAg ICAgICAgICAgICAgICAgIENsYXNzICpvYmplY3QsCiAgICAgICAgICAgICAgICAgICBBcmcxIGFy ZzEsCiAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAgICAgICAgICBBcmcz IGFyZzMsCiAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICBB cmc1IGFyZzUsCiAgICAgICAgICAgICAgICAgICBBcmc2IGFyZzYsCiAgICAgICAgICAgICAgICAg ICBBcmc3IGFyZzcpOwoKCgoKICAgICAgTWVtRnVuRGF0YTcgKGNvbnN0IE1lbUZ1bkRhdGE3ICZm dW5fZGF0YTcpOwoKCgoKICAgICAgdmlydHVhbCBGdW5EYXRhQmFzZSAqIGNsb25lICgpIGNvbnN0 OwoKICAgIHByaXZhdGU6CgoKCgoKCiAgICAgIEZ1blB0ciBmdW5fcHRyOwoKCgoKCiAgICAgIENs YXNzICpvYmplY3Q7CgoKCgoKICAgICAgQXJnMSBhcmcxOwogICAgICBBcmcyIGFyZzI7CiAgICAg IEFyZzMgYXJnMzsKICAgICAgQXJnNCBhcmc0OwogICAgICBBcmc1IGFyZzU7CiAgICAgIEFyZzYg YXJnNjsKICAgICAgQXJnNyBhcmc3OwoKCgoKCiAgICAgIHN0YXRpYyB2b2lkICogdGhyZWFkX2Vu dHJ5X3BvaW50ICh2b2lkICphcmcpOwojIDMzNjAgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8y L2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgY2xh c3MgQXJnQ29sbGVjdG9yCiAgICAgIHsKICAgICAgICBwdWJsaWM6CgoKCgoKCiAgICAgICAgICB0 eXBlZGVmIHR5cGVuYW1lIE1lbUZ1bkRhdGE3PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsQXJn NSxBcmc2LEFyZzcsUmV0VHlwZT46OkZ1blB0ciBGdW5QdHI7CgoKCgoKCiAgICAgICAgICBBcmdD b2xsZWN0b3IgKEZ1blB0ciBmdW5fcHRyKTsKIyAzMzg1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwu SUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAg ICAgICBGdW5FbmNhcHN1bGF0aW9uIGNvbGxlY3RfYXJncyAoQ2xhc3MgKm9iamVjdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFyZzYgYXJnNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBcmc3IGFyZzcpOwojIDM0MDYgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwu SUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgICAgIEZ1bkVu Y2Fwc3VsYXRpb24gY29sbGVjdF9hcmdzIChDbGFzcyAmb2JqZWN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBcmc1IGFyZzUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QXJnNiBhcmc2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzcg YXJnNyk7CiAgICAgICAgcHJpdmF0ZToKCgoKCiAgICAgICAgICBGdW5QdHIgZnVuX3B0cjsKICAg ICAgfTsKCgoKCgoKICAgICAgdGVtcGxhdGUgPGNsYXNzIENsYXNzXywgdHlwZW5hbWUgQXJnMV8s IHR5cGVuYW1lIEFyZzJfLCB0eXBlbmFtZSBBcmczXywgdHlwZW5hbWUgQXJnNF8sIHR5cGVuYW1l IEFyZzVfLCB0eXBlbmFtZSBBcmc2XywgdHlwZW5hbWUgQXJnN18+CiAgICAgIGZyaWVuZAogICAg ICB0eXBlbmFtZSBNZW1GdW5EYXRhNzxDbGFzc18sQXJnMV8sQXJnMl8sQXJnM18sQXJnNF8sQXJn NV8sQXJnNl8sQXJnN18sdm9pZD46OkFyZ0NvbGxlY3RvcgogICAgICBlbmNhcHN1bGF0ZSAodm9p ZCAoQ2xhc3NfOjoqZnVuX3B0cikoQXJnMV8sIEFyZzJfLCBBcmczXywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzRfLCBBcmc1XywgQXJnNl8sIEFyZzdfKSk7 CiMgMzQ0MCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUv YmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIH07CiMgMzQ1MCAiL2hvbWUvYmFuZ2VydGgvcC9k ZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgog IHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlw ZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwg dHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgUmV0VHlwZT4KICBjbGFzcyBN ZW1GdW5EYXRhOCA6IHB1YmxpYyBGdW5EYXRhQmFzZQogIHsKICAgIHB1YmxpYzoKCgoKCgogICAg ICB0eXBlZGVmIHR5cGVuYW1lIE1lbUZ1blB0cjg8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxB cmc1LEFyZzYsQXJnNyxBcmc4LFJldFR5cGU+Ojp0eXBlIEZ1blB0cjsKCgoKCgoKICAgICAgTWVt RnVuRGF0YTggKEZ1blB0ciBmdW5fcHRyLAogICAgICAgICAgICAgICAgICAgQ2xhc3MgKm9iamVj dCwKICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgIEFyZzIg YXJnMiwKICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAgICAgIEFy ZzQgYXJnNCwKICAgICAgICAgICAgICAgICAgIEFyZzUgYXJnNSwKICAgICAgICAgICAgICAgICAg IEFyZzYgYXJnNiwKICAgICAgICAgICAgICAgICAgIEFyZzcgYXJnNywKICAgICAgICAgICAgICAg ICAgIEFyZzggYXJnOCk7CgoKCgogICAgICBNZW1GdW5EYXRhOCAoY29uc3QgTWVtRnVuRGF0YTgg JmZ1bl9kYXRhOCk7CgoKCgogICAgICB2aXJ0dWFsIEZ1bkRhdGFCYXNlICogY2xvbmUgKCkgY29u c3Q7CgogICAgcHJpdmF0ZToKCgoKCgoKICAgICAgRnVuUHRyIGZ1bl9wdHI7CgoKCgoKICAgICAg Q2xhc3MgKm9iamVjdDsKCgoKCgogICAgICBBcmcxIGFyZzE7CiAgICAgIEFyZzIgYXJnMjsKICAg ICAgQXJnMyBhcmczOwogICAgICBBcmc0IGFyZzQ7CiAgICAgIEFyZzUgYXJnNTsKICAgICAgQXJn NiBhcmc2OwogICAgICBBcmc3IGFyZzc7CiAgICAgIEFyZzggYXJnODsKCgoKCgogICAgICBzdGF0 aWMgdm9pZCAqIHRocmVhZF9lbnRyeV9wb2ludCAodm9pZCAqYXJnKTsKIyAzNTI4ICIvaG9tZS9i YW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5h Z2VtZW50LmgiCiAgICAgIGNsYXNzIEFyZ0NvbGxlY3RvcgogICAgICB7CiAgICAgICAgcHVibGlj OgoKCgoKCgogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBNZW1GdW5EYXRhODxDbGFzcyxBcmcx LEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsUmV0VHlwZT46OkZ1blB0ciBGdW5Q dHI7CgoKCgoKCiAgICAgICAgICBBcmdDb2xsZWN0b3IgKEZ1blB0ciBmdW5fcHRyKTsKIyAzNTUz ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3Ro cmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgICAgICBGdW5FbmNhcHN1bGF0aW9uIGNvbGxlY3RfYXJn cyAoQ2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJn MiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJn MywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNSBhcmc1LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzYgYXJnNiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQXJnOCBhcmc4KTsKIyAzNTc1ICIvaG9tZS9iYW5nZXJ0 aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50 LmgiCiAgICAgICAgICBGdW5FbmNhcHN1bGF0aW9uIGNvbGxlY3RfYXJncyAoQ2xhc3MgJm9iamVj dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEFyZzYgYXJnNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQXJnOCBhcmc4KTsKICAgICAgICBwcml2YXRlOgoKCgoKICAgICAgICAgIEZ1blB0 ciBmdW5fcHRyOwogICAgICB9OwoKCgoKCgogICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3NfLCB0 eXBlbmFtZSBBcmcxXywgdHlwZW5hbWUgQXJnMl8sIHR5cGVuYW1lIEFyZzNfLCB0eXBlbmFtZSBB cmc0XywgdHlwZW5hbWUgQXJnNV8sIHR5cGVuYW1lIEFyZzZfLCB0eXBlbmFtZSBBcmc3XywgdHlw ZW5hbWUgQXJnOF8+CiAgICAgIGZyaWVuZAogICAgICB0eXBlbmFtZSBNZW1GdW5EYXRhODxDbGFz c18sQXJnMV8sQXJnMl8sQXJnM18sQXJnNF8sQXJnNV8sQXJnNl8sQXJnN18sQXJnOF8sdm9pZD46 OkFyZ0NvbGxlY3RvcgogICAgICBlbmNhcHN1bGF0ZSAodm9pZCAoQ2xhc3NfOjoqZnVuX3B0ciko QXJnMV8sIEFyZzJfLCBBcmczXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFyZzRfLCBBcmc1XywgQXJnNl8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBcmc3XywgQXJnOF8pKTsKIyAzNjEyICIvaG9tZS9iYW5nZXJ0aC9wL2Rl YWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAg fTsKIyAzNjIyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVk ZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBl bmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0 eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4 LCB0eXBlbmFtZSBBcmc5LCB0eXBlbmFtZSBSZXRUeXBlPgogIGNsYXNzIE1lbUZ1bkRhdGE5IDog cHVibGljIEZ1bkRhdGFCYXNlCiAgewogICAgcHVibGljOgoKCgoKCiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgTWVtRnVuUHRyOTxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3 LEFyZzgsQXJnOSxSZXRUeXBlPjo6dHlwZSBGdW5QdHI7CgoKCgoKCiAgICAgIE1lbUZ1bkRhdGE5 IChGdW5QdHIgZnVuX3B0ciwKICAgICAgICAgICAgICAgICAgIENsYXNzICpvYmplY3QsCiAgICAg ICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAg ICAgICAgICAgICAgICAgICBBcmczIGFyZzMsCiAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQs CiAgICAgICAgICAgICAgICAgICBBcmc1IGFyZzUsCiAgICAgICAgICAgICAgICAgICBBcmc2IGFy ZzYsCiAgICAgICAgICAgICAgICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICAgICAgICBBcmc4 IGFyZzgsCiAgICAgICAgICAgICAgICAgICBBcmc5IGFyZzkpOwoKCgoKICAgICAgTWVtRnVuRGF0 YTkgKGNvbnN0IE1lbUZ1bkRhdGE5ICZmdW5fZGF0YTkpOwoKCgoKICAgICAgdmlydHVhbCBGdW5E YXRhQmFzZSAqIGNsb25lICgpIGNvbnN0OwoKICAgIHByaXZhdGU6CgoKCgoKCiAgICAgIEZ1blB0 ciBmdW5fcHRyOwoKCgoKCiAgICAgIENsYXNzICpvYmplY3Q7CgoKCgoKICAgICAgQXJnMSBhcmcx OwogICAgICBBcmcyIGFyZzI7CiAgICAgIEFyZzMgYXJnMzsKICAgICAgQXJnNCBhcmc0OwogICAg ICBBcmc1IGFyZzU7CiAgICAgIEFyZzYgYXJnNjsKICAgICAgQXJnNyBhcmc3OwogICAgICBBcmc4 IGFyZzg7CiAgICAgIEFyZzkgYXJnOTsKCgoKCgogICAgICBzdGF0aWMgdm9pZCAqIHRocmVhZF9l bnRyeV9wb2ludCAodm9pZCAqYXJnKTsKIyAzNzAyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkv Mi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgIGNs YXNzIEFyZ0NvbGxlY3RvcgogICAgICB7CiAgICAgICAgcHVibGljOgoKCgoKCgogICAgICAgICAg dHlwZWRlZiB0eXBlbmFtZSBNZW1GdW5EYXRhOTxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFy ZzUsQXJnNixBcmc3LEFyZzgsQXJnOSxSZXRUeXBlPjo6RnVuUHRyIEZ1blB0cjsKCgoKCgoKICAg ICAgICAgIEFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpOwojIDM3MjcgIi9ob21lL2Jhbmdl cnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1l bnQuaCIKICAgICAgICAgIEZ1bkVuY2Fwc3VsYXRpb24gY29sbGVjdF9hcmdzIChDbGFzcyAqb2Jq ZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc1IGFyZzUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFyZzcgYXJnNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBcmc4IGFyZzgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQXJnOSBhcmc5KTsKIyAzNzUwICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFs LklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgICAgICBGdW5F bmNhcHN1bGF0aW9uIGNvbGxlY3RfYXJncyAoQ2xhc3MgJm9iamVjdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEFyZzYgYXJnNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc3 IGFyZzcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnOCBhcmc4 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzkgYXJnOSk7CiAg ICAgICAgcHJpdmF0ZToKCgoKCiAgICAgICAgICBGdW5QdHIgZnVuX3B0cjsKICAgICAgfTsKCgoK CgoKICAgICAgdGVtcGxhdGUgPGNsYXNzIENsYXNzXywgdHlwZW5hbWUgQXJnMV8sIHR5cGVuYW1l IEFyZzJfLCB0eXBlbmFtZSBBcmczXywgdHlwZW5hbWUgQXJnNF8sIHR5cGVuYW1lIEFyZzVfLCB0 eXBlbmFtZSBBcmc2XywgdHlwZW5hbWUgQXJnN18sIHR5cGVuYW1lIEFyZzhfLCB0eXBlbmFtZSBB cmc5Xz4KICAgICAgZnJpZW5kCiAgICAgIHR5cGVuYW1lIE1lbUZ1bkRhdGE5PENsYXNzXyxBcmcx XyxBcmcyXyxBcmczXyxBcmc0XyxBcmc1XyxBcmc2XyxBcmc3XyxBcmc4XyxBcmc5Xyx2b2lkPjo6 QXJnQ29sbGVjdG9yCiAgICAgIGVuY2Fwc3VsYXRlICh2b2lkIChDbGFzc186OipmdW5fcHRyKShB cmcxXywgQXJnMl8sIEFyZzNfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQXJnNF8sIEFyZzVfLCBBcmc2XywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEFyZzdfLCBBcmc4XywgQXJnOV8pKTsKIyAzNzg4ICIvaG9tZS9iYW5nZXJ0 aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50 LmgiCiAgfTsKIyAzNzk4ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2Uv aW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNz LCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBB cmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFt ZSBBcmc4LCB0eXBlbmFtZSBBcmc5LCB0eXBlbmFtZSBBcmcxMCwgdHlwZW5hbWUgUmV0VHlwZT4K ICBjbGFzcyBNZW1GdW5EYXRhMTAgOiBwdWJsaWMgRnVuRGF0YUJhc2UKICB7CiAgICBwdWJsaWM6 CgoKCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBNZW1GdW5QdHIxMDxDbGFzcyxBcmcxLEFyZzIs QXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsQXJnOSxBcmcxMCxSZXRUeXBlPjo6dHlwZSBG dW5QdHI7CgoKCgoKCiAgICAgIE1lbUZ1bkRhdGExMCAoRnVuUHRyIGZ1bl9wdHIsCiAgICAgICAg ICAgICAgICAgICAgQ2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEs CiAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAgIEFyZzMg YXJnMywKICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAg QXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAgIEFyZzYgYXJnNiwKICAgICAgICAgICAgICAg ICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICAgICAgICAgQXJnOCBhcmc4LAogICAgICAgICAg ICAgICAgICAgIEFyZzkgYXJnOSwKICAgICAgICAgICAgICAgICAgICBBcmcxMCBhcmcxMCk7CgoK CgogICAgICBNZW1GdW5EYXRhMTAgKGNvbnN0IE1lbUZ1bkRhdGExMCAmZnVuX2RhdGExMCk7CgoK CgogICAgICB2aXJ0dWFsIEZ1bkRhdGFCYXNlICogY2xvbmUgKCkgY29uc3Q7CgogICAgcHJpdmF0 ZToKCgoKCgoKICAgICAgRnVuUHRyIGZ1bl9wdHI7CgoKCgoKICAgICAgQ2xhc3MgKm9iamVjdDsK CgoKCgogICAgICBBcmcxIGFyZzE7CiAgICAgIEFyZzIgYXJnMjsKICAgICAgQXJnMyBhcmczOwog ICAgICBBcmc0IGFyZzQ7CiAgICAgIEFyZzUgYXJnNTsKICAgICAgQXJnNiBhcmc2OwogICAgICBB cmc3IGFyZzc7CiAgICAgIEFyZzggYXJnODsKICAgICAgQXJnOSBhcmc5OwogICAgICBBcmcxMCBh cmcxMDsKCgoKCgogICAgICBzdGF0aWMgdm9pZCAqIHRocmVhZF9lbnRyeV9wb2ludCAodm9pZCAq YXJnKTsKIyAzODgwICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5j bHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgIGNsYXNzIEFyZ0NvbGxlY3Rvcgog ICAgICB7CiAgICAgICAgcHVibGljOgoKCgoKCgogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBN ZW1GdW5EYXRhMTA8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4 LEFyZzksQXJnMTAsUmV0VHlwZT46OkZ1blB0ciBGdW5QdHI7CgoKCgoKCiAgICAgICAgICBBcmdD b2xsZWN0b3IgKEZ1blB0ciBmdW5fcHRyKTsKIyAzOTA1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwu SUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAg ICAgICBGdW5FbmNhcHN1bGF0aW9uIGNvbGxlY3RfYXJncyAoQ2xhc3MgKm9iamVjdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFyZzYgYXJnNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QXJnOCBhcmc4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzkg YXJnOSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxMCBhcmcx MCk7CiMgMzkyOSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1 ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICAgICAgRnVuRW5jYXBzdWxhdGlvbiBj b2xsZWN0X2FyZ3MgKENsYXNzICZvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQXJnMSBhcmcxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBBcmczIGFyZzMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJn NCBhcmc0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzUgYXJn NSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc2IGFyZzYsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNyBhcmc3LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzggYXJnOCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc5IGFyZzksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQXJnMTAgYXJnMTApOwogICAgICAgIHByaXZhdGU6CgoK CgogICAgICAgICAgRnVuUHRyIGZ1bl9wdHI7CiAgICAgIH07CgoKCgoKCiAgICAgIHRlbXBsYXRl IDxjbGFzcyBDbGFzc18sIHR5cGVuYW1lIEFyZzFfLCB0eXBlbmFtZSBBcmcyXywgdHlwZW5hbWUg QXJnM18sIHR5cGVuYW1lIEFyZzRfLCB0eXBlbmFtZSBBcmc1XywgdHlwZW5hbWUgQXJnNl8sIHR5 cGVuYW1lIEFyZzdfLCB0eXBlbmFtZSBBcmc4XywgdHlwZW5hbWUgQXJnOV8sIHR5cGVuYW1lIEFy ZzEwXz4KICAgICAgZnJpZW5kCiAgICAgIHR5cGVuYW1lIE1lbUZ1bkRhdGExMDxDbGFzc18sQXJn MV8sQXJnMl8sQXJnM18sQXJnNF8sQXJnNV8sQXJnNl8sQXJnN18sQXJnOF8sQXJnOV8sQXJnMTBf LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICAgICAgZW5jYXBzdWxhdGUgKHZvaWQgKENsYXNzXzo6KmZ1 bl9wdHIpKEFyZzFfLCBBcmcyXywgQXJnM18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBcmc0XywgQXJnNV8sIEFyZzZfLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQXJnN18sIEFyZzhfLCBBcmc5XywgQXJnMTBfKSk7CiMgMzk2 OCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90 aHJlYWRfbWFuYWdlbWVudC5oIgogIH07CiMgMzk4MyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJ LzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIGlubGlu ZQogIEZ1bkRhdGEwPHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoKmZ1 bl9wdHIpKCkpOwojIDM5OTggIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFz ZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8dHlwZW5hbWUg QXJnMT4KICBpbmxpbmUKICB0eXBlbmFtZSBGdW5EYXRhMTxBcmcxLHZvaWQ+OjpBcmdDb2xsZWN0 b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzEpKTsKIyA0MDE1ICIvaG9tZS9i YW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5h Z2VtZW50LmgiCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzI+CiAgaW5s aW5lCiAgdHlwZW5hbWUgRnVuRGF0YTI8QXJnMSxBcmcyLHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBl bmNhcHN1bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzEsIEFyZzIpKTsKIyA0MDMyICIvaG9tZS9i YW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5h Z2VtZW50LmgiCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVu YW1lIEFyZzM+CiAgaW5saW5lCiAgdHlwZW5hbWUgRnVuRGF0YTM8QXJnMSxBcmcyLEFyZzMsdm9p ZD46OkFyZ0NvbGxlY3RvcgogIGVuY2Fwc3VsYXRlICh2b2lkICgqZnVuX3B0cikoQXJnMSwgQXJn MiwgQXJnMykpOwojIDQwNDkgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFz ZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8dHlwZW5hbWUg QXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnND4KICBpbmxp bmUKICB0eXBlbmFtZSBGdW5EYXRhNDxBcmcxLEFyZzIsQXJnMyxBcmc0LHZvaWQ+OjpBcmdDb2xs ZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzEsIEFyZzIsIEFyZzMsIEFy ZzQpKTsKIyA0MDY3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5j bHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEs IHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFy ZzU+CiAgaW5saW5lCiAgdHlwZW5hbWUgRnVuRGF0YTU8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1 LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzEs IEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUpKTsKIyA0MDg0ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwu SUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgdGVt cGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVu YW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzY+CiAgaW5saW5lCiAgdHlwZW5h bWUgRnVuRGF0YTY8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsdm9pZD46OkFyZ0NvbGxl Y3RvcgogIGVuY2Fwc3VsYXRlICh2b2lkICgqZnVuX3B0cikoQXJnMSwgQXJnMiwgQXJnMywgQXJn NCwgQXJnNSwgQXJnNikpOwojIDQxMDEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwu SUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8dHlw ZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwg dHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNz4KICBpbmxpbmUKICB0 eXBlbmFtZSBGdW5EYXRhNzxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LHZvaWQ+ OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzEsIEFyZzIs IEFyZzMsIEFyZzQsIEFyZzUsIEFyZzYsIEFyZzcpKTsKIyA0MTE4ICIvaG9tZS9iYW5nZXJ0aC9w L2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50Lmgi CiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMs IHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFy ZzcsIHR5cGVuYW1lIEFyZzg+CiAgaW5saW5lCiAgdHlwZW5hbWUgRnVuRGF0YTg8QXJnMSxBcmcy LEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNh cHN1bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUsIEFy ZzYsIEFyZzcsIEFyZzgpKTsKIyA0MTM1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFs LklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgdGVtcGxhdGUgPHR5 cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQs IHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFy ZzgsIHR5cGVuYW1lIEFyZzk+CiAgaW5saW5lCiAgdHlwZW5hbWUgRnVuRGF0YTk8QXJnMSxBcmcy LEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LEFyZzksdm9pZD46OkFyZ0NvbGxlY3Rvcgog IGVuY2Fwc3VsYXRlICh2b2lkICgqZnVuX3B0cikoQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJn NSwgQXJnNiwgQXJnNywgQXJnOCwgQXJnOSkpOwojIDQxNTIgIi9ob21lL2JhbmdlcnRoL3AvZGVh bC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlw ZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywg dHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgQXJnOSwgdHlwZW5hbWUgQXJnMTA+CiAgaW5saW5lCiAg dHlwZW5hbWUgRnVuRGF0YTEwPEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJn OCxBcmc5LEFyZzEwLHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoKmZ1 bl9wdHIpKEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUsIEFyZzYsIEFyZzcsIEFyZzgsIEFy ZzksIEFyZzEwKSk7CiMgNDE3MCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9i YXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBD bGFzcz4KICBpbmxpbmUKICB0eXBlbmFtZSBNZW1GdW5EYXRhMDxDbGFzcyx2b2lkPjo6QXJnQ29s bGVjdG9yCiAgZW5jYXBzdWxhdGUgKHZvaWQgKENsYXNzOjoqZnVuX3B0cikoKSk7CiMgNDIwNSAi L2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJl YWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMT4K ICBpbmxpbmUKICB0eXBlbmFtZSBNZW1GdW5EYXRhMTxDbGFzcyxBcmcxLHZvaWQ+OjpBcmdDb2xs ZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoQ2xhc3M6OipmdW5fcHRyKShBcmcxKSk7CiMgNDI0 MSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90 aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJn MSwgdHlwZW5hbWUgQXJnMj4KICBpbmxpbmUKICB0eXBlbmFtZSBNZW1GdW5EYXRhMjxDbGFzcyxB cmcxLEFyZzIsdm9pZD46OkFyZ0NvbGxlY3RvcgogIGVuY2Fwc3VsYXRlICh2b2lkIChDbGFzczo6 KmZ1bl9wdHIpKEFyZzEsIEFyZzIpKTsKIyA0Mjc3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkv Mi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgdGVtcGxh dGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBB cmczPgogIGlubGluZQogIHR5cGVuYW1lIE1lbUZ1bkRhdGEzPENsYXNzLEFyZzEsQXJnMixBcmcz LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoQ2xhc3M6OipmdW5fcHRy KShBcmcxLCBBcmcyLCBBcmczKSk7CiMgNDMxMyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRl IDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJn MywgdHlwZW5hbWUgQXJnND4KICBpbmxpbmUKICB0eXBlbmFtZSBNZW1GdW5EYXRhNDxDbGFzcyxB cmcxLEFyZzIsQXJnMyxBcmc0LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9p ZCAoQ2xhc3M6OipmdW5fcHRyKShBcmcxLCBBcmcyLCBBcmczLCBBcmc0KSk7CiMgNDM0OSAiL2hv bWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRf bWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlw ZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNT4K ICBpbmxpbmUKICB0eXBlbmFtZSBNZW1GdW5EYXRhNTxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0 LEFyZzUsdm9pZD46OkFyZ0NvbGxlY3RvcgogIGVuY2Fwc3VsYXRlICh2b2lkIChDbGFzczo6KmZ1 bl9wdHIpKEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUpKTsKIyA0Mzg1ICIvaG9tZS9iYW5n ZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2Vt ZW50LmgiCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBB cmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFt ZSBBcmc2PgogIGlubGluZQogIHR5cGVuYW1lIE1lbUZ1bkRhdGE2PENsYXNzLEFyZzEsQXJnMixB cmczLEFyZzQsQXJnNSxBcmc2LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9p ZCAoQ2xhc3M6OipmdW5fcHRyKShBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2KSk7 CiMgNDQyMCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUv YmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5h bWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlw ZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNz4KICBpbmxpbmUKICB0eXBl bmFtZSBNZW1GdW5EYXRhNzxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3 LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoQ2xhc3M6OipmdW5fcHRy KShBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2LCBBcmc3KSk7CiMgNDQ1NSAiL2hv bWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRf bWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlw ZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwg dHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOD4KICBpbmxpbmUKICB0 eXBlbmFtZSBNZW1GdW5EYXRhODxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixB cmc3LEFyZzgsdm9pZD46OkFyZ0NvbGxlY3RvcgogIGVuY2Fwc3VsYXRlICh2b2lkIChDbGFzczo6 KmZ1bl9wdHIpKEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUsIEFyZzYsIEFyZzcsIEFyZzgp KTsKIyA0NDkwICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVk ZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBl bmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0 eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4 LCB0eXBlbmFtZSBBcmc5PgogIGlubGluZQogIHR5cGVuYW1lIE1lbUZ1bkRhdGE5PENsYXNzLEFy ZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxBcmc5LHZvaWQ+OjpBcmdDb2xs ZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoQ2xhc3M6OipmdW5fcHRyKShBcmcxLCBBcmcyLCBB cmczLCBBcmc0LCBBcmc1LCBBcmc2LCBBcmc3LCBBcmc4LCBBcmc5KSk7CiMgNDUyNSAiL2hvbWUv YmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFu YWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5h bWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlw ZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgQXJnOSwg dHlwZW5hbWUgQXJnMTA+CiAgaW5saW5lCiAgdHlwZW5hbWUgTWVtRnVuRGF0YTEwPENsYXNzLEFy ZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxBcmc5LEFyZzEwLHZvaWQ+OjpB cmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoQ2xhc3M6OipmdW5fcHRyKShBcmcxLCBB cmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2LCBBcmc3LCBBcmc4LCBBcmc5LCBBcmcxMCkpOwoj IDQ1NTYgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jh c2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB2b2lkIHNwYXduIChUaHJlYWRNYW5hZ2VyICZ0aHJl YWRfbWFuYWdlciwKICAgICAgICAgICAgICBjb25zdCBGdW5FbmNhcHN1bGF0aW9uICZmdW5fZGF0 YSk7CgoKCgoKCgogIHZvaWQgc3Bhd25fbiAoVGhyZWFkTWFuYWdlciAmdGhyZWFkX21hbmFnZXIs CiAgICAgICAgICAgICAgICBjb25zdCBGdW5FbmNhcHN1bGF0aW9uICZmdW5fZW5jYXBzdWxhdGlv biwKICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBuX3RocmVhZHMpOwojIDQ2MTgg Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhy ZWFkX21hbmFnZW1lbnQuaCIKICB1bnNpZ25lZCBpbnQgbl9leGlzdGluZ190aHJlYWRzICgpOwoj IDQ2NDEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jh c2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRm9yd2FyZEl0ZXJh dG9yPgogIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxGb3J3YXJkSXRlcmF0b3IsRm9yd2FyZEl0ZXJh dG9yPiA+CiAgc3BsaXRfcmFuZ2UgKGNvbnN0IEZvcndhcmRJdGVyYXRvciAmYmVnaW4sCiAgICAg ICAgICAgICAgIGNvbnN0IEZvcndhcmRJdGVyYXRvciAmZW5kLAogICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBpbnQgbl9pbnRlcnZhbHMpOwojIDQ2NTYgIi9ob21lL2JhbmdlcnRoL3AvZGVh bC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICBz dGQ6OnZlY3RvcjxzdGQ6OnBhaXI8dW5zaWduZWQgaW50LHVuc2lnbmVkIGludD4gPgogIHNwbGl0 X2ludGVydmFsIChjb25zdCB1bnNpZ25lZCBpbnQgYmVnaW4sCiAgICAgICAgICAgICAgICAgIGNv bnN0IHVuc2lnbmVkIGludCBlbmQsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu dCBuX2ludGVydmFscyk7CiMgNDY4MSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5J SS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHN0cnVjdCBGdW5EYXRh Q291bnRlcgogIHsKCgoKCiAgICAgIEZ1bkRhdGFDb3VudGVyICgpOwoKCgoKCgoKICAgICAgfkZ1 bkRhdGFDb3VudGVyICgpOwoKCgoKCgogICAgICB1bnNpZ25lZCBpbnQgbl9mdW5fZW5jYXBzdWxh dGlvbl9vYmplY3RzOwogICAgICB1bnNpZ25lZCBpbnQgbl9mdW5fZGF0YV9iYXNlX29iamVjdHM7 CgoKCgogICAgICBjbGFzcyBFeGNPYmplY3RzRXhpc3QgOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7 IHB1YmxpYzogRXhjT2JqZWN0c0V4aXN0IChjb25zdCBjaGFyKiBhMSwgY29uc3QgaW50IGEyKSA6 IGFyZzEgKGExKSwgYXJnMihhMikge307IHZpcnR1YWwgfkV4Y09iamVjdHNFeGlzdCAoKSB0aHJv dyAoKSB7fTsgdmlydHVhbCB2b2lkIFByaW50SW5mbyAoc3RkOjpvc3RyZWFtICZvdXQpIGNvbnN0 IHsgb3V0IDw8ICJUaGVyZSBhcmUgc3RpbGwgIiA8PCBhcmcyIDw8ICIgb2JqZWN0cyBvZiB0eXBl ICIgPDwgYXJnMSA8PCAiIGFsaXZlLiBZb3UgcHJvYmFibHkgaGF2ZSBhIG1lbW9yeSAiIDw8ICJs ZWFrIHNvbWV3aGVyZS4iIDw8IHN0ZDo6ZW5kbDsgfTsgcHJpdmF0ZTogY29uc3QgY2hhciogYXJn MTsgY29uc3QgaW50IGFyZzI7IH07CgoKCgogIH07CiMgNDcyNSAiL2hvbWUvYmFuZ2VydGgvcC9k ZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgog IHZvaWQgcmVnaXN0ZXJfbmV3X3RocmVhZCAoKTsKIyA0NzM2ICIvaG9tZS9iYW5nZXJ0aC9wL2Rl YWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAg dm9pZCBkZXJlZ2lzdGVyX25ld190aHJlYWQgKCk7CiMgNDc2NSAiL2hvbWUvYmFuZ2VydGgvcC9k ZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgog IHZvaWQgaGFuZGxlX3N0ZF9leGNlcHRpb24gKGNvbnN0IHN0ZDo6ZXhjZXB0aW9uICZleGMpOwoj IDQ3NzQgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jh c2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB2b2lkIGhhbmRsZV91bmtub3duX2V4Y2VwdGlvbiAo KTsKCn07CiMgNDc4NSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2lu Y2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgpuYW1lc3BhY2UgVGhyZWFkcwp7CgoKCiAg dGVtcGxhdGUgPHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRGF0YTA8UmV0VHlwZT46OkZ1bkRhdGEw IChGdW5QdHIgZnVuX3B0cikgOgogICAgICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoJkZ1bkRh dGEwPFJldFR5cGU+Ojp0aHJlYWRfZW50cnlfcG9pbnQpLAogICAgICAgICAgICAgICAgICBmdW5f cHRyIChmdW5fcHRyKQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFJldFR5cGU+CiAgRnVu RGF0YTA8UmV0VHlwZT46OkZ1bkRhdGEwIChjb25zdCBGdW5EYXRhMCAmZnVuX2RhdGEpIDoKICAg ICAgICAgICAgICAgICAgRnVuRGF0YUJhc2UgKGZ1bl9kYXRhKSwKICAgICAgICAgICAgICAgICAg ZnVuX3B0ciAoZnVuX2RhdGEuZnVuX3B0cikKICB7fQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBS ZXRUeXBlPgogIEZ1bkRhdGFCYXNlICoKICBGdW5EYXRhMDxSZXRUeXBlPjo6Y2xvbmUgKCkgY29u c3QKICB7CiAgICByZXR1cm4gbmV3IEZ1bkRhdGEwICgqdGhpcyk7CiAgfQoKCgogIHRlbXBsYXRl IDx0eXBlbmFtZSBSZXRUeXBlPgogIHZvaWQgKgogIEZ1bkRhdGEwPFJldFR5cGU+Ojp0aHJlYWRf ZW50cnlfcG9pbnQgKHZvaWQgKmFyZykKICB7CgoKCiAgICB0eXBlZGVmIEZ1bkRhdGEwPFJldFR5 cGU+IFRoaXNDbGFzczsKCiAgICBGdW5FbmNhcHN1bGF0aW9uICpmdW5fZW5jYXBzdWxhdGlvbgog ICAgICA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuRW5jYXBzdWxhdGlvbio+KGFyZyk7CiAgICBjb25z dCBUaGlzQ2xhc3MgKmZ1bl9kYXRhCiAgICAgID0gZHluYW1pY19jYXN0PGNvbnN0IFRoaXNDbGFz cyo+IChmdW5fZW5jYXBzdWxhdGlvbi0+ZnVuX2RhdGFfYmFzZSk7CgoKICAgIFRoaXNDbGFzczo6 RnVuUHRyIGZ1bl9wdHIgPSBmdW5fZGF0YS0+ZnVuX3B0cjsKCgoKCgogICAgZnVuX2RhdGEtPmxv Y2sucmVsZWFzZSAoKTsKIyA0ODQ5ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJ L2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICByZWdpc3Rlcl9uZXdf dGhyZWFkICgpOwogICAgdHJ5CiAgICAgIHsKICAgICAgICAoKmZ1bl9wdHIpKCk7CiAgICAgIH0K ICAgIGNhdGNoIChjb25zdCBzdGQ6OmV4Y2VwdGlvbiAmZXhjKQogICAgICB7CiAgICAgICAgaGFu ZGxlX3N0ZF9leGNlcHRpb24gKGV4Yyk7CiAgICAgIH0KICAgIGNhdGNoICguLi4pCiAgICAgIHsK ICAgICAgICBoYW5kbGVfdW5rbm93bl9leGNlcHRpb24gKCk7CiAgICAgIH07CiAgICBkZXJlZ2lz dGVyX25ld190aHJlYWQgKCk7CgogICAgcmV0dXJuIDA7CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBl bmFtZSBSZXRUeXBlPgogIEZ1bkRhdGEwPFJldFR5cGU+OjpBcmdDb2xsZWN0b3I6OkFyZ0NvbGxl Y3RvciAoRnVuUHRyIGZ1bl9wdHIpIDoKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVuX3B0 cikKICB7fQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkVuY2Fwc3VsYXRp b24KICBGdW5EYXRhMDxSZXRUeXBlPjo6QXJnQ29sbGVjdG9yOjpjb2xsZWN0X2FyZ3MgKCkKICB7 CiAgICByZXR1cm4gbmV3IEZ1bkRhdGEwPHZvaWQ+KGZ1bl9wdHIpOwogIH0KCgoKCgogIHRlbXBs YXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkRhdGExPEFyZzEsUmV0 VHlwZT46OkZ1bkRhdGExIChGdW5QdHIgZnVuX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQXJnMSBhcmcxKSA6CiAgICAgICAgICAgICAgICAgIEZ1bkRhdGFCYXNlICgm RnVuRGF0YTE8QXJnMSxSZXRUeXBlPjo6dGhyZWFkX2VudHJ5X3BvaW50KSwKICAgICAgICAgICAg ICAgICAgZnVuX3B0ciAoZnVuX3B0ciksCiAgICAgICAgICAgICAgICAgIGFyZzEgKGFyZzEpCiAg e30KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5E YXRhMTxBcmcxLFJldFR5cGU+OjpGdW5EYXRhMSAoY29uc3QgRnVuRGF0YTEgJmZ1bl9kYXRhKSA6 CiAgICAgICAgICAgICAgICAgIEZ1bkRhdGFCYXNlIChmdW5fZGF0YSksCiAgICAgICAgICAgICAg ICAgIGZ1bl9wdHIgKGZ1bl9kYXRhLmZ1bl9wdHIpLAogICAgICAgICAgICAgICAgICBhcmcxIChm dW5fZGF0YS5hcmcxKQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1l IFJldFR5cGU+CiAgRnVuRGF0YUJhc2UgKgogIEZ1bkRhdGExPEFyZzEsUmV0VHlwZT46OmNsb25l ICgpIGNvbnN0CiAgewogICAgcmV0dXJuIG5ldyBGdW5EYXRhMSAoKnRoaXMpOwogIH0KCgoKICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgUmV0VHlwZT4KICB2b2lkICoKICBGdW5E YXRhMTxBcmcxLFJldFR5cGU+Ojp0aHJlYWRfZW50cnlfcG9pbnQgKHZvaWQgKmFyZykKICB7CgoK CiAgICB0eXBlZGVmIEZ1bkRhdGExPEFyZzEsUmV0VHlwZT4gVGhpc0NsYXNzOwoKICAgIEZ1bkVu Y2Fwc3VsYXRpb24gKmZ1bl9lbmNhcHN1bGF0aW9uCiAgICAgID0gcmVpbnRlcnByZXRfY2FzdDxG dW5FbmNhcHN1bGF0aW9uKj4oYXJnKTsKICAgIGNvbnN0IFRoaXNDbGFzcyAqZnVuX2RhdGEKICAg ICAgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgVGhpc0NsYXNzKj4gKGZ1bl9lbmNhcHN1bGF0aW9uLT5m dW5fZGF0YV9iYXNlKTsKCgogICAgVGhpc0NsYXNzOjpGdW5QdHIgZnVuX3B0ciA9IGZ1bl9kYXRh LT5mdW5fcHRyOwogICAgQXJnMSBhcmcxID0gZnVuX2RhdGEtPmFyZzE7CgoKCgoKICAgIGZ1bl9k YXRhLT5sb2NrLnJlbGVhc2UgKCk7CiMgNDk1MCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgcmVnaXN0 ZXJfbmV3X3RocmVhZCAoKTsKICAgIHRyeQogICAgICB7CiAgICAgICAgKCpmdW5fcHRyKShhcmcx KTsKICAgICAgfQogICAgY2F0Y2ggKGNvbnN0IHN0ZDo6ZXhjZXB0aW9uICZleGMpCiAgICAgIHsK ICAgICAgICBoYW5kbGVfc3RkX2V4Y2VwdGlvbiAoZXhjKTsKICAgICAgfQogICAgY2F0Y2ggKC4u LikKICAgICAgewogICAgICAgIGhhbmRsZV91bmtub3duX2V4Y2VwdGlvbiAoKTsKICAgICAgfTsK ICAgIGRlcmVnaXN0ZXJfbmV3X3RocmVhZCAoKTsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgdGVt cGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRGF0YTE8QXJnMSxS ZXRUeXBlPjo6QXJnQ29sbGVjdG9yOjpBcmdDb2xsZWN0b3IgKEZ1blB0ciBmdW5fcHRyKSA6CiAg ICAgICAgICAgICAgICAgIGZ1bl9wdHIgKGZ1bl9wdHIpCiAge30KCgogIHRlbXBsYXRlIDx0eXBl bmFtZSBBcmcxLCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkVuY2Fwc3VsYXRpb24KICBGdW5EYXRh MTxBcmcxLFJldFR5cGU+OjpBcmdDb2xsZWN0b3I6OmNvbGxlY3RfYXJncyAoQXJnMSBhcmcxKQog IHsKICAgIHJldHVybiBuZXcgRnVuRGF0YTE8QXJnMSx2b2lkPihmdW5fcHRyLCBhcmcxKTsKICB9 CgoKCgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1l IFJldFR5cGU+CiAgRnVuRGF0YTI8QXJnMSxBcmcyLFJldFR5cGU+OjpGdW5EYXRhMiAoRnVuUHRy IGZ1bl9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSBh cmcxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzIgYXJnMikg OgogICAgICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoJkZ1bkRhdGEyPEFyZzEsQXJnMixSZXRU eXBlPjo6dGhyZWFkX2VudHJ5X3BvaW50KSwKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVu X3B0ciksCiAgICAgICAgICAgICAgICAgIGFyZzEgKGFyZzEpLAogICAgICAgICAgICAgICAgICBh cmcyIChhcmcyKQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFy ZzIsIHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRGF0YTI8QXJnMSxBcmcyLFJldFR5cGU+OjpGdW5E YXRhMiAoY29uc3QgRnVuRGF0YTIgJmZ1bl9kYXRhKSA6CiAgICAgICAgICAgICAgICAgIEZ1bkRh dGFCYXNlIChmdW5fZGF0YSksCiAgICAgICAgICAgICAgICAgIGZ1bl9wdHIgKGZ1bl9kYXRhLmZ1 bl9wdHIpLAogICAgICAgICAgICAgICAgICBhcmcxIChmdW5fZGF0YS5hcmcxKSwKICAgICAgICAg ICAgICAgICAgYXJnMiAoZnVuX2RhdGEuYXJnMikKICB7fQoKCgogIHRlbXBsYXRlIDx0eXBlbmFt ZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkRhdGFCYXNlICoK ICBGdW5EYXRhMjxBcmcxLEFyZzIsUmV0VHlwZT46OmNsb25lICgpIGNvbnN0CiAgewogICAgcmV0 dXJuIG5ldyBGdW5EYXRhMiAoKnRoaXMpOwogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJn MSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgUmV0VHlwZT4KICB2b2lkICoKICBGdW5EYXRhMjxB cmcxLEFyZzIsUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCAodm9pZCAqYXJnKQogIHsKCgoK ICAgIHR5cGVkZWYgRnVuRGF0YTI8QXJnMSxBcmcyLFJldFR5cGU+IFRoaXNDbGFzczsKCiAgICBG dW5FbmNhcHN1bGF0aW9uICpmdW5fZW5jYXBzdWxhdGlvbgogICAgICA9IHJlaW50ZXJwcmV0X2Nh c3Q8RnVuRW5jYXBzdWxhdGlvbio+KGFyZyk7CiAgICBjb25zdCBUaGlzQ2xhc3MgKmZ1bl9kYXRh CiAgICAgID0gZHluYW1pY19jYXN0PGNvbnN0IFRoaXNDbGFzcyo+IChmdW5fZW5jYXBzdWxhdGlv bi0+ZnVuX2RhdGFfYmFzZSk7CgoKICAgIFRoaXNDbGFzczo6RnVuUHRyIGZ1bl9wdHIgPSBmdW5f ZGF0YS0+ZnVuX3B0cjsKICAgIEFyZzEgYXJnMSA9IGZ1bl9kYXRhLT5hcmcxOwogICAgQXJnMiBh cmcyID0gZnVuX2RhdGEtPmFyZzI7CgoKCgoKICAgIGZ1bl9kYXRhLT5sb2NrLnJlbGVhc2UgKCk7 CiMgNTA1NSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUv YmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgcmVnaXN0ZXJfbmV3X3RocmVhZCAoKTsKICAg IHRyeQogICAgICB7CiAgICAgICAgKCpmdW5fcHRyKShhcmcxLCBhcmcyKTsKICAgICAgfQogICAg Y2F0Y2ggKGNvbnN0IHN0ZDo6ZXhjZXB0aW9uICZleGMpCiAgICAgIHsKICAgICAgICBoYW5kbGVf c3RkX2V4Y2VwdGlvbiAoZXhjKTsKICAgICAgfQogICAgY2F0Y2ggKC4uLikKICAgICAgewogICAg ICAgIGhhbmRsZV91bmtub3duX2V4Y2VwdGlvbiAoKTsKICAgICAgfTsKICAgIGRlcmVnaXN0ZXJf bmV3X3RocmVhZCAoKTsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1l IEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRGF0YTI8QXJnMSxB cmcyLFJldFR5cGU+OjpBcmdDb2xsZWN0b3I6OkFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIp IDoKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVuX3B0cikKICB7fQoKCgogIHRlbXBsYXRl IDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkVu Y2Fwc3VsYXRpb24KICBGdW5EYXRhMjxBcmcxLEFyZzIsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6 Y29sbGVjdF9hcmdzIChBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyKQogIHsKICAgIHJldHVybiBuZXcg RnVuRGF0YTI8QXJnMSxBcmcyLHZvaWQ+KGZ1bl9wdHIsIGFyZzEsIGFyZzIpOwogIH0KCgoKCgoK ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywg dHlwZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRhMzxBcmcxLEFyZzIsQXJnMyxSZXRUeXBlPjo6RnVu RGF0YTMgKEZ1blB0ciBmdW5fcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQXJnMSBhcmcxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQXJnMyBhcmczKSA6CiAgICAgICAgICAgICAgICAgIEZ1bkRhdGFCYXNlICgm RnVuRGF0YTM8QXJnMSxBcmcyLEFyZzMsUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCksCiAg ICAgICAgICAgICAgICAgIGZ1bl9wdHIgKGZ1bl9wdHIpLAogICAgICAgICAgICAgICAgICBhcmcx IChhcmcxKSwKICAgICAgICAgICAgICAgICAgYXJnMiAoYXJnMiksCiAgICAgICAgICAgICAgICAg IGFyZzMgKGFyZzMpCiAge30KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUg QXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRhMzxBcmcxLEFy ZzIsQXJnMyxSZXRUeXBlPjo6RnVuRGF0YTMgKGNvbnN0IEZ1bkRhdGEzICZmdW5fZGF0YSkgOgog ICAgICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoZnVuX2RhdGEpLAogICAgICAgICAgICAgICAg ICBmdW5fcHRyIChmdW5fZGF0YS5mdW5fcHRyKSwKICAgICAgICAgICAgICAgICAgYXJnMSAoZnVu X2RhdGEuYXJnMSksCiAgICAgICAgICAgICAgICAgIGFyZzIgKGZ1bl9kYXRhLmFyZzIpLAogICAg ICAgICAgICAgICAgICBhcmczIChmdW5fZGF0YS5hcmczKQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5 cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIFJldFR5 cGU+CiAgRnVuRGF0YUJhc2UgKgogIEZ1bkRhdGEzPEFyZzEsQXJnMixBcmczLFJldFR5cGU+Ojpj bG9uZSAoKSBjb25zdAogIHsKICAgIHJldHVybiBuZXcgRnVuRGF0YTMgKCp0aGlzKTsKICB9CgoK CiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMs IHR5cGVuYW1lIFJldFR5cGU+CiAgdm9pZCAqCiAgRnVuRGF0YTM8QXJnMSxBcmcyLEFyZzMsUmV0 VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCAodm9pZCAqYXJnKQogIHsKCgoKICAgIHR5cGVkZWYg RnVuRGF0YTM8QXJnMSxBcmcyLEFyZzMsUmV0VHlwZT4gVGhpc0NsYXNzOwoKICAgIEZ1bkVuY2Fw c3VsYXRpb24gKmZ1bl9lbmNhcHN1bGF0aW9uCiAgICAgID0gcmVpbnRlcnByZXRfY2FzdDxGdW5F bmNhcHN1bGF0aW9uKj4oYXJnKTsKICAgIGNvbnN0IFRoaXNDbGFzcyAqZnVuX2RhdGEKICAgICAg PSBkeW5hbWljX2Nhc3Q8Y29uc3QgVGhpc0NsYXNzKj4gKGZ1bl9lbmNhcHN1bGF0aW9uLT5mdW5f ZGF0YV9iYXNlKTsKCgogICAgVGhpc0NsYXNzOjpGdW5QdHIgZnVuX3B0ciA9IGZ1bl9kYXRhLT5m dW5fcHRyOwogICAgQXJnMSBhcmcxID0gZnVuX2RhdGEtPmFyZzE7CiAgICBBcmcyIGFyZzIgPSBm dW5fZGF0YS0+YXJnMjsKICAgIEFyZzMgYXJnMyA9IGZ1bl9kYXRhLT5hcmczOwoKCgoKCiAgICBm dW5fZGF0YS0+bG9jay5yZWxlYXNlICgpOwojIDUxNjYgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5J SS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgIHJl Z2lzdGVyX25ld190aHJlYWQgKCk7CiAgICB0cnkKICAgICAgewogICAgICAgICgqZnVuX3B0ciko YXJnMSwgYXJnMiwgYXJnMyk7CiAgICAgIH0KICAgIGNhdGNoIChjb25zdCBzdGQ6OmV4Y2VwdGlv biAmZXhjKQogICAgICB7CiAgICAgICAgaGFuZGxlX3N0ZF9leGNlcHRpb24gKGV4Yyk7CiAgICAg IH0KICAgIGNhdGNoICguLi4pCiAgICAgIHsKICAgICAgICBoYW5kbGVfdW5rbm93bl9leGNlcHRp b24gKCk7CiAgICAgIH07CiAgICBkZXJlZ2lzdGVyX25ld190aHJlYWQgKCk7CgogICAgcmV0dXJu IDA7CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBl bmFtZSBBcmczLCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkRhdGEzPEFyZzEsQXJnMixBcmczLFJl dFR5cGU+OjpBcmdDb2xsZWN0b3I6OkFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpIDoKICAg ICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVuX3B0cikKICB7fQoKCgogIHRlbXBsYXRlIDx0eXBl bmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBSZXRUeXBl PgogIEZ1bkVuY2Fwc3VsYXRpb24KICBGdW5EYXRhMzxBcmcxLEFyZzIsQXJnMyxSZXRUeXBlPjo6 QXJnQ29sbGVjdG9yOjpjb2xsZWN0X2FyZ3MgKEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzIgYXJnMiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFyZzMgYXJnMykKICB7CiAgICByZXR1cm4gbmV3IEZ1bkRhdGEzPEFyZzEsQXJnMixB cmczLHZvaWQ+KGZ1bl9wdHIsIGFyZzEsIGFyZzIsIGFyZzMpOwogIH0KCgoKCgoKICB0ZW1wbGF0 ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUg QXJnNCwgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRhNDxBcmcxLEFyZzIsQXJnMyxBcmc0LFJl dFR5cGU+OjpGdW5EYXRhNCAoRnVuUHRyIGZ1bl9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmczIGFyZzMsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQgYXJnNCkgOgog ICAgICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoJkZ1bkRhdGE0PEFyZzEsQXJnMixBcmczLEFy ZzQsUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCksCiAgICAgICAgICAgICAgICAgIGZ1bl9w dHIgKGZ1bl9wdHIpLAogICAgICAgICAgICAgICAgICBhcmcxIChhcmcxKSwKICAgICAgICAgICAg ICAgICAgYXJnMiAoYXJnMiksCiAgICAgICAgICAgICAgICAgIGFyZzMgKGFyZzMpLAogICAgICAg ICAgICAgICAgICBhcmc0IChhcmc0KQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEs IHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIFJl dFR5cGU+CiAgRnVuRGF0YTQ8QXJnMSxBcmcyLEFyZzMsQXJnNCxSZXRUeXBlPjo6RnVuRGF0YTQg KGNvbnN0IEZ1bkRhdGE0ICZmdW5fZGF0YSkgOgogICAgICAgICAgICAgICAgICBGdW5EYXRhQmFz ZSAoZnVuX2RhdGEpLAogICAgICAgICAgICAgICAgICBmdW5fcHRyIChmdW5fZGF0YS5mdW5fcHRy KSwKICAgICAgICAgICAgICAgICAgYXJnMSAoZnVuX2RhdGEuYXJnMSksCiAgICAgICAgICAgICAg ICAgIGFyZzIgKGZ1bl9kYXRhLmFyZzIpLAogICAgICAgICAgICAgICAgICBhcmczIChmdW5fZGF0 YS5hcmczKSwKICAgICAgICAgICAgICAgICAgYXJnNCAoZnVuX2RhdGEuYXJnNCkKICB7fQoKCgog IHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0 eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkRhdGFCYXNlICoKICBGdW5EYXRh NDxBcmcxLEFyZzIsQXJnMyxBcmc0LFJldFR5cGU+OjpjbG9uZSAoKSBjb25zdAogIHsKICAgIHJl dHVybiBuZXcgRnVuRGF0YTQgKCp0aGlzKTsKICB9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFy ZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1l IFJldFR5cGU+CiAgdm9pZCAqCiAgRnVuRGF0YTQ8QXJnMSxBcmcyLEFyZzMsQXJnNCxSZXRUeXBl Pjo6dGhyZWFkX2VudHJ5X3BvaW50ICh2b2lkICphcmcpCiAgewoKCgogICAgdHlwZWRlZiBGdW5E YXRhNDxBcmcxLEFyZzIsQXJnMyxBcmc0LFJldFR5cGU+IFRoaXNDbGFzczsKCiAgICBGdW5FbmNh cHN1bGF0aW9uICpmdW5fZW5jYXBzdWxhdGlvbgogICAgICA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVu RW5jYXBzdWxhdGlvbio+KGFyZyk7CiAgICBjb25zdCBUaGlzQ2xhc3MgKmZ1bl9kYXRhCiAgICAg ID0gZHluYW1pY19jYXN0PGNvbnN0IFRoaXNDbGFzcyo+IChmdW5fZW5jYXBzdWxhdGlvbi0+ZnVu X2RhdGFfYmFzZSk7CgoKICAgIFRoaXNDbGFzczo6RnVuUHRyIGZ1bl9wdHIgPSBmdW5fZGF0YS0+ ZnVuX3B0cjsKICAgIEFyZzEgYXJnMSA9IGZ1bl9kYXRhLT5hcmcxOwogICAgQXJnMiBhcmcyID0g ZnVuX2RhdGEtPmFyZzI7CiAgICBBcmczIGFyZzMgPSBmdW5fZGF0YS0+YXJnMzsKICAgIEFyZzQg YXJnNCA9IGZ1bl9kYXRhLT5hcmc0OwoKCgoKCiAgICBmdW5fZGF0YS0+bG9jay5yZWxlYXNlICgp OwojIDUyODIgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRl L2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgIHJlZ2lzdGVyX25ld190aHJlYWQgKCk7CiAg ICB0cnkKICAgICAgewogICAgICAgICgqZnVuX3B0cikoYXJnMSwgYXJnMiwgYXJnMywgYXJnNCk7 CiAgICAgIH0KICAgIGNhdGNoIChjb25zdCBzdGQ6OmV4Y2VwdGlvbiAmZXhjKQogICAgICB7CiAg ICAgICAgaGFuZGxlX3N0ZF9leGNlcHRpb24gKGV4Yyk7CiAgICAgIH0KICAgIGNhdGNoICguLi4p CiAgICAgIHsKICAgICAgICBoYW5kbGVfdW5rbm93bl9leGNlcHRpb24gKCk7CiAgICAgIH07CiAg ICBkZXJlZ2lzdGVyX25ld190aHJlYWQgKCk7CgogICAgcmV0dXJuIDA7CiAgfQoKCgogIHRlbXBs YXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFt ZSBBcmc0LCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkRhdGE0PEFyZzEsQXJnMixBcmczLEFyZzQs UmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6QXJnQ29sbGVjdG9yIChGdW5QdHIgZnVuX3B0cikgOgog ICAgICAgICAgICAgICAgICBmdW5fcHRyIChmdW5fcHRyKQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5 cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQs IHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRW5jYXBzdWxhdGlvbgogIEZ1bkRhdGE0PEFyZzEsQXJn MixBcmczLEFyZzQsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6Y29sbGVjdF9hcmdzIChBcmcxIGFy ZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBcmc0IGFyZzQpCiAgewogICAgcmV0dXJuIG5ldyBGdW5EYXRhNDxBcmcxLEFyZzIsQXJn MyxBcmc0LHZvaWQ+KGZ1bl9wdHIsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOwogIH0KCgoKCgoK ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywg dHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRh NTxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsUmV0VHlwZT46OkZ1bkRhdGE1IChGdW5QdHIgZnVu X3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNSBhcmc1KSA6 CiAgICAgICAgICAgICAgICAgIEZ1bkRhdGFCYXNlICgmRnVuRGF0YTU8QXJnMSxBcmcyLEFyZzMs QXJnNCxBcmc1LFJldFR5cGU+Ojp0aHJlYWRfZW50cnlfcG9pbnQpLAogICAgICAgICAgICAgICAg ICBmdW5fcHRyIChmdW5fcHRyKSwKICAgICAgICAgICAgICAgICAgYXJnMSAoYXJnMSksCiAgICAg ICAgICAgICAgICAgIGFyZzIgKGFyZzIpLAogICAgICAgICAgICAgICAgICBhcmczIChhcmczKSwK ICAgICAgICAgICAgICAgICAgYXJnNCAoYXJnNCksCiAgICAgICAgICAgICAgICAgIGFyZzUgKGFy ZzUpCiAge30KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlw ZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgUmV0VHlw ZT4KICBGdW5EYXRhNTxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsUmV0VHlwZT46OkZ1bkRhdGE1 IChjb25zdCBGdW5EYXRhNSAmZnVuX2RhdGEpIDoKICAgICAgICAgICAgICAgICAgRnVuRGF0YUJh c2UgKGZ1bl9kYXRhKSwKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVuX2RhdGEuZnVuX3B0 ciksCiAgICAgICAgICAgICAgICAgIGFyZzEgKGZ1bl9kYXRhLmFyZzEpLAogICAgICAgICAgICAg ICAgICBhcmcyIChmdW5fZGF0YS5hcmcyKSwKICAgICAgICAgICAgICAgICAgYXJnMyAoZnVuX2Rh dGEuYXJnMyksCiAgICAgICAgICAgICAgICAgIGFyZzQgKGZ1bl9kYXRhLmFyZzQpLAogICAgICAg ICAgICAgICAgICBhcmc1IChmdW5fZGF0YS5hcmc1KQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5cGVu YW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5 cGVuYW1lIEFyZzUsIHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRGF0YUJhc2UgKgogIEZ1bkRhdGE1 PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxSZXRUeXBlPjo6Y2xvbmUgKCkgY29uc3QKICB7CiAg ICByZXR1cm4gbmV3IEZ1bkRhdGE1ICgqdGhpcyk7CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBlbmFt ZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBl bmFtZSBBcmc1LCB0eXBlbmFtZSBSZXRUeXBlPgogIHZvaWQgKgogIEZ1bkRhdGE1PEFyZzEsQXJn MixBcmczLEFyZzQsQXJnNSxSZXRUeXBlPjo6dGhyZWFkX2VudHJ5X3BvaW50ICh2b2lkICphcmcp CiAgewoKCgogICAgdHlwZWRlZiBGdW5EYXRhNTxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsUmV0 VHlwZT4gVGhpc0NsYXNzOwoKICAgIEZ1bkVuY2Fwc3VsYXRpb24gKmZ1bl9lbmNhcHN1bGF0aW9u CiAgICAgID0gcmVpbnRlcnByZXRfY2FzdDxGdW5FbmNhcHN1bGF0aW9uKj4oYXJnKTsKICAgIGNv bnN0IFRoaXNDbGFzcyAqZnVuX2RhdGEKICAgICAgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgVGhpc0Ns YXNzKj4gKGZ1bl9lbmNhcHN1bGF0aW9uLT5mdW5fZGF0YV9iYXNlKTsKCgogICAgVGhpc0NsYXNz OjpGdW5QdHIgZnVuX3B0ciA9IGZ1bl9kYXRhLT5mdW5fcHRyOwogICAgQXJnMSBhcmcxID0gZnVu X2RhdGEtPmFyZzE7CiAgICBBcmcyIGFyZzIgPSBmdW5fZGF0YS0+YXJnMjsKICAgIEFyZzMgYXJn MyA9IGZ1bl9kYXRhLT5hcmczOwogICAgQXJnNCBhcmc0ID0gZnVuX2RhdGEtPmFyZzQ7CiAgICBB cmc1IGFyZzUgPSBmdW5fZGF0YS0+YXJnNTsKCgoKCgogICAgZnVuX2RhdGEtPmxvY2sucmVsZWFz ZSAoKTsKIyA1NDAzICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5j bHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICByZWdpc3Rlcl9uZXdfdGhyZWFkICgp OwogICAgdHJ5CiAgICAgIHsKICAgICAgICAoKmZ1bl9wdHIpKGFyZzEsIGFyZzIsIGFyZzMsIGFy ZzQsIGFyZzUpOwogICAgICB9CiAgICBjYXRjaCAoY29uc3Qgc3RkOjpleGNlcHRpb24gJmV4YykK ICAgICAgewogICAgICAgIGhhbmRsZV9zdGRfZXhjZXB0aW9uIChleGMpOwogICAgICB9CiAgICBj YXRjaCAoLi4uKQogICAgICB7CiAgICAgICAgaGFuZGxlX3Vua25vd25fZXhjZXB0aW9uICgpOwog ICAgICB9OwogICAgZGVyZWdpc3Rlcl9uZXdfdGhyZWFkICgpOwoKICAgIHJldHVybiAwOwogIH0K CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJn MywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5E YXRhNTxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6QXJn Q29sbGVjdG9yIChGdW5QdHIgZnVuX3B0cikgOgogICAgICAgICAgICAgICAgICBmdW5fcHRyIChm dW5fcHRyKQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIs IHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIFJl dFR5cGU+CiAgRnVuRW5jYXBzdWxhdGlvbgogIEZ1bkRhdGE1PEFyZzEsQXJnMixBcmczLEFyZzQs QXJnNSxSZXRUeXBlPjo6QXJnQ29sbGVjdG9yOjpjb2xsZWN0X2FyZ3MgKEFyZzEgYXJnMSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc1IGFyZzUpCiAgewog ICAgcmV0dXJuIG5ldyBGdW5EYXRhNTxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsdm9pZD4oZnVu X3B0ciwgYXJnMSwgYXJnMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGFyZzMsIGFyZzQsIGFyZzUpOwogIH0KCgoKCgoKICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJn NCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5E YXRhNjxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixSZXRUeXBlPjo6RnVuRGF0YTYgKEZ1 blB0ciBmdW5fcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmcz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQXJnNCBhcmc0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2KSA6CiAgICAgICAg ICAgICAgICAgIEZ1bkRhdGFCYXNlICgmRnVuRGF0YTY8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1 LEFyZzYsUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCksCiAgICAgICAgICAgICAgICAgIGZ1 bl9wdHIgKGZ1bl9wdHIpLAogICAgICAgICAgICAgICAgICBhcmcxIChhcmcxKSwKICAgICAgICAg ICAgICAgICAgYXJnMiAoYXJnMiksCiAgICAgICAgICAgICAgICAgIGFyZzMgKGFyZzMpLAogICAg ICAgICAgICAgICAgICBhcmc0IChhcmc0KSwKICAgICAgICAgICAgICAgICAgYXJnNSAoYXJnNSks CiAgICAgICAgICAgICAgICAgIGFyZzYgKGFyZzYpCiAge30KCgoKICB0ZW1wbGF0ZSA8dHlwZW5h bWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlw ZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRhNjxB cmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixSZXRUeXBlPjo6RnVuRGF0YTYgKGNvbnN0IEZ1 bkRhdGE2ICZmdW5fZGF0YSkgOgogICAgICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoZnVuX2Rh dGEpLAogICAgICAgICAgICAgICAgICBmdW5fcHRyIChmdW5fZGF0YS5mdW5fcHRyKSwKICAgICAg ICAgICAgICAgICAgYXJnMSAoZnVuX2RhdGEuYXJnMSksCiAgICAgICAgICAgICAgICAgIGFyZzIg KGZ1bl9kYXRhLmFyZzIpLAogICAgICAgICAgICAgICAgICBhcmczIChmdW5fZGF0YS5hcmczKSwK ICAgICAgICAgICAgICAgICAgYXJnNCAoZnVuX2RhdGEuYXJnNCksCiAgICAgICAgICAgICAgICAg IGFyZzUgKGZ1bl9kYXRhLmFyZzUpLAogICAgICAgICAgICAgICAgICBhcmc2IChmdW5fZGF0YS5h cmc2KQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5 cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYs IHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRGF0YUJhc2UgKgogIEZ1bkRhdGE2PEFyZzEsQXJnMixB cmczLEFyZzQsQXJnNSxBcmc2LFJldFR5cGU+OjpjbG9uZSAoKSBjb25zdAogIHsKICAgIHJldHVy biBuZXcgRnVuRGF0YTYgKCp0aGlzKTsKICB9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEs IHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFy ZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIFJldFR5cGU+CiAgdm9pZCAqCiAgRnVuRGF0YTY8 QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2lu dCAodm9pZCAqYXJnKQogIHsKCgoKICAgIHR5cGVkZWYgRnVuRGF0YTY8QXJnMSxBcmcyLEFyZzMs QXJnNCxBcmc1LEFyZzYsUmV0VHlwZT4gVGhpc0NsYXNzOwoKICAgIEZ1bkVuY2Fwc3VsYXRpb24g KmZ1bl9lbmNhcHN1bGF0aW9uCiAgICAgID0gcmVpbnRlcnByZXRfY2FzdDxGdW5FbmNhcHN1bGF0 aW9uKj4oYXJnKTsKICAgIGNvbnN0IFRoaXNDbGFzcyAqZnVuX2RhdGEKICAgICAgPSBkeW5hbWlj X2Nhc3Q8Y29uc3QgVGhpc0NsYXNzKj4gKGZ1bl9lbmNhcHN1bGF0aW9uLT5mdW5fZGF0YV9iYXNl KTsKCgogICAgVGhpc0NsYXNzOjpGdW5QdHIgZnVuX3B0ciA9IGZ1bl9kYXRhLT5mdW5fcHRyOwog ICAgQXJnMSBhcmcxID0gZnVuX2RhdGEtPmFyZzE7CiAgICBBcmcyIGFyZzIgPSBmdW5fZGF0YS0+ YXJnMjsKICAgIEFyZzMgYXJnMyA9IGZ1bl9kYXRhLT5hcmczOwogICAgQXJnNCBhcmc0ID0gZnVu X2RhdGEtPmFyZzQ7CiAgICBBcmc1IGFyZzUgPSBmdW5fZGF0YS0+YXJnNTsKICAgIEFyZzYgYXJn NiA9IGZ1bl9kYXRhLT5hcmc2OwoKCgoKCiAgICBmdW5fZGF0YS0+bG9jay5yZWxlYXNlICgpOwoj IDU1MzAgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jh c2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgIHJlZ2lzdGVyX25ld190aHJlYWQgKCk7CiAgICB0 cnkKICAgICAgewogICAgICAgICgqZnVuX3B0cikoYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJn NSwgYXJnNik7CiAgICAgIH0KICAgIGNhdGNoIChjb25zdCBzdGQ6OmV4Y2VwdGlvbiAmZXhjKQog ICAgICB7CiAgICAgICAgaGFuZGxlX3N0ZF9leGNlcHRpb24gKGV4Yyk7CiAgICAgIH0KICAgIGNh dGNoICguLi4pCiAgICAgIHsKICAgICAgICBoYW5kbGVfdW5rbm93bl9leGNlcHRpb24gKCk7CiAg ICAgIH07CiAgICBkZXJlZ2lzdGVyX25ld190aHJlYWQgKCk7CgogICAgcmV0dXJuIDA7CiAgfQoK CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmcz LCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBS ZXRUeXBlPgogIEZ1bkRhdGE2PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LFJldFR5cGU+ OjpBcmdDb2xsZWN0b3I6OkFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpIDoKICAgICAgICAg ICAgICAgICAgZnVuX3B0ciAoZnVuX3B0cikKICB7fQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBB cmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFt ZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkVuY2Fwc3VsYXRp b24KICBGdW5EYXRhNjxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixSZXRUeXBlPjo6QXJn Q29sbGVjdG9yOjpjb2xsZWN0X2FyZ3MgKEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzUgYXJnNSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEFyZzYgYXJnNikKICB7CiAgICByZXR1cm4gbmV3IEZ1bkRhdGE2 PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LHZvaWQ+KGZ1bl9wdHIsIGFyZzEsIGFyZzIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYpOwogIH0KCgoKCgoKCiAgdGVtcGxhdGUgPHR5cGVu YW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5 cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIFJldFR5 cGU+CiAgRnVuRGF0YTc8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxSZXRUeXBl Pjo6RnVuRGF0YTcgKEZ1blB0ciBmdW5fcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEFyZzUgYXJnNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc3IGFyZzcpIDoK ICAgICAgICAgICAgICAgICAgRnVuRGF0YUJhc2UgKCZGdW5EYXRhNzxBcmcxLEFyZzIsQXJnMyxB cmc0LEFyZzUsQXJnNixBcmc3LFJldFR5cGU+Ojp0aHJlYWRfZW50cnlfcG9pbnQpLAogICAgICAg ICAgICAgICAgICBmdW5fcHRyIChmdW5fcHRyKSwKICAgICAgICAgICAgICAgICAgYXJnMSAoYXJn MSksCiAgICAgICAgICAgICAgICAgIGFyZzIgKGFyZzIpLAogICAgICAgICAgICAgICAgICBhcmcz IChhcmczKSwKICAgICAgICAgICAgICAgICAgYXJnNCAoYXJnNCksCiAgICAgICAgICAgICAgICAg IGFyZzUgKGFyZzUpLAogICAgICAgICAgICAgICAgICBhcmc2IChhcmc2KSwKICAgICAgICAgICAg ICAgICAgYXJnNyAoYXJnNykKICB7fQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBl bmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0 eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkRhdGE3 PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsUmV0VHlwZT46OkZ1bkRhdGE3IChj b25zdCBGdW5EYXRhNyAmZnVuX2RhdGEpIDoKICAgICAgICAgICAgICAgICAgRnVuRGF0YUJhc2Ug KGZ1bl9kYXRhKSwKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVuX2RhdGEuZnVuX3B0ciks CiAgICAgICAgICAgICAgICAgIGFyZzEgKGZ1bl9kYXRhLmFyZzEpLAogICAgICAgICAgICAgICAg ICBhcmcyIChmdW5fZGF0YS5hcmcyKSwKICAgICAgICAgICAgICAgICAgYXJnMyAoZnVuX2RhdGEu YXJnMyksCiAgICAgICAgICAgICAgICAgIGFyZzQgKGZ1bl9kYXRhLmFyZzQpLAogICAgICAgICAg ICAgICAgICBhcmc1IChmdW5fZGF0YS5hcmc1KSwKICAgICAgICAgICAgICAgICAgYXJnNiAoZnVu X2RhdGEuYXJnNiksCiAgICAgICAgICAgICAgICAgIGFyZzcgKGZ1bl9kYXRhLmFyZzcpCiAge30K CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJn MywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUg QXJnNywgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRhQmFzZSAqCiAgRnVuRGF0YTc8QXJnMSxB cmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxSZXRUeXBlPjo6Y2xvbmUgKCkgY29uc3QKICB7 CiAgICByZXR1cm4gbmV3IEZ1bkRhdGE3ICgqdGhpcyk7CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBl bmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0 eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBSZXRU eXBlPgogIHZvaWQgKgogIEZ1bkRhdGE3PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFy ZzcsUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCAodm9pZCAqYXJnKQogIHsKCgoKICAgIHR5 cGVkZWYgRnVuRGF0YTc8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxSZXRUeXBl PiBUaGlzQ2xhc3M7CgogICAgRnVuRW5jYXBzdWxhdGlvbiAqZnVuX2VuY2Fwc3VsYXRpb24KICAg ICAgPSByZWludGVycHJldF9jYXN0PEZ1bkVuY2Fwc3VsYXRpb24qPihhcmcpOwogICAgY29uc3Qg VGhpc0NsYXNzICpmdW5fZGF0YQogICAgICA9IGR5bmFtaWNfY2FzdDxjb25zdCBUaGlzQ2xhc3Mq PiAoZnVuX2VuY2Fwc3VsYXRpb24tPmZ1bl9kYXRhX2Jhc2UpOwoKCiAgICBUaGlzQ2xhc3M6OkZ1 blB0ciBmdW5fcHRyID0gZnVuX2RhdGEtPmZ1bl9wdHI7CiAgICBBcmcxIGFyZzEgPSBmdW5fZGF0 YS0+YXJnMTsKICAgIEFyZzIgYXJnMiA9IGZ1bl9kYXRhLT5hcmcyOwogICAgQXJnMyBhcmczID0g ZnVuX2RhdGEtPmFyZzM7CiAgICBBcmc0IGFyZzQgPSBmdW5fZGF0YS0+YXJnNDsKICAgIEFyZzUg YXJnNSA9IGZ1bl9kYXRhLT5hcmc1OwogICAgQXJnNiBhcmc2ID0gZnVuX2RhdGEtPmFyZzY7CiAg ICBBcmc3IGFyZzcgPSBmdW5fZGF0YS0+YXJnNzsKCgoKCgogICAgZnVuX2RhdGEtPmxvY2sucmVs ZWFzZSAoKTsKIyA1NjYzICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2Uv aW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICByZWdpc3Rlcl9uZXdfdGhyZWFk ICgpOwogICAgdHJ5CiAgICAgIHsKICAgICAgICAoKmZ1bl9wdHIpKGFyZzEsIGFyZzIsIGFyZzMs IGFyZzQsIGFyZzUsIGFyZzYsIGFyZzcpOwogICAgICB9CiAgICBjYXRjaCAoY29uc3Qgc3RkOjpl eGNlcHRpb24gJmV4YykKICAgICAgewogICAgICAgIGhhbmRsZV9zdGRfZXhjZXB0aW9uIChleGMp OwogICAgICB9CiAgICBjYXRjaCAoLi4uKQogICAgICB7CiAgICAgICAgaGFuZGxlX3Vua25vd25f ZXhjZXB0aW9uICgpOwogICAgICB9OwogICAgZGVyZWdpc3Rlcl9uZXdfdGhyZWFkICgpOwoKICAg IHJldHVybiAwOwogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJn MiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUg QXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRhNzxBcmcxLEFy ZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LFJldFR5cGU+OjpBcmdDb2xsZWN0b3I6OkFyZ0Nv bGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpIDoKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVu X3B0cikKICB7fQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0 eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2 LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkVuY2Fwc3VsYXRpb24KICBG dW5EYXRhNzxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LFJldFR5cGU+OjpBcmdD b2xsZWN0b3I6OmNvbGxlY3RfYXJncyAoQXJnMSBhcmcxLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQXJnNCBhcmc0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBcmc1IGFyZzUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzYgYXJnNiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQXJnNyBhcmc3KQogIHsKICAgIHJldHVybiBuZXcgRnVu RGF0YTc8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyx2b2lkPihmdW5fcHRyLCBh cmcxLCBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsIGFyZzcpOwogIH0KCgoK CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFy ZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1l IEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRGF0YTg8QXJnMSxB cmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LFJldFR5cGU+OjoKICBGdW5EYXRhOCAo RnVuUHRyIGZ1bl9wdHIsCiAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgQXJnMiBh cmcyLAogICAgICAgICAgICBBcmczIGFyZzMsCiAgICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAg ICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICBBcmc2IGFyZzYsCiAgICAgICAgICAgIEFyZzcg YXJnNywKICAgICAgICAgICAgQXJnOCBhcmc4KSA6CiAgICAgICAgICAgICAgICAgIEZ1bkRhdGFC YXNlICgmRnVuRGF0YTg8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LFJl dFR5cGU+Ojp0aHJlYWRfZW50cnlfcG9pbnQpLAogICAgICAgICAgICAgICAgICBmdW5fcHRyIChm dW5fcHRyKSwKICAgICAgICAgICAgICAgICAgYXJnMSAoYXJnMSksCiAgICAgICAgICAgICAgICAg IGFyZzIgKGFyZzIpLAogICAgICAgICAgICAgICAgICBhcmczIChhcmczKSwKICAgICAgICAgICAg ICAgICAgYXJnNCAoYXJnNCksCiAgICAgICAgICAgICAgICAgIGFyZzUgKGFyZzUpLAogICAgICAg ICAgICAgICAgICBhcmc2IChhcmc2KSwKICAgICAgICAgICAgICAgICAgYXJnNyAoYXJnNyksCiAg ICAgICAgICAgICAgICAgIGFyZzggKGFyZzgpCiAge30KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUg QXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5h bWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwgdHlw ZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRhODxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixB cmc3LEFyZzgsUmV0VHlwZT46OgogIEZ1bkRhdGE4IChjb25zdCBGdW5EYXRhOCAmZnVuX2RhdGEp IDoKICAgICAgICAgICAgICAgICAgRnVuRGF0YUJhc2UgKGZ1bl9kYXRhKSwKICAgICAgICAgICAg ICAgICAgZnVuX3B0ciAoZnVuX2RhdGEuZnVuX3B0ciksCiAgICAgICAgICAgICAgICAgIGFyZzEg KGZ1bl9kYXRhLmFyZzEpLAogICAgICAgICAgICAgICAgICBhcmcyIChmdW5fZGF0YS5hcmcyKSwK ICAgICAgICAgICAgICAgICAgYXJnMyAoZnVuX2RhdGEuYXJnMyksCiAgICAgICAgICAgICAgICAg IGFyZzQgKGZ1bl9kYXRhLmFyZzQpLAogICAgICAgICAgICAgICAgICBhcmc1IChmdW5fZGF0YS5h cmc1KSwKICAgICAgICAgICAgICAgICAgYXJnNiAoZnVuX2RhdGEuYXJnNiksCiAgICAgICAgICAg ICAgICAgIGFyZzcgKGZ1bl9kYXRhLmFyZzcpLAogICAgICAgICAgICAgICAgICBhcmc4IChmdW5f ZGF0YS5hcmc4KQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFy ZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1l IEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIFJldFR5cGU+CiAg RnVuRGF0YUJhc2UgKgogIEZ1bkRhdGE4PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFy ZzcsQXJnOCxSZXRUeXBlPjo6Y2xvbmUgKCkgY29uc3QKICB7CiAgICByZXR1cm4gbmV3IEZ1bkRh dGE4ICgqdGhpcyk7CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBB cmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFt ZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4LCB0eXBlbmFtZSBSZXRUeXBlPgog IHZvaWQgKgogIEZ1bkRhdGE4PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJn OCxSZXRUeXBlPjo6dGhyZWFkX2VudHJ5X3BvaW50ICh2b2lkICphcmcpCiAgewoKCgogICAgdHlw ZWRlZiBGdW5EYXRhODxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsUmV0 VHlwZT4gVGhpc0NsYXNzOwoKICAgIEZ1bkVuY2Fwc3VsYXRpb24gKmZ1bl9lbmNhcHN1bGF0aW9u CiAgICAgID0gcmVpbnRlcnByZXRfY2FzdDxGdW5FbmNhcHN1bGF0aW9uKj4oYXJnKTsKICAgIGNv bnN0IFRoaXNDbGFzcyAqZnVuX2RhdGEKICAgICAgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgVGhpc0Ns YXNzKj4gKGZ1bl9lbmNhcHN1bGF0aW9uLT5mdW5fZGF0YV9iYXNlKTsKCgogICAgVGhpc0NsYXNz OjpGdW5QdHIgZnVuX3B0ciA9IGZ1bl9kYXRhLT5mdW5fcHRyOwogICAgQXJnMSBhcmcxID0gZnVu X2RhdGEtPmFyZzE7CiAgICBBcmcyIGFyZzIgPSBmdW5fZGF0YS0+YXJnMjsKICAgIEFyZzMgYXJn MyA9IGZ1bl9kYXRhLT5hcmczOwogICAgQXJnNCBhcmc0ID0gZnVuX2RhdGEtPmFyZzQ7CiAgICBB cmc1IGFyZzUgPSBmdW5fZGF0YS0+YXJnNTsKICAgIEFyZzYgYXJnNiA9IGZ1bl9kYXRhLT5hcmc2 OwogICAgQXJnNyBhcmc3ID0gZnVuX2RhdGEtPmFyZzc7CiAgICBBcmc4IGFyZzggPSBmdW5fZGF0 YS0+YXJnODsKCgoKCgogICAgZnVuX2RhdGEtPmxvY2sucmVsZWFzZSAoKTsKIyA1ODAzICIvaG9t ZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9t YW5hZ2VtZW50LmgiCiAgICByZWdpc3Rlcl9uZXdfdGhyZWFkICgpOwogICAgdHJ5CiAgICAgIHsK ICAgICAgICAoKmZ1bl9wdHIpKGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsIGFy ZzcsIGFyZzgpOwogICAgICB9CiAgICBjYXRjaCAoY29uc3Qgc3RkOjpleGNlcHRpb24gJmV4YykK ICAgICAgewogICAgICAgIGhhbmRsZV9zdGRfZXhjZXB0aW9uIChleGMpOwogICAgICB9CiAgICBj YXRjaCAoLi4uKQogICAgICB7CiAgICAgICAgaGFuZGxlX3Vua25vd25fZXhjZXB0aW9uICgpOwog ICAgICB9OwogICAgZGVyZWdpc3Rlcl9uZXdfdGhyZWFkICgpOwoKICAgIHJldHVybiAwOwogIH0K CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJn MywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUg QXJnNywgdHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRhODxBcmcxLEFy ZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6 QXJnQ29sbGVjdG9yIChGdW5QdHIgZnVuX3B0cikgOgogICAgICAgICAgICAgICAgICBmdW5fcHRy IChmdW5fcHRyKQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFy ZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1l IEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIFJldFR5cGU+CiAg RnVuRW5jYXBzdWxhdGlvbgogIEZ1bkRhdGE4PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2 LEFyZzcsQXJnOCxSZXRUeXBlPjo6QXJnQ29sbGVjdG9yOjpjb2xsZWN0X2FyZ3MgKEFyZzEgYXJn MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc1IGFy ZzUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEFyZzcgYXJnNywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBcmc4IGFyZzgpCiAgewogICAgcmV0dXJuIG5ldyBGdW5EYXRhODxBcmcxLEFyZzIs QXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsdm9pZD4oZnVuX3B0ciwgYXJnMSwgYXJnMiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmc3LCBh cmc4KTsKICB9CgoKCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwg dHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJn NiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgQXJnOSwgdHlwZW5hbWUg UmV0VHlwZT4KICBGdW5EYXRhOTxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFy ZzgsQXJnOSxSZXRUeXBlPjo6CiAgRnVuRGF0YTkgKEZ1blB0ciBmdW5fcHRyLAogICAgICAgICAg ICBBcmcxIGFyZzEsCiAgICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAgQXJnMyBhcmcz LAogICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgIEFyZzUgYXJnNSwKICAgICAgICAg ICAgQXJnNiBhcmc2LAogICAgICAgICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgIEFyZzggYXJn OCwKICAgICAgICAgICAgQXJnOSBhcmc5KSA6CiAgICAgICAgICAgICAgICAgIEZ1bkRhdGFCYXNl ICgmRnVuRGF0YTk8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LEFyZzks UmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCksCiAgICAgICAgICAgICAgICAgIGZ1bl9wdHIg KGZ1bl9wdHIpLAogICAgICAgICAgICAgICAgICBhcmcxIChhcmcxKSwKICAgICAgICAgICAgICAg ICAgYXJnMiAoYXJnMiksCiAgICAgICAgICAgICAgICAgIGFyZzMgKGFyZzMpLAogICAgICAgICAg ICAgICAgICBhcmc0IChhcmc0KSwKICAgICAgICAgICAgICAgICAgYXJnNSAoYXJnNSksCiAgICAg ICAgICAgICAgICAgIGFyZzYgKGFyZzYpLAogICAgICAgICAgICAgICAgICBhcmc3IChhcmc3KSwK ICAgICAgICAgICAgICAgICAgYXJnOCAoYXJnOCksCiAgICAgICAgICAgICAgICAgIGFyZzkgKGFy ZzkpCiAge30KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlw ZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwg dHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgQXJnOSwgdHlwZW5hbWUgUmV0 VHlwZT4KICBGdW5EYXRhOTxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgs QXJnOSxSZXRUeXBlPjo6CiAgRnVuRGF0YTkgKGNvbnN0IEZ1bkRhdGE5ICZmdW5fZGF0YSkgOgog ICAgICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoZnVuX2RhdGEpLAogICAgICAgICAgICAgICAg ICBmdW5fcHRyIChmdW5fZGF0YS5mdW5fcHRyKSwKICAgICAgICAgICAgICAgICAgYXJnMSAoZnVu X2RhdGEuYXJnMSksCiAgICAgICAgICAgICAgICAgIGFyZzIgKGZ1bl9kYXRhLmFyZzIpLAogICAg ICAgICAgICAgICAgICBhcmczIChmdW5fZGF0YS5hcmczKSwKICAgICAgICAgICAgICAgICAgYXJn NCAoZnVuX2RhdGEuYXJnNCksCiAgICAgICAgICAgICAgICAgIGFyZzUgKGZ1bl9kYXRhLmFyZzUp LAogICAgICAgICAgICAgICAgICBhcmc2IChmdW5fZGF0YS5hcmc2KSwKICAgICAgICAgICAgICAg ICAgYXJnNyAoZnVuX2RhdGEuYXJnNyksCiAgICAgICAgICAgICAgICAgIGFyZzggKGZ1bl9kYXRh LmFyZzgpLAogICAgICAgICAgICAgICAgICBhcmc5IChmdW5fZGF0YS5hcmc5KQogIHt9CgoKCiAg dGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5 cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcs IHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIEFyZzksIHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRGF0 YUJhc2UgKgogIEZ1bkRhdGE5PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJn OCxBcmc5LFJldFR5cGU+OjpjbG9uZSAoKSBjb25zdAogIHsKICAgIHJldHVybiBuZXcgRnVuRGF0 YTkgKCp0aGlzKTsKICB9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFy ZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1l IEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIEFyZzksIHR5cGVu YW1lIFJldFR5cGU+CiAgdm9pZCAqCiAgRnVuRGF0YTk8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1 LEFyZzYsQXJnNyxBcmc4LEFyZzksUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCAodm9pZCAq YXJnKQogIHsKCgoKICAgIHR5cGVkZWYgRnVuRGF0YTk8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1 LEFyZzYsQXJnNyxBcmc4LEFyZzksUmV0VHlwZT4gVGhpc0NsYXNzOwoKICAgIEZ1bkVuY2Fwc3Vs YXRpb24gKmZ1bl9lbmNhcHN1bGF0aW9uCiAgICAgID0gcmVpbnRlcnByZXRfY2FzdDxGdW5FbmNh cHN1bGF0aW9uKj4oYXJnKTsKICAgIGNvbnN0IFRoaXNDbGFzcyAqZnVuX2RhdGEKICAgICAgPSBk eW5hbWljX2Nhc3Q8Y29uc3QgVGhpc0NsYXNzKj4gKGZ1bl9lbmNhcHN1bGF0aW9uLT5mdW5fZGF0 YV9iYXNlKTsKCgogICAgVGhpc0NsYXNzOjpGdW5QdHIgZnVuX3B0ciA9IGZ1bl9kYXRhLT5mdW5f cHRyOwogICAgQXJnMSBhcmcxID0gZnVuX2RhdGEtPmFyZzE7CiAgICBBcmcyIGFyZzIgPSBmdW5f ZGF0YS0+YXJnMjsKICAgIEFyZzMgYXJnMyA9IGZ1bl9kYXRhLT5hcmczOwogICAgQXJnNCBhcmc0 ID0gZnVuX2RhdGEtPmFyZzQ7CiAgICBBcmc1IGFyZzUgPSBmdW5fZGF0YS0+YXJnNTsKICAgIEFy ZzYgYXJnNiA9IGZ1bl9kYXRhLT5hcmc2OwogICAgQXJnNyBhcmc3ID0gZnVuX2RhdGEtPmFyZzc7 CiAgICBBcmc4IGFyZzggPSBmdW5fZGF0YS0+YXJnODsKICAgIEFyZzkgYXJnOSA9IGZ1bl9kYXRh LT5hcmc5OwoKCgoKCiAgICBmdW5fZGF0YS0+bG9jay5yZWxlYXNlICgpOwojIDU5NDcgIi9ob21l L2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21h bmFnZW1lbnQuaCIKICAgIHJlZ2lzdGVyX25ld190aHJlYWQgKCk7CiAgICB0cnkKICAgICAgewog ICAgICAgICgqZnVuX3B0cikoYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJn NywgYXJnOCwgYXJnOSk7CiAgICAgIH0KICAgIGNhdGNoIChjb25zdCBzdGQ6OmV4Y2VwdGlvbiAm ZXhjKQogICAgICB7CiAgICAgICAgaGFuZGxlX3N0ZF9leGNlcHRpb24gKGV4Yyk7CiAgICAgIH0K ICAgIGNhdGNoICguLi4pCiAgICAgIHsKICAgICAgICBoYW5kbGVfdW5rbm93bl9leGNlcHRpb24g KCk7CiAgICAgIH07CiAgICBkZXJlZ2lzdGVyX25ld190aHJlYWQgKCk7CgogICAgcmV0dXJuIDA7 CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFt ZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBl bmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4LCB0eXBlbmFtZSBBcmc5LCB0eXBlbmFtZSBSZXRUeXBl PgogIEZ1bkRhdGE5PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxBcmc5 LFJldFR5cGU+OjpBcmdDb2xsZWN0b3I6OkFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpIDoK ICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVuX3B0cikKICB7fQoKCgogIHRlbXBsYXRlIDx0 eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0 LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBB cmc4LCB0eXBlbmFtZSBBcmc5LCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkVuY2Fwc3VsYXRpb24K ICBGdW5EYXRhOTxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsQXJnOSxS ZXRUeXBlPjo6QXJnQ29sbGVjdG9yOjoKICBjb2xsZWN0X2FyZ3MgKEFyZzEgYXJnMSwKICAgICAg ICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAg ICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAgIEFyZzUgYXJnNSwKICAgICAgICAgICAg ICAgIEFyZzYgYXJnNiwKICAgICAgICAgICAgICAgIEFyZzcgYXJnNywKICAgICAgICAgICAgICAg IEFyZzggYXJnOCwKICAgICAgICAgICAgICAgIEFyZzkgYXJnOSkKICB7CiAgICByZXR1cm4KICAg ICAgbmV3IEZ1bkRhdGE5PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxB cmc5LHZvaWQ+CiAgICAgIChmdW5fcHRyLCBhcmcxLCBhcmcyLAogICAgICAgYXJnMywgYXJnNCwg YXJnNSwgYXJnNiwKICAgICAgIGFyZzcsIGFyZzgsIGFyZzkpOwogIH0KCgoKCgogIHRlbXBsYXRl IDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBB cmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFt ZSBBcmc4LCB0eXBlbmFtZSBBcmc5LCB0eXBlbmFtZSBBcmcxMCwgdHlwZW5hbWUgUmV0VHlwZT4K ICBGdW5EYXRhMTA8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LEFyZzks QXJnMTAsUmV0VHlwZT46OgogIEZ1bkRhdGExMCAoRnVuUHRyIGZ1bl9wdHIsCiAgICAgICAgICAg ICBBcmcxIGFyZzEsCiAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAgICBBcmczIGFy ZzMsCiAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICBBcmc1IGFyZzUsCiAgICAg ICAgICAgICBBcmc2IGFyZzYsCiAgICAgICAgICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICBB cmc4IGFyZzgsCiAgICAgICAgICAgICBBcmc5IGFyZzksCiAgICAgICAgICAgICBBcmcxMCBhcmcx MCkgOgogICAgICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoJkZ1bkRhdGExMDxBcmcxLEFyZzIs QXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsQXJnOSxBcmcxMCxSZXRUeXBlPjo6dGhyZWFk X2VudHJ5X3BvaW50KSwKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVuX3B0ciksCiAgICAg ICAgICAgICAgICAgIGFyZzEgKGFyZzEpLAogICAgICAgICAgICAgICAgICBhcmcyIChhcmcyKSwK ICAgICAgICAgICAgICAgICAgYXJnMyAoYXJnMyksCiAgICAgICAgICAgICAgICAgIGFyZzQgKGFy ZzQpLAogICAgICAgICAgICAgICAgICBhcmc1IChhcmc1KSwKICAgICAgICAgICAgICAgICAgYXJn NiAoYXJnNiksCiAgICAgICAgICAgICAgICAgIGFyZzcgKGFyZzcpLAogICAgICAgICAgICAgICAg ICBhcmc4IChhcmc4KSwKICAgICAgICAgICAgICAgICAgYXJnOSAoYXJnOSksCiAgICAgICAgICAg ICAgICAgIGFyZzEwIChhcmcxMCkKICB7fQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0 eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1 LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4LCB0eXBlbmFtZSBB cmc5LCB0eXBlbmFtZSBBcmcxMCwgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRhMTA8QXJnMSxB cmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LEFyZzksQXJnMTAsUmV0VHlwZT46Ogog IEZ1bkRhdGExMCAoY29uc3QgRnVuRGF0YTEwICZmdW5fZGF0YSkgOgogICAgICAgICAgICAgICAg ICBGdW5EYXRhQmFzZSAoZnVuX2RhdGEpLAogICAgICAgICAgICAgICAgICBmdW5fcHRyIChmdW5f ZGF0YS5mdW5fcHRyKSwKICAgICAgICAgICAgICAgICAgYXJnMSAoZnVuX2RhdGEuYXJnMSksCiAg ICAgICAgICAgICAgICAgIGFyZzIgKGZ1bl9kYXRhLmFyZzIpLAogICAgICAgICAgICAgICAgICBh cmczIChmdW5fZGF0YS5hcmczKSwKICAgICAgICAgICAgICAgICAgYXJnNCAoZnVuX2RhdGEuYXJn NCksCiAgICAgICAgICAgICAgICAgIGFyZzUgKGZ1bl9kYXRhLmFyZzUpLAogICAgICAgICAgICAg ICAgICBhcmc2IChmdW5fZGF0YS5hcmc2KSwKICAgICAgICAgICAgICAgICAgYXJnNyAoZnVuX2Rh dGEuYXJnNyksCiAgICAgICAgICAgICAgICAgIGFyZzggKGZ1bl9kYXRhLmFyZzgpLAogICAgICAg ICAgICAgICAgICBhcmc5IChmdW5fZGF0YS5hcmc5KSwKICAgICAgICAgICAgICAgICAgYXJnMTAg KGZ1bl9kYXRhLmFyZzEwKQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVu YW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5 cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIEFyZzks IHR5cGVuYW1lIEFyZzEwLCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkRhdGFCYXNlICoKICBGdW5E YXRhMTA8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LEFyZzksQXJnMTAs UmV0VHlwZT46OmNsb25lICgpIGNvbnN0CiAgewogICAgcmV0dXJuIG5ldyBGdW5EYXRhMTAgKCp0 aGlzKTsKICB9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5 cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYs IHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIEFyZzksIHR5cGVuYW1lIEFy ZzEwLCB0eXBlbmFtZSBSZXRUeXBlPgogIHZvaWQgKgogIEZ1bkRhdGExMDxBcmcxLEFyZzIsQXJn MyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsQXJnOSxBcmcxMCxSZXRUeXBlPjo6dGhyZWFkX2Vu dHJ5X3BvaW50ICh2b2lkICphcmcpCiAgewoKCgogICAgdHlwZWRlZiBGdW5EYXRhMTA8QXJnMSxB cmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LEFyZzksQXJnMTAsUmV0VHlwZT4gVGhp c0NsYXNzOwoKICAgIEZ1bkVuY2Fwc3VsYXRpb24gKmZ1bl9lbmNhcHN1bGF0aW9uCiAgICAgID0g cmVpbnRlcnByZXRfY2FzdDxGdW5FbmNhcHN1bGF0aW9uKj4oYXJnKTsKICAgIGNvbnN0IFRoaXND bGFzcyAqZnVuX2RhdGEKICAgICAgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgVGhpc0NsYXNzKj4gKGZ1 bl9lbmNhcHN1bGF0aW9uLT5mdW5fZGF0YV9iYXNlKTsKCgogICAgVGhpc0NsYXNzOjpGdW5QdHIg ZnVuX3B0ciA9IGZ1bl9kYXRhLT5mdW5fcHRyOwogICAgQXJnMSBhcmcxID0gZnVuX2RhdGEtPmFy ZzE7CiAgICBBcmcyIGFyZzIgPSBmdW5fZGF0YS0+YXJnMjsKICAgIEFyZzMgYXJnMyA9IGZ1bl9k YXRhLT5hcmczOwogICAgQXJnNCBhcmc0ID0gZnVuX2RhdGEtPmFyZzQ7CiAgICBBcmc1IGFyZzUg PSBmdW5fZGF0YS0+YXJnNTsKICAgIEFyZzYgYXJnNiA9IGZ1bl9kYXRhLT5hcmc2OwogICAgQXJn NyBhcmc3ID0gZnVuX2RhdGEtPmFyZzc7CiAgICBBcmc4IGFyZzggPSBmdW5fZGF0YS0+YXJnODsK ICAgIEFyZzkgYXJnOSA9IGZ1bl9kYXRhLT5hcmc5OwogICAgQXJnMTAgYXJnMTAgPSBmdW5fZGF0 YS0+YXJnMTA7CgoKCgoKICAgIGZ1bl9kYXRhLT5sb2NrLnJlbGVhc2UgKCk7CiMgNjA5OSAiL2hv bWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRf bWFuYWdlbWVudC5oIgogICAgcmVnaXN0ZXJfbmV3X3RocmVhZCAoKTsKICAgIHRyeQogICAgICB7 CiAgICAgICAgKCpmdW5fcHRyKShhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBh cmc3LCBhcmc4LCBhcmc5LCBhcmcxMCk7CiAgICAgIH0KICAgIGNhdGNoIChjb25zdCBzdGQ6OmV4 Y2VwdGlvbiAmZXhjKQogICAgICB7CiAgICAgICAgaGFuZGxlX3N0ZF9leGNlcHRpb24gKGV4Yyk7 CiAgICAgIH0KICAgIGNhdGNoICguLi4pCiAgICAgIHsKICAgICAgICBoYW5kbGVfdW5rbm93bl9l eGNlcHRpb24gKCk7CiAgICAgIH07CiAgICBkZXJlZ2lzdGVyX25ld190aHJlYWQgKCk7CgogICAg cmV0dXJuIDA7CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcy LCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBB cmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4LCB0eXBlbmFtZSBBcmc5LCB0eXBlbmFt ZSBBcmcxMCwgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRhMTA8QXJnMSxBcmcyLEFyZzMsQXJn NCxBcmc1LEFyZzYsQXJnNyxBcmc4LEFyZzksQXJnMTAsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6 QXJnQ29sbGVjdG9yIChGdW5QdHIgZnVuX3B0cikgOgogICAgICAgICAgICAgICAgICBmdW5fcHRy IChmdW5fcHRyKQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFy ZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1l IEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIEFyZzksIHR5cGVu YW1lIEFyZzEwLCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkVuY2Fwc3VsYXRpb24KICBGdW5EYXRh MTA8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LEFyZzksQXJnMTAsUmV0 VHlwZT46OkFyZ0NvbGxlY3Rvcjo6CiAgY29sbGVjdF9hcmdzIChBcmcxIGFyZzEsCiAgICAgICAg ICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAgICAgICBBcmczIGFyZzMsCiAgICAgICAgICAg ICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICBBcmc1IGFyZzUsCiAgICAgICAgICAgICAg ICBBcmc2IGFyZzYsCiAgICAgICAgICAgICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICAgICBB cmc4IGFyZzgsCiAgICAgICAgICAgICAgICBBcmc5IGFyZzksCiAgICAgICAgICAgICAgICBBcmcx MCBhcmcxMCkKICB7CiAgICByZXR1cm4KICAgICAgbmV3IEZ1bkRhdGExMDxBcmcxLEFyZzIsQXJn MyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsQXJnOSxBcmcxMCx2b2lkPgogICAgICAoZnVuX3B0 ciwgYXJnMSwgYXJnMiwKICAgICAgIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsCiAgICAgICBhcmc3 LCBhcmc4LCBhcmc5LCBhcmcxMCk7CiAgfQoKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3Ms IHR5cGVuYW1lIFJldFR5cGU+CiAgTWVtRnVuRGF0YTA8Q2xhc3MsUmV0VHlwZT46Ok1lbUZ1bkRh dGEwIChGdW5QdHIgZnVuX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIENsYXNzICpvYmplY3QpIDoKICAgICAgICAgICAgICAgICAgRnVuRGF0YUJhc2UgKCZN ZW1GdW5EYXRhMDxDbGFzcyxSZXRUeXBlPjo6dGhyZWFkX2VudHJ5X3BvaW50KSwKICAgICAgICAg ICAgICAgICAgZnVuX3B0ciAoZnVuX3B0ciksCiAgICAgICAgICAgICAgICAgIG9iamVjdCAob2Jq ZWN0KQogIHt9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBSZXRUeXBlPgog IE1lbUZ1bkRhdGEwPENsYXNzLFJldFR5cGU+OjpNZW1GdW5EYXRhMCAoY29uc3QgTWVtRnVuRGF0 YTAgJmZ1bl9kYXRhKSA6CiAgICAgICAgICAgICAgICAgIEZ1bkRhdGFCYXNlIChmdW5fZGF0YSks CiAgICAgICAgICAgICAgICAgIGZ1bl9wdHIgKGZ1bl9kYXRhLmZ1bl9wdHIpLAogICAgICAgICAg ICAgICAgICBvYmplY3QgKGZ1bl9kYXRhLm9iamVjdCkKICB7fQoKCgogIHRlbXBsYXRlIDxjbGFz cyBDbGFzcywgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRhQmFzZSAqCiAgTWVtRnVuRGF0YTA8 Q2xhc3MsUmV0VHlwZT46OmNsb25lICgpIGNvbnN0CiAgewogICAgcmV0dXJuIG5ldyBNZW1GdW5E YXRhMCAoKnRoaXMpOwogIH0KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIFJl dFR5cGU+CiAgdm9pZCAqCiAgTWVtRnVuRGF0YTA8Q2xhc3MsUmV0VHlwZT46OnRocmVhZF9lbnRy eV9wb2ludCAodm9pZCAqYXJnKQogIHsKCgoKICAgIHR5cGVkZWYgTWVtRnVuRGF0YTA8Q2xhc3Ms UmV0VHlwZT4gVGhpc0NsYXNzOwoKICAgIEZ1bkVuY2Fwc3VsYXRpb24gKmZ1bl9lbmNhcHN1bGF0 aW9uCiAgICAgID0gcmVpbnRlcnByZXRfY2FzdDxGdW5FbmNhcHN1bGF0aW9uKj4oYXJnKTsKICAg IGNvbnN0IFRoaXNDbGFzcyAqZnVuX2RhdGEKICAgICAgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgVGhp c0NsYXNzKj4gKGZ1bl9lbmNhcHN1bGF0aW9uLT5mdW5fZGF0YV9iYXNlKTsKCgogICAgVGhpc0Ns YXNzOjpGdW5QdHIgZnVuX3B0ciA9IGZ1bl9kYXRhLT5mdW5fcHRyOwogICAgQ2xhc3MgKm9iamVj dCA9IGZ1bl9kYXRhLT5vYmplY3Q7CgoKCgogICAgZnVuX2RhdGEtPmxvY2sucmVsZWFzZSAoKTsK IyA2MjE1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9i YXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICByZWdpc3Rlcl9uZXdfdGhyZWFkICgpOwogICAg dHJ5CiAgICAgIHsKICAgICAgICAob2JqZWN0LT4qZnVuX3B0cikoKTsKICAgICAgfQogICAgY2F0 Y2ggKGNvbnN0IHN0ZDo6ZXhjZXB0aW9uICZleGMpCiAgICAgIHsKICAgICAgICBoYW5kbGVfc3Rk X2V4Y2VwdGlvbiAoZXhjKTsKICAgICAgfQogICAgY2F0Y2ggKC4uLikKICAgICAgewogICAgICAg IGhhbmRsZV91bmtub3duX2V4Y2VwdGlvbiAoKTsKICAgICAgfTsKICAgIGRlcmVnaXN0ZXJfbmV3 X3RocmVhZCAoKTsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNz LCB0eXBlbmFtZSBSZXRUeXBlPgogIE1lbUZ1bkRhdGEwPENsYXNzLFJldFR5cGU+OjpBcmdDb2xs ZWN0b3I6OkFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpIDoKICAgICAgICAgICAgICAgICAg ZnVuX3B0ciAoZnVuX3B0cikKICB7fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5h bWUgUmV0VHlwZT4KICBGdW5FbmNhcHN1bGF0aW9uCiAgTWVtRnVuRGF0YTA8Q2xhc3MsUmV0VHlw ZT46OkFyZ0NvbGxlY3Rvcjo6Y29sbGVjdF9hcmdzIChDbGFzcyAqb2JqZWN0KQogIHsKICAgIHJl dHVybiBuZXcgTWVtRnVuRGF0YTA8Q2xhc3Msdm9pZD4oZnVuX3B0ciwgb2JqZWN0KTsKICB9CgoK CiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBSZXRUeXBlPgogIGlubGluZQogIEZ1 bkVuY2Fwc3VsYXRpb24KICBNZW1GdW5EYXRhMDxDbGFzcyxSZXRUeXBlPjo6QXJnQ29sbGVjdG9y Ojpjb2xsZWN0X2FyZ3MgKENsYXNzICZvYmplY3QpCiAgewogICAgcmV0dXJuIGNvbGxlY3RfYXJn cyAoJm9iamVjdCk7CiAgfQoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBB cmcxLCB0eXBlbmFtZSBSZXRUeXBlPgogIE1lbUZ1bkRhdGExPENsYXNzLEFyZzEsUmV0VHlwZT46 Ok1lbUZ1bkRhdGExIChGdW5QdHIgZnVuX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQ2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxKSA6CiAgICAgICAgICAgICAgICAg IEZ1bkRhdGFCYXNlICgmTWVtRnVuRGF0YTE8Q2xhc3MsQXJnMSxSZXRUeXBlPjo6dGhyZWFkX2Vu dHJ5X3BvaW50KSwKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVuX3B0ciksCiAgICAgICAg ICAgICAgICAgIG9iamVjdCAob2JqZWN0KSwKICAgICAgICAgICAgICAgICAgYXJnMSAoYXJnMSkK ICB7fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUg UmV0VHlwZT4KICBNZW1GdW5EYXRhMTxDbGFzcyxBcmcxLFJldFR5cGU+OjpNZW1GdW5EYXRhMSAo Y29uc3QgTWVtRnVuRGF0YTEgJmZ1bl9kYXRhKSA6CiAgICAgICAgICAgICAgICAgIEZ1bkRhdGFC YXNlIChmdW5fZGF0YSksCiAgICAgICAgICAgICAgICAgIGZ1bl9wdHIgKGZ1bl9kYXRhLmZ1bl9w dHIpLAogICAgICAgICAgICAgICAgICBvYmplY3QgKGZ1bl9kYXRhLm9iamVjdCksCiAgICAgICAg ICAgICAgICAgIGFyZzEgKGZ1bl9kYXRhLmFyZzEpCiAge30KCgoKICB0ZW1wbGF0ZSA8Y2xhc3Mg Q2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRGF0YUJhc2UgKgog IE1lbUZ1bkRhdGExPENsYXNzLEFyZzEsUmV0VHlwZT46OmNsb25lICgpIGNvbnN0CiAgewogICAg cmV0dXJuIG5ldyBNZW1GdW5EYXRhMSAoKnRoaXMpOwogIH0KCgoKICB0ZW1wbGF0ZSA8Y2xhc3Mg Q2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIFJldFR5cGU+CiAgdm9pZCAqCiAgTWVtRnVu RGF0YTE8Q2xhc3MsQXJnMSxSZXRUeXBlPjo6dGhyZWFkX2VudHJ5X3BvaW50ICh2b2lkICphcmcp CiAgewoKCgogICAgdHlwZWRlZiBNZW1GdW5EYXRhMTxDbGFzcyxBcmcxLFJldFR5cGU+IFRoaXND bGFzczsKCiAgICBGdW5FbmNhcHN1bGF0aW9uICpmdW5fZW5jYXBzdWxhdGlvbgogICAgICA9IHJl aW50ZXJwcmV0X2Nhc3Q8RnVuRW5jYXBzdWxhdGlvbio+KGFyZyk7CiAgICBjb25zdCBUaGlzQ2xh c3MgKmZ1bl9kYXRhCiAgICAgID0gZHluYW1pY19jYXN0PGNvbnN0IFRoaXNDbGFzcyo+IChmdW5f ZW5jYXBzdWxhdGlvbi0+ZnVuX2RhdGFfYmFzZSk7CgoKICAgIFRoaXNDbGFzczo6RnVuUHRyIGZ1 bl9wdHIgPSBmdW5fZGF0YS0+ZnVuX3B0cjsKICAgIENsYXNzICpvYmplY3QgPSBmdW5fZGF0YS0+ b2JqZWN0OwogICAgQXJnMSBhcmcxID0gZnVuX2RhdGEtPmFyZzE7CgoKCgoKICAgIGZ1bl9kYXRh LT5sb2NrLnJlbGVhc2UgKCk7CiMgNjMzMCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh bC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgcmVnaXN0ZXJf bmV3X3RocmVhZCAoKTsKICAgIHRyeQogICAgICB7CiAgICAgICAgKG9iamVjdC0+KmZ1bl9wdHIp KGFyZzEpOwogICAgICB9CiAgICBjYXRjaCAoY29uc3Qgc3RkOjpleGNlcHRpb24gJmV4YykKICAg ICAgewogICAgICAgIGhhbmRsZV9zdGRfZXhjZXB0aW9uIChleGMpOwogICAgICB9CiAgICBjYXRj aCAoLi4uKQogICAgICB7CiAgICAgICAgaGFuZGxlX3Vua25vd25fZXhjZXB0aW9uICgpOwogICAg ICB9OwogICAgZGVyZWdpc3Rlcl9uZXdfdGhyZWFkICgpOwoKICAgIHJldHVybiAwOwogIH0KCgoK ICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIFJldFR5cGU+ CiAgTWVtRnVuRGF0YTE8Q2xhc3MsQXJnMSxSZXRUeXBlPjo6QXJnQ29sbGVjdG9yOjpBcmdDb2xs ZWN0b3IgKEZ1blB0ciBmdW5fcHRyKSA6CiAgICAgICAgICAgICAgICAgIGZ1bl9wdHIgKGZ1bl9w dHIpCiAge30KCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5h bWUgUmV0VHlwZT4KICBGdW5FbmNhcHN1bGF0aW9uCiAgTWVtRnVuRGF0YTE8Q2xhc3MsQXJnMSxS ZXRUeXBlPjo6QXJnQ29sbGVjdG9yOjpjb2xsZWN0X2FyZ3MgKENsYXNzICpvYmplY3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEFyZzEgYXJnMSkKICB7CiAgICByZXR1cm4gbmV3IE1lbUZ1bkRhdGExPENsYXNzLEFyZzEsdm9p ZD4oZnVuX3B0ciwgb2JqZWN0LCBhcmcxKTsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNz LCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBSZXRUeXBlPgogIGlubGluZQogIEZ1bkVuY2Fwc3Vs YXRpb24KICBNZW1GdW5EYXRhMTxDbGFzcyxBcmcxLFJldFR5cGU+OjpBcmdDb2xsZWN0b3I6OmNv bGxlY3RfYXJncyAoQ2xhc3MgJm9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxKQogIHsKICAgIHJldHVy biBjb2xsZWN0X2FyZ3MgKCZvYmplY3QsIGFyZzEpOwogIH0KCgoKCiAgdGVtcGxhdGUgPGNsYXNz IENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBSZXRUeXBlPgog IE1lbUZ1bkRhdGEyPENsYXNzLEFyZzEsQXJnMixSZXRUeXBlPjo6TWVtRnVuRGF0YTIgKEZ1blB0 ciBmdW5fcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIENsYXNzICpvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzIgYXJnMikgOgogICAgICAgICAgICAgICAgICBG dW5EYXRhQmFzZSAoJk1lbUZ1bkRhdGEyPENsYXNzLEFyZzEsQXJnMixSZXRUeXBlPjo6dGhyZWFk X2VudHJ5X3BvaW50KSwKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVuX3B0ciksCiAgICAg ICAgICAgICAgICAgIG9iamVjdCAob2JqZWN0KSwKICAgICAgICAgICAgICAgICAgYXJnMSAoYXJn MSksCiAgICAgICAgICAgICAgICAgIGFyZzIgKGFyZzIpCiAge30KCgoKICB0ZW1wbGF0ZSA8Y2xh c3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIFJldFR5cGU+ CiAgTWVtRnVuRGF0YTI8Q2xhc3MsQXJnMSxBcmcyLFJldFR5cGU+OjpNZW1GdW5EYXRhMiAoY29u c3QgTWVtRnVuRGF0YTIgJmZ1bl9kYXRhKSA6CiAgICAgICAgICAgICAgICAgIEZ1bkRhdGFCYXNl IChmdW5fZGF0YSksCiAgICAgICAgICAgICAgICAgIGZ1bl9wdHIgKGZ1bl9kYXRhLmZ1bl9wdHIp LAogICAgICAgICAgICAgICAgICBvYmplY3QgKGZ1bl9kYXRhLm9iamVjdCksCiAgICAgICAgICAg ICAgICAgIGFyZzEgKGZ1bl9kYXRhLmFyZzEpLAogICAgICAgICAgICAgICAgICBhcmcyIChmdW5f ZGF0YS5hcmcyKQogIHt9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcx LCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkRhdGFCYXNlICoKICBNZW1G dW5EYXRhMjxDbGFzcyxBcmcxLEFyZzIsUmV0VHlwZT46OmNsb25lICgpIGNvbnN0CiAgewogICAg cmV0dXJuIG5ldyBNZW1GdW5EYXRhMiAoKnRoaXMpOwogIH0KCgoKICB0ZW1wbGF0ZSA8Y2xhc3Mg Q2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIFJldFR5cGU+CiAg dm9pZCAqCiAgTWVtRnVuRGF0YTI8Q2xhc3MsQXJnMSxBcmcyLFJldFR5cGU+Ojp0aHJlYWRfZW50 cnlfcG9pbnQgKHZvaWQgKmFyZykKICB7CgoKCiAgICB0eXBlZGVmIE1lbUZ1bkRhdGEyPENsYXNz LEFyZzEsQXJnMixSZXRUeXBlPiBUaGlzQ2xhc3M7CgogICAgRnVuRW5jYXBzdWxhdGlvbiAqZnVu X2VuY2Fwc3VsYXRpb24KICAgICAgPSByZWludGVycHJldF9jYXN0PEZ1bkVuY2Fwc3VsYXRpb24q PihhcmcpOwogICAgY29uc3QgVGhpc0NsYXNzICpmdW5fZGF0YQogICAgICA9IGR5bmFtaWNfY2Fz dDxjb25zdCBUaGlzQ2xhc3MqPiAoZnVuX2VuY2Fwc3VsYXRpb24tPmZ1bl9kYXRhX2Jhc2UpOwoK CiAgICBUaGlzQ2xhc3M6OkZ1blB0ciBmdW5fcHRyID0gZnVuX2RhdGEtPmZ1bl9wdHI7CiAgICBD bGFzcyAqb2JqZWN0ID0gZnVuX2RhdGEtPm9iamVjdDsKICAgIEFyZzEgYXJnMSA9IGZ1bl9kYXRh LT5hcmcxOwogICAgQXJnMiBhcmcyID0gZnVuX2RhdGEtPmFyZzI7CgoKCgoKICAgIGZ1bl9kYXRh LT5sb2NrLnJlbGVhc2UgKCk7CiMgNjQ0OSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh bC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgcmVnaXN0ZXJf bmV3X3RocmVhZCAoKTsKICAgIHRyeQogICAgICB7CiAgICAgICAgKG9iamVjdC0+KmZ1bl9wdHIp KGFyZzEsIGFyZzIpOwogICAgICB9CiAgICBjYXRjaCAoY29uc3Qgc3RkOjpleGNlcHRpb24gJmV4 YykKICAgICAgewogICAgICAgIGhhbmRsZV9zdGRfZXhjZXB0aW9uIChleGMpOwogICAgICB9CiAg ICBjYXRjaCAoLi4uKQogICAgICB7CiAgICAgICAgaGFuZGxlX3Vua25vd25fZXhjZXB0aW9uICgp OwogICAgICB9OwogICAgZGVyZWdpc3Rlcl9uZXdfdGhyZWFkICgpOwoKICAgIHJldHVybiAwOwog IH0KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFy ZzIsIHR5cGVuYW1lIFJldFR5cGU+CiAgTWVtRnVuRGF0YTI8Q2xhc3MsQXJnMSxBcmcyLFJldFR5 cGU+OjpBcmdDb2xsZWN0b3I6OkFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpIDoKICAgICAg ICAgICAgICAgICAgZnVuX3B0ciAoZnVuX3B0cikKICB7fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBD bGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgUmV0VHlwZT4KICBG dW5FbmNhcHN1bGF0aW9uCiAgTWVtRnVuRGF0YTI8Q2xhc3MsQXJnMSxBcmcyLFJldFR5cGU+OjpB cmdDb2xsZWN0b3I6OmNvbGxlY3RfYXJncyAoQ2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcx IGFyZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyKQogIHsKICAgIHJldHVybiBuZXcgTWVtRnVuRGF0 YTI8Q2xhc3MsQXJnMSxBcmcyLHZvaWQ+KGZ1bl9wdHIsIG9iamVjdCwgYXJnMSwgYXJnMik7CiAg fQoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcy LCB0eXBlbmFtZSBSZXRUeXBlPgogIGlubGluZQogIEZ1bkVuY2Fwc3VsYXRpb24KICBNZW1GdW5E YXRhMjxDbGFzcyxBcmcxLEFyZzIsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6Y29sbGVjdF9hcmdz IChDbGFzcyAmb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIGFy ZzIpCiAgewogICAgcmV0dXJuIGNvbGxlY3RfYXJncyAoJm9iamVjdCwgYXJnMSwgYXJnMik7CiAg fQoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUg QXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgUmV0VHlwZT4KICBNZW1GdW5EYXRhMzxDbGFz cyxBcmcxLEFyZzIsQXJnMyxSZXRUeXBlPjo6TWVtRnVuRGF0YTMgKEZ1blB0ciBmdW5fcHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Q2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMykgOgogICAg ICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoJk1lbUZ1bkRhdGEzPENsYXNzLEFyZzEsQXJnMixB cmczLFJldFR5cGU+Ojp0aHJlYWRfZW50cnlfcG9pbnQpLAogICAgICAgICAgICAgICAgICBmdW5f cHRyIChmdW5fcHRyKSwKICAgICAgICAgICAgICAgICAgb2JqZWN0IChvYmplY3QpLAogICAgICAg ICAgICAgICAgICBhcmcxIChhcmcxKSwKICAgICAgICAgICAgICAgICAgYXJnMiAoYXJnMiksCiAg ICAgICAgICAgICAgICAgIGFyZzMgKGFyZzMpCiAge30KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xh c3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1l IFJldFR5cGU+CiAgTWVtRnVuRGF0YTM8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsUmV0VHlwZT46Ok1l bUZ1bkRhdGEzIChjb25zdCBNZW1GdW5EYXRhMyAmZnVuX2RhdGEpIDoKICAgICAgICAgICAgICAg ICAgRnVuRGF0YUJhc2UgKGZ1bl9kYXRhKSwKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVu X2RhdGEuZnVuX3B0ciksCiAgICAgICAgICAgICAgICAgIG9iamVjdCAoZnVuX2RhdGEub2JqZWN0 KSwKICAgICAgICAgICAgICAgICAgYXJnMSAoZnVuX2RhdGEuYXJnMSksCiAgICAgICAgICAgICAg ICAgIGFyZzIgKGZ1bl9kYXRhLmFyZzIpLAogICAgICAgICAgICAgICAgICBhcmczIChmdW5fZGF0 YS5hcmczKQogIHt9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0 eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkRhdGFC YXNlICoKICBNZW1GdW5EYXRhMzxDbGFzcyxBcmcxLEFyZzIsQXJnMyxSZXRUeXBlPjo6Y2xvbmUg KCkgY29uc3QKICB7CiAgICByZXR1cm4gbmV3IE1lbUZ1bkRhdGEzICgqdGhpcyk7CiAgfQoKCgog IHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlw ZW5hbWUgQXJnMywgdHlwZW5hbWUgUmV0VHlwZT4KICB2b2lkICoKICBNZW1GdW5EYXRhMzxDbGFz cyxBcmcxLEFyZzIsQXJnMyxSZXRUeXBlPjo6dGhyZWFkX2VudHJ5X3BvaW50ICh2b2lkICphcmcp CiAgewoKCgogICAgdHlwZWRlZiBNZW1GdW5EYXRhMzxDbGFzcyxBcmcxLEFyZzIsQXJnMyxSZXRU eXBlPiBUaGlzQ2xhc3M7CgogICAgRnVuRW5jYXBzdWxhdGlvbiAqZnVuX2VuY2Fwc3VsYXRpb24K ICAgICAgPSByZWludGVycHJldF9jYXN0PEZ1bkVuY2Fwc3VsYXRpb24qPihhcmcpOwogICAgY29u c3QgVGhpc0NsYXNzICpmdW5fZGF0YQogICAgICA9IGR5bmFtaWNfY2FzdDxjb25zdCBUaGlzQ2xh c3MqPiAoZnVuX2VuY2Fwc3VsYXRpb24tPmZ1bl9kYXRhX2Jhc2UpOwoKCiAgICBUaGlzQ2xhc3M6 OkZ1blB0ciBmdW5fcHRyID0gZnVuX2RhdGEtPmZ1bl9wdHI7CiAgICBDbGFzcyAqb2JqZWN0ID0g ZnVuX2RhdGEtPm9iamVjdDsKICAgIEFyZzEgYXJnMSA9IGZ1bl9kYXRhLT5hcmcxOwogICAgQXJn MiBhcmcyID0gZnVuX2RhdGEtPmFyZzI7CiAgICBBcmczIGFyZzMgPSBmdW5fZGF0YS0+YXJnMzsK CgoKCgogICAgZnVuX2RhdGEtPmxvY2sucmVsZWFzZSAoKTsKIyA2NTc2ICIvaG9tZS9iYW5nZXJ0 aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50 LmgiCiAgICByZWdpc3Rlcl9uZXdfdGhyZWFkICgpOwogICAgdHJ5CiAgICAgIHsKICAgICAgICAo b2JqZWN0LT4qZnVuX3B0cikoYXJnMSwgYXJnMiwgYXJnMyk7CiAgICAgIH0KICAgIGNhdGNoIChj b25zdCBzdGQ6OmV4Y2VwdGlvbiAmZXhjKQogICAgICB7CiAgICAgICAgaGFuZGxlX3N0ZF9leGNl cHRpb24gKGV4Yyk7CiAgICAgIH0KICAgIGNhdGNoICguLi4pCiAgICAgIHsKICAgICAgICBoYW5k bGVfdW5rbm93bl9leGNlcHRpb24gKCk7CiAgICAgIH07CiAgICBkZXJlZ2lzdGVyX25ld190aHJl YWQgKCk7CgogICAgcmV0dXJuIDA7CiAgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlw ZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgUmV0VHlw ZT4KICBNZW1GdW5EYXRhMzxDbGFzcyxBcmcxLEFyZzIsQXJnMyxSZXRUeXBlPjo6QXJnQ29sbGVj dG9yOjpBcmdDb2xsZWN0b3IgKEZ1blB0ciBmdW5fcHRyKSA6CiAgICAgICAgICAgICAgICAgIGZ1 bl9wdHIgKGZ1bl9wdHIpCiAge30KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1l IEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIFJldFR5cGU+CiAg RnVuRW5jYXBzdWxhdGlvbgogIE1lbUZ1bkRhdGEzPENsYXNzLEFyZzEsQXJnMixBcmczLFJldFR5 cGU+OjpBcmdDb2xsZWN0b3I6OmNvbGxlY3RfYXJncyAoQ2xhc3MgKm9iamVjdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEFyZzMgYXJnMykKICB7CiAgICByZXR1cm4gbmV3IE1lbUZ1bkRhdGEzPENsYXNzLEFyZzEs QXJnMixBcmczLHZvaWQ+KGZ1bl9wdHIsIG9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnMSwgYXJnMiwgYXJnMyk7CiAgfQoKCgog IHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlw ZW5hbWUgQXJnMywgdHlwZW5hbWUgUmV0VHlwZT4KICBpbmxpbmUKICBGdW5FbmNhcHN1bGF0aW9u CiAgTWVtRnVuRGF0YTM8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsUmV0VHlwZT46OkFyZ0NvbGxlY3Rv cjo6Y29sbGVjdF9hcmdzIChDbGFzcyAmb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSBhcmcx LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmczKQog IHsKICAgIHJldHVybiBjb2xsZWN0X2FyZ3MgKCZvYmplY3QsIGFyZzEsIGFyZzIsIGFyZzMpOwog IH0KCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUg QXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgUmV0VHlwZT4KICBN ZW1GdW5EYXRhNDxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LFJldFR5cGU+OjpNZW1GdW5EYXRh NCAoRnVuUHRyIGZ1bl9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzICpvYmplY3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBcmczIGFyZzMsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQgYXJnNCkgOgogICAg ICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoJk1lbUZ1bkRhdGE0PENsYXNzLEFyZzEsQXJnMixB cmczLEFyZzQsUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCksCiAgICAgICAgICAgICAgICAg IGZ1bl9wdHIgKGZ1bl9wdHIpLAogICAgICAgICAgICAgICAgICBvYmplY3QgKG9iamVjdCksCiAg ICAgICAgICAgICAgICAgIGFyZzEgKGFyZzEpLAogICAgICAgICAgICAgICAgICBhcmcyIChhcmcy KSwKICAgICAgICAgICAgICAgICAgYXJnMyAoYXJnMyksCiAgICAgICAgICAgICAgICAgIGFyZzQg KGFyZzQpCiAge30KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5 cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIFJldFR5 cGU+CiAgTWVtRnVuRGF0YTQ8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxSZXRUeXBlPjo6TWVt RnVuRGF0YTQgKGNvbnN0IE1lbUZ1bkRhdGE0ICZmdW5fZGF0YSkgOgogICAgICAgICAgICAgICAg ICBGdW5EYXRhQmFzZSAoZnVuX2RhdGEpLAogICAgICAgICAgICAgICAgICBmdW5fcHRyIChmdW5f ZGF0YS5mdW5fcHRyKSwKICAgICAgICAgICAgICAgICAgb2JqZWN0IChmdW5fZGF0YS5vYmplY3Qp LAogICAgICAgICAgICAgICAgICBhcmcxIChmdW5fZGF0YS5hcmcxKSwKICAgICAgICAgICAgICAg ICAgYXJnMiAoZnVuX2RhdGEuYXJnMiksCiAgICAgICAgICAgICAgICAgIGFyZzMgKGZ1bl9kYXRh LmFyZzMpLAogICAgICAgICAgICAgICAgICBhcmc0IChmdW5fZGF0YS5hcmc0KQogIHt9CgoKCiAg dGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBl bmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkRhdGFCYXNl ICoKICBNZW1GdW5EYXRhNDxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LFJldFR5cGU+OjpjbG9u ZSAoKSBjb25zdAogIHsKICAgIHJldHVybiBuZXcgTWVtRnVuRGF0YTQgKCp0aGlzKTsKICB9CgoK CiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0 eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBSZXRUeXBlPgogIHZvaWQgKgog IE1lbUZ1bkRhdGE0PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsUmV0VHlwZT46OnRocmVhZF9l bnRyeV9wb2ludCAodm9pZCAqYXJnKQogIHsKCgoKICAgIHR5cGVkZWYgTWVtRnVuRGF0YTQ8Q2xh c3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxSZXRUeXBlPiBUaGlzQ2xhc3M7CgogICAgRnVuRW5jYXBz dWxhdGlvbiAqZnVuX2VuY2Fwc3VsYXRpb24KICAgICAgPSByZWludGVycHJldF9jYXN0PEZ1bkVu Y2Fwc3VsYXRpb24qPihhcmcpOwogICAgY29uc3QgVGhpc0NsYXNzICpmdW5fZGF0YQogICAgICA9 IGR5bmFtaWNfY2FzdDxjb25zdCBUaGlzQ2xhc3MqPiAoZnVuX2VuY2Fwc3VsYXRpb24tPmZ1bl9k YXRhX2Jhc2UpOwoKCiAgICBUaGlzQ2xhc3M6OkZ1blB0ciBmdW5fcHRyID0gZnVuX2RhdGEtPmZ1 bl9wdHI7CiAgICBDbGFzcyAqb2JqZWN0ID0gZnVuX2RhdGEtPm9iamVjdDsKICAgIEFyZzEgYXJn MSA9IGZ1bl9kYXRhLT5hcmcxOwogICAgQXJnMiBhcmcyID0gZnVuX2RhdGEtPmFyZzI7CiAgICBB cmczIGFyZzMgPSBmdW5fZGF0YS0+YXJnMzsKICAgIEFyZzQgYXJnNCA9IGZ1bl9kYXRhLT5hcmc0 OwoKCgoKCiAgICBmdW5fZGF0YS0+bG9jay5yZWxlYXNlICgpOwojIDY3MTAgIi9ob21lL2Jhbmdl cnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1l bnQuaCIKICAgIHJlZ2lzdGVyX25ld190aHJlYWQgKCk7CiAgICB0cnkKICAgICAgewogICAgICAg IChvYmplY3QtPipmdW5fcHRyKShhcmcxLCBhcmcyLCBhcmczLCBhcmc0KTsKICAgICAgfQogICAg Y2F0Y2ggKGNvbnN0IHN0ZDo6ZXhjZXB0aW9uICZleGMpCiAgICAgIHsKICAgICAgICBoYW5kbGVf c3RkX2V4Y2VwdGlvbiAoZXhjKTsKICAgICAgfQogICAgY2F0Y2ggKC4uLikKICAgICAgewogICAg ICAgIGhhbmRsZV91bmtub3duX2V4Y2VwdGlvbiAoKTsKICAgICAgfTsKICAgIGRlcmVnaXN0ZXJf bmV3X3RocmVhZCAoKTsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENs YXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFt ZSBBcmc0LCB0eXBlbmFtZSBSZXRUeXBlPgogIE1lbUZ1bkRhdGE0PENsYXNzLEFyZzEsQXJnMixB cmczLEFyZzQsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6QXJnQ29sbGVjdG9yIChGdW5QdHIgZnVu X3B0cikgOgogICAgICAgICAgICAgICAgICBmdW5fcHRyIChmdW5fcHRyKQogIHt9CgoKCiAgdGVt cGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFt ZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkVuY2Fwc3VsYXRp b24KICBNZW1GdW5EYXRhNDxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LFJldFR5cGU+OjpBcmdD b2xsZWN0b3I6OmNvbGxlY3RfYXJncyAoQ2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQXJnMSBhcmcxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNCBhcmc0KQogIHsK ICAgIHJldHVybiBuZXcgTWVtRnVuRGF0YTQ8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCx2b2lk PihmdW5fcHRyLCBvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCk7CiAgfQoKCgogIHRl bXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5h bWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgUmV0VHlwZT4KICBpbmxpbmUKICBGdW5F bmNhcHN1bGF0aW9uCiAgTWVtRnVuRGF0YTQ8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxSZXRU eXBlPjo6QXJnQ29sbGVjdG9yOjpjb2xsZWN0X2FyZ3MgKENsYXNzICZvYmplY3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBcmczIGFyZzMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQg YXJnNCkKICB7CiAgICByZXR1cm4gY29sbGVjdF9hcmdzICgmb2JqZWN0LCBhcmcxLCBhcmcyLCBh cmczLCBhcmc0KTsKICB9CgoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJn MSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUg QXJnNSwgdHlwZW5hbWUgUmV0VHlwZT4KICBNZW1GdW5EYXRhNTxDbGFzcyxBcmcxLEFyZzIsQXJn MyxBcmc0LEFyZzUsUmV0VHlwZT46Ok1lbUZ1bkRhdGE1IChGdW5QdHIgZnVuX3B0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBDbGFzcyAqb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcy IGFyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBcmc1IGFyZzUpIDoKICAgICAgICAgICAgICAgICAgRnVuRGF0YUJhc2UgKCZNZW1GdW5E YXRhNTxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsUmV0VHlwZT46OnRocmVhZF9lbnRy eV9wb2ludCksCiAgICAgICAgICAgICAgICAgIGZ1bl9wdHIgKGZ1bl9wdHIpLAogICAgICAgICAg ICAgICAgICBvYmplY3QgKG9iamVjdCksCiAgICAgICAgICAgICAgICAgIGFyZzEgKGFyZzEpLAog ICAgICAgICAgICAgICAgICBhcmcyIChhcmcyKSwKICAgICAgICAgICAgICAgICAgYXJnMyAoYXJn MyksCiAgICAgICAgICAgICAgICAgIGFyZzQgKGFyZzQpLAogICAgICAgICAgICAgICAgICBhcmc1 IChhcmc1KQogIHt9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0 eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1 LCB0eXBlbmFtZSBSZXRUeXBlPgogIE1lbUZ1bkRhdGE1PENsYXNzLEFyZzEsQXJnMixBcmczLEFy ZzQsQXJnNSxSZXRUeXBlPjo6TWVtRnVuRGF0YTUgKGNvbnN0IE1lbUZ1bkRhdGE1ICZmdW5fZGF0 YSkgOgogICAgICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoZnVuX2RhdGEpLAogICAgICAgICAg ICAgICAgICBmdW5fcHRyIChmdW5fZGF0YS5mdW5fcHRyKSwKICAgICAgICAgICAgICAgICAgb2Jq ZWN0IChmdW5fZGF0YS5vYmplY3QpLAogICAgICAgICAgICAgICAgICBhcmcxIChmdW5fZGF0YS5h cmcxKSwKICAgICAgICAgICAgICAgICAgYXJnMiAoZnVuX2RhdGEuYXJnMiksCiAgICAgICAgICAg ICAgICAgIGFyZzMgKGZ1bl9kYXRhLmFyZzMpLAogICAgICAgICAgICAgICAgICBhcmc0IChmdW5f ZGF0YS5hcmc0KSwKICAgICAgICAgICAgICAgICAgYXJnNSAoZnVuX2RhdGEuYXJnNSkKICB7fQoK CgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwg dHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgUmV0 VHlwZT4KICBGdW5EYXRhQmFzZSAqCiAgTWVtRnVuRGF0YTU8Q2xhc3MsQXJnMSxBcmcyLEFyZzMs QXJnNCxBcmc1LFJldFR5cGU+OjpjbG9uZSAoKSBjb25zdAogIHsKICAgIHJldHVybiBuZXcgTWVt RnVuRGF0YTUgKCp0aGlzKTsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFt ZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBl bmFtZSBBcmc1LCB0eXBlbmFtZSBSZXRUeXBlPgogIHZvaWQgKgogIE1lbUZ1bkRhdGE1PENsYXNz LEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxSZXRUeXBlPjo6dGhyZWFkX2VudHJ5X3BvaW50ICh2 b2lkICphcmcpCiAgewoKCgogICAgdHlwZWRlZiBNZW1GdW5EYXRhNTxDbGFzcyxBcmcxLEFyZzIs QXJnMyxBcmc0LEFyZzUsUmV0VHlwZT4gVGhpc0NsYXNzOwoKICAgIEZ1bkVuY2Fwc3VsYXRpb24g KmZ1bl9lbmNhcHN1bGF0aW9uCiAgICAgID0gcmVpbnRlcnByZXRfY2FzdDxGdW5FbmNhcHN1bGF0 aW9uKj4oYXJnKTsKICAgIGNvbnN0IFRoaXNDbGFzcyAqZnVuX2RhdGEKICAgICAgPSBkeW5hbWlj X2Nhc3Q8Y29uc3QgVGhpc0NsYXNzKj4gKGZ1bl9lbmNhcHN1bGF0aW9uLT5mdW5fZGF0YV9iYXNl KTsKCgogICAgVGhpc0NsYXNzOjpGdW5QdHIgZnVuX3B0ciA9IGZ1bl9kYXRhLT5mdW5fcHRyOwog ICAgQ2xhc3MgKm9iamVjdCA9IGZ1bl9kYXRhLT5vYmplY3Q7CiAgICBBcmcxIGFyZzEgPSBmdW5f ZGF0YS0+YXJnMTsKICAgIEFyZzIgYXJnMiA9IGZ1bl9kYXRhLT5hcmcyOwogICAgQXJnMyBhcmcz ID0gZnVuX2RhdGEtPmFyZzM7CiAgICBBcmc0IGFyZzQgPSBmdW5fZGF0YS0+YXJnNDsKICAgIEFy ZzUgYXJnNSA9IGZ1bl9kYXRhLT5hcmc1OwoKCgoKCiAgICBmdW5fZGF0YS0+bG9jay5yZWxlYXNl ICgpOwojIDY4NDkgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs dWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgIHJlZ2lzdGVyX25ld190aHJlYWQgKCk7 CiAgICB0cnkKICAgICAgewogICAgICAgIChvYmplY3QtPipmdW5fcHRyKShhcmcxLCBhcmcyLCBh cmczLCBhcmc0LCBhcmc1KTsKICAgICAgfQogICAgY2F0Y2ggKGNvbnN0IHN0ZDo6ZXhjZXB0aW9u ICZleGMpCiAgICAgIHsKICAgICAgICBoYW5kbGVfc3RkX2V4Y2VwdGlvbiAoZXhjKTsKICAgICAg fQogICAgY2F0Y2ggKC4uLikKICAgICAgewogICAgICAgIGhhbmRsZV91bmtub3duX2V4Y2VwdGlv biAoKTsKICAgICAgfTsKICAgIGRlcmVnaXN0ZXJfbmV3X3RocmVhZCAoKTsKCiAgICByZXR1cm4g MDsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFt ZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBl bmFtZSBSZXRUeXBlPgogIE1lbUZ1bkRhdGE1PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsQXJn NSxSZXRUeXBlPjo6QXJnQ29sbGVjdG9yOjpBcmdDb2xsZWN0b3IgKEZ1blB0ciBmdW5fcHRyKSA6 CiAgICAgICAgICAgICAgICAgIGZ1bl9wdHIgKGZ1bl9wdHIpCiAge30KCgoKICB0ZW1wbGF0ZSA8 Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMs IHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRW5j YXBzdWxhdGlvbgogIE1lbUZ1bkRhdGE1PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxS ZXRUeXBlPjo6QXJnQ29sbGVjdG9yOjpjb2xsZWN0X2FyZ3MgKENsYXNzICpvYmplY3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmczIGFyZzMsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQXJnNCBhcmc0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFy ZzUgYXJnNSkKICB7CiAgICByZXR1cm4gbmV3IE1lbUZ1bkRhdGE1PENsYXNzLEFyZzEsQXJnMixB cmczLEFyZzQsQXJnNSx2b2lkPihmdW5fcHRyLCBvYmplY3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcxLCBhcmcyLCBh cmczLCBhcmc0LCBhcmc1KTsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFt ZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBl bmFtZSBBcmc1LCB0eXBlbmFtZSBSZXRUeXBlPgogIGlubGluZQogIEZ1bkVuY2Fwc3VsYXRpb24K ICBNZW1GdW5EYXRhNTxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsUmV0VHlwZT46OkFy Z0NvbGxlY3Rvcjo6Y29sbGVjdF9hcmdzIChDbGFzcyAmb2JqZWN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc1IGFyZzUpCiAg ewogICAgcmV0dXJuIGNvbGxlY3RfYXJncyAoJm9iamVjdCwgYXJnMSwgYXJnMiwgYXJnMywgYXJn NCwgYXJnNSk7CiAgfQoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcx LCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBB cmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBSZXRUeXBlPgogIE1lbUZ1bkRhdGE2PENsYXNz LEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LFJldFR5cGU+OjpNZW1GdW5EYXRhNiAoRnVu UHRyIGZ1bl9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzcyAqb2JqZWN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQXJnMSBhcmcxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QXJnMyBhcmczLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNCBhcmc0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJn NSBhcmc1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2KSA6CiAgICAgICAgICAgICAgICAgIEZ1 bkRhdGFCYXNlICgmTWVtRnVuRGF0YTY8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFy ZzYsUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCksCiAgICAgICAgICAgICAgICAgIGZ1bl9w dHIgKGZ1bl9wdHIpLAogICAgICAgICAgICAgICAgICBvYmplY3QgKG9iamVjdCksCiAgICAgICAg ICAgICAgICAgIGFyZzEgKGFyZzEpLAogICAgICAgICAgICAgICAgICBhcmcyIChhcmcyKSwKICAg ICAgICAgICAgICAgICAgYXJnMyAoYXJnMyksCiAgICAgICAgICAgICAgICAgIGFyZzQgKGFyZzQp LAogICAgICAgICAgICAgICAgICBhcmc1IChhcmc1KSwKICAgICAgICAgICAgICAgICAgYXJnNiAo YXJnNikKICB7fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlw ZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwg dHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgUmV0VHlwZT4KICBNZW1GdW5EYXRhNjxDbGFzcyxBcmcx LEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixSZXRUeXBlPjo6TWVtRnVuRGF0YTYgKGNvbnN0IE1l bUZ1bkRhdGE2ICZmdW5fZGF0YSkgOgogICAgICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoZnVu X2RhdGEpLAogICAgICAgICAgICAgICAgICBmdW5fcHRyIChmdW5fZGF0YS5mdW5fcHRyKSwKICAg ICAgICAgICAgICAgICAgb2JqZWN0IChmdW5fZGF0YS5vYmplY3QpLAogICAgICAgICAgICAgICAg ICBhcmcxIChmdW5fZGF0YS5hcmcxKSwKICAgICAgICAgICAgICAgICAgYXJnMiAoZnVuX2RhdGEu YXJnMiksCiAgICAgICAgICAgICAgICAgIGFyZzMgKGZ1bl9kYXRhLmFyZzMpLAogICAgICAgICAg ICAgICAgICBhcmc0IChmdW5fZGF0YS5hcmc0KSwKICAgICAgICAgICAgICAgICAgYXJnNSAoZnVu X2RhdGEuYXJnNSksCiAgICAgICAgICAgICAgICAgIGFyZzYgKGZ1bl9kYXRhLmFyZzYpCiAge30K CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIs IHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFy ZzYsIHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRGF0YUJhc2UgKgogIE1lbUZ1bkRhdGE2PENsYXNz LEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LFJldFR5cGU+OjpjbG9uZSAoKSBjb25zdAog IHsKICAgIHJldHVybiBuZXcgTWVtRnVuRGF0YTYgKCp0aGlzKTsKICB9CgoKCiAgdGVtcGxhdGUg PGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmcz LCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBS ZXRUeXBlPgogIHZvaWQgKgogIE1lbUZ1bkRhdGE2PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQs QXJnNSxBcmc2LFJldFR5cGU+Ojp0aHJlYWRfZW50cnlfcG9pbnQgKHZvaWQgKmFyZykKICB7CgoK CiAgICB0eXBlZGVmIE1lbUZ1bkRhdGE2PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxB cmc2LFJldFR5cGU+IFRoaXNDbGFzczsKCiAgICBGdW5FbmNhcHN1bGF0aW9uICpmdW5fZW5jYXBz dWxhdGlvbgogICAgICA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuRW5jYXBzdWxhdGlvbio+KGFyZyk7 CiAgICBjb25zdCBUaGlzQ2xhc3MgKmZ1bl9kYXRhCiAgICAgID0gZHluYW1pY19jYXN0PGNvbnN0 IFRoaXNDbGFzcyo+IChmdW5fZW5jYXBzdWxhdGlvbi0+ZnVuX2RhdGFfYmFzZSk7CgoKICAgIFRo aXNDbGFzczo6RnVuUHRyIGZ1bl9wdHIgPSBmdW5fZGF0YS0+ZnVuX3B0cjsKICAgIENsYXNzICpv YmplY3QgPSBmdW5fZGF0YS0+b2JqZWN0OwogICAgQXJnMSBhcmcxID0gZnVuX2RhdGEtPmFyZzE7 CiAgICBBcmcyIGFyZzIgPSBmdW5fZGF0YS0+YXJnMjsKICAgIEFyZzMgYXJnMyA9IGZ1bl9kYXRh LT5hcmczOwogICAgQXJnNCBhcmc0ID0gZnVuX2RhdGEtPmFyZzQ7CiAgICBBcmc1IGFyZzUgPSBm dW5fZGF0YS0+YXJnNTsKICAgIEFyZzYgYXJnNiA9IGZ1bl9kYXRhLT5hcmc2OwoKCgoKCiAgICBm dW5fZGF0YS0+bG9jay5yZWxlYXNlICgpOwojIDY5OTUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5J SS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgIHJl Z2lzdGVyX25ld190aHJlYWQgKCk7CiAgICB0cnkKICAgICAgewogICAgICAgIChvYmplY3QtPipm dW5fcHRyKShhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2KTsKICAgICAgfQogICAg Y2F0Y2ggKGNvbnN0IHN0ZDo6ZXhjZXB0aW9uICZleGMpCiAgICAgIHsKICAgICAgICBoYW5kbGVf c3RkX2V4Y2VwdGlvbiAoZXhjKTsKICAgICAgfQogICAgY2F0Y2ggKC4uLikKICAgICAgewogICAg ICAgIGhhbmRsZV91bmtub3duX2V4Y2VwdGlvbiAoKTsKICAgICAgfTsKICAgIGRlcmVnaXN0ZXJf bmV3X3RocmVhZCAoKTsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENs YXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFt ZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBSZXRUeXBlPgog IE1lbUZ1bkRhdGE2PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LFJldFR5cGU+ OjpBcmdDb2xsZWN0b3I6OkFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpIDoKICAgICAgICAg ICAgICAgICAgZnVuX3B0ciAoZnVuX3B0cikKICB7fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFz cywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUg QXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgUmV0VHlwZT4KICBG dW5FbmNhcHN1bGF0aW9uCiAgTWVtRnVuRGF0YTY8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxB cmc1LEFyZzYsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6Y29sbGVjdF9hcmdzIChDbGFzcyAqb2Jq ZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQXJnMyBhcmczLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNCBhcmc0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2KQogIHsKICAgIHJldHVybiBuZXcgTWVtRnVuRGF0 YTY8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsdm9pZD4oZnVuX3B0ciwgb2Jq ZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2KTsKICB9 CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcy LCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBB cmc2LCB0eXBlbmFtZSBSZXRUeXBlPgogIGlubGluZQogIEZ1bkVuY2Fwc3VsYXRpb24KICBNZW1G dW5EYXRhNjxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixSZXRUeXBlPjo6QXJn Q29sbGVjdG9yOjpjb2xsZWN0X2FyZ3MgKENsYXNzICZvYmplY3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB cmcyIGFyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmczIGFyZzMsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBcmc1IGFyZzUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc2 IGFyZzYpCiAgewogICAgcmV0dXJuIGNvbGxlY3RfYXJncyAoJm9iamVjdCwgYXJnMSwgYXJnMiwg YXJnMywgYXJnNCwgYXJnNSwgYXJnNik7CiAgfQoKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xh c3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1l IEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVu YW1lIFJldFR5cGU+CiAgTWVtRnVuRGF0YTc8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1 LEFyZzYsQXJnNyxSZXRUeXBlPjo6TWVtRnVuRGF0YTcgKEZ1blB0ciBmdW5fcHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBDbGFzcyAqb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFy ZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QXJnMyBhcmczLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFyZzUgYXJnNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBcmc3IGFyZzcpIDoKICAgICAgICAgICAgICAgICAgRnVuRGF0YUJhc2Ug KCZNZW1GdW5EYXRhNzxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LFJl dFR5cGU+Ojp0aHJlYWRfZW50cnlfcG9pbnQpLAogICAgICAgICAgICAgICAgICBmdW5fcHRyIChm dW5fcHRyKSwKICAgICAgICAgICAgICAgICAgb2JqZWN0IChvYmplY3QpLAogICAgICAgICAgICAg ICAgICBhcmcxIChhcmcxKSwKICAgICAgICAgICAgICAgICAgYXJnMiAoYXJnMiksCiAgICAgICAg ICAgICAgICAgIGFyZzMgKGFyZzMpLAogICAgICAgICAgICAgICAgICBhcmc0IChhcmc0KSwKICAg ICAgICAgICAgICAgICAgYXJnNSAoYXJnNSksCiAgICAgICAgICAgICAgICAgIGFyZzYgKGFyZzYp LAogICAgICAgICAgICAgICAgICBhcmc3IChhcmc3KQogIHt9CgoKCiAgdGVtcGxhdGUgPGNsYXNz IENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBl bmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0 eXBlbmFtZSBSZXRUeXBlPgogIE1lbUZ1bkRhdGE3PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQs QXJnNSxBcmc2LEFyZzcsUmV0VHlwZT46Ok1lbUZ1bkRhdGE3IChjb25zdCBNZW1GdW5EYXRhNyAm ZnVuX2RhdGEpIDoKICAgICAgICAgICAgICAgICAgRnVuRGF0YUJhc2UgKGZ1bl9kYXRhKSwKICAg ICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVuX2RhdGEuZnVuX3B0ciksCiAgICAgICAgICAgICAg ICAgIG9iamVjdCAoZnVuX2RhdGEub2JqZWN0KSwKICAgICAgICAgICAgICAgICAgYXJnMSAoZnVu X2RhdGEuYXJnMSksCiAgICAgICAgICAgICAgICAgIGFyZzIgKGZ1bl9kYXRhLmFyZzIpLAogICAg ICAgICAgICAgICAgICBhcmczIChmdW5fZGF0YS5hcmczKSwKICAgICAgICAgICAgICAgICAgYXJn NCAoZnVuX2RhdGEuYXJnNCksCiAgICAgICAgICAgICAgICAgIGFyZzUgKGZ1bl9kYXRhLmFyZzUp LAogICAgICAgICAgICAgICAgICBhcmc2IChmdW5fZGF0YS5hcmc2KSwKICAgICAgICAgICAgICAg ICAgYXJnNyAoZnVuX2RhdGEuYXJnNykKICB7fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywg dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJn NCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUg UmV0VHlwZT4KICBGdW5EYXRhQmFzZSAqCiAgTWVtRnVuRGF0YTc8Q2xhc3MsQXJnMSxBcmcyLEFy ZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxSZXRUeXBlPjo6Y2xvbmUgKCkgY29uc3QKICB7CiAgICBy ZXR1cm4gbmV3IE1lbUZ1bkRhdGE3ICgqdGhpcyk7CiAgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBD bGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5h bWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlw ZW5hbWUgUmV0VHlwZT4KICB2b2lkICoKICBNZW1GdW5EYXRhNzxDbGFzcyxBcmcxLEFyZzIsQXJn MyxBcmc0LEFyZzUsQXJnNixBcmc3LFJldFR5cGU+Ojp0aHJlYWRfZW50cnlfcG9pbnQgKHZvaWQg KmFyZykKICB7CgoKCiAgICB0eXBlZGVmIE1lbUZ1bkRhdGE3PENsYXNzLEFyZzEsQXJnMixBcmcz LEFyZzQsQXJnNSxBcmc2LEFyZzcsUmV0VHlwZT4gVGhpc0NsYXNzOwoKICAgIEZ1bkVuY2Fwc3Vs YXRpb24gKmZ1bl9lbmNhcHN1bGF0aW9uCiAgICAgID0gcmVpbnRlcnByZXRfY2FzdDxGdW5FbmNh cHN1bGF0aW9uKj4oYXJnKTsKICAgIGNvbnN0IFRoaXNDbGFzcyAqZnVuX2RhdGEKICAgICAgPSBk eW5hbWljX2Nhc3Q8Y29uc3QgVGhpc0NsYXNzKj4gKGZ1bl9lbmNhcHN1bGF0aW9uLT5mdW5fZGF0 YV9iYXNlKTsKCgogICAgVGhpc0NsYXNzOjpGdW5QdHIgZnVuX3B0ciA9IGZ1bl9kYXRhLT5mdW5f cHRyOwogICAgQ2xhc3MgKm9iamVjdCA9IGZ1bl9kYXRhLT5vYmplY3Q7CiAgICBBcmcxIGFyZzEg PSBmdW5fZGF0YS0+YXJnMTsKICAgIEFyZzIgYXJnMiA9IGZ1bl9kYXRhLT5hcmcyOwogICAgQXJn MyBhcmczID0gZnVuX2RhdGEtPmFyZzM7CiAgICBBcmc0IGFyZzQgPSBmdW5fZGF0YS0+YXJnNDsK ICAgIEFyZzUgYXJnNSA9IGZ1bl9kYXRhLT5hcmc1OwogICAgQXJnNiBhcmc2ID0gZnVuX2RhdGEt PmFyZzY7CiAgICBBcmc3IGFyZzcgPSBmdW5fZGF0YS0+YXJnNzsKCgoKCgogICAgZnVuX2RhdGEt PmxvY2sucmVsZWFzZSAoKTsKIyA3MTQ5ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFs LklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICByZWdpc3Rlcl9u ZXdfdGhyZWFkICgpOwogICAgdHJ5CiAgICAgIHsKICAgICAgICAob2JqZWN0LT4qZnVuX3B0ciko YXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNyk7CiAgICAgIH0KICAgIGNh dGNoIChjb25zdCBzdGQ6OmV4Y2VwdGlvbiAmZXhjKQogICAgICB7CiAgICAgICAgaGFuZGxlX3N0 ZF9leGNlcHRpb24gKGV4Yyk7CiAgICAgIH0KICAgIGNhdGNoICguLi4pCiAgICAgIHsKICAgICAg ICBoYW5kbGVfdW5rbm93bl9leGNlcHRpb24gKCk7CiAgICAgIH07CiAgICBkZXJlZ2lzdGVyX25l d190aHJlYWQgKCk7CgogICAgcmV0dXJuIDA7CiAgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFz cywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUg QXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5h bWUgUmV0VHlwZT4KICBNZW1GdW5EYXRhNzxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUs QXJnNixBcmc3LFJldFR5cGU+OjpBcmdDb2xsZWN0b3I6OkFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1 bl9wdHIpIDoKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVuX3B0cikKICB7fQoKCgogIHRl bXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5h bWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlw ZW5hbWUgQXJnNywgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5FbmNhcHN1bGF0aW9uCiAgTWVtRnVu RGF0YTc8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxSZXRUeXBlPjo6 QXJnQ29sbGVjdG9yOjpjb2xsZWN0X2FyZ3MgKENsYXNzICpvYmplY3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBBcmczIGFyZzMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQgYXJn NCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNSBhcmc1LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc2IGFyZzYsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEFyZzcgYXJnNykKICB7CiAgICByZXR1cm4gbmV3IE1lbUZ1bkRh dGE3PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsdm9pZD4oZnVuX3B0 ciwgb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUs IGFyZzYsIGFyZzcpOwogIH0KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFy ZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1l IEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIFJldFR5cGU+CiAg aW5saW5lCiAgRnVuRW5jYXBzdWxhdGlvbgogIE1lbUZ1bkRhdGE3PENsYXNzLEFyZzEsQXJnMixB cmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6Y29sbGVjdF9h cmdzIChDbGFzcyAmb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB cmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzIgYXJnMiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFyZzUgYXJnNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQXJnNiBhcmc2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc3 IGFyZzcpCiAgewogICAgcmV0dXJuIGNvbGxlY3RfYXJncyAoJm9iamVjdCwgYXJnMSwgYXJnMiwg YXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNyk7CiAgfQoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3Mg Q2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVu YW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5 cGVuYW1lIEFyZzgsIHR5cGVuYW1lIFJldFR5cGU+CiAgTWVtRnVuRGF0YTg8Q2xhc3MsQXJnMSxB cmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LFJldFR5cGU+OjpNZW1GdW5EYXRhOCAo RnVuUHRyIGZ1bl9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3MgKm9iamVjdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzYgYXJnNiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QXJnOCBhcmc4KSA6CiAgICAgICAgICAgICAgICAgIEZ1bkRhdGFCYXNlICgmTWVtRnVuRGF0YTg8 Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LFJldFR5cGU+Ojp0 aHJlYWRfZW50cnlfcG9pbnQpLAogICAgICAgICAgICAgICAgICBmdW5fcHRyIChmdW5fcHRyKSwK ICAgICAgICAgICAgICAgICAgb2JqZWN0IChvYmplY3QpLAogICAgICAgICAgICAgICAgICBhcmcx IChhcmcxKSwKICAgICAgICAgICAgICAgICAgYXJnMiAoYXJnMiksCiAgICAgICAgICAgICAgICAg IGFyZzMgKGFyZzMpLAogICAgICAgICAgICAgICAgICBhcmc0IChhcmc0KSwKICAgICAgICAgICAg ICAgICAgYXJnNSAoYXJnNSksCiAgICAgICAgICAgICAgICAgIGFyZzYgKGFyZzYpLAogICAgICAg ICAgICAgICAgICBhcmc3IChhcmc3KSwKICAgICAgICAgICAgICAgICAgYXJnOCAoYXJnOCkKICB7 fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJn MiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUg QXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgUmV0VHlwZT4KICBN ZW1GdW5EYXRhODxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgs UmV0VHlwZT46Ok1lbUZ1bkRhdGE4IChjb25zdCBNZW1GdW5EYXRhOCAmZnVuX2RhdGEpIDoKICAg ICAgICAgICAgICAgICAgRnVuRGF0YUJhc2UgKGZ1bl9kYXRhKSwKICAgICAgICAgICAgICAgICAg ZnVuX3B0ciAoZnVuX2RhdGEuZnVuX3B0ciksCiAgICAgICAgICAgICAgICAgIG9iamVjdCAoZnVu X2RhdGEub2JqZWN0KSwKICAgICAgICAgICAgICAgICAgYXJnMSAoZnVuX2RhdGEuYXJnMSksCiAg ICAgICAgICAgICAgICAgIGFyZzIgKGZ1bl9kYXRhLmFyZzIpLAogICAgICAgICAgICAgICAgICBh cmczIChmdW5fZGF0YS5hcmczKSwKICAgICAgICAgICAgICAgICAgYXJnNCAoZnVuX2RhdGEuYXJn NCksCiAgICAgICAgICAgICAgICAgIGFyZzUgKGZ1bl9kYXRhLmFyZzUpLAogICAgICAgICAgICAg ICAgICBhcmc2IChmdW5fZGF0YS5hcmc2KSwKICAgICAgICAgICAgICAgICAgYXJnNyAoZnVuX2Rh dGEuYXJnNyksCiAgICAgICAgICAgICAgICAgIGFyZzggKGZ1bl9kYXRhLmFyZzgpCiAge30KCgoK ICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5 cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYs IHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRGF0 YUJhc2UgKgogIE1lbUZ1bkRhdGE4PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2 LEFyZzcsQXJnOCxSZXRUeXBlPjo6Y2xvbmUgKCkgY29uc3QKICB7CiAgICByZXR1cm4gbmV3IE1l bUZ1bkRhdGE4ICgqdGhpcyk7CiAgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5h bWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlw ZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwg dHlwZW5hbWUgUmV0VHlwZT4KICB2b2lkICoKICBNZW1GdW5EYXRhODxDbGFzcyxBcmcxLEFyZzIs QXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2lu dCAodm9pZCAqYXJnKQogIHsKCgoKICAgIHR5cGVkZWYgTWVtRnVuRGF0YTg8Q2xhc3MsQXJnMSxB cmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LFJldFR5cGU+IFRoaXNDbGFzczsKCiAg ICBGdW5FbmNhcHN1bGF0aW9uICpmdW5fZW5jYXBzdWxhdGlvbgogICAgICA9IHJlaW50ZXJwcmV0 X2Nhc3Q8RnVuRW5jYXBzdWxhdGlvbio+KGFyZyk7CiAgICBjb25zdCBUaGlzQ2xhc3MgKmZ1bl9k YXRhCiAgICAgID0gZHluYW1pY19jYXN0PGNvbnN0IFRoaXNDbGFzcyo+IChmdW5fZW5jYXBzdWxh dGlvbi0+ZnVuX2RhdGFfYmFzZSk7CgoKICAgIFRoaXNDbGFzczo6RnVuUHRyIGZ1bl9wdHIgPSBm dW5fZGF0YS0+ZnVuX3B0cjsKICAgIENsYXNzICpvYmplY3QgPSBmdW5fZGF0YS0+b2JqZWN0Owog ICAgQXJnMSBhcmcxID0gZnVuX2RhdGEtPmFyZzE7CiAgICBBcmcyIGFyZzIgPSBmdW5fZGF0YS0+ YXJnMjsKICAgIEFyZzMgYXJnMyA9IGZ1bl9kYXRhLT5hcmczOwogICAgQXJnNCBhcmc0ID0gZnVu X2RhdGEtPmFyZzQ7CiAgICBBcmc1IGFyZzUgPSBmdW5fZGF0YS0+YXJnNTsKICAgIEFyZzYgYXJn NiA9IGZ1bl9kYXRhLT5hcmc2OwogICAgQXJnNyBhcmc3ID0gZnVuX2RhdGEtPmFyZzc7CiAgICBB cmc4IGFyZzggPSBmdW5fZGF0YS0+YXJnODsKCgoKCgogICAgZnVuX2RhdGEtPmxvY2sucmVsZWFz ZSAoKTsKIyA3MzA2ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5j bHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICByZWdpc3Rlcl9uZXdfdGhyZWFkICgp OwogICAgdHJ5CiAgICAgIHsKICAgICAgICAob2JqZWN0LT4qZnVuX3B0cikoYXJnMSwgYXJnMiwg YXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNywgYXJnOCk7CiAgICAgIH0KICAgIGNhdGNoIChj b25zdCBzdGQ6OmV4Y2VwdGlvbiAmZXhjKQogICAgICB7CiAgICAgICAgaGFuZGxlX3N0ZF9leGNl cHRpb24gKGV4Yyk7CiAgICAgIH0KICAgIGNhdGNoICguLi4pCiAgICAgIHsKICAgICAgICBoYW5k bGVfdW5rbm93bl9leGNlcHRpb24gKCk7CiAgICAgIH07CiAgICBkZXJlZ2lzdGVyX25ld190aHJl YWQgKCk7CgogICAgcmV0dXJuIDA7CiAgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlw ZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwg dHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJn OCwgdHlwZW5hbWUgUmV0VHlwZT4KICBNZW1GdW5EYXRhODxDbGFzcyxBcmcxLEFyZzIsQXJnMyxB cmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6QXJnQ29sbGVj dG9yIChGdW5QdHIgZnVuX3B0cikgOgogICAgICAgICAgICAgICAgICBmdW5fcHRyIChmdW5fcHRy KQogIHt9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFt ZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBl bmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4LCB0eXBlbmFtZSBSZXRUeXBl PgogIEZ1bkVuY2Fwc3VsYXRpb24KICBNZW1GdW5EYXRhODxDbGFzcyxBcmcxLEFyZzIsQXJnMyxB cmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6Y29sbGVjdF9h cmdzIChDbGFzcyAqb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB cmcyIGFyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBh cmczLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQgYXJnNCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc1IGFyZzUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzcgYXJnNywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc4IGFyZzgpCiAgewogICAgcmV0dXJuIG5ldyBN ZW1GdW5EYXRhODxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgs dm9pZD4oZnVuX3B0ciwgb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnMSwgYXJnMiwg YXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNywgYXJnOCk7CiAgfQoKCgogIHRlbXBsYXRlIDxj bGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywg dHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJn NywgdHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgUmV0VHlwZT4KICBpbmxpbmUKICBGdW5FbmNhcHN1 bGF0aW9uCiAgTWVtRnVuRGF0YTg8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYs QXJnNyxBcmc4LFJldFR5cGU+OjpBcmdDb2xsZWN0b3I6OmNvbGxlY3RfYXJncyAoQ2xhc3MgJm9i amVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEFyZzYgYXJnNiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQXJnOCBhcmc4KQogIHsKICAgIHJldHVybiBjb2xsZWN0X2FyZ3MgKCZvYmpl Y3QsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsIGFyZzcsIGFyZzgpOwogIH0K CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcy LCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBB cmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4LCB0eXBlbmFtZSBBcmc5LCB0eXBlbmFt ZSBSZXRUeXBlPgogIE1lbUZ1bkRhdGE5PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxB cmc2LEFyZzcsQXJnOCxBcmc5LFJldFR5cGU+OjpNZW1GdW5EYXRhOSAoRnVuUHRyIGZ1bl9wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzcyAqb2JqZWN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmcz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNCBhcmc0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQXJnNiBhcmc2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNyBhcmc3LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnOCBhcmc4LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQXJnOSBhcmc5KSA6CiAgICAgICAgICAgICAgICAgIEZ1bkRhdGFCYXNl ICgmTWVtRnVuRGF0YTk8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxB cmc4LEFyZzksUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCksCiAgICAgICAgICAgICAgICAg IGZ1bl9wdHIgKGZ1bl9wdHIpLAogICAgICAgICAgICAgICAgICBvYmplY3QgKG9iamVjdCksCiAg ICAgICAgICAgICAgICAgIGFyZzEgKGFyZzEpLAogICAgICAgICAgICAgICAgICBhcmcyIChhcmcy KSwKICAgICAgICAgICAgICAgICAgYXJnMyAoYXJnMyksCiAgICAgICAgICAgICAgICAgIGFyZzQg KGFyZzQpLAogICAgICAgICAgICAgICAgICBhcmc1IChhcmc1KSwKICAgICAgICAgICAgICAgICAg YXJnNiAoYXJnNiksCiAgICAgICAgICAgICAgICAgIGFyZzcgKGFyZzcpLAogICAgICAgICAgICAg ICAgICBhcmc4IChhcmc4KSwKICAgICAgICAgICAgICAgICAgYXJnOSAoYXJnOSkKICB7fQoKCgog IHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlw ZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwg dHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgQXJnOSwgdHlwZW5hbWUgUmV0 VHlwZT4KICBNZW1GdW5EYXRhOTxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixB cmc3LEFyZzgsQXJnOSxSZXRUeXBlPjo6TWVtRnVuRGF0YTkgKGNvbnN0IE1lbUZ1bkRhdGE5ICZm dW5fZGF0YSkgOgogICAgICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoZnVuX2RhdGEpLAogICAg ICAgICAgICAgICAgICBmdW5fcHRyIChmdW5fZGF0YS5mdW5fcHRyKSwKICAgICAgICAgICAgICAg ICAgb2JqZWN0IChmdW5fZGF0YS5vYmplY3QpLAogICAgICAgICAgICAgICAgICBhcmcxIChmdW5f ZGF0YS5hcmcxKSwKICAgICAgICAgICAgICAgICAgYXJnMiAoZnVuX2RhdGEuYXJnMiksCiAgICAg ICAgICAgICAgICAgIGFyZzMgKGZ1bl9kYXRhLmFyZzMpLAogICAgICAgICAgICAgICAgICBhcmc0 IChmdW5fZGF0YS5hcmc0KSwKICAgICAgICAgICAgICAgICAgYXJnNSAoZnVuX2RhdGEuYXJnNSks CiAgICAgICAgICAgICAgICAgIGFyZzYgKGZ1bl9kYXRhLmFyZzYpLAogICAgICAgICAgICAgICAg ICBhcmc3IChmdW5fZGF0YS5hcmc3KSwKICAgICAgICAgICAgICAgICAgYXJnOCAoZnVuX2RhdGEu YXJnOCksCiAgICAgICAgICAgICAgICAgIGFyZzkgKGZ1bl9kYXRhLmFyZzkpCiAge30KCgoKICB0 ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVu YW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5 cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIEFyZzksIHR5cGVuYW1lIFJldFR5 cGU+CiAgRnVuRGF0YUJhc2UgKgogIE1lbUZ1bkRhdGE5PENsYXNzLEFyZzEsQXJnMixBcmczLEFy ZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxBcmc5LFJldFR5cGU+OjpjbG9uZSAoKSBjb25zdAogIHsK ICAgIHJldHVybiBuZXcgTWVtRnVuRGF0YTkgKCp0aGlzKTsKICB9CgoKCiAgdGVtcGxhdGUgPGNs YXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0 eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3 LCB0eXBlbmFtZSBBcmc4LCB0eXBlbmFtZSBBcmc5LCB0eXBlbmFtZSBSZXRUeXBlPgogIHZvaWQg KgogIE1lbUZ1bkRhdGE5PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcs QXJnOCxBcmc5LFJldFR5cGU+Ojp0aHJlYWRfZW50cnlfcG9pbnQgKHZvaWQgKmFyZykKICB7CgoK CiAgICB0eXBlZGVmIE1lbUZ1bkRhdGE5PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxB cmc2LEFyZzcsQXJnOCxBcmc5LFJldFR5cGU+IFRoaXNDbGFzczsKCiAgICBGdW5FbmNhcHN1bGF0 aW9uICpmdW5fZW5jYXBzdWxhdGlvbgogICAgICA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuRW5jYXBz dWxhdGlvbio+KGFyZyk7CiAgICBjb25zdCBUaGlzQ2xhc3MgKmZ1bl9kYXRhCiAgICAgID0gZHlu YW1pY19jYXN0PGNvbnN0IFRoaXNDbGFzcyo+IChmdW5fZW5jYXBzdWxhdGlvbi0+ZnVuX2RhdGFf YmFzZSk7CgoKICAgIFRoaXNDbGFzczo6RnVuUHRyIGZ1bl9wdHIgPSBmdW5fZGF0YS0+ZnVuX3B0 cjsKICAgIENsYXNzICpvYmplY3QgPSBmdW5fZGF0YS0+b2JqZWN0OwogICAgQXJnMSBhcmcxID0g ZnVuX2RhdGEtPmFyZzE7CiAgICBBcmcyIGFyZzIgPSBmdW5fZGF0YS0+YXJnMjsKICAgIEFyZzMg YXJnMyA9IGZ1bl9kYXRhLT5hcmczOwogICAgQXJnNCBhcmc0ID0gZnVuX2RhdGEtPmFyZzQ7CiAg ICBBcmc1IGFyZzUgPSBmdW5fZGF0YS0+YXJnNTsKICAgIEFyZzYgYXJnNiA9IGZ1bl9kYXRhLT5h cmc2OwogICAgQXJnNyBhcmc3ID0gZnVuX2RhdGEtPmFyZzc7CiAgICBBcmc4IGFyZzggPSBmdW5f ZGF0YS0+YXJnODsKICAgIEFyZzkgYXJnOSA9IGZ1bl9kYXRhLT5hcmc5OwoKCgoKCiAgICBmdW5f ZGF0YS0+bG9jay5yZWxlYXNlICgpOwojIDc0NjkgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8y L2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgIHJlZ2lz dGVyX25ld190aHJlYWQgKCk7CiAgICB0cnkKICAgICAgewogICAgICAgIChvYmplY3QtPipmdW5f cHRyKShhcmcxLCBhcmcyLCBhcmczLCBhcmc0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBh cmc1LCBhcmc2LCBhcmc3LCBhcmc4LCBhcmc5KTsKICAgICAgfQogICAgY2F0Y2ggKGNvbnN0IHN0 ZDo6ZXhjZXB0aW9uICZleGMpCiAgICAgIHsKICAgICAgICBoYW5kbGVfc3RkX2V4Y2VwdGlvbiAo ZXhjKTsKICAgICAgfQogICAgY2F0Y2ggKC4uLikKICAgICAgewogICAgICAgIGhhbmRsZV91bmtu b3duX2V4Y2VwdGlvbiAoKTsKICAgICAgfTsKICAgIGRlcmVnaXN0ZXJfbmV3X3RocmVhZCAoKTsK CiAgICByZXR1cm4gMDsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBB cmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFt ZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4LCB0eXBl bmFtZSBBcmc5LCB0eXBlbmFtZSBSZXRUeXBlPgogIE1lbUZ1bkRhdGE5PENsYXNzLEFyZzEsQXJn MixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxBcmc5LFJldFR5cGU+OjpBcmdDb2xsZWN0 b3I6OkFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpIDoKICAgICAgICAgICAgICAgICAgZnVu X3B0ciAoZnVuX3B0cikKICB7fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUg QXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5h bWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwgdHlw ZW5hbWUgQXJnOSwgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5FbmNhcHN1bGF0aW9uCiAgTWVtRnVu RGF0YTk8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LEFyZzks UmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6Y29sbGVjdF9hcmdzIChDbGFzcyAqb2JqZWN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNCBhcmc0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNSBhcmc1LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNyBhcmc3LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnOCBhcmc4LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnOSBhcmc5KQogIHsK ICAgIHJldHVybiBuZXcgTWVtRnVuRGF0YTk8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1 LEFyZzYsQXJnNyxBcmc4LEFyZzksdm9pZD4oZnVuX3B0ciwgb2JqZWN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBhcmc3LCBh cmc4LCBhcmc5KTsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcx LCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBB cmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4LCB0eXBlbmFt ZSBBcmc5LCB0eXBlbmFtZSBSZXRUeXBlPgogIGlubGluZQogIEZ1bkVuY2Fwc3VsYXRpb24KICBN ZW1GdW5EYXRhOTxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgs QXJnOSxSZXRUeXBlPjo6QXJnQ29sbGVjdG9yOjpjb2xsZWN0X2FyZ3MgKENsYXNzICZvYmplY3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmczIGFyZzMs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc1IGFyZzUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc2IGFyZzYs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc3IGFyZzcs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc4IGFyZzgs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc5IGFyZzkp CiAgewogICAgcmV0dXJuIGNvbGxlY3RfYXJncyAoJm9iamVjdCwgYXJnMSwgYXJnMiwgYXJnMywg YXJnNCwgYXJnNSwgYXJnNiwgYXJnNywgYXJnOCwgYXJnOSk7CiAgfQoKCgoKICB0ZW1wbGF0ZSA8 Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMs IHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFy ZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIEFyZzksIHR5cGVuYW1lIEFyZzEwLCB0eXBlbmFt ZSBSZXRUeXBlPgogIE1lbUZ1bkRhdGExMDxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUs QXJnNixBcmc3LEFyZzgsQXJnOSxBcmcxMCxSZXRUeXBlPjo6TWVtRnVuRGF0YTEwIChGdW5QdHIg ZnVuX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3MgKm9i amVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQXJnNCBhcmc0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBcmc1IGFyZzUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFyZzYgYXJnNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQXJnNyBhcmc3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc4 IGFyZzgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzkgYXJnOSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMTAgYXJnMTApIDoKICAg ICAgICAgICAgICAgICAgRnVuRGF0YUJhc2UgKCZNZW1GdW5EYXRhMTA8Q2xhc3MsQXJnMSxBcmcy LEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LEFyZzksQXJnMTAsUmV0VHlwZT46OnRocmVh ZF9lbnRyeV9wb2ludCksCiAgICAgICAgICAgICAgICAgIGZ1bl9wdHIgKGZ1bl9wdHIpLAogICAg ICAgICAgICAgICAgICBvYmplY3QgKG9iamVjdCksCiAgICAgICAgICAgICAgICAgIGFyZzEgKGFy ZzEpLAogICAgICAgICAgICAgICAgICBhcmcyIChhcmcyKSwKICAgICAgICAgICAgICAgICAgYXJn MyAoYXJnMyksCiAgICAgICAgICAgICAgICAgIGFyZzQgKGFyZzQpLAogICAgICAgICAgICAgICAg ICBhcmc1IChhcmc1KSwKICAgICAgICAgICAgICAgICAgYXJnNiAoYXJnNiksCiAgICAgICAgICAg ICAgICAgIGFyZzcgKGFyZzcpLAogICAgICAgICAgICAgICAgICBhcmc4IChhcmc4KSwKICAgICAg ICAgICAgICAgICAgYXJnOSAoYXJnOSksCiAgICAgICAgICAgICAgICAgIGFyZzEwIChhcmcxMCkK ICB7fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUg QXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5h bWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgQXJnOSwgdHlw ZW5hbWUgQXJnMTAsIHR5cGVuYW1lIFJldFR5cGU+CiAgTWVtRnVuRGF0YTEwPENsYXNzLEFyZzEs QXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxBcmc5LEFyZzEwLFJldFR5cGU+OjpN ZW1GdW5EYXRhMTAgKGNvbnN0IE1lbUZ1bkRhdGExMCAmZnVuX2RhdGEpIDoKICAgICAgICAgICAg ICAgICAgRnVuRGF0YUJhc2UgKGZ1bl9kYXRhKSwKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAo ZnVuX2RhdGEuZnVuX3B0ciksCiAgICAgICAgICAgICAgICAgIG9iamVjdCAoZnVuX2RhdGEub2Jq ZWN0KSwKICAgICAgICAgICAgICAgICAgYXJnMSAoZnVuX2RhdGEuYXJnMSksCiAgICAgICAgICAg ICAgICAgIGFyZzIgKGZ1bl9kYXRhLmFyZzIpLAogICAgICAgICAgICAgICAgICBhcmczIChmdW5f ZGF0YS5hcmczKSwKICAgICAgICAgICAgICAgICAgYXJnNCAoZnVuX2RhdGEuYXJnNCksCiAgICAg ICAgICAgICAgICAgIGFyZzUgKGZ1bl9kYXRhLmFyZzUpLAogICAgICAgICAgICAgICAgICBhcmc2 IChmdW5fZGF0YS5hcmc2KSwKICAgICAgICAgICAgICAgICAgYXJnNyAoZnVuX2RhdGEuYXJnNyks CiAgICAgICAgICAgICAgICAgIGFyZzggKGZ1bl9kYXRhLmFyZzgpLAogICAgICAgICAgICAgICAg ICBhcmc5IChmdW5fZGF0YS5hcmc5KSwKICAgICAgICAgICAgICAgICAgYXJnMTAoZnVuX2RhdGEu YXJnMTApCiAge30KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5 cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUs IHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIEFy ZzksIHR5cGVuYW1lIEFyZzEwLCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkRhdGFCYXNlICoKICBN ZW1GdW5EYXRhMTA8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4 LEFyZzksQXJnMTAsUmV0VHlwZT46OmNsb25lICgpIGNvbnN0CiAgewogICAgcmV0dXJuIG5ldyBN ZW1GdW5EYXRhMTAgKCp0aGlzKTsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBl bmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0 eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4 LCB0eXBlbmFtZSBBcmc5LCB0eXBlbmFtZSBBcmcxMCwgdHlwZW5hbWUgUmV0VHlwZT4KICB2b2lk ICoKICBNZW1GdW5EYXRhMTA8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJn NyxBcmc4LEFyZzksQXJnMTAsUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCAodm9pZCAqYXJn KQogIHsKCgoKICAgIHR5cGVkZWYgTWVtRnVuRGF0YTEwPENsYXNzLEFyZzEsQXJnMixBcmczLEFy ZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxBcmc5LEFyZzEwLFJldFR5cGU+IFRoaXNDbGFzczsKCiAg ICBGdW5FbmNhcHN1bGF0aW9uICpmdW5fZW5jYXBzdWxhdGlvbgogICAgICA9IHJlaW50ZXJwcmV0 X2Nhc3Q8RnVuRW5jYXBzdWxhdGlvbio+KGFyZyk7CiAgICBjb25zdCBUaGlzQ2xhc3MgKmZ1bl9k YXRhCiAgICAgID0gZHluYW1pY19jYXN0PGNvbnN0IFRoaXNDbGFzcyo+IChmdW5fZW5jYXBzdWxh dGlvbi0+ZnVuX2RhdGFfYmFzZSk7CgoKICAgIFRoaXNDbGFzczo6RnVuUHRyIGZ1bl9wdHIgPSBm dW5fZGF0YS0+ZnVuX3B0cjsKICAgIENsYXNzICpvYmplY3QgPSBmdW5fZGF0YS0+b2JqZWN0Owog ICAgQXJnMSBhcmcxID0gZnVuX2RhdGEtPmFyZzE7CiAgICBBcmcyIGFyZzIgPSBmdW5fZGF0YS0+ YXJnMjsKICAgIEFyZzMgYXJnMyA9IGZ1bl9kYXRhLT5hcmczOwogICAgQXJnNCBhcmc0ID0gZnVu X2RhdGEtPmFyZzQ7CiAgICBBcmc1IGFyZzUgPSBmdW5fZGF0YS0+YXJnNTsKICAgIEFyZzYgYXJn NiA9IGZ1bl9kYXRhLT5hcmc2OwogICAgQXJnNyBhcmc3ID0gZnVuX2RhdGEtPmFyZzc7CiAgICBB cmc4IGFyZzggPSBmdW5fZGF0YS0+YXJnODsKICAgIEFyZzkgYXJnOSA9IGZ1bl9kYXRhLT5hcmc5 OwogICAgQXJnMTAgYXJnMTAgPSBmdW5fZGF0YS0+YXJnMTA7CgoKCgoKICAgIGZ1bl9kYXRhLT5s b2NrLnJlbGVhc2UgKCk7CiMgNzYzOSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5J SS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgcmVnaXN0ZXJfbmV3 X3RocmVhZCAoKTsKICAgIHRyeQogICAgICB7CiAgICAgICAgKG9iamVjdC0+KmZ1bl9wdHIpKGFy ZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFy ZzYsIGFyZzcsIGFyZzgsIGFyZzksIGFyZzEwKTsKICAgICAgfQogICAgY2F0Y2ggKGNvbnN0IHN0 ZDo6ZXhjZXB0aW9uICZleGMpCiAgICAgIHsKICAgICAgICBoYW5kbGVfc3RkX2V4Y2VwdGlvbiAo ZXhjKTsKICAgICAgfQogICAgY2F0Y2ggKC4uLikKICAgICAgewogICAgICAgIGhhbmRsZV91bmtu b3duX2V4Y2VwdGlvbiAoKTsKICAgICAgfTsKICAgIGRlcmVnaXN0ZXJfbmV3X3RocmVhZCAoKTsK CiAgICByZXR1cm4gMDsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBB cmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFt ZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4LCB0eXBl bmFtZSBBcmc5LCB0eXBlbmFtZSBBcmcxMCwgdHlwZW5hbWUgUmV0VHlwZT4KICBNZW1GdW5EYXRh MTA8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LEFyZzksQXJn MTAsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6QXJnQ29sbGVjdG9yIChGdW5QdHIgZnVuX3B0cikg OgogICAgICAgICAgICAgICAgICBmdW5fcHRyIChmdW5fcHRyKQogIHt9CgoKCiAgdGVtcGxhdGUg PGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmcz LCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBB cmc3LCB0eXBlbmFtZSBBcmc4LCB0eXBlbmFtZSBBcmc5LCB0eXBlbmFtZSBBcmcxMCwgdHlwZW5h bWUgUmV0VHlwZT4KICBGdW5FbmNhcHN1bGF0aW9uCiAgTWVtRnVuRGF0YTEwPENsYXNzLEFyZzEs QXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxBcmc5LEFyZzEwLFJldFR5cGU+OjpB cmdDb2xsZWN0b3I6OmNvbGxlY3RfYXJncyAoQ2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMg YXJnMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFyZzYgYXJnNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnOCBhcmc4LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzkgYXJnOSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxMCBhcmcxMCkK ICB7CiAgICByZXR1cm4gbmV3IE1lbUZ1bkRhdGExMDxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0 LEFyZzUsQXJnNixBcmc3LEFyZzgsQXJnOSxBcmcxMCx2b2lkPihmdW5fcHRyLCBvYmplY3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFy ZzYsIGFyZzcsIGFyZzgsIGFyZzksIGFyZzEwKTsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENs YXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFt ZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBl bmFtZSBBcmc4LCB0eXBlbmFtZSBBcmc5LCB0eXBlbmFtZSBBcmcxMCwgdHlwZW5hbWUgUmV0VHlw ZT4KICBpbmxpbmUKICBGdW5FbmNhcHN1bGF0aW9uCiAgTWVtRnVuRGF0YTEwPENsYXNzLEFyZzEs QXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxBcmc5LEFyZzEwLFJldFR5cGU+OjpB cmdDb2xsZWN0b3I6OmNvbGxlY3RfYXJncyAoQ2xhc3MgJm9iamVjdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMg YXJnMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFyZzYgYXJnNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnOCBhcmc4LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzkgYXJnOSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxMCBhcmcxMCkK ICB7CiAgICByZXR1cm4gY29sbGVjdF9hcmdzICgmb2JqZWN0LCBhcmcxLCBhcmcyLCBhcmczLCBh cmc0LCBhcmc1LCBhcmc2LCBhcmc3LCBhcmc4LCBhcmc5LCBhcmcxMCk7CiAgfQoKCgoKICBpbmxp bmUKICBGdW5EYXRhMDx2b2lkPjo6QXJnQ29sbGVjdG9yCiAgZW5jYXBzdWxhdGUgKHZvaWQgKCpm dW5fcHRyKSgpKQogIHsKICAgIHJldHVybiBmdW5fcHRyOwogIH0KCgoKICB0ZW1wbGF0ZSA8dHlw ZW5hbWUgQXJnMT4KICB0eXBlbmFtZSBGdW5EYXRhMTxBcmcxLHZvaWQ+OjpBcmdDb2xsZWN0b3IK ICBlbmNhcHN1bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzEpKQogIHsKICAgIHJldHVybiBmdW5f cHRyOwogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMj4KICB0 eXBlbmFtZSBGdW5EYXRhMjxBcmcxLEFyZzIsdm9pZD46OkFyZ0NvbGxlY3RvcgogIGVuY2Fwc3Vs YXRlICh2b2lkICgqZnVuX3B0cikoQXJnMSwgQXJnMikpCiAgewogICAgcmV0dXJuIGZ1bl9wdHI7 CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFt ZSBBcmczPgogIHR5cGVuYW1lIEZ1bkRhdGEzPEFyZzEsQXJnMixBcmczLHZvaWQ+OjpBcmdDb2xs ZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzEsIEFyZzIsIEFyZzMpKQog IHsKICAgIHJldHVybiBmdW5fcHRyOwogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwg dHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnND4KICB0eXBlbmFtZSBG dW5EYXRhNDxBcmcxLEFyZzIsQXJnMyxBcmc0LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1 bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQpKQogIHsKICAgIHJl dHVybiBmdW5fcHRyOwogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUg QXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNT4KICB0eXBl bmFtZSBGdW5EYXRhNTxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsdm9pZD46OkFyZ0NvbGxlY3Rv cgogIGVuY2Fwc3VsYXRlICh2b2lkICgqZnVuX3B0cikoQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwg QXJnNSkpCiAgewogICAgcmV0dXJuIGZ1bl9wdHI7CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBlbmFt ZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBl bmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2PgogIHR5cGVuYW1lIEZ1bkRhdGE2PEFyZzEsQXJnMixB cmczLEFyZzQsQXJnNSxBcmc2LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9p ZCAoKmZ1bl9wdHIpKEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUsIEFyZzYpKQogIHsKICAg IHJldHVybiBmdW5fcHRyOwogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5h bWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlw ZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNz4KICB0eXBlbmFtZSBGdW5EYXRhNzxBcmcxLEFyZzIs QXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0 ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUsIEFyZzYsIEFy ZzcpKQogIHsKICAgIHJldHVybiBmdW5fcHRyOwogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUg QXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5h bWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOD4KICB0 eXBlbmFtZSBGdW5EYXRhODxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgs dm9pZD46OkFyZ0NvbGxlY3RvcgogIGVuY2Fwc3VsYXRlICh2b2lkICgqZnVuX3B0cikoQXJnMSwg QXJnMiwgQXJnMywgQXJnNCwgQXJnNSwgQXJnNiwgQXJnNywgQXJnOCkpCiAgewogICAgcmV0dXJu IGZ1bl9wdHI7CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcy LCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBB cmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4LCB0eXBlbmFtZSBBcmc5PgogIHR5cGVu YW1lIEZ1bkRhdGE5PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxBcmc5 LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzEs IEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB cmc2LCBBcmc3LCBBcmc4LCBBcmc5KSkKICB7CiAgICByZXR1cm4gZnVuX3B0cjsKICB9CgoKCiAg dGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5 cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcs IHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIEFyZzksIHR5cGVuYW1lIEFyZzEwPgogIHR5cGVuYW1l IEZ1bkRhdGExMDxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsQXJnOSxB cmcxMCx2b2lkPjo6QXJnQ29sbGVjdG9yCiAgZW5jYXBzdWxhdGUgKHZvaWQgKCpmdW5fcHRyKShB cmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQXJnNiwgQXJnNywgQXJnOCwgQXJnOSwgQXJnMTApKQogIHsKICAgIHJldHVybiBmdW5fcHRy OwogIH0KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3M+CiAgdHlwZW5hbWUgTWVtRnVuRGF0YTA8 Q2xhc3Msdm9pZD46OkFyZ0NvbGxlY3RvcgogIGVuY2Fwc3VsYXRlICh2b2lkIChDbGFzczo6KmZ1 bl9wdHIpKCkpCiAgewogICAgcmV0dXJuIGZ1bl9wdHI7CiAgfQojIDc4MjcgIi9ob21lL2Jhbmdl cnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1l bnQuaCIKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzE+CiAgdHlwZW5hbWUg TWVtRnVuRGF0YTE8Q2xhc3MsQXJnMSx2b2lkPjo6QXJnQ29sbGVjdG9yCiAgZW5jYXBzdWxhdGUg KHZvaWQgKENsYXNzOjoqZnVuX3B0cikoQXJnMSkpCiAgewogICAgcmV0dXJuIGZ1bl9wdHI7CiAg fQojIDc4NDUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRl L2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVu YW1lIEFyZzEsIHR5cGVuYW1lIEFyZzI+CiAgdHlwZW5hbWUgTWVtRnVuRGF0YTI8Q2xhc3MsQXJn MSxBcmcyLHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoQ2xhc3M6Oipm dW5fcHRyKShBcmcxLCBBcmcyKSkKICB7CiAgICByZXR1cm4gZnVuX3B0cjsKICB9CiMgNzg2MyAi L2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJl YWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwg dHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMz4KICB0eXBlbmFtZSBNZW1GdW5EYXRhMzxDbGFz cyxBcmcxLEFyZzIsQXJnMyx2b2lkPjo6QXJnQ29sbGVjdG9yCiAgZW5jYXBzdWxhdGUgKHZvaWQg KENsYXNzOjoqZnVuX3B0cikoQXJnMSwgQXJnMiwgQXJnMykpCiAgewogICAgcmV0dXJuIGZ1bl9w dHI7CiAgfQojIDc4ODEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9p bmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3Ms IHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFy ZzQ+CiAgdHlwZW5hbWUgTWVtRnVuRGF0YTQ8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCx2b2lk Pjo6QXJnQ29sbGVjdG9yCiAgZW5jYXBzdWxhdGUgKHZvaWQgKENsYXNzOjoqZnVuX3B0cikoQXJn MSwgQXJnMiwgQXJnMywgQXJnNCkpCiAgewogICAgcmV0dXJuIGZ1bl9wdHI7CiAgfQojIDc4OTkg Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhy ZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEs IHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFy ZzU+CiAgdHlwZW5hbWUgTWVtRnVuRGF0YTU8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1 LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoQ2xhc3M6OipmdW5fcHRy KShBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1KSkKICB7CiAgICByZXR1cm4gZnVuX3B0cjsK ICB9CiMgNzkxNyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1 ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlw ZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwg dHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNj4KICB0eXBlbmFtZSBNZW1GdW5EYXRhNjxDbGFz cyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNix2b2lkPjo6QXJnQ29sbGVjdG9yCiAgZW5j YXBzdWxhdGUgKHZvaWQgKENsYXNzOjoqZnVuX3B0cikoQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwg QXJnNSwgQXJnNikpCiAgewogICAgcmV0dXJuIGZ1bl9wdHI7CiAgfQojIDc5MzUgIi9ob21lL2Jh bmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFn ZW1lbnQuaCIKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1l IEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVu YW1lIEFyZzYsIHR5cGVuYW1lIEFyZzc+CiAgdHlwZW5hbWUgTWVtRnVuRGF0YTc8Q2xhc3MsQXJn MSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyx2b2lkPjo6QXJnQ29sbGVjdG9yCiAgZW5j YXBzdWxhdGUgKHZvaWQgKENsYXNzOjoqZnVuX3B0cikoQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwg QXJnNSwgQXJnNiwgQXJnNykpCiAgewogICAgcmV0dXJuIGZ1bl9wdHI7CiAgfQojIDc5NTMgIi9o b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFk X21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5 cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUs IHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFyZzg+CiAgdHlwZW5hbWUg TWVtRnVuRGF0YTg8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4 LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoQ2xhc3M6OipmdW5fcHRy KShBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2LCBBcmc3LCBBcmc4KSkKICB7CiAg ICByZXR1cm4gZnVuX3B0cjsKICB9CiMgNzk3MSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRl IDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJn MywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUg QXJnNywgdHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgQXJnOT4KICB0eXBlbmFtZSBNZW1GdW5EYXRh OTxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsQXJnOSx2b2lk Pjo6QXJnQ29sbGVjdG9yCiAgZW5jYXBzdWxhdGUgKHZvaWQgKENsYXNzOjoqZnVuX3B0cikoQXJn MSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSwgQXJnNiwgQXJnNywgQXJnOCwgQXJnOSkpCiAgewog ICAgcmV0dXJuIGZ1bl9wdHI7CiAgfQojIDc5ODkgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8y L2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0 ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFy ZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1l IEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIEFyZzksIHR5cGVuYW1lIEFyZzEwPgogIHR5 cGVuYW1lIE1lbUZ1bkRhdGExMDxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixB cmc3LEFyZzgsQXJnOSxBcmcxMCx2b2lkPjo6QXJnQ29sbGVjdG9yCiAgZW5jYXBzdWxhdGUgKHZv aWQgKENsYXNzOjoqZnVuX3B0cikoQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSwgQXJnNiwg QXJnNywgQXJnOCwgQXJnOSwgQXJnMTApKQogIHsKICAgIHJldHVybiBmdW5fcHRyOwogIH0KIyA4 MDA3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNl L3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEZvcndhcmRJdGVyYXRv cj4KICBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8Rm9yd2FyZEl0ZXJhdG9yLEZvcndhcmRJdGVyYXRv cj4gPgogIHNwbGl0X3JhbmdlIChjb25zdCBGb3J3YXJkSXRlcmF0b3IgJmJlZ2luLAogICAgICAg ICAgICAgICBjb25zdCBGb3J3YXJkSXRlcmF0b3IgJmVuZCwKICAgICAgICAgICAgICAgY29uc3Qg dW5zaWduZWQgaW50IG5faW50ZXJ2YWxzKQogIHsKICAgIHR5cGVkZWYgc3RkOjpwYWlyPEZvcndh cmRJdGVyYXRvcixGb3J3YXJkSXRlcmF0b3I+IEl0ZXJhdG9yUGFpcjsKIyA4MDIyICIvaG9tZS9i YW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5h Z2VtZW50LmgiCiAgICBpZiAobl9pbnRlcnZhbHM9PTEpCiAgICAgIHJldHVybiAoc3RkOjp2ZWN0 b3I8SXRlcmF0b3JQYWlyPgogICAgICAgICAgICAgICgxLCBJdGVyYXRvclBhaXIoYmVnaW4sIGVu ZCkpKTsKCgoKICAgIGNvbnN0IHVuc2lnbmVkIGludCBuX2VsZW1lbnRzID0gZGlzdGFuY2UgKGJl Z2luLCBlbmQpOwogICAgY29uc3QgdW5zaWduZWQgaW50IG5fZWxlbWVudHNfcGVyX2ludGVydmFs ID0gbl9lbGVtZW50cyAvIG5faW50ZXJ2YWxzOwogICAgY29uc3QgdW5zaWduZWQgaW50IHJlc2lk dWFsID0gbl9lbGVtZW50cyAlIG5faW50ZXJ2YWxzOwoKICAgIHN0ZDo6dmVjdG9yPEl0ZXJhdG9y UGFpcj4gcmV0dXJuX3ZhbHVlcyAobl9pbnRlcnZhbHMpOwoKICAgIHJldHVybl92YWx1ZXNbMF0u Zmlyc3QgPSBiZWdpbjsKICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxuX2ludGVydmFsczsg KytpKQogICAgICB7CiAgICAgICAgaWYgKGkgIT0gbl9pbnRlcnZhbHMtMSkKICAgICAgICAgIHsK ICAgICAgICAgICAgcmV0dXJuX3ZhbHVlc1tpXS5zZWNvbmQgPSByZXR1cm5fdmFsdWVzW2ldLmZp cnN0OwojIDgwNDggIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs dWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgICAgICAgc3RkOjphZHZhbmNlIChy ZXR1cm5fdmFsdWVzW2ldLnNlY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf Y2FzdDxzaWduZWQgaW50PihuX2VsZW1lbnRzX3Blcl9pbnRlcnZhbCkpOwoKCgoKICAgICAgICAg ICAgaWYgKGkgPCByZXNpZHVhbCkKICAgICAgICAgICAgICArK3JldHVybl92YWx1ZXNbaV0uc2Vj b25kOwoKICAgICAgICAgICAgcmV0dXJuX3ZhbHVlc1tpKzFdLmZpcnN0ID0gcmV0dXJuX3ZhbHVl c1tpXS5zZWNvbmQ7CiAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuX3Zh bHVlc1tpXS5zZWNvbmQgPSBlbmQ7CiAgICAgIH0KICAgIHJldHVybiByZXR1cm5fdmFsdWVzOwog IH0KCgoKfTsKIyAxOCAic291cmNlL2RhdGFfb3V0X2Jhc2UuY2MiIDIKIyAxICIvaG9tZS9iYW5n ZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL21lbW9yeV9jb25zdW1w dGlvbi5oIiAxCiMgODQgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9p bmNsdWRlL2Jhc2UvbWVtb3J5X2NvbnN1bXB0aW9uLmgiCm5hbWVzcGFjZSBNZW1vcnlDb25zdW1w dGlvbgp7CgoKCgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uIChj b25zdCBib29sKTsKCgoKCgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0 aW9uIChjb25zdCBjaGFyKTsKCgoKCgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQgbWVtb3J5X2Nv bnN1bXB0aW9uIChjb25zdCBzaG9ydCBpbnQpOwoKCgoKCgogIGlubGluZQogIHVuc2lnbmVkIGlu dCBtZW1vcnlfY29uc3VtcHRpb24gKGNvbnN0IHNob3J0IHVuc2lnbmVkIGludCk7CgoKCgoKCiAg aW5saW5lCiAgdW5zaWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlvbiAoY29uc3QgaW50KTsKCgoK CgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uIChjb25zdCB1bnNp Z25lZCBpbnQpOwoKCgoKCgogIGlubGluZQogIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3VtcHRp b24gKGNvbnN0IGZsb2F0KTsKCgoKCgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQgbWVtb3J5X2Nv bnN1bXB0aW9uIChjb25zdCBkb3VibGUpOwoKCgoKCgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQg bWVtb3J5X2NvbnN1bXB0aW9uIChjb25zdCBzdGQ6OnN0cmluZyAmcyk7CiMgMjA2ICIvaG9tZS9i YW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL21lbW9yeV9jb25z dW1wdGlvbi5oIgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogIGlubGluZQogIHVuc2lnbmVkIGlu dCBtZW1vcnlfY29uc3VtcHRpb24gKGNvbnN0IHN0ZDo6dmVjdG9yPFQ+ICZ2KTsKIyAyMjUgIi9o b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvbWVtb3J5 X2NvbnN1bXB0aW9uLmgiCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOPgogIGlubGluZQog IHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3VtcHRpb24gKGNvbnN0IFQgKCZ2KVtOXSk7CiMgMjQw ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL21l bW9yeV9jb25zdW1wdGlvbi5oIgogIGlubGluZQogIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3Vt cHRpb24gKGNvbnN0IHN0ZDo6dmVjdG9yPGJvb2w+ICZ2KTsKCgoKCgoKCiAgaW5saW5lCiAgdW5z aWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlvbiAoY29uc3Qgc3RkOjp2ZWN0b3I8aW50PiAmdik7 CgoKCgoKCgogIGlubGluZQogIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3VtcHRpb24gKGNvbnN0 IHN0ZDo6dmVjdG9yPGRvdWJsZT4gJnYpOwoKCgoKCgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQg bWVtb3J5X2NvbnN1bXB0aW9uIChjb25zdCBzdGQ6OnZlY3RvcjxmbG9hdD4gJnYpOwoKCgoKCgoK ICBpbmxpbmUKICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uIChjb25zdCBzdGQ6OnZl Y3RvcjxjaGFyPiAmdik7CgoKCgoKCgogIGlubGluZQogIHVuc2lnbmVkIGludCBtZW1vcnlfY29u c3VtcHRpb24gKGNvbnN0IHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGNoYXI+ICZ2KTsKCgoKCgoKCiAg dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgaW5saW5lCiAgdW5zaWduZWQgaW50IG1lbW9yeV9jb25z dW1wdGlvbiAoY29uc3Qgc3RkOjp2ZWN0b3I8VCAqPiAmdik7CiMgMzExICIvaG9tZS9iYW5nZXJ0 aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL21lbW9yeV9jb25zdW1wdGlv bi5oIgogIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3VtcHRpb24gKGNvbnN0IHN0ZDo6dmVjdG9y PHN0ZDo6c3RyaW5nPiAmdik7CgoKCgoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBLCB0eXBlbmFt ZSBCPgogIGlubGluZQogIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3VtcHRpb24gKGNvbnN0IHN0 ZDo6cGFpcjxBLEI+ICZwKTsKIyAzMzEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwu SUkvYmFzZS9pbmNsdWRlL2Jhc2UvbWVtb3J5X2NvbnN1bXB0aW9uLmgiCiAgdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+CiAgaW5saW5lCiAgdW5zaWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlvbiAoY29u c3QgVCAqIGNvbnN0KTsKIyAzNDcgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkv YmFzZS9pbmNsdWRlL2Jhc2UvbWVtb3J5X2NvbnN1bXB0aW9uLmgiCiAgdGVtcGxhdGUgPHR5cGVu YW1lIFQ+CiAgaW5saW5lCiAgdW5zaWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlvbiAoVCAqIGNv bnN0KTsKIyAzNjYgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs dWRlL2Jhc2UvbWVtb3J5X2NvbnN1bXB0aW9uLmgiCiAgaW5saW5lCiAgdW5zaWduZWQgaW50IG1l bW9yeV9jb25zdW1wdGlvbiAodm9pZCAqIGNvbnN0KTsKIyAzODEgIi9ob21lL2JhbmdlcnRoL3Av ZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvbWVtb3J5X2NvbnN1bXB0aW9uLmgi CiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgaW5saW5lCiAgdW5zaWduZWQgaW50IG1lbW9yeV9j b25zdW1wdGlvbiAoY29uc3QgVCAmdCk7Cn0KCgoKCgpuYW1lc3BhY2UgTWVtb3J5Q29uc3VtcHRp b24KewogIGlubGluZQogIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3VtcHRpb24gKGNvbnN0IGJv b2wpCiAgewogICAgcmV0dXJuIHNpemVvZihib29sKTsKICB9OwoKCgogIGlubGluZQogIHVuc2ln bmVkIGludCBtZW1vcnlfY29uc3VtcHRpb24gKGNvbnN0IGNoYXIpCiAgewogICAgcmV0dXJuIHNp emVvZihjaGFyKTsKICB9OwoKCgogIGlubGluZQogIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3Vt cHRpb24gKGNvbnN0IHNob3J0IGludCkKICB7CiAgICByZXR1cm4gc2l6ZW9mKHNob3J0IGludCk7 CiAgfTsKCgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uIChjb25z dCBzaG9ydCB1bnNpZ25lZCBpbnQpCiAgewogICAgcmV0dXJuIHNpemVvZihzaG9ydCB1bnNpZ25l ZCBpbnQpOwogIH07CgoKCiAgaW5saW5lCiAgdW5zaWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlv biAoY29uc3QgaW50KQogIHsKICAgIHJldHVybiBzaXplb2YoaW50KTsKICB9OwoKCgogIGlubGlu ZQogIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3VtcHRpb24gKGNvbnN0IHVuc2lnbmVkIGludCkK ICB7CiAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGludCk7CiAgfTsKCgoKICBpbmxpbmUKICB1 bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uIChjb25zdCBmbG9hdCkKICB7CiAgICByZXR1 cm4gc2l6ZW9mKGZsb2F0KTsKICB9OwoKCgogIGlubGluZQogIHVuc2lnbmVkIGludCBtZW1vcnlf Y29uc3VtcHRpb24gKGNvbnN0IGRvdWJsZSkKICB7CiAgICByZXR1cm4gc2l6ZW9mKGRvdWJsZSk7 CiAgfTsKCgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uIChjb25z dCBzdGQ6OnN0cmluZyAmcykKICB7CiAgICByZXR1cm4gc2l6ZW9mKHMpICsgcy5sZW5ndGgoKTsK ICB9OwoKCgoKCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICB1bnNpZ25lZCBpbnQgbWVtb3J5 X2NvbnN1bXB0aW9uIChjb25zdCBzdGQ6OnZlY3RvcjxUPiAmdikKICB7CiAgICB1bnNpZ25lZCBp bnQgbWVtID0gc2l6ZW9mKHN0ZDo6dmVjdG9yPFQ+KTsKICAgIGNvbnN0IHVuc2lnbmVkIGludCBu ID0gdi5zaXplKCk7CiAgICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8bjsgKytpKQogICAgICBt ZW0gKz0gbWVtb3J5X2NvbnN1bXB0aW9uKHZbaV0pOwogICAgbWVtICs9ICh2LmNhcGFjaXR5KCkg LSBuKSpzaXplb2YoVCk7CiAgICByZXR1cm4gbWVtOwogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5h bWUgVCwgaW50IE4+CiAgdW5zaWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlvbiAoY29uc3QgVCAo JnYpW05dKQogIHsKICAgIHVuc2lnbmVkIGludCBtZW0gPSAwOwogICAgZm9yICh1bnNpZ25lZCBp bnQgaT0wOyBpPE47ICsraSkKICAgICAgbWVtICs9IG1lbW9yeV9jb25zdW1wdGlvbih2W2ldKTsK ICAgIHJldHVybiBtZW07CiAgfQoKCgogIGlubGluZQogIHVuc2lnbmVkIGludCBtZW1vcnlfY29u c3VtcHRpb24gKGNvbnN0IHN0ZDo6dmVjdG9yPGJvb2w+ICZ2KQogIHsKICAgIHJldHVybiB2LmNh cGFjaXR5KCkgLyA4ICsgc2l6ZW9mKHYpOwogIH0KCgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQg bWVtb3J5X2NvbnN1bXB0aW9uIChjb25zdCBzdGQ6OnZlY3RvcjxpbnQ+ICZ2KQogIHsKICAgIHJl dHVybiAodi5jYXBhY2l0eSgpICogc2l6ZW9mKGludCkgKwogICAgICAgICAgICBzaXplb2Yodikp OwogIH0KCgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uIChjb25z dCBzdGQ6OnZlY3Rvcjxkb3VibGU+ICZ2KQogIHsKICAgIHJldHVybiAodi5jYXBhY2l0eSgpICog c2l6ZW9mKGRvdWJsZSkgKwogICAgICAgICAgICBzaXplb2YodikpOwogIH0KCgoKICBpbmxpbmUK ICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uIChjb25zdCBzdGQ6OnZlY3RvcjxmbG9h dD4gJnYpCiAgewogICAgcmV0dXJuICh2LmNhcGFjaXR5KCkgKiBzaXplb2YoZmxvYXQpICsKICAg ICAgICAgICAgc2l6ZW9mKHYpKTsKICB9CgoKCiAgaW5saW5lCiAgdW5zaWduZWQgaW50IG1lbW9y eV9jb25zdW1wdGlvbiAoY29uc3Qgc3RkOjp2ZWN0b3I8Y2hhcj4gJnYpCiAgewogICAgcmV0dXJu ICh2LmNhcGFjaXR5KCkgKiBzaXplb2YoY2hhcikgKwogICAgICAgICAgICBzaXplb2YodikpOwog IH0KCgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uIChjb25zdCBz dGQ6OnZlY3Rvcjx1bnNpZ25lZCBjaGFyPiAmdikKICB7CiAgICByZXR1cm4gKHYuY2FwYWNpdHko KSAqIHNpemVvZih1bnNpZ25lZCBjaGFyKSArCiAgICAgICAgICAgIHNpemVvZih2KSk7CiAgfQoK CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogIGlubGluZQogIHVuc2lnbmVkIGludCBtZW1vcnlf Y29uc3VtcHRpb24gKGNvbnN0IHN0ZDo6dmVjdG9yPFQgKj4gJnYpCiAgewogICAgcmV0dXJuICh2 LmNhcGFjaXR5KCkgKiBzaXplb2YoVCAqKSArCiAgICAgICAgICAgIHNpemVvZih2KSk7CiAgfQoK CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBLCB0eXBlbmFtZSBCPgogIGlubGluZQogIHVuc2lnbmVk IGludCBtZW1vcnlfY29uc3VtcHRpb24gKGNvbnN0IHN0ZDo6cGFpcjxBLEI+ICZwKQogIHsKICAg IHJldHVybiAobWVtb3J5X2NvbnN1bXB0aW9uKHAuZmlyc3QpICsKICAgICAgICAgICAgbWVtb3J5 X2NvbnN1bXB0aW9uKHAuc2Vjb25kKSk7CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgog IGlubGluZQogIHVuc2lnbmVkIGludAogIG1lbW9yeV9jb25zdW1wdGlvbiAoY29uc3QgVCAqIGNv bnN0KQogIHsKICAgIHJldHVybiBzaXplb2YoVCopOwogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4KICBpbmxpbmUKICB1bnNpZ25lZCBpbnQKICBtZW1vcnlfY29uc3VtcHRpb24gKFQgKiBj b25zdCkKICB7CiAgICByZXR1cm4gc2l6ZW9mKFQqKTsKICB9CgoKCiAgaW5saW5lCiAgdW5zaWdu ZWQgaW50CiAgbWVtb3J5X2NvbnN1bXB0aW9uICh2b2lkICogY29uc3QpCiAgewogICAgcmV0dXJu IHNpemVvZih2b2lkKik7CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogIGlubGluZQog IHVuc2lnbmVkIGludAogIG1lbW9yeV9jb25zdW1wdGlvbiAoY29uc3QgVCAmdCkKICB7CiAgICBy ZXR1cm4gdC5tZW1vcnlfY29uc3VtcHRpb24oKTsKICB9Cn0KIyAxOSAic291cmNlL2RhdGFfb3V0 X2Jhc2UuY2MiIDIKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUv YysrLzMuMy9pb21hbmlwIiAxIDMKIyA0MyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl L2luY2x1ZGUvYysrLzMuMy9pb21hbmlwIiAzCgoKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9mdW5jdGlvbmFsIiAxIDMKIyA1MyAiL2hvbWUvYmFu Z2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9mdW5jdGlvbmFsIiAzCiMgNDcg Ii9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaW9tYW5pcCIg MiAzCgpuYW1lc3BhY2Ugc3RkCnsKICBzdHJ1Y3QgX1Jlc2V0aW9zZmxhZ3MgeyBpb3NfYmFzZTo6 Zm10ZmxhZ3MgX01fbWFzazsgfTsKCiAgaW5saW5lIF9SZXNldGlvc2ZsYWdzCiAgcmVzZXRpb3Nm bGFncyhpb3NfYmFzZTo6Zm10ZmxhZ3MgX19tYXNrKQogIHsKICAgIF9SZXNldGlvc2ZsYWdzIF9f eDsKICAgIF9feC5fTV9tYXNrID0gX19tYXNrOwogICAgcmV0dXJuIF9feDsKICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBiYXNpY19p c3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hh clQsX1RyYWl0cz4mIF9faXMsIF9SZXNldGlvc2ZsYWdzIF9fZikKICAgIHsKICAgICAgX19pcy5z ZXRmKGlvc19iYXNlOjpmbXRmbGFncygwKSwgX19mLl9NX21hc2spOwogICAgICByZXR1cm4gX19p czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChi YXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcywgX1Jlc2V0aW9zZmxhZ3MgX19mKQog ICAgewogICAgICBfX29zLnNldGYoaW9zX2Jhc2U6OmZtdGZsYWdzKDApLCBfX2YuX01fbWFzayk7 CiAgICAgIHJldHVybiBfX29zOwogICAgfQoKCiAgc3RydWN0IF9TZXRpb3NmbGFncyB7IGlvc19i YXNlOjpmbXRmbGFncyBfTV9tYXNrOyB9OwoKICBpbmxpbmUgX1NldGlvc2ZsYWdzCiAgc2V0aW9z ZmxhZ3MoaW9zX2Jhc2U6OmZtdGZsYWdzIF9fbWFzaykKICB7CiAgICBfU2V0aW9zZmxhZ3MgX194 OwogICAgX194Ll9NX21hc2sgPSBfX21hc2s7CiAgICByZXR1cm4gX194OwogIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJhc2ljX2lz dHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFy VCxfVHJhaXRzPiYgX19pcywgX1NldGlvc2ZsYWdzIF9fZikKICAgIHsKICAgICAgX19pcy5zZXRm KF9fZi5fTV9tYXNrKTsKICAgICAgcmV0dXJuIF9faXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9D aGFyVCxfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0 cz4mIF9fb3MsIF9TZXRpb3NmbGFncyBfX2YpCiAgICB7CiAgICAgIF9fb3Muc2V0ZihfX2YuX01f bWFzayk7CiAgICAgIHJldHVybiBfX29zOwogICAgfQoKCiAgc3RydWN0IF9TZXRiYXNlIHsgaW50 IF9NX2Jhc2U7IH07CgogIGlubGluZSBfU2V0YmFzZQogIHNldGJhc2UoaW50IF9fYmFzZSkKICB7 CiAgICBfU2V0YmFzZSBfX3g7CiAgICBfX3guX01fYmFzZSA9IF9fYmFzZTsKICAgIHJldHVybiBf X3g7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJh c2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2lzLCBfU2V0YmFzZSBfX2YpCiAgICB7CiAg ICAgIF9faXMuc2V0ZihfX2YuX01fYmFzZSA9PSA4ID8gaW9zX2Jhc2U6Om9jdCA6CiAgICAgICAg ICAgICAgX19mLl9NX2Jhc2UgPT0gMTAgPyBpb3NfYmFzZTo6ZGVjIDoKICAgICAgICAgICAgICBf X2YuX01fYmFzZSA9PSAxNiA/IGlvc19iYXNlOjpoZXggOgogICAgICAgICAgICAgIGlvc19iYXNl OjpmbXRmbGFncygwKSwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICAgIHJldHVybiBfX2lzOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBp bmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2lj X29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zLCBfU2V0YmFzZSBfX2YpCiAgICB7CiAgICAg IF9fb3Muc2V0ZihfX2YuX01fYmFzZSA9PSA4ID8gaW9zX2Jhc2U6Om9jdCA6CiAgICAgICAgICAg ICAgICBfX2YuX01fYmFzZSA9PSAxMCA/IGlvc19iYXNlOjpkZWMgOgogICAgICAgICAgICAgICAg X19mLl9NX2Jhc2UgPT0gMTYgPyBpb3NfYmFzZTo6aGV4IDoKICAgICAgICAgICAgICAgIGlvc19i YXNlOjpmbXRmbGFncygwKSwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICAgIHJldHVybiBfX29z OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgc3RydWN0IF9TZXRmaWxs IHsgX0NoYXJUIF9NX2M7IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGlu ZSBfU2V0ZmlsbDxfQ2hhclQ+CiAgICBzZXRmaWxsKF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIF9T ZXRmaWxsPF9DaGFyVD4gX194OwogICAgICBfX3guX01fYyA9IF9fYzsKICAgICAgcmV0dXJuIF9f eDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgb3BlcmF0b3I+Pihi YXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19pcywgX1NldGZpbGw8X0NoYXJUPiBfX2Yp CiAgICB7CiAgICAgIF9faXMuZmlsbChfX2YuX01fYyk7CiAgICAgIHJldHVybiBfX2lzOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxp bmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z dHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zLCBfU2V0ZmlsbDxfQ2hhclQ+IF9fZikKICAgIHsK ICAgICAgX19vcy5maWxsKF9fZi5fTV9jKTsKICAgICAgcmV0dXJuIF9fb3M7CiAgICB9CgoKICBz dHJ1Y3QgX1NldHByZWNpc2lvbiB7IGludCBfTV9uOyB9OwoKICBpbmxpbmUgX1NldHByZWNpc2lv bgogIHNldHByZWNpc2lvbihpbnQgX19uKQogIHsKICAgIF9TZXRwcmVjaXNpb24gX194OwogICAg X194Ll9NX24gPSBfX247CiAgICByZXR1cm4gX194OwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJU LF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYg X19pcywgX1NldHByZWNpc2lvbiBfX2YpCiAgICB7CiAgICAgIF9faXMucHJlY2lzaW9uKF9fZi5f TV9uKTsKICAgICAgcmV0dXJuIF9faXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJh aXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3Ms IF9TZXRwcmVjaXNpb24gX19mKQogICAgewogICAgICBfX29zLnByZWNpc2lvbihfX2YuX01fbik7 CiAgICAgIHJldHVybiBfX29zOwogICAgfQoKCiAgc3RydWN0IF9TZXR3IHsgaW50IF9NX247IH07 CgogIGlubGluZSBfU2V0dwogIHNldHcoaW50IF9fbikKICB7CiAgICBfU2V0dyBfX3g7CiAgICBf X3guX01fbiA9IF9fbjsKICAgIHJldHVybiBfX3g7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQs X1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBf X2lzLCBfU2V0dyBfX2YpCiAgICB7CiAgICAgIF9faXMud2lkdGgoX19mLl9NX24pOwogICAgICBy ZXR1cm4gX19pczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgb3Bl cmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcywgX1NldHcgX19mKQog ICAgewogICAgICBfX29zLndpZHRoKF9fZi5fTV9uKTsKICAgICAgcmV0dXJuIF9fb3M7CiAgICB9 CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBfU2V0 ZmlsbDxjaGFyPik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVh bSYsIF9TZXRpb3NmbGFncyk7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwo b3N0cmVhbSYsIF9SZXNldGlvc2ZsYWdzKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3Bl cmF0b3I8PChvc3RyZWFtJiwgX1NldGJhc2UpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBv cGVyYXRvcjw8KG9zdHJlYW0mLCBfU2V0cHJlY2lzaW9uKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0 cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgX1NldHcpOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0 cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIF9TZXRmaWxsPHdjaGFyX3Q+KTsKICBleHRlcm4g dGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBfU2V0aW9zZmxhZ3MpOwog IGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIF9SZXNldGlv c2ZsYWdzKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0m LCBfU2V0YmFzZSk7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3Ry ZWFtJiwgX1NldHByZWNpc2lvbik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRv cjw8KHdvc3RyZWFtJiwgX1NldHcpOwoKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0 b3I+Pihpc3RyZWFtJiwgX1NldGZpbGw8Y2hhcj4pOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFt JiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBfU2V0aW9zZmxhZ3MpOwogIGV4dGVybiB0ZW1wbGF0ZSBp c3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBfUmVzZXRpb3NmbGFncyk7CiAgZXh0ZXJuIHRl bXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIF9TZXRiYXNlKTsKICBleHRlcm4g dGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgX1NldHByZWNpc2lvbik7CiAg ZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIF9TZXR3KTsKICBl eHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCBfU2V0ZmlsbDx3 Y2hhcl90Pik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFt JiwgX1NldGlvc2ZsYWdzKTsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4o d2lzdHJlYW0mLCBfUmVzZXRpb3NmbGFncyk7CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBv cGVyYXRvcj4+KHdpc3RyZWFtJiwgX1NldGJhc2UpOwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVh bSYgb3BlcmF0b3I+Pih3aXN0cmVhbSYsIF9TZXRwcmVjaXNpb24pOwogIGV4dGVybiB0ZW1wbGF0 ZSB3aXN0cmVhbSYgb3BlcmF0b3I+Pih3aXN0cmVhbSYsIF9TZXR3KTsKfQojIDIxICJzb3VyY2Uv ZGF0YV9vdXRfYmFzZS5jYyIgMgoKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl L2luY2x1ZGUvYysrLzMuMy9zZXQiIDEgMwojIDY1ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMu My1wcmUvaW5jbHVkZS9jKysvMy4zL3NldCIgMwoKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9zZXQuaCIgMSAzCiMgNjYgIi9ob21l L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfc2V0Lmgi IDMKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFy ZSA9IGxlc3M8X0tleT4sCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X0tleT4g PgpjbGFzcyBzZXQ7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNz IF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxf QWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBh cmUsX0FsbG9jPiYgX195KTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwg Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3Qgc2V0PF9LZXksX0NvbXBh cmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0Nv bXBhcmUsX0FsbG9jPiYgX195KTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBh cmUsIGNsYXNzIF9BbGxvYz4KY2xhc3Mgc2V0CnsKCiAKICA7CgpwdWJsaWM6CgogIHR5cGVkZWYg X0tleSBrZXlfdHlwZTsKICB0eXBlZGVmIF9LZXkgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21w YXJlIGtleV9jb21wYXJlOwogIHR5cGVkZWYgX0NvbXBhcmUgdmFsdWVfY29tcGFyZTsKcHJpdmF0 ZToKICB0eXBlZGVmIF9SYl90cmVlPGtleV90eXBlLCB2YWx1ZV90eXBlLAogICAgICAgICAgICAg ICAgICBfSWRlbnRpdHk8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlw ZTsKICBfUmVwX3R5cGUgX01fdDsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl Ojpjb25zdF9wb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNv bnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6 Y29uc3RfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6 Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBf dHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5 cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1Jl cF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRl ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJz ZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVf dHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZl cmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUg YWxsb2NhdG9yX3R5cGU7CgoKCiAgc2V0KCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90 eXBlKCkpIHt9CiAgZXhwbGljaXQgc2V0KGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAg ICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAg OiBfTV90KF9fY29tcCwgX19hKSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+ CiAgc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAg IDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV90Lmluc2VydF91 bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0 b3I+CiAgc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwg Y29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9 IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgX01fdC5pbnNlcnRf dW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgc2V0KGNvbnN0IHNldDxfS2V5LF9Db21wYXJl LF9BbGxvYz4mIF9feCkgOiBfTV90KF9feC5fTV90KSB7fQogIHNldDxfS2V5LF9Db21wYXJlLF9B bGxvYz4mIG9wZXJhdG9yPShjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCkK ICB7CiAgICBfTV90ID0gX194Ll9NX3Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgogIGtleV9j b21wYXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgdmFs dWVfY29tcGFyZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9 CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZ2V0 X2FsbG9jYXRvcigpOyB9CgogIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5i ZWdpbigpOyB9CiAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQog IHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsg fQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9 CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW1wdHkoKTsgfQogIHNpemVfdHlw ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5zaXplKCk7IH0KICBzaXplX3R5cGUgbWF4X3Np emUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KICB2b2lkIHN3YXAoc2V0PF9L ZXksX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0KCgogIHBh aXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgcGFp cjx0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yLCBib29sPiBfX3AgPSBfTV90Lmluc2VydF91 bmlxdWUoX194KTsKICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLCBib29sPihfX3AuZmlyc3QsIF9f cC5zZWNvbmQpOwogIH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29u c3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRl cmF0b3IgX1JlcF9pdGVyYXRvcjsKICAgIHJldHVybiBfTV90Lmluc2VydF91bmlxdWUoKF9SZXBf aXRlcmF0b3ImKV9fcG9zaXRpb24sIF9feCk7CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyYXRvcj4KICB2b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy YXRvciBfX2xhc3QpIHsKICAgIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOwog IH0KICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgIHR5cGVkZWYgdHlwZW5h bWUgX1JlcF90eXBlOjppdGVyYXRvciBfUmVwX2l0ZXJhdG9yOwogICAgX01fdC5lcmFzZSgoX1Jl cF9pdGVyYXRvciYpX19wb3NpdGlvbik7CiAgfQogIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlf dHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5lcmFzZShfX3gpOwogIH0KICB2b2lkIGVyYXNl KGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFt ZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIF9SZXBfaXRlcmF0b3I7CiAgICBfTV90LmVyYXNlKChfUmVw X2l0ZXJhdG9yJilfX2ZpcnN0LCAoX1JlcF9pdGVyYXRvciYpX19sYXN0KTsKICB9CiAgdm9pZCBj bGVhcigpIHsgX01fdC5jbGVhcigpOyB9CgoKCiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90 eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LmZpbmQoX194KSA9PSBfTV90LmVuZCgp ID8gMCA6IDE7CiAgfQoKCgogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgeyBy ZXR1cm4gX01fdC5maW5kKF9feCk7IH0KICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90 eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgaXRlcmF0b3IgbG93 ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QubG93ZXJfYm91 bmQoX194KTsKICB9CiAgY29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUm IF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CiAgaXRl cmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3Qu dXBwZXJfYm91bmQoX194KTsKICB9CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qg a2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsK ICB9CiAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUm IF9feCkgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgcGFpcjxjb25z dF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9f eCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiMgMjIwICIv aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3Nl dC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJp ZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3Qgc2V0PF9LMSxfQzEsX0ExPiYsIGNvbnN0IHNldDxf SzEsX0MxLF9BMT4mKTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0sxLCBjbGFzcyBfQzEsIGNsYXNzIF9B MT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcjwgKGNvbnN0IHNldDxfSzEsX0MxLF9BMT4mLCBjb25z dCBzZXQ8X0sxLF9DMSxfQTE+Jik7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0Nv bXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBzZXQ8X0tl eSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0 PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90ID09IF9feS5f TV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxv Yz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4m IF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxv Yz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0 b3IhPShjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJu ICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwg Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3Qgc2V0PF9LZXksX0NvbXBh cmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0Nv bXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNs YXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJh dG9yPD0oY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVy biAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwg Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHNldDxfS2V5LF9Db21w YXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXQ8X0tleSxf Q29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQg c3dhcChzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgc2V0 PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQoKfQojIDY4 ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL3NldCIgMiAz CiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRz L3N0bF9tdWx0aXNldC5oIiAxIDMKIyA2NiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl L2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tdWx0aXNldC5oIiAzCm5hbWVzcGFjZSBzdGQKewoK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUgPSBsZXNzPF9LZXk+LAogICAg ICAgICAgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPF9LZXk+ID4KY2xhc3MgbXVsdGlzZXQ7Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5l IGJvb2wgb3BlcmF0b3I9PShjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9f eCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9B bGxvYz4mIF9feSk7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNz IF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBh cmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tl eSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpOwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9D b21wYXJlLCBjbGFzcyBfQWxsb2M+CmNsYXNzIG11bHRpc2V0CnsKCiAKICA7CgpwdWJsaWM6CgoK CiAgdHlwZWRlZiBfS2V5IGtleV90eXBlOwogIHR5cGVkZWYgX0tleSB2YWx1ZV90eXBlOwogIHR5 cGVkZWYgX0NvbXBhcmUga2V5X2NvbXBhcmU7CiAgdHlwZWRlZiBfQ29tcGFyZSB2YWx1ZV9jb21w YXJlOwpwcml2YXRlOgogIHR5cGVkZWYgX1JiX3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAg ICAgICAgICAgICAgICAgIF9JZGVudGl0eTx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxv Yz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBfTV90OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFt ZSBfUmVwX3R5cGU6OmNvbnN0X3BvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9S ZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUg X1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUg X1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlw ZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVu YW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB0 eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRv cjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBj b25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXpl X3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNl X3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxv Y2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCgoKICBtdWx0aXNldCgpIDogX01fdChfQ29tcGFy ZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQogIGV4cGxpY2l0IG11bHRpc2V0KGNvbnN0IF9Db21w YXJlJiBfX2NvbXAsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9f YSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHt9CgogIHRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtdWx0aXNldChfSW5wdXRJdGVyYXRvciBfX2Zp cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2Nh dG9yX3R5cGUoKSkKICAgIHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQoK ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbXVsdGlzZXQoX0lucHV0SXRlcmF0 b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIGNvbnN0IF9Db21w YXJlJiBfX2NvbXAsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9j YXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgX01fdC5pbnNlcnRfZXF1YWwo X19maXJzdCwgX19sYXN0KTsgfQoKICBtdWx0aXNldChjb25zdCBtdWx0aXNldDxfS2V5LF9Db21w YXJlLF9BbGxvYz4mIF9feCkgOiBfTV90KF9feC5fTV90KSB7fQoKICBtdWx0aXNldDxfS2V5LF9D b21wYXJlLF9BbGxvYz4mCiAgb3BlcmF0b3I9KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUs X0FsbG9jPiYgX194KSB7CiAgICBfTV90ID0gX194Ll9NX3Q7CiAgICByZXR1cm4gKnRoaXM7CiAg fQoKCgogIGtleV9jb21wYXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29t cCgpOyB9CiAgdmFsdWVfY29tcGFyZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5r ZXlfY29tcCgpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0 dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CgogIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyBy ZXR1cm4gX01fdC5iZWdpbigpOyB9CiAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01f dC5lbmQoKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01f dC5yYmVnaW4oKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIF9N X3QucmVuZCgpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW1wdHkoKTsg fQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5zaXplKCk7IH0KICBzaXpl X3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KICB2b2lk IHN3YXAobXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01fdC5zd2FwKF9f eC5fTV90KTsgfQoKCiAgaXRlcmF0b3IgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewog ICAgcmV0dXJuIF9NX3QuaW5zZXJ0X2VxdWFsKF9feCk7CiAgfQogIGl0ZXJhdG9yIGluc2VydChp dGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsKICAgIHR5cGVkZWYg dHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBfUmVwX2l0ZXJhdG9yOwogICAgcmV0dXJuIF9N X3QuaW5zZXJ0X2VxdWFsKChfUmVwX2l0ZXJhdG9yJilfX3Bvc2l0aW9uLCBfX3gpOwogIH0KCiAg dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJh dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRfZXF1 YWwoX19maXJzdCwgX19sYXN0KTsKICB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9u KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVyYXRv cjsKICAgIF9NX3QuZXJhc2UoKF9SZXBfaXRlcmF0b3ImKV9fcG9zaXRpb24pOwogIH0KICBzaXpl X3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QuZXJhc2Uo X194KTsKICB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3Qp IHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBfUmVwX2l0ZXJhdG9y OwogICAgX01fdC5lcmFzZSgoX1JlcF9pdGVyYXRvciYpX19maXJzdCwgKF9SZXBfaXRlcmF0b3Im KV9fbGFzdCk7CiAgfQogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIoKTsgfQoKCgogIHNpemVf dHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmNvdW50 KF9feCk7IH0KCgoKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJu IF9NX3QuZmluZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYg X194KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQogIGl0ZXJhdG9yIGxvd2VyX2Jv dW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9f eCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gp IGNvbnN0IHsKICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7CiAgfQogIGl0ZXJhdG9y IHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90LnVwcGVy X2JvdW5kKF9feCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90 eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7CiAgfQog IHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gp IHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQogIHBhaXI8Y29uc3RfaXRl cmF0b3IsY29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNv bnN0IHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQojIDIyMSAiL2hvbWUv YmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tdWx0aXNl dC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJp ZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgbXVsdGlzZXQ8X0sxLF9DMSxfQTE+JiwKICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXNldDxfSzEsX0MxLF9BMT4mKTsKICB0ZW1w bGF0ZSA8Y2xhc3MgX0sxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBvcGVy YXRvcjwgKGNvbnN0IG11bHRpc2V0PF9LMSxfQzEsX0ExPiYsCiAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBtdWx0aXNldDxfSzEsX0MxLF9BMT4mKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBf S2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09 KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAg cmV0dXJuIF9feC5fTV90ID09IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11 bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAg Y29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194 Ll9NX3QgPCBfX3kuX01fdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJl LCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgbXVsdGlzZXQ8X0tl eSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVs dGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195 KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+ CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxv Yz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBh cmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNz IF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9y PD0oY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsK ICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0Nv bXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBtdWx0aXNl dDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA8 IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Fs bG9jPgppbmxpbmUgdm9pZCBzd2FwKG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194 LAogICAgICAgICAgICAgICAgIG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7 CiAgX194LnN3YXAoX195KTsKfQoKfQojIDY5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1w cmUvaW5jbHVkZS9jKysvMy4zL3NldCIgMiAzCiMgMjQgInNvdXJjZS9kYXRhX291dF9iYXNlLmNj IiAyCiMgMzMgInNvdXJjZS9kYXRhX291dF9iYXNlLmNjIgp0ZW1wbGF0ZSA8aW50IGRpbSwgaW50 IHNwYWNlZGltPgpjb25zdCB1bnNpZ25lZCBpbnQgRGF0YU91dEJhc2U6OlBhdGNoPGRpbSxzcGFj ZWRpbT46Om5vX25laWdoYm9yOwoKCnRlbXBsYXRlIDxpbnQgZGltLCBpbnQgc3BhY2VkaW0+CkRh dGFPdXRCYXNlOjpQYXRjaDxkaW0sc3BhY2VkaW0+OjpQYXRjaCAoKSA6CiAgICAgICAgICAgICAg ICBwYXRjaF9pbmRleChub19uZWlnaGJvciksCiAgICAgICAgICAgICAgICBuX3N1YmRpdmlzaW9u cyAoMSkKCgoKCgp7CiAgZm9yICh1bnNpZ25lZCBpbnQgaT0wO2k8R2VvbWV0cnlJbmZvPGRpbT46 OmZhY2VzX3Blcl9jZWxsOysraSkKICAgIG5laWdoYm9yc1tpXSA9IG5vX25laWdoYm9yOwoKICB7 IH07CiAgeyB9Owp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbSwgaW50IHNwYWNlZGltPgp1bnNpZ25l ZCBpbnQKRGF0YU91dEJhc2U6OlBhdGNoPGRpbSxzcGFjZWRpbT46Om1lbW9yeV9jb25zdW1wdGlv biAoKSBjb25zdAp7CiAgcmV0dXJuIChzaXplb2YodmVydGljZXMpIC8gc2l6ZW9mKHZlcnRpY2Vz WzBdKSAqCiAgICAgICAgICBNZW1vcnlDb25zdW1wdGlvbjo6bWVtb3J5X2NvbnN1bXB0aW9uKHZl cnRpY2VzWzBdKQogICAgICAgICAgKwogICAgICAgICAgTWVtb3J5Q29uc3VtcHRpb246Om1lbW9y eV9jb25zdW1wdGlvbihuX3N1YmRpdmlzaW9ucykKICAgICAgICAgICsKICAgICAgICAgIE1lbW9y eUNvbnN1bXB0aW9uOjptZW1vcnlfY29uc3VtcHRpb24oZGF0YSkpOwp9OwoKCgp0ZW1wbGF0ZSA8 aW50IGRpbSwgaW50IHNwYWNlZGltPgp2b2lkIERhdGFPdXRCYXNlOjp3cml0ZV91Y2QgKGNvbnN0 IHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPiAmcGF0Y2hlcywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gJmRhdGFfbmFt ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVWNkRmxhZ3MgJmZsYWdzLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbSAmb3V0KQp7CiAgeyBpZiAo X19idWlsdGluX2V4cGVjdCghKG91dCksIGZhbHNlKSkgZGVhbF9JSV9leGNlcHRpb25zOjppbnRl cm5hbHM6OiBpc3N1ZV9lcnJvcl90aHJvdyAoInNvdXJjZS9kYXRhX291dF9iYXNlLmNjIiwgNzYs IF9fUFJFVFRZX0ZVTkNUSU9OX18sICJvdXQiLCAiRXhjSU8oKSIsIEV4Y0lPKCkpOyB9OwoKICB7 IH07CgogIGNvbnN0IHVuc2lnbmVkIGludCBuX2RhdGFfc2V0cyA9IGRhdGFfbmFtZXMuc2l6ZSgp OwoKCgogIHVuc2lnbmVkIGludCBuX2NlbGxzID0gMCwKICAgICAgICAgICAgICAgbl9ub2RlcyA9 IDA7CiAgZm9yICh0eXBlbmFtZSBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ID46OmNv bnN0X2l0ZXJhdG9yIHBhdGNoPXBhdGNoZXMuYmVnaW4oKTsKICAgICAgIHBhdGNoIT1wYXRjaGVz LmVuZCgpOyArK3BhdGNoKQogICAgc3dpdGNoIChkaW0pCiAgICAgIHsKICAgICAgICBjYXNlIDE6 CiAgICAgICAgICAgICAgbl9jZWxscyArPSBwYXRjaC0+bl9zdWJkaXZpc2lvbnM7CiAgICAgICAg ICAgICAgbl9ub2RlcyArPSBwYXRjaC0+bl9zdWJkaXZpc2lvbnMrMTsKICAgICAgICAgICAgICBi cmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgbl9jZWxscyArPSBwYXRjaC0+bl9z dWJkaXZpc2lvbnMgKgogICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2gtPm5fc3ViZGl2aXNp b25zOwogICAgICAgICAgICAgIG5fbm9kZXMgKz0gKHBhdGNoLT5uX3N1YmRpdmlzaW9ucysxKSAq CiAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPm5fc3ViZGl2aXNpb25zKzEpOwogICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICBuX2NlbGxzICs9 IHBhdGNoLT5uX3N1YmRpdmlzaW9ucyAqCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaC0+ bl9zdWJkaXZpc2lvbnMgKgogICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2gtPm5fc3ViZGl2 aXNpb25zOwogICAgICAgICAgICAgIG5fbm9kZXMgKz0gKHBhdGNoLT5uX3N1YmRpdmlzaW9ucysx KSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPm5fc3ViZGl2aXNpb25zKzEpICoK ICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+bl9zdWJkaXZpc2lvbnMrMSk7CiAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICB7IH07CiAgICAg IH07CgoKCiAgaWYgKGZsYWdzLndyaXRlX3ByZWFtYmxlKQogICAgewogICAgICBzdGQ6OnRpbWVf dCB0aW1lMT0gc3RkOjp0aW1lICgwKTsKICAgICAgc3RkOjp0bSAqdGltZSA9IHN0ZDo6bG9jYWx0 aW1lKCZ0aW1lMSk7CiAgICAgIG91dCA8PCAiIyBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSB0 aGUgZGVhbC5JSSBsaWJyYXJ5LiIgPDwgc3RkOjplbmRsCiAgICAgICAgICA8PCAiIyBEYXRlID0g ICIKICAgICAgICAgIDw8IHRpbWUtPnRtX3llYXIrMTkwMCA8PCAiLyIKICAgICAgICAgIDw8IHRp bWUtPnRtX21vbisxIDw8ICIvIgogICAgICAgICAgPDwgdGltZS0+dG1fbWRheSA8PCBzdGQ6OmVu ZGwKICAgICAgICAgIDw8ICIjIFRpbWUgPSAgIgogICAgICAgICAgPDwgdGltZS0+dG1faG91ciA8 PCAiOiIKICAgICAgICAgIDw8IHN0ZDo6c2V0dygyKSA8PCB0aW1lLT50bV9taW4gPDwgIjoiCiAg ICAgICAgICA8PCBzdGQ6OnNldHcoMikgPDwgdGltZS0+dG1fc2VjIDw8IHN0ZDo6ZW5kbAogICAg ICAgICAgPDwgIiMiIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgPDwgIiMgRm9yIGEgZGVzY3JpcHRp b24gb2YgdGhlIFVDRCBmb3JtYXQgc2VlIHRoZSBBVlMgRGV2ZWxvcGVyJ3MgZ3VpZGUuIgogICAg ICAgICAgPDwgc3RkOjplbmRsCiAgICAgICAgICA8PCAiIyIgPDwgc3RkOjplbmRsOwogICAgfTsK CgogIG91dCA8PCBuX25vZGVzIDw8ICcgJwogICAgICA8PCBuX2NlbGxzIDw8ICcgJwogICAgICA8 PCBuX2RhdGFfc2V0cyA8PCAnICcKICAgICAgPDwgMCA8PCAnICcKICAgICAgPDwgMAogICAgICA8 PCBzdGQ6OmVuZGw7CiMgMTQ5ICJzb3VyY2UvZGF0YV9vdXRfYmFzZS5jYyIKICBpZiAodHJ1ZSkK ICAgIHsKICAgICAgdW5zaWduZWQgaW50IHByZXNlbnRfbm9kZSA9IDE7CgogICAgICBmb3IgKHR5 cGVuYW1lIHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPjo6Y29uc3RfaXRlcmF0b3Ig cGF0Y2g9cGF0Y2hlcy5iZWdpbigpOwogICAgICAgICAgIHBhdGNoIT1wYXRjaGVzLmVuZCgpOyAr K3BhdGNoKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBuX3N1YmRpdmlz aW9ucyA9IHBhdGNoLT5uX3N1YmRpdmlzaW9uczsKCgoKICAgICAgICAgIHN3aXRjaCAoZGltKQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2ks ICsrcHJlc2VudF9ub2RlKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg b3V0IDw8IHByZXNlbnRfbm9kZQogICAgICAgICAgICAgICAgICAgICAgICA8PCAiICAgIjsKCiAg ICAgICAgICAgICAgICAgICAgY29uc3QgUG9pbnQ8c3BhY2VkaW0+CiAgICAgICAgICAgICAgICAg ICAgICBub2RlID0gKChwYXRjaC0+dmVydGljZXNbMV0gKiBpIC8gbl9zdWJkaXZpc2lvbnMpICsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1swXSAqIChuX3N1 YmRpdmlzaW9ucy1pKSAvIG5fc3ViZGl2aXNpb25zKSk7CgoKICAgICAgICAgICAgICAgICAgICBm b3IgKHVuc2lnbmVkIGludCBpPTA7IGk8c3BhY2VkaW07ICsraSkKICAgICAgICAgICAgICAgICAg ICAgIG91dCA8PCBub2RlKGkpIDw8ICcgJzsKCiAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp Z25lZCBpbnQgaT1zcGFjZWRpbTsgaTwzOyArK2kpCiAgICAgICAgICAgICAgICAgICAgICBvdXQg PDwgIjAgIjsKICAgICAgICAgICAgICAgICAgICBvdXQgPDwgc3RkOjplbmRsOwogICAgICAgICAg ICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH07CgogICAg ICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKHVu c2lnbmVkIGludCBpPTA7IGk8bl9zdWJkaXZpc2lvbnMrMTsgKytpKQogICAgICAgICAgICAgICAg ICBmb3IgKHVuc2lnbmVkIGludCBqPTA7IGo8bl9zdWJkaXZpc2lvbnMrMTsgKytqKQogICAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4X2ZyYWMg PSBpICogMS4vbl9zdWJkaXZpc2lvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgeV9mcmFjID0gaiAqIDEuL25fc3ViZGl2aXNpb25zOwoKICAgICAgICAgICAgICAgICAgICAg IG91dCA8PCBwcmVzZW50X25vZGUKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiICAgIjsK CgoKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBvaW50PHNwYWNlZGltPgogICAgICAgICAg ICAgICAgICAgICAgICBub2RlID0gKCgocGF0Y2gtPnZlcnRpY2VzWzFdICogeF9mcmFjKSArCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNbMF0gKiAoMS14 X2ZyYWMpKSkgKiAoMS15X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo KHBhdGNoLT52ZXJ0aWNlc1syXSAqIHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzNdICogKDEteF9mcmFjKSkpICogeV9mcmFjKTsKCgog ICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPHNwYWNlZGltOyAr K2kpCiAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBub2RlKGkpIDw8ICcgJzsKCiAgICAg ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpPXNwYWNlZGltOyBpPDM7ICsraSkK ICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIwICI7CiAgICAgICAgICAgICAgICAgICAg ICBvdXQgPDwgc3RkOjplbmRsOwoKICAgICAgICAgICAgICAgICAgICAgICsrcHJlc2VudF9ub2Rl OwogICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgICAgfTsKCiAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2kpCiAg ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGo9MDsgajxuX3N1YmRpdmlzaW9ucysx OyArK2opCiAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaz0wOyBrPG5fc3Vi ZGl2aXNpb25zKzE7ICsraykKICAgICAgICAgICAgICAgICAgICAgIHsKCgoKCgoKCiAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4X2ZyYWMgPSBpICogMS4vbl9zdWJkaXZpc2lv bnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5X2ZyYWMgPSBrICogMS4v bl9zdWJkaXZpc2lvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6X2Zy YWMgPSBqICogMS4vbl9zdWJkaXZpc2lvbnM7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgIG91 dCA8PCBwcmVzZW50X25vZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIgICAiOwoK CgogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQb2ludDxzcGFjZWRpbT4KICAgICAgICAg ICAgICAgICAgICAgICAgICBub2RlID0gKCgoKHBhdGNoLT52ZXJ0aWNlc1sxXSAqIHhfZnJhYykg KwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzBd ICogKDEteF9mcmFjKSkpICogKDEteV9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKChwYXRjaC0+dmVydGljZXNbMl0gKiB4X2ZyYWMpICsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1szXSAqICgxLXhfZnJhYykpKSAq IHlfZnJhYykgKiAoMS16X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICgoKHBhdGNoLT52ZXJ0aWNlc1s1XSAqIHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzRdICogKDEteF9mcmFjKSkpICogKDEteV9m cmFjKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwYXRjaC0+dmVydGlj ZXNbNl0gKiB4X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBh dGNoLT52ZXJ0aWNlc1s3XSAqICgxLXhfZnJhYykpKSAqIHlfZnJhYykgKiB6X2ZyYWMpOwoKCiAg ICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxzcGFjZWRpbTsg KytpKQogICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBub2RlKGkpIDw8ICcgJzsKCiAg ICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9c3BhY2VkaW07IGk8Mzsg KytpKQogICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiMCAiOwogICAgICAgICAgICAg ICAgICAgICAgICBvdXQgPDwgc3RkOjplbmRsOwoKICAgICAgICAgICAgICAgICAgICAgICAgKytw cmVzZW50X25vZGU7CiAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg ICAgICAgICAgeyB9OwogICAgICAgICAgICB9OwogICAgICAgIH07CgoKICAgICAgeyB9OwoKICAg IH07CgoKCgogIGlmICh0cnVlKQogICAgewogICAgICB1bnNpZ25lZCBpbnQgcHJlc2VudF9jZWxs ID0gMTsKICAgICAgdW5zaWduZWQgaW50IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCA9IDA7CgogICAg ICBmb3IgKHR5cGVuYW1lIHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPjo6Y29uc3Rf aXRlcmF0b3IgcGF0Y2g9cGF0Y2hlcy5iZWdpbigpOwogICAgICAgICAgIHBhdGNoIT1wYXRjaGVz LmVuZCgpOyArK3BhdGNoKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBu X3N1YmRpdmlzaW9ucyA9IHBhdGNoLT5uX3N1YmRpdmlzaW9uczsKCgoKICAgICAgICAgIHN3aXRj aCAoZGltKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9u czsgKytpLCArK3ByZXNlbnRfY2VsbCkKICAgICAgICAgICAgICAgICAgb3V0IDw8IHByZXNlbnRf Y2VsbAogICAgICAgICAgICAgICAgICAgICAgPDwgIiAwICBsaW5lICAiCiAgICAgICAgICAgICAg ICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2graSsxIDw8ICcgJwogICAgICAgICAgICAg ICAgICAgICAgPDwgZmlyc3RfdmVydGV4X29mX3BhdGNoK2krMSsxIDw8IHN0ZDo6ZW5kbDsKICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgIGNhc2Ug MjoKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpPTA7 IGk8bl9zdWJkaXZpc2lvbnM7ICsraSkKICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp bnQgaj0wOyBqPG5fc3ViZGl2aXNpb25zOyArK2opCiAgICAgICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAgICAgb3V0IDw8IHByZXNlbnRfY2VsbAogICAgICAgICAgICAgICAgICAg ICAgICAgIDw8ICIgMCAgcXVhZCAgIgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0 X3ZlcnRleF9vZl9wYXRjaCtpKihuX3N1YmRpdmlzaW9ucysxKStqKzEgPDwgJyAnCiAgICAgICAg ICAgICAgICAgICAgICAgICAgPDwgZmlyc3RfdmVydGV4X29mX3BhdGNoKyhpKzEpKihuX3N1YmRp dmlzaW9ucysxKStqKzEgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgZmlyc3Rf dmVydGV4X29mX3BhdGNoKyhpKzEpKihuX3N1YmRpdmlzaW9ucysxKStqKzErMSA8PCAnICcKICAg ICAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2graSoobl9zdWJk aXZpc2lvbnMrMSkraisxKzEKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7 CiAgICAgICAgICAgICAgICAgICAgICArK3ByZXNlbnRfY2VsbDsKICAgICAgICAgICAgICAgICAg ICB9OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAg ICAgY2FzZSAzOgogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg aW50IGk9MDsgaTxuX3N1YmRpdmlzaW9uczsgKytpKQogICAgICAgICAgICAgICAgICBmb3IgKHVu c2lnbmVkIGludCBqPTA7IGo8bl9zdWJkaXZpc2lvbnM7ICsraikKICAgICAgICAgICAgICAgICAg ICBmb3IgKHVuc2lnbmVkIGludCBrPTA7IGs8bl9zdWJkaXZpc2lvbnM7ICsraykKICAgICAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHByZXNlbnRfY2Vs bAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiAwICBoZXggICIKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2grKGkqKG5fc3ViZGl2aXNp b25zKzEpK2ogKSoobl9zdWJkaXZpc2lvbnMrMSkrayArMSA8PCAnICcKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCsoKGkrMSkqKG5fc3ViZGl2aXNp b25zKzEpK2ogKSoobl9zdWJkaXZpc2lvbnMrMSkrayArMSA8PCAnICcKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCsoKGkrMSkqKG5fc3ViZGl2aXNp b25zKzEpK2orMSkqKG5fc3ViZGl2aXNpb25zKzEpK2sgKzEgPDwgJyAnCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2grKGkqKG5fc3ViZGl2aXNpb25z KzEpK2orMSApKihuX3N1YmRpdmlzaW9ucysxKStrICsxIDw8ICcgJwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgPDwgZmlyc3RfdmVydGV4X29mX3BhdGNoKyhpKihuX3N1YmRpdmlzaW9ucysx KStqICkqKG5fc3ViZGl2aXNpb25zKzEpK2srMSsxIDw8ICcgJwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgPDwgZmlyc3RfdmVydGV4X29mX3BhdGNoKygoaSsxKSoobl9zdWJkaXZpc2lvbnMr MSkraiApKihuX3N1YmRpdmlzaW9ucysxKStrKzErMSA8PCAnICcKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCsoKGkrMSkqKG5fc3ViZGl2aXNpb25z KzEpK2orMSkqKG5fc3ViZGl2aXNpb25zKzEpK2srMSsxIDw8ICcgJwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgPDwgZmlyc3RfdmVydGV4X29mX3BhdGNoKyhpKihuX3N1YmRpdmlzaW9ucysx KStqKzEgKSoobl9zdWJkaXZpc2lvbnMrMSkraysxKzEgPDwgJyAnCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICAgICAgICAgICAgICsrcHJlc2Vu dF9jZWxsOwogICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg ICAgeyB9OwogICAgICAgICAgICB9OwoKCgoKICAgICAgICAgIHN3aXRjaCAoZGltKQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgIGZpcnN0X3Zl cnRleF9vZl9wYXRjaCArPSBuX3N1YmRpdmlzaW9ucysxOwogICAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICBmaXJzdF92ZXJ0 ZXhfb2ZfcGF0Y2ggKz0gKG5fc3ViZGl2aXNpb25zKzEpICoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKG5fc3ViZGl2aXNpb25zKzEpOwogICAgICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICBm aXJzdF92ZXJ0ZXhfb2ZfcGF0Y2ggKz0gKG5fc3ViZGl2aXNpb25zKzEpICoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5fc3ViZGl2aXNpb25zKzEpICoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5fc3ViZGl2aXNpb25z KzEpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGRlZmF1bHQ6CiAg ICAgICAgICAgICAgICAgICAgeyB9OwogICAgICAgICAgICB9OwogICAgICAgIH07CiAgICAgIG91 dCA8PCBzdGQ6OmVuZGw7CgoKICAgICAgeyB9OwoKICAgIH07CgoKCgogIGlmIChuX2RhdGFfc2V0 cyAhPSAwKQogICAgewogICAgICBvdXQgPDwgbl9kYXRhX3NldHMgPDwgIiAgICAiOwogICAgICBm b3IgKHVuc2lnbmVkIGludCBpPTA7IGk8bl9kYXRhX3NldHM7ICsraSkKICAgICAgICBvdXQgPDwg MSA8PCAnICc7CgogICAgICBvdXQgPDwgc3RkOjplbmRsOwoKICAgICAgZm9yICh1bnNpZ25lZCBp bnQgZGF0YV9zZXQ9MDsgZGF0YV9zZXQ8bl9kYXRhX3NldHM7ICsrZGF0YV9zZXQpCiAgICAgICAg b3V0IDw8IGRhdGFfbmFtZXNbZGF0YV9zZXRdCiAgICAgICAgICAgIDw8ICIsZGltZW5zaW9ubGVz cyIKICAgICAgICAgICAgPDwgc3RkOjplbmRsOwoKCgogICAgICB1bnNpZ25lZCBpbnQgcHJlc2Vu dF9ub2RlID0gMTsKICAgICAgZm9yICh0eXBlbmFtZSBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3Bh Y2VkaW0+ID46OmNvbnN0X2l0ZXJhdG9yIHBhdGNoPXBhdGNoZXMuYmVnaW4oKTsKICAgICAgICAg ICBwYXRjaCAhPSBwYXRjaGVzLmVuZCgpOyArK3BhdGNoKQogICAgICAgIHsKICAgICAgICAgIGNv bnN0IHVuc2lnbmVkIGludCBuX3N1YmRpdmlzaW9ucyA9IHBhdGNoLT5uX3N1YmRpdmlzaW9uczsK CiAgICAgICAgICB7IH07CgogICAgICAgICAgeyB9OwojIDQxMCAic291cmNlL2RhdGFfb3V0X2Jh c2UuY2MiCiAgICAgICAgICBzd2l0Y2ggKGRpbSkKICAgICAgICAgICAgewogICAgICAgICAgICAg IGNhc2UgMToKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu dCBpPTA7IGk8bl9zdWJkaXZpc2lvbnMrMTsgKytpLCArK3ByZXNlbnRfbm9kZSkKICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG91dCA8PCBwcmVzZW50X25vZGUKICAgICAg ICAgICAgICAgICAgICAgICAgPDwgIiAgIjsKICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln bmVkIGludCBkYXRhX3NldD0wOyBkYXRhX3NldDxuX2RhdGFfc2V0czsgKytkYXRhX3NldCkKICAg ICAgICAgICAgICAgICAgICAgIG91dCA8PCBwYXRjaC0+ZGF0YShkYXRhX3NldCxpKSA8PCAnICc7 CgogICAgICAgICAgICAgICAgICAgIG91dCA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICAgICAg IH07CgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAg ICAgY2FzZSAyOgogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg aW50IGk9MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2kpCiAgICAgICAgICAgICAgICAgIGZvciAo dW5zaWduZWQgaW50IGo9MDsgajxuX3N1YmRpdmlzaW9ucysxOyArK2opCiAgICAgICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHByZXNlbnRfbm9kZQogICAgICAg ICAgICAgICAgICAgICAgICAgIDw8ICIgICI7CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVu c2lnbmVkIGludCBkYXRhX3NldD0wOyBkYXRhX3NldDxuX2RhdGFfc2V0czsgKytkYXRhX3NldCkK ICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHBhdGNoLT5kYXRhKGRhdGFfc2V0LGkqKG5f c3ViZGl2aXNpb25zKzEpICsgaikgPDwgJyAnOwoKICAgICAgICAgICAgICAgICAgICAgIG91dCA8 PCBzdGQ6OmVuZGw7CgogICAgICAgICAgICAgICAgICAgICAgKytwcmVzZW50X25vZGU7CiAgICAg ICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9 OwoKICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg Zm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPG5fc3ViZGl2aXNpb25zKzE7ICsraSkKICAgICAgICAg ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaj0wOyBqPG5fc3ViZGl2aXNpb25zKzE7ICsraikK ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBrPTA7IGs8bl9zdWJkaXZpc2lv bnMrMTsgKytrKQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg ICBvdXQgPDwgcHJlc2VudF9ub2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiICAi OwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBkYXRhX3NldD0wOyBk YXRhX3NldDxuX2RhdGFfc2V0czsgKytkYXRhX3NldCkKICAgICAgICAgICAgICAgICAgICAgICAg ICBvdXQgPDwgcGF0Y2gtPmRhdGEoZGF0YV9zZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChpKihuX3N1YmRpdmlzaW9ucysxKStqKSoobl9zdWJkaXZpc2lv bnMrMSkraykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgJyAnOwoKICAgICAgICAg ICAgICAgICAgICAgICAgb3V0IDw8IHN0ZDo6ZW5kbDsKCiAgICAgICAgICAgICAgICAgICAgICAg ICsrcHJlc2VudF9ub2RlOwogICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg ICAgICAgICAgICAgIHsgfTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgfTsKCgoKCiAg eyBpZiAoX19idWlsdGluX2V4cGVjdCghKG91dCksIGZhbHNlKSkgZGVhbF9JSV9leGNlcHRpb25z OjppbnRlcm5hbHM6OiBpc3N1ZV9lcnJvcl90aHJvdyAoInNvdXJjZS9kYXRhX291dF9iYXNlLmNj IiwgNDc1LCBfX1BSRVRUWV9GVU5DVElPTl9fLCAib3V0IiwgIkV4Y0lPKCkiLCBFeGNJTygpKTsg fTsKfTsKCgoKdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9pZCBEYXRhT3V0QmFz ZTo6d3JpdGVfZHggKGNvbnN0IHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPiAmcGF0 Y2hlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6 c3RyaW5nPiAmZGF0YV9uYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERY RmxhZ3MgJmZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtICZv dXQpCnsKICB7IGlmIChfX2J1aWx0aW5fZXhwZWN0KCEob3V0KSwgZmFsc2UpKSBkZWFsX0lJX2V4 Y2VwdGlvbnM6OmludGVybmFsczo6IGlzc3VlX2Vycm9yX3Rocm93ICgic291cmNlL2RhdGFfb3V0 X2Jhc2UuY2MiLCA0ODYsIF9fUFJFVFRZX0ZVTkNUSU9OX18sICJvdXQiLCAiRXhjSU8oKSIsIEV4 Y0lPKCkpOyB9OwoKICB7IH07CgogIGNvbnN0IHVuc2lnbmVkIGludCBuX2RhdGFfc2V0cyA9IGRh dGFfbmFtZXMuc2l6ZSgpOwoKCgogIHVuc2lnbmVkIGludCBuX2NlbGxzID0gMCwKICAgICAgICAg ICAgICAgbl9ub2RlcyA9IDA7CiAgZm9yICh0eXBlbmFtZSBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0s c3BhY2VkaW0+ID46OmNvbnN0X2l0ZXJhdG9yIHBhdGNoPXBhdGNoZXMuYmVnaW4oKTsKICAgICAg IHBhdGNoIT1wYXRjaGVzLmVuZCgpOyArK3BhdGNoKQogICAgc3dpdGNoIChkaW0pCiAgICAgIHsK ICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgbl9jZWxscyArPSBwYXRjaC0+bl9zdWJkaXZp c2lvbnM7CiAgICAgICAgICAgICAgbl9ub2RlcyArPSBwYXRjaC0+bl9zdWJkaXZpc2lvbnMrMTsK ICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgbl9jZWxs cyArPSBwYXRjaC0+bl9zdWJkaXZpc2lvbnMgKgogICAgICAgICAgICAgICAgICAgICAgICAgcGF0 Y2gtPm5fc3ViZGl2aXNpb25zOwogICAgICAgICAgICAgIG5fbm9kZXMgKz0gKHBhdGNoLT5uX3N1 YmRpdmlzaW9ucysxKSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPm5fc3ViZGl2 aXNpb25zKzEpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMzoKICAgICAgICAg ICAgICBuX2NlbGxzICs9IHBhdGNoLT5uX3N1YmRpdmlzaW9ucyAqCiAgICAgICAgICAgICAgICAg ICAgICAgICBwYXRjaC0+bl9zdWJkaXZpc2lvbnMgKgogICAgICAgICAgICAgICAgICAgICAgICAg cGF0Y2gtPm5fc3ViZGl2aXNpb25zOwogICAgICAgICAgICAgIG5fbm9kZXMgKz0gKHBhdGNoLT5u X3N1YmRpdmlzaW9ucysxKSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPm5fc3Vi ZGl2aXNpb25zKzEpICoKICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+bl9zdWJkaXZp c2lvbnMrMSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAg ICAgICB7IH07CiAgICAgIH07CgoKCgogIG91dCA8PCAib2JqZWN0IFwidmVydGljZXNcIiBjbGFz cyBhcnJheSB0eXBlIGZsb2F0IHJhbmsgMSBzaGFwZSAiIDw8IHNwYWNlZGltIDw8ICIgaXRlbXMg IiA8PCBuX25vZGVzIDw8ICIgZGF0YSBmb2xsb3dzIgogICAgICA8PCBzdGQ6OmVuZGw7CgoKCiAg aWYgKHRydWUpCiAgICB7CiAgICAgIGZvciAodHlwZW5hbWUgc3RkOjp2ZWN0b3I8UGF0Y2g8ZGlt LHNwYWNlZGltPiA+Ojpjb25zdF9pdGVyYXRvciBwYXRjaD1wYXRjaGVzLmJlZ2luKCk7CiAgICAg ICAgICAgcGF0Y2ghPXBhdGNoZXMuZW5kKCk7ICsrcGF0Y2gpCiAgICAgICAgewogICAgICAgICAg Y29uc3QgdW5zaWduZWQgaW50IG5fc3ViZGl2aXNpb25zID0gcGF0Y2gtPm5fc3ViZGl2aXNpb25z OwoKCgogICAgICAgICAgc3dpdGNoIChkaW0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBj YXNlIDE6CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg aT0wOyBpPG5fc3ViZGl2aXNpb25zKzE7ICsraSkKICAgICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICAgIGNvbnN0IFBvaW50PHNwYWNlZGltPgogICAgICAgICAgICAgICAgICAgICAg bm9kZSA9ICgocGF0Y2gtPnZlcnRpY2VzWzFdICogaSAvIG5fc3ViZGl2aXNpb25zKSArCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNbMF0gKiAobl9zdWJkaXZp c2lvbnMtaSkgLyBuX3N1YmRpdmlzaW9ucykpOwoKCiAgICAgICAgICAgICAgICAgICAgZm9yICh1 bnNpZ25lZCBpbnQgaT0wOyBpPHNwYWNlZGltOyArK2kpCiAgICAgICAgICAgICAgICAgICAgICBv dXQgPDwgbm9kZShpKSA8PCAnXHQnOwogICAgICAgICAgICAgICAgICAgIG91dCA8PCBzdGQ6OmVu ZGw7CiAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgICAgfTsKCiAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2kpCiAg ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGo9MDsgajxuX3N1YmRpdmlzaW9ucysx OyArK2opCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgY29uc3Qg ZG91YmxlIHhfZnJhYyA9IGkgKiAxLi9uX3N1YmRpdmlzaW9ucywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB5X2ZyYWMgPSBqICogMS4vbl9zdWJkaXZpc2lvbnM7CgoKCiAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBQb2ludDxzcGFjZWRpbT4KICAgICAgICAgICAgICAgICAg ICAgICAgbm9kZSA9ICgoKHBhdGNoLT52ZXJ0aWNlc1sxXSAqIHhfZnJhYykgKwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzBdICogKDEteF9mcmFjKSkp ICogKDEteV9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwYXRjaC0+ dmVydGljZXNbMl0gKiB4X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHBhdGNoLT52ZXJ0aWNlc1szXSAqICgxLXhfZnJhYykpKSAqIHlfZnJhYyk7CgoKICAgICAgICAg ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxzcGFjZWRpbTsgKytpKQogICAg ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgbm9kZShpKSA8PCAnXHQnOwogICAgICAgICAgICAg ICAgICAgICAgb3V0IDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgIGNhc2UgMzoK ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8 bl9zdWJkaXZpc2lvbnMrMTsgKytpKQogICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu dCBqPTA7IGo8bl9zdWJkaXZpc2lvbnMrMTsgKytqKQogICAgICAgICAgICAgICAgICAgIGZvciAo dW5zaWduZWQgaW50IGs9MDsgazxuX3N1YmRpdmlzaW9ucysxOyArK2spCiAgICAgICAgICAgICAg ICAgICAgICB7CgoKCgoKCgogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgeF9m cmFjID0gaSAqIDEuL25fc3ViZGl2aXNpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgeV9mcmFjID0gayAqIDEuL25fc3ViZGl2aXNpb25zLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgel9mcmFjID0gaiAqIDEuL25fc3ViZGl2aXNpb25zOwoKCgog ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQb2ludDxzcGFjZWRpbT4KICAgICAgICAgICAg ICAgICAgICAgICAgICBub2RlID0gKCgoKHBhdGNoLT52ZXJ0aWNlc1sxXSAqIHhfZnJhYykgKwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzBdICog KDEteF9mcmFjKSkpICogKDEteV9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKChwYXRjaC0+dmVydGljZXNbMl0gKiB4X2ZyYWMpICsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1szXSAqICgxLXhfZnJhYykpKSAqIHlf ZnJhYykgKiAoMS16X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgo KHBhdGNoLT52ZXJ0aWNlc1s1XSAqIHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzRdICogKDEteF9mcmFjKSkpICogKDEteV9mcmFj KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwYXRjaC0+dmVydGljZXNb Nl0gKiB4X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNo LT52ZXJ0aWNlc1s3XSAqICgxLXhfZnJhYykpKSAqIHlfZnJhYykgKiB6X2ZyYWMpOwoKCiAgICAg ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxzcGFjZWRpbTsgKytp KQogICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBub2RlKGkpIDw8ICdcdCc7CiAgICAg ICAgICAgICAgICAgICAgICAgIG91dCA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICAgICAgICAg ICB9OwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH07CgogICAgICAgICAg ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgeyB9OwogICAgICAgICAgICB9OwogICAg ICAgIH07CiAgICB9OwoKCgogIG91dCA8PCAib2JqZWN0IFwiY2VsbHNcIiBjbGFzcyBhcnJheSB0 eXBlIGludCByYW5rIDEgc2hhcGUgIiA8PCBHZW9tZXRyeUluZm88ZGltPjo6dmVydGljZXNfcGVy X2NlbGwKICAgICAgPDwgIiBpdGVtcyAiIDw8IG5fY2VsbHMgPDwgIiBkYXRhIGZvbGxvd3MiCiAg ICAgIDw8IHN0ZDo6ZW5kbDsKCiAgaWYgKHRydWUpCiAgICB7CiAgICAgIHVuc2lnbmVkIGludCBm aXJzdF92ZXJ0ZXhfb2ZfcGF0Y2ggPSAwOwoKICAgICAgZm9yICh0eXBlbmFtZSBzdGQ6OnZlY3Rv cjxQYXRjaDxkaW0sc3BhY2VkaW0+ID46OmNvbnN0X2l0ZXJhdG9yIHBhdGNoPXBhdGNoZXMuYmVn aW4oKTsKICAgICAgICAgICBwYXRjaCE9cGF0Y2hlcy5lbmQoKTsgKytwYXRjaCkKICAgICAgICB7 CiAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbl9zdWJkaXZpc2lvbnMgPSBwYXRjaC0+bl9z dWJkaXZpc2lvbnM7CgoKCiAgICAgICAgICBzd2l0Y2ggKGRpbSkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgIGlmICh0cnVlKQogICAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPG5fc3Vi ZGl2aXNpb25zOyArK2kpCiAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgZmlyc3RfdmVydGV4 X29mX3BhdGNoK2kgPDwgJ1x0JwogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3Zl cnRleF9vZl9wYXRjaCtpKzEgPDwgc3RkOjplbmRsOwogICAgICAgICAgICAgICAgICB9OwogICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAg aWYgKHRydWUpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHVu c2lnbmVkIGludCBpPTA7IGk8bl9zdWJkaXZpc2lvbnM7ICsraSkKICAgICAgICAgICAgICAgICAg ICAgIGZvciAodW5zaWduZWQgaW50IGo9MDsgajxuX3N1YmRpdmlzaW9uczsgKytqKQogICAgICAg ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGZpcnN0 X3ZlcnRleF9vZl9wYXRjaCtpKihuX3N1YmRpdmlzaW9ucysxKStqIDw8ICdcdCcKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgPDwgZmlyc3RfdmVydGV4X29mX3BhdGNoK2kqKG5fc3ViZGl2 aXNpb25zKzEpK2orMSA8PCAnXHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZp cnN0X3ZlcnRleF9vZl9wYXRjaCsoaSsxKSoobl9zdWJkaXZpc2lvbnMrMSkraiA8PCAnXHQnCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCsoaSsx KSoobl9zdWJkaXZpc2lvbnMrMSkraisxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8 IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAg fTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAg ICAgICAgIGlmICh0cnVlKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgaW50IG52dCA9IG5fc3ViZGl2aXNpb25zKzE7CiAgICAgICAgICAgICAg ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPG5fc3ViZGl2aXNpb25zOyArK2kpCiAgICAg ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqPTA7IGo8bl9zdWJkaXZpc2lvbnM7 ICsraikKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaz0wOyBrPG5f c3ViZGl2aXNpb25zOyArK2spCiAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG91dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBm aXJzdF92ZXJ0ZXhfb2ZfcGF0Y2grKChpICkqbnZ0K2ogKSpudnQrayA8PCAnXHQnCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCsoKGkgKSpudnQr aiApKm52dCtrKzEgPDwgJ1x0JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJz dF92ZXJ0ZXhfb2ZfcGF0Y2grKChpICkqbnZ0K2orMSkqbnZ0K2sgPDwgJ1x0JwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2grKChpICkqbnZ0K2or MSkqbnZ0K2srMSA8PCAnXHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0 X3ZlcnRleF9vZl9wYXRjaCsoKGkrMSkqbnZ0K2ogKSpudnQrayA8PCAnXHQnCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCsoKGkrMSkqbnZ0K2og KSpudnQraysxIDw8ICdcdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgZmlyc3Rf dmVydGV4X29mX3BhdGNoKygoaSsxKSpudnQraisxKSpudnQrayA8PCAnXHQnCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCsoKGkrMSkqbnZ0K2or MSkqbnZ0K2srMSA8PCAnXHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA2OTYg InNvdXJjZS9kYXRhX291dF9iYXNlLmNjIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0 IDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg ICAgICAgICAgICAgICAgeyB9OwogICAgICAgICAgICB9OwoKCgoKICAgICAgICAgIHN3aXRjaCAo ZGltKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAg ICAgIGZpcnN0X3ZlcnRleF9vZl9wYXRjaCArPSBuX3N1YmRpdmlzaW9ucysxOwogICAgICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAg ICBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2ggKz0gKG5fc3ViZGl2aXNpb25zKzEpICoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5fc3ViZGl2aXNpb25zKzEpOwog ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAg ICAgICAgICAgICBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2ggKz0gKG5fc3ViZGl2aXNpb25zKzEpICoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5fc3ViZGl2aXNp b25zKzEpICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5f c3ViZGl2aXNpb25zKzEpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgeyB9OwogICAgICAgICAgICB9OwogICAgICAg IH07CiAgICAgIG91dCA8PCBzdGQ6OmVuZGw7CiAgICB9OwoKICBvdXQgPDwgImF0dHJpYnV0ZSBc ImVsZW1lbnQgdHlwZVwiIHN0cmluZyBcIiI7CiAgaWYgKGRpbT09MSkgb3V0IDw8ICJsaW5lcyI7 CiAgaWYgKGRpbT09Mikgb3V0IDw8ICJxdWFkcyI7CiAgaWYgKGRpbT09Mykgb3V0IDw8ICJjdWJl cyI7CiAgb3V0IDw8ICJcIiIgPDwgc3RkOjplbmRsCiAgICAgIDw8ICJhdHRyaWJ1dGUgXCJyZWZc IiBzdHJpbmcgXCJwb3NpdGlvbnNcIiIgPDwgc3RkOjplbmRsOwoKCgoKICBpZiAoZmxhZ3Mud3Jp dGVfbmVpZ2hib3JzKQogICAgewogICAgICBvdXQgPDwgIm9iamVjdCBcIm5laWdoYm9yc1wiIGNs YXNzIGFycmF5IHR5cGUgaW50IHJhbmsgMSBzaGFwZSAiCiAgICAgICAgICA8PCBHZW9tZXRyeUlu Zm88ZGltPjo6ZmFjZXNfcGVyX2NlbGwKICAgICAgICAgIDw8ICIgaXRlbXMgIiA8PCBuX2NlbGxz CiAgICAgICAgICA8PCAiIGRhdGEgZm9sbG93cyI7CgogICAgICBmb3IgKHR5cGVuYW1lIHN0ZDo6 dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPjo6Y29uc3RfaXRlcmF0b3IKICAgICAgICAgICAg IHBhdGNoPXBhdGNoZXMuYmVnaW4oKTsKICAgICAgICAgICBwYXRjaCE9cGF0Y2hlcy5lbmQoKTsg KytwYXRjaCkKICAgICAgICB7CiAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9IHBhdGNo LT5uX3N1YmRpdmlzaW9uczsKICAgICAgICAgIHVuc2lnbmVkIGludCBjZWxsc19wZXJfcGF0Y2gg PSAxOwogICAgICAgICAgdW5zaWduZWQgaW50IGR4ID0gMTsKICAgICAgICAgIHVuc2lnbmVkIGlu dCBkeSA9IDE7CiAgICAgICAgICB1bnNpZ25lZCBpbnQgZHogPSAxOwogICAgICAgICAgc3dpdGNo KGRpbSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAg IGR4ICo9IG47CiAgICAgICAgICAgICAgICBkeSAqPSBuOwogICAgICAgICAgICAgICAgY2VsbHNf cGVyX3BhdGNoICo9IG47CiAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgZHgg Kj0gbjsKICAgICAgICAgICAgICAgIGNlbGxzX3Blcl9wYXRjaCAqPSBuOwogICAgICAgICAgICAg IGNhc2UgMToKICAgICAgICAgICAgICAgIGNlbGxzX3Blcl9wYXRjaCAqPSBuOwogICAgICAgICAg ICB9CgogICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHBhdGNoX3N0YXJ0ID0gcGF0Y2gtPnBh dGNoX2luZGV4ICogY2VsbHNfcGVyX3BhdGNoOwoKICAgICAgICAgIGZvciAodW5zaWduZWQgaW50 IGl4PTA7aXg8bjsrK2l4KQogICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpeT0wO2l5PCgo ZGltPjEpID8gbiA6IDEpOysraXkpCiAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaXo9 MDtpejwoKGRpbT4yKSA/IG4gOiAxKTsrK2l6KQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnggPSBpeCpkeDsKICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgaW50IG55ID0gaXkqZHk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGludCBueiA9IGl6KmR6OwoKICAgICAgICAgICAgICAgICAgb3V0IDw8IHN0ZDo6ZW5k bDsKCgoKICAgICAgICAgICAgICAgICAgaWYgKGl4PT0wKQogICAgICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBubiA9IHBhdGNoLT5uZWln aGJvcnNbMF07CiAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgJ1x0JzsKICAgICAgICAgICAg ICAgICAgICAgIGlmIChubiAhPSBwYXRjaC0+bm9fbmVpZ2hib3IpCiAgICAgICAgICAgICAgICAg ICAgICAgIG91dCA8PCAobm4qY2VsbHNfcGVyX3BhdGNoK255K256K2R4KihuLTEpKTsKICAgICAg ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICItMSI7 CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIG91dCA8 PCAnXHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgcGF0Y2hfc3RhcnQrbngtZHgrbnkr bno7CiAgICAgICAgICAgICAgICAgICAgfQoKCgogICAgICAgICAgICAgICAgICBpZiAoaXggPT0g bi0xKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGludCBubiA9IHBhdGNoLT5uZWlnaGJvcnNbMV07CiAgICAgICAgICAgICAgICAgICAg ICBvdXQgPDwgJ1x0JzsKICAgICAgICAgICAgICAgICAgICAgIGlmIChubiAhPSBwYXRjaC0+bm9f bmVpZ2hib3IpCiAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAobm4qY2VsbHNfcGVyX3Bh dGNoK255K256KTsKICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg ICAgICAgb3V0IDw8ICItMSI7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg ICAgICAgICAgICAgIG91dCA8PCAnXHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgcGF0 Y2hfc3RhcnQrbngrZHgrbnkrbno7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICBpZiAoZGltPDIpCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAg ICAgICAgICBpZiAoaXk9PTApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgaW50IG5uID0gcGF0Y2gtPm5laWdoYm9yc1syXTsKICAgICAg ICAgICAgICAgICAgICAgIG91dCA8PCAnXHQnOwogICAgICAgICAgICAgICAgICAgICAgaWYgKG5u ICE9IHBhdGNoLT5ub19uZWlnaGJvcikKICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IChu bipjZWxsc19wZXJfcGF0Y2grbngrbnorZHkqKG4tMSkpOwogICAgICAgICAgICAgICAgICAgICAg ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIi0xIjsKICAgICAgICAgICAgICAg ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICdcdCcKICAgICAgICAg ICAgICAgICAgICAgICAgICA8PCBwYXRjaF9zdGFydCtueCtueS1keStuejsKICAgICAgICAgICAg ICAgICAgICB9CgogICAgICAgICAgICAgICAgICBpZiAoaXkgPT0gbi0xKQogICAgICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBubiA9IHBh dGNoLT5uZWlnaGJvcnNbM107CiAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgJ1x0JzsKICAg ICAgICAgICAgICAgICAgICAgIGlmIChubiAhPSBwYXRjaC0+bm9fbmVpZ2hib3IpCiAgICAgICAg ICAgICAgICAgICAgICAgIG91dCA8PCAobm4qY2VsbHNfcGVyX3BhdGNoK254K256KTsKICAgICAg ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICItMSI7 CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIG91dCA8 PCAnXHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgcGF0Y2hfc3RhcnQrbngrbnkrZHkr bno7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoZGltPDMpCiAg ICAgICAgICAgICAgICAgICAgY29udGludWU7CgoKICAgICAgICAgICAgICAgICAgaWYgKGl6PT0w KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln bmVkIGludCBubiA9IHBhdGNoLT5uZWlnaGJvcnNbNF07CiAgICAgICAgICAgICAgICAgICAgICBv dXQgPDwgJ1x0JzsKICAgICAgICAgICAgICAgICAgICAgIGlmIChubiAhPSBwYXRjaC0+bm9fbmVp Z2hib3IpCiAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAobm4qY2VsbHNfcGVyX3BhdGNo K254K255K2R6KihuLTEpKTsKICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg ICAgICAgICAgICAgb3V0IDw8ICItMSI7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg ICAgICAgICAgICAgICAgICAgIG91dCA8PCAnXHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAg PDwgcGF0Y2hfc3RhcnQrbngrbnkrbnotZHo7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg ICAgICAgICAgICAgaWYgKGl6ID09IG4tMSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbm4gPSBwYXRjaC0+bmVpZ2hib3JzWzVd OwogICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICdcdCc7CiAgICAgICAgICAgICAgICAgICAg ICBpZiAobm4gIT0gcGF0Y2gtPm5vX25laWdoYm9yKQogICAgICAgICAgICAgICAgICAgICAgICBv dXQgPDwgKG5uKmNlbGxzX3Blcl9wYXRjaCtueCtueSk7CiAgICAgICAgICAgICAgICAgICAgICBl bHNlCiAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLTEiOwogICAgICAgICAgICAgICAg ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgJ1x0JwogICAgICAgICAg ICAgICAgICAgICAgICAgIDw8IHBhdGNoX3N0YXJ0K254K255K256K2R6OwogICAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgIG91dCA8PCBzdGQ6OmVuZGw7CiAg ICAgICAgfQogICAgfQoKCiAgaWYgKG5fZGF0YV9zZXRzICE9IDApCiAgICB7CiAgICAgIG91dCA8 PCAib2JqZWN0IFwiZGF0YVwiIGNsYXNzIGFycmF5IHR5cGUgZmxvYXQgcmFuayAxIHNoYXBlICIK ICAgICAgICAgIDw8IG5fZGF0YV9zZXRzCiAgICAgICAgICA8PCAiIGl0ZW1zICIgPDwgbl9ub2Rl cyA8PCAiIGRhdGEgZm9sbG93cyIgPDwgc3RkOjplbmRsOwoKCiAgICAgIGZvciAodHlwZW5hbWUg c3RkOjp2ZWN0b3I8UGF0Y2g8ZGltLHNwYWNlZGltPiA+Ojpjb25zdF9pdGVyYXRvciBwYXRjaD1w YXRjaGVzLmJlZ2luKCk7CiAgICAgICAgICAgcGF0Y2ggIT0gcGF0Y2hlcy5lbmQoKTsgKytwYXRj aCkKICAgICAgICB7CiAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbl9zdWJkaXZpc2lvbnMg PSBwYXRjaC0+bl9zdWJkaXZpc2lvbnM7CgogICAgICAgICAgeyB9OwoKICAgICAgICAgIHsgfTsK IyA4OTQgInNvdXJjZS9kYXRhX291dF9iYXNlLmNjIgogICAgICAgICAgc3dpdGNoIChkaW0pCiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPG5fc3ViZGl2aXNpb25zKzE7ICsraSkK ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50 IGRhdGFfc2V0PTA7IGRhdGFfc2V0PG5fZGF0YV9zZXRzOyArK2RhdGFfc2V0KQogICAgICAgICAg ICAgICAgICAgICAgb3V0IDw8IHBhdGNoLT5kYXRhKGRhdGFfc2V0LGkpIDw8ICdcdCc7CiAgICAg ICAgICAgICAgICAgICAgb3V0IDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgICAgICAgfTsKCiAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICBjYXNl IDI6CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaT0w OyBpPG5fc3ViZGl2aXNpb25zKzE7ICsraSkKICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l ZCBpbnQgaj0wOyBqPG5fc3ViZGl2aXNpb25zKzE7ICsraikKICAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBkYXRhX3NldD0wOyBkYXRh X3NldDxuX2RhdGFfc2V0czsgKytkYXRhX3NldCkKICAgICAgICAgICAgICAgICAgICAgICAgb3V0 IDw8IHBhdGNoLT5kYXRhKGRhdGFfc2V0LGkqKG5fc3ViZGl2aXNpb25zKzEpICsgaikgPDwgJ1x0 JzsKICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICAg ICAgICAgfTsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9OwoKICAgICAg ICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yICh1bnNp Z25lZCBpbnQgaT0wOyBpPG5fc3ViZGl2aXNpb25zKzE7ICsraSkKICAgICAgICAgICAgICAgICAg Zm9yICh1bnNpZ25lZCBpbnQgaj0wOyBqPG5fc3ViZGl2aXNpb25zKzE7ICsraikKICAgICAgICAg ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBrPTA7IGs8bl9zdWJkaXZpc2lvbnMrMTsgKytr KQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVu c2lnbmVkIGludCBkYXRhX3NldD0wOyBkYXRhX3NldDxuX2RhdGFfc2V0czsgKytkYXRhX3NldCkK ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgcGF0Y2gtPmRhdGEoZGF0YV9zZXQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpKihuX3N1YmRpdmlz aW9ucysxKStqKSoobl9zdWJkaXZpc2lvbnMrMSkraykKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgPDwgJ1x0JzsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHN0ZDo6ZW5kbDsK ICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgICAgfTsKCiAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICB7IH07 CiAgICAgICAgICAgIH07CiAgICAgICAgfTsKICAgICAgb3V0IDw8ICJhdHRyaWJ1dGUgXCJkZXBc IiBzdHJpbmcgXCJwb3NpdGlvbnNcIiIgPDwgc3RkOjplbmRsOwogICAgfSBlbHNlIHsKICAgICAg b3V0IDw8ICJvYmplY3QgXCJkYXRhXCIgY2xhc3MgY29uc3RhbnRhcnJheSB0eXBlIGZsb2F0IHJh bmsgMCBpdGVtcyAiIDw8IG5fbm9kZXMgPDwgIiBkYXRhIGZvbGxvd3MiCiAgICAgICAgICA8PCBz dGQ6OmVuZGwgPDwgJzAnIDw8IHN0ZDo6ZW5kbDsKICAgIH0KCgoKICBvdXQgPDwgIm9iamVjdCBc ImRlYWwgZGF0YVwiIGNsYXNzIGZpZWxkIiA8PCBzdGQ6OmVuZGwKICAgICAgPDwgImNvbXBvbmVu dCBcInBvc2l0aW9uc1wiIHZhbHVlIFwidmVydGljZXNcIiIgPDwgc3RkOjplbmRsCiAgICAgIDw8 ICJjb21wb25lbnQgXCJjb25uZWN0aW9uc1wiIHZhbHVlIFwiY2VsbHNcIiIgPDwgc3RkOjplbmRs CiAgICAgIDw8ICJjb21wb25lbnQgXCJkYXRhXCIgdmFsdWUgXCJkYXRhXCIiIDw8IHN0ZDo6ZW5k bDsKCiAgaWYgKGZsYWdzLndyaXRlX25laWdoYm9ycykKICAgIG91dCA8PCAiY29tcG9uZW50IFwi bmVpZ2hib3JzXCIgdmFsdWUgXCJuZWlnaGJvcnNcIiIgPDwgc3RkOjplbmRsOwoKICBpZiAodHJ1 ZSkKICAgIHsKICAgICAgc3RkOjp0aW1lX3QgdGltZTE9IHN0ZDo6dGltZSAoMCk7CiAgICAgIHN0 ZDo6dG0gKnRpbWUgPSBzdGQ6OmxvY2FsdGltZSgmdGltZTEpOwogICAgICBvdXQgPDwgImF0dHJp YnV0ZSBcImNyZWF0ZWRcIiBzdHJpbmcgXCIiCiAgICAgICAgICA8PCB0aW1lLT50bV95ZWFyKzE5 MDAgPDwgIi8iCiAgICAgICAgICA8PCB0aW1lLT50bV9tb24rMSA8PCAiLyIKICAgICAgICAgIDw8 IHRpbWUtPnRtX21kYXkKICAgICAgICAgIDw8ICcgJwogICAgICAgICAgPDwgdGltZS0+dG1faG91 ciA8PCAiOiIKICAgICAgICAgIDw8IHN0ZDo6c2V0dygyKSA8PCB0aW1lLT50bV9taW4gPDwgIjoi CiAgICAgICAgICA8PCBzdGQ6OnNldHcoMikgPDwgdGltZS0+dG1fc2VjIDw8ICciJyA8PCBzdGQ6 OmVuZGw7CiAgICB9OwoKICBvdXQgPDwgImVuZCIgPDwgc3RkOjplbmRsOwoKICB7IGlmIChfX2J1 aWx0aW5fZXhwZWN0KCEob3V0KSwgZmFsc2UpKSBkZWFsX0lJX2V4Y2VwdGlvbnM6OmludGVybmFs czo6IGlzc3VlX2Vycm9yX3Rocm93ICgic291cmNlL2RhdGFfb3V0X2Jhc2UuY2MiLCA5NzMsIF9f UFJFVFRZX0ZVTkNUSU9OX18sICJvdXQiLCAiRXhjSU8oKSIsIEV4Y0lPKCkpOyB9Owp9OwoKCgp0 ZW1wbGF0ZSA8aW50IGRpbSwgaW50IHNwYWNlZGltPgp2b2lkIERhdGFPdXRCYXNlOjp3cml0ZV9n bnVwbG90IChjb25zdCBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ID4gJnBhdGNoZXMs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6 c3RyaW5nPiAmZGF0YV9uYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgR251cGxvdEZsYWdzICYgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6 Om9zdHJlYW0gJm91dCkKewogIHsgaWYgKF9fYnVpbHRpbl9leHBlY3QoIShvdXQpLCBmYWxzZSkp IGRlYWxfSUlfZXhjZXB0aW9uczo6aW50ZXJuYWxzOjogaXNzdWVfZXJyb3JfdGhyb3cgKCJzb3Vy Y2UvZGF0YV9vdXRfYmFzZS5jYyIsIDk4NCwgX19QUkVUVFlfRlVOQ1RJT05fXywgIm91dCIsICJF eGNJTygpIiwgRXhjSU8oKSk7IH07CgogIHsgfTsKCiAgY29uc3QgdW5zaWduZWQgaW50IG5fZGF0 YV9zZXRzID0gZGF0YV9uYW1lcy5zaXplKCk7CgoKICBpZiAodHJ1ZSkKICAgIHsKCgoKICAgICAg Y29uc3Qgc3RkOjp0aW1lX3QgdGltZTE9IHN0ZDo6dGltZSAoMCk7CiAgICAgIGNvbnN0IHN0ZDo6 dG0gKnRpbWUgPSBzdGQ6OmxvY2FsdGltZSgmdGltZTEpOwogICAgICBvdXQgPDwgIiMgVGhpcyBm aWxlIHdhcyBnZW5lcmF0ZWQgYnkgdGhlIGRlYWwuSUkgbGlicmFyeS4iIDw8IHN0ZDo6ZW5kbAog ICAgICAgICAgPDwgIiMgRGF0ZSA9ICAiCiAgICAgICAgICA8PCB0aW1lLT50bV95ZWFyKzE5MDAg PDwgIi8iCiAgICAgICAgICA8PCB0aW1lLT50bV9tb24rMSA8PCAiLyIKICAgICAgICAgIDw8IHRp bWUtPnRtX21kYXkgPDwgc3RkOjplbmRsCiAgICAgICAgICA8PCAiIyBUaW1lID0gICIKICAgICAg ICAgIDw8IHRpbWUtPnRtX2hvdXIgPDwgIjoiCiAgICAgICAgICA8PCBzdGQ6OnNldHcoMikgPDwg dGltZS0+dG1fbWluIDw8ICI6IgogICAgICAgICAgPDwgc3RkOjpzZXR3KDIpIDw8IHRpbWUtPnRt X3NlYyA8PCBzdGQ6OmVuZGwKICAgICAgICAgIDw8ICIjIiA8PCBzdGQ6OmVuZGwKICAgICAgICAg IDw8ICIjIEZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBHTlVQTE9UIGZvcm1hdCBzZWUgdGhlIEdO VVBMT1QgbWFudWFsLiIKICAgICAgICAgIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgPDwgIiMiIDw8 IHN0ZDo6ZW5kbAogICAgICAgICAgPDwgIiMgIjsKCiAgICAgIHN3aXRjaCAoc3BhY2VkaW0pCiAg ICAgICAgewogICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgb3V0IDw8ICI8eD4gIjsK ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAg b3V0IDw8ICI8eD4gPHk+ICI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2Ug MzoKICAgICAgICAgICAgICAgIG91dCA8PCAiPHg+IDx5PiA8ej4gIjsKICAgICAgICAgICAgICAg IGJyZWFrOwoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB7IH07CiAgICAgICAg fTsKCiAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxkYXRhX25hbWVzLnNpemUoKTsgKytp KQogICAgICAgIG91dCA8PCAnPCcKICAgICAgICAgICAgPDwgZGF0YV9uYW1lc1tpXQogICAgICAg ICAgICA8PCAiPiAiOwogICAgICBvdXQgPDwgc3RkOjplbmRsOwogICAgfTsKCgoKICBmb3IgKHR5 cGVuYW1lIHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPjo6Y29uc3RfaXRlcmF0b3Ig cGF0Y2g9cGF0Y2hlcy5iZWdpbigpOwogICAgICAgcGF0Y2ggIT0gcGF0Y2hlcy5lbmQoKTsgKytw YXRjaCkKICAgIHsKICAgICAgY29uc3QgdW5zaWduZWQgaW50IG5fc3ViZGl2aXNpb25zID0gcGF0 Y2gtPm5fc3ViZGl2aXNpb25zOwoKICAgICAgeyB9OwoKICAgICAgeyB9OwojIDEwNTQgInNvdXJj ZS9kYXRhX291dF9iYXNlLmNjIgogICAgICBzd2l0Y2ggKGRpbSkKICAgICAgICB7CiAgICAgICAg ICBjYXNlIDE6CiAgICAgICAgICB7CiAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsg aTxuX3N1YmRpdmlzaW9ucysxOyArK2kpCiAgICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg ICBvdXQgPDwgKChwYXRjaC0+dmVydGljZXNbMV0gKiBpIC8gbl9zdWJkaXZpc2lvbnMpICsKICAg ICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1swXSAqIChuX3N1YmRpdmlzaW9u cy1pKSAvIG5fc3ViZGl2aXNpb25zKSkKICAgICAgICAgICAgICAgICAgICA8PCAnICc7CgogICAg ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZGF0YV9zZXQ9MDsgZGF0YV9zZXQ8bl9kYXRh X3NldHM7ICsrZGF0YV9zZXQpCiAgICAgICAgICAgICAgICAgIG91dCA8PCBwYXRjaC0+ZGF0YShk YXRhX3NldCxpKSA8PCAnICc7CgogICAgICAgICAgICAgICAgb3V0IDw8IHN0ZDo6ZW5kbDsKICAg ICAgICAgICAgICB9OwoKCiAgICAgICAgICAgIG91dCA8PCBzdGQ6OmVuZGwKICAgICAgICAgICAg ICAgIDw8IHN0ZDo6ZW5kbDsKCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfTsKCiAgICAg ICAgICBjYXNlIDI6CiAgICAgICAgICB7CiAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9 MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2kpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgZm9yICh1bnNpZ25lZCBpbnQgaj0wOyBqPG5fc3ViZGl2aXNpb25zKzE7ICsraikKICAgICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4X2ZyYWMgPSBp ICogMS4vbl9zdWJkaXZpc2lvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlf ZnJhYyA9IGogKiAxLi9uX3N1YmRpdmlzaW9uczsKCgoKICAgICAgICAgICAgICAgICAgICBvdXQg PDwgKCgocGF0Y2gtPnZlcnRpY2VzWzFdICogeF9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1swXSAqICgxLXhfZnJhYykpKSAqICgxLXlfZnJhYykg KwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwYXRjaC0+dmVydGljZXNbMl0gKiB4X2Zy YWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzNdICog KDEteF9mcmFjKSkpICogeV9mcmFjKQogICAgICAgICAgICAgICAgICAgICAgICA8PCAnICc7Cgog ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGRhdGFfc2V0PTA7IGRhdGFfc2V0 PG5fZGF0YV9zZXRzOyArK2RhdGFfc2V0KQogICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHBh dGNoLT5kYXRhKGRhdGFfc2V0LGkqKG5fc3ViZGl2aXNpb25zKzEpICsgaikgPDwgJyAnOwoKICAg ICAgICAgICAgICAgICAgICBvdXQgPDwgc3RkOjplbmRsOwogICAgICAgICAgICAgICAgICB9OwoK CiAgICAgICAgICAgICAgICBvdXQgPDwgc3RkOjplbmRsOwogICAgICAgICAgICAgIH07CgoKICAg ICAgICAgICAgb3V0IDw8IHN0ZDo6ZW5kbDsKCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg fTsKCiAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICB7CgoKCgoKICAgICAgICAgICAgZm9yICh1 bnNpZ25lZCBpbnQgaT0wOyBpPG5fc3ViZGl2aXNpb25zKzE7ICsraSkKICAgICAgICAgICAgICBm b3IgKHVuc2lnbmVkIGludCBqPTA7IGo8bl9zdWJkaXZpc2lvbnMrMTsgKytqKQogICAgICAgICAg ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaz0wOyBrPG5fc3ViZGl2aXNpb25zKzE7ICsraykKICAg ICAgICAgICAgICAgICAgewoKCgoKCgoKICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUg eF9mcmFjID0gaSAqIDEuL25fc3ViZGl2aXNpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB5X2ZyYWMgPSBrICogMS4vbl9zdWJkaXZpc2lvbnMsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHpfZnJhYyA9IGogKiAxLi9uX3N1YmRpdmlzaW9uczsKCgoKICAgICAg ICAgICAgICAgICAgICBjb25zdCBQb2ludDxzcGFjZWRpbT4gdGhpc19wb2ludAogICAgICAgICAg ICAgICAgICAgICAgPSAoKCgocGF0Y2gtPnZlcnRpY2VzWzFdICogeF9mcmFjKSArCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNbMF0gKiAoMS14X2ZyYWMpKSkgKiAo MS15X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAoKHBhdGNoLT52ZXJ0aWNlc1sy XSAqIHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2Vz WzNdICogKDEteF9mcmFjKSkpICogeV9mcmFjKSAqICgxLXpfZnJhYykgKwogICAgICAgICAgICAg ICAgICAgICAgICAgKCgocGF0Y2gtPnZlcnRpY2VzWzVdICogeF9mcmFjKSArCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNbNF0gKiAoMS14X2ZyYWMpKSkgKiAoMS15 X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAoKHBhdGNoLT52ZXJ0aWNlc1s2XSAq IHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzdd ICogKDEteF9mcmFjKSkpICogeV9mcmFjKSAqIHpfZnJhYyk7CgoKCiAgICAgICAgICAgICAgICAg ICAgaWYgKGkgPCBuX3N1YmRpdmlzaW9ucykKICAgICAgICAgICAgICAgICAgICAgIHsKCgogICAg ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgdGhpc19wb2ludDsKICAgICAgICAgICAgICAgICAg ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZGF0YV9zZXQ9MDsgZGF0YV9zZXQ8bl9kYXRhX3NldHM7 ICsrZGF0YV9zZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICcgJwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgPDwgcGF0Y2gtPmRhdGEoZGF0YV9zZXQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSoobl9zdWJkaXZpc2lvbnMr MSkgKyBqKSoobl9zdWJkaXZpc2lvbnMrMSkrayk7CiAgICAgICAgICAgICAgICAgICAgICAgIG91 dCA8PCBzdGQ6OmVuZGw7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4 X2ZyYWNfbmV3ID0geF9mcmFjICsgMS4vbl9zdWJkaXZpc2lvbnM7CiAgICAgICAgICAgICAgICAg ICAgICAgIG91dCA8PCAoKCgocGF0Y2gtPnZlcnRpY2VzWzFdICogeF9mcmFjX25ldykgKwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1swXSAqICgxLXhf ZnJhY19uZXcpKSkgKiAoMS15X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKChwYXRjaC0+dmVydGljZXNbMl0gKiB4X2ZyYWNfbmV3KSArCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzNdICogKDEteF9mcmFjX25ldykpKSAq IHlfZnJhYykgKiAoMS16X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo KChwYXRjaC0+dmVydGljZXNbNV0gKiB4X2ZyYWNfbmV3KSArCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzRdICogKDEteF9mcmFjX25ldykpKSAqICgx LXlfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHBhdGNoLT52ZXJ0 aWNlc1s2XSAqIHhfZnJhY19uZXcpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChwYXRjaC0+dmVydGljZXNbN10gKiAoMS14X2ZyYWNfbmV3KSkpICogeV9mcmFjKSAqIHpfZnJh Yyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGRhdGFfc2V0PTA7 IGRhdGFfc2V0PG5fZGF0YV9zZXRzOyArK2RhdGFfc2V0KQogICAgICAgICAgICAgICAgICAgICAg ICAgIG91dCA8PCAnICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHBhdGNoLT5k YXRhKGRhdGFfc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKChpKzEpKihuX3N1YmRpdmlzaW9ucysxKSArIGopKihuX3N1YmRpdmlzaW9ucysxKStrKTsK ICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHN0ZDo6ZW5kbDsKCgogICAgICAgICAgICAg ICAgICAgICAgICBvdXQgPDwgc3RkOjplbmRsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICAgICAgICAgICB9OwoKCgogICAgICAgICAgICAgICAg ICAgIGlmIChqIDwgbl9zdWJkaXZpc2lvbnMpCiAgICAgICAgICAgICAgICAgICAgICB7CgoKICAg ICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHRoaXNfcG9pbnQ7CiAgICAgICAgICAgICAgICAg ICAgICAgIGZvciAodW5zaWduZWQgaW50IGRhdGFfc2V0PTA7IGRhdGFfc2V0PG5fZGF0YV9zZXRz OyArK2RhdGFfc2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAnICcKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHBhdGNoLT5kYXRhKGRhdGFfc2V0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkqKG5fc3ViZGl2aXNpb25z KzEpICsgaikqKG5fc3ViZGl2aXNpb25zKzEpK2spOwogICAgICAgICAgICAgICAgICAgICAgICBv dXQgPDwgc3RkOjplbmRsOwoKCgogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUg el9mcmFjX25ldyA9IHpfZnJhYyArIDEuL25fc3ViZGl2aXNpb25zOwogICAgICAgICAgICAgICAg ICAgICAgICBvdXQgPDwgKCgoKHBhdGNoLT52ZXJ0aWNlc1sxXSAqIHhfZnJhYykgKwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1swXSAqICgxLXhfZnJh YykpKSAqICgxLXlfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHBh dGNoLT52ZXJ0aWNlc1syXSAqIHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKHBhdGNoLT52ZXJ0aWNlc1szXSAqICgxLXhfZnJhYykpKSAqIHlfZnJhYykgKiAoMS16 X2ZyYWNfbmV3KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgocGF0Y2gtPnZl cnRpY2VzWzVdICogeF9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo cGF0Y2gtPnZlcnRpY2VzWzRdICogKDEteF9mcmFjKSkpICogKDEteV9mcmFjKSArCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgocGF0Y2gtPnZlcnRpY2VzWzZdICogeF9mcmFjKSAr CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzddICog KDEteF9mcmFjKSkpICogeV9mcmFjKSAqIHpfZnJhY19uZXcpOwogICAgICAgICAgICAgICAgICAg ICAgICBmb3IgKHVuc2lnbmVkIGludCBkYXRhX3NldD0wOyBkYXRhX3NldDxuX2RhdGFfc2V0czsg KytkYXRhX3NldCkKICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgJyAnCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA8PCBwYXRjaC0+ZGF0YShkYXRhX3NldCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpKihuX3N1YmRpdmlzaW9ucysx KSArIChqKzEpKSoobl9zdWJkaXZpc2lvbnMrMSkrayk7CiAgICAgICAgICAgICAgICAgICAgICAg IG91dCA8PCBzdGQ6OmVuZGw7CgoKICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHN0ZDo6 ZW5kbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOwogICAgICAgICAg ICAgICAgICAgICAgfTsKCgoKICAgICAgICAgICAgICAgICAgICBpZiAoayA8IG5fc3ViZGl2aXNp b25zKQogICAgICAgICAgICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgICAgICAgICAgIG91 dCA8PCB0aGlzX3BvaW50OwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu dCBkYXRhX3NldD0wOyBkYXRhX3NldDxuX2RhdGFfc2V0czsgKytkYXRhX3NldCkKICAgICAgICAg ICAgICAgICAgICAgICAgICBvdXQgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA8PCBwYXRjaC0+ZGF0YShkYXRhX3NldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChpKihuX3N1YmRpdmlzaW9ucysxKSArIGopKihuX3N1YmRpdmlzaW9u cysxKStrKTsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHN0ZDo6ZW5kbDsKCgoKICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHlfZnJhY19uZXcgPSB5X2ZyYWMgKyAx Li9uX3N1YmRpdmlzaW9uczsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICgoKChwYXRj aC0+dmVydGljZXNbMV0gKiB4X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChwYXRjaC0+dmVydGljZXNbMF0gKiAoMS14X2ZyYWMpKSkgKiAoMS15X2ZyYWNfbmV3KSAr CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocGF0Y2gtPnZlcnRpY2VzWzJdICog eF9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRp Y2VzWzNdICogKDEteF9mcmFjKSkpICogeV9mcmFjX25ldykgKiAoMS16X2ZyYWMpICsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoKChwYXRjaC0+dmVydGljZXNbNV0gKiB4X2ZyYWMp ICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNbNF0g KiAoMS14X2ZyYWMpKSkgKiAoMS15X2ZyYWNfbmV3KSArCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICgocGF0Y2gtPnZlcnRpY2VzWzZdICogeF9mcmFjKSArCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzddICogKDEteF9mcmFjKSkpICog eV9mcmFjX25ldykgKiB6X2ZyYWMpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln bmVkIGludCBkYXRhX3NldD0wOyBkYXRhX3NldDxuX2RhdGFfc2V0czsgKytkYXRhX3NldCkKICAg ICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA8PCBwYXRjaC0+ZGF0YShkYXRhX3NldCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChpKihuX3N1YmRpdmlzaW9ucysxKSArIGopKihuX3N1YmRp dmlzaW9ucysxKStrKzEpOwogICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgc3RkOjplbmRs OwoKCiAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBzdGQ6OmVuZGwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgICAgICAgICAgIH07Cgog ICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9OwoKICAg ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB7IH07CiAgICAgICAgfTsKICAgIH07Cgog IHsgaWYgKF9fYnVpbHRpbl9leHBlY3QoIShvdXQpLCBmYWxzZSkpIGRlYWxfSUlfZXhjZXB0aW9u czo6aW50ZXJuYWxzOjogaXNzdWVfZXJyb3JfdGhyb3cgKCJzb3VyY2UvZGF0YV9vdXRfYmFzZS5j YyIsIDEyNjEsIF9fUFJFVFRZX0ZVTkNUSU9OX18sICJvdXQiLCAiRXhjSU8oKSIsIEV4Y0lPKCkp OyB9Owp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbSwgaW50IHNwYWNlZGltPgp2b2lkIERhdGFPdXRC YXNlOjp3cml0ZV9wb3ZyYXkgKGNvbnN0IHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4g PiAmcGF0Y2hlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZl Y3RvcjxzdGQ6OnN0cmluZz4gJmRhdGFfbmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgUG92cmF5RmxhZ3MgJmZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0ZDo6b3N0cmVhbSAmb3V0KQp7CiAgeyBpZiAoX19idWlsdGluX2V4cGVjdCghKG91 dCksIGZhbHNlKSkgZGVhbF9JSV9leGNlcHRpb25zOjppbnRlcm5hbHM6OiBpc3N1ZV9lcnJvcl90 aHJvdyAoInNvdXJjZS9kYXRhX291dF9iYXNlLmNjIiwgMTI3MiwgX19QUkVUVFlfRlVOQ1RJT05f XywgIm91dCIsICJFeGNJTygpIiwgRXhjSU8oKSk7IH07CgogIHsgfTsKICB7IH07CiAgeyB9OwoK ICBjb25zdCB1bnNpZ25lZCBpbnQgbl9kYXRhX3NldHMgPSBkYXRhX25hbWVzLnNpemUoKTsKCgog IGlmICh0cnVlKQogICAgewoKCiAgICAgIGNvbnN0IHN0ZDo6dGltZV90IHRpbWUxPSBzdGQ6OnRp bWUgKDApOwogICAgICBjb25zdCBzdGQ6OnRtICp0aW1lID0gc3RkOjpsb2NhbHRpbWUoJnRpbWUx KTsKICAgICAgb3V0IDw8ICIvKiBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSB0aGUgZGVhbC5J SSBsaWJyYXJ5LiIgPDwgc3RkOjplbmRsCiAgICAgICAgICA8PCAiICAgRGF0ZSA9ICAiCiAgICAg ICAgICA8PCB0aW1lLT50bV95ZWFyKzE5MDAgPDwgIi8iCiAgICAgICAgICA8PCB0aW1lLT50bV9t b24rMSA8PCAiLyIKICAgICAgICAgIDw8IHRpbWUtPnRtX21kYXkgPDwgc3RkOjplbmRsCiAgICAg ICAgICA8PCAiICAgVGltZSA9ICAiCiAgICAgICAgICA8PCB0aW1lLT50bV9ob3VyIDw8ICI6Igog ICAgICAgICAgPDwgc3RkOjpzZXR3KDIpIDw8IHRpbWUtPnRtX21pbiA8PCAiOiIKICAgICAgICAg IDw8IHN0ZDo6c2V0dygyKSA8PCB0aW1lLT50bV9zZWMgPDwgc3RkOjplbmRsCiAgICAgICAgICA8 PCBzdGQ6OmVuZGwKICAgICAgICAgIDw8ICIgICBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9W UkFZIGZvcm1hdCBzZWUgdGhlIFBPVlJBWSBtYW51YWwuIgogICAgICAgICAgPDwgc3RkOjplbmRs CiAgICAgICAgICA8PCAiKi8gIiA8PCBzdGQ6OmVuZGw7CgoKICAgICAgb3V0IDw8ICIjaW5jbHVk ZSBcImNvbG9ycy5pbmNcIiAiIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgPDwgIiNpbmNsdWRlIFwi dGV4dHVyZXMuaW5jXCIgIiA8PCBzdGQ6OmVuZGw7CgoKCgogICAgICBpZiAoZmxhZ3MuZXh0ZXJu YWxfZGF0YSkKICAgICAgICBvdXQgPDwgIiNpbmNsdWRlIFwiZGF0YS5pbmNcIiAiIDw8IHN0ZDo6 ZW5kbDsKICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICBvdXQgPDwgc3RkOjplbmRsIDw8 IHN0ZDo6ZW5kbAogICAgICAgICAgICAgIDw8ICJjYW1lcmEgeyIgPDwgc3RkOjplbmRsCiAgICAg ICAgICAgICAgPDwgIiAgbG9jYXRpb24gPDEsNCwtNz4iIDw8IHN0ZDo6ZW5kbAogICAgICAgICAg ICAgIDw8ICIgIGxvb2tfYXQgPDAsMCwwPiIgPDwgc3RkOjplbmRsCiAgICAgICAgICAgICAgPDwg IiAgYW5nbGUgMzAiIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgICAgIDw8ICJ9IiA8PCBzdGQ6OmVu ZGw7CgoKICAgICAgICAgIG91dCA8PCBzdGQ6OmVuZGwKICAgICAgICAgICAgICA8PCAibGlnaHRf c291cmNlIHsiIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgICAgIDw8ICIgIDwxLDQsLTc+IiA8PCBz dGQ6OmVuZGwKICAgICAgICAgICAgICA8PCAiICBjb2xvciBHcmV5IiA8PCBzdGQ6OmVuZGwKICAg ICAgICAgICAgICA8PCAifSIgPDwgc3RkOjplbmRsOwogICAgICAgICAgb3V0IDw8IHN0ZDo6ZW5k bAogICAgICAgICAgICAgIDw8ICJsaWdodF9zb3VyY2UgeyIgPDwgc3RkOjplbmRsCiAgICAgICAg ICAgICAgPDwgIiAgPDAsMjAsMD4iIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgICAgIDw8ICIgIGNv bG9yIFdoaXRlIiA8PCBzdGQ6OmVuZGwKICAgICAgICAgICAgICA8PCAifSIgPDwgc3RkOjplbmRs OwogICAgICAgIH0KICAgIH07CgoKICBkb3VibGUgaG1pbj0wLCBobWF4PTA7CgogIGZvciAodHlw ZW5hbWUgc3RkOjp2ZWN0b3I8UGF0Y2g8ZGltLHNwYWNlZGltPiA+Ojpjb25zdF9pdGVyYXRvciBw YXRjaD1wYXRjaGVzLmJlZ2luKCk7CiAgICAgICBwYXRjaCAhPSBwYXRjaGVzLmVuZCgpOyArK3Bh dGNoKQogICAgewogICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbl9zdWJkaXZpc2lvbnMgPSBwYXRj aC0+bl9zdWJkaXZpc2lvbnM7CgogICAgICB7IH07CgogICAgICB7IH07CiMgMTM1MyAic291cmNl L2RhdGFfb3V0X2Jhc2UuY2MiCiAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRp dmlzaW9uczsgKytpKQogICAgICAgIGZvciAodW5zaWduZWQgaW50IGo9MDsgajxuX3N1YmRpdmlz aW9uczsgKytqKQogICAgICAgICAgewogICAgICAgICAgICBjb25zdCBpbnQgZGwgPSBpKihuX3N1 YmRpdmlzaW9ucysxKStqOwogICAgICAgICAgICBpZiAoKGhtaW49PTApfHwocGF0Y2gtPmRhdGEo MCxkbCk8aG1pbikpIGhtaW49cGF0Y2gtPmRhdGEoMCxkbCk7CiAgICAgICAgICAgIGlmICgoaG1h eD09MCl8fChwYXRjaC0+ZGF0YSgwLGRsKT5obWF4KSkgaG1heD1wYXRjaC0+ZGF0YSgwLGRsKTsK ICAgICAgICAgIH0KICAgIH0KCiAgb3V0IDw8ICIjZGVjbGFyZSBITUlOPSIgPDwgaG1pbiA8PCAi OyIgPDwgc3RkOjplbmRsCiAgICAgIDw8ICIjZGVjbGFyZSBITUFYPSIgPDwgaG1heCA8PCAiOyIg PDwgc3RkOjplbmRsIDw8IHN0ZDo6ZW5kbDsKCiAgaWYgKCFmbGFncy5leHRlcm5hbF9kYXRhKQog ICAgewoKCiAgICAgIG91dCA8PCAiI2RlY2xhcmUgVGV4PXRleHR1cmV7IiA8PCBzdGQ6OmVuZGwK ICAgICAgICAgIDw8ICIgIHBpZ21lbnQgeyIgPDwgc3RkOjplbmRsCiAgICAgICAgICA8PCAiICAg IGdyYWRpZW50IHkiIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgPDwgIiAgICBzY2FsZSB5KihITUFY LUhNSU4pKiIgPDwgMC4xIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgPDwgIiAgICBjb2xvcl9tYXAg eyIgPDwgc3RkOjplbmRsCiAgICAgICAgICA8PCAiICAgICAgWzAuMDAgY29sb3IgTGlnaHRfUHVy cGxlXSAiIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgPDwgIiAgICAgIFswLjk1IGNvbG9yIExpZ2h0 X1B1cnBsZV0gIiA8PCBzdGQ6OmVuZGwKICAgICAgICAgIDw8ICIgICAgICBbMS4wMCBjb2xvciBX aGl0ZV0gICAgIiA8PCBzdGQ6OmVuZGwKICAgICAgICAgIDw8ICJ9IH0gfSIgPDwgc3RkOjplbmRs IDw8IHN0ZDo6ZW5kbDsKICAgIH0KCiAgaWYgKCFmbGFncy5iaWN1YmljX3BhdGNoKQogICAgewog ICAgICBvdXQgPDwgc3RkOjplbmRsCiAgICAgICAgICA8PCAibWVzaCB7IiA8PCBzdGQ6OmVuZGw7 CiAgICB9CgoKICBmb3IgKHR5cGVuYW1lIHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4g Pjo6Y29uc3RfaXRlcmF0b3IgcGF0Y2g9cGF0Y2hlcy5iZWdpbigpOwogICAgICAgcGF0Y2ggIT0g cGF0Y2hlcy5lbmQoKTsgKytwYXRjaCkKICAgIHsKICAgICAgY29uc3QgdW5zaWduZWQgaW50IG5f c3ViZGl2aXNpb25zID0gcGF0Y2gtPm5fc3ViZGl2aXNpb25zOwoKICAgICAgeyB9OwoKICAgICAg eyB9OwojIDE0MDQgInNvdXJjZS9kYXRhX291dF9iYXNlLmNjIgogICAgICBzdGQ6OnZlY3RvcjxQ b2ludDxzcGFjZWRpbT4gPiB2ZXIoKG5fc3ViZGl2aXNpb25zKzEpKgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKG5fc3ViZGl2aXNpb25zKzEpKTsKCiAgICAgIGZvciAo dW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2kpCiAgICAgICAgewogICAg ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaj0wOyBqPG5fc3ViZGl2aXNpb25zKzE7ICsraikKICAg ICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4X2ZyYWMgPSBpICogMS4vbl9z dWJkaXZpc2lvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHlfZnJhYyA9IGogKiAxLi9u X3N1YmRpdmlzaW9uczsKCgogICAgICAgICAgICAgIHZlcltpKihuX3N1YmRpdmlzaW9ucysxKStq XT0gKCgocGF0Y2gtPnZlcnRpY2VzWzFdICogeF9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNbMF0gKiAoMS14X2ZyYWMp KSkgKiAoMS15X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoKHBhdGNoLT52ZXJ0aWNlc1syXSAqIHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzNdICogKDEteF9mcmFj KSkpICogeV9mcmFjKTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwoKICAgICAgaWYgKCFmbGFn cy5iaWN1YmljX3BhdGNoKQogICAgICAgIHsKICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9 MDsgaTxuX3N1YmRpdmlzaW9uczsgKytpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZm9y ICh1bnNpZ25lZCBpbnQgaj0wOyBqPG5fc3ViZGl2aXNpb25zOyArK2opCiAgICAgICAgICAgICAg ICB7CgogICAgICAgICAgICAgICAgICBjb25zdCBpbnQgZGwgPSBpKihuX3N1YmRpdmlzaW9ucysx KStqOwogICAgICAgICAgICAgICAgICBpZiAoZmxhZ3Muc21vb3RoKQogICAgICAgICAgICAgICAg ICAgIHsKCgogICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8UG9pbnQ8Mz4gPiBucm1s KChuX3N1YmRpdmlzaW9ucysxKSoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobl9zdWJkaXZpc2lvbnMrMSkpOwogICAgICAgICAgICAgICAgICAgICAg UG9pbnQ8Mz4gaDEsaDI7CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp PTA7IGk8bl9zdWJkaXZpc2lvbnMrMTsrK2kpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqPTA7IGo8bl9zdWJkaXZp c2lvbnMrMTsrK2opCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChpPT0wKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgxKDApPXZlclsoaSsxKSoobl9z dWJkaXZpc2lvbnMrMSkral0oMCktCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2ZXJbaSoobl9zdWJkaXZpc2lvbnMrMSkral0oMCk7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBoMSgxKT1wYXRjaC0+ZGF0YSgwLChpKzEpKihuX3N1YmRpdmlzaW9ucysx KStqKS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoLT5kYXRh KDAsaSoobl9zdWJkaXZpc2lvbnMrMSkraik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBoMSgyKT12ZXJbKGkrMSkqKG5fc3ViZGl2aXNpb25zKzEpK2pdKDEpLQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyW2kqKG5fc3ViZGl2aXNpb25zKzEpK2pd KDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpPT1u X3N1YmRpdmlzaW9ucykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDEoMCk9dmVyW2kqKG5fc3ViZGl2aXNpb25z KzEpK2pdKDApLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJb KGktMSkqKG5fc3ViZGl2aXNpb25zKzEpK2pdKDApOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBoMSgxKT1wYXRjaC0+ZGF0YSgwLGkqKG5fc3ViZGl2aXNpb25zKzEpK2opLQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaC0+ZGF0YSgwLChp LTEpKihuX3N1YmRpdmlzaW9ucysxKStqKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaDEoMik9dmVyW2kqKG5fc3ViZGl2aXNpb25zKzEpK2pdKDEpLQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJbKGktMSkqKG5fc3ViZGl2aXNpb25zKzEp K2pdKDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDEoMCk9dmVyWyhpKzEpKihu X3N1YmRpdmlzaW9ucysxKStqXSgwKS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdmVyWyhpLTEpKihuX3N1YmRpdmlzaW9ucysxKStqXSgwKTsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaDEoMSk9cGF0Y2gtPmRhdGEoMCwoaSsxKSoobl9zdWJk aXZpc2lvbnMrMSkraiktCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBhdGNoLT5kYXRhKDAsKGktMSkqKG5fc3ViZGl2aXNpb25zKzEpK2opOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBoMSgyKT12ZXJbKGkrMSkqKG5fc3ViZGl2aXNpb25zKzEp K2pdKDEpLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJbKGkt MSkqKG5fc3ViZGl2aXNpb25zKzEpK2pdKDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGo9PTApCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaDIoMCk9dmVyW2kqKG5fc3ViZGl2aXNpb25zKzEpK2orMV0oMCktCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJbaSoobl9zdWJkaXZpc2lvbnMrMSkral0oMCk7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMigxKT1wYXRjaC0+ZGF0YSgwLGkq KG5fc3ViZGl2aXNpb25zKzEpK2orMSktCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwYXRjaC0+ZGF0YSgwLGkqKG5fc3ViZGl2aXNpb25zKzEpK2opOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaDIoMik9dmVyW2kqKG5fc3ViZGl2aXNpb25zKzEpK2or MV0oMSktCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJbaSoobl9z dWJkaXZpc2lvbnMrMSkral0oMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKGo9PW5fc3ViZGl2aXNpb25zKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMigwKT12ZXJb aSoobl9zdWJkaXZpc2lvbnMrMSkral0oMCktCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZlcltpKihuX3N1YmRpdmlzaW9ucysxKStqLTFdKDApOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBoMigxKT1wYXRjaC0+ZGF0YSgwLGkqKG5fc3ViZGl2 aXNpb25zKzEpK2opLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw YXRjaC0+ZGF0YSgwLGkqKG5fc3ViZGl2aXNpb25zKzEpK2otMSk7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGgyKDIpPXZlcltpKihuX3N1YmRpdmlzaW9ucysxKStqXSgxKS0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyW2kqKG5fc3ViZGl2 aXNpb25zKzEpK2otMV0oMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMigwKT12 ZXJbaSoobl9zdWJkaXZpc2lvbnMrMSkraisxXSgwKS0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdmVyW2kqKG5fc3ViZGl2aXNpb25zKzEpK2otMV0oMCk7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgyKDEpPXBhdGNoLT5kYXRhKDAsaSoobl9z dWJkaXZpc2lvbnMrMSkraisxKS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGF0Y2gtPmRhdGEoMCxpKihuX3N1YmRpdmlzaW9ucysxKStqLTEpOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBoMigyKT12ZXJbaSoobl9zdWJkaXZpc2lvbnMrMSkr aisxXSgxKS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyW2kq KG5fc3ViZGl2aXNpb25zKzEpK2otMV0oMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucm1sW2kqKG5fc3ViZGl2aXNp b25zKzEpK2pdKDApPWgxKDEpKmgyKDIpLWgxKDIpKmgyKDEpOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBucm1sW2kqKG5fc3ViZGl2aXNpb25zKzEpK2pdKDEpPWgxKDIpKmgyKDApLWgx KDApKmgyKDIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucm1sW2kqKG5fc3ViZGl2 aXNpb25zKzEpK2pdKDIpPWgxKDApKmgyKDEpLWgxKDEpKmgyKDApOwoKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRvdWJsZSBub3JtPXN0ZDo6c3FydCgKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdGQ6OnBvdyhucm1sW2kqKG5fc3ViZGl2aXNpb25zKzEpK2pdKDApLDIu KSsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnBvdyhucm1sW2kqKG5fc3Vi ZGl2aXNpb25zKzEpK2pdKDEpLDIuKSsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dGQ6OnBvdyhucm1sW2kqKG5fc3ViZGl2aXNpb25zKzEpK2pdKDIpLDIuKSk7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAobnJtbFtpKihuX3N1YmRpdmlzaW9ucysxKStqXSgxKTww KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm0qPS0xLjsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGs9MDtrPDM7KytrKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5ybWxbaSoobl9zdWJkaXZpc2lvbnMrMSkral0oaykv PW5vcm07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg ICAgIH0KCgoKICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAic21vb3RoX3RyaWFuZ2xlIHsi IDw8IHN0ZDo6ZW5kbCA8PCAiXHQ8IgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHZlcltk bF0oMCkgPDwgIiwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgcGF0Y2gtPmRhdGEoMCxk bCkgPDwgIiwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgdmVyW2RsXSgxKSA8PCAiPiwg PCIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBucm1sW2RsXSgwKSA8PCAiLCAiIDw8IG5y bWxbZGxdKDEpIDw8ICIsICIgPDwgbnJtbFtkbF0oMikKICAgICAgICAgICAgICAgICAgICAgICAg ICA8PCAiPiwiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiIFx0 PCIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCB2ZXJbZGwrbl9zdWJkaXZpc2lvbnMrMV0o MCkgPDwgIiwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgcGF0Y2gtPmRhdGEoMCxkbCtu X3N1YmRpdmlzaW9ucysxKSA8PCAiLCIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCB2ZXJb ZGwrbl9zdWJkaXZpc2lvbnMrMV0oMSkgPDwgIj4sIDwiCiAgICAgICAgICAgICAgICAgICAgICAg ICAgPDwgbnJtbFtkbCtuX3N1YmRpdmlzaW9ucysxXSgwKSA8PCAiLCAiCiAgICAgICAgICAgICAg ICAgICAgICAgICAgPDwgbnJtbFtkbCtuX3N1YmRpdmlzaW9ucysxXSgxKSA8PCAiLCAiCiAgICAg ICAgICAgICAgICAgICAgICAgICAgPDwgbnJtbFtkbCtuX3N1YmRpdmlzaW9ucysxXSgyKQogICAg ICAgICAgICAgICAgICAgICAgICAgIDw8ICI+LCIgPDwgc3RkOjplbmRsOwogICAgICAgICAgICAg ICAgICAgICAgb3V0IDw8ICJcdDwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgdmVyW2Rs K25fc3ViZGl2aXNpb25zKzJdKDApIDw8ICIsIgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8 IHBhdGNoLT5kYXRhKDAsZGwrbl9zdWJkaXZpc2lvbnMrMikgPDwgIiwiCiAgICAgICAgICAgICAg ICAgICAgICAgICAgPDwgdmVyW2RsK25fc3ViZGl2aXNpb25zKzJdKDEpIDw8ICI+LCA8IgogICAg ICAgICAgICAgICAgICAgICAgICAgIDw8IG5ybWxbZGwrbl9zdWJkaXZpc2lvbnMrMl0oMCkgPDwg IiwgIgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IG5ybWxbZGwrbl9zdWJkaXZpc2lvbnMr Ml0oMSkgPDwgIiwgIgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IG5ybWxbZGwrbl9zdWJk aXZpc2lvbnMrMl0oMikKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiPn0iIDw8IHN0ZDo6 ZW5kbDsKCgogICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJzbW9vdGhfdHJpYW5nbGUgeyIg PDwgc3RkOjplbmRsIDw8ICJcdDwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgdmVyW2Rs XSgwKSA8PCAiLCIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBwYXRjaC0+ZGF0YSgwLGRs KSA8PCAiLCIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCB2ZXJbZGxdKDEpIDw8ICI+LCA8 IgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IG5ybWxbZGxdKDApIDw8ICIsICIgPDwgbnJt bFtkbF0oMSkgPDwgIiwgIiA8PCBucm1sW2RsXSgyKQogICAgICAgICAgICAgICAgICAgICAgICAg IDw8ICI+LCIgPDwgc3RkOjplbmRsOwogICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJcdDwi CiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgdmVyW2RsK25fc3ViZGl2aXNpb25zKzJdKDAp IDw8ICIsIgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHBhdGNoLT5kYXRhKDAsZGwrbl9z dWJkaXZpc2lvbnMrMikgPDwgIiwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgdmVyW2Rs K25fc3ViZGl2aXNpb25zKzJdKDEpIDw8ICI+LCA8IgogICAgICAgICAgICAgICAgICAgICAgICAg IDw8IG5ybWxbZGwrbl9zdWJkaXZpc2lvbnMrMl0oMCkgPDwgIiwgIgogICAgICAgICAgICAgICAg ICAgICAgICAgIDw8IG5ybWxbZGwrbl9zdWJkaXZpc2lvbnMrMl0oMSkgPDwgIiwgIgogICAgICAg ICAgICAgICAgICAgICAgICAgIDw8IG5ybWxbZGwrbl9zdWJkaXZpc2lvbnMrMl0oMikKICAgICAg ICAgICAgICAgICAgICAgICAgICA8PCAiPiwiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgICAg ICAgICAgIG91dCA8PCAiXHQ8IgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHZlcltkbCsx XSgwKSA8PCAiLCIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBwYXRjaC0+ZGF0YSgwLGRs KzEpIDw8ICIsIgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHZlcltkbCsxXSgxKSA8PCAi PiwgPCIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBucm1sW2RsKzFdKDApIDw8ICIsICIg PDwgbnJtbFtkbCsxXSgxKSA8PCAiLCAiIDw8IG5ybWxbZGwrMV0oMikKICAgICAgICAgICAgICAg ICAgICAgICAgICA8PCAiPn0iIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICAgICAgICAgIG91dCA8PCAidHJpYW5nbGUgeyIgPDwgc3RkOjplbmRsIDw8ICJcdDwiCiAgICAg ICAgICAgICAgICAgICAgICAgICAgPDwgdmVyW2RsXSgwKSA8PCAiLCIKICAgICAgICAgICAgICAg ICAgICAgICAgICA8PCBwYXRjaC0+ZGF0YSgwLGRsKSA8PCAiLCIKICAgICAgICAgICAgICAgICAg ICAgICAgICA8PCB2ZXJbZGxdKDEpIDw8ICI+LCIgPDwgc3RkOjplbmRsOwogICAgICAgICAgICAg ICAgICAgICAgb3V0IDw8ICJcdDwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgdmVyW2Rs K25fc3ViZGl2aXNpb25zKzFdKDApIDw8ICIsIgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8 IHBhdGNoLT5kYXRhKDAsZGwrbl9zdWJkaXZpc2lvbnMrMSkgPDwgIiwiCiAgICAgICAgICAgICAg ICAgICAgICAgICAgPDwgdmVyW2RsK25fc3ViZGl2aXNpb25zKzFdKDEpIDw8ICI+LCIgPDwgc3Rk OjplbmRsOwogICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJcdDwiCiAgICAgICAgICAgICAg ICAgICAgICAgICAgPDwgdmVyW2RsK25fc3ViZGl2aXNpb25zKzJdKDApIDw8ICIsIgogICAgICAg ICAgICAgICAgICAgICAgICAgIDw8IHBhdGNoLT5kYXRhKDAsZGwrbl9zdWJkaXZpc2lvbnMrMikg PDwgIiwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgdmVyW2RsK25fc3ViZGl2aXNpb25z KzJdKDEpIDw8ICI+fSIgPDwgc3RkOjplbmRsOwoKCiAgICAgICAgICAgICAgICAgICAgICBvdXQg PDwgInRyaWFuZ2xlIHsiIDw8IHN0ZDo6ZW5kbCA8PCAiXHQ8IgogICAgICAgICAgICAgICAgICAg ICAgICAgIDw8IHZlcltkbF0oMCkgPDwgIiwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwg cGF0Y2gtPmRhdGEoMCxkbCkgPDwgIiwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgdmVy W2RsXSgxKSA8PCAiPiwiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgICAgICAgICAgIG91dCA8 PCAiXHQ8IgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHZlcltkbCtuX3N1YmRpdmlzaW9u cysyXSgwKSA8PCAiLCIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBwYXRjaC0+ZGF0YSgw LGRsK25fc3ViZGl2aXNpb25zKzIpIDw8ICIsIgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8 IHZlcltkbCtuX3N1YmRpdmlzaW9ucysyXSgxKSA8PCAiPiwiIDw8IHN0ZDo6ZW5kbDsKICAgICAg ICAgICAgICAgICAgICAgIG91dCA8PCAiXHQ8IgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8 IHZlcltkbCsxXSgwKSA8PCAiLCIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBwYXRjaC0+ ZGF0YSgwLGRsKzEpIDw8ICIsIgogICAgICAgICAgICAgICAgICAgICAgICAgICA8PCB2ZXJbZGwr MV0oMSkgPDwgIj59IiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAg ICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgZWxzZQogICAg ICAgIHsKICAgICAgICAgIHsgfTsKICAgICAgICAgIG91dCA8PCBzdGQ6OmVuZGwKICAgICAgICAg ICAgICA8PCAiYmljdWJpY19wYXRjaCB7IiA8PCBzdGQ6OmVuZGwKICAgICAgICAgICAgICA8PCAi ICB0eXBlIDAiIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgICAgIDw8ICIgIGZsYXRuZXNzIDAiIDw8 IHN0ZDo6ZW5kbAogICAgICAgICAgICAgIDw8ICIgIHVfc3RlcHMgMCIgPDwgc3RkOjplbmRsCiAg ICAgICAgICAgICAgPDwgIiAgdl9zdGVwcyAwIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICBmb3Ig KGludCBpPTA7aTwxNjsrK2kpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBvdXQgPDwgIlx0 PCIgPDwgdmVyW2ldKDApIDw8ICIsIiA8PCBwYXRjaC0+ZGF0YSgwLGkpIDw8ICIsIiA8PCB2ZXJb aV0oMSkgPDwgIj4iOwogICAgICAgICAgICAgIGlmIChpIT0xNSkgb3V0IDw8ICIsIjsKICAgICAg ICAgICAgICBvdXQgPDwgc3RkOjplbmRsOwogICAgICAgICAgICB9OwogICAgICAgICAgb3V0IDw8 ICIgIHRleHR1cmUge1RleH0iIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgICAgIDw8ICJ9IiA8PCBz dGQ6OmVuZGw7CiAgICAgICAgfTsKICAgIH07CgogIGlmICghZmxhZ3MuYmljdWJpY19wYXRjaCkK ICAgIHsKICAgICAgb3V0IDw8ICIgIHRleHR1cmUge1RleH0iIDw8IHN0ZDo6ZW5kbAogICAgICAg ICAgPDwgIn0iIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgPDwgc3RkOjplbmRsOwogICAgfQoKICB7 IGlmIChfX2J1aWx0aW5fZXhwZWN0KCEob3V0KSwgZmFsc2UpKSBkZWFsX0lJX2V4Y2VwdGlvbnM6 OmludGVybmFsczo6IGlzc3VlX2Vycm9yX3Rocm93ICgic291cmNlL2RhdGFfb3V0X2Jhc2UuY2Mi LCAxNjIzLCBfX1BSRVRUWV9GVU5DVElPTl9fLCAib3V0IiwgIkV4Y0lPKCkiLCBFeGNJTygpKTsg fTsKfTsKCgoKdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9pZCBEYXRhT3V0QmFz ZTo6d3JpdGVfZXBzIChjb25zdCBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ID4gJnBh dGNoZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3Rk OjpzdHJpbmc+ICYgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVwc0ZsYWdz ICZmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW0gJm91dCkK ewogIHsgfTsKCiAgeyB9OwoKCiAgeyB9OwoKICBzd2l0Y2ggKGRpbSkKICAgIHsKICAgICAgY2Fz ZSAyOgogICAgICB7CiMgMTY1NiAic291cmNlL2RhdGFfb3V0X2Jhc2UuY2MiCiAgICAgICAgc3Rk OjptdWx0aXNldDxFcHNDZWxsMmQ+IGNlbGxzOwojIDE2NjUgInNvdXJjZS9kYXRhX291dF9iYXNl LmNjIgogICAgICAgIGRvdWJsZSBtaW5fY29sb3JfdmFsdWU9MCwgbWF4X2NvbG9yX3ZhbHVlPTA7 CgoKCgogICAgICAgIGRvdWJsZSBoZWlnaHRzWzRdOwoKCgoKCgogICAgICAgIGZvciAodHlwZW5h bWUgc3RkOjp2ZWN0b3I8UGF0Y2g8ZGltLHNwYWNlZGltPiA+Ojpjb25zdF9pdGVyYXRvciBwYXRj aD1wYXRjaGVzLmJlZ2luKCk7CiAgICAgICAgICAgICBwYXRjaCE9cGF0Y2hlcy5lbmQoKTsgKytw YXRjaCkKICAgICAgICAgIHsKICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG5fc3ViZGl2 aXNpb25zID0gcGF0Y2gtPm5fc3ViZGl2aXNpb25zOwogICAgICAgICAgICBmb3IgKHVuc2lnbmVk IGludCBpPTA7IGk8bl9zdWJkaXZpc2lvbnM7ICsraSkKICAgICAgICAgICAgICBmb3IgKHVuc2ln bmVkIGludCBqPTA7IGo8bl9zdWJkaXZpc2lvbnM7ICsraikKICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHhfZnJhYyA9IGkgKiAxLi9uX3N1YmRpdmlzaW9u cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlfZnJhYyA9IGogKiAxLi9uX3N1YmRp dmlzaW9ucywKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhfZnJhYzEgPSAoaSsxKSAq IDEuL25fc3ViZGl2aXNpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5X2ZyYWMx ID0gKGorMSkgKiAxLi9uX3N1YmRpdmlzaW9uczsKCiAgICAgICAgICAgICAgICAgIGNvbnN0IFBv aW50PHNwYWNlZGltPiBwb2ludHNbNF0KICAgICAgICAgICAgICAgICAgICA9IHsgKCgocGF0Y2gt PnZlcnRpY2VzWzFdICogeF9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNo LT52ZXJ0aWNlc1swXSAqICgxLXhfZnJhYykpKSAqICgxLXlfZnJhYykgKwogICAgICAgICAgICAg ICAgICAgICAgICAgKChwYXRjaC0+dmVydGljZXNbMl0gKiB4X2ZyYWMpICsKICAgICAgICAgICAg ICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzNdICogKDEteF9mcmFjKSkpICogeV9mcmFj KSwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgocGF0Y2gtPnZlcnRpY2VzWzFdICogeF9m cmFjMSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1swXSAq ICgxLXhfZnJhYzEpKSkgKiAoMS15X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAg KChwYXRjaC0+dmVydGljZXNbMl0gKiB4X2ZyYWMxKSArCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAocGF0Y2gtPnZlcnRpY2VzWzNdICogKDEteF9mcmFjMSkpKSAqIHlfZnJhYyksCgogICAg ICAgICAgICAgICAgICAgICAgICAgICgoKHBhdGNoLT52ZXJ0aWNlc1sxXSAqIHhfZnJhYzEpICsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNbMF0gKiAoMS14X2Zy YWMxKSkpICogKDEteV9mcmFjMSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAoKHBhdGNo LT52ZXJ0aWNlc1syXSAqIHhfZnJhYzEpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChw YXRjaC0+dmVydGljZXNbM10gKiAoMS14X2ZyYWMxKSkpICogeV9mcmFjMSksCgogICAgICAgICAg ICAgICAgICAgICAgICAgICgoKHBhdGNoLT52ZXJ0aWNlc1sxXSAqIHhfZnJhYykgKwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1swXSAqICgxLXhfZnJhYykpKSAq ICgxLXlfZnJhYzEpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwYXRjaC0+dmVydGlj ZXNbMl0gKiB4X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVy dGljZXNbM10gKiAoMS14X2ZyYWMpKSkgKiB5X2ZyYWMxKQogICAgICAgICAgICAgICAgICAgICAg ICAgIH07CgogICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNwYWNlZGltKQogICAgICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAg ICB7IH07CgoKCiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHRzWzBdID0gcGF0Y2gtPmRhdGEu bl9yb3dzKCkgIT0gMCA/CiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoLT5kYXRhKGZsYWdz LmhlaWdodF92ZWN0b3IsaSoobl9zdWJkaXZpc2lvbnMrMSkgKyBqKSAqIGZsYWdzLnpfc2NhbGlu ZwogICAgICAgICAgICAgICAgICAgICAgICA6IDA7CgogICAgICAgICAgICAgICAgICAgICAgaGVp Z2h0c1sxXSA9IHBhdGNoLT5kYXRhLm5fcm93cygpICE9IDAgPwogICAgICAgICAgICAgICAgICAg ICAgICBwYXRjaC0+ZGF0YShmbGFncy5oZWlnaHRfdmVjdG9yLChpKzEpKihuX3N1YmRpdmlzaW9u cysxKSArIGopICogZmxhZ3Muel9zY2FsaW5nCiAgICAgICAgICAgICAgICAgICAgICAgIDogMDsK CiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHRzWzJdID0gcGF0Y2gtPmRhdGEubl9yb3dzKCkg IT0gMCA/CiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoLT5kYXRhKGZsYWdzLmhlaWdodF92 ZWN0b3IsKGkrMSkqKG5fc3ViZGl2aXNpb25zKzEpICsgaisxKSAqIGZsYWdzLnpfc2NhbGluZwog ICAgICAgICAgICAgICAgICAgICAgICA6IDA7CgogICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0 c1szXSA9IHBhdGNoLT5kYXRhLm5fcm93cygpICE9IDAgPwogICAgICAgICAgICAgICAgICAgICAg ICBwYXRjaC0+ZGF0YShmbGFncy5oZWlnaHRfdmVjdG9yLGkqKG5fc3ViZGl2aXNpb25zKzEpICsg aisxKSAqIGZsYWdzLnpfc2NhbGluZwogICAgICAgICAgICAgICAgICAgICAgICA6IDA7CiAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CgogICAg ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wO2k8NDsrK2kpCiAgICAgICAg ICAgICAgICAgICAgICAgIGhlaWdodHNbaV0gPSBwb2ludHNbaV0oMik7CiAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg ICAgICAgICAgeyB9OwogICAgICAgICAgICAgICAgICAgIH0KIyAxNzY0ICJzb3VyY2UvZGF0YV9v dXRfYmFzZS5jYyIKICAgICAgICAgICAgICAgICAgRXBzQ2VsbDJkIGVwc19jZWxsOwogICAgICAg ICAgICAgICAgICBjb25zdCBkb3VibGUgcGkgPSBkZWFsX0lJX251bWJlcnM6OlBJOwogICAgICAg ICAgICAgICAgICBjb25zdCBkb3VibGUgY3ggPSAtc3RkOjpjb3MocGktZmxhZ3MuYXppbXV0X2Fu Z2xlICogMipwaSAvIDM2MC4pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ogPSAt c3RkOjpjb3MoZmxhZ3MudHVybl9hbmdsZSAqIDIqcGkgLyAzNjAuKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN4ID0gc3RkOjpzaW4ocGktZmxhZ3MuYXppbXV0X2FuZ2xlICogMipw aSAvIDM2MC4pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ogPSBzdGQ6OnNpbihm bGFncy50dXJuX2FuZ2xlICogMipwaSAvIDM2MC4pOwogICAgICAgICAgICAgICAgICBmb3IgKHVu c2lnbmVkIGludCB2ZXJ0ZXg9MDsgdmVydGV4PDQ7ICsrdmVydGV4KQogICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4ID0gcG9pbnRzW3ZlcnRl eF0oMCksCiAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBwb2ludHNbdmVydGV4XSgxKSwKICAg ICAgICAgICAgICAgICAgICAgICAgeiA9IC1oZWlnaHRzW3ZlcnRleF07CgogICAgICAgICAgICAg ICAgICAgICAgZXBzX2NlbGwudmVydGljZXNbdmVydGV4XSgwKSA9IC0gY3oqeCsgc3oqeTsKICAg ICAgICAgICAgICAgICAgICAgIGVwc19jZWxsLnZlcnRpY2VzW3ZlcnRleF0oMSkgPSAtY3gqc3oq eC1jeCpjeip5LXN4Kno7CiMgMTc5NCAic291cmNlL2RhdGFfb3V0X2Jhc2UuY2MiCiAgICAgICAg ICAgICAgICAgICAgfTsKCgoKICAgICAgICAgICAgICAgICAgY29uc3QgUG9pbnQ8c3BhY2VkaW0+ IGNlbnRlcl9wb2ludAogICAgICAgICAgICAgICAgICAgID0gKHBvaW50c1swXSArIHBvaW50c1sx XSArIHBvaW50c1syXSArIHBvaW50c1szXSkgLyA0OwogICAgICAgICAgICAgICAgICBjb25zdCBk b3VibGUgY2VudGVyX2hlaWdodAogICAgICAgICAgICAgICAgICAgID0gLShoZWlnaHRzWzBdICsg aGVpZ2h0c1sxXSArIGhlaWdodHNbMl0gKyBoZWlnaHRzWzNdKSAvIDQ7CgoKCiAgICAgICAgICAg ICAgICAgIGVwc19jZWxsLmRlcHRoID0gLXN4KnN6KmNlbnRlcl9wb2ludCgwKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC1zeCpjeipjZW50ZXJfcG9pbnQoMSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICArY3gqY2VudGVyX2hlaWdodDsKCiAgICAgICAgICAg ICAgICAgIGlmIChmbGFncy5kcmF3X2NlbGxzICYmIGZsYWdzLnNoYWRlX2NlbGxzKQogICAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHsgfTsKCgoKICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGRvdWJsZSBjb2xvcl92YWx1ZXNbNF0KICAgICAgICAgICAgICAgICAg ICAgICAgPSB7IHBhdGNoLT5kYXRhLm5fcm93cygpICE9IDAgPwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGF0Y2gtPmRhdGEoZmxhZ3MuY29sb3JfdmVjdG9yLGkqKG5fc3ViZGl2aXNpb25z KzEpICsgaikgOiAxLAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoLT5kYXRhLm5f cm93cygpICE9IDAgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2gtPmRhdGEoZmxh Z3MuY29sb3JfdmVjdG9yLChpKzEpKihuX3N1YmRpdmlzaW9ucysxKSArIGopIDogMSwKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwYXRjaC0+ZGF0YS5uX3Jvd3MoKSAhPSAwID8KICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBhdGNoLT5kYXRhKGZsYWdzLmNvbG9yX3ZlY3RvciwoaSsx KSoobl9zdWJkaXZpc2lvbnMrMSkgKyBqKzEpIDogMSwKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwYXRjaC0+ZGF0YS5uX3Jvd3MoKSAhPSAwID8KICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBhdGNoLT5kYXRhKGZsYWdzLmNvbG9yX3ZlY3RvcixpKihuX3N1YmRpdmlzaW9ucysxKSAr IGorMSkgOiAxfTsKCgoKICAgICAgICAgICAgICAgICAgICAgIGVwc19jZWxsLmNvbG9yX3ZhbHVl ID0gKGNvbG9yX3ZhbHVlc1swXSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb2xvcl92YWx1ZXNbMV0gKwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29sb3JfdmFsdWVzWzJdICsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yX3ZhbHVlc1szXSkgLyA0OwoKCgogICAgICAg ICAgICAgICAgICAgICAgaWYgKHBhdGNoID09IHBhdGNoZXMuYmVnaW4oKSkKICAgICAgICAgICAg ICAgICAgICAgICAgbWluX2NvbG9yX3ZhbHVlID0gbWF4X2NvbG9yX3ZhbHVlID0gZXBzX2NlbGwu Y29sb3JfdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fY29sb3JfdmFsdWUgPSAobWlu X2NvbG9yX3ZhbHVlIDwgZXBzX2NlbGwuY29sb3JfdmFsdWUgPwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fY29sb3JfdmFsdWUgOiBlcHNfY2VsbC5jb2xv cl92YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2NvbG9yX3ZhbHVlID0gKG1h eF9jb2xvcl92YWx1ZSA+IGVwc19jZWxsLmNvbG9yX3ZhbHVlID8KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2NvbG9yX3ZhbHVlIDogZXBzX2NlbGwuY29s b3JfdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAg IH07CgoKICAgICAgICAgICAgICAgICAgY2VsbHMuaW5zZXJ0IChlcHNfY2VsbCk7CiAgICAgICAg ICAgICAgICB9OwogICAgICAgICAgfTsKCgoKCiAgICAgICAgZG91YmxlIHhfbWluID0gY2VsbHMu YmVnaW4oKS0+dmVydGljZXNbMF0oMCk7CiAgICAgICAgZG91YmxlIHhfbWF4ID0geF9taW47CiAg ICAgICAgZG91YmxlIHlfbWluID0gY2VsbHMuYmVnaW4oKS0+dmVydGljZXNbMF0oMSk7CiAgICAg ICAgZG91YmxlIHlfbWF4ID0geV9taW47CgogICAgICAgIGZvciAodHlwZW5hbWUgc3RkOjptdWx0 aXNldDxFcHNDZWxsMmQ+Ojpjb25zdF9pdGVyYXRvcgogICAgICAgICAgICAgICBjZWxsPWNlbGxz LmJlZ2luKCk7CiAgICAgICAgICAgICBjZWxsIT1jZWxscy5lbmQoKTsgKytjZWxsKQogICAgICAg ICAgZm9yICh1bnNpZ25lZCBpbnQgdmVydGV4PTA7IHZlcnRleDw0OyArK3ZlcnRleCkKICAgICAg ICAgICAgewogICAgICAgICAgICAgIHhfbWluID0gc3RkOjptaW4gKHhfbWluLCBjZWxsLT52ZXJ0 aWNlc1t2ZXJ0ZXhdKDApKTsKICAgICAgICAgICAgICB4X21heCA9IHN0ZDo6bWF4ICh4X21heCwg Y2VsbC0+dmVydGljZXNbdmVydGV4XSgwKSk7CiAgICAgICAgICAgICAgeV9taW4gPSBzdGQ6Om1p biAoeV9taW4sIGNlbGwtPnZlcnRpY2VzW3ZlcnRleF0oMSkpOwogICAgICAgICAgICAgIHlfbWF4 ID0gc3RkOjptYXggKHlfbWF4LCBjZWxsLT52ZXJ0aWNlc1t2ZXJ0ZXhdKDEpKTsKICAgICAgICAg ICAgfTsKCgoKCgoKICAgICAgICBjb25zdCBkb3VibGUgc2NhbGUgPSAoZmxhZ3Muc2l6ZSAvCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbGFncy5zaXplX3R5cGU9PUVwc0ZsYWdzOjp3 aWR0aCA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4X21heCAtIHhfbWluIDoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlfbWluIC0geV9tYXgpKTsKCiAgICAgICAgY29u c3QgUG9pbnQ8Mj4gb2Zmc2V0KHhfbWluLCB5X21pbik7CgoKCiAgICAgICAgaWYgKHRydWUpCiAg ICAgICAgICB7CgoKCiAgICAgICAgICAgIHN0ZDo6dGltZV90IHRpbWUxPSBzdGQ6OnRpbWUgKDAp OwogICAgICAgICAgICBzdGQ6OnRtICp0aW1lID0gc3RkOjpsb2NhbHRpbWUoJnRpbWUxKTsKICAg ICAgICAgICAgb3V0IDw8ICIlIVBTLUFkb2JlLTIuMCBFUFNGLTEuMiIgPDwgc3RkOjplbmRsCiAg ICAgICAgICAgICAgICA8PCAiJSVUaXRsZTogZGVhbC5JSSBPdXRwdXQiIDw8IHN0ZDo6ZW5kbAog ICAgICAgICAgICAgICAgPDwgIiUlQ3JlYXRvcjogdGhlIGRlYWwuSUkgbGlicmFyeSIgPDwgc3Rk OjplbmRsCiAgICAgICAgICAgICAgICA8PCAiJSVDcmVhdGlvbiBEYXRlOiAiCiAgICAgICAgICAg ICAgICA8PCB0aW1lLT50bV95ZWFyKzE5MDAgPDwgIi8iCiAgICAgICAgICAgICAgICA8PCB0aW1l LT50bV9tb24rMSA8PCAiLyIKICAgICAgICAgICAgICAgIDw8IHRpbWUtPnRtX21kYXkgPDwgIiAt ICIKICAgICAgICAgICAgICAgIDw8IHRpbWUtPnRtX2hvdXIgPDwgIjoiCiAgICAgICAgICAgICAg ICA8PCBzdGQ6OnNldHcoMikgPDwgdGltZS0+dG1fbWluIDw8ICI6IgogICAgICAgICAgICAgICAg PDwgc3RkOjpzZXR3KDIpIDw8IHRpbWUtPnRtX3NlYyA8PCBzdGQ6OmVuZGwKICAgICAgICAgICAg ICAgIDw8ICIlJUJvdW5kaW5nQm94OiAiCgogICAgICAgICAgICAgICAgPDwgIjAgMCAiCgogICAg ICAgICAgICAgICAgPDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PiggKHhfbWF4LXhfbWluKSAq IHNjYWxlICkKICAgICAgICAgICAgICAgIDw8ICcgJwogICAgICAgICAgICAgICAgPDwgc3RhdGlj X2Nhc3Q8dW5zaWduZWQgaW50PiggKHlfbWF4LXlfbWluKSAqIHNjYWxlICkKICAgICAgICAgICAg ICAgIDw8IHN0ZDo6ZW5kbDsKIyAxOTIwICJzb3VyY2UvZGF0YV9vdXRfYmFzZS5jYyIKICAgICAg ICAgICAgb3V0IDw8ICIvbSB7bW92ZXRvfSBiaW5kIGRlZiIgPDwgc3RkOjplbmRsCiAgICAgICAg ICAgICAgICA8PCAiL2wge2xpbmV0b30gYmluZCBkZWYiIDw8IHN0ZDo6ZW5kbAogICAgICAgICAg ICAgICAgPDwgIi9zIHtzZXRyZ2Jjb2xvcn0gYmluZCBkZWYiIDw8IHN0ZDo6ZW5kbAogICAgICAg ICAgICAgICAgPDwgIi9zZyB7c2V0Z3JheX0gYmluZCBkZWYiIDw8IHN0ZDo6ZW5kbAogICAgICAg ICAgICAgICAgPDwgIi9seCB7bGluZXRvIGNsb3NlcGF0aCBzdHJva2V9IGJpbmQgZGVmIiA8PCBz dGQ6OmVuZGwKICAgICAgICAgICAgICAgIDw8ICIvbGYge2xpbmV0byBjbG9zZXBhdGggZmlsbH0g YmluZCBkZWYiIDw8IHN0ZDo6ZW5kbDsKCiAgICAgICAgICAgIG91dCA8PCAiJSVFbmRQcm9sb2ci IDw8IHN0ZDo6ZW5kbAogICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOwoKICAgICAgICAgICAg b3V0IDw8IGZsYWdzLmxpbmVfd2lkdGggPDwgIiBzZXRsaW5ld2lkdGgiIDw8IHN0ZDo6ZW5kbDsK CgoKCgogICAgICAgICAgICBvdXQgPDwgc3RkOjpzZXRwcmVjaXNpb24gKDUpOwogICAgICAgICAg fTsKIyAxOTUzICJzb3VyY2UvZGF0YV9vdXRfYmFzZS5jYyIKICAgICAgICBpZiAobWF4X2NvbG9y X3ZhbHVlID09IG1pbl9jb2xvcl92YWx1ZSkKICAgICAgICAgIG1heF9jb2xvcl92YWx1ZSA9IG1p bl9jb2xvcl92YWx1ZSsxOwoKCgoKCgogICAgICAgIGZvciAodHlwZW5hbWUgc3RkOjptdWx0aXNl dDxFcHNDZWxsMmQ+Ojpjb25zdF9pdGVyYXRvcgogICAgICAgICAgICAgICBjZWxsPWNlbGxzLmJl Z2luKCk7CiAgICAgICAgICAgICBjZWxsIT1jZWxscy5lbmQoKTsgKytjZWxsKQogICAgICAgICAg ewogICAgICAgICAgICBpZiAoZmxhZ3MuZHJhd19jZWxscykKICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICBpZiAoZmxhZ3Muc2hhZGVfY2VsbHMpCiAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICBjb25zdCBFcHNGbGFnczo6UmdiVmFsdWVzIHJnYl92YWx1ZXMKICAg ICAgICAgICAgICAgICAgICAgID0gKCpmbGFncy5jb2xvcl9mdW5jdGlvbikgKGNlbGwtPmNvbG9y X3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bWluX2NvbG9yX3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWF4X2NvbG9yX3ZhbHVlKTsKCgogICAgICAgICAgICAgICAgICAgIGlmIChyZ2Jf dmFsdWVzLmlzX2dyZXkoKSkKICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCByZ2JfdmFsdWVz LnJlZCA8PCAiIHNnICI7CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg ICAgICAgb3V0IDw8IHJnYl92YWx1ZXMucmVkIDw8ICcgJwogICAgICAgICAgICAgICAgICAgICAg ICAgIDw8IHJnYl92YWx1ZXMuZ3JlZW4gPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAg PDwgcmdiX3ZhbHVlcy5ibHVlIDw8ICIgcyAiOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIG91dCA8PCAiMSBzZyAiOwoKICAgICAgICAg ICAgICAgIG91dCA8PCAoY2VsbC0+dmVydGljZXNbMF0tb2Zmc2V0KSAqIHNjYWxlIDw8ICIgbSAi CiAgICAgICAgICAgICAgICAgICAgPDwgKGNlbGwtPnZlcnRpY2VzWzFdLW9mZnNldCkgKiBzY2Fs ZSA8PCAiIGwgIgogICAgICAgICAgICAgICAgICAgIDw8IChjZWxsLT52ZXJ0aWNlc1syXS1vZmZz ZXQpICogc2NhbGUgPDwgIiBsICIKICAgICAgICAgICAgICAgICAgICA8PCAoY2VsbC0+dmVydGlj ZXNbM10tb2Zmc2V0KSAqIHNjYWxlIDw8ICIgbGYiCiAgICAgICAgICAgICAgICAgICAgPDwgc3Rk OjplbmRsOwogICAgICAgICAgICAgIH07CgogICAgICAgICAgICBpZiAoZmxhZ3MuZHJhd19tZXNo KQogICAgICAgICAgICAgIG91dCA8PCAiMCBzZyAiCiAgICAgICAgICAgICAgICAgIDw8IChjZWxs LT52ZXJ0aWNlc1swXS1vZmZzZXQpICogc2NhbGUgPDwgIiBtICIKICAgICAgICAgICAgICAgICAg PDwgKGNlbGwtPnZlcnRpY2VzWzFdLW9mZnNldCkgKiBzY2FsZSA8PCAiIGwgIgogICAgICAgICAg ICAgICAgICA8PCAoY2VsbC0+dmVydGljZXNbMl0tb2Zmc2V0KSAqIHNjYWxlIDw8ICIgbCAiCiAg ICAgICAgICAgICAgICAgIDw8IChjZWxsLT52ZXJ0aWNlc1szXS1vZmZzZXQpICogc2NhbGUgPDwg IiBseCIKICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOwogICAgICAgICAgfTsKICAgICAg ICBvdXQgPDwgInNob3dwYWdlIiA8PCBzdGQ6OmVuZGw7CgogICAgICAgIGJyZWFrOwogICAgICB9 OwoKICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgeyB9OwogICAgfTsKfTsKCgoKdGVtcGxhdGUg PGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9pZCBEYXRhT3V0QmFzZTo6d3JpdGVfZ212IChjb25z dCBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ID4gJnBhdGNoZXMsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZkYXRhX25h bWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdtdkZsYWdzICYgLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbSAmb3V0KQp7CiAgeyBpZiAoX19i dWlsdGluX2V4cGVjdCghKG91dCksIGZhbHNlKSkgZGVhbF9JSV9leGNlcHRpb25zOjppbnRlcm5h bHM6OiBpc3N1ZV9lcnJvcl90aHJvdyAoInNvdXJjZS9kYXRhX291dF9iYXNlLmNjIiwgMjAxOCwg X19QUkVUVFlfRlVOQ1RJT05fXywgIm91dCIsICJFeGNJTygpIiwgRXhjSU8oKSk7IH07CgogIHsg fTsKCiAgY29uc3QgdW5zaWduZWQgaW50IG5fZGF0YV9zZXRzID0gZGF0YV9uYW1lcy5zaXplKCk7 CgoKCgogIHsgfTsKCgoKCgogIG91dCA8PCAiZ212aW5wdXQgYXNjaWkiCiAgICAgIDw8IHN0ZDo6 ZW5kbAogICAgICA8PCBzdGQ6OmVuZGw7CgoKCiAgdW5zaWduZWQgaW50IG5fY2VsbHMgPSAwLAog ICAgICAgICAgICAgICBuX25vZGVzID0gMDsKICBmb3IgKHR5cGVuYW1lIHN0ZDo6dmVjdG9yPFBh dGNoPGRpbSxzcGFjZWRpbT4gPjo6Y29uc3RfaXRlcmF0b3IgcGF0Y2g9cGF0Y2hlcy5iZWdpbigp OwogICAgICAgcGF0Y2ghPXBhdGNoZXMuZW5kKCk7ICsrcGF0Y2gpCiAgICBzd2l0Y2ggKGRpbSkK ICAgICAgewogICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICBuX2NlbGxzICs9IHBhdGNoLT5u X3N1YmRpdmlzaW9uczsKICAgICAgICAgICAgICBuX25vZGVzICs9IHBhdGNoLT5uX3N1YmRpdmlz aW9ucysxOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjoKICAgICAgICAgICAg ICBuX2NlbGxzICs9IHBhdGNoLT5uX3N1YmRpdmlzaW9ucyAqCiAgICAgICAgICAgICAgICAgICAg ICAgICBwYXRjaC0+bl9zdWJkaXZpc2lvbnM7CiAgICAgICAgICAgICAgbl9ub2RlcyArPSAocGF0 Y2gtPm5fc3ViZGl2aXNpb25zKzEpICoKICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+ bl9zdWJkaXZpc2lvbnMrMSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAzOgog ICAgICAgICAgICAgIG5fY2VsbHMgKz0gcGF0Y2gtPm5fc3ViZGl2aXNpb25zICoKICAgICAgICAg ICAgICAgICAgICAgICAgIHBhdGNoLT5uX3N1YmRpdmlzaW9ucyAqCiAgICAgICAgICAgICAgICAg ICAgICAgICBwYXRjaC0+bl9zdWJkaXZpc2lvbnM7CiAgICAgICAgICAgICAgbl9ub2RlcyArPSAo cGF0Y2gtPm5fc3ViZGl2aXNpb25zKzEpICoKICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRj aC0+bl9zdWJkaXZpc2lvbnMrMSkgKgogICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT5u X3N1YmRpdmlzaW9ucysxKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0Ogog ICAgICAgICAgICAgIHsgfTsKICAgICAgfTsKIyAyMDg5ICJzb3VyY2UvZGF0YV9vdXRfYmFzZS5j YyIKICBUYWJsZTwyLGRvdWJsZT4gZGF0YV92ZWN0b3JzIChuX2RhdGFfc2V0cywgbl9ub2Rlcyk7 CiAgVGhyZWFkczo6VGhyZWFkTWFuYWdlciB0aHJlYWRfbWFuYWdlcjsKICB2b2lkICgqZnVuX3B0 cikgKGNvbnN0IHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPiAmLAogICAgICAgICAg ICAgICAgICAgVGFibGU8Mixkb3VibGU+ICYpCiAgICA9ICZEYXRhT3V0QmFzZTo6dGVtcGxhdGUg d3JpdGVfZ212X3Jlb3JkZXJfZGF0YV92ZWN0b3JzPGRpbSxzcGFjZWRpbT47CiAgVGhyZWFkczo6 c3Bhd24gKHRocmVhZF9tYW5hZ2VyLAogICAgICAgICAgICAgICAgICBUaHJlYWRzOjplbmNhcHN1 bGF0ZSAoZnVuX3B0cikKICAgICAgICAgICAgICAgICAgLmNvbGxlY3RfYXJncyhwYXRjaGVzLCBk YXRhX3ZlY3RvcnMpKTsKIyAyMTA1ICJzb3VyY2UvZGF0YV9vdXRfYmFzZS5jYyIKICBvdXQgPDwg Im5vZGVzICIgPDwgbl9ub2RlcyA8PCBzdGQ6OmVuZGw7CiAgZm9yICh1bnNpZ25lZCBpbnQgZD0x OyBkPD0zOyArK2QpCiAgICB7CiAgICAgIGZvciAodHlwZW5hbWUgc3RkOjp2ZWN0b3I8UGF0Y2g8 ZGltLHNwYWNlZGltPiA+Ojpjb25zdF9pdGVyYXRvciBwYXRjaD1wYXRjaGVzLmJlZ2luKCk7CiAg ICAgICAgICAgcGF0Y2ghPXBhdGNoZXMuZW5kKCk7ICsrcGF0Y2gpCiAgICAgICAgewogICAgICAg ICAgY29uc3QgdW5zaWduZWQgaW50IG5fc3ViZGl2aXNpb25zID0gcGF0Y2gtPm5fc3ViZGl2aXNp b25zOwoKCgogICAgICAgICAgaWYgKGQ8PXNwYWNlZGltKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgc3dpdGNoIChkaW0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGNh c2UgMToKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWdu ZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2kpCiAgICAgICAgICAgICAgICAgICAg ICBvdXQgPDwgKChwYXRjaC0+dmVydGljZXNbMV0oMCkgKiBpIC8gbl9zdWJkaXZpc2lvbnMpICsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1swXSgwKSAqIChu X3N1YmRpdmlzaW9ucy1pKSAvIG5fc3ViZGl2aXNpb25zKSkKICAgICAgICAgICAgICAgICAgICAg ICAgICA8PCAnICc7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg IH07CgogICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8bl9zdWJkaXZpc2lvbnMrMTsg KytpKQogICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaj0wOyBqPG5fc3Vi ZGl2aXNpb25zKzE7ICsraikKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4X2ZyYWMgPSBpICogMS4vbl9zdWJkaXZpc2lvbnMs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlfZnJhYyA9IGogKiAxLi9u X3N1YmRpdmlzaW9uczsKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgKCgocGF0 Y2gtPnZlcnRpY2VzWzFdKGQtMSkgKiB4X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzBdKGQtMSkgKiAoMS14X2ZyYWMpKSkgKiAoMS15 X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocGF0Y2gtPnZlcnRp Y2VzWzJdKGQtMSkgKiB4X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAocGF0Y2gtPnZlcnRpY2VzWzNdKGQtMSkgKiAoMS14X2ZyYWMpKSkgKiB5X2ZyYWMpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICcgJzsKICAgICAgICAgICAgICAgICAgICAgICAg fTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfTsKCiAgICAg ICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2kpCiAgICAg ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqPTA7IGo8bl9zdWJkaXZpc2lvbnMr MTsgKytqKQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBrPTA7IGs8 bl9zdWJkaXZpc2lvbnMrMTsgKytrKQogICAgICAgICAgICAgICAgICAgICAgICAgIHsKCgoKCgoK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgeF9mcmFjID0gaSAqIDEu L25fc3ViZGl2aXNpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHlfZnJhYyA9IGsgKiAxLi9uX3N1YmRpdmlzaW9ucywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB6X2ZyYWMgPSBqICogMS4vbl9zdWJkaXZpc2lvbnM7CgoKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgKCgoKHBhdGNoLT52ZXJ0aWNlc1sxXShkLTEp ICogeF9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNo LT52ZXJ0aWNlc1swXShkLTEpICogKDEteF9mcmFjKSkpICogKDEteV9mcmFjKSArCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHBhdGNoLT52ZXJ0aWNlc1syXShkLTEpICog eF9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT52 ZXJ0aWNlc1szXShkLTEpICogKDEteF9mcmFjKSkpICogeV9mcmFjKSAqICgxLXpfZnJhYykgKwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChwYXRjaC0+dmVydGljZXNbNV0o ZC0xKSAqIHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChw YXRjaC0+dmVydGljZXNbNF0oZC0xKSAqICgxLXhfZnJhYykpKSAqICgxLXlfZnJhYykgKwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwYXRjaC0+dmVydGljZXNbNl0oZC0x KSAqIHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRj aC0+dmVydGljZXNbN10oZC0xKSAqICgxLXhfZnJhYykpKSAqIHlfZnJhYykgKiB6X2ZyYWMpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgJyAnOwogICAgICAgICAgICAgICAgICAg ICAgICAgIH07CgogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9 OwoKICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgeyB9 OwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQoKICAgICAg ICAgICAgewogICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBuX3BvaW50cwogICAgICAg ICAgICAgICAgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHN0ZDo6cG93IChzdGF0aWNfY2Fz dDxkb3VibGU+KG5fc3ViZGl2aXNpb25zKzEpLCBkaW0pKTsKICAgICAgICAgICAgICBmb3IgKHVu c2lnbmVkIGludCBpPTA7IGk8bl9wb2ludHM7ICsraSkKICAgICAgICAgICAgICAgIG91dCA8PCAi MCAiOwogICAgICAgICAgICB9OwogICAgICAgIH07CiAgICAgIG91dCA8PCBzdGQ6OmVuZGw7CiAg ICB9OwoKICBvdXQgPDwgc3RkOjplbmRsOwoKCgoKICBpZiAodHJ1ZSkKICAgIHsKICAgICAgb3V0 IDw8ICJjZWxscyAiIDw8IG5fY2VsbHMgPDwgc3RkOjplbmRsOwoKCiAgICAgIHVuc2lnbmVkIGlu dCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2ggPSAwOwoKICAgICAgZm9yICh0eXBlbmFtZSBzdGQ6OnZl Y3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ID46OmNvbnN0X2l0ZXJhdG9yIHBhdGNoPXBhdGNoZXMu YmVnaW4oKTsKICAgICAgICAgICBwYXRjaCE9cGF0Y2hlcy5lbmQoKTsgKytwYXRjaCkKICAgICAg ICB7CiAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbl9zdWJkaXZpc2lvbnMgPSBwYXRjaC0+ bl9zdWJkaXZpc2lvbnM7CgoKCiAgICAgICAgICBzd2l0Y2ggKGRpbSkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3Ig KHVuc2lnbmVkIGludCBpPTA7IGk8bl9zdWJkaXZpc2lvbnM7ICsraSkKICAgICAgICAgICAgICAg ICAgb3V0IDw8ICJsaW5lIDJcbiAgIgogICAgICAgICAgICAgICAgICAgICAgPDwgZmlyc3RfdmVy dGV4X29mX3BhdGNoK2krMSA8PCAnICcKICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3Zl cnRleF9vZl9wYXRjaCtpKzErMSA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPG5fc3ViZGl2aXNpb25zOyAr K2kpCiAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGo9MDsgajxuX3N1YmRpdmlz aW9uczsgKytqKQogICAgICAgICAgICAgICAgICAgIG91dCA8PCAicXVhZCA0XG4gICIKICAgICAg ICAgICAgICAgICAgICAgICAgPDwgZmlyc3RfdmVydGV4X29mX3BhdGNoK2kqKG5fc3ViZGl2aXNp b25zKzEpK2orMSA8PCAnICcKICAgICAgICAgICAgICAgICAgICAgICAgPDwgZmlyc3RfdmVydGV4 X29mX3BhdGNoKyhpKzEpKihuX3N1YmRpdmlzaW9ucysxKStqKzEgPDwgJyAnCiAgICAgICAgICAg ICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCsoaSsxKSoobl9zdWJkaXZpc2lv bnMrMSkraisxKzEgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRl eF9vZl9wYXRjaCtpKihuX3N1YmRpdmlzaW9ucysxKStqKzErMQogICAgICAgICAgICAgICAgICAg ICAgICA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9 OwoKICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg Zm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPG5fc3ViZGl2aXNpb25zOyArK2kpCiAgICAgICAgICAg ICAgICAgIGZvciAodW5zaWduZWQgaW50IGo9MDsgajxuX3N1YmRpdmlzaW9uczsgKytqKQogICAg ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGs9MDsgazxuX3N1YmRpdmlzaW9uczsg KytrKQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBvdXQg PDwgImhleCA4XG4gICAiCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgZmlyc3RfdmVy dGV4X29mX3BhdGNoKyhpKihuX3N1YmRpdmlzaW9ucysxKStqICkqKG5fc3ViZGl2aXNpb25zKzEp K2sgKzEgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhf b2ZfcGF0Y2grKChpKzEpKihuX3N1YmRpdmlzaW9ucysxKStqICkqKG5fc3ViZGl2aXNpb25zKzEp K2sgKzEgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhf b2ZfcGF0Y2grKChpKzEpKihuX3N1YmRpdmlzaW9ucysxKStqKzEpKihuX3N1YmRpdmlzaW9ucysx KStrICsxIDw8ICcgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgZmlyc3RfdmVydGV4 X29mX3BhdGNoKyhpKihuX3N1YmRpdmlzaW9ucysxKStqKzEgKSoobl9zdWJkaXZpc2lvbnMrMSkr ayArMSA8PCAnICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9v Zl9wYXRjaCsoaSoobl9zdWJkaXZpc2lvbnMrMSkraiApKihuX3N1YmRpdmlzaW9ucysxKStrKzEr MSA8PCAnICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9w YXRjaCsoKGkrMSkqKG5fc3ViZGl2aXNpb25zKzEpK2ogKSoobl9zdWJkaXZpc2lvbnMrMSkraysx KzEgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhfb2Zf cGF0Y2grKChpKzEpKihuX3N1YmRpdmlzaW9ucysxKStqKzEpKihuX3N1YmRpdmlzaW9ucysxKStr KzErMSA8PCAnICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9v Zl9wYXRjaCsoaSoobl9zdWJkaXZpc2lvbnMrMSkraisxICkqKG5fc3ViZGl2aXNpb25zKzEpK2sr MSsxIDw8ICcgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOwogICAg ICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg IH07CgogICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgeyB9OwogICAg ICAgICAgICB9OwoKCgoKICAgICAgICAgIHN3aXRjaCAoZGltKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgIGZpcnN0X3ZlcnRleF9vZl9wYXRj aCArPSBuX3N1YmRpdmlzaW9ucysxOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2gg Kz0gKG5fc3ViZGl2aXNpb25zKzEpICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKG5fc3ViZGl2aXNpb25zKzEpOwogICAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICBmaXJzdF92ZXJ0ZXhf b2ZfcGF0Y2ggKz0gKG5fc3ViZGl2aXNpb25zKzEpICoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKG5fc3ViZGl2aXNpb25zKzEpICoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5fc3ViZGl2aXNpb25zKzEpOwogICAgICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg ICAgICAgeyB9OwogICAgICAgICAgICB9OwogICAgICAgIH07CiAgICAgIG91dCA8PCBzdGQ6OmVu ZGw7CiAgICB9OwoKCgogIG91dCA8PCAidmFyaWFibGUiIDw8IHN0ZDo6ZW5kbDsKCgoKCiAgdGhy ZWFkX21hbmFnZXIud2FpdCAoKTsKCgoKCgogIGZvciAodW5zaWduZWQgaW50IGRhdGFfc2V0PTA7 IGRhdGFfc2V0PG5fZGF0YV9zZXRzOyArK2RhdGFfc2V0KQogICAgewogICAgICBvdXQgPDwgZGF0 YV9uYW1lc1tkYXRhX3NldF0gPDwgIiAxIiA8PCBzdGQ6OmVuZGw7CiAgICAgIGNvcHkoZGF0YV92 ZWN0b3JzW2RhdGFfc2V0XS5iZWdpbigpLAogICAgICAgICAgIGRhdGFfdmVjdG9yc1tkYXRhX3Nl dF0uZW5kKCksCiAgICAgICAgICAgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPGRvdWJsZT4ob3V0LCAi ICIpKTsKICAgICAgb3V0IDw8IHN0ZDo6ZW5kbAogICAgICAgICAgPDwgc3RkOjplbmRsOwogICAg fTsKCgoKCiAgb3V0IDw8ICJlbmR2YXJzIiA8PCBzdGQ6OmVuZGw7CgoKICBvdXQgPDwgImVuZGdt diIKICAgICAgPDwgc3RkOjplbmRsOwoKCiAgeyBpZiAoX19idWlsdGluX2V4cGVjdCghKG91dCks IGZhbHNlKSkgZGVhbF9JSV9leGNlcHRpb25zOjppbnRlcm5hbHM6OiBpc3N1ZV9lcnJvcl90aHJv dyAoInNvdXJjZS9kYXRhX291dF9iYXNlLmNjIiwgMjMyMSwgX19QUkVUVFlfRlVOQ1RJT05fXywg Im91dCIsICJFeGNJTygpIiwgRXhjSU8oKSk7IH07Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltLCBp bnQgc3BhY2VkaW0+CnZvaWQgRGF0YU91dEJhc2U6OndyaXRlX3RlY3Bsb3QgKGNvbnN0IHN0ZDo6 dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPiAmcGF0Y2hlcywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZkYXRhX25hbWVz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZWNwbG90RmxhZ3MgJiAs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbSAmb3V0KQp7CiAg eyBpZiAoX19idWlsdGluX2V4cGVjdCghKG91dCksIGZhbHNlKSkgZGVhbF9JSV9leGNlcHRpb25z OjppbnRlcm5hbHM6OiBpc3N1ZV9lcnJvcl90aHJvdyAoInNvdXJjZS9kYXRhX291dF9iYXNlLmNj IiwgMjMzMiwgX19QUkVUVFlfRlVOQ1RJT05fXywgIm91dCIsICJFeGNJTygpIiwgRXhjSU8oKSk7 IH07CgogIHsgfTsKCiAgY29uc3QgdW5zaWduZWQgaW50IG5fZGF0YV9zZXRzID0gZGF0YV9uYW1l cy5zaXplKCk7CgoKCgogIHsgfTsKCgoKCgoKICB1bnNpZ25lZCBpbnQgbl9jZWxscyA9IDAsCiAg ICAgICAgICAgICAgIG5fbm9kZXMgPSAwOwogIGZvciAodHlwZW5hbWUgc3RkOjp2ZWN0b3I8UGF0 Y2g8ZGltLHNwYWNlZGltPiA+Ojpjb25zdF9pdGVyYXRvciBwYXRjaD1wYXRjaGVzLmJlZ2luKCk7 CiAgICAgICBwYXRjaCE9cGF0Y2hlcy5lbmQoKTsgKytwYXRjaCkKICAgIHN3aXRjaCAoZGltKQog ICAgICB7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgIG5fY2VsbHMgKz0gcGF0Y2gtPm5f c3ViZGl2aXNpb25zOwogICAgICAgICAgICAgIG5fbm9kZXMgKz0gcGF0Y2gtPm5fc3ViZGl2aXNp b25zKzE7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAg IG5fY2VsbHMgKz0gcGF0Y2gtPm5fc3ViZGl2aXNpb25zICoKICAgICAgICAgICAgICAgICAgICAg ICAgIHBhdGNoLT5uX3N1YmRpdmlzaW9uczsKICAgICAgICAgICAgICBuX25vZGVzICs9IChwYXRj aC0+bl9zdWJkaXZpc2lvbnMrMSkgKgogICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT5u X3N1YmRpdmlzaW9ucysxKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDM6CiAg ICAgICAgICAgICAgbl9jZWxscyArPSBwYXRjaC0+bl9zdWJkaXZpc2lvbnMgKgogICAgICAgICAg ICAgICAgICAgICAgICAgcGF0Y2gtPm5fc3ViZGl2aXNpb25zICoKICAgICAgICAgICAgICAgICAg ICAgICAgIHBhdGNoLT5uX3N1YmRpdmlzaW9uczsKICAgICAgICAgICAgICBuX25vZGVzICs9IChw YXRjaC0+bl9zdWJkaXZpc2lvbnMrMSkgKgogICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNo LT5uX3N1YmRpdmlzaW9ucysxKSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPm5f c3ViZGl2aXNpb25zKzEpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAg ICAgICAgICAgICAgeyB9OwogICAgICB9OwoKCgoKCgogIHsKICAgIHN0ZDo6dGltZV90IHRpbWUx PSBzdGQ6OnRpbWUgKDApOwogICAgc3RkOjp0bSAqdGltZSA9IHN0ZDo6bG9jYWx0aW1lKCZ0aW1l MSk7CiAgICBvdXQgPDwgIiMgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgdGhlIGRlYWwuSUkg bGlicmFyeS4iIDw8IHN0ZDo6ZW5kbAogICAgICAgIDw8ICIjIERhdGUgPSAgIgogICAgICAgIDw8 IHRpbWUtPnRtX3llYXIrMTkwMCA8PCAiLyIKICAgICAgICA8PCB0aW1lLT50bV9tb24rMSA8PCAi LyIKICAgICAgICA8PCB0aW1lLT50bV9tZGF5IDw8IHN0ZDo6ZW5kbAogICAgICAgIDw8ICIjIFRp bWUgPSAgIgogICAgICAgIDw8IHRpbWUtPnRtX2hvdXIgPDwgIjoiCiAgICAgICAgPDwgc3RkOjpz ZXR3KDIpIDw8IHRpbWUtPnRtX21pbiA8PCAiOiIKICAgICAgICA8PCBzdGQ6OnNldHcoMikgPDwg dGltZS0+dG1fc2VjIDw8IHN0ZDo6ZW5kbAogICAgICAgIDw8ICIjIiA8PCBzdGQ6OmVuZGwKICAg ICAgICA8PCAiIyBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgVGVjcGxvdCBmb3JtYXQgc2VlIHRo ZSBUZWNwbG90IGRvY3VtZW50YXRpb24uIgogICAgICAgIDw8IHN0ZDo6ZW5kbAogICAgICAgIDw8 ICIjIiA8PCBzdGQ6OmVuZGw7CgoKICAgIG91dCA8PCAiVmFyaWFibGVzPSI7CgogICAgc3dpdGNo IChkaW0pCiAgICAgIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgb3V0IDw8ICJcInhc IiI7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIG91 dCA8PCAiXCJ4XCIsIFwieVwiIjsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDM6 CiAgICAgICAgICAgICAgb3V0IDw8ICJcInhcIiwgXCJ5XCIsIFwielwiIjsKICAgICAgICAgICAg ICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHsgfTsKICAgICAgfTsKCiAg ICBmb3IgKHVuc2lnbmVkIGludCBkYXRhX3NldD0wOyBkYXRhX3NldDxuX2RhdGFfc2V0czsgKytk YXRhX3NldCkKICAgICAgewogICAgICAgIG91dCA8PCAiLCBcIiIgPDwgZGF0YV9uYW1lc1tkYXRh X3NldF0gPDwgIlwiIjsKICAgICAgfTsKCiAgICBvdXQgPDwgc3RkOjplbmRsOwoKICAgIGlmIChk aW0gPiAxKQogICAgICB7CiAgICAgICAgb3V0IDw8ICJ6b25lIGY9ZmVibG9jaywgbj0iIDw8IG5f bm9kZXMgPDwgIiwgZT0iIDw8IG5fY2VsbHMgPDwgIiwgZXQ9IjsKCiAgICAgICAgc3dpdGNoIChk aW0pCiAgICAgICAgICB7CiAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgIG91dCA8PCAicXVh ZHJpbGF0ZXJhbCIgPDwgc3RkOjplbmRsOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNh c2UgMzoKICAgICAgICAgICAgb3V0IDw8ICJicmljayIgPDwgc3RkOjplbmRsOwogICAgICAgICAg ICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHsgfTsKICAgICAgICAgIH07 CiAgICAgIH0KICAgIGVsc2UKICAgICAgewogICAgICAgIG91dCA8PCAiem9uZSBmPWJsb2NrLCBu PSIgPDwgbl9ub2RlcyA8PCBzdGQ6OmVuZGw7CiAgICAgIH07CiAgfTsKIyAyNDY4ICJzb3VyY2Uv ZGF0YV9vdXRfYmFzZS5jYyIKICBUYWJsZTwyLGRvdWJsZT4gZGF0YV92ZWN0b3JzIChuX2RhdGFf c2V0cywgbl9ub2Rlcyk7CgogIFRocmVhZHM6OlRocmVhZE1hbmFnZXIgdGhyZWFkX21hbmFnZXI7 CiAgdm9pZCAoKmZ1bl9wdHIpIChjb25zdCBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ ID4gJiwKICAgICAgICAgICAgICAgICAgIFRhYmxlPDIsZG91YmxlPiAmKQogICAgPSAmRGF0YU91 dEJhc2U6OnRlbXBsYXRlIHdyaXRlX2dtdl9yZW9yZGVyX2RhdGFfdmVjdG9yczxkaW0sc3BhY2Vk aW0+OwogIFRocmVhZHM6OnNwYXduICh0aHJlYWRfbWFuYWdlciwKICAgICAgICAgICAgICAgICAg VGhyZWFkczo6ZW5jYXBzdWxhdGUgKGZ1bl9wdHIpCiAgICAgICAgICAgICAgICAgIC5jb2xsZWN0 X2FyZ3MocGF0Y2hlcywgZGF0YV92ZWN0b3JzKSk7CgoKCgoKCgogIGZvciAodW5zaWduZWQgaW50 IGQ9MTsgZDw9c3BhY2VkaW07ICsrZCkKICAgIHsKCiAgICAgIGZvciAodHlwZW5hbWUgc3RkOjp2 ZWN0b3I8UGF0Y2g8ZGltLHNwYWNlZGltPiA+Ojpjb25zdF9pdGVyYXRvciBwYXRjaD1wYXRjaGVz LmJlZ2luKCk7CiAgICAgICAgICAgcGF0Y2ghPXBhdGNoZXMuZW5kKCk7ICsrcGF0Y2gpCiAgICAg ICAgewogICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG5fc3ViZGl2aXNpb25zID0gcGF0Y2gt Pm5fc3ViZGl2aXNpb25zOwoKICAgICAgICAgIHN3aXRjaCAoZGltKQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZvciAo dW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2kpCiAgICAgICAgICAgICAg ICAgIG91dCA8PCAoKHBhdGNoLT52ZXJ0aWNlc1sxXSgwKSAqIGkgLyBuX3N1YmRpdmlzaW9ucykg KwogICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNbMF0oMCkgKiAobl9z dWJkaXZpc2lvbnMtaSkgLyBuX3N1YmRpdmlzaW9ucykpCiAgICAgICAgICAgICAgICAgICAgICA8 PCAnXG4nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfTsKCiAgICAgICAg ICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZvciAodW5zaWdu ZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2kpCiAgICAgICAgICAgICAgICAgIGZv ciAodW5zaWduZWQgaW50IGo9MDsgajxuX3N1YmRpdmlzaW9ucysxOyArK2opCiAgICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHhfZnJhYyA9IGkg KiAxLi9uX3N1YmRpdmlzaW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5 X2ZyYWMgPSBqICogMS4vbl9zdWJkaXZpc2lvbnM7CgoKCgogICAgICAgICAgICAgICAgICAgICAg b3V0IDw8ICgoKHBhdGNoLT52ZXJ0aWNlc1sxXShkLTEpICogeF9mcmFjKSArCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzBdKGQtMSkgKiAoMS14X2ZyYWMp KSkgKiAoMS15X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwYXRjaC0+ dmVydGljZXNbMl0oZC0xKSAqIHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHBhdGNoLT52ZXJ0aWNlc1szXShkLTEpICogKDEteF9mcmFjKSkpICogeV9mcmFjKQogICAg ICAgICAgICAgICAgICAgICAgICAgIDw8ICdcbic7CiAgICAgICAgICAgICAgICAgICAgfTsKICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgIGNhc2Ug MzoKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpPTA7 IGk8bl9zdWJkaXZpc2lvbnMrMTsgKytpKQogICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk IGludCBqPTA7IGo8bl9zdWJkaXZpc2lvbnMrMTsgKytqKQogICAgICAgICAgICAgICAgICAgIGZv ciAodW5zaWduZWQgaW50IGs9MDsgazxuX3N1YmRpdmlzaW9ucysxOyArK2spCiAgICAgICAgICAg ICAgICAgICAgICB7CgoKCgoKCgogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUg eF9mcmFjID0gaSAqIDEuL25fc3ViZGl2aXNpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgeV9mcmFjID0gayAqIDEuL25fc3ViZGl2aXNpb25zLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgel9mcmFjID0gaiAqIDEuL25fc3ViZGl2aXNpb25zOwoK CgoKICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICgoKChwYXRjaC0+dmVydGljZXNbMV0o ZC0xKSAqIHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNo LT52ZXJ0aWNlc1swXShkLTEpICogKDEteF9mcmFjKSkpICogKDEteV9mcmFjKSArCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgocGF0Y2gtPnZlcnRpY2VzWzJdKGQtMSkgKiB4X2Zy YWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNb M10oZC0xKSAqICgxLXhfZnJhYykpKSAqIHlfZnJhYykgKiAoMS16X2ZyYWMpICsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoKChwYXRjaC0+dmVydGljZXNbNV0oZC0xKSAqIHhfZnJh YykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1s0 XShkLTEpICogKDEteF9mcmFjKSkpICogKDEteV9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgocGF0Y2gtPnZlcnRpY2VzWzZdKGQtMSkgKiB4X2ZyYWMpICsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNbN10oZC0xKSAqICgx LXhfZnJhYykpKSAqIHlfZnJhYykgKiB6X2ZyYWMpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICA8PCAnXG4nOwogICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg ICAgICAgeyB9OwogICAgICAgICAgICB9OwogICAgICAgIH07CiAgICAgIG91dCA8PCBzdGQ6OmVu ZGw7CiAgICB9OwojIDI1NzAgInNvdXJjZS9kYXRhX291dF9iYXNlLmNjIgogIHRocmVhZF9tYW5h Z2VyLndhaXQgKCk7CgoKICBmb3IgKHVuc2lnbmVkIGludCBkYXRhX3NldD0wOyBkYXRhX3NldDxu X2RhdGFfc2V0czsgKytkYXRhX3NldCkKICAgIHsKCiAgICAgIGNvcHkoZGF0YV92ZWN0b3JzW2Rh dGFfc2V0XS5iZWdpbigpLAogICAgICAgICAgIGRhdGFfdmVjdG9yc1tkYXRhX3NldF0uZW5kKCks CiAgICAgICAgICAgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPGRvdWJsZT4ob3V0LCAiXG4iKSk7CiAg ICAgIG91dCA8PCBzdGQ6OmVuZGw7CiAgICB9OwoKCgoKCgogIHVuc2lnbmVkIGludCBmaXJzdF92 ZXJ0ZXhfb2ZfcGF0Y2ggPSAwOwoKICBmb3IgKHR5cGVuYW1lIHN0ZDo6dmVjdG9yPFBhdGNoPGRp bSxzcGFjZWRpbT4gPjo6Y29uc3RfaXRlcmF0b3IgcGF0Y2g9cGF0Y2hlcy5iZWdpbigpOwogICAg ICAgcGF0Y2ghPXBhdGNoZXMuZW5kKCk7ICsrcGF0Y2gpCiAgICB7CiAgICAgIGNvbnN0IHVuc2ln bmVkIGludCBuX3N1YmRpdmlzaW9ucyA9IHBhdGNoLT5uX3N1YmRpdmlzaW9uczsKCgoKICAgICAg c3dpdGNoIChkaW0pCiAgICAgICAgewogICAgICAgICAgY2FzZSAxOgogICAgICAgICAgewogICAg ICAgICAgICBicmVhazsKICAgICAgICAgIH07CiAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICB7 CiAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9uczsgKytp KQogICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGo9MDsgajxuX3N1YmRpdmlzaW9uczsg KytqKQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgb3V0IDw8IGZpcnN0X3Zl cnRleF9vZl9wYXRjaCtpKihuX3N1YmRpdmlzaW9ucysxKStqKzEgPDwgJyAnCiAgICAgICAgICAg ICAgICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2grKGkrMSkqKG5fc3ViZGl2aXNpb25z KzEpK2orMSA8PCAnICcKICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9w YXRjaCsoaSsxKSoobl9zdWJkaXZpc2lvbnMrMSkraisxKzEgPDwgJyAnCiAgICAgICAgICAgICAg ICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2graSoobl9zdWJkaXZpc2lvbnMrMSkraisx KzEKICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgICAgIH07 CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfTsKCiAgICAgICAgICBjYXNlIDM6CiAgICAg ICAgICB7CiAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9u czsgKytpKQogICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGo9MDsgajxuX3N1YmRpdmlz aW9uczsgKytqKQogICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaz0wOyBrPG5fc3Vi ZGl2aXNpb25zOyArK2spCiAgICAgICAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgICAgICAg IG91dCA8PCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2grKGkqKG5fc3ViZGl2aXNpb25zKzEpK2ogKSoo bl9zdWJkaXZpc2lvbnMrMSkrayArMSA8PCAnICcKICAgICAgICAgICAgICAgICAgICAgICAgPDwg Zmlyc3RfdmVydGV4X29mX3BhdGNoKygoaSsxKSoobl9zdWJkaXZpc2lvbnMrMSkraiApKihuX3N1 YmRpdmlzaW9ucysxKStrICsxIDw8ICcgJwogICAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJz dF92ZXJ0ZXhfb2ZfcGF0Y2grKChpKzEpKihuX3N1YmRpdmlzaW9ucysxKStqKzEpKihuX3N1YmRp dmlzaW9ucysxKStrICsxIDw8ICcgJwogICAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJzdF92 ZXJ0ZXhfb2ZfcGF0Y2grKGkqKG5fc3ViZGl2aXNpb25zKzEpK2orMSApKihuX3N1YmRpdmlzaW9u cysxKStrICsxIDw8ICcgJwogICAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhf b2ZfcGF0Y2grKGkqKG5fc3ViZGl2aXNpb25zKzEpK2ogKSoobl9zdWJkaXZpc2lvbnMrMSkraysx KzEgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRj aCsoKGkrMSkqKG5fc3ViZGl2aXNpb25zKzEpK2ogKSoobl9zdWJkaXZpc2lvbnMrMSkraysxKzEg PDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCso KGkrMSkqKG5fc3ViZGl2aXNpb25zKzEpK2orMSkqKG5fc3ViZGl2aXNpb25zKzEpK2srMSsxIDw8 ICcgJwogICAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2grKGkq KG5fc3ViZGl2aXNpb25zKzEpK2orMSApKihuX3N1YmRpdmlzaW9ucysxKStrKzErMSA8PCAnICcK ICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOwogICAgICAgICAgICAgICAgICB9 OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH07CgogICAgICAgICAgZGVmYXVsdDoKICAg ICAgICAgICAgICAgIHsgfTsKICAgICAgICB9OwoKCgoKICAgICAgc3dpdGNoIChkaW0pCiAgICAg ICAgewogICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgZmlyc3RfdmVydGV4X29mX3Bh dGNoICs9IG5fc3ViZGl2aXNpb25zKzE7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg IGNhc2UgMjoKICAgICAgICAgICAgICAgIGZpcnN0X3ZlcnRleF9vZl9wYXRjaCArPSAobl9zdWJk aXZpc2lvbnMrMSkgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChu X3N1YmRpdmlzaW9ucysxKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAz OgogICAgICAgICAgICAgICAgZmlyc3RfdmVydGV4X29mX3BhdGNoICs9IChuX3N1YmRpdmlzaW9u cysxKSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5fc3ViZGl2 aXNpb25zKzEpICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobl9z dWJkaXZpc2lvbnMrMSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6 CiAgICAgICAgICAgICAgICB7IH07CiAgICAgICAgfTsKCiAgICB9OwoKCgogIHsgaWYgKF9fYnVp bHRpbl9leHBlY3QoIShvdXQpLCBmYWxzZSkpIGRlYWxfSUlfZXhjZXB0aW9uczo6aW50ZXJuYWxz OjogaXNzdWVfZXJyb3JfdGhyb3cgKCJzb3VyY2UvZGF0YV9vdXRfYmFzZS5jYyIsIDI2NjcsIF9f UFJFVFRZX0ZVTkNUSU9OX18sICJvdXQiLCAiRXhjSU8oKSIsIEV4Y0lPKCkpOyB9Owp9OwojIDI3 NDMgInNvdXJjZS9kYXRhX291dF9iYXNlLmNjIgp0ZW1wbGF0ZSA8aW50IGRpbSwgaW50IHNwYWNl ZGltPgp2b2lkIERhdGFPdXRCYXNlOjp3cml0ZV90ZWNwbG90X2JpbmFyeSAoY29uc3Qgc3RkOjp2 ZWN0b3I8UGF0Y2g8ZGltLHNwYWNlZGltPiA+ICZwYXRjaGVzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZkYXRh X25hbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVj cGxvdEZsYWdzICZmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0ZDo6b3N0cmVhbSAmb3V0KQp7CgoKCgogIHdyaXRlX3RlY3Bsb3QgKHBhdGNoZXMsIGRhdGFf bmFtZXMsIGZsYWdzLCBvdXQpOwogIHJldHVybjsKIyAzMTIxICJzb3VyY2UvZGF0YV9vdXRfYmFz ZS5jYyIKfTsKCgoKdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9pZCBEYXRhT3V0 QmFzZTo6d3JpdGVfdnRrIChjb25zdCBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ID4g JnBhdGNoZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8 c3RkOjpzdHJpbmc+ICZkYXRhX25hbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFZ0a0ZsYWdzICYgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVh bSAmb3V0KQp7CiAgeyBpZiAoX19idWlsdGluX2V4cGVjdCghKG91dCksIGZhbHNlKSkgZGVhbF9J SV9leGNlcHRpb25zOjppbnRlcm5hbHM6OiBpc3N1ZV9lcnJvcl90aHJvdyAoInNvdXJjZS9kYXRh X291dF9iYXNlLmNjIiwgMzEzMSwgX19QUkVUVFlfRlVOQ1RJT05fXywgIm91dCIsICJFeGNJTygp IiwgRXhjSU8oKSk7IH07CgogIHsgfTsKCiAgY29uc3QgdW5zaWduZWQgaW50IG5fZGF0YV9zZXRz ID0gZGF0YV9uYW1lcy5zaXplKCk7CgoKCgogIHsgfTsKCgoKCgogIGlmICh0cnVlKQogICAgewog ICAgICBzdGQ6OnRpbWVfdCB0aW1lMT0gc3RkOjp0aW1lICgwKTsKICAgICAgc3RkOjp0bSAqdGlt ZSA9IHN0ZDo6bG9jYWx0aW1lKCZ0aW1lMSk7CiAgICAgIG91dCA8PCAiIyB2dGsgRGF0YUZpbGUg VmVyc2lvbiAzLjAiCiAgICAgICAgICA8PCBzdGQ6OmVuZGwKICAgICAgICAgIDw8ICJUaGlzIGZp bGUgd2FzIGdlbmVyYXRlZCBieSB0aGUgZGVhbC5JSSBsaWJyYXJ5IG9uICIKICAgICAgICAgIDw8 IHRpbWUtPnRtX3llYXIrMTkwMCA8PCAiLyIKICAgICAgICAgIDw8IHRpbWUtPnRtX21vbisxIDw8 ICIvIgogICAgICAgICAgPDwgdGltZS0+dG1fbWRheSA8PCAiIGF0ICIKICAgICAgICAgIDw8IHRp bWUtPnRtX2hvdXIgPDwgIjoiCiAgICAgICAgICA8PCBzdGQ6OnNldHcoMikgPDwgdGltZS0+dG1f bWluIDw8ICI6IgogICAgICAgICAgPDwgc3RkOjpzZXR3KDIpIDw8IHRpbWUtPnRtX3NlYwogICAg ICAgICAgPDwgc3RkOjplbmRsCiAgICAgICAgICA8PCAiQVNDSUkiCiAgICAgICAgICA8PCBzdGQ6 OmVuZGwKICAgICAgICAgIDw8ICJEQVRBU0VUIFVOU1RSVUNUVVJFRF9HUklEIgogICAgICAgICAg PDwgc3RkOjplbmRsOwogICAgfTsKCgoKCiAgdW5zaWduZWQgaW50IG5fY2VsbHMgPSAwLAogICAg ICAgICAgICAgICBuX25vZGVzID0gMDsKICBmb3IgKHR5cGVuYW1lIHN0ZDo6dmVjdG9yPFBhdGNo PGRpbSxzcGFjZWRpbT4gPjo6Y29uc3RfaXRlcmF0b3IgcGF0Y2g9cGF0Y2hlcy5iZWdpbigpOwog ICAgICAgcGF0Y2ghPXBhdGNoZXMuZW5kKCk7ICsrcGF0Y2gpCiAgICBzd2l0Y2ggKGRpbSkKICAg ICAgewogICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICBuX2NlbGxzICs9IHBhdGNoLT5uX3N1 YmRpdmlzaW9uczsKICAgICAgICAgICAgICBuX25vZGVzICs9IHBhdGNoLT5uX3N1YmRpdmlzaW9u cysxOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICBu X2NlbGxzICs9IHBhdGNoLT5uX3N1YmRpdmlzaW9ucyAqCiAgICAgICAgICAgICAgICAgICAgICAg ICBwYXRjaC0+bl9zdWJkaXZpc2lvbnM7CiAgICAgICAgICAgICAgbl9ub2RlcyArPSAocGF0Y2gt Pm5fc3ViZGl2aXNpb25zKzEpICoKICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+bl9z dWJkaXZpc2lvbnMrMSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAzOgogICAg ICAgICAgICAgIG5fY2VsbHMgKz0gcGF0Y2gtPm5fc3ViZGl2aXNpb25zICoKICAgICAgICAgICAg ICAgICAgICAgICAgIHBhdGNoLT5uX3N1YmRpdmlzaW9ucyAqCiAgICAgICAgICAgICAgICAgICAg ICAgICBwYXRjaC0+bl9zdWJkaXZpc2lvbnM7CiAgICAgICAgICAgICAgbl9ub2RlcyArPSAocGF0 Y2gtPm5fc3ViZGl2aXNpb25zKzEpICoKICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+ bl9zdWJkaXZpc2lvbnMrMSkgKgogICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT5uX3N1 YmRpdmlzaW9ucysxKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAg ICAgICAgICAgIHsgfTsKICAgICAgfTsKIyAzMjE5ICJzb3VyY2UvZGF0YV9vdXRfYmFzZS5jYyIK ICBUYWJsZTwyLGRvdWJsZT4gZGF0YV92ZWN0b3JzIChuX2RhdGFfc2V0cywgbl9ub2Rlcyk7Cgog IFRocmVhZHM6OlRocmVhZE1hbmFnZXIgdGhyZWFkX21hbmFnZXI7CiAgdm9pZCAoKmZ1bl9wdHIp IChjb25zdCBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ID4gJiwKICAgICAgICAgICAg ICAgICAgIFRhYmxlPDIsZG91YmxlPiAmKQogICAgPSAmRGF0YU91dEJhc2U6OnRlbXBsYXRlIHdy aXRlX2dtdl9yZW9yZGVyX2RhdGFfdmVjdG9yczxkaW0sc3BhY2VkaW0+OwogIFRocmVhZHM6OnNw YXduICh0aHJlYWRfbWFuYWdlciwKICAgICAgICAgICAgICAgICAgVGhyZWFkczo6ZW5jYXBzdWxh dGUgKGZ1bl9wdHIpCiAgICAgICAgICAgICAgICAgIC5jb2xsZWN0X2FyZ3MocGF0Y2hlcywgZGF0 YV92ZWN0b3JzKSk7CiMgMzIzNiAic291cmNlL2RhdGFfb3V0X2Jhc2UuY2MiCiAgb3V0IDw8ICJQ T0lOVFMgIiA8PCBuX25vZGVzIDw8ICIgZG91YmxlIiA8PCBzdGQ6OmVuZGw7CiAgZm9yICh0eXBl bmFtZSBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ID46OmNvbnN0X2l0ZXJhdG9yIHBh dGNoPXBhdGNoZXMuYmVnaW4oKTsKICAgICAgIHBhdGNoIT1wYXRjaGVzLmVuZCgpOyArK3BhdGNo KQogICAgewogICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbl9zdWJkaXZpc2lvbnMgPSBwYXRjaC0+ bl9zdWJkaXZpc2lvbnM7CgogICAgICBzd2l0Y2ggKGRpbSkKICAgICAgICB7CiAgICAgICAgICBj YXNlIDE6CiAgICAgICAgICB7CiAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxu X3N1YmRpdmlzaW9ucysxOyArK2kpCiAgICAgICAgICAgICAgb3V0IDw8ICgocGF0Y2gtPnZlcnRp Y2VzWzFdKDApICogaSAvIG5fc3ViZGl2aXNpb25zKSArCiAgICAgICAgICAgICAgICAgICAgICAo cGF0Y2gtPnZlcnRpY2VzWzBdKDApICogKG5fc3ViZGl2aXNpb25zLWkpIC8gbl9zdWJkaXZpc2lv bnMpKQogICAgICAgICAgICAgICAgICA8PCAiIDAgMFxuIjsKICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICB9OwoKICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgIHsKICAgICAgICAgICAgZm9y ICh1bnNpZ25lZCBpbnQgaT0wOyBpPG5fc3ViZGl2aXNpb25zKzE7ICsraSkKICAgICAgICAgICAg ICBmb3IgKHVuc2lnbmVkIGludCBqPTA7IGo8bl9zdWJkaXZpc2lvbnMrMTsgKytqKQogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgeF9mcmFjID0gaSAqIDEu L25fc3ViZGl2aXNpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeV9mcmFjID0g aiAqIDEuL25fc3ViZGl2aXNpb25zOwoKICAgICAgICAgICAgICAgICAgb3V0IDw8ICgoKHBhdGNo LT52ZXJ0aWNlc1sxXSAqIHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0 Y2gtPnZlcnRpY2VzWzBdICogKDEteF9mcmFjKSkpICogKDEteV9mcmFjKSArCiAgICAgICAgICAg ICAgICAgICAgICAgICAgKChwYXRjaC0+dmVydGljZXNbMl0gKiB4X2ZyYWMpICsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1szXSAqICgxLXhfZnJhYykpKSAqIHlf ZnJhYykKICAgICAgICAgICAgICAgICAgICAgIDw8ICIgMFxuIjsKICAgICAgICAgICAgICAgIH07 CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfTsKCiAgICAgICAgICBjYXNlIDM6CiAgICAg ICAgICB7CiAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9u cysxOyArK2kpCiAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaj0wOyBqPG5fc3ViZGl2 aXNpb25zKzE7ICsraikKICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGs9MDsgazxu X3N1YmRpdmlzaW9ucysxOyArK2spCiAgICAgICAgICAgICAgICAgIHsKCgoKCgoKCiAgICAgICAg ICAgICAgICAgICAgY29uc3QgZG91YmxlIHhfZnJhYyA9IGkgKiAxLi9uX3N1YmRpdmlzaW9ucywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeV9mcmFjID0gayAqIDEuL25fc3ViZGl2 aXNpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6X2ZyYWMgPSBqICogMS4v bl9zdWJkaXZpc2lvbnM7CgoKCiAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICgoKChwYXRjaC0+ dmVydGljZXNbMV0gKiB4X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBh dGNoLT52ZXJ0aWNlc1swXSAqICgxLXhfZnJhYykpKSAqICgxLXlfZnJhYykgKwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgocGF0Y2gtPnZlcnRpY2VzWzJdICogeF9mcmFjKSArCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNbM10gKiAoMS14X2ZyYWMp KSkgKiB5X2ZyYWMpICogKDEtel9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAo KChwYXRjaC0+dmVydGljZXNbNV0gKiB4X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKHBhdGNoLT52ZXJ0aWNlc1s0XSAqICgxLXhfZnJhYykpKSAqICgxLXlfZnJhYykgKwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocGF0Y2gtPnZlcnRpY2VzWzZdICogeF9mcmFj KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNbN10gKiAo MS14X2ZyYWMpKSkgKiB5X2ZyYWMpICogel9mcmFjKQogICAgICAgICAgICAgICAgICAgICAgICA8 PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICBicmVhazsKICAg ICAgICAgIH07CgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHsgfTsKICAgICAg ICB9OwogICAgfTsKCgoKICBpZiAodHJ1ZSkKICAgIHsKICAgICAgb3V0IDw8ICJDRUxMUyAiIDw8 IG5fY2VsbHMgPDwgJyAnCiAgICAgICAgICA8PCBuX2NlbGxzKihHZW9tZXRyeUluZm88ZGltPjo6 dmVydGljZXNfcGVyX2NlbGwrMSkKICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKCgogICAgICB1bnNp Z25lZCBpbnQgZmlyc3RfdmVydGV4X29mX3BhdGNoID0gMDsKCiAgICAgIGZvciAodHlwZW5hbWUg c3RkOjp2ZWN0b3I8UGF0Y2g8ZGltLHNwYWNlZGltPiA+Ojpjb25zdF9pdGVyYXRvciBwYXRjaD1w YXRjaGVzLmJlZ2luKCk7CiAgICAgICAgICAgcGF0Y2ghPXBhdGNoZXMuZW5kKCk7ICsrcGF0Y2gp CiAgICAgICAgewogICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG5fc3ViZGl2aXNpb25zID0g cGF0Y2gtPm5fc3ViZGl2aXNpb25zOwoKCgogICAgICAgICAgc3dpdGNoIChkaW0pCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPG5fc3ViZGl2aXNpb25zOyArK2kpCiAgICAgICAg ICAgICAgICAgIG91dCA8PCAiMiAiCiAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJzdF92ZXJ0 ZXhfb2ZfcGF0Y2graSA8PCAnICcKICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRl eF9vZl9wYXRjaCtpKzEgPDwgc3RkOjplbmRsOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgfTsKCiAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9uczsgKytpKQog ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqPTA7IGo8bl9zdWJkaXZpc2lvbnM7 ICsraikKICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIjQgIgogICAgICAgICAgICAgICAgICAg ICAgICA8PCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2graSoobl9zdWJkaXZpc2lvbnMrMSkraiA8PCAn ICcKICAgICAgICAgICAgICAgICAgICAgICAgPDwgZmlyc3RfdmVydGV4X29mX3BhdGNoKyhpKzEp KihuX3N1YmRpdmlzaW9ucysxKStqIDw8ICcgJwogICAgICAgICAgICAgICAgICAgICAgICA8PCBm aXJzdF92ZXJ0ZXhfb2ZfcGF0Y2grKGkrMSkqKG5fc3ViZGl2aXNpb25zKzEpK2orMSA8PCAnICcK ICAgICAgICAgICAgICAgICAgICAgICAgPDwgZmlyc3RfdmVydGV4X29mX3BhdGNoK2kqKG5fc3Vi ZGl2aXNpb25zKzEpK2orMQogICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CiAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICBjYXNl IDM6CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaT0w OyBpPG5fc3ViZGl2aXNpb25zOyArK2kpCiAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg aW50IGo9MDsgajxuX3N1YmRpdmlzaW9uczsgKytqKQogICAgICAgICAgICAgICAgICAgIGZvciAo dW5zaWduZWQgaW50IGs9MDsgazxuX3N1YmRpdmlzaW9uczsgKytrKQogICAgICAgICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIjggIgoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCsoaSoobl9zdWJkaXZpc2lv bnMrMSkraiApKihuX3N1YmRpdmlzaW9ucysxKStrIDw8ICcgJwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgPDwgZmlyc3RfdmVydGV4X29mX3BhdGNoKygoaSsxKSoobl9zdWJkaXZpc2lvbnMr MSkraiApKihuX3N1YmRpdmlzaW9ucysxKStrIDw8ICcgJwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgPDwgZmlyc3RfdmVydGV4X29mX3BhdGNoKygoaSsxKSoobl9zdWJkaXZpc2lvbnMrMSkr aisxKSoobl9zdWJkaXZpc2lvbnMrMSkrayA8PCAnICcKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCsoaSoobl9zdWJkaXZpc2lvbnMrMSkraisxICkq KG5fc3ViZGl2aXNpb25zKzEpK2sgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 PCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2grKGkqKG5fc3ViZGl2aXNpb25zKzEpK2ogKSoobl9zdWJk aXZpc2lvbnMrMSkraysxIDw8ICcgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgZmly c3RfdmVydGV4X29mX3BhdGNoKygoaSsxKSoobl9zdWJkaXZpc2lvbnMrMSkraiApKihuX3N1YmRp dmlzaW9ucysxKStrKzEgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJz dF92ZXJ0ZXhfb2ZfcGF0Y2grKChpKzEpKihuX3N1YmRpdmlzaW9ucysxKStqKzEpKihuX3N1YmRp dmlzaW9ucysxKStrKzEgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJz dF92ZXJ0ZXhfb2ZfcGF0Y2grKGkqKG5fc3ViZGl2aXNpb25zKzEpK2orMSApKihuX3N1YmRpdmlz aW9ucysxKStrKzEgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVu ZGw7CiAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgfTsKCiAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICB7 IH07CiAgICAgICAgICAgIH07CgoKCgogICAgICAgICAgc3dpdGNoIChkaW0pCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgZmlyc3RfdmVydGV4 X29mX3BhdGNoICs9IG5fc3ViZGl2aXNpb25zKzE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgIGZpcnN0X3ZlcnRleF9v Zl9wYXRjaCArPSAobl9zdWJkaXZpc2lvbnMrMSkgKgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAobl9zdWJkaXZpc2lvbnMrMSk7CiAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgIGZpcnN0 X3ZlcnRleF9vZl9wYXRjaCArPSAobl9zdWJkaXZpc2lvbnMrMSkgKgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobl9zdWJkaXZpc2lvbnMrMSkgKgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobl9zdWJkaXZpc2lvbnMrMSk7 CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAg ICAgICAgICAgICAgICB7IH07CiAgICAgICAgICAgIH07CiAgICAgICAgfTsKCgoKCiAgICAgIG91 dCA8PCAiQ0VMTF9UWVBFUyAiIDw8IG5fY2VsbHMgPDwgc3RkOjplbmRsOwogICAgICBmb3IgKHVu c2lnbmVkIGludCBpPTA7IGk8bl9jZWxsczsgKytpKQogICAgICAgIHN3aXRjaCAoZGltKQogICAg ICAgICAgewogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgIG91dCA8PCAiM1xu IjsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAg ICAgICAgICAgb3V0IDw8ICI5XG4iOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg ICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICBvdXQgPDwgIjEyXG4iOwogICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgeyB9Owog ICAgICAgICAgfTsKICAgIH07CgoKCgoKCgogIHRocmVhZF9tYW5hZ2VyLndhaXQgKCk7CgoKCgoK CgogIG91dCA8PCAiUE9JTlRfREFUQSAiIDw8IG5fbm9kZXMKICAgICAgPDwgc3RkOjplbmRsOwog IGZvciAodW5zaWduZWQgaW50IGRhdGFfc2V0PTA7IGRhdGFfc2V0PG5fZGF0YV9zZXRzOyArK2Rh dGFfc2V0KQogICAgewogICAgICBvdXQgPDwgIlNDQUxBUlMgIgogICAgICAgICAgPDwgZGF0YV9u YW1lc1tkYXRhX3NldF0KICAgICAgICAgIDw8ICIgZG91YmxlIDEiCiAgICAgICAgICA8PCBzdGQ6 OmVuZGwKICAgICAgICAgIDw8ICJMT09LVVBfVEFCTEUgZGVmYXVsdCIKICAgICAgICAgIDw8IHN0 ZDo6ZW5kbDsKICAgICAgY29weShkYXRhX3ZlY3RvcnNbZGF0YV9zZXRdLmJlZ2luKCksCiAgICAg ICAgICAgZGF0YV92ZWN0b3JzW2RhdGFfc2V0XS5lbmQoKSwKICAgICAgICAgICBzdGQ6Om9zdHJl YW1faXRlcmF0b3I8ZG91YmxlPihvdXQsICIgIikpOwogICAgICBvdXQgPDwgc3RkOjplbmRsOwog ICAgfTsKCgogIHsgaWYgKF9fYnVpbHRpbl9leHBlY3QoIShvdXQpLCBmYWxzZSkpIGRlYWxfSUlf ZXhjZXB0aW9uczo6aW50ZXJuYWxzOjogaXNzdWVfZXJyb3JfdGhyb3cgKCJzb3VyY2UvZGF0YV9v dXRfYmFzZS5jYyIsIDM0NDksIF9fUFJFVFRZX0ZVTkNUSU9OX18sICJvdXQiLCAiRXhjSU8oKSIs IEV4Y0lPKCkpOyB9Owp9OwoKCgoKdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9p ZApEYXRhT3V0QmFzZTo6d3JpdGVfZ212X3Jlb3JkZXJfZGF0YV92ZWN0b3JzIChjb25zdCBzdGQ6 OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ID4gJnBhdGNoZXMsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlPDIsZG91YmxlPiAmZGF0YV92ZWN0b3Jz KQp7CgoKCgoKCgogIGNvbnN0IHVuc2lnbmVkIGludCBuX2RhdGFfc2V0cyA9IHBhdGNoZXNbMF0u ZGF0YS5uX3Jvd3MoKTsKCiAgeyB9OwoKCgogIHVuc2lnbmVkIGludCBuZXh0X3ZhbHVlID0gMDsK ICBmb3IgKHR5cGVuYW1lIHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPjo6Y29uc3Rf aXRlcmF0b3IgcGF0Y2g9cGF0Y2hlcy5iZWdpbigpOwogICAgICAgcGF0Y2ggIT0gcGF0Y2hlcy5l bmQoKTsgKytwYXRjaCkKICAgIHsKICAgICAgY29uc3QgdW5zaWduZWQgaW50IG5fc3ViZGl2aXNp b25zID0gcGF0Y2gtPm5fc3ViZGl2aXNpb25zOwoKICAgICAgeyB9OwoKICAgICAgeyB9OwojIDM0 OTAgInNvdXJjZS9kYXRhX291dF9iYXNlLmNjIgogICAgICBzd2l0Y2ggKGRpbSkKICAgICAgICB7 CiAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICB7CiAgICAgICAgICAgIGZvciAodW5zaWduZWQg aW50IGk9MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2ksICsrbmV4dF92YWx1ZSkKICAgICAgICAg ICAgICBmb3IgKHVuc2lnbmVkIGludCBkYXRhX3NldD0wOyBkYXRhX3NldDxuX2RhdGFfc2V0czsg KytkYXRhX3NldCkKICAgICAgICAgICAgICAgIGRhdGFfdmVjdG9yc1tkYXRhX3NldF1bbmV4dF92 YWx1ZV0gPSBwYXRjaC0+ZGF0YShkYXRhX3NldCxpKTsKCiAgICAgICAgICAgIGJyZWFrOwogICAg ICAgICAgfTsKCiAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICB7CiAgICAgICAgICAgIGZvciAo dW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2kpCiAgICAgICAgICAgICAg Zm9yICh1bnNpZ25lZCBpbnQgaj0wOyBqPG5fc3ViZGl2aXNpb25zKzE7ICsraikKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZGF0YV9zZXQ9MDsg ZGF0YV9zZXQ8bl9kYXRhX3NldHM7ICsrZGF0YV9zZXQpCiAgICAgICAgICAgICAgICAgICAgZGF0 YV92ZWN0b3JzW2RhdGFfc2V0XVtuZXh0X3ZhbHVlXQogICAgICAgICAgICAgICAgICAgICAgPSBw YXRjaC0+ZGF0YShkYXRhX3NldCxpKihuX3N1YmRpdmlzaW9ucysxKSArIGopOwogICAgICAgICAg ICAgICAgICArK25leHRfdmFsdWU7CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgICB9OwoKICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgIHsKICAgICAgICAg ICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPG5fc3ViZGl2aXNpb25zKzE7ICsraSkKICAgICAg ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqPTA7IGo8bl9zdWJkaXZpc2lvbnMrMTsgKytqKQog ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaz0wOyBrPG5fc3ViZGl2aXNpb25zKzE7 ICsraykKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWdu ZWQgaW50IGRhdGFfc2V0PTA7IGRhdGFfc2V0PG5fZGF0YV9zZXRzOyArK2RhdGFfc2V0KQogICAg ICAgICAgICAgICAgICAgICAgZGF0YV92ZWN0b3JzW2RhdGFfc2V0XVtuZXh0X3ZhbHVlXQogICAg ICAgICAgICAgICAgICAgICAgICA9IHBhdGNoLT5kYXRhKGRhdGFfc2V0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChpKihuX3N1YmRpdmlzaW9ucysxKStqKSoobl9zdWJk aXZpc2lvbnMrMSkrayk7CiAgICAgICAgICAgICAgICAgICAgKytuZXh0X3ZhbHVlOwogICAgICAg ICAgICAgICAgICB9OwoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9OwoKICAgICAgICAg IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB7IH07CiAgICAgICAgfTsKICAgIH07CgogIGZvciAo dW5zaWduZWQgaW50IGRhdGFfc2V0PTA7IGRhdGFfc2V0PG5fZGF0YV9zZXRzOyArK2RhdGFfc2V0 KQogICAgeyB9OwoKfTsKCgoKCgoKdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9p ZCBEYXRhT3V0SW50ZXJmYWNlPGRpbSxzcGFjZWRpbT46OndyaXRlX2R4IChzdGQ6Om9zdHJlYW0g Jm91dCkgY29uc3QKewogIERhdGFPdXRCYXNlOjp3cml0ZV9keCAoZ2V0X3BhdGNoZXMoKSwgZ2V0 X2RhdGFzZXRfbmFtZXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGR4X2ZsYWdzLCBvdXQp Owp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbSwgaW50IHNwYWNlZGltPgp2b2lkIERhdGFPdXRJbnRl cmZhY2U8ZGltLHNwYWNlZGltPjo6d3JpdGVfdWNkIChzdGQ6Om9zdHJlYW0gJm91dCkgY29uc3QK ewogIERhdGFPdXRCYXNlOjp3cml0ZV91Y2QgKGdldF9wYXRjaGVzKCksIGdldF9kYXRhc2V0X25h bWVzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgdWNkX2ZsYWdzLCBvdXQpOwp9OwoKCgp0 ZW1wbGF0ZSA8aW50IGRpbSwgaW50IHNwYWNlZGltPgp2b2lkIERhdGFPdXRJbnRlcmZhY2U8ZGlt LHNwYWNlZGltPjo6d3JpdGVfZ251cGxvdCAoc3RkOjpvc3RyZWFtICZvdXQpIGNvbnN0CnsKICBE YXRhT3V0QmFzZTo6d3JpdGVfZ251cGxvdCAoZ2V0X3BhdGNoZXMoKSwgZ2V0X2RhdGFzZXRfbmFt ZXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ251cGxvdF9mbGFncywgb3V0KTsK fTsKCgoKdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9pZCBEYXRhT3V0SW50ZXJm YWNlPGRpbSxzcGFjZWRpbT46OndyaXRlX3BvdnJheSAoc3RkOjpvc3RyZWFtICZvdXQpIGNvbnN0 CnsKICBEYXRhT3V0QmFzZTo6d3JpdGVfcG92cmF5IChnZXRfcGF0Y2hlcygpLCBnZXRfZGF0YXNl dF9uYW1lcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvdnJheV9mbGFncywgb3V0 KTsKfTsKCgoKdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9pZCBEYXRhT3V0SW50 ZXJmYWNlPGRpbSxzcGFjZWRpbT46OndyaXRlX2VwcyAoc3RkOjpvc3RyZWFtICZvdXQpIGNvbnN0 CnsKICBEYXRhT3V0QmFzZTo6d3JpdGVfZXBzIChnZXRfcGF0Y2hlcygpLCBnZXRfZGF0YXNldF9u YW1lcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGVwc19mbGFncywgb3V0KTsKfTsKCgoK dGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9pZCBEYXRhT3V0SW50ZXJmYWNlPGRp bSxzcGFjZWRpbT46OndyaXRlX2dtdiAoc3RkOjpvc3RyZWFtICZvdXQpIGNvbnN0CnsKICBEYXRh T3V0QmFzZTo6d3JpdGVfZ212IChnZXRfcGF0Y2hlcygpLCBnZXRfZGF0YXNldF9uYW1lcygpLAog ICAgICAgICAgICAgICAgICAgICAgICAgIGdtdl9mbGFncywgb3V0KTsKfTsKCgoKdGVtcGxhdGUg PGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9pZCBEYXRhT3V0SW50ZXJmYWNlPGRpbSxzcGFjZWRp bT46OndyaXRlX3RlY3Bsb3QgKHN0ZDo6b3N0cmVhbSAmb3V0KSBjb25zdAp7CiAgRGF0YU91dEJh c2U6OndyaXRlX3RlY3Bsb3QgKGdldF9wYXRjaGVzKCksIGdldF9kYXRhc2V0X25hbWVzKCksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlY3Bsb3RfZmxhZ3MsIG91dCk7Cn07CgoKCnRl bXBsYXRlIDxpbnQgZGltLCBpbnQgc3BhY2VkaW0+CnZvaWQgRGF0YU91dEludGVyZmFjZTxkaW0s c3BhY2VkaW0+Ojp3cml0ZV90ZWNwbG90X2JpbmFyeSAoc3RkOjpvc3RyZWFtICZvdXQpIGNvbnN0 CnsKICBEYXRhT3V0QmFzZTo6d3JpdGVfdGVjcGxvdF9iaW5hcnkgKGdldF9wYXRjaGVzKCksIGdl dF9kYXRhc2V0X25hbWVzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 ZWNwbG90X2ZsYWdzLCBvdXQpOwp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbSwgaW50IHNwYWNlZGlt Pgp2b2lkIERhdGFPdXRJbnRlcmZhY2U8ZGltLHNwYWNlZGltPjo6d3JpdGVfdnRrIChzdGQ6Om9z dHJlYW0gJm91dCkgY29uc3QKewogIERhdGFPdXRCYXNlOjp3cml0ZV92dGsgKGdldF9wYXRjaGVz KCksIGdldF9kYXRhc2V0X25hbWVzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgdnRrX2Zs YWdzLCBvdXQpOwp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbSwgaW50IHNwYWNlZGltPgp2b2lkCkRh dGFPdXRJbnRlcmZhY2U8ZGltLHNwYWNlZGltPjo6d3JpdGUgKHN0ZDo6b3N0cmVhbSAmb3V0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPdXRwdXRGb3JtYXQg b3V0cHV0X2Zvcm1hdF8pIGNvbnN0CnsKICBPdXRwdXRGb3JtYXQgb3V0cHV0X2Zvcm1hdCA9IG91 dHB1dF9mb3JtYXRfOwogIGlmIChvdXRwdXRfZm9ybWF0ID09IGRlZmF1bHRfZm9ybWF0KQogICAg b3V0cHV0X2Zvcm1hdCA9IGRlZmF1bHRfZm10OwoKICBzd2l0Y2ggKG91dHB1dF9mb3JtYXQpCiAg ICB7CiAgICAgIGNhc2UgZHg6CiAgICAgICAgICAgIHdyaXRlX2R4IChvdXQpOwogICAgICAgICAg ICBicmVhazsKCiAgICAgIGNhc2UgdWNkOgogICAgICAgICAgICB3cml0ZV91Y2QgKG91dCk7CiAg ICAgICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBnbnVwbG90OgogICAgICAgICAgICB3cml0ZV9n bnVwbG90IChvdXQpOwogICAgICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgcG92cmF5OgogICAg ICAgICAgICB3cml0ZV9wb3ZyYXkgKG91dCk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgY2Fz ZSBlcHM6CiAgICAgICAgICAgIHdyaXRlX2VwcyhvdXQpOwogICAgICAgICAgICBicmVhazsKCiAg ICAgIGNhc2UgZ212OgogICAgICAgICAgICB3cml0ZV9nbXYgKG91dCk7CiAgICAgICAgICAgIGJy ZWFrOwoKICAgICAgY2FzZSB0ZWNwbG90OgogICAgICAgICAgICB3cml0ZV90ZWNwbG90IChvdXQp OwogICAgICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgdGVjcGxvdF9iaW5hcnk6CiAgICAgICAg ICAgIHdyaXRlX3RlY3Bsb3RfYmluYXJ5IChvdXQpOwogICAgICAgICAgICBicmVhazsKCiAgICAg IGNhc2UgdnRrOgogICAgICAgICAgICB3cml0ZV92dGsgKG91dCk7CiAgICAgICAgICAgIGJyZWFr OwoKICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgeyB9OwogICAgfTsKfTsKCgoKdGVtcGxhdGUg PGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9pZCBEYXRhT3V0SW50ZXJmYWNlPGRpbSxzcGFjZWRp bT46OnNldF9kZWZhdWx0X2Zvcm1hdChjb25zdCBPdXRwdXRGb3JtYXQgZm10KQp7CiAgeyB9Owog IGRlZmF1bHRfZm10ID0gZm10Owp9CgoKCnRlbXBsYXRlIDxpbnQgZGltLCBpbnQgc3BhY2VkaW0+ CnZvaWQgRGF0YU91dEludGVyZmFjZTxkaW0sc3BhY2VkaW0+OjpzZXRfZmxhZ3MgKGNvbnN0IERY RmxhZ3MgJmZsYWdzKQp7CiAgZHhfZmxhZ3MgPSBmbGFnczsKfTsKCgoKdGVtcGxhdGUgPGludCBk aW0sIGludCBzcGFjZWRpbT4Kdm9pZCBEYXRhT3V0SW50ZXJmYWNlPGRpbSxzcGFjZWRpbT46OnNl dF9mbGFncyAoY29uc3QgVWNkRmxhZ3MgJmZsYWdzKQp7CiAgdWNkX2ZsYWdzID0gZmxhZ3M7Cn07 CgoKCnRlbXBsYXRlIDxpbnQgZGltLCBpbnQgc3BhY2VkaW0+CnZvaWQgRGF0YU91dEludGVyZmFj ZTxkaW0sc3BhY2VkaW0+OjpzZXRfZmxhZ3MgKGNvbnN0IEdudXBsb3RGbGFncyAmZmxhZ3MpCnsK ICBnbnVwbG90X2ZsYWdzID0gZmxhZ3M7Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltLCBpbnQgc3Bh Y2VkaW0+CnZvaWQgRGF0YU91dEludGVyZmFjZTxkaW0sc3BhY2VkaW0+OjpzZXRfZmxhZ3MgKGNv bnN0IFBvdnJheUZsYWdzICZmbGFncykKewogIHBvdnJheV9mbGFncyA9IGZsYWdzOwp9OwoKCgp0 ZW1wbGF0ZSA8aW50IGRpbSwgaW50IHNwYWNlZGltPgp2b2lkIERhdGFPdXRJbnRlcmZhY2U8ZGlt LHNwYWNlZGltPjo6c2V0X2ZsYWdzIChjb25zdCBFcHNGbGFncyAmZmxhZ3MpCnsKICBlcHNfZmxh Z3MgPSBmbGFnczsKfTsKCgoKdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9pZCBE YXRhT3V0SW50ZXJmYWNlPGRpbSxzcGFjZWRpbT46OnNldF9mbGFncyAoY29uc3QgR212RmxhZ3Mg JmZsYWdzKQp7CiAgZ212X2ZsYWdzID0gZmxhZ3M7Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltLCBp bnQgc3BhY2VkaW0+CnZvaWQgRGF0YU91dEludGVyZmFjZTxkaW0sc3BhY2VkaW0+OjpzZXRfZmxh Z3MgKGNvbnN0IFRlY3Bsb3RGbGFncyAmZmxhZ3MpCnsKICB0ZWNwbG90X2ZsYWdzID0gZmxhZ3M7 Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltLCBpbnQgc3BhY2VkaW0+CnZvaWQgRGF0YU91dEludGVy ZmFjZTxkaW0sc3BhY2VkaW0+OjpzZXRfZmxhZ3MgKGNvbnN0IFZ0a0ZsYWdzICZmbGFncykKewog IHZ0a19mbGFncyA9IGZsYWdzOwp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbSwgaW50IHNwYWNlZGlt PgpzdGQ6OnN0cmluZwpEYXRhT3V0SW50ZXJmYWNlPGRpbSxzcGFjZWRpbT46OmRlZmF1bHRfc3Vm Zml4IChjb25zdCBPdXRwdXRGb3JtYXQgb3V0cHV0X2Zvcm1hdF8pIGNvbnN0CnsKICBPdXRwdXRG b3JtYXQgb3V0cHV0X2Zvcm1hdCA9IG91dHB1dF9mb3JtYXRfOwogIGlmIChvdXRwdXRfZm9ybWF0 ID09IGRlZmF1bHRfZm9ybWF0KQogICAgb3V0cHV0X2Zvcm1hdCA9IGRlZmF1bHRfZm10OwoKICBz d2l0Y2ggKG91dHB1dF9mb3JtYXQpCiAgICB7CiAgICAgIGNhc2UgZHg6CiAgICAgICAgICAgIHJl dHVybiAiLmR4IjsKCiAgICAgIGNhc2UgdWNkOgogICAgICAgICAgICByZXR1cm4gIi5pbnAiOwoK ICAgICAgY2FzZSBnbnVwbG90OgogICAgICAgICAgICByZXR1cm4gIi5nbnVwbG90IjsKCiAgICAg IGNhc2UgcG92cmF5OgogICAgICAgICAgICByZXR1cm4gIi5wb3YiOwoKICAgICAgY2FzZSBlcHM6 CiAgICAgICAgICAgIHJldHVybiAiLmVwcyI7CgogICAgICBjYXNlIGdtdjoKICAgICAgICAgICAg cmV0dXJuICIuZ212IjsKCiAgICAgIGNhc2UgdGVjcGxvdDoKICAgICAgICAgICAgcmV0dXJuICIu ZGF0IjsKCiAgICAgIGNhc2UgdGVjcGxvdF9iaW5hcnk6CiAgICAgICAgICAgIHJldHVybiAiLnBs dCI7CgogICAgICBjYXNlIHZ0azoKICAgICAgICAgICAgcmV0dXJuICIudnRrIjsKCiAgICAgIGRl ZmF1bHQ6CiAgICAgICAgICAgIHsgfTsKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgfTsKfTsK CgoKdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4KdHlwZW5hbWUgRGF0YU91dEludGVy ZmFjZTxkaW0sc3BhY2VkaW0+OjpPdXRwdXRGb3JtYXQKRGF0YU91dEludGVyZmFjZTxkaW0sc3Bh Y2VkaW0+OjpwYXJzZV9vdXRwdXRfZm9ybWF0IChjb25zdCBzdGQ6OnN0cmluZyAmZm9ybWF0X25h bWUpCnsKICBpZiAoZm9ybWF0X25hbWUgPT0gImR4IikKICAgIHJldHVybiBkeDsKCiAgaWYgKGZv cm1hdF9uYW1lID09ICJ1Y2QiKQogICAgcmV0dXJuIHVjZDsKCiAgaWYgKGZvcm1hdF9uYW1lID09 ICJnbnVwbG90IikKICAgIHJldHVybiBnbnVwbG90OwoKICBpZiAoZm9ybWF0X25hbWUgPT0gInBv dnJheSIpCiAgICByZXR1cm4gcG92cmF5OwoKICBpZiAoZm9ybWF0X25hbWUgPT0gImVwcyIpCiAg ICByZXR1cm4gZXBzOwoKICBpZiAoZm9ybWF0X25hbWUgPT0gImdtdiIpCiAgICByZXR1cm4gZ212 OwoKICBpZiAoZm9ybWF0X25hbWUgPT0gInRlY3Bsb3QiKQogICAgcmV0dXJuIHRlY3Bsb3Q7Cgog IGlmIChmb3JtYXRfbmFtZSA9PSAidGVjcGxvdF9iaW5hcnkiKQogICAgcmV0dXJuIHRlY3Bsb3Rf YmluYXJ5OwoKICBpZiAoZm9ybWF0X25hbWUgPT0gInZ0ayIpCiAgICByZXR1cm4gdnRrOwoKICB7 IGlmIChfX2J1aWx0aW5fZXhwZWN0KCEoZmFsc2UpLCBmYWxzZSkpIGRlYWxfSUlfZXhjZXB0aW9u czo6aW50ZXJuYWxzOjogaXNzdWVfZXJyb3JfdGhyb3cgKCJzb3VyY2UvZGF0YV9vdXRfYmFzZS5j YyIsIDM4MzAsIF9fUFJFVFRZX0ZVTkNUSU9OX18sICJmYWxzZSIsICJFeGNJbnZhbGlkU3RhdGUg KCkiLCBFeGNJbnZhbGlkU3RhdGUgKCkpOyB9OwoKCiAgcmV0dXJuIE91dHB1dEZvcm1hdCgtMSk7 Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltLCBpbnQgc3BhY2VkaW0+CnN0ZDo6c3RyaW5nIERhdGFP dXRJbnRlcmZhY2U8ZGltLHNwYWNlZGltPjo6Z2V0X291dHB1dF9mb3JtYXRfbmFtZXMgKCkKewog IHJldHVybiAiZHh8dWNkfGdudXBsb3R8cG92cmF5fGVwc3xnbXZ8dGVjcGxvdHx2dGsiOwp9CgoK CnRlbXBsYXRlIDxpbnQgZGltLCBpbnQgc3BhY2VkaW0+CnZvaWQgRGF0YU91dEludGVyZmFjZTxk aW0sc3BhY2VkaW0+OjpkZWNsYXJlX3BhcmFtZXRlcnMgKFBhcmFtZXRlckhhbmRsZXIgJnBybSkK ewogIHBybS5kZWNsYXJlX2VudHJ5ICgiT3V0cHV0IGZvcm1hdCIsICJnbnVwbG90IiwKICAgICAg ICAgICAgICAgICAgICAgUGF0dGVybnM6OlNlbGVjdGlvbiAoZ2V0X291dHB1dF9mb3JtYXRfbmFt ZXMgKCkpKTsKCiAgcHJtLmVudGVyX3N1YnNlY3Rpb24gKCJEWCBvdXRwdXQgcGFyYW1ldGVycyIp OwogIERYRmxhZ3M6OmRlY2xhcmVfcGFyYW1ldGVycyAocHJtKTsKICBwcm0ubGVhdmVfc3Vic2Vj dGlvbiAoKTsKCiAgcHJtLmVudGVyX3N1YnNlY3Rpb24gKCJVQ0Qgb3V0cHV0IHBhcmFtZXRlcnMi KTsKICBVY2RGbGFnczo6ZGVjbGFyZV9wYXJhbWV0ZXJzIChwcm0pOwogIHBybS5sZWF2ZV9zdWJz ZWN0aW9uICgpOwoKICBwcm0uZW50ZXJfc3Vic2VjdGlvbiAoIkdudXBsb3Qgb3V0cHV0IHBhcmFt ZXRlcnMiKTsKICBHbnVwbG90RmxhZ3M6OmRlY2xhcmVfcGFyYW1ldGVycyAocHJtKTsKICBwcm0u bGVhdmVfc3Vic2VjdGlvbiAoKTsKCiAgcHJtLmVudGVyX3N1YnNlY3Rpb24gKCJQb3ZyYXkgb3V0 cHV0IHBhcmFtZXRlcnMiKTsKICBQb3ZyYXlGbGFnczo6ZGVjbGFyZV9wYXJhbWV0ZXJzIChwcm0p OwogIHBybS5sZWF2ZV9zdWJzZWN0aW9uICgpOwoKICBwcm0uZW50ZXJfc3Vic2VjdGlvbiAoIkVw cyBvdXRwdXQgcGFyYW1ldGVycyIpOwogIEVwc0ZsYWdzOjpkZWNsYXJlX3BhcmFtZXRlcnMgKHBy bSk7CiAgcHJtLmxlYXZlX3N1YnNlY3Rpb24gKCk7CgogIHBybS5lbnRlcl9zdWJzZWN0aW9uICgi R212IG91dHB1dCBwYXJhbWV0ZXJzIik7CiAgR212RmxhZ3M6OmRlY2xhcmVfcGFyYW1ldGVycyAo cHJtKTsKICBwcm0ubGVhdmVfc3Vic2VjdGlvbiAoKTsKCiAgcHJtLmVudGVyX3N1YnNlY3Rpb24g KCJUZWNwbG90IG91dHB1dCBwYXJhbWV0ZXJzIik7CiAgVGVjcGxvdEZsYWdzOjpkZWNsYXJlX3Bh cmFtZXRlcnMgKHBybSk7CiAgcHJtLmxlYXZlX3N1YnNlY3Rpb24gKCk7CgogIHBybS5lbnRlcl9z dWJzZWN0aW9uICgiVnRrIG91dHB1dCBwYXJhbWV0ZXJzIik7CiAgVnRrRmxhZ3M6OmRlY2xhcmVf cGFyYW1ldGVycyAocHJtKTsKICBwcm0ubGVhdmVfc3Vic2VjdGlvbiAoKTsKfQoKCgp0ZW1wbGF0 ZSA8aW50IGRpbSwgaW50IHNwYWNlZGltPgp2b2lkIERhdGFPdXRJbnRlcmZhY2U8ZGltLHNwYWNl ZGltPjo6cGFyc2VfcGFyYW1ldGVycyAoUGFyYW1ldGVySGFuZGxlciAmcHJtKQp7CiAgY29uc3Qg c3RkOjpzdHJpbmcmIG91dHB1dF9uYW1lID0gcHJtLmdldCAoIk91dHB1dCBmb3JtYXQiKTsKICBk ZWZhdWx0X2ZtdCA9IHBhcnNlX291dHB1dF9mb3JtYXQgKG91dHB1dF9uYW1lKTsKCiAgcHJtLmVu dGVyX3N1YnNlY3Rpb24gKCJEWCBvdXRwdXQgcGFyYW1ldGVycyIpOwogIGR4X2ZsYWdzLnBhcnNl X3BhcmFtZXRlcnMgKHBybSk7CiAgcHJtLmxlYXZlX3N1YnNlY3Rpb24gKCk7CgogIHBybS5lbnRl cl9zdWJzZWN0aW9uICgiVUNEIG91dHB1dCBwYXJhbWV0ZXJzIik7CiAgdWNkX2ZsYWdzLnBhcnNl X3BhcmFtZXRlcnMgKHBybSk7CiAgcHJtLmxlYXZlX3N1YnNlY3Rpb24gKCk7CgogIHBybS5lbnRl cl9zdWJzZWN0aW9uICgiR251cGxvdCBvdXRwdXQgcGFyYW1ldGVycyIpOwogIGdudXBsb3RfZmxh Z3MucGFyc2VfcGFyYW1ldGVycyAocHJtKTsKICBwcm0ubGVhdmVfc3Vic2VjdGlvbiAoKTsKCiAg cHJtLmVudGVyX3N1YnNlY3Rpb24gKCJQb3ZyYXkgb3V0cHV0IHBhcmFtZXRlcnMiKTsKICBwb3Zy YXlfZmxhZ3MucGFyc2VfcGFyYW1ldGVycyAocHJtKTsKICBwcm0ubGVhdmVfc3Vic2VjdGlvbiAo KTsKCiAgcHJtLmVudGVyX3N1YnNlY3Rpb24gKCJFcHMgb3V0cHV0IHBhcmFtZXRlcnMiKTsKICBl cHNfZmxhZ3MucGFyc2VfcGFyYW1ldGVycyAocHJtKTsKICBwcm0ubGVhdmVfc3Vic2VjdGlvbiAo KTsKCiAgcHJtLmVudGVyX3N1YnNlY3Rpb24gKCJHbXYgb3V0cHV0IHBhcmFtZXRlcnMiKTsKICBn bXZfZmxhZ3MucGFyc2VfcGFyYW1ldGVycyAocHJtKTsKICBwcm0ubGVhdmVfc3Vic2VjdGlvbiAo KTsKCiAgcHJtLmVudGVyX3N1YnNlY3Rpb24gKCJUZWNwbG90IG91dHB1dCBwYXJhbWV0ZXJzIik7 CiAgdGVjcGxvdF9mbGFncy5wYXJzZV9wYXJhbWV0ZXJzIChwcm0pOwogIHBybS5sZWF2ZV9zdWJz ZWN0aW9uICgpOwoKICBwcm0uZW50ZXJfc3Vic2VjdGlvbiAoIlZ0ayBvdXRwdXQgcGFyYW1ldGVy cyIpOwogIHZ0a19mbGFncy5wYXJzZV9wYXJhbWV0ZXJzIChwcm0pOwogIHBybS5sZWF2ZV9zdWJz ZWN0aW9uICgpOwp9CgoKdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4KdW5zaWduZWQg aW50CkRhdGFPdXRJbnRlcmZhY2U8ZGltLHNwYWNlZGltPjo6bWVtb3J5X2NvbnN1bXB0aW9uICgp IGNvbnN0CnsKICByZXR1cm4gKHNpemVvZiAoZGVmYXVsdF9mbXQpICsKICAgICAgICAgIE1lbW9y eUNvbnN1bXB0aW9uOjptZW1vcnlfY29uc3VtcHRpb24gKGR4X2ZsYWdzKSArCiAgICAgICAgICBN ZW1vcnlDb25zdW1wdGlvbjo6bWVtb3J5X2NvbnN1bXB0aW9uICh1Y2RfZmxhZ3MpICsKICAgICAg ICAgIE1lbW9yeUNvbnN1bXB0aW9uOjptZW1vcnlfY29uc3VtcHRpb24gKGdudXBsb3RfZmxhZ3Mp ICsKICAgICAgICAgIE1lbW9yeUNvbnN1bXB0aW9uOjptZW1vcnlfY29uc3VtcHRpb24gKHBvdnJh eV9mbGFncykgKwogICAgICAgICAgTWVtb3J5Q29uc3VtcHRpb246Om1lbW9yeV9jb25zdW1wdGlv biAoZXBzX2ZsYWdzKSArCiAgICAgICAgICBNZW1vcnlDb25zdW1wdGlvbjo6bWVtb3J5X2NvbnN1 bXB0aW9uIChnbXZfZmxhZ3MpICsKICAgICAgICAgIE1lbW9yeUNvbnN1bXB0aW9uOjptZW1vcnlf Y29uc3VtcHRpb24gKHRlY3Bsb3RfZmxhZ3MpICsKICAgICAgICAgIE1lbW9yeUNvbnN1bXB0aW9u OjptZW1vcnlfY29uc3VtcHRpb24gKHZ0a19mbGFncykpOwp9OwoKCgoKCgp0ZW1wbGF0ZSBjbGFz cyBEYXRhT3V0SW50ZXJmYWNlPDQsND47CnRlbXBsYXRlIGNsYXNzIERhdGFPdXRCYXNlOjpQYXRj aDw0LCA0PjsKCgoKdGVtcGxhdGUgY2xhc3MgRGF0YU91dEludGVyZmFjZTw0IC0xLDQ+Owp0ZW1w bGF0ZSBjbGFzcyBEYXRhT3V0QmFzZTo6UGF0Y2g8NCAtMSwgND47Cg==
reply other threads:[~2002-10-29 21:06 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20021029210235.2088.qmail@sources.redhat.com \ --to=bangerth@ticam.utexas.edu \ --cc=gcc-gnats@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).