From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18899 invoked by alias); 25 Oct 2002 14:56:02 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 18822 invoked by uid 71); 25 Oct 2002 14:56:01 -0000 Resent-Date: 25 Oct 2002 14:56:01 -0000 Resent-Message-ID: <20021025145601.18820.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, d95-bli@nada.kth.se Received: (qmail 5577 invoked by uid 61); 25 Oct 2002 14:53:24 -0000 Message-Id: <20021025145324.5576.qmail@sources.redhat.com> Date: Fri, 25 Oct 2002 07:56:00 -0000 From: d95-bli@nada.kth.se Reply-To: d95-bli@nada.kth.se To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/8353: Segmentation fault at template instantiation X-SW-Source: 2002-10/txt/msg01003.txt.bz2 List-Id: >Number: 8353 >Category: c++ >Synopsis: Segmentation fault at template instantiation >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Fri Oct 25 07:56:00 PDT 2002 >Closed-Date: >Last-Modified: >Originator: d95-bli@nada.kth.se >Release: unknown-1.0 >Organization: >Environment: >Description: The attached code gives the following error when compiled with g++-3.2: exempel.cpp: In member function `void functor::operator()() [with T = P]': exempel.cpp:24: instantiated from here exempel.cpp:16: internal error: Segmentation fault If a type P is explicitly used instead of the template parameter, everything seems to work well. Note: The program uses an external library, the Boost Multi Array library. I have notfied the developers of that library as well. >How-To-Repeat: g++ g++bug.i If the parameter to the boost typedefs is not the template type T, but rather the type P directly, it seems to compile. >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="g++bug.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="g++bug.i" IyAxICJleGVtcGVsLmNwcCIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+Igoj IDEgImV4ZW1wZWwuY3BwIgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z dC9tdWx0aV9hcnJheS5ocHAiIDEgMwojIDIxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk ZS9ib29zdC9tdWx0aV9hcnJheS5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j bHVkZS9ib29zdC9tdWx0aV9hcnJheS9iYXNlLmhwcCIgMSAzCiMgMjEgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L2Jhc2UuaHBwIiAzCiMgMSAiL2hvbWUv Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvZXh0ZW50X3JhbmdlLmhw cCIgMSAzCiMgMTYgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2Fy cmF5L2V4dGVudF9yYW5nZS5ocHAiIDMKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1 ZGUvYysrLzMuMi91dGlsaXR5IiAxIDMKIyA2NSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNs dWRlL2MrKy8zLjIvdXRpbGl0eSIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVk ZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM0ICIv dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9i aXRzL2MrK2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2Mr Ky8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDEgMwojIDM5ICIvdXNy L2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRz L29zX2RlZmluZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOTEg Ii91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5o IiAxIDMKIyAyOTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzMjAgIi91c3IvaW5j bHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAz MjEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyA0MCAiL3Vzci9sb2NhbC92b2wvZ2Nj LzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgi IDIgMwojIDM1ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBj LWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAyIDMKIyA2NiAiL3Vzci9sb2NhbC92b2wvZ2Nj LzMuMi9pbmNsdWRlL2MrKy8zLjIvdXRpbGl0eSIgMiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2Nj LzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcmVsb3BzLmgiIDEgMwojIDc0ICIvdXNyL2xv Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9yZWxvcHMuaCIgMwpuYW1l c3BhY2Ugc3RkCnsKICBuYW1lc3BhY2UgcmVsX29wcwogIHsKIyA5MCAiL3Vzci9sb2NhbC92b2wv Z2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcmVsb3BzLmgiIDMKdGVtcGxhdGUgPGNs YXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfVHAmIF9feCwgY29uc3QgX1Rw JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQojIDEwMyAiL3Vzci9sb2NhbC92b2wv Z2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcmVsb3BzLmgiIDMKdGVtcGxhdGUgPGNs YXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm IF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KIyAxMTYgIi91c3IvbG9jYWwvdm9sL2djYy8z LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3JlbG9wcy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBf VHA+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195 KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQojIDEyOSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMu Mi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcmVsb3BzLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9U cD4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp IHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9CgogIH0KfQojIDY3ICIvdXNyL2xvY2FsL3ZvbC9n Y2MvMy4yL2luY2x1ZGUvYysrLzMuMi91dGlsaXR5IiAyIDMKIyAxICIvdXNyL2xvY2FsL3ZvbC9n Y2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9wYWlyLmgiIDEgMwojIDY0ICIvdXNyL2xv Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9wYWlyLmgiIDMKbmFtZXNw YWNlIHN0ZAp7CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpzdHJ1Y3QgcGFpciB7 CiAgdHlwZWRlZiBfVDEgZmlyc3RfdHlwZTsKICB0eXBlZGVmIF9UMiBzZWNvbmRfdHlwZTsKCiAg X1QxIGZpcnN0OwogIF9UMiBzZWNvbmQ7CgoKCgogIHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgp IHt9CgoKCgogIHBhaXIoY29uc3QgX1QxJiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9f YSksIHNlY29uZChfX2IpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CiAg cGFpcihjb25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNlY29u ZChfX3Auc2Vjb25kKSB7fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5s aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWly PF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA9PSBfX3kuZmlyc3QgJiYgX194 LnNlY29uZCA9PSBfX3kuc2Vjb25kOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1Qy PgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3Qg cGFpcjxfVDEsIF9UMj4mIF9feSkKewogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QgfHwK ICAgICAgICAgKCEoX195LmZpcnN0IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNl Y29uZCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9w ZXJhdG9yIT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4m IF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwg Y2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9f eCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCgp0 ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29u c3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJl dHVybiAhKF9feSA8IF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+Cmlu bGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFp cjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KIyAxNDAgIi91c3Iv bG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3BhaXIuaCIgMwp0ZW1w bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5saW5lIHBhaXI8X1QxLCBfVDI+IG1ha2Vf cGFpcihfVDEgX194LCBfVDIgX195KQoKCgp7CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDI+KF9feCwg X195KTsKfQoKfQojIDY4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi91 dGlsaXR5IiAyIDMKIyAxNyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVs dGlfYXJyYXkvZXh0ZW50X3JhbmdlLmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3Bh Y2UgZGV0YWlsIHsKbmFtZXNwYWNlIG11bHRpX2FycmF5IHsKCnRlbXBsYXRlIDx0eXBlbmFtZSBF eHRlbnQsIHR5cGVuYW1lIFNpemVUeXBlPgpjbGFzcyBleHRlbnRfcmFuZ2UgOiBwcml2YXRlIHN0 ZDo6cGFpcjxFeHRlbnQsRXh0ZW50PiB7CiAgdHlwZWRlZiBzdGQ6OnBhaXI8RXh0ZW50LEV4dGVu dD4gc3VwZXJfdHlwZTsKcHVibGljOgogIHR5cGVkZWYgRXh0ZW50IGluZGV4OwogIHR5cGVkZWYg U2l6ZVR5cGUgc2l6ZV90eXBlOwoKICBleHRlbnRfcmFuZ2UoaW5kZXggc3RhcnQsIGluZGV4IGZp bmlzaCkgOgogICAgc3VwZXJfdHlwZShzdGFydCxmaW5pc2gpIHsgfQoKICBleHRlbnRfcmFuZ2Uo aW5kZXggZmluaXNoKSA6CiAgICBzdXBlcl90eXBlKDAsZmluaXNoKSB7IH0KCiAgZXh0ZW50X3Jh bmdlKCkgOiBzdXBlcl90eXBlKDAsMCkgeyB9CgogIGluZGV4IHN0YXJ0KCkgY29uc3QgeyByZXR1 cm4gc3VwZXJfdHlwZTo6Zmlyc3Q7IH0KCiAgaW5kZXggZmluaXNoKCkgY29uc3QgeyByZXR1cm4g c3VwZXJfdHlwZTo6c2Vjb25kOyB9CgogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4g c3VwZXJfdHlwZTo6c2Vjb25kIC0gc3VwZXJfdHlwZTo6Zmlyc3Q7IH0KfTsKCn0KfQp9CiMgMjIg Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L2Jhc2UuaHBw IiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJh eS9leHRlbnRfZ2VuLmhwcCIgMSAzCiMgMTcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl L2Jvb3N0L211bHRpX2FycmF5L2V4dGVudF9nZW4uaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9k OTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvcmFuZ2VfbGlzdC5ocHAiIDEgMwojIDE5 ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS9yYW5nZV9s aXN0LmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2FycmF5 LmhwcCIgMSAzCiMgMjIgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2FycmF5 LmhwcCIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2NzdGRk ZWYiIDEgMwojIDQ3ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jc3Rk ZGVmIiAzCgojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE0NyAiL3Vzci9sb2NhbC92b2wv Z2NjLzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYu aCIgMwp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CiMgMjAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4y L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5 cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyA0OSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9p bmNsdWRlL2MrKy8zLjIvY3N0ZGRlZiIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OnB0 cmRpZmZfdDsKICB1c2luZyA6OnNpemVfdDsKfQojIDIzICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv aW5jbHVkZS9ib29zdC9hcnJheS5ocHAiIDIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIv aW5jbHVkZS9jKysvMy4yL3N0ZGV4Y2VwdCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvdm9sL2djYy8z LjIvaW5jbHVkZS9jKysvMy4yL3N0ZGV4Y2VwdCIgMwoKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2Mv My4yL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb24iIDEgMwojIDQwICIvdXNyL2xvY2FsL3ZvbC9n Y2MvMy4yL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb24iIDMKZXh0ZXJuICJDKysiIHsKCm5hbWVz cGFjZSBzdGQKewoKCgoKCgogIGNsYXNzIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBleGNl cHRpb24oKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3coKTsKCgog ICAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgogIGNs YXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJh ZF9leGNlcHRpb24oKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkg dGhyb3coKTsKICB9OwoKCiAgdHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwoK ICB0eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKCiAgdGVybWluYXRlX2hh bmRsZXIgc2V0X3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQg dGVybWluYXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAgdW5leHBlY3Rl ZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsKCgog IHZvaWQgdW5leHBlY3RlZCgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyA5OCAi L3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uIiAzCiAgYm9v bCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9CgpuYW1lc3BhY2UgX19nbnVfY3h4CnsK IyAxMTEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2V4Y2VwdGlvbiIg MwogIHZvaWQgX192ZXJib3NlX3Rlcm1pbmF0ZV9oYW5kbGVyICgpOwp9Cgp9CiMgNDUgIi91c3Iv bG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL3N0ZGV4Y2VwdCIgMiAzCiMgMSAiL3Vz ci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAxIDMKIyA0NCAiL3Vz ci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAzCgoKIyAxICIvdXNy L2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0cmluZ2Z3ZC5oIiAxIDMK IyA0MyAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJpbmdm d2QuaCIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBz dHJ1Y3QgY2hhcl90cmFpdHM7CgogIHRlbXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+ OwoKICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czx3Y2hhcl90PjsKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGFsbG9jYXRvcjsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAg ICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNp Y19zdHJpbmc7CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+IHN0cmluZzsKICB0eXBlZGVm IGJhc2ljX3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwp9CiMgNDcgIi91c3IvbG9jYWwvdm9sL2dj Yy8zLjIvaW5jbHVkZS9jKysvMy4yL3N0cmluZyIgMiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2Nj LzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9jaGFyX3RyYWl0cy5oIiAxIDMKIyA0NCAiL3Vzci9s b2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9jaGFyX3RyYWl0cy5oIiAzCgoj IDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2NzdHJpbmciIDEgMwoj IDQ4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jc3RyaW5nIiAzCgoK CiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3N0cmlu Zy5oIiAzCmV4dGVybiAiQyIgewoKCgoKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAi L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAq X19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19y ZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbW1v dmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rl c3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAg IGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqbWVt c2V0ICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBp bnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90 IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4g dm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAg ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gdm9pZCAq cmF3bWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9pZCAq X19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19k ZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRl cm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93 ICgpOwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAq c3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgc3Ry bmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24p CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBz dHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAo Y2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgojIDEgIi91 c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAz CnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAq X19sb2NhbGVzWzEzXTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwog IGNvbnN0IGludCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVy Owp9ICpfX2xvY2FsZV90OwojIDEwOSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgpleHRl cm4gaW50IF9fc3RyY29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19z MiwgX19sb2NhbGVfdCBfX2wpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgpleHRlcm4gc2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hh ciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxl X3QgX19sKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAq X19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4g Y2hhciAqc3RybmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDE1NSAiL3Vzci9pbmNsdWRl L3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQg X19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpz dHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIg Kl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpl eHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9f cmVqZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy biBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2Vw dCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFy ICpzdHJwYnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJz dHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0 cmNhc2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRs ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNo YXIgKnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2RlbGltKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hh ciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl c3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFy ICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7 CgoKCgoKCmV4dGVybiB2b2lkICptZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6 ZV90IF9faGF5c3RhY2tsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19u ZWVkbGUsIHNpemVfdCBfX25lZWRsZWxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBf X2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBf X3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICpf X3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19y ZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHN0 cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBz aXplX3QgX19tYXhsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgdGhyb3cgKCk7CgoKCmV4 dGVybiBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3Qg X19idWZsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAodm9pZCAqX19zLCBz aXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAq X19zcmMsIHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQg Ynplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiY21w IChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqaW5k ZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50 IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQg ZmZzIChpbnQgX19pKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpl eHRlcm4gaW50IGZmc2wgKGxvbmcgaW50IF9fbCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gaW50IGZmc2xsIChsb25nIGxvbmcgaW50 IF9fbGwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0 ZXJuIGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19z MikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50 IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6 ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpl eHRlcm4gaW50IF9fc3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hh ciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IF9fc3RybmNhc2Vj bXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAg KGNoYXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzdHJ2 ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFs IChpbnQgX19zaWcpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19y ZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJv dyAoKTsKZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIg Kl9fc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7 CmV4dGVybiBjaGFyICpzdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikg dGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgp OwoKCmV4dGVybiB2b2lkICptZW1mcm9iICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgp OwoKCgoKCgpleHRlcm4gY2hhciAqYmFzZW5hbWUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkg dGhyb3cgKCk7CiMgMzY0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKfQojIDUyICIvdXNyL2xv Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jc3RyaW5nIiAyIDMKIyA3NyAiL3Vzci9s b2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvY3N0cmluZyIgMwpuYW1lc3BhY2Ugc3Rk CnsKICB1c2luZyA6Om1lbWNweTsKICB1c2luZyA6Om1lbW1vdmU7CiAgdXNpbmcgOjpzdHJjcHk7 CiAgdXNpbmcgOjpzdHJuY3B5OwogIHVzaW5nIDo6c3RyY2F0OwogIHVzaW5nIDo6c3RybmNhdDsK ICB1c2luZyA6Om1lbWNtcDsKICB1c2luZyA6OnN0cmNtcDsKICB1c2luZyA6OnN0cmNvbGw7CiAg dXNpbmcgOjpzdHJuY21wOwogIHVzaW5nIDo6c3RyeGZybTsKICB1c2luZyA6OnN0cmNzcG47CiAg dXNpbmcgOjpzdHJzcG47CiAgdXNpbmcgOjpzdHJ0b2s7CiAgdXNpbmcgOjptZW1zZXQ7CiAgdXNp bmcgOjpzdHJlcnJvcjsKICB1c2luZyA6OnN0cmxlbjsKCiAgdXNpbmcgOjptZW1jaHI7CgogIGlu bGluZSB2b2lkKgogIG1lbWNocih2b2lkKiBfX3AsIGludCBfX2MsIHNpemVfdCBfX24pCiAgeyBy ZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9pZCo+KF9fcCksIF9fYywgX19uKTsgfQoK ICB1c2luZyA6OnN0cmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RyY2hyKGNoYXIqIF9fczEsIGlu dCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIq PihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnBicms7CgogIGlubGluZSBjaGFyKgogIHN0 cnBicmsoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1aWx0aW5f c3RycGJyayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcg OjpzdHJyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJyY2hyKGNoYXIqIF9fczEsIGludCBfX24p CiAgeyByZXR1cm4gX19idWlsdGluX3N0cnJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19z MSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJzdHI7CgogIGlubGluZSBjaGFyKgogIHN0cnN0cihj aGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJzdHIo Y29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9Cn0KIyA0NiAiL3Vzci9sb2Nh bC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9jaGFyX3RyYWl0cy5oIiAyIDMKIyAx ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Zwb3MuaCIgMSAz CiMgNDMgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnBvcy5o IiAzCgojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMt bGludXgtZ251L2JpdHMvYysraW8uaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIv aW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMwojIDEgIi91 c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2NzdGRpbyIgMSAzCiMgNDggIi91 c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2NzdGRpbyIgMwoKCgoKIyAxICIv dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9p bmNsdWRlL3N0ZGlvLmgiIDEgMwojIDM5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuICJDIiB7 CgoKCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDQgIi91c3IvbG9jYWwvdm9sL2djYy8z LjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkaW8uaCIgMiAz CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUv Yml0cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5j bHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VfY2hhcjsK dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9f dV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5zaW9uX18gdHlw ZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlw ZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBl cy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hh ciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYg dW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMy X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVk ZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYg dW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19x YWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVkZWYgX191X2ludCBfX3Vp ZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190Owp0 eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7CnR5cGVk ZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBp bnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVmIF9fdV9sb25nIF9fcmxp bV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRf dDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CgoK dHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBs b25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0eXBl ZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwoK dHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoK dHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVk ZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9f Ymxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVmIF9fcXVh ZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRl ZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNu dF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVh ZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxv bmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxh cl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19z b2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMK IyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpz dHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMg MjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJl YWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsK CgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsK CgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0 ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFy YW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJk c2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVf dCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0 cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2Fp dGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15 Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tl eV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21f Y291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1 Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBl ZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoK CnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRf cndsb2NrX3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9f cndfcmVhZGVyczsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNj ciBfX3J3X3JlYWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7 CiAgaW50IF9fcndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7 CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9 IHB0aHJlYWRfcndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9z cGlubG9ja190OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sg X19iYV9sb2NrOwogIGludCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3ByZXNlbnQ7CiAgX3B0 aHJlYWRfZGVzY3IgX19iYV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90OwoKCnR5cGVkZWYg c3RydWN0IHsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmllcmF0dHJfdDsKCgoKCgp0 eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKIyAxNDQgIi91c3IvaW5jbHVkZS9i aXRzL3R5cGVzLmgiIDIgMwojIDQ2ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDU0ICIvdXNyL2xv Y2FsL3ZvbC9nY2MvMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRl L3N0ZGlvLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKIyA2NCAiL3Vzci9sb2Nh bC92b2wvZ2NjLzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9z dGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9fRklMRTsKIyA3NCAiL3Vzci9sb2Nh bC92b2wvZ2NjLzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9z dGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMwojIDMyICIvdXNyL2luY2x1 ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiMgMTQgIi91 c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMy MSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCB3aW50X3Q7CiMgMTUg Ii91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCiMgMjQgIi91c3IvaW5jbHVkZS9fR19jb25m aWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRl L3djaGFyLmgiIDMKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRl L3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMKIyA1MSAi L3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDY3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwp0 eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193 Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CiMgMjUg Ii91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmZf dCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsKdHlwZWRlZiBzdHJ1 Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3M2 NF90OwojIDQ0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv Z2NvbnYuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9nY29udi5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3Iv bG9jYWwvdm9sL2djYy8zLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1 ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgMjkgIi91 c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMy ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKCgoKZW51bQp7CiAgX19HQ09OVl9PSyA9IDAs CiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09OVl9OT0RCLAogIF9fR0NPTlZfTk9NRU0sCgogIF9f R0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09OVl9GVUxMX09VVFBVVCwKICBfX0dDT05WX0lMTEVH QUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBMRVRFX0lOUFVULAoKICBfX0dDT05WX0lMTEVHQUxf REVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVSTkFMX0VSUk9SCn07CgoKCmVudW0KewogIF9fR0NP TlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dDT05WX0lHTk9SRV9FUlJPUlMgPSAweDAwMDIKfTsK CgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhOwpzdHJ1Y3Qg X19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhOwoKCgp0eXBl ZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1Y3QgX19n Y29udl9zdGVwX2RhdGEgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5z aWduZWQgY2hhciAqKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBzaXplX3QgKiwgaW50LCBpbnQpOwoKCnR5cGVk ZWYgaW50ICgqX19nY29udl9pbml0X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CnR5cGVk ZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CgoKCnR5 cGVkZWYgaW50ICgqX19nY29udl90cmFuc19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEg Kiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNp Z25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfY29u dGV4dF9mY3QpICh2b2lkICosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqLCB1 bnNpZ25lZCBjaGFyICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19xdWVyeV9mY3Qp IChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFyICoqKiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJh bnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBjaGFyICopOwp0eXBlZGVmIHZvaWQgKCpfX2dj b252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YQp7 CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNfZmN0OwogIF9fZ2NvbnZfdHJhbnNfY29udGV4 dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBfX2djb252X3RyYW5zX2VuZF9mY3QgX190cmFu c19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpf X25leHQ7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXAKewogIHN0cnVjdCBfX2djb252X2xvYWRl ZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIF9fY29uc3QgY2hhciAqX19tb2RuYW1lOwoKICBp bnQgX19jb3VudGVyOwoKICBjaGFyICpfX2Zyb21fbmFtZTsKICBjaGFyICpfX3RvX25hbWU7Cgog IF9fZ2NvbnZfZmN0IF9fZmN0OwogIF9fZ2NvbnZfaW5pdF9mY3QgX19pbml0X2ZjdDsKICBfX2dj b252X2VuZF9mY3QgX19lbmRfZmN0OwoKCgogIGludCBfX21pbl9uZWVkZWRfZnJvbTsKICBpbnQg X19tYXhfbmVlZGVkX2Zyb207CiAgaW50IF9fbWluX25lZWRlZF90bzsKICBpbnQgX19tYXhfbmVl ZGVkX3RvOwoKCiAgaW50IF9fc3RhdGVmdWw7CgogIHZvaWQgKl9fZGF0YTsKfTsKCgoKc3RydWN0 IF9fZ2NvbnZfc3RlcF9kYXRhCnsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZjsKICB1bnNpZ25l ZCBjaGFyICpfX291dGJ1ZmVuZDsKCgoKICBpbnQgX19mbGFnczsKCgoKICBpbnQgX19pbnZvY2F0 aW9uX2NvdW50ZXI7CgoKCiAgaW50IF9faW50ZXJuYWxfdXNlOwoKICBfX21ic3RhdGVfdCAqX19z dGF0ZXA7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKCgoKICBzdHJ1Y3QgX19nY29udl90cmFuc19k YXRhICpfX3RyYW5zOwp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfX2djb252X2luZm8KewogIHNpemVf dCBfX25zdGVwczsKICBzdHJ1Y3QgX19nY29udl9zdGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5zaW9u X18gc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YSBbXTsKfSAqX19nY29udl90OwojIDQ1 ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwp0eXBlZGVmIHVuaW9uCnsKICBzdHJ1Y3Qg X19nY29udl9pbmZvIF9fY2Q7CiAgc3RydWN0CiAgewogICAgc3RydWN0IF9fZ2NvbnZfaW5mbyBf X2NkOwogICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YTsKICB9IF9fY29tYmluZWQ7 Cn0gX0dfaWNvbnZfdDsKCnR5cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9f bW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAo KF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9f YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBf R191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKIyAzMyAiL3Vz ci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDUzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEg Ii91c3IvbG9jYWwvdm9sL2djYy8zLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4y L2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQzICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYg X19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgNTQgIi91c3IvaW5jbHVkZS9saWJp by5oIiAyIDMKIyAxNjAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fanVtcF90 OyBzdHJ1Y3QgX0lPX0ZJTEU7CiMgMTcwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVm IHZvaWQgX0lPX2xvY2tfdDsKCgoKCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19t YXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CgoKCiAgaW50IF9wb3M7CiMg MTkzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7 CiAgX19jb2RlY3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwK ICBfX2NvZGVjdnRfbm9jb252Cn07CgoKCgpzdHJ1Y3QgX0lPX2NvZGVjdnQKewogIHZvaWQgKCpf X2NvZGVjdnRfZGVzdHIpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgZW51bSBfX2NvZGVjdnRf cmVzdWx0ICgqX19jb2RlY3Z0X2RvX291dCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICos CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFy X3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg d2NoYXJfdCAqKiwgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICosIGNoYXIgKiopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29k ZWN2dF9kb191bnNoaWZ0KSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLCBjaGFyICosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNo YXIgKiopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb19pbikgKHN0cnVj dCBfSU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fbWJzdGF0ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKiwgd2NoYXJfdCAqLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKiwgd2NoYXJfdCAqKik7 CiAgaW50ICgqX19jb2RlY3Z0X2RvX2VuY29kaW5nKSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwog IGludCAoKl9fY29kZWN2dF9kb19hbHdheXNfbm9jb252KSAoc3RydWN0IF9JT19jb2RlY3Z0ICop OwogIGludCAoKl9fY29kZWN2dF9kb19sZW5ndGgpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwgX19t YnN0YXRlX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBj b25zdCBjaGFyICosIHNpemVfdCk7CiAgaW50ICgqX19jb2RlY3Z0X2RvX21heF9sZW5ndGgpIChz dHJ1Y3QgX0lPX2NvZGVjdnQgKik7CgogIF9HX2ljb252X3QgX19jZF9pbjsKICBfR19pY29udl90 IF9fY2Rfb3V0Owp9OwoKCnN0cnVjdCBfSU9fd2lkZV9kYXRhCnsKICB3Y2hhcl90ICpfSU9fcmVh ZF9wdHI7CiAgd2NoYXJfdCAqX0lPX3JlYWRfZW5kOwogIHdjaGFyX3QgKl9JT19yZWFkX2Jhc2U7 CiAgd2NoYXJfdCAqX0lPX3dyaXRlX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX3B0cjsKICB3 Y2hhcl90ICpfSU9fd3JpdGVfZW5kOwogIHdjaGFyX3QgKl9JT19idWZfYmFzZTsKICB3Y2hhcl90 ICpfSU9fYnVmX2VuZDsKCiAgd2NoYXJfdCAqX0lPX3NhdmVfYmFzZTsKICB3Y2hhcl90ICpfSU9f YmFja3VwX2Jhc2U7CgogIHdjaGFyX3QgKl9JT19zYXZlX2VuZDsKCiAgX19tYnN0YXRlX3QgX0lP X3N0YXRlOwogIF9fbWJzdGF0ZV90IF9JT19sYXN0X3N0YXRlOwogIHN0cnVjdCBfSU9fY29kZWN2 dCBfY29kZWN2dDsKCiAgd2NoYXJfdCBfc2hvcnRidWZbMV07CgogIHN0cnVjdCBfSU9fanVtcF90 ICpfd2lkZV92dGFibGU7Cn07CgoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoK ICBjaGFyKiBfSU9fcmVhZF9wdHI7CiAgY2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9JT19y ZWFkX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0cjsK ICBjaGFyKiBfSU9fd3JpdGVfZW5kOwogIGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBfSU9f YnVmX2VuZDsKCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7 CiAgY2hhciAqX0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7Cgog IHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7 CiAgX19vZmZfdCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsK ICBzaWduZWQgY2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoKICBf SU9fbG9ja190ICpfbG9jazsKIyAzMDUgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiAgX19vZmY2 NF90IF9vZmZzZXQ7CgoKICBzdHJ1Y3QgX0lPX2NvZGVjdnQgKl9jb2RlY3Z0OwogIHN0cnVjdCBf SU9fd2lkZV9kYXRhICpfd2lkZV9kYXRhOwoKCgoKICBpbnQgX21vZGU7CgogIGNoYXIgX3VudXNl ZDJbMTUgKiBzaXplb2YgKGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKCgoKc3Ry dWN0IF9JT19GSUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9z dGRpbl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVy biBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CiMgMzQ0ICIvdXNyL2luY2x1 ZGUvbGliaW8uaCIgMwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29v a2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVkZWYgX19zc2l6 ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCgoKCgoKCnR5cGVk ZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19wb3MsIGlu dCBfX3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2llKTsKCgoK CnR5cGVkZWYgX19pb19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19p b193cml0ZV9mbiBjb29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3NlZWtfZm4g Y29va2llX3NlZWtfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNvb2tpZV9jbG9z ZV9mdW5jdGlvbl90OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJlYWQ7CiAg X19pb193cml0ZV9mbiAqd3JpdGU7CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9faW9fY2xvc2Vf Zm4gKmNsb3NlOwp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lPX2Nvb2tp ZV9pb19mdW5jdGlvbnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3QgX0lPX2Nvb2tp ZV9maWxlOwoKCmV4dGVybiB2b2lkIF9JT19jb29raWVfaW5pdCAoc3RydWN0IF9JT19jb29raWVf ZmlsZSAqX19jZmlsZSwgaW50IF9fcmVhZF93cml0ZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkICpfX2Nvb2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2Zucyk7CgoK CgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJv dyAoKTsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGlu dCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9f d3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dWZsb3cg KF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChfSU9fRklM RSAqLCB3aW50X3QpIHRocm93ICgpOwojIDQyNiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0 ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9J T19wdXRjIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lP X2Zlb2YgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChf SU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9J T19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChf SU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklM RSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0 aHJvdyAoKTsKIyA0NTYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zm c2NhbmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCiAg ICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRo cm93ICgpOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNv bnN0IGNoYXIgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFf bGlzdCkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxFICosIGlu dCwgX19zc2l6ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4gKF9JT19GSUxF ICosIHZvaWQgKiwgc2l6ZV90KSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtv ZmYgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50LCBpbnQpIHRocm93ICgpOwpleHRlcm4gX19v ZmY2NF90IF9JT19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgdGhyb3cgKCk7 CgpleHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7 CgoKZXh0ZXJuIHdpbnRfdCBfSU9fZ2V0d2MgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0 ZXJuIHdpbnRfdCBfSU9fcHV0d2MgKHdjaGFyX3QgX193YywgX0lPX0ZJTEUgKl9fZnApIHRocm93 ICgpOwpleHRlcm4gaW50IF9JT19md2lkZSAoX0lPX0ZJTEUgKl9fZnAsIGludCBfX21vZGUpIHRo cm93ICgpOwojIDUwNSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fdmZ3 c2NhbmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0 KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fdmZ3cHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmlj dCwgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBf X2dudWNfdmFfbGlzdCkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3dwYWRuIChfSU9f RklMRSAqLCB3aW50X3QsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIF9JT19mcmVl X3diYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CgoKCn0KIyA3NSAiL3Vzci9sb2Nh bC92b2wvZ2NjLzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9z dGRpby5oIiAyIDMKCgoKCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgX19ub3RfdmFfbGlzdF9fOwoj IDg5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBfR19mcG9zX3QgZnBvc190OwoKCgoKdHlw ZWRlZiBfR19mcG9zNjRfdCBmcG9zNjRfdDsKIyAxMzggIi91c3IvbG9jYWwvdm9sL2djYy8zLjIv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAxMzkgIi91c3IvbG9jYWwvdm9s L2djYy8zLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkaW8u aCIgMiAzCgoKCmV4dGVybiBGSUxFICpzdGRpbjsKZXh0ZXJuIEZJTEUgKnN0ZG91dDsKZXh0ZXJu IEZJTEUgKnN0ZGVycjsKIyAxNTMgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IHJlbW92 ZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcmVuYW1l IChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSB0aHJvdyAoKTsKCgoK CmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKSB0aHJvdyAoKTsKIyAxNjkgIi91c3IvbG9jYWwv dm9sL2djYy8zLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3Rk aW8uaCIgMwpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4g Y2hhciAqdG1wbmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5h bV9yIChjaGFyICpfX3MpIHRocm93ICgpOwojIDE4OSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVy biBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4 KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4g aW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZmx1c2gg KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQg KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlYWxsICh2b2lk KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CiMgMjMzICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4y L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0 ZXJuIEZJTEUgKmZvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAog ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRo cm93ICgpOwpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29u c3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuY29va2ll ICh2b2lkICpfX3Jlc3RyaWN0IF9fbWFnaWNfY29va2llLAogICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAg ICAgICAgIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jcykgdGhyb3cgKCk7CgoK ZXh0ZXJuIEZJTEUgKmZtZW1vcGVuICh2b2lkICpfX3MsIHNpemVfdCBfX2xlbiwgX19jb25zdCBj aGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICpvcGVuX21lbXN0cmVhbSAo Y2hhciAqKl9fcmVzdHJpY3QgX19idWZsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90ICpfX3Jlc3RyaWN0IF9fc2l6ZWxvYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQg c2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry ZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgIGludCBfX21v ZGVzLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZmZlciAoRklM RSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzZXRs aW5lYnVmIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwcmludGYg KEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBwcmlu dGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4 dGVybiBpbnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9f YXJnKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKTsKCmV4dGVy biBpbnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJn KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3Ms IHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9y bWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAq X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAg ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDAp KSk7CgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLAogICAgICAgICAgICAgICAgICAgICAgX19nbnVj X3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g KF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVz dHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g KF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKipfX3Jlc3Ry aWN0IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w cmludGZfXywgMiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFf bGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w cmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKCgpleHRlcm4gaW50IGZzY2FuZiAo RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2NhbmYg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVy biBpbnQgc3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAg ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoK CgpleHRlcm4gaW50IHZmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3Qg X19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZf XywgMiwgMCkpKTsKCgpleHRlcm4gaW50IHZzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAxLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNzY2Fu ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7 CgoKCgpleHRlcm4gaW50IGZnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBp bnQgZ2V0YyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0Y2hhciAo dm9pZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9f c3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKZXh0ZXJuIGludCBwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBwdXRjaGFyIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBp bnQgZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBpbnQgcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwpleHRlcm4gaW50IHB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpIHRocm93ICgpOwoKCgoK CmV4dGVybiBpbnQgZ2V0dyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cHV0dyAoaW50IF9fdywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIg KmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBf X3N0cmVhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzX3VubG9ja2VkIChj aGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpn ZXRzIChjaGFyICpfX3MpIHRocm93ICgpOwojIDQzNyAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVy biBfX3NzaXplX3QgX19nZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9f ZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmlj dCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgZ2V0ZGVsaW0gKGNoYXIgKipf X3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg Kl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fc3Np emVfdCBnZXRsaW5lIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g aW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZwdXRzX3VubG9ja2VkIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICBG SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdXRzIChf X2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19j LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgZnJlYWQgKHZvaWQg Kl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHNp emVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6 ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19z KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0 cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBz aXplX3QgZndyaXRlX3VubG9ja2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNp emVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBG SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnNlZWsg KEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsK CmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJu IHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNTAwICIvdXNyL2xvY2Fs L3ZvbC9nY2MvMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0 ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vla28gKEZJTEUgKl9fc3RyZWFtLCBfX29mZl90IF9fb2Zm LCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmX3QgZnRlbGxvIChGSUxFICpf X3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklMRSAqX19yZXN0cmlj dCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgpOwoKZXh0 ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSB0 aHJvdyAoKTsKIyA1MzQgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbzY0IChG SUxFICpfX3N0cmVhbSwgX19vZmY2NF90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwpl eHRlcm4gX19vZmY2NF90IGZ0ZWxsbzY0IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVy biBpbnQgZmdldHBvczY0IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zNjRfdCAqX19y ZXN0cmljdCBfX3BvcykKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGludCBmc2V0cG9zNjQgKEZJTEUg Kl9fc3RyZWFtLCBfX2NvbnN0IGZwb3M2NF90ICpfX3BvcykgdGhyb3cgKCk7CgoKCmV4dGVybiB2 b2lkIGNsZWFyZXJyIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlb2Yg KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVycm9yIChGSUxFICpfX3N0 cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxFICpf X3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJl YW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0p IHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcGVycm9yIChfX2NvbnN0IGNoYXIgKl9fcykgdGhy b3cgKCk7CgoKCgpleHRlcm4gaW50IHN5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2Nv bnN0IHN5c19lcnJsaXN0W107CgoKZXh0ZXJuIGludCBfc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0 IGNoYXIgKl9fY29uc3QgX3N5c19lcnJsaXN0W107CgoKCgoKZXh0ZXJuIGludCBmaWxlbm8gKEZJ TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25z dCBjaGFyICpfX2NvbW1hbmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBwY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hh ciAqY3Rlcm1pZCAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3VzZXJp ZCAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCnN0cnVjdCBvYnN0YWNrOwoKCmV4dGVybiBpbnQg b2JzdGFja19wcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0 LCAuLi4pIHRocm93ICgpOwpleHRlcm4gaW50IG9ic3RhY2tfdnByaW50ZiAoc3RydWN0IG9ic3Rh Y2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19nbnVjX3ZhX2xpc3QgX19hcmdzKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB2b2lkIGZs b2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZ0cnlsb2Nr ZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxl IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNjQ0ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4y L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKfQoj IDUzICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8iIDIgMwoj IDk3ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8iIDMKbmFt ZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpGSUxFOwogIHVzaW5nIDo6ZnBvc190OwoKICB1c2luZyA6 OmNsZWFyZXJyOwogIHVzaW5nIDo6ZmNsb3NlOwogIHVzaW5nIDo6ZmVvZjsKICB1c2luZyA6OmZl cnJvcjsKICB1c2luZyA6OmZmbHVzaDsKICB1c2luZyA6OmZnZXRjOwogIHVzaW5nIDo6ZmdldHBv czsKICB1c2luZyA6OmZnZXRzOwogIHVzaW5nIDo6Zm9wZW47CiAgdXNpbmcgOjpmcHJpbnRmOwog IHVzaW5nIDo6ZnB1dGM7CiAgdXNpbmcgOjpmcHV0czsKICB1c2luZyA6OmZyZWFkOwogIHVzaW5n IDo6ZnJlb3BlbjsKICB1c2luZyA6OmZzY2FuZjsKICB1c2luZyA6OmZzZWVrOwogIHVzaW5nIDo6 ZnNldHBvczsKICB1c2luZyA6OmZ0ZWxsOwogIHVzaW5nIDo6ZndyaXRlOwogIHVzaW5nIDo6Z2V0 YzsKICB1c2luZyA6OmdldGNoYXI7CiAgdXNpbmcgOjpnZXRzOwogIHVzaW5nIDo6cGVycm9yOwog IHVzaW5nIDo6cHJpbnRmOwogIHVzaW5nIDo6cHV0YzsKICB1c2luZyA6OnB1dGNoYXI7CiAgdXNp bmcgOjpwdXRzOwogIHVzaW5nIDo6cmVtb3ZlOwogIHVzaW5nIDo6cmVuYW1lOwogIHVzaW5nIDo6 cmV3aW5kOwogIHVzaW5nIDo6c2NhbmY7CiAgdXNpbmcgOjpzZXRidWY7CiAgdXNpbmcgOjpzZXR2 YnVmOwogIHVzaW5nIDo6c3ByaW50ZjsKICB1c2luZyA6OnNzY2FuZjsKICB1c2luZyA6OnRtcGZp bGU7CiAgdXNpbmcgOjp0bXBuYW07CiAgdXNpbmcgOjp1bmdldGM7CiAgdXNpbmcgOjp2ZnByaW50 ZjsKICB1c2luZyA6OnZwcmludGY7CiAgdXNpbmcgOjp2c3ByaW50ZjsKfQojIDE1MyAiL3Vzci9s b2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvY3N0ZGlvIiAzCm5hbWVzcGFjZSBfX2du dV9jeHgKewogIHVzaW5nIDo6c25wcmludGY7CiAgdXNpbmcgOjp2ZnNjYW5mOwogIHVzaW5nIDo6 dnNjYW5mOwogIHVzaW5nIDo6dnNucHJpbnRmOwogIHVzaW5nIDo6dnNzY2FuZjsKfQoKbmFtZXNw YWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpzbnByaW50ZjsKICB1c2luZyBfX2dudV9jeHg6 OnZmc2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2 c25wcmludGY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c3NjYW5mOwp9CiMgMzYgIi91c3IvbG9jYWwv dm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8u aCIgMiAzCgojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYt cGMtbGludXgtZ251L2JpdHMvZ3Roci5oIiAxIDMKIyA5OCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMu Mi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLmgiIDMKIyAxICIv dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9i aXRzL2d0aHItZGVmYXVsdC5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNs dWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMwojIDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvc2No ZWQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDEwNiAiL3Vzci9pbmNsdWRl L3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBs b25nIGludCB0dl9uc2VjOwogIH07CiMgMzAgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgoj IDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYml0 cy9zY2hlZC5oIiAzCnN0cnVjdCBzY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9y aXR5OwogIH07CgpleHRlcm4gIkMiIHsKCgoKZXh0ZXJuIGludCBjbG9uZSAoaW50ICgqX19mbikg KHZvaWQgKl9fYXJnKSwgdm9pZCAqX19jaGlsZF9zdGFjaywKICAgICAgICAgICAgICAgICAgaW50 IF9fZmxhZ3MsIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKCgp9CiMgMzMgIi91c3IvaW5jbHVkZS9z Y2hlZC5oIiAyIDMKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0g KF9fcGlkX3QgX19waWQsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQogICAg IHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIHN0 cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9z ZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dldHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCkgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF95aWVsZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQgX19hbGdvcml0aG0pIHRocm93ICgpOwoK CmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50IF9fYWxnb3JpdGhtKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19waWRfdCBfX3BpZCwg c3RydWN0IHRpbWVzcGVjICpfX3QpIHRocm93ICgpOwoKfQojIDIxICIvdXNyL2luY2x1ZGUvcHRo cmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAzMCAiL3Vzci9pbmNs dWRlL3RpbWUuaCIgMwpleHRlcm4gIkMiIHsKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2Nj LzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIg MSAzCiMgMzkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9i aXRzL3RpbWUuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwojIDU5ICIvdXNy L2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CiMgNzAgIi91c3Iv aW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CiMgODIgIi91c3IvaW5j bHVkZS90aW1lLmgiIDMKdHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CiMgOTQgIi91c3Iv aW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKIyAxMTggIi91c3Iv aW5jbHVkZS90aW1lLmgiIDMKc3RydWN0IHRtCnsKICBpbnQgdG1fc2VjOwogIGludCB0bV9taW47 CiAgaW50IHRtX2hvdXI7CiAgaW50IHRtX21kYXk7CiAgaW50IHRtX21vbjsKICBpbnQgdG1feWVh cjsKICBpbnQgdG1fd2RheTsKICBpbnQgdG1feWRheTsKICBpbnQgdG1faXNkc3Q7CgoKICBsb25n IGludCB0bV9nbXRvZmY7CiAgX19jb25zdCBjaGFyICp0bV96b25lOwoKCgoKfTsKCgoKCnN0cnVj dCBpdGltZXJzcGVjCiAgewogICAgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOwogICAgc3Ry dWN0IHRpbWVzcGVjIGl0X3ZhbHVlOwogIH07CgoKc3RydWN0IHNpZ2V2ZW50OwoKCgoKCnR5cGVk ZWYgX19waWRfdCBwaWRfdDsKCgoKCgoKCmV4dGVybiBjbG9ja190IGNsb2NrICh2b2lkKSB0aHJv dyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoK ZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGltZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUwKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gdGltZV90 IG1rdGltZSAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0 cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJwdGltZSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fcywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m bXQsIHN0cnVjdCB0bSAqX190cCkKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc3RydWN0IHRt ICpnbXRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0 cnVjdCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoK CgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3Qg X190aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmlj dCBfX3RwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IgKF9fY29u c3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hh ciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBj aGFyICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKCgpleHRl cm4gY2hhciAqYXNjdGltZV9yIChfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAog ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsK CgpleHRlcm4gY2hhciAqY3RpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1l ciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgp OwoKCgoKZXh0ZXJuIGNoYXIgKl9fdHpuYW1lWzJdOwpleHRlcm4gaW50IF9fZGF5bGlnaHQ7CmV4 dGVybiBsb25nIGludCBfX3RpbWV6b25lOwoKCgoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgoK ZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0 OwpleHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25z dCB0aW1lX3QgKl9fd2hlbikgdGhyb3cgKCk7CiMgMjcxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz CmV4dGVybiB0aW1lX3QgdGltZWdtIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVy biB0aW1lX3QgdGltZWxvY2FsIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBp bnQgZHlzaXplIChpbnQgX195ZWFyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKCgoKZXh0ZXJuIGludCBuYW5vc2xlZXAgKF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpf X3JlcXVlc3RlZF90aW1lLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpf X3JlbWFpbmluZykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0cmVzIChjbG9ja2lk X3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3JlcykgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBjbG9ja19nZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVj ICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX3NldHRpbWUgKGNsb2NraWRfdCBf X2Nsb2NrX2lkLCBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX190cCkKICAgICB0aHJvdyAoKTsK CgoKZXh0ZXJuIGludCBjbG9ja19uYW5vc2xlZXAgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBpbnQg X19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVz cGVjICpfX3JlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAq X19yZW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0Y3B1Y2xvY2tpZCAocGlkX3Qg X19waWQsIGNsb2NraWRfdCAqX19jbG9ja19pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRp bWVyX2NyZWF0ZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsCiAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3Qgc2lnZXZlbnQgKl9fcmVzdHJpY3QgX19ldnAsCiAgICAgICAgICAgICAgICAgICAg ICAgICB0aW1lcl90ICpfX3Jlc3RyaWN0IF9fdGltZXJpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCB0aW1lcl9kZWxldGUgKHRpbWVyX3QgX190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHRpbWVyX3NldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBpbnQgX19mbGFncywKICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9f dmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVz dHJpY3QgX19vdmFsdWUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0dGltZSAodGlt ZXJfdCBfX3RpbWVyaWQsIHN0cnVjdCBpdGltZXJzcGVjICpfX3ZhbHVlKQogICAgIHRocm93ICgp OwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1biAodGltZXJfdCBfX3RpbWVyaWQpIHRocm93 ICgpOwojIDM0MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfZXJy OwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdldGRhdGUgKF9fY29uc3QgY2hhciAqX19zdHJpbmcp IHRocm93ICgpOwojIDM1NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRh dGVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RyaW5nLAogICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fcmVzYnVmcCkgdGhyb3cgKCk7CgoKCn0KIyAy MiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc2lnbmFs LmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKZXh0ZXJuICJDIiB7CgojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMv c2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVj dAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVu c2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzQgIi91c3IvaW5jbHVkZS9z aWduYWwuaCIgMiAzCiMgNDggIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwp0eXBlZGVmIF9fc2ln c2V0X3Qgc2lnc2V0X3Q7CiMgMzcxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKfQojIDI1ICIv dXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFk dHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL2luaXRzcGluLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5o IiAyIDMKCgpleHRlcm4gIkMiIHsKIyA1OSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwplbnVt CnsKICBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSwKCiAgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQK Cn07CgplbnVtCnsKICBQVEhSRUFEX0lOSEVSSVRfU0NIRUQsCgogIFBUSFJFQURfRVhQTElDSVRf U0NIRUQKCn07CgplbnVtCnsKICBQVEhSRUFEX1NDT1BFX1NZU1RFTSwKCiAgUFRIUkVBRF9TQ09Q RV9QUk9DRVNTCgp9OwoKZW51bQp7CiAgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQVEhSRUFE X01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAsCiAgUFRI UkVBRF9NVVRFWF9BREFQVElWRV9OUAoKICAsCiAgUFRIUkVBRF9NVVRFWF9OT1JNQUwgPSBQVEhS RUFEX01VVEVYX1RJTUVEX05QLAogIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFID0gUFRIUkVBRF9N VVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLID0gUFRIUkVBRF9N VVRFWF9FUlJPUkNIRUNLX05QLAogIFBUSFJFQURfTVVURVhfREVGQVVMVCA9IFBUSFJFQURfTVVU RVhfTk9STUFMCgoKCiAgLCBQVEhSRUFEX01VVEVYX0ZBU1RfTlAgPSBQVEhSRUFEX01VVEVYX0FE QVBUSVZFX05QCgp9OwoKZW51bQp7CiAgUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCgogIFBUSFJF QURfUFJPQ0VTU19TSEFSRUQKCn07CgoKZW51bQp7CiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1JF QURFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05QLAogIFBUSFJFQURfUldM T0NLX1BSRUZFUl9XUklURVJfTk9OUkVDVVJTSVZFX05QLAogIFBUSFJFQURfUldMT0NLX0RFRkFV TFRfTlAgPSBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05QCn07CiMgMTMxICIvdXNyL2lu Y2x1ZGUvcHRocmVhZC5oIiAzCnN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlcgp7CiAgdm9p ZCAoKl9fcm91dGluZSkgKHZvaWQgKik7CiAgdm9pZCAqX19hcmc7CiAgaW50IF9fY2FuY2VsdHlw ZTsKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fcHJldjsKfTsKCgoKZW51bQp7 CiAgUFRIUkVBRF9DQU5DRUxfRU5BQkxFLAoKICBQVEhSRUFEX0NBTkNFTF9ESVNBQkxFCgp9Owpl bnVtCnsKICBQVEhSRUFEX0NBTkNFTF9ERUZFUlJFRCwKCiAgUFRIUkVBRF9DQU5DRUxfQVNZTkNI Uk9OT1VTCgp9OwojIDE2MyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0 aHJlYWRfY3JlYXRlIChwdGhyZWFkX3QgKl9fcmVzdHJpY3QgX190aHJlYWQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICooKl9fc3RhcnRfcm91dGluZSkgKHZv aWQgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fcmVzdHJpY3QgX19hcmcp IHRocm93ICgpOwoKCmV4dGVybiBwdGhyZWFkX3QgcHRocmVhZF9zZWxmICh2b2lkKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfZXF1YWwgKHB0aHJlYWRfdCBfX3RocmVhZDEsIHB0aHJl YWRfdCBfX3RocmVhZDIpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHB0aHJlYWRfZXhpdCAodm9p ZCAqX19yZXR2YWwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp OwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2pvaW4gKHB0aHJlYWRfdCBfX3RoLCB2b2lkICoqX190 aHJlYWRfcmV0dXJuKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfZGV0YWNoIChw dGhyZWFkX3QgX190aCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9p bml0IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl YWRfYXR0cl9kZXN0cm95IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2RldGFjaHN0 YXRlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRkZXRhY2hzdGF0ZSAo X19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50ICpfX2RldGFjaHN0YXRlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBhcmFtIChwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBf X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3Ry dWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fcGFyYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dl dHNjaGVkcGFyYW0gKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QgX19wYXJh bSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGlj eSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fcG9saWN5KQogICAgIHRocm93ICgpOwoK CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcG9saWN5IChfX2NvbnN0IHB0aHJlYWRf YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBfX3BvbGljeSkKICAgICB0aHJvdyAoKTsKCgpleHRl cm4gaW50IHB0aHJlYWRfYXR0cl9zZXRpbmhlcml0c2NoZWQgKHB0aHJlYWRfYXR0cl90ICpfX2F0 dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9faW5oZXJp dCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0aW5oZXJpdHNjaGVkIChf X2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19pbmhlcml0KQogICAg IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjb3BlIChwdGhyZWFkX2F0 dHJfdCAqX19hdHRyLCBpbnQgX19zY29wZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0 aHJlYWRfYXR0cl9nZXRzY29wZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBf X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3Qg X19zY29wZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6 ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgX19ndWFyZHNpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh ZF9hdHRyX2dldGd1YXJkc2l6ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgc2l6ZV90ICpfX3Jl c3RyaWN0IF9fZ3VhcmRzaXplKQogICAgIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJl YWRfYXR0cl9zZXRzdGFja2FkZHIgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19zdGFja2FkZHIpIHRocm93ICgpOwoK CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkciAoX19jb25zdCBwdGhyZWFkX2F0 dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f YXR0ciwgdm9pZCAqKl9fcmVzdHJpY3QgX19zdGFja2FkZHIpCiAgICAgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2sgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIs IHZvaWQgKl9fc3RhY2thZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRz dGFjayAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19yZXN0cmljdCBfX3N0YWNrYWRkciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX3N0 YWNrc2l6ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2tz aXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX3N0YWNrc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy ZWFkX2F0dHJfZ2V0c3RhY2tzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBzaXplX3QgKl9f cmVzdHJpY3QgX19zdGFja3NpemUpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVh ZF9nZXRhdHRyX25wIChwdGhyZWFkX3QgX190aCwgcHRocmVhZF9hdHRyX3QgKl9fYXR0cikgdGhy b3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtIChwdGhyZWFkX3Qg X190YXJnZXRfdGhyZWFkLCBpbnQgX19wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAgICB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0 X3RocmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj dCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2hl ZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50 IHB0aHJlYWRfZ2V0Y29uY3VycmVuY3kgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo cmVhZF9zZXRjb25jdXJyZW5jeSAoaW50IF9fbGV2ZWwpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu IGludCBwdGhyZWFkX3lpZWxkICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhy ZWFkX211dGV4X2luaXQgKHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpf X3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX211dGV4X2F0dHIpIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95IChwdGhyZWFkX211dGV4 X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90cnlsb2Nr IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh ZF9tdXRleF9sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCgpleHRl cm4gaW50IHB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrIChwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJp Y3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBz dHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3Vu bG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGlu dCBwdGhyZWFkX211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSAocHRocmVhZF9t dXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhh dHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJl ZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXRwc2hhcmVkIChw dGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhy ZWFkX211dGV4YXR0cl9zZXR0eXBlIChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsIGludCBf X2tpbmQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXR0 eXBlIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBfX2tpbmQp IHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfaW5pdCAocHRocmVhZF9j b25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbmRfYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2Nv bmRfZGVzdHJveSAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBwdGhyZWFkX2NvbmRfc2lnbmFsIChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9icm9hZGNhc3QgKHB0aHJlYWRfY29uZF90ICpfX2Nv bmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF93YWl0IChwdGhyZWFkX2Nv bmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0 aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g aW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9f Y29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3Qg Kl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRf Y29uZGF0dHJfaW5pdCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95IChwdGhyZWFkX2NvbmRhdHRyX3QgKl9f YXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2dldHBzaGFyZWQg KF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfY29uZGF0dHJfdCAq X19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNo YXJlZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2luaXQgKHB0 aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19yZXN0cmljdAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBwdGhyZWFkX3J3bG9ja19kZXN0cm95IChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19yZGxvY2sgKHB0aHJlYWRfcndsb2Nr X3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXJk bG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgpleHRlcm4gaW50 IHB0aHJlYWRfcndsb2NrX3RpbWVkcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3RyaWN0 IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfcnds b2NrX3dybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVy biBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9j aykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdGltZWR3cmxvY2sgKHB0 aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdW5sb2NrIChwdGhyZWFkX3J3bG9ja190ICpf X3J3bG9jaykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfaW5p dCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw dGhyZWFkX3J3bG9ja2F0dHJfZGVzdHJveSAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0cikg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0cHNoYXJlZCAoX19j b25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX3J3bG9ja2F0 dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9n ZXRraW5kX25wIChfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19wcmVmKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9zZXRraW5kX25wIChwdGhyZWFkX3J3bG9j a2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19wcmVmKSB0aHJvdyAoKTsKIyA1MDkgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMK ZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5faW5pdCAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2ss IGludCBfX3BzaGFyZWQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5f ZGVzdHJveSAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBp bnQgcHRocmVhZF9zcGluX2xvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl90cnlsb2NrIChwdGhyZWFkX3NwaW5sb2NrX3Qg Kl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fdW5sb2NrIChwdGhy ZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRf YmFycmllcl9pbml0IChwdGhyZWFkX2JhcnJpZXJfdCAqX19yZXN0cmljdCBfX2JhcnJpZXIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9iYXJyaWVyYXR0 cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwg dW5zaWduZWQgaW50IF9fY291bnQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJp ZXJfZGVzdHJveSAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgdGhyb3cgKCk7CgpleHRl cm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfaW5pdCAocHRocmVhZF9iYXJyaWVyYXR0cl90ICpf X2F0dHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX2Rlc3Ryb3kg KHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRo cmVhZF9iYXJyaWVyYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfYmFycmllcmF0dHJf dCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0 IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAq X19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJp ZXJhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cg KCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcl93YWl0IChwdGhyZWFkX2JhcnJpZXJfdCAq X19iYXJyaWVyKSB0aHJvdyAoKTsKIyA1NTYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0 ZXJuIGludCBwdGhyZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fZGVzdHJfZnVuY3Rpb24pICh2b2lkICop KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0ZSAocHRocmVhZF9rZXlf dCBfX2tleSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNwZWNpZmljIChwdGhy ZWFkX2tleV90IF9fa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg dm9pZCAqX19wb2ludGVyKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqcHRocmVhZF9nZXRzcGVj aWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CiMgNTc2ICIvdXNyL2luY2x1ZGUv cHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9vbmNlIChwdGhyZWFkX29uY2VfdCAqX19v bmNlX2NvbnRyb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19pbml0X3JvdXRp bmUpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxz dGF0ZSAoaW50IF9fc3RhdGUsIGludCAqX19vbGRzdGF0ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgcHRocmVhZF9zZXRjYW5jZWx0eXBlIChpbnQgX190eXBlLCBpbnQgKl9fb2xkdHlwZSkgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NhbmNlbCAocHRocmVhZF90IF9fdGhyZWFkKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRfdGVzdGNhbmNlbCAodm9pZCkgdGhyb3cg KCk7CiMgNjEwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFk X2NsZWFudXBfcHVzaCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19yb3V0aW5lKSAodm9p ZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2FyZykgdGhy b3cgKCk7CgoKCgoKCgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcCAoc3RydWN0IF9w dGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwojIDYzMSAiL3Vzci9pbmNsdWRlL3B0 aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2hfZGVmZXIgKHN0cnVj dCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRocm93ICgpOwoj IDY0MiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVh bnVwX3BvcF9yZXN0b3JlIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19leGVjdXRl KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0Y3B1Y2xvY2tpZCAocHRocmVh ZF90IF9fdGhyZWFkX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tp ZF90ICpfX2Nsb2NrX2lkKSB0aHJvdyAoKTsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2ln dGhyZWFkLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIgMwpleHRl cm4gaW50IHB0aHJlYWRfc2lnbWFzayAoaW50IF9faG93LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fbmV3bWFzaywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19vbGRtYXNrKXRocm93 ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9raWxsIChwdGhyZWFkX3QgX190aHJlYWQsIGludCBf X3NpZ25vKSB0aHJvdyAoKTsKIyA2NTYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDY3 MSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2 b2lkICgqX19wcmVwYXJlKSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg KCpfX3BhcmVudCkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19j aGlsZCkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRfa2lsbF9vdGhl cl90aHJlYWRzX25wICh2b2lkKSB0aHJvdyAoKTsKCn0KIyAzOCAiL3Vzci9sb2NhbC92b2wvZ2Nj LzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQu aCIgMiAzCgp0eXBlZGVmIHB0aHJlYWRfa2V5X3QgX19ndGhyZWFkX2tleV90Owp0eXBlZGVmIHB0 aHJlYWRfb25jZV90IF9fZ3RocmVhZF9vbmNlX3Q7CnR5cGVkZWYgcHRocmVhZF9tdXRleF90IF9f Z3RocmVhZF9tdXRleF90OwoKCgoKCgojcHJhZ21hIHdlYWsgcHRocmVhZF9vbmNlCiNwcmFnbWEg d2VhayBwdGhyZWFkX2tleV9jcmVhdGUKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfa2V5X2RlbGV0ZQoj cHJhZ21hIHdlYWsgcHRocmVhZF9nZXRzcGVjaWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9zZXRz cGVjaWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9jcmVhdGUKCiNwcmFnbWEgd2VhayBwdGhyZWFk X211dGV4X2xvY2sgCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3RyeWxvY2sgCiNwcmFnbWEg d2VhayBwdGhyZWFkX211dGV4X3VubG9jayAKIyA4MCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9p bmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwpz dGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfYWN0aXZlX3AgKHZvaWQpCnsKICBzdGF0aWMgdm9p ZCAqY29uc3QgX19ndGhyZWFkX2FjdGl2ZV9wdHIgPSAodm9pZCAqKSAmcHRocmVhZF9jcmVhdGU7 CiAgcmV0dXJuIF9fZ3RocmVhZF9hY3RpdmVfcHRyICE9IDA7Cn0KIyA0MzcgIi91c3IvbG9jYWwv dm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1k ZWZhdWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX29uY2UgKF9fZ3RocmVhZF9v bmNlX3QgKm9uY2UsIHZvaWQgKCpmdW5jKSAodm9pZCkpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2 ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfb25jZSAob25jZSwgZnVuYyk7CiAgZWxzZQogICAg cmV0dXJuIC0xOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfa2V5X2NyZWF0ZSAoX19n dGhyZWFkX2tleV90ICprZXksIHZvaWQgKCpkdG9yKSAodm9pZCAqKSkKewogIHJldHVybiBwdGhy ZWFkX2tleV9jcmVhdGUgKGtleSwgZHRvcik7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVh ZF9rZXlfZHRvciAoX19ndGhyZWFkX2tleV90IGtleSwgdm9pZCAqcHRyKQp7CgogIGlmIChwdHIp CiAgICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5LCAwKTsKICBlbHNlCiAgICByZXR1 cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tleV9kZWxldGUgKF9fZ3RocmVh ZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVhZF9rZXlfZGVsZXRlIChrZXkpOwp9CgpzdGF0 aWMgaW5saW5lIHZvaWQgKgpfX2d0aHJlYWRfZ2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBr ZXkpCnsKICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyAoa2V5KTsKfQoKc3RhdGljIGlubGlu ZSBpbnQKX19ndGhyZWFkX3NldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3Qga2V5LCBjb25zdCB2 b2lkICpwdHIpCnsKICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5LCBwdHIpOwp9Cgpz dGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfbG9jayAoX19ndGhyZWFkX211dGV4X3Qg Km11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFk X211dGV4X2xvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGlu ZSBpbnQKX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkK ewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF90 cnlsb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50 Cl9fZ3RocmVhZF9tdXRleF91bmxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewogIGlm IChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF91bmxvY2sg KG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQojIDk5ICIvdXNyL2xvY2FsL3ZvbC9nY2Mv My4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMiAzCiMg MzggIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgt Z251L2JpdHMvYysraW8uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdHlwZWRlZiBsb25nIHN0 cmVhbW9mZjsKICB0eXBlZGVmIHB0cmRpZmZfdCBzdHJlYW1zaXplOwoKICB0eXBlZGVmIHB0cmRp ZmZfdCB3c3RyZWFtc2l6ZTsKCiAgdHlwZWRlZiBmcG9zX3QgX19jX3N0cmVhbXBvczsKCiAgdHlw ZWRlZiBfX2d0aHJlYWRfbXV0ZXhfdCBfX2NfbG9jazsKCgogIHR5cGVkZWYgRklMRSBfX2NfZmls ZTsKCgogIHN0cnVjdCBfX2lvc19mbGFncwogIHsKICAgIHR5cGVkZWYgc2hvcnQgX19pbnRfdHlw ZTsKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19ib29sYWxwaGEgPSAweDAwMDE7CiAg ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19kZWMgPSAweDAwMDI7CiAgICBzdGF0aWMgY29u c3QgX19pbnRfdHlwZSBfU19maXhlZCA9IDB4MDAwNDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90 eXBlIF9TX2hleCA9IDB4MDAwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ludGVy bmFsID0gMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfbGVmdCA9IDB4MDAy MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX29jdCA9IDB4MDA0MDsKICAgIHN0YXRp YyBjb25zdCBfX2ludF90eXBlIF9TX3JpZ2h0ID0gMHgwMDgwOwogICAgc3RhdGljIGNvbnN0IF9f aW50X3R5cGUgX1Nfc2NpZW50aWZpYyA9IDB4MDEwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90 eXBlIF9TX3Nob3diYXNlID0gMHgwMjAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf c2hvd3BvaW50ID0gMHgwNDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3Bv cyA9IDB4MDgwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3NraXB3cyA9IDB4MTAw MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VuaXRidWYgPSAweDIwMDA7CiAgICBz dGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191cHBlcmNhc2UgPSAweDQwMDA7CiAgICBzdGF0aWMg Y29uc3QgX19pbnRfdHlwZSBfU19hZGp1c3RmaWVsZCA9IDB4MDAyMCB8IDB4MDA4MCB8IDB4MDAx MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jhc2VmaWVsZCA9IDB4MDAwMiB8IDB4 MDA0MCB8IDB4MDAwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Zsb2F0ZmllbGQg PSAweDAxMDAgfCAweDAwMDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2JhZGJp dCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19lb2ZiaXQgPSAweDAyOwog ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmFpbGJpdCA9IDB4MDQ7CgoKICAgIHN0YXRp YyBjb25zdCBfX2ludF90eXBlIF9TX2FwcCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf dHlwZSBfU19hdGUgPSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmluID0g MHgwNDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2luID0gMHgwODsKICAgIHN0YXRp YyBjb25zdCBfX2ludF90eXBlIF9TX291dCA9IDB4MTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf dHlwZSBfU190cnVuYyA9IDB4MjA7CiAgfTsKfQojIDQ1ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4y L2luY2x1ZGUvYysrLzMuMi9iaXRzL2Zwb3MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2Nj LzMuMi9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAxIDMKIyA0OCAiL3Vzci9sb2NhbC92b2wvZ2Nj LzMuMi9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAzCgoKCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2Nj LzMuMi9pbmNsdWRlL2MrKy8zLjIvY3RpbWUiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL3ZvbC9nY2Mv My4yL2luY2x1ZGUvYysrLzMuMi9jdGltZSIgMwojIDY0ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4y L2luY2x1ZGUvYysrLzMuMi9jdGltZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmNsb2Nr X3Q7CiAgdXNpbmcgOjp0aW1lX3Q7CiAgdXNpbmcgOjp0bTsKCiAgdXNpbmcgOjpjbG9jazsKICB1 c2luZyA6OmRpZmZ0aW1lOwogIHVzaW5nIDo6bWt0aW1lOwogIHVzaW5nIDo6dGltZTsKICB1c2lu ZyA6OmFzY3RpbWU7CiAgdXNpbmcgOjpjdGltZTsKICB1c2luZyA6OmdtdGltZTsKICB1c2luZyA6 OmxvY2FsdGltZTsKICB1c2luZyA6OnN0cmZ0aW1lOwp9CiMgNTIgIi91c3IvbG9jYWwvdm9sL2dj Yy8zLjIvaW5jbHVkZS9jKysvMy4yL2N3Y2hhciIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvd2No YXIuaCIgMSAzCiMgNDAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9sb2NhbC92 b2wvZ2NjLzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRh cmcuaCIgMSAzCiMgNDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vz ci9sb2NhbC92b2wvZ2NjLzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5j bHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyA4NSAi L3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKdHlwZWRlZiBfX21ic3RhdGVfdCBtYnN0YXRlX3Q7CiMg MTA1ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwpzdHJ1Y3QgdG07CgoKZXh0ZXJuICJDIiB7CgoK ZXh0ZXJuIHdjaGFyX3QgKndjc2NweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYykgdGhy b3cgKCk7CgpleHRlcm4gd2NoYXJfdCAqd2NzbmNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rl c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2Nh dCAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJf dCAqd2NzbmNhdCAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pCiAg ICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3NjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwg X19jb25zdCB3Y2hhcl90ICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKZXh0ZXJuIGludCB3Y3NuY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29u c3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCB3Y3NjYXNlY21wIChfX2NvbnN0IHdjaGFyX3Qg Kl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3Nu Y2FzZWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBp bnQgX193Y3NjYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90 ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJv dyAoKTsKCmV4dGVybiBpbnQgX193Y3NuY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEs IF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCB3Y3Njb2xs IChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikgdGhyb3cgKCk7 CgoKCmV4dGVybiBzaXplX3Qgd2NzeGZybSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXpl X3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgX193Y3Njb2xsX2wgKF9fY29uc3Qg d2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAg ICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBfX3djc3hm cm1fbCAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgpl eHRlcm4gd2NoYXJfdCAqd2NzZHVwIChfX2NvbnN0IHdjaGFyX3QgKl9fcykgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NociAoX19j b25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3JjaHIgKF9fY29uc3Qgd2No YXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHJudWwgKF9fY29uc3Qgd2NoYXJf dCAqX19zLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHdjc2NzcG4gKF9fY29uc3Qgd2NoYXJfdCAqX193Y3Ms IF9fY29uc3Qgd2NoYXJfdCAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NzcG4gKF9fY29uc3Qgd2NoYXJfdCAqX193 Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2NzcGJyayAoX19jb25zdCB3Y2hhcl90 ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NzdHIgKF9fY29uc3Qgd2No YXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3Y2hhcl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc3djcyAo X19jb25zdCB3Y2hhcl90ICpfX2hheXN0YWNrLCBfX2NvbnN0IHdjaGFyX3QgKl9fbmVlZGxlKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gd2NoYXJf dCAqd2NzdG9rICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAg ICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fcHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6 ZV90IHdjc2xlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCgpleHRlcm4gc2l6ZV90IHdjc25sZW4gKF9fY29uc3Qgd2NoYXJfdCAq X19zLCBzaXplX3QgX19tYXhsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd21lbWNociAoX19jb25zdCB3Y2hhcl90ICpfX3Ms IHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKCmV4dGVybiBpbnQgd21lbWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry aWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0 IF9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwK ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3My LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1tb3ZlICh3Y2hh cl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg KCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1zZXQgKHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2Ms IHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1wY3B5ICh3Y2hh cl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIHdpbnRfdCBidG93YyAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgd2N0 b2IgKHdpbnRfdCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IG1ic2luaXQgKF9fY29uc3Qg bWJzdGF0ZV90ICpfX3BzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoK ZXh0ZXJuIHNpemVfdCBtYnJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24s CiAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3ApIHRocm93ICgpOwoKCmV4dGVy biBzaXplX3Qgd2NydG9tYiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHdjaGFyX3QgX193YywKICAg ICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7 CgoKZXh0ZXJuIHNpemVfdCBfX21icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywg c2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0 IF9fcHMpIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IG1icmxlbiAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAq X19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKIyAyOTcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz CmV4dGVybiBzaXplX3QgbWJzcnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6 ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0 IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3J0b21icyAoY2hhciAqX19yZXN0 cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9f cmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1i c3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IG1i c25ydG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbm1jLAogICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0 IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc25ydG9tYnMgKGNoYXIgKl9fcmVz dHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICoq X19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ud2Ms IHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVz dHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgd2N3aWR0aCAod2NoYXJfdCBf X2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHdjc3dpZHRoIChfX2NvbnN0IHdjaGFyX3QgKl9f cywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSB3Y3N0b2QgKF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICB3Y2hh cl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCB3Y3N0 b2YgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg ZG91YmxlIHdjc3RvbGQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgaW50IHdjc3RvbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9u ZyBpbnQgd2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9u ZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs IGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2ln bmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9u ZyBpbnQgd2NzdG9sbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu dCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVk IGxvbmcgbG9uZyBpbnQgd2NzdG91bGwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBfX2Jhc2UpIHRocm93ICgpOwojIDQxMCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0 ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3Qg X19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9sIChf X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2Mp IHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxf bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhy b3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2Nz dG91bGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19i YXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBfX3dj c3RvZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9f bG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2wgKF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90 ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsK CmV4dGVybiBsb25nIGRvdWJsZSBfX3djc3RvbGRfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2Fs ZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2ludGVybmFs IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXAp CiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBfX3djc3RvZl9pbnRlcm5hbCAoX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cg KCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3djc3RvbGRfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJf dCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50 IF9fd2NzdG9sX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGlu dCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91 bF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBf X2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBs b25nIGxvbmcgaW50IF9fd2NzdG9sbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hh cl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5z aW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX193Y3N0b3VsbF9pbnRlcm5hbCAo X19jb25zdCB3Y2hhcl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKioKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f Z3JvdXApIHRocm93ICgpOwojIDUyOCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuIHdj aGFyX3QgKndjcGNweSAod2NoYXJfdCAqX19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjcG5jcHkgKHdjaGFyX3QgKl9fZGVzdCwgX19j b25zdCB3Y2hhcl90ICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4 dGVybiBpbnQgZndpZGUgKF9fRklMRSAqX19mcCwgaW50IF9fbW9kZSkgdGhyb3cgKCk7CgoKCmV4 dGVybiBpbnQgZndwcmludGYgKF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAg ICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB3cHJpbnRmIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHN3cHJpbnRm ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cg KCkgOwoKCmV4dGVybiBpbnQgdmZ3cHJpbnRmIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zLAogICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAog ICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkg OwoKZXh0ZXJuIGludCB2d3ByaW50ZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9y bWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJv dyAoKSA7CgoKZXh0ZXJuIGludCB2c3dwcmludGYgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBz aXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry aWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcp CiAgICAgdGhyb3cgKCkgOwoKCgpleHRlcm4gaW50IGZ3c2NhbmYgKF9fRklMRSAqX19yZXN0cmlj dCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHdzY2FuZiAoX19j b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoK ZXh0ZXJuIGludCBzd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLAogICAg ICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4u KQogICAgIHRocm93ICgpIDsKCgoKCmV4dGVybiBpbnQgdmZ3c2NhbmYgKF9fRklMRSAqX19yZXN0 cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAg ICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB2d3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcp CiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB2c3dzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2Fy ZykKICAgICB0aHJvdyAoKSA7CgoKCgpleHRlcm4gd2ludF90IGZnZXR3YyAoX19GSUxFICpfX3N0 cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgZ2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIHRo cm93ICgpOwoKCmV4dGVybiB3aW50X3QgZ2V0d2NoYXIgKHZvaWQpIHRocm93ICgpOwoKCgpleHRl cm4gd2ludF90IGZwdXR3YyAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKZXh0ZXJuIHdpbnRfdCBwdXR3YyAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0 aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IHB1dHdjaGFyICh3Y2hhcl90IF9fd2MpIHRocm93ICgp OwoKCgoKZXh0ZXJuIHdjaGFyX3QgKmZnZXR3cyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBp bnQgX19uLAogICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJl YW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZnB1dHdzIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX193cywKICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVh bSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50X3QgdW5nZXR3YyAod2ludF90IF9fd2MsIF9fRklM RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiB3aW50X3QgZ2V0d2NfdW5sb2NrZWQg KF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IGdldHdjaGFyX3VubG9j a2VkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IGZnZXR3Y191bmxvY2tlZCAoX19G SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBmcHV0d2NfdW5sb2NrZWQg KHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50 X3QgcHV0d2NfdW5sb2NrZWQgKHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cg KCk7CmV4dGVybiB3aW50X3QgcHV0d2NoYXJfdW5sb2NrZWQgKHdjaGFyX3QgX193YykgdGhyb3cg KCk7CgoKCmV4dGVybiB3Y2hhcl90ICpmZ2V0d3NfdW5sb2NrZWQgKHdjaGFyX3QgKl9fcmVzdHJp Y3QgX193cywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxF ICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGZwdXR3c191bmxv Y2tlZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpl eHRlcm4gc2l6ZV90IHdjc2Z0aW1lICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9f bWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry aWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAq X19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKIyA2ODAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz Cn0KIyA1NSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAy IDMKIyA2OSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAz Cm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWJzdGF0ZV90Owp9CiMgMTMzICIvdXNyL2xvY2Fs L3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jd2NoYXIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAg dXNpbmcgOjp3aW50X3Q7CgogIHVzaW5nIDo6YnRvd2M7CiAgdXNpbmcgOjpmZ2V0d2M7CiAgdXNp bmcgOjpmZ2V0d3M7CiAgdXNpbmcgOjpmcHV0d2M7CiAgdXNpbmcgOjpmcHV0d3M7CiAgdXNpbmcg Ojpmd2lkZTsKICB1c2luZyA6OmZ3cHJpbnRmOwogIHVzaW5nIDo6ZndzY2FuZjsKICB1c2luZyA6 OmdldHdjOwogIHVzaW5nIDo6Z2V0d2NoYXI7CiAgdXNpbmcgOjptYnJsZW47CiAgdXNpbmcgOjpt YnJ0b3djOwogIHVzaW5nIDo6bWJzaW5pdDsKICB1c2luZyA6Om1ic3J0b3djczsKICB1c2luZyA6 OnB1dHdjOwogIHVzaW5nIDo6cHV0d2NoYXI7CiAgdXNpbmcgOjpzd3ByaW50ZjsKICB1c2luZyA6 OnN3c2NhbmY7CiAgdXNpbmcgOjp1bmdldHdjOwogIHVzaW5nIDo6dmZ3cHJpbnRmOwogIHVzaW5n IDo6dmZ3c2NhbmY7CiAgdXNpbmcgOjp2c3dwcmludGY7CiAgdXNpbmcgOjp2c3dzY2FuZjsKICB1 c2luZyA6OnZ3cHJpbnRmOwogIHVzaW5nIDo6dndzY2FuZjsKICB1c2luZyA6OndjcnRvbWI7CiAg dXNpbmcgOjp3Y3NjYXQ7CiAgdXNpbmcgOjp3Y3NjbXA7CiAgdXNpbmcgOjp3Y3Njb2xsOwogIHVz aW5nIDo6d2NzY3B5OwogIHVzaW5nIDo6d2NzY3NwbjsKICB1c2luZyA6Ondjc2Z0aW1lOwogIHVz aW5nIDo6d2NzbGVuOwogIHVzaW5nIDo6d2NzbmNhdDsKICB1c2luZyA6Ondjc25jbXA7CiAgdXNp bmcgOjp3Y3NuY3B5OwogIHVzaW5nIDo6d2NzcnRvbWJzOwogIHVzaW5nIDo6d2Nzc3BuOwogIHVz aW5nIDo6d2NzdG9kOwogIHVzaW5nIDo6d2NzdG9mOwogIHVzaW5nIDo6d2NzdG9rOwogIHVzaW5n IDo6d2NzdG9sOwogIHVzaW5nIDo6d2NzdG91bDsKICB1c2luZyA6Ondjc3hmcm07CiAgdXNpbmcg Ojp3Y3RvYjsKICB1c2luZyA6OndtZW1jbXA7CiAgdXNpbmcgOjp3bWVtY3B5OwogIHVzaW5nIDo6 d21lbW1vdmU7CiAgdXNpbmcgOjp3bWVtc2V0OwogIHVzaW5nIDo6d3ByaW50ZjsKICB1c2luZyA6 OndzY2FuZjsKCiAgdXNpbmcgOjp3Y3NjaHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc2Nocih3 Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jKQogIHsgcmV0dXJuIHdjc2Nocihjb25zdF9jYXN0PGNv bnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpOyB9CgogIHVzaW5nIDo6d2NzcGJyazsKCiAgaW5saW5l IHdjaGFyX3QqCiAgd2NzcGJyayh3Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBfX3MyKQogIHsgcmV0 dXJuIHdjc3BicmsoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9fczIpOyB9Cgog IHVzaW5nIDo6d2NzcmNocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzcmNocih3Y2hhcl90KiBf X3AsIHdjaGFyX3QgX19jKQogIHsgcmV0dXJuIHdjc3JjaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hh cl90Kj4oX19wKSwgX19jKTsgfQoKICB1c2luZyA6Ondjc3N0cjsKCiAgaW5saW5lIHdjaGFyX3Qq CiAgd2Nzc3RyKHdjaGFyX3QqIF9fczEsIHdjaGFyX3QqIF9fczIpCiAgeyByZXR1cm4gd2Nzc3Ry KGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6Ondt ZW1jaHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdtZW1jaHIod2NoYXJfdCogX19wLCB3Y2hhcl90 IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiB3bWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2No YXJfdCo+KF9fcCksIF9fYywgX19uKTsgfQp9CgoKCgoKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsK ICB1c2luZyA6Ondjc3RvbGQ7CiAgdXNpbmcgOjp3Y3N0b2xsOwogIHVzaW5nIDo6d2NzdG91bGw7 Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6d2NzdG9sZDsKICB1c2luZyBf X2dudV9jeHg6Ondjc3RvbGw7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0b3VsbDsKfQojIDQ2ICIv dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Zwb3MuaCIgMiAzCgpu YW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3Mg ZnBvcwogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfU3RhdGVUIF9fc3RhdGVfdHlw ZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJlYW1vZmYgX01fb2ZmOwogICAgICBfX3N0YXRlX3R5 cGUgX01fc3Q7CgogICAgcHVibGljOgogICAgICBfX3N0YXRlX3R5cGUKICAgICAgc3RhdGUoKSBj b25zdCB7IHJldHVybiBfTV9zdDsgfQoKICAgICAgdm9pZAogICAgICBzdGF0ZShfX3N0YXRlX3R5 cGUgX19zdCkgeyBfTV9zdCA9IF9fc3Q7IH0KCgoKICAgICAgZnBvcygpOiBfTV9vZmYoc3RyZWFt b2ZmKCkpLCBfTV9zdChfX3N0YXRlX3R5cGUoKSkgeyB9CgogICAgICBmcG9zKHN0cmVhbW9mZiBf X29mZiwgX19zdGF0ZV90eXBlIF9fc3QgPSBfX3N0YXRlX3R5cGUoKSkKICAgICAgOiBfTV9vZmYo X19vZmYpLCBfTV9zdChfX3N0KSB7IH0KCiAgICAgIG9wZXJhdG9yIHN0cmVhbW9mZigpIGNvbnN0 IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAgZnBvcyYKICAgICAgb3BlcmF0b3IrPShzdHJlYW1v ZmYgX19vZmYpIHsgX01fb2ZmICs9IF9fb2ZmOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3Mm CiAgICAgIG9wZXJhdG9yLT0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiAtPSBfX29mZjsgcmV0 dXJuICp0aGlzOyB9CgogICAgICBmcG9zCiAgICAgIG9wZXJhdG9yKyhzdHJlYW1vZmYgX19vZmYp CiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7CiAgICAgICAgX190ICs9IF9fb2ZmOwog ICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3ItKHN0 cmVhbW9mZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBf X3QgLT0gX19vZmY7CiAgICAgICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgYm9vbAogICAg ICBvcGVyYXRvcj09KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9v ZmYgPT0gX19wb3MuX01fb2ZmOyB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yIT0oY29uc3Qg ZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiAhPSBfX3Bvcy5fTV9vZmY7 IH0KCiAgICAgIHN0cmVhbW9mZgogICAgICBfTV9wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIF9N X29mZjsgfQoKICAgICAgdm9pZAogICAgICBfTV9wb3NpdGlvbihzdHJlYW1vZmYgX19vZmYpIHsg X01fb2ZmID0gX19vZmY7IH0KICAgIH07CgoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJl YW1wb3M7CgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHdzdHJlYW1wb3M7Cgp9CiMgNDcgIi91 c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvY2hhcl90cmFpdHMuaCIg MiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1 Y3QgY2hhcl90cmFpdHMKICAgIHsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAg ICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbXBv cyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVk ZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24o Y2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGJv b2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIp OwoKICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25z dCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0 IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKTsKCiAg ICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKTsKCiAg ICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBf X3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKTsKCiAgICAgIHN0YXRpYyBjaGFy X3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIs IHNpemVfdCBfX24pOwoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5 cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbik7CgogICAgICBzdGF0 aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNo YXJfdHlwZSBfX2EpOwoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUo Y29uc3QgaW50X3R5cGUmIF9fYyk7CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50 X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpOwoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFf aW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKTsKCiAg ICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQog ICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpOwogICAgfTsKCgoKICB0ZW1wbGF0ZTw+ CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj4KICAgIHsKICAgICAgdHlwZWRlZiBjaGFyIGNo YXJfdHlwZTsKICAgICAgdHlwZWRlZiBpbnQgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFt cG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlw ZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2ln bihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0g X19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2Mx LCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoK ICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj aGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0 aWMgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5 cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIG1lbWNtcChfX3MxLCBfX3MyLCBf X24pOyB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUq IF9fcykKICAgICAgeyByZXR1cm4gc3RybGVuKF9fcyk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBj aGFyX3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNv bnN0IGNoYXJfdHlwZSYgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBjaGFy X3R5cGUqPihtZW1jaHIoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBl KgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXpl X3QgX19uKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1tb3ZlKF9f czEsIF9fczIsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNo YXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7 IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1jcHkoX19zMSwgX19zMiwgX19uKSk7 IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywg c2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hh cl90eXBlKj4obWVtc2V0KF9fcywgX19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlw ZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4g c3RhdGljX2Nhc3Q8Y2hhcl90eXBlPihfX2MpOyB9CgoKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQog ICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3Rh dGljX2Nhc3Q8aW50X3R5cGU+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYykpOyB9Cgog ICAgICBzdGF0aWMgYm9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwg Y29uc3QgaW50X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAg ICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90 eXBlPigoLTEpKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3Qg aW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gKF9fYyA9PSBlb2YoKSkgPyAwIDogX19jOyB9 CiAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD4KICAg IHsKICAgICAgdHlwZWRlZiB3Y2hhcl90IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB3aW50X3Qg aW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVm IHdzdHJlYW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7 CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj aGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29s CiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQog ICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0 KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJl dHVybiBfX2MxIDwgX19jMjsgfQoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0 IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAg ICB7IHJldHVybiB3bWVtY21wKF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXpl X3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKQogICAgICB7IHJldHVybiB3Y3Ns ZW4oX19zKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25z dCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAg IHsgcmV0dXJuIHdtZW1jaHIoX19zLCBfX2EsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5 cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIGlu dF90eXBlIF9fbikKICAgICAgeyByZXR1cm4gd21lbW1vdmUoX19zMSwgX19zMiwgX19uKTsgfQoK ICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0 IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gd21lbWNweShfX3Mx LCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hh cl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHdt ZW1zZXQoX19zLCBfX2EsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9f Y2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpIHsgcmV0dXJuIGNoYXJfdHlwZShfX2MpOyB9 CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBl JiBfX2MpIHsgcmV0dXJuIGludF90eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAg IGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikK ICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAg ICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KCgweGZmZmZmZmZmdSkpOyB9 CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19j KQogICAgICB7IHJldHVybiBlcV9pbnRfdHlwZShfX2MsIGVvZigpKSA/IDAgOiBfX2M7IH0KICB9 OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3Ry dWN0IF9DaGFyX3RyYWl0c19tYXRjaAogICAgewogICAgICBfQ2hhclQgX01fYzsKICAgICAgX0No YXJfdHJhaXRzX21hdGNoKF9DaGFyVCBjb25zdCYgX19jKSA6IF9NX2MoX19jKSB7IH0KCiAgICAg IGJvb2wKICAgICAgb3BlcmF0b3IoKShfQ2hhclQgY29uc3QmIF9fYSkgeyByZXR1cm4gX1RyYWl0 czo6ZXEoX01fYywgX19hKTsgfQogICAgfTsKfQojIDQ4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4y L2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIv aW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMSAzCiMgNTMgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIv aW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwoKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAxIDMKIyA2NiAiL3Vzci9sb2NhbC92 b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwojIDEgIi91 c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2NsaW1pdHMiIDEgMwojIDQ4ICIv dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jbGltaXRzIiAzCgojIDEgIi91 c3IvbG9jYWwvdm9sL2djYy8zLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2lu Y2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9s b2NhbC92b2wvZ2NjLzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVk ZS9zeXNsaW1pdHMuaCIgMSAzCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTMy ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu Mi9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAx NDQgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4 MV9saW0uaCIgMSAzCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9i aXRzL2xvY2FsX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2xpbWl0cy5oIiAxIDMK IyAzNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDIgMwojIDEyNyAiL3Vzci9pbmNs dWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMKIyAxNDUgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIg MiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAxIDMKIyAxNDkgIi91 c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5f bGltLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2JpdHMv eG9wZW5fbGltLmgiIDIgMwojIDEzNiAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAxMzcgIi91c3IvaW5jbHVk ZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMKIyAxNTMgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAz CiMgMTMzICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzMuMi9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4y L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N5c2xpbWl0cy5oIiAy IDMKIyAxMiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgNTAgIi91c3IvbG9jYWwvdm9sL2djYy8z LjIvaW5jbHVkZS9jKysvMy4yL2NsaW1pdHMiIDIgMwojIDY3ICIvdXNyL2xvY2FsL3ZvbC9nY2Mv My4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xv Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jc3RkbGliIiAxIDMKIyA0OCAiL3Vzci9s b2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvY3N0ZGxpYiIgMwoKCgoKIyAxICIvdXNy L2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAx ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu Mi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMK CmV4dGVybiAiQyIgewoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRmbGFncy5oIiAx IDMKIyA0MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy93YWl0c3RhdHVzLmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvZW5k aWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91c3Iv aW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgNjQgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMu aCIgMiAzCgp1bmlvbiB3YWl0CiAgewogICAgaW50IHdfc3RhdHVzOwogICAgc3RydWN0CiAgICAg IHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd190ZXJtc2lnOjc7CiAgICAgICAgdW5zaWduZWQg aW50IF9fd19jb3JlZHVtcDoxOwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfcmV0Y29kZTo4Owog ICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKCiAgICAgIH0gX193YWl0X3Rlcm1pbmF0ZWQ7 CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3B2YWw6ODsK ICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3BzaWc6ODsKICAgICAgICB1bnNpZ25lZCBpbnQ6 MTY7CgoKCgoKCiAgICAgIH0gX193YWl0X3N0b3BwZWQ7CiAgfTsKIyA0NCAiL3Vzci9pbmNsdWRl L3N0ZGxpYi5oIiAyIDMKIyA5NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCnR5cGVkZWYgc3Ry dWN0CiAgewogICAgaW50IHF1b3Q7CiAgICBpbnQgcmVtOwogIH0gZGl2X3Q7CgoKCnR5cGVkZWYg c3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgaW50IHJlbTsKICB9IGxkaXZf dDsKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBsb25nIGlu dCBxdW90OwogICAgbG9uZyBsb25nIGludCByZW07CiAgfSBsbGRpdl90OwojIDEzMyAiL3Vzci9p bmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCAo dm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25w dHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBhdG9p IChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25n IGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzdHJ0b2YgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xk IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gbG9u ZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhy b3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4 dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVy biB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKCgpfX2V4 dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKIyAyMTUg Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfbCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQg bG9uZyBpbnQgX19zdHJ0b3VsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg X19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxv bmcgaW50IF9fc3RydG9sbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs IGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90 IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u ZyBpbnQgX19zdHJ0b3VsbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZG91Ymxl IF9fc3RydG9kX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19s b2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfbCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBsb25n IGRvdWJsZSBfX3N0cnRvbGRfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAo KTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4g ZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw dHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0 b2xkX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93 ICgpOwoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxv bmcgaW50IF9fc3RydG91bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9u X18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19l eHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVy bmFsIChfX2NvbnN0IGNoYXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jh c2UsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwojIDM4NCAiL3Vzci9pbmNsdWRlL3N0ZGxp Yi5oIiAzCmV4dGVybiBjaGFyICpsNjRhIChsb25nIGludCBfX24pIHRocm93ICgpOwoKCmV4dGVy biBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI4 ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgoKdHlwZWRlZiBf X3VfY2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2lu dCB1X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90 Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoK CgoKdHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoK CgoKdHlwZWRlZiBfX2lubzY0X3QgaW5vNjRfdDsKCgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsK CgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoK CgoKdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsK CgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoKCgoKCnR5cGVkZWYgX19vZmY2NF90IG9mZjY0 X3Q7CiMgMTA0ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2lkX3QgaWRf dDsKCgoKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7CgoKCgoKdHlwZWRlZiBfX2RhZGRyX3Qg ZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKCgp0eXBlZGVmIF9fa2V5X3Qg a2V5X3Q7CiMgMTM2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX3VzZWNv bmRzX3QgdXNlY29uZHNfdDsKCgoKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoK CgoKCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVu c2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTkw ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmli dXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmli dXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmli dXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmli dXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50 OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVk IGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVk ZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lf XykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21v ZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgo X19tb2RlX18gKF9fd29yZF9fKSkpOwojIDIxNSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9z eXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMzIg Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv c2lnc2V0LmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKIyA0NiAi L3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUu aCIgMSAzCiMgNjcgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXZhbAog IHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIF9fc3VzZWNvbmRzX3QgdHZfdXNlYzsKICB9Owoj IDQ3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKIyA1NSAiL3Vzci9pbmNsdWRlL3N5 cy9zZWxlY3QuaCIgMwp0eXBlZGVmIGxvbmcgaW50IF9fZmRfbWFzazsKCgoKCgoKCnR5cGVkZWYg c3RydWN0CiAgewoKCgogICAgX19mZF9tYXNrIGZkc19iaXRzWzEwMjQgLyAoOCAqIHNpemVvZiAo X19mZF9tYXNrKSldOwoKCgoKCiAgfSBmZF9zZXQ7CgoKCgoKCnR5cGVkZWYgX19mZF9tYXNrIGZk X21hc2s7CiMgOTUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuICJDIiB7CgoK CgoKCmV4dGVybiBpbnQgc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19y ZWFkZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMs CiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCiAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBfX3RpbWVvdXQpIHRocm93 ICgpOwoKCgoKCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3Ry aWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193 cml0ZWZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRm ZHMsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0 IF9fdGltZW91dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBfX3NpZ3NldF90ICpfX3Jlc3Ry aWN0IF9fc2lnbWFzaykgdGhyb3cgKCk7CgoKfQojIDIxNiAiL3Vzci9pbmNsdWRlL3N5cy90eXBl cy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwojIDIxOSAi L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKCnR5cGVkZWYgX19ibGtzaXplX3QgYmxr c2l6ZV90OwoKCgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CgoKCnR5cGVkZWYgX19m c2Jsa2NudF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250X3Q7 CiMgMjU3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2Jsa2NudDY0X3Qg YmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzYmxrY250NjRfdCBmc2Jsa2NudDY0X3Q7CnR5cGVkZWYg X19mc2ZpbGNudDY0X3QgZnNmaWxjbnQ2NF90OwoKCn0KIyAzOTEgIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMiAzCgoKCgoKCmV4dGVybiBsb25nIGludCByYW5kb20gKHZvaWQpIHRocm93ICgpOwoK CmV4dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoKCgoK CmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3Rh dGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGNoYXIgKnNldHN0YXRlIChjaGFyICpfX3N0YXRlYnVmKSB0aHJvdyAoKTsK CgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQogIHsKICAgIGludDMyX3QgKmZwdHI7CiAgICBpbnQz Ml90ICpycHRyOwogICAgaW50MzJfdCAqc3RhdGU7CiAgICBpbnQgcmFuZF90eXBlOwogICAgaW50 IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2VwOwogICAgaW50MzJfdCAqZW5kX3B0cjsKICB9OwoK ZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm LAogICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJv dyAoKTsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3Qg cmFuZG9tX2RhdGEgKl9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgaW5pdHN0YXRlX3IgKHVu c2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4sCiAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4g aW50IHNldHN0YXRlX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgp OwoKCgoKCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBzcmFu ZCAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcmFuZF9yICh1 bnNpZ25lZCBpbnQgKl9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGRyYW5k NDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNob3J0 IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbHJhbmQ0OCAodm9p ZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQg X194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQpIHRo cm93ICgpOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1 YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZh bCkgdGhyb3cgKCk7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQg c2hvcnQgaW50IF9fc2VlZDE2dlszXSkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIGxjb25nNDggKHVu c2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddKSB0aHJvdyAoKTsKCgoKCgpzdHJ1Y3QgZHJhbmQ0 OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsKICAgIHVuc2lnbmVkIHNo b3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fYzsKICAgIHVuc2ln bmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fYTsKICB9 OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0 IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVz dWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBf X3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19y ZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmlj dCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBscmFuZDQ4X3IgKHN0cnVjdCBkcmFu ZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25n IGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgbnJhbmQ0OF9y ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAg ICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAg ICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cg KCk7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwK ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19i dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3Vs dCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwg c3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50 IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAogICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CgpleHRlcm4g aW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCiAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CiMgNTI3 ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9f c2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lk ICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKZXh0ZXJuIHZvaWQgKnJlYWxsb2MgKHZv aWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxs b2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgpleHRl cm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgojIDEgIi91c3IvaW5jbHVk ZS9hbGxvY2EuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMwojIDEgIi91c3Iv bG9jYWwvdm9sL2djYy8zLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1 ZGUvc3RkZGVmLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoKZXh0ZXJu ICJDIiB7CgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7 CgoKCgoKfQojIDU0NyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCmV4dGVybiB2b2lk ICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxv Y19fKSk7CgoKCgpleHRlcm4gaW50IHBvc2l4X21lbWFsaWduICh2b2lkICoqX19tZW1wdHIsIHNp emVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19tYWxsb2NfXykpOwoKCgpleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50IGF0ZXhpdCAodm9p ZCAoKl9fZnVuYykgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgb25fZXhpdCAodm9p ZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAg ICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2b2lkIF9FeGl0IChp bnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoK CmV4dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93 ICgpOwoKCgoKCmV4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoK CgoKZXh0ZXJuIGludCBzZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIg Kl9fdmFsdWUsIGludCBfX3JlcGxhY2UpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB1bnNl dGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGNs ZWFyZW52ICh2b2lkKSB0aHJvdyAoKTsKIyA2MjMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpl eHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCgoKCmV4 dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjQwICIvdXNy L2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBta3N0ZW1wNjQgKGNoYXIgKl9fdGVtcGxh dGUpIHRocm93ICgpOwojIDY1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFy ICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3lz dGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFy ICpjYW5vbmljYWxpemVfZmlsZV9uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7 CiMgNjcyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgdGhyb3cgKCk7CgoKCgoKCnR5cGVkZWYgaW50ICgq X19jb21wYXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRl ZiBfX2NvbXBhcl9mbl90IGNvbXBhcmlzb25fZm5fdDsKCgoKCgpleHRlcm4gdm9pZCAqYnNlYXJj aCAoX19jb25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBf X2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25t ZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wYXJfZm5fdCBfX2Nv bXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxv bmcgbG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVt ZXIsIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKZXh0ZXJuIGxkaXZfdCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9t KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9u X18gZXh0ZXJuIGxsZGl2X3QgbGxkaXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsb25nIGludCBfX2Rlbm9tKQogICAgIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyA3MjggIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMwpleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp dCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz dHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192 YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAg ICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIg KmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp Z2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9f cmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJs ZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3Ry aWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hh ciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYp IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u ZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpf X3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAg ICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192 YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAg ICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAg ICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBxZWN2 dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAg ICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAg ICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJv dyAoKTsKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGln aXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19y ZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1 Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBtYmxlbiAoX19jb25z dCBjaGFyICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3Rv bWIgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVf dCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsCiAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgp OwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVf dCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3Qg Y2hhciAqX19yZXNwb25zZSkgdGhyb3cgKCk7CiMgODA4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi IDMKZXh0ZXJuIGludCBnZXRzdWJvcHQgKGNoYXIgKipfX3Jlc3RyaWN0IF9fb3B0aW9ucCwKICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fY29uc3QgKl9fcmVzdHJpY3QgX190b2tlbnMsCiAg ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3ZhbHVlcCkgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIHZvaWQgc2V0a2V5IChfX2NvbnN0IGNoYXIgKl9fa2V5KSB0aHJvdyAoKTsK CgoKCgoKCmV4dGVybiBpbnQgcG9zaXhfb3BlbnB0IChpbnQgX19vZmxhZykgdGhyb3cgKCk7CgoK CgoKCgpleHRlcm4gaW50IGdyYW50cHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu dCB1bmxvY2twdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnB0c25hbWUg KGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdHNuYW1lX3IgKGludCBfX2Zk LCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdl dHB0ICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBnZXRsb2FkYXZnIChkb3VibGUg X19sb2FkYXZnW10sIGludCBfX25lbGVtKSB0aHJvdyAoKTsKCgoKCgp9CiMgNTMgIi91c3IvbG9j YWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2NzdGRsaWIiIDIgMwojIDg0ICIvdXNyL2xv Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jc3RkbGliIiAzCm5hbWVzcGFjZSBzdGQK ewogIHVzaW5nIDo6ZGl2X3Q7CiAgdXNpbmcgOjpsZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAg dXNpbmcgOjphYnM7CiAgdXNpbmcgOjphdGV4aXQ7CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6 YXRvaTsKICB1c2luZyA6OmF0b2w7CiAgdXNpbmcgOjpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9j OwogIHVzaW5nIDo6ZGl2OwogIHVzaW5nIDo6ZXhpdDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcg OjpnZXRlbnY7CiAgdXNpbmcgOjpsYWJzOwogIHVzaW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxv YzsKICB1c2luZyA6Om1ibGVuOwogIHVzaW5nIDo6bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7 CiAgdXNpbmcgOjpxc29ydDsKICB1c2luZyA6OnJhbmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVz aW5nIDo6c3JhbmQ7CiAgdXNpbmcgOjpzdHJ0b2Q7CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcg OjpzdHJ0b3VsOwogIHVzaW5nIDo6c3lzdGVtOwogIHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcg Ojp3Y3RvbWI7CgogIGlubGluZSBsb25nCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9f aSk7IH0KCiAgaW5saW5lIGxkaXZfdAogIGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJu IGxkaXYoX19pLCBfX2opOyB9Cn0KIyAxMzYgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVk ZS9jKysvMy4yL2NzdGRsaWIiIDMKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjpsbGRp dl90OwogIHVzaW5nIDo6X0V4aXQ7CgogIGlubGluZSBsb25nIGxvbmcKICBhYnMobG9uZyBsb25n IF9feCkgeyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsb25nIGxv bmcKICBsbGFicyhsb25nIGxvbmcgX194KSB7IHJldHVybiBfX3ggPj0gMCA/IF9feCA6IC1fX3g7 IH0KCiAgaW5saW5lIGxsZGl2X3QKICBkaXYobG9uZyBsb25nIF9fbiwgbG9uZyBsb25nIF9fZCkK ICB7IGxsZGl2X3QgX19xOyBfX3EucXVvdCA9IF9fbiAvIF9fZDsgX19xLnJlbSA9IF9fbiAlIF9f ZDsgcmV0dXJuIF9fcTsgfQoKICBpbmxpbmUgbGxkaXZfdAogIGxsZGl2KGxvbmcgbG9uZyBfX24s IGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7IF9f cS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgdXNpbmcgOjphdG9sbDsKICB1c2lu ZyA6OnN0cnRvZjsKICB1c2luZyA6OnN0cnRvbGw7CiAgdXNpbmcgOjpzdHJ0b3VsbDsKICB1c2lu ZyA6OnN0cnRvbGQ7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXZf dDsKICB1c2luZyBfX2dudV9jeHg6Ol9FeGl0OwogIHVzaW5nIF9fZ251X2N4eDo6YWJzOwogIHVz aW5nIF9fZ251X2N4eDo6bGxhYnM7CiAgdXNpbmcgX19nbnVfY3h4OjpkaXY7CiAgdXNpbmcgX19n bnVfY3h4OjpsbGRpdjsKICB1c2luZyBfX2dudV9jeHg6OmF0b2xsOwogIHVzaW5nIF9fZ251X2N4 eDo6c3RydG9mOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9sbDsKICB1c2luZyBfX2dudV9jeHg6 OnN0cnRvdWxsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9sZDsKfQojIDY4ICIvdXNyL2xvY2Fs L3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMg MSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvbmV3IiAxIDMKIyA0NCAi L3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvbmV3IiAzCmV4dGVybiAiQysr IiB7CgpuYW1lc3BhY2Ugc3RkCnsKCgogIGNsYXNzIGJhZF9hbGxvYyA6IHB1YmxpYyBleGNlcHRp b24KICB7CiAgcHVibGljOgogICAgYmFkX2FsbG9jKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVh bCB+YmFkX2FsbG9jKCkgdGhyb3coKTsKICB9OwoKICBzdHJ1Y3Qgbm90aHJvd190IHsgfTsKICBl eHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7CgoKICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFu ZGxlcikoKTsKCiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVyKG5ld19oYW5kbGVyKSB0aHJv dygpOwp9CiMgNzkgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL25ldyIg Mwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7 CnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2Mp Owp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxl dGVbXSh2b2lkKikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCBjb25z dCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6 ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRl KHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVs ZXRlW10odm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKCgppbmxpbmUgdm9p ZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCB2b2lkKiBfX3ApIHRocm93KCkgeyByZXR1cm4g X19wOyB9CmlubGluZSB2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgdm9pZCogX19w KSB0aHJvdygpIHsgcmV0dXJuIF9fcDsgfQoKCmlubGluZSB2b2lkIG9wZXJhdG9yIGRlbGV0ZSAo dm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfTsKaW5saW5lIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10o dm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfTsKCn0KIyA3MCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMu Mi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2Nh bC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaW9zZndkIiAxIDMKIyA0MyAiL3Vzci9sb2Nh bC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaW9zZndkIiAzCgoKCgojIDEgIi91c3IvbG9j YWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMg MzQgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNl cHQuaCIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2V4Y2Vw dGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUv YysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQK ICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxs b2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9f dGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFy KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9f cyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2 b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f dGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19y YW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19l cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3Io Y29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNo YXIqIF9fcyk7Cn0KIyA0OCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIv aW9zZndkIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf aW9zOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy X3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+ CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29z dHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNo YXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW07CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4s CiAgICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNs YXNzIGJhc2ljX3N0cmluZ2J1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxs b2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtOwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0 czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ ID4KICAgIGNsYXNzIGJhc2ljX29zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAg dHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3Ry aW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMg PSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZpbGVidWY7CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy VD4gPgogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFz aWNfb2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZnN0cmVhbTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No YXJUPiA+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNs YXNzIG9zdHJlYW1idWZfaXRlcmF0b3I7CgoKCiAgY2xhc3MgaW9zX2Jhc2U7CgoKICB0eXBlZGVm IGJhc2ljX2lvczxjaGFyPiBpb3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcj4gc3Ry ZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxjaGFyPiBpc3RyZWFtOwogIHR5cGVkZWYg YmFzaWNfb3N0cmVhbTxjaGFyPiBvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hh cj4gaW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8Y2hhcj4gc3RyaW5nYnVmOwog IHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTxjaGFyPiBpc3RyaW5nc3RyZWFtOwogIHR5cGVk ZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyPiBvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFz aWNfc3RyaW5nc3RyZWFtPGNoYXI+IHN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZpbGVi dWY8Y2hhcj4gZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPGNoYXI+IGlmc3RyZWFt OwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08Y2hhcj4gb2ZzdHJlYW07CiAgdHlwZWRlZiBiYXNp Y19mc3RyZWFtPGNoYXI+IGZzdHJlYW07CgogIHR5cGVkZWYgYmFzaWNfaW9zPHdjaGFyX3Q+IHdp b3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4gd3N0cmVhbWJ1ZjsKICB0eXBl ZGVmIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4gd2lzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3Ry ZWFtPHdjaGFyX3Q+IHdvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08d2NoYXJfdD4g d2lvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+IHdzdHJpbmdidWY7 CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdpc3RyaW5nc3RyZWFtOwog IHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3b3N0cmluZ3N0cmVhbTsKICB0 eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3c3RyaW5nc3RyZWFtOwogIHR5cGVk ZWYgYmFzaWNfZmlsZWJ1Zjx3Y2hhcl90PiB3ZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3Ry ZWFtPHdjaGFyX3Q+IHdpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPHdjaGFyX3Q+ IHdvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD4gd2ZzdHJlYW07Cn0K IyA3MSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn b2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4y L2JpdHMvdHlwZV90cmFpdHMuaCIgMSAzCiMgNTMgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5j bHVkZS9jKysvMy4yL2JpdHMvdHlwZV90cmFpdHMuaCIgMwojIDkwICIvdXNyL2xvY2FsL3ZvbC9n Y2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKc3RydWN0IF9fdHJ1 ZV90eXBlIHt9OwpzdHJ1Y3QgX19mYWxzZV90eXBlIHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K c3RydWN0IF9fdHlwZV90cmFpdHMgewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIHRoaXNfZHVtbXlf bWVtYmVyX211c3RfYmVfZmlyc3Q7CiMgMTEzICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUg aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUg aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFz X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFz X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7 Cn07CgoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2ln bmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190 eXBlX3RyYWl0czx1bnNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7 Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q T0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hv cnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry YWl0czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190 eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9u Zz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh aXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9h c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0 ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf dHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlw ZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1 bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50 X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVtcGxhdGUgPGNs YXNzIF9UcD4gc3RydWN0IF9Jc19pbnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50 ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRl ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl cjxjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ IHN0cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hh cj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1 Y3QgX0lzX2ludGVnZXI8d2NoYXJfdD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9f dHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVu c2lnbmVkIHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1w bGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9J bnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4g ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg X0lzX2ludGVnZXI8bG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoK dGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYg X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8 bG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0 ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9f dHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9J c19ub3JtYWxfaXRlcmF0b3IgewogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfTm9ybWFsOwp9OwoK Cm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlw ZW5hbWUgX0NvbnRhaW5lcj4gY2xhc3MgX19ub3JtYWxfaXRlcmF0b3I7Cn0KCnRlbXBsYXRlPHR5 cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4Kc3RydWN0IF9Jc19ub3JtYWxf aXRlcmF0b3I8IF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFp bmVyPiA+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfTm9ybWFsOwp9OwojIDczICIvdXNyL2xv Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMK IyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVy YXRvcl9iYXNlX3R5cGVzLmgiIDEgMwojIDY4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKCm5hbWVzcGFjZSBz dGQKewojIDgwICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKICBzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9 OwoKICBzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IGZvcndhcmRfaXRl cmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IGJpZGly ZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwoK ICBzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25h bF9pdGVyYXRvcl90YWcge307CiMgMTAwICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2F0ZWdvcnksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Rpc3RhbmNlID0gcHRyZGlm Zl90LAogICAgICAgICAgIHR5cGVuYW1lIF9Qb2ludGVyID0gX1RwKiwgdHlwZW5hbWUgX1JlZmVy ZW5jZSA9IF9UcCY+CiAgICBzdHJ1Y3QgaXRlcmF0b3IgewoKICAgICAgdHlwZWRlZiBfQ2F0ZWdv cnkgaXRlcmF0b3JfY2F0ZWdvcnk7CgogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAg ICAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwoKICAgICAgdHlwZWRlZiBfUG9p bnRlciBwb2ludGVyOwoKICAgICAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07 CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIHN0cnVjdCBpdGVyYXRv cl90cmFpdHMgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0 ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9y Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9y OjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IF9JdGVyYXRvcjo6cG9pbnRlciBwb2ludGVyOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVy YXRvcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cD4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewogICAgICB0eXBlZGVmIHJhbmRv bV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIF9U cCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAg ICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwog ICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0 czxjb25zdCBfVHAqPiB7CiAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcg aXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5 cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAq IHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7CiAgICB9OwoKCgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgX19pdGVyYXRvcl9jYXRlZ29y eShjb25zdCBfSXRlciYpCiAgICB7IHJldHVybiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0 ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgpOyB9Cgp9CiMgNzQgIi91c3IvbG9jYWwvdm9sL2djYy8z LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9j YWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVu Y3MuaCIgMSAzCiMgNjggIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8z LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyAzOSAiL3Vzci9s b2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9jb25jZXB0X2NoZWNrLmgiIDMK IyA2OSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRl cmF0b3JfYmFzZV9mdW5jcy5oIiAyIDMKCgoKCm5hbWVzcGFjZSBzdGQKewp0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5wdXRJdGVyYXRvcj4KICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J bnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRv ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKICB7 CgogICAKCiAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZm ZXJlbmNlX3R5cGUgX19uID0gMDsKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAg ICArK19fZmlyc3Q7ICsrX19uOwogICAgfQogICAgcmV0dXJuIF9fbjsKICB9Cgp0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICBfX2Rpc3Rh bmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19sYXN0LAogICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgewoKICAg CiAgICByZXR1cm4gX19sYXN0IC0gX19maXJzdDsKICB9CiMgMTExICIvdXNyL2xvY2FsL3ZvbC9n Y2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMK dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIGRpc3RhbmNlKF9J bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICB7CgogICAgcmV0 dXJuIF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmly c3QpKTsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRGlzdGFu Y2U+CiAgaW5saW5lIHZvaWQKICBfX2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2Ug X19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgewoKICAgCiAgICB3aGlsZSAoX19uLS0pICsrX19p OwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1l IF9EaXN0YW5jZT4KICBpbmxpbmUgdm9pZAogIF9fYWR2YW5jZShfQmlkaXJlY3Rpb25hbEl0ZXJh dG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0 b3JfdGFnKQogIHsKCiAgIAoKICAgIGlmIChfX24gPiAwKQogICAgICB3aGlsZSAoX19uLS0pICsr X19pOwogICAgZWxzZQogICAgICB3aGlsZSAoX19uKyspIC0tX19pOwogIH0KCnRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogIGlubGlu ZSB2b2lkCiAgX19hZHZhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19pLCBfRGlzdGFuY2Ug X19uLAogICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICB7CgogICAKICAg IF9faSArPSBfX247CiAgfQojIDE2NCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCnRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBhZHZh bmNlKF9JbnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24pCiAgewoKICAgIF9fYWR2YW5j ZShfX2ksIF9fbiwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKICB9Cgp9CiMgNzUgIi91c3Iv bG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIg MwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0 ZXJhdG9yLmgiIDEgMwojIDY4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMu Mi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDg5ICIvdXNyL2xvY2Fs L3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgY2xhc3MgcmV2ZXJzZV9pdGVyYXRvcgogICAg OiBwdWJsaWMgaXRlcmF0b3I8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0 ZXJhdG9yX2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlLAogICAgICAg ICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50 ZXIsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJh dG9yPjo6cmVmZXJlbmNlPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0b3IgY3Vy cmVudDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZl cmVuY2VfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRl cjsKCiAgICBwdWJsaWM6CgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IoKSB7IH0KCgoKCiAgICAg IGV4cGxpY2l0CiAgICAgIHJldmVyc2VfaXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBfX3gpIDogY3Vy cmVudChfX3gpIHsgfQoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0 ZXJhdG9yJiBfX3gpCiAgICAgIDogY3VycmVudChfX3guY3VycmVudCkgeyB9CgoKCgoKICAgICAg dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCBy ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAgICAgIDogY3VycmVudChfX3guYmFzZSgp KSB7IH0KCgoKCiAgICAgIGl0ZXJhdG9yX3R5cGUKICAgICAgYmFzZSgpIGNvbnN0IHsgcmV0dXJu IGN1cnJlbnQ7IH0KCgoKCgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0 CiAgICAgIHsKICAgICAgICBfSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgICAgIHJldHVy biAqLS1fX3RtcDsKICAgICAgfQoKCgoKCgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4o KSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0 ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIC0tY3VycmVudDsKICAg ICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgog ICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3IgX190 bXAgPSAqdGhpczsKICAgICAgICAtLWN1cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAg ICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLS0oKQogICAg ICB7CiAgICAgICAgKytjdXJyZW50OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoK CgogICAgICByZXZlcnNlX2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KQogICAgICB7CiAgICAgICAg cmV2ZXJzZV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAgICsrY3VycmVudDsKICAgICAg ICByZXR1cm4gX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAg ICBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gcmV2 ZXJzZV9pdGVyYXRvcihjdXJyZW50IC0gX19uKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJh dG9yJgogICAgICBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pCiAgICAgIHsKICAgICAg ICBjdXJyZW50IC09IF9fbjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAg ICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikg Y29uc3QKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihjdXJyZW50ICsgX19uKTsgfQoK CgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci09KGRpZmZlcmVuY2Vf dHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjdXJyZW50ICs9IF9fbjsKICAgICAgICByZXR1cm4g KnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oZGlm ZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0KICAgIH07 CiMgMjY5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9p dGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gs CiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQog ICAgeyByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgcmV2ZXJz ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9p dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJh c2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAog ICAgb3BlcmF0b3IhPShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAg ICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7 IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4K ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl cmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0 b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgcmV2ZXJzZV9p dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0 ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+ PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAg Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9f eCA8IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIHR5 cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBv cGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAg ICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVy biBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0 b3I+CiAgICBpbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+CiAgICBvcGVyYXRvciso dHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19u LAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194KQog ICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkgLSBfX24p OyB9CiMgMzI3ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNz IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0 b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAg ICBfQ29udGFpbmVyKiBjb250YWluZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29u dGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhY2tfaW5zZXJ0 X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkgeyB9CiMgMzUzICIv dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5o IiAzCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0odHlwZW5hbWUg X0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBjb250 YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0K CgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4g KnRoaXM7IH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygp IHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3IKICAgICAgb3Bl cmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwojIDM4NCAiL3Vzci9sb2NhbC92 b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8 X0NvbnRhaW5lcj4KICAgIGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQogICAgeyByZXR1 cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsgfQojIDM5NyAiL3Vzci9s b2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBmcm9udF9pbnNlcnRfaXRl cmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZv aWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNv bnRhaW5lcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVy X3R5cGU7CgoKICAgICAgZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXIm IF9feCkgOiBjb250YWluZXIoJl9feCkgeyB9CiMgNDIyICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4y L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgICAgIGZyb250X2luc2Vy dF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3Jl ZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7CiAgICAgICAgY29udGFpbmVyLT5wdXNoX2Zyb250KF9f dmFsdWUpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCiAgICAgIGZyb250X2luc2Vy dF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBm cm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsg fQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkgeyBy ZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgNDUzICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Nv bnRhaW5lcj4KICAgIGlubGluZSBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4KICAg IGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkKICAgIHsgcmV0dXJuIGZyb250X2luc2Vy dF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CiMgNDcwICIvdXNyL2xvY2FsL3ZvbC9nY2Mv My4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGluc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMg aXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAg IHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwogICAgICB0eXBl bmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVk ZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgoKCgogICAgICBpbnNlcnRfaXRlcmF0b3Io X0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2kpCiAgICAg IDogY29udGFpbmVyKCZfX3gpLCBpdGVyKF9faSkge30KIyA1MTIgIi91c3IvbG9jYWwvdm9sL2dj Yy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAgaW5zZXJ0 X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29u c3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBpdGVyID0gY29udGFpbmVyLT5p bnNlcnQoaXRlciwgX192YWx1ZSk7CiAgICAgICAgKytpdGVyOwogICAgICAgIHJldHVybiAqdGhp czsKICAgICAgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyBy ZXR1cm4gKnRoaXM7IH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKyso KSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0 b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwojIDU0NCAiL3Vzci9sb2NhbC92b2wv Z2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9Db250YWluZXIsIHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBpbnNl cnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0 ZXJhdG9yIF9faSkKICAgIHsKICAgICAgcmV0dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy PihfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUg X0NvbnRhaW5lcjo6aXRlcmF0b3IoX19pKSk7CiAgICB9Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgK ewoKCgoKCgoKICB1c2luZyBzdGQ6Oml0ZXJhdG9yX3RyYWl0czsKICB1c2luZyBzdGQ6Oml0ZXJh dG9yOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4K ICAgIGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAg ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZh bHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAg ICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNl PgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0b3IgX01fY3VycmVudDsKCiAgICBw dWJsaWM6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46 OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIg cG9pbnRlcjsKCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRv cigpKSB7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9J dGVyYXRvciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSXRlcj4KICAgICAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9fbm9ybWFs X2l0ZXJhdG9yPF9JdGVyLCBfQ29udGFpbmVyPiYgX19pKQogICAgICAgIDogX01fY3VycmVudChf X2kuYmFzZSgpKSB7IH0KCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3Qg eyByZXR1cm4gKl9NX2N1cnJlbnQ7IH0KCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigp IGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgog ICAgICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICAgICAg X19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFs X2l0ZXJhdG9yKF9NX2N1cnJlbnQrKyk7IH0KCgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAg ICAgb3BlcmF0b3ItLSgpIHsgLS1fTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9f bm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9p dGVyYXRvcihfTV9jdXJyZW50LS0pOyB9CgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9y W10oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1 cnJlbnRbX19uXTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0o Y29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCArPSBfX247IHJl dHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGNv bnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9p dGVyYXRvcihfTV9jdXJyZW50ICsgX19uKTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAg ICAgIG9wZXJhdG9yLT0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3Vy cmVudCAtPSBfX247IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAg ICAgb3BlcmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJl dHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQoKICAgICAgY29uc3Qg X0l0ZXJhdG9yJgogICAgICBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQogICAg fTsKIyA2NDUgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBf SXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I9 PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMs CiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFp bmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5s aW5lIGJvb2wKICBvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwg X0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8 X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID09 IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFt ZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0 b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19s aHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29u dGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhzLmJhc2UoKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAg aW5saW5lIGJvb2wKICBvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv ciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0 b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgp ICE9IF9fcmhzLmJhc2UoKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlw ZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9w ZXJhdG9yPChjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYg X19saHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9D b250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgog IGlubGluZSBib29sCiAgb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv ciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0 b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgp IDwgX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVu YW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVy YXRvcj4oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9f bGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29u dGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFzZSgpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBp bmxpbmUgYm9vbAogIG9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3Is IF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8 X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID4g X19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1l IF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRv cjw9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xo cywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250 YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFzZSgpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBp bmxpbmUgYm9vbAogIG9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y LCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRv cjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkg PD0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVu YW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVy YXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBf X2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9D b250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMuYmFzZSgp OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4K ICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh dG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVy YXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNl KCkgPj0gX19yaHMuYmFzZSgpOyB9CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JM LCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSB0eXBl bmFtZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5j ZV90eXBlCiAgb3BlcmF0b3ItKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9D b250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J dGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgLSBf X3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBf Q29udGFpbmVyPgogIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu ZXI+CiAgb3BlcmF0b3IrKHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0Nv bnRhaW5lcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFs X2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9faSkKICB7IHJldHVybiBfX25vcm1h bF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9Cn0K IyA3NiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn b2Jhc2UuaCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CiMgOTEgIi91c3IvbG9jYWwvdm9sL2djYy8z LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgaW5saW5lIHZv aWQKICAgIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpCiAg ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjE+ Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsKCgogICAgIAog ICAgIAogICAgIAogICAgIAoKICAgICAgX1ZhbHVlVHlwZTEgX190bXAgPSAqX19hOwogICAgICAq X19hID0gKl9fYjsKICAgICAgKl9fYiA9IF9fdG1wOwogICAgfQojIDExOCAiL3Vzci9sb2NhbC92 b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKF9UcCYgX19hLCBfVHAm IF9fYikKICAgIHsKCiAgICAgCgogICAgICBfVHAgX190bXAgPSBfX2E7CiAgICAgIF9fYSA9IF9f YjsKICAgICAgX19iID0gX190bXA7CiAgICB9CiMgMTQ2ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4y L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29u c3QgX1RwJiBfX2IpCiAgICB7CgogICAgIAoKICAgICAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9f YjsgcmV0dXJuIF9fYTsKICAgIH0KIyAxNjYgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVk ZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAm IF9fYikKICAgIHsKCiAgICAgCgogICAgICBpZiAoX19hIDwgX19iKSByZXR1cm4gX19iOyByZXR1 cm4gX19hOwogICAgfQojIDE4NiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8z LjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5h bWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWluKGNvbnN0IF9UcCYgX19h LCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAgaWYgKF9fY29t cChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMgMjA0ICIvdXNyL2xv Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25z dCBfVHAmCiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBf X2NvbXApCiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYSwgX19iKSkgcmV0dXJuIF9fYjsgcmV0 dXJuIF9fYTsKICAgIH0KIyAyMjEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysv My4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy LCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5 KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgX091dHB1 dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAg ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAgICAg ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy PgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgIF9PdXRwdXRJdGVyIF9f cmVzdWx0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRp ZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlOwogICAgICBmb3IgKF9EaXN0YW5jZSBf X24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgewogICAgICAgICpfX3Jlc3Vs dCA9ICpfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgICArK19fcmVzdWx0OwogICAg ICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJzdCwg Y29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICB7CiAgICAgIG1lbW1vdmUoX19y ZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAgICAg cmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0 cHV0SXRlcgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUp CiAgICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRv cl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg dHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9h dXgyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHko X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9h dXgyKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVz dWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9f bGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBf VHAqCiAgICBfX2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0 LAogICAgICAgICAgICAgICAgX1RwKiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVy biBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBf T3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUp CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+ Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0 b3IKICAgICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX091dHB1dEl0ZXIoX19jb3B5X2F1 eDIoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19yZXN1bHQuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Ry aXZpYWwoKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt ZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0 SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVl VHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojpo YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICAgICAg cmV0dXJuIF9fY29weV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSk7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgog ICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf X3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJh dG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9u aTIoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0 ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2Zp cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1 bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFs X2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9f Y29weV9uaTIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CiMg MzM5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv YmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1 dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAog ICAgIAoKCiAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0lucHV0 SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgICByZXR1cm4gX19jb3B5X25pMShfX2ZpcnN0 LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4K ICAgIGlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICBfX2NvcHlfYmFja3dhcmQoX0JpZGly ZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0LAogICAgICAgICAgICAg ICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAoX19m aXJzdCAhPSBfX2xhc3QpCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJl dHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXIsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGlubGluZSBfQmlkaXJlY3Rpb25h bEl0ZXIKICAgIF9fY29weV9iYWNrd2FyZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf dGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0 ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uOwogICAgICBmb3IgKF9fbiA9IF9fbGFzdCAtIF9fZmly c3Q7IF9fbiA+IDA7IC0tX19uKQogICAgICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OwogICAg ICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRp cmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAg dHlwZW5hbWUgX0Jvb2xUeXBlPgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaAog ICAgewogICAgICBzdGF0aWMgX0JpZGlyZWN0aW9uYWxJdGVyMgogICAgICBjb3B5KF9CaWRpcmVj dGlvbmFsSXRlcjEgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAg ICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCkKICAgICAgewogICAgICAgIHJldHVybiBf X2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9y X2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3Ry dWVfdHlwZT4KICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29weShjb25zdCBfVHAqIF9f Zmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAg Y29uc3QgcHRyZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICAgIG1lbW1vdmUo X19yZXN1bHQgLSBfTnVtLCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIF9OdW0pOwogICAgICAgIHJl dHVybiBfX3Jlc3VsdCAtIF9OdW07CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4KICAgIHN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1Rw KiwgX190cnVlX3R5cGU+CiAgICB7CiAgICAgIHN0YXRpYyBfVHAqCiAgICAgIGNvcHkoY29uc3Qg X1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAgICAgewog ICAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVl X3R5cGU+CiAgICAgICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICAg IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBp bmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2F1eChfQkkxIF9fZmlyc3QsIF9CSTEgX19s YXN0LCBfQkkyIF9fcmVzdWx0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90 cmFpdHM8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTI+Ojp2YWx1ZV90eXBlPgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yIF9U cml2aWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIs IF9Ucml2aWFsPgogICAgICAgICAgICAgICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jl c3VsdCk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgog ICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9y KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9C STIoX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LmJhc2UoKSkp OyB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5l IF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19m aXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHlfYmFj a3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlIDx0eXBl bmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNr d2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX190 cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRv cjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9v dXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQs IF9fTm9ybWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUg X0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0 ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9f Tm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0 b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwogICAgfQojIDQ3NyAiL3Vzci9s b2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwog IHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIK ICAgIGNvcHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3Vs dCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lz X25vcm1hbF9pdGVyYXRvcjxfQkkxPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9f Y29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jl c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19Ob3JtYWwoKSk7CiAgICB9CiMgNTA5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh cmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBmaWxsKF9Gb3J3YXJkSXRlciBfX2Zp cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAg IAoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICpf X2ZpcnN0ID0gX192YWx1ZTsKICAgIH0KIyA1MzEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5j bHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf T3V0cHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVy CiAgICBmaWxsX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9f dmFsdWUpCiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2Zp cnN0KQogICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAg ICB9CgoKCiAgaW5saW5lIHZvaWQKICBmaWxsKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHVuc2ln bmVkIGNoYXIqIF9fbGFzdCwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogIHsKICAgIHVuc2ln bmVkIGNoYXIgX190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgX190bXAsIF9fbGFzdCAt IF9fZmlyc3QpOwogIH0KCiAgaW5saW5lIHZvaWQKICBmaWxsKHNpZ25lZCBjaGFyKiBfX2ZpcnN0 LCBzaWduZWQgY2hhciogX19sYXN0LCBjb25zdCBzaWduZWQgY2hhciYgX19jKQogIHsKICAgIHNp Z25lZCBjaGFyIF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVu c2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUgdm9p ZAogIGZpbGwoY2hhciogX19maXJzdCwgY2hhciogX19sYXN0LCBjb25zdCBjaGFyJiBfX2MpCiAg ewogICAgY2hhciBfX3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1 bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1NpemU+CiAgICBpbmxpbmUgdW5zaWduZWQgY2hhcioKICAgIGZpbGxfbih1bnNp Z25lZCBjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykK ICAgIHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogICAgICByZXR1 cm4gX19maXJzdCArIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+CiAgICBp bmxpbmUgc2lnbmVkIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBj b25zdCBzaWduZWQgY2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmlyc3QsIF9fZmlyc3Qg KyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBjaGFyKgogICAgZmlsbF9uKGNoYXIqIF9fZmly c3QsIF9TaXplIF9fbiwgY29uc3QgY2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmlyc3Qs IF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQoj IDYwNiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn b2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w dXRJdGVyMj4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2go X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBf SW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAg ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0MSA9PSAqX19maXJzdDIp IHsKICAgICAgICArK19fZmlyc3QxOwogICAgICAgICsrX19maXJzdDI7CiAgICAgIH0KICAgICAg cmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIp OwogICAgfQojIDY0MCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBl bmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIHBhaXI8X0lu cHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEs IF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwK ICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAg CiAgICAgCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVk KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICsrX19maXJzdDE7CiAgICAgICAgKytf X2ZpcnN0MjsKICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRl cjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICB9CiMgNjY4ICIvdXNyL2xvY2FsL3ZvbC9nY2Mv My4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgaW5saW5lIGJvb2wK ICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgog ICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIp CiAgICAgICAgaWYgKCEoKl9fZmlyc3QxID09ICpfX2ZpcnN0MikpCiAgICAgICAgICByZXR1cm4g ZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQojIDY5OSAiL3Vzci9sb2NhbC92b2wvZ2Nj LzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFy eVByZWRpY2F0ZT4KICAgIGlubGluZSBib29sCiAgICBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0 MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAog ICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAg ICAKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2Zp cnN0MikKICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQog ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KIyA3MzIgIi91 c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+ CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0 MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1 dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAK ICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmly c3QyICE9IF9fbGFzdDIKICAgICAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAg ICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgICAgIHJldHVybiB0cnVlOwog ICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7 CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g X19sYXN0MjsKICAgIH0KIyA3NjcgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysv My4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy MSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAg bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0 MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21w YXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9 IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MgogICAgICAgICAgICA7ICsrX19maXJzdDEs ICsrX19maXJzdDIpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkK ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19m aXJzdDEpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiBfX2Zp cnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7CiAgICB9CgogIGlubGluZSBi b29sCiAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgdW5zaWduZWQgY2hhciogX19maXJz dDEsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9f bGFzdDIpCiAgewogICAgY29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsK ICAgIGNvbnN0IHNpemVfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgICBjb25zdCBp bnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xl bjIpKTsKICAgIHJldHVybiBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4xIDwg X19sZW4yOwogIH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25z dCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKICB7Cgog ICAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKChjb25zdCBzaWduZWQgY2hhciopIF9f Zmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQg Y2hhciopIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0 IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7CgoKCgoKCiAgfQoKfQojIDU1ICIvdXNy L2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDIgMwojIDEgIi91c3Iv bG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwoj IDg0ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxv Yy5oIiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvY2Fzc2Vy dCIgMSAzCiMgNDcgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2Nhc3Nl cnQiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRl L2Fzc2VydC5oIiAzCmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9f Y29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVu Y3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4 dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hh ciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IF9fbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq X19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7 CgoKCgpleHRlcm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0 IGNoYXIgKl9fZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19ub3JldHVybl9fKSk7CgoKfQojIDQ5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUv YysrLzMuMi9jYXNzZXJ0IiAyIDMKIyA4NSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMu Mi9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9sb2Nh bC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAi L3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uX2RlZmluZXMu aCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMv ZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFk X2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgog IHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlw ZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19z KTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv aWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog IF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93 X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1l X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBf X3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQoj IDg2ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxv Yy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF90aHJlYWRzLmgiIDEgMwojIDU0ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF90aHJlYWRzLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIHN0cnVj dCBfUmVmY291bnRfQmFzZQogIHsKCiAgICB0eXBlZGVmIHNpemVfdCBfUkNfdDsKCgogICAgdm9s YXRpbGUgX1JDX3QgX01fcmVmX2NvdW50OwoKCiAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9yZWZf Y291bnRfbG9jazsKCiAgICBfUmVmY291bnRfQmFzZShfUkNfdCBfX24pIDogX01fcmVmX2NvdW50 KF9fbikKICAgIHsKCiAgICAgIF9fZ3RocmVhZF9tdXRleF90IF9fdG1wID0gezAsIDAsIDAsIFBU SFJFQURfTVVURVhfVElNRURfTlAsIHsgMCwgMCB9fTsKICAgICAgX01fcmVmX2NvdW50X2xvY2sg PSBfX3RtcDsKCgoKCgogICAgfQoKICAgIHZvaWQKICAgIF9NX2luY3IoKQogICAgewogICAgICBf X2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgICArK19NX3JlZl9j b3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwog ICAgfQoKICAgIF9SQ190CiAgICBfTV9kZWNyKCkKICAgIHsKICAgICAgX19ndGhyZWFkX211dGV4 X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgdm9sYXRpbGUgX1JDX3QgX190bXAgPSAt LV9NX3JlZl9jb3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50 X2xvY2spOwogICAgICByZXR1cm4gX190bXA7CiAgICB9CiAgfTsKIyAxMDkgIi91c3IvbG9jYWwv dm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHRlbXBs YXRlPGludCBfX2R1bW15PgogICAgc3RydWN0IF9Td2FwX2xvY2tfc3RydWN0CiAgICB7IHN0YXRp YyBfX2d0aHJlYWRfbXV0ZXhfdCBfU19zd2FwX2xvY2s7IH07CgogIHRlbXBsYXRlPGludCBfX2R1 bW15PgogICAgX19ndGhyZWFkX211dGV4X3QKICAgIF9Td2FwX2xvY2tfc3RydWN0PF9fZHVtbXk+ OjpfU19zd2FwX2xvY2sgPSB7MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAwLCAw IH19OwoKCgogIGlubGluZSB1bnNpZ25lZCBsb25nCiAgX0F0b21pY19zd2FwKHVuc2lnbmVkIGxv bmcgKiBfX3AsIHVuc2lnbmVkIGxvbmcgX19xKQogIHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2Nr KCZfU3dhcF9sb2NrX3N0cnVjdDwwPjo6X1Nfc3dhcF9sb2NrKTsKICAgIHVuc2lnbmVkIGxvbmcg X19yZXN1bHQgPSAqX19wOwogICAgKl9fcCA9IF9fcTsKICAgIF9fZ3RocmVhZF9tdXRleF91bmxv Y2soJl9Td2FwX2xvY2tfc3RydWN0PDA+OjpfU19zd2FwX2xvY2spOwogICAgcmV0dXJuIF9fcmVz dWx0OwogIH0KIyAxNTEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX3RocmVhZHMuaCIgMwogIHN0cnVjdCBfU1RMX211dGV4X2xvY2sKICB7CgoKCgoKICAg IF9fZ3RocmVhZF9tdXRleF90IF9NX2xvY2s7CgogICAgdm9pZAogICAgX01faW5pdGlhbGl6ZSgp CiAgICB7CiMgMTg0ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF90aHJlYWRzLmgiIDMKICAgIH0KCiAgICB2b2lkCiAgICBfTV9hY3F1aXJlX2xvY2soKQog ICAgewoKCgogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fbG9jayk7CiAgICB9CgogICAg dm9pZAogICAgX01fcmVsZWFzZV9sb2NrKCkKICAgIHsKCgoKICAgICAgX19ndGhyZWFkX211dGV4 X3VubG9jaygmX01fbG9jayk7CiAgICB9CiAgfTsKIyAyMjAgIi91c3IvbG9jYWwvdm9sL2djYy8z LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHN0cnVjdCBfU1RMX2F1 dG9fbG9jawogIHsKICAgIF9TVExfbXV0ZXhfbG9jayYgX01fbG9jazsKCiAgICBfU1RMX2F1dG9f bG9jayhfU1RMX211dGV4X2xvY2smIF9fbG9jaykgOiBfTV9sb2NrKF9fbG9jaykKICAgIHsgX01f bG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQoKICAgIH5fU1RMX2F1dG9fbG9jaygpIHsgX01fbG9j ay5fTV9yZWxlYXNlX2xvY2soKTsgfQoKICBwcml2YXRlOgogICAgdm9pZCBvcGVyYXRvcj0oY29u c3QgX1NUTF9hdXRvX2xvY2smKTsKICAgIF9TVExfYXV0b19sb2NrKGNvbnN0IF9TVExfYXV0b19s b2NrJik7CiAgfTsKCn0KIyA4NyAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8z LjIvYml0cy9zdGxfYWxsb2MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA5OCAiL3Vzci9sb2Nh bC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMwogIGNsYXNz IF9fbmV3X2FsbG9jCiAgewogIHB1YmxpYzoKICAgIHN0YXRpYyB2b2lkKgogICAgYWxsb2NhdGUo c2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIDo6b3BlcmF0b3IgbmV3KF9fbik7IH0KCiAgICBzdGF0 aWMgdm9pZAogICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCkKICAgIHsgOjpvcGVyYXRv ciBkZWxldGUoX19wKTsgfQogIH07CiMgMTIxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGUgPGludCBfX2luc3Q+CiAg ICBjbGFzcyBfX21hbGxvY19hbGxvY190ZW1wbGF0ZQogICAgewogICAgcHJpdmF0ZToKICAgICAg c3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6ZV90KTsKICAgICAgc3RhdGljIHZvaWQqIF9T X29vbV9yZWFsbG9jKHZvaWQqLCBzaXplX3QpOwogICAgICBzdGF0aWMgdm9pZCAoKiBfX21hbGxv Y19hbGxvY19vb21faGFuZGxlcikoKTsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyB2b2lkKgog ICAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgdm9pZCogX19yZXN1bHQg PSBtYWxsb2MoX19uKTsKICAgICAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19v b21fbWFsbG9jKF9fbik7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CgogICAgICBz dGF0aWMgdm9pZAogICAgICBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICkKICAgICAgeyBm cmVlKF9fcCk7IH0KCiAgICAgIHN0YXRpYyB2b2lkKgogICAgICByZWFsbG9jYXRlKHZvaWQqIF9f cCwgc2l6ZV90ICwgc2l6ZV90IF9fbmV3X3N6KQogICAgICB7CiAgICAgICAgdm9pZCogX19yZXN1 bHQgPSByZWFsbG9jKF9fcCwgX19uZXdfc3opOwogICAgICAgIGlmICgwID09IF9fcmVzdWx0KSBf X3Jlc3VsdCA9IF9TX29vbV9yZWFsbG9jKF9fcCwgX19uZXdfc3opOwogICAgICAgIHJldHVybiBf X3Jlc3VsdDsKICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hhbmRs ZXIodm9pZCAoKl9fZikoKSkpKCkKICAgICAgewogICAgICAgIHZvaWQgKCogX19vbGQpKCkgPSBf X21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBfX21hbGxvY19hbGxvY19vb21faGFu ZGxlciA9IF9fZjsKICAgICAgICByZXR1cm4oX19vbGQpOwogICAgICB9CiAgICB9OwoKCiAgdGVt cGxhdGUgPGludCBfX2luc3Q+CiAgICB2b2lkICgqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9f aW5zdD46Ol9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpID0gMDsKCiAgdGVtcGxhdGUgPGlu dCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6 X1Nfb29tX21hbGxvYyhzaXplX3QgX19uKQogICAgewogICAgICB2b2lkICgqIF9fbXlfbWFsbG9j X2hhbmRsZXIpKCk7CiAgICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgICAgZm9yICg7OykKICAgICAg ICB7CiAgICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hh bmRsZXI7CiAgICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKQogICAgICAgICAg ICBzdGQ6Ol9fdGhyb3dfYmFkX2FsbG9jKCk7CiAgICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRs ZXIpKCk7CiAgICAgICAgICBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgICAgaWYgKF9f cmVzdWx0KQogICAgICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgICAgIH0KICAgIH0KCiAg dGVtcGxhdGUgPGludCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19tYWxsb2NfYWxsb2NfdGVtcGxh dGU8X19pbnN0Pjo6X1Nfb29tX3JlYWxsb2Modm9pZCogX19wLCBzaXplX3QgX19uKQogICAgewog ICAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgIHZvaWQqIF9fcmVzdWx0 OwoKICAgICAgZm9yICg7OykKICAgICAgICB7CiAgICAgICAgICBfX215X21hbGxvY19oYW5kbGVy ID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgICBpZiAoMCA9PSBfX215X21h bGxvY19oYW5kbGVyKQogICAgICAgICAgICBzdGQ6Ol9fdGhyb3dfYmFkX2FsbG9jKCk7CiAgICAg ICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAgICBfX3Jlc3VsdCA9IHJlYWxs b2MoX19wLCBfX24pOwogICAgICAgICAgaWYgKF9fcmVzdWx0KQogICAgICAgICAgICByZXR1cm4o X19yZXN1bHQpOwogICAgICAgIH0KICAgIH0KCgoKCgoKICB0eXBlZGVmIF9fbmV3X2FsbG9jIF9f bWVtX2ludGVyZmFjZTsKIyAyMTkgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysv My4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv Yz4KICBjbGFzcyBfX3NpbXBsZV9hbGxvYwogIHsKICBwdWJsaWM6CiAgICBzdGF0aWMgX1RwKiBh bGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4gMCA9PSBfX24gPyAwIDogKF9UcCopIF9B bGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHApKTsgfQoKICAgIHN0YXRpYyBfVHAqIGFs bG9jYXRlKCkKICAgIHsgcmV0dXJuIChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKHNpemVvZiAoX1Rw KSk7IH0KCiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQog ICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAo X1RwKSk7IH0KCiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wKQogICAgeyBfQWxs b2M6OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkpOyB9CiAgfTsKIyAyNTEgIi91c3IvbG9j YWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1w bGF0ZSA8Y2xhc3MgX0FsbG9jPgogIGNsYXNzIF9fZGVidWdfYWxsb2MKICB7CiAgcHJpdmF0ZToK ICAgIGVudW0ge19TX2V4dHJhID0gOH07CgoKICBwdWJsaWM6CgogICAgc3RhdGljIHZvaWQqIGFs bG9jYXRlKHNpemVfdCBfX24pCiAgICB7CiAgICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9B bGxvYzo6YWxsb2NhdGUoX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgICAqKHNpemVfdCopX19y ZXN1bHQgPSBfX247CiAgICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQpIF9TX2V4dHJhOwogICAg fQoKICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAg ewogICAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAg ICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoKihzaXplX3QqKV9fcmVhbF9wID09IF9fbikgPyAwIDog KF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19uIiwgIi91c3IvbG9jYWwv dm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiLCAyNzAsIF9fUFJF VFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgICBfQWxsb2M6OmRlYWxsb2NhdGUoX19yZWFsX3As IF9fbiArIChpbnQpIF9TX2V4dHJhKTsKICAgIH0KCiAgICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0 ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KQogICAgewogICAg ICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICAgKHN0 YXRpY19jYXN0PHZvaWQ+ICgoKihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6KSA/IDAgOiAo X19hc3NlcnRfZmFpbCAoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeiIsICIvdXNyL2xv Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiwgMjc3LCBf X1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAgY2hhciogX19yZXN1bHQgPSAoY2hhciop CiAgICAgICAgX0FsbG9jOjpyZWFsbG9jYXRlKF9fcmVhbF9wLCBfX29sZF9zeiArIChpbnQpIF9T X2V4dHJhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3ogKyAo aW50KSBfU19leHRyYSk7CiAgICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbmV3X3N6OwogICAg ICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICAgIH0KICB9OwojIDMyNCAiL3Vz ci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMwp0 ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICBjbGFzcyBfX2RlZmF1bHRfYWxs b2NfdGVtcGxhdGUKICB7CiAgcHJpdmF0ZToKICAgIGVudW0ge19BTElHTiA9IDh9OwogICAgZW51 bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICBlbnVtIHtfTkZSRUVMSVNUUyA9IF9NQVhfQllURVMg LyBfQUxJR059OwoKICAgIHVuaW9uIF9PYmoKICAgIHsKICAgICAgdW5pb24gX09iaiogX01fZnJl ZV9saXN0X2xpbms7CiAgICAgIGNoYXIgX01fY2xpZW50X2RhdGFbMV07CiAgICB9OwoKICAgIHN0 YXRpYyBfT2JqKiB2b2xhdGlsZSBfU19mcmVlX2xpc3RbX05GUkVFTElTVFNdOwoKCiAgICBzdGF0 aWMgY2hhciogX1Nfc3RhcnRfZnJlZTsKICAgIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICAg IHN0YXRpYyBzaXplX3QgX1NfaGVhcF9zaXplOwoKICAgIHN0YXRpYyBfU1RMX211dGV4X2xvY2sg X1Nfbm9kZV9hbGxvY2F0b3JfbG9jazsKCiAgICBzdGF0aWMgc2l6ZV90CiAgICBfU19yb3VuZF91 cChzaXplX3QgX19ieXRlcykKICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsgKHNpemVfdCkgX0FM SUdOLTEpICYgfigoc2l6ZV90KSBfQUxJR04gLSAxKSk7IH0KCiAgICBzdGF0aWMgc2l6ZV90CiAg ICBfU19mcmVlbGlzdF9pbmRleChzaXplX3QgX19ieXRlcykKICAgIHsgcmV0dXJuICgoKF9fYnl0 ZXMpICsgKHNpemVfdClfQUxJR04tMSkvKHNpemVfdClfQUxJR04gLSAxKTsgfQoKCgogICAgc3Rh dGljIHZvaWQqCiAgICBfU19yZWZpbGwoc2l6ZV90IF9fbik7CgoKCiAgICBzdGF0aWMgY2hhcioK ICAgIF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7CgoKCiAgICBj bGFzcyBfTG9jawogICAgewogICAgcHVibGljOgogICAgICBfTG9jaygpIHsgaWYgKF9fdGhyZWFk cykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQogICAgICB+X0xv Y2soKSB7IGlmIChfX3RocmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01fcmVsZWFzZV9s b2NrKCk7IH0KICAgIH0gX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsKICAgIGZyaWVuZCBj bGFzcyBfTG9jazsKCiAgcHVibGljOgoKICAgIHN0YXRpYyB2b2lkKgogICAgYWxsb2NhdGUoc2l6 ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCogX19yZXQgPSAwOwoKICAgICAgaWYgKF9fbiA+IChz aXplX3QpIF9NQVhfQllURVMpCiAgICAgICAgX19yZXQgPSBfX21lbV9pbnRlcmZhY2U6OmFsbG9j YXRlKF9fbik7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfT2JqKiB2b2xhdGlsZSog X19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QKICAgICAgICAgICAgKyBfU19mcmVlbGlzdF9p bmRleChfX24pOwoKCgogICAgICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwogICAgICAgICAg X09iaiogX19yZXN0cmljdF9fIF9fcmVzdWx0ID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAg aWYgKF9fcmVzdWx0ID09IDApCiAgICAgICAgICAgIF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5k X3VwKF9fbikpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKl9f bXlfZnJlZV9saXN0ID0gX19yZXN1bHQgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAg ICAgX19yZXQgPSBfX3Jlc3VsdDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu IF9fcmV0OwogICAgfTsKCgogICAgc3RhdGljIHZvaWQKICAgIGRlYWxsb2NhdGUodm9pZCogX19w LCBzaXplX3QgX19uKQogICAgewogICAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykK ICAgICAgICBfX21lbV9pbnRlcmZhY2U6OmRlYWxsb2NhdGUoX19wLCBfX24pOwogICAgICBlbHNl CiAgICAgICAgewogICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0CiAgICAg ICAgICAgID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKICAgICAgICAg IF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CgoKCiAgICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFu Y2U7CiAgICAgICAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7 CiAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3E7CiAgICAgICAgfQogICAgfQoKICAgIHN0 YXRpYyB2b2lkKgogICAgcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6 ZV90IF9fbmV3X3N6KTsKICB9OwoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2lu c3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfX2RlZmF1bHRfYWxsb2Nf dGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwKICAgICAgICAgICAgICAgY29uc3QgX19kZWZh dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCiAgICB7IHJldHVybiB0cnVl OyB9CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk cywgX19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0 ZTxfX3RocmVhZHMsIF9faW5zdD4mKQogICAgeyByZXR1cm4gZmFsc2U7IH0KCgoKCgogIHRlbXBs YXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2hhcioKICAgIF9fZGVmYXVsdF9h bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBf X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQmIF9fbm9ianMpCiAgICB7CiAgICAgIGNoYXIqIF9fcmVzdWx0Owog ICAgICBzaXplX3QgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgIHNpemVf dCBfX2J5dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgICBpZiAo X19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpCiAgICAgIHsKICAgICAgICBfX3Jlc3VsdCA9 IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwog ICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19ieXRlc19s ZWZ0ID49IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRl c19sZWZ0L19fc2l6ZSk7CiAgICAgICAgICBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2Jq czsKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgIF9TX3N0YXJ0 X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAg ICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0 ID0KICAgICAgICAgICAgMiAqIF9fdG90YWxfYnl0ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3Np emUgPj4gNCk7CgogICAgICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+IDApCiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPQogICAgICAgICAg ICAgICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19ieXRlc19sZWZ0KTsKCiAg ICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9 ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSAoX09iaiop X1Nfc3RhcnRfZnJlZTsKICAgICAgICAgICAgfQogICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChj aGFyKikgX19tZW1faW50ZXJmYWNlOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CiAgICAgICAg ICBpZiAoMCA9PSBfU19zdGFydF9mcmVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6 ZV90IF9faTsKICAgICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAg ICAgICAgICAgICAgX09iaiogX19wOwoKCgogICAgICAgICAgICAgIF9faSA9IF9fc2l6ZTsKICAg ICAgICAgICAgICBmb3IgKDsgX19pIDw9IChzaXplX3QpIF9NQVhfQllURVM7IF9faSArPSAoc2l6 ZV90KSBfQUxJR04pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbXlfZnJl ZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19pKTsKICAgICAgICAg ICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAgICAgICBpZiAoMCAh PSBfX3ApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgKl9fbXlf ZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAgICAg ICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7CiAgICAgICAgICAgICAgICAgICAgICBfU19l bmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2k7CiAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CgoKICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSAwOwogICAg ICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19tZW1faW50ZXJmYWNlOjphbGxvY2F0 ZShfX2J5dGVzX3RvX2dldCk7CgoKICAgICAgICAgICAgfQogICAgICAgICAgX1NfaGVhcF9zaXpl ICs9IF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVl ICsgX19ieXRlc190b19nZXQ7CiAgICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXpl LCBfX25vYmpzKSk7CiAgICAgICAgfQogICAgfQoKCgoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVh ZHMsIGludCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f dGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24pCiAgICB7CiAgICAgIGludCBf X25vYmpzID0gMjA7CiAgICAgIGNoYXIqIF9fY2h1bmsgPSBfU19jaHVua19hbGxvYyhfX24sIF9f bm9ianMpOwogICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgIF9PYmoq IF9fcmVzdWx0OwogICAgICBfT2JqKiBfX2N1cnJlbnRfb2JqOwogICAgICBfT2JqKiBfX25leHRf b2JqOwogICAgICBpbnQgX19pOwoKICAgICAgaWYgKDEgPT0gX19ub2JqcykgcmV0dXJuKF9fY2h1 bmspOwogICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2lu ZGV4KF9fbik7CgoKICAgICAgX19yZXN1bHQgPSAoX09iaiopX19jaHVuazsKICAgICAgKl9fbXlf ZnJlZV9saXN0ID0gX19uZXh0X29iaiA9IChfT2JqKikoX19jaHVuayArIF9fbik7CiAgICAgIGZv ciAoX19pID0gMTsgOyBfX2krKykgewogICAgICAgIF9fY3VycmVudF9vYmogPSBfX25leHRfb2Jq OwogICAgICAgIF9fbmV4dF9vYmogPSAoX09iaiopKChjaGFyKilfX25leHRfb2JqICsgX19uKTsK ICAgICAgICBpZiAoX19ub2JqcyAtIDEgPT0gX19pKSB7CiAgICAgICAgICBfX2N1cnJlbnRfb2Jq IC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gMDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxz ZSB7CiAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0 X29iajsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KCgog IHRlbXBsYXRlPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CiAgICB2b2lkKgogICAgX19kZWZhdWx0 X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgX19vbGRfc3osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IF9fbmV3X3N6KQogICAgewogICAgICB2b2lkKiBfX3Jlc3VsdDsK ICAgICAgc2l6ZV90IF9fY29weV9zejsKCiAgICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9N QVhfQllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0 dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikpOwogICAgICB9CiAgICAgIGlmIChfU19yb3VuZF91 cChfX29sZF9zeikgPT0gX1Nfcm91bmRfdXAoX19uZXdfc3opKSByZXR1cm4oX19wKTsKICAgICAg X19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19zeik7CiAgICAgIF9fY29weV9zeiA9IF9fbmV3X3N6 ID4gX19vbGRfc3o/IF9fb2xkX3N6IDogX19uZXdfc3o7CiAgICAgIG1lbWNweShfX3Jlc3VsdCwg X19wLCBfX2NvcHlfc3opOwogICAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOwogICAgICBy ZXR1cm4oX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9f aW5zdD4KICBfU1RMX211dGV4X2xvY2sKICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJl YWRzLCBfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRvcl9sb2NrCiAgPSB7IHswLCAwLCAwLCBQVEhS RUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAgfX0gfTsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVh ZHMsIGludCBfX2luc3Q+CiAgY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk cywgX19pbnN0Pjo6X1Nfc3RhcnRfZnJlZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRz LCBpbnQgX19pbnN0PgogIGNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMs IF9faW5zdD46Ol9TX2VuZF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGlu dCBfX2luc3Q+CiAgc2l6ZV90IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9f aW5zdD46Ol9TX2hlYXBfc2l6ZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQg X19pbnN0PgogIHR5cGVuYW1lIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9f aW5zdD46Ol9PYmoqIHZvbGF0aWxlCiAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk cywgX19pbnN0Pjo6X1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCiAgdHlwZWRlZiBfX2RlZmF1 bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwgMD4gX19hbGxvYzsKICB0eXBlZGVmIF9fZGVmYXVsdF9h bGxvY190ZW1wbGF0ZTxmYWxzZSwgMD4gX19zaW5nbGVfY2xpZW50X2FsbG9jOwojIDYxMyAiL3Vz ci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMwp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBhbGxvY2F0b3IKewogIHR5cGVkZWYgX19hbGxvYyBf QWxsb2M7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJk aWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYg Y29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgdHlw ZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFs bG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9OwoKICBhbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgYWxs b2NhdG9yKGNvbnN0IGFsbG9jYXRvciYpIHRocm93KCkge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1Rw MT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkge30KICB+YWxsb2Nh dG9yKCkgdGhyb3coKSB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3Qg eyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2Ug X194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoKCiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUg X19uLCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBfX24gIT0gMCA/IHN0YXRpY19jYXN0 PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgICAgICAg ICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlw ZSBfX24pCiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsg fQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpCiAgICB7IHJldHVybiBzaXpl X3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNv bnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShw b2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGU8PgpjbGFzcyBhbGxvY2F0 b3I8dm9pZD4gewpwdWJsaWM6CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYg cHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAgdHlw ZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBl OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFs bG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNz IF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0 IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx LCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4m LCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KIyA2OTUgIi91c3Iv bG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVt cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX19hbGxvY2F0b3IKewogIF9B bGxvYyBfX3VuZGVybHlpbmdfYWxsb2M7CgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0 eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7 CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVy ZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1Rw IHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAg IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9OwoKICBfX2FsbG9j YXRvcigpIHRocm93KCkge30KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19hKSB0 aHJvdygpCiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7 fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPgogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9y PF9UcDEsIF9BbGxvYz4mIF9fYSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19h Ll9fdW5kZXJseWluZ19hbGxvYykge30KICB+X19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBv aW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29u c3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZf X3g7IH0KCgogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKSB7 CiAgICByZXR1cm4gX19uICE9IDAKICAgICAgICA/IHN0YXRpY19jYXN0PF9UcCo+KF9fdW5kZXJs eWluZ19hbGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgOiAwOwogIH0K CgogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX191 bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0KCiAg c2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gc2l6ZV90KC0x KSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBf VHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2b2lkIGRlc3Ryb3kocG9pbnRl ciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNz IF9fYWxsb2NhdG9yPHZvaWQsIF9BbGxvYz4gewogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsK ICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkKiBwb2lu dGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQg dmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAg dHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07Cn07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg X19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBfX2ExLl9fdW5k ZXJseWluZ19hbGxvYyA9PSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fYWxs b2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf X2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlp bmdfYWxsb2MgIT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCgoKCgoKCnRlbXBsYXRlIDxp bnQgaW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1w bGF0ZTxpbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2Nf dGVtcGxhdGU8aW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxpbnQgX19pbnN0 PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9f aW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBs YXRlPF9faW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9j PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJl dHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv ciE9KGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiBmYWxzZTsKfQojIDg0MCAi L3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIg Mwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0FsbG9jX3Ry YWl0cwp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAgdHlw ZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIgYWxs b2NhdG9yX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpj b25zdCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNz OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxsb2NfdHJhaXRz PF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNl bGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fYWxsb2M+IF9BbGxv Y190eXBlOwogIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAs IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wg X1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19t YWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19h bGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9y X3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2lu c3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f dGhyZWFkcywgX19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3Mg PSB0cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVt cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVk ZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBf X2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlYnVnX2FsbG9j PF9BbGxvYz4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsK ICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0Fs bG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9j PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1Rw MSwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAg ICAgICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4g Pgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVm IF9fc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9B bGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1w bGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg Y2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8 X1RwLAogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RociwgX19p bnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAg dHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro cixfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8 X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBh bGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBjbGFz cyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1RwMSwgX19k ZWJ1Z19hbGxvYzxfQWxsb2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2Vs ZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxf QWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdf YWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKCiAgZXh0ZXJuIHRlbXBsYXRl IGNsYXNzIGFsbG9jYXRvcjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9y PHdjaGFyX3Q+OwoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVt cGxhdGU8dHJ1ZSwgMD47Cgp9CiMgNTYgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9j KysvMy4yL21lbW9yeSIgMiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDY3ICIvdXNyL2xvY2FsL3ZvbC9nY2Mv My4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwpuYW1lc3BhY2Ugc3Rk CnsKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CiAgICBpbmxpbmUgdm9p ZAogICAgX0NvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKQogICAgeyBuZXcg KHN0YXRpY19jYXN0PHZvaWQqPihfX3ApKSBfVDEoX192YWx1ZSk7IH0KCgoKCgoKCiAgdGVtcGxh dGUgPGNsYXNzIF9UMT4KICAgIGlubGluZSB2b2lkCiAgICBfQ29uc3RydWN0KF9UMSogX19wKQog ICAgeyBuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihfX3ApKSBfVDEoKTsgfQojIDk4ICIvdXNyL2xv Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwog IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9f ZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9f bGFzdCwgX19mYWxzZV90eXBlKQogICAgeyBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19f Zmlyc3QpIF9EZXN0cm95KCYqX19maXJzdCk7IH0KIyAxMTIgIi91c3IvbG9jYWwvdm9sL2djYy8z LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19kZXN0cm95X2F1eChf Rm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yLCBfX3RydWVfdHlwZSkKICAgIHsgfQoK CgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX0Rlc3Ryb3ko X1RwKiBfX3BvaW50ZXIpCiAgICB7IF9fcG9pbnRlci0+fl9UcCgpOyB9CiMgMTM0ICIvdXNyL2xv Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwog IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9E ZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qp CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRl cmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlX3R5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVfdHlwZT46Omhhc190cml2 aWFsX2Rlc3RydWN0b3IKICAgICAgICAgICAgICAgICAgICAgICBfSGFzX3RyaXZpYWxfZGVzdHJ1 Y3RvcjsKCiAgICAgIF9fZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfSGFzX3RyaXZpYWxf ZGVzdHJ1Y3RvcigpKTsKICAgIH0KfQojIDU3ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1 ZGUvYysrLzMuMi9tZW1vcnkiIDIgMwoKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDY2ICIvdXNyL2xvY2Fs L3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMK bmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h bWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxp emVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gY29weShfX2ZpcnN0 LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0 eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXpl ZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBf X2N1ciA9IF9fcmVzdWx0OwogICAgICB0cnkgewogICAgICAgIGZvciAoIDsgX19maXJzdCAhPSBf X2xhc3Q7ICsrX19maXJzdCwgKytfX2N1cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwg Kl9fZmlyc3QpOwogICAgICAgIHJldHVybiBfX2N1cjsKICAgICAgfQogICAgICBjYXRjaCguLi4p CiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsKICAgICAgICAg IHRocm93OwogICAgICAgIH0KICAgIH0KIyAxMDYgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5j bHVkZS9jKysvMy4yL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSBfRm9yd2Fy ZEl0ZXIKICAgIHVuaW5pdGlhbGl6ZWRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0 ZXIgX19sYXN0LCBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19Q T0RfdHlwZSBfSXNfUE9EOwogICAgICByZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9f Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9Jc19QT0QoKSk7CiAgICB9CgogIGlubGluZSBjaGFy KgogIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCBjaGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBf X2xhc3QsIGNoYXIqIF9fcmVzdWx0KQogIHsKICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3Qs IF9fbGFzdCAtIF9fZmlyc3QpOwogICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmly c3QpOwogIH0KCiAgaW5saW5lIHdjaGFyX3QqCiAgdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IHdj aGFyX3QqIF9fZmlyc3QsIGNvbnN0IHdjaGFyX3QqIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgd2NoYXJfdCogX19yZXN1bHQpCiAgewogICAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwg c2l6ZW9mKHdjaGFyX3QpICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAgIHJldHVybiBfX3Jlc3Vs dCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh cmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmluaXRpYWxpemVk X2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX3RydWVfdHlwZSkKICAg IHsgZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv cndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmls bF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkKICAgIHsK ICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICAgICAgdHJ5IHsKICAgICAgICBm b3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipf X2N1ciwgX194KTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAg X0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAg fQojIDE2NCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf dW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBl bmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9feCkKICAgIHsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFs dWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8 X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIF9fdW5pbml0aWFsaXplZF9m aWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKICAgIH0KCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+ CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICByZXR1cm4gZmls bF9uKF9fZmlyc3QsIF9fbiwgX194KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh cmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAg ICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUg X19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFs c2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICAgICAg dHJ5IHsKICAgICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3VyKQogICAgICAgICAg X0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgICAgIHJldHVybiBfX2N1cjsKICAgICAgfQog ICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19maXJzdCwgX19j dXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDIxMCAiL3Vzci9sb2NhbC92 b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUg X1RwPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgdW5pbml0aWFsaXplZF9maWxsX24oX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5 cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1 ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAgICByZXR1cm4gX191bmluaXRpYWxpemVk X2ZpbGxfbl9hdXgoX19maXJzdCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CiMgMjI3ICIv dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF91bmluaXRpYWxp emVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0 SXRlcjIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAg IF9fdW5pbml0aWFsaXplZF9jb3B5X2NvcHkoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0 ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f Zmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9 IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICB0 cnkgewogICAgICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDIsIF9fbGFzdDIs IF9fbWlkKTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rl c3Ryb3koX19yZXN1bHQsIF9fbWlkKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0K CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVu YW1lIF9JbnB1dEl0ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6 ZWRfZmlsbF9jb3B5KF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCkK ICAgIHsKICAgICAgdW5pbml0aWFsaXplZF9maWxsKF9fcmVzdWx0LCBfX21pZCwgX194KTsKICAg ICAgdHJ5IHsKICAgICAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFz dCwgX19taWQpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBf RGVzdHJveShfX3Jlc3VsdCwgX19taWQpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAg fQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0 ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29w eV9maWxsKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIg X19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCiAg ICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJz dDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsKICAgICAgdHJ5IHsKICAgICAgICB1bmluaXRpYWxpemVk X2ZpbGwoX19taWQyLCBfX2xhc3QyLCBfX3gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAg ICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX2ZpcnN0MiwgX19taWQyKTsKICAgICAgICAgIHRo cm93OwogICAgICAgIH0KICAgIH0KCn0KIyA1OSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNs dWRlL2MrKy8zLjIvbWVtb3J5IiAyIDMKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDEgMwojIDY0ICIvdXNyL2xv Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVy LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJh dG9yLCBjbGFzcyBfVHA+CiAgY2xhc3MgcmF3X3N0b3JhZ2VfaXRlcmF0b3IKICAgIDogcHVibGlj IGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAg ICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX01faXRlcjsKCiAgICBw dWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yKF9Gb3J3YXJk SXRlcmF0b3IgX194KSA6IF9NX2l0ZXIoX194KSB7fQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0 b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICByYXdfc3RvcmFn ZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9UcCYgX19lbGVtZW50KQogICAgICB7 CiAgICAgICAgX0NvbnN0cnVjdCgmKl9NX2l0ZXIsIF9fZWxlbWVudCk7CiAgICAgICAgcmV0dXJu ICp0aGlzOwogICAgICB9CgogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJh dG9yLCBfVHA+JgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgICsrX01faXRlcjsK ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9y PF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4KICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAg ICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+IF9fdG1wID0g KnRoaXM7CiAgICAgICAgKytfTV9pdGVyOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQog ICAgfTsKfQojIDYwICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9tZW1v cnkiIDIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CiMgNzQgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIv aW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwp0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwPgpwYWlyPF9U cCosIHB0cmRpZmZfdD4KX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9U cCopCnsKICBpZiAoX19sZW4gPiBwdHJkaWZmX3QoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApKSkK ICAgIF9fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOwoKICB3aGlsZSAoX19sZW4gPiAw KSB7CiAgICBfVHAqIF9fdG1wID0gKF9UcCopIHN0ZDo6bWFsbG9jKChzdGQ6OnNpemVfdClfX2xl biAqIHNpemVvZihfVHApKTsKICAgIGlmIChfX3RtcCAhPSAwKQogICAgICByZXR1cm4gcGFpcjxf VHAqLCBwdHJkaWZmX3Q+KF9fdG1wLCBfX2xlbik7CiAgICBfX2xlbiAvPSAyOwogIH0KCiAgcmV0 dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PigoX1RwKikwLCAwKTsKfQojIDEwNiAiL3Vzci9sb2Nh bC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCnRlbXBsYXRlPHR5cGVuYW1l IF9UcD4KICBpbmxpbmUgcGFpcjxfVHAqLHB0cmRpZmZfdD4KICBnZXRfdGVtcG9yYXJ5X2J1ZmZl cihwdHJkaWZmX3QgX19sZW4pCiAgewogICAgcmV0dXJuIF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIo X19sZW4sIChfVHAqKSAwKTsKICB9CiMgMTIwICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1 ZGUvYysrLzMuMi9tZW1vcnkiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIHZvaWQKICByZXR1 cm5fdGVtcG9yYXJ5X2J1ZmZlcihfVHAqIF9fcCkKICB7CiAgICBzdGQ6OmZyZWUoX19wKTsKICB9 CiMgMTM1ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMK dGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICBzdHJ1Y3QgYXV0b19wdHJfcmVmCnsKICAgX1RwMSog X01fcHRyOwoKICAgZXhwbGljaXQKICAgYXV0b19wdHJfcmVmKF9UcDEqIF9fcCkKICAgOiBfTV9w dHIoX19wKSB7fQp9OwojIDE3NSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8z LjIvbWVtb3J5IiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBjbGFzcyBhdXRvX3B0cgp7CnBy aXZhdGU6CiAgX1RwKiBfTV9wdHI7CgpwdWJsaWM6CgogIHR5cGVkZWYgX1RwIGVsZW1lbnRfdHlw ZTsKCgoKCgoKCiAgZXhwbGljaXQKICBhdXRvX3B0cihlbGVtZW50X3R5cGUqIF9fcCA9IDApIHRo cm93KCkKICA6IF9NX3B0cihfX3ApIHsgfQojIDIwMiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9p bmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCiAgYXV0b19wdHIoYXV0b19wdHImIF9fYSkgdGhyb3co KQogIDogX01fcHRyKF9fYS5yZWxlYXNlKCkpIHsgfQojIDIxNCAiL3Vzci9sb2NhbC92b2wvZ2Nj LzMuMi9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4K ICAgIGF1dG9fcHRyKGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkKICAgIDogX01fcHRyKF9f YS5yZWxlYXNlKCkpIHsgfQojIDIyNiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2Mr Ky8zLjIvbWVtb3J5IiAzCiAgYXV0b19wdHImCiAgb3BlcmF0b3I9KGF1dG9fcHRyJiBfX2EpIHRo cm93KCkKICAgIHsKICAgICAgcmVzZXQoX19hLnJlbGVhc2UoKSk7CiAgICAgIHJldHVybiAqdGhp czsKICAgIH0KIyAyNDMgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL21l bW9yeSIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAxPgogICAgYXV0b19wdHImCiAgICBvcGVy YXRvcj0oYXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKQogICAgewogICAgICByZXNldChfX2Eu cmVsZWFzZSgpKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQojIDI2MyAiL3Vzci9sb2NhbC92 b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCiAgfmF1dG9fcHRyKCkgeyBkZWxl dGUgX01fcHRyOyB9CiMgMjczICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMu Mi9tZW1vcnkiIDMKICBlbGVtZW50X3R5cGUmCiAgb3BlcmF0b3IqKCkgY29uc3QgdGhyb3coKSB7 IHJldHVybiAqX01fcHRyOyB9CgoKCgoKCgogIGVsZW1lbnRfdHlwZSoKICBvcGVyYXRvci0+KCkg Y29uc3QgdGhyb3coKSB7IHJldHVybiBfTV9wdHI7IH0KIyAyOTUgIi91c3IvbG9jYWwvdm9sL2dj Yy8zLjIvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGVsZW1lbnRfdHlwZSoKICBnZXQoKSBj b25zdCB0aHJvdygpIHsgcmV0dXJuIF9NX3B0cjsgfQojIDMwOSAiL3Vzci9sb2NhbC92b2wvZ2Nj LzMuMi9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCiAgZWxlbWVudF90eXBlKgogIHJlbGVhc2Uo KSB0aHJvdygpCiAgICB7CiAgICAgIGVsZW1lbnRfdHlwZSogX190bXAgPSBfTV9wdHI7CiAgICAg IF9NX3B0ciA9IDA7CiAgICAgIHJldHVybiBfX3RtcDsKICAgIH0KIyAzMjQgIi91c3IvbG9jYWwv dm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIHZvaWQKICByZXNldChlbGVt ZW50X3R5cGUqIF9fcCA9IDApIHRocm93KCkKICAgIHsKICAgICAgaWYgKF9fcCAhPSBfTV9wdHIp CiAgICAgICAgewogICAgICAgICAgZGVsZXRlIF9NX3B0cjsKICAgICAgICAgIF9NX3B0ciA9IF9f cDsKICAgICAgICB9CiAgICB9CiMgMzQ1ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUv YysrLzMuMi9tZW1vcnkiIDMKICBhdXRvX3B0cihhdXRvX3B0cl9yZWY8ZWxlbWVudF90eXBlPiBf X3JlZikgdGhyb3coKQogICAgOiBfTV9wdHIoX19yZWYuX01fcHRyKSB7fQoKICBhdXRvX3B0ciYK ICBvcGVyYXRvcj0oYXV0b19wdHJfcmVmPGVsZW1lbnRfdHlwZT4gX19yZWYpIHRocm93KCkKICAg IHsKICAgICAgaWYgKF9fcmVmLl9NX3B0ciAhPSB0aGlzLT5nZXQoKSkKICAgICAgICB7CiAgICAg ICAgICBkZWxldGUgX01fcHRyOwogICAgICAgICAgX01fcHRyID0gX19yZWYuX01fcHRyOwogICAg ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAx PgogICAgb3BlcmF0b3IgYXV0b19wdHJfcmVmPF9UcDE+KCkgdGhyb3coKQogICAgICB7IHJldHVy biBhdXRvX3B0cl9yZWY8X1RwMT4odGhpcy0+cmVsZWFzZSgpKTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHAxPgogICAgb3BlcmF0b3IgYXV0b19wdHI8X1RwMT4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIGF1dG9fcHRyPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7IH0KCn07Cgp9CiMgNDkgIi91 c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL3N0cmluZyIgMiAzCgoKCiMgMSAi L3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24u aCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX2Z1bmN0aW9uLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgMTAxICIvdXNyL2xvY2FsL3ZvbC9n Y2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxj bGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVk ZWYgX0FyZyBhcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsK CgoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0 cnVjdCBiaW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlw ZTsKICB0eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3Vs dCByZXN1bHRfdHlwZTsKfTsKIyAxMjcgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0 IHBsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJh dG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3gg KyBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbWludXMgOiBwdWJsaWMg YmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1Rw JiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLSBfX3k7IH0KfTsKCgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbXVsdGlwbGllcyA6IHB1YmxpYyBiaW5hcnlfZnVu Y3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAqIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxj bGFzcyBfVHA+CnN0cnVjdCBkaXZpZGVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1Rw LF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg Y29uc3QgeyByZXR1cm4gX194IC8gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry dWN0IG1vZHVsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPgp7CiAgX1Rw IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVy biBfX3ggJSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbmVnYXRlIDog cHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBf VHAmIF9feCkgY29uc3QgeyByZXR1cm4gLV9feDsgfQp9OwojIDE3MyAiL3Vzci9sb2NhbC92b2wv Z2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxf VHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBf X3kpIGNvbnN0IHsgcmV0dXJuIF9feCA9PSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgpzdHJ1Y3Qgbm90X2VxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJv b2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBj b25zdCB7IHJldHVybiBfX3ggIT0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry dWN0IGdyZWF0ZXIgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJv b2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0 dXJuIF9feCA+IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzIDog cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCko Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPCBfX3k7 IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlcl9lcXVhbCA6IHB1Ymxp YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0 IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID49IF9feTsgfQp9 OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzX2VxdWFsIDogcHVibGljIGJpbmFy eV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf X3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPD0gX195OyB9Cn07CiMgMjIy ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlv bi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX2FuZCA6IHB1YmxpYyBi aW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9U cCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYmIF9feTsgfQp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX29yIDogcHVibGljIGJpbmFyeV9m dW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggfHwgX195OyB9Cn07CgoKdGVtcGxh dGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u PF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJl dHVybiAhX194OyB9Cn07CiMgMjcxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysr LzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgpj bGFzcyB1bmFyeV9uZWdhdGUKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJl ZGljYXRlOjphcmd1bWVudF90eXBlLCBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRlIF9N X3ByZWQ7CnB1YmxpYzoKICBleHBsaWNpdCB1bmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYg X194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBf UHJlZGljYXRlOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiAhX01fcHJl ZChfX3gpOwogIH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIHVuYXJ5 X25lZ2F0ZTxfUHJlZGljYXRlPgpub3QxKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJl dHVybiB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoKCnRlbXBsYXRlIDxjbGFz cyBfUHJlZGljYXRlPgpjbGFzcyBiaW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBl LAogICAgICAgICAgICAgICAgICAgICAgICAgICBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGlj YXRlIF9NX3ByZWQ7CnB1YmxpYzoKICBleHBsaWNpdCBiaW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVk aWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlw ZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194LAogICAgICAgICAgICAg ICAgICBjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195 KSBjb25zdAogIHsKICAgIHJldHVybiAhX01fcHJlZChfX3gsIF9feSk7CiAgfQp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgYmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPgpu b3QyKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJldHVybiBiaW5hcnlfbmVnYXRlPF9Q cmVkaWNhdGU+KF9fcHJlZCk7Cn0KIyAzNDkgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVk ZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRp b24+CmNsYXNzIGJpbmRlcjFzdAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9P cGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAg IHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0 aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgdmFsdWU7 CnB1YmxpYzoKICBiaW5kZXIxc3QoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAgICAgICBj b25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAg IDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90 eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1l bnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7CiAgfQoKCiAg dHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKHR5cGVuYW1lIF9P cGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBv cCh2YWx1ZSwgX194KTsKICB9Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFz cyBfVHA+CmlubGluZSBiaW5kZXIxc3Q8X09wZXJhdGlvbj4KYmluZDFzdChjb25zdCBfT3BlcmF0 aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlv bjo6Zmlyc3RfYXJndW1lbnRfdHlwZSBfQXJnMV90eXBlOwogIHJldHVybiBiaW5kZXIxc3Q8X09w ZXJhdGlvbj4oX19mbiwgX0FyZzFfdHlwZShfX3gpKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfT3Bl cmF0aW9uPgpjbGFzcyBiaW5kZXIybmQKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFt ZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAg ICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3Bl cmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIHZh bHVlOwpwdWJsaWM6CiAgYmluZGVyMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAg ICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkK ICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVz dWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2Fy Z3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOwogIH0K CgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFt ZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVy biBvcChfX3gsIHZhbHVlKTsKICB9Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBj bGFzcyBfVHA+CmlubGluZSBiaW5kZXIybmQ8X09wZXJhdGlvbj4KYmluZDJuZChjb25zdCBfT3Bl cmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJh dGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgX0FyZzJfdHlwZTsKICByZXR1cm4gYmluZGVyMm5k PF9PcGVyYXRpb24+KF9fZm4sIF9BcmcyX3R5cGUoX194KSk7Cn0KIyA0MzggIi91c3IvbG9jYWwv dm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxh 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 ZXR1cm4gX194LnNlY29uZDsKICB9Cn07CiMgNTI4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfUmV0 LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAq LF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgp KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgcmV0 dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3Qg OiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfUmV0PiB7CnB1YmxpYzoKICBleHBs aWNpdCBjb25zdF9tZW1fZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9f cGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wKSBjb25zdCB7IHJldHVybiAo X19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07 CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZfdCA6 IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVt X2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9w ZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0 ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz cyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248 X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3QoX1JldCAo X1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNv bnN0IF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAg X1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xh c3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5j dGlvbjxfVHAqLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdChfUmV0 IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9U cCogX19wLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJp dmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl dCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90IDogcHVibGlj IGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGlj aXQgY29uc3RfbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9m KF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wLCBfQXJnIF9feCkgY29u c3QKICAgIHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1Rw OjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U cCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KF9S ZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCko X1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKShfX3gpOyB9CnBy aXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9S ZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3QgOiBw dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0 IGNvbnN0X21lbV9mdW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9N X2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBj b25zdCB7IHJldHVybiAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoq X01fZikoX0FyZykgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1 bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKix2b2lkPiB7CnB1Ymxp YzoKICBleHBsaWNpdCBtZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYp IHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9 CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgpjbGFzcyBjb25zdF9tZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlv bjxjb25zdCBfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdCh2 b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9y KCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2 b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNz IG1lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9p ZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgp KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgKF9f ci4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxh dGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVi bGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9t ZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQog IHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9 CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4gOiBw dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNp dCBtZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2 b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IChfX3AtPipfTV9mKShf X3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdDx2b2lkLCBfVHAs IF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyx2b2lkPiB7 CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9B cmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwKiBf X3AsIF9BcmcgX194KSBjb25zdCB7IChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9p ZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGlj IGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1f ZnVuMV9yZWZfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9p ZCBvcGVyYXRvcigpKF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gp OyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8dm9pZCwgX1Rw LCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1Ymxp YzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZfdCh2b2lkIChfVHA6OipfX3BmKShfQXJn KSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19y LCBfQXJnIF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAo X1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNs YXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6Oipf X2YpKCkpCiAgeyByZXR1cm4gbWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPiBt ZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVu X3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+Cmlu bGluZSBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2Yp KCkpCiAgeyByZXR1cm4gbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUg PGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxf VHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkKICB7IHJldHVybiBjb25z dF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBt ZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0 LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFz cyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9S ZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxf UmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBj bGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bl9y ZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV9yZWZfdDxfUmV0 LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFz cyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1 bl9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1f ZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9CgoKCn0KIyA1MyAiL3Vzci9sb2NhbC92 b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMKIyAxICIvdXNyL2xvY2FsL3Zv bC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy5oIiAxIDMKIyA0NCAi L3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcu aCIgMwoKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBj LWxpbnV4LWdudS9iaXRzL2F0b21pY2l0eS5oIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC92b2wvZ2Nj LzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9hdG9taWNpdHkuaCIg Mwp0eXBlZGVmIGludCBfQXRvbWljX3dvcmQ7CgpzdGF0aWMgaW5saW5lIF9BdG9taWNfd29yZApf X2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fZXhjaGFuZ2VfYW5kX2FkZCAodm9sYXRpbGUg X0F0b21pY193b3JkICpfX21lbSwgaW50IF9fdmFsKQp7CiAgcmVnaXN0ZXIgX0F0b21pY193b3Jk IF9fcmVzdWx0OwogIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgeGFkZGwgJTAsJTIiCiAg ICAgICAgICAgICAgICAgICAgICAgIDogIj1yIiAoX19yZXN1bHQpCiAgICAgICAgICAgICAgICAg ICAgICAgIDogIjAiIChfX3ZhbCksICJtIiAoKl9fbWVtKQogICAgICAgICAgICAgICAgICAgICAg ICA6ICJtZW1vcnkiKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApf X2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fYXRvbWljX2FkZCAodm9sYXRpbGUgX0F0b21p Y193b3JkKiBfX21lbSwgaW50IF9fdmFsKQp7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2Nr OyBhZGRsICUwLCUxIgogICAgICAgICAgICAgICAgICAgICAgICA6IDogImlyIiAoX192YWwpLCAi bSIgKCpfX21lbSkgOiAibWVtb3J5Iik7Cn0KIyA0NiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9p bmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsK IyA4OCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19z dHJpbmcuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nCiAgICB7CgogICAgcHVibGlj OgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX1RyYWl0czo6Y2hhcl90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgX0FsbG9jIGFs bG9jYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNp emVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSBk aWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpyZWZlcmVuY2Ug cmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNl IGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnBvaW50ZXIg cG9pbnRlcjsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3BvaW50ZXIgY29u c3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHBv aW50ZXIsIGJhc2ljX3N0cmluZz4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojpf X25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCBiYXNpY19zdHJpbmc+CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0 ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNv bnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVy YXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBwcml2YXRlOgojIDEyMyAiL3Vzci9sb2NhbC92 b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICBz dHJ1Y3QgX1JlcAogICAgICB7CgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1w bGF0ZSByZWJpbmQ8Y2hhcj46Om90aGVyIF9SYXdfYnl0ZXNfYWxsb2M7CiMgMTQxICIvdXNyL2xv Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAg ICAgICAgc3RhdGljIGNvbnN0IHNpemVfdHlwZSBfU19tYXhfc2l6ZTsKICAgICAgICBzdGF0aWMg Y29uc3QgX0NoYXJUIF9TX3Rlcm1pbmFsOwoKICAgICAgICBzaXplX3R5cGUgX01fbGVuZ3RoOwog ICAgICAgIHNpemVfdHlwZSBfTV9jYXBhY2l0eTsKICAgICAgICBfQXRvbWljX3dvcmQgX01fcmVm ZXJlbmNlczsKCiAgICAgICAgYm9vbAogICAgICAgIF9NX2lzX2xlYWtlZCgpIGNvbnN0CiAgICAg ICAgeyByZXR1cm4gX01fcmVmZXJlbmNlcyA8IDA7IH0KCiAgICAgICAgYm9vbAogICAgICAgIF9N X2lzX3NoYXJlZCgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gX01fcmVmZXJlbmNlcyA+IDA7IH0K CiAgICAgICAgdm9pZAogICAgICAgIF9NX3NldF9sZWFrZWQoKQogICAgICAgIHsgX01fcmVmZXJl bmNlcyA9IC0xOyB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9zZXRfc2hhcmFibGUoKQogICAg ICAgIHsgX01fcmVmZXJlbmNlcyA9IDA7IH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX3Jl ZmRhdGEoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxfQ2hhclQq Pih0aGlzICsgMSk7IH0KCiAgICAgICAgX0NoYXJUJgogICAgICAgIG9wZXJhdG9yW10oc2l6ZV90 IF9fcykgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIF9NX3JlZmRhdGEoKSBbX19zXTsgfQoKICAg ICAgICBfQ2hhclQqCiAgICAgICAgX01fZ3JhYihjb25zdCBfQWxsb2MmIF9fYWxsb2MxLCBjb25z dCBfQWxsb2MmIF9fYWxsb2MyKQogICAgICAgIHsKICAgICAgICAgIHJldHVybiAoIV9NX2lzX2xl YWtlZCgpICYmIF9fYWxsb2MxID09IF9fYWxsb2MyKQogICAgICAgICAgICAgICAgICA/IF9NX3Jl ZmNvcHkoKSA6IF9NX2Nsb25lKF9fYWxsb2MxKTsKICAgICAgICB9CgoKICAgICAgICBzdGF0aWMg X1JlcCoKICAgICAgICBfU19jcmVhdGUoc2l6ZV90LCBjb25zdCBfQWxsb2MmKTsKCiAgICAgICAg dm9pZAogICAgICAgIF9NX2Rpc3Bvc2UoY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgewogICAg ICAgICAgaWYgKF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVmZXJlbmNlcywgLTEpIDw9IDApCiAg ICAgICAgICAgIF9NX2Rlc3Ryb3koX19hKTsKICAgICAgICB9CgogICAgICAgIHZvaWQKICAgICAg ICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYpIHRocm93KCk7CgogICAgICAgIF9DaGFyVCoKICAg ICAgICBfTV9yZWZjb3B5KCkgdGhyb3coKQogICAgICAgIHsKICAgICAgICAgIF9fYXRvbWljX2Fk ZCgmX01fcmVmZXJlbmNlcywgMSk7CiAgICAgICAgICByZXR1cm4gX01fcmVmZGF0YSgpOwogICAg ICAgIH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX2Nsb25lKGNvbnN0IF9BbGxvYyYsIHNp emVfdHlwZSBfX3JlcyA9IDApOwogICAgICB9OwoKCiAgICAgIHN0cnVjdCBfQWxsb2NfaGlkZXIg OiBfQWxsb2MKICAgICAgewogICAgICAgIF9BbGxvY19oaWRlcihfQ2hhclQqIF9fZGF0LCBjb25z dCBfQWxsb2MmIF9fYSkKICAgICAgICA6IF9BbGxvYyhfX2EpLCBfTV9wKF9fZGF0KSB7IH0KCiAg ICAgICAgX0NoYXJUKiBfTV9wOwogICAgICB9OwoKICAgIHB1YmxpYzoKCgoKICAgICAgc3RhdGlj IGNvbnN0IHNpemVfdHlwZSBucG9zID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPigtMSk7CgogICAg cHJpdmF0ZToKCiAgICAgIG11dGFibGUgX0FsbG9jX2hpZGVyIF9NX2RhdGFwbHVzOwoKCgogICAg ICBzdGF0aWMgc2l6ZV90eXBlIF9TX2VtcHR5X3JlcF9zdG9yYWdlWyhzaXplb2YoX1JlcCkgKyBz aXplb2YoX0NoYXJUKSArIHNpemVvZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSld OwoKICAgICAgX0NoYXJUKgogICAgICBfTV9kYXRhKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01f ZGF0YXBsdXMuX01fcDsgfQoKICAgICAgX0NoYXJUKgogICAgICBfTV9kYXRhKF9DaGFyVCogX19w KQogICAgICB7IHJldHVybiAoX01fZGF0YXBsdXMuX01fcCA9IF9fcCk7IH0KCiAgICAgIF9SZXAq CiAgICAgIF9NX3JlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuICYoKHJlaW50ZXJwcmV0X2Nhc3Q8 X1JlcCo+IChfTV9kYXRhKCkpKVstMV0pOyB9CgoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2li ZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJh dG9yCiAgICAgIF9NX2llbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0 aGlzLT5zaXplKCkpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX2xlYWsoKQogICAgICB7CiAgICAg ICAgaWYgKCFfTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAgICBfTV9sZWFrX2hhcmQo KTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgX01fY2hlY2soc2l6ZV90eXBlIF9fcG9z KSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAg ICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6X01fY2hlY2siKTsKICAgICAg ICByZXR1cm4gX01faWJlZ2luKCkgKyBfX3BvczsKICAgICAgfQoKCiAgICAgIGl0ZXJhdG9yCiAg ICAgIF9NX2ZvbGQoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19vZmYpIGNvbnN0CiAgICAg IHsKICAgICAgICBib29sIF9fdGVzdG9mZiA9IF9fb2ZmIDwgdGhpcy0+c2l6ZSgpIC0gX19wb3M7 CiAgICAgICAgc2l6ZV90eXBlIF9fbmV3b2ZmID0gX190ZXN0b2ZmID8gX19vZmYgOiB0aGlzLT5z aXplKCkgLSBfX3BvczsKICAgICAgICByZXR1cm4gKF9NX2liZWdpbigpICsgX19wb3MgKyBfX25l d29mZik7CiAgICAgIH0KCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0l0ZXJhdG9yPgogICAgICAg IHN0YXRpYyB2b2lkCiAgICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0l0ZXJhdG9y IF9fazEsIF9JdGVyYXRvciBfX2syKQogICAgICAgIHsKICAgICAgICAgIGZvciAoOyBfX2sxICE9 IF9fazI7ICsrX19rMSwgKytfX3ApCiAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9f cCwgKl9fazEpOwogICAgICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hh cnMoX0NoYXJUKiBfX3AsIGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9yIF9fazIpCiAgICAgIHsgX1Nf Y29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0KCiAgICAgIHN0YXRp YyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNvbnN0X2l0ZXJhdG9yIF9f azEsIGNvbnN0X2l0ZXJhdG9yIF9fazIpCiAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEu YmFzZSgpLCBfX2syLmJhc2UoKSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlf Y2hhcnMoX0NoYXJUKiBfX3AsIF9DaGFyVCogX19rMSwgX0NoYXJUKiBfX2syKQogICAgICB7IHRy YWl0c190eXBlOjpjb3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICBzdGF0aWMg dm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBjb25zdCBfQ2hhclQqIF9fazEs IGNvbnN0IF9DaGFyVCogX19rMikKICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEs IF9fazIgLSBfX2sxKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9f cG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXplX3R5cGUgX19sZW4yKTsKCiAgICAgIHZvaWQKICAg ICAgX01fbGVha19oYXJkKCk7CgogICAgICBzdGF0aWMgX1JlcCYKICAgICAgX1NfZW1wdHlfcmVw KCkKICAgICAgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8X1JlcCo+KCZfU19lbXB0eV9yZXBf c3RvcmFnZSk7IH0KCiAgICBwdWJsaWM6CgoKCgogICAgICBpbmxpbmUKICAgICAgYmFzaWNfc3Ry aW5nKCk7CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBf X2EpOwoKCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKICAg ICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bv cywKICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24gPSBucG9zKTsKICAgICAgYmFzaWNf c3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAg ICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKTsKCiAgICAgIGJh c2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAg ICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwogICAgICBiYXNpY19zdHJpbmco Y29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwogICAgICBi YXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2Eg PSBfQWxsb2MoKSk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAg ICBiYXNpY19zdHJpbmcoX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5k LAogICAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAg ICAgIH5iYXNpY19zdHJpbmcoKQogICAgICB7IF9NX3JlcCgpLT5fTV9kaXNwb3NlKHRoaXMtPmdl dF9hbGxvY2F0b3IoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KGNv bnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3N0cik7IH0K CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9DaGFyVCogX19zKSB7 IHJldHVybiB0aGlzLT5hc3NpZ24oX19zKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBv cGVyYXRvcj0oX0NoYXJUIF9fYykgeyByZXR1cm4gdGhpcy0+YXNzaWduKDEsIF9fYyk7IH0KCgog ICAgICBpdGVyYXRvcgogICAgICBiZWdpbigpCiAgICAgIHsKICAgICAgICBfTV9sZWFrKCk7CiAg ICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7CiAgICAgIH0KCiAgICAgIGNvbnN0X2l0 ZXJhdG9yCiAgICAgIGJlZ2luKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3Io X01fZGF0YSgpKTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZW5kKCkKICAgICAgewogICAgICAg ICBfTV9sZWFrKCk7CiAgICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5z aXplKCkpOwogICAgICB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBlbmQoKSBjb25zdAog ICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9 CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpCiAgICAgIHsgcmV0dXJuIHJl dmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJh dG9yCiAgICAgIHJiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRl cmF0b3IodGhpcy0+ZW5kKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQo KQogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9CgogICAg ICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKSBjb25zdAogICAgICB7IHJldHVy biBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9CgogICAgcHVibGljOgoK ICAgICAgc2l6ZV90eXBlCiAgICAgIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01f bGVuZ3RoOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g X01fcmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkg Y29uc3QgeyByZXR1cm4gX1JlcDo6X1NfbWF4X3NpemU7IH0KCiAgICAgIHZvaWQKICAgICAgcmVz aXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdm9pZAogICAgICByZXNpemUo c2l6ZV90eXBlIF9fbikgeyB0aGlzLT5yZXNpemUoX19uLCBfQ2hhclQoKSk7IH0KCiAgICAgIHNp emVfdHlwZQogICAgICBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9jYXBh Y2l0eTsgfQoKICAgICAgdm9pZAogICAgICByZXNlcnZlKHNpemVfdHlwZSBfX3Jlc19hcmcgPSAw KTsKCiAgICAgIHZvaWQKICAgICAgY2xlYXIoKSB7IF9NX211dGF0ZSgwLCB0aGlzLT5zaXplKCks IDApOyB9CgogICAgICBib29sCiAgICAgIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+c2l6 ZSgpID09IDA7IH0KCgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXSAoc2l6 ZV90eXBlIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kYXRhKClbX19wb3NdOyB9Cgog ICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19wb3MpCiAgICAgIHsK ICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX3Bvc107CiAgICAg IH0KCiAgICAgIGNvbnN0X3JlZmVyZW5jZQogICAgICBhdChzaXplX3R5cGUgX19uKSBjb25zdAog ICAgICB7CiAgICAgICAgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkpCiAgICAgICAgICBfX3Rocm93 X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphdCIpOwogICAgICAgIHJldHVybiBfTV9kYXRh KClbX19uXTsKICAgICAgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIGF0KHNpemVfdHlwZSBfX24p CiAgICAgIHsKICAgICAgICBpZiAoX19uID49IHNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0 X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0Iik7CiAgICAgICAgX01fbGVhaygpOwogICAgICAg IHJldHVybiBfTV9kYXRhKClbX19uXTsKICAgICAgfQoKCiAgICAgIGJhc2ljX3N0cmluZyYKICAg ICAgb3BlcmF0b3IrPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7IHJldHVybiB0aGlzLT5h cHBlbmQoX19zdHIpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oY29u c3QgX0NoYXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3MpOyB9CgogICAgICBiYXNp Y19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oX0NoYXJUIF9fYykgeyByZXR1cm4gdGhpcy0+YXBw ZW5kKHNpemVfdHlwZSgxKSwgX19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBl bmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg IGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVf dHlwZSBfX24pOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgX0NoYXJU KiBfX3MsIHNpemVfdHlwZSBfX24pOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQo Y29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3MsIHRyYWl0 c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5k KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0 SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIGFwcGVuZChfSW5wdXRJdGVy YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgICAgeyByZXR1cm4gdGhp cy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsgfQoKICAg ICAgdm9pZAogICAgICBwdXNoX2JhY2soX0NoYXJUIF9fYykKICAgICAgeyB0aGlzLT5yZXBsYWNl KF9NX2llbmQoKSwgX01faWVuZCgpLCAxLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAg ICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKCiAgICAgIGJhc2ljX3N0cmlu ZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bv cywgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3N0cnNp emUgPSBfX3N0ci5zaXplKCk7CiAgICAgICAgaWYgKF9fcG9zID4gX19zdHJzaXplKQogICAgICAg ICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXNzaWduIik7CiAgICAgICAg Y29uc3QgYm9vbCBfX3Rlc3RuID0gX19uIDwgX19zdHJzaXplIC0gX19wb3M7CiAgICAgICAgY29u c3Qgc2l6ZV90eXBlIF9fbmV3c2l6ZSA9IF9fdGVzdG4gPyBfX24gOiBfX3N0cnNpemUgLSBfX3Bv czsKICAgICAgICByZXR1cm4gdGhpcy0+YXNzaWduKF9fc3RyLl9NX2RhdGEoKSArIF9fcG9zLCBf X25ld3NpemUpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25z dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGlmIChfX24gPiB0 aGlzLT5tYXhfc2l6ZSgpKQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0 cmluZzo6YXNzaWduIik7CiAgICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8fCBs ZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCiAgICAgICAgICAgIHx8IGxlc3M8 Y29uc3QgX0NoYXJUKj4oKShfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCksIF9fcykpCiAgICAgICAg ICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fcywgX19z ICsgX19uKTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CgogICAgICAgICAgICBjb25zdCBzaXpl X3R5cGUgX19wb3MgPSBfX3MgLSBfTV9kYXRhKCk7CiAgICAgICAgICAgIGlmIChfX3BvcyA+PSBf X24pCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fZGF0YSgpLCBfX3MsIF9fbik7 CiAgICAgICAgICAgIGVsc2UgaWYgKF9fcG9zKQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpt b3ZlKF9NX2RhdGEoKSwgX19zLCBfX24pOwogICAgICAgICAgICBfTV9yZXAoKS0+X01fbGVuZ3Ro ID0gX19uOwogICAgICAgICAgICBfTV9kYXRhKClbX19uXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwog ICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgICB9CiAgICAgIH0KCiAgICAgIGJhc2lj X3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0 aGlzLT5hc3NpZ24oX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNp Y19zdHJpbmcmCiAgICAgIGFzc2lnbihzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgICB7 IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsg fQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3Ry aW5nJgogICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv ciBfX2xhc3QpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pYmVnaW4oKSwgX01f aWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CgogICAgICB2b2lkCiAgICAgIGluc2VydChpdGVy YXRvciBfX3AsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsgdGhpcy0+cmVwbGFj ZShfX3AsIF9fcCwgX19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVy YXRvcj4KICAgICAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3AsIF9JbnB1dEl0ZXJhdG9yIF9f YmVnLCBfSW5wdXRJdGVyYXRvciBfX2VuZCkKICAgICAgICB7IHRoaXMtPnJlcGxhY2UoX19wLCBf X3AsIF9fYmVnLCBfX2VuZCk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNp emVfdHlwZSBfX3BvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsgcmV0dXJu IHRoaXMtPmluc2VydChfX3BvczEsIF9fc3RyLCAwLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBi YXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNpY19z dHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9f bikKICAgICAgewogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXpl KCk7CiAgICAgICAgaWYgKF9fcG9zMiA+IF9fc3Ryc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0 X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Omluc2VydCIpOwogICAgICAgIGNvbnN0IGJvb2wgX190 ZXN0biA9IF9fbiA8IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAgICBjb25zdCBzaXplX3R5cGUg X19uZXdzaXplID0gX190ZXN0biA/IF9fbiA6IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAgICBy ZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zMSwgX19zdHIuX01fZGF0YSgpICsgX19wb3MyLCBfX25l d3NpemUpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5 cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAg ICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgICBpZiAoX19w b3MgPiBfX3NpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5n OjppbnNlcnQiKTsKICAgICAgICBpZiAoX19zaXplID4gdGhpcy0+bWF4X3NpemUoKSAtIF9fbikK ICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6Omluc2VydCIpOwog ICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQq PigpKF9fcywgX01fZGF0YSgpKQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCko X01fZGF0YSgpICsgX19zaXplLCBfX3MpKQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2Fm ZShfTV9pYmVnaW4oKSArIF9fcG9zLCBfTV9pYmVnaW4oKSArIF9fcG9zLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbik7CiAgICAgICAgZWxzZQogICAgICAg ICAgewoKCgogICAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19vZmYgPSBfX3MgLSBfTV9kYXRh KCk7CiAgICAgICAgICAgIF9NX211dGF0ZShfX3BvcywgMCwgX19uKTsKICAgICAgICAgICAgX19z ID0gX01fZGF0YSgpICsgX19vZmY7CiAgICAgICAgICAgIF9DaGFyVCogX19wID0gX01fZGF0YSgp ICsgX19wb3M7CiAgICAgICAgICAgIGlmIChfX3MgKyBfX24gPD0gX19wKQogICAgICAgICAgICAg IHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19zLCBfX24pOwogICAgICAgICAgICBlbHNlIGlmIChf X3MgPj0gX19wKQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19zICsgX19u LCBfX24pOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg dHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX3MsIF9fcCAtIF9fcyk7CiAgICAgICAgICAgICAgICB0 cmFpdHNfdHlwZTo6Y29weShfX3AgKyAoX19wIC0gX19zKSwgX19wICsgX19uLCBfX24gLSAoX19w IC0gX19zKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg ICAgICB9CiAgICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5 cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5pbnNlcnQo X19wb3MsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3Ry aW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBfQ2hhclQg X19jKQogICAgICB7CiAgICAgICAgdGhpcy0+aW5zZXJ0KF9NX2NoZWNrKF9fcG9zKSwgX19uLCBf X2MpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAg aW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0NoYXJUIF9fYyA9IF9DaGFyVCgpKQogICAgICB7CiAgICAg ICAgc2l6ZV90eXBlIF9fcG9zID0gX19wIC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+aW5z ZXJ0KF9NX2NoZWNrKF9fcG9zKSwgc2l6ZV90eXBlKDEpLCBfX2MpOwogICAgICAgIF9NX3JlcCgp LT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICAgcmV0dXJuIHRoaXMtPl9NX2liZWdpbigpICsgX19w b3M7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgZXJhc2Uoc2l6ZV90eXBlIF9f cG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9IG5wb3MpCiAgICAgIHsKICAgICAgICByZXR1cm4gdGhp cy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbiksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICB9CgogICAg ICBpdGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQogICAgICB7CiAgICAg ICAgc2l6ZV90eXBlIF9faSA9IF9fcG9zaXRpb24gLSBfTV9pYmVnaW4oKTsKICAgICAgICB0aGlz LT5yZXBsYWNlKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyAxLCBfTV9kYXRhKCksIF9NX2RhdGEo KSk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgICByZXR1cm4gX01f aWJlZ2luKCkgKyBfX2k7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJh dG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBf X2kgPSBfX2ZpcnN0IC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX2ZpcnN0 LCBfX2xhc3QsIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0 X2xlYWtlZCgpOwogICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19pOwogICAgICB9CgogICAg ICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg X19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBs YWNlKF9fcG9zLCBfX24sIF9fc3RyLl9NX2RhdGEoKSwgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAg YmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBf X24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgIHNpemVfdHlwZSBf X3BvczIsIHNpemVfdHlwZSBfX24yKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFj ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAg ICAgICAgICAgICBzaXplX3R5cGUgX19uMikKICAgICAgewogICAgICAgIGNvbnN0IHNpemVfdHlw ZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAg ICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAg ICAgIGNvbnN0IGJvb2wgX190ZXN0bjEgPSBfX24xIDwgX19zaXplIC0gX19wb3M7CiAgICAgICAg Y29uc3Qgc2l6ZV90eXBlIF9fZm9sZG4xID0gX190ZXN0bjEgPyBfX24xIDogX19zaXplIC0gX19w b3M7CiAgICAgICAgaWYgKF9fc2l6ZSAtIF9fZm9sZG4xID4gdGhpcy0+bWF4X3NpemUoKSAtIF9f bjIpCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXBsYWNl Iik7CiAgICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8fCBsZXNzPGNvbnN0IF9D aGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCiAgICAgICAgICAgIHx8IGxlc3M8Y29uc3QgX0NoYXJU Kj4oKShfTV9kYXRhKCkgKyBfX3NpemUsIF9fcykpCiAgICAgICAgICByZXR1cm4gX01fcmVwbGFj ZV9zYWZlKF9NX2liZWdpbigpICsgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9NX2liZWdpbigpICsgX19wb3MgKyBfX2ZvbGRuMSwgX19zLCBfX3MgKyBfX24yKTsKCiAg ICAgICAgZWxzZSByZXR1cm4KICAgICAgICAgICAgICAgX01fcmVwbGFjZShfTV9pYmVnaW4oKSAr IF9fcG9zLCBfTV9pYmVnaW4oKSArIF9fcG9zICsgX19mb2xkbjEsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgX19zLCBfX3MgKyBfX24yLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfQ2hhclQqPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7 CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19w b3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhp cy0+cmVwbGFjZShfX3BvcywgX19uMSwgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9 CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXpl X3R5cGUgX19uMSwgc2l6ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2MpCiAgICAgIHsgcmV0dXJuIHRo aXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwgX19uMiwg X19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEs IGl0ZXJhdG9yIF9faTIsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsgcmV0dXJu IHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zdHIuX01fZGF0YSgpLCBfX3N0ci5zaXplKCkp OyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRl cmF0b3IgX19pMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3Ms IHNpemVfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2li ZWdpbigpLCBfX2kyIC0gX19pMSwgX19zLCBfX24pOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAg ICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBf X3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLCB0cmFpdHNf dHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uo aXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7 CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJp bmcmCiAgICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAogICAgICAg ICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19rMSwgX0lucHV0SXRlcmF0b3IgX19rMikKICAgICAg ICB7IHJldHVybiBfTV9yZXBsYWNlKF9faTEsIF9faTIsIF9fazEsIF9fazIsCiAgICAgICAgICAg ICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRl Z29yeSgpKTsgfQoKCgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3Ig X19pMSwgaXRlcmF0b3IgX19pMiwgX0NoYXJUKiBfX2sxLCBfQ2hhclQqIF9fazIpCiAgICAgICAg eyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAg ICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19p MiwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQqIF9fazIpCiAgICAgICAgeyByZXR1 cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICBiYXNp Y19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgaXRl cmF0b3IgX19rMSwgaXRlcmF0b3IgX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNl KF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2sxLmJhc2UoKSwgX19rMiAtIF9fazEpOwogICAgICAgIH0KCiAgICAgIGJhc2lj X3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25z dF9pdGVyYXRvciBfX2sxLCBjb25zdF9pdGVyYXRvciBfX2syKQogICAgICAgIHsgcmV0dXJuIHRo aXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fazEuYmFzZSgpLCBfX2syIC0gX19rMSk7CiAgICAgICAgfQoK ICAgIHByaXZhdGU6CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAg IGJhc2ljX3N0cmluZyYKICAgICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9y IF9faTIsIF9JbnB1dEl0ZXJhdG9yIF9fazEsCiAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy YXRvciBfX2syLCBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Zv cndhcmRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgX01fcmVwbGFjZV9z YWZlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9Gb3J3YXJkSXRlcmF0b3IgX19rMSwK ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19rMik7CgoKCiAgICAgIHRlbXBs YXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25z dHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19h LAogICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQogICAgICAgIHsKICAgICAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Jbkl0ZXI+OjppdGVyYXRvcl9j YXRlZ29yeSBfVGFnOwogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQs IF9fYSwgX1RhZygpKTsKICAgICAgICB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgog ICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0X2F1eChfSW5JdGVyIF9f YmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAg ICAgICAgIF9fdHJ1ZV90eXBlKQogICAgICAgIHsKICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1 Y3Qoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2JlZyksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0YXRpY19jYXN0PHZhbHVlX3R5cGU+KF9fZW5kKSwgX19hKTsKICAgICAgICB9Cgog ICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAg ICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxv YyYgX19hKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8 X0luSXRlcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3Ry dWN0X2F1eChfX2JlZywgX19lbmQsIF9fYSwgX0ludGVncmFsKCkpOwogICAgICAgIH0KCgogICAg ICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAg IF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2Mm IF9fYSwKICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgoKCiAgICAg IHRlbXBsYXRlPGNsYXNzIF9Gd2RJdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAg X1NfY29uc3RydWN0KF9Gd2RJdGVyIF9fYmVnLCBfRndkSXRlciBfX2VuZCwgY29uc3QgX0FsbG9j JiBfX2EsCiAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCiAgICAg IHN0YXRpYyBfQ2hhclQqCiAgICAgIF9TX2NvbnN0cnVjdChzaXplX3R5cGUgX19yZXEsIF9DaGFy VCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKTsKCiAgICBwdWJsaWM6CgogICAgICBzaXplX3R5cGUK ICAgICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zID0g MCkgY29uc3Q7CgogICAgICB2b2lkCiAgICAgIHN3YXAoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19zKTsKCgogICAgICBjb25zdCBfQ2hhclQqCiAgICAgIGNfc3RyKCkg Y29uc3QKICAgICAgewoKICAgICAgICBzaXplX3R5cGUgX19uID0gdGhpcy0+c2l6ZSgpOwogICAg ICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgpW19fbl0sIF9SZXA6Ol9TX3Rlcm1pbmFs KTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpOwogICAgICB9CgogICAgICBjb25zdCBfQ2hhclQq CiAgICAgIGRhdGEoKSBjb25zdCB7IHJldHVybiBfTV9kYXRhKCk7IH0KCiAgICAgIGFsbG9jYXRv cl90eXBlCiAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9kYXRhcGx1czsg fQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmlu ZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUo KSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl X3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fcywgX19w b3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBm aW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgc2l6ZV90 eXBlCiAgICAgIHJmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bv cyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fc3RyLmRhdGEoKSwg X19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25z dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAg ICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f cG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19zLCBfX3Bvcywg dHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5k KF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0OwoKICAgICAgc2l6ZV90 eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90 eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihf X3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAg ICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXpl X3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNv bnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVy biB0aGlzLT5maW5kX2ZpcnN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19z KSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKF9DaGFyVCBfX2MsIHNp emVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19jLCBf X3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgYmFzaWNf c3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1 cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7 IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3Ms IHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUK ICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBu cG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfb2YoX19zLCBfX3Bvcywg dHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRf bGFzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5yZmluZChfX2MsIF9fcG9zKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAg IGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBf X3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29mKF9f c3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAg ICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLAog ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVf dHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl IF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9ub3Rfb2Yo X19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBl CiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDAp IGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyBy ZXR1cm4gdGhpcy0+ZmluZF9sYXN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5z aXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBf Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVf dHlwZSBfX24pIGNvbnN0OwogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihj b25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyBy ZXR1cm4gdGhpcy0+ZmluZF9sYXN0X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVu Z3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihfQ2hh clQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdDsKCiAgICAgIGJhc2ljX3N0cmlu ZwogICAgICBzdWJzdHIoc2l6ZV90eXBlIF9fcG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9IG5wb3Mp IGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19wb3MgPiB0aGlzLT5zaXplKCkpCiAgICAgICAg ICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpzdWJzdHIiKTsKICAgICAgICBy ZXR1cm4gYmFzaWNfc3RyaW5nKCp0aGlzLCBfX3BvcywgX19uKTsKICAgICAgfQoKICAgICAgaW50 CiAgICAgIGNvbXBhcmUoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3QKICAgICAgewog ICAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgc2l6ZV90eXBl IF9fb3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9f c2l6ZSwgX19vc2l6ZSk7CgogICAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShf TV9kYXRhKCksIF9fc3RyLmRhdGEoKSwgX19sZW4pOwogICAgICAgIGlmICghX19yKQogICAgICAg ICAgX19yID0gX19zaXplIC0gX19vc2l6ZTsKICAgICAgICByZXR1cm4gX19yOwogICAgICB9Cgog ICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNv bnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUo c2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19z dHIsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0 OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OwoKCgog ICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBj b25zdCBfQ2hhclQqIF9fcykgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5 cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAg ICBzaXplX3R5cGUgX19uMikgY29uc3Q7CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKCkKICAgIDog X01fZGF0YXBsdXMoX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpLCBfQWxsb2MoKSkgeyB9CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJh dG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywK ICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JiBfX3JocykKICAgIHsKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiBfX3N0cihfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBf X3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9j PgogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKTsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi YXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKF9DaGFyVCBf X2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgog ICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m IF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsKICAgICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cihfX2xocyk7CiAgICAgIF9f c3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp bmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3Ir KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLCBfQ2hh clQgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5n X3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cihf X2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwgX19yaHMpOwogICAgICBy ZXR1cm4gX19zdHI7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09 KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAg ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf X3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAg ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3Jo cykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID09IDA7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp bmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykK ICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0KCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s aW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShf X2xocykgIT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0 IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xo cykgIT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAg ICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3Jocykg IT0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNv bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyBy ZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wK ICAgIG9wZXJhdG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4g X19saHMuY29tcGFyZShfX3JocykgPCAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9w ZXJhdG9yPChjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMu Y29tcGFyZShfX2xocykgPiAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv cj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAg ICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMp CiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp bmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAg Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7 IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA8IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3Jocykg PD0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBj b25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0g MDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IF9DaGFyVCog X19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mIF9fcmhzKQogIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID49IDA7IH0K CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4g X19saHMuY29tcGFyZShfX3JocykgPj0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBv cGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f bGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19s aHMuY29tcGFyZShfX3JocykgPj0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVy YXRvcj49KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNv bXBhcmUoX19saHMpIDw9IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAoYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyBfX2xocy5zd2Fw KF9fcmhzKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg IG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAogICAgICAg ICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChi YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCiAgICAgICAgICAgICAgIGNvbnN0 IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwgX0NoYXJUIF9fZGVsaW0pOwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu bGluZSBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7Cn0KIyA1NCAiL3Vzci9sb2NhbC92b2wvZ2Nj LzMuMi9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvdm9sL2dj Yy8zLjIvaW5jbHVkZS9jKysvMy4yL2FsZ29yaXRobSIgMSAzCiMgNjUgIi91c3IvbG9jYWwvdm9s L2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2FsZ29yaXRobSIgMwoKCgoKIyAxICIvdXNyL2xvY2Fs L3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDEgMwojIDY0ICIv dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK IyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9oZWFw LmgiIDEgMwojIDYzICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF9oZWFwLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcD4KICAg IHZvaWQKICAgIF9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAg ICAgICAgICAgICAgX0Rpc3RhbmNlIF9faG9sZUluZGV4LCBfRGlzdGFuY2UgX190b3BJbmRleCwg X1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRl eCAtIDEpIC8gMjsKICAgICAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9f Zmlyc3QgKyBfX3BhcmVudCkgPCBfX3ZhbHVlKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xl SW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19w YXJlbnQ7CiAgICAgICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIH0K ICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIHB1 c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJh dG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgog ICAgIAoKICAgICAgX19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0IC0g X19maXJzdCkgLSAxKSwgX0Rpc3RhbmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgX1ZhbHVl VHlwZSgqKF9fbGFzdCAtIDEpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B Y2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHAsCiAgICAgICAg ICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19wdXNoX2hlYXAoX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAg ICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQog ICAgewogICAgICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAg ICAgIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgX19jb21wKCooX19maXJzdCAr IF9fcGFyZW50KSwgX192YWx1ZSkpIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkg PSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsK ICAgICAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgfQogICAgICAq KF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVlOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5l IHZvaWQKICAgIHB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAg ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ dGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVu Y2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKCiAgICAgIF9fcHVzaF9o ZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0 YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSks IF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRv ciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX2FkanVz dF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5k ZXgsCiAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUpCiAgICB7 CiAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgICAgIF9EaXN0YW5j ZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vj b25kQ2hpbGQgPCBfX2xlbikgewogICAgICAgIGlmICgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxk KSA8ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKQogICAgICAgICAgX19zZWNvbmRD aGlsZC0tOwogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9f c2Vjb25kQ2hpbGQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgICAg ICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgICAgIH0KICAgICAg aWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJ bmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAgICAgICBfX2hvbGVJ bmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogICAgICB9CiAgICAgIF9fcHVzaF9oZWFwKF9fZmly c3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUg dm9pZAogICAgX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9E aXN0YW5jZTsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIF9fYWRqdXN0X2hlYXAo X19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fdmFs dWUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAg ICBpbmxpbmUgdm9pZAogICAgcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1Zh bHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0 IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSk7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNl LAogICAgICAgICAgIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAg ICBfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2Ug X19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFs dWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBf X2hvbGVJbmRleDsKICAgICAgX0Rpc3RhbmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5k ZXggKyAyOwogICAgICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICAgICAgaWYg KF9fY29tcCgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSwgKihfX2ZpcnN0ICsgKF9fc2Vjb25k Q2hpbGQgLSAxKSkpKQogICAgICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgICAgICooX19maXJz dCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgICAgIF9f aG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgICAgICBfX3NlY29uZENoaWxkID0gMiAqIChf X3NlY29uZENoaWxkICsgMSk7CiAgICAgIH0KICAgICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19s ZW4pIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19z ZWNvbmRDaGlsZCAtIDEpKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAx OwogICAgICB9CiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcElu ZGV4LCBfX3ZhbHVlLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxp bmUgdm9pZAogICAgX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+ OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsK ICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xh c3QgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXApOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRv ciBfX2ZpcnN0LAogICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0Nv bXBhcmUgX19jb21wKQogICAgewoKICAgICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7 CiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVl VHlwZSgqKF9fbGFzdCAtIDEpKSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nl c3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0 b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5 cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19s YXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9f bGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19wYXJlbnQgPSAoX19sZW4gLSAy KS8yOwoKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3Qs IF9fcGFyZW50LCBfX2xlbiwgX1ZhbHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpKTsKICAg ICAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwogICAgICAgIF9fcGFyZW50LS07CiAgICAg IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBl bmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBtYWtlX2hlYXAoX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBf VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t QWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7 CgoKICAgICAKCgogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICAgICAg X0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZVR5 cGUgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAg ICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwKICAgICAgICAgICAgICAg ICAgICAgIF9WYWx1ZVR5cGUoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSwgX19jb21wKTsKICAgICAg ICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwogICAgICAgIF9fcGFyZW50LS07CiAgICAgIH0K ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgdm9p ZAogICAgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewoKICAgICAKCiAgICAgCgoKICAgICAgd2hpbGUgKF9f bGFzdCAtIF9fZmlyc3QgPiAxKQogICAgICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tKTsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFt ZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBfQ29t cGFyZSBfX2NvbXApCiAgICB7CgogICAgIAoKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0 ID4gMSkKICAgICAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsKICAgIH0K Cn0KIyA2NSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf YWxnby5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF90ZW1wYnVmLmgiIDEgMwojIDY0ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF90ZW1wYnVmLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgNzQgIi91 c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RlbXBidWYuaCIg Mwp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgogIGNsYXNzIF9U ZW1wb3JhcnlfYnVmZmVyCnsKCiAKCiAgcHRyZGlmZl90IF9NX29yaWdpbmFsX2xlbjsKICBwdHJk aWZmX3QgX01fbGVuOwogIF9UcCogX01fYnVmZmVyOwoKCiAgdm9pZCBfTV9hbGxvY2F0ZV9idWZm ZXIoKSB7CiAgICBfTV9vcmlnaW5hbF9sZW4gPSBfTV9sZW47CiAgICBfTV9idWZmZXIgPSAwOwoK ICAgIGlmIChfTV9sZW4gPiAocHRyZGlmZl90KSgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQog ICAgICBfTV9sZW4gPSAyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCk7CgogICAgd2hpbGUgKF9NX2xl biA+IDApIHsKICAgICAgX01fYnVmZmVyID0gKF9UcCopIG1hbGxvYyhfTV9sZW4gKiBzaXplb2Yo X1RwKSk7CiAgICAgIGlmIChfTV9idWZmZXIpCiAgICAgICAgYnJlYWs7CiAgICAgIF9NX2xlbiAv PSAyOwogICAgfQogIH0KCiAgdm9pZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmLCBf X3RydWVfdHlwZSkge30KICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYgdmFs LCBfX2ZhbHNlX3R5cGUpIHsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2J1ZmZlciwgX01f bGVuLCB2YWwpOwogIH0KCnB1YmxpYzoKCiAgcHRyZGlmZl90IHNpemUoKSBjb25zdCB7IHJldHVy biBfTV9sZW47IH0KCiAgcHRyZGlmZl90IHJlcXVlc3RlZF9zaXplKCkgY29uc3QgeyByZXR1cm4g X01fb3JpZ2luYWxfbGVuOyB9CgogIF9UcCogYmVnaW4oKSB7IHJldHVybiBfTV9idWZmZXI7IH0K CiAgX1RwKiBlbmQoKSB7IHJldHVybiBfTV9idWZmZXIgKyBfTV9sZW47IH0KCiAgX1RlbXBvcmFy eV9idWZmZXIoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFz dCkgewoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlh bF9kZWZhdWx0X2NvbnN0cnVjdG9yCiAgICAgICAgICAgIF9Ucml2aWFsOwoKICAgIHRyeSB7CiAg ICAgIF9NX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9NX2FsbG9jYXRl X2J1ZmZlcigpOwogICAgICBpZiAoX01fbGVuID4gMCkKICAgICAgICBfTV9pbml0aWFsaXplX2J1 ZmZlcigqX19maXJzdCwgX1RyaXZpYWwoKSk7CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsK ICAgICAgICBmcmVlKF9NX2J1ZmZlcik7CiAgICAgICAgX01fYnVmZmVyID0gMDsKICAgICAgICBf TV9sZW4gPSAwOwogICAgICAgIHRocm93OwogICAgICB9CiAgfQoKICB+X1RlbXBvcmFyeV9idWZm ZXIoKSB7CiAgICBfRGVzdHJveShfTV9idWZmZXIsIF9NX2J1ZmZlciArIF9NX2xlbik7CiAgICBm cmVlKF9NX2J1ZmZlcik7CiAgfQoKcHJpdmF0ZToKCiAgX1RlbXBvcmFyeV9idWZmZXIoY29uc3Qg X1RlbXBvcmFyeV9idWZmZXImKSB7fQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9UZW1wb3Jhcnlf YnVmZmVyJikge30KfTsKCn0KIyA2NiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAyIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiMgODQgIi91c3Iv bG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUgY29uc3QgX1RwJgogICAgX19tZWRpYW4oY29u c3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYykKICAgIHsKCiAgICAg CiAgICAgIGlmIChfX2EgPCBfX2IpCiAgICAgICAgaWYgKF9fYiA8IF9fYykKICAgICAgICAgIHJl dHVybiBfX2I7CiAgICAgICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgICAgICAgcmV0dXJuIF9f YzsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2Eg PCBfX2MpCiAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19iIDwgX19jKQogICAg ICAgIHJldHVybiBfX2M7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gX19iOwogICAgfQojIDEx OCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGlu ZSBjb25zdCBfVHAmCiAgICBfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2Is IGNvbnN0IF9UcCYgX19jLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgICBpZiAo X19jb21wKF9fYSwgX19iKSkKICAgICAgICBpZiAoX19jb21wKF9fYiwgX19jKSkKICAgICAgICAg IHJldHVybiBfX2I7CiAgICAgICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgICAgICAg IHJldHVybiBfX2M7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxz ZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlm IChfX2NvbXAoX19iLCBfX2MpKQogICAgICAgIHJldHVybiBfX2M7CiAgICAgIGVsc2UKICAgICAg ICByZXR1cm4gX19iOwogICAgfQojIDE1MCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl ciwgdHlwZW5hbWUgX0Z1bmN0aW9uPgogICAgX0Z1bmN0aW9uCiAgICBmb3JfZWFjaChfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfRnVuY3Rpb24gX19mKQogICAgewoKICAg ICAKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIF9f ZigqX19maXJzdCk7CiAgICAgIHJldHVybiBfX2Y7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAg IGZpbmQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgY29u c3QgX1RwJiBfX3ZhbCwKICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3 aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgISgqX19maXJzdCA9PSBfX3ZhbCkpCiAgICAgICAg KytfX2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgaW5saW5lIF9JbnB1 dEl0ZXIKICAgIGZpbmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9y X3RhZykKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFfX3ByZWQoKl9f Zmlyc3QpKQogICAgICAgICsrX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcD4K ICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBmaW5kKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAg ICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBf Y291bnQKICAgICAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICAgICAgZm9yICggOyBf X3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgICAgICBpZiAoKl9fZmlyc3Qg PT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYg KCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7Cgog ICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytf X2ZpcnN0OwoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0Owog ICAgICAgICsrX19maXJzdDsKICAgICAgfQoKICAgICAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3Qp IHsKICAgICAgY2FzZSAzOgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9f Zmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDI6CiAgICAgICAgaWYgKCpfX2Zp cnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNh c2UgMToKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAg ICAgICsrX19maXJzdDsKICAgICAgY2FzZSAwOgogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVy biBfX2xhc3Q7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAg ICBmaW5kX2lmKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f bGFzdCwKICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgIHJhbmRvbV9h Y2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICAgICAg PSAoX19sYXN0IC0gX19maXJzdCkgPj4gMjsKCiAgICAgIGZvciAoIDsgX190cmlwX2NvdW50ID4g MCA7IC0tX190cmlwX2NvdW50KSB7CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVy biBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJz dCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKF9fcHJl ZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAg aWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsK ICAgICAgfQoKICAgICAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICAgICAgY2FzZSAzOgog ICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19f Zmlyc3Q7CiAgICAgIGNhc2UgMjoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJu IF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDE6CiAgICAgICAgaWYgKF9f cHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAg Y2FzZSAwOgogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIH0KICAg IH0KIyAyODkgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4K ICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0 SXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CgogICAgIAogICAg IAoKICAgICAgcmV0dXJuIGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19pdGVyYXRvcl9j YXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CiMgMzA5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZp bmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg X1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgcmV0dXJuIGZpbmRf aWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkp OwogICAgfQojIDMyOSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0Zv cndhcmRJdGVyCiAgICBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9f bGFzdCkKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0g X19maXJzdDsKICAgICAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICAgICAgaWYgKCpf X2ZpcnN0ID09ICpfX25leHQpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBfX2Zp cnN0ID0gX19uZXh0OwogICAgICB9CiAgICAgIHJldHVybiBfX2xhc3Q7CiAgICB9CiMgMzU4ICIv dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNh dGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNh dGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3Qg PT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX25l eHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgICAgICBp ZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCiAgICAgICAgICByZXR1cm4gX19m aXJzdDsKICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICB9CiAgICAgIHJldHVybiBfX2xh c3Q7CiAgICB9CiMgMzg3ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt ZSBfVHA+CiAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVu Y2VfdHlwZQogICAgY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwg Y29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCiAgICAgIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7 CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAo Kl9fZmlyc3QgPT0gX192YWx1ZSkKICAgICAgICAgICsrX19uOwogICAgICByZXR1cm4gX19uOwog ICAgfQojIDQxMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1By ZWRpY2F0ZT4KICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVy ZW5jZV90eXBlCiAgICBjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s YXN0LCBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwog ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKF9f cHJlZCgqX19maXJzdCkpCiAgICAgICAgICArK19fbjsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0K IyA0NTAgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3 YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2Zp cnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19m aXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoK CgogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xhc3QyKQog ICAgICAgIHJldHVybiBfX2ZpcnN0MTsKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmly c3QyKTsKICAgICAgKytfX3RtcDsKICAgICAgaWYgKF9fdG1wID09IF9fbGFzdDIpCiAgICAgICAg cmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CgoKCiAgICAgIF9Gb3J3 YXJkSXRlcjIgX19wMSwgX19wOwoKICAgICAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogICAg ICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICAgICAgd2hpbGUgKF9fZmly c3QxICE9IF9fbGFzdDEpIHsKICAgICAgICBfX2ZpcnN0MSA9IGZpbmQoX19maXJzdDEsIF9fbGFz dDEsICpfX2ZpcnN0Mik7CiAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAg ICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgX19wID0gX19wMTsKICAgICAgICBfX2N1cnJlbnQg PSBfX2ZpcnN0MTsKICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAgICAg IHJldHVybiBfX2xhc3QxOwoKICAgICAgICB3aGlsZSAoKl9fY3VycmVudCA9PSAqX19wKSB7CiAg ICAgICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Qx OwogICAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVy biBfX2xhc3QxOwogICAgICAgIH0KCiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgICBy ZXR1cm4gX19maXJzdDE7CiAgICB9CiMgNTIyICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZD4KICAg IF9Gb3J3YXJkSXRlcjEKICAgIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2Fy ZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zvcndh cmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgIF9CaW5hcnlQcmVkIF9fcHJlZGljYXRlKQogICAg ewoKICAgICAKICAgICAKICAgICAKCgoKCiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8 IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwoKCiAgICAgIF9G b3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwogICAgICArK19fdG1wOwogICAgICBpZiAoX190 bXAgPT0gX19sYXN0MikgewogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFf X3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwog ICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgfQoKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9f cDEsIF9fcDsKCiAgICAgIF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICAgICAgX0ZvcndhcmRJ dGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxKSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAgICAgIGlm IChfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9 IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAg ICsrX19maXJzdDE7CiAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgICBy ZXR1cm4gX19sYXN0MTsKCiAgICAgICAgX19wID0gX19wMTsKICAgICAgICBfX2N1cnJlbnQgPSBf X2ZpcnN0MTsKICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0dXJuIF9fbGFz dDE7CgogICAgICAgIHdoaWxlIChfX3ByZWRpY2F0ZSgqX19jdXJyZW50LCAqX19wKSkgewogICAg ICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsK ICAgICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4g X19sYXN0MTsKICAgICAgICB9CgogICAgICAgICsrX19maXJzdDE7CiAgICAgIH0KICAgICAgcmV0 dXJuIF9fZmlyc3QxOwogICAgfQojIDU5NiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ dGVyLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAg ICBzZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CgogICAg IAogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2NvdW50IDw9IDApCiAgICAgICAgcmV0dXJuIF9f Zmlyc3Q7CiAgICAgIGVsc2UgewogICAgICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFz dCwgX192YWwpOwogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICAg X0ludGVnZXIgX19uID0gX19jb3VudCAtIDE7CiAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19pID0g X19maXJzdDsKICAgICAgICAgICsrX19pOwogICAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3Qg JiYgX19uICE9IDAgJiYgKl9faSA9PSBfX3ZhbCkgewogICAgICAgICAgICArK19faTsKICAgICAg ICAgICAgLS1fX247CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19uID09IDApCiAgICAgICAg ICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2ZpcnN0ID0g ZmluZChfX2ksIF9fbGFzdCwgX192YWwpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gX19sYXN0 OwogICAgICB9CiAgICB9CiMgNjQzICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysr LzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs IHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgdHlwZW5hbWUgX0Jp bmFyeVByZWQ+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2Zp cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwg Y29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5X3ByZWQp CiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2NvdW50IDw9IDApCiAgICAgICAgcmV0 dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgewogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz dCkgewogICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkKICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgfQogICAgICAgIHdoaWxl IChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICAgX0ludGVnZXIgX19uID0gX19jb3VudCAt IDE7CiAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgICAgICsrX19p OwogICAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19iaW5hcnlf cHJlZCgqX19pLCBfX3ZhbCkpIHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAgIC0tX19u OwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICByZXR1cm4g X19maXJzdDsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFz dCkgewogICAgICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkKICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICB9CiAgICAg ICAgICAgIF9fZmlyc3QgPSBfX2k7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVy biBfX2xhc3Q7CiAgICAgIH0KICAgIH0KIyA2OTcgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5j bHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3 YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0ZXIyCiAgICBz d2FwX3JhbmdlcyhfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEs CiAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyKQogICAgewoKICAgICAKICAg ICAKICAgICAKCgogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsr X19maXJzdDEsICsrX19maXJzdDIpCiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QxLCBfX2ZpcnN0 Mik7CiAgICAgIHJldHVybiBfX2ZpcnN0MjsKICAgIH0KIyA3MzIgIi91c3IvbG9jYWwvdm9sL2dj Yy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfVW5hcnlPcGVy YXRpb24+CiAgICBfT3V0cHV0SXRlcgogICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9V bmFyeU9wZXJhdGlvbiBfX3VuYXJ5X29wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgZm9y ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgICAgICpf X3Jlc3VsdCA9IF9fdW5hcnlfb3AoKl9fZmlyc3QpOwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAg ICB9CiMgNzY1ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lu cHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5h cnlPcGVyYXRpb24+CiAgICBfT3V0cHV0SXRlcgogICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXIxIF9f Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f Zmlyc3QyLCBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICBfQmluYXJ5T3BlcmF0 aW9uIF9fYmluYXJ5X29wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICgg OyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVzdWx0 KQogICAgICAgICpfX3Jlc3VsdCA9IF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKTsK ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDc5NiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMu Mi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICByZXBsYWNlKF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICBjb25zdCBfVHAm IF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoKICAgICAKICAgICAK CiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAg ICAgIGlmICgqX19maXJzdCA9PSBfX29sZF92YWx1ZSkKICAgICAgICAgICpfX2ZpcnN0ID0gX19u ZXdfdmFsdWU7CiAgICB9CiMgODI1ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysr LzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs IHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIHJlcGxhY2Vf aWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoKICAg ICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2Zp cnN0KQogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgICAgKl9fZmlyc3QgPSBf X25ld192YWx1ZTsKICAgIH0KIyA4NTYgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIs IHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAg cmVwbGFjZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgY29uc3Qg X1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAg ICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwg KytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdCA9PSBfX29sZF92YWx1ZSA/ IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA4 ODggIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy LCB0eXBlbmFtZSBfUHJlZGljYXRlLAogICAgICAgICAgIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRw dXRJdGVyCiAgICByZXBsYWNlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAg ICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkK ICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xh c3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX3ByZWQoKl9f Zmlyc3QpID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0Owog ICAgfQojIDkxOCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBf R2VuZXJhdG9yPgogICAgdm9pZAogICAgZ2VuZXJhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G b3J3YXJkSXRlciBfX2xhc3QsIF9HZW5lcmF0b3IgX19nZW4pCiAgICB7CgogICAgIAogICAgIAoK CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICAqX19m aXJzdCA9IF9fZ2VuKCk7CiAgICB9CiMgOTQyICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0 SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CiAgICBfT3V0cHV0SXRl cgogICAgZ2VuZXJhdGVfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIF9HZW5lcmF0 b3IgX19nZW4pCiAgICB7CgogICAgIAoKCgogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCAr K19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX2dlbigpOwogICAgICByZXR1cm4gX19maXJz dDsKICAgIH0KIyA5NjkgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l IF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVtb3ZlX2Nv cHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg IF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAog ICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp CiAgICAgICAgaWYgKCEoKl9fZmlyc3QgPT0gX192YWx1ZSkpIHsKICAgICAgICAgICpfX3Jlc3Vs dCA9ICpfX2ZpcnN0OwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVy biBfX3Jlc3VsdDsKICAgIH0KIyAxMDAzICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy LCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9PdXRwdXRJ dGVyCiAgICByZW1vdmVfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9QcmVkaWNhdGUg X19wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0 ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICghX19wcmVkKCpfX2ZpcnN0KSkgewog ICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgICArK19fcmVzdWx0OwogICAg ICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEwMzkgIi91c3IvbG9jYWwvdm9s L2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBy ZW1vdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg ICAgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAg X19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlKTsKICAgICAgX0ZvcndhcmRJ dGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmly c3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHkoKytfX2ksIF9f bGFzdCwgX19maXJzdCwgX192YWx1ZSk7CiAgICB9CiMgMTA3MyAiL3Vzci9sb2NhbC92b2wvZ2Nj LzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAg ICByZW1vdmVfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAg IF9fZmlyc3QgPSBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkKTsKICAgICAgX0Zvcndh cmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9f Zmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHlfaWYoKytf X2ksIF9fbGFzdCwgX19maXJzdCwgX19wcmVkKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgog ICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg b3V0cHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICpfX3Jl c3VsdCA9IF9fdmFsdWU7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAg IGlmICghKF9fdmFsdWUgPT0gKl9fZmlyc3QpKSB7CiAgICAgICAgICBfX3ZhbHVlID0gKl9fZmly c3Q7CiAgICAgICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgICAgfQogICAgICByZXR1 cm4gKytfX3Jlc3VsdDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl ciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaXF1ZV9j b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVy YXRvcl90YWcpCiAgICB7CgogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgd2hpbGUg KCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCEoKl9fcmVzdWx0ID09ICpfX2ZpcnN0 KSkKICAgICAgICAgICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiArK19fcmVz dWx0OwogICAgfQojIDExNDUgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu YW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICB1bmlxdWVfY29weShf SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVn b3J5IF9JdGVyVHlwZTsKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVz dWx0OwogICAgICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0 LCBfSXRlclR5cGUoKSk7CiAgICB9CiMgMTE3MCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAg ICBfT3V0cHV0SXRlcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAg ICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAg ICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgoKICAgICAgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19m aXJzdDsKICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hpbGUgKCsrX19maXJzdCAh PSBfX2xhc3QpCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKF9fdmFsdWUsICpfX2ZpcnN0KSkg ewogICAgICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAgICAgKisrX19yZXN1bHQgPSBf X3ZhbHVlOwogICAgICAgIH0KICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CiMgMTE5OSAi L3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0 eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaXF1ZV9j b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRp Y2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh ZykKICAgIHsKCiAgICAgCgoKCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICB3aGls ZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fcmVz dWx0LCAqX19maXJzdCkpICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiArK19f cmVzdWx0OwogICAgfQojIDEyMzIgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysv My4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5 cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgaW5saW5l IF9PdXRwdXRJdGVyCiAgICB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAg ICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAg IAoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9PdXRwdXRJdGVyPjo6 aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOwoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0 KSByZXR1cm4gX19yZXN1bHQ7CiAgICAgIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9f bGFzdCwKX19yZXN1bHQsIF9fYmluYXJ5X3ByZWQsIF9JdGVyVHlwZSgpKTsKICAgIH0KIyAxMjYz ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAg IHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsK CiAgICAgICAgIAogICAgICAgICAKCgogICAgICAgICAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQo X19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBf X2xhc3QsIF9fZmlyc3QpOwogICAgfQojIDEyOTAgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5j bHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3 YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAg dW5pcXVlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg ICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoK CiAgICAgIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCwgX19iaW5hcnlf cHJlZCk7CiAgICAgIHJldHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3Qs IF9fYmluYXJ5X3ByZWQpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl Y3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBfX3JldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9f Zmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgICAgICB3aGlsZSAodHJ1 ZSkKICAgICAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0IHx8IF9fZmlyc3QgPT0gLS1fX2xh c3QpCiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgZWxzZQogICAgICAgICAg ICAgICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCBfX2xhc3QpOwogICAgfQoKCgoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fcmV2ZXJzZShf UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAg ICAgICAgICB3aGlsZSAoX19maXJzdCA8IF9fbGFzdCkKICAgICAgICAgICAgaXRlcl9zd2FwKF9f Zmlyc3QrKywgLS1fX2xhc3QpOwogICAgfQojIDEzNDkgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9C aWRpcmVjdGlvbmFsSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICByZXZlcnNlKF9CaWRpcmVjdGlv bmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewoKICAgICAg ICAgCgogICAgICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRl Z29yeShfX2ZpcnN0KSk7CiAgICB9CiMgMTM3NCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly ZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBy ZXZlcnNlX2NvcHkoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1 bHQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkg ewogICAgICAgIC0tX19sYXN0OwogICAgICAgICpfX3Jlc3VsdCA9ICpfX2xhc3Q7CiAgICAgICAg KytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgMTM5OSAi L3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0V1Y2xpZGVhblJpbmdFbGVtZW50PgogICAgX0V1Y2xpZGVh blJpbmdFbGVtZW50CiAgICBfX2djZChfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19tLCBfRXVjbGlk ZWFuUmluZ0VsZW1lbnQgX19uKQogICAgewogICAgICB3aGlsZSAoX19uICE9IDApIHsKICAgICAg ICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX190ID0gX19tICUgX19uOwogICAgICAgIF9fbSA9IF9f bjsKICAgICAgICBfX24gPSBfX3Q7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fbTsKICAgIH0KCgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0 ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRs ZSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgZm9yd2Fy ZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwg KF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0ZvcndhcmRJdGVy IF9fZmlyc3QyID0gX19taWRkbGU7CiAgICAgIGRvIHsKICAgICAgICBzd2FwKCpfX2ZpcnN0Kyss ICpfX2ZpcnN0MisrKTsKICAgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgICAg IF9fbWlkZGxlID0gX19maXJzdDI7CiAgICAgIH0gd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCk7 CgogICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fZmlyc3QyICE9IF9f bGFzdCkgewogICAgICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgICAgIGlm IChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICAg ICAgICBlbHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAgICAgICAgICBfX2ZpcnN0MiA9IF9f bWlkZGxlOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0 aW9uYWxJdGVyPgogICAgdm9pZAogICAgX19yb3RhdGUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly c3QsCiAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAg ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxf aXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgogICAgICBpZiAoKF9fZmlyc3QgPT0gX19taWRk bGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUpKQogICAgICAgIHJldHVybjsKCiAgICAgIF9fcmV2 ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAg ICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh ZygpKTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9fbWlkZGxlICE9IF9f bGFzdCkKICAgICAgICBzd2FwICgqX19maXJzdCsrLCAqLS1fX2xhc3QpOwoKICAgICAgaWYgKF9f Zmlyc3QgPT0gX19taWRkbGUpIHsKICAgICAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwg YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAg ICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh ZygpKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl c3NJdGVyPgogICAgdm9pZAogICAgX19yb3RhdGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwK ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRv cl90YWcpCiAgICB7CgogICAgIAoKCiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwg KF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUg X0Rpc3RhbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t QWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIF9EaXN0YW5jZSBfX24g PSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2UgX19rID0gX19taWRkbGUgLSBfX2Zp cnN0OwogICAgICBfRGlzdGFuY2UgX19sID0gX19uIC0gX19rOwoKICAgICAgaWYgKF9fayA9PSBf X2wpIHsKICAgICAgICBzd2FwX3JhbmdlcyhfX2ZpcnN0LCBfX21pZGRsZSwgX19taWRkbGUpOwog ICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgX0Rpc3RhbmNlIF9fZCA9IF9fZ2NkKF9fbiwg X19rKTsKCiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faSA9IDA7IF9faSA8IF9fZDsgX19pKyspIHsK ICAgICAgICBfVmFsdWVUeXBlIF9fdG1wID0gKl9fZmlyc3Q7CiAgICAgICAgX1JhbmRvbUFjY2Vz c0l0ZXIgX19wID0gX19maXJzdDsKCiAgICAgICAgaWYgKF9fayA8IF9fbCkgewogICAgICAgICAg Zm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19sL19fZDsgX19qKyspIHsKICAgICAgICAg ICAgaWYgKF9fcCA+IF9fZmlyc3QgKyBfX2wpIHsKICAgICAgICAgICAgICAqX19wID0gKihfX3Ag LSBfX2wpOwogICAgICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAgICAgIH0KCiAgICAgICAg ICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAg ICB9CiAgICAgICAgfQoKICAgICAgICBlbHNlIHsKICAgICAgICAgIGZvciAoX0Rpc3RhbmNlIF9f aiA9IDA7IF9faiA8IF9fay9fX2QgLSAxOyBfX2ogKyspIHsKICAgICAgICAgICAgaWYgKF9fcCA8 IF9fbGFzdCAtIF9faykgewogICAgICAgICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAg ICAgICAgICAgX19wICs9IF9fazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgKl9fcCA9ICog KF9fcCAtIF9fbCk7CiAgICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAgICB9CiAgICAgICAg fQoKICAgICAgICAqX19wID0gX190bXA7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9 CiMgMTU2MSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIHZv aWQKICAgIHJvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxl LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKCiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVy VHlwZTsKICAgICAgX19yb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0l0ZXJUeXBl KCkpOwogICAgfQojIDE1ODkgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw ZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgcm90YXRlX2NvcHkoX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgIF9G b3J3YXJkSXRlciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAg ICAKCgogICAgICByZXR1cm4gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgY29weShfX21pZGRsZSwg X19sYXN0LCBfX3Jlc3VsdCkpOwogICAgfQojIDE2MTIgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9E aXN0YW5jZT4KICAgIGlubGluZSBfRGlzdGFuY2UKICAgIF9fcmFuZG9tX251bWJlcihfRGlzdGFu Y2UgX19uKQogICAgewoKICAgICAgcmV0dXJuIGxyYW5kNDgoKSAlIF9fbjsKCgoKICAgIH0KIyAx NjM0ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2 b2lkCiAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9f bGFzdCkgcmV0dXJuOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Qg KyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0 ICsgX19yYW5kb21fbnVtYmVyKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKICAgIH0KIyAxNjYwICIv dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1JhbmRvbU51 bWJlckdlbmVyYXRvcj4KICAgIHZvaWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJ dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg IF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYg KF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIg X19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJfc3dh cChfX2ksIF9fZmlyc3QgKyBfX3JhbmQoKF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQoKCgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+ CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAg ICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmly c3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgICAgIHdoaWxlIChfX3ByZWQoKl9fZmly c3QpKQogICAgICAgIGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAg ICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwoKICAgICAgd2hpbGUgKCsrX19uZXh0 ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7CiAgICAgICAgICBzd2Fw KCpfX2ZpcnN0LCAqX19uZXh0KTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICB9CgogICAg ICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl Y3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIK ICAgIF9fcGFydGl0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25h bEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAg ICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKHRy dWUpIHsKICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFz dCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIGlmIChfX3ByZWQo Kl9fZmlyc3QpKQogICAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBlbHNlCiAgICAgICAg ICAgIGJyZWFrOwogICAgICAgIC0tX19sYXN0OwogICAgICAgIHdoaWxlICh0cnVlKQogICAgICAg ICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAg ICAgICAgIGVsc2UgaWYgKCFfX3ByZWQoKl9fbGFzdCkpCiAgICAgICAgICAgIC0tX19sYXN0Owog ICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgICAgICBpdGVyX3N3YXAoX19maXJz dCwgX19sYXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxNzQ4ICIvdXNy L2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBp bmxpbmUgX0ZvcndhcmRJdGVyCiAgICBwYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G b3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7 CgogICAgIAogICAgIAoKCiAgICAgIHJldHVybiBfX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3Qs IF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgoKCgoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5h bWUgX0Rpc3RhbmNlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX2lucGxhY2Vfc3RhYmxlX3BhcnRp dGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4p CiAgICB7CiAgICAgIGlmIChfX2xlbiA9PSAxKQogICAgICAgIHJldHVybiBfX3ByZWQoKl9fZmly c3QpID8gX19sYXN0IDogX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19m aXJzdDsKICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICAgICAgX0ZvcndhcmRJ dGVyIF9fYmVnaW4gPSBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX21pZGRs ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19sZW4gLyAyKTsKICAgICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19pbnBsYWNl X3N0YWJsZV9wYXJ0aXRpb24oX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMik7 CiAgICAgIHJvdGF0ZShfX2JlZ2luLCBfX21pZGRsZSwgX19lbmQpOwogICAgICBhZHZhbmNlKF9f YmVnaW4sIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2VuZCkpOwogICAgICByZXR1cm4gX19iZWdpbjsK ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Q b2ludGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5j ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgIGlm IChfX2xlbiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0 MSA9IF9fZmlyc3Q7CiAgICAgICAgX1BvaW50ZXIgX19yZXN1bHQyID0gX19idWZmZXI7CiAgICAg ICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCA7ICsrX19maXJzdCkKICAgICAgICAgIGlmIChf X3ByZWQoKl9fZmlyc3QpKSB7CiAgICAgICAgICAgICpfX3Jlc3VsdDEgPSAqX19maXJzdDsKICAg ICAgICAgICAgKytfX3Jlc3VsdDE7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAg ICAgICAgKl9fcmVzdWx0MiA9ICpfX2ZpcnN0OwogICAgICAgICAgICArK19fcmVzdWx0MjsKICAg ICAgICAgIH0KICAgICAgICBjb3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVzdWx0MSk7CiAg ICAgICAgcmV0dXJuIF9fcmVzdWx0MTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9y d2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9f bGVuIC8gMik7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fYmVnaW4gPSBfX3N0YWJsZV9wYXJ0aXRp b25fYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19z dGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s ZW4gLSBfX2xlbiAvIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgcm90YXRl KF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7CiAgICAgICAgYWR2YW5jZShfX2JlZ2luLCBkaXN0 YW5jZShfX21pZGRsZSwgX19lbmQpKTsKICAgICAgICByZXR1cm4gX19iZWdpbjsKICAgICAgfQog ICAgfQojIDE4NDggIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUg X1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgc3RhYmxlX3BhcnRpdGlvbihfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg X1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0 ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZQogICAgICB7CiAg ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFs dWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKICAgICAg ICBfVGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmly c3QsIF9fbGFzdCk7CiAgICAgICAgaWYgKF9fYnVmLnNpemUoKSA+IDApCiAgICAgICAgICByZXR1 cm4gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBl KF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfX2J1Zi5zaXplKCkpOwogICAgICAgIGVsc2UK ICAgICAgICAgIHJldHVybiBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xh c3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf RGlzdGFuY2VUeXBlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpKTsKICAgICAgfQogICAgfQoKCgoK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAg ICBfUmFuZG9tQWNjZXNzSXRlcgogICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nl c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICBfVHAgX19waXZvdCkKICAgIHsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAg ICB3aGlsZSAoKl9fZmlyc3QgPCBfX3Bpdm90KQogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAg IC0tX19sYXN0OwogICAgICAgIHdoaWxlIChfX3Bpdm90IDwgKl9fbGFzdCkKICAgICAgICAgIC0t X19sYXN0OwogICAgICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICAgICAgcmV0dXJu IF9fZmlyc3Q7CiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytf X2ZpcnN0OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj Y2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfUmFuZG9tQWNj ZXNzSXRlcgogICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBf VHAgX19waXZvdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB3aGlsZSAodHJ1ZSkgewog ICAgICAgIHdoaWxlIChfX2NvbXAoKl9fZmlyc3QsIF9fcGl2b3QpKQogICAgICAgICAgKytfX2Zp cnN0OwogICAgICAgIC0tX19sYXN0OwogICAgICAgIHdoaWxlIChfX2NvbXAoX19waXZvdCwgKl9f bGFzdCkpCiAgICAgICAgICAtLV9fbGFzdDsKICAgICAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0 KSkKICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBf X2xhc3QpOwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgfQojIDE5MjkgIi91c3IvbG9j YWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIGVudW0g eyBfTV90aHJlc2hvbGQgPSAxNiB9OwoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B Y2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJf aW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsKQogICAgewogICAgICBf UmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAgICAgIC0tX19uZXh0OwogICAgICB3 aGlsZSAoX192YWwgPCAqX19uZXh0KSB7CiAgICAgICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICAg ICAgX19sYXN0ID0gX19uZXh0OwogICAgICAgIC0tX19uZXh0OwogICAgICB9CiAgICAgICpfX2xh c3QgPSBfX3ZhbDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz SXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fdW5n dWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWws IF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0g X19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAgd2hpbGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4 dCkpIHsKICAgICAgICAqX19sYXN0ID0gKl9fbmV4dDsKICAgICAgICBfX2xhc3QgPSBfX25leHQ7 CiAgICAgICAgLS1fX25leHQ7CiAgICAgIH0KICAgICAgKl9fbGFzdCA9IF9fdmFsOwogICAgfQoK CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAg X19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwoK ICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9f bGFzdDsgKytfX2kpCiAgICAgIHsKICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh bmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsID0gKl9faTsKICAgICAgICBpZiAoX192 YWwgPCAqX19maXJzdCkgewogICAgICAgICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2ksIF9f aSArIDEpOwogICAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbDsKICAgICAgICB9CiAgICAgICAgZWxz ZQogICAgICAgICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9fdmFsKTsKICAgICAg fQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl bmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vz c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkg cmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsg X19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsKICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsID0gKl9faTsKICAgICAg ICBpZiAoX19jb21wKF9fdmFsLCAqX19maXJzdCkpIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQo X19maXJzdCwgX19pLCBfX2kgKyAxKTsKICAgICAgICAgICpfX2ZpcnN0ID0gX192YWw7CiAgICAg ICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19p LCBfX3ZhbCwgX19jb21wKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5ndWFyZGVkX2luc2Vy dGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f bGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv bUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICBmb3IgKF9SYW5kb21B Y2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIF9f dW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFsdWVUeXBlKCpfX2kpKTsKICAgIH0KCgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBh cmU+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUg X1ZhbHVlVHlwZTsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdDsg X19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChf X2ksIF9WYWx1ZVR5cGUoKl9faSksIF9fY29tcCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBfX2ZpbmFsX2luc2VydGlvbl9z b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkK ICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAg ICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfTV90aHJlc2hvbGQpOwogICAg ICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9fZmlyc3QgKyBfTV90aHJlc2hvbGQsIF9f bGFzdCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJz dCwgX19sYXN0KTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz SXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2ZpbmFsX2luc2VydGlvbl9z b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBp ZiAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIF9faW5zZXJ0aW9u X3NvcnQoX19maXJzdCwgX19maXJzdCArIF9NX3RocmVzaG9sZCwgX19jb21wKTsKICAgICAgICBf X3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBfX2xhc3Qs IF9fY29tcCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19m aXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9T aXplPgogICAgaW5saW5lIF9TaXplCiAgICBfX2xnKF9TaXplIF9fbikKICAgIHsKICAgICAgX1Np emUgX19rOwogICAgICBmb3IgKF9fayA9IDA7IF9fbiAhPSAxOyBfX24gPj49IDEpICsrX19rOwog ICAgICByZXR1cm4gX19rOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B Y2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZT4KICAgIHZvaWQKICAgIF9faW50cm9zb3J0X2xvb3Ao X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0KQogICAgewogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUg X1ZhbHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xk KSB7CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICAgICAgcGFydGlhbF9z b3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9 CiAgICAgICAgLS1fX2RlcHRoX2xpbWl0OwogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0 ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19m aXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAgICAgICAgX19pbnRy b3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xpbWl0KTsKICAgICAgICBfX2xhc3Qg PSBfX2N1dDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B Y2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAg ICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCwg X0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIHdo aWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgaWYgKF9fZGVw dGhfbGltaXQgPT0gMCkgewogICAgICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwg X19sYXN0LCBfX2NvbXApOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAtLV9f ZGVwdGhfbGltaXQ7CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICAgICAg X191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFz dCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwgX19jb21wKSksCiAgICAgICAgICAgX19jb21wKTsK ICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3QsIF9fZGVwdGhfbGltaXQsIF9f Y29tcCk7CiAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAgICAgIH0KICAgIH0KIyAyMTY2ICIvdXNy L2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBz b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkK ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz c0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAo X19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9f bGFzdCwgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIpOwogICAgICAgIF9fZmluYWxfaW5zZXJ0 aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAgfQogICAgfQojIDIxOTcgIi91c3IvbG9j YWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlu bGluZSB2b2lkCiAgICBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVl VHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAg ICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2xnKF9fbGFzdCAtIF9fZmly c3QpICogMiwgX19jb21wKTsKICAgICAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs IF9fbGFzdCwgX19jb21wKTsKICAgICAgfQogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChf UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7 CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgICAgICBfX2luc2VydGlvbl9z b3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9SYW5k b21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7 CiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIF9f aW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0KTsKICAgICAgX19tZXJnZV93aXRo b3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2xhc3QgLSBfX21pZGRsZSk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh bmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19pbnBsYWNl X3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7 CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgICAgICBfX2luc2VydGlvbl9z b3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAg ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmly c3QpIC8gMjsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBf X2NvbXApOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCwgX19j b21wKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xhc3QgLSBfX21pZGRsZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMiwKICAgICAgICAgICB0 eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9t QWNjZXNzSXRlcjEgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3Rl cF9zaXplKQogICAgewogICAgICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6 ZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsKICAgICAg ICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdv X3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCk7CiAgICAgICAgX19maXJz dCArPSBfX3R3b19zdGVwOwogICAgICB9CgogICAgICBfX3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFu Y2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKICAgICAgbWVyZ2UoX19maXJzdCwg X19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAg ICAgICAgICAgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj ZXNzSXRlcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMiwKICAgICAgICAgICB0eXBlbmFt ZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0 X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9E aXN0YW5jZSBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29t cCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7Cgog ICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICAgICAgX19y ZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAg ICAgICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVw LAogICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbXApOwogICAgICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICAgICAgfQogICAg ICBfX3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9z aXplKTsKCiAgICAgIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAg ICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgICAgIF9fcmVzdWx0 LAogICAgICAgICAgICBfX2NvbXApOwogICAgfQoKICBlbnVtIHsgX01fY2h1bmtfc2l6ZSA9IDcg fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9EaXN0 YW5jZT4KICAgIHZvaWQKICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0 ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplKQogICAgewogICAgICB3aGlsZSAoX19sYXN0 IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9f Zmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUpOwogICAgICAgIF9fZmlyc3QgKz0gX19jaHVu a19zaXplOwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9E aXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2NodW5rX2luc2VydGlv bl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSwgX0Nv bXBhcmUgX19jb21wKQogICAgewogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2No dW5rX3NpemUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBf X2NodW5rX3NpemUsIF9fY29tcCk7CiAgICAgICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAg ICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9p bnRlcj4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9E aXN0YW5jZTsKCiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAg IF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICAgICAgX0Rpc3Rh bmNlIF9fc3RlcF9zaXplID0gX01fY2h1bmtfc2l6ZTsKICAgICAgX19jaHVua19pbnNlcnRpb25f c29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplKTsKCiAgICAgIHdoaWxlIChfX3N0ZXBf c2l6ZSA8IF9fbGVuKSB7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0 LCBfX2J1ZmZlciwgX19zdGVwX3NpemUpOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAg ICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9f c3RlcF9zaXplKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICB9CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlw ZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfQ29tcGFyZSBfX2NvbXAp CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl c3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKCiAgICAgIF9EaXN0YW5jZSBfX2xl biA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1 ZmZlciArIF9fbGVuOwoKICAgICAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX01fY2h1bmtfc2l6 ZTsKICAgICAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9z aXplLCBfX2NvbXApOwoKICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgICAg ICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6 ZSwgX19jb21wKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICAgIF9fbWVyZ2Vfc29y dF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSwgX19j b21wKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUg X0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkK ICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7 CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogICAg ICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFw dGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAg IF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVm ZmVyX3NpemUpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbWVyZ2Vfc29ydF93aXRo X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgIF9fbWVyZ2Vfc29y dF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgIH0KICAgICAg X19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19t aWRkbGUgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0 IC0gX19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUg X0Rpc3RhbmNlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19z dGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNj ZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVm ZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg X0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0g X19maXJzdCArIDEpIC8gMjsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2Zp cnN0ICsgX19sZW47CiAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBf X3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZm ZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAg X19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZm ZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgIH0K ICAgICAgZWxzZSB7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9f bWlkZGxlLCBfX2J1ZmZlciwgX19jb21wKTsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZm ZXIoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fY29tcCk7CiAgICAgIH0KICAgICAgX19t ZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRk bGUgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0g X19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbXApOwogICAgfQojIDI0MzAgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl c3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9W YWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B Y2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAg CgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1ZhbHVlVHlwZT4g YnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChidWYuYmVnaW4oKSA9PSAwKQogICAgICAg IF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBlbHNlCiAgICAg ICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLCBf RGlzdGFuY2VUeXBlKGJ1Zi5zaXplKCkpKTsKICAgIH0KIyAyNDY2ICIvdXNyL2xvY2FsL3ZvbC9n Y2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9p ZAogICAgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVU eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKCiAg ICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVmFsdWVUeXBlPiBidWYo X19maXJzdCwgX19sYXN0KTsKICAgICAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19p bnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgZWxzZQog ICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4o KSwgX0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29tcCk7CiAgICB9CiMgMjUwMiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj Y2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m aXJzdCwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAg ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBf VmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlk ZGxlKTsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19pIDwg X19sYXN0OyArK19faSkKICAgICAgICBpZiAoKl9faSA8ICpfX2ZpcnN0KQogICAgICAgICAgX19w b3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVmFsdWVUeXBlKCpfX2kpKTsKICAgICAg c29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgIH0KIyAyNTQwICIvdXNyL2xvY2FsL3Zv bC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAg ICBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg ICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj ZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46 OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBtYWtlX2hlYXAo X19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIg X19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaWYgKF9fY29tcCgq X19pLCAqX19maXJzdCkpCiAgICAgICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBf X2ksIF9WYWx1ZVR5cGUoKl9faSksIF9fY29tcCk7CiAgICAgIHNvcnRfaGVhcChfX2ZpcnN0LCBf X21pZGRsZSwgX19jb21wKTsKICAgIH0KIyAyNTc5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIF9SYW5kb21BY2Nlc3NJdGVy CiAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmly c3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0 KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy Pjo6dmFsdWVfdHlwZSBfSW5wdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfT3V0cHV0VmFsdWVU eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAgICAg CiAgICAgCgogICAgICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0dXJu IF9fcmVzdWx0X2xhc3Q7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFz dCA9IF9fcmVzdWx0X2ZpcnN0OwogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jl c3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAgICAgICpfX3Jlc3VsdF9yZWFs X2xhc3QgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICAgICAr K19fZmlyc3Q7CiAgICAgIH0KICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3Vs dF9yZWFsX2xhc3QpOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBp ZiAoKl9fZmlyc3QgPCAqX19yZXN1bHRfZmlyc3QpCiAgICAgICAgICBfX2FkanVzdF9oZWFwKF9f cmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICAgICAgICBf RGlzdGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwKICAgICAg ICAgICAgICAgICAgICAgICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSk7CiAgICAgICAgKytf X2ZpcnN0OwogICAgICB9CiAgICAgIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRf cmVhbF9sYXN0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKICAgIH0KIyAyNjMz ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNz SXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgcGFydGlh bF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAg ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgX0lucHV0VmFsdWVUeXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl cj46OnZhbHVlX3R5cGUgX091dHB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3Rh bmNlVHlwZTsKCgogICAgIAogICAgIAogICAgIAogICAgIAoKCiAgICAgIGlmIChfX3Jlc3VsdF9m aXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgICAgIHdo aWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9s YXN0KSB7CiAgICAgICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgICAgICsr X19yZXN1bHRfcmVhbF9sYXN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgICBtYWtl X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICAgICAg d2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdCwg Kl9fcmVzdWx0X2ZpcnN0KSkKICAgICAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3Qs IF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUo X19yZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAg ICAgICBfSW5wdXRWYWx1ZVR5cGUoKl9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICBf X2NvbXApOwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgICBzb3J0X2hlYXAoX19yZXN1 bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICAgICAgcmV0dXJuIF9fcmVz dWx0X3JlYWxfbGFzdDsKICAgIH0KIyAyNjg2ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9f Zmlyc3QsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAg ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1 ZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykg ewogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVk X3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0 KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICooX19sYXN0IC0gMSkpKSk7CiAgICAgICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICAgICAg X19maXJzdCA9IF9fY3V0OwogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGFzdCA9IF9fY3V0Owog ICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KIyAy NzI4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0Nv bXBhcmU+CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0 LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAg ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf Q29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCiAg ICAgCgoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7CiAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmly c3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9f bWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29t cCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgaWYg KF9fY3V0IDw9IF9fbnRoKQogICAgICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgICAgIGVsc2UK ICAgICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQo X19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQojIDI3NjggIi91c3IvbG9jYWwvdm9sL2dj Yy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBsb3dl cl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3Qg X1RwJiBfX3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3Rh bmNlVHlwZTsKCgoKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19s ZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFs ZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkg ewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0 OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKCpfX21pZGRs ZSA8IF9fdmFsKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19f Zmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAg ICAgICAgZWxzZQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgIH0KICAgICAgcmV0dXJu IF9fZmlyc3Q7CiAgICB9CiMgMjgxNiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBs b3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVf dHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf Rm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAg IAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7 CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7 CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsK ICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19o YWxmKTsKICAgICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgICAgICBf X2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9 IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX19s ZW4gPSBfX2hhbGY7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjg1NiAi L3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9y d2FyZEl0ZXIKICAgIHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0 ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZl cmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rp c3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0 YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGls ZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21p ZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAg ICBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAg ICBlbHNlIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJz dDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAg fQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyOTAxICIvdXNyL2xvY2FsL3ZvbC9nY2Mv My4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9y d2FyZEl0ZXIKICAgIHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19j b21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2Fy ZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBl OwoKCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19m aXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJk SXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYg PSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNl KF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkp CiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fZmly c3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19s ZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsK ICAgIH0KIyAyOTQ4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l IF9UcD4KICAgIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CiAgICBlcXVhbF9yYW5n ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBf X3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh cmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlw ZTsKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0 YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAg X0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogICAgICB3aGlsZSAoX19s ZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9 IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAo Kl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAg ICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAg ICAgIH0KICAgICAgICBlbHNlIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAgICAgIF9fbGVu ID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQo X19maXJzdCwgX19taWRkbGUsIF9fdmFsKTsKICAgICAgICAgIGFkdmFuY2UoX19maXJzdCwgX19s ZW4pOwogICAgICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3Qs IF9fdmFsKTsKICAgICAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVy PihfX2xlZnQsIF9fcmlnaHQpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcGFpcjxf Rm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7CiAgICB9CiMgMzAw MyAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVu YW1lIF9Db21wYXJlPgogICAgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KICAgIGVx dWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25z dCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90 eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9G b3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAg CiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19s YXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21p ZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAg IF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAg IGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUs IF9fdmFsKSkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2Zp cnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAg ICAgIGVsc2UgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0g X19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19m aXJzdCwgX19taWRkbGUsIF9fdmFsLCBfX2NvbXApOwogICAgICAgICAgYWR2YW5jZShfX2ZpcnN0 LCBfX2xlbik7CiAgICAgICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19m aXJzdCwgX192YWwsIF9fY29tcCk7CiAgICAgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIs IF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAg cmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3Qp OwogICAgfQojIDMwNTIgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5h bWUgX1RwPgogICAgYm9vbAogICAgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwg X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkK ICAgIHsKCgogICAgIAogICAgIAoKICAgICAKCiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dl cl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICAgICAgcmV0dXJuIF9faSAhPSBfX2xh c3QgJiYgIShfX3ZhbCA8ICpfX2kpOwogICAgfQojIDMwODMgIi91c3IvbG9jYWwvdm9sL2djYy8z LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wK ICAgIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkK ICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dl cl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXApOwogICAgICByZXR1cm4gX19p ICE9IF9fbGFzdCAmJiAhX19jb21wKF9fdmFsLCAqX19pKTsKICAgIH0KIyAzMTE1ICIvdXNyL2xv Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1l IF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmly c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs IF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAg IHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmly c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmICgqX19m aXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAg ICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9f cmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAg ICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0 MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KIyAzMTY2ICIvdXNy L2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVu YW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1 dEl0ZXIKICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx LAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAg ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAg ICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9 IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9f Zmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAg ICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpf X3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAg ICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFz dDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgoKCgoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAg ICB2b2lkCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRk bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBf X2xlbjIpCiAgICB7CiAgICAgIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgICAg ICByZXR1cm47CiAgICAgIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAgICAgIGlmICgq X19taWRkbGUgPCAqX19maXJzdCkKICAgICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19t aWRkbGUpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRf Y3V0ID0gX19taWRkbGU7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgX0Rpc3Rh bmNlIF9fbGVuMjIgPSAwOwogICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgICAgX19s ZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7 CiAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9f Zmlyc3RfY3V0KTsKICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25k X2N1dCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7 CiAgICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAgIF9fZmlyc3Rf Y3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQpOwogICAg ICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgIH0KICAg ICAgcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9IF9fZmlyc3RfY3V0OwogICAgICBhZHZhbmNl KF9fbmV3X21pZGRsZSwgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCkpOwogICAgICBf X21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xMSwgX19sZW4yMik7CiAgICAgIF9f bWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIgLSBf X2xlbjIyKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0 ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBf X21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9f bGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKF9fbGVu MSArIF9fbGVuMiA9PSAyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsICpfX2ZpcnN0 KSkKICAgICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgICAgIHJl dHVybjsKICAgICAgfQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2Zp cnN0OwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAg ICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwog ICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7 CiAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAgX19zZWNvbmRf Y3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXAp OwogICAgICAgIF9fbGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAg ICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICBh ZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgX19maXJzdF9jdXQgPSB1cHBl cl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21wKTsKICAgICAg ICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAgICB9CiAgICAg IHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIF9CaWRp cmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPSBfX2ZpcnN0X2N1dDsKICAgICAgYWR2YW5jZShf X25ld19taWRkbGUsIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpKTsKICAgICAgX19t ZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIsIF9fY29tcCk7CiAg ICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xl bjIgLSBfX2xlbjIyLCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9C aWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAg ICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMQogICAgX19yb3Rh dGVfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAg ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh bmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRp cmVjdGlvbmFsSXRlcjIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Ug X19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlcl9l bmQ7CiAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIgJiYgX19sZW4yIDw9IF9fYnVmZmVyX3NpemUp IHsKICAgICAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVy KTsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwogICAg ICAgIHJldHVybiBjb3B5KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fZmlyc3QpOwogICAgICB9 CiAgICAgIGVsc2UgaWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19idWZm ZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgIGNvcHko X19taWRkbGUsIF9fbGFzdCwgX19maXJzdCk7CiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQo X19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICAgICAgfQogICAgICBlbHNlIHsKICAg ICAgICByb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7CiAgICAgICAgYWR2YW5jZShf X2ZpcnN0LCBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KSk7CiAgICAgICAgcmV0dXJuIF9fZmly c3Q7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1l IF9CaWRpcmVjdGlvbmFsSXRlcjM+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzCiAgICBfX21lcmdl X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRl cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2Zp cnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0KQogICAgewogICAgICBpZiAoX19maXJzdDEgPT0g X19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0Miwg X19yZXN1bHQpOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4g Y29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFz dDE7CiAgICAgIC0tX19sYXN0MjsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpZiAoKl9f bGFzdDIgPCAqX19sYXN0MSkgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAg ICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gY29weV9i YWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9fbGFz dDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19s YXN0MjsKICAgICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1 cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgICAg ICAtLV9fbGFzdDI7CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwK ICAgICAgICAgICB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIzLCB0eXBlbmFtZSBfQ29tcGFy ZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMKICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0 aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAg ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25h bEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMg X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg ICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQo X19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFz dDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVz dWx0KTsKICAgICAgLS1fX2xhc3QxOwogICAgICAtLV9fbGFzdDI7CiAgICAgIHdoaWxlICh0cnVl KSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19sYXN0MiwgKl9fbGFzdDEpKSB7CiAgICAgICAgICAq LS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEp CiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9f cmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAg ICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICAgICAgaWYgKF9fZmlyc3QyID09 IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19f bGFzdDEsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MjsKICAgICAgICB9CiAgICAgIH0K ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVu YW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1BvaW50ZXI+CiAgICB2b2lkCiAgICBfX21lcmdlX2Fk YXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEs IF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVy LCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgICAgIGlmIChfX2xlbjEgPD0g X19sZW4yICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVy IF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAg ICAgICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19m aXJzdCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJf c2l6ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxl LCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgICAgICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0 LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICAgICAgICAgIH0K ICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9j dXQgPSBfX2ZpcnN0OwogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0 ID0gX19taWRkbGU7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgICAg ICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgICAgICAgICBpZiAoX19sZW4xID4gX19sZW4y KSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgICAgICAg ICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICAgICAgICAgICAgX19z ZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsK ICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9j dXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICBf X2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShfX3NlY29uZF9j dXQsIF9fbGVuMjIpOwogICAgICAgICAgICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5k KF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAgICAgICAgX19s ZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAgICAgICAgfQogICAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAgICAgICAgICAg ICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9f bGVuMjIsIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1 ZmZlcl9zaXplKTsKICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0 X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgICAgX19tZXJnZV9h ZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xl bjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVm ZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUg X1BvaW50ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21l cmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgIF9C aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBf X2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9f YnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgX0Nv bXBhcmUgX19jb21wKQogICAgewogICAgICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19s ZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5k ID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgICAgICBtZXJnZShf X2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0LCBfX2NvbXAp OwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUp IHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19s YXN0LCBfX2J1ZmZlcik7CiAgICAgICAgICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19t aWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICAgIH0KICAgICAgICAg IGVsc2UgewogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2Zp cnN0OwogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRk bGU7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgICAgICAgX0Rpc3Rh bmNlIF9fbGVuMjIgPSAwOwogICAgICAgICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAg ICAgICAgICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgICAgICAgICAgICBhZHZh bmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICAgICAgICAgICAgX19zZWNvbmRfY3V0 ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwog ICAgICAgICAgICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1 dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgIF9f bGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgICAgICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1 dCwgX19sZW4yMik7CiAgICAgICAgICAgICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQo X19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICAgICAgICAgICAg ICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgICAgICAg IH0KICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICAgICAg ICAgICAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNv bmRfY3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xl bjExLCBfX2xlbjIyLCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwg X19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKICAgICAg ICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0 LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAt IF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogICAgICAgICAgfQog ICAgfQojIDM1MDggIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAg IHZvaWQKICAgIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAg ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAg ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZQogICAgICAg ICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Jp ZGlyZWN0aW9uYWxJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBl OwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRk bGUgPT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4x ID0gZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOwogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVu MiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8 X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwog ICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZm ZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIpOwogICAgICBlbHNl CiAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xl bjEsIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0 YW5jZVR5cGUoX19idWYuc2l6ZSgpKSk7CiAgICB9CiMgMzU1OSAiL3Vzci9sb2NhbC92b2wvZ2Nj LzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIGlu cGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAg ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0 ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUK ICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgaWYgKF9fZmly c3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAg ICAgIF9EaXN0YW5jZVR5cGUgX19sZW4xID0gZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOwog ICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoK ICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBf X2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAg ICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19s ZW4xLCBfX2xlbjIsIF9fY29tcCk7CiAgICAgIGVsc2UKICAgICAgICBfX21lcmdlX2FkYXB0aXZl KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAg ICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpLAog ICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBp bmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoK ICAgICAKICAgICAKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2Zp cnN0MSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBlbHNlIGlmKCpfX2ZpcnN0MSA8 ICpfX2ZpcnN0MikKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZQogICAgICAgICAg KytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3Qy OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0 SXRlcjIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgaW5jbHVkZXMoX0lucHV0SXRl cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVy MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKQogICAgewoK ICAgICAKICAgICAKICAgICAKCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19s YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qy LCAqX19maXJzdDEpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGVsc2UgaWYoX19j b21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg ZWxzZQogICAgICAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2Zp cnN0MiA9PSBfX2xhc3QyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwg dHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0 ZXIKICAgIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0 MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0 MiwKICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAg CiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg JiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJz dDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJz dDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewog ICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAg ICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAg ICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAg ICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0 MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0 cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAg ICBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsK CiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoX19jb21w KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx OwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21w KCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qy OwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAg ICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAg KytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICBy ZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19y ZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1l IF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBz ZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx LAogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIg X19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7 CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0 MSA8ICpfX2ZpcnN0MikKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBpZiAoKl9f Zmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsK ICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAg ICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAg IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEs IHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0 eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfaW50ZXJzZWN0aW9uKF9J bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsK CiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgq X19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2Ug aWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICArK19fZmlyc3QyOwog ICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAg KytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0Owog ICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy PgogICAgX091dHB1dEl0ZXIKICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl ciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAg ICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAg ICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAq X19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAg ICAgICB9CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAg KytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg ICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFz dDEsIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5 cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBl bmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfZGlmZmVyZW5jZShfSW5wdXRJ dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAg ICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEs ICpfX2ZpcnN0MikpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAg ICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNl IGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgKytfX2ZpcnN0MjsK ICAgICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3Qy OwogICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0 KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1 dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfc3lt bWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J bnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0 ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAg ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAg ICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVzdWx0ID0g Kl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAg ICAgICAgfQogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAg ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAg ICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0 MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2Zp cnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0 eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9P dXRwdXRJdGVyCiAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJz dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoK ICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g X19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAg ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAg ICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJz dDIsICpfX2ZpcnN0MSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAg ICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBl bHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAg IH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9f bGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChf X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jl c3VsdCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAg IGlmICgqX19yZXN1bHQgPCAqX19maXJzdCkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsK ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxlbWVu dChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2Zp cnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3Vs dCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlm IChfX2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAg cmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+ CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJz dCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQg PSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAo Kl9fZmlyc3QgPCAqX19yZXN1bHQpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAg IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy LCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWluX2VsZW1lbnQoX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBf Q29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9 PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBf X2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19j b21wKCpfX2ZpcnN0LCAqX19yZXN1bHQpKQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0Owog ICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRp cmVjdGlvbmFsSXRlcj4KICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9u YWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAog ICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7 CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAg ICAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBf X2xhc3Q7CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKCpfX2kgPCAqX19p aSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAg IHdoaWxlICghKCpfX2kgPCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9z d2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAg IHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAg ICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsK ICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u YWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24o X0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoK CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYg KF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7 CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKF9fY29tcCgqX19pLCAqX19p aSkpIHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAg ICB3aGlsZSAoIV9fY29tcCgqX19pLCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAg aXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAg ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3Qp IHsKICAgICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBm YWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly ZWN0aW9uYWxJdGVyPgogICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25h bEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAg ICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsK ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAg ICBpZiAoX19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9f bGFzdDsKICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIgX19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoKl9faWkgPCAqX19p KSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAg d2hpbGUgKCEoKi0tX19qIDwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3 YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAg cmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAg ICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwog ICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihf QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoK ICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAo X19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsK ICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoX19jb21wKCpfX2lpLCAqX19p KSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAg IHdoaWxlICghX19jb21wKCotLV9faiwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBp dGVyX3N3YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAg ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkg ewogICAgICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZh bHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9JbnB1dEl0ZXIKICAgIGZpbmRfZmly c3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAg ICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyKQogICAg ewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3Qx OyArK19fZmlyc3QxKQogICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3Qy OyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoKl9fZmlyc3QxID09 ICpfX2l0ZXIpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJuIF9fbGFz dDE7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3 YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9JbnB1dEl0ZXIKICAgIGZp bmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAg ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3Qy LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKCiAgICAg CiAgICAgCiAgICAgCgoKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3Qx OyArK19fZmlyc3QxKQogICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3Qy OyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoX19jb21wKCpfX2Zp cnN0MSwgKl9faXRlcikpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJu IF9fbGFzdDE7CiAgICB9CiMgNDIwMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy MSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9l bmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAg ICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAg ICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykK ICAgIHsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fbGFz dDE7CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xhc3Qx OwogICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3Vs dAogICAgICAgICAgICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFz dDIpOwogICAgICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgICAgICBy ZXR1cm4gX19yZXN1bHQ7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgX19yZXN1bHQgPSBf X25ld19yZXN1bHQ7CiAgICAgICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAg ICAgICArK19fZmlyc3QxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLAog ICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIxCiAg ICBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0 MSwKICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBf X2xhc3QyLAogICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVy YXRvcl90YWcsCiAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewog ICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAg ICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAg ICAgd2hpbGUgKDEpIHsKICAgICAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAg ICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19j b21wKTsKICAgICAgICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICAgICAg cmV0dXJuIF9fcmVzdWx0OwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9fcmVzdWx0ID0g X19uZXdfcmVzdWx0OwogICAgICAgICAgICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAg ICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVj dGlvbmFsSXRlcjI+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9CaWRp cmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAg ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJ dGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywg YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlw ZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICAg ICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVy MjsKCiAgICAgIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgICAgIF9SZXZJdGVyMiBf X3JsYXN0MihfX2ZpcnN0Mik7CiAgICAgIF9SZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jl dkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyKTsKCiAgICAgIGlmIChfX3JyZXN1bHQg PT0gX19ybGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwogICAgICAg IGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5jZShfX2ZpcnN0MiwgX19sYXN0MikpOwogICAgICAg IHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk aXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAg IHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBf X2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRl cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0Miwg X0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFs X2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAg IF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHR5cGVk ZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgICAg IHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7 CgogICAgICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOwogICAgICBfUmV2SXRlcjIgX19y bGFzdDIoX19maXJzdDIpOwogICAgICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJ dGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbXApOwoKICAgICAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAg ICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyMSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgICAgICAgYWR2YW5jZShfX3Jlc3Vs dCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0 OwogICAgICB9CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlw ZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIxCiAgICBmaW5kX2Vu ZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg ICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpCiAgICB7 CgogICAgIAogICAgIAogICAgIAoKCgogICAgICByZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwg X19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRl cmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJh dG9yX2NhdGVnb3J5KF9fZmlyc3QyKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3 YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Jp bmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIxCiAgICBmaW5kX2VuZChfRm9y d2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBf Rm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg ICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAg ICAgIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0 MiwKICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSks CiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLAog ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQoKfQojIDcwICIvdXNyL2xvY2Fs L3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9hbGdvcml0aG0iIDIgMwojIDU3ICIvdXNyL2xv Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMwojIDEgIi91c3IvbG9j YWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMSAz CiMgNDUgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNf c3RyaW5nLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCB0eXBlbmFtZSBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1NfbWF4X3NpemUg PSAoKChucG9zIC0gc2l6ZW9mKF9SZXApKS9zaXplb2YoX0NoYXJUKSkgLSAxKSAvIDQ7CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgY29uc3QgX0NoYXJUCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjoKICAgIF9SZXA6Ol9TX3Rlcm1pbmFsID0gX0NoYXJUKCk7CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3Qg dHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBl CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpucG9zOwoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6 ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfU19lbXB0 eV9yZXBfc3RvcmFnZVsKICAgIChzaXplb2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSArIHNpemVv ZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOwoKCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5JdGVyPgogICAgICBfQ2hhclQqCiAgICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2Jl ZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICBp bnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQgJiYg X19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNv cHkoKTsKCiAgICAgICAgX0NoYXJUIF9fYnVmWzEwMF07CiAgICAgICAgc2l6ZV90eXBlIF9faSA9 IDA7CiAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9faSA8IHNpemVvZihfX2J1Zikg LyBzaXplb2YoX0NoYXJUKSkKICAgICAgICAgIHsKICAgICAgICAgICAgX19idWZbX19pKytdID0g Kl9fYmVnOwogICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgfQogICAgICAgIF9SZXAqIF9f ciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2ksIF9fYSk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHko X19yLT5fTV9yZWZkYXRhKCksIF9fYnVmLCBfX2kpOwogICAgICAgIF9fci0+X01fbGVuZ3RoID0g X19pOwogICAgICAgIHRyeQogICAgICAgICAgewoKCgogICAgICAgICAgICBmb3IgKDs7KQogICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19wID0gX19yLT5fTV9yZWZkYXRh KCkgKyBfX3ItPl9NX2xlbmd0aDsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19sYXN0ID0gX19y LT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2NhcGFjaXR5OwogICAgICAgICAgICAgICAgZm9yICg7 OykKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmIChfX2JlZyA9PSBf X2VuZCkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19y LT5fTV9sZW5ndGggPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAgICAg ICAgICAgKl9fcCA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgICAgaWYgKF9fcCA9PSBfX2xhc3QpCiAgICAgICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgICAgICAgICAqX19wKysgPSAqX19iZWc7CiAgICAgICAgICAgICAgICAg ICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHNpemVfdHlw ZSBfX2xlbiA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAgX1JlcCog X19hbm90aGVyID0gX1JlcDo6X1NfY3JlYXRlKF9fbGVuICsgMSwgX19hKTsKICAgICAgICAgICAg ICAgIHRyYWl0c190eXBlOjpjb3B5KF9fYW5vdGhlci0+X01fcmVmZGF0YSgpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19yLT5fTV9yZWZkYXRhKCksIF9fbGVuKTsKICAgICAg ICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICAgICAgX19yID0gX19h bm90aGVyOwogICAgICAgICAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2xlbjsKICAgICAgICAg ICAgICB9CiAgICAgICAgICB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgewogICAgICAg ICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICB9 CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu SXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQs IGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90 YWcpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19kbmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90 eXBlPihkaXN0YW5jZShfX2JlZywgX19lbmQpKTsKCgogICAgICAgIGlmIChfX2J1aWx0aW5fZXhw ZWN0KF9fYmVnID09IF9Jbkl0ZXIoKSwgMCkpCiAgICAgICAgICBfX3Rocm93X2xvZ2ljX2Vycm9y KCJhdHRlbXB0IHRvIGNyZWF0ZSBzdHJpbmcgd2l0aCBudWxsIHBvaW50ZXIiKTsKCiAgICAgICAg aWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJldHVybiBf U19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoKICAgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpf U19jcmVhdGUoX19kbmV3LCBfX2EpOwogICAgICAgIHRyeQogICAgICAgICAgeyBfU19jb3B5X2No YXJzKF9fci0+X01fcmVmZGF0YSgpLCBfX2JlZywgX19lbmQpOyB9CiAgICAgICAgY2F0Y2goLi4u KQogICAgICAgICAgewogICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAg ICAgdGhyb3c7CiAgICAgICAgICB9CiAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2RuZXc7Cgog ICAgICAgIF9fci0+X01fcmVmZGF0YSgpW19fZG5ld10gPSBfUmVwOjpfU190ZXJtaW5hbDsKICAg ICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBfQ2hhclQq CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9TX2NvbnN0 cnVjdChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIHsK ICAgICAgaWYgKF9fbiA9PSAwICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICByZXR1cm4gX1Nf ZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2Ny ZWF0ZShfX24sIF9fYSk7CiAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIGlmIChfX24pCiAg ICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX19yLT5fTV9yZWZkYXRhKCksIF9fbiwgX19j KTsKICAgICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfX3ItPl9N X2Rlc3Ryb3koX19hKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgX19yLT5fTV9s ZW5ndGggPSBfX247CiAgICAgIF9fci0+X01fcmVmZGF0YSgpW19fbl0gPSBfUmVwOjpfU190ZXJt aW5hbDsKICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNv bnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICA6IF9NX2RhdGFwbHVzKF9fc3RyLl9NX3JlcCgp LT5fTV9ncmFiKF9BbGxvYygpLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpLAogICAgICAgICAgICAg ICAgIF9fc3RyLmdldF9hbGxvY2F0b3IoKSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxv YyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlKCksIF9DaGFy VCgpLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9f c3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICA6IF9NX2RhdGFwbHVzKF9T X2NvbnN0cnVjdChfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfQWxsb2MoKSksIF9BbGxvYygpKQog ICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9f cG9zLAogICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKQog ICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX19h KSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf X24sIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19z LCBfX3MgKyBfX24sIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCog X19zLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9f cywgX19zID8gX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpIDogMCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKHNpemVfdHlw ZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhf U19jb25zdHJ1Y3QoX19uLCBfX2MsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyIF9fYmVnLCBfSW5wdXRJdGVy IF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0 KF9fYmVnLCBfX2VuZCwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OmFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgewogICAg ICBpZiAoX01fcmVwKCkgIT0gX19zdHIuX01fcmVwKCkpCiAgICAgICAgewoKICAgICAgICAgIGFs bG9jYXRvcl90eXBlIF9fYSA9IHRoaXMtPmdldF9hbGxvY2F0b3IoKTsKICAgICAgICAgIF9DaGFy VCogX190bXAgPSBfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfX2EsIF9fc3RyLmdldF9hbGxvY2F0 b3IoKSk7CiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01f ZGF0YShfX3RtcCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6 CiAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYgX19hKSB0aHJvdyAoKQogICAgewogICAgICBz aXplX3R5cGUgX19zaXplID0gc2l6ZW9mKF9SZXApICsgKF9NX2NhcGFjaXR5ICsgMSkgKiBzaXpl b2YoX0NoYXJUKTsKICAgICAgX1Jhd19ieXRlc19hbGxvYyhfX2EpLmRlYWxsb2NhdGUocmVpbnRl cnByZXRfY2FzdDxjaGFyKj4odGhpcyksIF9fc2l6ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X01fbGVha19oYXJkKCkK ICAgIHsKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkKICAgICAgICBfTV9tdXRh dGUoMCwgMCwgMCk7CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICB9CgoKCgoK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6CiAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXpl X3R5cGUgX19sZW4yKQogICAgewogICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHRoaXMtPnNp emUoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3X3NpemUgPSBfX29sZF9zaXplICsgX19s ZW4yIC0gX19sZW4xOwogICAgICBjb25zdCBfQ2hhclQqIF9fc3JjID0gX01fZGF0YSgpICsgX19w b3MgKyBfX2xlbjE7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2hvd19tdWNoID0gX19vbGRfc2l6 ZSAtIF9fcG9zIC0gX19sZW4xOwoKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8 fCBfX25ld19zaXplID4gY2FwYWNpdHkoKSkKICAgICAgICB7CgogICAgICAgICAgYWxsb2NhdG9y X3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOwoKCiAgICAgICAgICBjb25zdCBzaXplX3R5cGUg X19wYWdlc2l6ZSA9IDQwOTY7CiAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19tYWxsb2NfaGVh ZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7CgogICAgICAgICAgY29uc3Qgc2l6ZV90eXBl IF9fcGFnZV9jYXBhY2l0eSA9IChfX3BhZ2VzaXplIC0gX19tYWxsb2NfaGVhZGVyX3NpemUKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzaXplb2YoX1JlcCkg LSBzaXplb2YoX0NoYXJUKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyBzaXplb2YoX0NoYXJUKTsKICAgICAgICAgIF9SZXAqIF9fcjsKICAgICAgICAgIGlm IChfX25ld19zaXplID4gY2FwYWNpdHkoKSAmJiBfX25ld19zaXplID4gX19wYWdlX2NhcGFjaXR5 KQoKICAgICAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbmV3X3NpemUgPiAyKmNhcGFj aXR5KCkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc2l6ZSA6IDIq Y2FwYWNpdHkoKSwgX19hKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19yID0gX1JlcDo6 X1NfY3JlYXRlKF9fbmV3X3NpemUsIF9fYSk7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIGlmIChfX3BvcykKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5 KF9fci0+X01fcmVmZGF0YSgpLCBfTV9kYXRhKCksIF9fcG9zKTsKICAgICAgICAgICAgICBpZiAo X19ob3dfbXVjaCkKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVm ZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3NyYywgX19ob3dfbXVjaCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKC4uLikK ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fci0+X01fZGlzcG9zZShnZXRfYWxsb2NhdG9y KCkpOwogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgICBfTV9yZXAo KS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01fZGF0YShfX3ItPl9NX3JlZmRhdGEoKSk7 CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19ob3dfbXVjaCAmJiBfX2xlbjEgIT0gX19sZW4yKQog ICAgICAgIHsKCiAgICAgICAgICB0cmFpdHNfdHlwZTo6bW92ZShfTV9kYXRhKCkgKyBfX3BvcyAr IF9fbGVuMiwgX19zcmMsIF9faG93X211Y2gpOwogICAgICAgIH0KICAgICAgX01fcmVwKCktPl9N X3NldF9zaGFyYWJsZSgpOwogICAgICBfTV9yZXAoKS0+X01fbGVuZ3RoID0gX19uZXdfc2l6ZTsK ICAgICAgX01fZGF0YSgpW19fbmV3X3NpemVdID0gX1JlcDo6X1NfdGVybWluYWw7CgogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 OnJlc2VydmUoc2l6ZV90eXBlIF9fcmVzKQogICAgewogICAgICBpZiAoX19yZXMgPiB0aGlzLT5j YXBhY2l0eSgpIHx8IF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkKICAgICAgICB7CiAgICAgICAg ICBpZiAoX19yZXMgPiB0aGlzLT5tYXhfc2l6ZSgpKQogICAgICAgICAgICBfX3Rocm93X2xlbmd0 aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNlcnZlIik7CgogICAgICAgICAgaWYgKF9fcmVzIDwg dGhpcy0+c2l6ZSgpKQogICAgICAgICAgICBfX3JlcyA9IHRoaXMtPnNpemUoKTsKICAgICAgICAg IGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKICAgICAgICAgIF9DaGFyVCog X190bXAgPSBfTV9yZXAoKS0+X01fY2xvbmUoX19hLCBfX3JlcyAtIHRoaXMtPnNpemUoKSk7CiAg ICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01fZGF0YShfX3Rt cCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6c3dhcChiYXNpY19zdHJpbmcmIF9fcykKICAgIHsKICAgICAgaWYg KF9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJh YmxlKCk7CiAgICAgIGlmIChfX3MuX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgIF9f cy5fTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIGlmICh0aGlzLT5nZXRfYWxsb2Nh dG9yKCkgPT0gX19zLmdldF9hbGxvY2F0b3IoKSkKICAgICAgICB7CiAgICAgICAgICBfQ2hhclQq IF9fdG1wID0gX01fZGF0YSgpOwogICAgICAgICAgX01fZGF0YShfX3MuX01fZGF0YSgpKTsKICAg ICAgICAgIF9fcy5fTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CgogICAgICBlbHNlCiAgICAgICAg ewogICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBf X3MuZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDIoX19zLl9N X2liZWdpbigpLCBfX3MuX01faWVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 aGlzLT5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgKnRoaXMgPSBfX3RtcDI7CiAgICAgICAg ICBfX3MgPSBfX3RtcDE7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXAqCiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9TX2NyZWF0ZShzaXplX3QgX19j YXBhY2l0eSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jKQogICAgewogICAgICB0eXBlZGVmIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKCgogICAgICBp ZiAoX19jYXBhY2l0eSA+IF9TX21heF9zaXplKQoKCgogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vy cm9yKCJiYXNpY19zdHJpbmc6Ol9TX2NyZWF0ZSIpOwoKCgoKICAgICAgc2l6ZV90IF9fc2l6ZSA9 IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsKIyA0MjEg Ii91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3RyaW5n LnRjYyIgMwogICAgICBjb25zdCBzaXplX3QgX19wYWdlc2l6ZSA9IDQwOTY7CiAgICAgIGNvbnN0 IHNpemVfdCBfX3N1YnBhZ2VzaXplID0gMTI4OwogICAgICBjb25zdCBzaXplX3QgX19tYWxsb2Nf aGVhZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7CiAgICAgIGlmICgoX19zaXplICsgX19t YWxsb2NfaGVhZGVyX3NpemUpID4gX19wYWdlc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBzaXpl X3QgX19leHRyYSA9CiAgICAgICAgICAgIChfX3BhZ2VzaXplIC0gKChfX3NpemUgKyBfX21hbGxv Y19oZWFkZXJfc2l6ZSkgJSBfX3BhZ2VzaXplKSkKICAgICAgICAgICAgJSBfX3BhZ2VzaXplOwog ICAgICAgICAgX19jYXBhY2l0eSArPSBfX2V4dHJhIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAg ICBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1Jl cCk7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX3NpemUgPiBfX3N1YnBhZ2VzaXplKQogICAg ICAgIHsKICAgICAgICAgIHNpemVfdCBfX2V4dHJhID0KICAgICAgICAgICAgKF9fc3VicGFnZXNp emUgLSAoKF9fc2l6ZSArIF9fbWFsbG9jX2hlYWRlcl9zaXplKSAlIF9fc3VicGFnZXNpemUpKQog ICAgICAgICAgICAlIF9fc3VicGFnZXNpemU7CiAgICAgICAgICBfX2NhcGFjaXR5ICs9IF9fZXh0 cmEgLyBzaXplb2YoX0NoYXJUKTsKICAgICAgICAgIF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkg KiBzaXplb2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsKICAgICAgICB9CgoKCiAgICAgIHZvaWQq IF9fcGxhY2UgPSBfUmF3X2J5dGVzX2FsbG9jKF9fYWxsb2MpLmFsbG9jYXRlKF9fc2l6ZSk7CiAg ICAgIF9SZXAgKl9fcCA9IG5ldyAoX19wbGFjZSkgX1JlcDsKICAgICAgX19wLT5fTV9jYXBhY2l0 eSA9IF9fY2FwYWNpdHk7CiAgICAgIF9fcC0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIF9fcC0+ X01fbGVuZ3RoID0gMDsKICAgICAgcmV0dXJuIF9fcDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBfQ2hhclQq CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9N X2Nsb25lKGNvbnN0IF9BbGxvYyYgX19hbGxvYywgc2l6ZV90eXBlIF9fcmVzKQogICAgewoKICAg ICAgY29uc3Qgc2l6ZV90eXBlIF9fcmVxdWVzdGVkX2NhcCA9IF9NX2xlbmd0aCArIF9fcmVzOwoK ICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZXNpemUgPSA0MDk2OwogICAgICBjb25zdCBzaXpl X3R5cGUgX19tYWxsb2NfaGVhZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7CgogICAgICBj b25zdCBzaXplX3R5cGUgX19wYWdlX2NhcGFjaXR5ID0KICAgICAgICAoX19wYWdlc2l6ZSAtIF9f bWFsbG9jX2hlYWRlcl9zaXplIC0gc2l6ZW9mKF9SZXApIC0gc2l6ZW9mKF9DaGFyVCkpCiAgICAg ICAgLyBzaXplb2YoX0NoYXJUKTsKICAgICAgX1JlcCogX19yOwogICAgICBpZiAoX19yZXF1ZXN0 ZWRfY2FwID4gX01fY2FwYWNpdHkgJiYgX19yZXF1ZXN0ZWRfY2FwID4gX19wYWdlX2NhcGFjaXR5 KQoKICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19yZXF1ZXN0ZWRfY2FwID4gMipfTV9j YXBhY2l0eSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVxdWVzdGVkX2NhcCA6 IDIqX01fY2FwYWNpdHksIF9fYWxsb2MpOwogICAgICBlbHNlCiAgICAgICAgX19yID0gX1JlcDo6 X1NfY3JlYXRlKF9fcmVxdWVzdGVkX2NhcCwgX19hbGxvYyk7CgogICAgICBpZiAoX01fbGVuZ3Ro KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IHRyYWl0c190eXBlOjpjb3B5 KF9fci0+X01fcmVmZGF0YSgpLCBfTV9yZWZkYXRhKCksIF9NX2xlbmd0aCk7IH0KICAgICAgICAg IGNhdGNoKC4uLikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShf X2FsbG9jKTsKICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgX19yLT5fTV9sZW5ndGggPSBfTV9sZW5ndGg7CiAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRh dGEoKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjpyZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAg ICAgaWYgKF9fbiA+IG1heF9zaXplKCkpCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJh c2ljX3N0cmluZzo6cmVzaXplIik7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXpl KCk7CiAgICAgIGlmIChfX3NpemUgPCBfX24pCiAgICAgICAgdGhpcy0+YXBwZW5kKF9fbiAtIF9f c2l6ZSwgX19jKTsKICAgICAgZWxzZSBpZiAoX19uIDwgX19zaXplKQogICAgICAgIHRoaXMtPmVy YXNlKF9fbik7CgogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFjZShp dGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyIF9fazEsCiAgICAgICAgICAg ICAgICAgX0lucHV0SXRlciBfX2syLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKCiAgICAg ICAgYmFzaWNfc3RyaW5nIF9fcyhfX2sxLCBfX2syKTsKICAgICAgICByZXR1cm4gX01fcmVwbGFj ZV9zYWZlKF9faTEsIF9faTIsIF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSk7CiAgICAg IH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3Ig X19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAg ICAgICBfRm9yd2FyZEl0ZXIgX19rMikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2RuZXcg PSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KGRpc3RhbmNlKF9fazEsIF9fazIpKTsKICAgICAgICBz aXplX3R5cGUgX19kb2xkID0gX19pMiAtIF9faTE7CiAgICAgICAgc2l6ZV90eXBlIF9fZG1heCA9 IHRoaXMtPm1heF9zaXplKCk7CgogICAgICAgIGlmIChfX2RtYXggPD0gX19kbmV3KQogICAgICAg ICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X01fcmVwbGFjZSIpOwogICAg ICAgIHNpemVfdHlwZSBfX29mZiA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAgICAgICBfTV9tdXRh dGUoX19vZmYsIF9fZG9sZCwgX19kbmV3KTsKCgogICAgICAgIGlmIChfX2RuZXcpCiAgICAgICAg ICBfU19jb3B5X2NoYXJzKF9NX2RhdGEoKSArIF9fb2ZmLCBfX2sxLCBfX2syKTsKCiAgICAgICAg cmV0dXJuICp0aGlzOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 OgogICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBl IF9fbjIpCiAgICB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXpl KCk7CiAgICAgIGlmIChfX3BvczIgPiBfX3N0cnNpemUpCiAgICAgICAgX190aHJvd19vdXRfb2Zf cmFuZ2UoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICBjb25zdCBib29sIF9fdGVzdG4y ID0gX19uMiA8IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZm9s ZG4yID0gX190ZXN0bjIgPyBfX24yIDogX19zdHJzaXplIC0gX19wb3MyOwogICAgICByZXR1cm4g dGhpcy0+cmVwbGFjZShfX3BvczEsIF9fbjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f c3RyLl9NX2RhdGEoKSArIF9fcG9zMiwgX19mb2xkbjIpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry KQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBz aXplX3R5cGUgX19sZW4gPSBfX3NpemUgKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+ IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJl dHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2liZWdp bigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2llbmQoKSk7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IGJh c2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgIHsK CgoKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fc3RyLnNpemUoKSAtIF9fcG9zLCBfX24p ICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAg ICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9N X2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSk7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19z LCBzaXplX3R5cGUgX19uKQogICAgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlz LT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhp cy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWVuZCgp LCBfTV9pZW5kKCksIF9fcywgX19zICsgX19uKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAg IHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAo X19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwog ICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fbiwgX19j KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAg dHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6 ZV90eXBlOwogICAgICBfX3NpemVfdHlwZSBfX2xlbiA9IF9UcmFpdHM6Omxlbmd0aChfX2xocyk7 CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyBf X3Jocy5zaXplKCkpOwogICAgICBfX3N0ci5hcHBlbmQoX19saHMsIF9fbGhzICsgX19sZW4pOwog ICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3Ir KF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5n X3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsK ICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfX3Jocy5zaXplKCk7CiAgICAgIF9fc3RyLnJlc2Vy dmUoX19sZW4gKyAxKTsKICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBfX2xocyk7 CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZXBsYWNlKGl0ZXJhdG9yIF9f aTEsIGl0ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAgewogICAg ICBzaXplX3R5cGUgX19uMSA9IF9faTIgLSBfX2kxOwogICAgICBzaXplX3R5cGUgX19vZmYxID0g X19pMSAtIF9NX2liZWdpbigpOwogICAgICBpZiAobWF4X3NpemUoKSAtICh0aGlzLT5zaXplKCkg LSBfX24xKSA8PSBfX24yKQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJp bmc6OnJlcGxhY2UiKTsKICAgICAgX01fbXV0YXRlIChfX29mZjEsIF9fbjEsIF9fbjIpOwoKICAg ICAgaWYgKF9fbjIpCiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKCkgKyBfX29m ZjEsIF9fbjIsIF9fYyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBl bmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29weShfQ2hhclQq IF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBp ZiAoX19wb3MgPiB0aGlzLT5zaXplKCkpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJh c2ljX3N0cmluZzo6Y29weSIpOwoKICAgICAgaWYgKF9fbiA+IHRoaXMtPnNpemUoKSAtIF9fcG9z KQogICAgICAgIF9fbiA9IHRoaXMtPnNpemUoKSAtIF9fcG9zOwoKICAgICAgdHJhaXRzX3R5cGU6 OmNvcHkoX19zLCBfTV9kYXRhKCkgKyBfX3BvcywgX19uKTsKCiAgICAgIHJldHVybiBfX247CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl IF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsK ICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9 IF9NX2RhdGEoKTsKICAgICAgZm9yICg7IF9feHBvcyArIF9fbiA8PSBfX3NpemU7ICsrX194cG9z KQogICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29tcGFyZShfX2RhdGEgKyBfX3hwb3MsIF9fcywg X19uKSA9PSAwKQogICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAg ICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19yZXQg PSBucG9zOwogICAgICBpZiAoX19wb3MgPCBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgY29u c3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgICAgICBzaXplX3R5cGUgX19uID0g X19zaXplIC0gX19wb3M7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBl OjpmaW5kKF9fZGF0YSArIF9fcG9zLCBfX24sIF9fYyk7CiAgICAgICAgICBpZiAoX19wKQogICAg ICAgICAgICBfX3JldCA9IF9fcCAtIF9fZGF0YTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jl dDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjoKICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNp emVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5z aXplKCk7CiAgICAgIGlmIChfX24gPD0gX19zaXplKQogICAgICAgIHsKICAgICAgICAgIF9fcG9z ID0gc3RkOjptaW4oX19zaXplIC0gX19uLCBfX3Bvcyk7CiAgICAgICAgICBjb25zdCBfQ2hhclQq IF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsgX19wb3MsIF9fcywgX19uKSA9 PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fcG9zOwogICAgICAgICAgICB9CiAgICAgICAg ICB3aGlsZSAoX19wb3MtLSA+IDApOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK ICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAg c2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAg ICB7CiAgICAgICAgICBzaXplX3QgX194cG9zID0gX19zaXplIC0gMTsKICAgICAgICAgIGlmIChf X3hwb3MgPiBfX3BvcykKICAgICAgICAgICAgX194cG9zID0gX19wb3M7CgogICAgICAgICAgZm9y ICgrK19feHBvczsgX194cG9zLS0gPiAwOyApCiAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6 ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpCiAgICAgICAgICAgICAgcmV0dXJuIF9feHBvczsK ICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X29mKGNvbnN0 IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7 CiAgICAgIGZvciAoOyBfX24gJiYgX19wb3MgPCB0aGlzLT5zaXplKCk7ICsrX19wb3MpCiAgICAg ICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX3Ms IF9fbiwgX01fZGF0YSgpW19fcG9zXSk7CiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAgICBy ZXR1cm4gX19wb3M7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5 cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9s YXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p IGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAg IGlmIChfX3NpemUgJiYgX19uKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9f cG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEo KVtfX3NpemVdKSkKICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0K ICAgICAgICAgIHdoaWxlIChfX3NpemUtLSAhPSAwKTsKICAgICAgICB9CiAgICAgIHJldHVybiBu cG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90 eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3QgX194cG9z ID0gX19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQog ICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3hwb3Nd KSkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNp emVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBm aW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7 CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9feHBvcyA8IHRoaXMt PnNpemUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgp W19feHBvc10sIF9fYykpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBv czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OgogICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl IF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXpl ID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlm ICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAg IGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9f cywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXpl OwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAg ICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6 ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+ c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6 ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX19z aXplXSwgX19jKSkKICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0K ICAgICAgICAgIHdoaWxlIChfX3NpemUtLSk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0 IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUg PSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwog ICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJh c2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemU9IG1pbihfX3Np emUgLSBfX3BvcywgX19uKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9f b3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsg X19wb3MsIF9fc3RyLmRhdGEoKSwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3Ig PSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp bnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFy ZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBf X3N0ciwKICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0 CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVf dHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MxID4gX19zaXplIHx8 IF9fcG9zMiA+IF9fb3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0 cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0g X19wb3MxLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9fcm9zaXplID0gbWluKF9fb3NpemUgLSBf X3BvczIsIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19yb3Np emUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19w b3MxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuZGF0YSgpICsg X19wb3MyLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBf X3Jvc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoY29uc3QgX0No YXJUKiBfX3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXpl KCk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywg X19zaXplKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19zaXplIC0gdHJhaXRzX3R5 cGU6Omxlbmd0aChfX3MpOwogICAgICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQK ICAgIGJhc2ljX3N0cmluZyA8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUo c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0 CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChf X3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5n Ojpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjpsZW5n dGgoX19zKTsKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MsIF9f bjEpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAg IGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBf X2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwog ICAgICByZXR1cm4gX19yOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nIDxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNp emVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgc2l6ZV90eXBlIF9f bjIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAg ICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFz aWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IG1pbih0cmFp dHNfdHlwZTo6bGVuZ3RoKF9fcyksIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1p bihfX3NpemUgLSBfX3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3Jz aXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2Rh dGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0g X19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlIDxj bGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHZvaWQKICAgIF9T X3N0cmluZ19jb3B5KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m IF9fc3RyLAogICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUgX0FsbG9j OjpzaXplX3R5cGUgX19idWZzaXopCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j OjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIu c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19ieXRlcyA9IG1pbihfX3N0cnNpemUsIF9fYnVmc2l6 IC0gMSk7CiAgICAgIF9UcmFpdHM6OmNvcHkoX19idWYsIF9fc3RyLmRhdGEoKSwgX19ieXRlcyk7 CiAgICAgIF9fYnVmW19fYnl0ZXNdID0gX0NoYXJUKCk7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1w bGF0ZSBjbGFzcyBiYXNpY19zdHJpbmc8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNp Y19pc3RyZWFtPGNoYXI+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3Ry aW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19vc3RyZWFtPGNoYXI+JgogICAgb3Bl cmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXI+JiwgY29uc3Qgc3RyaW5nJik7CiAgZXh0ZXJuIHRl bXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFt PGNoYXI+Jiwgc3RyaW5nJiwgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3Ry ZWFtPGNoYXI+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7Cgog IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmc8d2NoYXJfdD47CiAgZXh0ZXJuIHRl bXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAgb3BlcmF0b3I+PihiYXNpY19p c3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNf b3N0cmVhbTx3Y2hhcl90PiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiYs IGNvbnN0IHdzdHJpbmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08d2No YXJfdD4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mLCB3c3RyaW5nJiwgd2No YXJfdCk7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAg Z2V0bGluZShiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYpOwp9CiMgNTggIi91c3Iv bG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL3N0cmluZyIgMiAzCiMgNDYgIi91c3Iv bG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL3N0ZGV4Y2VwdCIgMiAzCgpuYW1lc3Bh Y2Ugc3RkCnsKCgoKCgogIGNsYXNzIGxvZ2ljX2Vycm9yIDogcHVibGljIGV4Y2VwdGlvbgogIHsK ICAgIHN0cmluZyBfTV9tc2c7CgogIHB1YmxpYzoKCiAgICBleHBsaWNpdAogICAgbG9naWNfZXJy b3IoY29uc3Qgc3RyaW5nJiBfX2FyZyk7CgogICAgdmlydHVhbAogICAgfmxvZ2ljX2Vycm9yKCkg dGhyb3coKTsKCgoKICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgIHdoYXQoKSBjb25zdCB0aHJv dygpOwogIH07CgoKCiAgY2xhc3MgZG9tYWluX2Vycm9yIDogcHVibGljIGxvZ2ljX2Vycm9yCiAg ewogIHB1YmxpYzoKICAgIGV4cGxpY2l0IGRvbWFpbl9lcnJvcihjb25zdCBzdHJpbmcmIF9fYXJn KTsKICB9OwoKCiAgY2xhc3MgaW52YWxpZF9hcmd1bWVudCA6IHB1YmxpYyBsb2dpY19lcnJvcgog IHsKICBwdWJsaWM6CiAgICBleHBsaWNpdCBpbnZhbGlkX2FyZ3VtZW50KGNvbnN0IHN0cmluZyYg X19hcmcpOwogIH07CgoKCiAgY2xhc3MgbGVuZ3RoX2Vycm9yIDogcHVibGljIGxvZ2ljX2Vycm9y CiAgewogIHB1YmxpYzoKICAgIGV4cGxpY2l0IGxlbmd0aF9lcnJvcihjb25zdCBzdHJpbmcmIF9f YXJnKTsKICB9OwoKCgogIGNsYXNzIG91dF9vZl9yYW5nZSA6IHB1YmxpYyBsb2dpY19lcnJvcgog IHsKICBwdWJsaWM6CiAgICBleHBsaWNpdCBvdXRfb2ZfcmFuZ2UoY29uc3Qgc3RyaW5nJiBfX2Fy Zyk7CiAgfTsKCgoKCgoKICBjbGFzcyBydW50aW1lX2Vycm9yIDogcHVibGljIGV4Y2VwdGlvbgog IHsKICAgIHN0cmluZyBfTV9tc2c7CgogIHB1YmxpYzoKCiAgICBleHBsaWNpdAogICAgcnVudGlt ZV9lcnJvcihjb25zdCBzdHJpbmcmIF9fYXJnKTsKCiAgICB2aXJ0dWFsCiAgICB+cnVudGltZV9l cnJvcigpIHRocm93KCk7CgoKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICB3aGF0KCkgY29u c3QgdGhyb3coKTsKICB9OwoKCiAgY2xhc3MgcmFuZ2VfZXJyb3IgOiBwdWJsaWMgcnVudGltZV9l cnJvcgogIHsKICBwdWJsaWM6CiAgICBleHBsaWNpdCByYW5nZV9lcnJvcihjb25zdCBzdHJpbmcm IF9fYXJnKTsKICB9OwoKCiAgY2xhc3Mgb3ZlcmZsb3dfZXJyb3IgOiBwdWJsaWMgcnVudGltZV9l cnJvcgogIHsKICBwdWJsaWM6CiAgICBleHBsaWNpdCBvdmVyZmxvd19lcnJvcihjb25zdCBzdHJp bmcmIF9fYXJnKTsKICB9OwoKCiAgY2xhc3MgdW5kZXJmbG93X2Vycm9yIDogcHVibGljIHJ1bnRp bWVfZXJyb3IKICB7CiAgcHVibGljOgogICAgZXhwbGljaXQgdW5kZXJmbG93X2Vycm9yKGNvbnN0 IHN0cmluZyYgX19hcmcpOwogIH07Cn0KIyAyNCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1 ZGUvYm9vc3QvYXJyYXkuaHBwIiAyIDMKCgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs dWRlL2Jvb3N0L2RldGFpbC9pdGVyYXRvci5ocHAiIDEgMwojIDU5ICIvaG9tZS9jb21wYmlvL2Q5 NS1ibGkvaW5jbHVkZS9ib29zdC9kZXRhaWwvaXRlcmF0b3IuaHBwIiAzCiMgMSAiL2hvbWUvY29t cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvY29uZmlnLmhwcCIgMSAzCiMgMjYgIi9ob21lL2Nv bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2NvbmZpZy5ocHAiIDMKIyAxICIvaG9tZS9jb21w YmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9jb25maWcvdXNlci5ocHAiIDEgMwojIDI3ICIvaG9t ZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9jb25maWcuaHBwIiAyIDMKCgoKCiMgMSAi L2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvY29uZmlnL3NlbGVjdF9jb21waWxl cl9jb25maWcuaHBwIiAxIDMKIyAzMiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v c3QvY29uZmlnLmhwcCIgMiAzCgoKCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv Ym9vc3QvY29uZmlnL2NvbXBpbGVyL2djYy5ocHAiIDEgMwojIDM2ICIvaG9tZS9jb21wYmlvL2Q5 NS1ibGkvaW5jbHVkZS9ib29zdC9jb25maWcuaHBwIiAyIDMKCgoKCiMgMSAiL2hvbWUvY29tcGJp by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvY29uZmlnL3NlbGVjdF9zdGRsaWJfY29uZmlnLmhwcCIg MSAzCiMgNDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2NvbmZpZy5ocHAi IDIgMwoKCgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2NvbmZpZy9z dGRsaWIvbGlic3RkY3BwMy5ocHAiIDEgMwojIDQ1ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j bHVkZS9ib29zdC9jb25maWcuaHBwIiAyIDMKCgoKCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxp L2luY2x1ZGUvYm9vc3QvY29uZmlnL3NlbGVjdF9wbGF0Zm9ybV9jb25maWcuaHBwIiAxIDMKIyA1 MCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvY29uZmlnLmhwcCIgMiAzCgoK CiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvY29uZmlnL3BsYXRmb3Jt L2xpbnV4LmhwcCIgMSAzCiMgNjcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0 L2NvbmZpZy9wbGF0Zm9ybS9saW51eC5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv aW5jbHVkZS9ib29zdC9jb25maWcvcG9zaXhfZmVhdHVyZXMuaHBwIiAxIDMKIyAxMSAiL2hvbWUv Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvY29uZmlnL3Bvc2l4X2ZlYXR1cmVzLmhwcCIg MwojIDEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS91bmlz dGQuaCIgMwpleHRlcm4gIkMiIHsKIyAxNzUgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4X29wdC5oIiAxIDMKIyAxNzYgIi91c3IvaW5jbHVkZS91 bmlzdGQuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZW52aXJvbm1lbnRzLmgiIDEg MwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9lbnZpcm9ubWVudHMuaCIgMwojIDEgIi91c3IvaW5j bHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9lbnZpcm9u bWVudHMuaCIgMiAzCiMgMTgwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwojIDE5OSAiL3Vz ci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjAwICIv dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwojIDI0MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAz CnR5cGVkZWYgX19pbnRwdHJfdCBpbnRwdHJfdDsKCgoKCgoKdHlwZWRlZiBfX3NvY2tsZW5fdCBz b2NrbGVuX3Q7CiMgMjYwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBhY2Nl c3MgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBlKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBpbnQgZXVpZGFjY2VzcyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUpIHRocm93 ICgpOwojIDI5MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX29mZl90IGxzZWVr IChpbnQgX19mZCwgX19vZmZfdCBfX29mZnNldCwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKIyAz MDIgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19vZmY2NF90IGxzZWVrNjQgKGlu dCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgoKCmV4 dGVybiBpbnQgY2xvc2UgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNzaXplX3QgcmVh ZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpIHRocm93ICgpOwoKCmV4 dGVybiBzc2l6ZV90IHdyaXRlIChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90 IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBzc2l6ZV90IHByZWFkIChpbnQgX19mZCwgdm9pZCAq X19idWYsIHNpemVfdCBfX25ieXRlcywgX19vZmZfdCBfX29mZnNldCkKICAgICB0aHJvdyAoKTsK ZXh0ZXJuIHNzaXplX3QgcHdyaXRlIChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6 ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICBfX29mZl90IF9fb2Zmc2V0KSB0aHJvdyAo KTsKIyAzNDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gc3NpemVfdCBwcmVhZDY0 IChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywKICAgICAgICAgICAgICAg ICAgICAgICAgX19vZmY2NF90IF9fb2Zmc2V0KSB0aHJvdyAoKTsKCgpleHRlcm4gc3NpemVfdCBw d3JpdGU2NCAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24sCiAgICAg ICAgICAgICAgICAgICAgICAgICBfX29mZjY0X3QgX19vZmZzZXQpIHRocm93ICgpOwoKCgoKCgoK ZXh0ZXJuIGludCBwaXBlIChpbnQgX19waXBlZGVzWzJdKSB0aHJvdyAoKTsKIyAzNjIgIi91c3Iv aW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gdW5zaWduZWQgaW50IGFsYXJtICh1bnNpZ25lZCBp bnQgX19zZWNvbmRzKSB0aHJvdyAoKTsKIyAzNzEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpl eHRlcm4gdW5zaWduZWQgaW50IHNsZWVwICh1bnNpZ25lZCBpbnQgX19zZWNvbmRzKSB0aHJvdyAo KTsKCgoKCgoKZXh0ZXJuIF9fdXNlY29uZHNfdCB1YWxhcm0gKF9fdXNlY29uZHNfdCBfX3ZhbHVl LCBfX3VzZWNvbmRzX3QgX19pbnRlcnZhbCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1 c2xlZXAgKF9fdXNlY29uZHNfdCBfX3VzZWNvbmRzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50 IHBhdXNlICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjaG93biAoX19jb25zdCBjaGFy ICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKQogICAgIHRocm93ICgp OwoKCgpleHRlcm4gaW50IGZjaG93biAoaW50IF9fZmQsIF9fdWlkX3QgX19vd25lciwgX19naWRf dCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbGNob3duIChfX2NvbnN0IGNoYXIg Kl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7 CgoKCgpleHRlcm4gaW50IGNoZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgdGhyb3cgKCk7CgoK CmV4dGVybiBpbnQgZmNoZGlyIChpbnQgX19mZCkgdGhyb3cgKCk7CiMgNDIzICIvdXNyL2luY2x1 ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGNoYXIgKmdldGN3ZCAoY2hhciAqX19idWYsIHNpemVfdCBf X3NpemUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpnZXRfY3VycmVudF9kaXJfbmFtZSAo dm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpnZXR3ZCAoY2hhciAqX19idWYpIHRo cm93ICgpOwoKCgoKZXh0ZXJuIGludCBkdXAgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgpleHRlcm4g aW50IGR1cDIgKGludCBfX2ZkLCBpbnQgX19mZDIpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICoq X19lbnZpcm9uOwoKZXh0ZXJuIGNoYXIgKiplbnZpcm9uOwoKCgoKCmV4dGVybiBpbnQgZXhlY3Zl IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSwKICAgICAgICAg ICAgICAgICAgIGNoYXIgKl9fY29uc3QgX19lbnZwW10pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu dCBmZXhlY3ZlIChpbnQgX19mZCwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSwgY2hhciAqX19jb25z dCBfX2VudnBbXSkKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZXhlY3YgKF9fY29uc3Qg Y2hhciAqX19wYXRoLCBjaGFyICpfX2NvbnN0IF9fYXJndltdKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGludCBleGVjbGUgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAu Li4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGV4ZWNsIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwg X19jb25zdCBjaGFyICpfX2FyZywgLi4uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBleGVjdnAg KF9fY29uc3QgY2hhciAqX19maWxlLCBjaGFyICpfX2NvbnN0IF9fYXJndltdKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBpbnQgZXhlY2xwIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19jb25zdCBjaGFy ICpfX2FyZywgLi4uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbmljZSAoaW50IF9faW5jKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9leGl0IChpbnQgX19zdGF0dXMpIF9fYXR0cmlidXRl X18gKChfX25vcmV0dXJuX18pKTsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2NvbmZuYW1l LmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9jb25mbmFtZS5oIiAzCmVudW0KICB7CiAg ICBfUENfTElOS19NQVgsCgogICAgX1BDX01BWF9DQU5PTiwKCiAgICBfUENfTUFYX0lOUFVULAoK ICAgIF9QQ19OQU1FX01BWCwKCiAgICBfUENfUEFUSF9NQVgsCgogICAgX1BDX1BJUEVfQlVGLAoK ICAgIF9QQ19DSE9XTl9SRVNUUklDVEVELAoKICAgIF9QQ19OT19UUlVOQywKCiAgICBfUENfVkRJ U0FCTEUsCgogICAgX1BDX1NZTkNfSU8sCgogICAgX1BDX0FTWU5DX0lPLAoKICAgIF9QQ19QUklP X0lPLAoKICAgIF9QQ19TT0NLX01BWEJVRiwKCiAgICBfUENfRklMRVNJWkVCSVRTLAoKICAgIF9Q Q19SRUNfSU5DUl9YRkVSX1NJWkUsCgogICAgX1BDX1JFQ19NQVhfWEZFUl9TSVpFLAoKICAgIF9Q Q19SRUNfTUlOX1hGRVJfU0laRSwKCiAgICBfUENfUkVDX1hGRVJfQUxJR04sCgogICAgX1BDX0FM TE9DX1NJWkVfTUlOLAoKICAgIF9QQ19TWU1MSU5LX01BWAoKICB9OwoKCmVudW0KICB7CiAgICBf U0NfQVJHX01BWCwKCiAgICBfU0NfQ0hJTERfTUFYLAoKICAgIF9TQ19DTEtfVENLLAoKICAgIF9T Q19OR1JPVVBTX01BWCwKCiAgICBfU0NfT1BFTl9NQVgsCgogICAgX1NDX1NUUkVBTV9NQVgsCgog ICAgX1NDX1RaTkFNRV9NQVgsCgogICAgX1NDX0pPQl9DT05UUk9MLAoKICAgIF9TQ19TQVZFRF9J RFMsCgogICAgX1NDX1JFQUxUSU1FX1NJR05BTFMsCgogICAgX1NDX1BSSU9SSVRZX1NDSEVEVUxJ TkcsCgogICAgX1NDX1RJTUVSUywKCiAgICBfU0NfQVNZTkNIUk9OT1VTX0lPLAoKICAgIF9TQ19Q UklPUklUSVpFRF9JTywKCiAgICBfU0NfU1lOQ0hST05JWkVEX0lPLAoKICAgIF9TQ19GU1lOQywK CiAgICBfU0NfTUFQUEVEX0ZJTEVTLAoKICAgIF9TQ19NRU1MT0NLLAoKICAgIF9TQ19NRU1MT0NL X1JBTkdFLAoKICAgIF9TQ19NRU1PUllfUFJPVEVDVElPTiwKCiAgICBfU0NfTUVTU0FHRV9QQVNT SU5HLAoKICAgIF9TQ19TRU1BUEhPUkVTLAoKICAgIF9TQ19TSEFSRURfTUVNT1JZX09CSkVDVFMs CgogICAgX1NDX0FJT19MSVNUSU9fTUFYLAoKICAgIF9TQ19BSU9fTUFYLAoKICAgIF9TQ19BSU9f UFJJT19ERUxUQV9NQVgsCgogICAgX1NDX0RFTEFZVElNRVJfTUFYLAoKICAgIF9TQ19NUV9PUEVO X01BWCwKCiAgICBfU0NfTVFfUFJJT19NQVgsCgogICAgX1NDX1ZFUlNJT04sCgogICAgX1NDX1BB R0VTSVpFLAoKCiAgICBfU0NfUlRTSUdfTUFYLAoKICAgIF9TQ19TRU1fTlNFTVNfTUFYLAoKICAg IF9TQ19TRU1fVkFMVUVfTUFYLAoKICAgIF9TQ19TSUdRVUVVRV9NQVgsCgogICAgX1NDX1RJTUVS X01BWCwKCgoKCiAgICBfU0NfQkNfQkFTRV9NQVgsCgogICAgX1NDX0JDX0RJTV9NQVgsCgogICAg X1NDX0JDX1NDQUxFX01BWCwKCiAgICBfU0NfQkNfU1RSSU5HX01BWCwKCiAgICBfU0NfQ09MTF9X RUlHSFRTX01BWCwKCiAgICBfU0NfRVFVSVZfQ0xBU1NfTUFYLAoKICAgIF9TQ19FWFBSX05FU1Rf TUFYLAoKICAgIF9TQ19MSU5FX01BWCwKCiAgICBfU0NfUkVfRFVQX01BWCwKCiAgICBfU0NfQ0hB UkNMQVNTX05BTUVfTUFYLAoKCiAgICBfU0NfMl9WRVJTSU9OLAoKICAgIF9TQ18yX0NfQklORCwK CiAgICBfU0NfMl9DX0RFViwKCiAgICBfU0NfMl9GT1JUX0RFViwKCiAgICBfU0NfMl9GT1JUX1JV TiwKCiAgICBfU0NfMl9TV19ERVYsCgogICAgX1NDXzJfTE9DQUxFREVGLAoKCiAgICBfU0NfUElJ LAoKICAgIF9TQ19QSUlfWFRJLAoKICAgIF9TQ19QSUlfU09DS0VULAoKICAgIF9TQ19QSUlfSU5U RVJORVQsCgogICAgX1NDX1BJSV9PU0ksCgogICAgX1NDX1BPTEwsCgogICAgX1NDX1NFTEVDVCwK CiAgICBfU0NfVUlPX01BWElPViwKCiAgICBfU0NfSU9WX01BWCA9IF9TQ19VSU9fTUFYSU9WLAoK ICAgIF9TQ19QSUlfSU5URVJORVRfU1RSRUFNLAoKICAgIF9TQ19QSUlfSU5URVJORVRfREdSQU0s CgogICAgX1NDX1BJSV9PU0lfQ09UUywKCiAgICBfU0NfUElJX09TSV9DTFRTLAoKICAgIF9TQ19Q SUlfT1NJX00sCgogICAgX1NDX1RfSU9WX01BWCwKCgoKICAgIF9TQ19USFJFQURTLAoKICAgIF9T Q19USFJFQURfU0FGRV9GVU5DVElPTlMsCgogICAgX1NDX0dFVEdSX1JfU0laRV9NQVgsCgogICAg X1NDX0dFVFBXX1JfU0laRV9NQVgsCgogICAgX1NDX0xPR0lOX05BTUVfTUFYLAoKICAgIF9TQ19U VFlfTkFNRV9NQVgsCgogICAgX1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMsCgogICAg X1NDX1RIUkVBRF9LRVlTX01BWCwKCiAgICBfU0NfVEhSRUFEX1NUQUNLX01JTiwKCiAgICBfU0Nf VEhSRUFEX1RIUkVBRFNfTUFYLAoKICAgIF9TQ19USFJFQURfQVRUUl9TVEFDS0FERFIsCgogICAg X1NDX1RIUkVBRF9BVFRSX1NUQUNLU0laRSwKCiAgICBfU0NfVEhSRUFEX1BSSU9SSVRZX1NDSEVE VUxJTkcsCgogICAgX1NDX1RIUkVBRF9QUklPX0lOSEVSSVQsCgogICAgX1NDX1RIUkVBRF9QUklP X1BST1RFQ1QsCgogICAgX1NDX1RIUkVBRF9QUk9DRVNTX1NIQVJFRCwKCgogICAgX1NDX05QUk9D RVNTT1JTX0NPTkYsCgogICAgX1NDX05QUk9DRVNTT1JTX09OTE4sCgogICAgX1NDX1BIWVNfUEFH RVMsCgogICAgX1NDX0FWUEhZU19QQUdFUywKCiAgICBfU0NfQVRFWElUX01BWCwKCiAgICBfU0Nf UEFTU19NQVgsCgoKICAgIF9TQ19YT1BFTl9WRVJTSU9OLAoKICAgIF9TQ19YT1BFTl9YQ1VfVkVS U0lPTiwKCiAgICBfU0NfWE9QRU5fVU5JWCwKCiAgICBfU0NfWE9QRU5fQ1JZUFQsCgogICAgX1ND X1hPUEVOX0VOSF9JMThOLAoKICAgIF9TQ19YT1BFTl9TSE0sCgoKICAgIF9TQ18yX0NIQVJfVEVS TSwKCiAgICBfU0NfMl9DX1ZFUlNJT04sCgogICAgX1NDXzJfVVBFLAoKCiAgICBfU0NfWE9QRU5f WFBHMiwKCiAgICBfU0NfWE9QRU5fWFBHMywKCiAgICBfU0NfWE9QRU5fWFBHNCwKCgogICAgX1ND X0NIQVJfQklULAoKICAgIF9TQ19DSEFSX01BWCwKCiAgICBfU0NfQ0hBUl9NSU4sCgogICAgX1ND X0lOVF9NQVgsCgogICAgX1NDX0lOVF9NSU4sCgogICAgX1NDX0xPTkdfQklULAoKICAgIF9TQ19X T1JEX0JJVCwKCiAgICBfU0NfTUJfTEVOX01BWCwKCiAgICBfU0NfTlpFUk8sCgogICAgX1NDX1NT SVpFX01BWCwKCiAgICBfU0NfU0NIQVJfTUFYLAoKICAgIF9TQ19TQ0hBUl9NSU4sCgogICAgX1ND X1NIUlRfTUFYLAoKICAgIF9TQ19TSFJUX01JTiwKCiAgICBfU0NfVUNIQVJfTUFYLAoKICAgIF9T Q19VSU5UX01BWCwKCiAgICBfU0NfVUxPTkdfTUFYLAoKICAgIF9TQ19VU0hSVF9NQVgsCgoKICAg IF9TQ19OTF9BUkdNQVgsCgogICAgX1NDX05MX0xBTkdNQVgsCgogICAgX1NDX05MX01TR01BWCwK CiAgICBfU0NfTkxfTk1BWCwKCiAgICBfU0NfTkxfU0VUTUFYLAoKICAgIF9TQ19OTF9URVhUTUFY LAoKCiAgICBfU0NfWEJTNV9JTFAzMl9PRkYzMiwKCiAgICBfU0NfWEJTNV9JTFAzMl9PRkZCSUcs CgogICAgX1NDX1hCUzVfTFA2NF9PRkY2NCwKCiAgICBfU0NfWEJTNV9MUEJJR19PRkZCSUcsCgoK ICAgIF9TQ19YT1BFTl9MRUdBQ1ksCgogICAgX1NDX1hPUEVOX1JFQUxUSU1FLAoKICAgIF9TQ19Y T1BFTl9SRUFMVElNRV9USFJFQURTLAoKCiAgICBfU0NfQURWSVNPUllfSU5GTywKCiAgICBfU0Nf QkFSUklFUlMsCgogICAgX1NDX0JBU0UsCgogICAgX1NDX0NfTEFOR19TVVBQT1JULAoKICAgIF9T Q19DX0xBTkdfU1VQUE9SVF9SLAoKICAgIF9TQ19DTE9DS19TRUxFQ1RJT04sCgogICAgX1NDX0NQ VVRJTUUsCgogICAgX1NDX1RIUkVBRF9DUFVUSU1FLAoKICAgIF9TQ19ERVZJQ0VfSU8sCgogICAg X1NDX0RFVklDRV9TUEVDSUZJQywKCiAgICBfU0NfREVWSUNFX1NQRUNJRklDX1IsCgogICAgX1ND X0ZEX01HTVQsCgogICAgX1NDX0ZJRk8sCgogICAgX1NDX1BJUEUsCgogICAgX1NDX0ZJTEVfQVRU UklCVVRFUywKCiAgICBfU0NfRklMRV9MT0NLSU5HLAoKICAgIF9TQ19GSUxFX1NZU1RFTSwKCiAg ICBfU0NfTU9OT1RPTklDX0NMT0NLLAoKICAgIF9TQ19NVUxUSV9QUk9DRVNTLAoKICAgIF9TQ19T SU5HTEVfUFJPQ0VTUywKCiAgICBfU0NfTkVUV09SS0lORywKCiAgICBfU0NfUkVBREVSX1dSSVRF Ul9MT0NLUywKCiAgICBfU0NfU1BJTl9MT0NLUywKCiAgICBfU0NfUkVHRVhQLAoKICAgIF9TQ19S RUdFWF9WRVJTSU9OLAoKICAgIF9TQ19TSEVMTCwKCiAgICBfU0NfU0lHTkFMUywKCiAgICBfU0Nf U1BBV04sCgogICAgX1NDX1NQT1JBRElDX1NFUlZFUiwKCiAgICBfU0NfVEhSRUFEX1NQT1JBRElD X1NFUlZFUiwKCiAgICBfU0NfU1lTVEVNX0RBVEFCQVNFLAoKICAgIF9TQ19TWVNURU1fREFUQUJB U0VfUiwKCiAgICBfU0NfVElNRU9VVFMsCgogICAgX1NDX1RZUEVEX01FTU9SWV9PQkpFQ1RTLAoK ICAgIF9TQ19VU0VSX0dST1VQUywKCiAgICBfU0NfVVNFUl9HUk9VUFNfUiwKCiAgICBfU0NfMl9Q QlMsCgogICAgX1NDXzJfUEJTX0FDQ09VTlRJTkcsCgogICAgX1NDXzJfUEJTX0xPQ0FURSwKCiAg ICBfU0NfMl9QQlNfTUVTU0FHRSwKCiAgICBfU0NfMl9QQlNfVFJBQ0ssCgogICAgX1NDX1NZTUxP T1BfTUFYLAoKICAgIF9TQ19TVFJFQU1TLAoKICAgIF9TQ18yX1BCU19DSEVDS1BPSU5ULAoKCiAg ICBfU0NfVjZfSUxQMzJfT0ZGMzIsCgogICAgX1NDX1Y2X0lMUDMyX09GRkJJRywKCiAgICBfU0Nf VjZfTFA2NF9PRkY2NCwKCiAgICBfU0NfVjZfTFBCSUdfT0ZGQklHLAoKCiAgICBfU0NfSE9TVF9O QU1FX01BWCwKCiAgICBfU0NfVFJBQ0UsCgogICAgX1NDX1RSQUNFX0VWRU5UX0ZJTFRFUiwKCiAg ICBfU0NfVFJBQ0VfSU5IRVJJVCwKCiAgICBfU0NfVFJBQ0VfTE9HCgogIH07CgoKCgoKZW51bQog IHsKICAgIF9DU19QQVRILAoKCgoKICAgIF9DU19MRlNfQ0ZMQUdTID0gMTAwMCwKCiAgICBfQ1Nf TEZTX0xERkxBR1MsCgogICAgX0NTX0xGU19MSUJTLAoKICAgIF9DU19MRlNfTElOVEZMQUdTLAoK ICAgIF9DU19MRlM2NF9DRkxBR1MsCgogICAgX0NTX0xGUzY0X0xERkxBR1MsCgogICAgX0NTX0xG UzY0X0xJQlMsCgogICAgX0NTX0xGUzY0X0xJTlRGTEFHUywKCgoKCiAgICBfQ1NfWEJTNV9JTFAz Ml9PRkYzMl9DRkxBR1MgPSAxMTAwLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xERkxBR1Ms CgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTElCUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYz Ml9MSU5URkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1Nf WEJTNV9JTFAzMl9PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElC UywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1X0xQ NjRfT0ZGNjRfQ0ZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTERGTEFHUywKCiAgICBf Q1NfWEJTNV9MUDY0X09GRjY0X0xJQlMsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9MSU5URkxB R1MsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJ R19PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElCUywKCiAgICBf Q1NfWEJTNV9MUEJJR19PRkZCSUdfTElOVEZMQUdTLAoKCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMy X09GRjMyX0NGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfTERGTEFHUywKCiAg ICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfTElCUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJf T0ZGMzJfTElOVEZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfQ0ZMQUdTLAoK ICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZf SUxQMzJfT0ZGQklHX0xJQlMsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19MSU5URkxB R1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfQ0ZMQUdTLAoKICAgIF9DU19QT1NJWF9W Nl9MUDY0X09GRjY0X0xERkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTElCUywK CiAgICBfQ1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9MSU5URkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2 X0xQQklHX09GRkJJR19DRkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19MREZM QUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdfTElCUywKCiAgICBfQ1NfUE9TSVhf VjZfTFBCSUdfT0ZGQklHX0xJTlRGTEFHUywKCgoKICAgIF9DU19WNl9XSURUSF9SRVNUUklDVEVE X0VOVlMKCiAgfTsKIyA1MDEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoKZXh0ZXJuIGxv bmcgaW50IHBhdGhjb25mIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgaW50IF9fbmFtZSkgdGhyb3cg KCk7CgoKZXh0ZXJuIGxvbmcgaW50IGZwYXRoY29uZiAoaW50IF9fZmQsIGludCBfX25hbWUpIHRo cm93ICgpOwoKCmV4dGVybiBsb25nIGludCBzeXNjb25mIChpbnQgX19uYW1lKSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBzaXplX3QgY29uZnN0ciAoaW50 IF9fbmFtZSwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4g X19waWRfdCBnZXRwaWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBfX3BpZF90IGdldHBwaWQg KHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGdycCAodm9pZCkgdGhyb3cg KCk7CiMgNTM2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9fcGlkX3QgX19nZXRw Z2lkIChfX3BpZF90IF9fcGlkKSB0aHJvdyAoKTsKCmV4dGVybiBfX3BpZF90IGdldHBnaWQgKF9f cGlkX3QgX19waWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHNldHBnaWQgKF9fcGlkX3Qg X19waWQsIF9fcGlkX3QgX19wZ2lkKSB0aHJvdyAoKTsKIyA1NjIgIi91c3IvaW5jbHVkZS91bmlz dGQuaCIgMwpleHRlcm4gaW50IHNldHBncnAgKHZvaWQpIHRocm93ICgpOwojIDU4MCAiL3Vzci9p bmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX3BpZF90IHNldHNpZCAodm9pZCkgdGhyb3cgKCk7 CgoKCmV4dGVybiBfX3BpZF90IGdldHNpZCAoX19waWRfdCBfX3BpZCkgdGhyb3cgKCk7CgoKCmV4 dGVybiBfX3VpZF90IGdldHVpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fdWlkX3QgZ2V0 ZXVpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fZ2lkX3QgZ2V0Z2lkICh2b2lkKSB0aHJv dyAoKTsKCgpleHRlcm4gX19naWRfdCBnZXRlZ2lkICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBpbnQgZ2V0Z3JvdXBzIChpbnQgX19zaXplLCBfX2dpZF90IF9fbGlzdFtdKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGludCBncm91cF9tZW1iZXIgKF9fZ2lkX3QgX19naWQpIHRocm93ICgpOwoKCgoK CgpleHRlcm4gaW50IHNldHVpZCAoX191aWRfdCBfX3VpZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g aW50IHNldHJldWlkIChfX3VpZF90IF9fcnVpZCwgX191aWRfdCBfX2V1aWQpIHRocm93ICgpOwoK CgoKZXh0ZXJuIGludCBzZXRldWlkIChfX3VpZF90IF9fdWlkKSB0aHJvdyAoKTsKCgoKCgoKZXh0 ZXJuIGludCBzZXRnaWQgKF9fZ2lkX3QgX19naWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBz ZXRyZWdpZCAoX19naWRfdCBfX3JnaWQsIF9fZ2lkX3QgX19lZ2lkKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBpbnQgc2V0ZWdpZCAoX19naWRfdCBfX2dpZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBf X3BpZF90IGZvcmsgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gX19waWRfdCB2Zm9yayAo dm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKnR0eW5hbWUgKGludCBfX2ZkKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGludCB0dHluYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6 ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc2F0dHkgKGludCBfX2ZkKSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHR0eXNsb3QgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGludCBsaW5rIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25zdCBjaGFyICpfX3RvKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzeW1saW5rIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19j b25zdCBjaGFyICpfX3RvKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcmVhZGxpbmsgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3BhdGgsIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5s aW5rIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBybWRpciAo X19jb25zdCBjaGFyICpfX3BhdGgpIHRocm93ICgpOwoKCgpleHRlcm4gX19waWRfdCB0Y2dldHBn cnAgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRjc2V0cGdycCAoaW50IF9fZmQs IF9fcGlkX3QgX19wZ3JwX2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmdldGxvZ2luICh2 b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZ2V0bG9naW5fciAoY2hhciAqX19uYW1lLCBz aXplX3QgX19uYW1lX2xlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldGxvZ2luIChfX2Nv bnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CiMgNzI2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZ2V0 b3B0LmgiIDMKZXh0ZXJuICJDIiB7CiMgNDcgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwpleHRl cm4gY2hhciAqb3B0YXJnOwojIDYxICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuIGlu dCBvcHRpbmQ7CgoKCgpleHRlcm4gaW50IG9wdGVycjsKCgoKZXh0ZXJuIGludCBvcHRvcHQ7CiMg MTQ1ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuIGludCBnZXRvcHQgKGludCBfX19h cmdjLCBjaGFyICpjb25zdCAqX19fYXJndiwgY29uc3QgY2hhciAqX19zaG9ydG9wdHMpOwojIDE3 NSAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCn0KIyA3MjcgIi91c3IvaW5jbHVkZS91bmlzdGQu aCIgMiAzCgoKCgoKCgpleHRlcm4gaW50IGdldGhvc3RuYW1lIChjaGFyICpfX25hbWUsIHNpemVf dCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgc2V0aG9zdG5hbWUgKF9fY29uc3Qg Y2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNldGhv c3RpZCAobG9uZyBpbnQgX19pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRkb21haW5u YW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgc2V0 ZG9tYWlubmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIGludCB2aGFuZ3VwICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHJl dm9rZSAoX19jb25zdCBjaGFyICpfX2ZpbGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBw cm9maWwgKHVuc2lnbmVkIHNob3J0IGludCAqX19zYW1wbGVfYnVmZmVyLCBzaXplX3QgX19zaXpl LAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fb2Zmc2V0LCB1bnNpZ25lZCBpbnQgX19zY2Fs ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBhY2N0IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkg dGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpnZXR1c2Vyc2hlbGwgKHZvaWQpIHRocm93ICgpOwpl eHRlcm4gdm9pZCBlbmR1c2Vyc2hlbGwgKHZvaWQpIHRocm93ICgpOwpleHRlcm4gdm9pZCBzZXR1 c2Vyc2hlbGwgKHZvaWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZGFlbW9uIChpbnQgX19u b2NoZGlyLCBpbnQgX19ub2Nsb3NlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjaHJvb3Qg KF9fY29uc3QgY2hhciAqX19wYXRoKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmdldHBhc3Mg KF9fY29uc3QgY2hhciAqX19wcm9tcHQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZnN5bmMg KGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGdldGhvc3RpZCAodm9p ZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3luYyAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRl cm4gaW50IGdldHBhZ2VzaXplICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKCgpleHRlcm4gaW50IHRydW5jYXRlIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19v ZmZfdCBfX2xlbmd0aCkgdGhyb3cgKCk7CiMgODM2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMK ZXh0ZXJuIGludCB0cnVuY2F0ZTY0IChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19vZmY2NF90IF9f bGVuZ3RoKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnRydW5jYXRlIChpbnQgX19mZCwgX19v ZmZfdCBfX2xlbmd0aCkgdGhyb3cgKCk7CiMgODUxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMK ZXh0ZXJuIGludCBmdHJ1bmNhdGU2NCAoaW50IF9fZmQsIF9fb2ZmNjRfdCBfX2xlbmd0aCkgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRkdGFibGVzaXplICh2b2lkKSB0aHJvdyAoKTsKIyA4 NjYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGJyayAodm9pZCAqX19hZGRy KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqc2JyayAoaW50cHRyX3QgX19kZWx0YSkgdGhy b3cgKCk7CiMgODg3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGxvbmcgaW50IHN5 c2NhbGwgKGxvbmcgaW50IF9fc3lzbm8sIC4uLikgdGhyb3cgKCk7CiMgOTA3ICIvdXNyL2luY2x1 ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBsb2NrZiAoaW50IF9fZmQsIGludCBfX2NtZCwgX19v ZmZfdCBfX2xlbikgdGhyb3cgKCk7CiMgOTE3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0 ZXJuIGludCBsb2NrZjY0IChpbnQgX19mZCwgaW50IF9fY21kLCBfX29mZjY0X3QgX19sZW4pIHRo cm93ICgpOwojIDkzOCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgZmRhdGFz eW5jIChpbnQgX19maWxkZXMpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGNoYXIgKmNyeXB0IChf X2NvbnN0IGNoYXIgKl9fa2V5LCBfX2NvbnN0IGNoYXIgKl9fc2FsdCkgdGhyb3cgKCk7CgoKCmV4 dGVybiB2b2lkIGVuY3J5cHQgKGNoYXIgKl9fYmxvY2ssIGludCBfX2VkZmxhZykgdGhyb3cgKCk7 CgoKCgoKCmV4dGVybiB2b2lkIHN3YWIgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX2Zyb20s IHZvaWQgKl9fcmVzdHJpY3QgX190bywKICAgICAgICAgICAgICAgICAgc3NpemVfdCBfX24pIHRo cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7 CiMgOTgzICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9y ayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICgqX19wYXJlbnQpICh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAo Kl9fY2hpbGQpICh2b2lkKSkgdGhyb3cgKCk7CgoKfQojIDEyICIvaG9tZS9jb21wYmlvL2Q5NS1i bGkvaW5jbHVkZS9ib29zdC9jb25maWcvcG9zaXhfZmVhdHVyZXMuaHBwIiAyIDMKIyA2OCAiL2hv bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvY29uZmlnL3BsYXRmb3JtL2xpbnV4Lmhw cCIgMiAzCiMgNTQgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2NvbmZpZy5o cHAiIDIgMwoKCgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2NvbmZp Zy9zdWZmaXguaHBwIiAxIDMKIyAzMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v c3QvY29uZmlnL3N1ZmZpeC5ocHAiIDMKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAzMSAi L2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvY29uZmlnL3N1ZmZpeC5ocHAiIDIg MwojIDU4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9jb25maWcuaHBwIiAy IDMKIyA2MCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvZGV0YWlsL2l0ZXJh dG9yLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlw ZV90cmFpdHMuaHBwIiAxIDMKIyAxMiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v c3QvdHlwZV90cmFpdHMuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv Ym9vc3QvdHlwZV90cmFpdHMvYWRkX2NvbnN0LmhwcCIgMSAzCiMgMTcgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9jb25zdC5ocHAiIDMKIyAxICIv aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlw ZV90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21l L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0 ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMwojIDEg Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhfL3RlbXBsYXRlX2Fy aXR5X2Z3ZC5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z dC9tcGwvYXV4Xy90ZW1wbGF0ZV9hcml0eV9md2QuaHBwIiAzCm5hbWVzcGFjZSBib29zdCB7Cm5h bWVzcGFjZSBtcGwgewpuYW1lc3BhY2UgYXV4IHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBGID4gc3Ry dWN0IHRlbXBsYXRlX2FyaXR5OwoKfQp9Cn0KIyAyMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu Y2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAy IDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tcGwvYXV4Xy9wcmVw cm9jZXNzb3IvcGFyYW1zLmhwcCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs dWRlL2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9wYXJhbXMuaHBwIiAzCiMgMSAiL2hvbWUv Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL2F1eF8vY29uZmlnL3ByZXByb2Nlc3Nv ci5ocHAiIDEgMwojIDIxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tcGwv YXV4Xy9wcmVwcm9jZXNzb3IvcGFyYW1zLmhwcCIgMiAzCiMgMjkgIi9ob21lL2NvbXBiaW8vZDk1 LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9wYXJhbXMuaHBwIiAzCiMg MSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvcHJlcHJvY2Vzc29yL2NhdC5o cHAiIDEgMwojIDE4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9wcmVwcm9j ZXNzb3IvY2F0LmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0 L3ByZXByb2Nlc3Nvci9jb25maWcvY29uZmlnLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBwIiAyIDMKIyAzMCAiL2hv bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc29yL3Bh cmFtcy5ocHAiIDIgMwojIDIxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90 eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAiIDIgMwojIDEgIi9ob21l L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhfL2xhbWJkYV9zdXBwb3J0Lmhw cCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhf L2xhbWJkYV9zdXBwb3J0LmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9sYW1iZGEuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29tcGJp by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL2F1eF8vY29uZmlnL2xhbWJkYS5ocHAiIDMKIyAx ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tcGwvYXV4Xy9jb25maWcvdHRw LmhwcCIgMSAzCiMgMjEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9h dXhfL2NvbmZpZy9sYW1iZGEuaHBwIiAyIDMKIyAyMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu Y2x1ZGUvYm9vc3QvbXBsL2F1eF8vbGFtYmRhX3N1cHBvcnQuaHBwIiAyIDMKIyAyMiAiL2hvbWUv Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRl X2FyaXR5X3NwZWMuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i b29zdC9tcGwvYXV4Xy9jb25maWcvb3ZlcmxvYWRfcmVzb2x1dGlvbi5ocHAiIDEgMwojIDIzICIv aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVt cGxhdGVfYXJpdHlfc3BlYy5ocHAiIDIgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j bHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIiAyIDMKIyAx OCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvYWRkX2Nv bnN0LmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9vc3QgewojIDM0ICIvaG9tZS9jb21wYmlvL2Q5NS1i bGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9hZGRfY29uc3QuaHBwIiAzCnRlbXBsYXRlPCB0 eXBlbmFtZSBUID4gc3RydWN0IGFkZF9jb25zdCB7IHR5cGVkZWYgVCBjb25zdCB0eXBlOyB9OwoK CgoKCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBhZGRfY29uc3Q8VCY+IHsgdHlwZWRl ZiBUJiB0eXBlOyB9OwoKCn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v c3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfdW5kZWYuaHBwIiAxIDMKIyA0NyAiL2hv bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvYWRkX2NvbnN0Lmhw cCIgMiAzCiMgMTMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJh aXRzLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlw ZV90cmFpdHMvYWRkX2N2LmhwcCIgMSAzCiMgMTcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs dWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9jdi5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5 NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBw IiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp dHMvZGV0YWlsL3R5cGVfdHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJs aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhw cCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJh aXRzL2RldGFpbC90eXBlX3RyYWl0X2RlZi5ocHAiIDIgMwojIDE4ICIvaG9tZS9jb21wYmlvL2Q5 NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9hZGRfY3YuaHBwIiAyIDMKCm5hbWVzcGFj ZSBib29zdCB7CiMgMzQgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVf dHJhaXRzL2FkZF9jdi5ocHAiIDMKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgYWRkX2N2 IHsgdHlwZWRlZiBUIGNvbnN0IHZvbGF0aWxlIHR5cGU7IH07CgoKCgoKCnRlbXBsYXRlPCB0eXBl bmFtZSBUID4gc3RydWN0IGFkZF9jdjxUJj4geyB0eXBlZGVmIFQmIHR5cGU7IH07CgoKfQoKIyAx ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwv dHlwZV90cmFpdF91bmRlZi5ocHAiIDEgMwojIDQ3ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j bHVkZS9ib29zdC90eXBlX3RyYWl0cy9hZGRfY3YuaHBwIiAyIDMKIyAxNCAiL2hvbWUvY29tcGJp by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMuaHBwIiAyIDMKIyAxICIvaG9tZS9j b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9hZGRfcG9pbnRlci5ocHAi IDEgMwojIDEzICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0 cy9hZGRfcG9pbnRlci5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i b29zdC90eXBlX3RyYWl0cy9yZW1vdmVfcmVmZXJlbmNlLmhwcCIgMSAzCiMgMTMgIi9ob21lL2Nv bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9yZWZlcmVuY2Uu aHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp dHMvYnJva2VuX2NvbXBpbGVyX3NwZWMuaHBwIiAxIDMKIyA4NiAiL2hvbWUvY29tcGJpby9kOTUt YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvYnJva2VuX2NvbXBpbGVyX3NwZWMuaHBwIiAz CgoKCgoKCgoKCgoKCgoKCgojIDE0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z dC90eXBlX3RyYWl0cy9yZW1vdmVfcmVmZXJlbmNlLmhwcCIgMiAzCgoKCiMgMSAiL2hvbWUvY29t cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRf ZGVmLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5 cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X2RlZi5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlv L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlf c3BlYy5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90 eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIiAyIDMKIyAxOCAiL2hvbWUvY29t cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX3JlZmVyZW5jZS5o cHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0 IHJlbW92ZV9yZWZlcmVuY2UgeyB0eXBlZGVmIFQgdHlwZTsgfTsKCgp0ZW1wbGF0ZTwgdHlwZW5h bWUgVCA+IHN0cnVjdCByZW1vdmVfcmVmZXJlbmNlPFQmPiB7IHR5cGVkZWYgVCB0eXBlOyB9Owoj IDM4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9yZW1v dmVfcmVmZXJlbmNlLmhwcCIgMwp9CgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X3VuZGVmLmhwcCIgMSAzCiMgNDEg Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9y ZWZlcmVuY2UuaHBwIiAyIDMKIyAxNCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v c3QvdHlwZV90cmFpdHMvYWRkX3BvaW50ZXIuaHBwIiAyIDMKCgojIDEgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X2RlZi5o cHAiIDEgMwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3Ry YWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUt YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMu aHBwIiAxIDMKIyAyMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90 cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfZGVmLmhwcCIgMiAzCiMgMTcgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9wb2ludGVyLmhwcCIgMiAzCgpu YW1lc3BhY2UgYm9vc3QgewoKbmFtZXNwYWNlIGRldGFpbCB7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4Kc3RydWN0IGFkZF9wb2ludGVyX2ltcGwKewogICAgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVf cmVmZXJlbmNlPFQ+Ojp0eXBlIG5vX3JlZl90eXBlOwogICAgdHlwZWRlZiBub19yZWZfdHlwZSog dHlwZTsKfTsKCn0KCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGFkZF9wb2ludGVyIHsg dHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmFkZF9wb2ludGVyX2ltcGw8VD46OnR5cGUgdHlwZTsg fTsKCn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp dHMvZGV0YWlsL3R5cGVfdHJhaXRfdW5kZWYuaHBwIiAxIDMKIyAzNiAiL2hvbWUvY29tcGJpby9k OTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3BvaW50ZXIuaHBwIiAyIDMKIyAx NSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMuaHBwIiAy IDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9h ZGRfcmVmZXJlbmNlLmhwcCIgMSAzCiMgMTMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl L2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9yZWZlcmVuY2UuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJp by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfcmVmZXJlbmNlLmhwcCIgMSAz CiMgMTQgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lz X3JlZmVyZW5jZS5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z dC90eXBlX3RyYWl0cy9jb25maWcuaHBwIiAxIDMKIyAxNSAiL2hvbWUvY29tcGJpby9kOTUtYmxp L2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfcmVmZXJlbmNlLmhwcCIgMiAzCiMgMjcgIi9o b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3JlZmVyZW5j ZS5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3Ry YWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9k OTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhw cCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz L2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5o cHAiIDIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9ib29s X2MuaHBwIiAxIDMKIyAyMiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBs L2Jvb2xfYy5ocHAiIDMKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0 ZTwgYm9vbCBDID4gc3RydWN0IGJvb2xfYwp7CiAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9 IEM7CiAgICB0eXBlZGVmIGJvb2xfYyB0eXBlOwogICAgdHlwZWRlZiBib29sIHZhbHVlX3R5cGU7 CiAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+dmFsdWU7IH0KfTsKCgp0 eXBlZGVmIGJvb2xfYzx0cnVlPiB0cnVlX2M7CnR5cGVkZWYgYm9vbF9jPGZhbHNlPiBmYWxzZV9j OwoKfQp9CiMgMjEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJh aXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDIgMwojIDI4ICIvaG9tZS9jb21wYmlvL2Q5 NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19yZWZlcmVuY2UuaHBwIiAyIDMKCm5h bWVzcGFjZSBib29zdCB7CgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGlzX3JlZmVy ZW5jZSA6IG1wbDo6Ym9vbF9jPCBmYWxzZSA+IHsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBz dHJ1Y3QgaXNfcmVmZXJlbmNlPFQmPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OwojIDkxICIv aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19yZWZlcmVu Y2UuaHBwIiAzCn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlw ZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfdW5kZWYuaHBwIiAxIDMKIyA5NCAiL2hvbWUvY29t cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfcmVmZXJlbmNlLmhwcCIg MiAzCiMgMTQgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz L2FkZF9yZWZlcmVuY2UuaHBwIiAyIDMKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j bHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIiAxIDMKIyAx OSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWls L3R5cGVfdHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMg MjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFp bC90eXBlX3RyYWl0X2RlZi5ocHAiIDIgMwojIDE4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j bHVkZS9ib29zdC90eXBlX3RyYWl0cy9hZGRfcmVmZXJlbmNlLmhwcCIgMiAzCgpuYW1lc3BhY2Ug Ym9vc3QgewoKCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBhZGRfcmVmZXJlbmNlIHsg dHlwZWRlZiBUJiB0eXBlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBhZGRfcmVm ZXJlbmNlPFQmPiB7IHR5cGVkZWYgVCYgdHlwZTsgfTsKIyA3MCAiL2hvbWUvY29tcGJpby9kOTUt YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3JlZmVyZW5jZS5ocHAiIDMKdGVtcGxh dGU8PiBzdHJ1Y3QgYWRkX3JlZmVyZW5jZTx2b2lkPiB7IHR5cGVkZWYgdm9pZCB0eXBlOyB9OwoK dGVtcGxhdGU8PiBzdHJ1Y3QgYWRkX3JlZmVyZW5jZTx2b2lkIGNvbnN0PiB7IHR5cGVkZWYgdm9p ZCBjb25zdCB0eXBlOyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBhZGRfcmVmZXJlbmNlPHZvaWQgdm9s YXRpbGU+IHsgdHlwZWRlZiB2b2lkIHZvbGF0aWxlIHR5cGU7IH07CnRlbXBsYXRlPD4gc3RydWN0 IGFkZF9yZWZlcmVuY2U8dm9pZCBjb25zdCB2b2xhdGlsZT4geyB0eXBlZGVmIHZvaWQgY29uc3Qg dm9sYXRpbGUgdHlwZTsgfTsKCgp9CgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X3VuZGVmLmhwcCIgMSAzCiMgODAg Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9yZWZl cmVuY2UuaHBwIiAyIDMKIyAxNiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv dHlwZV90cmFpdHMuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i b29zdC90eXBlX3RyYWl0cy9hZGRfdm9sYXRpbGUuaHBwIiAxIDMKIyAxNyAiL2hvbWUvY29tcGJp by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3ZvbGF0aWxlLmhwcCIgMwoj IDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFp bC90eXBlX3RyYWl0X2RlZi5ocHAiIDEgMwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j bHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIiAzCiMgMSAi L2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3Rl bXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu Y2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfZGVmLmhwcCIgMiAzCiMg MTggIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF92 b2xhdGlsZS5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKIyAzNCAiL2hvbWUvY29tcGJpby9k OTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3ZvbGF0aWxlLmhwcCIgMwp0ZW1w bGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBhZGRfdm9sYXRpbGUgeyB0eXBlZGVmIFQgdm9sYXRp bGUgdHlwZTsgfTsKCgoKCgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgYWRkX3ZvbGF0 aWxlPFQmPiB7IHR5cGVkZWYgVCYgdHlwZTsgfTsKCgp9CgojIDEgIi9ob21lL2NvbXBiaW8vZDk1 LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X3VuZGVmLmhw cCIgMSAzCiMgNDcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJh aXRzL2FkZF92b2xhdGlsZS5ocHAiIDIgMwojIDE3ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j bHVkZS9ib29zdC90eXBlX3RyYWl0cy5ocHAiIDIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJs aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2FsaWdubWVudF9vZi5ocHAiIDEgMwojIDE1ICIv aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9hbGlnbm1lbnRf b2YuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90 cmFpdHMvZGV0YWlsL3NpemVfdF90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJp by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3NpemVfdF90cmFpdF9k ZWYuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90 cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29t cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3NpemVfdF90cmFp dF9kZWYuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9t cGwvc2l6ZV90X2MuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv Ym9vc3QvbXBsL3NpemVfdF9jLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs dWRlL2Jvb3N0L21wbC9pbnRlZ3JhbF9jLmhwcCIgMSAzCiMgMjIgIi9ob21lL2NvbXBiaW8vZDk1 LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9pbnRlZ3JhbF9jLmhwcCIgMwpuYW1lc3BhY2UgYm9vc3Qg ewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBULCBUIE4gPgpzdHJ1Y3QgaW50 ZWdyYWxfYwp7CiAgICBzdGF0aWMgY29uc3QgVCB2YWx1ZSA9IE47CiAgICB0eXBlZGVmIGludGVn cmFsX2MgdHlwZTsKICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwojIDQ3ICIvaG9tZS9jb21wYmlv L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tcGwvaW50ZWdyYWxfYy5ocHAiIDMKICAgIHR5cGVkZWYg aW50ZWdyYWxfYzxULCAodmFsdWUgKyAxKT4gbmV4dDsKICAgIHR5cGVkZWYgaW50ZWdyYWxfYzxU LCAodmFsdWUgLSAxKT4gcHJpb3I7CgoKCgoKCiAgICBvcGVyYXRvciBUKCkgY29uc3QgeyByZXR1 cm4gdGhpcy0+dmFsdWU7IH0KfTsKCgoKCnRlbXBsYXRlPCBib29sIEMgPgpzdHJ1Y3QgaW50ZWdy YWxfYzxib29sLCBDPgp7CiAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IEM7CiAgICB0eXBl ZGVmIGludGVncmFsX2MgdHlwZTsKICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiB0 aGlzLT52YWx1ZTsgfQp9OwoKCn0KfQojIDIxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk ZS9ib29zdC9tcGwvc2l6ZV90X2MuaHBwIiAyIDMKCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNw YWNlIG1wbCB7Cgp0ZW1wbGF0ZTwgc3RkOjpzaXplX3QgTiA+IHN0cnVjdCBzaXplX3RfYwoKICAg IDogaW50ZWdyYWxfYzwgc3RkOjpzaXplX3QsTiA+CnsKICAgIHR5cGVkZWYgc2l6ZV90X2MgdHlw ZTsKfTsKIyA0NiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL3NpemVf dF9jLmhwcCIgMwp9Cn0KIyAyMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv dHlwZV90cmFpdHMvZGV0YWlsL3NpemVfdF90cmFpdF9kZWYuaHBwIiAyIDMKIyAxNiAiL2hvbWUv Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvYWxpZ25tZW50X29mLmhw cCIgMiAzCgoKCgoKCm5hbWVzcGFjZSBib29zdCB7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3Ry dWN0IGFsaWdubWVudF9vZjsKCgpuYW1lc3BhY2UgZGV0YWlsIHsKCnRlbXBsYXRlIDx0eXBlbmFt ZSBUPgpzdHJ1Y3QgYWxpZ25tZW50X29mX2hhY2sKewogICAgY2hhciBjOwogICAgVCB0OwogICAg YWxpZ25tZW50X29mX2hhY2soKTsKfTsKCgp0ZW1wbGF0ZSA8dW5zaWduZWQgQSwgdW5zaWduZWQg Uz4Kc3RydWN0IGFsaWdubWVudF9sb2dpYwp7CiAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3Qg dmFsdWUgPSBBIDwgUyA/IEEgOiBTOwp9OwoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4Kc3RydWN0 IGFsaWdubWVudF9vZl9pbXBsCnsKICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCB2YWx1ZSA9 ICg6OmJvb3N0OjpkZXRhaWw6OmFsaWdubWVudF9sb2dpYzwgc2l6ZW9mKGRldGFpbDo6YWxpZ25t ZW50X29mX2hhY2s8VD4pIC0gc2l6ZW9mKFQpLCBzaXplb2YoVCkgPjo6dmFsdWUpOwoKCgoKfTsK Cn0KCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGFsaWdubWVudF9vZiA6IG1wbDo6c2l6 ZV90X2M8IDo6Ym9vc3Q6OmRldGFpbDo6YWxpZ25tZW50X29mX2ltcGw8VD46OnZhbHVlID4geyB9 OwoKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBhbGlnbm1lbnRfb2Y8VCY+CiAgICA6 IGFsaWdubWVudF9vZjxUKj4Kewp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBhbGlnbm1lbnRfb2Y8 dm9pZD4gOiBtcGw6OnNpemVfdF9jPCAwID4geyB9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgYWxpZ25t ZW50X29mPHZvaWQgY29uc3Q+IDogbXBsOjpzaXplX3RfYzwgMCA+IHsgfTsKdGVtcGxhdGU8PiBz dHJ1Y3QgYWxpZ25tZW50X29mPHZvaWQgdm9sYXRpbGU+IDogbXBsOjpzaXplX3RfYzwgMCA+IHsg fTsKdGVtcGxhdGU8PiBzdHJ1Y3QgYWxpZ25tZW50X29mPHZvaWQgY29uc3Qgdm9sYXRpbGU+IDog bXBsOjpzaXplX3RfYzwgMCA+IHsgfTsKCgp9CgoKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1i bGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvc2l6ZV90X3RyYWl0X3VuZGVmLmhw cCIgMSAzCiMgODQgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJh aXRzL2FsaWdubWVudF9vZi5ocHAiIDIgMwojIDE4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j bHVkZS9ib29zdC90eXBlX3RyYWl0cy5ocHAiIDIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJs aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19ub3Rocm93X2Fzc2lnbi5ocHAiIDEgMwoj IDEzICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9oYXNf bm90aHJvd19hc3NpZ24uaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv Ym9vc3QvdHlwZV90cmFpdHMvaGFzX3RyaXZpYWxfYXNzaWduLmhwcCIgMSAzCiMgMTMgIi9ob21l L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2hhc190cml2aWFsX2Fz c2lnbi5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBl X3RyYWl0cy9pc19QT0QuaHBwIiAxIDMKIyAxMyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1 ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfUE9ELmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1 LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3ZvaWQuaHBwIiAxIDMKIyAxNiAiL2hv bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfdm9pZC5ocHAi IDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9k ZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxp L2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMwoj IDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFp bC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJs aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDIg MwojIDE3ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9p c192b2lkLmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9vc3QgewoKCnRlbXBsYXRlPCB0eXBlbmFtZSBU ID4gc3RydWN0IGlzX3ZvaWQgOiBtcGw6OmJvb2xfYzwgZmFsc2UgPiB7IH07CnRlbXBsYXRlPD4g c3RydWN0IGlzX3ZvaWQ8dm9pZD4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsKCgp0ZW1wbGF0 ZTw+IHN0cnVjdCBpc192b2lkPHZvaWQgY29uc3Q+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07 CnRlbXBsYXRlPD4gc3RydWN0IGlzX3ZvaWQ8dm9pZCB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwg dHJ1ZSA+IHsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfdm9pZDx2b2lkIGNvbnN0IHZvbGF0aWxl PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OwoKCn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUt YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfdW5kZWYuaHBw IiAxIDMKIyAzMyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp dHMvaXNfdm9pZC5ocHAiIDIgMwojIDE0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i b29zdC90eXBlX3RyYWl0cy9pc19QT0QuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1i bGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19zY2FsYXIuaHBwIiAxIDMKIyAxMyAiL2hv bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfc2NhbGFyLmhw cCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz L2lzX2FyaXRobWV0aWMuaHBwIiAxIDMKIyAxMyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1 ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfYXJpdGhtZXRpYy5ocHAiIDMKIyAxICIvaG9tZS9jb21w YmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19pbnRlZ3JhbC5ocHAiIDEg MwojIDE2ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9p c19pbnRlZ3JhbC5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z dC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUv Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJh aXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5 cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMjAgIi9ob21l L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3Ry YWl0X2RlZi5ocHAiIDIgMwojIDE3ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z dC90eXBlX3RyYWl0cy9pc19pbnRlZ3JhbC5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCgoK CnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGlzX2ludGVncmFsIDogbXBsOjpib29sX2M8 IGZhbHNlID4geyB9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQgY2hh cj4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdy YWw8dW5zaWduZWQgY2hhciBjb25zdD4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxh dGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQgY2hhciB2b2xhdGlsZT4gOiBtcGw6OmJv b2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQg Y2hhciBjb25zdCB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsKdGVtcGxhdGU8 PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQgc2hvcnQ+IDogbXBsOjpib29sX2M8IHRydWUg PiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPHVuc2lnbmVkIHNob3J0IGNvbnN0 PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3Jh bDx1bnNpZ25lZCBzaG9ydCB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVt cGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQgc2hvcnQgY29uc3Qgdm9sYXRpbGU+ IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07CnRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFs PHVuc2lnbmVkIGludD4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1 Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQgaW50IGNvbnN0PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4g eyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDx1bnNpZ25lZCBpbnQgdm9sYXRpbGU+ IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFs PHVuc2lnbmVkIGludCBjb25zdCB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsK dGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQgbG9uZz4gOiBtcGw6OmJvb2xf YzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQgbG9u ZyBjb25zdD4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNf aW50ZWdyYWw8dW5zaWduZWQgbG9uZyB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsg fTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQgbG9uZyBjb25zdCB2b2xh dGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsKCnRlbXBsYXRlPD4gc3RydWN0IGlzX2lu dGVncmFsPHNpZ25lZCBjaGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+ IHN0cnVjdCBpc19pbnRlZ3JhbDxzaWduZWQgY2hhciBjb25zdD4gOiBtcGw6OmJvb2xfYzwgdHJ1 ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8c2lnbmVkIGNoYXIgdm9sYXRp bGU+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVn cmFsPHNpZ25lZCBjaGFyIGNvbnN0IHZvbGF0aWxlPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9 Owp0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDxzaWduZWQgc2hvcnQ+IDogbXBsOjpib29s X2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPHNpZ25lZCBzaG9y dCBjb25zdD4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNf aW50ZWdyYWw8c2lnbmVkIHNob3J0IHZvbGF0aWxlPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9 OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDxzaWduZWQgc2hvcnQgY29uc3Qgdm9sYXRp bGU+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07CnRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVn cmFsPHNpZ25lZCBpbnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3Ry dWN0IGlzX2ludGVncmFsPHNpZ25lZCBpbnQgY29uc3Q+IDogbXBsOjpib29sX2M8IHRydWUgPiB7 IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPHNpZ25lZCBpbnQgdm9sYXRpbGU+IDog bXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPHNp Z25lZCBpbnQgY29uc3Qgdm9sYXRpbGU+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07CnRlbXBs YXRlPD4gc3RydWN0IGlzX2ludGVncmFsPHNpZ25lZCBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVl ID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDxzaWduZWQgbG9uZyBjb25zdD4g OiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8 c2lnbmVkIGxvbmcgdm9sYXRpbGU+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRl PD4gc3RydWN0IGlzX2ludGVncmFsPHNpZ25lZCBsb25nIGNvbnN0IHZvbGF0aWxlPiA6IG1wbDo6 Ym9vbF9jPCB0cnVlID4geyB9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8Ym9vbD4g OiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8 Ym9vbCBjb25zdD4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3Qg aXNfaW50ZWdyYWw8Ym9vbCB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVt cGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8Ym9vbCBjb25zdCB2b2xhdGlsZT4gOiBtcGw6OmJv b2xfYzwgdHJ1ZSA+IHsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8Y2hhcj4gOiBt cGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8Y2hh ciBjb25zdD4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNf aW50ZWdyYWw8Y2hhciB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxh dGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8Y2hhciBjb25zdCB2b2xhdGlsZT4gOiBtcGw6OmJvb2xf YzwgdHJ1ZSA+IHsgfTsKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDx3Y2hhcl90PiA6 IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDx3 Y2hhcl90IGNvbnN0PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVj dCBpc19pbnRlZ3JhbDx3Y2hhcl90IHZvbGF0aWxlPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9 OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDx3Y2hhcl90IGNvbnN0IHZvbGF0aWxlPiA6 IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3Jh bDx1bnNpZ25lZCBsb25nIGxvbmc+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRl PD4gc3RydWN0IGlzX2ludGVncmFsPHVuc2lnbmVkIGxvbmcgbG9uZyBjb25zdD4gOiBtcGw6OmJv b2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQg bG9uZyBsb25nIHZvbGF0aWxlPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+ IHN0cnVjdCBpc19pbnRlZ3JhbDx1bnNpZ25lZCBsb25nIGxvbmcgY29uc3Qgdm9sYXRpbGU+IDog bXBsOjpib29sX2M8IHRydWUgPiB7IH07CnRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPGxv bmcgbG9uZz4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNf aW50ZWdyYWw8bG9uZyBsb25nIGNvbnN0PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1w bGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDxsb25nIGxvbmcgdm9sYXRpbGU+IDogbXBsOjpib29s X2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPGxvbmcgbG9uZyBj b25zdCB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsKCgoKCgp9CgojIDEgIi9o b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29s X3RyYWl0X3VuZGVmLmhwcCIgMSAzCiMgNTMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2ludGVncmFsLmhwcCIgMiAzCiMgMTQgIi9ob21lL2NvbXBi aW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2FyaXRobWV0aWMuaHBwIiAy IDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9p c19mbG9hdC5ocHAiIDEgMwojIDE0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z dC90eXBlX3RyYWl0cy9pc19mbG9hdC5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv aW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxIDMK IyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0 YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs dWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAz CiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2Rl dGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDIgMwojIDE1ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv aW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19mbG9hdC5ocHAiIDIgMwoKbmFtZXNwYWNlIGJv b3N0IHsKCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBpc19mbG9hdCA6IG1wbDo6Ym9v bF9jPCBmYWxzZSA+IHsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZmxvYXQ8ZmxvYXQ+IDogbXBs Ojpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2Zsb2F0PGZsb2F0IGNv bnN0PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19mbG9h dDxmbG9hdCB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBz dHJ1Y3QgaXNfZmxvYXQ8ZmxvYXQgY29uc3Qgdm9sYXRpbGU+IDogbXBsOjpib29sX2M8IHRydWUg PiB7IH07CnRlbXBsYXRlPD4gc3RydWN0IGlzX2Zsb2F0PGRvdWJsZT4gOiBtcGw6OmJvb2xfYzwg dHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZmxvYXQ8ZG91YmxlIGNvbnN0PiA6IG1w bDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19mbG9hdDxkb3VibGUg dm9sYXRpbGU+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlz X2Zsb2F0PGRvdWJsZSBjb25zdCB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsK dGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZmxvYXQ8bG9uZyBkb3VibGU+IDogbXBsOjpib29sX2M8IHRy dWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2Zsb2F0PGxvbmcgZG91YmxlIGNvbnN0PiA6 IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19mbG9hdDxsb25n IGRvdWJsZSB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBz dHJ1Y3QgaXNfZmxvYXQ8bG9uZyBkb3VibGUgY29uc3Qgdm9sYXRpbGU+IDogbXBsOjpib29sX2M8 IHRydWUgPiB7IH07Cgp9CgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0 L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMSAzCiMgMjcgIi9ob21l L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2Zsb2F0LmhwcCIg MiAzCiMgMTUgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz L2lzX2FyaXRobWV0aWMuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk ZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvaWNlX29yLmhwcCIgMSAzCiMgMTUgIi9ob21lL2Nv bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9pY2Vfb3IuaHBw IiAzCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSB0eXBlX3RyYWl0cyB7Cgp0ZW1wbGF0ZSA8 Ym9vbCBiMSwgYm9vbCBiMiwgYm9vbCBiMyA9IGZhbHNlLCBib29sIGI0ID0gZmFsc2UsIGJvb2wg YjUgPSBmYWxzZSwgYm9vbCBiNiA9IGZhbHNlLCBib29sIGI3ID0gZmFsc2U+CnN0cnVjdCBpY2Vf b3I7Cgp0ZW1wbGF0ZSA8Ym9vbCBiMSwgYm9vbCBiMiwgYm9vbCBiMywgYm9vbCBiNCwgYm9vbCBi NSwgYm9vbCBiNiwgYm9vbCBiNz4Kc3RydWN0IGljZV9vcgp7CiAgICBzdGF0aWMgY29uc3QgYm9v bCB2YWx1ZSA9IHRydWU7Cn07Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgaWNlX29yPGZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlPgp7CiAgICBzdGF0aWMgY29uc3Qg Ym9vbCB2YWx1ZSA9IGZhbHNlOwp9OwoKfQp9CiMgMTYgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9p bmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2FyaXRobWV0aWMuaHBwIiAyIDMKCgoKIyAxICIv aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9v bF90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21l L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0 ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDIgMwojIDIwICIv aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19hcml0aG1l dGljLmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9vc3QgewoKbmFtZXNwYWNlIGRldGFpbCB7Cgp0ZW1w bGF0ZTwgdHlwZW5hbWUgVCA+CnN0cnVjdCBpc19hcml0aG1ldGljX2ltcGwKewogICAgc3RhdGlj IGNvbnN0IGJvb2wgdmFsdWUgPSAoOjpib29zdDo6dHlwZV90cmFpdHM6OmljZV9vcjwgOjpib29z dDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlLCA6OmJvb3N0Ojppc19mbG9hdDxUPjo6dmFsdWUgPjo6 dmFsdWUpOwoKCgoKfTsKCn0KCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBpc19hcml0 aG1ldGljIDogbXBsOjpib29sX2M8IDo6Ym9vc3Q6OmRldGFpbDo6aXNfYXJpdGhtZXRpY19pbXBs PFQ+Ojp2YWx1ZSA+IHsgfTsKCn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfdW5kZWYuaHBwIiAxIDMKIyA0MyAi L2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfYXJpdGht ZXRpYy5ocHAiIDIgMwojIDE0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90 eXBlX3RyYWl0cy9pc19zY2FsYXIuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv aW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19lbnVtLmhwcCIgMSAzCiMgMTcgIi9ob21lL2Nv bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2VudW0uaHBwIiAzCiMg MSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29u dmVydGlibGUuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v c3QvdHlwZV90cmFpdHMvaXNfY29udmVydGlibGUuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9k OTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3llc19ub190eXBlLmhwcCIg MSAzCiMgMTUgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz L2RldGFpbC95ZXNfbm9fdHlwZS5ocHAiIDMKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIHR5 cGVfdHJhaXRzIHsKCnR5cGVkZWYgY2hhciB5ZXNfdHlwZTsKdHlwZWRlZiBkb3VibGUgbm9fdHlw ZTsKCn0KfQojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3Ry YWl0cy9pc19jb252ZXJ0aWJsZS5ocHAiIDIgMwoKCgoKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5 NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBw IiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp dHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJs aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhw cCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJh aXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDIgMwojIDI4ICIvaG9tZS9jb21wYmlvL2Q5 NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19jb252ZXJ0aWJsZS5ocHAiIDIgMwoK bmFtZXNwYWNlIGJvb3N0IHsKIyA0MSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v c3QvdHlwZV90cmFpdHMvaXNfY29udmVydGlibGUuaHBwIiAzCm5hbWVzcGFjZSBkZXRhaWwgewoj IDEwNyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNf Y29udmVydGlibGUuaHBwIiAzCnN0cnVjdCBhbnlfY29udmVyc2lvbgp7CiAgICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4gYW55X2NvbnZlcnNpb24oY29uc3QgVCYpOwogICAgdGVtcGxhdGUgPHR5cGVu YW1lIFQ+IGFueV9jb252ZXJzaW9uKFQmKTsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1 Y3QgY2hlY2tlcgp7CiAgICBzdGF0aWMgYm9vc3Q6OnR5cGVfdHJhaXRzOjpub190eXBlIF9tX2No ZWNrKGFueV9jb252ZXJzaW9uIC4uLik7CiAgICBzdGF0aWMgYm9vc3Q6OnR5cGVfdHJhaXRzOjp5 ZXNfdHlwZSBfbV9jaGVjayhULCBpbnQpOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIEZyb20sIHR5 cGVuYW1lIFRvPgpzdHJ1Y3QgaXNfY29udmVydGlibGVfaW1wbAp7CiAgICBzdGF0aWMgRnJvbSBf bV9mcm9tOwogICAgc3RhdGljIGJvb2wgY29uc3QgdmFsdWUgPSBzaXplb2YoIGRldGFpbDo6Y2hl Y2tlcjxUbz46Ol9tX2NoZWNrKF9tX2Zyb20sIDApICkKICAgICAgICA9PSBzaXplb2YoOjpib29z dDo6dHlwZV90cmFpdHM6Onllc190eXBlKTsKfTsKIyAxNDMgIi9ob21lL2NvbXBiaW8vZDk1LWJs aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NvbnZlcnRpYmxlLmhwcCIgMwp9Cgp0ZW1w bGF0ZTwgdHlwZW5hbWUgRnJvbSwgdHlwZW5hbWUgVG8gPiBzdHJ1Y3QgaXNfY29udmVydGlibGUg OiBtcGw6OmJvb2xfYzwgKDo6Ym9vc3Q6OmRldGFpbDo6aXNfY29udmVydGlibGVfaW1wbDxGcm9t LFRvPjo6dmFsdWUpID4geyB9OwoKCgoKCgoKdGVtcGxhdGU8IHR5cGVuYW1lIFRvID4gc3RydWN0 IGlzX2NvbnZlcnRpYmxlPHZvaWQsVG8+IDogbXBsOjpib29sX2M8IGZhbHNlID4geyB9Owp0ZW1w bGF0ZTwgdHlwZW5hbWUgRnJvbSA+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxGcm9tLHZvaWQ+IDog bXBsOjpib29sX2M8IGZhbHNlID4geyB9OwoKdGVtcGxhdGU8IHR5cGVuYW1lIFRvID4gc3RydWN0 IGlzX2NvbnZlcnRpYmxlPHZvaWQgY29uc3QsVG8+IDogbXBsOjpib29sX2M8IGZhbHNlID4geyB9 Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVG8gPiBzdHJ1Y3QgaXNfY29udmVydGlibGU8dm9pZCB2b2xh dGlsZSxUbz4gOiBtcGw6OmJvb2xfYzwgZmFsc2UgPiB7IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBU byA+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTx2b2lkIGNvbnN0IHZvbGF0aWxlLFRvPiA6IG1wbDo6 Ym9vbF9jPCBmYWxzZSA+IHsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIEZyb20gPiBzdHJ1Y3QgaXNf Y29udmVydGlibGU8RnJvbSx2b2lkIGNvbnN0PiA6IG1wbDo6Ym9vbF9jPCBmYWxzZSA+IHsgfTsK dGVtcGxhdGU8IHR5cGVuYW1lIEZyb20gPiBzdHJ1Y3QgaXNfY29udmVydGlibGU8RnJvbSx2b2lk IHZvbGF0aWxlPiA6IG1wbDo6Ym9vbF9jPCBmYWxzZSA+IHsgfTsKdGVtcGxhdGU8IHR5cGVuYW1l IEZyb20gPiBzdHJ1Y3QgaXNfY29udmVydGlibGU8RnJvbSx2b2lkIGNvbnN0IHZvbGF0aWxlPiA6 IG1wbDo6Ym9vbF9jPCBmYWxzZSA+IHsgfTsKIyAxODAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9p bmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NvbnZlcnRpYmxlLmhwcCIgMwogICAgdGVtcGxh dGU8PiBzdHJ1Y3QgaXNfY29udmVydGlibGU8dm9pZCx2b2lkPiA6IG1wbDo6Ym9vbF9jPCB0cnVl ID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTx2b2lkLHZvaWQgY29uc3Q+ IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRp YmxlPHZvaWQsdm9pZCB2b2xhdGlsZT4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxh dGU8PiBzdHJ1Y3QgaXNfY29udmVydGlibGU8dm9pZCx2b2lkIGNvbnN0IHZvbGF0aWxlPiA6IG1w bDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTx2 b2lkIGNvbnN0LHZvaWQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3Ry dWN0IGlzX2NvbnZlcnRpYmxlPHZvaWQgY29uc3Qsdm9pZCBjb25zdD4gOiBtcGw6OmJvb2xfYzwg dHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfY29udmVydGlibGU8dm9pZCBjb25zdCx2 b2lkIHZvbGF0aWxlPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVj dCBpc19jb252ZXJ0aWJsZTx2b2lkIGNvbnN0LHZvaWQgY29uc3Qgdm9sYXRpbGU+IDogbXBsOjpi b29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPHZvaWQg dm9sYXRpbGUsdm9pZD4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1 Y3QgaXNfY29udmVydGlibGU8dm9pZCB2b2xhdGlsZSx2b2lkIGNvbnN0PiA6IG1wbDo6Ym9vbF9j PCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTx2b2lkIHZvbGF0 aWxlLHZvaWQgdm9sYXRpbGU+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4g c3RydWN0IGlzX2NvbnZlcnRpYmxlPHZvaWQgdm9sYXRpbGUsdm9pZCBjb25zdCB2b2xhdGlsZT4g OiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfY29udmVydGli bGU8dm9pZCBjb25zdCB2b2xhdGlsZSx2b2lkPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0 ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTx2b2lkIGNvbnN0IHZvbGF0aWxlLHZvaWQg Y29uc3Q+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2Nv bnZlcnRpYmxlPHZvaWQgY29uc3Qgdm9sYXRpbGUsdm9pZCB2b2xhdGlsZT4gOiBtcGw6OmJvb2xf YzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfY29udmVydGlibGU8dm9pZCBjb25z dCB2b2xhdGlsZSx2b2lkIGNvbnN0IHZvbGF0aWxlPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9 OwojIDIyMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMv aXNfY29udmVydGlibGUuaHBwIiAzCnRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGZs b2F0IGNvbnN0LGNoYXI+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3Ry dWN0IGlzX2NvbnZlcnRpYmxlPGZsb2F0IGNvbnN0LHNpZ25lZCBjaGFyPiA6IG1wbDo6Ym9vbF9j PCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCBjb25z dCx1bnNpZ25lZCBjaGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0 cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCBjb25zdCxzaWduZWQgc2hvcnQ+IDogbXBsOjpib29s X2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGZsb2F0IGNv bnN0LHVuc2lnbmVkIHNob3J0PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+ IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCBjb25zdCxzaWduZWQgaW50PiA6IG1wbDo6Ym9v bF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCBj b25zdCx1bnNpZ25lZCBpbnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4g c3RydWN0IGlzX2NvbnZlcnRpYmxlPGZsb2F0IGNvbnN0LHNpZ25lZCBsb25nPiA6IG1wbDo6Ym9v bF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCBj b25zdCx1bnNpZ25lZCBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+ IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCBjb25zdCxzaWduZWQgbG9uZyBsb25nPiA6IG1w bDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxm bG9hdCBjb25zdCx1bnNpZ25lZCBsb25nIGxvbmc+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07 IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGZsb2F0IHZvbGF0aWxlLGNoYXI+IDog bXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxl PGZsb2F0IHZvbGF0aWxlLHNpZ25lZCBjaGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0 ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCB2b2xhdGlsZSx1bnNpZ25lZCBj aGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252 ZXJ0aWJsZTxmbG9hdCB2b2xhdGlsZSxzaWduZWQgc2hvcnQ+IDogbXBsOjpib29sX2M8IHRydWUg PiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGZsb2F0IHZvbGF0aWxlLHVu c2lnbmVkIHNob3J0PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVj dCBpc19jb252ZXJ0aWJsZTxmbG9hdCB2b2xhdGlsZSxzaWduZWQgaW50PiA6IG1wbDo6Ym9vbF9j PCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCB2b2xh dGlsZSx1bnNpZ25lZCBpbnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4g c3RydWN0IGlzX2NvbnZlcnRpYmxlPGZsb2F0IHZvbGF0aWxlLHNpZ25lZCBsb25nPiA6IG1wbDo6 Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9h dCB2b2xhdGlsZSx1bnNpZ25lZCBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1w bGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCB2b2xhdGlsZSxzaWduZWQgbG9uZyBs b25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252 ZXJ0aWJsZTxmbG9hdCB2b2xhdGlsZSx1bnNpZ25lZCBsb25nIGxvbmc+IDogbXBsOjpib29sX2M8 IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGZsb2F0IGNvbnN0 IHZvbGF0aWxlLGNoYXI+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3Ry dWN0IGlzX2NvbnZlcnRpYmxlPGZsb2F0IGNvbnN0IHZvbGF0aWxlLHNpZ25lZCBjaGFyPiA6IG1w bDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxm bG9hdCBjb25zdCB2b2xhdGlsZSx1bnNpZ25lZCBjaGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4g eyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCBjb25zdCB2b2xhdGls ZSxzaWduZWQgc2hvcnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3Ry dWN0IGlzX2NvbnZlcnRpYmxlPGZsb2F0IGNvbnN0IHZvbGF0aWxlLHVuc2lnbmVkIHNob3J0PiA6 IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJs ZTxmbG9hdCBjb25zdCB2b2xhdGlsZSxzaWduZWQgaW50PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4g eyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCBjb25zdCB2b2xhdGls ZSx1bnNpZ25lZCBpbnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3Ry dWN0IGlzX2NvbnZlcnRpYmxlPGZsb2F0IGNvbnN0IHZvbGF0aWxlLHNpZ25lZCBsb25nPiA6IG1w bDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxm bG9hdCBjb25zdCB2b2xhdGlsZSx1bnNpZ25lZCBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4g eyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCBjb25zdCB2b2xhdGls ZSxzaWduZWQgbG9uZyBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+ IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxmbG9hdCBjb25zdCB2b2xhdGlsZSx1bnNpZ25lZCBsb25n IGxvbmc+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07CnRlbXBsYXRlPD4gc3RydWN0IGlzX2Nv bnZlcnRpYmxlPGRvdWJsZSBjb25zdCxjaGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0 ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxkb3VibGUgY29uc3Qsc2lnbmVkIGNoYXI+ IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRp YmxlPGRvdWJsZSBjb25zdCx1bnNpZ25lZCBjaGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9 OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxkb3VibGUgY29uc3Qsc2lnbmVkIHNo b3J0PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252 ZXJ0aWJsZTxkb3VibGUgY29uc3QsdW5zaWduZWQgc2hvcnQ+IDogbXBsOjpib29sX2M8IHRydWUg PiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGRvdWJsZSBjb25zdCxzaWdu ZWQgaW50PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19j b252ZXJ0aWJsZTxkb3VibGUgY29uc3QsdW5zaWduZWQgaW50PiA6IG1wbDo6Ym9vbF9jPCB0cnVl ID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxkb3VibGUgY29uc3Qsc2ln bmVkIGxvbmc+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlz X2NvbnZlcnRpYmxlPGRvdWJsZSBjb25zdCx1bnNpZ25lZCBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0 cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxkb3VibGUgY29uc3Qs c2lnbmVkIGxvbmcgbG9uZz4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBz dHJ1Y3QgaXNfY29udmVydGlibGU8ZG91YmxlIGNvbnN0LHVuc2lnbmVkIGxvbmcgbG9uZz4gOiBt cGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfY29udmVydGlibGU8 ZG91YmxlIHZvbGF0aWxlLGNoYXI+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRl PD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGRvdWJsZSB2b2xhdGlsZSxzaWduZWQgY2hhcj4gOiBt cGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfY29udmVydGlibGU8 ZG91YmxlIHZvbGF0aWxlLHVuc2lnbmVkIGNoYXI+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07 IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGRvdWJsZSB2b2xhdGlsZSxzaWduZWQg c2hvcnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2Nv bnZlcnRpYmxlPGRvdWJsZSB2b2xhdGlsZSx1bnNpZ25lZCBzaG9ydD4gOiBtcGw6OmJvb2xfYzwg dHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfY29udmVydGlibGU8ZG91YmxlIHZvbGF0 aWxlLHNpZ25lZCBpbnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3Ry dWN0IGlzX2NvbnZlcnRpYmxlPGRvdWJsZSB2b2xhdGlsZSx1bnNpZ25lZCBpbnQ+IDogbXBsOjpi b29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGRvdWJs ZSB2b2xhdGlsZSxzaWduZWQgbG9uZz4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxh dGU8PiBzdHJ1Y3QgaXNfY29udmVydGlibGU8ZG91YmxlIHZvbGF0aWxlLHVuc2lnbmVkIGxvbmc+ IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRp YmxlPGRvdWJsZSB2b2xhdGlsZSxzaWduZWQgbG9uZyBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVl ID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxkb3VibGUgdm9sYXRpbGUs dW5zaWduZWQgbG9uZyBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+ IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxkb3VibGUgY29uc3Qgdm9sYXRpbGUsY2hhcj4gOiBtcGw6 OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfY29udmVydGlibGU8ZG91 YmxlIGNvbnN0IHZvbGF0aWxlLHNpZ25lZCBjaGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9 OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxkb3VibGUgY29uc3Qgdm9sYXRpbGUs dW5zaWduZWQgY2hhcj4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1 Y3QgaXNfY29udmVydGlibGU8ZG91YmxlIGNvbnN0IHZvbGF0aWxlLHNpZ25lZCBzaG9ydD4gOiBt cGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfY29udmVydGlibGU8 ZG91YmxlIGNvbnN0IHZvbGF0aWxlLHVuc2lnbmVkIHNob3J0PiA6IG1wbDo6Ym9vbF9jPCB0cnVl ID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxkb3VibGUgY29uc3Qgdm9s YXRpbGUsc2lnbmVkIGludD4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBz dHJ1Y3QgaXNfY29udmVydGlibGU8ZG91YmxlIGNvbnN0IHZvbGF0aWxlLHVuc2lnbmVkIGludD4g OiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfY29udmVydGli bGU8ZG91YmxlIGNvbnN0IHZvbGF0aWxlLHNpZ25lZCBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVl ID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxkb3VibGUgY29uc3Qgdm9s YXRpbGUsdW5zaWduZWQgbG9uZz4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8 PiBzdHJ1Y3QgaXNfY29udmVydGlibGU8ZG91YmxlIGNvbnN0IHZvbGF0aWxlLHNpZ25lZCBsb25n IGxvbmc+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2Nv bnZlcnRpYmxlPGRvdWJsZSBjb25zdCB2b2xhdGlsZSx1bnNpZ25lZCBsb25nIGxvbmc+IDogbXBs Ojpib29sX2M8IHRydWUgPiB7IH07CnRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGxv bmcgZG91YmxlIGNvbnN0LGNoYXI+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRl PD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGxvbmcgZG91YmxlIGNvbnN0LHNpZ25lZCBjaGFyPiA6 IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJs ZTxsb25nIGRvdWJsZSBjb25zdCx1bnNpZ25lZCBjaGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4g eyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSBjb25zdCxz aWduZWQgc2hvcnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0 IGlzX2NvbnZlcnRpYmxlPGxvbmcgZG91YmxlIGNvbnN0LHVuc2lnbmVkIHNob3J0PiA6IG1wbDo6 Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25n IGRvdWJsZSBjb25zdCxzaWduZWQgaW50PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1w bGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSBjb25zdCx1bnNpZ25lZCBp bnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZl cnRpYmxlPGxvbmcgZG91YmxlIGNvbnN0LHNpZ25lZCBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVl ID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSBjb25z dCx1bnNpZ25lZCBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0 cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSBjb25zdCxzaWduZWQgbG9uZyBsb25nPiA6 IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJs ZTxsb25nIGRvdWJsZSBjb25zdCx1bnNpZ25lZCBsb25nIGxvbmc+IDogbXBsOjpib29sX2M8IHRy dWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGxvbmcgZG91YmxlIHZv bGF0aWxlLGNoYXI+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0 IGlzX2NvbnZlcnRpYmxlPGxvbmcgZG91YmxlIHZvbGF0aWxlLHNpZ25lZCBjaGFyPiA6IG1wbDo6 Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25n IGRvdWJsZSB2b2xhdGlsZSx1bnNpZ25lZCBjaGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9 OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSB2b2xhdGlsZSxz aWduZWQgc2hvcnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0 IGlzX2NvbnZlcnRpYmxlPGxvbmcgZG91YmxlIHZvbGF0aWxlLHVuc2lnbmVkIHNob3J0PiA6IG1w bDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxs b25nIGRvdWJsZSB2b2xhdGlsZSxzaWduZWQgaW50PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9 OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSB2b2xhdGlsZSx1 bnNpZ25lZCBpbnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0 IGlzX2NvbnZlcnRpYmxlPGxvbmcgZG91YmxlIHZvbGF0aWxlLHNpZ25lZCBsb25nPiA6IG1wbDo6 Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25n IGRvdWJsZSB2b2xhdGlsZSx1bnNpZ25lZCBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9 OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSB2b2xhdGlsZSxz aWduZWQgbG9uZyBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0 cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSB2b2xhdGlsZSx1bnNpZ25lZCBsb25nIGxv bmc+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZl cnRpYmxlPGxvbmcgZG91YmxlIGNvbnN0IHZvbGF0aWxlLGNoYXI+IDogbXBsOjpib29sX2M8IHRy dWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlPGxvbmcgZG91YmxlIGNv bnN0IHZvbGF0aWxlLHNpZ25lZCBjaGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1w bGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSBjb25zdCB2b2xhdGlsZSx1 bnNpZ25lZCBjaGFyPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVj dCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSBjb25zdCB2b2xhdGlsZSxzaWduZWQgc2hvcnQ+ IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRp YmxlPGxvbmcgZG91YmxlIGNvbnN0IHZvbGF0aWxlLHVuc2lnbmVkIHNob3J0PiA6IG1wbDo6Ym9v bF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRv dWJsZSBjb25zdCB2b2xhdGlsZSxzaWduZWQgaW50PiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9 OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSBjb25zdCB2b2xh dGlsZSx1bnNpZ25lZCBpbnQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07IHRlbXBsYXRlPD4g c3RydWN0IGlzX2NvbnZlcnRpYmxlPGxvbmcgZG91YmxlIGNvbnN0IHZvbGF0aWxlLHNpZ25lZCBs b25nPiA6IG1wbDo6Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252 ZXJ0aWJsZTxsb25nIGRvdWJsZSBjb25zdCB2b2xhdGlsZSx1bnNpZ25lZCBsb25nPiA6IG1wbDo6 Ym9vbF9jPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25n IGRvdWJsZSBjb25zdCB2b2xhdGlsZSxzaWduZWQgbG9uZyBsb25nPiA6IG1wbDo6Ym9vbF9jPCB0 cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZTxsb25nIGRvdWJsZSBj b25zdCB2b2xhdGlsZSx1bnNpZ25lZCBsb25nIGxvbmc+IDogbXBsOjpib29sX2M8IHRydWUgPiB7 IH07CiMgMjMxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0 cy9pc19jb252ZXJ0aWJsZS5ocHAiIDMKfQoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j bHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEgMwoj IDIzNCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNf Y29udmVydGlibGUuaHBwIiAyIDMKIyAxOCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv Ym9vc3QvdHlwZV90cmFpdHMvaXNfZW51bS5ocHAiIDIgMwoKCgoKCgoKIyAxICIvaG9tZS9jb21w YmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9k ZWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlw ZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9z cGVjLmhwcCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5 cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDIgMwojIDI2ICIvaG9tZS9jb21w YmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19lbnVtLmhwcCIgMiAzCgpu YW1lc3BhY2UgYm9vc3QgewoKCgpuYW1lc3BhY2UgZGV0YWlsIHsKCnN0cnVjdCBpbnRfY29udmVy dGlibGUKewogICAgaW50X2NvbnZlcnRpYmxlKGludCk7Cn07CgoKCnRlbXBsYXRlIDxib29sIGlz X3R5cGVuYW1lX2FyaXRobWV0aWNfb3JfcmVmZXJlbmNlID0gdHJ1ZT4Kc3RydWN0IGlzX2VudW1f aGVscGVyCnsKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgdHlwZQogICAgewogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gZmFsc2U7CiAgICB9Owp9OwoKdGVtcGxhdGUg PD4Kc3RydWN0IGlzX2VudW1faGVscGVyPGZhbHNlPgp7CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4gc3RydWN0IHR5cGUKICAgICAgICA6IDo6Ym9vc3Q6OmlzX2NvbnZlcnRpYmxlPFQsOjpib29z dDo6ZGV0YWlsOjppbnRfY29udmVydGlibGU+CiAgICB7CiAgICB9Owp9OwoKdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+IHN0cnVjdCBpc19lbnVtX2ltcGwKewogICB0eXBlZGVmIDo6Ym9vc3Q6OmFkZF9y ZWZlcmVuY2U8VD4gYXJfdDsKICAgdHlwZWRlZiB0eXBlbmFtZSBhcl90Ojp0eXBlIHJfdHlwZTsK IyA3NCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNf ZW51bS5ocHAiIDMKICAgc3RhdGljIGNvbnN0IGJvb2wgc2VsZWN0b3IgPSAoOjpib29zdDo6dHlw ZV90cmFpdHM6OmljZV9vcjwgOjpib29zdDo6aXNfYXJpdGhtZXRpYzxUPjo6dmFsdWUgLCA6OmJv b3N0Ojppc19yZWZlcmVuY2U8VD46OnZhbHVlID46OnZhbHVlKTsKIyA4OCAiL2hvbWUvY29tcGJp by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfZW51bS5ocHAiIDMKICAgIHR5 cGVkZWYgOjpib29zdDo6ZGV0YWlsOjppc19lbnVtX2hlbHBlcjxzZWxlY3Rvcj4gc2VfdDsKCiAg ICB0eXBlZGVmIHR5cGVuYW1lIHNlX3Q6OnRlbXBsYXRlIHR5cGU8cl90eXBlPiBoZWxwZXI7CiAg ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGhlbHBlcjo6dmFsdWU7Cn07Cgp9Cgp0ZW1wbGF0 ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBpc19lbnVtIDogbXBsOjpib29sX2M8IDo6Ym9vc3Q6OmRl dGFpbDo6aXNfZW51bV9pbXBsPFQ+Ojp2YWx1ZSA+IHsgfTsKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBp c19lbnVtPGZsb2F0PiA6IG1wbDo6Ym9vbF9jPCBmYWxzZSA+IHsgfTsKdGVtcGxhdGU8PiBzdHJ1 Y3QgaXNfZW51bTxkb3VibGU+IDogbXBsOjpib29sX2M8IGZhbHNlID4geyB9Owp0ZW1wbGF0ZTw+ IHN0cnVjdCBpc19lbnVtPGxvbmcgZG91YmxlPiA6IG1wbDo6Ym9vbF9jPCBmYWxzZSA+IHsgfTsK IyAxMTEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lz X2VudW0uaHBwIiAzCn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv dHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfdW5kZWYuaHBwIiAxIDMKIyAxMTQgIi9ob21l L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2VudW0uaHBwIiAy IDMKIyAxNSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMv aXNfc2NhbGFyLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v c3QvdHlwZV90cmFpdHMvaXNfcG9pbnRlci5ocHAiIDEgMwojIDE0ICIvaG9tZS9jb21wYmlvL2Q5 NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19wb2ludGVyLmhwcCIgMwojIDEgIi9o b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9w b2ludGVyLmhwcCIgMSAzCiMgMTcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0 L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9wb2ludGVyLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9mdW5jdGlvbl9wb2lu dGVyLmhwcCIgMSAzCiMgMTcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5 cGVfdHJhaXRzL2lzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyLmhwcCIgMwojIDEgIi9ob21lL2Nv bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9pc19tZW1fZnVu X3BvaW50ZXJfaW1wbC5ocHAiIDEgMwojIDI0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk ZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGwuaHBwIiAz Cm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSB0eXBlX3RyYWl0cyB7Cgp0ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsCnsKICAgIHN0YXRpYyBjb25z dCBib29sIHZhbHVlID0gZmFsc2U7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUPgpz dHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoKT4geyBzdGF0aWMgY29uc3Qg Ym9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUPgpzdHJ1Y3Qg aXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoKSBjb25zdD4geyBzdGF0aWMgY29uc3Qg Ym9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQ+CnN0cnVjdCBp c19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSgpIHZvbGF0aWxlPiB7IHN0YXRpYyBjb25z dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVD4Kc3RydWN0 IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCkgY29uc3Qgdm9sYXRpbGU+IHsgc3Rh dGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNz IFQsY2xhc3MgVDA+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCk+ IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIs Y2xhc3MgVCxjbGFzcyBUMD4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop KFQwKSBjb25zdD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRl IDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDA+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w bDxSIChUOjoqKShUMCkgdm9sYXRpbGU+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVl OyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwPgpzdHJ1Y3QgaXNfbWVtX2Z1 bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDApIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBjb25z dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNz IFQwLGNsYXNzIFQxPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAs VDEpPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCnRlbXBsYXRlIDxjbGFz cyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDE+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJf aW1wbDxSIChUOjoqKShUMCxUMSkgY29uc3Q+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0 cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxPgpzdHJ1 Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEpIHZvbGF0aWxlPiB7IHN0 YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3Mg VCxjbGFzcyBUMCxjbGFzcyBUMT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6 OiopKFQwLFQxKSBjb25zdCB2b2xhdGlsZT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRy dWU7IH07CgoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFz cyBUMj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyKT4g eyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixj bGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2lu dGVyX2ltcGw8UiAoVDo6KikoVDAsVDEsVDIpIGNvbnN0PiB7IHN0YXRpYyBjb25zdCBib29sIHZh bHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBU MSxjbGFzcyBUMj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQx LFQyKSB2b2xhdGlsZT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBs YXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDI+CnN0cnVjdCBp c19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMikgY29uc3Qgdm9sYXRpbGU+ IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKCnRlbXBsYXRlIDxjbGFzcyBS LGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDM+CnN0cnVjdCBpc19t ZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyk+IHsgc3RhdGljIGNvbnN0 IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBU MCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMz4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9p bXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzKSBjb25zdD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1 ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEs Y2xhc3MgVDIsY2xhc3MgVDM+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoq KShUMCxUMSxUMixUMykgdm9sYXRpbGU+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVl OyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQy LGNsYXNzIFQzPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEs VDIsVDMpIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQy LGNsYXNzIFQzLGNsYXNzIFQ0PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6 KikoVDAsVDEsVDIsVDMsVDQpPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsK CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xh c3MgVDMsY2xhc3MgVDQ+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShU MCxUMSxUMixUMyxUNCkgY29uc3Q+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9 Owp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNs YXNzIFQzLGNsYXNzIFQ0PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6Kiko VDAsVDEsVDIsVDMsVDQpIHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1 ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBU MixjbGFzcyBUMyxjbGFzcyBUND4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6 OiopKFQwLFQxLFQyLFQzLFQ0KSBjb25zdCB2b2xhdGlsZT4geyBzdGF0aWMgY29uc3QgYm9vbCB2 YWx1ZSA9IHRydWU7IH07CgoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFz cyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNT4Kc3RydWN0IGlzX21lbV9m dW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1KT4geyBzdGF0aWMgY29u c3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNz IFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1PgpzdHJ1Y3Qg aXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEsVDIsVDMsVDQsVDUpIGNvbnN0 PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIs Y2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFz cyBUNT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQz LFQ0LFQ1KSB2b2xhdGlsZT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRl bXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3Mg VDMsY2xhc3MgVDQsY2xhc3MgVDU+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChU OjoqKShUMCxUMSxUMixUMyxUNCxUNSkgY29uc3Qgdm9sYXRpbGU+IHsgc3RhdGljIGNvbnN0IGJv b2wgdmFsdWUgPSB0cnVlOyB9OwoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAs Y2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDY+CnN0 cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxU Nik+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNz IFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxj bGFzcyBUNSxjbGFzcyBUNj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop KFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2KSBjb25zdD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9 IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xh c3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDY+CnN0cnVjdCBpc19tZW1f ZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNikgdm9sYXRpbGU+ IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUixj bGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNz IFQ1LGNsYXNzIFQ2PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAs VDEsVDIsVDMsVDQsVDUsVDYpIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZh bHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNz IFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3 PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEsVDIsVDMsVDQs VDUsVDYsVDcpPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCnRlbXBsYXRl IDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xh c3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDc+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50 ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNykgY29uc3Q+IHsgc3RhdGlj IGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNs YXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNz IFQ2LGNsYXNzIFQ3PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAs VDEsVDIsVDMsVDQsVDUsVDYsVDcpIHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVl ID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxj bGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNz4Kc3Ry dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2 LFQ3KSBjb25zdCB2b2xhdGlsZT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07 CgoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixj bGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOD4Kc3Ry dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2 LFQ3LFQ4KT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNz IFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4PgpzdHJ1Y3QgaXNfbWVtX2Z1 bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgpIGNvbnN0 PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIs Y2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFz cyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOD4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRl cl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4KSB2b2xhdGlsZT4geyBz dGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNz IFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUs Y2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDg+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w bDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCkgY29uc3Qgdm9sYXRpbGU+IHsg c3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKCnRlbXBsYXRlIDxjbGFzcyBSLGNs YXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3Mg VDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDk+CnN0cnVjdCBpc19tZW1fZnVu X3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSk+IHsg c3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xh c3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBU NSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOT4Kc3RydWN0IGlzX21lbV9mdW5f cG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5KSBjb25z dD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBS LGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xh c3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDk+CnN0cnVjdCBpc19tZW1f ZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSkg dm9sYXRpbGU+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8 Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNz IFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5PgpzdHJ1Y3Qg aXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcs VDgsVDkpIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQy LGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNs YXNzIFQ5LGNsYXNzIFQxMD4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop KFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCk+IHsgc3RhdGljIGNvbnN0IGJvb2wg dmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFz cyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBU NyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTA+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJf aW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTApIGNvbnN0PiB7 IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xh c3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBU NSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTA+CnN0cnVjdCBp c19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxU OCxUOSxUMTApIHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsK dGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFz cyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBU OSxjbGFzcyBUMTA+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxU MSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTApIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBj b25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNs YXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNz IFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTE+CnN0cnVj dCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixU NyxUOCxUOSxUMTAsVDExKT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNz IFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5 LGNsYXNzIFQxMCxjbGFzcyBUMTE+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChU OjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExKSBjb25zdD4geyBzdGF0 aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQs Y2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xh c3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMT4Kc3Ry dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2 LFQ3LFQ4LFQ5LFQxMCxUMTEpIHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0g dHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFz cyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBU OCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVy X2ltcGw8UiAoVDo6KikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSkgY29u c3Qgdm9sYXRpbGU+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKCnRlbXBs YXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMs Y2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xh c3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTI+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w bDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMik+IHsg c3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xh c3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBU NSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDEx LGNsYXNzIFQxMj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQx LFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyKSBjb25zdD4geyBzdGF0aWMgY29u c3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3Mg VDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYs Y2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTI+ CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxU NSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMikgdm9sYXRpbGU+IHsgc3RhdGljIGNvbnN0IGJvb2wg dmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNz IFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3 LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEsY2xhc3MgVDEyPgpzdHJ1Y3Qg aXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcs VDgsVDksVDEwLFQxMSxUMTIpIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZh bHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNz IFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3 LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNzIFQx Mz4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0 LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFs dWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBU MSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxj bGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTM+ CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxU NSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMpIGNvbnN0PiB7IHN0YXRpYyBjb25zdCBib29s IHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFz cyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBU NyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBU MTM+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxU NCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMpIHZvbGF0aWxlPiB7IHN0YXRpYyBjb25z dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBU MCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixj bGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixj bGFzcyBUMTM+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxU MixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMpIGNvbnN0IHZvbGF0aWxlPiB7 IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixj bGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNz IFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBU MTEsY2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQ+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50 ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQx MixUMTMsVDE0KT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNs YXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNz IFQxMCxjbGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQ+CnN0cnVjdCBpc19t ZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxU OSxUMTAsVDExLFQxMixUMTMsVDE0KSBjb25zdD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9 IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xh c3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3Mg VDgsY2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNz IFQxND4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQz LFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQpIHZvbGF0aWxlPiB7IHN0YXRp YyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxj bGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFz cyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNz IFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8 UiAoVDo6KikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQx NCkgY29uc3Qgdm9sYXRpbGU+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoK CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xh c3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3Mg VDksY2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFz cyBUMTU+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixU MyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSk+IHsgc3RhdGljIGNv bnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFz cyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBU NixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQx MixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRl cl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEy LFQxMyxUMTQsVDE1KSBjb25zdD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07 CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xh c3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3Mg VDksY2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFz cyBUMTU+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixU MyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSkgdm9sYXRpbGU+IHsg c3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFz cyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1 LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEs Y2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQsY2xhc3MgVDE1PgpzdHJ1Y3QgaXNfbWVtX2Z1 bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEw LFQxMSxUMTIsVDEzLFQxNCxUMTUpIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29s IHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNs YXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNz IFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNz IFQxMyxjbGFzcyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQxNj4Kc3RydWN0IGlzX21lbV9mdW5fcG9p bnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEs VDEyLFQxMyxUMTQsVDE1LFQxNik+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9 OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixj bGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFz cyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNs YXNzIFQxNSxjbGFzcyBUMTY+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoq KShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxU MTYpIGNvbnN0PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUg PGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFz cyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBU MTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFz cyBUMTY+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixU MyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYpIHZvbGF0aWxl PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIs Y2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFz cyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3Mg VDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTY+CnN0 cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxU NixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYpIGNvbnN0IHZvbGF0aWxlPiB7 IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixj bGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNz IFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBU MTEsY2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQxNixjbGFz cyBUMTc+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixU MyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3KT4geyBz dGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFz cyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1 LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEs Y2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQxNixjbGFzcyBU MTc+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxU NCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3KSBjb25zdD4g eyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLGNs YXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3Mg VDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQx MSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBUMTUsY2xhc3MgVDE2LGNsYXNz IFQxNz4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQz LFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQxNixUMTcpIHZvbGF0 aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNz IFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxj bGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xh c3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYs Y2xhc3MgVDE3PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEs VDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQxNykg Y29uc3Qgdm9sYXRpbGU+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKCnRl bXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3Mg VDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDks Y2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBU MTUsY2xhc3MgVDE2LGNsYXNzIFQxNyxjbGFzcyBUMTg+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50 ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQx MixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0 cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFz cyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBU OCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3Mg VDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xhc3MgVDE3LGNsYXNzIFQxOD4Kc3RydWN0IGlzX21l bV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5 LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQxNixUMTcsVDE4KSBjb25zdD4geyBzdGF0aWMgY29u c3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3Mg VDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYs Y2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIs Y2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBUMTUsY2xhc3MgVDE2LGNsYXNzIFQxNyxjbGFzcyBU MTg+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxU NCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCkgdm9s YXRpbGU+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xh c3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0 LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxj bGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQx NixjbGFzcyBUMTcsY2xhc3MgVDE4PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAo VDo6KikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxU MTUsVDE2LFQxNyxUMTgpIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVl ID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQx LGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNs YXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNzIFQxMyxj bGFzcyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQxNixjbGFzcyBUMTcsY2xhc3MgVDE4LGNsYXNzIFQx OT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0 LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQxNixUMTcsVDE4LFQxOSk+ IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIs Y2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFz cyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3Mg VDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xh c3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTk+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w bDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMs VDE0LFQxNSxUMTYsVDE3LFQxOCxUMTkpIGNvbnN0PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVl ID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxj bGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFz cyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xh c3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xhc3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTk+ CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxU NSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTkpIHZv bGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNs YXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBU NCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAs Y2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBU MTYsY2xhc3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTk+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50 ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQx MixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTkpIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBj b25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNs YXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNz IFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEsY2xhc3Mg VDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQxNixjbGFzcyBUMTcsY2xh c3MgVDE4LGNsYXNzIFQxOSxjbGFzcyBUMjA+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w bDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMs VDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwKT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9 IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNs YXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNz IFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFz cyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQxNixjbGFzcyBUMTcsY2xhc3MgVDE4LGNsYXNzIFQxOSxj bGFzcyBUMjA+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxU MixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQx OCxUMTksVDIwKSBjb25zdD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRl bXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3Mg VDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDks Y2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBU MTUsY2xhc3MgVDE2LGNsYXNzIFQxNyxjbGFzcyBUMTgsY2xhc3MgVDE5LGNsYXNzIFQyMD4Kc3Ry dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2 LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQxNixUMTcsVDE4LFQxOSxUMjApIHZv bGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNs YXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBU NCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAs Y2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBU MTYsY2xhc3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTksY2xhc3MgVDIwPgpzdHJ1Y3QgaXNfbWVt X2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDks VDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQxNyxUMTgsVDE5LFQyMCkgY29uc3Qgdm9sYXRp bGU+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKCnRlbXBsYXRlIDxjbGFz cyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQs Y2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEwLGNs YXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBUMTUsY2xhc3MgVDE2 LGNsYXNzIFQxNyxjbGFzcyBUMTgsY2xhc3MgVDE5LGNsYXNzIFQyMCxjbGFzcyBUMjE+CnN0cnVj dCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixU NyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwLFQyMSk+ IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIs Y2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFz cyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3Mg VDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xh c3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTksY2xhc3MgVDIwLGNsYXNzIFQyMT4Kc3RydWN0IGlz X21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4 LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQxNixUMTcsVDE4LFQxOSxUMjAsVDIxKSBjb25z dD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBS LGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xh c3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEwLGNsYXNz IFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBUMTUsY2xhc3MgVDE2LGNs YXNzIFQxNyxjbGFzcyBUMTgsY2xhc3MgVDE5LGNsYXNzIFQyMCxjbGFzcyBUMjE+CnN0cnVjdCBp c19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxU OCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwLFQyMSkgdm9s YXRpbGU+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xh c3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0 LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxj bGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQx NixjbGFzcyBUMTcsY2xhc3MgVDE4LGNsYXNzIFQxOSxjbGFzcyBUMjAsY2xhc3MgVDIxPgpzdHJ1 Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEsVDIsVDMsVDQsVDUsVDYs VDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQxNyxUMTgsVDE5LFQyMCxUMjEp IGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0 ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNz IFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5 LGNsYXNzIFQxMCxjbGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQsY2xhc3Mg VDE1LGNsYXNzIFQxNixjbGFzcyBUMTcsY2xhc3MgVDE4LGNsYXNzIFQxOSxjbGFzcyBUMjAsY2xh c3MgVDIxLGNsYXNzIFQyMj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop KFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQx NixUMTcsVDE4LFQxOSxUMjAsVDIxLFQyMik+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0 cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFz cyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBU OCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3Mg VDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xhc3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTksY2xh c3MgVDIwLGNsYXNzIFQyMSxjbGFzcyBUMjI+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w bDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMs VDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwLFQyMSxUMjIpIGNvbnN0PiB7IHN0YXRpYyBjb25z dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBU MCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixj bGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixj bGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xhc3MgVDE3LGNsYXNzIFQx OCxjbGFzcyBUMTksY2xhc3MgVDIwLGNsYXNzIFQyMSxjbGFzcyBUMjI+CnN0cnVjdCBpc19tZW1f ZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxU MTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwLFQyMSxUMjIpIHZvbGF0 aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNz IFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxj bGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xh c3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYs Y2xhc3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTksY2xhc3MgVDIwLGNsYXNzIFQyMSxjbGFzcyBU MjI+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxU NCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTks VDIwLFQyMSxUMjIpIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0g dHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBULGNsYXNzIFQwLGNsYXNzIFQxLGNs YXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNz IFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFz cyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQxNixjbGFzcyBUMTcsY2xhc3MgVDE4LGNsYXNzIFQxOSxj bGFzcyBUMjAsY2xhc3MgVDIxLGNsYXNzIFQyMixjbGFzcyBUMjM+CnN0cnVjdCBpc19tZW1fZnVu X3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAs VDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwLFQyMSxUMjIsVDIzKT4geyBz dGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFz cyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1 LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEs Y2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQxNixjbGFzcyBU MTcsY2xhc3MgVDE4LGNsYXNzIFQxOSxjbGFzcyBUMjAsY2xhc3MgVDIxLGNsYXNzIFQyMixjbGFz cyBUMjM+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixU MyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxU MTksVDIwLFQyMSxUMjIsVDIzKSBjb25zdD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRy dWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3Mg VDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgs Y2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQx NCxjbGFzcyBUMTUsY2xhc3MgVDE2LGNsYXNzIFQxNyxjbGFzcyBUMTgsY2xhc3MgVDE5LGNsYXNz IFQyMCxjbGFzcyBUMjEsY2xhc3MgVDIyLGNsYXNzIFQyMz4Kc3RydWN0IGlzX21lbV9mdW5fcG9p bnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEs VDEyLFQxMyxUMTQsVDE1LFQxNixUMTcsVDE4LFQxOSxUMjAsVDIxLFQyMixUMjMpIHZvbGF0aWxl PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIs Y2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFz cyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3Mg VDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xh c3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTksY2xhc3MgVDIwLGNsYXNzIFQyMSxjbGFzcyBUMjIs Y2xhc3MgVDIzPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoVDAsVDEs VDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQxNyxU MTgsVDE5LFQyMCxUMjEsVDIyLFQyMykgY29uc3Qgdm9sYXRpbGU+IHsgc3RhdGljIGNvbnN0IGJv b2wgdmFsdWUgPSB0cnVlOyB9OwoKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAs Y2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xh c3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xh c3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBUMTUsY2xhc3MgVDE2LGNsYXNzIFQxNyxjbGFzcyBUMTgs Y2xhc3MgVDE5LGNsYXNzIFQyMCxjbGFzcyBUMjEsY2xhc3MgVDIyLGNsYXNzIFQyMyxjbGFzcyBU MjQ+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShUMCxUMSxUMixUMyxU NCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTks VDIwLFQyMSxUMjIsVDIzLFQyNCk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9 OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVCxjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixj bGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFz cyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNs YXNzIFQxNSxjbGFzcyBUMTYsY2xhc3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTksY2xhc3MgVDIw LGNsYXNzIFQyMSxjbGFzcyBUMjIsY2xhc3MgVDIzLGNsYXNzIFQyND4Kc3RydWN0IGlzX21lbV9m dW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQx MCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQxNixUMTcsVDE4LFQxOSxUMjAsVDIxLFQyMixUMjMsVDI0 KSBjb25zdD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxj bGFzcyBSLGNsYXNzIFQsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3Mg VDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEw LGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBUMTUsY2xhc3Mg VDE2LGNsYXNzIFQxNyxjbGFzcyBUMTgsY2xhc3MgVDE5LGNsYXNzIFQyMCxjbGFzcyBUMjEsY2xh c3MgVDIyLGNsYXNzIFQyMyxjbGFzcyBUMjQ+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w bDxSIChUOjoqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMs VDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwLFQyMSxUMjIsVDIzLFQyNCkgdm9sYXRpbGU+IHsg c3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFz cyBULGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1 LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEs Y2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQxNixjbGFzcyBU MTcsY2xhc3MgVDE4LGNsYXNzIFQxOSxjbGFzcyBUMjAsY2xhc3MgVDIxLGNsYXNzIFQyMixjbGFz cyBUMjMsY2xhc3MgVDI0PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6Kiko VDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2 LFQxNyxUMTgsVDE5LFQyMCxUMjEsVDIyLFQyMyxUMjQpIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRp YyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKIyAzMzEgIi9ob21lL2NvbXBiaW8vZDk1LWJs aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9pc19tZW1fZnVuX3BvaW50ZXJfaW1w bC5ocHAiIDMKfQp9CiMgMTggIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5 cGVfdHJhaXRzL2lzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyLmhwcCIgMiAzCiMgMjggIi9ob21l L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9mdW5j dGlvbl9wb2ludGVyLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv b3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEgMwojIDE5ICIvaG9t ZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90 cmFpdF9kZWYuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv dHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxIDMKIyAyMCAiL2hv bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xf dHJhaXRfZGVmLmhwcCIgMiAzCiMgMjkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv b3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyLmhwcCIgMiAzCgpuYW1l c3BhY2UgYm9vc3QgewoKCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBpc19tZW1iZXJf ZnVuY3Rpb25fcG9pbnRlciA6IG1wbDo6Ym9vbF9jPCA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6aXNf bWVtX2Z1bl9wb2ludGVyX2ltcGw8VD46OnZhbHVlID4geyB9OwojIDExMyAiL2hvbWUvY29tcGJp by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfbWVtYmVyX2Z1bmN0aW9uX3Bv aW50ZXIuaHBwIiAzCn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv dHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfdW5kZWYuaHBwIiAxIDMKIyAxMTYgIi9ob21l L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9mdW5j dGlvbl9wb2ludGVyLmhwcCIgMiAzCiMgMTggIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9wb2ludGVyLmhwcCIgMiAzCiMgMjggIi9ob21l L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9wb2lu dGVyLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVf dHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEgMwojIDE5ICIvaG9tZS9jb21wYmlv L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYu aHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp dHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29tcGJp by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVm LmhwcCIgMiAzCiMgMjkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVf dHJhaXRzL2lzX21lbWJlcl9wb2ludGVyLmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9vc3QgewoKCgoK Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBpc19tZW1iZXJfcG9pbnRlciA6IG1wbDo6 Ym9vbF9jPCA6OmJvb3N0Ojppc19tZW1iZXJfZnVuY3Rpb25fcG9pbnRlcjxUPjo6dmFsdWUgPiB7 IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBULCB0eXBlbmFtZSBVID4gc3RydWN0IGlzX21lbWJlcl9w b2ludGVyPFUgVDo6Kj4gOiBtcGw6OmJvb2xfYzwgdHJ1ZSA+IHsgfTsKIyA5MiAiL2hvbWUvY29t cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfbWVtYmVyX3BvaW50ZXIu aHBwIiAzCn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90 cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfdW5kZWYuaHBwIiAxIDMKIyA5NSAiL2hvbWUvY29tcGJp by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfbWVtYmVyX3BvaW50ZXIuaHBw IiAyIDMKIyAxNSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp dHMvaXNfcG9pbnRlci5ocHAiIDIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9pY2VfYW5kLmhwcCIgMSAzCiMgMTUgIi9ob21lL2Nv bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9pY2VfYW5kLmhw cCIgMwpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgdHlwZV90cmFpdHMgewoKdGVtcGxhdGUg PGJvb2wgYjEsIGJvb2wgYjIsIGJvb2wgYjMgPSB0cnVlLCBib29sIGI0ID0gdHJ1ZSwgYm9vbCBi NSA9IHRydWUsIGJvb2wgYjYgPSB0cnVlLCBib29sIGI3ID0gdHJ1ZT4Kc3RydWN0IGljZV9hbmQ7 Cgp0ZW1wbGF0ZSA8Ym9vbCBiMSwgYm9vbCBiMiwgYm9vbCBiMywgYm9vbCBiNCwgYm9vbCBiNSwg Ym9vbCBiNiwgYm9vbCBiNz4Kc3RydWN0IGljZV9hbmQKewogICAgc3RhdGljIGNvbnN0IGJvb2wg dmFsdWUgPSBmYWxzZTsKfTsKCnRlbXBsYXRlIDw+CnN0cnVjdCBpY2VfYW5kPHRydWUsIHRydWUs IHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWU+CnsKICAgIHN0YXRpYyBjb25zdCBib29sIHZh bHVlID0gdHJ1ZTsKfTsKCn0KfQojIDE2ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i b29zdC90eXBlX3RyYWl0cy9pc19wb2ludGVyLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29tcGJpby9k OTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2ljZV9ub3QuaHBwIiAxIDMK IyAxNSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0 YWlsL2ljZV9ub3QuaHBwIiAzCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSB0eXBlX3RyYWl0 cyB7Cgp0ZW1wbGF0ZSA8Ym9vbCBiPgpzdHJ1Y3QgaWNlX25vdAp7CiAgICBzdGF0aWMgY29uc3Qg Ym9vbCB2YWx1ZSA9IHRydWU7Cn07Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgaWNlX25vdDx0cnVlPgp7 CiAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOwp9OwoKfQp9CiMgMTcgIi9ob21l L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3BvaW50ZXIuaHBw IiAyIDMKIyAyOCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp dHMvaXNfcG9pbnRlci5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i b29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hv bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xf dHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0 L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMjAgIi9o b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29s X3RyYWl0X2RlZi5ocHAiIDIgMwojIDI5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i b29zdC90eXBlX3RyYWl0cy9pc19wb2ludGVyLmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9vc3QgewoK CgpuYW1lc3BhY2UgZGV0YWlsIHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGlzX3Bv aW50ZXJfaGVscGVyCnsKICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gZmFsc2U7Cn07CiMg NDggIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3Bv aW50ZXIuaHBwIiAzCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGlzX3BvaW50ZXJfaGVs cGVyPFQqPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGU8IHR5 cGVuYW1lIFQgPiBzdHJ1Y3QgaXNfcG9pbnRlcl9oZWxwZXI8VCogY29uc3Q+IHsgc3RhdGljIGNv bnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBp c19wb2ludGVyX2hlbHBlcjxUKiB2b2xhdGlsZT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9 IHRydWU7IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGlzX3BvaW50ZXJfaGVscGVy PFQqIGNvbnN0IHZvbGF0aWxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsK CgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPgpzdHJ1Y3QgaXNfcG9pbnRlcl9pbXBsCnsKICAgIHN0 YXRpYyBjb25zdCBib29sIHZhbHVlID0gKDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjppY2VfYW5kPCA6 OmJvb3N0OjpkZXRhaWw6OmlzX3BvaW50ZXJfaGVscGVyPFQ+Ojp2YWx1ZSAsIDo6Ym9vc3Q6OnR5 cGVfdHJhaXRzOjppY2Vfbm90PCA6OmJvb3N0Ojppc19tZW1iZXJfcG9pbnRlcjxUPjo6dmFsdWUg Pjo6dmFsdWUgPjo6dmFsdWUpOwoKCgoKCgoKfTsKCn0KCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4g c3RydWN0IGlzX3BvaW50ZXIgOiBtcGw6OmJvb2xfYzwgOjpib29zdDo6ZGV0YWlsOjppc19wb2lu dGVyX2ltcGw8VD46OnZhbHVlID4geyB9OwojIDEyOCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu Y2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfcG9pbnRlci5ocHAiIDMKfQoKIyAxICIvaG9tZS9j b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFp dF91bmRlZi5ocHAiIDEgMwojIDEzMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v c3QvdHlwZV90cmFpdHMvaXNfcG9pbnRlci5ocHAiIDIgMwojIDE2ICIvaG9tZS9jb21wYmlvL2Q5 NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19zY2FsYXIuaHBwIiAyIDMKCgoKCgoj IDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFp bC9ib29sX3RyYWl0X2RlZi5ocHAiIDEgMwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j bHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAzCiMgMSAi L2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3Rl bXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu Y2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMiAzCiMg MjIgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3Nj YWxhci5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCm5hbWVzcGFjZSBkZXRhaWwgewoKdGVt cGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBpc19zY2FsYXJfaW1wbAp7CiAgIHN0YXRpYyBjb25z dCBib29sIHZhbHVlID0gKDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjppY2Vfb3I8IDo6Ym9vc3Q6Omlz X2FyaXRobWV0aWM8VD46OnZhbHVlLCA6OmJvb3N0Ojppc19lbnVtPFQ+Ojp2YWx1ZSwgOjpib29z dDo6aXNfcG9pbnRlcjxUPjo6dmFsdWUsIDo6Ym9vc3Q6OmlzX21lbWJlcl9wb2ludGVyPFQ+Ojp2 YWx1ZSA+Ojp2YWx1ZSk7CgoKCgoKCn07Cgp9Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVj dCBpc19zY2FsYXIgOiBtcGw6OmJvb2xfYzwgOjpib29zdDo6ZGV0YWlsOjppc19zY2FsYXJfaW1w bDxUPjo6dmFsdWUgPiB7IH07Cgp9CgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMSAzCiMgNDYg Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3NjYWxh ci5ocHAiIDIgMwojIDE1ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBl X3RyYWl0cy9pc19QT0QuaHBwIiAyIDMKCgoKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv aW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxIDMK IyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0 YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs dWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAz CiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2Rl dGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDIgMwojIDIyICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv aW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19QT0QuaHBwIiAyIDMKCm5hbWVzcGFjZSBib29z dCB7CgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaXNfUE9EOwoKbmFtZXNwYWNlIGRl dGFpbCB7CgoKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgaXNfUE9EX2ltcGwKewogICAg c3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAoOjpib29zdDo6dHlwZV90cmFpdHM6OmljZV9vcjwg Ojpib29zdDo6aXNfc2NhbGFyPFQ+Ojp2YWx1ZSwgOjpib29zdDo6aXNfdm9pZDxUPjo6dmFsdWUs IGZhbHNlID46OnZhbHVlKTsKCgoKCgoKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNp emVfdCBzej4Kc3RydWN0IGlzX1BPRF9pbXBsPFRbc3pdPgogICAgOiBpc19QT0RfaW1wbDxUPgp7 Cn07CiMgMTE1ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0 cy9pc19QT0QuaHBwIiAzCn0KCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGlzX1BPRCA6 IG1wbDo6Ym9vbF9jPCA6OmJvb3N0OjpkZXRhaWw6OmlzX1BPRF9pbXBsPFQ+Ojp2YWx1ZSA+IHsg fTsKCn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp dHMvZGV0YWlsL2Jvb2xfdHJhaXRfdW5kZWYuaHBwIiAxIDMKIyAxMjIgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX1BPRC5ocHAiIDIgMwojIDE0ICIv aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlh bF9hc3NpZ24uaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z dC90eXBlX3RyYWl0cy9pc19jb25zdC5ocHAiIDEgMwojIDE3ICIvaG9tZS9jb21wYmlvL2Q5NS1i bGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19jb25zdC5ocHAiIDMKIyAxICIvaG9tZS9j b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvY3ZfdHJhaXRz X2ltcGwuaHBwIiAxIDMKIyAxOCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv dHlwZV90cmFpdHMvZGV0YWlsL2N2X3RyYWl0c19pbXBsLmhwcCIgMwpuYW1lc3BhY2UgYm9vc3Qg ewpuYW1lc3BhY2UgZGV0YWlsIHsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBjdl90 cmFpdHNfaW1wIHt9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBjdl90cmFpdHNfaW1w PFQqPgp7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19jb25zdCA9IGZhbHNlOwogICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfdm9sYXRpbGUgPSBmYWxzZTsKICAgIHR5cGVkZWYgVCB1bnF1YWxpZmll ZF90eXBlOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBjdl90cmFpdHNfaW1wPGNv bnN0IFQqPgp7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19jb25zdCA9IHRydWU7CiAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc192b2xhdGlsZSA9IGZhbHNlOwogICAgdHlwZWRlZiBUIHVucXVhbGlm aWVkX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IGN2X3RyYWl0c19pbXA8 dm9sYXRpbGUgVCo+CnsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2NvbnN0ID0gZmFsc2U7CiAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc192b2xhdGlsZSA9IHRydWU7CiAgICB0eXBlZGVmIFQgdW5x dWFsaWZpZWRfdHlwZTsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3QgY3ZfdHJhaXRz X2ltcDxjb25zdCB2b2xhdGlsZSBUKj4KewogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfY29uc3Qg PSB0cnVlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfdm9sYXRpbGUgPSB0cnVlOwogICAgdHlw ZWRlZiBUIHVucXVhbGlmaWVkX3R5cGU7Cn07Cgp9Cn0KIyAxOCAiL2hvbWUvY29tcGJpby9kOTUt YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29uc3QuaHBwIiAyIDMKIyAyNiAiL2hv bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29uc3QuaHBw IiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMv ZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJs aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDMK IyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRh aWwvdGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1i bGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAy IDMKIyAyNyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMv aXNfY29uc3QuaHBwIiAyIDMKCm5hbWVzcGFjZSBib29zdCB7CgoKCgp0ZW1wbGF0ZTwgdHlwZW5h bWUgVCA+IHN0cnVjdCBpc19jb25zdCA6IG1wbDo6Ym9vbF9jPCA6OmJvb3N0OjpkZXRhaWw6OmN2 X3RyYWl0c19pbXA8VCo+Ojppc19jb25zdCA+IHsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBz dHJ1Y3QgaXNfY29uc3Q8VCY+IDogbXBsOjpib29sX2M8IGZhbHNlID4geyB9OwojIDEwOCAiL2hv bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29uc3QuaHBw IiAzCn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp dHMvZGV0YWlsL2Jvb2xfdHJhaXRfdW5kZWYuaHBwIiAxIDMKIyAxMTEgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NvbnN0LmhwcCIgMiAzCiMgMTUg Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2hhc190cml2 aWFsX2Fzc2lnbi5ocHAiIDIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv b3N0L3R5cGVfdHJhaXRzL2lzX3ZvbGF0aWxlLmhwcCIgMSAzCiMgMjYgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3ZvbGF0aWxlLmhwcCIgMwojIDEg Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9i b29sX3RyYWl0X2RlZi5ocHAiIDEgMwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk ZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAzCiMgMSAiL2hv bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBs YXRlX2FyaXR5X3NwZWMuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1 ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMiAzCiMgMjcg Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3ZvbGF0 aWxlLmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9vc3QgewoKCgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQg PiBzdHJ1Y3QgaXNfdm9sYXRpbGUgOiBtcGw6OmJvb2xfYzwgOjpib29zdDo6ZGV0YWlsOjpjdl90 cmFpdHNfaW1wPFQqPjo6aXNfdm9sYXRpbGUgPiB7IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBUID4g c3RydWN0IGlzX3ZvbGF0aWxlPFQmPiA6IG1wbDo6Ym9vbF9jPCBmYWxzZSA+IHsgfTsKIyAxMDgg Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3ZvbGF0 aWxlLmhwcCIgMwp9CgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5 cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMSAzCiMgMTExICIvaG9tZS9j b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc192b2xhdGlsZS5ocHAi IDIgMwojIDE2ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0 cy9oYXNfdHJpdmlhbF9hc3NpZ24uaHBwIiAyIDMKCgoKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5 NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBw IiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp dHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJs aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhw cCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJh aXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDIgMwojIDIzICIvaG9tZS9jb21wYmlvL2Q5 NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9hc3NpZ24uaHBwIiAy IDMKCm5hbWVzcGFjZSBib29zdCB7CgpuYW1lc3BhY2UgZGV0YWlsIHsKCnRlbXBsYXRlIDx0eXBl bmFtZSBUPgpzdHJ1Y3QgaGFzX3RyaXZpYWxfYXNzaWduX2ltcGwKewogICBzdGF0aWMgY29uc3Qg Ym9vbCB2YWx1ZSA9ICg6OmJvb3N0Ojp0eXBlX3RyYWl0czo6aWNlX2FuZDwgOjpib29zdDo6dHlw ZV90cmFpdHM6OmljZV9vcjwgOjpib29zdDo6aXNfUE9EPFQ+Ojp2YWx1ZSwgZmFsc2UgPjo6dmFs dWUsIDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjppY2Vfbm90PCA6OmJvb3N0Ojppc19jb25zdDxUPjo6 dmFsdWUgPjo6dmFsdWUsIDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjppY2Vfbm90PCA6OmJvb3N0Ojpp c192b2xhdGlsZTxUPjo6dmFsdWUgPjo6dmFsdWUgPjo6dmFsdWUpOwojIDQwICIvaG9tZS9jb21w YmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9hc3NpZ24u aHBwIiAzCn07Cgp9Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBoYXNfdHJpdmlhbF9h c3NpZ24gOiBtcGw6OmJvb2xfYzwgOjpib29zdDo6ZGV0YWlsOjpoYXNfdHJpdmlhbF9hc3NpZ25f aW1wbDxUPjo6dmFsdWUgPiB7IH07Cgp9CgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs dWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMSAzCiMg NDkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2hhc190 cml2aWFsX2Fzc2lnbi5ocHAiIDIgMwojIDE0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk ZS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbm90aHJvd19hc3NpZ24uaHBwIiAyIDMKCgojIDEgIi9o b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29s X3RyYWl0X2RlZi5ocHAiIDEgMwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i b29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAzCiMgMSAiL2hvbWUv Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRl X2FyaXR5X3NwZWMuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMiAzCiMgMTcgIi9o b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19ub3Rocm93 X2Fzc2lnbi5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBU ID4gc3RydWN0IGhhc19ub3Rocm93X2Fzc2lnbiA6IG1wbDo6Ym9vbF9jPCA6OmJvb3N0OjpoYXNf dHJpdmlhbF9hc3NpZ248VD46OnZhbHVlID4geyB9OwoKfQoKIyAxICIvaG9tZS9jb21wYmlvL2Q5 NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5o cHAiIDEgMwojIDI1ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3Ry YWl0cy9oYXNfbm90aHJvd19hc3NpZ24uaHBwIiAyIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUt YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlv L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbm90aHJvd19jb25zdHJ1Y3Rv ci5ocHAiIDEgMwojIDEzICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBl X3RyYWl0cy9oYXNfbm90aHJvd19jb25zdHJ1Y3Rvci5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlv L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9jb25zdHJ1Y3Rv ci5ocHAiIDEgMwojIDE4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBl X3RyYWl0cy9oYXNfdHJpdmlhbF9jb25zdHJ1Y3Rvci5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlv L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYu aHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90 cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1 LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVj LmhwcCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVf dHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDIgMwojIDE5ICIvaG9tZS9jb21wYmlv L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9jb25zdHJ1Y3Rv ci5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCm5hbWVzcGFjZSBkZXRhaWwgewoKdGVtcGxh dGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBoYXNfdHJpdmlhbF9jdG9yX2ltcGwKewogICBzdGF0aWMg Y29uc3QgYm9vbCB2YWx1ZSA9ICg6OmJvb3N0Ojp0eXBlX3RyYWl0czo6aWNlX29yPCA6OmJvb3N0 Ojppc19QT0Q8VD46OnZhbHVlLCBmYWxzZSA+Ojp2YWx1ZSk7CgoKCgp9OwoKfQoKdGVtcGxhdGU8 IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaGFzX3RyaXZpYWxfY29uc3RydWN0b3IgOiBtcGw6OmJvb2xf YzwgOjpib29zdDo6ZGV0YWlsOjpoYXNfdHJpdmlhbF9jdG9yX2ltcGw8VD46OnZhbHVlID4geyB9 OwoKfQoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0 cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEgMwojIDQxICIvaG9tZS9jb21wYmlvL2Q5 NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9jb25zdHJ1Y3Rvci5o cHAiIDIgMwojIDE0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3Ry YWl0cy9oYXNfbm90aHJvd19jb25zdHJ1Y3Rvci5ocHAiIDIgMwoKCiMgMSAiL2hvbWUvY29tcGJp by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVm LmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVf dHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5 NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlfc3Bl Yy5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBl X3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAyIDMKIyAxNyAiL2hvbWUvY29tcGJp by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaGFzX25vdGhyb3dfY29uc3RydWN0 b3IuaHBwIiAyIDMKCm5hbWVzcGFjZSBib29zdCB7Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0 cnVjdCBoYXNfbm90aHJvd19jb25zdHJ1Y3RvciA6IG1wbDo6Ym9vbF9jPCA6OmJvb3N0OjpoYXNf dHJpdmlhbF9jb25zdHJ1Y3RvcjxUPjo6dmFsdWUgPiB7IH07Cgp9CgojIDEgIi9ob21lL2NvbXBi aW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3Vu ZGVmLmhwcCIgMSAzCiMgMjUgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5 cGVfdHJhaXRzL2hhc19ub3Rocm93X2NvbnN0cnVjdG9yLmhwcCIgMiAzCiMgMjAgIi9ob21lL2Nv bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzLmhwcCIgMiAzCiMgMSAiL2hv bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaGFzX25vdGhyb3df Y29weS5ocHAiIDEgMwojIDEzICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90 eXBlX3RyYWl0cy9oYXNfbm90aHJvd19jb3B5LmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1 LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2hhc190cml2aWFsX2NvcHkuaHBwIiAxIDMK IyAyMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaGFz X3RyaXZpYWxfY29weS5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i b29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hv bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xf dHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0 L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMjAgIi9o b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29s X3RyYWl0X2RlZi5ocHAiIDIgMwojIDIyICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i b29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9jb3B5LmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9v c3QgewoKbmFtZXNwYWNlIGRldGFpbCB7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IGhh c190cml2aWFsX2NvcHlfaW1wbAp7CiAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gKDo6Ym9v c3Q6OnR5cGVfdHJhaXRzOjppY2VfYW5kPCA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6aWNlX29yPCA6 OmJvb3N0Ojppc19QT0Q8VD46OnZhbHVlLCBmYWxzZSA+Ojp2YWx1ZSwgOjpib29zdDo6dHlwZV90 cmFpdHM6OmljZV9ub3Q8IDo6Ym9vc3Q6OmlzX3ZvbGF0aWxlPFQ+Ojp2YWx1ZSA+Ojp2YWx1ZSA+ Ojp2YWx1ZSk7CgoKCgoKCgp9OwoKfQoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaGFz X3RyaXZpYWxfY29weSA6IG1wbDo6Ym9vbF9jPCA6OmJvb3N0OjpkZXRhaWw6Omhhc190cml2aWFs X2NvcHlfaW1wbDxUPjo6dmFsdWUgPiB7IH07Cgp9CgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJs aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIg MSAzCiMgNDcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz L2hhc190cml2aWFsX2NvcHkuaHBwIiAyIDMKIyAxNCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu Y2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaGFzX25vdGhyb3dfY29weS5ocHAiIDIgMwoKCiMgMSAi L2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jv b2xfdHJhaXRfZGVmLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDMKIyAxICIvaG9t ZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxh dGVfYXJpdHlfc3BlYy5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk ZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAyIDMKIyAxNyAi L2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaGFzX25vdGhy b3dfY29weS5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBU ID4gc3RydWN0IGhhc19ub3Rocm93X2NvcHkgOiBtcGw6OmJvb2xfYzwgOjpib29zdDo6aGFzX3Ry aXZpYWxfY29weTxUPjo6dmFsdWUgPiB7IH07Cgp9CgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJs aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIg MSAzCiMgMjUgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz L2hhc19ub3Rocm93X2NvcHkuaHBwIiAyIDMKIyAyMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu Y2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1i bGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbm90aHJvd19kZXN0cnVjdG9yLmhwcCIg MSAzCiMgMTMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz L2hhc19ub3Rocm93X2Rlc3RydWN0b3IuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxp L2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rvci5ocHAiIDEg MwojIDE4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9o YXNfdHJpdmlhbF9kZXN0cnVjdG9yLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9p bmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEgMwoj IDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRh aWwvYm9vbF90cmFpdF9kZWYuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1 ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxIDMK IyAyMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0 YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMiAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9p bmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2hhc190cml2aWFsX2Rlc3RydWN0b3IuaHBwIiAyIDMK Cm5hbWVzcGFjZSBib29zdCB7CgpuYW1lc3BhY2UgZGV0YWlsIHsKCnRlbXBsYXRlIDx0eXBlbmFt ZSBUPgpzdHJ1Y3QgaGFzX3RyaXZpYWxfZHRvcl9pbXBsCnsKICAgc3RhdGljIGNvbnN0IGJvb2wg dmFsdWUgPSAoOjpib29zdDo6dHlwZV90cmFpdHM6OmljZV9vcjwgOjpib29zdDo6aXNfUE9EPFQ+ Ojp2YWx1ZSwgZmFsc2UgPjo6dmFsdWUpOwoKCgoKfTsKCn0KCnRlbXBsYXRlPCB0eXBlbmFtZSBU ID4gc3RydWN0IGhhc190cml2aWFsX2Rlc3RydWN0b3IgOiBtcGw6OmJvb2xfYzwgOjpib29zdDo6 ZGV0YWlsOjpoYXNfdHJpdmlhbF9kdG9yX2ltcGw8VD46OnZhbHVlID4geyB9OwoKfQoKIyAxICIv aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9v bF90cmFpdF91bmRlZi5ocHAiIDEgMwojIDQxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk ZS9ib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9kZXN0cnVjdG9yLmhwcCIgMiAzCiMgMTQg Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19ub3Ro cm93X2Rlc3RydWN0b3IuaHBwIiAyIDMKCgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs dWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEgMwojIDE5 ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwv Ym9vbF90cmFpdF9kZWYuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxIDMKIyAy MCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWls L2Jvb2xfdHJhaXRfZGVmLmhwcCIgMiAzCiMgMTcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs dWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19ub3Rocm93X2Rlc3RydWN0b3IuaHBwIiAyIDMKCm5h bWVzcGFjZSBib29zdCB7Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBoYXNfbm90aHJv d19kZXN0cnVjdG9yIDogbXBsOjpib29sX2M8IDo6Ym9vc3Q6Omhhc190cml2aWFsX2Rlc3RydWN0 b3I8VD46OnZhbHVlID4geyB9OwoKfQoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk ZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEgMwojIDI1 ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbm90 aHJvd19kZXN0cnVjdG9yLmhwcCIgMiAzCiMgMjIgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs dWRlL2Jvb3N0L3R5cGVfdHJhaXRzLmhwcCIgMiAzCgoKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5 NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19hcnJheS5ocHAiIDEgMwojIDI0ICIv aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19hcnJheS5o cHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0 cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUt YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIg MwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2Rl dGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1 LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAi IDIgMwojIDI1ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0 cy9pc19hcnJheS5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCgoKdGVtcGxhdGU8IHR5cGVu YW1lIFQgPiBzdHJ1Y3QgaXNfYXJyYXkgOiBtcGw6OmJvb2xfYzwgZmFsc2UgPiB7IH07CnRlbXBs YXRlPCB0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOID4gc3RydWN0IGlzX2FycmF5PFRbTl0+IDog bXBsOjpib29sX2M8IHRydWUgPiB7IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBULCBzdGQ6OnNpemVf dCBOID4gc3RydWN0IGlzX2FycmF5PFQgY29uc3RbTl0+IDogbXBsOjpib29sX2M8IHRydWUgPiB7 IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOID4gc3RydWN0IGlzX2FycmF5 PFQgdm9sYXRpbGVbTl0+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07CnRlbXBsYXRlPCB0eXBl bmFtZSBULCBzdGQ6OnNpemVfdCBOID4gc3RydWN0IGlzX2FycmF5PFQgY29uc3Qgdm9sYXRpbGVb Tl0+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07CiMgNzQgIi9ob21lL2NvbXBiaW8vZDk1LWJs aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2FycmF5LmhwcCIgMwp9CgojIDEgIi9ob21l L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3Ry YWl0X3VuZGVmLmhwcCIgMSAzCiMgNzcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv b3N0L3R5cGVfdHJhaXRzL2lzX2FycmF5LmhwcCIgMiAzCiMgMjggIi9ob21lL2NvbXBiaW8vZDk1 LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29tcGJp by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfYmFzZV9hbmRfZGVyaXZlZC5o cHAiIDEgMwojIDEzICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3Ry YWl0cy9pc19iYXNlX2FuZF9kZXJpdmVkLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJs aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NsYXNzLmhwcCIgMSAzCiMgMTggIi9ob21l L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NsYXNzLmhwcCIg MwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lz X3VuaW9uLmhwcCIgMSAzCiMgMTQgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0 L3R5cGVfdHJhaXRzL2lzX3VuaW9uLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9p bmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9jdi5ocHAiIDEgMwojIDIxICIvaG9tZS9j b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfY3YuaHBwIiAz CiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0 YWlsL3R5cGVfdHJhaXRfZGVmLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9p bmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X2RlZi5ocHAiIDMKIyAx ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwv dGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv aW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIiAyIDMK IyAyMiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvcmVt b3ZlX2N2LmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9vc3QgewoKCgoKdGVtcGxhdGU8IHR5cGVuYW1l IFQgPiBzdHJ1Y3QgcmVtb3ZlX2N2IHsgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmN2X3RyYWl0 c19pbXA8VCo+Ojp1bnF1YWxpZmllZF90eXBlIHR5cGU7IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBU ID4gc3RydWN0IHJlbW92ZV9jdjxUJj4geyB0eXBlZGVmIFQmIHR5cGU7IH07CnRlbXBsYXRlPCB0 eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOID4gc3RydWN0IHJlbW92ZV9jdjxUIGNvbnN0W05dPiB7 IHR5cGVkZWYgVCB0eXBlW05dOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgc3RkOjpzaXplX3Qg TiA+IHN0cnVjdCByZW1vdmVfY3Y8VCB2b2xhdGlsZVtOXT4geyB0eXBlZGVmIFQgdHlwZVtOXTsg fTsKdGVtcGxhdGU8IHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4gPiBzdHJ1Y3QgcmVtb3ZlX2N2 PFQgY29uc3Qgdm9sYXRpbGVbTl0+IHsgdHlwZWRlZiBUIHR5cGVbTl07IH07CiMgNDEgIi9ob21l L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9jdi5ocHAi IDMKfQoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0 cy9kZXRhaWwvdHlwZV90cmFpdF91bmRlZi5ocHAiIDEgMwojIDQ0ICIvaG9tZS9jb21wYmlvL2Q5 NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfY3YuaHBwIiAyIDMKIyAxNSAi L2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfdW5pb24u aHBwIiAyIDMKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBl X3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJp by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVm LmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJh aXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMjAgIi9ob21lL2NvbXBi aW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2Rl Zi5ocHAiIDIgMwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBl X3RyYWl0cy9pc191bmlvbi5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCm5hbWVzcGFjZSBk ZXRhaWwgewp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IGlzX3VuaW9uX2ltcGwKewogICB0 eXBlZGVmIHR5cGVuYW1lIHJlbW92ZV9jdjxUPjo6dHlwZSBjdnQ7CiAgIHN0YXRpYyBjb25zdCBi b29sIHZhbHVlID0gZmFsc2U7Cn07Cn0KCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGlz X3VuaW9uIDogbXBsOjpib29sX2M8IDo6Ym9vc3Q6OmRldGFpbDo6aXNfdW5pb25faW1wbDxUPjo6 dmFsdWUgPiB7IH07Cgp9CgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0 L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMSAzCiMgMzUgIi9ob21l L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3VuaW9uLmhwcCIg MiAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz L2lzX2NsYXNzLmhwcCIgMiAzCgoKCgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2Z1bmN0aW9uLmhwcCIgMSAzCiMgMTggIi9ob21lL2NvbXBi aW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2Z1bmN0aW9uLmhwcCIgMwoj IDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFp bC9mYWxzZV9yZXN1bHQuaHBwIiAxIDMKIyAxMiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1 ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2ZhbHNlX3Jlc3VsdC5ocHAiIDMKbmFtZXNwYWNl IGJvb3N0IHsKbmFtZXNwYWNlIHR5cGVfdHJhaXRzIHsKCgpzdHJ1Y3QgZmFsc2VfcmVzdWx0CnsK ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgcmVzdWx0XwogICAgewogICAgICAgIHN0 YXRpYyBjb25zdCBib29sIHZhbHVlID0gZmFsc2U7CiAgICB9Owp9OwoKfX0KIyAxOSAiL2hvbWUv Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfZnVuY3Rpb24uaHBw IiAyIDMKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3Ry YWl0cy9kZXRhaWwvaXNfZnVuY3Rpb25fcHRyX2hlbHBlci5ocHAiIDEgMwojIDI5ICIvaG9tZS9j b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvaXNfZnVuY3Rp b25fcHRyX2hlbHBlci5ocHAiIDMKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIHR5cGVfdHJh aXRzIHsKCnRlbXBsYXRlIDxjbGFzcyBSPgpzdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcgp7 CiAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOwp9OwoKCgoKdGVtcGxhdGUgPGNs YXNzIFI+CnN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKCk+IHsgc3RhdGljIGNv bnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVDA+CnN0 cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKFQwKT4geyBzdGF0aWMgY29uc3QgYm9v bCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMT4K c3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEpPiB7IHN0YXRpYyBjb25z dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQwLGNsYXNz IFQxLGNsYXNzIFQyPgpzdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKShUMCxUMSxU Mik+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNz IFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDM+CnN0cnVjdCBpc19mdW5jdGlv bl9wdHJfaGVscGVyPFIgKCopKFQwLFQxLFQyLFQzKT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1 ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBU MixjbGFzcyBUMyxjbGFzcyBUND4Kc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKiko VDAsVDEsVDIsVDMsVDQpPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCnRl bXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNz IFQ0LGNsYXNzIFQ1PgpzdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKShUMCxUMSxU MixUMyxUNCxUNSk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxh dGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQs Y2xhc3MgVDUsY2xhc3MgVDY+CnN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKFQw LFQxLFQyLFQzLFQ0LFQ1LFQ2KT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07 Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxj bGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNz4Kc3RydWN0IGlzX2Z1bmN0aW9uX3B0 cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcpPiB7IHN0YXRpYyBjb25zdCBi b29sIHZhbHVlID0gdHJ1ZTsgfTsKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQx LGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNs YXNzIFQ4PgpzdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKShUMCxUMSxUMixUMyxU NCxUNSxUNixUNyxUOCk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVt cGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3Mg VDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDk+CnN0cnVjdCBp c19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5 KT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg UixjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxj bGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTA+CnN0cnVjdCBpc19m dW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQx MCk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNz IFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUs Y2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMT4K c3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYs VDcsVDgsVDksVDEwLFQxMSk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoK dGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xh c3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3Mg VDEwLGNsYXNzIFQxMSxjbGFzcyBUMTI+CnN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIg KCopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyKT4geyBzdGF0aWMg Y29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxj bGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFz cyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFz cyBUMTM+CnN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKFQwLFQxLFQyLFQzLFQ0 LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFs dWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3Mg VDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgs Y2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQx ND4Kc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUs VDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFs dWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3Mg VDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgs Y2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQx NCxjbGFzcyBUMTU+CnN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKFQwLFQxLFQy LFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1KT4geyBzdGF0aWMg Y29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxj bGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFz cyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFz cyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTY+CnN0cnVjdCBpc19mdW5jdGlvbl9w dHJfaGVscGVyPFIgKCopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEy LFQxMyxUMTQsVDE1LFQxNik+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoK dGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xh c3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3Mg VDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBUMTUsY2xh c3MgVDE2LGNsYXNzIFQxNz4Kc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAs VDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQx Nyk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNz IFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUs Y2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMSxj bGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBUMTUsY2xhc3MgVDE2LGNsYXNzIFQx NyxjbGFzcyBUMTg+CnN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKFQwLFQxLFQy LFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQxNixUMTcsVDE4 KT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg UixjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxj bGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNs YXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xhc3MgVDE3 LGNsYXNzIFQxOCxjbGFzcyBUMTk+CnN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCop KFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQx NixUMTcsVDE4LFQxOSk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVt cGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3Mg VDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEw LGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBUMTUsY2xhc3Mg VDE2LGNsYXNzIFQxNyxjbGFzcyBUMTgsY2xhc3MgVDE5LGNsYXNzIFQyMD4Kc3RydWN0IGlzX2Z1 bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEw LFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQxNyxUMTgsVDE5LFQyMCk+IHsgc3RhdGljIGNvbnN0 IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3Mg VDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcs Y2xhc3MgVDgsY2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEz LGNsYXNzIFQxNCxjbGFzcyBUMTUsY2xhc3MgVDE2LGNsYXNzIFQxNyxjbGFzcyBUMTgsY2xhc3Mg VDE5LGNsYXNzIFQyMCxjbGFzcyBUMjE+CnN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIg KCopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1 LFQxNixUMTcsVDE4LFQxOSxUMjAsVDIxKT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRy dWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFz cyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBU OSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNz IFQxNSxjbGFzcyBUMTYsY2xhc3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTksY2xhc3MgVDIwLGNs YXNzIFQyMSxjbGFzcyBUMjI+CnN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKFQw LFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQxNixU MTcsVDE4LFQxOSxUMjAsVDIxLFQyMik+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVl OyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3Mg VDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDgsY2xhc3MgVDks Y2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNzIFQxNCxjbGFzcyBU MTUsY2xhc3MgVDE2LGNsYXNzIFQxNyxjbGFzcyBUMTgsY2xhc3MgVDE5LGNsYXNzIFQyMCxjbGFz cyBUMjEsY2xhc3MgVDIyLGNsYXNzIFQyMz4Kc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8 UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxU MTUsVDE2LFQxNyxUMTgsVDE5LFQyMCxUMjEsVDIyLFQyMyk+IHsgc3RhdGljIGNvbnN0IGJvb2wg dmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xh c3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3Mg VDgsY2xhc3MgVDksY2xhc3MgVDEwLGNsYXNzIFQxMSxjbGFzcyBUMTIsY2xhc3MgVDEzLGNsYXNz IFQxNCxjbGFzcyBUMTUsY2xhc3MgVDE2LGNsYXNzIFQxNyxjbGFzcyBUMTgsY2xhc3MgVDE5LGNs YXNzIFQyMCxjbGFzcyBUMjEsY2xhc3MgVDIyLGNsYXNzIFQyMyxjbGFzcyBUMjQ+CnN0cnVjdCBp c19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5 LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQxNixUMTcsVDE4LFQxOSxUMjAsVDIxLFQyMixUMjMs VDI0KT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CiMgMTI4ICIvaG9tZS9j b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvaXNfZnVuY3Rp b25fcHRyX2hlbHBlci5ocHAiIDMKfQp9CiMgMjMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs dWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2Z1bmN0aW9uLmhwcCIgMiAzCgoKCgoKCiMgMSAiL2hv bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xf dHJhaXRfZGVmLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv b3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDMKIyAxICIvaG9tZS9j b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVf YXJpdHlfc3BlYy5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i b29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAyIDMKIyAzMCAiL2hv bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfZnVuY3Rpb24u aHBwIiAyIDMKCgoKCgoKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBkZXRhaWwgewoKCnRl bXBsYXRlPGJvb2wgaXNfcmVmID0gdHJ1ZT4Kc3RydWN0IGlzX2Z1bmN0aW9uX2Nob29zZXIKICAg IDogOjpib29zdDo6dHlwZV90cmFpdHM6OmZhbHNlX3Jlc3VsdAp7Cn07Cgp0ZW1wbGF0ZSA8Pgpz dHJ1Y3QgaXNfZnVuY3Rpb25fY2hvb3NlcjxmYWxzZT4KewogICAgdGVtcGxhdGU8IHR5cGVuYW1l IFQgPiBzdHJ1Y3QgcmVzdWx0XwogICAgICAgIDogOjpib29zdDo6dHlwZV90cmFpdHM6OmlzX2Z1 bmN0aW9uX3B0cl9oZWxwZXI8VCo+CiAgICB7CiAgICB9Owp9OwoKdGVtcGxhdGUgPHR5cGVuYW1l IFQ+CnN0cnVjdCBpc19mdW5jdGlvbl9pbXBsCiAgICA6IGlzX2Z1bmN0aW9uX2Nob29zZXI8IDo6 Ym9vc3Q6OmlzX3JlZmVyZW5jZTxUPjo6dmFsdWUgPgogICAgICAgIDo6dGVtcGxhdGUgcmVzdWx0 XzxUPgp7Cn07CiMgNzcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVf dHJhaXRzL2lzX2Z1bmN0aW9uLmhwcCIgMwp9Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVj dCBpc19mdW5jdGlvbiA6IG1wbDo6Ym9vbF9jPCA6OmJvb3N0OjpkZXRhaWw6OmlzX2Z1bmN0aW9u X2ltcGw8VD46OnZhbHVlID4geyB9OwoKfQoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j bHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEgMwoj IDg0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19m dW5jdGlvbi5ocHAiIDIgMwojIDI0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z dC90eXBlX3RyYWl0cy9pc19jbGFzcy5ocHAiIDIgMwoKCgoKCiMgMSAiL2hvbWUvY29tcGJpby9k OTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhw cCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJh aXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1i bGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlfc3BlYy5o cHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3Ry YWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAyIDMKIyAzMCAiL2hvbWUvY29tcGJpby9k OTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfY2xhc3MuaHBwIiAyIDMKCm5hbWVz cGFjZSBib29zdCB7CgpuYW1lc3BhY2UgZGV0YWlsIHsKIyA2MSAiL2hvbWUvY29tcGJpby9kOTUt YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfY2xhc3MuaHBwIiAzCnRlbXBsYXRlIDx0 eXBlbmFtZSBUPgpzdHJ1Y3QgaXNfY2xhc3NfaW1wbAp7CgogICAgc3RhdGljIGNvbnN0IGJvb2wg dmFsdWUgPSAoOjpib29zdDo6dHlwZV90cmFpdHM6OmljZV9hbmQ8IDo6Ym9vc3Q6OnR5cGVfdHJh aXRzOjppY2Vfbm90PCA6OmJvb3N0Ojppc191bmlvbjxUPjo6dmFsdWUgPjo6dmFsdWUsIDo6Ym9v c3Q6OnR5cGVfdHJhaXRzOjppY2Vfbm90PCA6OmJvb3N0Ojppc19zY2FsYXI8VD46OnZhbHVlID46 OnZhbHVlLCA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6aWNlX25vdDwgOjpib29zdDo6aXNfYXJyYXk8 VD46OnZhbHVlID46OnZhbHVlLCA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6aWNlX25vdDwgOjpib29z dDo6aXNfcmVmZXJlbmNlPFQ+Ojp2YWx1ZT46OnZhbHVlLCA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6 aWNlX25vdDwgOjpib29zdDo6aXNfdm9pZDxUPjo6dmFsdWUgPjo6dmFsdWUsIDo6Ym9vc3Q6OnR5 cGVfdHJhaXRzOjppY2Vfbm90PCA6OmJvb3N0Ojppc19mdW5jdGlvbjxUPjo6dmFsdWUgPjo6dmFs dWUgPjo6dmFsdWUpOwojIDg0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90 eXBlX3RyYWl0cy9pc19jbGFzcy5ocHAiIDMKfTsKCgoKfQoKdGVtcGxhdGU8IHR5cGVuYW1lIFQg PiBzdHJ1Y3QgaXNfY2xhc3MgOiBtcGw6OmJvb2xfYzwgOjpib29zdDo6ZGV0YWlsOjppc19jbGFz c19pbXBsPFQ+Ojp2YWx1ZSA+IHsgfTsKCn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu Y2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfdW5kZWYuaHBwIiAxIDMK IyA5NSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNf Y2xhc3MuaHBwIiAyIDMKIyAxNCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv dHlwZV90cmFpdHMvaXNfYmFzZV9hbmRfZGVyaXZlZC5ocHAiIDIgMwoKCgoKCiMgMSAiL2hvbWUv Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJh aXRfZGVmLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0 L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDMKIyAxICIvaG9tZS9jb21w YmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJp dHlfc3BlYy5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z dC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAyIDMKIyAyMCAiL2hvbWUv Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfYmFzZV9hbmRfZGVy aXZlZC5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCm5hbWVzcGFjZSBkZXRhaWwgewoKdGVt cGxhdGUgPHR5cGVuYW1lIEJhc2UsIHR5cGVuYW1lIERlcml2ZWQ+CnN0cnVjdCBpc19iYXNlX2Fu ZF9kZXJpdmVkX2ltcGwKewogICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9ICg6OmJvb3N0Ojp0 eXBlX3RyYWl0czo6aWNlX2FuZDwgOjpib29zdDo6aXNfY29udmVydGlibGU8RGVyaXZlZCosQmFz ZSo+Ojp2YWx1ZSwgOjpib29zdDo6aXNfY2xhc3M8RGVyaXZlZD46OnZhbHVlLCA6OmJvb3N0Ojpp c19jbGFzczxCYXNlPjo6dmFsdWUgPjo6dmFsdWUpOwoKCgoKCgp9OwoKfQoKdGVtcGxhdGU8IHR5 cGVuYW1lIEJhc2UsIHR5cGVuYW1lIERlcml2ZWQgPiBzdHJ1Y3QgaXNfYmFzZV9hbmRfZGVyaXZl ZCA6IG1wbDo6Ym9vbF9jPCAoOjpib29zdDo6ZGV0YWlsOjppc19iYXNlX2FuZF9kZXJpdmVkX2lt cGw8QmFzZSxEZXJpdmVkPjo6dmFsdWUpID4geyB9OwoKCgoKCgoKdGVtcGxhdGU8IHR5cGVuYW1l IEJhc2UsIHR5cGVuYW1lIERlcml2ZWQgPiBzdHJ1Y3QgaXNfYmFzZV9hbmRfZGVyaXZlZDxCYXNl JixEZXJpdmVkPiA6IG1wbDo6Ym9vbF9jPCBmYWxzZSA+IHsgfTsKdGVtcGxhdGU8IHR5cGVuYW1l IEJhc2UsIHR5cGVuYW1lIERlcml2ZWQgPiBzdHJ1Y3QgaXNfYmFzZV9hbmRfZGVyaXZlZDxCYXNl LERlcml2ZWQmPiA6IG1wbDo6Ym9vbF9jPCBmYWxzZSA+IHsgfTsKdGVtcGxhdGU8IHR5cGVuYW1l IEJhc2UsIHR5cGVuYW1lIERlcml2ZWQgPiBzdHJ1Y3QgaXNfYmFzZV9hbmRfZGVyaXZlZDxCYXNl JixEZXJpdmVkJj4gOiBtcGw6OmJvb2xfYzwgZmFsc2UgPiB7IH07CgoKfQoKIyAxICIvaG9tZS9j b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFp dF91bmRlZi5ocHAiIDEgMwojIDU1ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z dC90eXBlX3RyYWl0cy9pc19iYXNlX2FuZF9kZXJpdmVkLmhwcCIgMiAzCiMgMjkgIi9ob21lL2Nv bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzLmhwcCIgMiAzCgojIDEgIi9o b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NvbXBvdW5k LmhwcCIgMSAzCiMgMjQgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVf dHJhaXRzL2lzX2NvbXBvdW5kLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs dWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEgMwojIDE5 ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwv Ym9vbF90cmFpdF9kZWYuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxIDMKIyAy MCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWls L2Jvb2xfdHJhaXRfZGVmLmhwcCIgMiAzCiMgMjUgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs dWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NvbXBvdW5kLmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9v c3QgewoKbmFtZXNwYWNlIGRldGFpbCB7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IGlz X2NvbXBvdW5kX2ltcGwKewogICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9ICg6OmJvb3N0Ojp0 eXBlX3RyYWl0czo6aWNlX29yPCA6OmJvb3N0Ojppc19hcnJheTxUPjo6dmFsdWUsIDo6Ym9vc3Q6 OmlzX3BvaW50ZXI8VD46OnZhbHVlLCA6OmJvb3N0Ojppc19yZWZlcmVuY2U8VD46OnZhbHVlLCA6 OmJvb3N0Ojppc19jbGFzczxUPjo6dmFsdWUsIDo6Ym9vc3Q6OmlzX3VuaW9uPFQ+Ojp2YWx1ZSwg Ojpib29zdDo6aXNfZW51bTxUPjo6dmFsdWUsIDo6Ym9vc3Q6OmlzX21lbWJlcl9wb2ludGVyPFQ+ Ojp2YWx1ZSA+Ojp2YWx1ZSk7CiMgNDMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv b3N0L3R5cGVfdHJhaXRzL2lzX2NvbXBvdW5kLmhwcCIgMwp9OwoKfQoKdGVtcGxhdGU8IHR5cGVu YW1lIFQgPiBzdHJ1Y3QgaXNfY29tcG91bmQgOiBtcGw6OmJvb2xfYzwgOjpib29zdDo6ZGV0YWls Ojppc19jb21wb3VuZF9pbXBsPFQ+Ojp2YWx1ZSA+IHsgfTsKCn0KCiMgMSAiL2hvbWUvY29tcGJp by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfdW5k ZWYuaHBwIiAxIDMKIyA1MiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlw ZV90cmFpdHMvaXNfY29tcG91bmQuaHBwIiAyIDMKIyAzMSAiL2hvbWUvY29tcGJpby9kOTUtYmxp L2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMuaHBwIiAyIDMKCgojIDEgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2VtcHR5LmhwcCIgMSAzCiMgMzIg Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2VtcHR5 LmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJh aXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEgMwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5 NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBw IiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMv ZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29tcGJpby9k OTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhw cCIgMiAzCiMgMzMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJh aXRzL2lzX2VtcHR5LmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9vc3QgewoKbmFtZXNwYWNlIGRldGFp bCB7CgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBlbXB0eV9oZWxwZXJfdDEgOiBwdWJs aWMgVAp7CiAgICBlbXB0eV9oZWxwZXJfdDEoKTsKICAgIGludCBpWzI1Nl07Cn07CgpzdHJ1Y3Qg ZW1wdHlfaGVscGVyX3QyIHsgaW50IGlbMjU2XTsgfTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQs IGJvb2wgaXNfYV9jbGFzcyA9IGZhbHNlPgpzdHJ1Y3QgZW1wdHlfaGVscGVyCnsKICAgIHN0YXRp YyBjb25zdCBib29sIHZhbHVlID0gZmFsc2U7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3Ry dWN0IGVtcHR5X2hlbHBlcjxULCB0cnVlPgp7CiAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9 IChzaXplb2YoZW1wdHlfaGVscGVyX3QxPFQ+KSA9PSBzaXplb2YoZW1wdHlfaGVscGVyX3QyKSk7 CgoKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3QgaXNfZW1wdHlfaW1wbAp7CiAgICB0 eXBlZGVmIHR5cGVuYW1lIHJlbW92ZV9jdjxUPjo6dHlwZSBjdnQ7CiAgICBzdGF0aWMgY29uc3Qg Ym9vbCB2YWx1ZSA9ICggOjpib29zdDo6dHlwZV90cmFpdHM6OmljZV9vcjwgOjpib29zdDo6ZGV0 YWlsOjplbXB0eV9oZWxwZXI8Y3Z0LDo6Ym9vc3Q6OmlzX2NsYXNzPFQ+Ojp2YWx1ZT46OnZhbHVl ICwgZmFsc2UgPjo6dmFsdWUgKTsKCgoKCgoKfTsKIyAxOTAgIi9ob21lL2NvbXBiaW8vZDk1LWJs aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2VtcHR5LmhwcCIgMwp9Cgp0ZW1wbGF0ZTwg dHlwZW5hbWUgVCA+IHN0cnVjdCBpc19lbXB0eSA6IG1wbDo6Ym9vbF9jPCA6OmJvb3N0OjpkZXRh aWw6OmlzX2VtcHR5X2ltcGw8VD46OnZhbHVlID4geyB9OwoKfQoKIyAxICIvaG9tZS9jb21wYmlv L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF91bmRl Zi5ocHAiIDEgMwojIDE5NyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlw ZV90cmFpdHMvaXNfZW1wdHkuaHBwIiAyIDMKIyAzNCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu Y2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMuaHBwIiAyIDMKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5 NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19mdW5kYW1lbnRhbC5ocHAiIDEgMwoj IDE4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19m dW5kYW1lbnRhbC5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z dC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUv Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJh aXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5 cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMjAgIi9ob21l L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3Ry YWl0X2RlZi5ocHAiIDIgMwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z dC90eXBlX3RyYWl0cy9pc19mdW5kYW1lbnRhbC5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsK Cm5hbWVzcGFjZSBkZXRhaWwgewoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBpc19mdW5k YW1lbnRhbF9pbXBsCiAgICA6IDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjppY2Vfb3I8CiAgICAgICAg ICA6OmJvb3N0Ojppc19hcml0aG1ldGljPFQ+Ojp2YWx1ZQogICAgICAgICwgOjpib29zdDo6aXNf dm9pZDxUPjo6dmFsdWUKICAgICAgICA+CnsKfTsKCn0KCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+ IHN0cnVjdCBpc19mdW5kYW1lbnRhbCA6IG1wbDo6Ym9vbF9jPCA6OmJvb3N0OjpkZXRhaWw6Omlz X2Z1bmRhbWVudGFsX2ltcGw8VD46OnZhbHVlID4geyB9OwoKfQoKIyAxICIvaG9tZS9jb21wYmlv L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF91bmRl Zi5ocHAiIDEgMwojIDQxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBl X3RyYWl0cy9pc19mdW5kYW1lbnRhbC5ocHAiIDIgMwojIDM4ICIvaG9tZS9jb21wYmlvL2Q5NS1i bGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy5ocHAiIDIgMwoKCgojIDEgIi9ob21lL2NvbXBi aW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX29iamVjdC5ocHAiIDEgMwoj IDIxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19v YmplY3QuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlw ZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBi aW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2Rl Zi5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3Ry YWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21w YmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9k ZWYuaHBwIiAyIDMKIyAyMiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlw ZV90cmFpdHMvaXNfb2JqZWN0LmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9vc3QgewoKbmFtZXNwYWNl IGRldGFpbCB7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IGlzX29iamVjdF9pbXBsCnsK CiAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gKDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjppY2Vf YW5kPCA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6aWNlX25vdDwgOjpib29zdDo6aXNfcmVmZXJlbmNl PFQ+Ojp2YWx1ZT46OnZhbHVlLCA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6aWNlX25vdDwgOjpib29z dDo6aXNfdm9pZDxUPjo6dmFsdWU+Ojp2YWx1ZSwgOjpib29zdDo6dHlwZV90cmFpdHM6OmljZV9u b3Q8IDo6Ym9vc3Q6OmlzX2Z1bmN0aW9uPFQ+Ojp2YWx1ZT46OnZhbHVlID46OnZhbHVlKTsKIyA0 NCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfb2Jq ZWN0LmhwcCIgMwp9OwoKfQoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaXNfb2JqZWN0 IDogbXBsOjpib29sX2M8IDo6Ym9vc3Q6OmRldGFpbDo6aXNfb2JqZWN0X2ltcGw8VD46OnZhbHVl ID4geyB9OwoKfQoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBl X3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEgMwojIDUzICIvaG9tZS9jb21w YmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19vYmplY3QuaHBwIiAyIDMK IyA0MiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMuaHBw IiAyIDMKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3Ry YWl0cy9pc19zYW1lLmhwcCIgMSAzCiMgMTUgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3NhbWUuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUt YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIg MSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz L2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv aW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAi IDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0 cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAyIDMKIyAxNiAiL2hvbWUvY29tcGJpby9kOTUt YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfc2FtZS5ocHAiIDIgMwoKbmFtZXNwYWNl IGJvb3N0IHsKCgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUgPiBzdHJ1Y3QgaXNf c2FtZSA6IG1wbDo6Ym9vbF9jPCBmYWxzZSA+IHsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBz dHJ1Y3QgaXNfc2FtZTxULFQ+IDogbXBsOjpib29sX2M8IHRydWUgPiB7IH07CiMgNzcgIi9ob21l L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3NhbWUuaHBwIiAz Cn0KCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMv ZGV0YWlsL2Jvb2xfdHJhaXRfdW5kZWYuaHBwIiAxIDMKIyA4MCAiL2hvbWUvY29tcGJpby9kOTUt YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvaXNfc2FtZS5ocHAiIDIgMwojIDQ2ICIvaG9t ZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy5ocHAiIDIgMwoKIyAx ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19zdGF0 ZWxlc3MuaHBwIiAxIDMKIyAyMiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv dHlwZV90cmFpdHMvaXNfc3RhdGVsZXNzLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJs aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEg MwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9k ZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu Y2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAx IDMKIyAyMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMv ZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMiAzCiMgMjMgIi9ob21lL2NvbXBiaW8vZDk1LWJs aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3N0YXRlbGVzcy5ocHAiIDIgMwoKbmFtZXNw YWNlIGJvb3N0IHsKCm5hbWVzcGFjZSBkZXRhaWwgewoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0 cnVjdCBpc19zdGF0ZWxlc3NfaW1wbAp7CiAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAoOjpi b29zdDo6dHlwZV90cmFpdHM6OmljZV9hbmQ8IDo6Ym9vc3Q6Omhhc190cml2aWFsX2NvbnN0cnVj dG9yPFQ+Ojp2YWx1ZSwgOjpib29zdDo6aGFzX3RyaXZpYWxfY29weTxUPjo6dmFsdWUsIDo6Ym9v c3Q6Omhhc190cml2aWFsX2Rlc3RydWN0b3I8VD46OnZhbHVlLCA6OmJvb3N0Ojppc19jbGFzczxU Pjo6dmFsdWUsIDo6Ym9vc3Q6OmlzX2VtcHR5PFQ+Ojp2YWx1ZSA+Ojp2YWx1ZSk7CgoKCgoKCgp9 OwoKfQoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaXNfc3RhdGVsZXNzIDogbXBsOjpi b29sX2M8IDo6Ym9vc3Q6OmRldGFpbDo6aXNfc3RhdGVsZXNzX2ltcGw8VD46OnZhbHVlID4geyB9 OwoKfQoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0 cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEgMwojIDQ4ICIvaG9tZS9jb21wYmlvL2Q5 NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9pc19zdGF0ZWxlc3MuaHBwIiAyIDMKIyA0 OCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMuaHBwIiAy IDMKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0 cy9yZW1vdmVfYm91bmRzLmhwcCIgMSAzCiMgMTcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs dWRlL2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9ib3VuZHMuaHBwIiAzCiMgMSAiL2hvbWUvY29t cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRf ZGVmLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5 cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X2RlZi5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlv L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlf c3BlYy5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90 eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIiAyIDMKIyAxOCAiL2hvbWUvY29t cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX2JvdW5kcy5ocHAi IDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IHJl bW92ZV9ib3VuZHMgeyB0eXBlZGVmIFQgdHlwZTsgfTsKCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwg c3RkOjpzaXplX3QgTiA+IHN0cnVjdCByZW1vdmVfYm91bmRzPFRbTl0+IHsgdHlwZWRlZiBUIHR5 cGU7IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOID4gc3RydWN0IHJlbW92 ZV9ib3VuZHM8VCBjb25zdFtOXT4geyB0eXBlZGVmIFQgY29uc3QgdHlwZTsgfTsKdGVtcGxhdGU8 IHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4gPiBzdHJ1Y3QgcmVtb3ZlX2JvdW5kczxUIHZvbGF0 aWxlW05dPiB7IHR5cGVkZWYgVCB2b2xhdGlsZSB0eXBlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUg VCwgc3RkOjpzaXplX3QgTiA+IHN0cnVjdCByZW1vdmVfYm91bmRzPFQgY29uc3Qgdm9sYXRpbGVb Tl0+IHsgdHlwZWRlZiBUIGNvbnN0IHZvbGF0aWxlIHR5cGU7IH07CgoKfQoKIyAxICIvaG9tZS9j b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFp dF91bmRlZi5ocHAiIDEgMwojIDMzICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z dC90eXBlX3RyYWl0cy9yZW1vdmVfYm91bmRzLmhwcCIgMiAzCiMgNTIgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29t cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX2NvbnN0LmhwcCIg MSAzCiMgMjIgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz L3JlbW92ZV9jb25zdC5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i b29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hv bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVf dHJhaXRfZGVmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0 L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMjAgIi9o b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBl X3RyYWl0X2RlZi5ocHAiIDIgMwojIDIzICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i b29zdC90eXBlX3RyYWl0cy9yZW1vdmVfY29uc3QuaHBwIiAyIDMKCm5hbWVzcGFjZSBib29zdCB7 CgoKCm5hbWVzcGFjZSBkZXRhaWwgewoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGJvb2wgaXNfdm9s PgpzdHJ1Y3QgcmVtb3ZlX2NvbnN0X2hlbHBlcgp7CiAgICB0eXBlZGVmIFQgdHlwZTsKfTsKCnRl bXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3QgcmVtb3ZlX2NvbnN0X2hlbHBlcjxULCB0cnVlPgp7 CiAgICB0eXBlZGVmIFQgdm9sYXRpbGUgdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K c3RydWN0IHJlbW92ZV9jb25zdF9pbXBsCnsKICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX2Nv bnN0X2hlbHBlcjwKICAgICAgICAgIHR5cGVuYW1lIGN2X3RyYWl0c19pbXA8VCo+Ojp1bnF1YWxp ZmllZF90eXBlCiAgICAgICAgLCA6OmJvb3N0Ojppc192b2xhdGlsZTxUPjo6dmFsdWUKICAgICAg ICA+Ojp0eXBlIHR5cGU7Cn07Cgp9CgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IHJl bW92ZV9jb25zdCB7IHR5cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjpyZW1vdmVfY29uc3RfaW1wbDxU Pjo6dHlwZSB0eXBlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCByZW1vdmVfY29u c3Q8VCY+IHsgdHlwZWRlZiBUJiB0eXBlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgc3RkOjpz aXplX3QgTiA+IHN0cnVjdCByZW1vdmVfY29uc3Q8VCBjb25zdFtOXT4geyB0eXBlZGVmIFQgdHlw ZVtOXTsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4gPiBzdHJ1Y3QgcmVt b3ZlX2NvbnN0PFQgY29uc3Qgdm9sYXRpbGVbTl0+IHsgdHlwZWRlZiBUIHZvbGF0aWxlIHR5cGVb Tl07IH07CgoKCgoKCgp9CgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0 L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X3VuZGVmLmhwcCIgMSAzCiMgNzAgIi9ob21l L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9jb25zdC5o cHAiIDIgMwojIDUzICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3Ry YWl0cy5ocHAiIDIgMwoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90 eXBlX3RyYWl0cy9yZW1vdmVfcG9pbnRlci5ocHAiIDEgMwojIDE3ICIvaG9tZS9jb21wYmlvL2Q5 NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfcG9pbnRlci5ocHAiIDMKIyAx ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwv dHlwZV90cmFpdF9kZWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1 ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfZGVmLmhwcCIgMwojIDEgIi9o b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1w bGF0ZV9hcml0eV9zcGVjLmhwcCIgMSAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs dWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X2RlZi5ocHAiIDIgMwojIDE4 ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVf cG9pbnRlci5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBU ID4gc3RydWN0IHJlbW92ZV9wb2ludGVyIHsgdHlwZWRlZiBUIHR5cGU7IH07CgoKdGVtcGxhdGU8 IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgcmVtb3ZlX3BvaW50ZXI8VCo+IHsgdHlwZWRlZiBUIHR5cGU7 IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IHJlbW92ZV9wb2ludGVyPFQqIGNvbnN0 PiB7IHR5cGVkZWYgVCB0eXBlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCByZW1v dmVfcG9pbnRlcjxUKiB2b2xhdGlsZT4geyB0eXBlZGVmIFQgdHlwZTsgfTsKdGVtcGxhdGU8IHR5 cGVuYW1lIFQgPiBzdHJ1Y3QgcmVtb3ZlX3BvaW50ZXI8VCogY29uc3Qgdm9sYXRpbGU+IHsgdHlw ZWRlZiBUIHR5cGU7IH07CgoKfQoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i b29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF91bmRlZi5ocHAiIDEgMwojIDMzICIv aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfcG9p bnRlci5ocHAiIDIgMwojIDU1ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90 eXBlX3RyYWl0cy5ocHAiIDIgMwoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i b29zdC90eXBlX3RyYWl0cy9yZW1vdmVfdm9sYXRpbGUuaHBwIiAxIDMKIyAyMiAiL2hvbWUvY29t cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX3ZvbGF0aWxlLmhw cCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz L2RldGFpbC90eXBlX3RyYWl0X2RlZi5ocHAiIDEgMwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1i bGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIiAz CiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0 YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29tcGJpby9kOTUt YmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfZGVmLmhwcCIg MiAzCiMgMjMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz L3JlbW92ZV92b2xhdGlsZS5ocHAiIDIgMwoKbmFtZXNwYWNlIGJvb3N0IHsKCgoKbmFtZXNwYWNl IGRldGFpbCB7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgYm9vbCBpc19jb25zdD4Kc3RydWN0IHJl bW92ZV92b2xhdGlsZV9oZWxwZXIKewogICAgdHlwZWRlZiBUIHR5cGU7Cn07Cgp0ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4Kc3RydWN0IHJlbW92ZV92b2xhdGlsZV9oZWxwZXI8VCx0cnVlPgp7CiAgICB0 eXBlZGVmIFQgY29uc3QgdHlwZTsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3QgcmVt b3ZlX3ZvbGF0aWxlX2ltcGwKewogICAgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfdm9sYXRpbGVf aGVscGVyPAogICAgICAgICAgdHlwZW5hbWUgY3ZfdHJhaXRzX2ltcDxUKj46OnVucXVhbGlmaWVk X3R5cGUKICAgICAgICAsIDo6Ym9vc3Q6OmlzX2NvbnN0PFQ+Ojp2YWx1ZQogICAgICAgID46OnR5 cGUgdHlwZTsKfTsKCn0KCgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgcmVtb3ZlX3Zv bGF0aWxlIHsgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OnJlbW92ZV92b2xhdGlsZV9pbXBsPFQ+ Ojp0eXBlIHR5cGU7IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IHJlbW92ZV92b2xh dGlsZTxUJj4geyB0eXBlZGVmIFQmIHR5cGU7IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBULCBzdGQ6 OnNpemVfdCBOID4gc3RydWN0IHJlbW92ZV92b2xhdGlsZTxUIHZvbGF0aWxlW05dPiB7IHR5cGVk ZWYgVCB0eXBlW05dOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTiA+IHN0 cnVjdCByZW1vdmVfdm9sYXRpbGU8VCBjb25zdCB2b2xhdGlsZVtOXT4geyB0eXBlZGVmIFQgY29u c3QgdHlwZVtOXTsgfTsKIyA2NyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv dHlwZV90cmFpdHMvcmVtb3ZlX3ZvbGF0aWxlLmhwcCIgMwp9CgojIDEgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X3VuZGVm LmhwcCIgMSAzCiMgNzAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVf dHJhaXRzL3JlbW92ZV92b2xhdGlsZS5ocHAiIDIgMwojIDU3ICIvaG9tZS9jb21wYmlvL2Q5NS1i bGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy5ocHAiIDIgMwojIDEgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL3R5cGVfd2l0aF9hbGlnbm1lbnQuaHBw IiAxIDMKIyAxMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFp dHMvdHlwZV93aXRoX2FsaWdubWVudC5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv aW5jbHVkZS9ib29zdC9tcGwvaWYuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxp L2luY2x1ZGUvYm9vc3QvbXBsL2lmLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9p bmNsdWRlL2Jvb3N0L21wbC9hdXhfL3ZhbHVlX3drbmQuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29t cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL2lmLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29t cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL2F1eF8vdm9pZF9zcGVjLmhwcCIgMSAzCiMg MjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhfL3ZvaWRfc3Bl Yy5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tcGwvbGFt YmRhX2Z3ZC5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z dC9tcGwvbGFtYmRhX2Z3ZC5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk ZS9ib29zdC9tcGwvYXV4Xy9sYW1iZGFfYXJpdHlfcGFyYW0uaHBwIiAxIDMKIyAyMSAiL2hvbWUv Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL2xhbWJkYV9md2QuaHBwIiAyIDMKCgpu YW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCAs IGxvbmcgQXJpdHkgPgpzdHJ1Y3QgbGFtYmRhOwoKCgoKfQp9CiMgMjEgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhfL3ZvaWRfc3BlYy5ocHAiIDIgMwojIDEgIi9o b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC92b2lkLmhwcCIgMSAzCiMgMjMg Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC92b2lkLmhwcCIgMwpuYW1l c3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnN0cnVjdCB2b2lkXzsKCnRlbXBsYXRlPCB0 eXBlbmFtZSBUID4Kc3RydWN0IGlzX3ZvaWRfCiAgICA6IGZhbHNlX2MKewoKCgp9OwoKdGVtcGxh dGU8PgpzdHJ1Y3QgaXNfdm9pZF88dm9pZF8+CiAgICA6IHRydWVfYwp7CgoKCn07Cgp9Cn0KIyAy MiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL2F1eF8vdm9pZF9zcGVj LmhwcCIgMiAzCgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9h dXhfL3ByZXByb2Nlc3Nvci9lbnVtLmhwcCIgMSAzCiMgMjQgIi9ob21lL2NvbXBiaW8vZDk1LWJs aS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhfL3ZvaWRfc3BlYy5ocHAiIDIgMwojIDEgIi9ob21lL2Nv bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9kZWZfcGFy YW1zX3RhaWwuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v c3QvbXBsL2F1eF8vcHJlcHJvY2Vzc29yL2RlZl9wYXJhbXNfdGFpbC5ocHAiIDMKIyAxICIvaG9t ZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tcGwvbGltaXRzL2FyaXR5LmhwcCIgMSAz CiMgMjEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhfL3ByZXBy b2Nlc3Nvci9kZWZfcGFyYW1zX3RhaWwuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1i bGkvaW5jbHVkZS9ib29zdC9tcGwvYXV4Xy9jb25maWcvZHRwLmhwcCIgMSAzCiMgMjIgIi9ob21l L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9kZWZf cGFyYW1zX3RhaWwuaHBwIiAyIDMKCgojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl L2Jvb3N0L3ByZXByb2Nlc3Nvci9pZGVudGl0eS5ocHAiIDEgMwojIDE2ICIvaG9tZS9jb21wYmlv L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9wcmVwcm9jZXNzb3IvaWRlbnRpdHkuaHBwIiAzCiMgMSAi L2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvcHJlcHJvY2Vzc29yL2ZhY2lsaXRp ZXMvaWRlbnRpdHkuaHBwIiAxIDMKIyAxOCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv Ym9vc3QvcHJlcHJvY2Vzc29yL2ZhY2lsaXRpZXMvaWRlbnRpdHkuaHBwIiAzCiMgMSAiL2hvbWUv Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvcHJlcHJvY2Vzc29yL2ZhY2lsaXRpZXMvZW1w dHkuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvcHJl cHJvY2Vzc29yL2ZhY2lsaXRpZXMvaWRlbnRpdHkuaHBwIiAyIDMKIyAxNyAiL2hvbWUvY29tcGJp by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvcHJlcHJvY2Vzc29yL2lkZW50aXR5LmhwcCIgMiAzCiMg MjUgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nl c3Nvci9kZWZfcGFyYW1zX3RhaWwuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv aW5jbHVkZS9ib29zdC9wcmVwcm9jZXNzb3IvZW1wdHkuaHBwIiAxIDMKIyAyNiAiL2hvbWUvY29t cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc29yL2RlZl9wYXJh bXNfdGFpbC5ocHAiIDIgMwoKCgoKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk ZS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvZmlsdGVyX3BhcmFtcy5ocHAiIDEgMwojIDM0 ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNz b3IvZGVmX3BhcmFtc190YWlsLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu Y2x1ZGUvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc29yL3N1Yi5ocHAiIDEgMwojIDIwICIvaG9t ZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3Ivc3Vi LmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhf L3ByZXByb2Nlc3Nvci90dXBsZS5ocHAiIDEgMwojIDIxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv aW5jbHVkZS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3Ivc3ViLmhwcCIgMiAzCiMgMzUgIi9o b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9k ZWZfcGFyYW1zX3RhaWwuaHBwIiAyIDMKIyAyNSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1 ZGUvYm9vc3QvbXBsL2F1eF8vdm9pZF9zcGVjLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29tcGJpby9k OTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL2F1eF8vYXJpdHkuaHBwIiAxIDMKIyAyNiAiL2hvbWUv Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL2F1eF8vdm9pZF9zcGVjLmhwcCIgMiAz CiMgMjEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L21wbC9pZi5ocHAiIDIg MwoKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCgoKdGVtcGxhdGU8CiAgICAg IGJvb2wgQwogICAgLCB0eXBlbmFtZSBUMQogICAgLCB0eXBlbmFtZSBUMgogICAgPgpzdHJ1Y3Qg aWZfYwp7CiAgICB0eXBlZGVmIFQxIHR5cGU7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUg VDEKICAgICwgdHlwZW5hbWUgVDIKICAgID4Kc3RydWN0IGlmX2M8ZmFsc2UsVDEsVDI+CnsKICAg IHR5cGVkZWYgVDIgdHlwZTsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBDID0gdm9pZF8K ICAgICwgdHlwZW5hbWUgVDEgPSB2b2lkXwogICAgLCB0eXBlbmFtZSBUMiA9IHZvaWRfCiAgICA+ CnN0cnVjdCBpZl8KewogICAgdHlwZWRlZiB0eXBlbmFtZSBpZl9jPAogICAgICAgICAgQzo6dmFs dWUKICAgICAgICAsIFQxCiAgICAgICAgLCBUMgogICAgICAgID46OnR5cGUgdHlwZTsKCiAgIAp9 OwojIDE1OCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXBsL2lmLmhwcCIg Mwp0ZW1wbGF0ZTw+IHN0cnVjdCBpZl88IHZvaWRfLHZvaWRfLHZvaWRfID4geyB0ZW1wbGF0ZTwg dHlwZW5hbWUgVDEsdHlwZW5hbWUgVDIsdHlwZW5hbWUgVDMgLCB0eXBlbmFtZSBUNCA9dm9pZF8g LHR5cGVuYW1lIFQ1ID12b2lkXyA+IHN0cnVjdCBhcHBseSA6IGlmXzwgVDEsVDIsVDMgPiB7IH07 IH07IHRlbXBsYXRlPD4gc3RydWN0IGxhbWJkYTwgaWZfPCB2b2lkXyx2b2lkXyx2b2lkXyA+ICwg LTEgPiB7IHR5cGVkZWYgaWZfPCB2b2lkXyx2b2lkXyx2b2lkXyA+IHR5cGU7IH07IG5hbWVzcGFj ZSBhdXggeyB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEsdHlwZW5hbWUgVDIsdHlwZW5hbWUgVDMgPiBz dHJ1Y3QgdGVtcGxhdGVfYXJpdHk8IGlmXzwgVDEsVDIsVDMgPiA+IHsgc3RhdGljIGNvbnN0IGlu dCB2YWx1ZSA9IDM7IH07IHRlbXBsYXRlPD4gc3RydWN0IHRlbXBsYXRlX2FyaXR5PCBpZl88IHZv aWRfLHZvaWRfLHZvaWRfID4gPiB7IHN0YXRpYyBjb25zdCBpbnQgdmFsdWUgPSAtMTsgfTsgfQoK fQp9CiMgMTIgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRz L3R5cGVfd2l0aF9hbGlnbm1lbnQuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv aW5jbHVkZS9ib29zdC9wcmVwcm9jZXNzb3IvbGlzdC9mb3JfZWFjaF9pLmhwcCIgMSAzCiMgMTgg Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci9saXN0L2Zv cl9lYWNoX2kuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv cHJlcHJvY2Vzc29yL2FyaXRobWV0aWMvaW5jLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci9saXN0L2Zvcl9lYWNoX2kuaHBwIiAy IDMKCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvcHJlcHJvY2Vzc29y L2xpc3QvYWR0LmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv b3N0L3ByZXByb2Nlc3Nvci9saXN0L2FkdC5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1i bGkvaW5jbHVkZS9ib29zdC9wcmVwcm9jZXNzb3IvZGV0YWlsL2lzX2JpbmFyeS5ocHAiIDEgMwoj IDE3ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9wcmVwcm9jZXNzb3IvZGV0 YWlsL2lzX2JpbmFyeS5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i b29zdC9wcmVwcm9jZXNzb3IvZGV0YWlsL2NoZWNrLmhwcCIgMSAzCiMgMTggIi9ob21lL2NvbXBi aW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci9kZXRhaWwvaXNfYmluYXJ5Lmhw cCIgMiAzCiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nl c3Nvci9saXN0L2FkdC5ocHAiIDIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl L2Jvb3N0L3ByZXByb2Nlc3Nvci9sb2dpY2FsL2NvbXBsLmhwcCIgMSAzCiMgMjEgIi9ob21lL2Nv bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci9saXN0L2FkdC5ocHAiIDIg MwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci90 dXBsZS9lYXQuaHBwIiAxIDMKIyAyMiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v c3QvcHJlcHJvY2Vzc29yL2xpc3QvYWR0LmhwcCIgMiAzCiMgMjEgIi9ob21lL2NvbXBiaW8vZDk1 LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci9saXN0L2Zvcl9lYWNoX2kuaHBwIiAyIDMK IyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9wcmVwcm9jZXNzb3IvcmVw ZXRpdGlvbi9mb3IuaHBwIiAxIDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv Ym9vc3QvcHJlcHJvY2Vzc29yL3JlcGV0aXRpb24vZm9yLmhwcCIgMwojIDEgIi9ob21lL2NvbXBi aW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci9kZWJ1Zy9lcnJvci5ocHAiIDEg MwojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9wcmVwcm9jZXNzb3Iv cmVwZXRpdGlvbi9mb3IuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk ZS9ib29zdC9wcmVwcm9jZXNzb3IvZGV0YWlsL2F1dG9fcmVjLmhwcCIgMSAzCiMgMTYgIi9ob21l L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci9kZXRhaWwvYXV0b19y ZWMuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvcHJlcHJv Y2Vzc29yL2NvbnRyb2wvaWlmLmhwcCIgMSAzCiMgMTcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9p bmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci9kZXRhaWwvYXV0b19yZWMuaHBwIiAyIDMKIyAyMSAi L2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvcHJlcHJvY2Vzc29yL3JlcGV0aXRp b24vZm9yLmhwcCIgMiAzCiMgNDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0 L3ByZXByb2Nlc3Nvci9yZXBldGl0aW9uL2Zvci5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5 NS1ibGkvaW5jbHVkZS9ib29zdC9wcmVwcm9jZXNzb3IvcmVwZXRpdGlvbi9kZXRhaWwvZm9yLmhw cCIgMSAzCiMgMTggIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nl c3Nvci9yZXBldGl0aW9uL2RldGFpbC9mb3IuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUt YmxpL2luY2x1ZGUvYm9vc3QvcHJlcHJvY2Vzc29yL2NvbnRyb2wvZXhwcl9paWYuaHBwIiAxIDMK IyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvcHJlcHJvY2Vzc29yL3Jl cGV0aXRpb24vZGV0YWlsL2Zvci5ocHAiIDIgMwoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv aW5jbHVkZS9ib29zdC9wcmVwcm9jZXNzb3IvbG9naWNhbC9ib29sLmhwcCIgMSAzCiMgMjEgIi9o b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci9yZXBldGl0aW9u L2RldGFpbC9mb3IuaHBwIiAyIDMKIyA0MiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv Ym9vc3QvcHJlcHJvY2Vzc29yL3JlcGV0aXRpb24vZm9yLmhwcCIgMiAzCiMgMjIgIi9ob21lL2Nv bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3ByZXByb2Nlc3Nvci9saXN0L2Zvcl9lYWNoX2ku aHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9wcmVwcm9j ZXNzb3IvdHVwbGUvZWxlbS5ocHAiIDEgMwojIDIzICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j bHVkZS9ib29zdC9wcmVwcm9jZXNzb3IvbGlzdC9mb3JfZWFjaF9pLmhwcCIgMiAzCiMgMSAiL2hv bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvcHJlcHJvY2Vzc29yL3R1cGxlL3JlbS5o cHAiIDEgMwojIDI0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9wcmVwcm9j ZXNzb3IvbGlzdC9mb3JfZWFjaF9pLmhwcCIgMiAzCiMgMTMgIi9ob21lL2NvbXBiaW8vZDk1LWJs aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL3R5cGVfd2l0aF9hbGlnbm1lbnQuaHBwIiAyIDMK IyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9wcmVwcm9jZXNzb3IvdHVw bGUvdG9fbGlzdC5ocHAiIDEgMwojIDE0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9i b29zdC90eXBlX3RyYWl0cy90eXBlX3dpdGhfYWxpZ25tZW50LmhwcCIgMiAzCgoKIyAxICIvaG9t ZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9zdGF0aWNfYXNzZXJ0LmhwcCIgMSAzCiMg MjYgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3N0YXRpY19hc3NlcnQuaHBw IiAzCm5hbWVzcGFjZSBib29zdHsKCgp0ZW1wbGF0ZSA8Ym9vbCB4PiBzdHJ1Y3QgU1RBVElDX0FT U0VSVElPTl9GQUlMVVJFOwoKdGVtcGxhdGUgPD4gc3RydWN0IFNUQVRJQ19BU1NFUlRJT05fRkFJ TFVSRTx0cnVlPiB7IGVudW0geyB2YWx1ZSA9IDEgfTsgfTsKCgp0ZW1wbGF0ZTxpbnQgeD4gc3Ry dWN0IHN0YXRpY19hc3NlcnRfdGVzdHt9OwoKfQojIDE3ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv aW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy90eXBlX3dpdGhfYWxpZ25tZW50LmhwcCIgMiAzCiMg MjYgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL3R5cGVf d2l0aF9hbGlnbm1lbnQuaHBwIiAzCm5hbWVzcGFjZSBib29zdCB7CgpuYW1lc3BhY2UgZGV0YWls IHsKCmNsYXNzIGFsaWdubWVudF9kdW1teTsKdHlwZWRlZiB2b2lkICgqZnVuY3Rpb25fcHRyKSgp Owp0eXBlZGVmIGludCAoYWxpZ25tZW50X2R1bW15OjoqbWVtYmVyX3B0cik7CnR5cGVkZWYgaW50 IChhbGlnbm1lbnRfZHVtbXk6OiptZW1iZXJfZnVuY3Rpb25fcHRyKSgpOwojIDQ2ICIvaG9tZS9j b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlX3RyYWl0cy90eXBlX3dpdGhfYWxpZ25t ZW50LmhwcCIgMwp0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgdGFyZ2V0Pgp1bmlvbiBsb3dlcl9hbGln bm1lbnQKewogICAgdHlwZW5hbWUgbXBsOjppZl9jPCBhbGlnbm1lbnRfb2Y8Y2hhcj46OnZhbHVl IDw9IHRhcmdldCwgY2hhciwgY2hhcj46OnR5cGUgdDA7IHR5cGVuYW1lIG1wbDo6aWZfYzwgYWxp Z25tZW50X29mPHNob3J0Pjo6dmFsdWUgPD0gdGFyZ2V0LCBzaG9ydCwgY2hhcj46OnR5cGUgdDE7 IHR5cGVuYW1lIG1wbDo6aWZfYzwgYWxpZ25tZW50X29mPGludD46OnZhbHVlIDw9IHRhcmdldCwg aW50LCBjaGFyPjo6dHlwZSB0MjsgdHlwZW5hbWUgbXBsOjppZl9jPCBhbGlnbm1lbnRfb2Y8bG9u Zz46OnZhbHVlIDw9IHRhcmdldCwgbG9uZywgY2hhcj46OnR5cGUgdDM7IHR5cGVuYW1lIG1wbDo6 aWZfYzwgYWxpZ25tZW50X29mPGZsb2F0Pjo6dmFsdWUgPD0gdGFyZ2V0LCBmbG9hdCwgY2hhcj46 OnR5cGUgdDQ7IHR5cGVuYW1lIG1wbDo6aWZfYzwgYWxpZ25tZW50X29mPGRvdWJsZT46OnZhbHVl IDw9IHRhcmdldCwgZG91YmxlLCBjaGFyPjo6dHlwZSB0NTsgdHlwZW5hbWUgbXBsOjppZl9jPCBh bGlnbm1lbnRfb2Y8bG9uZyBkb3VibGU+Ojp2YWx1ZSA8PSB0YXJnZXQsIGxvbmcgZG91YmxlLCBj aGFyPjo6dHlwZSB0NjsgdHlwZW5hbWUgbXBsOjppZl9jPCBhbGlnbm1lbnRfb2Y8dm9pZCo+Ojp2 YWx1ZSA8PSB0YXJnZXQsIHZvaWQqLCBjaGFyPjo6dHlwZSB0NzsgdHlwZW5hbWUgbXBsOjppZl9j PCBhbGlnbm1lbnRfb2Y8ZnVuY3Rpb25fcHRyPjo6dmFsdWUgPD0gdGFyZ2V0LCBmdW5jdGlvbl9w dHIsIGNoYXI+Ojp0eXBlIHQ4OyB0eXBlbmFtZSBtcGw6OmlmX2M8IGFsaWdubWVudF9vZjxtZW1i ZXJfcHRyPjo6dmFsdWUgPD0gdGFyZ2V0LCBtZW1iZXJfcHRyLCBjaGFyPjo6dHlwZSB0OTsgdHlw ZW5hbWUgbXBsOjppZl9jPCBhbGlnbm1lbnRfb2Y8bWVtYmVyX2Z1bmN0aW9uX3B0cj46OnZhbHVl IDw9IHRhcmdldCwgbWVtYmVyX2Z1bmN0aW9uX3B0ciwgY2hhcj46OnR5cGUgdDEwOwoKCgoKfTsK CnVuaW9uIG1heF9hbGlnbgp7CiAgICBjaGFyIHQwOyBzaG9ydCB0MTsgaW50IHQyOyBsb25nIHQz OyBmbG9hdCB0NDsgZG91YmxlIHQ1OyBsb25nIGRvdWJsZSB0Njsgdm9pZCogdDc7IGZ1bmN0aW9u X3B0ciB0ODsgbWVtYmVyX3B0ciB0OTsgbWVtYmVyX2Z1bmN0aW9uX3B0ciB0MTA7CgoKCgp9OwoK CgoKCnRlbXBsYXRlPGludCBUQWxpZ24sIGludCBBbGlnbj4Kc3RydWN0IGlzX2FsaWduZWQKewog ICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAoVEFsaWduID49IEFsaWduKSAmIChUQWxpZ24g JSBBbGlnbiA9PSAwKTsKCgp9OwoKfQoKCgp0ZW1wbGF0ZSA8aW50IEFsaWduPgpjbGFzcyB0eXBl X3dpdGhfYWxpZ25tZW50CnsKICAgIHR5cGVkZWYgZGV0YWlsOjpsb3dlcl9hbGlnbm1lbnQ8QWxp Z24+IHQxOwogICAgdHlwZWRlZiB0eXBlbmFtZSBtcGw6OmlmX2M8CiAgICAgICAgICA6OmJvb3N0 OjpkZXRhaWw6OmlzX2FsaWduZWQ8IDo6Ym9vc3Q6OmFsaWdubWVudF9vZjx0MT46OnZhbHVlLEFs aWduID46OnZhbHVlCiAgICAgICAgLCB0MQogICAgICAgICwgZGV0YWlsOjptYXhfYWxpZ24KICAg ICAgICA+Ojp0eXBlIGFsaWduX3Q7CgogICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGZvdW5k ID0gYWxpZ25tZW50X29mPGFsaWduX3Q+Ojp2YWx1ZTsKCiAgICB0eXBlZGVmIDo6Ym9vc3Q6OnN0 YXRpY19hc3NlcnRfdGVzdDwgc2l6ZW9mKDo6Ym9vc3Q6OlNUQVRJQ19BU1NFUlRJT05fRkFJTFVS RTwgKGJvb2wpKCBmb3VuZCA+PSBBbGlnbiApID4pPiBib29zdF9zdGF0aWNfYXNzZXJ0X3R5cGVk ZWZfOTM7CiAgICB0eXBlZGVmIDo6Ym9vc3Q6OnN0YXRpY19hc3NlcnRfdGVzdDwgc2l6ZW9mKDo6 Ym9vc3Q6OlNUQVRJQ19BU1NFUlRJT05fRkFJTFVSRTwgKGJvb2wpKCBmb3VuZCAlIEFsaWduID09 IDAgKSA+KT4gYm9vc3Rfc3RhdGljX2Fzc2VydF90eXBlZGVmXzk0OwoKIHB1YmxpYzoKICAgIHR5 cGVkZWYgYWxpZ25fdCB0eXBlOwp9OwoKfQojIDU4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j bHVkZS9ib29zdC90eXBlX3RyYWl0cy5ocHAiIDIgMwojIDYxICIvaG9tZS9jb21wYmlvL2Q5NS1i bGkvaW5jbHVkZS9ib29zdC9kZXRhaWwvaXRlcmF0b3IuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21w YmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9pdGVyYXRvci5ocHAiIDEgMwojIDE4ICIvaG9tZS9j b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9pdGVyYXRvci5ocHAiIDMKIyAxICIvdXNyL2xv Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pdGVyYXRvciIgMSAzCiMgNjUgIi91c3Iv bG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2l0ZXJhdG9yIiAzCgoKCgoKIyAxICIv dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9vc3RyZWFtIiAxIDMKIyA0NCAi L3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvb3N0cmVhbSIgMwoKIyAxICIv dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pb3MiIDEgMwojIDQzICIvdXNy L2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pb3MiIDMKCgoKCgojIDEgIi91c3Iv bG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlZndkLmgiIDEgMwoj IDQ0ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3 ZC5oIiAzCgoKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2 LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAxIDMKIyAzNiAiL3Vzci9sb2NhbC92b2wv Z2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUu aCIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2Nsb2NhbGUi IDEgMwojIDQ4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jbG9jYWxl IiAzCgojIDEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9s b2NhbGUuaCIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUv bG9jYWxlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAxIDMKIyAyNyAi L3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDMKZW51bQp7CiAgX19MQ19DVFlQRSA9IDAsCiAg X19MQ19OVU1FUklDID0gMSwKICBfX0xDX1RJTUUgPSAyLAogIF9fTENfQ09MTEFURSA9IDMsCiAg X19MQ19NT05FVEFSWSA9IDQsCiAgX19MQ19NRVNTQUdFUyA9IDUsCiAgX19MQ19BTEwgPSA2LAog IF9fTENfUEFQRVIgPSA3LAogIF9fTENfTkFNRSA9IDgsCiAgX19MQ19BRERSRVNTID0gOSwKICBf X0xDX1RFTEVQSE9ORSA9IDEwLAogIF9fTENfTUVBU1VSRU1FTlQgPSAxMSwKICBfX0xDX0lERU5U SUZJQ0FUSU9OID0gMTIKfTsKIyAzMSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAyIDMKCmV4dGVy biAiQyIgewojIDUyICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKc3RydWN0IGxjb252CnsKCgog IGNoYXIgKmRlY2ltYWxfcG9pbnQ7CiAgY2hhciAqdGhvdXNhbmRzX3NlcDsKCgoKCgogIGNoYXIg Kmdyb3VwaW5nOwoKCgoKCiAgY2hhciAqaW50X2N1cnJfc3ltYm9sOwogIGNoYXIgKmN1cnJlbmN5 X3N5bWJvbDsKICBjaGFyICptb25fZGVjaW1hbF9wb2ludDsKICBjaGFyICptb25fdGhvdXNhbmRz X3NlcDsKICBjaGFyICptb25fZ3JvdXBpbmc7CiAgY2hhciAqcG9zaXRpdmVfc2lnbjsKICBjaGFy ICpuZWdhdGl2ZV9zaWduOwogIGNoYXIgaW50X2ZyYWNfZGlnaXRzOwogIGNoYXIgZnJhY19kaWdp dHM7CgogIGNoYXIgcF9jc19wcmVjZWRlczsKCiAgY2hhciBwX3NlcF9ieV9zcGFjZTsKCiAgY2hh ciBuX2NzX3ByZWNlZGVzOwoKICBjaGFyIG5fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIgcF9z aWduX3Bvc247CiAgY2hhciBuX3NpZ25fcG9zbjsKCgogIGNoYXIgaW50X3BfY3NfcHJlY2VkZXM7 CgogIGNoYXIgaW50X3Bfc2VwX2J5X3NwYWNlOwoKICBjaGFyIGludF9uX2NzX3ByZWNlZGVzOwoK ICBjaGFyIGludF9uX3NlcF9ieV9zcGFjZTsKCgoKCgoKICBjaGFyIGludF9wX3NpZ25fcG9zbjsK ICBjaGFyIGludF9uX3NpZ25fcG9zbjsKIyAxMTkgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwp9 OwoKCgpleHRlcm4gY2hhciAqc2V0bG9jYWxlIChpbnQgX19jYXRlZ29yeSwgX19jb25zdCBjaGFy ICpfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBsY29udiAqbG9jYWxlY29udiAo dm9pZCkgdGhyb3cgKCk7CiMgMTQ5ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKZXh0ZXJuIF9f bG9jYWxlX3QgX19uZXdsb2NhbGUgKGludCBfX2NhdGVnb3J5X21hc2ssIF9fY29uc3QgY2hhciAq X19sb2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fYmFz ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBfX2xvY2FsZV90IF9fZHVwbG9jYWxlIChfX2xvY2FsZV90 IF9fZGF0YXNldCkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIF9fZnJlZWxvY2FsZSAoX19sb2Nh bGVfdCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCn0KIyA1MCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMu Mi9pbmNsdWRlL2MrKy8zLjIvY2xvY2FsZSIgMiAzCgoKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNp bmcgOjpsY29udjsKICB1c2luZyA6OnNldGxvY2FsZTsKICB1c2luZyA6OmxvY2FsZWNvbnY7Cn0K IyAzNyAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51 eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgi IDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9u bF90eXBlcy5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL25sX3R5cGVzLmgiIDMKZXh0ZXJuICJD IiB7CgoKdHlwZWRlZiB2b2lkICpubF9jYXRkOwoKCnR5cGVkZWYgaW50IG5sX2l0ZW07CgoKZXh0 ZXJuIG5sX2NhdGQgY2F0b3BlbiAoX19jb25zdCBjaGFyICpfX2NhdF9uYW1lLCBpbnQgX19mbGFn KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmNhdGdldHMgKG5sX2NhdGQgX19jYXRhbG9nLCBp bnQgX19zZXQsIGludCBfX251bWJlciwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2F0Y2xvc2UgKG5sX2NhdGQgX19j YXRhbG9nKSB0aHJvdyAoKTsKCn0KIyAyNSAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDIgMwoK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9s YW5naW5mby5oIiAyIDMKCgpleHRlcm4gIkMiIHsKIyA0MyAiL3Vzci9pbmNsdWRlL2xhbmdpbmZv LmgiIDMKZW51bQp7CgoKCiAgQUJEQVlfMSA9ICgoKF9fTENfVElNRSkgPDwgMTYpIHwgKDApKSwK CiAgQUJEQVlfMiwKCiAgQUJEQVlfMywKCiAgQUJEQVlfNCwKCiAgQUJEQVlfNSwKCiAgQUJEQVlf NiwKCiAgQUJEQVlfNywKCgoKICBEQVlfMSwKCiAgREFZXzIsCgogIERBWV8zLAoKICBEQVlfNCwK CiAgREFZXzUsCgogIERBWV82LAoKICBEQVlfNywKCgoKICBBQk1PTl8xLAoKICBBQk1PTl8yLAoK ICBBQk1PTl8zLAoKICBBQk1PTl80LAoKICBBQk1PTl81LAoKICBBQk1PTl82LAoKICBBQk1PTl83 LAoKICBBQk1PTl84LAoKICBBQk1PTl85LAoKICBBQk1PTl8xMCwKCiAgQUJNT05fMTEsCgogIEFC TU9OXzEyLAoKCgogIE1PTl8xLAoKICBNT05fMiwKCiAgTU9OXzMsCgogIE1PTl80LAoKICBNT05f NSwKCiAgTU9OXzYsCgogIE1PTl83LAoKICBNT05fOCwKCiAgTU9OXzksCgogIE1PTl8xMCwKCiAg TU9OXzExLAoKICBNT05fMTIsCgoKICBBTV9TVFIsCgogIFBNX1NUUiwKCgogIERfVF9GTVQsCgog IERfRk1ULAoKICBUX0ZNVCwKCiAgVF9GTVRfQU1QTSwKCgogIEVSQSwKCiAgX19FUkFfWUVBUiwK CgoKICBFUkFfRF9GTVQsCgogIEFMVF9ESUdJVFMsCgogIEVSQV9EX1RfRk1ULAoKICBFUkFfVF9G TVQsCgoKICBfTkxfVElNRV9FUkFfTlVNX0VOVFJJRVMsCiAgX05MX1RJTUVfRVJBX0VOVFJJRVMs CgogIF9OTF9XQUJEQVlfMSwKICBfTkxfV0FCREFZXzIsCiAgX05MX1dBQkRBWV8zLAogIF9OTF9X QUJEQVlfNCwKICBfTkxfV0FCREFZXzUsCiAgX05MX1dBQkRBWV82LAogIF9OTF9XQUJEQVlfNywK CgogIF9OTF9XREFZXzEsCiAgX05MX1dEQVlfMiwKICBfTkxfV0RBWV8zLAogIF9OTF9XREFZXzQs CiAgX05MX1dEQVlfNSwKICBfTkxfV0RBWV82LAogIF9OTF9XREFZXzcsCgoKICBfTkxfV0FCTU9O XzEsCiAgX05MX1dBQk1PTl8yLAogIF9OTF9XQUJNT05fMywKICBfTkxfV0FCTU9OXzQsCiAgX05M X1dBQk1PTl81LAogIF9OTF9XQUJNT05fNiwKICBfTkxfV0FCTU9OXzcsCiAgX05MX1dBQk1PTl84 LAogIF9OTF9XQUJNT05fOSwKICBfTkxfV0FCTU9OXzEwLAogIF9OTF9XQUJNT05fMTEsCiAgX05M X1dBQk1PTl8xMiwKCgogIF9OTF9XTU9OXzEsCiAgX05MX1dNT05fMiwKICBfTkxfV01PTl8zLAog IF9OTF9XTU9OXzQsCiAgX05MX1dNT05fNSwKICBfTkxfV01PTl82LAogIF9OTF9XTU9OXzcsCiAg X05MX1dNT05fOCwKICBfTkxfV01PTl85LAogIF9OTF9XTU9OXzEwLAogIF9OTF9XTU9OXzExLAog IF9OTF9XTU9OXzEyLAoKICBfTkxfV0FNX1NUUiwKICBfTkxfV1BNX1NUUiwKCiAgX05MX1dEX1Rf Rk1ULAogIF9OTF9XRF9GTVQsCiAgX05MX1dUX0ZNVCwKICBfTkxfV1RfRk1UX0FNUE0sCgogIF9O TF9XRVJBX1lFQVIsCiAgX05MX1dFUkFfRF9GTVQsCiAgX05MX1dBTFRfRElHSVRTLAogIF9OTF9X RVJBX0RfVF9GTVQsCiAgX05MX1dFUkFfVF9GTVQsCgogIF9OTF9USU1FX1dFRUtfTkRBWVMsCiAg X05MX1RJTUVfV0VFS18xU1REQVksCiAgX05MX1RJTUVfV0VFS18xU1RXRUVLLAogIF9OTF9USU1F X0ZJUlNUX1dFRUtEQVksCiAgX05MX1RJTUVfRklSU1RfV09SS0RBWSwKICBfTkxfVElNRV9DQUxf RElSRUNUSU9OLAogIF9OTF9USU1FX1RJTUVaT05FLAoKICBfREFURV9GTVQsCgogIF9OTF9XX0RB VEVfRk1ULAoKICBfTkxfVElNRV9DT0RFU0VULAoKICBfTkxfTlVNX0xDX1RJTUUsCgoKCgogIF9O TF9DT0xMQVRFX05SVUxFUyA9ICgoKF9fTENfQ09MTEFURSkgPDwgMTYpIHwgKDApKSwKICBfTkxf Q09MTEFURV9SVUxFU0VUUywKICBfTkxfQ09MTEFURV9UQUJMRU1CLAogIF9OTF9DT0xMQVRFX1dF SUdIVE1CLAogIF9OTF9DT0xMQVRFX0VYVFJBTUIsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RNQiwK ICBfTkxfQ09MTEFURV9HQVAxLAogIF9OTF9DT0xMQVRFX0dBUDIsCiAgX05MX0NPTExBVEVfR0FQ MywKICBfTkxfQ09MTEFURV9UQUJMRVdDLAogIF9OTF9DT0xMQVRFX1dFSUdIVFdDLAogIF9OTF9D T0xMQVRFX0VYVFJBV0MsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RXQywKICBfTkxfQ09MTEFURV9T WU1CX0hBU0hfU0laRU1CLAogIF9OTF9DT0xMQVRFX1NZTUJfVEFCTEVNQiwKICBfTkxfQ09MTEFU RV9TWU1CX0VYVFJBTUIsCiAgX05MX0NPTExBVEVfQ09MTFNFUU1CLAogIF9OTF9DT0xMQVRFX0NP TExTRVFXQywKICBfTkxfQ09MTEFURV9DT0RFU0VULAogIF9OTF9OVU1fTENfQ09MTEFURSwKCgoK CiAgX05MX0NUWVBFX0NMQVNTID0gKCgoX19MQ19DVFlQRSkgPDwgMTYpIHwgKDApKSwKICBfTkxf Q1RZUEVfVE9VUFBFUiwKICBfTkxfQ1RZUEVfR0FQMSwKICBfTkxfQ1RZUEVfVE9MT1dFUiwKICBf TkxfQ1RZUEVfR0FQMiwKICBfTkxfQ1RZUEVfQ0xBU1MzMiwKICBfTkxfQ1RZUEVfR0FQMywKICBf TkxfQ1RZUEVfR0FQNCwKICBfTkxfQ1RZUEVfR0FQNSwKICBfTkxfQ1RZUEVfR0FQNiwKICBfTkxf Q1RZUEVfQ0xBU1NfTkFNRVMsCiAgX05MX0NUWVBFX01BUF9OQU1FUywKICBfTkxfQ1RZUEVfV0lE VEgsCiAgX05MX0NUWVBFX01CX0NVUl9NQVgsCiAgX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKICBD T0RFU0VUID0gX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKCiAgX05MX0NUWVBFX1RPVVBQRVIzMiwK ICBfTkxfQ1RZUEVfVE9MT1dFUjMyLAogIF9OTF9DVFlQRV9DTEFTU19PRkZTRVQsCiAgX05MX0NU WVBFX01BUF9PRkZTRVQsCiAgX05MX0NUWVBFX0lORElHSVRTX01CX0xFTiwKICBfTkxfQ1RZUEVf SU5ESUdJVFMwX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzFfTUIsCiAgX05MX0NUWVBFX0lORElH SVRTMl9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMzX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzRf TUIsCiAgX05MX0NUWVBFX0lORElHSVRTNV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM2X01CLAog IF9OTF9DVFlQRV9JTkRJR0lUUzdfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTOF9NQiwKICBfTkxf Q1RZUEVfSU5ESUdJVFM5X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUU19XQ19MRU4sCiAgX05MX0NU WVBFX0lORElHSVRTMF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFMxX1dDLAogIF9OTF9DVFlQRV9J TkRJR0lUUzJfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTM19XQywKICBfTkxfQ1RZUEVfSU5ESUdJ VFM0X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzVfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTNl9X QywKICBfTkxfQ1RZUEVfSU5ESUdJVFM3X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzhfV0MsCiAg X05MX0NUWVBFX0lORElHSVRTOV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQwX01CLAogIF9OTF9D VFlQRV9PVVRESUdJVDFfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUMl9NQiwKICBfTkxfQ1RZUEVf T1VURElHSVQzX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDRfTUIsCiAgX05MX0NUWVBFX09VVERJ R0lUNV9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ2X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDdf TUIsCiAgX05MX0NUWVBFX09VVERJR0lUOF9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ5X01CLAog IF9OTF9DVFlQRV9PVVRESUdJVDBfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUMV9XQywKICBfTkxf Q1RZUEVfT1VURElHSVQyX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDNfV0MsCiAgX05MX0NUWVBF X09VVERJR0lUNF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ1X1dDLAogIF9OTF9DVFlQRV9PVVRE SUdJVDZfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUN19XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ4 X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDlfV0MsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RBQl9T SVpFLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX0lEWCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRf RlJPTV9UQkwsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX0lEWCwKICBfTkxfQ1RZUEVfVFJBTlNM SVRfVE9fVEJMLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkdfTEVOLAogIF9O TF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkcsCiAgX05MX0NUWVBFX1RSQU5TTElUX0lH Tk9SRV9MRU4sCiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRSwKICBfTkxfQ1RZUEVfRVhUUkFf TUFQXzEsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8yLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMywK ICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzQsCiAgX05MX0NUWVBFX0VYVFJBX01BUF81LAogIF9OTF9D VFlQRV9FWFRSQV9NQVBfNiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzcsCiAgX05MX0NUWVBFX0VY VFJBX01BUF84LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfOSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQ XzEwLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTEsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xMiwK ICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEzLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTQsCiAgX05M X05VTV9MQ19DVFlQRSwKCgoKCiAgX19JTlRfQ1VSUl9TWU1CT0wgPSAoKChfX0xDX01PTkVUQVJZ KSA8PCAxNikgfCAoMCkpLAoKCgogIF9fQ1VSUkVOQ1lfU1lNQk9MLAoKCgogIF9fTU9OX0RFQ0lN QUxfUE9JTlQsCgoKCiAgX19NT05fVEhPVVNBTkRTX1NFUCwKCgoKICBfX01PTl9HUk9VUElORywK CgoKICBfX1BPU0lUSVZFX1NJR04sCgoKCiAgX19ORUdBVElWRV9TSUdOLAoKCgogIF9fSU5UX0ZS QUNfRElHSVRTLAoKCgogIF9fRlJBQ19ESUdJVFMsCgoKCiAgX19QX0NTX1BSRUNFREVTLAoKCgog IF9fUF9TRVBfQllfU1BBQ0UsCgoKCiAgX19OX0NTX1BSRUNFREVTLAoKCgogIF9fTl9TRVBfQllf U1BBQ0UsCgoKCiAgX19QX1NJR05fUE9TTiwKCgoKICBfX05fU0lHTl9QT1NOLAoKCgogIF9OTF9N T05FVEFSWV9DUk5DWVNUUiwKCiAgX19JTlRfUF9DU19QUkVDRURFUywKCgoKICBfX0lOVF9QX1NF UF9CWV9TUEFDRSwKCgoKICBfX0lOVF9OX0NTX1BSRUNFREVTLAoKCgogIF9fSU5UX05fU0VQX0JZ X1NQQUNFLAoKCgogIF9fSU5UX1BfU0lHTl9QT1NOLAoKCgogIF9fSU5UX05fU0lHTl9QT1NOLAoK CgogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0NVUlJfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9f Q1VSUkVOQ1lfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0ZSQUNfRElHSVRTLAogIF9O TF9NT05FVEFSWV9EVU9fRlJBQ19ESUdJVFMsCiAgX05MX01PTkVUQVJZX0RVT19QX0NTX1BSRUNF REVTLAogIF9OTF9NT05FVEFSWV9EVU9fUF9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RV T19OX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fTl9TRVBfQllfU1BBQ0UsCiAgX05M X01PTkVUQVJZX0RVT19JTlRfUF9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9Q X1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX0NTX1BSRUNFREVTLAogIF9O TF9NT05FVEFSWV9EVU9fSU5UX05fU0VQX0JZX1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9fUF9T SUdOX1BPU04sCiAgX05MX01PTkVUQVJZX0RVT19OX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllf RFVPX0lOVF9QX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX1NJR05fUE9TTiwK ICBfTkxfTU9ORVRBUllfVU5PX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZX1VOT19WQUxJRF9U TywKICBfTkxfTU9ORVRBUllfRFVPX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZX0RVT19WQUxJ RF9UTywKICBfTkxfTU9ORVRBUllfQ09OVkVSU0lPTl9SQVRFLAogIF9OTF9NT05FVEFSWV9ERUNJ TUFMX1BPSU5UX1dDLAogIF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLAogIF9OTF9NT05F VEFSWV9DT0RFU0VULAogIF9OTF9OVU1fTENfTU9ORVRBUlksCgoKCiAgX19ERUNJTUFMX1BPSU5U ID0gKCgoX19MQ19OVU1FUklDKSA8PCAxNikgfCAoMCkpLAoKCgogIFJBRElYQ0hBUiA9IF9fREVD SU1BTF9QT0lOVCwKCiAgX19USE9VU0FORFNfU0VQLAoKCgogIFRIT1VTRVAgPSBfX1RIT1VTQU5E U19TRVAsCgogIF9fR1JPVVBJTkcsCgoKCiAgX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywK ICBfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLAogIF9OTF9OVU1FUklDX0NPREVTRVQsCiAg X05MX05VTV9MQ19OVU1FUklDLAoKICBfX1lFU0VYUFIgPSAoKChfX0xDX01FU1NBR0VTKSA8PCAx NikgfCAoMCkpLAoKICBfX05PRVhQUiwKCiAgX19ZRVNTVFIsCgoKCiAgX19OT1NUUiwKCgoKICBf TkxfTUVTU0FHRVNfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01FU1NBR0VTLAoKICBfTkxfUEFQRVJf SEVJR0hUID0gKCgoX19MQ19QQVBFUikgPDwgMTYpIHwgKDApKSwKICBfTkxfUEFQRVJfV0lEVEgs CiAgX05MX1BBUEVSX0NPREVTRVQsCiAgX05MX05VTV9MQ19QQVBFUiwKCiAgX05MX05BTUVfTkFN RV9GTVQgPSAoKChfX0xDX05BTUUpIDw8IDE2KSB8ICgwKSksCiAgX05MX05BTUVfTkFNRV9HRU4s CiAgX05MX05BTUVfTkFNRV9NUiwKICBfTkxfTkFNRV9OQU1FX01SUywKICBfTkxfTkFNRV9OQU1F X01JU1MsCiAgX05MX05BTUVfTkFNRV9NUywKICBfTkxfTkFNRV9DT0RFU0VULAogIF9OTF9OVU1f TENfTkFNRSwKCiAgX05MX0FERFJFU1NfUE9TVEFMX0ZNVCA9ICgoKF9fTENfQUREUkVTUykgPDwg MTYpIHwgKDApKSwKICBfTkxfQUREUkVTU19DT1VOVFJZX05BTUUsCiAgX05MX0FERFJFU1NfQ09V TlRSWV9QT1NULAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIyLAogIF9OTF9BRERSRVNTX0NPVU5U UllfQUIzLAogIF9OTF9BRERSRVNTX0NPVU5UUllfQ0FSLAogIF9OTF9BRERSRVNTX0NPVU5UUllf TlVNLAogIF9OTF9BRERSRVNTX0NPVU5UUllfSVNCTiwKICBfTkxfQUREUkVTU19MQU5HX05BTUUs CiAgX05MX0FERFJFU1NfTEFOR19BQiwKICBfTkxfQUREUkVTU19MQU5HX1RFUk0sCiAgX05MX0FE RFJFU1NfTEFOR19MSUIsCiAgX05MX0FERFJFU1NfQ09ERVNFVCwKICBfTkxfTlVNX0xDX0FERFJF U1MsCgogIF9OTF9URUxFUEhPTkVfVEVMX0lOVF9GTVQgPSAoKChfX0xDX1RFTEVQSE9ORSkgPDwg MTYpIHwgKDApKSwKICBfTkxfVEVMRVBIT05FX1RFTF9ET01fRk1ULAogIF9OTF9URUxFUEhPTkVf SU5UX1NFTEVDVCwKICBfTkxfVEVMRVBIT05FX0lOVF9QUkVGSVgsCiAgX05MX1RFTEVQSE9ORV9D T0RFU0VULAogIF9OTF9OVU1fTENfVEVMRVBIT05FLAoKICBfTkxfTUVBU1VSRU1FTlRfTUVBU1VS RU1FTlQgPSAoKChfX0xDX01FQVNVUkVNRU5UKSA8PCAxNikgfCAoMCkpLAogIF9OTF9NRUFTVVJF TUVOVF9DT0RFU0VULAogIF9OTF9OVU1fTENfTUVBU1VSRU1FTlQsCgogIF9OTF9JREVOVElGSUNB VElPTl9USVRMRSA9ICgoKF9fTENfSURFTlRJRklDQVRJT04pIDw8IDE2KSB8ICgwKSksCiAgX05M X0lERU5USUZJQ0FUSU9OX1NPVVJDRSwKICBfTkxfSURFTlRJRklDQVRJT05fQUREUkVTUywKICBf TkxfSURFTlRJRklDQVRJT05fQ09OVEFDVCwKICBfTkxfSURFTlRJRklDQVRJT05fRU1BSUwsCiAg X05MX0lERU5USUZJQ0FUSU9OX1RFTCwKICBfTkxfSURFTlRJRklDQVRJT05fRkFYLAogIF9OTF9J REVOVElGSUNBVElPTl9MQU5HVUFHRSwKICBfTkxfSURFTlRJRklDQVRJT05fVEVSUklUT1JZLAog IF9OTF9JREVOVElGSUNBVElPTl9BVURJRU5DRSwKICBfTkxfSURFTlRJRklDQVRJT05fQVBQTElD QVRJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX0FCQlJFVklBVElPTiwKICBfTkxfSURFTlRJRklD QVRJT05fUkVWSVNJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX0RBVEUsCiAgX05MX0lERU5USUZJ Q0FUSU9OX0NBVEVHT1JZLAogIF9OTF9JREVOVElGSUNBVElPTl9DT0RFU0VULAogIF9OTF9OVU1f TENfSURFTlRJRklDQVRJT04sCgoKICBfTkxfTlVNCn07CiMgNTc1ICIvdXNyL2luY2x1ZGUvbGFu Z2luZm8uaCIgMwpleHRlcm4gY2hhciAqbmxfbGFuZ2luZm8gKG5sX2l0ZW0gX19pdGVtKSB0aHJv dyAoKTsKIyA1ODYgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzCmV4dGVybiBjaGFyICpfX25s X2xhbmdpbmZvX2wgKG5sX2l0ZW0gX19pdGVtLCBfX2xvY2FsZV90IGwpOwoKCn0KIyAzOCAiL3Vz ci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0 cy9jKytsb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDEgMwojIDI0ICIv dXNyL2luY2x1ZGUvaWNvbnYuaCIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI1ICIv dXNyL2luY2x1ZGUvaWNvbnYuaCIgMiAzCgoKZXh0ZXJuICJDIiB7CgoKdHlwZWRlZiB2b2lkICpp Y29udl90OwoKCgoKZXh0ZXJuIGljb252X3QgaWNvbnZfb3BlbiAoX19jb25zdCBjaGFyICpfX3Rv Y29kZSwgX19jb25zdCBjaGFyICpfX2Zyb21jb2RlKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJu IHNpemVfdCBpY29udiAoaWNvbnZfdCBfX2NkLCBjaGFyICoqX19yZXN0cmljdCBfX2luYnVmLAog ICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19pbmJ5dGVzbGVmdCwKICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19vdXRidWYsCiAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX291dGJ5dGVzbGVmdCk7CgoKZXh0ZXJuIGlu dCBpY29udl9jbG9zZSAoaWNvbnZfdCBfX2NkKSB0aHJvdyAoKTsKCn0KIyAzOSAiL3Vzci9sb2Nh bC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKyts b2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmludGwuaCIgMSAzCiMgMzAgIi91c3Iv aW5jbHVkZS9saWJpbnRsLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgpleHRlcm4gY2hhciAqZ2V0dGV4 dCAoX19jb25zdCBjaGFyICpfX21zZ2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmRnZXR0 ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgX19jb25zdCBjaGFyICpfX21zZ2lkKQog ICAgIHRocm93ICgpOwpleHRlcm4gY2hhciAqX19kZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2Rv bWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSk7CgoKCmV4dGVybiBjaGFyICpkY2dldHRleHQgKF9f Y29uc3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKl9f ZGNnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKTsKCgoKCmV4dGVybiBjaGFy ICpuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX21zZ2lkMSwgX19jb25zdCBjaGFyICpfX21zZ2lk MiwKICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGludCBfX24pCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgxKSkpIF9fYXR0cmlidXRlX18g KChfX2Zvcm1hdF9hcmdfXyAoMikpKTsKCgoKZXh0ZXJuIGNoYXIgKmRuZ2V0dGV4dCAoX19jb25z dCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZDEsCiAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19tc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IF9f bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSkgX19h dHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgzKSkpOwoKCgpleHRlcm4gY2hhciAqZGNuZ2V0 dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZDEs CiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQyLCB1bnNpZ25l ZCBsb25nIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jYXRlZ29yeSkK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSkgX19hdHRy aWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgzKSkpOwoKCgoKCmV4dGVybiBjaGFyICp0ZXh0ZG9t YWluIChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFy ICpiaW5kdGV4dGRvbWFpbiAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2Rpcm5hbWUpIHRocm93ICgpOwoKCgpl eHRlcm4gY2hhciAqYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKF9fY29uc3QgY2hhciAqX19kb21h aW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19jb2Rlc2V0KSB0aHJvdyAoKTsKIyAxMTUgIi91c3IvaW5jbHVkZS9saWJpbnRsLmgiIDMK fQojIDQwICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxp bnV4LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAyIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdHlwZWRl ZiBfX2xvY2FsZV90IF9fY19sb2NhbGU7Cn0KIyA0NyAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9p bmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVmd2QuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvdm9s L2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2NjdHlwZSIgMSAzCiMgNDcgIi91c3IvbG9jYWwvdm9s L2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2NjdHlwZSIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2N0 eXBlLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gIkMiIHsKIyA0 NyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZW51bQp7CiAgX0lTdXBwZXIgPSAoKDApIDwgOCA/ ICgoMSA8PCAoMCkpIDw8IDgpIDogKCgxIDw8ICgwKSkgPj4gOCkpLAogIF9JU2xvd2VyID0gKCgx KSA8IDggPyAoKDEgPDwgKDEpKSA8PCA4KSA6ICgoMSA8PCAoMSkpID4+IDgpKSwKICBfSVNhbHBo YSA9ICgoMikgPCA4ID8gKCgxIDw8ICgyKSkgPDwgOCkgOiAoKDEgPDwgKDIpKSA+PiA4KSksCiAg X0lTZGlnaXQgPSAoKDMpIDwgOCA/ICgoMSA8PCAoMykpIDw8IDgpIDogKCgxIDw8ICgzKSkgPj4g OCkpLAogIF9JU3hkaWdpdCA9ICgoNCkgPCA4ID8gKCgxIDw8ICg0KSkgPDwgOCkgOiAoKDEgPDwg KDQpKSA+PiA4KSksCiAgX0lTc3BhY2UgPSAoKDUpIDwgOCA/ICgoMSA8PCAoNSkpIDw8IDgpIDog KCgxIDw8ICg1KSkgPj4gOCkpLAogIF9JU3ByaW50ID0gKCg2KSA8IDggPyAoKDEgPDwgKDYpKSA8 PCA4KSA6ICgoMSA8PCAoNikpID4+IDgpKSwKICBfSVNncmFwaCA9ICgoNykgPCA4ID8gKCgxIDw8 ICg3KSkgPDwgOCkgOiAoKDEgPDwgKDcpKSA+PiA4KSksCiAgX0lTYmxhbmsgPSAoKDgpIDwgOCA/ ICgoMSA8PCAoOCkpIDw8IDgpIDogKCgxIDw8ICg4KSkgPj4gOCkpLAogIF9JU2NudHJsID0gKCg5 KSA8IDggPyAoKDEgPDwgKDkpKSA8PCA4KSA6ICgoMSA8PCAoOSkpID4+IDgpKSwKICBfSVNwdW5j dCA9ICgoMTApIDwgOCA/ICgoMSA8PCAoMTApKSA8PCA4KSA6ICgoMSA8PCAoMTApKSA+PiA4KSks CiAgX0lTYWxudW0gPSAoKDExKSA8IDggPyAoKDEgPDwgKDExKSkgPDwgOCkgOiAoKDEgPDwgKDEx KSkgPj4gOCkpCn07CiMgNzUgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBfX2NvbnN0 IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3Qg Kl9fY3R5cGVfdG9sb3dlcjsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3RvdXBw ZXI7CiMgOTEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgaXNhbG51bSAoaW50 KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50 IGlzY250cmwgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdCAoaW50KSB0aHJvdyAo KTsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZ3JhcGgg KGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwcmludCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJu IGludCBpc3B1bmN0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2UgKGludCkgdGhy b3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3hk aWdpdCAoaW50KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzYmxhbmsgKGludCkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg dG91cHBlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaSAoaW50 IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdG9hc2NpaSAoaW50IF9fYykgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX3RvbG93 ZXIgKGludCkgdGhyb3cgKCk7CiMgMjIzICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4g aW50IF9faXNhbG51bV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9f aXNhbHBoYV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNjbnRy bF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNkaWdpdF9sIChp bnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNsb3dlcl9sIChpbnQsIF9f bG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNncmFwaF9sIChpbnQsIF9fbG9jYWxl X3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNwcmludF9sIChpbnQsIF9fbG9jYWxlX3QpIHRo cm93ICgpOwpleHRlcm4gaW50IF9faXNwdW5jdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgp OwpleHRlcm4gaW50IF9faXNzcGFjZV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRl cm4gaW50IF9faXN1cHBlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50 IF9faXN4ZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX19p c2JsYW5rX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX190b2xv d2VyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9f dG91cHBlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CiMgMjc2ICIvdXNy L2luY2x1ZGUvY3R5cGUuaCIgMwp9CiMgNTAgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVk ZS9jKysvMy4yL2NjdHlwZSIgMiAzCiMgNjYgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVk ZS9jKysvMy4yL2NjdHlwZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmlzYWxudW07CiAg dXNpbmcgOjppc2FscGhhOwogIHVzaW5nIDo6aXNjbnRybDsKICB1c2luZyA6OmlzZGlnaXQ7CiAg dXNpbmcgOjppc2dyYXBoOwogIHVzaW5nIDo6aXNsb3dlcjsKICB1c2luZyA6OmlzcHJpbnQ7CiAg dXNpbmcgOjppc3B1bmN0OwogIHVzaW5nIDo6aXNzcGFjZTsKICB1c2luZyA6OmlzdXBwZXI7CiAg dXNpbmcgOjppc3hkaWdpdDsKICB1c2luZyA6OnRvbG93ZXI7CiAgdXNpbmcgOjp0b3VwcGVyOwp9 CiMgNDkgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxl ZndkLmgiIDIgMwoKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9i aXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1 ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2Mv My4yL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9s b2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMK Cm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoK CiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFk X2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lk CiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv d19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxp ZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJy b3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0 IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciog X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg dm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog IF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190 aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNTEgIi91c3IvbG9jYWwvdm9s L2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlZndkLmgiIDIgMwoKCm5hbWVzcGFj ZSBzdGQKewoKICBjbGFzcyBsb2NhbGU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg ICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwcmludChfQ2hhclQs IGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg Ym9vbAogICAgaXNjbnRybChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN1cHBlcihfQ2hhclQsIGNvbnN0IGxv Y2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAg aXNsb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbHBoYShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChf Q2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp bmxpbmUgYm9vbAogICAgaXNwdW5jdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN4ZGlnaXQoX0NoYXJULCBj b25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJv b2wKICAgIGlzYWxudW0oX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZ3JhcGgoX0NoYXJULCBjb25zdCBsb2Nh bGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAg dG91cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7 CgoKCiAgY2xhc3MgY3R5cGVfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBj bGFzcyBjdHlwZTsKICB0ZW1wbGF0ZTw+IGNsYXNzIGN0eXBlPGNoYXI+OwoKICB0ZW1wbGF0ZTw+ IGNsYXNzIGN0eXBlPHdjaGFyX3Q+OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBj bGFzcyBjdHlwZV9ieW5hbWU7CgoKICBjbGFzcyBjb2RlY3Z0X2Jhc2U7CiAgY2xhc3MgX19lbmNf dHJhaXRzOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwg dHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnQ7CiAgdGVtcGxhdGU8PiBjbGFzcyBj b2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD47CgogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2 dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJu VCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0 X2J5bmFtZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9 IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBudW1fZ2V0OwogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJh dG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbnVtX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+IGNsYXNzIG51bXB1bmN0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVt cHVuY3RfYnluYW1lOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29s bGF0ZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzCiAgICBjb2xsYXRlX2J5bmFt ZTsKCgogIGNsYXNzIHRpbWVfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGlt ZV9nZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0 cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTsKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9p dGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4g PgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1lOwoKCiAgY2xhc3MgbW9uZXlfYmFzZTsKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJh dG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbW9uZXlfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgog ICAgY2xhc3MgbW9uZXlfcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50 bCA9IGZhbHNlPgogICAgY2xhc3MgbW9uZXlwdW5jdDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lOwoKCiAg Y2xhc3MgbWVzc2FnZXNfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFz cyBtZXNzYWdlczsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdl c19ieW5hbWU7CgoKICBjbGFzcyBsb2NhbGUKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgdW5z aWduZWQgaW50IGNhdGVnb3J5OwoKCiAgICBjbGFzcyBmYWNldDsKICAgIGNsYXNzIGlkOwogICAg Y2xhc3MgX0ltcGw7CgogICAgZnJpZW5kIGNsYXNzIGZhY2V0OwogICAgZnJpZW5kIGNsYXNzIF9J bXBsOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9G YWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2Fs ZSYpIHRocm93KCk7CgoKCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbm9uZSA9IDA7CiAgICBz dGF0aWMgY29uc3QgY2F0ZWdvcnkgY3R5cGUgPSAxTCA8PCAwOwogICAgc3RhdGljIGNvbnN0IGNh dGVnb3J5IG51bWVyaWMgPSAxTCA8PCAxOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGNvbGxh dGUgPSAxTCA8PCAyOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IHRpbWUgPSAxTCA8PCAzOwog ICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG1vbmV0YXJ5ID0gMUwgPDwgNDsKICAgIHN0YXRpYyBj b25zdCBjYXRlZ29yeSBtZXNzYWdlcyA9IDFMIDw8IDU7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdv cnkgYWxsID0gKGNvbGxhdGUgfCBjdHlwZSB8IG1vbmV0YXJ5IHwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWMgfCB0aW1lIHwgbWVzc2FnZXMpOwoKCiAg ICBsb2NhbGUoKSB0aHJvdygpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRo cm93KCk7CgogICAgZXhwbGljaXQKICAgIGxvY2FsZShjb25zdCBjaGFyKiBfX3MpOwoKICAgIGxv Y2FsZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgY2hhciogX19zLCBjYXRlZ29yeSBfX2Nh dCk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRk LCBjYXRlZ29yeSBfX2NhdCk7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBs b2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9fZik7CgogICAgfmxvY2FsZSgp IHRocm93KCk7CgogICAgY29uc3QgbG9jYWxlJgogICAgb3BlcmF0b3I9KGNvbnN0IGxvY2FsZSYg X19vdGhlcikgdGhyb3coKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGxv Y2FsZQogICAgICBjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3Q7CgoKICAgIHN0 cmluZwogICAgbmFtZSgpIGNvbnN0OwoKICAgIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgbG9j YWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAoKTsKCiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0 b3IhPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRocm93ICgpCiAgICB7IHJldHVybiAh KHRoaXMtPm9wZXJhdG9yPT0oX19vdGhlcikpOyB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXIsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgICAgYm9vbAogICAgICBv cGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhciwgX1RyYWl0cywgX0FsbG9jPiYgX19z MSwKICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9B bGxvYz4mIF9fczIpIGNvbnN0OwoKCiAgICBzdGF0aWMgbG9jYWxlCiAgICBnbG9iYWwoY29uc3Qg bG9jYWxlJik7CgogICAgc3RhdGljIGNvbnN0IGxvY2FsZSYKICAgIGNsYXNzaWMoKTsKCiAgcHJp dmF0ZToKCiAgICBfSW1wbCogX01faW1wbDsKCgogICAgc3RhdGljIF9JbXBsKiBfU19jbGFzc2lj OwoKCiAgICBzdGF0aWMgX0ltcGwqIF9TX2dsb2JhbDsKCiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90 IF9TX251bV9jYXRlZ29yaWVzID0gNjsKCiAgICBleHBsaWNpdAogICAgbG9jYWxlKF9JbXBsKikg dGhyb3coKTsKCiAgICBzdGF0aWMgaW5saW5lIHZvaWQKICAgIF9TX2luaXRpYWxpemUoKQogICAg ewogICAgICBpZiAoIV9TX2NsYXNzaWMpCiAgICAgICAgY2xhc3NpYygpOwogICAgfQoKICAgIHN0 YXRpYyBjYXRlZ29yeQogICAgX1Nfbm9ybWFsaXplX2NhdGVnb3J5KGNhdGVnb3J5KTsKCiAgICB2 b2lkCiAgICBfTV9jb2FsZXNjZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBf X2FkZCwgY2F0ZWdvcnkgX19jYXQpOwogIH07CgoKCiAgY2xhc3MgbG9jYWxlOjpfSW1wbAogIHsK ICBwdWJsaWM6CgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2Nh bGU6OmZhY2V0OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNv bnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRl PHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0 IGxvY2FsZSYpIHRocm93KCk7CgogIHByaXZhdGU6CgogICAgX0F0b21pY193b3JkIF9NX3JlZmVy ZW5jZXM7CiAgICBmYWNldCoqIF9NX2ZhY2V0czsKICAgIHNpemVfdCBfTV9mYWNldHNfc2l6ZTsK ICAgIGNvbnN0IGNoYXIqIF9NX25hbWVzW19TX251bV9jYXRlZ29yaWVzXTsKICAgIHN0YXRpYyBj b25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jdHlwZVtdOwogICAgc3RhdGljIGNvbnN0IGxv Y2FsZTo6aWQqIGNvbnN0IF9TX2lkX251bWVyaWNbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6 OmlkKiBjb25zdCBfU19pZF9jb2xsYXRlW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCog Y29uc3QgX1NfaWRfdGltZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9T X2lkX21vbmV0YXJ5W107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRf bWVzc2FnZXNbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCogY29uc3QgX1Nf ZmFjZXRfY2F0ZWdvcmllc1tdOwoKICAgIGlubGluZSB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNl KCkgdGhyb3coKQogICAgeyBfX2F0b21pY19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOyB9CgogICAg aW5saW5lIHZvaWQKICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpCiAgICB7CiAgICAg IGlmIChfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA9PSAxKQogICAgICAg IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IGRlbGV0ZSB0aGlzOyB9CiAgICAgICAgICBj YXRjaCguLi4pCiAgICAgICAgICAgIHsgfQogICAgICAgIH0KICAgIH0KCiAgICBfSW1wbChjb25z dCBfSW1wbCYsIHNpemVfdCk7CiAgICBfSW1wbChjb25zdCBjaGFyKiwgc2l6ZV90KTsKICAgIF9J bXBsKGZhY2V0KiosIHNpemVfdCwgYm9vbCk7CgogICB+X0ltcGwoKSB0aHJvdygpOwoKICAgIF9J bXBsKGNvbnN0IF9JbXBsJik7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IF9JbXBsJik7 CgogICAgaW5saW5lIGJvb2wKICAgIF9NX2NoZWNrX3NhbWVfbmFtZSgpCiAgICB7CiAgICAgIGJv b2wgX19yZXQgPSB0cnVlOwogICAgICBmb3IgKHNpemVfdCBpID0gMDsgX19yZXQgJiYgaSA8IF9T X251bV9jYXRlZ29yaWVzIC0gMTsgKytpKQogICAgICAgIF9fcmV0ICY9IChzdHJjbXAoX01fbmFt ZXNbaV0sIF9NX25hbWVzW2kgKyAxXSkgPT0gMCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0K CiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2NhdGVnb3JpZXMoY29uc3QgX0ltcGwqLCBjYXRlZ29y eSk7CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9jYXRlZ29yeShjb25zdCBfSW1wbCosIGNvbnN0 IGxvY2FsZTo6aWQqIGNvbnN0Kik7CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9mYWNldChjb25z dCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6aWQqKTsKCiAgICB2b2lkCiAgICBfTV9pbnN0YWxsX2Zh Y2V0KGNvbnN0IGxvY2FsZTo6aWQqLCBmYWNldCopOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9G YWNldD4KICAgICAgaW5saW5lIHZvaWQKICAgICAgX01faW5pdF9mYWNldChfRmFjZXQqIF9fZmFj ZXQpCiAgICAgIHsgX01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19mYWNldCk7IH0KICB9 OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGU6OmxvY2FsZShjb25zdCBs b2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19mKQogICAgewogICAgICBfTV9pbXBsID0gbmV3IF9J bXBsKCpfX290aGVyLl9NX2ltcGwsIDEpOwogICAgICBfTV9pbXBsLT5fTV9pbnN0YWxsX2ZhY2V0 KCZfRmFjZXQ6OmlkLCBfX2YpOwogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfU19u dW1fY2F0ZWdvcmllczsgKytfX2kpCiAgICAgICAgX01faW1wbC0+X01fbmFtZXNbX19pXSA9ICIq IjsKICAgIH0KCgogIGNsYXNzIGxvY2FsZTo6ZmFjZXQKICB7CiAgcHJpdmF0ZToKICAgIGZyaWVu ZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsKCiAgICBfQXRv bWljX3dvcmQgX01fcmVmZXJlbmNlczsKCiAgcHJvdGVjdGVkOgoKCiAgICBzdGF0aWMgX19jX2xv Y2FsZSBfU19jX2xvY2FsZTsKCiAgICBleHBsaWNpdAogICAgZmFjZXQoc2l6ZV90IF9fcmVmcyA9 IDApIHRocm93KCk7CgogICAgdmlydHVhbAogICAgfmZhY2V0KCk7CgogICAgc3RhdGljIHZvaWQK ICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9f cywKICAgICAgICAgICAgICAgICAgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gMCk7CgogICAgc3Rh dGljIF9fY19sb2NhbGUKICAgIF9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYyk7 CgogICAgc3RhdGljIHZvaWQKICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19j bG9jKTsKCiAgcHJpdmF0ZToKICAgIHZvaWQKICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB0aHJvdygp OwoKICAgIHZvaWQKICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpOwoKICAgIGZhY2V0 KGNvbnN0IGZhY2V0Jik7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IGZhY2V0Jik7CiAg fTsKCgoKICBjbGFzcyBsb2NhbGU6OmlkCiAgewogIHByaXZhdGU6CiAgICBmcmllbmQgY2xhc3Mg bG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7CiAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNldChj b25zdCBsb2NhbGUmKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5k IGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93ICgpOwoKCgoKICAgIG11 dGFibGUgc2l6ZV90IF9NX2luZGV4OwoKCiAgICBzdGF0aWMgX0F0b21pY193b3JkIF9TX2hpZ2h3 YXRlcjsKCiAgICB2b2lkCiAgICBvcGVyYXRvcj0oY29uc3QgaWQmKTsKCiAgICBpZChjb25zdCBp ZCYpOwoKICBwdWJsaWM6CgoKICAgIGlkKCk7CgogICAgaW5saW5lIHNpemVfdAogICAgX01faWQo KSBjb25zdAogICAgewogICAgICBpZiAoIV9NX2luZGV4KQogICAgICAgIF9NX2luZGV4ID0gMSAr IF9fZXhjaGFuZ2VfYW5kX2FkZCgmX1NfaGlnaHdhdGVyLCAxKTsKICAgICAgcmV0dXJuIF9NX2lu ZGV4IC0gMTsKICAgIH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBjb25z dCBfRmFjZXQmCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9GYWNldD4KICAgIGJvb2wKICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmIF9f bG9jKSB0aHJvdygpOwp9CiMgNDkgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysv My4yL2lvcyIgMiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIv Yml0cy9pb3NfYmFzZS5oIiAxIDMKIyA0NCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRl L2MrKy8zLjIvYml0cy9pb3NfYmFzZS5oIiAzCgoKCm5hbWVzcGFjZSBzdGQKewoKCgoKICBlbnVt IF9Jb3NfRm10ZmxhZ3MgeyBfTV9pb3NfZm10ZmxhZ3NfZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5s aW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvciYoX0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10 ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2Ep ICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9w ZXJhdG9yfChfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4g X0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9f YikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3JeKF9Jb3NfRm10ZmxhZ3Mg X19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19j YXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3Nf Rm10ZmxhZ3MKICBvcGVyYXRvcnw9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBf X2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdz CiAgb3BlcmF0b3ImPShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsg cmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJh dG9yXj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBf X2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcn4oX0lv c19GbXRmbGFncyBfX2EpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyh+c3RhdGljX2Nhc3Q8aW50 PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX09wZW5tb2RlIHsgX01faW9zX29wZW5tb2RlX2VuZCA9 IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3ImKF9Jb3NfT3Bl bm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0 YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5l IF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnwoX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1v ZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwg c3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJh dG9yXihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX0lv c19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikp OyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J8PShfSW9zX09wZW5tb2RlJiBf X2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBp bmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yJj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9z X09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9J b3NfT3Blbm1vZGUKICBvcGVyYXRvcl49KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9k ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5t b2RlCiAgb3BlcmF0b3J+KF9Jb3NfT3Blbm1vZGUgX19hKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1v ZGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCgogIGVudW0gX0lvc19Jb3N0YXRlIHsgX01f aW9zX2lvc3RhdGVfZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9w ZXJhdG9yJihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9J b3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikp OyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcnwoX0lvc19Jb3N0YXRlIF9fYSwg X0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50 PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRl CiAgb3BlcmF0b3JeKF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1 cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4o X19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfD0oX0lvc19Jb3N0YXRl JiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9Cgog IGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciY9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9z X0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lv c19Jb3N0YXRlCiAgb3BlcmF0b3JePShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9f YikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQog IG9wZXJhdG9yfihfSW9zX0lvc3RhdGUgX19hKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZSh+c3Rh dGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKICBlbnVtIF9Jb3NfU2Vla2RpciB7IF9NX2lvc19zZWVr ZGlyX2VuZCA9IDFMIDw8IDE2IH07CgoKICBjbGFzcyBpb3NfYmFzZQogIHsKICBwdWJsaWM6CgoK ICAgIGNsYXNzIGZhaWx1cmUgOiBwdWJsaWMgZXhjZXB0aW9uCiAgICB7CiAgICBwdWJsaWM6CgoK ICAgICAgZXhwbGljaXQKICAgICAgZmFpbHVyZShjb25zdCBzdHJpbmcmIF9fc3RyKSB0aHJvdygp OwoKCgogICAgICB2aXJ0dWFsCiAgICAgIH5mYWlsdXJlKCkgdGhyb3coKTsKCiAgICAgIHZpcnR1 YWwgY29uc3QgY2hhcioKICAgICAgd2hhdCgpIGNvbnN0IHRocm93KCk7CgogICAgcHJpdmF0ZToK ICAgICAgZW51bSB7IF9NX2J1ZnNpemUgPSAyNTYgfTsKICAgICAgY2hhciBfTV9uYW1lW19NX2J1 ZnNpemVdOwoKICAgIH07CgoKICAgIHR5cGVkZWYgX0lvc19GbXRmbGFncyBmbXRmbGFnczsKCiAg ICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYm9vbGFscGhhID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6 Ol9TX2Jvb2xhbHBoYSk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZGVjID0gZm10ZmxhZ3Mo X19pb3NfZmxhZ3M6Ol9TX2RlYyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZml4ZWQgPSBm bXRmbGFncyhfX2lvc19mbGFnczo6X1NfZml4ZWQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdz IGhleCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19oZXgpOwogICAgc3RhdGljIGNvbnN0IGZt dGZsYWdzIGludGVybmFsID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2ludGVybmFsKTsKICAg IHN0YXRpYyBjb25zdCBmbXRmbGFncyBsZWZ0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2xl ZnQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIG9jdCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdz OjpfU19vY3QpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHJpZ2h0ID0gZm10ZmxhZ3MoX19p b3NfZmxhZ3M6Ol9TX3JpZ2h0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzY2llbnRpZmlj ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NjaWVudGlmaWMpOwogICAgc3RhdGljIGNvbnN0 IGZtdGZsYWdzIHNob3diYXNlID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3diYXNlKTsK ICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9pbnQgPSBmbXRmbGFncyhfX2lvc19mbGFn czo6X1Nfc2hvd3BvaW50KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9zID0gZm10 ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dwb3MpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdz IHNraXB3cyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19za2lwd3MpOwogICAgc3RhdGljIGNv bnN0IGZtdGZsYWdzIHVuaXRidWYgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfdW5pdGJ1Zik7 CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgdXBwZXJjYXNlID0gZm10ZmxhZ3MoX19pb3NfZmxh Z3M6Ol9TX3VwcGVyY2FzZSk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYWRqdXN0ZmllbGQg PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYWRqdXN0ZmllbGQpOwogICAgc3RhdGljIGNvbnN0 IGZtdGZsYWdzIGJhc2VmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19iYXNlZmllbGQp OwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZsb2F0ZmllbGQgPSBmbXRmbGFncyhfX2lvc19m bGFnczo6X1NfZmxvYXRmaWVsZCk7CgoKICAgIHR5cGVkZWYgX0lvc19Jb3N0YXRlIGlvc3RhdGU7 CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBiYWRiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpf U19iYWRiaXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZW9mYml0ID0gaW9zdGF0ZShfX2lv c19mbGFnczo6X1NfZW9mYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGZhaWxiaXQgPSBp b3N0YXRlKF9faW9zX2ZsYWdzOjpfU19mYWlsYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRl IGdvb2RiaXQgPSBpb3N0YXRlKDApOwoKCiAgICB0eXBlZGVmIF9Jb3NfT3Blbm1vZGUgb3Blbm1v ZGU7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXBwID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6 Ol9TX2FwcCk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXRlID0gb3Blbm1vZGUoX19pb3Nf ZmxhZ3M6Ol9TX2F0ZSk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYmluYXJ5ID0gb3Blbm1v ZGUoX19pb3NfZmxhZ3M6Ol9TX2Jpbik7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgaW4gPSBv cGVubW9kZShfX2lvc19mbGFnczo6X1NfaW4pOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIG91 dCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19vdXQpOwogICAgc3RhdGljIGNvbnN0IG9wZW5t b2RlIHRydW5jID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX3RydW5jKTsKCgogICAgdHlwZWRl ZiBfSW9zX1NlZWtkaXIgc2Vla2RpcjsKICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGJlZyA9IHNl ZWtkaXIoMCk7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBjdXIgPSBzZWVrZGlyKDEpOwogICAg c3RhdGljIGNvbnN0IHNlZWtkaXIgZW5kID0gc2Vla2RpcigyKTsKIyAyMjYgIi91c3IvbG9jYWwv dm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvaW9zX2Jhc2UuaCIgMwogICAgZW51bSBl dmVudAogICAgewogICAgICBlcmFzZV9ldmVudCwKICAgICAgaW1idWVfZXZlbnQsCiAgICAgIGNv cHlmbXRfZXZlbnQKICAgIH07CgogICAgdHlwZWRlZiB2b2lkICgqZXZlbnRfY2FsbGJhY2spIChl dmVudCwgaW9zX2Jhc2UmLCBpbnQpOwoKICAgIHZvaWQKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKGV2 ZW50X2NhbGxiYWNrIF9fZm4sIGludCBfX2luZGV4KTsKCiAgcHJvdGVjdGVkOgoKICAgIHN0cmVh bXNpemUgX01fcHJlY2lzaW9uOwogICAgc3RyZWFtc2l6ZSBfTV93aWR0aDsKICAgIGZtdGZsYWdz IF9NX2ZsYWdzOwogICAgaW9zdGF0ZSBfTV9leGNlcHRpb247CiAgICBpb3N0YXRlIF9NX3N0cmVh bWJ1Zl9zdGF0ZTsKCgoKICAgIHN0cnVjdCBfQ2FsbGJhY2tfbGlzdAogICAgewoKICAgICAgX0Nh bGxiYWNrX2xpc3QqIF9NX25leHQ7CiAgICAgIGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBfTV9m bjsKICAgICAgaW50IF9NX2luZGV4OwogICAgICBfQXRvbWljX3dvcmQgX01fcmVmY291bnQ7Cgog ICAgICBfQ2FsbGJhY2tfbGlzdChpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9f aW5kZXgsCiAgICAgICAgICAgICAgICAgICAgIF9DYWxsYmFja19saXN0KiBfX2NiKQogICAgICA6 IF9NX25leHQoX19jYiksIF9NX2ZuKF9fZm4pLCBfTV9pbmRleChfX2luZGV4KSwgX01fcmVmY291 bnQoMCkgeyB9CgogICAgICB2b2lkCiAgICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB7IF9fYXRvbWlj X2FkZCgmX01fcmVmY291bnQsIDEpOyB9CgoKICAgICAgaW50CiAgICAgIF9NX3JlbW92ZV9yZWZl cmVuY2UoKSB7IHJldHVybiBfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmNvdW50LCAtMSk7IH0K ICAgIH07CgogICAgIF9DYWxsYmFja19saXN0KiBfTV9jYWxsYmFja3M7CgogICAgdm9pZAogICAg X01fY2FsbF9jYWxsYmFja3MoZXZlbnQgX19ldikgdGhyb3coKTsKCiAgICB2b2lkCiAgICBfTV9k aXNwb3NlX2NhbGxiYWNrcyh2b2lkKTsKCgogICAgc3RydWN0IF9Xb3JkcwogICAgewogICAgICB2 b2lkKiBfTV9wd29yZDsKICAgICAgbG9uZyBfTV9pd29yZDsKICAgICAgX1dvcmRzKCkgOiBfTV9w d29yZCgwKSwgX01faXdvcmQoMCkgeyB9CiAgICB9OwoKCiAgICBfV29yZHMgX01fd29yZF96ZXJv OwoKCiAgICBzdGF0aWMgY29uc3QgaW50IF9TX2xvY2FsX3dvcmRfc2l6ZSA9IDg7CiAgICBfV29y ZHMgX01fbG9jYWxfd29yZFtfU19sb2NhbF93b3JkX3NpemVdOwoKCiAgICBpbnQgX01fd29yZF9z aXplOwogICAgX1dvcmRzKiBfTV93b3JkOwoKICAgIF9Xb3JkcyYKICAgIF9NX2dyb3dfd29yZHMo aW50IF9faW5kZXgpOwoKCiAgICBsb2NhbGUgX01faW9zX2xvY2FsZTsKCiAgICB2b2lkCiAgICBf TV9pbml0KCk7CgogIHB1YmxpYzoKCgoKCgogICAgY2xhc3MgSW5pdAogICAgewogICAgICBmcmll bmQgY2xhc3MgaW9zX2Jhc2U7CiAgICBwdWJsaWM6CiAgICAgIEluaXQoKTsKICAgICAgfkluaXQo KTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2lvc19jcmVhdGUoYm9vbCBfX3N5bmMpOwoK ICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfaW9zX2Rlc3Ryb3koKTsKCiAgICBwcml2YXRlOgog ICAgICBzdGF0aWMgaW50IF9TX2lvc19iYXNlX2luaXQ7CiAgICAgIHN0YXRpYyBib29sIF9TX3N5 bmNlZF93aXRoX3N0ZGlvOwogICAgfTsKCgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBmbGFncygp IGNvbnN0IHsgcmV0dXJuIF9NX2ZsYWdzOyB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBmbGFn cyhmbXRmbGFncyBfX2ZtdGZsKQogICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdz OwogICAgICBfTV9mbGFncyA9IF9fZm10Zmw7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAg ICBpbmxpbmUgZm10ZmxhZ3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAgICAg Zm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgfD0gX19mbXRmbDsKICAg ICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSBmbXRmbGFncwogICAgc2V0ZihmbXRm bGFncyBfX2ZtdGZsLCBmbXRmbGFncyBfX21hc2spCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xk ID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzICY9IH5fX21hc2s7CiAgICAgIF9NX2ZsYWdzIHw9 IChfX2ZtdGZsICYgX19tYXNrKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGlu ZSB2b2lkCiAgICB1bnNldGYoZm10ZmxhZ3MgX19tYXNrKSB7IF9NX2ZsYWdzICY9IH5fX21hc2s7 IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4g X01fcHJlY2lzaW9uOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHByZWNpc2lvbihzdHJl YW1zaXplIF9fcHJlYykKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9IF9NX3ByZWNpc2lv bjsKICAgICAgX01fcHJlY2lzaW9uID0gX19wcmVjOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9 CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHdpZHRoKCkgY29uc3QgeyByZXR1cm4gX01fd2lk dGg7IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgd2lkdGgoc3RyZWFtc2l6ZSBfX3dpZGUp CiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV93aWR0aDsKICAgICAgX01fd2lkdGgg PSBfX3dpZGU7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBzdGF0aWMgYm9vbAogICAg c3luY193aXRoX3N0ZGlvKGJvb2wgX19zeW5jID0gdHJ1ZSk7CgoKICAgIGxvY2FsZQogICAgaW1i dWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAgaW5saW5lIGxvY2FsZQogICAgZ2V0bG9jKCkg Y29uc3QgeyByZXR1cm4gX01faW9zX2xvY2FsZTsgfQoKCiAgICBzdGF0aWMgaW50CiAgICB4YWxs b2MoKSB0aHJvdygpOwoKICAgIGlubGluZSBsb25nJgogICAgaXdvcmQoaW50IF9faXgpCiAgICB7 CiAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9faXggPCBfTV93b3JkX3NpemUpCiAgICAgICAgICAg ICAgICAgICAgICAgID8gX01fd29yZFtfX2l4XSA6IF9NX2dyb3dfd29yZHMoX19peCk7CiAgICAg IHJldHVybiBfX3dvcmQuX01faXdvcmQ7CiAgICB9CgogICAgaW5saW5lIHZvaWQqJgogICAgcHdv cmQoaW50IF9faXgpCiAgICB7CiAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9faXggPCBfTV93b3Jk X3NpemUpCiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29yZFtfX2l4XSA6IF9NX2dyb3df d29yZHMoX19peCk7CiAgICAgIHJldHVybiBfX3dvcmQuX01fcHdvcmQ7CiAgICB9CgoKICAgIH5p b3NfYmFzZSgpOwoKICBwcm90ZWN0ZWQ6CiAgICBpb3NfYmFzZSgpOwoKCgogIHByaXZhdGU6CiAg ICBpb3NfYmFzZShjb25zdCBpb3NfYmFzZSYpOwoKICAgIGlvc19iYXNlJgogICAgb3BlcmF0b3I9 KGNvbnN0IGlvc19iYXNlJik7CgogIH07CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgYm9vbGFscGhh KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBo YSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vYm9vbGFs cGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6Ym9v bGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hv d2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hv d2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3No b3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6 c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBz aG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6 c2hvd3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAg bm9zaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19i YXNlOjpzaG93cG9pbnQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFz ZSYKICBzaG93cG9zKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jh c2U6OnNob3dwb3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYK ICBub3Nob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19i YXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2Um CiAgc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6 OnNraXB3cyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5v c2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6 c2tpcHdzKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdXBw ZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVw cGVyY2FzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5v dXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFz ZTo6dXBwZXJjYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2Um CiAgdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFz ZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYK ICBub3VuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnVuc2V0Zihpb3Nf YmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jh c2UmCiAgaW50ZXJuYWwoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnNldGYoaW9z X2Jhc2U6OmludGVybmFsLCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgIHJldHVybiBfX2Jh c2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbGVmdChpb3NfYmFzZSYgX19iYXNlKQogIHsK ICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpsZWZ0LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwog ICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICByaWdodChpb3NfYmFz ZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpyaWdodCwgaW9zX2Jhc2U6 OmFkanVzdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNl JgogIGRlYyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpk ZWMsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGlu ZSBpb3NfYmFzZSYKICBoZXgoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihp b3NfYmFzZTo6aGV4LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAg fQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgb2N0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i YXNlLnNldGYoaW9zX2Jhc2U6Om9jdCwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4g X19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBmaXhlZChpb3NfYmFzZSYgX19iYXNl KQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpmaXhlZCwgaW9zX2Jhc2U6OmZsb2F0Zmll bGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzY2llbnRp ZmljKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNjaWVu dGlmaWMsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKfQoj IDUwICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pb3MiIDIgMwojIDEg Ii91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL3N0cmVhbWJ1ZiIgMSAzCiMg NDQgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL3N0cmVhbWJ1ZiIgMwoK CgoKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9z PF9DaGFyVCwgX1RyYWl0cz4mIF9pb3MsCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJl YW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmluLAogICAgICAgICAgICAgICAgICAgICAgYmFz aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQpOwoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVm CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg IHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFp dHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRz X3R5cGU6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190 eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGN0eXBlPGNoYXJfdHlwZT4g X19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsIHRy YWl0c190eXBlPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0 c190eXBlOjpzdGF0ZV90eXBlIF9fc3RhdGVfdHlwZTsKCiAgICAgIGZyaWVuZCBjbGFzcyBiYXNp Y19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19p c3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNf b3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGlzdHJl YW1idWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFz cyBvc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwoKICAgICAgZnJp ZW5kIHN0cmVhbXNpemUKICAgICAgX19jb3B5X3N0cmVhbWJ1ZnM8PihiYXNpY19pb3M8Y2hhcl90 eXBlLCB0cmFpdHNfdHlwZT4mIF9faW9zLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3Ry ZWFtYnVmX3R5cGUqIF9fc2JpbixfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KTsKCiAgICBwcm90 ZWN0ZWQ6CgoKCgoKICAgICAgY2hhcl90eXBlKiBfTV9idWY7CgoKICAgICAgc2l6ZV90IF9NX2J1 Zl9zaXplOwoKCiAgICAgIHNpemVfdCBfTV9idWZfc2l6ZV9vcHQ7CgoKCiAgICAgIGJvb2wgX01f YnVmX3VuaWZpZWQ7CgoKCgoKCiAgICAgIGNoYXJfdHlwZSogX01faW5fYmVnOwogICAgICBjaGFy X3R5cGUqIF9NX2luX2N1cjsKICAgICAgY2hhcl90eXBlKiBfTV9pbl9lbmQ7CiAgICAgIGNoYXJf dHlwZSogX01fb3V0X2JlZzsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRfY3VyOwogICAgICBjaGFy X3R5cGUqIF9NX291dF9lbmQ7CgoKICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9NX21vZGU7CgoK ICAgICAgbG9jYWxlIF9NX2J1Zl9sb2NhbGU7CgoKICAgICAgYm9vbCBfTV9idWZfbG9jYWxlX2lu aXQ7CgoKCgoKCiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgX1NfcGJhY2tfc2l6ZSA9IDE7CiAg ICAgIGNoYXJfdHlwZSBfTV9wYmFja1tfU19wYmFja19zaXplXTsKICAgICAgY2hhcl90eXBlKiBf TV9wYmFja19jdXJfc2F2ZTsKICAgICAgY2hhcl90eXBlKiBfTV9wYmFja19lbmRfc2F2ZTsKICAg ICAgYm9vbCBfTV9wYmFja19pbml0OwoKCiAgICAgIGZwb3M8X19zdGF0ZV90eXBlPiBfTV9wb3M7 CgoKCgogICAgICB2b2lkCiAgICAgIF9NX3BiYWNrX2NyZWF0ZSgpCiAgICAgIHsKICAgICAgICBp ZiAoIV9NX3BiYWNrX2luaXQpCiAgICAgICAgICB7CiAgICAgICAgICAgIHNpemVfdCBfX2Rpc3Qg PSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9IG1pbihf U19wYmFja19zaXplLCBfX2Rpc3QpOwogICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9w YmFjaywgX01faW5fY3VyLCBfX2xlbik7CiAgICAgICAgICAgIF9NX3BiYWNrX2N1cl9zYXZlID0g X01faW5fY3VyOwogICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9IF9NX2luX2VuZDsKICAg ICAgICAgICAgdGhpcy0+c2V0ZyhfTV9wYmFjaywgX01fcGJhY2ssIF9NX3BiYWNrICsgX19sZW4p OwogICAgICAgICAgICBfTV9wYmFja19pbml0ID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgfQoK CgoKICAgICAgdm9pZAogICAgICBfTV9wYmFja19kZXN0cm95KCkKICAgICAgewogICAgICAgIGlm IChfTV9wYmFja19pbml0KQogICAgICAgICAgewoKICAgICAgICAgICAgc2l6ZV90IF9fb2ZmX2N1 ciA9IF9NX2luX2N1ciAtIF9NX3BiYWNrOwoKCiAgICAgICAgICAgIHNpemVfdCBfX29mZl9lbmQg PSAwOwogICAgICAgICAgICBzaXplX3QgX19wYmFja19sZW4gPSBfTV9pbl9lbmQgLSBfTV9wYmFj azsKICAgICAgICAgICAgc2l6ZV90IF9fc2F2ZV9sZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9N X2J1ZjsKICAgICAgICAgICAgaWYgKF9fcGJhY2tfbGVuID4gX19zYXZlX2xlbikKICAgICAgICAg ICAgICBfX29mZl9lbmQgPSBfX3BiYWNrX2xlbiAtIF9fc2F2ZV9sZW47CgogICAgICAgICAgICB0 aGlzLT5zZXRnKF9NX2J1ZiwgX01fcGJhY2tfY3VyX3NhdmUgKyBfX29mZl9jdXIsCiAgICAgICAg ICAgICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgKyBfX29mZl9lbmQpOwogICAgICAgICAg ICBfTV9wYmFja19jdXJfc2F2ZSA9IF9fbnVsbDsKICAgICAgICAgICAgX01fcGJhY2tfZW5kX3Nh dmUgPSBfX251bGw7CiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSBmYWxzZTsKICAgICAgICAg IH0KICAgICAgfQoKCgogICAgICB2b2lkCiAgICAgIF9NX2luX2N1cl9tb3ZlKG9mZl90eXBlIF9f bikKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fb3V0X2N1cjsKICAgICAgICBf TV9pbl9jdXIgKz0gX19uOwogICAgICAgIGlmIChfX3Rlc3RvdXQgJiYgX01fYnVmX3VuaWZpZWQp CiAgICAgICAgICBfTV9vdXRfY3VyICs9IF9fbjsKICAgICAgfQojIDIwMiAiL3Vzci9sb2NhbC92 b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvc3RyZWFtYnVmIiAzCiAgICAgIHZvaWQKICAgICAg X01fb3V0X2N1cl9tb3ZlKG9mZl90eXBlIF9fbikKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0 aW4gPSBfTV9pbl9jdXI7CgogICAgICAgIF9NX291dF9jdXIgKz0gX19uOwogICAgICAgIGlmIChf X3Rlc3RpbiAmJiBfTV9idWZfdW5pZmllZCkKICAgICAgICAgIF9NX2luX2N1ciArPSBfX247CiAg ICAgICAgaWYgKF9NX291dF9jdXIgPiBfTV9vdXRfZW5kKQogICAgICAgICAgewogICAgICAgICAg ICBfTV9vdXRfZW5kID0gX01fb3V0X2N1cjsKCiAgICAgICAgICAgIGlmIChfX3Rlc3RpbikKICAg ICAgICAgICAgICBfTV9pbl9lbmQgKz0gX19uOwogICAgICAgICAgfQogICAgICB9CgoKCgogICAg ICBvZmZfdHlwZQogICAgICBfTV9vdXRfYnVmX3NpemUoKQogICAgICB7CiAgICAgICAgb2ZmX3R5 cGUgX19yZXQgPSAwOwogICAgICAgIGlmIChfTV9vdXRfY3VyKQogICAgICAgICAgewoKICAgICAg ICAgICAgaWYgKF9NX291dF9iZWcgPT0gX01fYnVmKQogICAgICAgICAgICAgIF9fcmV0ID0gX01f b3V0X2JlZyArIF9NX2J1Zl9zaXplIC0gX01fb3V0X2N1cjsKCiAgICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgICBfX3JldCA9IF9NX291dF9lbmQgLSBfTV9vdXRfY3VyOwogICAgICAgICAgfQog ICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKICBwdWJsaWM6CiAgICAgIHZpcnR1YWwKICAg ICAgfmJhc2ljX3N0cmVhbWJ1ZigpCiAgICAgIHsKICAgICAgICBfTV9idWZfdW5pZmllZCA9IGZh bHNlOwogICAgICAgIF9NX2J1Zl9zaXplID0gMDsKICAgICAgICBfTV9idWZfc2l6ZV9vcHQgPSAw OwogICAgICAgIF9NX21vZGUgPSBpb3NfYmFzZTo6b3Blbm1vZGUoMCk7CiAgICAgICAgX01fYnVm X2xvY2FsZV9pbml0ID0gZmFsc2U7CiAgICAgIH0KCgogICAgICBsb2NhbGUKICAgICAgcHViaW1i dWUoY29uc3QgbG9jYWxlICZfX2xvYykKICAgICAgewogICAgICAgIGxvY2FsZSBfX3RtcCh0aGlz LT5nZXRsb2MoKSk7CiAgICAgICAgdGhpcy0+aW1idWUoX19sb2MpOwogICAgICAgIHJldHVybiBf X3RtcDsKICAgICAgfQoKICAgICAgbG9jYWxlCiAgICAgIGdldGxvYygpIGNvbnN0CiAgICAgIHsK ICAgICAgICBpZiAoX01fYnVmX2xvY2FsZV9pbml0KQogICAgICAgICAgcmV0dXJuIF9NX2J1Zl9s b2NhbGU7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGxvY2FsZSgpOwogICAgICB9CgoK ICAgICAgX19zdHJlYW1idWZfdHlwZSoKICAgICAgcHVic2V0YnVmKGNoYXJfdHlwZSogX19zLCBz dHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+c2V0YnVmKF9fcywgX19uKTsgfQoK ICAgICAgcG9zX3R5cGUKICAgICAgcHVic2Vla29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6 OnNlZWtkaXIgX193YXksCiAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9k ZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNl ZWtvZmYoX19vZmYsIF9fd2F5LCBfX21vZGUpOyB9CgogICAgICBwb3NfdHlwZQogICAgICBwdWJz ZWVrcG9zKHBvc190eXBlIF9fc3AsCiAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2Rl IF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHRo aXMtPnNlZWtwb3MoX19zcCwgX19tb2RlKTsgfQoKICAgICAgaW50CiAgICAgIHB1YnN5bmMoKSB7 IHJldHVybiB0aGlzLT5zeW5jKCk7IH0KCgoKICAgICAgc3RyZWFtc2l6ZQogICAgICBpbl9hdmFp bCgpCiAgICAgIHsKICAgICAgICBzdHJlYW1zaXplIF9fcmV0OwogICAgICAgIGlmIChfTV9pbl9j dXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAgewogICAgICAgICAgICBpZiAo X01fcGJhY2tfaW5pdCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzaXplX3QgX19z YXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fcGJhY2tfY3VyX3NhdmU7CiAgICAgICAg ICAgICAgICBzaXplX3QgX19wYmFja19sZW4gPSBfTV9pbl9jdXIgLSBfTV9wYmFjazsKICAgICAg ICAgICAgICAgIF9fcmV0ID0gX19zYXZlX2xlbiAtIF9fcGJhY2tfbGVuOwogICAgICAgICAgICAg IH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fcmV0ID0gdGhpcy0+ZWdwdHIoKSAt IHRoaXMtPmdwdHIoKTsKICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX3JldCA9 IHRoaXMtPnNob3dtYW55YygpOwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKICAgICAg aW50X3R5cGUKICAgICAgc25leHRjKCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fZW9mID0g dHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIHJldHVybiAodHJhaXRzX3R5cGU6OmVxX2ludF90 eXBlKHRoaXMtPnNidW1wYygpLCBfX2VvZikKICAgICAgICAgICAgICAgID8gX19lb2YgOiB0aGlz LT5zZ2V0YygpKTsKICAgICAgfQoKICAgICAgaW50X3R5cGUKICAgICAgc2J1bXBjKCk7CgogICAg ICBpbnRfdHlwZQogICAgICBzZ2V0YygpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX3JldDsK ICAgICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICAg IF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCoodGhpcy0+Z3B0cigpKSk7CiAgICAg ICAgZWxzZQogICAgICAgICAgX19yZXQgPSB0aGlzLT51bmRlcmZsb3coKTsKICAgICAgICByZXR1 cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIHN0cmVhbXNpemUKICAgICAgc2dldG4oY2hhcl90eXBl KiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT54c2dldG4oX19zLCBf X24pOyB9CgoKICAgICAgaW50X3R5cGUKICAgICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2MpOwoK ICAgICAgaW50X3R5cGUKICAgICAgc3VuZ2V0YygpOwoKCiAgICAgIGludF90eXBlCiAgICAgIHNw dXRjKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgc3RyZWFtc2l6ZQogICAgICBzcHV0bihjb25zdCBj aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhzcHV0 bihfX3MsIF9fbik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZigpCiAg ICAgIDogX01fYnVmKF9fbnVsbCksIF9NX2J1Zl9zaXplKDApLCBfTV9idWZfc2l6ZV9vcHQoODE5 MiksCiAgICAgIF9NX2J1Zl91bmlmaWVkKGZhbHNlKSwgX01faW5fYmVnKDApLCBfTV9pbl9jdXIo MCksIF9NX2luX2VuZCgwKSwKICAgICAgX01fb3V0X2JlZygwKSwgX01fb3V0X2N1cigwKSwgX01f b3V0X2VuZCgwKSwKICAgICAgX01fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUoMCkpLCBfTV9idWZf bG9jYWxlKGxvY2FsZSgpKSwKICAgICAgX01fYnVmX2xvY2FsZV9pbml0KGZhbHNlKSwgX01fcGJh Y2tfY3VyX3NhdmUoMCksIF9NX3BiYWNrX2VuZF9zYXZlKDApLAogICAgICBfTV9wYmFja19pbml0 KGZhbHNlKQogICAgICB7IH0KCgogICAgICBjaGFyX3R5cGUqCiAgICAgIGViYWNrKCkgY29uc3Qg eyByZXR1cm4gX01faW5fYmVnOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGdwdHIoKSBjb25z dCB7IHJldHVybiBfTV9pbl9jdXI7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZWdwdHIoKSBj b25zdCB7IHJldHVybiBfTV9pbl9lbmQ7IH0KCiAgICAgIHZvaWQKICAgICAgZ2J1bXAoaW50IF9f bikgeyBfTV9pbl9jdXIgKz0gX19uOyB9CgogICAgICB2b2lkCiAgICAgIHNldGcoY2hhcl90eXBl KiBfX2diZWcsIGNoYXJfdHlwZSogX19nbmV4dCwgY2hhcl90eXBlKiBfX2dlbmQpCiAgICAgIHsK ICAgICAgICBfTV9pbl9iZWcgPSBfX2diZWc7CiAgICAgICAgX01faW5fY3VyID0gX19nbmV4dDsK ICAgICAgICBfTV9pbl9lbmQgPSBfX2dlbmQ7CiAgICAgICAgaWYgKCEoX01fbW9kZSAmIGlvc19i YXNlOjppbikgJiYgX19nYmVnICYmIF9fZ25leHQgJiYgX19nZW5kKQogICAgICAgICAgX01fbW9k ZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6aW47CiAgICAgIH0KCgogICAgICBjaGFyX3R5cGUqCiAg ICAgIHBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2JlZzsgfQoKICAgICAgY2hhcl90eXBl KgogICAgICBwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2N1cjsgfQoKICAgICAgY2hhcl90 eXBlKgogICAgICBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9lbmQ7IH0KCiAgICAgIHZv aWQKICAgICAgcGJ1bXAoaW50IF9fbikgeyBfTV9vdXRfY3VyICs9IF9fbjsgfQoKICAgICAgdm9p ZAogICAgICBzZXRwKGNoYXJfdHlwZSogX19wYmVnLCBjaGFyX3R5cGUqIF9fcGVuZCkKICAgICAg ewogICAgICAgIF9NX291dF9iZWcgPSBfTV9vdXRfY3VyID0gX19wYmVnOwogICAgICAgIF9NX291 dF9lbmQgPSBfX3BlbmQ7CiAgICAgICAgaWYgKCEoX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpICYm IF9fcGJlZyAmJiBfX3BlbmQpCiAgICAgICAgICBfTV9tb2RlID0gX01fbW9kZSB8IGlvc19iYXNl OjpvdXQ7CiAgICAgIH0KCgoKICAgICAgdmlydHVhbCB2b2lkCiAgICAgIGltYnVlKGNvbnN0IGxv Y2FsZSYgX19sb2MpCiAgICAgIHsKICAgICAgICBfTV9idWZfbG9jYWxlX2luaXQgPSB0cnVlOwog ICAgICAgIGlmIChfTV9idWZfbG9jYWxlICE9IF9fbG9jKQogICAgICAgICAgX01fYnVmX2xvY2Fs ZSA9IF9fbG9jOwogICAgICB9CgoKICAgICAgdmlydHVhbCBiYXNpY19zdHJlYW1idWY8Y2hhcl90 eXBlLF9UcmFpdHM+KgogICAgICBzZXRidWYoY2hhcl90eXBlKiwgc3RyZWFtc2l6ZSkKICAgICAg eyByZXR1cm4gdGhpczsgfQoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBzZWVrb2ZmKG9m Zl90eXBlLCBpb3NfYmFzZTo6c2Vla2RpciwKICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1v ZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiBwb3NfdHlw ZShvZmZfdHlwZSgtMSkpOyB9CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtwb3Mo cG9zX3R5cGUsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlID0gaW9zX2Jhc2U6Omlu IHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsg fQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgc3luYygpIHsgcmV0dXJuIDA7IH0KCgogICAgICB2 aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgc2hvd21hbnljKCkgeyByZXR1cm4gMDsgfQoKICAgICAg dmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6 ZSBfX24pOwoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1bmRlcmZsb3coKQogICAgICB7 IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAg ICAgdWZsb3coKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlwZTo6 ZW9mKCk7CiAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUo dGhpcy0+dW5kZXJmbG93KCksIF9fcmV0KTsKICAgICAgICBib29sIF9fdGVzdHBlbmRpbmcgPSBf TV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kOwogICAgICAgIGlmICghX190ZXN0ZW9m ICYmIF9fdGVzdHBlbmRpbmcpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRz X3R5cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOwogICAgICAgICAgICArK19NX2luX2N1cjsK ICAgICAgICAgICAgaWYgKF9NX2J1Zl91bmlmaWVkICYmIF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0 KQogICAgICAgICAgICAgICsrX01fb3V0X2N1cjsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4g X19yZXQ7CiAgICAgIH0KCgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHBiYWNrZmFpbChp bnRfdHlwZSA9IHRyYWl0c190eXBlOjplb2YoKSkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6 OmVvZigpOyB9CgoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhzcHV0bihjb25zdCBj aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgdmlydHVhbCBpbnRfdHlwZQog ICAgICBvdmVyZmxvdyhpbnRfdHlwZSA9IHRyYWl0c190eXBlOjplb2YoKSkKICAgICAgeyByZXR1 cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CiMgNDg1ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2lu Y2x1ZGUvYysrLzMuMi9zdHJlYW1idWYiIDMKICAgIHByaXZhdGU6CiAgICAgIGJhc2ljX3N0cmVh bWJ1Zihjb25zdCBfX3N0cmVhbWJ1Zl90eXBlJikgeyB9OwoKICAgICAgX19zdHJlYW1idWZfdHlw ZSYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKSB7IHJldHVybiAqdGhp czsgfTsKCiAgICB9Owp9CgoKCgoKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0cmVhbWJ1Zi50Y2MiIDEgMwojIDM5ICIvdXNyL2xvY2FsL3ZvbC9nY2Mv My4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0cmVhbWJ1Zi50Y2MiIDMKCm5hbWVzcGFjZSBzdGQK ewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNvbnN0 IHNpemVfdAogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BiYWNrX3Np emU7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5 cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFz aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2J1bXBjKCkKICAgIHsKICAgICAg aW50X3R5cGUgX19yZXQ7CiAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5f ZW5kKQogICAgICAgIHsKICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqKHRoaXMtPmdwdHIoKSk7 CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgxKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5 cGU6OnRvX2ludF90eXBlKF9fYyk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQg PSB0aGlzLT51ZmxvdygpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVh bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFy VCwgX1RyYWl0cz46OgogICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIGlu dF90eXBlIF9fcmV0OwogICAgICBib29sIF9fdGVzdHBvcyA9IF9NX2luX2N1ciAmJiBfTV9pbl9i ZWcgPCBfTV9pbl9jdXI7CiAgICAgIGJvb2wgX190ZXN0bmUgPSBfTV9pbl9jdXIgJiYgIXRyYWl0 c190eXBlOjplcShfX2MsIHRoaXMtPmdwdHIoKVstMV0pOwogICAgICBpZiAoIV9fdGVzdHBvcyB8 fCBfX3Rlc3RuZSkKICAgICAgICBfX3JldCA9IHBiYWNrZmFpbCh0cmFpdHNfdHlwZTo6dG9faW50 X3R5cGUoX19jKSk7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfTV9pbl9jdXJfbW92 ZSgtMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+ Z3B0cigpKTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3Ry ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0No YXJULCBfVHJhaXRzPjo6CiAgICBzdW5nZXRjKCkKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7 CiAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fY3VyKQogICAgICAgIHsK ICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5 cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg IF9fcmV0ID0gdGhpcy0+cGJhY2tmYWlsKCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBl bmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2lj X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpCiAg ICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01fb3V0X2J1Zl9zaXplKCkpCiAg ICAgICAgewogICAgICAgICAgKl9NX291dF9jdXIgPSBfX2M7CiAgICAgICAgICBfTV9vdXRfY3Vy X21vdmUoMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2Mp OwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhpcy0+b3ZlcmZsb3codHJh aXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNp emUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHhzZ2V0bihjaGFy X3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19yZXQg PSAwOwogICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiAgICAgICAgewogICAgICAgICAgc2l6ZV90 IF9fYnVmX2xlbiA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsKICAgICAgICAgIGlmIChfX2J1Zl9s ZW4gPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9fcmVtYWluaW5nID0g X19uIC0gX19yZXQ7CiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gbWluKF9fYnVmX2xlbiwg X19yZW1haW5pbmcpOwogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01faW5f Y3VyLCBfX2xlbik7CiAgICAgICAgICAgICAgX19yZXQgKz0gX19sZW47CiAgICAgICAgICAgICAg X19zICs9IF9fbGVuOwogICAgICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKF9fbGVuKTsKICAgICAg ICAgICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAgICAgICAgewogICAgICAg ICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPnVmbG93KCk7CiAgICAgICAgICAgICAgaWYgKCF0 cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3MrKywg dHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsKICAgICAgICAgICAgICAgICAgKytfX3Jl dDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoK CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0 cmVhbXNpemUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHhzcHV0 bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHN0cmVh bXNpemUgX19yZXQgPSAwOwogICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiAgICAgICAgewogICAg ICAgICAgb2ZmX3R5cGUgX19idWZfbGVuID0gX01fb3V0X2J1Zl9zaXplKCk7CiAgICAgICAgICBp ZiAoX19idWZfbGVuID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIG9mZl90eXBlIF9f cmVtYWluaW5nID0gX19uIC0gX19yZXQ7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19sZW4gPSBt aW4oX19idWZfbGVuLCBfX3JlbWFpbmluZyk7CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNv cHkoX01fb3V0X2N1ciwgX19zLCBfX2xlbik7CiAgICAgICAgICAgICAgX19yZXQgKz0gX19sZW47 CiAgICAgICAgICAgICAgX19zICs9IF9fbGVuOwogICAgICAgICAgICAgIF9NX291dF9jdXJfbW92 ZShfX2xlbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT5vdmVyZmxvdyh0cmFp dHNfdHlwZTo6dG9faW50X3R5cGUoKl9fcykpOwogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5 cGU6OmVxX2ludF90eXBlKF9fYywgdHJhaXRzX3R5cGU6OmVvZigpKSkKICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgKytfX3JldDsKICAgICAgICAgICAgICAgICAgKytfX3M7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNp emUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfX2lv cywKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+ KiBfX3NiaW4sCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf VHJhaXRzPiogX19zYm91dCkKICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50 X3R5cGUgaW50X3R5cGU7CgogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKICAgICAgc3RyZWFt c2l6ZSBfX2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2YWlsKCk7CiAgICAgIHN0cmVhbXNpemUgX194 dHJjdDsKICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfX3Nib3V0LT5fTV9tb2RlICYgaW9zX2Jhc2U6 Om91dDsKICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgd2hpbGUgKF9fdGVzdHB1dCAmJiBf X2J1ZnNpemUgIT0gLTEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3h0cmN0ID0gX19z Ym91dC0+c3B1dG4oX19zYmluLT5ncHRyKCksIF9fYnVmc2l6ZSk7CiAgICAgICAgICAgICAgX19y ZXQgKz0gX194dHJjdDsKICAgICAgICAgICAgICBfX3NiaW4tPl9NX2luX2N1cl9tb3ZlKF9feHRy Y3QpOwogICAgICAgICAgICAgIGlmIChfX3h0cmN0ID09IF9fYnVmc2l6ZSkKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fc2Jpbi0+ c2dldGMoKSwgX1RyYWl0czo6ZW9mKCkpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg ICAgICAgICAgICAgICBfX2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2YWlsKCk7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgIH0KICAgICAgICB9CiAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgIHsK ICAgICAgICAgIF9faW9zLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgIGlm ICgoX19pb3MuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmZhaWxiaXQpICE9IDApCiAgICAgICAg ICAgIHRocm93OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKICBleHRl cm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyZWFtYnVmPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0 ZQogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPGNoYXI+Jiwg YmFzaWNfc3RyZWFtYnVmPGNoYXI+KiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVh bWJ1ZjxjaGFyPiopOwoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyZWFtYnVmPHdj aGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVh bWJ1ZnMoYmFzaWNfaW9zPHdjaGFyX3Q+JiwgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+KiwKICAg ICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiopOwp9CiMgNDk5ICIv dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9zdHJlYW1idWYiIDIgMwojIDUx ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pb3MiIDIgMwojIDEgIi91 c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLmgiIDEg MwojIDM5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2lj X2lvcy5oIiAzCgojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmgiIDEgMwojIDQyICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4y L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0cmVhbWJ1Zl9pdGVyYXRvci5oIiAzCgpuYW1lc3BhY2Ug c3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg Y2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8aW5wdXRfaXRl cmF0b3JfdGFnLCBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlLAogICAgICAgICAg ICAgICAgICAgICAgX0NoYXJUKiwgX0NoYXJUJj4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5 cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAg ICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IHN0cmVhbWJ1Zl90eXBl OwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5 cGU7CgogICAgcHJpdmF0ZToKCgoKCgoKCiAgICAgIG11dGFibGUgc3RyZWFtYnVmX3R5cGUqIF9N X3NidWY7CiAgICAgIGludF90eXBlIF9NX2M7CgogICAgcHVibGljOgogICAgICBpc3RyZWFtYnVm X2l0ZXJhdG9yKCkgdGhyb3coKQogICAgICA6IF9NX3NidWYoMCksIF9NX2ModHJhaXRzX3R5cGU6 OmVvZigpKSB7IH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3Mp IHRocm93KCkKICAgICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fYyh0cmFpdHNfdHlwZTo6 ZW9mKCkpIHsgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19z KSB0aHJvdygpCiAgICAgIDogX01fc2J1ZihfX3MpLCBfTV9jKHRyYWl0c190eXBlOjplb2YoKSkg eyB9CgoKICAgICAgY2hhcl90eXBlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX01fZ2V0KCkpOyB9CgogICAgICBpc3RyZWFt YnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIGNvbnN0IGlu dF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGlmIChfTV9zYnVmICYm IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfTV9zYnVmLT5zYnVtcGMoKSwgX19lb2YpKQogICAg ICAgICAgX01fc2J1ZiA9IDA7CiAgICAgICAgZWxzZQogICAgICAgICAgX01fYyA9IF9fZW9mOwog ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcgog ICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9m ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IgX19vbGQg PSAqdGhpczsKICAgICAgICBpZiAoX01fc2J1ZgogICAgICAgICAgICAmJiB0cmFpdHNfdHlwZTo6 ZXFfaW50X3R5cGUoKF9fb2xkLl9NX2MgPSBfTV9zYnVmLT5zYnVtcGMoKSksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2VvZikpCiAgICAgICAgICBfTV9zYnVmID0g MDsKICAgICAgICBlbHNlCiAgICAgICAgICBfTV9jID0gX19lb2Y7CiAgICAgICAgcmV0dXJuIF9f b2xkOwogICAgICB9CgoKCgogICAgICBib29sCiAgICAgIGVxdWFsKGNvbnN0IGlzdHJlYW1idWZf aXRlcmF0b3ImIF9fYikgY29uc3QKICAgICAgewogICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9m ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGJvb2wgX190aGlzZW9mID0gdHJhaXRzX3R5 cGU6OmVxX2ludF90eXBlKF9NX2dldCgpLCBfX2VvZik7CiAgICAgICAgYm9vbCBfX2Jlb2YgPSB0 cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19iLl9NX2dldCgpLCBfX2VvZik7CiAgICAgICAgcmV0 dXJuIChfX3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAg ICAgfQoKCiAgICBwcml2YXRlOgogICAgICBpbnRfdHlwZQogICAgICBfTV9nZXQoKSBjb25zdAog ICAgICB7CiAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7 CiAgICAgICAgaW50X3R5cGUgX19yZXQgPSBfX2VvZjsKICAgICAgICBpZiAoX01fc2J1ZikKICAg ICAgICAgIHsKICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX01fYywg X19lb2YpKQogICAgICAgICAgICAgIF9fcmV0ID0gX01fYzsKICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoKF9fcmV0ID0gX01fc2J1Zi0+ c2dldGMoKSksIF9fZW9mKSkKICAgICAgICAgICAgICAgIF9NX3NidWYgPSAwOwogICAgICAgICAg fQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y PT0oY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsCiAgICAg ICAgICAgICAgIGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19i KQogICAgeyByZXR1cm4gX19hLmVxdWFsKF9fYik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29u c3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsCiAgICAgICAgICAg ICAgIGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19iKQogICAg eyByZXR1cm4gIV9fYS5lcXVhbChfX2IpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3IKICAgIDogcHVi bGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+ CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg IHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gb3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAg IHN0cmVhbWJ1Zl90eXBlKiBfTV9zYnVmOwogICAgICBib29sIF9NX2ZhaWxlZDsKCiAgICBwdWJs aWM6CiAgICAgIGlubGluZQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYg X19zKSB0aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9mYWlsZWQoIV9N X3NidWYpIHsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19z KSB0aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0K CiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKTsK CiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9w ZXJhdG9yKysoaW50KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3Ry ZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgdGhyb3coKQogICAgICB7IHJldHVy biAqdGhpczsgfQoKICAgICAgYm9vbAogICAgICBmYWlsZWQoKSBjb25zdCB0aHJvdygpCiAgICAg IHsgcmV0dXJuIF9NX2ZhaWxlZDsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJU LCBfVHJhaXRzPiYKICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPjo6b3Bl cmF0b3I9KF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIGlmICghX01fZmFpbGVkICYmCiAgICAgICAg ICBfVHJhaXRzOjplcV9pbnRfdHlwZShfTV9zYnVmLT5zcHV0YyhfX2MpLCBfVHJhaXRzOjplb2Yo KSkpCiAgICAgICAgX01fZmFpbGVkID0gdHJ1ZTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQp9 CiMgNDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNf aW9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2Jp dHMvbG9jYWxlX2ZhY2V0cy5oIiAxIDMKIyA0NCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNs dWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKCgojIDEgIi91c3IvbG9jYWwvdm9s L2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2N3Y3R5cGUiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL3Zv bC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jd2N0eXBlIiAzCgoKCgojIDEgIi91c3IvaW5jbHVk ZS93Y3R5cGUuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwojIDEgIi91c3Iv bG9jYWwvdm9sL2djYy8zLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1 ZGUvc3RkZGVmLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDIgMwojIDYxICIv dXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB3Y3R5cGVf dDsKIyA3OSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCmVudW0KewogIF9fSVN3dXBwZXIgPSAw LAogIF9fSVN3bG93ZXIgPSAxLAogIF9fSVN3YWxwaGEgPSAyLAogIF9fSVN3ZGlnaXQgPSAzLAog IF9fSVN3eGRpZ2l0ID0gNCwKICBfX0lTd3NwYWNlID0gNSwKICBfX0lTd3ByaW50ID0gNiwKICBf X0lTd2dyYXBoID0gNywKICBfX0lTd2JsYW5rID0gOCwKICBfX0lTd2NudHJsID0gOSwKICBfX0lT d3B1bmN0ID0gMTAsCiAgX19JU3dhbG51bSA9IDExLAoKICBfSVN3dXBwZXIgPSAoKF9fSVN3dXBw ZXIpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPDwgMjQpIDogKChfX0lTd3Vw cGVyKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3dXBwZXIpKSA8PCA4KSA6ICgoX19JU3d1 cHBlcikgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPj4gOCkgOiAoaW50KSAo KDFVTCA8PCAoX19JU3d1cHBlcikpID4+IDI0KSkpKSwKICBfSVN3bG93ZXIgPSAoKF9fSVN3bG93 ZXIpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPDwgMjQpIDogKChfX0lTd2xv d2VyKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3bG93ZXIpKSA8PCA4KSA6ICgoX19JU3ds b3dlcikgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPj4gOCkgOiAoaW50KSAo KDFVTCA8PCAoX19JU3dsb3dlcikpID4+IDI0KSkpKSwKICBfSVN3YWxwaGEgPSAoKF9fSVN3YWxw aGEpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPDwgMjQpIDogKChfX0lTd2Fs cGhhKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxwaGEpKSA8PCA4KSA6ICgoX19JU3dh bHBoYSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPj4gOCkgOiAoaW50KSAo KDFVTCA8PCAoX19JU3dhbHBoYSkpID4+IDI0KSkpKSwKICBfSVN3ZGlnaXQgPSAoKF9fSVN3ZGln aXQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPDwgMjQpIDogKChfX0lTd2Rp Z2l0KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3ZGlnaXQpKSA8PCA4KSA6ICgoX19JU3dk aWdpdCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPj4gOCkgOiAoaW50KSAo KDFVTCA8PCAoX19JU3dkaWdpdCkpID4+IDI0KSkpKSwKICBfSVN3eGRpZ2l0ID0gKChfX0lTd3hk aWdpdCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3eGRpZ2l0KSkgPDwgMjQpIDogKChfX0lT d3hkaWdpdCkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpIDw8IDgpIDogKChf X0lTd3hkaWdpdCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpID4+IDgpIDog KGludCkgKCgxVUwgPDwgKF9fSVN3eGRpZ2l0KSkgPj4gMjQpKSkpLAogIF9JU3dzcGFjZSA9ICgo X19JU3dzcGFjZSkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA8PCAyNCkgOiAo KF9fSVN3c3BhY2UpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpIDw8IDgpIDog KChfX0lTd3NwYWNlKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA+PiA4KSA6 IChpbnQpICgoMVVMIDw8IChfX0lTd3NwYWNlKSkgPj4gMjQpKSkpLAogIF9JU3dwcmludCA9ICgo X19JU3dwcmludCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA8PCAyNCkgOiAo KF9fSVN3cHJpbnQpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dwcmludCkpIDw8IDgpIDog KChfX0lTd3ByaW50KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA+PiA4KSA6 IChpbnQpICgoMVVMIDw8IChfX0lTd3ByaW50KSkgPj4gMjQpKSkpLAogIF9JU3dncmFwaCA9ICgo X19JU3dncmFwaCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA8PCAyNCkgOiAo KF9fSVN3Z3JhcGgpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpIDw8IDgpIDog KChfX0lTd2dyYXBoKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA+PiA4KSA6 IChpbnQpICgoMVVMIDw8IChfX0lTd2dyYXBoKSkgPj4gMjQpKSkpLAogIF9JU3dibGFuayA9ICgo X19JU3dibGFuaykgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA8PCAyNCkgOiAo KF9fSVN3YmxhbmspIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dibGFuaykpIDw8IDgpIDog KChfX0lTd2JsYW5rKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA+PiA4KSA6 IChpbnQpICgoMVVMIDw8IChfX0lTd2JsYW5rKSkgPj4gMjQpKSkpLAogIF9JU3djbnRybCA9ICgo X19JU3djbnRybCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA8PCAyNCkgOiAo KF9fSVN3Y250cmwpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3djbnRybCkpIDw8IDgpIDog KChfX0lTd2NudHJsKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA+PiA4KSA6 IChpbnQpICgoMVVMIDw8IChfX0lTd2NudHJsKSkgPj4gMjQpKSkpLAogIF9JU3dwdW5jdCA9ICgo X19JU3dwdW5jdCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA8PCAyNCkgOiAo KF9fSVN3cHVuY3QpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpIDw8IDgpIDog KChfX0lTd3B1bmN0KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA+PiA4KSA6 IChpbnQpICgoMVVMIDw8IChfX0lTd3B1bmN0KSkgPj4gMjQpKSkpLAogIF9JU3dhbG51bSA9ICgo X19JU3dhbG51bSkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA8PCAyNCkgOiAo KF9fSVN3YWxudW0pIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpIDw8IDgpIDog KChfX0lTd2FsbnVtKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA+PiA4KSA6 IChpbnQpICgoMVVMIDw8IChfX0lTd2FsbnVtKSkgPj4gMjQpKSkpCn07CgoKCmV4dGVybiAiQyIg ewoKCgoKCgoKZXh0ZXJuIGludCBpc3dhbG51bSAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoK CmV4dGVybiBpbnQgaXN3YWxwaGEgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IGlzd2NudHJsICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3ZGlnaXQg KHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3dncmFwaCAod2ludF90IF9f d2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dsb3dlciAod2ludF90IF9fd2MpIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgaXN3cHJpbnQgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBpbnQgaXN3cHVuY3QgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg aXN3c3BhY2UgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3dXBwZXIg KHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3eGRpZ2l0ICh3aW50X3Qg X193YykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBpc3dibGFuayAod2ludF90IF9fd2MpIHRo cm93ICgpOwojIDE3OCAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCmV4dGVybiB3Y3R5cGVfdCB3 Y3R5cGUgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg aXN3Y3R5cGUgKHdpbnRfdCBfX3djLCB3Y3R5cGVfdCBfX2Rlc2MpIHRocm93ICgpOwojIDI0OSAi L3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCnR5cGVkZWYgX19jb25zdCBfX2ludDMyX3QgKndjdHJh bnNfdDsKCgpleHRlcm4gd2ludF90IHRvd2xvd2VyICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoK ZXh0ZXJuIHdpbnRfdCB0b3d1cHBlciAod2ludF90IF9fd2MpIHRocm93ICgpOwojIDI3NSAiL3Vz ci9pbmNsdWRlL3djdHlwZS5oIiAzCn0KIyAyODggIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwpl eHRlcm4gIkMiIHsKCgoKZXh0ZXJuIHdjdHJhbnNfdCB3Y3RyYW5zIChfX2NvbnN0IGNoYXIgKl9f cHJvcGVydHkpIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgdG93Y3RyYW5zICh3aW50X3QgX193 Yywgd2N0cmFuc190IF9fZGVzYykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IF9faXN3YWxu dW1fbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKCmV4 dGVybiBpbnQgX19pc3dhbHBoYV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX2lzd2NudHJsX2wgKHdpbnRfdCBfX3djLCBfX2xvY2Fs ZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2lzd2RpZ2l0X2wgKHdpbnRf dCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2lz d2dyYXBoX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBpbnQgX19pc3dsb3dlcl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2Fs ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX2lzd3ByaW50X2wgKHdpbnRfdCBfX3djLCBfX2xv Y2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3dwdW5jdF9sICh3 aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50 IF9faXN3c3BhY2VfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgp OwoKCgoKZXh0ZXJuIGludCBfX2lzd3VwcGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9f bG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3d4ZGlnaXRfbCAod2ludF90IF9f d2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd2Js YW5rX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIHdjdHlwZV90IF9fd2N0eXBlX2wgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSwgX19sb2Nh bGVfdCBfX2xvY2FsZSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2lzd2N0eXBlX2wg KHdpbnRfdCBfX3djLCB3Y3R5cGVfdCBfX2Rlc2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAgICAg dGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gd2ludF90IF9fdG93bG93ZXJfbCAod2ludF90IF9fd2Ms IF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgX190b3d1cHBl cl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVy biB3Y3RyYW5zX3QgX193Y3RyYW5zX2wgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSwgX19sb2Nh bGVfdCBfX2xvY2FsZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IF9fdG93Y3RyYW5z X2wgKHdpbnRfdCBfX3djLCB3Y3RyYW5zX3QgX19kZXNjLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgp9CiMgNTMgIi91c3IvbG9j YWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2N3Y3R5cGUiIDIgMwojIDc3ICIvdXNyL2xv Y2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jd2N0eXBlIiAzCm5hbWVzcGFjZSBzdGQK ewogIHVzaW5nIDo6d2ludF90OwoKICB1c2luZyA6OndjdHlwZV90OwogIHVzaW5nIDo6d2N0cmFu c190OwoKICB1c2luZyA6Omlzd2FsbnVtOwogIHVzaW5nIDo6aXN3YWxwaGE7CiAgdXNpbmcgOjpp c3dibGFuazsKICB1c2luZyA6Omlzd2NudHJsOwogIHVzaW5nIDo6aXN3ZGlnaXQ7CiAgdXNpbmcg Ojppc3dncmFwaDsKICB1c2luZyA6Omlzd2xvd2VyOwogIHVzaW5nIDo6aXN3cHJpbnQ7CiAgdXNp bmcgOjppc3dwcmludDsKICB1c2luZyA6Omlzd3B1bmN0OwogIHVzaW5nIDo6aXN3c3BhY2U7CiAg dXNpbmcgOjppc3d1cHBlcjsKICB1c2luZyA6Omlzd3hkaWdpdDsKICB1c2luZyA6Omlzd2N0eXBl OwogIHVzaW5nIDo6dG93bG93ZXI7CiAgdXNpbmcgOjp0b3d1cHBlcjsKICB1c2luZyA6OnRvd2N0 cmFuczsKICB1c2luZyA6OndjdHJhbnM7CiAgdXNpbmcgOjp3Y3R5cGU7Cn0KIyA0NyAiL3Vzci9s b2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIg MwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2lvcyIgMSAzCiMg NDggIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2Zh Y2V0cy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3QgX19wYWQ7CgoKCiMgMSAiL3Vzci9s b2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9j dHlwZV9iYXNlLmgiIDEgMwojIDUwICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysr LzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2Jhc2UuaCIgMwogIHN0cnVjdCBjdHlw ZV9iYXNlCiAgewoKICAgIHR5cGVkZWYgY29uc3QgaW50KiBfX3RvX3R5cGU7CgoKCiAgICB0eXBl ZGVmIHVuc2lnbmVkIHNob3J0IG1hc2s7CiAgICBzdGF0aWMgY29uc3QgbWFzayB1cHBlciA9IF9J U3VwcGVyOwogICAgc3RhdGljIGNvbnN0IG1hc2sgbG93ZXIgPSBfSVNsb3dlcjsKICAgIHN0YXRp YyBjb25zdCBtYXNrIGFscGhhID0gX0lTYWxwaGE7CiAgICBzdGF0aWMgY29uc3QgbWFzayBkaWdp dCA9IF9JU2RpZ2l0OwogICAgc3RhdGljIGNvbnN0IG1hc2sgeGRpZ2l0ID0gX0lTeGRpZ2l0Owog ICAgc3RhdGljIGNvbnN0IG1hc2sgc3BhY2UgPSBfSVNzcGFjZTsKICAgIHN0YXRpYyBjb25zdCBt YXNrIHByaW50ID0gX0lTcHJpbnQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayBncmFwaCA9IF9JU2dy YXBoOwogICAgc3RhdGljIGNvbnN0IG1hc2sgY250cmwgPSBfSVNjbnRybDsKICAgIHN0YXRpYyBj b25zdCBtYXNrIHB1bmN0ID0gX0lTcHVuY3Q7CiAgICBzdGF0aWMgY29uc3QgbWFzayBhbG51bSA9 IF9JU2FsbnVtOwogIH07CiMgNjQgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysv My4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIGNsYXNzIF9fY3R5cGVfYWJzdHJhY3RfYmFzZSA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0 LCBwdWJsaWMgY3R5cGVfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hh clQgY2hhcl90eXBlOwoKICAgICAgYm9vbAogICAgICBpcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9f YykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faXMoX19tLCBfX2MpOyB9CgogICAgICBj b25zdCBjaGFyX3R5cGUqCiAgICAgIGlzKGNvbnN0IGNoYXJfdHlwZSAqX19sbywgY29uc3QgY2hh cl90eXBlICpfX2hpLCBtYXNrICpfX3ZlYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f aXMoX19sbywgX19oaSwgX192ZWMpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHNj YW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf X2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19zY2FuX2lzKF9fbSwgX19sbywgX19o aSk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgc2Nhbl9ub3QobWFzayBfX20sIGNv bnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5kb19zY2FuX25vdChfX20sIF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFy X3R5cGUKICAgICAgdG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5kb190b3VwcGVyKF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgdG91 cHBlcihjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBl CiAgICAgIHRvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ ZG9fdG9sb3dlcihfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHRvbG93ZXIo Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAg ICB3aWRlbihjaGFyIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19j KTsgfQoKICAgICAgY29uc3QgY2hhcioKICAgICAgd2lkZW4oY29uc3QgY2hhciogX19sbywgY29u c3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX3RvKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5kb193aWRlbihfX2xvLCBfX2hpLCBfX3RvKTsgfQoKICAgICAgY2hhcgogICAgICBuYXJyb3co Y2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ ZG9fbmFycm93KF9fYywgX19kZmF1bHQpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAg IG5hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAg ICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyICpfX3RvKSBjb25zdAogICAgICB7IHJldHVy biB0aGlzLT5kb19uYXJyb3coX19sbywgX19oaSwgX19kZmF1bHQsIF9fdG8pOyB9CgogICAgcHJv dGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBfX2N0eXBlX2Fic3RyYWN0X2Jhc2Uoc2l6ZV90 IF9fcmVmcyA9IDApOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICB2aXJ0dWFsCiAg ICAgIH5fX2N0eXBlX2Fic3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAgIHZpcnR1YWwgYm9vbAogICAg ICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QgPSAwOwoKICAgICAgdmlydHVh bCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29u c3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICBtYXNrKiBfX3ZlYykgY29uc3QgPSAwOwoK ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20s IGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUq IF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBk b19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hh cl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAgICB2aXJ0 dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUqIF9fbG8sIGNv bnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUK ICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29u c3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hh cl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBk b193aWRlbihjaGFyKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAg IGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksCiAgICAgICAgICAg ICAgIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXIKICAg ICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3QgPSAwOwoKICAgICAg dmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUq IF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICAgICBjaGFyIF9fZGZh dWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0ID0gMDsKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZSA6IHB1YmxpYyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8 X0NoYXJUPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGN0eXBlOjptYXNrIG1hc2s7CgogICAgICBzdGF0aWMg bG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKHNpemVfdCBfX3JlZnMg PSAwKSA6IF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxfQ2hhclQ+KF9fcmVmcykgeyB9CgogICBwcm90 ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlKCk7CgogICAgICB2aXJ0dWFsIGJvb2wK ICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0OwoKICAgICAgdmlydHVh bCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29u c3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNv bnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBl KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25z dCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUq IF9fbG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7Cgog ICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSBfX2MpIGNv bnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hh cl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVh bCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAg IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19s bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl CiAgICAgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh cioKICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hh cl90eXBlKiBfX2Rlc3QpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJv dyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBj aGFyX3R5cGUqCiAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNo YXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIqIF9fZGVz dCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6 OmlkIGN0eXBlPF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY3R5cGU8Y2hh cj4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPGNoYXI+CiAgICB7CiAgICBwdWJsaWM6 CgogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIF9f Y19sb2NhbGUgX01fY19sb2NhbGVfY3R5cGU7CiAgICAgIGJvb2wgX01fZGVsOwogICAgICBfX3Rv X3R5cGUgX01fdG91cHBlcjsKICAgICAgX190b190eXBlIF9NX3RvbG93ZXI7CiAgICAgIGNvbnN0 IG1hc2sqIF9NX3RhYmxlOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7 CiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgdGFibGVfc2l6ZSA9IDEgKyBzdGF0aWNfY2FzdDx1 bnNpZ25lZCBjaGFyPigtMSk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShjb25zdCBtYXNr KiBfX3RhYmxlID0gMCwgYm9vbCBfX2RlbCA9IGZhbHNlLCBzaXplX3QgX19yZWZzID0gMCk7Cgog ICAgICBleHBsaWNpdAogICAgICBjdHlwZShfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgbWFzayog X190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwKICAgICAgICAgICAgc2l6ZV90IF9fcmVm cyA9IDApOwoKICAgICAgaW5saW5lIGJvb2wKICAgICAgaXMobWFzayBfX20sIGNoYXIgX19jKSBj b25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgogICAgICBpcyhjb25zdCBjaGFyKiBfX2xv LCBjb25zdCBjaGFyKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7CgogICAgICBpbmxpbmUgY29u c3QgY2hhcioKICAgICAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciogX19sbywgY29uc3Qg Y2hhciogX19oaSkgY29uc3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgc2Nhbl9u b3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0OwoK ICAgIHByb3RlY3RlZDoKICAgICAgY29uc3QgbWFzayoKICAgICAgdGFibGUoKSBjb25zdCB0aHJv dygpCiAgICAgIHsgcmV0dXJuIF9NX3RhYmxlOyB9CgogICAgICBzdGF0aWMgY29uc3QgbWFzayoK ICAgICAgY2xhc3NpY190YWJsZSgpIHRocm93KCk7CgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlw ZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUg X19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhj b25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMp IGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMo bWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBj b25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdCht YXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBj aGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9f dG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUq CiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp IGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5 cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93 ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAg dmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNo YXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgog ICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZp cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBf X2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0 LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgY29uc3QgY3R5 cGU8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8Y3R5cGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmIF9fbG9j KTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjdHlwZTx3Y2hhcl90PiA6IHB1YmxpYyBfX2N0 eXBlX2Fic3RyYWN0X2Jhc2U8d2NoYXJfdD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVk ZWYgd2NoYXJfdCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgd2N0eXBlX3QgX193bWFza190eXBl OwoKICAgIHByb3RlY3RlZDoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9jdHlwZTsKCiAg ICBwdWJsaWM6CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAg ICAgIGN0eXBlKHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBl KF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgog ICAgICBfX3dtYXNrX3R5cGUKICAgICAgX01fY29udmVydF90b193bWFzayhjb25zdCBtYXNrIF9f bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBi b29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZp cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8s IGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVh bCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJf dHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwg Y29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90 eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0 OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNv bnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hh cl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVh bCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmly dHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBj b25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAg ICAgZG9fd2lkZW4oY2hhcikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAg IGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSog X19kZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90 eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl KgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUq IF9faGksCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0 OwoKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0eXBlPHdjaGFyX3Q+JgogICAgdXNl X2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7CgoKCiMgMSAiL3Vz ci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0 cy9jdHlwZV9pbmxpbmUuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVk ZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvY3R5cGVfaW5saW5lLmgiIDMKICBib29s CiAgY3R5cGU8Y2hhcj46OgogIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3QKICB7IHJldHVy biBfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpXSAmIF9fbTsgfQoKICBj b25zdCBjaGFyKgogIGN0eXBlPGNoYXI+OjoKICBpcyhjb25zdCBjaGFyKiBfX2xvdywgY29uc3Qg Y2hhciogX19oaWdoLCBtYXNrKiBfX3ZlYykgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBf X2hpZ2gpCiAgICAgICpfX3ZlYysrID0gX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh cj4oKl9fbG93KyspXTsKICAgIHJldHVybiBfX2hpZ2g7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0 eXBlPGNoYXI+OjoKICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3Qg Y2hhciogX19oaWdoKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaAogICAgICAg ICAgICYmICEoX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV0gJiBf X20pKQogICAgICArK19fbG93OwogICAgcmV0dXJuIF9fbG93OwogIH0KCiAgY29uc3QgY2hhcioK ICBjdHlwZTxjaGFyPjo6CiAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBj b25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoCiAg ICAgICAgICAgJiYgKF9NX3RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvdyld ICYgX19tKSAhPSAwKQogICAgICArK19fbG93OwogICAgcmV0dXJuIF9fbG93OwogIH0KIyA0MDEg Ii91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0 cy5oIiAyIDMKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlX2J5 bmFtZSA6IHB1YmxpYyBjdHlwZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVk ZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlX2J5bmFtZShj b25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAg IHZpcnR1YWwKICAgICAgfmN0eXBlX2J5bmFtZSgpIHsgfTsKICAgIH07CgoKICB0ZW1wbGF0ZTw+ CiAgICBjdHlwZV9ieW5hbWU8Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90 IHJlZnMpOwoKICB0ZW1wbGF0ZTw+CiAgICBjdHlwZV9ieW5hbWU8d2NoYXJfdD46OmN0eXBlX2J5 bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IHJlZnMpOwoKCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2Nj LzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9jb2RlY3Z0LmgiIDEgMwojIDQ1ICIvdXNyL2xvY2Fs L3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NvZGVjdnQuaCIgMwoKCiAgY2xhc3Mg Y29kZWN2dF9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0gcmVzdWx0CiAgICB7CiAgICAgIG9r LAogICAgICBwYXJ0aWFsLAogICAgICBlcnJvciwKICAgICAgbm9jb252CiAgICB9OwogIH07CgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVu YW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZQogICAgOiBwdWJs aWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGNvZGVjdnRfYmFzZQogICAgewogICAgcHVibGljOgoK ICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYg X0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7 CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoKCiAgICAgIHJlc3VsdAogICAgICBv dXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAg ICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9f ZnJvbV9uZXh0LAogICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3Rv X2VuZCwKICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgICB7CiAg ICAgICAgcmV0dXJuIHRoaXMtPmRvX291dChfX3N0YXRlLCBfX2Zyb20sIF9fZnJvbV9lbmQsIF9f ZnJvbV9uZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX190bywgX190b19lbmQsIF9f dG9fbmV4dCk7CiAgICAgIH0KCiAgICAgIHJlc3VsdAogICAgICB1bnNoaWZ0KHN0YXRlX3R5cGUm IF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAg ICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmRvX3Vuc2hpZnQoX19zdGF0ZSwgX190byxfX3RvX2VuZCxfX3RvX25leHQpOyB9CgogICAg ICByZXN1bHQKICAgICAgaW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUq IF9fZnJvbSwKICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4 dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRl cm5fdHlwZSogX190b19lbmQsCiAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25z dAogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX2luKF9fc3RhdGUsIF9fZnJvbSwgX19m cm9tX2VuZCwgX19mcm9tX25leHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdG8sIF9f dG9fZW5kLCBfX3RvX25leHQpOwogICAgICB9CgogICAgICBpbnQKICAgICAgZW5jb2RpbmcoKSBj b25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2VuY29kaW5nKCk7IH0KCiAgICAg IGJvb2wKICAgICAgYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4g dGhpcy0+ZG9fYWx3YXlzX25vY29udigpOyB9CgogICAgICBpbnQKICAgICAgbGVuZ3RoKGNvbnN0 IHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAg ICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fbGVuZ3RoKF9fc3RhdGUsIF9fZnJvbSwgX19lbmQsIF9fbWF4KTsg fQoKICAgICAgaW50CiAgICAgIG1heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX21heF9sZW5ndGgoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgZXhwbGlj aXQKICAgICAgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9j YWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X19jb2RlY3Z0X2Fi c3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0 ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAg Y29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9t X25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9f ZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsKCiAg ICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwg ZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5k LCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCByZXN1 bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9f ZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4 dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBp bnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0 KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0 IHRocm93KCkgPSAwOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYo KSBjb25zdCB0aHJvdygpID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0aChj b25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAg ICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdCA9IDA7Cgog ICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKSA9IDA7 CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJu VCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnQKICAgIDogcHVibGljIF9fY29k ZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsKICAg IHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0OwogICAg ICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIF9FeHRlcm5UIGV4 dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9TdGF0ZVQgc3RhdGVfdHlwZTsKCgogICAgICBzdGF0 aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9f cmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsX0V4dGVy blQsX1N0YXRlVD4gKF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAg ICAgIH5jb2RlY3Z0KCkgeyB9CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3Rh dGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAg IGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJv bV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3Rv X2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAg IHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0 ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBl eHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAg ICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAog ICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5 cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90 eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0 OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoK ICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygp OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBj b25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5 cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAg ZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBsb2Nh bGU6OmlkIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPjo6aWQ7CgoKICB0ZW1w bGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4KICAgIDogcHVi bGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4KICAgIHsK ICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY2hhciBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRl ZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoK CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2 dChzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg IH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlw ZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0 IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0 LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwK ICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1 YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5 cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5f dHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19p bihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAg ICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBf X2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBf X3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAg ICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAg dmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAg ICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBl eHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9f ZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4 X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBj b2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4KICAgIDogcHVibGljIF9fY29kZWN2dF9h YnN0cmFjdF9iYXNlPHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4KICAgIHsKICAgIHB1YmxpYzoK CiAgICAgIHR5cGVkZWYgd2NoYXJfdCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyIGV4 dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKCiAgICAgIHN0 YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3Qg X19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0 KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0 ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90 eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAg ICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAg ICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0 CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwKICAgICAgICAgICAgICAgICBl eHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgICAg IGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAg ICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsCiAgICAgICAgICAgICBjb25zdCBleHRlcm5f dHlwZSogX19mcm9tLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwKICAgICAgICAgICAg IGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBpbnRlcm5fdHlw ZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgaW50ZXJuX3R5cGUq JiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbAogICAgICBpbnQgZG9fZW5jb2Rpbmco KSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICBib29sIGRvX2Fsd2F5c19ub2Nv bnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICBpbnQgZG9fbGVuZ3RoKGNv bnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAg ICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpOwogICAg fTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5 cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZSA6IHB1YmxpYyBjb2RlY3Z0 PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgZXhw bGljaXQKICAgICAgY29kZWN2dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAw KQogICAgICA6IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPihfX3JlZnMpIHsg fQogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0X2J5bmFtZSgpIHsg fQogICAgfTsKCgoKCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIv aTY4Ni1wYy1saW51eC1nbnUvYml0cy9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5oIiAxIDMKIyA0 NiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1n bnUvYml0cy9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5oIiAzCiAgY2xhc3MgX19lbmNfdHJhaXRz CiAgewogIHB1YmxpYzoKCgoKICAgIHR5cGVkZWYgaWNvbnZfdCBfX2Rlc2NfdHlwZTsKCiAgcHJv dGVjdGVkOgoKCiAgICBzdGF0aWMgY29uc3QgaW50IF9TX21heF9zaXplID0gMzI7CgogICAgY2hh ciBfTV9pbnRfZW5jW19TX21heF9zaXplXTsKCiAgICBjaGFyIF9NX2V4dF9lbmNbX1NfbWF4X3Np emVdOwoKCiAgICBfX2Rlc2NfdHlwZSBfTV9pbl9kZXNjOwoKICAgIF9fZGVzY190eXBlIF9NX291 dF9kZXNjOwoKCiAgICBpbnQgX01fZXh0X2JvbTsKCgogICAgaW50IF9NX2ludF9ib207CgogIHB1 YmxpYzoKICAgIGV4cGxpY2l0IF9fZW5jX3RyYWl0cygpCiAgICA6IF9NX2luX2Rlc2MoMCksIF9N X291dF9kZXNjKDApLCBfTV9leHRfYm9tKDApLCBfTV9pbnRfYm9tKDApCiAgICB7CiAgICAgIG1l bXNldChfTV9pbnRfZW5jLCAwLCBfU19tYXhfc2l6ZSk7CiAgICAgIG1lbXNldChfTV9leHRfZW5j LCAwLCBfU19tYXhfc2l6ZSk7CiAgICB9CgogICAgZXhwbGljaXQgX19lbmNfdHJhaXRzKGNvbnN0 IGNoYXIqIF9faW50LCBjb25zdCBjaGFyKiBfX2V4dCwKICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19pYm9tID0gMCwgaW50IF9fZWJvbSA9IDApCiAgICA6IF9NX2luX2Rlc2MoMCksIF9N X291dF9kZXNjKDApLCBfTV9leHRfYm9tKDApLCBfTV9pbnRfYm9tKDApCiAgICB7CiAgICAgIHN0 cm5jcHkoX01faW50X2VuYywgX19pbnQsIF9TX21heF9zaXplKTsKICAgICAgc3RybmNweShfTV9l eHRfZW5jLCBfX2V4dCwgX1NfbWF4X3NpemUpOwogICAgfQoKCgoKCgogICAgX19lbmNfdHJhaXRz KGNvbnN0IF9fZW5jX3RyYWl0cyYgX19vYmopOiBfTV9pbl9kZXNjKDApLCBfTV9vdXRfZGVzYygw KQogICAgewogICAgICBzdHJuY3B5KF9NX2ludF9lbmMsIF9fb2JqLl9NX2ludF9lbmMsIF9TX21h eF9zaXplKTsKICAgICAgc3RybmNweShfTV9leHRfZW5jLCBfX29iai5fTV9leHRfZW5jLCBfU19t YXhfc2l6ZSk7CiAgICAgIF9NX2V4dF9ib20gPSBfX29iai5fTV9leHRfYm9tOwogICAgICBfTV9p bnRfYm9tID0gX19vYmouX01faW50X2JvbTsKICAgIH0KCgogICAgX19lbmNfdHJhaXRzJgogICAg b3BlcmF0b3I9KGNvbnN0IF9fZW5jX3RyYWl0cyYgX19vYmopCiAgICB7CiAgICAgIHN0cm5jcHko X01faW50X2VuYywgX19vYmouX01faW50X2VuYywgX1NfbWF4X3NpemUpOwogICAgICBzdHJuY3B5 KF9NX2V4dF9lbmMsIF9fb2JqLl9NX2V4dF9lbmMsIF9TX21heF9zaXplKTsKICAgICAgX01faW5f ZGVzYyA9IDA7CiAgICAgIF9NX291dF9kZXNjID0gMDsKICAgICAgX01fZXh0X2JvbSA9IF9fb2Jq Ll9NX2V4dF9ib207CiAgICAgIF9NX2ludF9ib20gPSBfX29iai5fTV9pbnRfYm9tOwogICAgICBy ZXR1cm4gKnRoaXM7CiAgICB9CgogICAgfl9fZW5jX3RyYWl0cygpCiAgICB7CiAgICAgIF9fZGVz Y190eXBlIF9fZXJyID0gcmVpbnRlcnByZXRfY2FzdDxpY29udl90PigtMSk7CiAgICAgIGlmIChf TV9pbl9kZXNjICYmIF9NX2luX2Rlc2MgIT0gX19lcnIpCiAgICAgICAgaWNvbnZfY2xvc2UoX01f aW5fZGVzYyk7CiAgICAgIGlmIChfTV9vdXRfZGVzYyAmJiBfTV9vdXRfZGVzYyAhPSBfX2VycikK ICAgICAgICBpY29udl9jbG9zZShfTV9vdXRfZGVzYyk7CiAgICB9CgogICAgdm9pZAogICAgX01f aW5pdCgpCiAgICB7CiAgICAgIGNvbnN0IF9fZGVzY190eXBlIF9fZXJyID0gcmVpbnRlcnByZXRf Y2FzdDxpY29udl90PigtMSk7CiAgICAgIGlmICghX01faW5fZGVzYykKICAgICAgICB7CiAgICAg ICAgICBfTV9pbl9kZXNjID0gaWNvbnZfb3BlbihfTV9pbnRfZW5jLCBfTV9leHRfZW5jKTsKICAg ICAgICAgIGlmIChfTV9pbl9kZXNjID09IF9fZXJyKQogICAgICAgICAgICBfX3Rocm93X3J1bnRp bWVfZXJyb3IoImNyZWF0aW5nIGljb252IGlucHV0IGRlc2NyaXB0b3IgZmFpbGVkLiIpOwogICAg ICAgIH0KICAgICAgaWYgKCFfTV9vdXRfZGVzYykKICAgICAgICB7CiAgICAgICAgICBfTV9vdXRf ZGVzYyA9IGljb252X29wZW4oX01fZXh0X2VuYywgX01faW50X2VuYyk7CiAgICAgICAgICBpZiAo X01fb3V0X2Rlc2MgPT0gX19lcnIpCiAgICAgICAgICAgIF9fdGhyb3dfcnVudGltZV9lcnJvcigi Y3JlYXRpbmcgaWNvbnYgb3V0cHV0IGRlc2NyaXB0b3IgZmFpbGVkLiIpOwogICAgICAgIH0KICAg IH0KCiAgICBib29sCiAgICBfTV9nb29kKCkKICAgIHsKICAgICAgY29uc3QgX19kZXNjX3R5cGUg X19lcnIgPSByZWludGVycHJldF9jYXN0PGljb252X3Q+KC0xKTsKICAgICAgYm9vbCBfX3Rlc3Qg PSBfTV9pbl9kZXNjICYmIF9NX2luX2Rlc2MgIT0gX19lcnI7CiAgICAgIF9fdGVzdCAmPSBfTV9v dXRfZGVzYyAmJiBfTV9vdXRfZGVzYyAhPSBfX2VycjsKICAgICAgcmV0dXJuIF9fdGVzdDsKICAg IH0KCiAgICBjb25zdCBfX2Rlc2NfdHlwZSoKICAgIF9NX2dldF9pbl9kZXNjcmlwdG9yKCkKICAg IHsgcmV0dXJuICZfTV9pbl9kZXNjOyB9CgogICAgY29uc3QgX19kZXNjX3R5cGUqCiAgICBfTV9n ZXRfb3V0X2Rlc2NyaXB0b3IoKQogICAgeyByZXR1cm4gJl9NX291dF9kZXNjOyB9CgogICAgaW50 CiAgICBfTV9nZXRfZXh0ZXJuYWxfYm9tKCkKICAgIHsgcmV0dXJuIF9NX2V4dF9ib207IH0KCiAg ICBpbnQKICAgIF9NX2dldF9pbnRlcm5hbF9ib20oKQogICAgeyByZXR1cm4gX01faW50X2JvbTsg fQoKICAgIGNvbnN0IGNoYXIqCiAgICBfTV9nZXRfaW50ZXJuYWxfZW5jKCkKICAgIHsgcmV0dXJu IF9NX2ludF9lbmM7IH0KCiAgICBjb25zdCBjaGFyKgogICAgX01fZ2V0X2V4dGVybmFsX2VuYygp CiAgICB7IHJldHVybiBfTV9leHRfZW5jOyB9CiAgfTsKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgY2xhc3MgY29kZWN2dDxfSW50ZXJuVCwg X0V4dGVyblQsIF9fZW5jX3RyYWl0cz4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9i YXNlPF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPgogICAgewogICAgcHVibGljOgoK ICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYg X0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7 CiAgICAgIHR5cGVkZWYgX19lbmNfdHJhaXRzIHN0YXRlX3R5cGU7CiAgICAgIHR5cGVkZWYgX19l bmNfdHJhaXRzOjpfX2Rlc2NfdHlwZSBfX2Rlc2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2VuY190 cmFpdHMgX19lbmNfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4 cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0 X2Fic3RyYWN0X2Jhc2U8aW50ZXJuX3R5cGUsIGV4dGVybl90eXBlLCBzdGF0ZV90eXBlPihfX3Jl ZnMpCiAgICAgIHsgfQoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChfX2VuY190eXBlKiBf X2VuYywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8 aW50ZXJuX3R5cGUsIGV4dGVybl90eXBlLCBzdGF0ZV90eXBlPihfX3JlZnMpCiAgICAgIHsgfQoK ICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgpIHsgfQoKICAgICAg dmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGlu dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9t X2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVy bl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5f dHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191 bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAg ICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNv bnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0 ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5 cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAg ICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAg IGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAg IGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBk b19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAg IGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwK ICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBj b25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJv dygpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRl cm5UPgogICAgbG9jYWxlOjppZAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5j X3RyYWl0cz46OmlkOwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Q+CiAgICBpbmxpbmUgc2l6 ZV90CiAgICBfX2ljb252X2FkYXB0b3Ioc2l6ZV90KCpfX2Z1bmMpKGljb252X3QsIF9ULCBzaXpl X3QqLCBjaGFyKiosIHNpemVfdCopLAogICAgICAgICAgICAgICAgICAgIGljb252X3QgX19jZCwg Y2hhcioqIF9faW5idWYsIHNpemVfdCogX19pbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgIGNo YXIqKiBfX291dGJ1Ziwgc2l6ZV90KiBfX291dGJ5dGVzKQogICAgeyByZXR1cm4gX19mdW5jKF9f Y2QsIChfVClfX2luYnVmLCBfX2luYnl0ZXMsIF9fb3V0YnVmLCBfX291dGJ5dGVzKTsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0 X2Jhc2U6OnJlc3VsdAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0 cz46OgogICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBf X2Zyb20sCiAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGlu dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4 dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkg Y29uc3QKICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0gZXJyb3I7CiAgICAgIGlmIChfX3N0YXRl Ll9NX2dvb2QoKSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHN0YXRlX3R5cGU6Ol9fZGVz Y190eXBlIF9fZGVzY190eXBlOwogICAgICAgICAgY29uc3QgX19kZXNjX3R5cGUqIF9fZGVzYyA9 IF9fc3RhdGUuX01fZ2V0X291dF9kZXNjcmlwdG9yKCk7CiAgICAgICAgICBjb25zdCBzaXplX3Qg X19mbXVsdGlwbGUgPSBzaXplb2YoaW50ZXJuX3R5cGUpOwogICAgICAgICAgc2l6ZV90IF9fZmJ5 dGVzID0gX19mbXVsdGlwbGUgKiAoX19mcm9tX2VuZCAtIF9fZnJvbSk7CiAgICAgICAgICBjb25z dCBzaXplX3QgX190bXVsdGlwbGUgPSBzaXplb2YoZXh0ZXJuX3R5cGUpOwogICAgICAgICAgc2l6 ZV90IF9fdGJ5dGVzID0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKTsKCgoKICAgICAg ICAgIGNoYXIqIF9fY3RvID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX190byk7CiAgICAgICAg ICBjaGFyKiBfX2Nmcm9tOwogICAgICAgICAgc2l6ZV90IF9fY29udjsKCgoKCgoKICAgICAgICAg IGludCBfX2ludF9ib20gPSBfX3N0YXRlLl9NX2dldF9pbnRlcm5hbF9ib20oKTsKICAgICAgICAg IGlmIChfX2ludF9ib20pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19zaXpl ID0gX19mcm9tX2VuZCAtIF9fZnJvbTsKICAgICAgICAgICAgICBpbnRlcm5fdHlwZSogX19jZml4 ZWQgPSBzdGF0aWNfY2FzdDxpbnRlcm5fdHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGlu dGVybl90eXBlKSAqIChfX3NpemUgKyAxKSkpOwogICAgICAgICAgICAgIF9fY2ZpeGVkWzBdID0g c3RhdGljX2Nhc3Q8aW50ZXJuX3R5cGU+KF9faW50X2JvbSk7CiAgICAgICAgICAgICAgY2hhcl90 cmFpdHM8aW50ZXJuX3R5cGU+Ojpjb3B5KF9fY2ZpeGVkICsgMSwgX19mcm9tLCBfX3NpemUpOwog ICAgICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7 CiAgICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAm X19jZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZieXRl cywgJl9fY3RvLCAmX190Ynl0ZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBpbnRlcm5fdHlwZSogX19jZml4ZWQgPSBjb25zdF9jYXN0 PGludGVybl90eXBlKj4oX19mcm9tKTsKICAgICAgICAgICAgICBfX2Nmcm9tID0gcmVpbnRlcnBy ZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQpOwogICAgICAgICAgICAgIF9fY29udiA9IF9faWNvbnZf YWRhcHRvcihpY29udiwgKl9fZGVzYywgJl9fY2Zyb20sICZfX2ZieXRlcywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fY3RvLCAmX190Ynl0ZXMpOwogICAgICAgICAg ICB9CgogICAgICAgICAgaWYgKF9fY29udiAhPSBzaXplX3QoLTEpKQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludGVybl90 eXBlKj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2Fz dDxleHRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAgICAgICAgICBfX3JldCA9IG9rOwogICAgICAg ICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19m Ynl0ZXMgPCBfX2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKSkKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNv bnN0IGludGVybl90eXBlKj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgICAgIF9fdG9fbmV4dCA9 IHJlaW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgICAg IF9fcmV0ID0gcGFydGlhbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICBfX3JldCA9IGVycm9yOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg ICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBl bmFtZSBfRXh0ZXJuVD4KICAgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CiAgICBjb2RlY3Z0PF9JbnRl cm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUm IF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICBleHRlcm5fdHlwZSog X190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgewogICAgICByZXN1 bHQgX19yZXQgPSBlcnJvcjsKICAgICAgaWYgKF9fc3RhdGUuX01fZ29vZCgpKQogICAgICAgIHsK ICAgICAgICAgIHR5cGVkZWYgc3RhdGVfdHlwZTo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAg ICAgICAgICBjb25zdCBfX2Rlc2NfdHlwZSogX19kZXNjID0gX19zdGF0ZS5fTV9nZXRfaW5fZGVz Y3JpcHRvcigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdG11bHRpcGxlID0gc2l6ZW9mKGlu dGVybl90eXBlKTsKICAgICAgICAgIHNpemVfdCBfX3RsZW4gPSBfX3RtdWx0aXBsZSAqIChfX3Rv X2VuZCAtIF9fdG8pOwoKCgogICAgICAgICAgY2hhciogX19jdG8gPSByZWludGVycHJldF9jYXN0 PGNoYXIqPihfX3RvKTsKICAgICAgICAgIHNpemVfdCBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3Io aWNvbnYsKl9fZGVzYywgX19udWxsLCBfX251bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZfX2N0bywgJl9fdGxlbik7CgogICAgICAgICAgaWYgKF9fY29udiAh PSBzaXplX3QoLTEpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVp bnRlcnByZXRfY2FzdDxleHRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAgICAgICAgICBpZiAoX190 bGVuID09IF9fdG11bHRpcGxlICogKF9fdG9fZW5kIC0gX190bykpCiAgICAgICAgICAgICAgICBf X3JldCA9IG5vY29udjsKICAgICAgICAgICAgICBlbHNlIGlmIChfX3RsZW4gPT0gMCkKICAgICAg ICAgICAgICAgIF9fcmV0ID0gb2s7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg X19yZXQgPSBwYXJ0aWFsOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAg IF9fcmV0ID0gZXJyb3I7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGNvZGVjdnRf YmFzZTo6cmVzdWx0CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRz Pjo6CiAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19m cm9tLAogICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVy bl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJu X3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0 CiAgICB7CiAgICAgIHJlc3VsdCBfX3JldCA9IGVycm9yOwogICAgICBpZiAoX19zdGF0ZS5fTV9n b29kKCkpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBzdGF0ZV90eXBlOjpfX2Rlc2NfdHlw ZSBfX2Rlc2NfdHlwZTsKICAgICAgICAgIGNvbnN0IF9fZGVzY190eXBlKiBfX2Rlc2MgPSBfX3N0 YXRlLl9NX2dldF9pbl9kZXNjcmlwdG9yKCk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX19mbXVs dGlwbGUgPSBzaXplb2YoZXh0ZXJuX3R5cGUpOwogICAgICAgICAgc2l6ZV90IF9fZmxlbiA9IF9f Zm11bHRpcGxlICogKF9fZnJvbV9lbmQgLSBfX2Zyb20pOwogICAgICAgICAgY29uc3Qgc2l6ZV90 IF9fdG11bHRpcGxlID0gc2l6ZW9mKGludGVybl90eXBlKTsKICAgICAgICAgIHNpemVfdCBfX3Rs ZW4gPSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pOwoKCgogICAgICAgICAgY2hhciog X19jdG8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3RvKTsKICAgICAgICAgIGNoYXIqIF9f Y2Zyb207CiAgICAgICAgICBzaXplX3QgX19jb252OwoKCgoKCgogICAgICAgICAgaW50IF9fZXh0 X2JvbSA9IF9fc3RhdGUuX01fZ2V0X2V4dGVybmFsX2JvbSgpOwogICAgICAgICAgaWYgKF9fZXh0 X2JvbSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBfX3NpemUgPSBfX2Zyb21f ZW5kIC0gX19mcm9tOwogICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX2NmaXhlZCA9IHN0YXRp Y19jYXN0PGV4dGVybl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoZXh0ZXJuX3R5cGUp ICogKF9fc2l6ZSArIDEpKSk7CiAgICAgICAgICAgICAgX19jZml4ZWRbMF0gPSBzdGF0aWNfY2Fz dDxleHRlcm5fdHlwZT4oX19leHRfYm9tKTsKICAgICAgICAgICAgICBjaGFyX3RyYWl0czxleHRl cm5fdHlwZT46OmNvcHkoX19jZml4ZWQgKyAxLCBfX2Zyb20sIF9fc2l6ZSk7CiAgICAgICAgICAg ICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAgICAgICAg ICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nmcm9tLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19mbGVuLCAmX19jdG8sICZf X3RsZW4pOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBleHRlcm5fdHlwZSogX19jZml4ZWQgPSBjb25zdF9jYXN0PGV4dGVybl90eXBlKj4o X19mcm9tKTsKICAgICAgICAgICAgICBfX2Nmcm9tID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o X19jZml4ZWQpOwogICAgICAgICAgICAgIF9fY29udiA9IF9faWNvbnZfYWRhcHRvcihpY29udiwg Kl9fZGVzYywgJl9fY2Zyb20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZfX2ZsZW4sICZfX2N0bywgJl9fdGxlbik7CiAgICAgICAgICAgIH0KCgogICAgICAgICAgaWYg KF9fY29udiAhPSBzaXplX3QoLTEpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19mcm9t X25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4oX19jZnJvbSk7CiAg ICAgICAgICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRlcm5fdHlwZSo+KF9f Y3RvKTsKICAgICAgICAgICAgICBfX3JldCA9IG9rOwogICAgICAgICAgICB9CiAgICAgICAgICBl bHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19mbGVuIDwgc3RhdGljX2Nhc3Q8 c2l6ZV90PihfX2Zyb21fZW5kIC0gX19mcm9tKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGV4dGVybl90eXBl Kj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nh c3Q8aW50ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgICAgIF9fcmV0ID0gcGFydGlh bDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBf X3JldCA9IGVycm9yOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4K ICAgIGludAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46Ogog ICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCiAgICB7CiAgICAgIGludCBfX3JldCA9IDA7 CiAgICAgIGlmIChzaXplb2YoX0V4dGVyblQpIDw9IHNpemVvZihfSW50ZXJuVCkpCiAgICAgICAg X19yZXQgPSBzaXplb2YoX0ludGVyblQpL3NpemVvZihfRXh0ZXJuVCk7CiAgICAgIHJldHVybiBf X3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRl cm5UPgogICAgYm9vbAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0 cz46OgogICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIGZh bHNlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4K ICAgIGludAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46Ogog ICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9t LAogICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBj b25zdAogICAgeyByZXR1cm4gbWluKF9fbWF4LCBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fZW5kIC0g X19mcm9tKSk7IH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4 dGVyblQ+CiAgICBpbnQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFp dHM+OjoKICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCiAgICB7IHJldHVybiAxOyB9 CiMgMzM0ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NvZGVj dnQuaCIgMiAzCiMgNDI2ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9i aXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKCiAgY2xhc3MgX19udW1fYmFzZQogIHsKICBwcm90 ZWN0ZWQ6CgoKICAgIHN0YXRpYyBjb25zdCBjaGFyIF9TX2F0b21zW107CgogICAgZW51bQogICAg ewogICAgICBfTV96ZXJvLAogICAgICBfTV9lID0gX01femVybyArIDEwLAogICAgICBfTV9FID0g X01femVybyArIDExLAogICAgICBfTV9zaXplID0gMjEgKyAxCiAgICB9OwoKCgogICAgc3RhdGlj IGJvb2wKICAgIF9TX2Zvcm1hdF9mbG9hdChjb25zdCBpb3NfYmFzZSYgX19pbywgY2hhciogX19m cHRyLCBjaGFyIF9fbW9kLAogICAgICAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX19wcmVjKTsK CgogICAgc3RhdGljIHZvaWQKICAgIF9TX2Zvcm1hdF9pbnQoY29uc3QgaW9zX2Jhc2UmIF9faW8s IGNoYXIqIF9fZnB0ciwgY2hhciBfX21vZCwgY2hhciBfX21vZGwpOwogIH07CgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBudW1wdW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZh Y2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAg ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0 aWMgbG9jYWxlOjppZCBpZDsKCiAgICBwcml2YXRlOgogICAgICBjaGFyX3R5cGUgX01fZGVjaW1h bF9wb2ludDsKICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7CiAgICAgIGNvbnN0IGNo YXIqIF9NX2dyb3VwaW5nOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX3RydWVuYW1lOwogICAg ICBjb25zdCBjaGFyX3R5cGUqIF9NX2ZhbHNlbmFtZTsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxp Y2l0CiAgICAgIG51bXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19y ZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoKTsgfQoKICAgICAgZXhwbGljaXQK ICAgICAgbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKSA6IGxv Y2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jbG9j KTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5kb19kZWNpbWFsX3BvaW50KCk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAg ICB0aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdGhvdXNhbmRz X3NlcCgpOyB9CgogICAgICBzdHJpbmcKICAgICAgZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJl dHVybiB0aGlzLT5kb19ncm91cGluZygpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICB0cnVl bmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RydWVuYW1lKCk7IH0KCiAgICAg IHN0cmluZ190eXBlCiAgICAgIGZhbHNlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt PmRvX2ZhbHNlbmFtZSgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5u dW1wdW5jdCgpOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fZGVjaW1hbF9wb2lu dCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RlY2ltYWxfcG9pbnQ7IH0KCiAgICAgIHZpcnR1 YWwgY2hhcl90eXBlCiAgICAgIGRvX3Rob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVy biBfTV90aG91c2FuZHNfc2VwOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZwogICAgICBkb19ncm91 cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2dyb3VwaW5nOyB9CgogICAgICB2aXJ0dWFs IHN0cmluZ190eXBlCiAgICAgIGRvX3RydWVuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01f dHJ1ZW5hbWU7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fZmFsc2VuYW1l KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZmFsc2VuYW1lOyB9CgoKICAgICAgdm9pZAogICAg ICBfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX1NfY19sb2NhbGUp OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBudW1w dW5jdDxfQ2hhclQ+OjppZDsKCiAgdGVtcGxhdGU8PgogICAgbnVtcHVuY3Q8Y2hhcj46On5udW1w dW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBudW1wdW5jdDxjaGFyPjo6X01faW5p dGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgoKICB0ZW1wbGF0ZTw+CiAgICBu dW1wdW5jdDx3Y2hhcl90Pjo6fm51bXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAg IG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19j bG9jKTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1bmN0X2J5 bmFtZSA6IHB1YmxpYyBudW1wdW5jdDxfQ2hhclQ+CiAgICB7CgogICAgICBfX2NfbG9jYWxlIF9N X2NfbG9jYWxlX251bXB1bmN0OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh cl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoK ICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6 ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbnVtcHVuY3Q8X0NoYXJUPihfX3JlZnMpCiAgICAgIHsK ICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QsIF9fcyk7CiAg ICAgICAgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfTV9jX2xvY2FsZV9udW1wdW5jdCk7CiAgICAg IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51bXB1bmN0X2J5bmFtZSgp CiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9udW1wdW5jdCk7IH0KICAg IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNs YXNzIG51bV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIF9fbnVtX2Jhc2UKICAg IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw ZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAg ICAgZXhwbGljaXQKICAgICAgbnVtX2dldChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZh Y2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2lu LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLCBib29sJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dl dChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg ICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoK ICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5k LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5z aWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4s IF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChp dGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0K CiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVu c2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4s IF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQo aXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9Cgog ICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQs IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNp Z25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9f aW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBn ZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBfX3YpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAg ICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwg aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJs ZSYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9f aW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBf X2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVy X3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl JiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2b2lkKiYgX192KSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJy LCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsIH5udW1fZ2V0KCkgeyB9Cgog ICAgICBpdGVyX3R5cGUKICAgICAgX01fZXh0cmFjdF9mbG9hdChpdGVyX3R5cGUsIGl0ZXJfdHlw ZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsCiAgICAgICAgICAgICAgICAgICAgICAg c3RyaW5nJiBfX3h0cmMpIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX2V4dHJhY3Rf aW50KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwK ICAgICAgICAgICAgICAgICAgICAgc3RyaW5nJiBfX3h0cmMsIGludCYgX19iYXNlKSBjb25zdDsK CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlw ZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsIGJvb2wmKSBjb25zdDsKCgogICAgICB2 aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19i YXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBsb25nJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0 ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9z X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0JikgY29u c3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVy X3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAg dW5zaWduZWQgaW50JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19n ZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLAogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyYpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwg aXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICBsb25nIGxvbmcmKSBjb25zdDsK CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlw ZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICB1bnNp Z25lZCBsb25nIGxvbmcmKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBk b19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUm IF9fZXJyLAogICAgICAgICAgICAgZmxvYXQmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90 eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICBkb3VibGUmKSBjb25zdDsKCiAgICAgIHZp cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jh c2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICBsb25nIGRvdWJsZSYp IGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwg aXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAg ICAgIHZvaWQqJikgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6 aWQ7CiMgNzIxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xv Y2FsZV9mYWNldHMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091 dEl0ZXI+CiAgICBjbGFzcyBudW1fcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBf X251bV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5 cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2Fs ZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBudW1fcHV0KHNpemVfdCBfX3JlZnMgPSAw KSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQo aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3Yp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3Yp OyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf X2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAg IHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAg ICAgICAgdW5zaWduZWQgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1 dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChp dGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcg X192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwg X192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFz ZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9f dikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9f dik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNl JiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJu IHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUK ICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGws CiAgICAgICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0 KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAg ICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3Ms IF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVmFsdWVUPgogICAgICAgIGl0ZXJfdHlwZQogICAgICAgIF9NX2NvbnZlcnRfZmxvYXQo aXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgX19tb2QsIF9WYWx1ZVQgX192KSBjb25zdDsKCiAgICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICAgICAgaXRlcl90eXBlCiAgICAgICAgX01fY29udmVy dF9pbnQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAg ICAgICAgICAgICAgICAgICBjaGFyIF9fbW9kLCBjaGFyIF9fbW9kbCwgX1ZhbHVlVCBfX3YpIGNv bnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX3dpZGVuX2Zsb2F0KGl0ZXJfdHlwZSwgaW9z X2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAgICAgICAgICAg ICAgICAgIGludCBfX2xlbikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fd2lkZW5f aW50KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNoYXIqIF9f Y3MsCiAgICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0OwoKICAgICAgaXRlcl90eXBl CiAgICAgIF9NX2luc2VydChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19m aWxsLAogICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3dzLCBpbnQgX19sZW4pIGNv bnN0OwoKICAgICAgdmlydHVhbAogICAgICB+bnVtX3B1dCgpIHsgfTsKCiAgICAgIHZpcnR1YWwg aXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9f ZmlsbCwgYm9vbCBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f cHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29u c3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3Nf YmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcpIGNvbnN0OwoKCiAgICAgIHZp cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90 eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw ZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVu c2lnbmVkIGxvbmcgbG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg ZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192 KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUs IGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX192KSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwg Y2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgdm9pZCogX192KSBjb25zdDsKICAgIH07CgogIHRlbXBs YXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCBu dW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIGNsYXNzIGNvbGxhdGUgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVi bGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2lj X3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgIHByb3RlY3RlZDoKCgogICAgICBfX2Nf bG9jYWxlIF9NX2NfbG9jYWxlX2NvbGxhdGU7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9j YWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGUoc2l6ZV90IF9fcmVmcyA9 IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01fY19sb2NhbGVfY29s bGF0ZSA9IF9TX2NfbG9jYWxlOyB9CgoKICAgICAgZXhwbGljaXQKICAgICAgY29sbGF0ZShfX2Nf bG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChf X3JlZnMpCiAgICAgIHsgX01fY19sb2NhbGVfY29sbGF0ZSA9IF9TX2Nsb25lX2NfbG9jYWxlKF9f Y2xvYyk7IH0KCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNv bnN0IF9DaGFyVCogX19oaTEsCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwgY29u c3QgX0NoYXJUKiBfX2hpMikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fY29tcGFyZShf X2xvMSwgX19oaTEsIF9fbG8yLCBfX2hpMik7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHRy YW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fdHJhbnNmb3JtKF9fbG8sIF9faGkpOyB9CgogICAgICBsb25n CiAgICAgIGhhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2hhc2goX19sbywgX19oaSk7IH0KCgogICAgICBpbnQK ICAgICAgX01fY29tcGFyZShjb25zdCBfQ2hhclQqLCBjb25zdCBfQ2hhclQqKSBjb25zdDsKCiAg ICAgIHNpemVfdAogICAgICBfTV90cmFuc2Zvcm0oX0NoYXJUKiwgY29uc3QgX0NoYXJUKiwgc2l6 ZV90KSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2xsYXRlKCkK ICAgICAgewogICAgICAgIGlmIChfTV9jX2xvY2FsZV9jb2xsYXRlICE9IF9TX2NfbG9jYWxlKQog ICAgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9jb2xsYXRlKTsKICAgICAg fQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8x LCBjb25zdCBfQ2hhclQqIF9faGkxLAogICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19s bzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlw ZQogICAgICBkb190cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9f aGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBsb25nCiAgICAgIGRvX2hhc2goY29uc3QgX0NoYXJU KiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBjb2xsYXRlPF9DaGFyVD46OmlkOwoKCiAgdGVt cGxhdGU8PgogICAgaW50CiAgICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0IGNoYXIq LCBjb25zdCBjaGFyKikgY29uc3Q7CgogIHRlbXBsYXRlPD4KICAgIHNpemVfdAogICAgY29sbGF0 ZTxjaGFyPjo6X01fdHJhbnNmb3JtKGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KSBjb25zdDsK CgogIHRlbXBsYXRlPD4KICAgIGludAogICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fY29tcGFyZShj b25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBz aXplX3QKICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9ybSh3Y2hhcl90KiwgY29uc3Qg d2NoYXJfdCosIHNpemVfdCkgY29uc3Q7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg ICBjbGFzcyBjb2xsYXRlX2J5bmFtZSA6IHB1YmxpYyBjb2xsYXRlPF9DaGFyVD4KICAgIHsKICAg IHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJh c2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgY29s bGF0ZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBj b2xsYXRlPF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAgaWYgKF9NX2NfbG9jYWxlX2Nv bGxhdGUgIT0gX1NfY19sb2NhbGUpCiAgICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2Nf bG9jYWxlX2NvbGxhdGUpOwogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9j b2xsYXRlLCBfX3MpOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg IH5jb2xsYXRlX2J5bmFtZSgpIHsgfQogICAgfTsKCgogIGNsYXNzIHRpbWVfYmFzZQogIHsKICBw dWJsaWM6CiAgICBlbnVtIGRhdGVvcmRlciB7IG5vX29yZGVyLCBkbXksIG1keSwgeW1kLCB5ZG0g fTsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBfX3RpbWVwdW5j dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVm IF9DaGFyVCBfX2NoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBf X3N0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgoKICAgICAgc3RhdGlj IGNvbnN0IF9DaGFyVCogX1NfdGltZXpvbmVzWzE0XTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9f Y19sb2NhbGUgX01fY19sb2NhbGVfdGltZXB1bmN0OwogICAgICBjb25zdCBjaGFyKiBfTV9uYW1l X3RpbWVwdW5jdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXRlX2Zvcm1hdDsKICAgICAgY29u c3QgX0NoYXJUKiBfTV9kYXRlX2VyYV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fdGlt ZV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fdGltZV9lcmFfZm9ybWF0OwogICAgICBj b25zdCBfQ2hhclQqIF9NX2RhdGVfdGltZV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01f ZGF0ZV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fYW07CiAgICAgIGNv bnN0IF9DaGFyVCogX01fcG07CiAgICAgIGNvbnN0IF9DaGFyVCogX01fYW1fcG1fZm9ybWF0OwoK CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5MTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXky OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5 NDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2Rh eTY7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5NzsKCgogICAgICBjb25zdCBfQ2hhclQqIF9N X2RheV9hMTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTI7CiAgICAgIGNvbnN0IF9DaGFy VCogX01fZGF5X2EzOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hNDsKICAgICAgY29uc3Qg X0NoYXJUKiBfTV9kYXlfYTU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E2OwogICAgICBj b25zdCBfQ2hhclQqIF9NX2RheV9hNzsKCgogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDE7 CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwMjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9t b250aDAzOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDQ7CiAgICAgIGNvbnN0IF9DaGFy VCogX01fbW9udGgwNTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA2OwogICAgICBjb25z dCBfQ2hhclQqIF9NX21vbnRoMDc7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwODsKICAg ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA5OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRo MTA7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgxMTsKICAgICAgY29uc3QgX0NoYXJUKiBf TV9tb250aDEyOwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTAxOwogICAgICBjb25z dCBfQ2hhclQqIF9NX21vbnRoX2EwMjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDM7 CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA0OwogICAgICBjb25zdCBfQ2hhclQqIF9N X21vbnRoX2EwNTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDY7CiAgICAgIGNvbnN0 IF9DaGFyVCogX01fbW9udGhfYTA3OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwODsK ICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDk7CiAgICAgIGNvbnN0IF9DaGFyVCogX01f bW9udGhfYTEwOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2ExMTsKICAgICAgY29uc3Qg X0NoYXJUKiBfTV9tb250aF9hMTI7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBf X3RpbWVwdW5jdChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVm cyksIF9NX25hbWVfdGltZXB1bmN0KCJDIikKICAgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5j dCgpOyB9CgogICAgICBleHBsaWNpdAogICAgICBfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xv YywgY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZh Y2V0KF9fcmVmcyksIF9NX25hbWVfdGltZXB1bmN0KF9fcykKICAgICAgeyBfTV9pbml0aWFsaXpl X3RpbWVwdW5jdChfX2Nsb2MpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX3B1dChfQ2hhclQqIF9f cywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCBfQ2hhclQqIF9fZm9ybWF0LAogICAgICAgICAgICAg Y29uc3QgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdm9pZAogICAgICBfTV9kYXRlX2Zvcm1hdHMo Y29uc3QgX0NoYXJUKiogX19kYXRlKSBjb25zdAogICAgICB7CgogICAgICAgIF9fZGF0ZVswXSA9 IF9NX2RhdGVfZm9ybWF0OwogICAgICAgIF9fZGF0ZVsxXSA9IF9NX2RhdGVfZXJhX2Zvcm1hdDsK ICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV90aW1lX2Zvcm1hdHMoY29uc3QgX0NoYXJUKiog X190aW1lKSBjb25zdAogICAgICB7CgogICAgICAgIF9fdGltZVswXSA9IF9NX3RpbWVfZm9ybWF0 OwogICAgICAgIF9fdGltZVsxXSA9IF9NX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgfQoKICAgICAg dm9pZAogICAgICBfTV9hbXBtKGNvbnN0IF9DaGFyVCoqIF9fYW1wbSkgY29uc3QKICAgICAgewog ICAgICAgIF9fYW1wbVswXSA9IF9NX2FtOwogICAgICAgIF9fYW1wbVsxXSA9IF9NX3BtOwogICAg ICB9CgogICAgICB2b2lkCiAgICAgIF9NX2RhdGVfdGltZV9mb3JtYXRzKGNvbnN0IF9DaGFyVCoq IF9fZHQpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgX19kdFswXSA9IF9NX2RhdGVfdGltZV9mb3Jt YXQ7CiAgICAgICAgX19kdFsxXSA9IF9NX2RhdGVfdGltZV9lcmFfZm9ybWF0OwogICAgICB9Cgog ICAgICB2b2lkCiAgICAgIF9NX2RheXMoY29uc3QgX0NoYXJUKiogX19kYXlzKSBjb25zdAogICAg ICB7CiAgICAgICAgX19kYXlzWzBdID0gX01fZGF5MTsKICAgICAgICBfX2RheXNbMV0gPSBfTV9k YXkyOwogICAgICAgIF9fZGF5c1syXSA9IF9NX2RheTM7CiAgICAgICAgX19kYXlzWzNdID0gX01f ZGF5NDsKICAgICAgICBfX2RheXNbNF0gPSBfTV9kYXk1OwogICAgICAgIF9fZGF5c1s1XSA9IF9N X2RheTY7CiAgICAgICAgX19kYXlzWzZdID0gX01fZGF5NzsKICAgICAgfQoKICAgICAgdm9pZAog ICAgICBfTV9kYXlzX2FiYnJldmlhdGVkKGNvbnN0IF9DaGFyVCoqIF9fZGF5cykgY29uc3QKICAg ICAgewogICAgICAgIF9fZGF5c1swXSA9IF9NX2RheV9hMTsKICAgICAgICBfX2RheXNbMV0gPSBf TV9kYXlfYTI7CiAgICAgICAgX19kYXlzWzJdID0gX01fZGF5X2EzOwogICAgICAgIF9fZGF5c1sz XSA9IF9NX2RheV9hNDsKICAgICAgICBfX2RheXNbNF0gPSBfTV9kYXlfYTU7CiAgICAgICAgX19k YXlzWzVdID0gX01fZGF5X2E2OwogICAgICAgIF9fZGF5c1s2XSA9IF9NX2RheV9hNzsKICAgICAg fQoKICAgICAgdm9pZAogICAgICBfTV9tb250aHMoY29uc3QgX0NoYXJUKiogX19tb250aHMpIGNv bnN0CiAgICAgIHsKICAgICAgICBfX21vbnRoc1swXSA9IF9NX21vbnRoMDE7CiAgICAgICAgX19t b250aHNbMV0gPSBfTV9tb250aDAyOwogICAgICAgIF9fbW9udGhzWzJdID0gX01fbW9udGgwMzsK ICAgICAgICBfX21vbnRoc1szXSA9IF9NX21vbnRoMDQ7CiAgICAgICAgX19tb250aHNbNF0gPSBf TV9tb250aDA1OwogICAgICAgIF9fbW9udGhzWzVdID0gX01fbW9udGgwNjsKICAgICAgICBfX21v bnRoc1s2XSA9IF9NX21vbnRoMDc7CiAgICAgICAgX19tb250aHNbN10gPSBfTV9tb250aDA4Owog ICAgICAgIF9fbW9udGhzWzhdID0gX01fbW9udGgwOTsKICAgICAgICBfX21vbnRoc1s5XSA9IF9N X21vbnRoMTA7CiAgICAgICAgX19tb250aHNbMTBdID0gX01fbW9udGgxMTsKICAgICAgICBfX21v bnRoc1sxMV0gPSBfTV9tb250aDEyOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX21vbnRo c19hYmJyZXZpYXRlZChjb25zdCBfQ2hhclQqKiBfX21vbnRocykgY29uc3QKICAgICAgewogICAg ICAgIF9fbW9udGhzWzBdID0gX01fbW9udGhfYTAxOwogICAgICAgIF9fbW9udGhzWzFdID0gX01f bW9udGhfYTAyOwogICAgICAgIF9fbW9udGhzWzJdID0gX01fbW9udGhfYTAzOwogICAgICAgIF9f bW9udGhzWzNdID0gX01fbW9udGhfYTA0OwogICAgICAgIF9fbW9udGhzWzRdID0gX01fbW9udGhf YTA1OwogICAgICAgIF9fbW9udGhzWzVdID0gX01fbW9udGhfYTA2OwogICAgICAgIF9fbW9udGhz WzZdID0gX01fbW9udGhfYTA3OwogICAgICAgIF9fbW9udGhzWzddID0gX01fbW9udGhfYTA4Owog ICAgICAgIF9fbW9udGhzWzhdID0gX01fbW9udGhfYTA5OwogICAgICAgIF9fbW9udGhzWzldID0g X01fbW9udGhfYTEwOwogICAgICAgIF9fbW9udGhzWzEwXSA9IF9NX21vbnRoX2ExMTsKICAgICAg ICBfX21vbnRoc1sxMV0gPSBfTV9tb250aF9hMTI7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAg ICAgIHZpcnR1YWwKICAgICAgfl9fdGltZXB1bmN0KCk7CgoKICAgICAgdm9pZAogICAgICBfTV9p bml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9TX2NfbG9jYWxlKTsKICAg IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgX190aW1lcHVu Y3Q8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6fl9f dGltZXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGNoYXIqCiAgICBfX3RpbWVwdW5j dDxjaGFyPjo6X1NfdGltZXpvbmVzWzE0XTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190 aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9j KTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX3B1dChj aGFyKiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgY29uc3QgdG0qKSBjb25zdDsKCgogIHRlbXBsYXRl PD4KICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+Ojp+X190aW1lcHVuY3QoKTsKCiAgdGVtcGxhdGU8 PgogICAgY29uc3Qgd2NoYXJfdCoKICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfU190aW1lem9u ZXNbMTRdOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6 X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1wbGF0ZTw+ CiAgICB2b2lkCiAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X01fcHV0KHdjaGFyX3QqLCBzaXpl X3QsIGNvbnN0IHdjaGFyX3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB0bSopIGNvbnN0OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNvbnN0IF9D aGFyVCogX190aW1lcHVuY3Q8X0NoYXJUPjo6X1NfdGltZXpvbmVzWzE0XTsKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0IDog cHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoK CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0 ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBl OwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICB0aW1l X2dldChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0IChfX3JlZnMpIHsg fQoKICAgICAgZGF0ZW9yZGVyCiAgICAgIGRhdGVfb3JkZXIoKSBjb25zdAogICAgICB7IHJldHVy biB0aGlzLT5kb19kYXRlX29yZGVyKCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfdGlt ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmRvX2dldF90aW1lKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9f dG0pOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBp dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19n ZXRfZGF0ZShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90 eXBlCiAgICAgIGdldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBp b3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy LCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3dlZWtkYXkoX19i ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBn ZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg X19pbywKICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBf X3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfbW9udGhuYW1lKF9fYmVnLCBf X2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3ll YXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5kb19nZXRfeWVhcihfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBf X3RtKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9nZXQoKSB7 IH0KCiAgICAgIHZpcnR1YWwgZGF0ZW9yZGVyCiAgICAgIGRvX2RhdGVfb3JkZXIoKSBjb25zdDsK CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF90aW1lKGl0ZXJfdHlwZSBfX2Jl ZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgaW9z X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0 ZXJfdHlwZQogICAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2Vu ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf X2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f Z2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwK ICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkg Y29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfbW9udGhuYW1lKGl0 ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAg ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAg ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfeWVhcihpdGVyX3R5cGUgX19iZWcsIGl0 ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNl Ojppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKCiAgICAgIHZvaWQKICAgICAgX01f ZXh0cmFjdF9udW0oaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21l bWJlciwKICAgICAgICAgICAgICAgICAgICAgaW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBf X2xlbiwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSwK ICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdDsKCgoK ICAgICAgdm9pZAogICAgICBfTV9leHRyYWN0X25hbWUoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90 eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9D aGFyVCoqIF9fbmFtZXMsIHNpemVfdCBfX2luZGV4bGVuLAogICAgICAgICAgICAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdDsKCgogICAgICB2b2lkCiAgICAgIF9NX2V4 dHJhY3RfdmlhX2Zvcm1hdChpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpb3Nf YmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl JiBfX2VyciwgdG0qIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hh clQqIF9fZm9ybWF0KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVy Pjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAg IGNsYXNzIHRpbWVfZ2V0X2J5bmFtZSA6IHB1YmxpYyB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+ CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg IHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX2dl dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IHRpbWVfZ2V0 PF9DaGFyVCwgX0luSXRlcj4oX19yZWZzKSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1 YWwKICAgICAgfnRpbWVfZ2V0X2J5bmFtZSgpIHsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIHRpbWVfcHV0IDogcHVibGlj IGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAg IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5 cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRp bWVfcHV0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7 IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9f aW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgICAgY29uc3QgX0No YXJUKiBfX2JlZywgY29uc3QgX0NoYXJUKiBfX2VuZCkgY29uc3Q7CgogICAgICBpdGVyX3R5cGUK ICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxs LAogICAgICAgICAgY29uc3QgdG0qIF9fdG0sIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2QgPSAw KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9f dG0sIF9fZm9ybWF0LCBfX21vZCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAg ICAgfnRpbWVfcHV0KCkKICAgICAgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBk b19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNv bnN0IHRtKiBfX3RtLAogICAgICAgICAgICAgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCkgY29u c3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy PgogICAgbG9jYWxlOjppZCB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6aWQ7CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyB0aW1lX3B1 dF9ieW5hbWUgOiBwdWJsaWMgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4KICAgIHsKICAgIHB1 YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0 SXRlciBpdGVyX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX3B1dF9ieW5hbWUoY29u c3QgY2hhciogLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiB0aW1lX3B1dDxfQ2hhclQsIF9P dXRJdGVyPihfX3JlZnMpCiAgICAgIHsgfTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwK ICAgICAgfnRpbWVfcHV0X2J5bmFtZSgpIHsgfQogICAgfTsKCgogIGNsYXNzIG1vbmV5X2Jhc2UK ICB7CiAgcHVibGljOgogICAgZW51bSBwYXJ0IHsgbm9uZSwgc3BhY2UsIHN5bWJvbCwgc2lnbiwg dmFsdWUgfTsKICAgIHN0cnVjdCBwYXR0ZXJuIHsgY2hhciBmaWVsZFs0XTsgfTsKCiAgICBzdGF0 aWMgY29uc3QgcGF0dGVybiBfU19kZWZhdWx0X3BhdHRlcm47CgoKCiAgICBzdGF0aWMgcGF0dGVy bgogICAgX1NfY29uc3RydWN0X3BhdHRlcm4oY2hhciBfX3ByZWNlZGVzLCBjaGFyIF9fc3BhY2Us IGNoYXIgX19wb3NuKTsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0lu dGw+CiAgICBjbGFzcyBtb25leXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBt b25leV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5 cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpbnRsID0gX0ludGw7CiAgICAgIHN0YXRpYyBsb2NhbGU6Omlk IGlkOwoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0IGNoYXIqIF9NX2dyb3VwaW5nOwogICAgICBj aGFyX3R5cGUgX01fZGVjaW1hbF9wb2ludDsKICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19z ZXA7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fY3Vycl9zeW1ib2w7CiAgICAgIGNvbnN0IGNo YXJfdHlwZSogX01fcG9zaXRpdmVfc2lnbjsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfTV9uZWdh dGl2ZV9zaWduOwogICAgICBpbnQgX01fZnJhY19kaWdpdHM7CiAgICAgIHBhdHRlcm4gX01fcG9z X2Zvcm1hdDsKICAgICAgcGF0dGVybiBfTV9uZWdfZm9ybWF0OwoKICAgIHB1YmxpYzoKICAgICAg ZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZh Y2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoKTsgfQoKICAgICAg ZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciog X19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAg ICAgeyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jbG9jLCBfX3MpOyB9CgogICAgICBjaGFy X3R5cGUKICAgICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X2RlY2ltYWxfcG9pbnQoKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAo KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAg IHN0cmluZwogICAgICBncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dy b3VwaW5nKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIGN1cnJfc3ltYm9sKCkgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fY3Vycl9zeW1ib2woKTsgfQoKICAgICAgc3RyaW5nX3R5 cGUKICAgICAgcG9zaXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bv c2l0aXZlX3NpZ24oKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgbmVnYXRpdmVfc2lnbigp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25lZ2F0aXZlX3NpZ24oKTsgfQoKICAgICAg aW50CiAgICAgIGZyYWNfZGlnaXRzKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZnJh Y19kaWdpdHMoKTsgfQoKICAgICAgcGF0dGVybgogICAgICBwb3NfZm9ybWF0KCkgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9zX2Zvcm1hdCgpOyB9CgogICAgICBwYXR0ZXJuCiAgICAg IG5lZ19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdfZm9ybWF0KCk7 IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5cHVuY3QoKTsKCiAg ICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25zdAogICAg ICB7IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQog ICAgICBkb190aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRz X3NlcDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdAog ICAgICB7IHJldHVybiBfTV9ncm91cGluZzsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQog ICAgICBkb19jdXJyX3N5bWJvbCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJfc3ltYm9s OyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX3Bvc2l0aXZlX3NpZ24oKSBj b25zdAogICAgICB7IHJldHVybiBfTV9wb3NpdGl2ZV9zaWduOyB9CgogICAgICB2aXJ0dWFsIHN0 cmluZ190eXBlCiAgICAgIGRvX25lZ2F0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiBf TV9uZWdhdGl2ZV9zaWduOyB9CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19mcmFjX2RpZ2l0 cygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2ZyYWNfZGlnaXRzOyB9CgogICAgICB2aXJ0dWFs IHBhdHRlcm4KICAgICAgZG9fcG9zX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Bv c19mb3JtYXQ7IH0KCiAgICAgIHZpcnR1YWwgcGF0dGVybgogICAgICBkb19uZWdfZm9ybWF0KCkg Y29uc3QKICAgICAgeyByZXR1cm4gX01fbmVnX2Zvcm1hdDsgfQoKCiAgICAgICB2b2lkCiAgICAg ICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfU19jX2xvY2Fs ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX25hbWUgPSBf X251bGwpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgog ICAgbG9jYWxlOjppZCBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+OjppZDsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0PF9D aGFyVCwgX0ludGw+OjppbnRsOwoKICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PGNoYXIsIHRy dWU+Ojp+bW9uZXlwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PGNoYXIsIGZh bHNlPjo6fm1vbmV5cHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5j dDxjaGFyLCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsIGNvbnN0 IGNoYXIqKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxz ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlLCBjb25zdCBjaGFyKik7CgoK ICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ojp+bW9uZXlwdW5jdCgp OwoKICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6fm1vbmV5cHVu Y3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVl Pjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciopOwoKICB0 ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5p dGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKTsKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1l IDogcHVibGljIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4KICAgIHsKICAgICAgX19jX2xvY2Fs ZSBfTV9jX2xvY2FsZV9tb25leXB1bmN0OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hh clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190 eXBlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOwoKICAgICAgZXhwbGlj aXQKICAgICAgbW9uZXlwdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZz ID0gMCkKICAgICAgOiBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+KF9fcmVmcykKICAgICAgewog ICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tb25leXB1bmN0LCBfX3MpOwog ICAgICAgIF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfTV9jX2xvY2FsZV9tb25leXB1bmN0KTsK ICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlwdW5jdF9i eW5hbWUoKQogICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbW9uZXlwdW5j dCk7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAg IGNvbnN0IGJvb2wgbW9uZXlwdW5jdF9ieW5hbWU8X0NoYXJULCBfSW50bD46OmludGw7CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIG1vbmV5 X2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CiAg ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0 aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5X2dldChzaXplX3Qg X19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUK ICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlv c19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRv dWJsZSYgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fcywgX19l bmQsIF9faW50bCwgX19pbywgX19lcnIsIF9fdW5pdHMpOyB9CgogICAgICBpdGVyX3R5cGUKICAg ICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19i YXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlw ZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX3MsIF9fZW5k LCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX2RpZ2l0cyk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAg IHZpcnR1YWwKICAgICAgfm1vbmV5X2dldCgpIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK ICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGws IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBs b25nIGRvdWJsZSYgX191bml0cykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg ICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9z X2Jhc2UmIF9faW8sCiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmlu Z190eXBlJiBfX2RpZ2l0cykgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X2dldDxfQ2hhclQsIF9J bkl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl cj4KICAgIGNsYXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBw dWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0 SXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5n X3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAg IG1vbmV5X3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9 CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBp b3NfYmFzZSYgX19pbywKICAgICAgICAgIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9f dW5pdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19p bywgX19maWxsLCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5 cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBjaGFyX3R5cGUg X19maWxsLCBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJu IHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7IH0KCiAg ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5X3B1dCgpIHsgfQoKICAgICAg dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRs LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAgIGxvbmcgZG91 YmxlIF9fdW5pdHMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0 KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9f ZmlsbCwKICAgICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3Q7CiAg ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAg bG9jYWxlOjppZCBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKCiAgc3RydWN0IG1l c3NhZ2VzX2Jhc2UKICB7CiAgICB0eXBlZGVmIGludCBjYXRhbG9nOwogIH07CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzIDogcHVibGljIGxvY2FsZTo6ZmFj ZXQsIHB1YmxpYyBtZXNzYWdlc19iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVm IF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3Ry aW5nX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVf bWVzc2FnZXM7CgoKICAgICAgY29uc3QgY2hhciogX01fbmFtZV9tZXNzYWdlczsKCgogICAgcHVi bGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1l c3NhZ2VzKHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSwg X01fbmFtZV9tZXNzYWdlcygiQyIpCiAgICAgIHsgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19j X2xvY2FsZTsgfQoKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzKF9fY19sb2NhbGUgX19j bG9jLCBjb25zdCBjaGFyKiBfX25hbWUsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2Fs ZTo6ZmFjZXQoX19yZWZzKQogICAgICB7CiAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fbmFt ZTsKICAgICAgICBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xv Yyk7CiAgICAgIH0KCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8 Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsgfQoKCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25z dCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmLCBjb25zdCBjaGFyKikgY29uc3Q7 CgogICAgICBzdHJpbmdfdHlwZQogICAgICBnZXQoY2F0YWxvZyBfX2MsIGludCBfX3NldCwgaW50 IF9fbXNnaWQsIGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmRvX2dldChfX2MsIF9fc2V0LCBfX21zZ2lkLCBfX3MpOyB9CgogICAgICB2b2lkCiAgICAg IGNsb3NlKGNhdGFsb2cgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jbG9zZShf X2MpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlcygpCiAg ICAgICB7CiAgICAgICAgIGlmIChfTV9jX2xvY2FsZV9tZXNzYWdlcyAhPSBfU19jX2xvY2FsZSkK ICAgICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKICAg ICAgIH0KCiAgICAgIHZpcnR1YWwgY2F0YWxvZwogICAgICBkb19vcGVuKGNvbnN0IGJhc2ljX3N0 cmluZzxjaGFyPiYsIGNvbnN0IGxvY2FsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBzdHJpbmdf dHlwZQogICAgICBkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZ190eXBlJiBf X2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAgZG9fY2xvc2UoY2F0YWxv ZykgY29uc3Q7CgoKICAgICAgY2hhcioKICAgICAgX01fY29udmVydF90b19jaGFyKGNvbnN0IHN0 cmluZ190eXBlJiBfX21zZykgY29uc3QKICAgICAgewoKICAgICAgICByZXR1cm4gcmVpbnRlcnBy ZXRfY2FzdDxjaGFyKj4oY29uc3RfY2FzdDxfQ2hhclQqPihfX21zZy5jX3N0cigpKSk7CiAgICAg IH0KCgogICAgICBzdHJpbmdfdHlwZQogICAgICBfTV9jb252ZXJ0X2Zyb21fY2hhcihjaGFyKiBf X21zZykgY29uc3QKICAgICAgewoKICAgICAgICBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0czxj aGFyPjo6bGVuZ3RoKF9fbXNnKSAtIDE7CiMgMTczMCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9p bmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKICAgICAgICByZXR1cm4gc3Ry aW5nX3R5cGUoKTsKICAgICAgfQogICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K ICAgIGxvY2FsZTo6aWQgbWVzc2FnZXM8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBz dHJpbmcKICAgIG1lc3NhZ2VzPGNoYXI+Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0 IHN0cmluZyYpIGNvbnN0OwoKCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2Mr Ky8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9tZXNzYWdlc19tZW1iZXJzLmgiIDEgMwojIDM3 ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdu dS9iaXRzL21lc3NhZ2VzX21lbWJlcnMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K ICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKICAgIG1lc3NhZ2VzPF9DaGFy VD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19s b2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZGlyKSBjb25zdAog ICAgewogICAgICBiaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOwogICAgICByZXR1 cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPgogICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZwogICAgbWVzc2Fn ZXM8X0NoYXJUPjo6ZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9jYWxlJikgY29uc3QKICAgIHsKCgogICAg ICB0ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKICAgICAgcmV0dXJuIDA7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OnN0cmlu Z190eXBlCiAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGZhdWx0KSBj b25zdAogICAgewoKCgoKCgogICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoX19M Q19BTEwsIF9fbnVsbCkpOwogICAgICBzZXRsb2NhbGUoX19MQ19BTEwsIF9NX25hbWVfbWVzc2Fn ZXMpOwogICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZh dWx0KSk7CiAgICAgIHNldGxvY2FsZShfX0xDX0FMTCwgX19vbGQpOwogICAgICBmcmVlKF9fb2xk KTsKICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKCiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHZvaWQKICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRv X2Nsb3NlKGNhdGFsb2cpIGNvbnN0CiAgICB7IH0KIyAxNzQ0ICIvdXNyL2xvY2FsL3ZvbC9nY2Mv My4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZSA6IHB1YmxpYyBtZXNz YWdlczxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf dHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAg ICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVf dCBfX3JlZnMgPSAwKQogICAgICA6IG1lc3NhZ2VzPF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAg ICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fczsKICAgICAgICBpZiAoX01fY19sb2NhbGVfbWVz c2FnZXMgIT0gX1NfY19sb2NhbGUpCiAgICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2Nf bG9jYWxlX21lc3NhZ2VzKTsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVf bWVzc2FnZXMsIF9fcyk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAg ICAgfm1lc3NhZ2VzX2J5bmFtZSgpCiAgICAgIHsgfQogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQgX19jLCBj b25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g PihfX2xvYykuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHJpbnQoX0NoYXJUIF9fYywgY29uc3Qg bG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19s b2MpLmlzKGN0eXBlX2Jhc2U6OnByaW50LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2Fs ZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5p cyhjdHlwZV9iYXNlOjpjbnRybCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+ CiAgICBpbmxpbmUgYm9vbAogICAgaXN1cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9f bG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5 cGVfYmFzZTo6dXBwZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg aW5saW5lIGJvb2wgaXNsb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAg eyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6 bG93ZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJv b2wKICAgIGlzYWxwaGEoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0 dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFscGhh LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAg ICBpc2RpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1 c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19j KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNw dW5jdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2Zh Y2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6cHVuY3QsIF9fYyk7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzeGRpZ2l0 KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8 Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjp4ZGlnaXQsIF9fYyk7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxudW0oX0No YXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlw ZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFsbnVtLCBfX2MpOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2dyYXBoKF9DaGFyVCBf X2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0No YXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpncmFwaCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b3VwcGVyKF9DaGFyVCBfX2Ms IGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJU PiA+KF9fbG9jKS50b3VwcGVyKF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog ICAgaW5saW5lIF9DaGFyVAogICAgdG9sb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9f bG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG9sb3dl cihfX2MpOyB9Cn0KIyA0MiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIv Yml0cy9iYXNpY19pb3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaW9zIDogcHVibGlj IGlvc19iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYg X1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlw ZV90eXBlOwogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRz PiBfX29zdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fcHV0PF9DaGFyVCwgX19vc3Ry ZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVy YXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51 bV9nZXQ8X0NoYXJULCBfX2lzdHJlYW1idWZfaXRlcj4gX19udW1nZXRfdHlwZTsKCgogICAgcHJv dGVjdGVkOgogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3RpZTsKICAg ICAgbXV0YWJsZSBjaGFyX3R5cGUgX01fZmlsbDsKICAgICAgbXV0YWJsZSBib29sIF9NX2ZpbGxf aW5pdDsKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3N0cmVhbWJ1 ZjsKCgogICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9NX2ZjdHlwZTsKCiAgICAgIGNvbnN0IF9f bnVtcHV0X3R5cGUqIF9NX2ZudW1wdXQ7CgogICAgICBjb25zdCBfX251bWdldF90eXBlKiBfTV9m bnVtZ2V0OwoKICAgIHB1YmxpYzoKICAgICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5mYWlsKCkgPyAwIDogY29uc3RfY2FzdDxiYXNpY19pb3MqPih0aGlzKTsg fQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvciEoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5mYWlsKCk7IH0KCiAgICAgIGlvc3RhdGUKICAgICAgcmRzdGF0ZSgpIGNvbnN0CiAgICAgIHsg cmV0dXJuIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsgfQoKICAgICAgdm9pZAogICAgICBjbGVhcihpb3N0 YXRlIF9fc3RhdGUgPSBnb29kYml0KTsKCiAgICAgIHZvaWQKICAgICAgc2V0c3RhdGUoaW9zdGF0 ZSBfX3N0YXRlKQogICAgICB7IHRoaXMtPmNsZWFyKHRoaXMtPnJkc3RhdGUoKSB8IF9fc3RhdGUp OyB9CgogICAgICBib29sCiAgICAgIGdvb2QoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5y ZHN0YXRlKCkgPT0gMDsgfQoKICAgICAgYm9vbAogICAgICBlb2YoKSBjb25zdAogICAgICB7IHJl dHVybiAodGhpcy0+cmRzdGF0ZSgpICYgZW9mYml0KSAhPSAwOyB9CgogICAgICBib29sCiAgICAg IGZhaWwoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgKGJhZGJpdCB8 IGZhaWxiaXQpKSAhPSAwOyB9CgogICAgICBib29sCiAgICAgIGJhZCgpIGNvbnN0CiAgICAgIHsg cmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBiYWRiaXQpICE9IDA7IH0KCiAgICAgIGlvc3RhdGUK ICAgICAgZXhjZXB0aW9ucygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2V4Y2VwdGlvbjsgfQoK ICAgICAgdm9pZAogICAgICBleGNlcHRpb25zKGlvc3RhdGUgX19leGNlcHQpCiAgICAgIHsKICAg ICAgICBfTV9leGNlcHRpb24gPSBfX2V4Y2VwdDsKICAgICAgICB0aGlzLT5jbGVhcihfTV9zdHJl YW1idWZfc3RhdGUpOwogICAgICB9CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaW9zKGJh c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKSA6IGlvc19iYXNlKCkKICAgICAg eyB0aGlzLT5pbml0KF9fc2IpOyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19pb3MoKSB7 IH0KCgogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHRpZSgpIGNv bnN0CiAgICAgIHsgcmV0dXJuIF9NX3RpZTsgfQoKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+KgogICAgICB0aWUoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX3Rp ZXN0cikKICAgICAgewogICAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX19v bGQgPSBfTV90aWU7CiAgICAgICAgX01fdGllID0gX190aWVzdHI7CiAgICAgICAgcmV0dXJuIF9f b2xkOwogICAgICB9CgogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAg ICAgcmRidWYoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWY7IH0KCiAgICAgIGJh c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgICByZGJ1ZihiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7CgogICAgICBiYXNpY19pb3MmCiAgICAgIGNvcHlm bXQoY29uc3QgYmFzaWNfaW9zJiBfX3Jocyk7CgogICAgICBjaGFyX3R5cGUKICAgICAgZmlsbCgp IGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoIV9NX2ZpbGxfaW5pdCkKICAgICAgICAgIHsKICAg ICAgICAgICAgX01fZmlsbCA9IHRoaXMtPndpZGVuKCcgJyk7CiAgICAgICAgICAgIF9NX2ZpbGxf aW5pdCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9NX2ZpbGw7CiAgICAgIH0K CiAgICAgIGNoYXJfdHlwZQogICAgICBmaWxsKGNoYXJfdHlwZSBfX2NoKQogICAgICB7CiAgICAg ICAgY2hhcl90eXBlIF9fb2xkID0gdGhpcy0+ZmlsbCgpOwogICAgICAgIF9NX2ZpbGwgPSBfX2No OwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKCiAgICAgIGxvY2FsZQogICAgICBpbWJ1 ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKCiAgICAgIGNoYXIKICAgICAgbmFycm93KGNoYXJfdHlw ZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0OwoKICAgICAgY2hhcl90eXBlCiAgICAgIHdpZGVu KGNoYXIgX19jKSBjb25zdDsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBiYXNpY19pb3MoKSA6IGlv c19iYXNlKCkKICAgICAgeyB9CgogICAgICB2b2lkCiAgICAgIGluaXQoYmFzaWNfc3RyZWFtYnVm PF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoKICAgICAgYm9vbAogICAgICBfTV9jaGVja19mYWNl dChjb25zdCBsb2NhbGU6OmZhY2V0KiBfX2YpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoIV9f ZikKICAgICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAg ICAgfQoKICAgICAgdm9pZAogICAgICBfTV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xv Yyk7CiAgICB9Owp9CgoKCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8z LjIvYml0cy9iYXNpY19pb3MudGNjIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9p bmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19pb3MudGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBi YXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y2xlYXIoaW9zdGF0ZSBfX3N0YXRlKQogICAgewog ICAgICBpZiAodGhpcy0+cmRidWYoKSkKICAgICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3N0 YXRlOwogICAgICBlbHNlCiAgICAgICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3N0YXRlIHwg YmFkYml0OwogICAgICBpZiAoKHRoaXMtPnJkc3RhdGUoKSAmIHRoaXMtPmV4Y2VwdGlvbnMoKSkp CiAgICAgICAgX190aHJvd19pb3NfZmFpbHVyZSgiYmFzaWNfaW9zOjpjbGVhcihpb3N0YXRlKSBj YXVzZWQgZXhjZXB0aW9uIik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAg YmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OnJkYnVmKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs IF9UcmFpdHM+KiBfX3NiKQogICAgewogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh aXRzPiogX19vbGQgPSBfTV9zdHJlYW1idWY7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9fc2I7CiAg ICAgIHRoaXMtPmNsZWFyKCk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaW9zPF9DaGFyVCwg X1RyYWl0cz4mCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y29weWZtdChjb25zdCBi YXNpY19pb3MmIF9fcmhzKQogICAgewoKCgoKICAgICAgX1dvcmRzKiBfX3dvcmRzID0gKF9fcmhz Ll9NX3dvcmRfc2l6ZSA8PSBfU19sb2NhbF93b3JkX3NpemUpID8KICAgICAgICBfTV9sb2NhbF93 b3JkIDogbmV3IF9Xb3Jkc1tfX3Jocy5fTV93b3JkX3NpemVdOwoKCiAgICAgIF9DYWxsYmFja19s aXN0KiBfX2NiID0gX19yaHMuX01fY2FsbGJhY2tzOwogICAgICBpZiAoX19jYikKICAgICAgICBf X2NiLT5fTV9hZGRfcmVmZXJlbmNlKCk7CiAgICAgIF9NX2NhbGxfY2FsbGJhY2tzKGVyYXNlX2V2 ZW50KTsKICAgICAgaWYgKF9NX3dvcmQgIT0gX01fbG9jYWxfd29yZCkKICAgICAgICB7CiAgICAg ICAgICBkZWxldGUgW10gX01fd29yZDsKICAgICAgICAgIF9NX3dvcmQgPSAwOwogICAgICAgIH0K ICAgICAgX01fZGlzcG9zZV9jYWxsYmFja3MoKTsKCiAgICAgIF9NX2NhbGxiYWNrcyA9IF9fY2I7 CiAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9fcmhzLl9NX3dvcmRfc2l6ZTsgKytfX2kp CiAgICAgICAgX193b3Jkc1tfX2ldID0gX19yaHMuX01fd29yZFtfX2ldOwogICAgICBpZiAoX01f d29yZCAhPSBfTV9sb2NhbF93b3JkKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSBbXSBfTV93 b3JkOwogICAgICAgICAgX01fd29yZCA9IDA7CiAgICAgICAgfQogICAgICBfTV93b3JkID0gX193 b3JkczsKICAgICAgX01fd29yZF9zaXplID0gX19yaHMuX01fd29yZF9zaXplOwoKICAgICAgdGhp cy0+ZmxhZ3MoX19yaHMuZmxhZ3MoKSk7CiAgICAgIHRoaXMtPndpZHRoKF9fcmhzLndpZHRoKCkp OwogICAgICB0aGlzLT5wcmVjaXNpb24oX19yaHMucHJlY2lzaW9uKCkpOwogICAgICB0aGlzLT50 aWUoX19yaHMudGllKCkpOwogICAgICB0aGlzLT5maWxsKF9fcmhzLmZpbGwoKSk7CgogICAgICB0 aGlzLT5leGNlcHRpb25zKF9fcmhzLmV4Y2VwdGlvbnMoKSk7CgogICAgICBfTV9jYWxsX2NhbGxi YWNrcyhjb3B5Zm10X2V2ZW50KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjaGFyCiAgICBiYXNpY19p b3M8X0NoYXJULCBfVHJhaXRzPjo6bmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQp IGNvbnN0CiAgICB7CiAgICAgIGNoYXIgX19yZXQgPSBfX2RmYXVsdDsKICAgICAgaWYgKF9NX2No ZWNrX2ZhY2V0KF9NX2ZjdHlwZSkpCiAgICAgICAgX19yZXQgPSBfTV9mY3R5cGUtPm5hcnJvdyhf X2MsIF9fZGZhdWx0KTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBfQ2hhclQKICAgIGJhc2ljX2lvczxf Q2hhclQsIF9UcmFpdHM+Ojp3aWRlbihjaGFyIF9fYykgY29uc3QKICAgIHsKICAgICAgY2hhcl90 eXBlIF9fcmV0ID0gY2hhcl90eXBlKCk7CiAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mY3R5 cGUpKQogICAgICAgIF9fcmV0ID0gX01fZmN0eXBlLT53aWRlbihfX2MpOwogICAgICByZXR1cm4g X19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBsb2NhbGUKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjppbWJ1ZShjb25z dCBsb2NhbGUmIF9fbG9jKQogICAgewogICAgICBsb2NhbGUgX19vbGQodGhpcy0+Z2V0bG9jKCkp OwogICAgICBpb3NfYmFzZTo6aW1idWUoX19sb2MpOwogICAgICBfTV9jYWNoZV9mYWNldHMoX19s b2MpOwogICAgICBpZiAodGhpcy0+cmRidWYoKSAhPSAwKQogICAgICAgIHRoaXMtPnJkYnVmKCkt PnB1YmltYnVlKF9fbG9jKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19pb3M8 X0NoYXJULCBfVHJhaXRzPjo6aW5pdChiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiog X19zYikKICAgIHsKCiAgICAgIGlvc19iYXNlOjpfTV9pbml0KCk7CiAgICAgIF9NX2NhY2hlX2Zh Y2V0cyhfTV9pb3NfbG9jYWxlKTsKICAgICAgX01fdGllID0gMDsKIyAxNTkgIi91c3IvbG9jYWwv dm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLnRjYyIgMwogICAgICBf TV9maWxsID0gX0NoYXJUKCk7CiAgICAgIF9NX2ZpbGxfaW5pdCA9IGZhbHNlOwoKICAgICAgX01f ZXhjZXB0aW9uID0gZ29vZGJpdDsKICAgICAgX01fc3RyZWFtYnVmID0gX19zYjsKICAgICAgX01f c3RyZWFtYnVmX3N0YXRlID0gX19zYiA/IGdvb2RiaXQgOiBiYWRiaXQ7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2lj X2lvczxfQ2hhclQsIF9UcmFpdHM+OjpfTV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xv YykKICAgIHsKICAgICAgaWYgKGhhc19mYWNldDxfX2N0eXBlX3R5cGU+KF9fbG9jKSkKICAgICAg ICBfTV9mY3R5cGUgPSAmdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19sb2MpOwogICAgICBlbHNl CiAgICAgICAgX01fZmN0eXBlID0gMDsKCiAgICAgIGlmIChoYXNfZmFjZXQ8X19udW1wdXRfdHlw ZT4oX19sb2MpKQogICAgICAgIF9NX2ZudW1wdXQgPSAmdXNlX2ZhY2V0PF9fbnVtcHV0X3R5cGU+ KF9fbG9jKTsKICAgICAgZWxzZQogICAgICAgIF9NX2ZudW1wdXQgPSAwOwogICAgICBpZiAoaGFz X2ZhY2V0PF9fbnVtZ2V0X3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mbnVtZ2V0ID0gJnVzZV9m YWNldDxfX251bWdldF90eXBlPihfX2xvYyk7CiAgICAgIGVsc2UKICAgICAgICBfTV9mbnVtZ2V0 ID0gMDsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lvczxjaGFyPjsK ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaW9zPHdjaGFyX3Q+Owp9CiMgMjA4ICIvdXNy L2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMK IyA1MiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaW9zIiAyIDMKIyA0 NiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvb3N0cmVhbSIgMiAzCgpu YW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxf Q2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBj aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5 cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1 ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf aW9zPF9DaGFyVCwgX1RyYWl0cz4gX19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgb3N0cmVh bWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbWJ1Zl9pdGVyOwogICAgICB0 eXBlZGVmIG51bV9wdXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRlcj4gX19udW1wdXRfdHlwZTsK ICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKCgogICAgICBleHBsaWNp dAogICAgICBiYXNpY19vc3RyZWFtKF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpCiAgICAgIHsgdGhp cy0+aW5pdChfX3NiKTsgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfb3N0cmVhbSgpIHsg fQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsKCgoKICAg ICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19w ZikoX19vc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0 b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1f dHlwZSYKICAgICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKSAoaW9zX2Jhc2UmKSk7CgoK ICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwobG9uZyBfX24pOwoKICAgICAg X19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pOwoKICAg ICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoYm9vbCBfX24pOwoKICAgICAgX19v c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoc2hvcnQgX19uKQogICAgICB7CiAgICAgICAg aW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNl ZmllbGQ7CiAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlvc19i YXNlOjpoZXgpCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1 bnNpZ25lZCBsb25nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19j YXN0PHVuc2lnbmVkIHNob3J0PihfX24pKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJu IHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAg IF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IF9fbikKICAg ICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihf X24pKTsgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW50IF9fbikK ICAgICAgewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkg JiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3Qg fHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9y PDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fbikpKTsKICAgICAgICBlbHNlCiAg ICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxsb25nPihfX24pKTsK ICAgICAgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQg aW50IF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNp Z25lZCBsb25nPihfX24pKTsgfQoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRv cjw8KGxvbmcgbG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y PDwodW5zaWduZWQgbG9uZyBsb25nIF9fbik7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAg IG9wZXJhdG9yPDwoZG91YmxlIF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3Bl cmF0b3I8PChmbG9hdCBfX2YpCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGlj X2Nhc3Q8ZG91YmxlPihfX2YpKTsgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh dG9yPDwobG9uZyBkb3VibGUgX19mKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVy YXRvcjw8KGNvbnN0IHZvaWQqIF9fcCk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3Bl cmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsKCgogICAgICBfX29zdHJlYW1fdHlwZSYK ICAgICAgcHV0KGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHdy aXRlKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBfX29zdHJl YW1fdHlwZSYKICAgICAgZmx1c2goKTsKCgogICAgICBwb3NfdHlwZQogICAgICB0ZWxscCgpOwoK ICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtwKHBvc190eXBlKTsKCiAgICAgIF9fb3N0 cmVhbV90eXBlJgogICAgICBzZWVrcChvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOwogICAg fTsKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBj bGFzcyBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAgewoKICAgICAg Ym9vbCBfTV9vazsKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9NX29zOwoK ICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0No YXJULF9UcmFpdHM+JiBfX29zKTsKCiAgICAgIH5zZW50cnkoKQogICAgICB7CgogICAgICAgIGlm IChfTV9vcy5mbGFncygpICYgaW9zX2Jhc2U6OnVuaXRidWYgJiYgIXVuY2F1Z2h0X2V4Y2VwdGlv bigpKQogICAgICAgICAgewoKICAgICAgICAgICAgaWYgKF9NX29zLnJkYnVmKCkgJiYgX01fb3Mu cmRidWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICAgIF9NX29zLnNldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgfQogICAgICB9CgogICAgICBvcGVyYXRvciBib29s KCkKICAgICAgeyByZXR1cm4gX01fb2s7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwg X0NoYXJUIF9fYyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpCiAgICB7IHJldHVy biAoX19vdXQgPDwgX19vdXQud2lkZW4oX19jKSk7IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfVHJh aXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFz aWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKTsKCgogIHRlbXBsYXRl PGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3Bl cmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgc2lnbmVkIGNoYXIg X19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9Cgog IHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgdW5z aWduZWQgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4o X19jKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcyk7CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiAmCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBf VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwo YmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7CgoK ICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRz PiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNv bnN0IHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnByZXRf Y2FzdDxjb25zdCBjaGFyKj4oX19zKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAg IGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry ZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgdW5zaWduZWQgY2hhciogX19zKQogICAg eyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9 CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRsKGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIGZsdXNoKF9fb3MucHV0KF9fb3Mud2lkZW4o J1xuJykpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRzKGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIF9fb3MucHV0KF9DaGFyVCgp KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBmbHVzaChiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBfX29zLmZsdXNoKCk7IH0KCn0KCgoK CgojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvb3N0cmVh bS50Y2MiIDEgMwojIDM2ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9i aXRzL29zdHJlYW0udGNjIiAzCgojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9j KysvMy4yL2xvY2FsZSIgMSAzCiMgNDMgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9j KysvMy4yL2xvY2FsZSIgMwoKCgojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9j KysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDEgMwojIDM3ICIvdXNyL2xvY2FsL3ZvbC9n Y2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCgojIDEgIi91 c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2NlcnJubyIgMSAzCiMgNDcgIi91 c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2NlcnJubyIgMwoKIyAxICIvdXNy L2luY2x1ZGUvZXJybm8uaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCmV4dGVy biAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDEgMwojIDI1ICIvdXNy L2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgi IDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vZXJybm8uaCIgMSAzCiMgNSAiL3Vzci9pbmNs dWRlL2xpbnV4L2Vycm5vLmgiIDIgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAy IDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwpleHRlcm4gaW50IGVycm5vOwoK CmV4dGVybiBpbnQgKl9fZXJybm9fbG9jYXRpb24gKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKIyAzNyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMwojIDU1ICIv dXNyL2luY2x1ZGUvZXJybm8uaCIgMwpleHRlcm4gY2hhciAqcHJvZ3JhbV9pbnZvY2F0aW9uX25h bWUsICpwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsKCgoKfQojIDY5ICIvdXNyL2luY2x1 ZGUvZXJybm8uaCIgMwp0eXBlZGVmIGludCBlcnJvcl90OwojIDQ5ICIvdXNyL2xvY2FsL3ZvbC9n Y2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jZXJybm8iIDIgMwojIDM5ICIvdXNyL2xvY2FsL3ZvbC9n Y2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCgojIDEg Ii91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAxIDMKIyA0OCAi L3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMKCgoKIyAxICIv dXNyL2luY2x1ZGUvbWF0aC5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpleHRl cm4gIkMiIHsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAxIDMKIyAzNCAi L3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbmFuLmgi IDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9i aXRzL21hdGhkZWYuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMwp0 eXBlZGVmIGxvbmcgZG91YmxlIGZsb2F0X3Q7Cgp0eXBlZGVmIGxvbmcgZG91YmxlIGRvdWJsZV90 OwojIDQxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA2MyAiL3Vzci9pbmNsdWRlL21hdGgu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9p bmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGRvdWJsZSBhY29zIChkb3VibGUgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoK ZXh0ZXJuIGRvdWJsZSBhc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf X2FzaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuIChkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgp OwoKZXh0ZXJuIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBkb3VibGUgX19hdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGRvdWJsZSBjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl IF9fY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgc2luIChkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7 CgpleHRlcm4gZG91YmxlIHRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg X190YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBzaW5jb3MgKGRvdWJs ZSBfX3gsIGRvdWJsZSAqX19zaW54LCBkb3VibGUgKl9fY29zeCkgdGhyb3cgKCk7IGV4dGVybiB2 b2lkIF9fc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gp IHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgp OyBleHRlcm4gZG91YmxlIF9fY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91 YmxlIHNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2luaCAoZG91 YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHRhbmggKGRvdWJsZSBfX3gpIHRocm93 ICgpOyBleHRlcm4gZG91YmxlIF9fdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVy biBkb3VibGUgYWNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYWNv c2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhc2luaCAoZG91YmxlIF9f eCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hc2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7 CgpleHRlcm4gZG91YmxlIGF0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs ZSBfX2F0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIGV4cCAo ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAgKGRvdWJsZSBfX3gpIHRo cm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGV4cDEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX2V4cDEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUg cG93MTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93MTAgKGRvdWJs ZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGZyZXhwIChkb3VibGUgX194LCBpbnQg Kl9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZnJleHAgKGRvdWJsZSBfX3gs IGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsZGV4cCAoZG91Ymxl IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbGRleHAgKGRv dWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZyAo ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cgKGRvdWJsZSBfX3gpIHRo cm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gZG91YmxlIF9fbG9nMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUg bW9kZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl IF9fbW9kZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoKCgpleHRlcm4g ZG91YmxlIGV4cG0xIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cG0x IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzFwIChkb3VibGUgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzFwIChkb3VibGUgX194KSB0aHJvdyAoKTsK CgpleHRlcm4gZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl IF9fbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGV4cDIgKGRv dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwMiAoZG91YmxlIF9feCkgdGhy b3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cyIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGRvdWJsZSBfX2xvZzIgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91Ymxl IHBvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19w b3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgc3Fy dCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zcXJ0IChkb3VibGUgX194 KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9f eSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19oeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9f eSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGNicnQgKGRvdWJsZSBfX3gpIHRocm93ICgp OyBleHRlcm4gZG91YmxlIF9fY2JydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy biBkb3VibGUgY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOyBleHRlcm4gZG91YmxlIF9fY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZmFicyAoZG91YmxlIF9feCkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fZmFi cyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4 dGVybiBkb3VibGUgZmxvb3IgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2Zsb29yIChkb3VibGUgX194KSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBmbW9kIChkb3VibGUg X194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKGRvdWJsZSBf X3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUg X192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBp bnQgX19maW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlIChkb3VibGUg X192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBk b3VibGUgZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi bGUgX19kcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRv dWJsZSBzaWduaWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19z aWduaWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGNvcHlz aWduIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19jb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9f eSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJs ZSBuYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW4g KGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK CmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX2owIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGoxIChkb3Vi bGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVy biBkb3VibGUgam4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2puIChp bnQsIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJsZSkgdGhyb3cgKCk7 IGV4dGVybiBkb3VibGUgX195MCAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5MSAo ZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3VibGUpIHRocm93ICgpOwpl eHRlcm4gZG91YmxlIHluIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195 biAoaW50LCBkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUp IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXJmIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4g ZG91YmxlIGVyZmMgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19lcmZjIChkb3Vi bGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX2xnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSB0 Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190Z2FtbWEgKGRvdWJsZSkg dGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRl cm4gZG91YmxlIF9fZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUg bGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs ZSBfX2xnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiBkb3VibGUgcmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19y aW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG5leHRhZnRlciAoZG91 YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OyBleHRlcm4gZG91YmxlIF9fbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZG91YmxlIG5leHR0b3dh cmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dHRvd2FyZCAoZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4 dGVybiBkb3VibGUgcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsg ZXh0ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cg KCk7CgoKCmV4dGVybiBkb3VibGUgc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRocm93 ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93 ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCBpbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQg X19pbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibG4g KGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2Fs YmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gZG91Ymxl IG5lYXJieWludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19uZWFyYnlp bnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHJvdW5kIChkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JvdW5kIChkb3VibGUgX194KSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGRvdWJsZSB0cnVuYyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fdHJ1bmMgKGRvdWJsZSBfX3gpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBkb3VibGUgcmVt cXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJu IGRvdWJsZSBfX3JlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhy b3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGludCBfX2xyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxv bmcgbG9uZyBpbnQgbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9u ZyBpbnQgX19sbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQg bHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kIChk b3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZCAoZG91Ymxl IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZCAoZG91YmxlIF9f eCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9f eSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195 KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtYXggKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg dGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWluIChkb3VibGUgX194LCBkb3VibGUgX195KSB0 aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRo cm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeSAoZG91YmxlIF9fdmFsdWUpIHRocm93 ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWdu Yml0IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKCmV4dGVybiBkb3VibGUgZm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3Vi bGUgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYSAoZG91YmxlIF9feCwgZG91Ymxl IF9feSwgZG91YmxlIF9feikgdGhyb3cgKCk7CiMgNjQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIg MwojIDgyICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0 aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRl cm4gZmxvYXQgYWNvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3Nm IChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5mIChmbG9hdCBfX3gpIHRo cm93ICgpOyBleHRlcm4gZmxvYXQgX19hc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVy biBmbG9hdCBhdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmYg KGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ksIGZs b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW4yZiAoZmxvYXQgX195LCBmbG9h dCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBjb3NmIChmbG9hdCBfX3gpIHRocm93ICgp OyBleHRlcm4gZmxvYXQgX19jb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0 IHNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpbmYgKGZsb2F0IF9f eCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGZsb2F0IF9fdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2lu Y29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KSB0aHJvdyAoKTsg ZXh0ZXJuIHZvaWQgX19zaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0ICpf X2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgY29zaGYgKGZsb2F0IF9feCkgdGhy b3cgKCk7IGV4dGVybiBmbG9hdCBfX2Nvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJu IGZsb2F0IHNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaW5oZiAo ZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB0YW5oZiAoZmxvYXQgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVy biBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3No ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCkg dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2FzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4 dGVybiBmbG9hdCBhdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0 YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZXhwZiAoZmxvYXQg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGZsb2F0IGV4cDEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0 IF9fZXhwMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHBvdzEwZiAoZmxv YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcG93MTBmIChmbG9hdCBfX3gpIHRocm93 ICgpOwoKCgpleHRlcm4gZmxvYXQgZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBvbmVudCkg dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25l bnQpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhw b25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZGV4cGYgKGZsb2F0IF9feCwgaW50IF9f ZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2dmIChmbG9hdCBfX3gpIHRocm93 ICgpOyBleHRlcm4gZmxvYXQgX19sb2dmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBm bG9hdCBsb2cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZzEwZiAo ZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbW9kZmYgKGZsb2F0IF9feCwgZmxv YXQgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX21vZGZmIChmbG9hdCBfX3gsIGZs b2F0ICpfX2lwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgZXhwbTFmIChmbG9hdCBfX3gp IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBtMWYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGZsb2F0IGxvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f bG9nMXBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2diZiAoZmxvYXQg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gZmxvYXQgZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h dCBfX2V4cDJmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cyZiAoZmxv YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMmYgKGZsb2F0IF9feCkgdGhyb3cg KCk7CgoKCgoKCmV4dGVybiBmbG9hdCBwb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX3Bvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsK CgpleHRlcm4gZmxvYXQgc3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf X3NxcnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgaHlwb3RmIChmbG9h dCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2h5cG90ZiAoZmxvYXQg X194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGNicnRmIChmbG9hdCBf X3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jYnJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsK CgoKCgoKZXh0ZXJuIGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fY2VpbGYgKGZsb2F0IF9feCkgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBmYWJzZiAoZmxv YXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9h dCBfX2ZhYnNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgpleHRlcm4gZmxvYXQgZmxvb3JmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fZmxvb3JmIChmbG9hdCBfX3gpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZm1vZGYgKGZs b2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZm1vZGYgKGZsb2F0 IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmYgKGZsb2F0 IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g aW50IF9fZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWYgKGZsb2F0 IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g ZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0 IF9fZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0 IHNpZ25pZmljYW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2lnbmlm aWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGNvcHlzaWduZiAo ZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsgZXh0ZXJuIGZsb2F0IF9fY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGZsb2F0IG5hbmYgKF9f Y29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 IGV4dGVybiBmbG9hdCBfX25hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW5mIChmbG9hdCBf X3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBp bnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGowZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg X19qMGYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGoxZiAoZmxvYXQpIHRocm93ICgp OyBleHRlcm4gZmxvYXQgX19qMWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGpuZiAo aW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2puZiAoaW50LCBmbG9hdCkgdGhy b3cgKCk7CmV4dGVybiBmbG9hdCB5MGYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f eTBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MWYgKGZsb2F0KSB0aHJvdyAoKTsg ZXh0ZXJuIGZsb2F0IF9feTFmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5bmYgKGlu dCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195bmYgKGludCwgZmxvYXQpIHRocm93 ICgpOwoKCgoKCmV4dGVybiBmbG9hdCBlcmZmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h dCBfX2VyZmYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGVyZmNmIChmbG9hdCkgdGhy b3cgKCk7IGV4dGVybiBmbG9hdCBfX2VyZmNmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9h dCBsZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWYgKGZsb2F0 KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHRnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0 ZXJuIGZsb2F0IF9fdGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGdh bW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19nYW1tYWYgKGZsb2F0KSB0aHJv dyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGxnYW1tYWZfciAoZmxvYXQsIGludCAqX19zaWduZ2Ft cCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWZfciAoZmxvYXQsIGludCAqX19zaWdu Z2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCByaW50ZiAoZmxvYXQgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJu IGZsb2F0IG5leHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHRhZnRlcmYgKGZsb2F0IF9f eCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRl cm4gZmxvYXQgbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHR0b3dhcmRm IChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQgcmVtYWluZGVyZiAoZmxvYXQgX194LCBmbG9hdCBf X3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0 IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQg X19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJmIChmbG9hdCBfX3gsIGZsb2F0IF9f bikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJuZiAoZmxvYXQgX194LCBpbnQgX19u KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJuZiAoZmxvYXQgX194LCBpbnQgX19uKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy biBpbnQgX19pbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2Nh bGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f c2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZs b2F0IG5lYXJieWludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX25lYXJi eWludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCByb3VuZGYgKGZsb2F0 IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGZsb2F0IHRydW5jZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX3RydW5jZiAoZmxvYXQgX194KSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gZmxvYXQgcmVtcXVv ZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOyBleHRlcm4gZmxv YXQgX19yZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7 CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy biBsb25nIGludCBfX2xyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9u ZyBpbnQgbGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQg X19sbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5k ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kZiAoZmxvYXQg X194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZGYgKGZsb2F0IF9feCkg dGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZGYgKGZsb2F0IF9feCkgdGhy b3cgKCk7CgoKCmV4dGVybiBmbG9hdCBmZGltZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93 ICgpOyBleHRlcm4gZmxvYXQgX19mZGltZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgp OwoKCmV4dGVybiBmbG9hdCBmbWF4ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBl eHRlcm4gZmxvYXQgX19mbWF4ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCmV4 dGVybiBmbG9hdCBmbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4g ZmxvYXQgX19mbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4g aW50IF9fZnBjbGFzc2lmeWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0ZiAoZmxvYXQgX192YWx1 ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBm bG9hdCBmbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQgX196KSB0aHJvdyAoKTsgZXh0 ZXJuIGZsb2F0IF9fZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikgdGhyb3cg KCk7CiMgODMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDk5ICIvdXNyL2luY2x1ZGUvbWF0 aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNy L2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2wgKGxv bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NsIChsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5sIChsb25nIGRv dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2lubCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFubCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmwgKGxvbmcgZG91YmxlIF9f eCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJsZSBfX3ks IGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW4ybCAo bG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25n IGRvdWJsZSBjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19jb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl IHNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Np bmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgdGFubCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFubCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zbCAobG9uZyBkb3Vi bGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAo KTsgZXh0ZXJuIHZvaWQgX19zaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpf X3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBk b3VibGUgY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2Nvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl IHNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19z aW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5o bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFuaGwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBhY29zaGwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NobCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2luaGwgKGxv bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5obCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuaGwgKGxvbmcg ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5obCAobG9uZyBk b3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbCAobG9uZyBk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDEwbCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMTBsIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvdzEwbCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93MTBsIChsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZnJleHBsIChsb25nIGRvdWJsZSBf X3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZyZXhw bCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBs b25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9f ZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dsIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsIChsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91YmxlIF9f eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzEwbCAobG9uZyBkb3VibGUgX194 KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbW9kZmwgKGxvbmcgZG91YmxlIF9feCwg bG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX21vZGZs IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoKCgpleHRl cm4gbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g bG9uZyBkb3VibGUgX19leHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJu IGxvbmcgZG91YmxlIGxvZzFwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBs b25nIGRvdWJsZSBsb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9u ZyBkb3VibGUgZXhwMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv dWJsZSBfX2V4cDJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRv dWJsZSBsb2cybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fbG9nMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRv dWJsZSBwb3dsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195 KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKGxvbmcgZG91YmxlIF9feCkg dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSBfX3gpIHRo cm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxv bmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2h5cG90bCAobG9u ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcg ZG91YmxlIGNicnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19jYnJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcg ZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2VpbGwgKGxvbmcgZG91YmxlIF9feCkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJs ZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmxv b3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1vZGwg KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAo KTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlbCAobG9u ZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK CgoKZXh0ZXJuIGludCBpc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWwgKGxvbmcgZG91Ymxl IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g bG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJv dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk b3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpZ25pZmljYW5kbCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lnbmlmaWNh bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNv cHlzaWdubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29weXNpZ25sIChs b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5hbmwgKF9fY29uc3QgY2hhciAq X190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25n IGRvdWJsZSBfX25hbmwgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW5sIChsb25nIGRvdWJsZSBf X3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBp bnQgaXNuYW5sIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGowbCAobG9uZyBkb3VibGUpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qMGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0 ZXJuIGxvbmcgZG91YmxlIGoxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk b3VibGUgX19qMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGpu bCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2pubCAo aW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB5MGwgKGxvbmcg ZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feTBsIChsb25nIGRvdWJsZSkg dGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB5MWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9feTFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBs b25nIGRvdWJsZSB5bmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk b3VibGUgX195bmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25n IGRvdWJsZSBlcmZsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf X2VyZmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmNsIChs b25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2VyZmNsIChsb25nIGRv dWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsIChsb25nIGRvdWJsZSkg dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAo KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwoK CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRl cm4gbG9uZyBkb3VibGUgX19nYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0 ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWxfciAobG9uZyBkb3VibGUsIGludCAqX19zaWduZ2FtcCkg dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWxfciAobG9uZyBkb3VibGUsIGlu dCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSByaW50bCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmludGwgKGxv bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHRhZnRlcmwg KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25leHRhZnRlcmwgKGxvbmcgZG91 YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgpleHRlcm4gbG9uZyBkb3VibGUgbmV4dHRvd2FyZGwgKGxvbmcgZG91YmxlIF9feCwg bG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX25leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91 YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4g bG9uZyBkb3VibGUgcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yZW1haW5kZXJsIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2Fs YmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbikgdGhy b3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJubCAobG9uZyBkb3VibGUgX194LCBp bnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJubCAobG9uZyBkb3Vi bGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYmwgKGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYmwgKGxvbmcgZG91YmxlIF9feCkg dGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJsbmwgKGxvbmcgZG91YmxlIF9f eCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsbmwg KGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcg ZG91YmxlIG5lYXJieWludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n IGRvdWJsZSBfX25lYXJieWludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVy biBsb25nIGRvdWJsZSByb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs b25nIGRvdWJsZSBfX3JvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGxvbmcgZG91YmxlIHRydW5jbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RydW5jbCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4g bG9uZyBkb3VibGUgcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGlu dCAqX19xdW8pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yZW1xdW9sIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiBsb25nIGludCBscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs b25nIGludCBfX2xyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg bG9uZyBpbnQgbGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg bG9uZyBpbnQgX19sbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4g bG9uZyBpbnQgbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg aW50IF9fbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9u ZyBpbnQgbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxv bmcgaW50IF9fbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBs b25nIGRvdWJsZSBmZGltbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mZGltbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv dWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWF4bCAobG9uZyBkb3Vi bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19m bWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVy biBsb25nIGRvdWJsZSBmbWlubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRo cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWlubCAobG9uZyBkb3VibGUgX194LCBsb25n IGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWwgKGxvbmcg ZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwoKCmV4dGVybiBpbnQgX19zaWduYml0bCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkK ICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBm bWFsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KSB0 aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1hbCAobG9uZyBkb3VibGUgX194LCBsb25n IGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgdGhyb3cgKCk7CiMgMTAwICIvdXNyL2luY2x1 ZGUvbWF0aC5oIiAyIDMKIyAxMTMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0ZXJuIGludCBz aWduZ2FtOwojIDE1NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwplbnVtCiAgewogICAgRlBfTkFO LAoKICAgIEZQX0lORklOSVRFLAoKICAgIEZQX1pFUk8sCgogICAgRlBfU1VCTk9STUFMLAoKICAg IEZQX05PUk1BTAoKICB9OwojIDI0MCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwp0eXBlZGVmIGVu dW0KewogIF9JRUVFXyA9IC0xLAogIF9TVklEXywKICBfWE9QRU5fLAogIF9QT1NJWF8sCiAgX0lT T0NfCn0gX0xJQl9WRVJTSU9OX1RZUEU7CgoKCgpleHRlcm4gX0xJQl9WRVJTSU9OX1RZUEUgX0xJ Ql9WRVJTSU9OOwojIDI2MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpzdHJ1Y3QgX19leGNlcHRp b24KCgoKICB7CiAgICBpbnQgdHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3VibGUgYXJnMTsK ICAgIGRvdWJsZSBhcmcyOwogICAgZG91YmxlIHJldHZhbDsKICB9OwoKCmV4dGVybiBpbnQgbWF0 aGVyciAoc3RydWN0IF9fZXhjZXB0aW9uICpfX2V4YykgdGhyb3cgKCk7CiMgNDExICIvdXNyL2lu Y2x1ZGUvbWF0aC5oIiAzCn0KIyA1MiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2Mr Ky8zLjIvY21hdGgiIDIgMwojIDc5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysr LzMuMi9jbWF0aCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4g X1RwIF9fY21hdGhfcG93ZXIoX1RwLCB1bnNpZ25lZCBpbnQpOwoKICBpbmxpbmUgZG91YmxlCiAg YWJzKGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnMoX194KTsgfQoKICBpbmxp bmUgZmxvYXQKICBhYnMoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gp OyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGFicyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1 cm4gX19idWlsdGluX2ZhYnNsKF9feCk7IH0KCgogIGlubGluZSBmbG9hdAogIGFjb3MoZmxvYXQg X194KSB7IHJldHVybiA6OmFjb3NmKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YWNvczsKCgogIGlu bGluZSBsb25nIGRvdWJsZQogIGFjb3MobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmFjb3Ns KF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YXNpbjsKCgogIGlubGluZSBmbG9hdAogIGFzaW4oZmxv YXQgX194KSB7IHJldHVybiA6OmFzaW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3Vi bGUKICBhc2luKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphc2lubChfX3gpOyB9CgoKCgoK ICB1c2luZyA6OmF0YW47CgoKICBpbmxpbmUgZmxvYXQKICBhdGFuKGZsb2F0IF9feCkgeyByZXR1 cm4gOjphdGFuZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbihsb25n IGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbmwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjphdGFu MjsKCgogIGlubGluZSBmbG9hdAogIGF0YW4yKGZsb2F0IF9feSwgZmxvYXQgX194KSB7IHJldHVy biA6OmF0YW4yZihfX3ksIF9feCk7IH0KCgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXRh bjIobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbjJsKF9f eSwgX194KTsgfQoKCgoKCgogIHVzaW5nIDo6Y2VpbDsKCgogIGlubGluZSBmbG9hdAogIGNlaWwo ZmxvYXQgX194KSB7IHJldHVybiA6OmNlaWxmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBk b3VibGUKICBjZWlsKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpjZWlsbChfX3gpOyB9CgoK CgoKICB1c2luZyA6OmNvczsKCiAgaW5saW5lIGZsb2F0CiAgY29zKGZsb2F0IF9feCkKICB7IHJl dHVybiBfX2J1aWx0aW5fY29zZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGNvcyhs b25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2Nvc2woX194KTsgfQoKICB1c2lu ZyA6OmNvc2g7CgoKICBpbmxpbmUgZmxvYXQKICBjb3NoKGZsb2F0IF9feCkgeyByZXR1cm4gOjpj b3NoZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY29zaChsb25nIGRvdWJs ZSBfX3gpIHsgcmV0dXJuIDo6Y29zaGwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpleHA7CgoKICBp bmxpbmUgZmxvYXQKICBleHAoZmxvYXQgX194KSB7IHJldHVybiA6OmV4cGYoX194KTsgfQoKCgoK CgogIGlubGluZSBsb25nIGRvdWJsZQogIGV4cChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6 ZXhwbChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmZhYnM7CgogIGlubGluZSBmbG9hdAogIGZhYnMo ZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CgogIGlubGluZSBs b25nIGRvdWJsZQogIGZhYnMobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9m YWJzbChfX3gpOyB9CgogIHVzaW5nIDo6Zmxvb3I7CgoKICBpbmxpbmUgZmxvYXQKICBmbG9vcihm bG9hdCBfX3gpIHsgcmV0dXJuIDo6Zmxvb3JmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBk b3VibGUKICBmbG9vcihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Zmxvb3JsKF9feCk7IH0K CgoKCgogIHVzaW5nIDo6Zm1vZDsKCgogIGlubGluZSBmbG9hdAogIGZtb2QoZmxvYXQgX194LCBm bG9hdCBfX3kpIHsgcmV0dXJuIDo6Zm1vZGYoX194LCBfX3kpOyB9CgoKCgoKCgogIGlubGluZSBs b25nIGRvdWJsZQogIGZtb2QobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0 dXJuIDo6Zm1vZGwoX194LCBfX3kpOyB9CgoKCgoKCiAgdXNpbmcgOjpmcmV4cDsKCgogIGlubGlu ZSBmbG9hdAogIGZyZXhwKGZsb2F0IF9feCwgaW50KiBfX2V4cCkgeyByZXR1cm4gOjpmcmV4cGYo X194LCBfX2V4cCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmcmV4cChsb25nIGRv dWJsZSBfX3gsIGludCogX19leHApIHsgcmV0dXJuIDo6ZnJleHBsKF9feCwgX19leHApOyB9CgoK CgoKCiAgdXNpbmcgOjpsZGV4cDsKCgogIGlubGluZSBmbG9hdAogIGxkZXhwKGZsb2F0IF9feCwg aW50IF9fZXhwKSB7IHJldHVybiA6OmxkZXhwZihfX3gsIF9fZXhwKTsgfQoKCgoKCgoKICBpbmxp bmUgbG9uZyBkb3VibGUKICBsZGV4cChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cCkgeyByZXR1 cm4gOjpsZGV4cGwoX194LCBfX2V4cCk7IH0KCgoKCgoKICB1c2luZyA6OmxvZzsKCgogIGlubGlu ZSBmbG9hdAogIGxvZyhmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nZihfX3gpOyB9CgoKCgoKCiAg aW5saW5lIGxvbmcgZG91YmxlCiAgbG9nKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpsb2ds KF9feCk7IH0KCgoKCgogIHVzaW5nIDo6bG9nMTA7CgoKICBpbmxpbmUgZmxvYXQKICBsb2cxMChm bG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nMTBmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBk b3VibGUKICBsb2cxMChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6bG9nMTBsKF9feCk7IH0K CgoKCgogIHVzaW5nIDo6bW9kZjsKCgogIGlubGluZSBmbG9hdAogIG1vZGYoZmxvYXQgX194LCBm bG9hdCogX19pcHRyKSB7IHJldHVybiA6Om1vZGZmKF9feCwgX19pcHRyKTsgfQojIDM3NSAiL3Vz ci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMKICBpbmxpbmUgbG9u ZyBkb3VibGUKICBtb2RmKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUqIF9faXB0cikgeyBy ZXR1cm4gOjptb2RmbChfX3gsIF9faXB0cik7IH0KIyAzODggIi91c3IvbG9jYWwvdm9sL2djYy8z LjIvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg aW5saW5lIF9UcAogICAgX19wb3dfaGVscGVyKF9UcCBfX3gsIGludCBfX24pCiAgICB7CiAgICAg IHJldHVybiBfX24gPCAwCiAgICAgICAgPyBfVHAoMSkvX19jbWF0aF9wb3dlcihfX3gsIC1fX24p CiAgICAgICAgOiBfX2NtYXRoX3Bvd2VyKF9feCwgX19uKTsKICAgIH0KCiAgdXNpbmcgOjpwb3c7 CgoKICBpbmxpbmUgZmxvYXQKICBwb3coZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6 cG93ZihfX3gsIF9feSk7IH0KCgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgcG93KGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7IHJldHVybiA6OnBvd2woX194LCBfX3kpOyB9 CgoKCgoKCiAgaW5saW5lIGRvdWJsZQogIHBvdyhkb3VibGUgX194LCBpbnQgX19pKQogIHsgcmV0 dXJuIF9fcG93X2hlbHBlcihfX3gsIF9faSk7IH0KCiAgaW5saW5lIGZsb2F0CiAgcG93KGZsb2F0 IF9feCwgaW50IF9fbikKICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX24pOyB9CgogIGlu bGluZSBsb25nIGRvdWJsZQogIHBvdyhsb25nIGRvdWJsZSBfX3gsIGludCBfX24pCiAgeyByZXR1 cm4gX19wb3dfaGVscGVyKF9feCwgX19uKTsgfQoKICB1c2luZyA6OnNpbjsKCiAgaW5saW5lIGZs b2F0CiAgc2luKGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc2luZihfX3gpOyB9Cgog IGlubGluZSBsb25nIGRvdWJsZQogIHNpbihsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19i dWlsdGluX3NpbmwoX194KTsgfQoKICB1c2luZyA6OnNpbmg7CgoKICBpbmxpbmUgZmxvYXQKICBz aW5oKGZsb2F0IF9feCkgeyByZXR1cm4gOjpzaW5oZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxv bmcgZG91YmxlCiAgc2luaChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6c2luaGwoX194KTsg fQoKCgoKCiAgdXNpbmcgOjpzcXJ0OwoKICBpbmxpbmUgZmxvYXQKICBzcXJ0KGZsb2F0IF9feCkK ICB7IHJldHVybiBfX2J1aWx0aW5fc3FydGYoX194KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUK ICBzcXJ0KGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc3FydGwoX194KTsg fQoKICB1c2luZyA6OnRhbjsKCgogIGlubGluZSBmbG9hdAogIHRhbihmbG9hdCBfX3gpIHsgcmV0 dXJuIDo6dGFuZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgdGFuKGxvbmcg ZG91YmxlIF9feCkgeyByZXR1cm4gOjp0YW5sKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6dGFuaDsK CgogIGlubGluZSBmbG9hdAogIHRhbmgoZmxvYXQgX194KSB7IHJldHVybiA6OnRhbmhmKF9feCk7 IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICB0YW5oKGxvbmcgZG91YmxlIF9feCkgeyBy ZXR1cm4gOjp0YW5obChfX3gpOyB9CgoKCgp9CgoKCgoKCm5hbWVzcGFjZSBfX2dudV9jeHgKewog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2ZwY2xhc3NpZnko X1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBj bGFzc2lmeWYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNs YXNzaWZ5IChfX2YpIDogX19mcGNsYXNzaWZ5bCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNmaW5pdGUoX1RwIF9fZikgeyByZXR1cm4g KHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZmluaXRlZiAoX19mKSA6IHNpemVv ZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2Zpbml0ZSAoX19mKSA6IF9fZmluaXRlbCAo X19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVf aXNpbmYoX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/ IF9faXNpbmZmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9faXNp bmYgKF9fZikgOiBfX2lzaW5mbCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog ICAgaW50CiAgICBfX2NhcHR1cmVfaXNuYW4oX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19m KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9faXNuYW5mIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNp emVvZiAoZG91YmxlKSA/IF9faXNuYW4gKF9fZikgOiBfX2lzbmFubCAoX19mKSk7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNub3JtYWwoX1RwIF9f ZikgeyByZXR1cm4gKChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3Np ZnlmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lm eSAoX19mKSA6IF9fZnBjbGFzc2lmeWwgKF9fZikpID09IEZQX05PUk1BTCk7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfc2lnbmJpdChfVHAgX19mKSB7 IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19zaWduYml0ZiAoX19m KSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX3NpZ25iaXQgKF9fZikgOiBf X3NpZ25iaXRsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAg IF9fY2FwdHVyZV9pc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gKF9f ZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX2YxKSBfX3ggPSAoX19mMSk7IF9fdHlwZW9mX18o X19mMikgX195ID0gKF9fZjIpOyAhKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX3gpIF9f dSA9IChfX3gpOyBfX3R5cGVvZl9fKF9feSkgX192ID0gKF9feSk7IChzaXplb2YgKF9fdSkgPT0g c2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3UpIDogc2l6ZW9mIChfX3UpID09IHNp emVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX191KSA6IF9fZnBjbGFzc2lmeWwgKF9fdSkp ID09IEZQX05BTiB8fCAoc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNz aWZ5ZiAoX192KSA6IHNpemVvZiAoX192KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3Np ZnkgKF9fdikgOiBfX2ZwY2xhc3NpZnlsIChfX3YpKSA9PSBGUF9OQU47IH0pKSAmJiBfX3ggPiBf X3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0 dXJlX2lzZ3JlYXRlcmVxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAgICB7IHJldHVybiAoX19l eHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9fZjEpIF9feCA9IChfX2YxKTsgX190eXBlb2ZfXyhf X2YyKSBfX3kgPSAoX19mMik7ICEoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9feCkgX191 ID0gKF9feCk7IF9fdHlwZW9mX18oX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAoX191KSA9PSBz aXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6 ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkg PT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3Np ZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lm eSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYmIF9feCA+PSBf X3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0 dXJlX2lzbGVzcyhfVHAgX19mMSwgX1RwIF9fZjIpIHsgcmV0dXJuIChfX2V4dGVuc2lvbl9fICh7 IF9fdHlwZW9mX18oX19mMSkgX194ID0gKF9fZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9feSA9IChf X2YyKTsgIShfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX194KSBfX3UgPSAoX194KTsgX190 eXBlb2ZfXyhfX3kpIF9fdiA9IChfX3kpOyAoc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQp ID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkg PyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwg KHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBz aXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19m cGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSkgJiYgX194IDwgX195OyB9KSk7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc2xlc3NlcXVh bChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyByZXR1cm4gKF9fZXh0ZW5zaW9uX18gKHsgX190 eXBlb2ZfXyhfX2YxKSBfX3ggPSAoX19mMSk7IF9fdHlwZW9mX18oX19mMikgX195ID0gKF9fZjIp OyAhKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX3gpIF9fdSA9IChfX3gpOyBfX3R5cGVv Zl9fKF9feSkgX192ID0gKF9feSk7IChzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChmbG9hdCkgPyBf X2ZwY2xhc3NpZnlmIChfX3UpIDogc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZG91YmxlKSA/IF9f ZnBjbGFzc2lmeSAoX191KSA6IF9fZnBjbGFzc2lmeWwgKF9fdSkpID09IEZQX05BTiB8fCAoc2l6 ZW9mIChfX3YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX192KSA6IHNpemVv ZiAoX192KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdikgOiBfX2ZwY2xh c3NpZnlsIChfX3YpKSA9PSBGUF9OQU47IH0pKSAmJiBfX3ggPD0gX195OyB9KSk7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc2xlc3NncmVhdGVy KF9UcCBfX2YxLCBfVHAgX19mMikKICAgICB7IHJldHVybiAoX19leHRlbnNpb25fXyAoeyBfX3R5 cGVvZl9fKF9fZjEpIF9feCA9IChfX2YxKTsgX190eXBlb2ZfXyhfX2YyKSBfX3kgPSAoX19mMik7 ICEoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9feCkgX191ID0gKF9feCk7IF9fdHlwZW9m X18oX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9f ZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19m cGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXpl b2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9m IChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFz c2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYmIChfX3ggPCBfX3kgfHwgX195IDwgX194KTsg fSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVf aXN1bm9yZGVyZWQoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJuIChfX2V4dGVuc2lv bl9fICh7IF9fdHlwZW9mX18oX19mMSkgX191ID0gKF9fZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9f diA9IChfX2YyKTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lm eWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5 IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikg PT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09 IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9f dikpID09IEZQX05BTjsgfSkpOyB9Cn0KIyA1ODAgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5j bHVkZS9jKysvMy4yL2NtYXRoIiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4KICAgIGludAogICAgZnBjbGFzc2lmeShfVHAgX19mKSB7IHJldHVybiBfX2Nh cHR1cmVfZnBjbGFzc2lmeShfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlu dAogICAgaXNmaW5pdGUoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzZmluaXRlKF9fZik7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2luZihfVHAgX19mKSB7 IHJldHVybiBfX2NhcHR1cmVfaXNpbmYoX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CiAgICBpbnQKICAgIGlzbmFuKF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc25hbihfX2Yp OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNub3JtYWwoX1RwIF9f ZikgeyByZXR1cm4gX19jYXB0dXJlX2lzbm9ybWFsKF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgogICAgaW50CiAgICBzaWduYml0KF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9z aWduYml0KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2dy ZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJldHVybiBfX2NhcHR1cmVfaXNncmVhdGVyKF9f ZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNncmVh dGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJlX2lzZ3Jl YXRlcmVxdWFsKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlu dAogICAgaXNsZXNzKF9UcCBfX2YxLCBfVHAgX19mMikgeyByZXR1cm4gX19jYXB0dXJlX2lzbGVz cyhfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlz bGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAgIHsgcmV0dXJuIF9fY2FwdHVyZV9pc2xl c3NlcXVhbChfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQK ICAgIGlzbGVzc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gX19jYXB0 dXJlX2lzbGVzc2dyZWF0ZXIoX19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PgogICAgaW50CiAgICBpc3Vub3JkZXJlZChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVy biBfX2NhcHR1cmVfaXN1bm9yZGVyZWQoX19mMSwgX19mMik7IH0KfQoKbmFtZXNwYWNlIHN0ZAp7 CiAgdXNpbmcgX19nbnVfY3h4OjpmcGNsYXNzaWZ5OwogIHVzaW5nIF9fZ251X2N4eDo6aXNmaW5p dGU7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2luZjsKICB1c2luZyBfX2dudV9jeHg6OmlzbmFuOwog IHVzaW5nIF9fZ251X2N4eDo6aXNub3JtYWw7CiAgdXNpbmcgX19nbnVfY3h4OjpzaWduYml0Owog IHVzaW5nIF9fZ251X2N4eDo6aXNncmVhdGVyOwogIHVzaW5nIF9fZ251X2N4eDo6aXNncmVhdGVy ZXF1YWw7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xlc3M7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xl c3NlcXVhbDsKICB1c2luZyBfX2dudV9jeHg6OmlzbGVzc2dyZWF0ZXI7CiAgdXNpbmcgX19nbnVf Y3h4Ojppc3Vub3JkZXJlZDsKfQoKCgoKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1 ZGUvYysrLzMuMi9iaXRzL2NtYXRoLnRjYyIgMSAzCiMgMzUgIi91c3IvbG9jYWwvdm9sL2djYy8z LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvY21hdGgudGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIF9UcAogICAgX19jbWF0aF9wb3dlcihfVHAgX194LCB1 bnNpZ25lZCBpbnQgX19uKQogICAgewogICAgICBfVHAgX195ID0gX19uICUgMiA/IF9feCA6IDE7 CgogICAgICB3aGlsZSAoX19uID4+PSAxKQogICAgICAgIHsKICAgICAgICAgIF9feCA9IF9feCAq IF9feDsKICAgICAgICAgIGlmIChfX24gJSAyKQogICAgICAgICAgICBfX3kgPSBfX3kgKiBfX3g7 CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9feTsKICAgIH0KfQojIDY1NSAiL3Vzci9sb2NhbC92 b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDIgMwojIDQyICIvdXNyL2xvY2FsL3Zv bC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCiMg MSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAxIDMKIyA0 NyAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCgojIDEg Ii91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251 L2JpdHMvY3B1X2xpbWl0cy5oIiAxIDMKIyA0OSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNs dWRlL2MrKy8zLjIvbGltaXRzIiAyIDMKIyA4ODcgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5j bHVkZS9jKysvMy4yL2xpbWl0cyIgMwpuYW1lc3BhY2Ugc3RkCnsKICBlbnVtIGZsb2F0X3JvdW5k X3N0eWxlCiAgewogICAgcm91bmRfaW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgcm91bmRfdG93YXJk X3plcm8gPSAwLAogICAgcm91bmRfdG9fbmVhcmVzdCA9IDEsCiAgICByb3VuZF90b3dhcmRfaW5m aW5pdHkgPSAyLAogICAgcm91bmRfdG93YXJkX25lZ19pbmZpbml0eSA9IDMKICB9OwoKICBlbnVt IGZsb2F0X2Rlbm9ybV9zdHlsZQogIHsKICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0gLTEsCiAg ICBkZW5vcm1fYWJzZW50ID0gMCwKICAgIGRlbm9ybV9wcmVzZW50ID0gMQogIH07CgoKCgogIHN0 cnVjdCBfX251bWVyaWNfbGltaXRzX2Jhc2UKICB7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z cGVjaWFsaXplZCA9IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMDsKICAg IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf c2lnbmVkID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7 CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0 IGludCByYWRpeCA9IDA7CgogICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwog ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICBzdGF0aWMgY29uc3Qg aW50IG1heF9leHBvbmVudCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEw ID0gMDsKCiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVu b3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVj NTU5ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gZmFsc2U7CiAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICBzdGF0aWMgY29uc3Qg Ym9vbCB0cmFwcyA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3Jl ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUg PSByb3VuZF90b3dhcmRfemVybzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBz dHJ1Y3QgbnVtZXJpY19saW1pdHMgOiBwdWJsaWMgX19udW1lcmljX2xpbWl0c19iYXNlCiAgICB7 CiAgICAgIHN0YXRpYyBfVHAgbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+ KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgbWF4KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2Fz dDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZXBzaWxvbigpIHRocm93KCkgeyByZXR1cm4g c3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHJvdW5kX2Vycm9yKCkgdGhy b3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgaW5m aW5pdHkoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3Rh dGljIF9UcCBxdWlldF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7 IH0KICAgICAgc3RhdGljIF9UcCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7IHJldHVybiBzdGF0 aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZGVub3JtX21pbigpIHRocm93KCkg eyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAg ICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Ym9vbD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGJvb2wgbWluKCkgdGhyb3co KQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGJvb2wgbWF4KCkgdGhyb3co KQogICAgICB7IHJldHVybiB0cnVlOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9 IDE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50 ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAg ICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBib29sIGVwc2lsb24o KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIHJvdW5k X2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGNv bnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv bmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAg ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf cXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdf TmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rl bm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1f bG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGJvb2wgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIHF1aWV0X05hTigpIHRocm93KCkK ICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgc2lnbmFsaW5nX05hTigp IHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgZGVub3Jt X21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3Vu ZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgoK CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWUKICAgICAgICAgICAgICAgfHwg dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAg ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rv d2FyZF96ZXJvOwogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1p dHM8Y2hhcj4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0 cnVlOwoKICAgICAgc3RhdGljIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoY2hh cikoLTEyNyAtIDEpOyB9CiAgICAgIHN0YXRpYyBjaGFyIG1heCgpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gKGNoYXIpMTI3OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA3OwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0g dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0 aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGNoYXIgZXBzaWxvbigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIHJvdW5kX2Vycm9y KCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQx MCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3Rh dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0 X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9 IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0g PSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3Mg PSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjaGFyIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJl dHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAg ICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIgc2lnbmFsaW5nX05hTigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIGRlbm9ybV9t aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9CgogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVs byA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u c3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAg IH07CiMgMTA3MSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvbGltaXRz IiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHNpZ25lZCBjaGFyPgog ICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAg ICBzdGF0aWMgc2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoLTEyNyAt IDEpOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIDEyNzsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA3OwogICAgICBzdGF0 aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMjsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2ln bmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0 IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBlcHNpbG9uKCkgdGhyb3co KQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciByb3VuZF9lcnJv cigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBt aW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0g MDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg Y29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFO ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRl bm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh bHNlOwoKICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7 IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHNpZ25l ZCBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2ln bmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBzaWduYWxpbmdfTmFOKCkg dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAg ICAgc3RhdGljIHNpZ25lZCBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0 cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55 bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxl IHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDExMjggIi91c3IvbG9j YWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAg IHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBjaGFyPgogICAgewogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQg Y2hhciBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2ln bmVkIGNoYXIgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoMTI3ICogMiArIDEpOyB9Cgog ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDg7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg ZGlnaXRzMTAgPSAyOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9 IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p dHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJz ZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg ICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQg Y2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln bmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNpZ25hbGluZ19OYU4o KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9 CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CgogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91 bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7Cgog ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91 bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAg dGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHdjaGFyX3Q+CiAgICB7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB3 Y2hhcl90IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKHdjaGFyX3QpKC0yMTQ3NDgzNjQ3 TCAtIDEpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1 cm4gKHdjaGFyX3QpMjE0NzQ4MzY0N0w7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz ID0gMzE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p bnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwog ICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHdjaGFyX3QgZXBz aWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBy b3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNv bnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv bmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAg ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf cXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdf TmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rl bm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1f bG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHdjaGFyX3QgaW5maW5pdHkoKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBxdWlldF9OYU4o KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMgd2NoYXJf dCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KICAg ICAgc3RhdGljIHdjaGFyX3QgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gd2No YXJfdCgpOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9 IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90 b3dhcmRfemVybzsKICAgIH07CiMgMTI0MSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRl L2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRz PHNob3J0PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRy dWU7CgogICAgICBzdGF0aWMgc2hvcnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoLTMy NzY3IC0gMSk7IH0KICAgICAgc3RhdGljIHNob3J0IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1 cm4gMzI3Njc7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTU7CiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z aWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29u c3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHNob3J0IHJvdW5kX2Vycm9yKCkgdGhyb3co KQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu dCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBz dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg bWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5 ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAg c3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2Vu dDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAg ICBzdGF0aWMgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHNob3J0KCk7 IH0KICAgICAgc3RhdGljIHNob3J0IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4g c2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQgZGVub3JtX21pbigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRy dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0 aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnlu ZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg cm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTI5OCAiL3Vzci9sb2Nh bC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAg c3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0PgogICAgewogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQg c2hvcnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNp Z25lZCBzaG9ydCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgzMjc2NyAqIDIgKyAxKTsg fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAxNjsKICAgICAgc3RhdGljIGNvbnN0 IGludCBkaWdpdHMxMCA9IDQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJh ZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHJvdW5kX2Vycm9y KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1p bl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAw OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4g PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVu b3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFs c2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICBzdGF0aWMg dW5zaWduZWQgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf Y2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHNp Z25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk IHNob3J0PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZGVub3JtX21pbigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9Cgog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k dWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwog ICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8aW50Pgog ICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAg ICBzdGF0aWMgaW50IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKGludCkoLTIxNDc0ODM2 NDdMIC0gMSk7IH0KICAgICAgc3RhdGljIGludCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IChpbnQpMjE0NzQ4MzY0N0w7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzE7 CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2Vy ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBz dGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGludCBlcHNpbG9uKCkgdGhy b3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBpbnQgcm91bmRfZXJyb3IoKSB0 aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4 cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0 IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5m aW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1f YWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsK CiAgICAgIHN0YXRpYyBpbnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRp Y19jYXN0PGludD4oMCk7IH0KICAgICAgc3RhdGljIGludCBxdWlldF9OYU4oKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAgc3RhdGljIGludCBzaWdu YWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9 CiAgICAgIHN0YXRpYyBpbnQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3Rh dGljX2Nhc3Q8aW50PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0g dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9v bCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9 IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUg PSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTQxMCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMu Mi9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVy aWNfbGltaXRzPHVuc2lnbmVkIGludD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf c3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtaW4oKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4 KCkgdGhyb3coKQogICAgICB7IHJldHVybiAodW5zaWduZWQpKDIxNDc0ODM2NDdMICogMlUgKyAx KTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMjsKICAgICAgc3RhdGljIGNv bnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9 IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50 IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBlcHNpbG9uKCkgdGhyb3coKQog ICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgcm91bmRfZXJyb3Io KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7 CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNv bnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf aW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9 IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5v cm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxz ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2ln bmVkIGludCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu c2lnbmVkIGludD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBzaWduYWxpbmdfTmFO KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9 CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRl ZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAg ICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRf c3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVt cGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmc+CiAgICB7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBsb25nIG1p bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKC0yMTQ3NDgzNjQ3TCAtIDEpOyB9CiAgICAgIHN0 YXRpYyBsb25nIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0N0w7IH0KCiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg ZGlnaXRzMTAgPSA5OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g MjsKICAgICAgc3RhdGljIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg fQogICAgICBzdGF0aWMgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4g MDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0 aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt YXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0g MDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGxvbmcgaW5m aW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAg ICAgIHN0YXRpYyBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxv bmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4o MCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAg c3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJk X3plcm87CiAgICB9OwojIDE1MjIgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysv My4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNp Z25lZCBsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9 IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4KCkgdGhyb3coKQogICAg ICB7IHJldHVybiAoMjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3Qg aW50IGRpZ2l0cyA9IDMyOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFj dCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMg dW5zaWduZWQgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAg IHN0YXRpYyB1bnNpZ25lZCBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVy biAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50 IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAg PSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZs b2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWdu ZWQgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z aWduZWQgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgcXVpZXRfTmFOKCkg dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQog ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7 IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5z aWduZWQgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz dDx1bnNpZ25lZCBsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5 ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y ZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5 bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3Ry dWN0IG51bWVyaWNfbGltaXRzPGxvbmcgbG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcgbG9uZyBtaW4oKSB0 aHJvdygpCiAgICAgIHsgcmV0dXJuICgtOTIyMzM3MjAzNjg1NDc3NTgwN0xMIC0gMSk7IH0KICAg ICAgc3RhdGljIGxvbmcgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDkyMjMzNzIw MzY4NTQ3NzU4MDdMTDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2MzsKICAg ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE4OwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0g dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0 aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcgbG9uZyBlcHNpbG9uKCkg dGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgcm91bmRf ZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQx MCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3Rh dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0 X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9 IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0g PSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3Mg PSBmYWxzZTsKCiAgICAgIHN0YXRpYyBsb25nIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcg bG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcg bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3co KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRp YyBsb25nIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh c3Q8bG9uZyBsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0g dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9v bCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9 IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUg PSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTYzNCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMu Mi9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVy aWNfbGltaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9u ZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVk IGxvbmcgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICg5MjIzMzcyMDM2ODU0Nzc1 ODA3TEwgKiAyVUxMICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjQ7 CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxOTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVn ZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBs b25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVu c2lnbmVkIGxvbmcgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf ZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsK CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9k ZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxv bmcgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z aWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHF1 aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u ZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHNpZ25hbGluZ19O YU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9u Zz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBkZW5vcm1fbWluKCkgdGhy b3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9 CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf bW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRp YyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJv OwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Zmxv YXQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsK CiAgICAgIHN0YXRpYyBmbG9hdCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTc1NDk0 MzVlLTM4RjsgfQogICAgICBzdGF0aWMgZmxvYXQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVy biAzLjQwMjgyMzQ3ZSszOEY7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMjQ7 CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA2OwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2Vy ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgZmxvYXQgZXBzaWxvbigp IHRocm93KCkKICAgICAgeyByZXR1cm4gMS4xOTIwOTI5MGUtMDdGOyB9CiAgICAgIHN0YXRpYyBm bG9hdCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4wRjsgfQoKICAgICAg c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTI1OwogICAgICBzdGF0aWMgY29uc3Qg aW50IG1pbl9leHBvbmVudDEwID0gLTM3OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv bmVudCA9IDEyODsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDM4OwoK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rl bm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgZmxvYXQgaW5maW5p dHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEY7IH0KICAgICAgc3RhdGljIGZsb2F0IHF1 aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQogICAgICBzdGF0aWMgZmxv YXQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQogICAgICBz dGF0aWMgZmxvYXQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQoK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19t b2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy bzsKICAgIH07CiMgMTc2NSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIv bGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGRvdWJsZT4K ICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAg ICAgc3RhdGljIGRvdWJsZSBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDIuMjI1MDczODU4 NTA3MjAxNGUtMzA4OyB9CiAgICAgIHN0YXRpYyBkb3VibGUgbWF4KCkgdGhyb3coKQogICAgICB7 IHJldHVybiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwODsgfQoKICAgICAgc3RhdGljIGNvbnN0IGlu dCBkaWdpdHMgPSA1MzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE1OwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0 ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMg ZG91YmxlIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDIuMjIwNDQ2MDQ5MjUwMzEz MWUtMTY7IH0KICAgICAgc3RhdGljIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAg eyByZXR1cm4gMS4wOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0x MDIxOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTMwNzsKICAgICAg c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxMDI0OwogICAgICBzdGF0aWMgY29uc3Qg aW50IG1heF9leHBvbmVudDEwID0gMzA4OwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2lu ZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsK ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0KICAgICAg ICAgICAgICBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3Jt X2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBkb3VibGUgaW5maW5pdHkoKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIDAuMDsgfQogICAgICBzdGF0aWMgZG91YmxlIHF1aWV0X05hTigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUgc2lnbmFsaW5nX05h TigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUgZGVu b3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CgogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91 bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9y b3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9CiAgICAgICAgICAgICAgcm91bmRfdG93YXJkX3plcm87 CiAgICB9OwojIDE4NDQgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2xp bWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nIGRvdWJs ZT4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoK ICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMy4z NjIxMDMxNDMxMTIwOTM1MDYyNmUtNDkzMkw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1h eCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4xODk3MzE0OTUzNTcyMzE3NjUwMmUrNDkzMkw7 IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjQ7CiAgICAgIHN0YXRpYyBjb25z dCBpbnQgZGlnaXRzMTAgPSAxODsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0g dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50 IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGVwc2lsb24oKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIDEuMDg0MjAyMTcyNDg1NTA0NDM0MDFlLTE5TDsgfQogICAgICBzdGF0aWMg bG9uZyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMEw7IH0K CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTE2MzgxOwogICAgICBzdGF0 aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTQ5MzE7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWF4X2V4cG9uZW50ID0gMTYzODQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u ZW50MTAgPSA0OTMyOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPQogICAgICAgICAgICAgICAgZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9CiAg ICAgICAgICAgICAgICBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf ZGVub3JtX2xvc3MgPQogICAgICAgICAgICAgICAgZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBk b3VibGUgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0KICAgICAgc3Rh dGljIGxvbmcgZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsg fQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg eyByZXR1cm4gMC4wTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZGVub3JtX21pbigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf aWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRp YyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnlu ZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg cm91bmRfc3R5bGUgPQogICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxOTI0ICIv dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKfQojIDQ0ICIv dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMu dGNjIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvdHlw ZWluZm8iIDEgMwojIDQwICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi90 eXBlaW5mbyIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIF9fY3h4YWJpdjEKewogIGNsYXNz IF9fY2xhc3NfdHlwZV9pbmZvOwp9CiMgNTUgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVk ZS9jKysvMy4yL3R5cGVpbmZvIiAzCm5hbWVzcGFjZSBzdGQKewoKCgogIGNsYXNzIHR5cGVfaW5m bwogIHsKICBwdWJsaWM6CgoKCgogICAgdmlydHVhbCB+dHlwZV9pbmZvKCk7CgogIHByaXZhdGU6 CgogICAgdHlwZV9pbmZvJiBvcGVyYXRvcj0oY29uc3QgdHlwZV9pbmZvJik7CiAgICB0eXBlX2lu Zm8oY29uc3QgdHlwZV9pbmZvJik7CgogIHByb3RlY3RlZDoKICAgIGNvbnN0IGNoYXIgKl9fbmFt ZTsKCiAgcHJvdGVjdGVkOgogICAgZXhwbGljaXQgdHlwZV9pbmZvKGNvbnN0IGNoYXIgKl9fbik6 IF9fbmFtZShfX24pIHsgfQoKICBwdWJsaWM6CgoKCiAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29u c3QKICAgIHsgcmV0dXJuIF9fbmFtZTsgfQojIDk4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2lu Y2x1ZGUvYysrLzMuMi90eXBlaW5mbyIgMwogICAgYm9vbCBiZWZvcmUoY29uc3QgdHlwZV9pbmZv JiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZSA8IF9fYXJnLl9fbmFtZTsgfQogICAg Ym9vbCBvcGVyYXRvcj09KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVy biBfX25hbWUgPT0gX19hcmcuX19uYW1lOyB9CgogICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHR5 cGVfaW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVybiAhb3BlcmF0b3I9PShfX2FyZyk7IH0K CgogIHB1YmxpYzoKCiAgICB2aXJ0dWFsIGJvb2wgX19pc19wb2ludGVyX3AoKSBjb25zdDsKCiAg ICB2aXJ0dWFsIGJvb2wgX19pc19mdW5jdGlvbl9wKCkgY29uc3Q7CgoKCgoKCgogICAgdmlydHVh bCBib29sIF9fZG9fY2F0Y2goY29uc3QgdHlwZV9pbmZvICpfX3Rocl90eXBlLCB2b2lkICoqX190 aHJfb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgX19vdXRlcikgY29u c3Q7CgoKICAgIHZpcnR1YWwgYm9vbCBfX2RvX3VwY2FzdChjb25zdCBfX2N4eGFiaXYxOjpfX2Ns YXNzX3R5cGVfaW5mbyAqX190YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqKl9fb2JqX3B0cikgY29uc3Q7CiAgfTsKCgoKICBjbGFzcyBiYWRfY2FzdCA6IHB1YmxpYyBl eGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2Nhc3QoKSB0aHJvdygpIHsgfQoKCiAgICB2 aXJ0dWFsIH5iYWRfY2FzdCgpIHRocm93KCk7CiAgfTsKCgogIGNsYXNzIGJhZF90eXBlaWQgOiBw dWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF90eXBlaWQgKCkgdGhyb3coKSB7 IH0KCgogICAgdmlydHVhbCB+YmFkX3R5cGVpZCgpIHRocm93KCk7CiAgfTsKfQoKfQojIDQ2ICIv dXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMu dGNjIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAg IGxvY2FsZQogICAgbG9jYWxlOjpjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QK ICAgIHsKICAgICAgX0ltcGwqIF9fdG1wID0gbmV3IF9JbXBsKCpfTV9pbXBsLCAxKTsKICAgICAg X190bXAtPl9NX3JlcGxhY2VfZmFjZXQoX19vdGhlci5fTV9pbXBsLCAmX0ZhY2V0OjppZCk7CiAg ICAgIHJldHVybiBsb2NhbGUoX190bXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJvb2wKICAgIGxvY2Fs ZTo6b3BlcmF0b3IoKShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JiBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgc3RkOjpj b2xsYXRlPF9DaGFyVD4gX19jb2xsYXRlX3R5cGU7CiAgICAgIGNvbnN0IF9fY29sbGF0ZV90eXBl JiBfX2NvbGxhdGUgPSB1c2VfZmFjZXQ8X19jb2xsYXRlX3R5cGU+KCp0aGlzKTsKICAgICAgcmV0 dXJuIChfX2NvbGxhdGUuY29tcGFyZShfX3MxLmRhdGEoKSwgX19zMS5kYXRhKCkgKyBfX3MxLmxl bmd0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fczIuZGF0YSgpLCBfX3My LmRhdGEoKSArIF9fczIubGVuZ3RoKCkpIDwgMCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9GYWNldD4KICAgIGNvbnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmIF9f bG9jKQogICAgewogICAgICBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pZCgpOwogICAgICBs b2NhbGU6OmZhY2V0KiogX19mYWNldHMgPSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7CiAgICAg IGlmICghKF9faSA8IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0c19zaXplICYmIF9fZmFjZXRzW19f aV0pKQogICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsKICAgICAgcmV0dXJuIHN0YXRpY19jYXN0 PGNvbnN0IF9GYWNldCY+KCpfX2ZhY2V0c1tfX2ldKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZhY2V0PgogICAgYm9vbAogICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpIHRo cm93KCkKICAgIHsKICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6aWQuX01faWQoKTsKICAgICAg bG9jYWxlOjpmYWNldCoqIF9fZmFjZXRzID0gX19sb2MuX01faW1wbC0+X01fZmFjZXRzOwogICAg ICByZXR1cm4gKF9faSA8IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0c19zaXplICYmIF9fZmFjZXRz W19faV0pOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu SXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9l eHRyYWN0X2Zsb2F0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGlvc19iYXNlJiBfX2lv LAogICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZyYg X194dHJjKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190 cmFpdHNfdHlwZTsKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAg ICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ ID4oX19sb2MpOwogICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0 PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKICAgICAgY29uc3QgY2hhcl90eXBlIF9fcGx1 cyA9IF9fY3R5cGUud2lkZW4oJysnKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fbWludXMgPSBf X2N0eXBlLndpZGVuKCctJyk7CiAgICAgIGludCBfX3BvcyA9IDA7CiAgICAgIGNoYXJfdHlwZSBf X2MgPSAqX19iZWc7CiAgICAgIGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3BsdXMpIHx8 IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19taW51cykpCiAgICAgICAgICAmJiBfX2JlZyAhPSBf X2VuZCkKICAgICAgICB7CiAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBj aGFyKCkpOwogICAgICAgICAgKytfX3BvczsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAg ICAgICAgfQoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3plcm8gPSBfX2N0eXBlLndpZGVuKF9T X2F0b21zW19NX3plcm9dKTsKICAgICAgYm9vbCBfX2ZvdW5kX3plcm8gPSBmYWxzZTsKICAgICAg d2hpbGUgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX196ZXJvKSAmJiBfX2JlZyAhPSBfX2VuZCkK ICAgICAgICB7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgX19mb3VuZF96 ZXJvID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIGlmIChfX2ZvdW5kX3plcm8pCiAgICAgICAgewog ICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19NX3plcm9dOwogICAgICAgICAgKytfX3BvczsK ICAgICAgICB9CgoKICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX01fRSAtIF9NX3plcm8gKyAx OwogICAgICBjaGFyX3R5cGUgX193YXRvbXNbX19sZW5dOwogICAgICBfX2N0eXBlLndpZGVuKF9T X2F0b21zLCBfU19hdG9tcyArIF9fbGVuLCBfX3dhdG9tcyk7CiAgICAgIGJvb2wgX19mb3VuZF9k ZWMgPSBmYWxzZTsKICAgICAgYm9vbCBfX2ZvdW5kX3NjaSA9IGZhbHNlOwogICAgICBjb25zdCBj aGFyX3R5cGUgX19kZWMgPSBfX25wLmRlY2ltYWxfcG9pbnQoKTsKCiAgICAgIHN0cmluZyBfX2Zv dW5kX2dyb3VwaW5nOwogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBp bmcoKTsKICAgICAgYm9vbCBfX2NoZWNrX2dyb3VwaW5nID0gX19ncm91cGluZy5zaXplKCk7CiAg ICAgIGludCBfX3NlcF9wb3MgPSAwOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX25w LnRob3VzYW5kc19zZXAoKTsKCiAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7 CgogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3RyYWl0c190eXBlOjpmaW5kKF9f d2F0b21zLCAxMCwgX19jKTsKCgogICAgICAgICAgaWYgKF9fcCAmJiAhX190cmFpdHNfdHlwZTo6 ZXEoX19jLCBjaGFyX3R5cGUoKSkpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgKytfX3Bv czsKICAgICAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX19wIC0gX193YXRvbXNdOwogICAg ICAgICAgICAgICsrX19zZXBfcG9zOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAg ICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19z ZXApCiAgICAgICAgICAgICAgICAgICAmJiBfX2NoZWNrX2dyb3VwaW5nICYmICFfX2ZvdW5kX2Rl YykKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgaWYgKF9fc2VwX3BvcykKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2Fz dDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAg ICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19lcnIgfD0g aW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3RyYWl0c190eXBlOjplcShf X2MsIF9fZGVjKSAmJiAhX19mb3VuZF9kZWMpCiAgICAgICAgICAgIHsKCgoKICAgICAgICAgICAg ICBpZiAoX19mb3VuZF9ncm91cGluZy5zaXplKCkpCiAgICAgICAgICAgICAgICBfX2ZvdW5kX2dy b3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAgKytf X3BvczsKICAgICAgICAgICAgICBfX3h0cmMgKz0gJy4nOwogICAgICAgICAgICAgIF9fYyA9ICoo KytfX2JlZyk7CiAgICAgICAgICAgICAgX19mb3VuZF9kZWMgPSB0cnVlOwogICAgICAgICAgICB9 CiAgICAgICAgICBlbHNlIGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3dhdG9tc1tfTV9l XSkKICAgICAgICAgICAgICAgICAgICB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fd2F0b21z W19NX0VdKSkKICAgICAgICAgICAgICAgICAgICYmICFfX2ZvdW5kX3NjaSAmJiBfX3BvcykKICAg ICAgICAgICAgewoKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9feHRyYyAr PSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICAgICAgX19jID0gKigrK19f YmVnKTsKCgogICAgICAgICAgICAgIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fcGx1cykK ICAgICAgICAgICAgICAgICAgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX21pbnVzKSkKICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICAg ICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICAgICAg ICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX2Zv dW5kX3NjaSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKCiAgICAgICAgICAg IGJyZWFrOwogICAgICAgIH0KCgoKICAgICAgaWYgKF9fY2hlY2tfZ3JvdXBpbmcgJiYgX19mb3Vu ZF9ncm91cGluZy5zaXplKCkpCiAgICAgICAgewoKICAgICAgICAgIGlmICghX19mb3VuZF9kZWMp CiAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBf cG9zKTsKICAgICAgICAgIGlmICghX192ZXJpZnlfZ3JvdXBpbmcoX19ncm91cGluZywgX19mb3Vu ZF9ncm91cGluZykpCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg ICAgIH0KCgogICAgICBfX3h0cmMgKz0gY2hhcigpOwogICAgICBpZiAoX19iZWcgPT0gX19lbmQp CiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwog ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg X0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfaW50 KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmcmIF9feHRyYywgaW50JiBf X2Jhc2UpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3Ry YWl0c190eXBlOwogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAg ICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g PihfX2xvYyk7CiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8 bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKCgogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19i YXNlZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICBpZiAo X19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Om9jdCkKICAgICAgICBfX2Jhc2UgPSA4OwogICAgICBl bHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6aGV4KQogICAgICAgIF9fYmFzZSA9IDE2 OwogICAgICBlbHNlCiAgICAgICAgX19iYXNlID0gMTA7CgoKICAgICAgaW50IF9fcG9zID0gMDsK ICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fcGx1 cyA9IF9fY3R5cGUud2lkZW4oJysnKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fbWludXMgPSBf X2N0eXBlLndpZGVuKCctJyk7CgogICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19w bHVzKSB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fbWludXMpKQogICAgICAgICAgJiYgX19i ZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93 KF9fYywgY2hhcigpKTsKICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICBfX2MgPSAqKCsrX19i ZWcpOwogICAgICAgIH0KCgogICAgICBjb25zdCBjaGFyX3R5cGUgX196ZXJvID0gX19jdHlwZS53 aWRlbihfU19hdG9tc1tfTV96ZXJvXSk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3ggPSBfX2N0 eXBlLndpZGVuKCd4Jyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX1ggPSBfX2N0eXBlLndpZGVu KCdYJyk7CiAgICAgIGlmIChfX2Jhc2UgPT0gMTApCiAgICAgICAgewogICAgICAgICAgYm9vbCBf X2ZvdW5kX3plcm8gPSBmYWxzZTsKICAgICAgICAgIHdoaWxlIChfX3RyYWl0c190eXBlOjplcShf X2MsIF9femVybykgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIF9fZm91bmRfemVybyA9IHRydWU7CiAg ICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX2ZvdW5kX3plcm8pCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX01femVyb107CiAgICAgICAgICAgICAgKytf X3BvczsKICAgICAgICAgICAgICBpZiAoX19iYXNlZmllbGQgPT0gMCkKICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9feCkKICAg ICAgICAgICAgICAgICAgICAgICB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fWCkpCiAgICAg ICAgICAgICAgICAgICAgICAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFy KCkpOwogICAgICAgICAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICAgICAgICAg IF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgICBfX2Jhc2UgPSAxNjsKICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg ICAgICBfX2Jhc2UgPSA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICBlbHNlIGlmIChfX2Jhc2UgPT0gMTYpCiAgICAgICAgewogICAgICAgICAgaWYgKF9f dHJhaXRzX3R5cGU6OmVxKF9fYywgX196ZXJvKSAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAg ICAgewogICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfTV96ZXJvXTsKICAgICAgICAg ICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAg ICAgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9feCkgfHwgX190cmFpdHNfdHlwZTo6ZXEo X19jLCBfX1gpKQogICAgICAgICAgICAgICAgICAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywg Y2hhcigpKTsKICAgICAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICAgICAgX19j ID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0K CgoKICAgICAgc2l6ZV90IF9fbGVuOwogICAgICBpZiAoX19iYXNlID09IDE2KQogICAgICAgIF9f bGVuID0gX01fc2l6ZTsKICAgICAgZWxzZQogICAgICAgIF9fbGVuID0gX19iYXNlOwoKCiAgICAg IGNoYXJfdHlwZSBfX3dhdG9tc1tfTV9zaXplXTsKICAgICAgX19jdHlwZS53aWRlbihfU19hdG9t cywgX1NfYXRvbXMgKyBfX2xlbiwgX193YXRvbXMpOwogICAgICBzdHJpbmcgX19mb3VuZF9ncm91 cGluZzsKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAg ICAgIGJvb2wgX19jaGVja19ncm91cGluZyA9IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICBpbnQg X19zZXBfcG9zID0gMDsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0gX19ucC50aG91c2Fu ZHNfc2VwKCk7CiAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAg ICBjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fdHJhaXRzX3R5cGU6OmZpbmQoX193YXRvbXMsIF9f bGVuLCBfX2MpOwoKCiAgICAgICAgICBpZiAoX19wICYmICFfX3RyYWl0c190eXBlOjplcShfX2Ms IGNoYXJfdHlwZSgpKSkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBfX3h0cmMgKz0gX1Nf YXRvbXNbX19wIC0gX193YXRvbXNdOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAg ICAgKytfX3NlcF9wb3M7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAg ICAgfQogICAgICAgICAgZWxzZSBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3NlcCkgJiYg X19jaGVja19ncm91cGluZykKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgaWYgKF9fc2Vw X3BvcykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19mb3VuZF9ncm91cGlu ZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICAgICBfX3Nl cF9wb3MgPSAwOwogICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCgogICAgICAg ICAgICBicmVhazsKICAgICAgICB9CgoKCiAgICAgIGlmIChfX2NoZWNrX2dyb3VwaW5nICYmIF9f Zm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgIHsKCiAgICAgICAgICBfX2ZvdW5kX2dyb3Vw aW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICBpZiAoIV9fdmVy aWZ5X2dyb3VwaW5nKF9fZ3JvdXBpbmcsIF9fZm91bmRfZ3JvdXBpbmcpKQogICAgICAgICAgICBf X2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAgICAgX194dHJjICs9IGNo YXIoKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNl Ojplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFy VCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJv b2wmIF9fdikgY29uc3QKICAgIHsKCiAgICAgIGlmICghKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNl Ojpib29sYWxwaGEpKQogICAgICAgIHsKCgogICAgICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAg ICAgIGludCBfX2Jhc2U7CiAgICAgICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBf X2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKCiAgICAgICAgICB1bnNpZ25lZCBs b25nIF9fdWw7CiAgICAgICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwg X19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICAgICAgaWYgKCEoX19lcnIgJiBpb3Nf YmFzZTo6ZmFpbGJpdCkgJiYgX191bCA8PSAxKQogICAgICAgICAgICBfX3YgPSBfX3VsOwogICAg ICAgICAgZWxzZQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAg ICB9CgoKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8 X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0No YXJUPiBfX3N0cmluZ190eXBlOwoKICAgICAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9j KCk7CiAgICAgICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51 bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBlIF9f dHJ1ZSA9IF9fbnAudHJ1ZW5hbWUoKTsKICAgICAgICAgIGNvbnN0IF9fc3RyaW5nX3R5cGUgX19m YWxzZSA9IF9fbnAuZmFsc2VuYW1lKCk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fdHJ1 ZXMgPSBfX3RydWUuY19zdHIoKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19mYWxzZXMg PSBfX2ZhbHNlLmNfc3RyKCk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX190cnVlbiA9IF9fdHJ1 ZS5zaXplKCkgLSAxOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZmFsc2VuID0gX19mYWxzZS5z aXplKCkgLSAxOwoKICAgICAgICAgIGZvciAoc2l6ZV90IF9fbiA9IDA7IF9fYmVnICE9IF9fZW5k OyArK19fbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19i ZWcrKzsKICAgICAgICAgICAgICBib29sIF9fdGVzdGYgPSBfX24gPD0gX19mYWxzZW4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA/IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19mYWxzZXNb X19uXSkgOiBmYWxzZTsKICAgICAgICAgICAgICBib29sIF9fdGVzdHQgPSBfX24gPD0gX190cnVl bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX190cmFpdHNfdHlwZTo6ZXEoX19jLCBf X3RydWVzW19fbl0pIDogZmFsc2U7CiAgICAgICAgICAgICAgaWYgKCEoX190ZXN0ZiB8fCBfX3Rl c3R0KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jh c2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdGYgJiYgX19uID09IF9fZmFsc2VuKQogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3YgPSAwOwogICAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3R0ICYm IF9fbiA9PSBfX3RydWVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3Yg PSAxOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgfQogICAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgICAgICBfX2VyciB8PSBp b3NfYmFzZTo6ZW9mYml0OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgog ICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcs IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7 CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9f ZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihf X3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJl dHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf SW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRv X2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBj b25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBf X2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywg X19iYXNlKTsKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAgICBfX2NvbnZlcnRfdG9fdihf X3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICBp ZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX191bCA8PSBudW1l cmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD46Om1heCgpKQogICAgICAgIF9fdiA9IHN0YXRpY19j YXN0PHVuc2lnbmVkIHNob3J0PihfX3VsKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlv c19iYXNlOjpmYWlsYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8 X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAg ICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5k LCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICB1bnNpZ25lZCBsb25nIF9fdWw7 CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3VsLCBfX2VyciwgX1NfY19s b2NhbGUsIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAg ICAgICAgICAmJiBfX3VsIDw9IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpKQog ICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oX191bCk7CiAgICAgIGVsc2UK ICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBf SW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlw ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3Nf YmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAg ICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRy YWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAg IF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwg X19iYXNlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQs IF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25n IGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9f YmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9f ZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigp LCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgcmV0dXJuIF9fYmVnOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBf SW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlw ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3Nf YmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAg ewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9N X2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsK ICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9j YWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9D aGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs IGZsb2F0JiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIF9feHRy Yy5yZXNlcnZlKDMyKTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBfX2Vu ZCwgX19pbywgX19lcnIsIF9feHRyYyk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0 cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRl cgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19i ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9f eHRyYzsKICAgICAgX194dHJjLnJlc2VydmUoMzIpOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3Rf ZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsKICAgICAgX19jb252ZXJ0 X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAgcmV0 dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J bkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9f Z2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0 CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIF9feHRyYy5yZXNlcnZlKDMyKTsKICAg ICAgX19iZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9f eHRyYyk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBf U19jX2xvY2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hh clQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2Vu ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2 b2lkKiYgX192KSBjb25zdAogICAgewoKICAgICAgdHlwZWRlZiBpb3NfYmFzZTo6Zm10ZmxhZ3Mg Zm10ZmxhZ3M7CiAgICAgIGZtdGZsYWdzIF9fZm10ID0gX19pby5mbGFncygpOwogICAgICBmbXRm bGFncyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVs ZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlv c19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbXQgJiBfX2ZtdG1hc2sgfCAo aW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwoKICAgICAgc3RyaW5nIF9feHRy YzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywg X19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CgoKICAgICAgX19pby5mbGFncyhf X2ZtdCk7CgogICAgICB1bnNpZ25lZCBsb25nIF9fdWw7CiAgICAgIF9fY29udmVydF90b192KF9f eHRyYy5jX3N0cigpLCBfX3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIGlm ICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQogICAgICAgIF9fdiA9IHJlaW50ZXJwcmV0 X2Nhc3Q8dm9pZCo+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6 OmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KIyA2MTggIi91c3IvbG9jYWwvdm9s L2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgdGVtcGxhdGU8dHlw ZW5hbWUgX1ZhbHVlVD4KICAgICAgX091dEl0ZXIKICAgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJ dGVyPjo6CiAgICAgIF9NX2NvbnZlcnRfZmxvYXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19p bywgX0NoYXJUIF9fZmlsbCwgY2hhciBfX21vZCwKICAgICAgICAgICAgICAgICAgICAgICBfVmFs dWVUIF9fdikgY29uc3QKICAgICAgewoKCiAgICAgICAgY29uc3QgaW50IF9fbWF4X2RpZ2l0cyA9 IG51bWVyaWNfbGltaXRzPF9WYWx1ZVQ+OjpkaWdpdHMxMCArIDE7CiAgICAgICAgc3RyZWFtc2l6 ZSBfX3ByZWMgPSBfX2lvLnByZWNpc2lvbigpOwoKICAgICAgICBpZiAoX19wcmVjID4gc3RhdGlj X2Nhc3Q8c3RyZWFtc2l6ZT4oX19tYXhfZGlnaXRzKSkKICAgICAgICAgIF9fcHJlYyA9IHN0YXRp Y19jYXN0PHN0cmVhbXNpemU+KF9fbWF4X2RpZ2l0cyk7CgoKICAgICAgICBjaGFyIF9fZmJ1Zlsx Nl07CgoKICAgICAgICBpbnQgX19sZW47CgoKCiAgICAgICAgaW50IF9fY3Nfc2l6ZSA9IF9fbWF4 X2RpZ2l0cyAqIDM7CiAgICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1 aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwoKICAgICAgICBjb25zdCBib29sIF9fZnAgPSBfU19m b3JtYXRfZmxvYXQoX19pbywgX19mYnVmLCBfX21vZCwgX19wcmVjKTsKICAgICAgICBpZiAoX19m cCkKICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9f ZmJ1ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxl LCBfX3ByZWMpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21f dihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LCBfU19jX2xvY2FsZSk7CgoKICAgICAgICBp ZiAoX19sZW4gPj0gX19jc19zaXplKQogICAgICAgICAgewogICAgICAgICAgICBfX2NzX3NpemUg PSBfX2xlbiArIDE7CiAgICAgICAgICAgIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWls dGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAgICAgICAgaWYgKF9fZnApCiAgICAgICAgICAg ICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3Ys CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlLCBfX3By ZWMpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJv bV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlKTsKICAgICAgICAgIH0KIyA2ODEgIi91c3IvbG9j YWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMK ICAgICAgICByZXR1cm4gX01fd2lkZW5fZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fY3MsIF9f bGVuKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJ dGVyPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgX091dEl0ZXIKICAgICAg bnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICAgIF9NX2NvbnZlcnRfaW50KF9PdXRJdGVy IF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIgX19tb2QsCiAgICAgICAg ICAgICAgICAgICAgIGNoYXIgX19tb2RsLCBfVmFsdWVUIF9fdikgY29uc3QKICAgICAgewoKCgog ICAgICAgIGNoYXIgX19mYnVmWzE2XTsKICAgICAgICBfU19mb3JtYXRfaW50KF9faW8sIF9fZmJ1 ZiwgX19tb2QsIF9fbW9kbCk7CgoKICAgICAgICBpbnQgX19jc19zaXplID0gNjQ7CiAgICAgICAg Y2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6 ZSkpOwogICAgICAgIGludCBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXpl LCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2Nf bG9jYWxlKTsKCiAgICAgICAgaWYgKF9fbGVuID49IF9fY3Nfc2l6ZSkKICAgICAgICAgIHsKICAg ICAgICAgICAgX19jc19zaXplID0gX19sZW4gKyAxOwogICAgICAgICAgICBfX2NzID0gc3RhdGlj X2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAgICAgICAgICAgIF9f bGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUpOwogICAgICAgICAg fQoKCgoKCgogICAgICAgIHJldHVybiBfTV93aWRlbl9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9f Y3MsIF9fbGVuKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Ogog ICAgX01fd2lkZW5fZmxvYXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9f ZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAg IHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CgoKICAg ICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8 X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAg ICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNp emVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKiBfX2xlbikpOwoKCiAgICAgIF9DaGFyVCogX193czIgPSBzdGF0aWNf Y2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19sZW4g KiAyKSk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsKCgog ICAgICBjb25zdCBfQ2hhclQqIF9fcDsKICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19u cCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBpZiAoX19wID0g X190cmFpdHNfdHlwZTo6ZmluZChfX3dzLCBfX2xlbiwgX19jdHlwZS53aWRlbignLicpKSkKICAg ICAgICBfX3dzW19fcCAtIF9fd3NdID0gX19ucC5kZWNpbWFsX3BvaW50KCk7CgoKCgogICAgICBj b25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAgICAgaW9zX2Jhc2U6 OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVs ZDsKICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgIF9DaGFy VCogX19wMjsKICAgICAgICAgIGludCBfX2RlY2xlbiA9IF9fcCA/IF9fcCAtIF9fd3MgOiBfX2xl bjsKICAgICAgICAgIF9fcDIgPSBfX2FkZF9ncm91cGluZyhfX3dzMiwgX19ucC50aG91c2FuZHNf c2VwKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZy5jX3N0cigp LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIoKSArIF9f Z3JvdXBpbmcuc2l6ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd3MsIF9f d3MgKyBfX2RlY2xlbik7CiAgICAgICAgICBpbnQgX19uZXdsZW4gPSBfX3AyIC0gX193czI7CgoK ICAgICAgICAgIGlmIChfX3ApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3RyYWl0c190 eXBlOjpjb3B5KF9fcDIsIF9fcCwgX19sZW4gLSBfX2RlY2xlbik7CiAgICAgICAgICAgICAgX19u ZXdsZW4gKz0gX19sZW4gLSBfX2RlY2xlbjsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBfX3dz ID0gX193czI7CiAgICAgICAgICBfX2xlbiA9IF9fbmV3bGVuOwogICAgICAgIH0KCiAgICAgIHJl dHVybiBfTV9pbnNlcnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fd3MsIF9fbGVuKTsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVy CiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIF9NX3dpZGVuX2ludChfT3V0SXRl ciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyKiBfX2NzLAogICAgICAg ICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsKCgogICAgICBjb25zdCBsb2NhbGUgX19s b2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0g dXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9DaGFyVCogX193cyA9IHN0 YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIF9f bGVuKSk7CgoKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVp bHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbiAqIDIpKTsKICAgICAgX19jdHlw ZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwoKCiAgICAgIGNvbnN0IG51bXB1bmN0 PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAg ICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGNvbnN0 IGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNl OjpiYXNlZmllbGQ7CiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7CgoKCiAg ICAgICAgICBzdHJlYW1zaXplIF9fb2ZmID0gMDsKICAgICAgICAgIGlmIChfX2lvLmZsYWdzKCkg JiBpb3NfYmFzZTo6c2hvd2Jhc2UpCiAgICAgICAgICAgIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3Nf YmFzZTo6b2N0KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9fb2ZmID0gMTsKICAg ICAgICAgICAgICAgICpfX3dzMiA9ICpfX3dzOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAg ZWxzZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkKICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICBfX29mZiA9IDI7CiAgICAgICAgICAgICAgICAqX193czIgPSAqX193czsK ICAgICAgICAgICAgICAgICooX193czIgKyAxKSA9ICooX193cyArIDEpOwogICAgICAgICAgICAg IH0KICAgICAgICAgIF9DaGFyVCogX19wOwogICAgICAgICAgX19wID0gX19hZGRfZ3JvdXBpbmco X193czIgKyBfX29mZiwgX19ucC50aG91c2FuZHNfc2VwKCksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUoKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fd3MgKyBfX29mZiwgX193cyArIF9fbGVuKTsKICAgICAgICAg IF9fbGVuID0gX19wIC0gX193czI7CgogICAgICAgICAgX193cyA9IF9fd3MyOwogICAgICAgIH0K ICAgICAgcmV0dXJuIF9NX2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX193cywgX19sZW4pOwog ICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAg ICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV9pbnNlcnQo X091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY29uc3QgX0NoYXJU KiBfX3dzLAogICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsKICAgICAgdHlwZWRl ZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CgogICAgICBzdHJlYW1zaXplIF9f dyA9IF9faW8ud2lkdGgoKTsKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFy VCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX3cpKTsKICAgICAgaWYg KF9fdyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbGVuKSkKICAgICAgICB7CiAgICAgICAg ICBfX3BhZDxfQ2hhclQsIF9fdHJhaXRzX3R5cGU+OjpfU19wYWQoX19pbywgX19maWxsLCBfX3dz MiwgX193cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X3csIF9fbGVuLCB0cnVlKTsKICAgICAgICAgIF9fbGVuID0gc3RhdGljX2Nhc3Q8aW50PihfX3cp OwoKICAgICAgICAgIF9fd3MgPSBfX3dzMjsKICAgICAgICB9CiAgICAgIF9faW8ud2lkdGgoMCk7 CgoKCiAgICAgIGZvciAoaW50IF9faiA9IDA7IF9faiA8IF9fbGVuOyArK19faiwgKytfX3MpCiAg ICAgICAgKl9fcyA9IF9fd3NbX19qXTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBu dW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3Nf YmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0CiAgICB7CiAgICAg IGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOwogICAgICBpZiAoKF9f ZmxhZ3MgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHVu c2lnbmVkIGxvbmcgX191diA9IF9fdjsKICAgICAgICAgIF9fcyA9IF9NX2NvbnZlcnRfaW50KF9f cywgX19pbywgX19maWxsLCAndScsIGNoYXIoKSwgX191dik7CiAgICAgICAgfQogICAgICBlbHNl CiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmlu Z190eXBlOwogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgICAg IGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJU PiA+KF9fbG9jKTsKICAgICAgICAgIF9fc3RyaW5nX3R5cGUgX19uYW1lOwogICAgICAgICAgaWYg KF9fdikKICAgICAgICAgICAgX19uYW1lID0gX19ucC50cnVlbmFtZSgpOwogICAgICAgICAgZWxz ZQogICAgICAgICAgICBfX25hbWUgPSBfX25wLmZhbHNlbmFtZSgpOwogICAgICAgICAgX19zID0g X01faW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBfX25hbWUuY19zdHIoKSwgX19uYW1lLnNpemUo KSk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0No YXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lv LCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZl cnRfaW50KF9fcywgX19pbywgX19maWxsLCAnZCcsIGNoYXIoKSwgX192KTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51 bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19i YXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192 KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1 JywgY2hhcigpLCBfX3YpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Ogog ICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2IsIGNoYXJfdHlwZSBfX2ZpbGws IGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9f YiwgX19maWxsLCAnZCcsICdsJywgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0 SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5 cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7 IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCAnbCcsIF9fdik7 IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBf T3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90 eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNv bnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCBjaGFy KCksIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl cj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1 dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAg ICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0 KF9fcywgX19pbywgX19maWxsLCAnTCcsIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwg X091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hh cl90eXBlIF9fZmlsbCwKICAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CiAgICB7CiAg ICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOwogICAgICBpb3Nf YmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJh c2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVw cGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbGFncyAm IF9fZm10IHwgKGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2UpKTsKICAgICAgdHJ5 CiAgICAgICAgewogICAgICAgICAgX19zID0gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2Zp bGwsICd1JywgY2hhcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnBy ZXRfY2FzdDx1bnNpZ25lZCBsb25nPihfX3YpKTsKICAgICAgICAgIF9faW8uZmxhZ3MoX19mbGFn cyk7CiAgICAgICAgfQogICAgICBjYXRjaCAoLi4uKQogICAgICAgIHsKICAgICAgICAgIF9faW8u ZmxhZ3MoX19mbGFncyk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIHJldHVybiBf X3M7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+ CiAgICBfSW5JdGVyCiAgICBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQo aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYg X19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBf X3VuaXRzKSBjb25zdAogICAgewogICAgICBzdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19iZWcg PSB0aGlzLT5kb19nZXQoX19iZWcsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX3N0cik7 CgogICAgICBjb25zdCBpbnQgX19uID0gbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjpkaWdp dHMxMDsKICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxs b2NhKF9fbikpOwogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAg ICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g PihfX2xvYyk7CiAgICAgIGNvbnN0IF9DaGFyVCogX193Y3MgPSBfX3N0ci5jX3N0cigpOwogICAg ICBfX2N0eXBlLm5hcnJvdyhfX3djcywgX193Y3MgKyBfX3N0ci5zaXplKCkgKyAxLCBjaGFyKCks IF9fY3MpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX2NzLCBfX3VuaXRzLCBfX2VyciwgX1NfY19s b2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG1vbmV5X2dldDxfQ2hhclQs IF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg Ym9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl JiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fdW5pdHMpIGNvbnN0CiAgICB7CgogICAgICB0eXBlZGVm IG1vbmV5cHVuY3Q8X0NoYXJULCB0cnVlPiBfX21vbmV5X3RydWU7CiAgICAgIHR5cGVkZWYgbW9u ZXlwdW5jdDxfQ2hhclQsIGZhbHNlPiBfX21vbmV5X2ZhbHNlOwogICAgICB0eXBlZGVmIG1vbmV5 X2Jhc2U6OnBhcnQgcGFydDsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdHJpbmdfdHlwZTo6c2l6 ZV90eXBlIHNpemVfdHlwZTsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9j KCk7CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFjZXQ8X19tb25leV90 cnVlPihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBmID0gdXNlX2ZhY2V0 PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlw ZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKICAgICAgY29uc3QgbW9uZXlf YmFzZTo6cGF0dGVybiBfX3AgPSBfX2ludGwgPyBfX21wdC5uZWdfZm9ybWF0KCkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5uZWdfZm9ybWF0KCk7 CgogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3Bvc19zaWduID1fX2ludGwgPyBfX21wdC5wb3Np dGl2ZV9zaWduKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog X19tcGYucG9zaXRpdmVfc2lnbigpOwogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX25lZ19zaWdu ID1fX2ludGwgPyBfX21wdC5uZWdhdGl2ZV9zaWduKCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDogX19tcGYubmVnYXRpdmVfc2lnbigpOwogICAgICBjb25zdCBj aGFyX3R5cGUgX19kID0gX19pbnRsID8gX19tcHQuZGVjaW1hbF9wb2ludCgpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50KCk7CiAgICAgIGNv bnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9faW50bCA/IF9fbXB0LnRob3VzYW5kc19zZXAoKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi50aG91c2FuZHNfc2VwKCk7 CgogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9fbXB0Lmdyb3VwaW5n KCkgOiBfX21wZi5ncm91cGluZygpOwoKCiAgICAgIHN0cmluZ190eXBlIF9fc2lnbjsKCiAgICAg IHN0cmluZyBfX2dyb3VwaW5nX3RtcDsKCiAgICAgIGludCBfX3NlcF9wb3MgPSAwOwoKICAgICAg Ym9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CgogICAgICBib29sIF9fdGVzdGRlY2ZvdW5kID0gZmFs c2U7CgoKICAgICAgc3RyaW5nX3R5cGUgX190ZW1wX3VuaXRzOwoKICAgICAgY2hhcl90eXBlIF9f YyA9ICpfX2JlZzsKICAgICAgY2hhcl90eXBlIF9fZW9mID0gc3RhdGljX2Nhc3Q8Y2hhcl90eXBl PihjaGFyX3RyYWl0czxjaGFyX3R5cGU+Ojplb2YoKSk7CiAgICAgIGZvciAoaW50IF9faSA9IDA7 IF9fYmVnICE9IF9fZW5kICYmIF9faSA8IDQgJiYgX190ZXN0dmFsaWQ7ICsrX19pKQogICAgICAg IHsKICAgICAgICAgIHBhcnQgX193aGljaCA9IHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFtf X2ldKTsKICAgICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAgICAgICAgICBpZiAo X19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlCiAgICAgICAgICAgICAgICAgICAgICB8 fCBfX2kgPCAyIHx8IF9fc2lnbi5zaXplKCkgPiAxCiAgICAgICAgICAgICAgICAgICAgICB8fCAo KHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFszXSkgIT0gbW9uZXlfYmFzZTo6bm9uZSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2kgPT0gMikpCiAgICAgICAgICAgICAgICAgICAg ewoKCgoKCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3N5bWJvbCA9 IF9faW50bCA/IF9fbXB0LmN1cnJfc3ltYm9sKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5jdXJyX3N5bWJvbCgpOwogICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zeW1ib2wuc2l6ZSgpOwogICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9faiA9IDA7CiAgICAgICAgICAgICAgICAgICAg ICB3aGlsZSAoX19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBf X2ogPCBfX2xlbiAmJiBfX3N5bWJvbFtfX2pdID09IF9fYykKICAgICAgICAgICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgKytfX2o7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCgogICAg ICAgICAgICAgICAgICAgICAgaWYgKF9faiAhPSBfX2xlbiAmJiAoX19pby5mbGFncygpICYgaW9z X2Jhc2U6OnNob3diYXNlKSkKICAgICAgICAgICAgICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBm YWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg ICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzaWduOgoKICAgICAgICAgICAgICAgICAgaWYg KF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9fbmVnX3NpZ24uc2l6ZSgpKQogICAgICAgICAgICAgICAg ICB7CgogICAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19wb3Nfc2lnblswXSkKICAgICAg ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19wb3Nf c2lnbjsKICAgICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19uZWdf c2lnblswXSkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg X19zaWduID0gX19uZWdfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19f YmVnKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9fYyA9 PSBfX3Bvc19zaWduWzBdKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgIF9fc2lnbiA9IF9fcG9zX3NpZ247CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsr X19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo X19uZWdfc2lnbi5zaXplKCkgJiYgX19jID09IF9fbmVnX3NpZ25bMF0pCiAgICAgICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19uZWdfc2lnbjsKICAgICAg ICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6 dmFsdWU6CgoKICAgICAgICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kCiAgICAgICAg ICAgICAgICAgICAgICAgICAmJiAoX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChfX2MgPT0gX19kICYmICFfX3Rlc3RkZWNm b3VuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19zZXApKQogICAg ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19kKQog ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91 cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVz dGRlY2ZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICAgICAgZWxzZSBpZiAoX19jID09IF9fc2VwKQogICAgICAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19n cm91cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFs c2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3RlbXBfdW5pdHMgKz0gX19jOwogICAgICAgICAgICAgICAgICAgICAgICAgICsrX19z ZXBfcG9zOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBf X2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNwYWNlOgogICAgICAgICAg ICAgICAgY2FzZSBtb25leV9iYXNlOjpub25lOgoKICAgICAgICAgICAgICAgICAgaWYgKF9faSAh PSAzKQogICAgICAgICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZAogICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQog ICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKCiAgICAgIGlmIChfX3NpZ24uc2l6 ZSgpID4gMSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3NpZ24uc2l6 ZSgpOwogICAgICAgICAgc2l6ZV90eXBlIF9faSA9IDE7CiAgICAgICAgICBmb3IgKDsgX19jICE9 IF9fZW9mICYmIF9faSA8IF9fbGVuOyArK19faSkKICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9 IF9fZW5kICYmIF9fYyAhPSBfX3NpZ25bX19pXSkKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19i ZWcpOwoKICAgICAgICAgIGlmIChfX2kgIT0gX19sZW4pCiAgICAgICAgICAgIF9fdGVzdHZhbGlk ID0gZmFsc2U7CiAgICAgICAgfQoKCiAgICAgIHdoaWxlIChfX3RlbXBfdW5pdHNbMF0gPT0gX19j dHlwZS53aWRlbignMCcpKQogICAgICAgIF9fdGVtcF91bml0cy5lcmFzZShfX3RlbXBfdW5pdHMu YmVnaW4oKSk7CgogICAgICBpZiAoX19zaWduLnNpemUoKSAmJiBfX3NpZ24gPT0gX19uZWdfc2ln bikKICAgICAgICBfX3RlbXBfdW5pdHMuaW5zZXJ0KF9fdGVtcF91bml0cy5iZWdpbigpLCBfX2N0 eXBlLndpZGVuKCctJykpOwoKCiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSAmJiBfX2dyb3Vw aW5nX3RtcC5zaXplKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGlu ZyhfX2dyb3VwaW5nLCBfX2dyb3VwaW5nX3RtcCkpCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0g ZmFsc2U7CiAgICAgICAgfQoKCiAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAgX19lcnIg fD0gaW9zX2Jhc2U6OmVvZmJpdDsKCgogICAgICBpZiAoIV9fdGVzdHZhbGlkIHx8ICFfX3RlbXBf dW5pdHMuc2l6ZSgpKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICBl bHNlCgogICAgICAgIF9fdGVtcF91bml0cy5zd2FwKF9fdW5pdHMpOwoKICAgICAgcmV0dXJuIF9f YmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy PgogICAgX091dEl0ZXIKICAgIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19w dXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUg X19maWxsLAogICAgICAgICAgIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0CiAgICB7CiAgICAg IGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9D aGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCgogICAg ICBpbnQgX19jc19zaXplID0gNjQ7CiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFy Kj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAgaW50IF9fbGVuID0gX19jb252 ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsICIlLjAxTGYiLCBfX3VuaXRzLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlKTsKCiAgICAgIGlmIChfX2xlbiA+ PSBfX2NzX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19jc19zaXplID0gX19sZW4gKyAxOwog ICAgICAgICAgX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nf c2l6ZSkpOwogICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6 ZSwgIiUuMDFMZiIsIF9fdW5pdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X1NfY19sb2NhbGUpOwogICAgICAgIH0KCgoKCgoKCiAgICAgIF9DaGFyVCogX193cyA9IHN0YXRp Y19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX2NzX3Np emUpKTsKICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwogICAg ICBzdHJpbmdfdHlwZSBfX2RpZ2l0cyhfX3dzKTsKICAgICAgcmV0dXJuIHRoaXMtPmRvX3B1dChf X3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbW9uZXlf cHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9f aW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgY29uc3Qg c3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l IHN0cmluZ190eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIG1vbmV5X2Jh c2U6OnBhcnQgcGFydDsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7 CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3dpZHRoID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihf X2lvLndpZHRoKCkpOwoKCiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIHRydWU+IF9f bW9uZXlfdHJ1ZTsKICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgZmFsc2U+IF9fbW9u ZXlfZmFsc2U7CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFjZXQ8X19t b25leV90cnVlPihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBmID0gdXNl X2ZhY2V0PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYg X19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKCgogICAgICBjb25z dCBjaGFyX3R5cGUqIF9fYmVnID0gX19kaWdpdHMuZGF0YSgpOwogICAgICBjb25zdCBjaGFyX3R5 cGUqIF9fZW5kID0gX19iZWcgKyBfX2RpZ2l0cy5zaXplKCk7CiAgICAgIG1vbmV5X2Jhc2U6OnBh dHRlcm4gX19wOwogICAgICBzdHJpbmdfdHlwZSBfX3NpZ247CiAgICAgIGlmICgqX19iZWcgIT0g X19jdHlwZS53aWRlbignLScpKQogICAgICAgIHsKICAgICAgICAgIF9fcCA9IF9faW50bCA/IF9f bXB0LnBvc19mb3JtYXQoKSA6IF9fbXBmLnBvc19mb3JtYXQoKTsKICAgICAgICAgIF9fc2lnbiA9 X19pbnRsID8gX19tcHQucG9zaXRpdmVfc2lnbigpIDogX19tcGYucG9zaXRpdmVfc2lnbigpOwog ICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9fcCA9IF9faW50bCA/IF9f bXB0Lm5lZ19mb3JtYXQoKSA6IF9fbXBmLm5lZ19mb3JtYXQoKTsKICAgICAgICAgIF9fc2lnbiA9 X19pbnRsID8gX19tcHQubmVnYXRpdmVfc2lnbigpIDogX19tcGYubmVnYXRpdmVfc2lnbigpOwog ICAgICAgICAgKytfX2JlZzsKICAgICAgICB9CgoKICAgICAgX19lbmQgPSBfX2N0eXBlLnNjYW5f bm90KGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2JlZywgX19lbmQpOwogICAgICBpZiAoX19iZWcgIT0g X19lbmQpCiAgICAgICAgewoKCgogICAgICAgICAgc3RyaW5nX3R5cGUgX19yZXM7CiAgICAgICAg ICBzdHJpbmdfdHlwZSBfX3ZhbHVlOwogICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19zeW1i b2wgPSBfX2ludGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmN1cnJfc3ltYm9sKCk7CgoKICAgICAgICAg IGNvbnN0IGludCBfX2ZyYWMgPSBfX2ludGwgPyBfX21wdC5mcmFjX2RpZ2l0cygpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZnJhY19kaWdpdHMoKTsKICAgICAg ICAgIGlmIChfX2ZyYWMgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgY2hh cl90eXBlIF9fZCA9IF9faW50bCA/IF9fbXB0LmRlY2ltYWxfcG9pbnQoKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50KCk7CiAg ICAgICAgICAgICAgaWYgKF9fZW5kIC0gX19iZWcgPj0gX19mcmFjKQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19lbmQgLSBfX2ZyYWMs IF9fZW5kKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigp LCBfX2QpOwogICAgICAgICAgICAgICAgICBfX2VuZCAtPSBfX2ZyYWM7CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAg ICAgX192YWx1ZSA9IHN0cmluZ190eXBlKF9fYmVnLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAg IGludCBfX3BhZGRlYyA9IF9fZnJhYyAtIChfX2VuZCAtIF9fYmVnKTsKICAgICAgICAgICAgICAg ICAgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oJzAnKTsKICAgICAgICAgICAgICAg ICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX3BhZGRlYywgX196ZXJvKTsKICAg ICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX2QpOwogICAg ICAgICAgICAgICAgICBfX2JlZyA9IF9fZW5kOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg ICB9CgoKCiAgICAgICAgICBpZiAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9fbXB0Lmdyb3VwaW5n KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBm Lmdyb3VwaW5nKCk7CiAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX2lu dGwgPyBfX21wdC50aG91c2FuZHNfc2VwKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDogX19tcGYudGhvdXNhbmRzX3NlcCgpOwogICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyKiBfX2diZWcgPSBfX2dyb3VwaW5nLmNfc3RyKCk7CiAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIqIF9fZ2VuZCA9IF9fZ2JlZyArIF9fZ3JvdXBpbmcuc2l6ZSgpOwog ICAgICAgICAgICAgICAgICBjb25zdCBpbnQgX19uID0gKF9fZW5kIC0gX19iZWcpICogMjsKICAg ICAgICAgICAgICAgICAgX0NoYXJUKiBfX3dzMiA9CiAgICAgICAgICAgICAgICAgICAgc3RhdGlj X2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbikpOwog ICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fd3NfZW5kID0gX19hZGRfZ3JvdXBpbmcoX193czIs IF9fc2VwLCBfX2diZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2dlbmQsIF9fYmVnLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAgIF9fdmFs dWUuaW5zZXJ0KDAsIF9fd3MyLCBfX3dzX2VuZCAtIF9fd3MyKTsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydCgwLCBzdHJp bmdfdHlwZShfX2JlZywgX19lbmQpKTsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBpb3NfYmFz ZTo6Zm10ZmxhZ3MgX19mID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkOwog ICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX192YWx1ZS5zaXplKCkgKyBfX3NpZ24uc2l6ZSgp OwogICAgICAgICAgX19sZW4gKz0gKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkg PyBfX3N5bWJvbC5zaXplKCkgOiAwOwogICAgICAgICAgYm9vbCBfX3Rlc3RpcGFkID0gX19mID09 IGlvc19iYXNlOjppbnRlcm5hbCAmJiBfX2xlbiA8IF9fd2lkdGg7CgoKICAgICAgICAgIGZvciAo aW50IF9faSA9IDA7IF9faSA8IDQ7ICsrX19pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg cGFydCBfX3doaWNoID0gc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkW19faV0pOwogICAgICAg ICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg IGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAgICAgICAgICBpZiAoX19pby5mbGFn cygpICYgaW9zX2Jhc2U6OnNob3diYXNlKQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9f c3ltYm9sOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9u ZXlfYmFzZTo6c2lnbjoKCgoKICAgICAgICAgICAgICAgICAgaWYgKF9fc2lnbi5zaXplKCkpCiAg ICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19zaWduWzBdOwogICAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6CiAgICAgICAgICAg ICAgICAgIF9fcmVzICs9IF9fdmFsdWU7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzcGFjZToKCgoKICAgICAgICAgICAgICAgICAgaWYg KF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gc3RyaW5nX3R5cGUoX193 aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICAgICAgX19yZXMgKz0gX19jdHlwZS53aWRlbihfX2ZpbGwpOwogICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6bm9uZToKICAgICAgICAg ICAgICAgICAgaWYgKF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gc3Ry aW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKCiAgICAgICAgICBpZiAoX19zaWdu LnNpemUoKSA+IDEpCiAgICAgICAgICAgIF9fcmVzICs9IHN0cmluZ190eXBlKF9fc2lnbi5iZWdp bigpICsgMSwgX19zaWduLmVuZCgpKTsKCgogICAgICAgICAgX19sZW4gPSBfX3Jlcy5zaXplKCk7 CiAgICAgICAgICBpZiAoX193aWR0aCA+IF9fbGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgaWYgKF9fZiA9PSBpb3NfYmFzZTo6bGVmdCkKCiAgICAgICAgICAgICAgICBfX3Jlcy5hcHBl bmQoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgIGVsc2UKCiAgICAgICAg ICAgICAgICBfX3Jlcy5pbnNlcnQoMCwgc3RyaW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2Zp bGwpKTsKICAgICAgICAgICAgICBfX2xlbiA9IF9fd2lkdGg7CiAgICAgICAgICAgIH0KCgogICAg ICAgICAgZm9yIChzaXplX3R5cGUgX19qID0gMDsgX19qIDwgX19sZW47ICsrX19qLCArK19fcykK ICAgICAgICAgICAgKl9fcyA9IF9fcmVzW19fal07CiAgICAgICAgfQogICAgICBfX2lvLndpZHRo KDApOwogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdGltZV9iYXNlOjpkYXRlb3JkZXIKICAgIHRpbWVf Z2V0PF9DaGFyVCwgX0luSXRlcj46OmRvX2RhdGVfb3JkZXIoKSBjb25zdAogICAgeyByZXR1cm4g dGltZV9iYXNlOjpub19vcmRlcjsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg IF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5k LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z dGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9D aGFyVCogX19mb3JtYXQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0 bG9jKCk7CiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8 X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYg X19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBzaXplX3Qg X19sZW4gPSBjaGFyX3RyYWl0czxfQ2hhclQ+OjpsZW5ndGgoX19mb3JtYXQpOwoKICAgICAgZm9y IChzaXplX3QgX19pID0gMDsgX19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19sZW4gJiYgIV9fZXJy OyArK19faSkKICAgICAgICB7CiAgICAgICAgICBjaGFyIF9fYyA9IF9fZm9ybWF0W19faV07CiAg ICAgICAgICBpZiAoX19jID09ICclJykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBfX2Mg PSBfX2Zvcm1hdFsrK19faV07CiAgICAgICAgICAgICAgY2hhciBfX21vZCA9IDA7CiAgICAgICAg ICAgICAgaW50IF9fbWVtID0gMDsKICAgICAgICAgICAgICBpZiAoX19jID09ICdFJyB8fCBfX2Mg PT0gJ08nKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX21vZCA9IF9fYzsK ICAgICAgICAgICAgICAgICAgX19jID0gX19mb3JtYXRbKytfX2ldOwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgIHN3aXRjaCAoX19jKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyKiBfX2NzOwogICAgICAgICAgICAgICAgICBfQ2hhclQgX193Y3Nb MTBdOwogICAgICAgICAgICAgICAgY2FzZSAnYSc6CgogICAgICAgICAgICAgICAgICBjb25zdCBj aGFyX3R5cGUqIF9fZGF5czFbN107CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF5c19hYmJy ZXZpYXRlZChfX2RheXMxKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVn LCBfX2VuZCwgX190bS0+dG1fd2RheSwgX19kYXlzMSwgNywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg ICAgICBjYXNlICdBJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXlz Mls3XTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXlzKF9fZGF5czIpOwogICAgICAgICAg ICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50bV93ZGF5LCBfX2Rh eXMyLCA3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2gnOgogICAgICAgICAgICAg ICAgY2FzZSAnYic6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhz MVsxMl07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fbW9udGhzX2FiYnJldmlhdGVkKF9fbW9u dGhzMSk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9f dG0tPnRtX21vbiwgX19tb250aHMxLCAxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNl ICdCJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19tb250aHMyWzEyXTsK ICAgICAgICAgICAgICAgICAgX190cC5fTV9tb250aHMoX19tb250aHMyKTsKICAgICAgICAgICAg ICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbW9uLCBfX21vbnRo czIsIDEyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2MnOgoKICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2R0WzJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9N X2RhdGVfdGltZV9mb3JtYXRzKF9fZHQpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3Zp YV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZHRbMF0pOwogICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgICAgIGNhc2UgJ2QnOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFj dF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9tZGF5LCAxLCAzMSwgMiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ0QnOgoKICAgICAgICAgICAgICAgICAgX19jcyA9 ICIlbS8lZC8leSI7CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyAr IDksIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVn LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg ICAgY2FzZSAnSCc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19l bmQsIF9fdG0tPnRtX2hvdXIsIDAsIDIzLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgY2FzZSAnSSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywg X19lbmQsIF9fdG0tPnRtX2hvdXIsIDEsIDEyLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgY2FzZSAnbSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2Jl ZywgX19lbmQsIF9fbWVtLCAxLCAxMiwgMiwgX19jdHlwZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAg ICAgICAgICAgICAgIF9fdG0tPnRtX21vbiA9IF9fbWVtIC0gMTsKICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdNJzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4 dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWluLCAwLCA1OSwgMiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAgICAgICAgICBpZiAo X19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKSA9PSAnXG4nKQogICAgICAgICAgICAgICAgICAgICsr X19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2VyciB8 PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg ICAgICBjYXNlICdSJzoKCiAgICAgICAgICAgICAgICAgIF9fY3MgPSAiJUg6JU0iOwogICAgICAg ICAgICAgICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyA2LCBfX3djcyk7CiAgICAgICAg ICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy LCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193Y3MpOwog ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1MnOgoKICAgICAg ICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9zZWMsIDAs IDU5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7 CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAndCc6CiAgICAg ICAgICAgICAgICAgIGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApID09ICdcdCcpCiAgICAg ICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgICAgY2FzZSAnVCc6CgogICAgICAgICAgICAgICAgICBfX2NzID0gIiVI OiVNOiVTIjsKICAgICAgICAgICAgICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgOSwg X193Y3MpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9f ZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBj YXNlICd4JzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXRlc1syXTsK ICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXRlX2Zvcm1hdHMoX19kYXRlcyk7CiAgICAgICAg ICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy LCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kYXRlc1sw XSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnWCc6Cgog ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fdGltZXNbMl07CiAgICAgICAgICAg ICAgICAgIF9fdHAuX01fdGltZV9mb3JtYXRzKF9fdGltZXMpOwogICAgICAgICAgICAgICAgICBf TV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGltZXNbMF0pOwogICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3knOgoKICAgICAgICAgICAg ICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV95ZWFyLCAwLCA5OSwg MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1knOgoKICAgICAgICAg ICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX21lbSwgMCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCksIDQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAg ICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAgICAgICAgICBfX3RtLT50bV95ZWFyID0g X19tZW0gLSAxOTAwOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNh c2UgJ1onOgoKICAgICAgICAgICAgICAgICAgaWYgKF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6dXBw ZXIsICpfX2JlZykpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg aW50IF9fdG1wOwogICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBf X2VuZCwgX190bXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190aW1l cHVuY3Q8X0NoYXJUPjo6X1NfdGltZXpvbmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDE0LCBfX2Vycik7CgoKICAgICAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZSBf X2MgPSAqX19iZWc7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyICYmIF9fdG1wID09 IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19jID09IF9fY3R5cGUud2lkZW4oJy0n KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19jdHlwZS53aWRlbign KycpKSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg IF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bXAsIDAsIDIzLCAyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtcCwgMCwg NTksIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUs IF9fZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAg X19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgoKICAgICAgICAgICAgICAgICAgICAgIF9fZXJy IHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAg ICAgICBpZiAoX19jID09IF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkpCiAgICAgICAgICAgICAg ICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg IF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0K ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg dm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X251bShp dGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVtYmVyLAogICAgICAg ICAgICAgICAgICAgaW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xlbiwKICAgICAgICAg ICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsCiAgICAgICAgICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX2kg PSAwOwogICAgICBzdHJpbmcgX19kaWdpdHM7CiAgICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVl OwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICB3aGlsZSAoX19iZWcgIT0gX19l bmQgJiYgX19pIDwgX19sZW4KICAgICAgICAgICAgICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6 ZGlnaXQsIF9fYykpCiAgICAgICAgewogICAgICAgICAgX19kaWdpdHMgKz0gX19jdHlwZS5uYXJy b3coX19jLCAwKTsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICArK19faTsK ICAgICAgICB9CiAgICAgIGlmIChfX2kgPT0gX19sZW4pCiAgICAgICAgewogICAgICAgICAgaW50 IF9fdmFsdWUgPSBhdG9pKF9fZGlnaXRzLmNfc3RyKCkpOwogICAgICAgICAgaWYgKF9fbWluIDw9 IF9fdmFsdWUgJiYgX192YWx1ZSA8PSBfX21heCkKICAgICAgICAgICAgX19tZW1iZXIgPSBfX3Zh bHVlOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAg ICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgIGlmICgh X190ZXN0dmFsaWQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICB9CgoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAog ICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X25hbWUoaXRlcl90 eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAgICAgICAg ICAgICAgICBjb25zdCBfQ2hhclQqKiBfX25hbWVzLCBzaXplX3QgX19pbmRleGxlbiwKICAgICAg ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAg IHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBpbnQqIF9f bWF0Y2hlcyA9IHN0YXRpY19jYXN0PGludCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGludCkg KiBfX2luZGV4bGVuKSk7CiAgICAgIHNpemVfdCBfX25tYXRjaGVzID0gMDsKICAgICAgc2l6ZV90 IF9fcG9zID0gMDsKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CiAgICAgIGNvbnN0IGNo YXJfdHlwZSogX19uYW1lOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKCiAgICAgIGZv ciAoc2l6ZV90IF9faTEgPSAwOyBfX2kxIDwgX19pbmRleGxlbjsgKytfX2kxKQogICAgICAgIGlm IChfX2MgPT0gX19uYW1lc1tfX2kxXVswXSkKICAgICAgICAgIF9fbWF0Y2hlc1tfX25tYXRjaGVz KytdID0gX19pMTsKCiAgICAgIHdoaWxlKF9fbm1hdGNoZXMgPiAxKQogICAgICAgIHsKCiAgICAg ICAgICBzaXplX3QgX19taW5sZW4gPSAxMDsKICAgICAgICAgIGZvciAoc2l6ZV90IF9faTIgPSAw OyBfX2kyIDwgX19ubWF0Y2hlczsgKytfX2kyKQogICAgICAgICAgICBfX21pbmxlbiA9IG1pbihf X21pbmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cmFpdHNfdHlwZTo6bGVuZ3Ro KF9fbmFtZXNbX19tYXRjaGVzW19faTJdXSkpOwoKICAgICAgICAgIGlmIChfX3BvcyA8IF9fbWlu bGVuICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKytfX3Bv czsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIGZvciAoc2l6 ZV90IF9faTMgPSAwOyBfX2kzIDwgX19ubWF0Y2hlczsgKytfX2kzKQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1tfX2kzXV07CiAg ICAgICAgICAgICAgICAgIGlmIChfX25hbWVbX19wb3NdICE9IF9fYykKICAgICAgICAgICAgICAg ICAgICBfX21hdGNoZXNbX19pM10gPSBfX21hdGNoZXNbLS1fX25tYXRjaGVzXTsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsK ICAgICAgICB9CgogICAgICBpZiAoX19ubWF0Y2hlcyA9PSAxKQogICAgICAgIHsKCiAgICAgICAg ICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1swXV07CiAgICAgICAgICBjb25zdCBzaXplX3Qg X19sZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAgICAgIHdoaWxlIChf X3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kICYmIF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVn KQogICAgICAgICAgICArK19fYmVnLCArK19fcG9zOwoKICAgICAgICAgIGlmIChfX2xlbiA9PSBf X3BvcykKICAgICAgICAgICAgX19tZW1iZXIgPSBfX21hdGNoZXNbMF07CiAgICAgICAgICBlbHNl CiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICBlbHNlCiAg ICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgaWYgKCFfX3Rlc3R2YWxpZCkKICAgICAg ICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJU LCBfSW5JdGVyPjo6CiAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hhclQgX193Y3NbM107CiAgICAg IGNvbnN0IGNoYXIqIF9fY3MgPSAiJVgiOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxv YygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBl PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDMsIF9f d2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19l cnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJy IHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGlt ZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcs IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hhclQgX193 Y3NbM107CiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJXgiOwogICAgICBsb2NhbGUgX19sb2Mg PSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNl X2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywg X19jcyArIDMsIF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2Vu ZCwgX19pbywgX19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQog ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0lu SXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfd2Vla2RheShp dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAg ewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAg bG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBj b25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAg ICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5c1s3XTsKICAgICAgX190cC5fTV9kYXlzX2FiYnJldmlh dGVkKF9fZGF5cyk7CiAgICAgIGludCBfX3RtcHdkYXk7CiAgICAgIF9NX2V4dHJhY3RfbmFtZShf X2JlZywgX19lbmQsIF9fdG1wd2RheSwgX19kYXlzLCA3LCBfX2Vycik7CgoKCgoKCgogICAgICBp ZiAoIV9fZXJyKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX3BvcyA9IF9fdHJhaXRzX3R5 cGU6Omxlbmd0aChfX2RheXNbX190bXB3ZGF5XSk7CiAgICAgICAgICBfX3RwLl9NX2RheXMoX19k YXlzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19kYXlzW19fdG1wd2Rh eV07CiAgICAgICAgICBpZiAoX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgIHsK CiAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3Ro KF9fbmFtZSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9fcG9zIDwgX19sZW4gJiYgX19iZWcgIT0g X19lbmQKICAgICAgICAgICAgICAgICAgICAgJiYgX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAg ICAgICAgICAgICAgICArK19fYmVnLCArK19fcG9zOwogICAgICAgICAgICAgIGlmIChfX2xlbiAh PSBfX3BvcykKICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg ICAgICAgICB9CiAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICBfX3RtLT50bV93ZGF5 ID0gX190bXB3ZGF5OwogICAgICAgIH0KICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAg IF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIK ICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X21vbnRobmFtZShpdGVy X3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jh c2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7 CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBs b2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNv bnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAg IGNvbnN0IGNoYXJfdHlwZSogX19tb250aHNbMTJdOwogICAgICBfX3RwLl9NX21vbnRoc19hYmJy ZXZpYXRlZChfX21vbnRocyk7CiAgICAgIGludCBfX3RtcG1vbjsKICAgICAgX01fZXh0cmFjdF9u YW1lKF9fYmVnLCBfX2VuZCwgX190bXBtb24sIF9fbW9udGhzLCAxMiwgX19lcnIpOwoKCgoKCgoK ICAgICAgaWYgKCFfX2VycikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19wb3MgPSBfX3Ry YWl0c190eXBlOjpsZW5ndGgoX19tb250aHNbX190bXBtb25dKTsKICAgICAgICAgIF9fdHAuX01f bW9udGhzKF9fbW9udGhzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19t b250aHNbX190bXBtb25dOwogICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQog ICAgICAgICAgICB7CgogICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fdHJhaXRz X3R5cGU6Omxlbmd0aChfX25hbWUpOwogICAgICAgICAgICAgIHdoaWxlIChfX3BvcyA8IF9fbGVu ICYmIF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICYmIF9fbmFtZVtfX3Bvc10g PT0gKl9fYmVnKQogICAgICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsKICAgICAgICAgICAg ICBpZiAoX19sZW4gIT0gX19wb3MpCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6 ZmFpbGJpdDsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAg X190bS0+dG1fbW9uID0gX190bXBtb247CiAgICAgICAgfQoKICAgICAgaWYgKF9fYmVnID09IF9f ZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2Jl ZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgog ICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfeWVh cihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAg ewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxf Q2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CgogICAg ICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBzaXplX3QgX19pID0gMDsKICAgICAgc3Ry aW5nIF9fZGlnaXRzOwogICAgICB3aGlsZSAoX19pIDwgNCAmJiBfX2JlZyAhPSBfX2VuZCAmJiBf X2N0eXBlLmlzKGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpKQogICAgICAgIHsKICAgICAgICAgIF9f ZGlnaXRzICs9IF9fY3R5cGUubmFycm93KF9fYywgMCk7CiAgICAgICAgICBfX2MgPSAqKCsrX19i ZWcpOwogICAgICAgICAgKytfX2k7CiAgICAgICAgfQogICAgICBpZiAoX19pID09IDIgfHwgX19p ID09IDQpCiAgICAgICAgewogICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAgICBfX2NvbnZlcnRf dG9fdihfX2RpZ2l0cy5jX3N0cigpLCBfX2wsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgICAg ICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSAmJiBfX2wgPD0gMjE0NzQ4MzY0NykK ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fbCA9IF9faSA9PSAyID8gX19sIDogX19sIC0g MTkwMDsKICAgICAgICAgICAgICBfX3RtLT50bV95ZWFyID0gc3RhdGljX2Nhc3Q8aW50PihfX2wp OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9z X2Jhc2U6OmZhaWxiaXQ7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8 PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgdGlt ZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNl JiBfX2lvLCBjaGFyX3R5cGUsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgIGNvbnN0IF9DaGFyVCog X19iZWcsIGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xv YyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1 c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgd2hpbGUgKF9fYmVnICE9IF9f ZW5kKQogICAgICAgIHsKICAgICAgICAgIGNoYXIgX19jID0gX19jdHlwZS5uYXJyb3coKl9fYmVn LCAwKTsKICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICBpZiAoX19jID09ICclJykKICAgICAg ICAgICAgewogICAgICAgICAgICAgIGNoYXIgX19mb3JtYXQ7CiAgICAgICAgICAgICAgY2hhciBf X21vZCA9IDA7CiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gMTsKICAgICAgICAgICAgICBf X2MgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApOwogICAgICAgICAgICAgICsrX19iZWc7CiAg ICAgICAgICAgICAgaWYgKF9fYyA9PSAnRScgfHwgX19jID09ICdPJykKICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgX19tb2QgPSBfX2M7CiAgICAgICAgICAgICAgICAgIF9fZm9y bWF0ID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICAgICAgICAgKytfX2Jl ZzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBf X2Zvcm1hdCA9IF9fYzsKICAgICAgICAgICAgICBfX3MgPSB0aGlzLT5kb19wdXQoX19zLCBfX2lv LCBjaGFyX3R5cGUoKSwgX190bSwgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fbW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgKl9fcyA9IF9fYzsKICAgICAgICAgICAgICArK19fczsKICAgICAgICAg ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICB0aW1lX3B1dDxf Q2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9f aW8sIGNoYXJfdHlwZSwgY29uc3QgdG0qIF9fdG0sCiAgICAgICAgICAgY2hhciBfX2Zvcm1hdCwg Y2hhciBfX21vZCkgY29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2Mo KTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxf Q2hhclQ+ID4oX19sb2MpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0g dXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKCiAgICAgIGNvbnN0IHNp emVfdCBfX21heGxlbiA9IDY0OwogICAgICBjaGFyX3R5cGUqIF9fcmVzID0KICAgICAgICBzdGF0 aWNfY2FzdDxjaGFyX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihjaGFyX3R5cGUpICog X19tYXhsZW4pKTsKCgoKCgoKICAgICAgY2hhcl90eXBlIF9fZm10WzRdOwogICAgICBfX2ZtdFsw XSA9IF9fY3R5cGUud2lkZW4oJyUnKTsKICAgICAgaWYgKCFfX21vZCkKICAgICAgICB7CiAgICAg ICAgICBfX2ZtdFsxXSA9IF9fZm9ybWF0OwogICAgICAgICAgX19mbXRbMl0gPSBjaGFyX3R5cGUo KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfX2ZtdFsxXSA9IF9f bW9kOwogICAgICAgICAgX19mbXRbMl0gPSBfX2Zvcm1hdDsKICAgICAgICAgIF9fZm10WzNdID0g Y2hhcl90eXBlKCk7CiAgICAgICAgfQoKICAgICAgX190cC5fTV9wdXQoX19yZXMsIF9fbWF4bGVu LCBfX2ZtdCwgX190bSk7CgoKICAgICAgc2l6ZV90IF9fbGVuID0gY2hhcl90cmFpdHM8Y2hhcl90 eXBlPjo6bGVuZ3RoKF9fcmVzKTsKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19s ZW47ICsrX19pLCArK19fcykKICAgICAgICAqX19zID0gX19yZXNbX19pXTsKICAgICAgcmV0dXJu IF9fczsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAgIGNv bGxhdGU8X0NoYXJUPjo6X01fY29tcGFyZShjb25zdCBfQ2hhclQqLCBjb25zdCBfQ2hhclQqKSBj b25zdAogICAgeyByZXR1cm4gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg c2l6ZV90CiAgICBjb2xsYXRlPF9DaGFyVD46Ol9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBf Q2hhclQqLCBzaXplX3QpIGNvbnN0CiAgICB7IHJldHVybiAwOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGludAogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRvX2NvbXBhcmUo Y29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICAg Y29uc3QgX0NoYXJUKiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QKICAgIHsKICAg ICAgY29uc3Qgc3RyaW5nX3R5cGUgX19vbmUoX19sbzEsIF9faGkxKTsKICAgICAgY29uc3Qgc3Ry aW5nX3R5cGUgX190d28oX19sbzIsIF9faGkyKTsKICAgICAgcmV0dXJuIF9NX2NvbXBhcmUoX19v bmUuY19zdHIoKSwgX190d28uY19zdHIoKSk7CiAgICB9CgogdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPgogICAgdHlwZW5hbWUgY29sbGF0ZTxfQ2hhclQ+OjpzdHJpbmdfdHlwZQogICAgY29sbGF0 ZTxfQ2hhclQ+OjoKICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9D aGFyVCogX19oaSkgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9fbGVuID0gKF9faGkgLSBfX2xv KSAqIDI7CgogICAgICBfQ2hhclQqIF9fYyA9CiAgICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4o X19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbGVuKSk7CiAgICAgIHNpemVfdCBf X3JlcyA9IF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fbGVuKTsKCiAgICAgIGlmIChfX3JlcyA+ PSBfX2xlbikKICAgICAgICB7CiAgICAgICAgICBfX2MgPQogICAgICAgICAgICBzdGF0aWNfY2Fz dDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fcmVzICsgMSkp KTsKICAgICAgICAgIF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fcmVzICsgMSk7CiAgICAgICAg fQogICAgICByZXR1cm4gc3RyaW5nX3R5cGUoX19jKTsKICAgIH0KCiB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+CiAgICBsb25nCiAgICBjb2xsYXRlPF9DaGFyVD46OgogICAgZG9faGFzaChjb25z dCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgIHsKICAgICAgdW5z aWduZWQgbG9uZyBfX3ZhbCA9IDA7CiAgICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX2xvKQog ICAgICAgIF9fdmFsID0gKl9fbG8gKyAoKF9fdmFsIDw8IDcpIHwKICAgICAgICAgICAgICAgICAg ICAgICAoX192YWwgPj4gKG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+OjpkaWdpdHMgLSA3 KSkpOwogICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oX192YWwpOwogICAgfQoKCgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICB2b2lkCiAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBj aGFyKiBfX2luLCBfVHYmIF9fb3V0LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAg ICAgICAgICAgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX2Jhc2UgPSAxMCk7CgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICBpbnQKICAgIF9fY29udmVydF9mcm9tX3Yo Y2hhciogX19vdXQsIGNvbnN0IGludCBfX3NpemUsIGNvbnN0IGNoYXIqIF9fZm10LAogICAgICAg ICAgICAgICAgICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYyA9IC0x KQogICAgewogICAgICBpbnQgX19yZXQ7CiAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxv Y2FsZShfX0xDX0FMTCwgX19udWxsKSk7CiAgICAgIHNldGxvY2FsZShfX0xDX0FMTCwgIkMiKTsK ICAgICAgaWYgKF9fcHJlYyA+PSAwKQogICAgICAgIF9fcmV0ID0gc25wcmludGYoX19vdXQsIF9f c2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gc25w cmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fdik7CiAgICAgIHNldGxvY2FsZShfX0xDX0FM TCwgX19vbGQpOwogICAgICBmcmVlKF9fb2xkKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoj IDIwMTkgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxl X2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBzdHJ1Y3QgX19wYWQKICAgIHsKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfcGFk KGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBfQ2hhclQqIF9fbmV3cywKICAgICAgICAg ICAgIGNvbnN0IF9DaGFyVCogX19vbGRzLCBjb25zdCBzdHJlYW1zaXplIF9fbmV3bGVuLAogICAg ICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX29sZGxlbiwgY29uc3QgYm9vbCBfX251bSk7CiAg ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2 b2lkCiAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoaW9zX2Jhc2UmIF9faW8sIF9D aGFyVCBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NoYXJUKiBf X25ld3MsIGNvbnN0IF9DaGFyVCogX19vbGRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19uZXdsZW4sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX29sZGxlbiwgY29uc3QgYm9vbCBfX251bSkK ICAgIHsKICAgICAgc2l6ZV90IF9fcGxlbiA9IHN0YXRpY19jYXN0PHNpemVfdD4oX19uZXdsZW4g LSBfX29sZGxlbik7CiAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4o X19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fcGxlbikpOwogICAgICBfVHJhaXRz Ojphc3NpZ24oX19wYWRzLCBfX3BsZW4sIF9fZmlsbCk7CgogICAgICBfQ2hhclQqIF9fYmVnOwog ICAgICBfQ2hhclQqIF9fZW5kOwogICAgICBzaXplX3QgX19tb2QgPSAwOwogICAgICBzaXplX3Qg X19iZWdsZW47CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2FkanVzdCA9IF9faW8uZmxhZ3Mo KSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsKCiAgICAgIGlmIChfX2FkanVzdCA9PSBpb3NfYmFz ZTo6bGVmdCkKICAgICAgICB7CgogICAgICAgICAgX19iZWcgPSBjb25zdF9jYXN0PF9DaGFyVCo+ KF9fb2xkcyk7CiAgICAgICAgICBfX2JlZ2xlbiA9IF9fb2xkbGVuOwogICAgICAgICAgX19lbmQg PSBfX3BhZHM7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX2FkanVzdCA9PSBpb3NfYmFzZTo6 aW50ZXJuYWwgJiYgX19udW0pCiAgICAgICAgewoKCgogICAgICAgICAgbG9jYWxlIF9fbG9jID0g X19pby5nZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1 c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgICAgIGNvbnN0IF9DaGFyVCBf X21pbnVzID0gX19jdHlwZS53aWRlbignLScpOwogICAgICAgICAgY29uc3QgX0NoYXJUIF9fcGx1 cyA9IF9fY3R5cGUud2lkZW4oJysnKTsKICAgICAgICAgIGJvb2wgX190ZXN0c2lnbiA9IF9UcmFp dHM6OmVxKF9fb2xkc1swXSwgX19taW51cykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8 IF9UcmFpdHM6OmVxKF9fb2xkc1swXSwgX19wbHVzKTsKCiAgICAgICAgICBib29sIF9fdGVzdGhl eCA9IF9UcmFpdHM6OmVxKF9fY3R5cGUud2lkZW4oJzAnKSwgX19vbGRzWzBdKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiAoX1RyYWl0czo6ZXEoX19jdHlwZS53aWRlbigneCcpLCBfX29s ZHNbMV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfVHJhaXRzOjplcShfX2N0 eXBlLndpZGVuKCdYJyksIF9fb2xkc1sxXSkpOwogICAgICAgICAgaWYgKF9fdGVzdGhleCkKICAg ICAgICAgICAgewogICAgICAgICAgICAgIF9fbmV3c1swXSA9IF9fb2xkc1swXTsKICAgICAgICAg ICAgICBfX25ld3NbMV0gPSBfX29sZHNbMV07CiAgICAgICAgICAgICAgX19tb2QgKz0gMjsKICAg ICAgICAgICAgICBfX25ld3MgKz0gMjsKICAgICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAg ICAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0 X2Nhc3Q8X0NoYXJUKj4oX19vbGRzICsgX19tb2QpOwogICAgICAgICAgICB9CiAgICAgICAgICBl bHNlIGlmIChfX3Rlc3RzaWduKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX1RyYWl0czo6 ZXEoKF9fbmV3c1swXSA9IF9fb2xkc1swXSksIF9fcGx1cykgPyBfX3BsdXMgOiBfX21pbnVzOwog ICAgICAgICAgICAgICsrX19tb2Q7CiAgICAgICAgICAgICAgKytfX25ld3M7CiAgICAgICAgICAg ICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAg ICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyArIF9fbW9kKTsKICAg ICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIF9f YmVnID0gX19wYWRzOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAg ICAgIF9fZW5kID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMpOwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAgIF9fYmVnID0gX19wYWRzOwog ICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8 X0NoYXJUKj4oX19vbGRzKTsKICAgICAgICB9CiAgICAgIF9UcmFpdHM6OmNvcHkoX19uZXdzLCBf X2JlZywgX19iZWdsZW4pOwogICAgICBfVHJhaXRzOjpjb3B5KF9fbmV3cyArIF9fYmVnbGVuLCBf X2VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld2xlbiAtIF9fYmVnbGVuIC0gX19t b2QpOwogICAgfQojIDIxMTQgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4y L2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg ICBib29sCiAgICBfX3ZlcmlmeV9ncm91cGluZyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJUPiYg X19ncm91cGluZywKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQ+JiBf X2dyb3VwaW5nX3RtcCkKICAgIHsKICAgICAgaW50IF9faSA9IDA7CiAgICAgIGludCBfX2ogPSAw OwogICAgICBjb25zdCBpbnQgX19sZW4gPSBfX2dyb3VwaW5nLnNpemUoKTsKICAgICAgY29uc3Qg aW50IF9fbiA9IF9fZ3JvdXBpbmdfdG1wLnNpemUoKTsKICAgICAgYm9vbCBfX3Rlc3QgPSB0cnVl OwoKCgoKICAgICAgd2hpbGUgKF9fdGVzdCAmJiBfX2kgPCBfX24gLSAxKQogICAgICAgIGZvciAo X19qID0gMDsgX190ZXN0ICYmIF9faiA8IF9fbGVuICYmIF9faSA8IF9fbiAtIDE7ICsrX19qLCsr X19pKQogICAgICAgICAgX190ZXN0ICY9IF9fZ3JvdXBpbmdbX19qXSA9PSBfX2dyb3VwaW5nX3Rt cFtfX24gLSBfX2kgLSAxXTsKCgogICAgICBfX2ogPT0gX19sZW4gPyBfX2ogPSAwIDogX19qOwog ICAgICBfX3Rlc3QgJj0gX19ncm91cGluZ1tfX2pdID49IF9fZ3JvdXBpbmdfdG1wW19fbiAtIF9f aSAtIDFdOwogICAgICByZXR1cm4gX190ZXN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIF9DaGFyVCoKICAgIF9fYWRkX2dyb3VwaW5nKF9DaGFyVCogX19zLCBf Q2hhclQgX19zZXAsCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2diZWcsIGNvbnN0 IGNoYXIqIF9fZ2VuZCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19maXJzdCwg Y29uc3QgX0NoYXJUKiBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4g Kl9fZ2JlZykKICAgICAgICB7CiAgICAgICAgICBfX3MgPSBfX2FkZF9ncm91cGluZyhfX3MsIF9f c2VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fZ2JlZyArIDEgPT0gX19nZW5k ID8gX19nYmVnIDogX19nYmVnICsgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2dlbmQsIF9fZmlyc3QsIF9fbGFzdCAtICpfX2diZWcpOwogICAgICAgICAgX19maXJzdCA9IF9f bGFzdCAtICpfX2diZWc7CiAgICAgICAgICAqX19zKysgPSBfX3NlcDsKICAgICAgICB9CiAgICAg IGRvCiAgICAgICAgKl9fcysrID0gKl9fZmlyc3QrKzsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0g X19sYXN0KTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25l eXB1bmN0PGNoYXIsIHRydWU+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5 bmFtZTxjaGFyLCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnlu YW1lPGNoYXIsIHRydWU+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9nZXQ8Y2hhcj47 CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5X3B1dDxjaGFyPjsKICBleHRlcm4gdGVtcGxh dGUgY2xhc3MgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1v bmV5cHVuY3RfYnluYW1lPHdjaGFyX3QsIGZhbHNlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg bW9uZXlwdW5jdF9ieW5hbWU8d2NoYXJfdCwgdHJ1ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz IG1vbmV5X2dldDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfcHV0PHdj aGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdDxjaGFyPjsKICBleHRlcm4g dGVtcGxhdGUgY2xhc3MgbnVtcHVuY3RfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBj bGFzcyBudW1fZ2V0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fcHV0PGNoYXI+ OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdDx3Y2hhcl90PjsKICBleHRlcm4gdGVt cGxhdGUgY2xhc3MgbnVtcHVuY3RfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBj bGFzcyBudW1fZ2V0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fcHV0PHdj aGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX3RpbWVwdW5jdDxjaGFyPjsKICBleHRl cm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz IHRpbWVfcHV0X2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXQ8 Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTxjaGFyPjsKICBl eHRlcm4gdGVtcGxhdGUgY2xhc3MgX190aW1lcHVuY3Q8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBs YXRlIGNsYXNzIHRpbWVfcHV0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1l X3B1dF9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0PHdj aGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldF9ieW5hbWU8d2NoYXJfdD47 CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0 ZSBjbGFzcyBtZXNzYWdlc19ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1l c3NhZ2VzPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlc19ieW5hbWU8 d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGN0eXBlX2J5bmFtZTxjaGFyPjsKICBl eHRlcm4gdGVtcGxhdGUgY2xhc3MgY3R5cGVfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1w bGF0ZSBjbGFzcyBjb2RlY3Z0X2J5bmFtZTxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+OwogIGV4dGVy biB0ZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0X2J5bmFtZTx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+ OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0 ZSBjbGFzcyBjb2xsYXRlX2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29s bGF0ZTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZV9ieW5hbWU8d2No YXJfdD47CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29kZWN2dDxjaGFyLCBjaGFyLCBt YnN0YXRlX3Q+JgogICAgdXNlX2ZhY2V0PGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+ KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IGNvbGxhdGU8Y2hh cj4mCiAgICB1c2VfZmFjZXQ8Y29sbGF0ZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRl cm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bXB1bmN0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bXB1 bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3Qg bnVtX3B1dDxjaGFyPiYKICAgIHVzZV9mYWNldDxudW1fcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxl Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX2dldDxjaGFyPiYKICAgIHVzZV9m YWNldDxudW1fZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog ICAgY29uc3QgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0 PGNoYXIsIHRydWU+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29u c3QgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxjaGFy LCBmYWxzZT4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBt b25leV9wdXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bW9uZXlfcHV0PGNoYXI+ID4oY29uc3QgbG9j YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlfZ2V0PGNoYXI+JgogICAg dXNlX2ZhY2V0PG1vbmV5X2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVt cGxhdGUKICAgIGNvbnN0IF9fdGltZXB1bmN0PGNoYXI+JgogICAgdXNlX2ZhY2V0PF9fdGltZXB1 bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3Qg dGltZV9wdXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8dGltZV9wdXQ8Y2hhcj4gPihjb25zdCBsb2Nh bGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0aW1lX2dldDxjaGFyPiYKICAgIHVz ZV9mYWNldDx0aW1lX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh dGUKICAgIGNvbnN0IG1lc3NhZ2VzPGNoYXI+JgogICAgdXNlX2ZhY2V0PG1lc3NhZ2VzPGNoYXI+ ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29kZWN2dDx3 Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+JgogICAgdXNlX2ZhY2V0PGNvZGVjdnQ8d2NoYXJfdCwg Y2hhciwgbWJzdGF0ZV90PiA+KGxvY2FsZSBjb25zdCYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg IGNvbnN0IGNvbGxhdGU8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8Y29sbGF0ZTx3Y2hhcl90PiA+ KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bXB1bmN0PHdj aGFyX3Q+JgogICAgdXNlX2ZhY2V0PG51bXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7 CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX3B1dDx3Y2hhcl90PiYKICAgIHVzZV9m YWNldDxudW1fcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0 ZQogICAgY29uc3QgbnVtX2dldDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxudW1fZ2V0PHdjaGFy X3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlw dW5jdDx3Y2hhcl90LCB0cnVlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PHdjaGFyX3QsIHRy dWU+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlw dW5jdDx3Y2hhcl90LCBmYWxzZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDx3Y2hhcl90LCBm YWxzZT4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25l eV9wdXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bW9uZXlfcHV0PHdjaGFyX3Q+ID4oY29uc3Qg bG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlfZ2V0PHdjaGFyX3Q+ JgogICAgdXNlX2ZhY2V0PG1vbmV5X2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl eHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IF9fdGltZXB1bmN0PHdjaGFyX3Q+JgogICAgdXNlX2Zh Y2V0PF9fdGltZXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1w bGF0ZQogICAgY29uc3QgdGltZV9wdXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8dGltZV9wdXQ8 d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0 aW1lX2dldDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDx0aW1lX2dldDx3Y2hhcl90PiA+KGNvbnN0 IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1lc3NhZ2VzPHdjaGFyX3Q+ JgogICAgdXNlX2ZhY2V0PG1lc3NhZ2VzPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgoKICBl eHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjdHlwZTxjaGFyPiA+KGNvbnN0 IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2Rl Y3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl bXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y29sbGF0ZTxjaGFyPiA+KGNvbnN0IGxvY2Fs ZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1wdW5jdDxj aGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhh c19mYWNldDxudW1fcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0 ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsK CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlwdW5jdDxjaGFy PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19m YWNldDxtb25leV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl CiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7 CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PF9fdGltZXB1bmN0PGNo YXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFz X2ZhY2V0PHRpbWVfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0 ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PHRpbWVfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7 CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1lc3NhZ2VzPGNoYXI+ ID4oY29uc3QgbG9jYWxlJik7CgogZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFj ZXQ8Y3R5cGU8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg ICBib29sCiAgICBoYXNfZmFjZXQ8Y29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+ID4o Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0 PGNvbGxhdGU8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg ICBib29sCiAgICBoYXNfZmFjZXQ8bnVtcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsK CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX3B1dDx3Y2hhcl90 PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19m YWNldDxudW1fZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0 ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2Nh bGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfcHV0 PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAog ICAgaGFzX2ZhY2V0PG1vbmV5X2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRl cm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxfX3RpbWVwdW5jdDx3Y2hhcl90PiA+ KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNl dDx0aW1lX3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUK ICAgIGJvb2wKICAgIGhhc19mYWNldDx0aW1lX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYp OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtZXNzYWdlczx3Y2hh cl90PiA+KGNvbnN0IGxvY2FsZSYpOwp9CiMgNDcgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5j bHVkZS9jKysvMy4yL2xvY2FsZSIgMiAzCiMgMzggIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5j bHVkZS9jKysvMy4yL2JpdHMvb3N0cmVhbS50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0No YXJULF9UcmFpdHM+JiBfX29zKQogICAgOiBfTV9vayhfX29zLmdvb2QoKSksIF9NX29zKF9fb3Mp CiAgICB7CgogICAgICBpZiAoX01fb2sgJiYgX19vcy50aWUoKSkKICAgICAgICBfX29zLnRpZSgp LT5mbHVzaCgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpf X3BmKShfX29zdHJlYW1fdHlwZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsK ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBf X3BmKCp0aGlzKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgq X19wZikoX19pb3NfdHlwZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAg ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3Bm KCp0aGlzKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYp KGlvc19iYXNlJikpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAo X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMp OyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAq dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbikKICAg IHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zYmlu KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYg KCFfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19zYmluLCB0aGlzLT5yZGJ1ZigpKSkKICAgICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAg fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICgh X19zYmluKQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICBy ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChib29sIF9fbikKICAgIHsKICAgICAg c2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01f Zm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhp cywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3Bl cmF0b3I8PChsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAg IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBjaGFyX3R5cGUgX19jID0gdGhpcy0+ZmlsbCgpOwogICAgICAgICAgICAgIGlvc19i YXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxk OwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgYm9vbCBfX2IgPSBmYWxzZTsKICAgICAgICAgICAg ICAgICAgaWYgKChfX2ZtdCAmIGlvc19iYXNlOjpvY3QpIHx8IChfX2ZtdCAmIGlvc19iYXNlOjpo ZXgpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgX19sID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKTsKICAgICAgICAgICAg ICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5m YWlsZWQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2Ms IF9fbikuZmFpbGVkKCk7CiAgICAgICAgICAgICAgICAgIGlmIChfX2IpCiAgICAgICAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24p CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAg ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2No ZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1 dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAg ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwog ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgbG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBf X2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9IHRoaXMtPmZpbGwoKTsK ICAgICAgICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYg aW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01f Zm51bXB1dCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGJvb2wgX19iID0g ZmFsc2U7CiAgICAgICAgICAgICAgICAgIGlmICgoX19mbXQgJiBpb3NfYmFzZTo6b2N0KSB8fCAo X19mbXQgJiBpb3NfYmFzZTo6aGV4KSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX19sOwogICAgICAgICAgICAgICAgICAgICAg X19sID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihfX24pOwogICAgICAgICAgICAg ICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX2wpLmZh aWxlZCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywg X19uKS5mYWlsZWQoKTsKICAgICAgICAgICAgICAgICAgaWYgKF9fYikKICAgICAgICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcg X19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikK ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChf TV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0 LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9 CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhp czsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChkb3VibGUgX19uKQogICAgewogICAgICBzZW50cnkg X19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0 KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlz LT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8 KGxvbmcgZG91YmxlIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAg IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBp ZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxl ZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX24pCiAg ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr X2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgq dGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAg ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46OnB1dChjaGFyX3R5cGUgX19jKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBpbnRfdHlwZSBfX3B1dCA9 IHJkYnVmKCktPnNwdXRjKF9fYyk7CiAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90 eXBlKF9fcHV0LCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+Ojp3cml0ZShjb25zdCBfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAg IHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIHN0cmVhbXNpemUgX19wdXQgPSB0aGlzLT5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbik7CiAg ICAgICAgICBpZiAoIF9fcHV0ICE9IF9fbikKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6 Zmx1c2goKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2Vy YikKICAgICAgICB7CiAgICAgICAgICBpZiAodGhpcy0+cmRidWYoKSAmJiB0aGlzLT5yZGJ1Zigp LT5wdWJzeW5jKCkgPT0gLTEpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz46OnRlbGxwKCkKICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZSgt MSk7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQogICAgICAgIF9fcmV0ID0gdGhpcy0+cmRidWYo KS0+cHVic2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6b3V0KTsKICAgICAgcmV0 dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZWVrcChwb3NfdHlwZSBfX3BvcykKICAgIHsKICAgICAg aWYgKCF0aGlzLT5mYWlsKCkpCiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9 IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjpvdXQpOwoKCiAgICAg ICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICB9CiAgICAgIHJldHVybiAq dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtwKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vl a2RpciBfX2QpCiAgICB7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQogICAgICAgIHsKCgogICAg ICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLCBf X2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW9zX2Jhc2U6Om91dCk7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlw ZSgtMSkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7Cgog ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0 LCBfQ2hhclQgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNl bnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53 aWR0aCgpOwogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJU Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIChfX3cgKyAxKSkpOwogICAgICAg ICAgICAgIF9fcGFkc1swXSA9IF9fYzsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0g MTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQu ZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmX19jLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgIF9fbGVu ID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcGFk cywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAg ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg ICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg KChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsK ICAgIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFy LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYg X19vdXQsIGNoYXIgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwg X1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpz ZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQu d2lkdGgoKTsKICAgICAgICAgICAgICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4o X19idWlsdGluX2FsbG9jYShfX3cgKyAxKSk7CiAgICAgICAgICAgICAgX19wYWRzWzBdID0gX19j OwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOwogICAgICAgICAgICAgIGlmIChf X3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQ8Y2hh ciwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fYywgX193LCBfX2xlbiwg ZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICBfX291dC53cml0ZShfX3BhZHMsIF9fbGVuKTsKICAgICAgICAgICAgICBf X291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19i YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9z X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9 CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19v dXQsIGNvbnN0IF9DaGFyVCogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFt X3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiICYmIF9fcykKICAg ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNp emUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0 YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cp KTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6 ZT4oX1RyYWl0czo6bGVuZ3RoKF9fcykpOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikK ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRz Pjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX193LCBfX2xlbiwgZmFsc2UpOwog ICAgICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0g X193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19s ZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAg ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg X19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291 dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3MpCiAgICAg ICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiBfX291dDsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpCiAgICB7CiAgICAg IHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoK CgogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPGNoYXI+IF9fdHJhaXRzX3R5cGU7CgogICAgICB0 eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChf X2NlcmIgJiYgX19zKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2NsZW4gPSBfX3RyYWl0 c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0 PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX19jbGVuICsgMSkp KTsKICAgICAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fY2xlbjsgKytfX2kpCiAg ICAgICAgICAgIF9fd3NbX19pXSA9IF9fb3V0LndpZGVuKF9fc1tfX2ldKTsKICAgICAgICAgIF9D aGFyVCogX19zdHIgPSBfX3dzOwoKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fY2xlbik7 CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAg ICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9j YShzaXplb2YoX0NoYXJUKSAqIF9fdykpOwoKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4p CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0 cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dzLCBfX3csIF9fbGVuLCBmYWxzZSk7 CiAgICAgICAgICAgICAgICAgIF9fc3RyID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xl biA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3N0 ciwgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAg ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg ICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg KChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3Mp CiAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiBf X291dDsKICAgIH0KCgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt PGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFp dHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29z dHJlYW08Y2hhciwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0 cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3Mp CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJl YW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgY2hhciogX19wYWRzID0g c3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX193KSk7CiAgICAgICAgICAgICAg c3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0 aChfX3MpKTsKCiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICBfX3BhZDxjaGFyLCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBf X291dC5maWxsKCksIF9fcGFkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fcywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBf X3MgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19sZW4pOwogICAgICAgICAgICAg IF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9z X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBp b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3MpCiAgICAgICAgX19vdXQuc2V0c3RhdGUo aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cikKICAgIHsKICAgICAgdHlwZWRl ZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5 cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9f Y2VyYikKICAgICAgICB7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcyA9IF9fc3RyLmRhdGEo KTsKICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgIF9D aGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXpl b2YoX0NoYXJUKSAqIF9fdykpOwogICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19j YXN0PHN0cmVhbXNpemU+KF9fc3RyLnNpemUoKSk7CgoKCiAgICAgICAgICBpZiAoX193ID4gX19s ZW4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+Ojpf U19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLCBfX3MsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAg ICAgICBfX3MgPSBfX3BhZHM7CiAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAg IH0KICAgICAgICAgIHN0cmVhbXNpemUgX19yZXMgPSBfX291dC5yZGJ1ZigpLT5zcHV0bihfX3Ms IF9fbGVuKTsKICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgaWYgKF9fcmVzICE9 IF9fbGVuKQogICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAg ICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBj bGFzcyBiYXNpY19vc3RyZWFtPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBlbmRs KG9zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZW5kcyhvc3RyZWFtJik7CiAg ZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIGZsdXNoKG9zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxh dGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRl IG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIHVuc2lnbmVkIGNoYXIpOwogIGV4dGVybiB0 ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBzaWduZWQgY2hhcik7CiAgZXh0 ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IGNoYXIqKTsK ICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgdW5z aWduZWQgY2hhciopOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJl YW0mLCBjb25zdCBzaWduZWQgY2hhciopOwoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2lj X29zdHJlYW08d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBlbmRsKHdvc3Ry ZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBlbmRzKHdvc3RyZWFtJik7CiAgZXh0 ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBmbHVzaCh3b3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0 ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIHdjaGFyX3QpOwogIGV4dGVybiB0ZW1w bGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNoYXIpOwogIGV4dGVybiB0ZW1w bGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNvbnN0IHdjaGFyX3QqKTsKICBl eHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBjb25zdCBjaGFy Kik7Cgp9CiMgMjc2ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9vc3Ry ZWFtIiAyIDMKIyA3MSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaXRl cmF0b3IiIDIgMwojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2lz dHJlYW0iIDEgMwojIDQzICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9p c3RyZWFtIiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbSA6IHZpcnR1YWwgcHVi bGljIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0 eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6 aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5 cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2Zm X3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVm IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAg IHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4gX19pb3NfdHlwZTsKICAgICAgdHlw ZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAg IHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbWJ1 Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9nZXQ8X0NoYXJULCBfX2lzdHJlYW1idWZfaXRlcj4g X19udW1nZXRfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsK CiAgICBwcm90ZWN0ZWQ6CgogICAgICBzdHJlYW1zaXplIF9NX2djb3VudDsKCiAgICBwdWJsaWM6 CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pc3RyZWFtKF9fc3RyZWFtYnVmX3R5cGUqIF9f c2IpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbml0KF9fc2IpOwogICAgICAgIF9NX2djb3VudCA9 IHN0cmVhbXNpemUoMCk7CiAgICAgIH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX2lzdHJl YW0oKQogICAgICB7IF9NX2djb3VudCA9IHN0cmVhbXNpemUoMCk7IH0KCgogICAgICBjbGFzcyBz ZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7CgoKCiAgICAgIF9faXN0cmVhbV90eXBl JgogICAgICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVhbV90eXBl JikpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pb3NfdHlwZSYg KCpfX3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh dG9yPj4oaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSk7CgoKICAgICAgX19pc3RyZWFtX3R5 cGUmCiAgICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgog ICAgICBvcGVyYXRvcj4+KHNob3J0JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAg IG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYK ICAgICAgb3BlcmF0b3I+PihpbnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAg b3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAg ICAgb3BlcmF0b3I+Pihsb25nJiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9w ZXJhdG9yPj4odW5zaWduZWQgbG9uZyYgX19uKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAg ICAgb3BlcmF0b3I+Pihsb25nIGxvbmcmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAg ICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmIF9fbik7CgoKICAgICAgX19pc3RyZWFt X3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fZik7CgogICAgICBfX2lzdHJlYW1fdHlw ZSYKICAgICAgb3BlcmF0b3I+Pihkb3VibGUmIF9fZik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYK ICAgICAgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBl JgogICAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX3ApOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAg ICAgIG9wZXJhdG9yPj4oX19zdHJlYW1idWZfdHlwZSogX19zYik7CgoKICAgICAgaW5saW5lIHN0 cmVhbXNpemUKICAgICAgZ2NvdW50KHZvaWQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2djb3Vu dDsgfQoKICAgICAgaW50X3R5cGUKICAgICAgZ2V0KHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5 cGUmCiAgICAgIGdldChjaGFyX3R5cGUmIF9fYyk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAg ICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0p OwoKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlKiBfX3Ms IHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5nZXQoX19zLCBfX24sIHRoaXMt PndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChfX3N0cmVh bWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3Ry ZWFtX3R5cGUmCiAgICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiKQogICAgICB7IHJldHVy biB0aGlzLT5nZXQoX19zYiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1f dHlwZSYKICAgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJf dHlwZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0bGlu ZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPmdl dGxpbmUoX19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5 cGUmCiAgICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiA9IDEsIGludF90eXBlIF9fZGVsaW0gPSB0 cmFpdHNfdHlwZTo6ZW9mKCkpOwoKICAgICAgaW50X3R5cGUKICAgICAgcGVlayh2b2lkKTsKCiAg ICAgIF9faXN0cmVhbV90eXBlJgogICAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXpl IF9fbik7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBz dHJlYW1zaXplIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgcHV0YmFjayhjaGFy X3R5cGUgX19jKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICB1bmdldCh2b2lkKTsKCiAg ICAgIGludAogICAgICBzeW5jKHZvaWQpOwoKICAgICAgcG9zX3R5cGUKICAgICAgdGVsbGcodm9p ZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cocG9zX3R5cGUpOwoKICAgICAg X19pc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtnKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2Rpcik7 CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBjbGFzcyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAgewogICAg cHVibGljOgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYg YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAg dHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBl X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgX19pbnRfdHlw ZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHNlbnRyeShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mIF9faXMsIGJvb2wgX19ub3NraXB3cyA9IGZhbHNlKTsKCiAgICAgIG9wZXJhdG9yIGJv b2woKSB7IHJldHVybiBfTV9vazsgfQoKICAgIHByaXZhdGU6CiAgICAgIGJvb2wgX01fb2s7CiAg ICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKTsKCiAgdGVtcGxhdGU8Y2xh c3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRv cj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXImIF9f YykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciY+KF9fYykpOyB9 CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFp dHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX2luLCBz aWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxj aGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+Pihi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCogX19zKTsKCiAgdGVt cGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYKICAg IG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JiBfX2luLCB1bnNpZ25lZCBj aGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIqPihf X3MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFy LF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mIF9f aW4sIHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9j YXN0PGNoYXIqPihfX3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW0KICAgIDogcHVibGljIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiwKICAgICAgcHVibGljIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKCgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVk ZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgoKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAg YmFzaWNfaW9zdHJlYW0oYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAg ICAgIDogX19pc3RyZWFtX3R5cGUoX19zYiksIF9fb3N0cmVhbV90eXBlKF9fc2IpCiAgICAgIHsg fQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaW9zdHJlYW0oKSB7IH0KICAgIH07CgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICB3cyhiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mIF9faXMpOwp9CgoKCgoKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysr LzMuMi9iaXRzL2lzdHJlYW0udGNjIiAxIDMKIyAzNiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9p bmNsdWRlL2MrKy8zLjIvYml0cy9pc3RyZWFtLnRjYyIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgYm9vbCBfX25vc2tpcHdzKQogICAgewogICAgICBpZiAo X19pbi5nb29kKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKF9faW4udGllKCkpCiAgICAgICAg ICAgIF9faW4udGllKCktPmZsdXNoKCk7CiAgICAgICAgICBpZiAoIV9fbm9za2lwd3MgJiYgKF9f aW4uZmxhZ3MoKSAmIGlvc19iYXNlOjpza2lwd3MpKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAg ICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgICAg IF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgaWYgKF9faW4u X01fY2hlY2tfZmFjZXQoX19pbi5fTV9mY3R5cGUpKQogICAgICAgICAgICAgICAgd2hpbGUgKCF0 cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAgICAg ICAmJiBfX2luLl9NX2ZjdHlwZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUo X19jKSkpCiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwoKCgogICAgICAg ICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAg ICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAgICAgICAgfQog ICAgICAgIH0KCiAgICAgIGlmIChfX2luLmdvb2QoKSkKICAgICAgICBfTV9vayA9IHRydWU7CiAg ICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfTV9vayA9IGZhbHNlOwogICAgICAgICAgX19p bi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg b3BlcmF0b3I+PihfX2lzdHJlYW1fdHlwZSYgKCpfX3BmKShfX2lzdHJlYW1fdHlwZSYpKQogICAg ewogICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg b3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkKICAgIHsKICAgICAg X19wZigqdGhpcyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9y Pj4oaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7 CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oYm9vbCYgX19u KQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2Nl cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29k Yml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAg ICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAg ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46OgogICAgb3BlcmF0b3I+PihzaG9ydCYgX19uKQogICAgewogICAgICBzZW50cnkgX19j ZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg dHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9 IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBsb25n IF9fbDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAg ICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19sKTsK CgogICAgICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAg ICAgICAgICAgICYmIChudW1lcmljX2xpbWl0czxzaG9ydD46Om1pbigpIDw9IF9fbAogICAgICAg ICAgICAgICAgICAgICAgJiYgX19sIDw9IG51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWF4KCkpKQog ICAgICAgICAgICAgICAgX19uID0gX19sOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg ICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQog ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1 bnNpZ25lZCBzaG9ydCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxz ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0 YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQo X01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0 aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAg ICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAg ICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg ICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9 IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihpbnQmIF9fbikKICAgIHsK ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAg ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAg ICAgICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N X2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhp cywgX19lcnIsIF9fbCk7CgoKICAgICAgICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpm YWlsYml0KQogICAgICAgICAgICAgICAgICAmJiAobnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkg PD0gX19sCiAgICAgICAgICAgICAgICAgICAgICAmJiBfX2wgPD0gbnVtZXJpY19saW1pdHM8aW50 Pjo6bWF4KCkpKQogICAgICAgICAgICAgICAgX19uID0gX19sOwogICAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4 Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg b3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigq dGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3Nf YmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2No ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0 aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo X19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6 YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyYg X19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChf X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpn b29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAg ICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19u KTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAg ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pCiAgICB7CiAgICAg IHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7 CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAg ICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9N X2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg b3BlcmF0b3I+Pihsb25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp cywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr X2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlz LCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19l cnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg ICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk Yml0KSAhPSAwKQogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxv bmcgbG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAg ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlv c19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51 bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBf X2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAg ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fbikKICAgIHsKICAg ICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAg ICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAg X01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg IG9wZXJhdG9yPj4oZG91YmxlJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs IGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg ICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6 Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19m YWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywg MCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJy KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcgZG91Ymxl JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYg KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6 Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkK ICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBf X24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQog ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX24pCiAgICB7CiAgICAgIHNlbnRy eSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9f ZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAg IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1n ZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRv cj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpCiAgICB7CiAgICAgICBzZW50cnkgX19jZXJi KCp0aGlzLCBmYWxzZSk7CiAgICAgICBpZiAoX19jZXJiKQogICAgICAgICB7CiAgICAgICAgICAg dHJ5CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7 CiAgICAgICAgICAgICAgIGlmIChfX3Nib3V0KQogICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbiA9IHRoaXMtPnJkYnVmKCk7CiAgICAg ICAgICAgICAgICAgICBfX3h0cmN0ID0gX19jb3B5X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2Jpbiwg X19zYm91dCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoIV9fc2JvdXQg fHwgIV9feHRyY3QpCiAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZh aWxiaXQpOwogICAgICAgICAgICAgfQogICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls KQogICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgICB9 CiAgICAgICAgIH0KICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjoKICAgIGdldCh2b2lkKQogICAgewogICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRy YWl0c190eXBlOjplb2YoKTsKICAgICAgaW50X3R5cGUgX19jID0gX19lb2Y7CiAgICAgIF9NX2dj b3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19j ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg X19jID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7CgogICAgICAgICAgICAgIGlmICghdHJhaXRz X3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgX01fZ2NvdW50 ID0gMTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAg ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0 aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX2M7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPjo6CiAgICBnZXQoY2hhcl90eXBlJiBfX2MpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7 CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAg ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50 X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUg X19idWZ2YWwgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICAgICAgICAgaWYgKCF0 cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19idWZ2YWwsIF9fZW9mKSkKICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgX01fZ2NvdW50ID0gMTsKICAgICAgICAgICAgICAgICAgX19j ID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2J1ZnZhbCk7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAg Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19k ZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp cywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190 eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBf X2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBl KiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3Ni LT5zZ2V0YygpOwoKICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50ICsgMSA8IF9fbgogICAg ICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2Yp CiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBf X2lkZWxpbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRy YWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgX19jID0gX19z Yi0+c25leHRjKCk7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2Vv ZikpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAg ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAq X19zID0gY2hhcl90eXBlKCk7CiAgICAgIGlmICghX01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46 OgogICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBfX2RlbGltKQogICAg ewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsK ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2lu dF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJh aXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fdGhpc19z YiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX190aGlzX3Ni LT5zZ2V0YygpOwogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MyID0gdHJhaXRzX3R5cGU6OnRv X2NoYXJfdHlwZShfX2MpOwoKICAgICAgICAgICAgICB3aGlsZSAoIXRyYWl0c190eXBlOjplcV9p bnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6 OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFp dHNfdHlwZTo6ZXFfaW50X3R5cGUoX19zYi5zcHV0YyhfX2MyKSwgX19lb2YpKQogICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAg X19jID0gX190aGlzX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgICAgX19jMiA9IHRyYWl0 c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAg ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKCFfTV9nY291bnQpCiAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRo aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPjo6CiAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9f biwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNl bnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg ICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19p ZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAg Y29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAg X19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50 X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3Vu dCArIDEgPCBfX24KICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRf dHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVx X2ludF90eXBlKF9fYywgX19pZGVsaW0pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAg ICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICArK19NX2djb3Vu dDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2lu dF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmVvZmJpdCk7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pKQog ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fc2ItPnNidW1wYygp OwogICAgICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAg ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICpfX3MgPSBjaGFyX3R5 cGUoKTsKICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBpZ25vcmUo c3RyZWFtc2l6ZSBfX24sIGludF90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9 IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiICYm IF9fbiA+IDApCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAg ICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAg ICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICBfX24gPSBtaW4o X19uLCBudW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCkpOwogICAgICAgICAgICAgIHdo aWxlIChfTV9nY291bnQgPCBfX24KICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBl OjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRz X3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19kZWxpbSkpCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICArK19N X2djb3VudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6 OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgICAgZWxzZSBpZiAodHJhaXRzX3R5cGU6OmVx X2ludF90eXBlKF9fYywgX19kZWxpbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgIF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6 CiAgICBwZWVrKHZvaWQpCiAgICB7CiAgICAgIGludF90eXBlIF9fYyA9IHRyYWl0c190eXBlOjpl b2YoKTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1 ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg IHsgX19jID0gdGhpcy0+cmRidWYoKS0+c2dldGMoKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0 aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19jOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcmVhZChj aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7 CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAg ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fZ2NvdW50 ID0gdGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBfX24pOwogICAgICAgICAgICAgIGlmIChfTV9n Y291bnQgIT0gX19uKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVv ZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFkc29tZShjaGFyX3R5cGUqIF9f cywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRy eSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX251bSA9IHRo aXMtPnJkYnVmKCktPmluX2F2YWlsKCk7CiAgICAgICAgICAgICAgaWYgKF9fbnVtID4gMCkKICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19udW0gPSBtaW4oX19udW0sIF9fbik7 CiAgICAgICAgICAgICAgICAgIGlmIChfX251bSkKICAgICAgICAgICAgICAgICAgICBfTV9nY291 bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIF9fbnVtKTsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6ZW9mYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxi aXQpOwogICAgICByZXR1cm4gX01fZ2NvdW50OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcHV0YmFjayhjaGFy X3R5cGUgX19jKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAg aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg ICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAg ICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAg ICAgIGlmICghX19zYgogICAgICAgICAgICAgICAgICB8fCB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5 cGUoX19zYi0+c3B1dGJhY2tjKF9fYyksIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHVu Z2V0KHZvaWQpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIo KnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNf dHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMt PnJkYnVmKCk7CiAgICAgICAgICAgICAgaWYgKCFfX3NiCiAgICAgICAgICAgICAgICAgIHx8IHRy YWl0c190eXBlOjplcV9pbnRfdHlwZShfX3NiLT5zdW5nZXRjKCksIF9fZW9mKSkKICAgICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAg ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW50 CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3luYyh2b2lkKQogICAg ewogICAgICBpbnQgX19yZXQgPSAtMTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni ID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoX19zYikKICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgaWYgKF9fc2ItPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fcmV0ID0gMDsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6cG9zX3R5cGUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICB0ZWxs Zyh2b2lkKQogICAgewogICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsKICAgICAg X01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlm IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg ICAgIF9fcmV0ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyLCBp b3NfYmFzZTo6aW4pOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K ICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrZyhwb3Nf dHlwZSBfX3BvcykKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5 CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRi dWYoKS0+cHVic2Vla3BvcyhfX3BvcywgaW9zX2Jhc2U6OmluKTsKCgogICAgICAgICAgICAgIGlm IChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICAgICAgfQogICAgICAgICAgY2F0 Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93 OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6 CiAgICBzZWVrZyhvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX19kaXIpCiAgICB7 CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwog ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYo X19vZmYsIF9fZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW4pOwoKCiAgICAgICAgICAgICAgaWYgKF9fZXJyID09 IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JiBfX2luLCBfQ2hhclQmIF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90 eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX2luLmdldChfX2MpOyB9CiAgICAgICAg ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg X19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9faW4u ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19pbi5zZXRz dGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPiYgX19pbiwgX0NoYXJUKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5 cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5 cGVfdHlwZTsKICAgICAgc3RyZWFtc2l6ZSBfX2V4dHJhY3RlZCA9IDA7CgogICAgICB0eXBlbmFt ZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChf X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKCiAgICAgICAgICAg ICAgc3RyZWFtc2l6ZSBfX251bSA9IF9faW4ud2lkdGgoKTsKICAgICAgICAgICAgICBpZiAoX19u dW0gPT0gMCkKICAgICAgICAgICAgICAgIF9fbnVtID0gbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6 ZT46Om1heCgpOwoKICAgICAgICAgICAgICBjb25zdCBfX2N0eXBlX3R5cGUmIF9fY3R5cGUgPSB1 c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfX2luLmdldGxvYygpKTsKICAgICAgICAgICAgICBjb25z dCBpbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFt YnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19j ID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19u dW0gLSAxCiAgICAgICAgICAgICAgICAgICAgICYmIF9fYyAhPSBfX2VvZiAmJiAhX19jdHlwZS5p cyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgKl9fcysrID0gX19jOwogICAgICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAg ICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgICAgICAgICAgX19pbi5zZXRzdGF0 ZShpb3NfYmFzZTo6ZW9mYml0KTsKCgoKICAgICAgICAgICAgICAqX19zID0gY2hhcl90eXBlKCk7 CgogICAgICAgICAgICAgIF9faW4ud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX2lu LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19pbi5leGNl cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGlmICghX19leHRyYWN0ZWQpCiAgICAgICAg X19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAg fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICB3cyhiYXNpY19pc3RyZWFtPF9DaGFyVCxf VHJhaXRzPiYgX19pbikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFt X3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKCiAg ICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+ KF9faW4uZ2V0bG9jKCkpOwogICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6 ZW9mKCk7CiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAg IF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgIHdoaWxlIChfX2MgIT0gX19l b2YgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAgICBfX2MgPSBf X3NiLT5zbmV4dGMoKTsKICAgICAgaWYgKF9fYyA9PSBfX2VvZikKICAgICAgICBfX2luLnNldHN0 YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAgICAgICAgICAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cikKICAgIHsKICAgICAgdHlwZWRlZiBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1i dWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90 eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJp bmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3NpemVfdHlwZSBfX2V4dHJh Y3RlZCA9IDA7CgogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihf X2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgX19zdHIu ZXJhc2UoKTsKICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19pbi53aWR0aCgpOwogICAgICAg ICAgX19zaXplX3R5cGUgX19uOwogICAgICAgICAgX19uID0gX193ID4gMCA/IHN0YXRpY19jYXN0 PF9fc2l6ZV90eXBlPihfX3cpIDogX19zdHIubWF4X3NpemUoKTsKCiAgICAgICAgICBjb25zdCBf X2N0eXBlX3R5cGUmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfX2luLmdldGxv YygpKTsKICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsK ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAg ICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgd2hpbGUgKF9fZXh0 cmFjdGVkIDwgX19uCiAgICAgICAgICAgICAgICAgJiYgX19jICE9IF9fZW9mICYmICFfX2N0eXBl LmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg X19zdHIgKz0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytfX2V4 dHJhY3RlZDsKICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAg fQogICAgICAgICAgaWYgKF9fYyA9PSBfX2VvZikKICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShp b3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgIF9faW4ud2lkdGgoMCk7CiAgICAgICAgfQoKCiAg ICAgIGlmICghX19leHRyYWN0ZWQpCiAgICAgICAgX19pbi5zZXRzdGF0ZSAoaW9zX2Jhc2U6OmZh aWxiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mIF9faW4sCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSkKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9f Y3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlw ZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwoKICAgICAgX19zaXplX3R5cGUgX19leHRyYWN0ZWQg PSAwOwogICAgICBib29sIF9fdGVzdGRlbGltID0gZmFsc2U7CiAgICAgIHR5cGVuYW1lIF9faXN0 cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIHRydWUpOwogICAgICBpZiAoX19jZXJiKQog ICAgICAgIHsKICAgICAgICAgIF9fc3RyLmVyYXNlKCk7CiAgICAgICAgICBfX3NpemVfdHlwZSBf X24gPSBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAgIF9faW50X3R5cGUgX19pZGVsaW0gPSBf VHJhaXRzOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUq IF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNi dW1wYygpOwogICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigp OwogICAgICAgICAgX190ZXN0ZGVsaW0gPSBfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9faWRl bGltKTsKCiAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPD0gX19uCiAgICAgICAgICAgICAg ICAgJiYgIV9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAgICAg JiYgIV9fdGVzdGRlbGltKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHIgKz0gX1Ry YWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAg ICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBfX3Rlc3RkZWxp bSA9IF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pOwogICAgICAgICAgICB9CiAg ICAgICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAg IF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgfQogICAgICBpZiAoIV9f ZXh0cmFjdGVkICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNl OjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPGNsYXNzIF9D aGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJl YW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mIF9faW4sCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxs b2M+JiBfX3N0cikKICAgIHsgcmV0dXJuIGdldGxpbmUoX19pbiwgX19zdHIsIF9faW4ud2lkZW4o J1xuJykpOyB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyZWFtPGNoYXI+ OwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiB3cyhpc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBs YXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNoYXImKTsKICBleHRlcm4gdGVtcGxh dGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgY2hhciopOwogIGV4dGVybiB0ZW1wbGF0 ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCB1bnNpZ25lZCBjaGFyJik7CiAgZXh0ZXJu IHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHNpZ25lZCBjaGFyJik7CiAg ZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHVuc2lnbmVkIGNo YXIqKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgc2ln bmVkIGNoYXIqKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyZWFtPHdjaGFy X3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgd3Mod2lzdHJlYW0mKTsKICBleHRlcm4g dGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCB3Y2hhcl90Jik7CiAgZXh0 ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwgd2NoYXJfdCopOwoK fQojIDI5OCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvaXN0cmVhbSIg MiAzCiMgNzIgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2l0ZXJhdG9y IiAyIDMKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 cmVhbV9pdGVyYXRvci5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdHJlYW1faXRlcmF0b3IuaCIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ2hhclQgPSBjaGFyLAogICAgICAgICAgIHR5 cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LCB0eXBlbmFtZSBfRGlzdCA9IHB0 cmRpZmZfdD4KICAgIGNsYXNzIGlzdHJlYW1faXRlcmF0b3IKICAgICAgOiBwdWJsaWMgaXRlcmF0 b3I8aW5wdXRfaXRlcmF0b3JfdGFnLCBfVHAsIF9EaXN0LCBjb25zdCBfVHAqLCBjb25zdCBfVHAm PgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg IHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIGlzdHJl YW1fdHlwZSogX01fc3RyZWFtOwogICAgICBfVHAgX01fdmFsdWU7CiAgICAgIGJvb2wgX01fb2s7 CgogICAgcHVibGljOgogICAgICBpc3RyZWFtX2l0ZXJhdG9yKCkgOiBfTV9zdHJlYW0oMCksIF9N X29rKGZhbHNlKSB7fQoKICAgICAgaXN0cmVhbV9pdGVyYXRvcihpc3RyZWFtX3R5cGUmIF9fcykg OiBfTV9zdHJlYW0oJl9fcykgeyBfTV9yZWFkKCk7IH0KCiAgICAgIGlzdHJlYW1faXRlcmF0b3Io Y29uc3QgaXN0cmVhbV9pdGVyYXRvciYgX19vYmopCiAgICAgIDogX01fc3RyZWFtKF9fb2JqLl9N X3N0cmVhbSksIF9NX3ZhbHVlKF9fb2JqLl9NX3ZhbHVlKSwKICAgICAgICBfTV9vayhfX29iai5f TV9vaykKICAgICAgeyB9CgogICAgICBjb25zdCBfVHAmCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0 IHsgcmV0dXJuIF9NX3ZhbHVlOyB9CgogICAgICBjb25zdCBfVHAqCiAgICAgIG9wZXJhdG9yLT4o KSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICAgICAgaXN0cmVhbV9pdGVyYXRv ciYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsgX01fcmVhZCgpOyByZXR1cm4gKnRoaXM7IH0K CiAgICAgIGlzdHJlYW1faXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAg ICAgICBpc3RyZWFtX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAgX01fcmVhZCgpOwog ICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAgICAgYm9vbAogICAgICBfTV9lcXVhbChj b25zdCBpc3RyZWFtX2l0ZXJhdG9yJiBfX3gpIGNvbnN0CiAgICAgIHsgcmV0dXJuIChfTV9vayA9 PSBfX3guX01fb2spICYmICghX01fb2sgfHwgX01fc3RyZWFtID09IF9feC5fTV9zdHJlYW0pO30K CiAgICBwcml2YXRlOgogICAgICB2b2lkCiAgICAgIF9NX3JlYWQoKQogICAgICB7CiAgICAgICAg X01fb2sgPSAoX01fc3RyZWFtICYmICpfTV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOwogICAgICAg IGlmIChfTV9vaykKICAgICAgICAgIHsKICAgICAgICAgICAgKl9NX3N0cmVhbSA+PiBfTV92YWx1 ZTsKICAgICAgICAgICAgX01fb2sgPSAqX01fc3RyZWFtID8gdHJ1ZSA6IGZhbHNlOwogICAgICAg ICAgfQogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Rpc3Q+CiAgICBpbmxpbmUgYm9vbAog ICAgb3BlcmF0b3I9PShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBfVHJhaXRz LCBfRGlzdD4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAs IF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fZXF1YWwo X195KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFp dHMsIGNsYXNzIF9EaXN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgaXN0 cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3gsCiAgICAgICAg ICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0 PiYgX195KQogICAgeyByZXR1cm4gIV9feC5fTV9lcXVhbChfX3kpOyB9CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCA9IGNoYXIsCiAgICAgICAgICAgdHlwZW5hbWUg X1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mgb3N0cmVhbV9pdGVyYXRv cgogICAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lk LCB2b2lkLCB2b2lkPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy X3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBi YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gb3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6 CiAgICAgIG9zdHJlYW1fdHlwZSogX01fc3RyZWFtOwogICAgICBjb25zdCBfQ2hhclQqIF9NX3N0 cmluZzsKCiAgICBwdWJsaWM6CiAgICAgIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbV90eXBlJiBf X3MpIDogX01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoMCkge30KCiAgICAgIG9zdHJlYW1faXRl cmF0b3Iob3N0cmVhbV90eXBlJiBfX3MsIGNvbnN0IF9DaGFyVCogX19jKQogICAgICA6IF9NX3N0 cmVhbSgmX19zKSwgX01fc3RyaW5nKF9fYykgeyB9CgogICAgICBvc3RyZWFtX2l0ZXJhdG9yKGNv bnN0IG9zdHJlYW1faXRlcmF0b3ImIF9fb2JqKQogICAgICA6IF9NX3N0cmVhbShfX29iai5fTV9z dHJlYW0pLCBfTV9zdHJpbmcoX19vYmouX01fc3RyaW5nKSB7IH0KCiAgICAgIG9zdHJlYW1faXRl cmF0b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCBfVHAmIF9fdmFsdWUpCiAgICAgIHsKICAgICAg ICAqX01fc3RyZWFtIDw8IF9fdmFsdWU7CiAgICAgICAgaWYgKF9NX3N0cmluZykgKl9NX3N0cmVh bSA8PCBfTV9zdHJpbmc7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBvc3Ry ZWFtX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKICAgICAg b3N0cmVhbV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9Cgog ICAgICBvc3RyZWFtX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRo aXM7IH0KICAgIH07Cn0KIyA3MyAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8z LjIvaXRlcmF0b3IiIDIgMwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z dC9pdGVyYXRvci5ocHAiIDIgMwoKCgpuYW1lc3BhY2UgYm9vc3QKewojIDQwICIvaG9tZS9jb21w YmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9pdGVyYXRvci5ocHAiIDMKICBuYW1lc3BhY2UgZGV0 YWlsIHsKICAgdGVtcGxhdGUgPGNsYXNzIENhdGVnb3J5LCBjbGFzcyBULCBjbGFzcyBEaXN0YW5j ZSwgY2xhc3MgUG9pbnRlciwgY2xhc3MgUmVmZXJlbmNlPgoKICAgc3RydWN0IGl0ZXJhdG9yX2Jh c2UgOiBzdGQ6Oml0ZXJhdG9yPENhdGVnb3J5LCBULCBEaXN0YW5jZSwgUG9pbnRlciwgUmVmZXJl bmNlPiB7fTsKIyA1MiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvaXRlcmF0 b3IuaHBwIiAzCiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2F0ZWdvcnksIGNsYXNzIFQsIGNsYXNz IERpc3RhbmNlID0gc3RkOjpwdHJkaWZmX3QsCiAgICAgICAgICAgIGNsYXNzIFBvaW50ZXIgPSBU KiwgY2xhc3MgUmVmZXJlbmNlID0gVCY+CiAgIHN0cnVjdCBpdGVyYXRvciA6IGRldGFpbDo6aXRl cmF0b3JfYmFzZTxDYXRlZ29yeSwgVCwgRGlzdGFuY2UsIFBvaW50ZXIsIFJlZmVyZW5jZT4ge307 Cgp9CiMgNjIgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2RldGFpbC9pdGVy YXRvci5ocHAiIDIgMwojIDg5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9k ZXRhaWwvaXRlcmF0b3IuaHBwIiAzCm5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBkZXRhaWwg ewoKdXNpbmcgc3RkOjppdGVyYXRvcl90cmFpdHM7CnVzaW5nIHN0ZDo6ZGlzdGFuY2U7CiMgMzgw ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9kZXRhaWwvaXRlcmF0b3IuaHBw IiAzCn19CiMgMjcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2FycmF5Lmhw cCIgMiAzCgoKCgoKbmFtZXNwYWNlIGJvb3N0IHsKCiAgICB0ZW1wbGF0ZTxjbGFzcyBULCBzdGQ6 OnNpemVfdCBOPgogICAgY2xhc3MgYXJyYXkgewogICAgICBwdWJsaWM6CiAgICAgICAgVCBlbGVt c1tOXTsKCiAgICAgIHB1YmxpYzoKCiAgICAgICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7CiAgICAg ICAgdHlwZWRlZiBUKiBpdGVyYXRvcjsKICAgICAgICB0eXBlZGVmIGNvbnN0IFQqIGNvbnN0X2l0 ZXJhdG9yOwogICAgICAgIHR5cGVkZWYgVCYgcmVmZXJlbmNlOwogICAgICAgIHR5cGVkZWYgY29u c3QgVCYgY29uc3RfcmVmZXJlbmNlOwogICAgICAgIHR5cGVkZWYgc3RkOjpzaXplX3Qgc2l6ZV90 eXBlOwogICAgICAgIHR5cGVkZWYgc3RkOjpwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKCiAg ICAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBlbGVtczsgfQogICAgICAgIGNvbnN0X2l0 ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gZWxlbXM7IH0KICAgICAgICBpdGVyYXRvciBl bmQoKSB7IHJldHVybiBlbGVtcytOOyB9CiAgICAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29u c3QgeyByZXR1cm4gZWxlbXMrTjsgfQoKCgogICAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0 ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwogICAgICAgIHR5cGVkZWYgc3RkOjpy ZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwoj IDcxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9hcnJheS5ocHAiIDMKICAg ICAgICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3Io ZW5kKCkpOyB9CiAgICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7 CiAgICAgICAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsKICAgICAg ICB9CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVy YXRvcihiZWdpbigpKTsgfQogICAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNv bnN0IHsKICAgICAgICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7 CiAgICAgICAgfQoKCiAgICAgICAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIGkpIHsg cmV0dXJuIGVsZW1zW2ldOyB9CiAgICAgICAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6 ZV90eXBlIGkpIGNvbnN0IHsgcmV0dXJuIGVsZW1zW2ldOyB9CgoKICAgICAgICByZWZlcmVuY2Ug YXQoc2l6ZV90eXBlIGkpIHsgcmFuZ2VjaGVjayhpKTsgcmV0dXJuIGVsZW1zW2ldOyB9CiAgICAg ICAgY29uc3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBpKSBjb25zdCB7IHJhbmdlY2hlY2soaSk7 IHJldHVybiBlbGVtc1tpXTsgfQoKCiAgICAgICAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4g ZWxlbXNbMF07IH0KICAgICAgICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVy biBlbGVtc1swXTsgfQogICAgICAgIHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gZWxlbXNbTi0x XTsgfQogICAgICAgIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gZWxlbXNb Ti0xXTsgfQoKCiAgICAgICAgc3RhdGljIHNpemVfdHlwZSBzaXplKCkgeyByZXR1cm4gTjsgfQog ICAgICAgIHN0YXRpYyBib29sIGVtcHR5KCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICBzdGF0 aWMgc2l6ZV90eXBlIG1heF9zaXplKCkgeyByZXR1cm4gTjsgfQogICAgICAgIGVudW0geyBzdGF0 aWNfc2l6ZSA9IE4gfTsKCgogICAgICAgIHZvaWQgc3dhcCAoYXJyYXk8VCxOPiYgeSkgewogICAg ICAgICAgICBzdGQ6OnN3YXBfcmFuZ2VzKGJlZ2luKCksZW5kKCkseS5iZWdpbigpKTsKICAgICAg ICB9CgoKICAgICAgICBjb25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gZWxlbXM7IH0KCgog ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUMj4KICAgICAgICBhcnJheTxULE4+JiBvcGVyYXRv cj0gKGNvbnN0IGFycmF5PFQyLE4+JiByaHMpIHsKICAgICAgICAgICAgc3RkOjpjb3B5KHJocy5i ZWdpbigpLHJocy5lbmQoKSwgYmVnaW4oKSk7CiAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAg ICAgICB9CgoKICAgICAgICB2b2lkIGFzc2lnbiAoY29uc3QgVCYgdmFsdWUpCiAgICAgICAgewog ICAgICAgICAgICBzdGQ6OmZpbGxfbihiZWdpbigpLHNpemUoKSx2YWx1ZSk7CiAgICAgICAgfQoK CiAgICAgIHByaXZhdGU6CgoKICAgICAgICBzdGF0aWMgdm9pZCByYW5nZWNoZWNrIChzaXplX3R5 cGUgaSkgewogICAgICAgICAgICBpZiAoaSA+PSBzaXplKCkpIHsgdGhyb3cgc3RkOjpyYW5nZV9l cnJvcigiYXJyYXkiKTsgfQogICAgICAgIH0KCiAgICB9OwoKCiAgICB0ZW1wbGF0ZTxjbGFzcyBU LCBzdGQ6OnNpemVfdCBOPgogICAgYm9vbCBvcGVyYXRvcj09IChjb25zdCBhcnJheTxULE4+JiB4 LCBjb25zdCBhcnJheTxULE4+JiB5KSB7CiAgICAgICAgcmV0dXJuIHN0ZDo6ZXF1YWwoeC5iZWdp bigpLCB4LmVuZCgpLCB5LmJlZ2luKCkpOwogICAgfQogICAgdGVtcGxhdGU8Y2xhc3MgVCwgc3Rk OjpzaXplX3QgTj4KICAgIGJvb2wgb3BlcmF0b3I8IChjb25zdCBhcnJheTxULE4+JiB4LCBjb25z dCBhcnJheTxULE4+JiB5KSB7CiAgICAgICAgcmV0dXJuIHN0ZDo6bGV4aWNvZ3JhcGhpY2FsX2Nv bXBhcmUoeC5iZWdpbigpLHguZW5kKCkseS5iZWdpbigpLHkuZW5kKCkpOwogICAgfQogICAgdGVt cGxhdGU8Y2xhc3MgVCwgc3RkOjpzaXplX3QgTj4KICAgIGJvb2wgb3BlcmF0b3IhPSAoY29uc3Qg YXJyYXk8VCxOPiYgeCwgY29uc3QgYXJyYXk8VCxOPiYgeSkgewogICAgICAgIHJldHVybiAhKHg9 PXkpOwogICAgfQogICAgdGVtcGxhdGU8Y2xhc3MgVCwgc3RkOjpzaXplX3QgTj4KICAgIGJvb2wg b3BlcmF0b3I+IChjb25zdCBhcnJheTxULE4+JiB4LCBjb25zdCBhcnJheTxULE4+JiB5KSB7CiAg ICAgICAgcmV0dXJuIHk8eDsKICAgIH0KICAgIHRlbXBsYXRlPGNsYXNzIFQsIHN0ZDo6c2l6ZV90 IE4+CiAgICBib29sIG9wZXJhdG9yPD0gKGNvbnN0IGFycmF5PFQsTj4mIHgsIGNvbnN0IGFycmF5 PFQsTj4mIHkpIHsKICAgICAgICByZXR1cm4gISh5PHgpOwogICAgfQogICAgdGVtcGxhdGU8Y2xh c3MgVCwgc3RkOjpzaXplX3QgTj4KICAgIGJvb2wgb3BlcmF0b3I+PSAoY29uc3QgYXJyYXk8VCxO PiYgeCwgY29uc3QgYXJyYXk8VCxOPiYgeSkgewogICAgICAgIHJldHVybiAhKHg8eSk7CiAgICB9 CgoKICAgIHRlbXBsYXRlPGNsYXNzIFQsIHN0ZDo6c2l6ZV90IE4+CiAgICBpbmxpbmUgdm9pZCBz d2FwIChhcnJheTxULE4+JiB4LCBhcnJheTxULE4+JiB5KSB7CiAgICAgICAgeC5zd2FwKHkpOwog ICAgfQoKfQojIDIwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9h cnJheS9yYW5nZV9saXN0LmhwcCIgMiAzCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgZGV0 YWlsIHsKbmFtZXNwYWNlIG11bHRpX2FycmF5IHsKCgoKCgpzdHJ1Y3QgY2hvb3NlX3JhbmdlX2xp c3RfbiB7CiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE51bVJhbmdlcz4KICBz dHJ1Y3QgYmluZCB7CiAgICB0eXBlZGVmIGJvb3N0OjphcnJheTxULE51bVJhbmdlcz4gdHlwZTsK ICB9Owp9OwoKc3RydWN0IGNob29zZV9yYW5nZV9saXN0X3plcm8gewogIHRlbXBsYXRlIDx0eXBl bmFtZSBULCBzdGQ6OnNpemVfdCBOdW1SYW5nZXM+CiAgc3RydWN0IGJpbmQgewogICAgdHlwZWRl ZiBib29zdDo6YXJyYXk8VCwxPiB0eXBlOwogIH07Cn07CgoKdGVtcGxhdGUgPHN0ZDo6c2l6ZV90 IE51bVJhbmdlcz4Kc3RydWN0IHJhbmdlX2xpc3RfZ2VuX2hlbHBlciB7CiAgdHlwZWRlZiBjaG9v c2VfcmFuZ2VfbGlzdF9uIGNob2ljZTsKfTsKCnRlbXBsYXRlIDw+CnN0cnVjdCByYW5nZV9saXN0 X2dlbl9oZWxwZXI8MD4gewogIHR5cGVkZWYgY2hvb3NlX3JhbmdlX2xpc3RfemVybyBjaG9pY2U7 Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTnVtUmFuZ2VzPgpzdHJ1Y3Qg cmFuZ2VfbGlzdF9nZW5lcmF0b3Igewpwcml2YXRlOgogIHR5cGVkZWYgdHlwZW5hbWUgcmFuZ2Vf bGlzdF9nZW5faGVscGVyPE51bVJhbmdlcz46OmNob2ljZSBDaG9pY2U7CnB1YmxpYzoKICB0eXBl ZGVmIHR5cGVuYW1lIENob2ljZTo6dGVtcGxhdGUgYmluZDxULE51bVJhbmdlcz46OnR5cGUgdHlw ZTsKfTsKCgoKCgp9Cn0KfQojIDE4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z dC9tdWx0aV9hcnJheS9leHRlbnRfZ2VuLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUt YmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvdHlwZXMuaHBwIiAxIDMKIyAyMiAiL2hvbWUv Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvdHlwZXMuaHBwIiAzCm5h bWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBkZXRhaWwgewpuYW1lc3BhY2UgbXVsdGlfYXJyYXl7 CgoKdHlwZWRlZiBzdGQ6OnNpemVfdCBzaXplX3R5cGU7CnR5cGVkZWYgaW50IGluZGV4OwoKfQp9 Cn0KIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkv ZXh0ZW50X2dlbi5ocHAiIDIgMwoKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgZGV0YWls IHsKbmFtZXNwYWNlIG11bHRpX2FycmF5IHsKCgp0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTnVtUmFu Z2VzPgpjbGFzcyBleHRlbnRfZ2VuIHsKcHVibGljOgogIHR5cGVkZWYgYm9vc3Q6OmRldGFpbDo6 bXVsdGlfYXJyYXk6OmluZGV4IGluZGV4OwogIHR5cGVkZWYgYm9vc3Q6OmRldGFpbDo6bXVsdGlf YXJyYXk6OnNpemVfdHlwZSBzaXplX3R5cGU7CnByaXZhdGU6CiAgdHlwZWRlZiBleHRlbnRfcmFu Z2U8aW5kZXgsc2l6ZV90eXBlPiByYW5nZTsKICB0eXBlZGVmIHR5cGVuYW1lIHJhbmdlX2xpc3Rf Z2VuZXJhdG9yPHJhbmdlLE51bVJhbmdlcz46OnR5cGUgcmFuZ2VfbGlzdDsKcHVibGljOgogIHRl bXBsYXRlIDxzdGQ6OnNpemVfdCBSYW5nZXM+CiAgc3RydWN0IGdlbl90eXBlIHsKICAgIHR5cGVk ZWYgZXh0ZW50X2dlbjxSYW5nZXM+IHR5cGU7CiAgfTsKCiAgcmFuZ2VfbGlzdCByYW5nZXNfOwoK ICBleHRlbnRfZ2VuKCkgeyB9CgoKICBleHRlbnRfZ2VuKGNvbnN0IGV4dGVudF9nZW48TnVtUmFu Z2VzLTE+JiByaHMsCiAgICAgICAgICAgIGNvbnN0IHJhbmdlJiBhX3JhbmdlKQogIHsKICAgIHN0 ZDo6Y29weShyaHMucmFuZ2VzXy5iZWdpbigpLHJocy5yYW5nZXNfLmVuZCgpLHJhbmdlc18uYmVn aW4oKSk7CiAgICAqcmFuZ2VzXy5yYmVnaW4oKSA9IGFfcmFuZ2U7CiAgfQoKICBleHRlbnRfZ2Vu PE51bVJhbmdlcysxPgogIG9wZXJhdG9yW10oY29uc3QgcmFuZ2UmIGFfcmFuZ2UpCiAgewogICAg cmV0dXJuIGV4dGVudF9nZW48TnVtUmFuZ2VzKzE+KCp0aGlzLGFfcmFuZ2UpOwogIH0KCiAgZXh0 ZW50X2dlbjxOdW1SYW5nZXMrMT4KICBvcGVyYXRvcltdKGluZGV4IGlkeCkKICB7CiAgICByZXR1 cm4gZXh0ZW50X2dlbjxOdW1SYW5nZXMrMT4oKnRoaXMscmFuZ2UoMCxpZHgpKTsKICB9CgogIHN0 YXRpYyBleHRlbnRfZ2VuPDA+IGV4dGVudHMoKSB7CiAgICByZXR1cm4gZXh0ZW50X2dlbjwwPigp OwogIH0KfTsKCn0KfQp9CiMgMjMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0 L211bHRpX2FycmF5L2Jhc2UuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j bHVkZS9ib29zdC9tdWx0aV9hcnJheS9pbmRleF9yYW5nZS5ocHAiIDEgMwojIDE4ICIvaG9tZS9j b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS9pbmRleF9yYW5nZS5ocHAi IDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9saW1pdHMuaHBwIiAx IDMKIyAxOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkv aW5kZXhfcmFuZ2UuaHBwIiAyIDMKIyAyOCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv Ym9vc3QvbXVsdGlfYXJyYXkvaW5kZXhfcmFuZ2UuaHBwIiAzCm5hbWVzcGFjZSBib29zdCB7Cm5h bWVzcGFjZSBkZXRhaWwgewpuYW1lc3BhY2UgbXVsdGlfYXJyYXkgewoKICB0ZW1wbGF0ZSA8dHlw ZW5hbWUgSW5kZXgsdHlwZW5hbWUgU2l6ZVR5cGU+CiAgY2xhc3MgaW5kZXhfcmFuZ2UgewogIHB1 YmxpYzoKICAgIHR5cGVkZWYgSW5kZXggaW5kZXg7CiAgICB0eXBlZGVmIFNpemVUeXBlIHNpemVf dHlwZTsKCiAgICBpbmRleF9yYW5nZSgpCiAgICB7CiAgICAgIHN0YXJ0XyA9IGZyb21fc3RhcnQo KTsKICAgICAgZmluaXNoXyA9IHRvX2VuZCgpOwogICAgICBzdHJpZGVfID0gMTsKICAgICAgZGVn ZW5lcmF0ZV8gPSBmYWxzZTsKICAgIH0KCiAgICBleHBsaWNpdCBpbmRleF9yYW5nZShpbmRleCBw b3MpCiAgICB7CiAgICAgIHN0YXJ0XyA9IHBvczsKICAgICAgZmluaXNoXyA9IHBvczsKICAgICAg c3RyaWRlXyA9IDE7CiAgICAgIGRlZ2VuZXJhdGVfID0gdHJ1ZTsKICAgIH0KCiAgICBleHBsaWNp dCBpbmRleF9yYW5nZShpbmRleCBzdGFydCwgaW5kZXggZmluaXNoLCBpbmRleCBzdHJpZGU9MSkK ICAgICAgOiBzdGFydF8oc3RhcnQpLCBmaW5pc2hfKGZpbmlzaCksIHN0cmlkZV8oc3RyaWRlKSwK ICAgICAgICBkZWdlbmVyYXRlXyhzdGFydF8gPT0gZmluaXNoXykKICAgIHsgfQoKCgogICAgaW5k ZXhfcmFuZ2UmIHN0YXJ0KGluZGV4IHMpIHsKICAgICAgc3RhcnRfID0gczsKICAgICAgZGVnZW5l cmF0ZV8gPSAoc3RhcnRfID09IGZpbmlzaF8pOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog ICAgaW5kZXhfcmFuZ2UmIGZpbmlzaChpbmRleCBmKSB7CiAgICAgIGZpbmlzaF8gPSBmOwogICAg ICBkZWdlbmVyYXRlXyA9IChzdGFydF8gPT0gZmluaXNoXyk7CiAgICAgIHJldHVybiAqdGhpczsK ICAgIH0KCiAgICBpbmRleF9yYW5nZSYgc3RyaWRlKGluZGV4IHMpIHsgc3RyaWRlXyA9IHM7IHJl dHVybiAqdGhpczsgfQoKICAgIGluZGV4IHN0YXJ0KCkgY29uc3QKICAgIHsKICAgICAgcmV0dXJu IHN0YXJ0XzsKICAgIH0KCiAgICBpbmRleCBnZXRfc3RhcnQoaW5kZXggbG93X2luZGV4X3Jhbmdl ID0gMCkgY29uc3QKICAgIHsKICAgICAgaWYgKHN0YXJ0XyA9PSBmcm9tX3N0YXJ0KCkpCiAgICAg ICAgcmV0dXJuIGxvd19pbmRleF9yYW5nZTsKICAgICAgcmV0dXJuIHN0YXJ0XzsKICAgIH0KCiAg ICBpbmRleCBmaW5pc2goKSBjb25zdAogICAgewogICAgICByZXR1cm4gZmluaXNoXzsKICAgIH0K CiAgICBpbmRleCBnZXRfZmluaXNoKGluZGV4IGhpZ2hfaW5kZXhfcmFuZ2UgPSAwKSBjb25zdAog ICAgewogICAgICBpZiAoZmluaXNoXyA9PSB0b19lbmQoKSkKICAgICAgICByZXR1cm4gaGlnaF9p bmRleF9yYW5nZTsKICAgICAgcmV0dXJuIGZpbmlzaF87CiAgICB9CgogICAgc2l6ZV90eXBlIHNp emUoaW5kZXggcmVjb21tZW5kZWRfbGVuZ3RoID0gMCkgY29uc3QKICAgIHsKICAgICAgaWYgKChz dGFydF8gPT0gZnJvbV9zdGFydCgpKSB8fCAoZmluaXNoXyA9PSB0b19lbmQoKSkpCiAgICAgICAg cmV0dXJuIHJlY29tbWVuZGVkX2xlbmd0aDsKICAgICAgZWxzZQogICAgICAgIHJldHVybiAoZmlu aXNoXyAtIHN0YXJ0XykgLyBzdHJpZGVfOwogICAgfQoKICAgIGluZGV4IHN0cmlkZSgpIGNvbnN0 IHsgcmV0dXJuIHN0cmlkZV87IH0KCiAgICBib29sIGlzX2FzY2VuZGluZ19jb250aWd1b3VzKCkg Y29uc3QKICAgIHsKICAgICAgcmV0dXJuIChzdGFydF8gPCBmaW5pc2hfKSAmJiBpc191bml0X3N0 cmlkZSgpOwogICAgfQoKICAgIHZvaWQgc2V0X2luZGV4X3JhbmdlKGluZGV4IHN0YXJ0LCBpbmRl eCBmaW5pc2gsIGluZGV4IHN0cmlkZT0xKQogICAgewogICAgICBzdGFydF8gPSBzdGFydDsKICAg ICAgZmluaXNoXyA9IGZpbmlzaDsKICAgICAgc3RyaWRlXyA9IHN0cmlkZTsKICAgIH0KCiAgICBz dGF0aWMgaW5kZXhfcmFuZ2UgYWxsKCkKICAgIHsgcmV0dXJuIGluZGV4X3JhbmdlKGZyb21fc3Rh cnQoKSwgdG9fZW5kKCksIDEpOyB9CgogICAgYm9vbCBpc191bml0X3N0cmlkZSgpIGNvbnN0CiAg ICB7IHJldHVybiBzdHJpZGVfID09IDE7IH0KCiAgICBib29sIGlzX2RlZ2VuZXJhdGUoKSBjb25z dCB7IHJldHVybiBkZWdlbmVyYXRlXzsgfQoKICAgIGluZGV4X3JhbmdlIG9wZXJhdG9yLShpbmRl eCBzaGlmdCkgY29uc3QKICAgIHsKICAgICAgcmV0dXJuIGluZGV4X3JhbmdlKHN0YXJ0XyAtIHNo aWZ0LCBmaW5pc2hfIC0gc2hpZnQsIHN0cmlkZV8pOwogICAgfQoKICAgIGluZGV4X3JhbmdlIG9w ZXJhdG9yKyhpbmRleCBzaGlmdCkgY29uc3QKICAgIHsKICAgICAgcmV0dXJuIGluZGV4X3Jhbmdl KHN0YXJ0XyArIHNoaWZ0LCBmaW5pc2hfICsgc2hpZnQsIHN0cmlkZV8pOwogICAgfQoKICAgIGlu ZGV4IG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QKICAgIHsKICAgICAgcmV0dXJuIHN0YXJ0 XyArIGkgKiBzdHJpZGVfOwogICAgfQoKICAgIGluZGV4IG9wZXJhdG9yKCkodW5zaWduZWQgaSkg Y29uc3QKICAgIHsKICAgICAgcmV0dXJuIHN0YXJ0XyArIGkgKiBzdHJpZGVfOwogICAgfQoKCgog IHByaXZhdGU6CiAgICBzdGF0aWMgaW5kZXggZnJvbV9zdGFydCgpCiAgICAgIHsgcmV0dXJuIHN0 ZDo6bnVtZXJpY19saW1pdHM8aW5kZXg+OjptaW4oKTsgfQoKICAgIHN0YXRpYyBpbmRleCB0b19l bmQoKQogICAgICB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGluZGV4Pjo6bWF4KCk7IH0K ICBwdWJsaWM6CiAgICBpbmRleCBzdGFydF8sIGZpbmlzaF8sIHN0cmlkZV87CiAgICBib29sIGRl Z2VuZXJhdGVfOwogIH07CgoKCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW5kZXgsIHR5cGVuYW1l IFNpemVUeXBlPgogIGlubGluZSBpbmRleF9yYW5nZTxJbmRleCxTaXplVHlwZT4KICBvcGVyYXRv cjw9KEluZGV4IHMsIGNvbnN0IGluZGV4X3JhbmdlPEluZGV4LFNpemVUeXBlPiYgcikKICB7CiAg ICByZXR1cm4gaW5kZXhfcmFuZ2U8SW5kZXgsU2l6ZVR5cGU+KHMsIHIuZmluaXNoKCksIHIuc3Ry aWRlKCkpOwogIH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBJbmRleCwgdHlwZW5hbWUgU2l6ZVR5 cGU+CiAgaW5saW5lIGluZGV4X3JhbmdlPEluZGV4LFNpemVUeXBlPgogIG9wZXJhdG9yPChJbmRl eCBzLCBjb25zdCBpbmRleF9yYW5nZTxJbmRleCxTaXplVHlwZT4mIHIpCiAgewogICAgcmV0dXJu IGluZGV4X3JhbmdlPEluZGV4LFNpemVUeXBlPihzICsgMSwgci5maW5pc2goKSwgci5zdHJpZGUo KSk7CiAgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4LCB0eXBlbmFtZSBTaXplVHlwZT4K ICBpbmxpbmUgaW5kZXhfcmFuZ2U8SW5kZXgsU2l6ZVR5cGU+CiAgb3BlcmF0b3I8KGNvbnN0IGlu ZGV4X3JhbmdlPEluZGV4LFNpemVUeXBlPiYgciwgSW5kZXggZikKICB7CiAgICByZXR1cm4gaW5k ZXhfcmFuZ2U8SW5kZXgsU2l6ZVR5cGU+KHIuc3RhcnQoKSwgZiwgci5zdHJpZGUoKSk7CiAgfQoK CiAgdGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4LCB0eXBlbmFtZSBTaXplVHlwZT4KICBpbmxpbmUg aW5kZXhfcmFuZ2U8SW5kZXgsU2l6ZVR5cGU+CiAgb3BlcmF0b3I8PShjb25zdCBpbmRleF9yYW5n ZTxJbmRleCxTaXplVHlwZT4mIHIsIEluZGV4IGYpCiAgewogICAgcmV0dXJuIGluZGV4X3Jhbmdl PEluZGV4LFNpemVUeXBlPihyLnN0YXJ0KCksIGYgKyAxLCByLnN0cmlkZSgpKTsKICB9Cgp9Cn0K fQojIDI0ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS9i YXNlLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVs dGlfYXJyYXkvaW5kZXhfZ2VuLmhwcCIgMSAzCiMgMjMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9p bmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L2luZGV4X2dlbi5ocHAiIDMKbmFtZXNwYWNlIGJvb3N0 IHsKbmFtZXNwYWNlIGRldGFpbCB7Cm5hbWVzcGFjZSBtdWx0aV9hcnJheSB7CgoKdGVtcGxhdGUg PGludCBOdW1SYW5nZXMsIGludCBOdW1EaW1zPgpzdHJ1Y3QgaW5kZXhfZ2VuIHsKcHJpdmF0ZToK ICB0eXBlZGVmIGluZGV4IEluZGV4OwogIHR5cGVkZWYgc3RkOjpzaXplX3QgU2l6ZVR5cGU7CiAg dHlwZWRlZiBpbmRleF9yYW5nZTxJbmRleCxTaXplVHlwZT4gcmFuZ2U7CnB1YmxpYzoKICB0ZW1w bGF0ZSA8aW50IERpbXMsIGludCBSYW5nZXM+CiAgc3RydWN0IGdlbl90eXBlIHsKICAgIHR5cGVk ZWYgaW5kZXhfZ2VuPFJhbmdlcyxEaW1zPiB0eXBlOwogIH07CgogIHR5cGVkZWYgdHlwZW5hbWUg cmFuZ2VfbGlzdF9nZW5lcmF0b3I8cmFuZ2UsTnVtUmFuZ2VzPjo6dHlwZSByYW5nZV9saXN0Owog IHJhbmdlX2xpc3QgcmFuZ2VzXzsKCiAgaW5kZXhfZ2VuKCkgeyB9CgogIHRlbXBsYXRlIDxpbnQg TkQ+CiAgZXhwbGljaXQgaW5kZXhfZ2VuKGNvbnN0IGluZGV4X2dlbjxOdW1SYW5nZXMtMSxORD4m IHJocywKICAgICAgICAgICAgY29uc3QgaW5kZXhfcmFuZ2U8SW5kZXgsU2l6ZVR5cGU+JiByYW5n ZSkKICB7CiAgICBzdGQ6OmNvcHkocmhzLnJhbmdlc18uYmVnaW4oKSxyaHMucmFuZ2VzXy5lbmQo KSxyYW5nZXNfLmJlZ2luKCkpOwogICAgKnJhbmdlc18ucmJlZ2luKCkgPSByYW5nZTsKICB9Cgog IGluZGV4X2dlbjxOdW1SYW5nZXMrMSxOdW1EaW1zKzE+CiAgb3BlcmF0b3JbXShjb25zdCBpbmRl eF9yYW5nZTxJbmRleCxTaXplVHlwZT4mIHJhbmdlKSBjb25zdAogIHsKICAgIGluZGV4X2dlbjxO dW1SYW5nZXMrMSxOdW1EaW1zKzE+IHRtcDsKICAgIHN0ZDo6Y29weShyYW5nZXNfLmJlZ2luKCks cmFuZ2VzXy5lbmQoKSx0bXAucmFuZ2VzXy5iZWdpbigpKTsKICAgICp0bXAucmFuZ2VzXy5yYmVn aW4oKSA9IHJhbmdlOwogICAgcmV0dXJuIHRtcDsKICB9CgogIGluZGV4X2dlbjxOdW1SYW5nZXMr MSxOdW1EaW1zPgogIG9wZXJhdG9yW10oSW5kZXggaWR4KSBjb25zdAogIHsKICAgIGluZGV4X2dl bjxOdW1SYW5nZXMrMSxOdW1EaW1zPiB0bXA7CiAgICBzdGQ6OmNvcHkocmFuZ2VzXy5iZWdpbigp LHJhbmdlc18uZW5kKCksdG1wLnJhbmdlc18uYmVnaW4oKSk7CiAgICAqdG1wLnJhbmdlc18ucmJl Z2luKCkgPSBpbmRleF9yYW5nZTxJbmRleCxTaXplVHlwZT4oaWR4KTsKICAgIHJldHVybiB0bXA7 CiAgfQoKICBzdGF0aWMgaW5kZXhfZ2VuPDAsMD4gaW5kaWNlcygpIHsKICAgIHJldHVybiBpbmRl eF9nZW48MCwwPigpOwogIH0KfTsKCn0KfQp9CiMgMjUgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9p bmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L2Jhc2UuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlv L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS9zdG9yYWdlX29yZGVyLmhwcCIgMSAz CiMgMTggIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L3N0 b3JhZ2Vfb3JkZXIuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v c3QvbXVsdGlfYXJyYXkvYWxnb3JpdGhtLmhwcCIgMSAzCiMgNDQgIi9ob21lL2NvbXBiaW8vZDk1 LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L2FsZ29yaXRobS5ocHAiIDMKbmFtZXNwYWNl IGJvb3N0IHsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyLCBjbGFzcyBTaXplLCBjbGFz cyBPdXRwdXRJdGVyPgpPdXRwdXRJdGVyIGNvcHlfbihJbnB1dEl0ZXIgZmlyc3QsIFNpemUgY291 bnQsCiAgICAgICAgICAgICAgICAgIE91dHB1dEl0ZXIgcmVzdWx0KSB7CiAgZm9yICggOyBjb3Vu dCA+IDA7IC0tY291bnQpIHsKICAgICpyZXN1bHQgPSAqZmlyc3Q7CiAgICArK2ZpcnN0OwogICAg KytyZXN1bHQ7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KIyA5OCAiL2hvbWUvY29tcGJpby9kOTUt YmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvYWxnb3JpdGhtLmhwcCIgMwp9CiMgMTkgIi9o b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L3N0b3JhZ2Vfb3Jk ZXIuaHBwIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4y L2Z1bmN0aW9uYWwiIDEgMwojIDUzICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysr LzMuMi9mdW5jdGlvbmFsIiAzCiMgMjIgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv b3N0L211bHRpX2FycmF5L3N0b3JhZ2Vfb3JkZXIuaHBwIiAyIDMKIyAxICIvdXNyL2xvY2FsL3Zv bC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9udW1lcmljIiAxIDMKIyA2NSAiL3Vzci9sb2NhbC92 b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvbnVtZXJpYyIgMwoKCgoKIyAxICIvdXNyL2xvY2Fs L3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9udW1lcmljLmgiIDEgMwojIDY0 ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9udW1lcmlj LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9y LCB0eXBlbmFtZSBfVHA+CiAgICBfVHAKICAgIGFjY3VtdWxhdGUoX0lucHV0SXRlcmF0b3IgX19m aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBfVHAgX19pbml0KQogICAgewoKICAgICAKCiAg ICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBfX2luaXQg PSBfX2luaXQgKyAqX19maXJzdDsKICAgICAgcmV0dXJuIF9faW5pdDsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0JpbmFy eU9wZXJhdGlvbj4KICAgIF9UcAogICAgYWNjdW11bGF0ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0 LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9UcCBfX2luaXQsCiAgICAgICAgICAgICAgIF9CaW5h cnlPcGVyYXRpb24gX19iaW5hcnlfb3ApCiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX2Zp cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIF9faW5pdCA9IF9fYmluYXJ5X29wKF9f aW5pdCwgKl9fZmlyc3QpOwogICAgICByZXR1cm4gX19pbml0OwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMiwgdHlwZW5h bWUgX1RwPgogICAgX1RwCiAgICBpbm5lcl9wcm9kdWN0KF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0 MSwgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJh dG9yMiBfX2ZpcnN0MiwgX1RwIF9faW5pdCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICBmb3Ig KCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICAgICAg X19pbml0ID0gX19pbml0ICsgKCpfX2ZpcnN0MSAqICpfX2ZpcnN0Mik7CiAgICAgIHJldHVybiBf X2luaXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5h bWUgX0lucHV0SXRlcmF0b3IyLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgIHR5cGVuYW1lIF9C aW5hcnlPcGVyYXRpb24xLCB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uMj4KICAgIF9UcAogICAg aW5uZXJfcHJvZHVjdChfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBf X2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsIF9UcCBf X2luaXQsCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlPcGVyYXRpb24xIF9fYmluYXJ5X29wMSwK ICAgICAgICAgICAgICAgICAgX0JpbmFyeU9wZXJhdGlvbjIgX19iaW5hcnlfb3AyKQogICAgewoK ICAgICAKICAgICAKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0 MSwgKytfX2ZpcnN0MikKICAgICAgICBfX2luaXQgPSBfX2JpbmFyeV9vcDEoX19pbml0LCBfX2Jp bmFyeV9vcDIoKl9fZmlyc3QxLCAqX19maXJzdDIpKTsKICAgICAgcmV0dXJuIF9faW5pdDsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJ dGVyYXRvcj4KICAgIF9PdXRwdXRJdGVyYXRvcgogICAgcGFydGlhbF9zdW0oX0lucHV0SXRlcmF0 b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1 dEl0ZXJhdG9yIF9fcmVzdWx0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAog ICAgIAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgICAg ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICBfVmFsdWVUeXBlIF9fdmFsdWUgPSAqX19maXJz dDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBfX3ZhbHVlID0g X192YWx1ZSArICpfX2ZpcnN0OwogICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAg fQogICAgICByZXR1cm4gKytfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX0JpbmFyeU9w ZXJhdGlvbj4KICAgIF9PdXRwdXRJdGVyYXRvcgogICAgcGFydGlhbF9zdW0oX0lucHV0SXRlcmF0 b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1 dEl0ZXJhdG9yIF9fcmVzdWx0LCBfQmluYXJ5T3BlcmF0aW9uIF9fYmluYXJ5X29wKQogICAgewog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZh bHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgPT0g X19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAg ICBfVmFsdWVUeXBlIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAh PSBfX2xhc3QpIHsKICAgICAgICBfX3ZhbHVlID0gX19iaW5hcnlfb3AoX192YWx1ZSwgKl9fZmly c3QpOwogICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgfQogICAgICByZXR1cm4g KytfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5 cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KICAgIF9PdXRwdXRJdGVyYXRvcgogICAgYWRqYWNlbnRf ZGlmZmVyZW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg ICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCkKICAgIHsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2 YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ID09 IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAg ICAgX1ZhbHVlVHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3Qg IT0gX19sYXN0KSB7CiAgICAgICAgX1ZhbHVlVHlwZSBfX3RtcCA9ICpfX2ZpcnN0OwogICAgICAg ICorK19fcmVzdWx0ID0gX190bXAgLSBfX3ZhbHVlOwogICAgICAgIF9fdmFsdWUgPSBfX3RtcDsK ICAgICAgfQogICAgICByZXR1cm4gKytfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX0Jp bmFyeU9wZXJhdGlvbj4KICAgIF9PdXRwdXRJdGVyYXRvcgogICAgYWRqYWNlbnRfZGlmZmVyZW5j ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX0JpbmFyeU9wZXJhdGlv biBfX2JpbmFyeV9vcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAgICAK CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogICAgICAqX19y ZXN1bHQgPSAqX19maXJzdDsKICAgICAgX1ZhbHVlVHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAg ICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgX1ZhbHVlVHlwZSBfX3Rt cCA9ICpfX2ZpcnN0OwogICAgICAgICorK19fcmVzdWx0ID0gX19iaW5hcnlfb3AoX190bXAsIF9f dmFsdWUpOwogICAgICAgIF9fdmFsdWUgPSBfX3RtcDsKICAgICAgfQogICAgICByZXR1cm4gKytf X3Jlc3VsdDsKICAgIH0KCn0KIyA3MCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2Mr Ky8zLjIvbnVtZXJpYyIgMiAzCiMgMjMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv b3N0L211bHRpX2FycmF5L3N0b3JhZ2Vfb3JkZXIuaHBwIiAyIDMKIyAxICIvdXNyL2xvY2FsL3Zv bC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi92ZWN0b3IiIDEgMwojIDY1ICIvdXNyL2xvY2FsL3Zv bC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi92ZWN0b3IiIDMKCiMgMSAiL3Vzci9sb2NhbC92b2wv Z2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vz ci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAz CiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uX2Rl ZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4y L2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhy b3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lk KTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19i YWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hh ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7 CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAg dm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf X3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19y dW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vy cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBj aGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19z KTsKfQojIDY3ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi92ZWN0b3Ii IDIgMwoKCgoKIyAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF92ZWN0b3IuaCIgMSAzCiMgNjUgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9p bmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC92 b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vz ci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uX2RlZmluZXMuaCIg MSAzCiMgMzUgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVu Y3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4 Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZv aWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlk KHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsK CiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK ICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f dGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291 dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vy cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0 IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIq IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3Mp OwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDY2 ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF92ZWN0b3Iu aCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CiMgNzggIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5j bHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9BbGxvY2F0b3IsIGJvb2wgX0lzU3RhdGljPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2Ug ewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRv cj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3Jf dHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0K CiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9N X2RhdGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9v Zl9zdG9yYWdlKDApCiAge30KCnByb3RlY3RlZDoKICBhbGxvY2F0b3JfdHlwZSBfTV9kYXRhX2Fs bG9jYXRvcjsKICBfVHAqIF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5k X29mX3N0b3JhZ2U7CgogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJu IF9NX2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUo X1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICB7IGlmIChfX3ApIF9NX2RhdGFfYWxsb2NhdG9yLmRl YWxsb2NhdGUoX19wLCBfX24pOyB9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B bGxvY2F0b3I+CmNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+ IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0 b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9y X3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0K CiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3Rh cnQoMCksIF9NX2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkKICB7fQoKcHJvdGVjdGVk OgogIF9UcCogX01fc3RhcnQ7CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBfTV9lbmRfb2Zfc3Rv cmFnZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46 Ol9BbGxvY190eXBlIF9BbGxvY190eXBlOwogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikK ICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFs bG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0 ZShfX3AsIF9fbik7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1 Y3QgX1ZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9j LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9j Pjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBf QWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9B bGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5h bWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfVmVjdG9yX2Jhc2Uo Y29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9CiAgX1ZlY3Rvcl9iYXNl KHNpemVfdCBfX24sIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7CiAg ICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydDsK ICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgfQoKICB+X1ZlY3Rvcl9i YXNlKCkgeyBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0 YXJ0KTsgfQp9OwojIDE2NSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfdmVjdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jID0g YWxsb2NhdG9yPF9UcD4gPgpjbGFzcyB2ZWN0b3IgOiBwcm90ZWN0ZWQgX1ZlY3Rvcl9iYXNlPF9U cCwgX0FsbG9jPgp7CgogCgpwcml2YXRlOgogIHR5cGVkZWYgX1ZlY3Rvcl9iYXNlPF9UcCwgX0Fs bG9jPiBfQmFzZTsKICB0eXBlZGVmIHZlY3RvcjxfVHAsIF9BbGxvYz4gdmVjdG9yX3R5cGU7CnB1 YmxpYzoKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9p bnRlcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRl ZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHBvaW50ZXIsIHZlY3Rvcl90eXBlPiBpdGVy YXRvcjsKICB0eXBlZGVmIF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRl ciwgdmVjdG9yX3R5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZl cmVuY2U7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlw ZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlw ZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5 cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9CYXNl OjpnZXRfYWxsb2NhdG9yKCk7IH0KCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0 ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRv cjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCnByb3RlY3RlZDoKICB1c2luZyBfQmFzZTo6 X01fYWxsb2NhdGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX2RlYWxsb2NhdGU7CiAgdXNpbmcgX0Jhc2U6 Ol9NX3N0YXJ0OwogIHVzaW5nIF9CYXNlOjpfTV9maW5pc2g7CiAgdXNpbmcgX0Jhc2U6Ol9NX2Vu ZF9vZl9zdG9yYWdlOwoKcHJvdGVjdGVkOgogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBf X3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCk7CiAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9y IF9fcG9zaXRpb24pOwoKcHVibGljOgoKCgoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGl0 ZXJhdG9yIChfTV9zdGFydCk7IH0KCgoKCgogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QK ICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yIChfTV9zdGFydCk7IH0KCgoKCgogIGl0ZXJhdG9y IGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9maW5pc2gpOyB9CgoKCgoKICBjb25zdF9pdGVy YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvciAoX01fZmluaXNoKTsgfQoK CgoKCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVy YXRvcihlbmQoKSk7IH0KCgoKCgogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29u c3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CgoKCgoKCiAg cmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVn aW4oKSk7IH0KCgoKCgoKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAg eyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKCiAgc2l6ZV90eXBl IHNpemUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0K CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoLTEp IC8gc2l6ZW9mKF9UcCk7IH0KCgoKCgogIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0CiAgICB7 IHJldHVybiBzaXplX3R5cGUoY29uc3RfaXRlcmF0b3IoX01fZW5kX29mX3N0b3JhZ2UpIC0gYmVn aW4oKSk7IH0KCgoKCiAgYm9vbCBlbXB0eSgpIGNvbnN0CiAgICB7IHJldHVybiBiZWdpbigpID09 IGVuZCgpOyB9CiMgMjg5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF92ZWN0b3IuaCIgMwogIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24p IHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0KIyAzMDAgIi91c3IvbG9jYWwvdm9sL2djYy8z LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgY29uc3RfcmVmZXJlbmNl IG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKihiZWdpbigpICsgX19u KTsgfQoKICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0IHsKICAgIGlm IChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgidmVjdG9y Iik7CiAgfQojIDMxNiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfdmVjdG9yLmgiIDMKICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikKICAgIHsgX01f cmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQojIDMyOCAiL3Vzci9sb2Nh bC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVjdG9yLmgiIDMKICBjb25z dF9yZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsgX01fcmFuZ2VfY2hlY2so X19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKCiAgZXhwbGljaXQgdmVjdG9yKGNvbnN0IGFs bG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpIHt9 CgogIHZlY3RvcihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUsCiAgICAgICAgIGNv bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShf X24sIF9fYSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQs IF9fbiwgX192YWx1ZSk7IH0KCiAgZXhwbGljaXQgdmVjdG9yKHNpemVfdHlwZSBfX24pCiAgICA6 IF9CYXNlKF9fbiwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFs aXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX1RwKCkpOyB9CgogIHZlY3Rvcihjb25zdCB2ZWN0 b3I8X1RwLCBfQWxsb2M+JiBfX3gpCiAgICA6IF9CYXNlKF9feC5zaXplKCksIF9feC5nZXRfYWxs b2NhdG9yKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3guYmVnaW4o KSwgX194LmVuZCgpLCBfTV9zdGFydCk7IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy YXRvcj4KICAgIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf X2xhc3QsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90 eXBlKCkpCiAgICAgICAgOiBfQmFzZShfX2EpCiAgICAgICAgewogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAg ICAgX01faW5pdGlhbGl6ZV9hdXgoX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9 CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgo X0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbHVlLCBfX3RydWVfdHlwZSkKICAgICAgICB7CiAg ICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2Ug PSBfTV9zdGFydCArIF9fbjsKICAgICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24o X01fc3RhcnQsIF9fbiwgX192YWx1ZSk7CiAgICB9CgogIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0 ZXJhdG9yPgogICAgdm9pZAogICAgICAgIF9NX2luaXRpYWxpemVfYXV4KF9JbnB1dEl0ZXJhdG9y IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgICAgIHsK ICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9y Pjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJDYXRlZ29yeTsKICAgICAgICAgIF9NX3JhbmdlX2lu aXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfSXRlckNhdGVnb3J5KCkpOwogICAgICAgIH0KCiAg fnZlY3RvcigpCiAgeyBfRGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsgfQoKICB2ZWN0b3I8 X1RwLCBfQWxsb2M+JiBvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KTsK IyAzOTMgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3Zl Y3Rvci5oIiAzCiAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAgIGlmIChjYXBhY2l0 eSgpIDwgX19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwog ICAgICBwb2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19uLCBfTV9zdGFydCwg X01fZmluaXNoKTsKICAgICAgX0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9N X2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAg ICBfTV9zdGFydCA9IF9fdG1wOwogICAgICBfTV9maW5pc2ggPSBfX3RtcCArIF9fb2xkX3NpemU7 CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICB9CiAgfQojIDQy MSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVjdG9y LmgiIDMKICB2b2lkIGFzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKSB7IF9N X2ZpbGxfYXNzaWduKF9fbiwgX192YWwpOyB9CiAgdm9pZCBfTV9maWxsX2Fzc2lnbihzaXplX3R5 cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKTsKCiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0 b3I+CiAgICB2b2lkCiAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl cmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9J bnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01fYXNzaWduX2Rpc3Bh dGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZTxjbGFz cyBfSW50ZWdlcj4KICAgIHZvaWQKICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19u LCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6 ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVy PgogICAgdm9pZAogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu cHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyQ2F0 ZWdvcnk7CiAgICAgIF9NX2Fzc2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBfSXRlckNhdGVnb3J5 KCkpOwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkCiAg ICBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkCiAgICBfTV9hc3NpZ25fYXV4KF9Gb3J3 YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCgoKCgogIHJlZmVyZW5jZSBmcm9udCgpIHsg cmV0dXJuICpiZWdpbigpOyB9CgoKCgoKICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7 IHJldHVybiAqYmVnaW4oKTsgfQoKCgoKCiAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAqKGVu ZCgpIC0gMSk7IH0KCgoKCgogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4g KihlbmQoKSAtIDEpOyB9CiMgNDg4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysr LzMuMi9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHZvaWQKICBwdXNoX2JhY2soY29uc3QgX1RwJiBf X3gpCiAgewogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgICBf Q29uc3RydWN0KF9NX2ZpbmlzaCwgX194KTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAgICBl bHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7CiAgfQojIDUxOSAiL3Vzci9sb2Nh bC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVjdG9yLmgiIDMKICB2b2lk CiAgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCiAgewogICAgc3RkOjpzd2FwKF9NX3N0 YXJ0LCBfX3guX01fc3RhcnQpOwogICAgc3RkOjpzd2FwKF9NX2ZpbmlzaCwgX194Ll9NX2Zpbmlz aCk7CiAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9lbmRfb2Zfc3RvcmFn ZSk7CiAgfQojIDUzOCAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfdmVjdG9yLmgiIDMKICBpdGVyYXRvcgogIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9u LCBjb25zdCBfVHAmIF9feCkKICB7CiAgICBzaXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJl Z2luKCk7CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRp b24gPT0gZW5kKCkpIHsKICAgICAgX0NvbnN0cnVjdChfTV9maW5pc2gsIF9feCk7CiAgICAgICsr X01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yKF9f cG9zaXRpb24pLCBfX3gpOwogICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgfQojIDU2MiAiL3Vz ci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVjdG9yLmgiIDMK ICBpdGVyYXRvcgogIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uKQogIHsKICAgIHNpemVfdHlw ZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5k X29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkgewogICAgICBfQ29uc3RydWN0KF9N X2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNl cnRfYXV4KGl0ZXJhdG9yKF9fcG9zaXRpb24pKTsKICAgIHJldHVybiBiZWdpbigpICsgX19uOwog IH0KCgogIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgICAgIGlu c2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0 b3IgX19sYXN0KQogICAgICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxf SW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2luc2VydF9kaXNw YXRjaChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogIHRlbXBs YXRlIDxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQKICAgICAgICBfTV9pbnNlcnRfZGlzcGF0Y2go aXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBl KQogICAgeyBfTV9maWxsX2luc2VydChfX3Bvcywgc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX24p LCBzdGF0aWNfY2FzdDxfVHA+KF9fdmFsKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRl cmF0b3I+CiAgICB2b2lkCiAgICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9z LAogICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0 ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICAg ICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl cmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlckNhdGVnb3J5OwogICAgICBfTV9yYW5nZV9p bnNlcnQoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX0l0ZXJDYXRlZ29yeSgpKTsKICAgIH0KIyA2 MTIgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rv ci5oIiAzCiAgdm9pZCBpbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25z dCBfVHAmIF9feCkKICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194KTsgfQoKICB2 b2lkIF9NX2ZpbGxfaW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3Qg X1RwJiBfX3gpOwojIDYyNiAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfdmVjdG9yLmgiIDMKICB2b2lkIHBvcF9iYWNrKCkgewogICAgLS1fTV9maW5pc2g7 CiAgICBfRGVzdHJveShfTV9maW5pc2gpOwogIH0KIyA2NDUgIi91c3IvbG9jYWwvdm9sL2djYy8z LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgaXRlcmF0b3IgZXJhc2Uo aXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQog ICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAtLV9NX2Zp bmlzaDsKICAgIF9EZXN0cm95KF9NX2ZpbmlzaCk7CiAgICByZXR1cm4gX19wb3NpdGlvbjsKICB9 CiMgNjY4ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF92 ZWN0b3IuaCIgMwogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9f bGFzdCkgewogICAgaXRlcmF0b3IgX19pKGNvcHkoX19sYXN0LCBlbmQoKSwgX19maXJzdCkpOwog ICAgX0Rlc3Ryb3koX19pLCBlbmQoKSk7CiAgICBfTV9maW5pc2ggPSBfTV9maW5pc2ggLSAoX19s YXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19maXJzdDsKICB9CiMgNjg1ICIvdXNyL2xvY2Fs L3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHZvaWQg cmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCkgewogICAgaWYgKF9f bmV3X3NpemUgPCBzaXplKCkpCiAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX25ld19zaXplLCBlbmQo KSk7CiAgICBlbHNlCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwgX194 KTsKICB9CiMgNzAxICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF92ZWN0b3IuaCIgMwogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplKSB7IHJl c2l6ZShfX25ld19zaXplLCBfVHAoKSk7IH0KCgoKCgoKCiAgdm9pZCBjbGVhcigpIHsgZXJhc2Uo YmVnaW4oKSwgZW5kKCkpOyB9Cgpwcm90ZWN0ZWQ6CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXJhdG9yPgogIHBvaW50ZXIgX01fYWxsb2NhdGVfYW5kX2NvcHkoc2l6ZV90eXBlIF9fbiwg X0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQogIHsKICAgIHBvaW50ZXIg X19yZXN1bHQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgdHJ5IHsKICAgICAgdW5pbml0aWFsaXpl ZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAgICByZXR1cm4gX19yZXN1bHQ7 CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAgICBfTV9kZWFsbG9jYXRlKF9fcmVz dWx0LCBfX24pOwogICAgICAgIHRocm93OwogICAgICB9CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0aWFsaXplKF9JbnB1dEl0ZXJhdG9y IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFz dCwgaW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7 ICsrX19maXJzdCkKICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKICB9CgoKICB0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0Zvcndh cmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0 ZXJhdG9yIF9fbGFzdCwgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgewogICAgc2l6ZV90eXBlIF9f biA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRl KF9fbik7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogICAgX01fZmlu aXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogIH0K CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5zZXJ0 KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9f Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1 dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2 b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKfTsKCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PShjb25zdCB2ZWN0 b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKewog IHJldHVybiBfX3guc2l6ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJl Z2luKCksIF9feC5lbmQoKSwgX195LmJlZ2luKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPChjb25zdCB2ZWN0b3I8X1RwLCBfQWxs b2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKewogIHJldHVybiBsZXhp Y29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKHZlY3RvcjxfVHAsIF9B bGxvYz4mIF9feCwgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgX194LnN3YXAoX195KTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRv ciE9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0Fs bG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I+KGNvbnN0IHZlY3RvcjxfVHAs IF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7CiAgcmV0dXJu IF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUg Ym9vbApvcGVyYXRvcjw9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVj dG9yPF9UcCwgX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj49KGNvbnN0 IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195 KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg X0FsbG9jPgp2ZWN0b3I8X1RwLF9BbGxvYz4mCnZlY3RvcjxfVHAsX0FsbG9jPjo6b3BlcmF0b3I9 KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkKewogIGlmICgmX194ICE9IHRoaXMpIHsK ICAgIGNvbnN0IHNpemVfdHlwZSBfX3hsZW4gPSBfX3guc2l6ZSgpOwogICAgaWYgKF9feGxlbiA+ IGNhcGFjaXR5KCkpIHsKICAgICAgcG9pbnRlciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9jb3B5 KF9feGxlbiwgX194LmJlZ2luKCksIF9feC5lbmQoKSk7CiAgICAgIF9EZXN0cm95KF9NX3N0YXJ0 LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3Rv cmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01fZW5kX29m X3N0b3JhZ2UgPSBfTV9zdGFydCArIF9feGxlbjsKICAgIH0KICAgIGVsc2UgaWYgKHNpemUoKSA+ PSBfX3hsZW4pIHsKICAgICAgaXRlcmF0b3IgX19pKGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQo KSwgYmVnaW4oKSkpOwogICAgICBfRGVzdHJveShfX2ksIGVuZCgpKTsKICAgIH0KICAgIGVsc2Ug ewogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guYmVnaW4oKSArIHNpemUoKSwgX01fc3RhcnQp OwogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCksIF9feC5lbmQo KSwgX01fZmluaXNoKTsKICAgIH0KICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgX194bGVuOwog IH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K dm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2Fzc2lnbihzaXplX3QgX19uLCBjb25z dCB2YWx1ZV90eXBlJiBfX3ZhbCkKewogIGlmIChfX24gPiBjYXBhY2l0eSgpKSB7CiAgICB2ZWN0 b3I8X1RwLCBfQWxsb2M+IF9fdG1wKF9fbiwgX192YWwsIGdldF9hbGxvY2F0b3IoKSk7CiAgICBf X3RtcC5zd2FwKCp0aGlzKTsKICB9CiAgZWxzZSBpZiAoX19uID4gc2l6ZSgpKSB7CiAgICBmaWxs KGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2Zp bGxfbihfTV9maW5pc2gsIF9fbiAtIHNpemUoKSwgX192YWwpOwogIH0KICBlbHNlCiAgICBlcmFz ZShmaWxsX24oYmVnaW4oKSwgX19uLCBfX3ZhbCksIGVuZCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZCB2ZWN0 b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0 SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1 dF9pdGVyYXRvcl90YWcpIHsKICBpdGVyYXRvciBfX2N1cihiZWdpbigpKTsKICBmb3IgKCA7IF9f Zmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3QpCiAg ICAqX19jdXIgPSAqX19maXJzdDsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBlcmFzZShf X2N1ciwgZW5kKCkpOwogIGVsc2UKICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBzaXplX3R5cGUgX19sZW4g PSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwoKICBpZiAoX19sZW4gPiBjYXBhY2l0eSgpKSB7 CiAgICBwb2ludGVyIF9fdG1wKF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVuLCBfX2ZpcnN0LCBf X2xhc3QpKTsKICAgIF9EZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgX01fZGVhbGxv Y2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICBfTV9zdGFy dCA9IF9fdG1wOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9maW5pc2ggPSBfTV9zdGFydCAr IF9fbGVuOwogIH0KICBlbHNlIGlmIChzaXplKCkgPj0gX19sZW4pIHsKICAgIGl0ZXJhdG9yIF9f bmV3X2ZpbmlzaChjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpKTsKICAgIF9EZXN0cm95 KF9fbmV3X2ZpbmlzaCwgZW5kKCkpOwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2Uo KTsKICB9CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIgX19taWQgPSBfX2ZpcnN0OwogICAgYWR2 YW5jZShfX21pZCwgc2l6ZSgpKTsKICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9NX3N0YXJ0KTsK ICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX21pZCwgX19sYXN0LCBfTV9maW5p c2gpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCnZlY3Rv cjxfVHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3Qg X1RwJiBfX3gpCnsKICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICBf Q29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19NX2ZpbmlzaDsK ICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgaXRl cmF0b3IoX01fZmluaXNoIC0gMiksIGl0ZXJhdG9yKF9NX2ZpbmlzaC0gMSkpOwogICAgKl9fcG9z aXRpb24gPSBfX3hfY29weTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRf c2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0g MCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9j YXRlKF9fbGVuKSk7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQpOwogICAg dHJ5IHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9yKF9N X3N0YXJ0KSwgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fbmV3X3N0YXJ0KTsKICAgICAgX0NvbnN0cnVjdChfX25ld19maW5pc2guYmFzZSgpLCBf X3gpOwogICAgICArK19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFs aXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19maW5pc2gpOwogICAgfQogICAgY2F0Y2go Li4uKQogICAgICB7CiAgICAgICAgX0Rlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKTsK ICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbik7CiAgICAgICAg dGhyb3c7CiAgICAgIH0KICAgIF9EZXN0cm95KGJlZ2luKCksIGVuZCgpKTsKICAgIF9NX2RlYWxs b2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3Rh cnQgPSBfX25ld19zdGFydC5iYXNlKCk7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFz ZSgpOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsK ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZAp2ZWN0b3I8X1Rw LCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24pCnsKICBpZiAoX01f ZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICBfQ29uc3RydWN0KF9NX2ZpbmlzaCwg KihfTV9maW5pc2ggLSAxKSk7CiAgICArK19NX2ZpbmlzaDsKICAgIGNvcHlfYmFja3dhcmQoX19w b3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksCiAgICAgICAgICAgICAgICAgIGl0ZXJh dG9yKF9NX2ZpbmlzaCAtIDEpKTsKICAgICpfX3Bvc2l0aW9uID0gX1RwKCk7CiAgfQogIGVsc2Ug ewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICBjb25zdCBzaXpl X3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAgPyAyICogX19vbGRfc2l6ZSA6IDE7CiAgICBw b2ludGVyIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4pOwogICAgcG9pbnRlciBfX25l d19maW5pc2ggPSBfX25ld19zdGFydDsKICAgIHRyeSB7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVu aW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihfTV9zdGFydCksIF9fcG9zaXRpb24sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zdGFydCk7CiAgICAgIF9Db25z dHJ1Y3QoX19uZXdfZmluaXNoKTsKICAgICAgKytfX25ld19maW5pc2g7CiAgICAgIF9fbmV3X2Zp bmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2gp LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfZmluaXNoKTsK ICAgIH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIF9EZXN0cm95KF9fbmV3X3N0YXJ0 LF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCxfX2xlbik7 CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICAgIF9EZXN0cm95KGJlZ2luKCksIGVuZCgpKTsKICAg IF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwog ICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsK ICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsKICB9Cn0KCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+Ojpf TV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAgaWYg KF9fbiAhPSAwKSB7CiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmlu aXNoKSA+PSBfX24pIHsKICAgICAgX1RwIF9feF9jb3B5ID0gX194OwogICAgICBjb25zdCBzaXpl X3R5cGUgX19lbGVtc19hZnRlciA9IGVuZCgpIC0gX19wb3NpdGlvbjsKICAgICAgaXRlcmF0b3Ig X19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7CiAgICAgIGlmIChfX2VsZW1zX2FmdGVyID4gX19uKSB7 CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2ZpbmlzaCAtIF9fbiwgX01fZmluaXNoLCBf TV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX247CiAgICAgICAgY29weV9iYWNrd2Fy ZChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2ggLSBfX24sIF9fb2xkX2ZpbmlzaCk7CiAgICAgICAg ZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgX19uLCBfX3hfY29weSk7CiAgICAgIH0KICAg ICAgZWxzZSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBf X2VsZW1zX2FmdGVyLCBfX3hfY29weSk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxl bXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2Zp bmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAg ICAgICBmaWxsKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX194X2NvcHkpOwogICAgICB9CiAg ICB9CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7 CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6 ZSwgX19uKTsKICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsK ICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKICAgICAgdHJ5IHsKICAg ICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoYmVnaW4oKSwgX19wb3NpdGlv biwgX19uZXdfc3RhcnQpOwogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmls bF9uKF9fbmV3X2ZpbmlzaCwgX19uLCBfX3gpOwogICAgICAgIF9fbmV3X2ZpbmlzaAogICAgICAg ICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9fbmV3X2ZpbmlzaCk7 CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9f bmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0 YXJ0LmJhc2UoKSxfX2xlbik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIF9EZXN0 cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBf TV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFy dC5iYXNlKCk7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7CiAgICAgIF9N X2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQuYmFzZSgpICsgX19sZW47CiAgICB9CiAgfQp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyYXRvcj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9yYW5nZV9pbnNlcnQoaXRl cmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ dGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2Zp cnN0KSB7CiAgICBfX3BvcyA9IGluc2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgKytfX3BvczsK ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNz IF9Gb3J3YXJkSXRlcmF0b3I+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5z ZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QgIT0g X19sYXN0KSB7CiAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsK ICAgIGlmIChzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9maW5pc2gpID49IF9fbikg ewogICAgICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IGVuZCgpIC0gX19wb3NpdGlv bjsKICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7CiAgICAgIGlmIChfX2Vs ZW1zX2FmdGVyID4gX19uKSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2ZpbmlzaCAt IF9fbiwgX01fZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX247CiAg ICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2ggLSBfX24sIF9fb2xk X2ZpbmlzaCk7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRpb24pOwogICAg ICB9CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0 OwogICAgICAgIGFkdmFuY2UoX19taWQsIF9fZWxlbXNfYWZ0ZXIpOwogICAgICAgIHVuaW5pdGlh bGl6ZWRfY29weShfX21pZCwgX19sYXN0LCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCAr PSBfX24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0 aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxl bXNfYWZ0ZXI7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgX19wb3NpdGlvbik7CiAgICAg IH0KICAgIH0KICAgIGVsc2UgewogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNp emUoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSArIG1heChfX29s ZF9zaXplLCBfX24pOwogICAgICBpdGVyYXRvciBfX25ld19zdGFydChfTV9hbGxvY2F0ZShfX2xl bikpOwogICAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQpOwogICAgICB0cnkg ewogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihfTV9z dGFydCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9zaXRp b24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2Nv cHkoX19maXJzdCwgX19sYXN0LCBfX25ld19maW5pc2gpOwogICAgICAgIF9fbmV3X2ZpbmlzaAog ICAgICAgICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmlu aXNoKSwgX19uZXdfZmluaXNoKTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewog ICAgICAgICAgX0Rlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKTsKICAgICAgICAgIF9N X2RlYWxsb2NhdGUoX19uZXdfc3RhcnQuYmFzZSgpLCBfX2xlbik7CiAgICAgICAgICB0aHJvdzsK ICAgICAgICB9CiAgICAgIF9EZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9k ZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAg X01fc3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2Zp bmlzaC5iYXNlKCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQuYmFzZSgp ICsgX19sZW47CiAgICB9CiAgfQp9Cgp9CiMgNzIgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5j bHVkZS9jKysvMy4yL3ZlY3RvciIgMiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfYnZlY3Rvci5oIiAxIDMKIyA2NCAiL3Vzci9sb2NhbC92b2wv Z2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYnZlY3Rvci5oIiAzCm5hbWVzcGFjZSBz dGQKewogIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBfQml0X3R5cGU7CiAgZW51bSB7IF9NX3dvcmRf Yml0ID0gaW50KDggKiBzaXplb2YoX0JpdF90eXBlKSkgfTsKCnN0cnVjdCBfQml0X3JlZmVyZW5j ZSB7CgogIF9CaXRfdHlwZSAqIF9NX3A7CiAgX0JpdF90eXBlIF9NX21hc2s7CiAgX0JpdF9yZWZl cmVuY2UoX0JpdF90eXBlICogX194LCBfQml0X3R5cGUgX195KQogICAgOiBfTV9wKF9feCksIF9N X21hc2soX195KSB7fQoKcHVibGljOgogIF9CaXRfcmVmZXJlbmNlKCkgOiBfTV9wKDApLCBfTV9t YXNrKDApIHt9CiAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhKCpfTV9wICYgX01f bWFzayk7IH0KICBfQml0X3JlZmVyZW5jZSYgb3BlcmF0b3I9KGJvb2wgX194KQogIHsKICAgIGlm IChfX3gpICpfTV9wIHw9IF9NX21hc2s7CiAgICBlbHNlICpfTV9wICY9IH5fTV9tYXNrOwogICAg cmV0dXJuICp0aGlzOwogIH0KICBfQml0X3JlZmVyZW5jZSYgb3BlcmF0b3I9KGNvbnN0IF9CaXRf cmVmZXJlbmNlJiBfX3gpCiAgICB7IHJldHVybiAqdGhpcyA9IGJvb2woX194KTsgfQogIGJvb2wg b3BlcmF0b3I9PShjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdAogICAgeyByZXR1cm4g Ym9vbCgqdGhpcykgPT0gYm9vbChfX3gpOyB9CiAgYm9vbCBvcGVyYXRvcjwoY29uc3QgX0JpdF9y ZWZlcmVuY2UmIF9feCkgY29uc3QKICAgIHsgcmV0dXJuICFib29sKCp0aGlzKSAmJiBib29sKF9f eCk7IH0KICB2b2lkIGZsaXAoKSB7ICpfTV9wIF49IF9NX21hc2s7IH0KfTsKCmlubGluZSB2b2lk IHN3YXAoX0JpdF9yZWZlcmVuY2UgX194LCBfQml0X3JlZmVyZW5jZSBfX3kpCnsKICBib29sIF9f dG1wID0gX194OwogIF9feCA9IF9feTsKICBfX3kgPSBfX3RtcDsKfQoKc3RydWN0IF9CaXRfaXRl cmF0b3JfYmFzZSA6IHB1YmxpYyBpdGVyYXRvcjxyYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywg Ym9vbD4KewogIF9CaXRfdHlwZSAqIF9NX3A7CiAgdW5zaWduZWQgaW50IF9NX29mZnNldDsKCiAg X0JpdF9pdGVyYXRvcl9iYXNlKF9CaXRfdHlwZSAqIF9feCwgdW5zaWduZWQgaW50IF9feSkKICAg IDogX01fcChfX3gpLCBfTV9vZmZzZXQoX195KSB7fQoKICB2b2lkIF9NX2J1bXBfdXAoKSB7CiAg ICBpZiAoX01fb2Zmc2V0KysgPT0gX01fd29yZF9iaXQgLSAxKSB7CiAgICAgIF9NX29mZnNldCA9 IDA7CiAgICAgICsrX01fcDsKICAgIH0KICB9CiAgdm9pZCBfTV9idW1wX2Rvd24oKSB7CiAgICBp ZiAoX01fb2Zmc2V0LS0gPT0gMCkgewogICAgICBfTV9vZmZzZXQgPSBfTV93b3JkX2JpdCAtIDE7 CiAgICAgIC0tX01fcDsKICAgIH0KICB9CgogIHZvaWQgX01faW5jcihwdHJkaWZmX3QgX19pKSB7 CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19pICsgX01fb2Zmc2V0OwogICAgX01fcCArPSBf X24gLyBfTV93b3JkX2JpdDsKICAgIF9fbiA9IF9fbiAlIF9NX3dvcmRfYml0OwogICAgaWYgKF9f biA8IDApIHsKICAgICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19uICsgX01fd29yZF9i aXQ7CiAgICAgIC0tX01fcDsKICAgIH0gZWxzZQogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQg aW50KSBfX247CiAgfQoKICBib29sIG9wZXJhdG9yPT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNl JiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wID09IF9faS5fTV9wICYmIF9NX29mZnNldCA9 PSBfX2kuX01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0X2l0ZXJhdG9y X2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgPCBfX2kuX01fcCB8fCAoX01fcCA9 PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQgPCBfX2kuX01fb2Zmc2V0KTsKICB9CiAgYm9vbCBvcGVy YXRvciE9KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4g ISgqdGhpcyA9PSBfX2kpOwogIH0KICBib29sIG9wZXJhdG9yPihjb25zdCBfQml0X2l0ZXJhdG9y X2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9faSA8ICp0aGlzOwogIH0KICBib29sIG9w ZXJhdG9yPD0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVy biAhKF9faSA8ICp0aGlzKTsKICB9CiAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IF9CaXRfaXRlcmF0 b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gISgqdGhpcyA8IF9faSk7CiAgfQp9OwoK aW5saW5lIHB0cmRpZmZfdApvcGVyYXRvci0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3gs IGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX195KSB7CiAgcmV0dXJuIF9NX3dvcmRfYml0ICog KF9feC5fTV9wIC0gX195Ll9NX3ApICsgX194Ll9NX29mZnNldCAtIF9feS5fTV9vZmZzZXQ7Cn0K CgpzdHJ1Y3QgX0JpdF9pdGVyYXRvciA6IHB1YmxpYyBfQml0X2l0ZXJhdG9yX2Jhc2UKewogIHR5 cGVkZWYgX0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2Uq IHBvaW50ZXI7CiAgdHlwZWRlZiBfQml0X2l0ZXJhdG9yIGl0ZXJhdG9yOwoKICBfQml0X2l0ZXJh dG9yKCkgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoMCwgMCkge30KICBfQml0X2l0ZXJhdG9yKF9CaXRf dHlwZSAqIF9feCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9f eCwgX195KSB7fQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gcmVmZXJl bmNlKF9NX3AsIDFVTCA8PCBfTV9vZmZzZXQpOyB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7 CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJh dG9yKysoaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF91cCgp OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsKICAgIF9N X2J1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvci0t KGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfZG93bigpOwog ICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5 cGUgX19pKSB7CiAgICBfTV9pbmNyKF9faSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJh dG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7 CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5 cGUgX19pKSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9f dG1wICs9IF9faTsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kp IGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0g X19pOwogIH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgeyBy ZXR1cm4gKigqdGhpcyArIF9faSk7IH0KfTsKCmlubGluZSBfQml0X2l0ZXJhdG9yCm9wZXJhdG9y KyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCAr IF9fbjsgfQoKCnN0cnVjdCBfQml0X2NvbnN0X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRlcmF0 b3JfYmFzZQp7CiAgdHlwZWRlZiBib29sIHJlZmVyZW5jZTsKICB0eXBlZGVmIGJvb2wgY29uc3Rf cmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgYm9vbCogcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRf Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogIF9CaXRfY29uc3RfaXRlcmF0b3IoKSA6 IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9CaXRfY29uc3RfaXRlcmF0b3IoX0JpdF90 eXBlICogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoX194 LCBfX3kpIHt9CiAgX0JpdF9jb25zdF9pdGVyYXRvcihjb25zdCBfQml0X2l0ZXJhdG9yJiBfX3gp CiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3guX01fcCwgX194Ll9NX29mZnNldCkge30KCiAg Y29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIHJldHVybiBfQml0X3JlZmVy ZW5jZShfTV9wLCAxVUwgPDwgX01fb2Zmc2V0KTsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJh dG9yKysoKSB7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0 X2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0 aGlzOwogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25zdF9pdGVy YXRvciYgb3BlcmF0b3ItLSgpIHsKICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlz OwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvci0tKGludCkgewogICAgY29uc3RfaXRlcmF0 b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuIF9fdG1wOwog IH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAg ICBfTV9pbmNyKF9faSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBv cGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7CiAgICBy ZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5 cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0 dXJuIF9fdG1wICs9IF9faTsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVu Y2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAg ICByZXR1cm4gX190bXAgLT0gX19pOwogIH0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShk aWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICByZXR1cm4gKigqdGhpcyArIF9faSk7CiAgfQp9OwoK aW5saW5lIF9CaXRfY29uc3RfaXRlcmF0b3IKb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNvbnN0 IF9CaXRfY29uc3RfaXRlcmF0b3ImIF9feCkgeyByZXR1cm4gX194ICsgX19uOyB9CgoKCgoKCnRl bXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yLCBib29sIF9faXNfc3RhdGljPgpjbGFzcyBfQnZlY3Rv cl9hbGxvY19iYXNlIHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxi b29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBl OwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9kYXRh X2FsbG9jYXRvcjsgfQoKICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBl JiBfX2EpCiAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0YXJ0KCksIF9NX2Zpbmlz aCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7fQoKcHJvdGVjdGVkOgogIF9CaXRfdHlwZSAqIF9N X2JpdF9hbGxvYyhzaXplX3QgX19uKQogICAgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3IuYWxs b2NhdGUoKF9fbiArIF9NX3dvcmRfYml0IC0gMSkvX01fd29yZF9iaXQpOyB9CiAgdm9pZCBfTV9k ZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAgICAgIF9NX2RhdGFfYWxsb2Nh dG9yLmRlYWxsb2NhdGUoX01fc3RhcnQuX01fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0Ll9NX3ApOwogIH0KCiAgdHlwZW5h bWUgX0FsbG9jX3RyYWl0czxfQml0X3R5cGUsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQog ICAgICAgICAgX01fZGF0YV9hbGxvY2F0b3I7CiAgX0JpdF9pdGVyYXRvciBfTV9zdGFydDsKICBf Qml0X2l0ZXJhdG9yIF9NX2ZpbmlzaDsKICBfQml0X3R5cGUgKiBfTV9lbmRfb2Zfc3RvcmFnZTsK fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvcj4KY2xhc3MgX0J2ZWN0b3JfYWxsb2NfYmFz ZTxfQWxsb2NhdG9yLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190 cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0 b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4g YWxsb2NhdG9yX3R5cGUoKTsgfQoKICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRv cl90eXBlJikKICAgIDogX01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdl KDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9CaXRf dHlwZSwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlCiAgICAgICAgICBfQWxsb2NfdHlwZTsKCiAg X0JpdF90eXBlICogX01fYml0X2FsbG9jKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfQWxsb2Nf dHlwZTo6YWxsb2NhdGUoKF9fbiArIF9NX3dvcmRfYml0IC0gMSkvX01fd29yZF9iaXQpOyB9CiAg dm9pZCBfTV9kZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAgICAgIF9BbGxv Y190eXBlOjpkZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQuX01fcCk7CiAgfQoKICBfQml0X2l0 ZXJhdG9yIF9NX3N0YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwogIF9CaXRfdHlwZSAq IF9NX2VuZF9vZl9zdG9yYWdlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3MgX0J2 ZWN0b3JfYmFzZQogIDogcHVibGljIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19p bnN0YW5jZWxlc3M+CnsKICB0eXBlZGVmIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvYz46Ol9T X2luc3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFt ZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIF9CdmVjdG9yX2Jhc2Uo Y29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9CiAgfl9CdmVjdG9yX2Jh c2UoKSB7IF9CYXNlOjpfTV9kZWFsbG9jYXRlKCk7IH0KfTsKCn0KCgoKbmFtZXNwYWNlIHN0ZAp7 Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0FsbG9jPgogIGNsYXNzIHZlY3Rvcjxib29sLCBfQWxsb2M+ IDogcHVibGljIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPgogIHsKICBwdWJsaWM6CiAgICB0eXBlZGVm IGJvb2wgdmFsdWVfdHlwZTsKICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgIHR5cGVk ZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2Ug cmVmZXJlbmNlOwogICAgdHlwZWRlZiBib29sIGNvbnN0X3JlZmVyZW5jZTsKICAgIHR5cGVkZWYg X0JpdF9yZWZlcmVuY2UqIHBvaW50ZXI7CiAgICB0eXBlZGVmIGNvbnN0IGJvb2wqIGNvbnN0X3Bv aW50ZXI7CgogICAgdHlwZWRlZiBfQml0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgdHlwZWRlZiBf Qml0X2NvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoKICAgIHR5cGVkZWYgcmV2ZXJzZV9p dGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVk ZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICB0eXBl ZGVmIHR5cGVuYW1lIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2Nh dG9yX3R5cGU7CiAgICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgewogICAg ICByZXR1cm4gX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpnZXRfYWxsb2NhdG9yKCk7CiAgICB9Cgog IHByb3RlY3RlZDoKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fYml0X2FsbG9j OwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9kZWFsbG9jYXRlOwogICAgdXNp bmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9zdGFydDsKICAgIHVzaW5nIF9CdmVjdG9yX2Jh c2U8X0FsbG9jPjo6X01fZmluaXNoOwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+Ojpf TV9lbmRfb2Zfc3RvcmFnZTsKCiAgcHJvdGVjdGVkOgogICAgdm9pZCBfTV9pbml0aWFsaXplKHNp emVfdHlwZSBfX24pIHsKICAgICAgX0JpdF90eXBlICogX19xID0gX01fYml0X2FsbG9jKF9fbik7 CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbiArIF9NX3dvcmRfYml0IC0gMSkv X01fd29yZF9iaXQ7CiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgX01f ZmluaXNoID0gX01fc3RhcnQgKyBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgIH0KICAgIHZvaWQg X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCkgewogICAgICBpZiAo X01fZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgICBjb3B5X2JhY2t3 YXJkKF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX01fZmluaXNoICsgMSk7CiAgICAgICAgKl9fcG9z aXRpb24gPSBfX3g7CiAgICAgICAgKytfTV9maW5pc2g7CiAgICAgIH0KICAgICAgZWxzZSB7CiAg ICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAg PyAyICogc2l6ZSgpIDogc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfTV93b3JkX2JpdCk7CiAgICAg ICAgX0JpdF90eXBlICogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICBpdGVyYXRv ciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAg ICAgICpfX2krKyA9IF9feDsKICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVu ZCgpLCBfX2kpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9lbmRfb2Zfc3Rv cmFnZSA9IF9fcSArIChfX2xlbiArIF9NX3dvcmRfYml0IC0gMSkvX01fd29yZF9iaXQ7CiAgICAg ICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICB9CiAgICB9CgogICAgdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9J bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgICAgX01fc3RhcnQgPSBp dGVyYXRvcigpOwogICAgICBfTV9maW5pc2ggPSBpdGVyYXRvcigpOwogICAgICBfTV9lbmRfb2Zf c3RvcmFnZSA9IDA7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkK ICAgICAgICBwdXNoX2JhY2soKl9fZmlyc3QpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBf Rm9yd2FyZEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9Gb3J3YXJkSXRl cmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICAgICAgc2l6ZV90eXBlIF9fbiA9 IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAg ICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBf X3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J bnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJh dG9yX3RhZykgewogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIHsK ICAgICAgICBfX3BvcyA9IGluc2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgICAgICsrX19wb3M7 CiAgICAgIH0KICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAg IHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAg ICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICAg ICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IGRpc3Rh bmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0g X19uKSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGVuZCgpLCBfTV9maW5p c2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFz dCwgX19wb3NpdGlvbik7CiAgICAgICAgICBfTV9maW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9f bik7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0g c2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsKICAgICAgICAgIF9CaXRfdHlwZSAqIF9fcSA9IF9N X2JpdF9hbGxvYyhfX2xlbik7CiAgICAgICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCks IF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgICAgX19pID0gY29weShfX2Zp cnN0LCBfX2xhc3QsIF9faSk7CiAgICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24s IGVuZCgpLCBfX2kpOwogICAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgICAgX01fZW5k X29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRfYml0 OwogICAgICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICAgIH0KICAgICAg fQogICAgfQoKICBwdWJsaWM6CiAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIF9NX3N0YXJ0 OyB9CiAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9 CiAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9maW5pc2g7IH0KICAgIGNvbnN0X2l0ZXJh dG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQoKICAgIHJldmVyc2VfaXRlcmF0 b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICAgIGNvbnN0 X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgewogICAgICByZXR1cm4gY29uc3RfcmV2 ZXJzZV9pdGVyYXRvcihlbmQoKSk7CiAgICB9CiAgICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7 IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAgICBjb25zdF9yZXZlcnNlX2l0 ZXJhdG9yIHJlbmQoKSBjb25zdCB7CiAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y KGJlZ2luKCkpOwogICAgfQoKICAgIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gc2l6 ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICAgIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0 IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KICAgIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0 IHsKICAgICAgcmV0dXJuIHNpemVfdHlwZShjb25zdF9pdGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFn ZSwgMCkgLSBiZWdpbigpKTsKICAgIH0KICAgIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBi ZWdpbigpID09IGVuZCgpOyB9CgogICAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9f bikKICAgICAgeyByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOyB9CiAg ICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSBjb25zdAogICAgICB7 IHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7IH0KCiAgICB2b2lkIF9N X3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0IHsKICAgICAgaWYgKF9fbiA+PSB0aGlz LT5zaXplKCkpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoInZlY3Rvcjxib29sPiIpOwog ICAgfQoKICAgIHJlZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKQogICAgICB7IF9NX3JhbmdlX2No ZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBhdChz aXplX3R5cGUgX19uKSBjb25zdAogICAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAo KnRoaXMpW19fbl07IH0KCiAgICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUm IF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9f YSkge30KCiAgICB2ZWN0b3Ioc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3ZhbHVlLAogICAgICAgICAg ICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6 IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIF9NX2luaXRpYWxpemUoX19u KTsKICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX192YWx1ZSA/ IH4wIDogMCk7CiAgICB9CgogICAgZXhwbGljaXQgdmVjdG9yKHNpemVfdHlwZSBfX24pCiAgICAg IDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KGFsbG9jYXRvcl90eXBlKCkpCiAgICB7CiAgICAgIF9N X2luaXRpYWxpemUoX19uKTsKICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3Rv cmFnZSwgMCk7CiAgICB9CgogICAgdmVjdG9yKGNvbnN0IHZlY3RvciYgX194KSA6IF9CdmVjdG9y X2Jhc2U8X0FsbG9jPihfX3guZ2V0X2FsbG9jYXRvcigpKSB7CiAgICAgIF9NX2luaXRpYWxpemUo X194LnNpemUoKSk7CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQp OwogICAgfQoKCgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZCBfTV9pbml0 aWFsaXplX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LCBfX3RydWVfdHlwZSkg ewogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01f ZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnB1dEl0 ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgICAgX01faW5pdGlhbGl6ZV9yYW5nZShf X2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQoKICAg IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZlY3RvcihfSW5wdXRJdGVyYXRv ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICBjb25zdCBhbGxv Y2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZlY3Rvcl9iYXNl PF9BbGxvYz4oX19hKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9J bnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01faW5pdGlhbGl6ZV9k aXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB+dmVjdG9y KCkgeyB9CgogICAgdmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgdmVjdG9yJiBfX3gpIHsKICAgICAg aWYgKCZfX3ggPT0gdGhpcykgcmV0dXJuICp0aGlzOwogICAgICBpZiAoX194LnNpemUoKSA+IGNh cGFjaXR5KCkpIHsKICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01faW5pdGlhbGl6 ZShfX3guc2l6ZSgpKTsKICAgICAgfQogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCks IGJlZ2luKCkpOwogICAgICBfTV9maW5pc2ggPSBiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9f eC5zaXplKCkpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKCgoKCiAgICB2b2lkIF9NX2Zp bGxfYXNzaWduKHNpemVfdCBfX24sIGJvb2wgX194KSB7CiAgICAgIGlmIChfX24gPiBzaXplKCkp IHsKICAgICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+ MCA6IDApOwogICAgICAgIGluc2VydChlbmQoKSwgX19uIC0gc2l6ZSgpLCBfX3gpOwogICAgICB9 CiAgICAgIGVsc2UgewogICAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX24sIGVuZCgpKTsKICAgICAg ICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOwog ICAgICB9CiAgICB9CgogICAgdm9pZCBhc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsgX01f ZmlsbF9hc3NpZ24oX19uLCBfX3gpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh dG9yPgogICAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0 b3IgX19sYXN0KSB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRl cmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19m aXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9J bnRlZ2VyPgogICAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdl ciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdCkgX19u LCAoYm9vbCkgX192YWwpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CiAgICB2 b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s YXN0LCBfX2ZhbHNlX3R5cGUpCiAgICAgIHsgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3Qs IF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmly c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9p dGVyYXRvcl90YWcpIHsKICAgICAgaXRlcmF0b3IgX19jdXIgPSBiZWdpbigpOwogICAgICBmb3Ig KCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmly c3QpCiAgICAgICAgKl9fY3VyID0gKl9fZmlyc3Q7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFz dCkKICAgICAgICBlcmFzZShfX2N1ciwgZW5kKCkpOwogICAgICBlbHNlCiAgICAgICAgaW5zZXJ0 KGVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9y d2FyZEl0ZXJhdG9yPgogICAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19m aXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgZm9y d2FyZF9pdGVyYXRvcl90YWcpIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gZGlzdGFuY2UoX19m aXJzdCwgX19sYXN0KTsKICAgICAgaWYgKF9fbGVuIDwgc2l6ZSgpKQogICAgICAgIGVyYXNlKGNv cHkoX19maXJzdCwgX19sYXN0LCBiZWdpbigpKSwgZW5kKCkpOwogICAgICBlbHNlIHsKICAgICAg ICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlk LCBzaXplKCkpOwogICAgICAgIGNvcHkoX19maXJzdCwgX19taWQsIGJlZ2luKCkpOwogICAgICAg IGluc2VydChlbmQoKSwgX19taWQsIF9fbGFzdCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIHJl c2VydmUoc2l6ZV90eXBlIF9fbikgewogICAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAg ICAgIF9CaXRfdHlwZSAqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX24pOwogICAgICAgIF9NX2Zpbmlz aCA9IGNvcHkoYmVnaW4oKSwgZW5kKCksIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgIF9NX2Rl YWxsb2NhdGUoKTsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgICAg X01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3Jk X2JpdDsKICAgICAgfQogICAgfQoKICAgIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdp bigpOyB9CiAgICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4o KTsgfQogICAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIGNv bnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgICB2 b2lkIHB1c2hfYmFjayhib29sIF9feCkgewogICAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01f ZW5kX29mX3N0b3JhZ2UpCiAgICAgICAgKl9NX2ZpbmlzaCsrID0gX194OwogICAgICBlbHNlCiAg ICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSwgX194KTsKICAgIH0KICAgIHZvaWQgc3dhcCh2ZWN0 b3I8Ym9vbCwgX0FsbG9jPiYgX194KSB7CiAgICAgIHN0ZDo6c3dhcChfTV9zdGFydCwgX194Ll9N X3N0YXJ0KTsKICAgICAgc3RkOjpzd2FwKF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICAg IHN0ZDo6c3dhcChfTV9lbmRfb2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICAg IH0KICAgIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCA9IGJv b2woKSkgewogICAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7 CiAgICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0 aW9uID09IGVuZCgpKQogICAgICAgICpfTV9maW5pc2grKyA9IF9feDsKICAgICAgZWxzZQogICAg ICAgIF9NX2luc2VydF9hdXgoX19wb3NpdGlvbiwgX194KTsKICAgICAgcmV0dXJuIGJlZ2luKCkg KyBfX247CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9N X2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBf X3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkgewogICAgICBfTV9m aWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9z LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu cHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90 eXBlKSB7CiAgICAgIF9NX2luc2VydF9yYW5nZShfX3BvcywgX19maXJzdCwgX19sYXN0LCBfX2l0 ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlcmF0b3I+CiAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAg ICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50 ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19wb3NpdGlvbiwgX19m aXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogICAgdm9pZCBfTV9maWxsX2luc2Vy dChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgewogICAgICBp ZiAoX19uID09IDApIHJldHVybjsKICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19u KSB7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsg ZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlv biArIGRpZmZlcmVuY2VfdHlwZShfX24pLCBfX3gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBkaWZm ZXJlbmNlX3R5cGUoX19uKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUg X19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAgICAgIF9CaXRfdHlwZSAqIF9f cSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdp bigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICBmaWxsX24oX19pLCBf X24sIF9feCk7CiAgICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19p ICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAg ICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9NX3dvcmRfYml0IC0gMSkvX01f d29yZF9iaXQ7CiAgICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICB9CiAg ICB9CgogICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwg Ym9vbCBfX3gpIHsKICAgICAgX01fZmlsbF9pbnNlcnQoX19wb3NpdGlvbiwgX19uLCBfX3gpOwog ICAgfQoKICAgIHZvaWQgcG9wX2JhY2soKSB7IC0tX01fZmluaXNoOyB9CiAgICBpdGVyYXRvciBl cmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBl bmQoKSkKICAgICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAg ICAgICAgLS1fTV9maW5pc2g7CiAgICAgIHJldHVybiBfX3Bvc2l0aW9uOwogICAgfQogICAgaXRl cmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICAgIF9N X2ZpbmlzaCA9IGNvcHkoX19sYXN0LCBlbmQoKSwgX19maXJzdCk7CiAgICAgIHJldHVybiBfX2Zp cnN0OwogICAgfQogICAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGJvb2wgX194 ID0gYm9vbCgpKSB7CiAgICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQogICAgICAgIGVyYXNl KGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uZXdfc2l6ZSksIGVuZCgpKTsKICAgICAgZWxz ZQogICAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsKICAgIH0K ICAgIHZvaWQgZmxpcCgpIHsKICAgICAgZm9yIChfQml0X3R5cGUgKiBfX3AgPSBfTV9zdGFydC5f TV9wOyBfX3AgIT0gX01fZW5kX29mX3N0b3JhZ2U7ICsrX19wKQogICAgICAgICpfX3AgPSB+Kl9f cDsKICAgIH0KCiAgICB2b2lkIGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KICB9 OwoKCnR5cGVkZWYgdmVjdG9yPGJvb2wsIF9fYWxsb2M+IGJpdF92ZWN0b3I7Cgp9CiMgNzMgIi91 c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL3ZlY3RvciIgMiAzCiMgMjQgIi9o b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L3N0b3JhZ2Vfb3Jk ZXIuaHBwIiAyIDMKCm5hbWVzcGFjZSBib29zdCB7CgoKICBjbGFzcyBjX3N0b3JhZ2Vfb3JkZXI7 CiAgY2xhc3MgZm9ydHJhbl9zdG9yYWdlX29yZGVyOwoKICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3Qg TnVtRGltcz4KICBjbGFzcyBnZW5lcmFsX3N0b3JhZ2Vfb3JkZXIKICB7CiAgcHVibGljOgogICAg dHlwZWRlZiBkZXRhaWw6Om11bHRpX2FycmF5OjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgdGVt cGxhdGUgPHR5cGVuYW1lIE9yZGVyaW5nSXRlciwgdHlwZW5hbWUgQXNjZW5kaW5nSXRlcj4KICAg IGdlbmVyYWxfc3RvcmFnZV9vcmRlcihPcmRlcmluZ0l0ZXIgb3JkZXJpbmcsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgQXNjZW5kaW5nSXRlciBhc2NlbmRpbmcpIHsKICAgICAgYm9vc3Q6OmNv cHlfbihvcmRlcmluZyxOdW1EaW1zLG9yZGVyaW5nXy5iZWdpbigpKTsKICAgICAgYm9vc3Q6OmNv cHlfbihhc2NlbmRpbmcsTnVtRGltcyxhc2NlbmRpbmdfLmJlZ2luKCkpOwogICAgfQoKCgoKCiAg ICBnZW5lcmFsX3N0b3JhZ2Vfb3JkZXIoY29uc3QgY19zdG9yYWdlX29yZGVyJikgewogICAgICBm b3IgKHNpemVfdHlwZSBpPTA7IGkgIT0gTnVtRGltczsgKytpKSB7CiAgICAgICAgb3JkZXJpbmdf W2ldID0gTnVtRGltcyAtIDEgLSBpOwogICAgICB9CiAgICAgIGFzY2VuZGluZ18uYXNzaWduKHRy dWUpOwogICAgfQoKICAgIGdlbmVyYWxfc3RvcmFnZV9vcmRlcihjb25zdCBmb3J0cmFuX3N0b3Jh Z2Vfb3JkZXImKSB7CiAgICAgIGZvciAoc2l6ZV90eXBlIGk9MDsgaSAhPSBOdW1EaW1zOyArK2kp IHsKICAgICAgICBvcmRlcmluZ19baV0gPSBpOwogICAgICB9CiAgICAgIGFzY2VuZGluZ18uYXNz aWduKHRydWUpOwogICAgfQoKICAgIHNpemVfdHlwZSBvcmRlcmluZyhzaXplX3R5cGUgZGltKSBj b25zdCB7IHJldHVybiBvcmRlcmluZ19bZGltXTsgfQogICAgYm9vbCBhc2NlbmRpbmcoc2l6ZV90 eXBlIGRpbSkgY29uc3QgeyByZXR1cm4gYXNjZW5kaW5nX1tkaW1dOyB9CgogICAgYm9vbCBhbGxf ZGltc19hc2NlbmRpbmcoKSBjb25zdCB7CiAgICAgIHJldHVybiBzdGQ6OmFjY3VtdWxhdGUoYXNj ZW5kaW5nXy5iZWdpbigpLGFzY2VuZGluZ18uZW5kKCksdHJ1ZSwKICAgICAgICAgICAgICAgICAg ICAgIHN0ZDo6bG9naWNhbF9hbmQ8Ym9vbD4oKSk7CiAgICB9CgogICAgYm9vbCBvcGVyYXRvcj09 KGdlbmVyYWxfc3RvcmFnZV9vcmRlciBjb25zdCYgcmhzKSBjb25zdCB7CiAgICAgIHJldHVybiAo b3JkZXJpbmdfID09IHJocy5vcmRlcmluZ18pICYmCiAgICAgICAgKGFzY2VuZGluZ18gPT0gcmhz LmFzY2VuZGluZ18pOwogICAgfQoKICBwcm90ZWN0ZWQ6CiAgICBib29zdDo6YXJyYXk8c2l6ZV90 eXBlLE51bURpbXM+IG9yZGVyaW5nXzsKICAgIGJvb3N0OjphcnJheTxib29sLE51bURpbXM+IGFz Y2VuZGluZ187CiAgfTsKCiAgY2xhc3MgY19zdG9yYWdlX29yZGVyCiAgewogICAgdHlwZWRlZiBk ZXRhaWw6Om11bHRpX2FycmF5OjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHB1YmxpYzoKCgoKICAg IHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOdW1EaW1zPgogICAgb3BlcmF0b3IgZ2VuZXJhbF9zdG9y YWdlX29yZGVyPE51bURpbXM+KCkgY29uc3QgewogICAgICBib29zdDo6YXJyYXk8c2l6ZV90eXBl LE51bURpbXM+IG9yZGVyaW5nOwogICAgICBib29zdDo6YXJyYXk8Ym9vbCxOdW1EaW1zPiBhc2Nl bmRpbmc7CgogICAgICBmb3IgKHNpemVfdHlwZSBpPTA7IGkgIT0gTnVtRGltczsgKytpKSB7CiAg ICAgICAgb3JkZXJpbmdbaV0gPSBOdW1EaW1zIC0gMSAtIGk7CiAgICAgICAgYXNjZW5kaW5nW2ld ID0gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZ2VuZXJhbF9zdG9yYWdlX29yZGVyPE51bURp bXM+KG9yZGVyaW5nLmJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYXNjZW5kaW5nLmJlZ2luKCkpOwogICAgfQoKICB9OwoKICBjbGFzcyBmb3J0cmFu X3N0b3JhZ2Vfb3JkZXIKICB7CiAgICB0eXBlZGVmIGRldGFpbDo6bXVsdGlfYXJyYXk6OnNpemVf dHlwZSBzaXplX3R5cGU7CiAgcHVibGljOgoKCgogICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE51 bURpbXM+CiAgICBvcGVyYXRvciBnZW5lcmFsX3N0b3JhZ2Vfb3JkZXI8TnVtRGltcz4oKSBjb25z dCB7CiAgICAgIGJvb3N0OjphcnJheTxzaXplX3R5cGUsTnVtRGltcz4gb3JkZXJpbmc7CiAgICAg IGJvb3N0OjphcnJheTxib29sLE51bURpbXM+IGFzY2VuZGluZzsKCiAgICAgIGZvciAoc2l6ZV90 eXBlIGk9MDsgaSAhPSBOdW1EaW1zOyArK2kpIHsKICAgICAgICBvcmRlcmluZ1tpXSA9IGk7CiAg ICAgICAgYXNjZW5kaW5nW2ldID0gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZ2VuZXJhbF9z dG9yYWdlX29yZGVyPE51bURpbXM+KG9yZGVyaW5nLmJlZ2luKCksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNjZW5kaW5nLmJlZ2luKCkpOwogICAgfQoKICB9 OwoKfQojIDI2ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJh eS9iYXNlLmhwcCIgMiAzCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29z dC9tdWx0aV9hcnJheS9pdGVyYXRvcl9hZGFwdG9ycy5ocHAiIDEgMwojIDEyOCAiL2hvbWUvY29t cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvaXRlcmF0b3JfYWRhcHRvcnMu aHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdXRpbGl0eS5o cHAiIDEgMwojIDE4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC91dGlsaXR5 LmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2NoZWNrZWRf ZGVsZXRlLmhwcCIgMSAzCiMgMTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0 L2NoZWNrZWRfZGVsZXRlLmhwcCIgMwpuYW1lc3BhY2UgYm9vc3QKewoKCgp0ZW1wbGF0ZTwgdHlw ZW5hbWUgVCA+IGlubGluZSB2b2lkIGNoZWNrZWRfZGVsZXRlKFQgKiB4KQp7CiAgICB0eXBlZGVm IGNoYXIgdHlwZV9tdXN0X2JlX2NvbXBsZXRlW3NpemVvZihUKV07CiAgICBkZWxldGUgeDsKfQoK dGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBpbmxpbmUgdm9pZCBjaGVja2VkX2FycmF5X2RlbGV0ZShU ICogeCkKewogICAgdHlwZWRlZiBjaGFyIHR5cGVfbXVzdF9iZV9jb21wbGV0ZVtzaXplb2YoVCld OwogICAgZGVsZXRlIFtdIHg7Cn0KCnRlbXBsYXRlPGNsYXNzIFQ+IHN0cnVjdCBjaGVja2VkX2Rl bGV0ZXIKewogICAgdHlwZWRlZiB2b2lkIHJlc3VsdF90eXBlOwogICAgdHlwZWRlZiBUICogYXJn dW1lbnRfdHlwZTsKCiAgICB2b2lkIG9wZXJhdG9yKCkoVCAqIHgpCiAgICB7CiAgICAgICAgY2hl Y2tlZF9kZWxldGUoeCk7CiAgICB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBUPiBzdHJ1Y3QgY2hlY2tl ZF9hcnJheV9kZWxldGVyCnsKICAgIHR5cGVkZWYgdm9pZCByZXN1bHRfdHlwZTsKICAgIHR5cGVk ZWYgVCAqIGFyZ3VtZW50X3R5cGU7CgogICAgdm9pZCBvcGVyYXRvcigpKFQgKiB4KQogICAgewog ICAgICAgIGNoZWNrZWRfYXJyYXlfZGVsZXRlKHgpOwogICAgfQp9OwoKfQojIDE5ICIvaG9tZS9j b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC91dGlsaXR5LmhwcCIgMiAzCiMgMSAiL2hvbWUv Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdXRpbGl0eS9iYXNlX2Zyb21fbWVtYmVyLmhw cCIgMSAzCiMgMTQgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3V0aWxpdHkv YmFzZV9mcm9tX21lbWJlci5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk ZS9ib29zdC91dGlsaXR5X2Z3ZC5ocHAiIDEgMwojIDE1ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv aW5jbHVkZS9ib29zdC91dGlsaXR5X2Z3ZC5ocHAiIDMKbmFtZXNwYWNlIGJvb3N0CnsKCgoKCnRl bXBsYXRlIDwgdHlwZW5hbWUgTWVtYmVyVHlwZSwgaW50IFVuaXF1ZUlEID0gMCA+CiAgICBjbGFz cyBiYXNlX2Zyb21fbWVtYmVyOwoKCgoKY2xhc3Mgbm9uY29weWFibGU7CgoKCn0KIyAxNSAiL2hv bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdXRpbGl0eS9iYXNlX2Zyb21fbWVtYmVy LmhwcCIgMiAzCgoKbmFtZXNwYWNlIGJvb3N0CnsKIyAyOSAiL2hvbWUvY29tcGJpby9kOTUtYmxp L2luY2x1ZGUvYm9vc3QvdXRpbGl0eS9iYXNlX2Zyb21fbWVtYmVyLmhwcCIgMwp0ZW1wbGF0ZSA8 IHR5cGVuYW1lIE1lbWJlclR5cGUsIGludCBVbmlxdWVJRCA+CmNsYXNzIGJhc2VfZnJvbV9tZW1i ZXIKewpwcm90ZWN0ZWQ6CiAgICBNZW1iZXJUeXBlIG1lbWJlcjsKCiAgICBleHBsaWNpdCBiYXNl X2Zyb21fbWVtYmVyKCkKICAgICAgICA6IG1lbWJlcigpCiAgICAgICAge30KCiAgICB0ZW1wbGF0 ZTwgdHlwZW5hbWUgVDEgPgogICAgZXhwbGljaXQgYmFzZV9mcm9tX21lbWJlciggVDEgeDEgKQog ICAgICAgIDogbWVtYmVyKCB4MSApCiAgICAgICAge30KCiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUg VDEsIHR5cGVuYW1lIFQyID4KICAgIGJhc2VfZnJvbV9tZW1iZXIoIFQxIHgxLCBUMiB4MiApCiAg ICAgICAgOiBtZW1iZXIoIHgxLCB4MiApCiAgICAgICAge30KCiAgICB0ZW1wbGF0ZTwgdHlwZW5h bWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMyA+CiAgICBiYXNlX2Zyb21fbWVtYmVyKCBU MSB4MSwgVDIgeDIsIFQzIHgzICkKICAgICAgICA6IG1lbWJlciggeDEsIHgyLCB4MyApCiAgICAg ICAge30KCn07Cgp9CiMgMjAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3V0 aWxpdHkuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC91 dGlsaXR5L2FkZHJlc3NvZi5ocHAiIDEgMwojIDE5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j bHVkZS9ib29zdC91dGlsaXR5L2FkZHJlc3NvZi5ocHAiIDMKbmFtZXNwYWNlIGJvb3N0IHsKCgoK dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFQqIGFkZHJlc3NvZihUJiB2KQp7CiAgcmV0dXJuIHJlaW50 ZXJwcmV0X2Nhc3Q8VCo+KAogICAgICAgJmNvbnN0X2Nhc3Q8Y2hhciY+KHJlaW50ZXJwcmV0X2Nh c3Q8Y29uc3Qgdm9sYXRpbGUgY2hhciAmPih2KSkpOwp9Cgp9CiMgMjEgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3V0aWxpdHkuaHBwIiAyIDMKCm5hbWVzcGFjZSBib29zdAp7 CiMgMzUgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3V0aWxpdHkuaHBwIiAz CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KICAgIGlubGluZSBUIG5leHQoVCB4KSB7IHJldHVybiAr K3g7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KICAgIGlubGluZSBUIHByaW9yKFQgeCkgeyBy ZXR1cm4gLS14OyB9CiMgNDkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3V0 aWxpdHkuaHBwIiAzCiAgICBjbGFzcyBub25jb3B5YWJsZQogICAgewogICAgcHJvdGVjdGVkOgog ICAgICAgIG5vbmNvcHlhYmxlKCl7fQogICAgICAgIH5ub25jb3B5YWJsZSgpe30KICAgIHByaXZh dGU6CiAgICAgICAgbm9uY29weWFibGUoIGNvbnN0IG5vbmNvcHlhYmxlJiApOwogICAgICAgIGNv bnN0IG5vbmNvcHlhYmxlJiBvcGVyYXRvcj0oIGNvbnN0IG5vbmNvcHlhYmxlJiApOwogICAgfTsK Cgp9CiMgMTI5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJh eS9pdGVyYXRvcl9hZGFwdG9ycy5ocHAiIDIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9p bmNsdWRlL2Jvb3N0L2NvbXByZXNzZWRfcGFpci5ocHAiIDEgMwojIDIwICIvaG9tZS9jb21wYmlv L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9jb21wcmVzc2VkX3BhaXIuaHBwIiAzCiMgMSAiL2hvbWUv Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvZGV0YWlsL2NvbXByZXNzZWRfcGFpci5ocHAi IDEgMwojIDIzICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9kZXRhaWwvY29t cHJlc3NlZF9wYWlyLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv b3N0L3R5cGVfdHJhaXRzL29iamVjdF90cmFpdHMuaHBwIiAxIDMKIyAyNCAiL2hvbWUvY29tcGJp by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvZGV0YWlsL2NvbXByZXNzZWRfcGFpci5ocHAiIDIgMwoK CiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvdHlwZV90cmFpdHMvc2Ft ZV90cmFpdHMuaHBwIiAxIDMKIyAyNyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v c3QvZGV0YWlsL2NvbXByZXNzZWRfcGFpci5ocHAiIDIgMwoKCiMgMSAiL2hvbWUvY29tcGJpby9k OTUtYmxpL2luY2x1ZGUvYm9vc3QvY2FsbF90cmFpdHMuaHBwIiAxIDMKIyAyMCAiL2hvbWUvY29t cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvY2FsbF90cmFpdHMuaHBwIiAzCiMgMSAiL2hvbWUv Y29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvZGV0YWlsL2NhbGxfdHJhaXRzLmhwcCIgMSAz CiMgMjcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2RldGFpbC9jYWxsX3Ry YWl0cy5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBl X3RyYWl0cy9hcml0aG1ldGljX3RyYWl0cy5ocHAiIDEgMwojIDI4ICIvaG9tZS9jb21wYmlvL2Q5 NS1ibGkvaW5jbHVkZS9ib29zdC9kZXRhaWwvY2FsbF90cmFpdHMuaHBwIiAyIDMKCgojIDEgIi9o b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2NvbXBvc2l0ZV90 cmFpdHMuaHBwIiAxIDMKIyAzMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv ZGV0YWlsL2NhbGxfdHJhaXRzLmhwcCIgMiAzCgoKbmFtZXNwYWNlIGJvb3N0ewoKbmFtZXNwYWNl IGRldGFpbHsKCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBib29sIHNtYWxsXz4Kc3RydWN0IGN0X2lt cDIKewogICB0eXBlZGVmIGNvbnN0IFQmIHBhcmFtX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4Kc3RydWN0IGN0X2ltcDI8VCwgdHJ1ZT4KewogICB0eXBlZGVmIGNvbnN0IFQgcGFyYW1f dHlwZTsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBib29sIGlzcCwgYm9vbCBiMT4Kc3RydWN0 IGN0X2ltcAp7CiAgIHR5cGVkZWYgY29uc3QgVCYgcGFyYW1fdHlwZTsKfTsKCnRlbXBsYXRlIDx0 eXBlbmFtZSBULCBib29sIGlzcD4Kc3RydWN0IGN0X2ltcDxULCBpc3AsIHRydWU+CnsKICAgdHlw ZWRlZiB0eXBlbmFtZSBjdF9pbXAyPFQsIHNpemVvZihUKSA8PSBzaXplb2Yodm9pZCopPjo6cGFy YW1fdHlwZSBwYXJhbV90eXBlOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGJvb2wgYjE+CnN0 cnVjdCBjdF9pbXA8VCwgdHJ1ZSwgYjE+CnsKICAgdHlwZWRlZiBUIGNvbnN0IHBhcmFtX3R5cGU7 Cn07Cgp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IGNhbGxfdHJhaXRzCnsKcHVibGlj OgogICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKICAgdHlwZWRlZiBUJiByZWZlcmVuY2U7CiAgIHR5 cGVkZWYgY29uc3QgVCYgY29uc3RfcmVmZXJlbmNlOwoKCgoKCgogICB0eXBlZGVmIHR5cGVuYW1l IGRldGFpbDo6Y3RfaW1wPAogICAgICBULAogICAgICA6OmJvb3N0Ojppc19wb2ludGVyPFQ+Ojp2 YWx1ZSwKICAgICAgOjpib29zdDo6aXNfYXJpdGhtZXRpYzxUPjo6dmFsdWUKICAgPjo6cGFyYW1f dHlwZSBwYXJhbV90eXBlOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBjYWxsX3Ry YWl0czxUJj4KewogICB0eXBlZGVmIFQmIHZhbHVlX3R5cGU7CiAgIHR5cGVkZWYgVCYgcmVmZXJl bmNlOwogICB0eXBlZGVmIGNvbnN0IFQmIGNvbnN0X3JlZmVyZW5jZTsKICAgdHlwZWRlZiBUJiBw YXJhbV90eXBlOwp9OwojIDEyOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv ZGV0YWlsL2NhbGxfdHJhaXRzLmhwcCIgMwp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXpl X3QgTj4Kc3RydWN0IGNhbGxfdHJhaXRzPFQgW05dPgp7CnByaXZhdGU6CiAgIHR5cGVkZWYgVCBh cnJheV90eXBlW05dOwpwdWJsaWM6CgogICB0eXBlZGVmIGNvbnN0IFQqIHZhbHVlX3R5cGU7CiAg IHR5cGVkZWYgYXJyYXlfdHlwZSYgcmVmZXJlbmNlOwogICB0eXBlZGVmIGNvbnN0IGFycmF5X3R5 cGUmIGNvbnN0X3JlZmVyZW5jZTsKICAgdHlwZWRlZiBjb25zdCBUKiBjb25zdCBwYXJhbV90eXBl Owp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4+CnN0cnVjdCBjYWxsX3Ry YWl0czxjb25zdCBUIFtOXT4Kewpwcml2YXRlOgogICB0eXBlZGVmIGNvbnN0IFQgYXJyYXlfdHlw ZVtOXTsKcHVibGljOgoKICAgdHlwZWRlZiBjb25zdCBUKiB2YWx1ZV90eXBlOwogICB0eXBlZGVm IGFycmF5X3R5cGUmIHJlZmVyZW5jZTsKICAgdHlwZWRlZiBjb25zdCBhcnJheV90eXBlJiBjb25z dF9yZWZlcmVuY2U7CiAgIHR5cGVkZWYgY29uc3QgVCogY29uc3QgcGFyYW1fdHlwZTsKfTsKCgp9 CiMgMjEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2NhbGxfdHJhaXRzLmhw cCIgMiAzCiMgMzAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2RldGFpbC9j b21wcmVzc2VkX3BhaXIuaHBwIiAyIDMKCgpuYW1lc3BhY2UgYm9vc3QKewoKdGVtcGxhdGUgPGNs YXNzIFQxLCBjbGFzcyBUMj4KY2xhc3MgY29tcHJlc3NlZF9wYWlyOwoKCgoKbmFtZXNwYWNlIGRl dGFpbHMKewoKICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMiwgYm9vbCBJc1NhbWUsIGJv b2wgRmlyc3RFbXB0eSwgYm9vbCBTZWNvbmRFbXB0eT4KICAgc3RydWN0IGNvbXByZXNzZWRfcGFp cl9zd2l0Y2g7CgogICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgogICBzdHJ1Y3QgY29t cHJlc3NlZF9wYWlyX3N3aXRjaDxUMSwgVDIsIGZhbHNlLCBmYWxzZSwgZmFsc2U+CiAgICAgIHtz dGF0aWMgY29uc3QgaW50IHZhbHVlID0gMDt9OwoKICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFz cyBUMj4KICAgc3RydWN0IGNvbXByZXNzZWRfcGFpcl9zd2l0Y2g8VDEsIFQyLCBmYWxzZSwgdHJ1 ZSwgdHJ1ZT4KICAgICAge3N0YXRpYyBjb25zdCBpbnQgdmFsdWUgPSAzO307CgogICB0ZW1wbGF0 ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgogICBzdHJ1Y3QgY29tcHJlc3NlZF9wYWlyX3N3aXRjaDxU MSwgVDIsIGZhbHNlLCB0cnVlLCBmYWxzZT4KICAgICAge3N0YXRpYyBjb25zdCBpbnQgdmFsdWUg PSAxO307CgogICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgogICBzdHJ1Y3QgY29tcHJl c3NlZF9wYWlyX3N3aXRjaDxUMSwgVDIsIGZhbHNlLCBmYWxzZSwgdHJ1ZT4KICAgICAge3N0YXRp YyBjb25zdCBpbnQgdmFsdWUgPSAyO307CgogICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQy PgogICBzdHJ1Y3QgY29tcHJlc3NlZF9wYWlyX3N3aXRjaDxUMSwgVDIsIHRydWUsIHRydWUsIHRy dWU+CiAgICAgIHtzdGF0aWMgY29uc3QgaW50IHZhbHVlID0gNDt9OwoKICAgdGVtcGxhdGUgPGNs YXNzIFQxLCBjbGFzcyBUMj4KICAgc3RydWN0IGNvbXByZXNzZWRfcGFpcl9zd2l0Y2g8VDEsIFQy LCB0cnVlLCBmYWxzZSwgZmFsc2U+CiAgICAgIHtzdGF0aWMgY29uc3QgaW50IHZhbHVlID0gNTt9 OwoKICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMiwgaW50IFZlcnNpb24+IGNsYXNzIGNv bXByZXNzZWRfcGFpcl9pbXA7CgoKCiAgIHVzaW5nIHN0ZDo6c3dhcDsKCgoKCgoKICAgdGVtcGxh dGUgPHR5cGVuYW1lIFQ+CiAgIGlubGluZSB2b2lkIGNwX3N3YXAoVCYgdDEsIFQmIHQyKQogICB7 CgoKCiAgICAgIHN3YXAodDEsIHQyKTsKICAgfQoKCgogICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNs YXNzIFQyPgogICBjbGFzcyBjb21wcmVzc2VkX3BhaXJfaW1wPFQxLCBUMiwgMD4KICAgewogICBw dWJsaWM6CiAgICAgIHR5cGVkZWYgVDEgZmlyc3RfdHlwZTsKICAgICAgdHlwZWRlZiBUMiBzZWNv bmRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjYWxsX3RyYWl0czxmaXJzdF90eXBlPjo6 cGFyYW1fdHlwZSBmaXJzdF9wYXJhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxf dHJhaXRzPHNlY29uZF90eXBlPjo6cGFyYW1fdHlwZSBzZWNvbmRfcGFyYW1fdHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBjYWxsX3RyYWl0czxmaXJzdF90eXBlPjo6cmVmZXJlbmNlIGZpcnN0 X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjYWxsX3RyYWl0czxzZWNvbmRfdHlw ZT46OnJlZmVyZW5jZSBzZWNvbmRfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNh bGxfdHJhaXRzPGZpcnN0X3R5cGU+Ojpjb25zdF9yZWZlcmVuY2UgZmlyc3RfY29uc3RfcmVmZXJl bmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPHNlY29uZF90eXBlPjo6Y29u c3RfcmVmZXJlbmNlIHNlY29uZF9jb25zdF9yZWZlcmVuY2U7CgogICAgICBjb21wcmVzc2VkX3Bh aXJfaW1wKCkge30KCiAgICAgIGNvbXByZXNzZWRfcGFpcl9pbXAoZmlyc3RfcGFyYW1fdHlwZSB4 LCBzZWNvbmRfcGFyYW1fdHlwZSB5KQogICAgICAgICA6IGZpcnN0Xyh4KSwgc2Vjb25kXyh5KSB7 fQoKICAgICAgY29tcHJlc3NlZF9wYWlyX2ltcChmaXJzdF9wYXJhbV90eXBlIHgpCiAgICAgICAg IDogZmlyc3RfKHgpIHt9CgogICAgICBjb21wcmVzc2VkX3BhaXJfaW1wKHNlY29uZF9wYXJhbV90 eXBlIHkpCiAgICAgICAgIDogc2Vjb25kXyh5KSB7fQoKICAgICAgZmlyc3RfcmVmZXJlbmNlIGZp cnN0KCkge3JldHVybiBmaXJzdF87fQogICAgICBmaXJzdF9jb25zdF9yZWZlcmVuY2UgZmlyc3Qo KSBjb25zdCB7cmV0dXJuIGZpcnN0Xzt9CgogICAgICBzZWNvbmRfcmVmZXJlbmNlIHNlY29uZCgp IHtyZXR1cm4gc2Vjb25kXzt9CiAgICAgIHNlY29uZF9jb25zdF9yZWZlcmVuY2Ugc2Vjb25kKCkg Y29uc3Qge3JldHVybiBzZWNvbmRfO30KCiAgICAgIHZvaWQgc3dhcCg6OmJvb3N0Ojpjb21wcmVz c2VkX3BhaXI8VDEsIFQyPiYgeSkKICAgICAgewogICAgICAgICBjcF9zd2FwKGZpcnN0XywgeS5m aXJzdCgpKTsKICAgICAgICAgY3Bfc3dhcChzZWNvbmRfLCB5LnNlY29uZCgpKTsKICAgICAgfQog ICBwcml2YXRlOgogICAgICBmaXJzdF90eXBlIGZpcnN0XzsKICAgICAgc2Vjb25kX3R5cGUgc2Vj b25kXzsKICAgfTsKCgoKICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KICAgY2xhc3Mg Y29tcHJlc3NlZF9wYWlyX2ltcDxUMSwgVDIsIDE+CiAgICAgIDogcHJpdmF0ZSBUMQogICB7CiAg IHB1YmxpYzoKICAgICAgdHlwZWRlZiBUMSBmaXJzdF90eXBlOwogICAgICB0eXBlZGVmIFQyIHNl Y29uZF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPGZpcnN0X3R5cGU+ OjpwYXJhbV90eXBlIGZpcnN0X3BhcmFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2Fs bF90cmFpdHM8c2Vjb25kX3R5cGU+OjpwYXJhbV90eXBlIHNlY29uZF9wYXJhbV90eXBlOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPGZpcnN0X3R5cGU+OjpyZWZlcmVuY2UgZmly c3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPHNlY29uZF90 eXBlPjo6cmVmZXJlbmNlIHNlY29uZF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg Y2FsbF90cmFpdHM8Zmlyc3RfdHlwZT46OmNvbnN0X3JlZmVyZW5jZSBmaXJzdF9jb25zdF9yZWZl cmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90cmFpdHM8c2Vjb25kX3R5cGU+Ojpj b25zdF9yZWZlcmVuY2Ugc2Vjb25kX2NvbnN0X3JlZmVyZW5jZTsKCiAgICAgIGNvbXByZXNzZWRf cGFpcl9pbXAoKSB7fQoKICAgICAgY29tcHJlc3NlZF9wYWlyX2ltcChmaXJzdF9wYXJhbV90eXBl IHgsIHNlY29uZF9wYXJhbV90eXBlIHkpCiAgICAgICAgIDogZmlyc3RfdHlwZSh4KSwgc2Vjb25k Xyh5KSB7fQoKICAgICAgY29tcHJlc3NlZF9wYWlyX2ltcChmaXJzdF9wYXJhbV90eXBlIHgpCiAg ICAgICAgIDogZmlyc3RfdHlwZSh4KSB7fQoKICAgICAgY29tcHJlc3NlZF9wYWlyX2ltcChzZWNv bmRfcGFyYW1fdHlwZSB5KQogICAgICAgICA6IHNlY29uZF8oeSkge30KCiAgICAgIGZpcnN0X3Jl ZmVyZW5jZSBmaXJzdCgpIHtyZXR1cm4gKnRoaXM7fQogICAgICBmaXJzdF9jb25zdF9yZWZlcmVu Y2UgZmlyc3QoKSBjb25zdCB7cmV0dXJuICp0aGlzO30KCiAgICAgIHNlY29uZF9yZWZlcmVuY2Ug c2Vjb25kKCkge3JldHVybiBzZWNvbmRfO30KICAgICAgc2Vjb25kX2NvbnN0X3JlZmVyZW5jZSBz ZWNvbmQoKSBjb25zdCB7cmV0dXJuIHNlY29uZF87fQoKICAgICAgdm9pZCBzd2FwKDo6Ym9vc3Q6 OmNvbXByZXNzZWRfcGFpcjxUMSxUMj4mIHkpCiAgICAgIHsKCiAgICAgICAgIGNwX3N3YXAoc2Vj b25kXywgeS5zZWNvbmQoKSk7CiAgICAgIH0KICAgcHJpdmF0ZToKICAgICAgc2Vjb25kX3R5cGUg c2Vjb25kXzsKICAgfTsKCgoKICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KICAgY2xh c3MgY29tcHJlc3NlZF9wYWlyX2ltcDxUMSwgVDIsIDI+CiAgICAgIDogcHJpdmF0ZSBUMgogICB7 CiAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBUMSBmaXJzdF90eXBlOwogICAgICB0eXBlZGVmIFQy IHNlY29uZF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPGZpcnN0X3R5 cGU+OjpwYXJhbV90eXBlIGZpcnN0X3BhcmFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg Y2FsbF90cmFpdHM8c2Vjb25kX3R5cGU+OjpwYXJhbV90eXBlIHNlY29uZF9wYXJhbV90eXBlOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPGZpcnN0X3R5cGU+OjpyZWZlcmVuY2Ug Zmlyc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPHNlY29u ZF90eXBlPjo6cmVmZXJlbmNlIHNlY29uZF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgY2FsbF90cmFpdHM8Zmlyc3RfdHlwZT46OmNvbnN0X3JlZmVyZW5jZSBmaXJzdF9jb25zdF9y ZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90cmFpdHM8c2Vjb25kX3R5cGU+ Ojpjb25zdF9yZWZlcmVuY2Ugc2Vjb25kX2NvbnN0X3JlZmVyZW5jZTsKCiAgICAgIGNvbXByZXNz ZWRfcGFpcl9pbXAoKSB7fQoKICAgICAgY29tcHJlc3NlZF9wYWlyX2ltcChmaXJzdF9wYXJhbV90 eXBlIHgsIHNlY29uZF9wYXJhbV90eXBlIHkpCiAgICAgICAgIDogc2Vjb25kX3R5cGUoeSksIGZp cnN0Xyh4KSB7fQoKICAgICAgY29tcHJlc3NlZF9wYWlyX2ltcChmaXJzdF9wYXJhbV90eXBlIHgp CiAgICAgICAgIDogZmlyc3RfKHgpIHt9CgogICAgICBjb21wcmVzc2VkX3BhaXJfaW1wKHNlY29u ZF9wYXJhbV90eXBlIHkpCiAgICAgICAgIDogc2Vjb25kX3R5cGUoeSkge30KCiAgICAgIGZpcnN0 X3JlZmVyZW5jZSBmaXJzdCgpIHtyZXR1cm4gZmlyc3RfO30KICAgICAgZmlyc3RfY29uc3RfcmVm ZXJlbmNlIGZpcnN0KCkgY29uc3Qge3JldHVybiBmaXJzdF87fQoKICAgICAgc2Vjb25kX3JlZmVy ZW5jZSBzZWNvbmQoKSB7cmV0dXJuICp0aGlzO30KICAgICAgc2Vjb25kX2NvbnN0X3JlZmVyZW5j ZSBzZWNvbmQoKSBjb25zdCB7cmV0dXJuICp0aGlzO30KCiAgICAgIHZvaWQgc3dhcCg6OmJvb3N0 Ojpjb21wcmVzc2VkX3BhaXI8VDEsVDI+JiB5KQogICAgICB7CgogICAgICAgICBjcF9zd2FwKGZp cnN0XywgeS5maXJzdCgpKTsKICAgICAgfQoKICAgcHJpdmF0ZToKICAgICAgZmlyc3RfdHlwZSBm aXJzdF87CiAgIH07CgoKCiAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+CiAgIGNsYXNz IGNvbXByZXNzZWRfcGFpcl9pbXA8VDEsIFQyLCAzPgogICAgICA6IHByaXZhdGUgVDEsCiAgICAg ICAgcHJpdmF0ZSBUMgogICB7CiAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBUMSBmaXJzdF90eXBl OwogICAgICB0eXBlZGVmIFQyIHNlY29uZF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNh bGxfdHJhaXRzPGZpcnN0X3R5cGU+OjpwYXJhbV90eXBlIGZpcnN0X3BhcmFtX3R5cGU7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90cmFpdHM8c2Vjb25kX3R5cGU+OjpwYXJhbV90eXBlIHNl Y29uZF9wYXJhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPGZpcnN0 X3R5cGU+OjpyZWZlcmVuY2UgZmlyc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IGNhbGxfdHJhaXRzPHNlY29uZF90eXBlPjo6cmVmZXJlbmNlIHNlY29uZF9yZWZlcmVuY2U7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90cmFpdHM8Zmlyc3RfdHlwZT46OmNvbnN0X3JlZmVy ZW5jZSBmaXJzdF9jb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90 cmFpdHM8c2Vjb25kX3R5cGU+Ojpjb25zdF9yZWZlcmVuY2Ugc2Vjb25kX2NvbnN0X3JlZmVyZW5j ZTsKCiAgICAgIGNvbXByZXNzZWRfcGFpcl9pbXAoKSB7fQoKICAgICAgY29tcHJlc3NlZF9wYWly X2ltcChmaXJzdF9wYXJhbV90eXBlIHgsIHNlY29uZF9wYXJhbV90eXBlIHkpCiAgICAgICAgIDog Zmlyc3RfdHlwZSh4KSwgc2Vjb25kX3R5cGUoeSkge30KCiAgICAgIGNvbXByZXNzZWRfcGFpcl9p bXAoZmlyc3RfcGFyYW1fdHlwZSB4KQogICAgICAgICA6IGZpcnN0X3R5cGUoeCkge30KCiAgICAg IGNvbXByZXNzZWRfcGFpcl9pbXAoc2Vjb25kX3BhcmFtX3R5cGUgeSkKICAgICAgICAgOiBzZWNv bmRfdHlwZSh5KSB7fQoKICAgICAgZmlyc3RfcmVmZXJlbmNlIGZpcnN0KCkge3JldHVybiAqdGhp czt9CiAgICAgIGZpcnN0X2NvbnN0X3JlZmVyZW5jZSBmaXJzdCgpIGNvbnN0IHtyZXR1cm4gKnRo aXM7fQoKICAgICAgc2Vjb25kX3JlZmVyZW5jZSBzZWNvbmQoKSB7cmV0dXJuICp0aGlzO30KICAg ICAgc2Vjb25kX2NvbnN0X3JlZmVyZW5jZSBzZWNvbmQoKSBjb25zdCB7cmV0dXJuICp0aGlzO30K CgogICAgICB2b2lkIHN3YXAoOjpib29zdDo6Y29tcHJlc3NlZF9wYWlyPFQxLFQyPiYpIHt9CiAg IH07CgoKCgoKICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KICAgY2xhc3MgY29tcHJl c3NlZF9wYWlyX2ltcDxUMSwgVDIsIDQ+CiAgICAgIDogcHJpdmF0ZSBUMQogICB7CiAgIHB1Ymxp YzoKICAgICAgdHlwZWRlZiBUMSBmaXJzdF90eXBlOwogICAgICB0eXBlZGVmIFQyIHNlY29uZF90 eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPGZpcnN0X3R5cGU+OjpwYXJh bV90eXBlIGZpcnN0X3BhcmFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90cmFp dHM8c2Vjb25kX3R5cGU+OjpwYXJhbV90eXBlIHNlY29uZF9wYXJhbV90eXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPGZpcnN0X3R5cGU+OjpyZWZlcmVuY2UgZmlyc3RfcmVm ZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPHNlY29uZF90eXBlPjo6 cmVmZXJlbmNlIHNlY29uZF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90 cmFpdHM8Zmlyc3RfdHlwZT46OmNvbnN0X3JlZmVyZW5jZSBmaXJzdF9jb25zdF9yZWZlcmVuY2U7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90cmFpdHM8c2Vjb25kX3R5cGU+Ojpjb25zdF9y ZWZlcmVuY2Ugc2Vjb25kX2NvbnN0X3JlZmVyZW5jZTsKCiAgICAgIGNvbXByZXNzZWRfcGFpcl9p bXAoKSB7fQoKICAgICAgY29tcHJlc3NlZF9wYWlyX2ltcChmaXJzdF9wYXJhbV90eXBlIHgsIHNl Y29uZF9wYXJhbV90eXBlKQogICAgICAgICA6IGZpcnN0X3R5cGUoeCkge30KCiAgICAgIGNvbXBy ZXNzZWRfcGFpcl9pbXAoZmlyc3RfcGFyYW1fdHlwZSB4KQogICAgICAgICA6IGZpcnN0X3R5cGUo eCkge30KCiAgICAgIGZpcnN0X3JlZmVyZW5jZSBmaXJzdCgpIHtyZXR1cm4gKnRoaXM7fQogICAg ICBmaXJzdF9jb25zdF9yZWZlcmVuY2UgZmlyc3QoKSBjb25zdCB7cmV0dXJuICp0aGlzO30KCiAg ICAgIHNlY29uZF9yZWZlcmVuY2Ugc2Vjb25kKCkge3JldHVybiAqdGhpczt9CiAgICAgIHNlY29u ZF9jb25zdF9yZWZlcmVuY2Ugc2Vjb25kKCkgY29uc3Qge3JldHVybiAqdGhpczt9CgogICAgICB2 b2lkIHN3YXAoOjpib29zdDo6Y29tcHJlc3NlZF9wYWlyPFQxLFQyPiYpIHt9CiAgIHByaXZhdGU6 CiAgIH07CgoKCiAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+CiAgIGNsYXNzIGNvbXBy ZXNzZWRfcGFpcl9pbXA8VDEsIFQyLCA1PgogICB7CiAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBU MSBmaXJzdF90eXBlOwogICAgICB0eXBlZGVmIFQyIHNlY29uZF90eXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIGNhbGxfdHJhaXRzPGZpcnN0X3R5cGU+OjpwYXJhbV90eXBlIGZpcnN0X3BhcmFt X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90cmFpdHM8c2Vjb25kX3R5cGU+Ojpw YXJhbV90eXBlIHNlY29uZF9wYXJhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxf dHJhaXRzPGZpcnN0X3R5cGU+OjpyZWZlcmVuY2UgZmlyc3RfcmVmZXJlbmNlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPHNlY29uZF90eXBlPjo6cmVmZXJlbmNlIHNlY29uZF9y ZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90cmFpdHM8Zmlyc3RfdHlwZT46 OmNvbnN0X3JlZmVyZW5jZSBmaXJzdF9jb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgY2FsbF90cmFpdHM8c2Vjb25kX3R5cGU+Ojpjb25zdF9yZWZlcmVuY2Ugc2Vjb25kX2Nv bnN0X3JlZmVyZW5jZTsKCiAgICAgIGNvbXByZXNzZWRfcGFpcl9pbXAoKSB7fQoKICAgICAgY29t cHJlc3NlZF9wYWlyX2ltcChmaXJzdF9wYXJhbV90eXBlIHgsIHNlY29uZF9wYXJhbV90eXBlIHkp CiAgICAgICAgIDogZmlyc3RfKHgpLCBzZWNvbmRfKHkpIHt9CgogICAgICBjb21wcmVzc2VkX3Bh aXJfaW1wKGZpcnN0X3BhcmFtX3R5cGUgeCkKICAgICAgICAgOiBmaXJzdF8oeCksIHNlY29uZF8o eCkge30KCiAgICAgIGZpcnN0X3JlZmVyZW5jZSBmaXJzdCgpIHtyZXR1cm4gZmlyc3RfO30KICAg ICAgZmlyc3RfY29uc3RfcmVmZXJlbmNlIGZpcnN0KCkgY29uc3Qge3JldHVybiBmaXJzdF87fQoK ICAgICAgc2Vjb25kX3JlZmVyZW5jZSBzZWNvbmQoKSB7cmV0dXJuIHNlY29uZF87fQogICAgICBz ZWNvbmRfY29uc3RfcmVmZXJlbmNlIHNlY29uZCgpIGNvbnN0IHtyZXR1cm4gc2Vjb25kXzt9Cgog ICAgICB2b2lkIHN3YXAoOjpib29zdDo6Y29tcHJlc3NlZF9wYWlyPFQxLCBUMj4mIHkpCiAgICAg IHsKICAgICAgICAgY3Bfc3dhcChmaXJzdF8sIHkuZmlyc3QoKSk7CiAgICAgICAgIGNwX3N3YXAo c2Vjb25kXywgeS5zZWNvbmQoKSk7CiAgICAgIH0KICAgcHJpdmF0ZToKICAgICAgZmlyc3RfdHlw ZSBmaXJzdF87CiAgICAgIHNlY29uZF90eXBlIHNlY29uZF87CiAgIH07Cgp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgVDEsIGNsYXNzIFQyPgpjbGFzcyBjb21wcmVzc2VkX3BhaXIKICAgOiBwcml2YXRlIDo6 Ym9vc3Q6OmRldGFpbHM6OmNvbXByZXNzZWRfcGFpcl9pbXA8VDEsIFQyLAogICAgICAgICAgICAg Ojpib29zdDo6ZGV0YWlsczo6Y29tcHJlc3NlZF9wYWlyX3N3aXRjaDwKICAgICAgICAgICAgICAg ICAgICBUMSwKICAgICAgICAgICAgICAgICAgICBUMiwKICAgICAgICAgICAgICAgICAgICA6OmJv b3N0Ojppc19zYW1lPHR5cGVuYW1lIHJlbW92ZV9jdjxUMT46OnR5cGUsIHR5cGVuYW1lIHJlbW92 ZV9jdjxUMj46OnR5cGU+Ojp2YWx1ZSwKICAgICAgICAgICAgICAgICAgICA6OmJvb3N0Ojppc19l bXB0eTxUMT46OnZhbHVlLAogICAgICAgICAgICAgICAgICAgIDo6Ym9vc3Q6OmlzX2VtcHR5PFQy Pjo6dmFsdWU+Ojp2YWx1ZT4Kewpwcml2YXRlOgogICB0eXBlZGVmIGRldGFpbHM6OmNvbXByZXNz ZWRfcGFpcl9pbXA8VDEsIFQyLAogICAgICAgICAgICAgOjpib29zdDo6ZGV0YWlsczo6Y29tcHJl c3NlZF9wYWlyX3N3aXRjaDwKICAgICAgICAgICAgICAgICAgICBUMSwKICAgICAgICAgICAgICAg ICAgICBUMiwKICAgICAgICAgICAgICAgICAgICA6OmJvb3N0Ojppc19zYW1lPHR5cGVuYW1lIHJl bW92ZV9jdjxUMT46OnR5cGUsIHR5cGVuYW1lIHJlbW92ZV9jdjxUMj46OnR5cGU+Ojp2YWx1ZSwK ICAgICAgICAgICAgICAgICAgICA6OmJvb3N0Ojppc19lbXB0eTxUMT46OnZhbHVlLAogICAgICAg ICAgICAgICAgICAgIDo6Ym9vc3Q6OmlzX2VtcHR5PFQyPjo6dmFsdWU+Ojp2YWx1ZT4gYmFzZTsK cHVibGljOgogICB0eXBlZGVmIFQxIGZpcnN0X3R5cGU7CiAgIHR5cGVkZWYgVDIgc2Vjb25kX3R5 cGU7CiAgIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90cmFpdHM8Zmlyc3RfdHlwZT46OnBhcmFtX3R5 cGUgZmlyc3RfcGFyYW1fdHlwZTsKICAgdHlwZWRlZiB0eXBlbmFtZSBjYWxsX3RyYWl0czxzZWNv bmRfdHlwZT46OnBhcmFtX3R5cGUgc2Vjb25kX3BhcmFtX3R5cGU7CiAgIHR5cGVkZWYgdHlwZW5h bWUgY2FsbF90cmFpdHM8Zmlyc3RfdHlwZT46OnJlZmVyZW5jZSBmaXJzdF9yZWZlcmVuY2U7CiAg IHR5cGVkZWYgdHlwZW5hbWUgY2FsbF90cmFpdHM8c2Vjb25kX3R5cGU+OjpyZWZlcmVuY2Ugc2Vj b25kX3JlZmVyZW5jZTsKICAgdHlwZWRlZiB0eXBlbmFtZSBjYWxsX3RyYWl0czxmaXJzdF90eXBl Pjo6Y29uc3RfcmVmZXJlbmNlIGZpcnN0X2NvbnN0X3JlZmVyZW5jZTsKICAgdHlwZWRlZiB0eXBl bmFtZSBjYWxsX3RyYWl0czxzZWNvbmRfdHlwZT46OmNvbnN0X3JlZmVyZW5jZSBzZWNvbmRfY29u c3RfcmVmZXJlbmNlOwoKICAgICAgICAgICAgY29tcHJlc3NlZF9wYWlyKCkgOiBiYXNlKCkge30K ICAgICAgICAgICAgY29tcHJlc3NlZF9wYWlyKGZpcnN0X3BhcmFtX3R5cGUgeCwgc2Vjb25kX3Bh cmFtX3R5cGUgeSkgOiBiYXNlKHgsIHkpIHt9CiAgIGV4cGxpY2l0IGNvbXByZXNzZWRfcGFpcihm aXJzdF9wYXJhbV90eXBlIHgpIDogYmFzZSh4KSB7fQogICBleHBsaWNpdCBjb21wcmVzc2VkX3Bh aXIoc2Vjb25kX3BhcmFtX3R5cGUgeSkgOiBiYXNlKHkpIHt9CgogICBmaXJzdF9yZWZlcmVuY2Ug Zmlyc3QoKSB7cmV0dXJuIGJhc2U6OmZpcnN0KCk7fQogICBmaXJzdF9jb25zdF9yZWZlcmVuY2Ug Zmlyc3QoKSBjb25zdCB7cmV0dXJuIGJhc2U6OmZpcnN0KCk7fQoKICAgc2Vjb25kX3JlZmVyZW5j ZSBzZWNvbmQoKSB7cmV0dXJuIGJhc2U6OnNlY29uZCgpO30KICAgc2Vjb25kX2NvbnN0X3JlZmVy ZW5jZSBzZWNvbmQoKSBjb25zdCB7cmV0dXJuIGJhc2U6OnNlY29uZCgpO30KCiAgIHZvaWQgc3dh cChjb21wcmVzc2VkX3BhaXImIHkpIHsgYmFzZTo6c3dhcCh5KTsgfQp9OwoKCgoKdGVtcGxhdGUg PGNsYXNzIFQ+CmNsYXNzIGNvbXByZXNzZWRfcGFpcjxULCBUPgogICA6IHByaXZhdGUgZGV0YWls czo6Y29tcHJlc3NlZF9wYWlyX2ltcDxULCBULAogICAgICAgICAgICAgOjpib29zdDo6ZGV0YWls czo6Y29tcHJlc3NlZF9wYWlyX3N3aXRjaDwKICAgICAgICAgICAgICAgICAgICBULAogICAgICAg ICAgICAgICAgICAgIFQsCiAgICAgICAgICAgICAgICAgICAgOjpib29zdDo6aXNfc2FtZTx0eXBl bmFtZSByZW1vdmVfY3Y8VD46OnR5cGUsIHR5cGVuYW1lIHJlbW92ZV9jdjxUPjo6dHlwZT46OnZh bHVlLAogICAgICAgICAgICAgICAgICAgIDo6Ym9vc3Q6OmlzX2VtcHR5PFQ+Ojp2YWx1ZSwKICAg ICAgICAgICAgICAgICAgICA6OmJvb3N0Ojppc19lbXB0eTxUPjo6dmFsdWU+Ojp2YWx1ZT4Kewpw cml2YXRlOgogICB0eXBlZGVmIGRldGFpbHM6OmNvbXByZXNzZWRfcGFpcl9pbXA8VCwgVCwKICAg ICAgICAgICAgIDo6Ym9vc3Q6OmRldGFpbHM6OmNvbXByZXNzZWRfcGFpcl9zd2l0Y2g8CiAgICAg ICAgICAgICAgICAgICAgVCwKICAgICAgICAgICAgICAgICAgICBULAogICAgICAgICAgICAgICAg ICAgIDo6Ym9vc3Q6OmlzX3NhbWU8dHlwZW5hbWUgcmVtb3ZlX2N2PFQ+Ojp0eXBlLCB0eXBlbmFt ZSByZW1vdmVfY3Y8VD46OnR5cGU+Ojp2YWx1ZSwKICAgICAgICAgICAgICAgICAgICA6OmJvb3N0 Ojppc19lbXB0eTxUPjo6dmFsdWUsCiAgICAgICAgICAgICAgICAgICAgOjpib29zdDo6aXNfZW1w dHk8VD46OnZhbHVlPjo6dmFsdWU+IGJhc2U7CnB1YmxpYzoKICAgdHlwZWRlZiBUIGZpcnN0X3R5 cGU7CiAgIHR5cGVkZWYgVCBzZWNvbmRfdHlwZTsKICAgdHlwZWRlZiB0eXBlbmFtZSBjYWxsX3Ry YWl0czxmaXJzdF90eXBlPjo6cGFyYW1fdHlwZSBmaXJzdF9wYXJhbV90eXBlOwogICB0eXBlZGVm IHR5cGVuYW1lIGNhbGxfdHJhaXRzPHNlY29uZF90eXBlPjo6cGFyYW1fdHlwZSBzZWNvbmRfcGFy YW1fdHlwZTsKICAgdHlwZWRlZiB0eXBlbmFtZSBjYWxsX3RyYWl0czxmaXJzdF90eXBlPjo6cmVm ZXJlbmNlIGZpcnN0X3JlZmVyZW5jZTsKICAgdHlwZWRlZiB0eXBlbmFtZSBjYWxsX3RyYWl0czxz ZWNvbmRfdHlwZT46OnJlZmVyZW5jZSBzZWNvbmRfcmVmZXJlbmNlOwogICB0eXBlZGVmIHR5cGVu YW1lIGNhbGxfdHJhaXRzPGZpcnN0X3R5cGU+Ojpjb25zdF9yZWZlcmVuY2UgZmlyc3RfY29uc3Rf cmVmZXJlbmNlOwogICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfdHJhaXRzPHNlY29uZF90eXBlPjo6 Y29uc3RfcmVmZXJlbmNlIHNlY29uZF9jb25zdF9yZWZlcmVuY2U7CgogICAgICAgICAgICBjb21w cmVzc2VkX3BhaXIoKSA6IGJhc2UoKSB7fQogICAgICAgICAgICBjb21wcmVzc2VkX3BhaXIoZmly c3RfcGFyYW1fdHlwZSB4LCBzZWNvbmRfcGFyYW1fdHlwZSB5KSA6IGJhc2UoeCwgeSkge30KCiAg IGV4cGxpY2l0CgogICAgICBjb21wcmVzc2VkX3BhaXIoZmlyc3RfcGFyYW1fdHlwZSB4KSA6IGJh c2UoeCkge30KCiAgIGZpcnN0X3JlZmVyZW5jZSBmaXJzdCgpIHtyZXR1cm4gYmFzZTo6Zmlyc3Qo KTt9CiAgIGZpcnN0X2NvbnN0X3JlZmVyZW5jZSBmaXJzdCgpIGNvbnN0IHtyZXR1cm4gYmFzZTo6 Zmlyc3QoKTt9CgogICBzZWNvbmRfcmVmZXJlbmNlIHNlY29uZCgpIHtyZXR1cm4gYmFzZTo6c2Vj b25kKCk7fQogICBzZWNvbmRfY29uc3RfcmVmZXJlbmNlIHNlY29uZCgpIGNvbnN0IHtyZXR1cm4g YmFzZTo6c2Vjb25kKCk7fQoKICAgdm9pZCBzd2FwKDo6Ym9vc3Q6OmNvbXByZXNzZWRfcGFpcjxU LFQ+JiB5KSB7IGJhc2U6OnN3YXAoeSk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3Mg VDI+CmlubGluZQp2b2lkCnN3YXAoY29tcHJlc3NlZF9wYWlyPFQxLCBUMj4mIHgsIGNvbXByZXNz ZWRfcGFpcjxUMSwgVDI+JiB5KQp7CiAgIHguc3dhcCh5KTsKfQoKfQojIDIxICIvaG9tZS9jb21w YmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9jb21wcmVzc2VkX3BhaXIuaHBwIiAyIDMKIyAxMzAg Ii9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L2l0ZXJhdG9y X2FkYXB0b3JzLmhwcCIgMiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v c3QvY29uY2VwdF9jaGVjay5ocHAiIDEgMwojIDE4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j bHVkZS9ib29zdC9jb25jZXB0X2NoZWNrLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJs aS9pbmNsdWRlL2Jvb3N0L3R5cGVfdHJhaXRzL2NvbnZlcnNpb25fdHJhaXRzLmhwcCIgMSAzCiMg MTkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2NvbmNlcHRfY2hlY2suaHBw IiAyIDMKCgoKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC90eXBlLmhw cCIgMSAzCiMgMTAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L3R5cGUuaHBw IiAzCm5hbWVzcGFjZSBib29zdCB7CgoKCiAgdGVtcGxhdGUgPGNsYXNzIFQ+CiAgc3RydWN0IHR5 cGUge307Cgp9CiMgMjMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2NvbmNl cHRfY2hlY2suaHBwIiAyIDMKIyAzMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v c3QvY29uY2VwdF9jaGVjay5ocHAiIDMKbmFtZXNwYWNlIGJvb3N0IHsKCgoKCgoKCnRlbXBsYXRl IDxjbGFzcyBUPiBpbmxpbmUgdm9pZCBpZ25vcmVfdW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcoY29u c3QgVCYpIHsgfQoKCnRlbXBsYXRlIDxjbGFzcyBDb25jZXB0PgppbmxpbmUgdm9pZCBmdW5jdGlv bl9yZXF1aXJlcyh0eXBlPENvbmNlcHQ+KiA9IDApCnsKCiAgdm9pZCAoQ29uY2VwdDo6KngpKCkg PSAmIENvbmNlcHQ6OmNvbnN0cmFpbnRzOwogIGlnbm9yZV91bnVzZWRfdmFyaWFibGVfd2Fybmlu Zyh4KTsKCn0KIyAxMzYgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2NvbmNl cHRfY2hlY2suaHBwIiAzCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgpzdHJ1Y3QgcmVxdWly ZV9zYW1lIHsgfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1Y3QgcmVxdWlyZV9zYW1lPFQsVD4g eyB0eXBlZGVmIFQgdHlwZTsgfTsKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KICBzdHJ1Y3Qg SW50ZWdlckNvbmNlcHQgewogICAgdm9pZCBjb25zdHJhaW50cygpIHsKCiAgICAgIHguZXJyb3Jf dHlwZV9tdXN0X2JlX2FuX2ludGVnZXJfdHlwZSgpOwoKICAgIH0KICAgIFQgeDsKICB9OwoKICB0 ZW1wbGF0ZSA8PiBzdHJ1Y3QgSW50ZWdlckNvbmNlcHQ8c2hvcnQ+IHsgdm9pZCBjb25zdHJhaW50 cygpIHt9IH07CiAgdGVtcGxhdGUgPD4gc3RydWN0IEludGVnZXJDb25jZXB0PHVuc2lnbmVkIHNo b3J0PiB7IHZvaWQgY29uc3RyYWludHMoKSB7fSB9OwogIHRlbXBsYXRlIDw+IHN0cnVjdCBJbnRl Z2VyQ29uY2VwdDxpbnQ+IHsgdm9pZCBjb25zdHJhaW50cygpIHt9IH07CiAgdGVtcGxhdGUgPD4g c3RydWN0IEludGVnZXJDb25jZXB0PHVuc2lnbmVkIGludD4geyB2b2lkIGNvbnN0cmFpbnRzKCkg e30gfTsKICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSW50ZWdlckNvbmNlcHQ8bG9uZz4geyB2b2lkIGNv bnN0cmFpbnRzKCkge30gfTsKICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSW50ZWdlckNvbmNlcHQ8dW5z aWduZWQgbG9uZz4geyB2b2lkIGNvbnN0cmFpbnRzKCkge30gfTsKCgoKICB0ZW1wbGF0ZSA8Y2xh c3MgVD4KICBzdHJ1Y3QgU2lnbmVkSW50ZWdlckNvbmNlcHQgewogICAgdm9pZCBjb25zdHJhaW50 cygpIHsKCiAgICAgIHguZXJyb3JfdHlwZV9tdXN0X2JlX2Ffc2lnbmVkX2ludGVnZXJfdHlwZSgp OwoKICAgIH0KICAgIFQgeDsKICB9OwoKICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgU2lnbmVkSW50ZWdl ckNvbmNlcHQ8c2hvcnQ+IHsgdm9pZCBjb25zdHJhaW50cygpIHt9IH07CiAgdGVtcGxhdGUgPD4g c3RydWN0IFNpZ25lZEludGVnZXJDb25jZXB0PGludD4geyB2b2lkIGNvbnN0cmFpbnRzKCkge30g fTsKICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgU2lnbmVkSW50ZWdlckNvbmNlcHQ8bG9uZz4geyB2b2lk IGNvbnN0cmFpbnRzKCkge30gfTsKCiAgdGVtcGxhdGUgPD4gc3RydWN0IFNpZ25lZEludGVnZXJD b25jZXB0PGxvbmcgbG9uZz4geyB2b2lkIGNvbnN0cmFpbnRzKCkge30gfTsKCgoKCiAgdGVtcGxh dGUgPGNsYXNzIFQ+CiAgc3RydWN0IFVuc2lnbmVkSW50ZWdlckNvbmNlcHQgewogICAgdm9pZCBj b25zdHJhaW50cygpIHsKCiAgICAgIHguZXJyb3JfdHlwZV9tdXN0X2JlX2FuX3Vuc2lnbmVkX2lu dGVnZXJfdHlwZSgpOwoKICAgIH0KICAgIFQgeDsKICB9OwoKICB0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg VW5zaWduZWRJbnRlZ2VyQ29uY2VwdDx1bnNpZ25lZCBzaG9ydD4KICAgIHsgdm9pZCBjb25zdHJh aW50cygpIHt9IH07CiAgdGVtcGxhdGUgPD4gc3RydWN0IFVuc2lnbmVkSW50ZWdlckNvbmNlcHQ8 dW5zaWduZWQgaW50PgogICAgeyB2b2lkIGNvbnN0cmFpbnRzKCkge30gfTsKICB0ZW1wbGF0ZSA8 PiBzdHJ1Y3QgVW5zaWduZWRJbnRlZ2VyQ29uY2VwdDx1bnNpZ25lZCBsb25nPgogICAgeyB2b2lk IGNvbnN0cmFpbnRzKCkge30gfTsKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgVFQ+CiAgc3RydWN0 IERlZmF1bHRDb25zdHJ1Y3RpYmxlQ29uY2VwdAogIHsKICAgIHZvaWQgY29uc3RyYWludHMoKSB7 CiAgICAgIFRUIGE7CiAgICAgIGlnbm9yZV91bnVzZWRfdmFyaWFibGVfd2FybmluZyhhKTsKICAg IH0KICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgVFQ+CiAgc3RydWN0IEFzc2lnbmFibGVDb25jZXB0 CiAgewogICAgdm9pZCBjb25zdHJhaW50cygpIHsKCiAgICAgIGEgPSBhOwoKICAgICAgY29uc3Rf Y29uc3RyYWludHMoYSk7CiAgICB9CiAgICB2b2lkIGNvbnN0X2NvbnN0cmFpbnRzKGNvbnN0IFRU JiBiKSB7CgogICAgICBhID0gYjsKCiAgICB9CiAgICBUVCBhOwogIH07CgogIHRlbXBsYXRlIDxj bGFzcyBUVD4KICBzdHJ1Y3QgQ29weUNvbnN0cnVjdGlibGVDb25jZXB0CiAgewogICAgdm9pZCBj b25zdHJhaW50cygpIHsKICAgICAgVFQgYShiKTsKICAgICAgVFQqIHB0ciA9ICZhOwogICAgICBj b25zdF9jb25zdHJhaW50cyhhKTsKICAgICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5n KHB0cik7CiAgICB9CiAgICB2b2lkIGNvbnN0X2NvbnN0cmFpbnRzKGNvbnN0IFRUJiBhKSB7CiAg ICAgIFRUIGMoYSk7CiAgICAgIGNvbnN0IFRUKiBwdHIgPSAmYTsKICAgICAgaWdub3JlX3VudXNl ZF92YXJpYWJsZV93YXJuaW5nKGMpOwogICAgICBpZ25vcmVfdW51c2VkX3ZhcmlhYmxlX3dhcm5p bmcocHRyKTsKICAgIH0KICAgIFRUIGI7CiAgfTsKCgogIHRlbXBsYXRlIDxjbGFzcyBUVD4KICBz dHJ1Y3QgU0dJQXNzaWduYWJsZUNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewog ICAgICBUVCBiKGEpOwoKICAgICAgYSA9IGE7CgogICAgICBjb25zdF9jb25zdHJhaW50cyhhKTsK ICAgICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKGIpOwogICAgfQogICAgdm9pZCBj b25zdF9jb25zdHJhaW50cyhjb25zdCBUVCYgYikgewogICAgICBUVCBjKGIpOwoKICAgICAgYSA9 IGI7CgogICAgICBpZ25vcmVfdW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcoYyk7CiAgICB9CiAgICBU VCBhOwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBYLCBjbGFzcyBZPgogIHN0cnVjdCBDb252ZXJ0 aWJsZUNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAgICBZIHkgPSB4Owog ICAgICBpZ25vcmVfdW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcoeSk7CiAgICB9CiAgICBYIHg7CiAg fTsKIyAyOTIgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2NvbmNlcHRfY2hl Y2suaHBwIiAzCiAgdGVtcGxhdGUgPGNsYXNzIFRUPgogIHZvaWQgcmVxdWlyZV9ib29sZWFuX2V4 cHIoY29uc3QgVFQmIHQpIHsKICAgIGJvb2wgeCA9IHQ7CiAgICBpZ25vcmVfdW51c2VkX3Zhcmlh YmxlX3dhcm5pbmcoeCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgVFQ+CiAgc3RydWN0IEVxdWFs aXR5Q29tcGFyYWJsZUNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAgICBy ZXF1aXJlX2Jvb2xlYW5fZXhwcihhID09IGIpOwogICAgICByZXF1aXJlX2Jvb2xlYW5fZXhwcihh ICE9IGIpOwogICAgfQogICAgVFQgYSwgYjsKICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgVFQ+CiAg c3RydWN0IExlc3NUaGFuQ29tcGFyYWJsZUNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRz KCkgewogICAgICByZXF1aXJlX2Jvb2xlYW5fZXhwcihhIDwgYik7CiAgICB9CiAgICBUVCBhLCBi OwogIH07CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgVFQ+CiAgc3RydWN0IENvbXBhcmFibGVDb25jZXB0 CiAgewogICAgdm9pZCBjb25zdHJhaW50cygpIHsKICAgICAgcmVxdWlyZV9ib29sZWFuX2V4cHIo YSA8IGIpOwogICAgICByZXF1aXJlX2Jvb2xlYW5fZXhwcihhID4gYik7CiAgICAgIHJlcXVpcmVf Ym9vbGVhbl9leHByKGEgPD0gYik7CiAgICAgIHJlcXVpcmVfYm9vbGVhbl9leHByKGEgPj0gYik7 CiAgICB9CiAgICBUVCBhLCBiOwogIH07CiMgMzUyICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j bHVkZS9ib29zdC9jb25jZXB0X2NoZWNrLmhwcCIgMwogIHRlbXBsYXRlIDxjbGFzcyBGaXJzdCwg Y2xhc3MgU2Vjb25kPiBzdHJ1Y3QgRXF1YWxPcENvbmNlcHQgeyB2b2lkIGNvbnN0cmFpbnRzKCkg eyAodm9pZCljb25zdHJhaW50c18oKTsgfSBib29sIGNvbnN0cmFpbnRzXygpIHsgcmV0dXJuIGEg PT0gYjsgfSBGaXJzdCBhOyBTZWNvbmQgYjsgfTsKICB0ZW1wbGF0ZSA8Y2xhc3MgRmlyc3QsIGNs YXNzIFNlY29uZD4gc3RydWN0IE5vdEVxdWFsT3BDb25jZXB0IHsgdm9pZCBjb25zdHJhaW50cygp IHsgKHZvaWQpY29uc3RyYWludHNfKCk7IH0gYm9vbCBjb25zdHJhaW50c18oKSB7IHJldHVybiBh ICE9IGI7IH0gRmlyc3QgYTsgU2Vjb25kIGI7IH07CiAgdGVtcGxhdGUgPGNsYXNzIEZpcnN0LCBj bGFzcyBTZWNvbmQ+IHN0cnVjdCBMZXNzVGhhbk9wQ29uY2VwdCB7IHZvaWQgY29uc3RyYWludHMo KSB7ICh2b2lkKWNvbnN0cmFpbnRzXygpOyB9IGJvb2wgY29uc3RyYWludHNfKCkgeyByZXR1cm4g YSA8IGI7IH0gRmlyc3QgYTsgU2Vjb25kIGI7IH07CiAgdGVtcGxhdGUgPGNsYXNzIEZpcnN0LCBj bGFzcyBTZWNvbmQ+IHN0cnVjdCBMZXNzRXF1YWxPcENvbmNlcHQgeyB2b2lkIGNvbnN0cmFpbnRz KCkgeyAodm9pZCljb25zdHJhaW50c18oKTsgfSBib29sIGNvbnN0cmFpbnRzXygpIHsgcmV0dXJu IGEgPD0gYjsgfSBGaXJzdCBhOyBTZWNvbmQgYjsgfTsKICB0ZW1wbGF0ZSA8Y2xhc3MgRmlyc3Qs IGNsYXNzIFNlY29uZD4gc3RydWN0IEdyZWF0ZXJUaGFuT3BDb25jZXB0IHsgdm9pZCBjb25zdHJh aW50cygpIHsgKHZvaWQpY29uc3RyYWludHNfKCk7IH0gYm9vbCBjb25zdHJhaW50c18oKSB7IHJl dHVybiBhID4gYjsgfSBGaXJzdCBhOyBTZWNvbmQgYjsgfTsKICB0ZW1wbGF0ZSA8Y2xhc3MgRmly c3QsIGNsYXNzIFNlY29uZD4gc3RydWN0IEdyZWF0ZXJFcXVhbE9wQ29uY2VwdCB7IHZvaWQgY29u c3RyYWludHMoKSB7ICh2b2lkKWNvbnN0cmFpbnRzXygpOyB9IGJvb2wgY29uc3RyYWludHNfKCkg eyByZXR1cm4gYSA+PSBiOyB9IEZpcnN0IGE7IFNlY29uZCBiOyB9OwoKICB0ZW1wbGF0ZSA8Y2xh c3MgUmV0LCBjbGFzcyBGaXJzdCwgY2xhc3MgU2Vjb25kPiBzdHJ1Y3QgUGx1c09wQ29uY2VwdCB7 IHZvaWQgY29uc3RyYWludHMoKSB7ICh2b2lkKWNvbnN0cmFpbnRzXygpOyB9IFJldCBjb25zdHJh aW50c18oKSB7IHJldHVybiBhICsgYjsgfSBGaXJzdCBhOyBTZWNvbmQgYjsgfTsKICB0ZW1wbGF0 ZSA8Y2xhc3MgUmV0LCBjbGFzcyBGaXJzdCwgY2xhc3MgU2Vjb25kPiBzdHJ1Y3QgVGltZXNPcENv bmNlcHQgeyB2b2lkIGNvbnN0cmFpbnRzKCkgeyAodm9pZCljb25zdHJhaW50c18oKTsgfSBSZXQg Y29uc3RyYWludHNfKCkgeyByZXR1cm4gYSAqIGI7IH0gRmlyc3QgYTsgU2Vjb25kIGI7IH07CiAg dGVtcGxhdGUgPGNsYXNzIFJldCwgY2xhc3MgRmlyc3QsIGNsYXNzIFNlY29uZD4gc3RydWN0IERp dmlkZU9wQ29uY2VwdCB7IHZvaWQgY29uc3RyYWludHMoKSB7ICh2b2lkKWNvbnN0cmFpbnRzXygp OyB9IFJldCBjb25zdHJhaW50c18oKSB7IHJldHVybiBhIC8gYjsgfSBGaXJzdCBhOyBTZWNvbmQg YjsgfTsKICB0ZW1wbGF0ZSA8Y2xhc3MgUmV0LCBjbGFzcyBGaXJzdCwgY2xhc3MgU2Vjb25kPiBz dHJ1Y3QgU3VidHJhY3RPcENvbmNlcHQgeyB2b2lkIGNvbnN0cmFpbnRzKCkgeyAodm9pZCljb25z dHJhaW50c18oKTsgfSBSZXQgY29uc3RyYWludHNfKCkgeyByZXR1cm4gYSAtIGI7IH0gRmlyc3Qg YTsgU2Vjb25kIGI7IH07CiAgdGVtcGxhdGUgPGNsYXNzIFJldCwgY2xhc3MgRmlyc3QsIGNsYXNz IFNlY29uZD4gc3RydWN0IE1vZE9wQ29uY2VwdCB7IHZvaWQgY29uc3RyYWludHMoKSB7ICh2b2lk KWNvbnN0cmFpbnRzXygpOyB9IFJldCBjb25zdHJhaW50c18oKSB7IHJldHVybiBhICUgYjsgfSBG aXJzdCBhOyBTZWNvbmQgYjsgfTsKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIEZ1bmMsIGNsYXNzIFJl dHVybj4KICBzdHJ1Y3QgR2VuZXJhdG9yQ29uY2VwdAogIHsKICAgIHZvaWQgY29uc3RyYWludHMo KSB7CiAgICAgIGNvbnN0IFJldHVybiYgciA9IGYoKTsKICAgICAgaWdub3JlX3VudXNlZF92YXJp YWJsZV93YXJuaW5nKHIpOwogICAgfQogICAgRnVuYyBmOwogIH07CgoKCiAgdGVtcGxhdGUgPGNs YXNzIEZ1bmM+CiAgc3RydWN0IEdlbmVyYXRvckNvbmNlcHQ8RnVuYyx2b2lkPgogIHsKICAgIHZv aWQgY29uc3RyYWludHMoKSB7CiAgICAgIGYoKTsKICAgIH0KICAgIEZ1bmMgZjsKICB9OwoKCiAg dGVtcGxhdGUgPGNsYXNzIEZ1bmMsIGNsYXNzIFJldHVybiwgY2xhc3MgQXJnPgogIHN0cnVjdCBV bmFyeUZ1bmN0aW9uQ29uY2VwdAogIHsKCiAgICBVbmFyeUZ1bmN0aW9uQ29uY2VwdCgpOwoKICAg IHZvaWQgY29uc3RyYWludHMoKSB7CiAgICAgIHIgPSBmKGFyZyk7CiAgICB9CiAgICBGdW5jIGY7 CiAgICBBcmcgYXJnOwogICAgUmV0dXJuIHI7CiAgfTsKCgogIHRlbXBsYXRlIDxjbGFzcyBGdW5j LCBjbGFzcyBBcmc+CiAgc3RydWN0IFVuYXJ5RnVuY3Rpb25Db25jZXB0PEZ1bmMsIHZvaWQsIEFy Zz4gewogICAgdm9pZCBjb25zdHJhaW50cygpIHsKICAgICAgZihhcmcpOwogICAgfQogICAgRnVu YyBmOwogICAgQXJnIGFyZzsKICB9OwoKCiAgdGVtcGxhdGUgPGNsYXNzIEZ1bmMsIGNsYXNzIFJl dHVybiwgY2xhc3MgRmlyc3QsIGNsYXNzIFNlY29uZD4KICBzdHJ1Y3QgQmluYXJ5RnVuY3Rpb25D b25jZXB0CiAgewogICAgdm9pZCBjb25zdHJhaW50cygpIHsKICAgICAgciA9IGYoZmlyc3QsIHNl Y29uZCk7CiAgICB9CiAgICBGdW5jIGY7CiAgICBGaXJzdCBmaXJzdDsKICAgIFNlY29uZCBzZWNv bmQ7CiAgICBSZXR1cm4gcjsKICB9OwoKCiAgdGVtcGxhdGUgPGNsYXNzIEZ1bmMsIGNsYXNzIEZp cnN0LCBjbGFzcyBTZWNvbmQ+CiAgc3RydWN0IEJpbmFyeUZ1bmN0aW9uQ29uY2VwdDxGdW5jLCB2 b2lkLCBGaXJzdCwgU2Vjb25kPgogIHsKICAgIHZvaWQgY29uc3RyYWludHMoKSB7CiAgICAgIGYo Zmlyc3QsIHNlY29uZCk7CiAgICB9CiAgICBGdW5jIGY7CiAgICBGaXJzdCBmaXJzdDsKICAgIFNl Y29uZCBzZWNvbmQ7CiAgfTsKCgogIHRlbXBsYXRlIDxjbGFzcyBGdW5jLCBjbGFzcyBBcmc+CiAg c3RydWN0IFVuYXJ5UHJlZGljYXRlQ29uY2VwdAogIHsKICAgIHZvaWQgY29uc3RyYWludHMoKSB7 CiAgICAgIHJlcXVpcmVfYm9vbGVhbl9leHByKGYoYXJnKSk7CiAgICB9CiAgICBGdW5jIGY7CiAg ICBBcmcgYXJnOwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBGdW5jLCBjbGFzcyBGaXJzdCwgY2xh c3MgU2Vjb25kPgogIHN0cnVjdCBCaW5hcnlQcmVkaWNhdGVDb25jZXB0CiAgewogICAgdm9pZCBj b25zdHJhaW50cygpIHsKICAgICAgcmVxdWlyZV9ib29sZWFuX2V4cHIoZihhLCBiKSk7CiAgICB9 CiAgICBGdW5jIGY7CiAgICBGaXJzdCBhOwogICAgU2Vjb25kIGI7CiAgfTsKCgogIHRlbXBsYXRl IDxjbGFzcyBGdW5jLCBjbGFzcyBGaXJzdCwgY2xhc3MgU2Vjb25kPgogIHN0cnVjdCBDb25zdF9C aW5hcnlQcmVkaWNhdGVDb25jZXB0IHsKICAgIHZvaWQgY29uc3RyYWludHMoKSB7CiAgICAgIGNv bnN0X2NvbnN0cmFpbnRzKGYpOwogICAgfQogICAgdm9pZCBjb25zdF9jb25zdHJhaW50cyhjb25z dCBGdW5jJiBmdW4pIHsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8QmluYXJ5UHJlZGljYXRlQ29u Y2VwdDxGdW5jLCBGaXJzdCwgU2Vjb25kPiA+KCk7CgogICAgICByZXF1aXJlX2Jvb2xlYW5fZXhw cihmdW4oYSwgYikpOwogICAgfQogICAgRnVuYyBmOwogICAgRmlyc3QgYTsKICAgIFNlY29uZCBi OwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBGdW5jLCBjbGFzcyBSZXR1cm4+CiAgc3RydWN0IEFk YXB0YWJsZUdlbmVyYXRvckNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAg ICB0eXBlZGVmIHR5cGVuYW1lIEZ1bmM6OnJlc3VsdF90eXBlIHJlc3VsdF90eXBlOwogICAgICB0 eXBlZGVmIDo6Ym9vc3Q6OnN0YXRpY19hc3NlcnRfdGVzdDwgc2l6ZW9mKDo6Ym9vc3Q6OlNUQVRJ Q19BU1NFUlRJT05fRkFJTFVSRTwgKGJvb2wpKCAoaXNfY29udmVydGlibGU8cmVzdWx0X3R5cGUs IFJldHVybj46OnZhbHVlKSApID4pPiBib29zdF9zdGF0aWNfYXNzZXJ0X3R5cGVkZWZfNDgyOwog ICAgICBmdW5jdGlvbl9yZXF1aXJlczwgR2VuZXJhdG9yQ29uY2VwdDxGdW5jLCByZXN1bHRfdHlw ZT4gPigpOwogICAgfQogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBGdW5jLCBjbGFzcyBSZXR1cm4s IGNsYXNzIEFyZz4KICBzdHJ1Y3QgQWRhcHRhYmxlVW5hcnlGdW5jdGlvbkNvbmNlcHQKICB7CiAg ICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIEZ1bmM6OmFyZ3Vt ZW50X3R5cGUgYXJndW1lbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBGdW5jOjpyZXN1 bHRfdHlwZSByZXN1bHRfdHlwZTsKICAgICAgdHlwZWRlZiA6OmJvb3N0OjpzdGF0aWNfYXNzZXJ0 X3Rlc3Q8IHNpemVvZig6OmJvb3N0OjpTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU8IChib29sKSgg KGlzX2NvbnZlcnRpYmxlPHJlc3VsdF90eXBlLCBSZXR1cm4+Ojp2YWx1ZSkgKSA+KT4gYm9vc3Rf c3RhdGljX2Fzc2VydF90eXBlZGVmXzQ5MzsKICAgICAgdHlwZWRlZiA6OmJvb3N0OjpzdGF0aWNf YXNzZXJ0X3Rlc3Q8IHNpemVvZig6OmJvb3N0OjpTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU8IChi b29sKSggKGlzX2NvbnZlcnRpYmxlPEFyZywgYXJndW1lbnRfdHlwZT46OnZhbHVlKSApID4pPiBi b29zdF9zdGF0aWNfYXNzZXJ0X3R5cGVkZWZfNDk0OwogICAgICBmdW5jdGlvbl9yZXF1aXJlczwg VW5hcnlGdW5jdGlvbkNvbmNlcHQ8RnVuYywgcmVzdWx0X3R5cGUsIGFyZ3VtZW50X3R5cGU+ID4o KTsKICAgIH0KICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgRnVuYywgY2xhc3MgUmV0dXJuLCBjbGFz cyBGaXJzdCwgY2xhc3MgU2Vjb25kPgogIHN0cnVjdCBBZGFwdGFibGVCaW5hcnlGdW5jdGlvbkNv bmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAgICB0eXBlZGVmIHR5cGVuYW1l IEZ1bmM6OmZpcnN0X2FyZ3VtZW50X3R5cGUgZmlyc3RfYXJndW1lbnRfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBGdW5jOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBzZWNvbmRfYXJndW1lbnRf dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBGdW5jOjpyZXN1bHRfdHlwZSByZXN1bHRfdHlw ZTsKICAgICAgdHlwZWRlZiA6OmJvb3N0OjpzdGF0aWNfYXNzZXJ0X3Rlc3Q8IHNpemVvZig6OmJv b3N0OjpTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU8IChib29sKSggKGlzX2NvbnZlcnRpYmxlPHJl c3VsdF90eXBlLCBSZXR1cm4+Ojp2YWx1ZSkgKSA+KT4gYm9vc3Rfc3RhdGljX2Fzc2VydF90eXBl ZGVmXzUwNjsKICAgICAgdHlwZWRlZiA6OmJvb3N0OjpzdGF0aWNfYXNzZXJ0X3Rlc3Q8IHNpemVv Zig6OmJvb3N0OjpTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU8IChib29sKSggKGlzX2NvbnZlcnRp YmxlPEZpcnN0LCBmaXJzdF9hcmd1bWVudF90eXBlPjo6dmFsdWUpICkgPik+IGJvb3N0X3N0YXRp Y19hc3NlcnRfdHlwZWRlZl81MDc7CiAgICAgIHR5cGVkZWYgOjpib29zdDo6c3RhdGljX2Fzc2Vy dF90ZXN0PCBzaXplb2YoOjpib29zdDo6U1RBVElDX0FTU0VSVElPTl9GQUlMVVJFPCAoYm9vbCko IChpc19jb252ZXJ0aWJsZTxTZWNvbmQsIHNlY29uZF9hcmd1bWVudF90eXBlPjo6dmFsdWUpICkg Pik+IGJvb3N0X3N0YXRpY19hc3NlcnRfdHlwZWRlZl81MDg7CiAgICAgIGZ1bmN0aW9uX3JlcXVp cmVzPCBCaW5hcnlGdW5jdGlvbkNvbmNlcHQ8RnVuYywgcmVzdWx0X3R5cGUsCiAgICAgICAgZmly c3RfYXJndW1lbnRfdHlwZSwgc2Vjb25kX2FyZ3VtZW50X3R5cGU+ID4oKTsKICAgIH0KICB9OwoK ICB0ZW1wbGF0ZSA8Y2xhc3MgRnVuYywgY2xhc3MgQXJnPgogIHN0cnVjdCBBZGFwdGFibGVQcmVk aWNhdGVDb25jZXB0CiAgewogICAgdm9pZCBjb25zdHJhaW50cygpIHsKICAgICAgZnVuY3Rpb25f cmVxdWlyZXM8IFVuYXJ5UHJlZGljYXRlQ29uY2VwdDxGdW5jLCBBcmc+ID4oKTsKICAgICAgZnVu Y3Rpb25fcmVxdWlyZXM8IEFkYXB0YWJsZVVuYXJ5RnVuY3Rpb25Db25jZXB0PEZ1bmMsIGJvb2ws IEFyZz4gPigpOwogICAgfQogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBGdW5jLCBjbGFzcyBGaXJz dCwgY2xhc3MgU2Vjb25kPgogIHN0cnVjdCBBZGFwdGFibGVCaW5hcnlQcmVkaWNhdGVDb25jZXB0 CiAgewogICAgdm9pZCBjb25zdHJhaW50cygpIHsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8IEJp bmFyeVByZWRpY2F0ZUNvbmNlcHQ8RnVuYywgRmlyc3QsIFNlY29uZD4gPigpOwogICAgICBmdW5j dGlvbl9yZXF1aXJlczwgQWRhcHRhYmxlQmluYXJ5RnVuY3Rpb25Db25jZXB0PEZ1bmMsIGJvb2ws IEZpcnN0LCBTZWNvbmQ+ID4oKTsKICAgIH0KICB9OwoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgVFQ+ CiAgc3RydWN0IFRyaXZpYWxJdGVyYXRvckNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRz KCkgewogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgQXNzaWduYWJsZUNvbmNlcHQ8VFQ+ID4oKTsK ICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8IERlZmF1bHRDb25zdHJ1Y3RpYmxlQ29uY2VwdDxUVD4g PigpOwogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgRXF1YWxpdHlDb21wYXJhYmxlQ29uY2VwdDxU VD4gPigpOwogICAgICAodm9pZCkqaTsKICAgIH0KICAgIFRUIGk7CiAgfTsKCiAgdGVtcGxhdGUg PGNsYXNzIFRUPgogIHN0cnVjdCBNdXRhYmxlX1RyaXZpYWxJdGVyYXRvckNvbmNlcHQKICB7CiAg ICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgVHJpdmlhbEl0 ZXJhdG9yQ29uY2VwdDxUVD4gPigpOwogICAgICAqaSA9ICpqOwogICAgfQogICAgVFQgaSwgajsK ICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgVFQ+CiAgc3RydWN0IElucHV0SXRlcmF0b3JDb25jZXB0 CiAgewogICAgdm9pZCBjb25zdHJhaW50cygpIHsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8IFRy aXZpYWxJdGVyYXRvckNvbmNlcHQ8VFQ+ID4oKTsKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0 ZDo6aXRlcmF0b3JfdHJhaXRzPFRUPjo6ZGlmZmVyZW5jZV90eXBlIEQ7CgoKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxUVD46OnJlZmVyZW5jZSBSOwogICAgICB0 eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPFRUPjo6cG9pbnRlciBQOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPFRUPjo6aXRlcmF0b3JfY2F0 ZWdvcnkgQzsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8IENvbnZlcnRpYmxlQ29uY2VwdDxDLCBz dGQ6OmlucHV0X2l0ZXJhdG9yX3RhZz4gPigpOwoKICAgICAgKytpOwogICAgICBpKys7CiAgICB9 CiAgICBUVCBpOwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBUVCwgY2xhc3MgVmFsdWVUPgogIHN0 cnVjdCBPdXRwdXRJdGVyYXRvckNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewog ICAgICBmdW5jdGlvbl9yZXF1aXJlczwgQXNzaWduYWJsZUNvbmNlcHQ8VFQ+ID4oKTsKICAgICAg KytpOwogICAgICBpKys7CiAgICAgICppKysgPSB0OwogICAgfQogICAgVFQgaSwgajsKICAgIFZh bHVlVCB0OwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBUVD4KICBzdHJ1Y3QgRm9yd2FyZEl0ZXJh dG9yQ29uY2VwdAogIHsKICAgIHZvaWQgY29uc3RyYWludHMoKSB7CiAgICAgIGZ1bmN0aW9uX3Jl cXVpcmVzPCBJbnB1dEl0ZXJhdG9yQ29uY2VwdDxUVD4gPigpOwoKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxUVD46Oml0ZXJhdG9yX2NhdGVnb3J5IEM7CiAgICAg IGZ1bmN0aW9uX3JlcXVpcmVzPCBDb252ZXJ0aWJsZUNvbmNlcHQ8Qywgc3RkOjpmb3J3YXJkX2l0 ZXJhdG9yX3RhZz4gPigpOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJh aXRzPFRUPjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgcmVmZXJlbmNlIHIgPSAqaTsKICAg ICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKHIpOwoKICAgIH0KICAgIFRUIGk7CiAg fTsKCiAgdGVtcGxhdGUgPGNsYXNzIFRUPgogIHN0cnVjdCBNdXRhYmxlX0ZvcndhcmRJdGVyYXRv ckNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAgICBmdW5jdGlvbl9yZXF1 aXJlczwgRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxUVD4gPigpOwogICAgICAqaSsrID0gKmk7CiAg ICB9CiAgICBUVCBpOwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBUVD4KICBzdHJ1Y3QgQmlkaXJl Y3Rpb25hbEl0ZXJhdG9yQ29uY2VwdAogIHsKICAgIHZvaWQgY29uc3RyYWludHMoKSB7CiAgICAg IGZ1bmN0aW9uX3JlcXVpcmVzPCBGb3J3YXJkSXRlcmF0b3JDb25jZXB0PFRUPiA+KCk7CgogICAg ICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPFRUPjo6aXRlcmF0b3JfY2F0 ZWdvcnkgQzsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8IENvbnZlcnRpYmxlQ29uY2VwdDxDLAog ICAgICAgIHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWc+ID4oKTsKCiAgICAgIC0taTsK ICAgICAgaS0tOwogICAgfQogICAgVFQgaTsKICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgVFQ+CiAg c3RydWN0IE11dGFibGVfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdAogIHsKICAgIHZvaWQg Y29uc3RyYWludHMoKSB7CiAgICAgIGZ1bmN0aW9uX3JlcXVpcmVzPCBCaWRpcmVjdGlvbmFsSXRl cmF0b3JDb25jZXB0PFRUPiA+KCk7CiAgICAgIGZ1bmN0aW9uX3JlcXVpcmVzPCBNdXRhYmxlX0Zv cndhcmRJdGVyYXRvckNvbmNlcHQ8VFQ+ID4oKTsKICAgICAgKmktLSA9ICppOwogICAgfQogICAg VFQgaTsKICB9OwoKCiAgdGVtcGxhdGUgPGNsYXNzIFRUPgogIHN0cnVjdCBSYW5kb21BY2Nlc3NJ dGVyYXRvckNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAgICBmdW5jdGlv bl9yZXF1aXJlczwgQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDxUVD4gPigpOwogICAgICBm dW5jdGlvbl9yZXF1aXJlczwgQ29tcGFyYWJsZUNvbmNlcHQ8VFQ+ID4oKTsKCiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8VFQ+OjppdGVyYXRvcl9jYXRlZ29yeSBD OwogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgQ29udmVydGlibGVDb25jZXB0PCBDLAogICAgICAg IHN0ZDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWc+ID4oKTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxUVD46OnJlZmVyZW5jZSBSOwoKCiAgICAgIGkgKz0g bjsKICAgICAgaSA9IGkgKyBuOyBpID0gbiArIGk7CiAgICAgIGkgLT0gbjsKICAgICAgaSA9IGkg LSBuOwogICAgICBuID0gaSAtIGo7CiAgICAgICh2b2lkKWlbbl07CiAgICB9CiAgICBUVCBhLCBi OwogICAgVFQgaSwgajsKCiAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxUVD46OmRp ZmZlcmVuY2VfdHlwZSBuOwoKCgogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBUVD4KICBzdHJ1Y3Qg TXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFp bnRzKCkgewogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25j ZXB0PFRUPiA+KCk7CiAgICAgIGZ1bmN0aW9uX3JlcXVpcmVzPCBNdXRhYmxlX0JpZGlyZWN0aW9u YWxJdGVyYXRvckNvbmNlcHQ8VFQ+ID4oKTsKICAgICAgaVtuXSA9ICppOwogICAgfQogICAgVFQg aTsKCiAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxUVD46OmRpZmZlcmVuY2VfdHlw ZSBuOwoKCgogIH07CgoKCgogIHRlbXBsYXRlIDxjbGFzcyBDb250YWluZXI+CiAgc3RydWN0IENv bnRhaW5lckNvbmNlcHQKICB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6dmFsdWVf dHlwZSB2YWx1ZV90eXBlOwogICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OmRpZmZlcmVu Y2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6 c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyOjpjb25z dF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWlu ZXI6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29u dGFpbmVyOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgICB2b2lkIGNvbnN0cmFp bnRzKCkgewogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgSW5wdXRJdGVyYXRvckNvbmNlcHQ8Y29u c3RfaXRlcmF0b3I+ID4oKTsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8IEFzc2lnbmFibGVDb25j ZXB0PENvbnRhaW5lcj4gPigpOwogICAgICBjb25zdF9jb25zdHJhaW50cyhjKTsKICAgIH0KICAg IHZvaWQgY29uc3RfY29uc3RyYWludHMoY29uc3QgQ29udGFpbmVyJiBjKSB7CiAgICAgIGkgPSBj LmJlZ2luKCk7CiAgICAgIGkgPSBjLmVuZCgpOwogICAgICBuID0gYy5zaXplKCk7CiAgICAgIG4g PSBjLm1heF9zaXplKCk7CiAgICAgIGIgPSBjLmVtcHR5KCk7CiAgICB9CiAgICBDb250YWluZXIg YzsKICAgIGJvb2wgYjsKICAgIGNvbnN0X2l0ZXJhdG9yIGk7CiAgICBzaXplX3R5cGUgbjsKICB9 OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGFpbmVyPgogIHN0cnVjdCBNdXRhYmxlX0NvbnRhaW5l ckNvbmNlcHQKICB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6dmFsdWVfdHlwZSB2 YWx1ZV90eXBlOwogICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OnJlZmVyZW5jZSByZWZl cmVuY2U7CiAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6aXRlcmF0b3IgaXRlcmF0b3I7 CiAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6cG9pbnRlciBwb2ludGVyOwoKICAgIHZv aWQgY29uc3RyYWludHMoKSB7CiAgICAgIGZ1bmN0aW9uX3JlcXVpcmVzPCBDb250YWluZXJDb25j ZXB0PENvbnRhaW5lcj4gPigpOwogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgQXNzaWduYWJsZUNv bmNlcHQ8dmFsdWVfdHlwZT4gPigpOwogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgSW5wdXRJdGVy YXRvckNvbmNlcHQ8aXRlcmF0b3I+ID4oKTsKCiAgICAgIGkgPSBjLmJlZ2luKCk7CiAgICAgIGkg PSBjLmVuZCgpOwogICAgICBjLnN3YXAoYzIpOwogICAgfQogICAgaXRlcmF0b3IgaTsKICAgIENv bnRhaW5lciBjLCBjMjsKICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgRm9yd2FyZENvbnRhaW5lcj4K ICBzdHJ1Y3QgRm9yd2FyZENvbnRhaW5lckNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRz KCkgewogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgQ29udGFpbmVyQ29uY2VwdDxGb3J3YXJkQ29u dGFpbmVyPiA+KCk7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgRm9yd2FyZENvbnRhaW5lcjo6Y29u c3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgICAgIGZ1bmN0aW9uX3JlcXVpcmVzPCBGb3J3 YXJkSXRlcmF0b3JDb25jZXB0PGNvbnN0X2l0ZXJhdG9yPiA+KCk7CiAgICB9CiAgfTsKCiAgdGVt cGxhdGUgPGNsYXNzIEZvcndhcmRDb250YWluZXI+CiAgc3RydWN0IE11dGFibGVfRm9yd2FyZENv bnRhaW5lckNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAgICBmdW5jdGlv bl9yZXF1aXJlczwgRm9yd2FyZENvbnRhaW5lckNvbmNlcHQ8Rm9yd2FyZENvbnRhaW5lcj4gPigp OwogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgTXV0YWJsZV9Db250YWluZXJDb25jZXB0PEZvcndh cmRDb250YWluZXI+ID4oKTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBGb3J3YXJkQ29udGFpbmVy OjppdGVyYXRvciBpdGVyYXRvcjsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8IE11dGFibGVfRm9y d2FyZEl0ZXJhdG9yQ29uY2VwdDxpdGVyYXRvcj4gPigpOwogICAgfQogIH07CgogIHRlbXBsYXRl IDxjbGFzcyBSZXZlcnNpYmxlQ29udGFpbmVyPgogIHN0cnVjdCBSZXZlcnNpYmxlQ29udGFpbmVy Q29uY2VwdAogIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgUmV2ZXJzaWJsZUNvbnRhaW5lcjo6Y29u c3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgICB0eXBlZGVmIHR5cGVuYW1lIFJldmVyc2li bGVDb250YWluZXI6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgY29uc3RfcmV2ZXJzZV9p dGVyYXRvcjsKCiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAgICBmdW5jdGlvbl9yZXF1aXJl czwgRm9yd2FyZENvbnRhaW5lckNvbmNlcHQ8UmV2ZXJzaWJsZUNvbnRhaW5lcj4gPigpOwogICAg ICBmdW5jdGlvbl9yZXF1aXJlczwgQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDxjb25zdF9p dGVyYXRvcj4gPigpOwogICAgICBmdW5jdGlvbl9yZXF1aXJlczwKICAgICAgICBCaWRpcmVjdGlv bmFsSXRlcmF0b3JDb25jZXB0PGNvbnN0X3JldmVyc2VfaXRlcmF0b3I+ID4oKTsKICAgICAgY29u c3RfY29uc3RyYWludHMoYyk7CiAgICB9CiAgICB2b2lkIGNvbnN0X2NvbnN0cmFpbnRzKGNvbnN0 IFJldmVyc2libGVDb250YWluZXImIGMpIHsKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciBp ID0gYy5yYmVnaW4oKTsKICAgICAgaSA9IGMucmVuZCgpOwogICAgfQogICAgUmV2ZXJzaWJsZUNv bnRhaW5lciBjOwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBSZXZlcnNpYmxlQ29udGFpbmVyPgog IHN0cnVjdCBNdXRhYmxlX1JldmVyc2libGVDb250YWluZXJDb25jZXB0CiAgewogICAgdHlwZWRl ZiB0eXBlbmFtZSBSZXZlcnNpYmxlQ29udGFpbmVyOjppdGVyYXRvciBpdGVyYXRvcjsKICAgIHR5 cGVkZWYgdHlwZW5hbWUgUmV2ZXJzaWJsZUNvbnRhaW5lcjo6cmV2ZXJzZV9pdGVyYXRvciByZXZl cnNlX2l0ZXJhdG9yOwoKICAgIHZvaWQgY29uc3RyYWludHMoKSB7CiAgICAgIGZ1bmN0aW9uX3Jl cXVpcmVzPCBSZXZlcnNpYmxlQ29udGFpbmVyQ29uY2VwdDxSZXZlcnNpYmxlQ29udGFpbmVyPiA+ KCk7CiAgICAgIGZ1bmN0aW9uX3JlcXVpcmVzPAogICAgICAgIE11dGFibGVfRm9yd2FyZENvbnRh aW5lckNvbmNlcHQ8UmV2ZXJzaWJsZUNvbnRhaW5lcj4gPigpOwogICAgICBmdW5jdGlvbl9yZXF1 aXJlczwgTXV0YWJsZV9CaWRpcmVjdGlvbmFsSXRlcmF0b3JDb25jZXB0PGl0ZXJhdG9yPiA+KCk7 CiAgICAgIGZ1bmN0aW9uX3JlcXVpcmVzPAogICAgICAgIE11dGFibGVfQmlkaXJlY3Rpb25hbEl0 ZXJhdG9yQ29uY2VwdDxyZXZlcnNlX2l0ZXJhdG9yPiA+KCk7CgogICAgICByZXZlcnNlX2l0ZXJh dG9yIGkgPSBjLnJiZWdpbigpOwogICAgICBpID0gYy5yZW5kKCk7CiAgICB9CiAgICBSZXZlcnNp YmxlQ29udGFpbmVyIGM7CiAgfTsKCiAgdGVtcGxhdGUgPGNsYXNzIFJhbmRvbUFjY2Vzc0NvbnRh aW5lcj4KICBzdHJ1Y3QgUmFuZG9tQWNjZXNzQ29udGFpbmVyQ29uY2VwdAogIHsKICAgIHR5cGVk ZWYgdHlwZW5hbWUgUmFuZG9tQWNjZXNzQ29udGFpbmVyOjpzaXplX3R5cGUgc2l6ZV90eXBlOwog ICAgdHlwZWRlZiB0eXBlbmFtZSBSYW5kb21BY2Nlc3NDb250YWluZXI6OmNvbnN0X3JlZmVyZW5j ZSBjb25zdF9yZWZlcmVuY2U7CiAgICB0eXBlZGVmIHR5cGVuYW1lIFJhbmRvbUFjY2Vzc0NvbnRh aW5lcjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgICB0eXBlZGVmIHR5cGVuYW1l IFJhbmRvbUFjY2Vzc0NvbnRhaW5lcjo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICBjb25z dF9yZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHZvaWQgY29uc3RyYWludHMoKSB7CiAgICAgIGZ1bmN0 aW9uX3JlcXVpcmVzPCBSZXZlcnNpYmxlQ29udGFpbmVyQ29uY2VwdDxSYW5kb21BY2Nlc3NDb250 YWluZXI+ID4oKTsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8IFJhbmRvbUFjY2Vzc0l0ZXJhdG9y Q29uY2VwdDxjb25zdF9pdGVyYXRvcj4gPigpOwogICAgICBmdW5jdGlvbl9yZXF1aXJlczwKICAg ICAgICBSYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcj4g PigpOwoKICAgICAgY29uc3RfY29uc3RyYWludHMoYyk7CiAgICB9CiAgICB2b2lkIGNvbnN0X2Nv bnN0cmFpbnRzKGNvbnN0IFJhbmRvbUFjY2Vzc0NvbnRhaW5lciYgYykgewogICAgICBjb25zdF9y ZWZlcmVuY2UgciA9IGNbbl07CiAgICAgIGlnbm9yZV91bnVzZWRfdmFyaWFibGVfd2FybmluZyhy KTsKICAgIH0KICAgIFJhbmRvbUFjY2Vzc0NvbnRhaW5lciBjOwogICAgc2l6ZV90eXBlIG47CiAg fTsKCiAgdGVtcGxhdGUgPGNsYXNzIFJhbmRvbUFjY2Vzc0NvbnRhaW5lcj4KICBzdHJ1Y3QgTXV0 YWJsZV9SYW5kb21BY2Nlc3NDb250YWluZXJDb25jZXB0CiAgewogICAgdHlwZWRlZiB0eXBlbmFt ZSBSYW5kb21BY2Nlc3NDb250YWluZXI6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICB0eXBlZGVm IHR5cGVuYW1lIFJhbmRvbUFjY2Vzc0NvbnRhaW5lcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAg IHR5cGVkZWYgdHlwZW5hbWUgUmFuZG9tQWNjZXNzQ29udGFpbmVyOjppdGVyYXRvciBpdGVyYXRv cjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgUmFuZG9tQWNjZXNzQ29udGFpbmVyOjpyZXZlcnNlX2l0 ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CgogICAgdm9pZCBjb25zdHJhaW50cygpIHsKICAgICAg ZnVuY3Rpb25fcmVxdWlyZXM8CiAgICAgICAgUmFuZG9tQWNjZXNzQ29udGFpbmVyQ29uY2VwdDxS YW5kb21BY2Nlc3NDb250YWluZXI+ID4oKTsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8CiAgICAg ICAgTXV0YWJsZV9SZXZlcnNpYmxlQ29udGFpbmVyQ29uY2VwdDxSYW5kb21BY2Nlc3NDb250YWlu ZXI+ID4oKTsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8IE11dGFibGVfUmFuZG9tQWNjZXNzSXRl cmF0b3JDb25jZXB0PGl0ZXJhdG9yPiA+KCk7CiAgICAgIGZ1bmN0aW9uX3JlcXVpcmVzPAogICAg ICAgIE11dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PHJldmVyc2VfaXRlcmF0b3I+ ID4oKTsKCiAgICAgIHJlZmVyZW5jZSByID0gY1tpXTsKICAgICAgaWdub3JlX3VudXNlZF92YXJp YWJsZV93YXJuaW5nKHIpOwogICAgfQogICAgc2l6ZV90eXBlIGk7CiAgICBSYW5kb21BY2Nlc3ND b250YWluZXIgYzsKICB9OwoKCiAgdGVtcGxhdGUgPGNsYXNzIFNlcXVlbmNlPgogIHN0cnVjdCBT ZXF1ZW5jZUNvbmNlcHQKICB7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBTZXF1ZW5jZTo6cmVmZXJl bmNlIHJlZmVyZW5jZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgU2VxdWVuY2U6OmNvbnN0X3JlZmVy ZW5jZSBjb25zdF9yZWZlcmVuY2U7CgogICAgdm9pZCBjb25zdHJhaW50cygpIHsKCgoKICAgICAg ZnVuY3Rpb25fcmVxdWlyZXM8IE11dGFibGVfRm9yd2FyZENvbnRhaW5lckNvbmNlcHQ8U2VxdWVu Y2U+ID4oKTsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8IERlZmF1bHRDb25zdHJ1Y3RpYmxlQ29u Y2VwdDxTZXF1ZW5jZT4gPigpOwoKICAgICAgU2VxdWVuY2UKICAgICAgICBjKG4pLAogICAgICAg IGMyKG4sIHQpLAogICAgICAgIGMzKGZpcnN0LCBsYXN0KTsKCiAgICAgIGMuaW5zZXJ0KHAsIHQp OwogICAgICBjLmluc2VydChwLCBuLCB0KTsKICAgICAgYy5pbnNlcnQocCwgZmlyc3QsIGxhc3Qp OwoKICAgICAgYy5lcmFzZShwKTsKICAgICAgYy5lcmFzZShwLCBxKTsKCiAgICAgIHJlZmVyZW5j ZSByID0gYy5mcm9udCgpOwoKICAgICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKGMp OwogICAgICBpZ25vcmVfdW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcoYzIpOwogICAgICBpZ25vcmVf dW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcoYzMpOwogICAgICBpZ25vcmVfdW51c2VkX3ZhcmlhYmxl X3dhcm5pbmcocik7CiAgICAgIGNvbnN0X2NvbnN0cmFpbnRzKGMpOwogICAgfQogICAgdm9pZCBj b25zdF9jb25zdHJhaW50cyhjb25zdCBTZXF1ZW5jZSYgYykgewogICAgICBjb25zdF9yZWZlcmVu Y2UgciA9IGMuZnJvbnQoKTsKICAgICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKHIp OwogICAgfQogICAgdHlwZW5hbWUgU2VxdWVuY2U6OnZhbHVlX3R5cGUgdDsKICAgIHR5cGVuYW1l IFNlcXVlbmNlOjpzaXplX3R5cGUgbjsKICAgIHR5cGVuYW1lIFNlcXVlbmNlOjp2YWx1ZV90eXBl KiBmaXJzdCwgKmxhc3Q7CiAgICB0eXBlbmFtZSBTZXF1ZW5jZTo6aXRlcmF0b3IgcCwgcTsKICB9 OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgRnJvbnRJbnNlcnRpb25TZXF1ZW5jZT4KICBzdHJ1Y3QgRnJv bnRJbnNlcnRpb25TZXF1ZW5jZUNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewog ICAgICBmdW5jdGlvbl9yZXF1aXJlczwgU2VxdWVuY2VDb25jZXB0PEZyb250SW5zZXJ0aW9uU2Vx dWVuY2U+ID4oKTsKCiAgICAgIGMucHVzaF9mcm9udCh0KTsKICAgICAgYy5wb3BfZnJvbnQoKTsK ICAgIH0KICAgIEZyb250SW5zZXJ0aW9uU2VxdWVuY2UgYzsKICAgIHR5cGVuYW1lIEZyb250SW5z ZXJ0aW9uU2VxdWVuY2U6OnZhbHVlX3R5cGUgdDsKICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgQmFj a0luc2VydGlvblNlcXVlbmNlPgogIHN0cnVjdCBCYWNrSW5zZXJ0aW9uU2VxdWVuY2VDb25jZXB0 CiAgewogICAgdHlwZWRlZiB0eXBlbmFtZSBCYWNrSW5zZXJ0aW9uU2VxdWVuY2U6OnJlZmVyZW5j ZSByZWZlcmVuY2U7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEJhY2tJbnNlcnRpb25TZXF1ZW5jZTo6 Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKCiAgICB2b2lkIGNvbnN0cmFpbnRzKCkg ewogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgU2VxdWVuY2VDb25jZXB0PEJhY2tJbnNlcnRpb25T ZXF1ZW5jZT4gPigpOwoKICAgICAgYy5wdXNoX2JhY2sodCk7CiAgICAgIGMucG9wX2JhY2soKTsK ICAgICAgcmVmZXJlbmNlIHIgPSBjLmJhY2soKTsKICAgICAgaWdub3JlX3VudXNlZF92YXJpYWJs ZV93YXJuaW5nKHIpOwogICAgfQogICAgdm9pZCBjb25zdF9jb25zdHJhaW50cyhjb25zdCBCYWNr SW5zZXJ0aW9uU2VxdWVuY2UmIGMpIHsKICAgICAgY29uc3RfcmVmZXJlbmNlIHIgPSBjLmJhY2so KTsKICAgICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKHIpOwogICAgfTsKICAgIEJh Y2tJbnNlcnRpb25TZXF1ZW5jZSBjOwogICAgdHlwZW5hbWUgQmFja0luc2VydGlvblNlcXVlbmNl Ojp2YWx1ZV90eXBlIHQ7CiAgfTsKCiAgdGVtcGxhdGUgPGNsYXNzIEFzc29jaWF0aXZlQ29udGFp bmVyPgogIHN0cnVjdCBBc3NvY2lhdGl2ZUNvbnRhaW5lckNvbmNlcHQKICB7CiAgICB2b2lkIGNv bnN0cmFpbnRzKCkgewogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgRm9yd2FyZENvbnRhaW5lckNv bmNlcHQ8QXNzb2NpYXRpdmVDb250YWluZXI+ID4oKTsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8 IERlZmF1bHRDb25zdHJ1Y3RpYmxlQ29uY2VwdDxBc3NvY2lhdGl2ZUNvbnRhaW5lcj4gPigpOwoK ICAgICAgaSA9IGMuZmluZChrKTsKICAgICAgciA9IGMuZXF1YWxfcmFuZ2Uoayk7CiAgICAgIGMu ZXJhc2Uoayk7CiAgICAgIGMuZXJhc2UoaSk7CiAgICAgIGMuZXJhc2Uoci5maXJzdCwgci5zZWNv bmQpOwogICAgICBjb25zdF9jb25zdHJhaW50cyhjKTsKICAgIH0KICAgIHZvaWQgY29uc3RfY29u c3RyYWludHMoY29uc3QgQXNzb2NpYXRpdmVDb250YWluZXImIGMpIHsKICAgICAgY2kgPSBjLmZp bmQoayk7CiAgICAgIG4gPSBjLmNvdW50KGspOwogICAgICBjciA9IGMuZXF1YWxfcmFuZ2Uoayk7 CiAgICB9CiAgICB0eXBlZGVmIHR5cGVuYW1lIEFzc29jaWF0aXZlQ29udGFpbmVyOjppdGVyYXRv ciBpdGVyYXRvcjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQXNzb2NpYXRpdmVDb250YWluZXI6OmNv bnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoKICAgIEFzc29jaWF0aXZlQ29udGFpbmVyIGM7 CiAgICBpdGVyYXRvciBpOwogICAgc3RkOjpwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiByOwogICAg Y29uc3RfaXRlcmF0b3IgY2k7CiAgICBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRl cmF0b3I+IGNyOwogICAgdHlwZW5hbWUgQXNzb2NpYXRpdmVDb250YWluZXI6OmtleV90eXBlIGs7 CiAgICB0eXBlbmFtZSBBc3NvY2lhdGl2ZUNvbnRhaW5lcjo6c2l6ZV90eXBlIG47CiAgfTsKCiAg dGVtcGxhdGUgPGNsYXNzIFVuaXF1ZUFzc29jaWF0aXZlQ29udGFpbmVyPgogIHN0cnVjdCBVbmlx dWVBc3NvY2lhdGl2ZUNvbnRhaW5lckNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkg ewogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgQXNzb2NpYXRpdmVDb250YWluZXJDb25jZXB0PFVu aXF1ZUFzc29jaWF0aXZlQ29udGFpbmVyPiA+KCk7CgogICAgICBVbmlxdWVBc3NvY2lhdGl2ZUNv bnRhaW5lciBjKGZpcnN0LCBsYXN0KTsKCiAgICAgIHBvc19mbGFnID0gYy5pbnNlcnQodCk7CiAg ICAgIGMuaW5zZXJ0KGZpcnN0LCBsYXN0KTsKCiAgICAgIGlnbm9yZV91bnVzZWRfdmFyaWFibGVf d2FybmluZyhjKTsKICAgIH0KICAgIHN0ZDo6cGFpcjx0eXBlbmFtZSBVbmlxdWVBc3NvY2lhdGl2 ZUNvbnRhaW5lcjo6aXRlcmF0b3IsIGJvb2w+IHBvc19mbGFnOwogICAgdHlwZW5hbWUgVW5pcXVl QXNzb2NpYXRpdmVDb250YWluZXI6OnZhbHVlX3R5cGUgdDsKICAgIHR5cGVuYW1lIFVuaXF1ZUFz c29jaWF0aXZlQ29udGFpbmVyOjp2YWx1ZV90eXBlKiBmaXJzdCwgKmxhc3Q7CiAgfTsKCiAgdGVt cGxhdGUgPGNsYXNzIE11bHRpcGxlQXNzb2NpYXRpdmVDb250YWluZXI+CiAgc3RydWN0IE11bHRp cGxlQXNzb2NpYXRpdmVDb250YWluZXJDb25jZXB0CiAgewogICAgdm9pZCBjb25zdHJhaW50cygp IHsKICAgICAgZnVuY3Rpb25fcmVxdWlyZXM8IEFzc29jaWF0aXZlQ29udGFpbmVyQ29uY2VwdDxN dWx0aXBsZUFzc29jaWF0aXZlQ29udGFpbmVyPiA+KCk7CgogICAgICBNdWx0aXBsZUFzc29jaWF0 aXZlQ29udGFpbmVyIGMoZmlyc3QsIGxhc3QpOwoKICAgICAgcG9zID0gYy5pbnNlcnQodCk7CiAg ICAgIGMuaW5zZXJ0KGZpcnN0LCBsYXN0KTsKCiAgICAgIGlnbm9yZV91bnVzZWRfdmFyaWFibGVf d2FybmluZyhjKTsKICAgICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKHBvcyk7CiAg ICB9CiAgICB0eXBlbmFtZSBNdWx0aXBsZUFzc29jaWF0aXZlQ29udGFpbmVyOjppdGVyYXRvciBw b3M7CiAgICB0eXBlbmFtZSBNdWx0aXBsZUFzc29jaWF0aXZlQ29udGFpbmVyOjp2YWx1ZV90eXBl IHQ7CiAgICB0eXBlbmFtZSBNdWx0aXBsZUFzc29jaWF0aXZlQ29udGFpbmVyOjp2YWx1ZV90eXBl KiBmaXJzdCwgKmxhc3Q7CiAgfTsKCiAgdGVtcGxhdGUgPGNsYXNzIFNpbXBsZUFzc29jaWF0aXZl Q29udGFpbmVyPgogIHN0cnVjdCBTaW1wbGVBc3NvY2lhdGl2ZUNvbnRhaW5lckNvbmNlcHQKICB7 CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgQXNzb2Np YXRpdmVDb250YWluZXJDb25jZXB0PFNpbXBsZUFzc29jaWF0aXZlQ29udGFpbmVyPiA+KCk7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgU2ltcGxlQXNzb2NpYXRpdmVDb250YWluZXI6OmtleV90eXBl IGtleV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIFNpbXBsZUFzc29jaWF0aXZlQ29udGFp bmVyOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVxdWly ZV9zYW1lPGtleV90eXBlLCB2YWx1ZV90eXBlPjo6dHlwZSByZXE7CiAgICB9CiAgfTsKCiAgdGVt cGxhdGUgPGNsYXNzIFNpbXBsZUFzc29jaWF0aXZlQ29udGFpbmVyPgogIHN0cnVjdCBQYWlyQXNz b2NpYXRpdmVDb250YWluZXJDb25jZXB0CiAgewogICAgdm9pZCBjb25zdHJhaW50cygpIHsKICAg ICAgZnVuY3Rpb25fcmVxdWlyZXM8IEFzc29jaWF0aXZlQ29udGFpbmVyQ29uY2VwdDxTaW1wbGVB c3NvY2lhdGl2ZUNvbnRhaW5lcj4gPigpOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIFNpbXBsZUFz c29jaWF0aXZlQ29udGFpbmVyOjprZXlfdHlwZSBrZXlfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBTaW1wbGVBc3NvY2lhdGl2ZUNvbnRhaW5lcjo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIFNpbXBsZUFzc29jaWF0aXZlQ29udGFpbmVyOjptYXBwZWRf dHlwZSBtYXBwZWRfdHlwZTsKICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3Qga2V5X3R5cGUs IG1hcHBlZF90eXBlPiByZXF1aXJlZF92YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IHJlcXVpcmVfc2FtZTx2YWx1ZV90eXBlLCByZXF1aXJlZF92YWx1ZV90eXBlPjo6dHlwZSByZXE7 CiAgICB9CiAgfTsKCiAgdGVtcGxhdGUgPGNsYXNzIFNvcnRlZEFzc29jaWF0aXZlQ29udGFpbmVy PgogIHN0cnVjdCBTb3J0ZWRBc3NvY2lhdGl2ZUNvbnRhaW5lckNvbmNlcHQKICB7CiAgICB2b2lk IGNvbnN0cmFpbnRzKCkgewogICAgICBmdW5jdGlvbl9yZXF1aXJlczwgQXNzb2NpYXRpdmVDb250 YWluZXJDb25jZXB0PFNvcnRlZEFzc29jaWF0aXZlQ29udGFpbmVyPiA+KCk7CiAgICAgIGZ1bmN0 aW9uX3JlcXVpcmVzPCBSZXZlcnNpYmxlQ29udGFpbmVyQ29uY2VwdDxTb3J0ZWRBc3NvY2lhdGl2 ZUNvbnRhaW5lcj4gPigpOwoKICAgICAgU29ydGVkQXNzb2NpYXRpdmVDb250YWluZXIKICAgICAg ICBjKGtjKSwKICAgICAgICBjMihmaXJzdCwgbGFzdCksCiAgICAgICAgYzMoZmlyc3QsIGxhc3Qs IGtjKTsKCiAgICAgIHAgPSBjLnVwcGVyX2JvdW5kKGspOwogICAgICBwID0gYy5sb3dlcl9ib3Vu ZChrKTsKICAgICAgciA9IGMuZXF1YWxfcmFuZ2Uoayk7CgogICAgICBjLmluc2VydChwLCB0KTsK CiAgICAgIGlnbm9yZV91bnVzZWRfdmFyaWFibGVfd2FybmluZyhjKTsKICAgICAgaWdub3JlX3Vu dXNlZF92YXJpYWJsZV93YXJuaW5nKGMyKTsKICAgICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93 YXJuaW5nKGMzKTsKICAgIH0KICAgIHZvaWQgY29uc3RfY29uc3RyYWludHMoY29uc3QgU29ydGVk QXNzb2NpYXRpdmVDb250YWluZXImIGMpIHsKICAgICAga2MgPSBjLmtleV9jb21wKCk7CiAgICAg IHZjID0gYy52YWx1ZV9jb21wKCk7CgogICAgICBjcCA9IGMudXBwZXJfYm91bmQoayk7CiAgICAg IGNwID0gYy5sb3dlcl9ib3VuZChrKTsKICAgICAgY3IgPSBjLmVxdWFsX3JhbmdlKGspOwogICAg fQogICAgdHlwZW5hbWUgU29ydGVkQXNzb2NpYXRpdmVDb250YWluZXI6OmtleV9jb21wYXJlIGtj OwogICAgdHlwZW5hbWUgU29ydGVkQXNzb2NpYXRpdmVDb250YWluZXI6OnZhbHVlX2NvbXBhcmUg dmM7CiAgICB0eXBlbmFtZSBTb3J0ZWRBc3NvY2lhdGl2ZUNvbnRhaW5lcjo6dmFsdWVfdHlwZSB0 OwogICAgdHlwZW5hbWUgU29ydGVkQXNzb2NpYXRpdmVDb250YWluZXI6OmtleV90eXBlIGs7CiAg ICB0eXBlZGVmIHR5cGVuYW1lIFNvcnRlZEFzc29jaWF0aXZlQ29udGFpbmVyOjppdGVyYXRvciBp dGVyYXRvcjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgU29ydGVkQXNzb2NpYXRpdmVDb250YWluZXI6 OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogICAgaXRlcmF0b3IgcDsKICAgIGNvbnN0 X2l0ZXJhdG9yIGNwOwogICAgc3RkOjpwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiByOwogICAgc3Rk OjpwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPiBjcjsKICAgIHR5cGVuYW1lIFNv cnRlZEFzc29jaWF0aXZlQ29udGFpbmVyOjp2YWx1ZV90eXBlKiBmaXJzdCwgKmxhc3Q7CiAgfTsK CgoKfQojIDEzMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJy YXkvaXRlcmF0b3JfYWRhcHRvcnMuaHBwIiAyIDMKCgoKCiMgMSAiL2hvbWUvY29tcGJpby9kOTUt YmxpL2luY2x1ZGUvYm9vc3QvZGV0YWlsL3NlbGVjdF90eXBlLmhwcCIgMSAzCiMgMTcgIi9ob21l L2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2RldGFpbC9zZWxlY3RfdHlwZS5ocHAiIDMK bmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIGRldGFpbCB7CgoKCgoKCiAgdGVtcGxhdGUgPGJv b2wgYj4gc3RydWN0IGlmX3RydWUKICB7CiAgICAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBG PgogICAgICBzdHJ1Y3QgdGhlbiB7IHR5cGVkZWYgVCB0eXBlOyB9OwogIH07CgogIHRlbXBsYXRl IDw+CiAgc3RydWN0IGlmX3RydWU8ZmFsc2U+CiAgewogICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwg Y2xhc3MgRj4KICAgICAgc3RydWN0IHRoZW4geyB0eXBlZGVmIEYgdHlwZTsgfTsKICB9Owp9fQoj IDEzNiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvaXRl cmF0b3JfYWRhcHRvcnMuaHBwIiAyIDMKIyAxNDUgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNs dWRlL2Jvb3N0L211bHRpX2FycmF5L2l0ZXJhdG9yX2FkYXB0b3JzLmhwcCIgMwpuYW1lc3BhY2Ug Ym9vc3QgewpuYW1lc3BhY2UgZGV0YWlsIHsKbmFtZXNwYWNlIG11bHRpX2FycmF5IHsKCgoKCnN0 cnVjdCBkZWZhdWx0X2l0ZXJhdG9yX3BvbGljaWVzCnsKIyAxNjQgIi9ob21lL2NvbXBiaW8vZDk1 LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L2l0ZXJhdG9yX2FkYXB0b3JzLmhwcCIgMwog ICAgdGVtcGxhdGUgPGNsYXNzIEJhc2U+CiAgICB2b2lkIGluaXRpYWxpemUoQmFzZSYpCiAgICAg ICAgeyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yQWRhcHRvcj4KICAgIHR5cGVuYW1l IEl0ZXJhdG9yQWRhcHRvcjo6cmVmZXJlbmNlIGRlcmVmZXJlbmNlKGNvbnN0IEl0ZXJhdG9yQWRh cHRvciYgeCkgY29uc3QKICAgICAgICB7IHJldHVybiAqeC5iYXNlKCk7IH0KCiAgICB0ZW1wbGF0 ZSA8Y2xhc3MgSXRlcmF0b3JBZGFwdG9yPgogICAgdm9pZCBpbmNyZW1lbnQoSXRlcmF0b3JBZGFw dG9yJiB4KQogICAgICAgIHsgKyt4LmJhc2UoKTsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBJdGVy YXRvckFkYXB0b3I+CiAgICB2b2lkIGRlY3JlbWVudChJdGVyYXRvckFkYXB0b3ImIHgpCiAgICAg ICAgeyAtLXguYmFzZSgpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yQWRhcHRvciwg Y2xhc3MgRGlmZmVyZW5jZVR5cGU+CiAgICB2b2lkIGFkdmFuY2UoSXRlcmF0b3JBZGFwdG9yJiB4 LCBEaWZmZXJlbmNlVHlwZSBuKQogICAgICAgIHsgeC5iYXNlKCkgKz0gbjsgfQoKICAgIHRlbXBs YXRlIDxjbGFzcyBJdGVyYXRvckFkYXB0b3IxLCBjbGFzcyBJdGVyYXRvckFkYXB0b3IyPgogICAg dHlwZW5hbWUgSXRlcmF0b3JBZGFwdG9yMTo6ZGlmZmVyZW5jZV90eXBlCiAgICBkaXN0YW5jZShj b25zdCBJdGVyYXRvckFkYXB0b3IxJiB4LCBjb25zdCBJdGVyYXRvckFkYXB0b3IyJiB5KSBjb25z dAogICAgICAgIHsgcmV0dXJuIHkuYmFzZSgpIC0geC5iYXNlKCk7IH0KCiAgICB0ZW1wbGF0ZSA8 Y2xhc3MgSXRlcmF0b3JBZGFwdG9yMSwgY2xhc3MgSXRlcmF0b3JBZGFwdG9yMj4KICAgIGJvb2wg ZXF1YWwoY29uc3QgSXRlcmF0b3JBZGFwdG9yMSYgeCwgY29uc3QgSXRlcmF0b3JBZGFwdG9yMiYg eSkgY29uc3QKICAgICAgICB7IHJldHVybiB4LmJhc2UoKSA9PSB5LmJhc2UoKTsgfQp9OwojIDI1 NiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvaXRlcmF0 b3JfYWRhcHRvcnMuaHBwIiAzCm5hbWVzcGFjZSBkZXRhaWwgewoKCgoKCgogIHRlbXBsYXRlIDxj bGFzcyBUPgogIHN0cnVjdCBvcGVyYXRvcl9hcnJvd19wcm94eQogIHsKICAgICAgb3BlcmF0b3Jf YXJyb3dfcHJveHkoY29uc3QgVCYgeCkgOiBtX3ZhbHVlKHgpIHt9CgogICAgICBUKiBvcGVyYXRv ci0+KCkgY29uc3QgeyByZXR1cm4gJm1fdmFsdWU7IH0KCgoKCiAgICAgIG9wZXJhdG9yIFQqKCkg Y29uc3QgeyByZXR1cm4gJm1fdmFsdWU7IH0KICAgICAgbXV0YWJsZSBUIG1fdmFsdWU7CiAgfTsK CiAgdGVtcGxhdGUgPGNsYXNzIEl0ZXI+CiAgaW5saW5lIG9wZXJhdG9yX2Fycm93X3Byb3h5PHR5 cGVuYW1lIEl0ZXI6OnJlZmVyZW5jZT4KICBvcGVyYXRvcl9hcnJvdyhjb25zdCBJdGVyJiBpLCBz dGQ6OmlucHV0X2l0ZXJhdG9yX3RhZykgewoKCiAgICB0eXBlZGVmIHR5cGVuYW1lIEl0ZXI6OnJl ZmVyZW5jZSB2YWx1ZV90OwogICAgcmV0dXJuIG9wZXJhdG9yX2Fycm93X3Byb3h5PHZhbHVlX3Q+ KCppKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBJdGVyPgogIGlubGluZSB0eXBlbmFtZSBJdGVy Ojpwb2ludGVyCiAgb3BlcmF0b3JfYXJyb3coY29uc3QgSXRlciYgaSwgc3RkOjpmb3J3YXJkX2l0 ZXJhdG9yX3RhZykgewogICAgcmV0dXJuICYoKmkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIFZh bHVlLCBjbGFzcyBSZWZlcmVuY2UsIGNsYXNzIFBvaW50ZXI+CiAgc3RydWN0IG9wZXJhdG9yX2Fy cm93X3Jlc3VsdF9nZW5lcmF0b3IKICB7CgogICAgICB0eXBlZGVmIG9wZXJhdG9yX2Fycm93X3By b3h5PFJlZmVyZW5jZT4gcHJveHk7CgogICAgICBlbnVtIHsgdXNlX3Byb3h5ID0gIWJvb3N0Ojpp c19yZWZlcmVuY2U8UmVmZXJlbmNlPjo6dmFsdWUgfTsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg Ym9vc3Q6OmRldGFpbDo6aWZfdHJ1ZTwodXNlX3Byb3h5KT46OnRlbXBsYXRlCiAgICAgIHRoZW48 CiAgICAgICAgcHJveHksCgogICAgICAgIFBvaW50ZXIKICAgICAgPjo6dHlwZSB0eXBlOwogIH07 CiMgMzUxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS9p dGVyYXRvcl9hZGFwdG9ycy5ocHAiIDMKICAgdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLGNsYXNz IFZhbHVlPgogICBzdHJ1Y3QgaXRlcmF0b3JfZGVmYXVsdHMgOiBpdGVyYXRvcl90cmFpdHM8SXRl cmF0b3I+CiAgIHsKCgogICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpZl90cnVlPCgKICAgICAgICAg ICAgICAgOjpib29zdDo6aXNfc2FtZTxWYWx1ZSx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8SXRl cmF0b3I+Ojp2YWx1ZV90eXBlPjo6dmFsdWUKICAgICAgICAgICApPjo6dGVtcGxhdGUgdGhlbjwK ICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxJdGVyYXRvcj46OnBvaW50 ZXIsCiAgICAgICAgICAgICAgICBWYWx1ZSoKICAgICAgID46OnR5cGUgcG9pbnRlcjsKCiAgICAg ICB0eXBlZGVmIHR5cGVuYW1lIGlmX3RydWU8KAogICAgICAgICAgICAgICA6OmJvb3N0Ojppc19z YW1lPFZhbHVlLHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxJdGVyYXRvcj46OnZhbHVlX3R5cGU+ Ojp2YWx1ZQogICAgICAgICAgICk+Ojp0ZW1wbGF0ZSB0aGVuPAogICAgICAgICAgICAgICAgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yPjo6cmVmZXJlbmNlLAogICAgICAgICAgICAg ICAgVmFsdWUmCiAgICAgICA+Ojp0eXBlIHJlZmVyZW5jZTsKCiAgIH07CgoKCgoKICBzdHJ1Y3Qg ZGVmYXVsdF9hcmd1bWVudCB7IH07CgogIHN0cnVjdCBkdW1teV9kZWZhdWx0X2dlbiB7CiAgICB0 ZW1wbGF0ZSA8Y2xhc3MgQmFzZSwgY2xhc3MgVHJhaXRzPgogICAgc3RydWN0IHNlbGVjdCB7IHR5 cGVkZWYgZGVmYXVsdF9hcmd1bWVudCB0eXBlOyB9OwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBH ZW4+IHN0cnVjdCBkZWZhdWx0X2dlbmVyYXRvciB7CiAgICB0eXBlZGVmIGR1bW15X2RlZmF1bHRf Z2VuIHR5cGU7CiAgfTsKCiAgc3RydWN0IGRlZmF1bHRfdmFsdWVfdHlwZSB7CiAgICB0ZW1wbGF0 ZSA8Y2xhc3MgQmFzZSwgY2xhc3MgVHJhaXRzPgogICAgc3RydWN0IHNlbGVjdCB7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OmRldGFpbDo6aXRlcmF0b3JfdHJhaXRzPEJhc2U+Ojp2YWx1 ZV90eXBlIHR5cGU7CiAgICB9OwogIH07CiAgdGVtcGxhdGUgPD4gc3RydWN0IGRlZmF1bHRfZ2Vu ZXJhdG9yPGRlZmF1bHRfdmFsdWVfdHlwZT4KICB7IHR5cGVkZWYgZGVmYXVsdF92YWx1ZV90eXBl IHR5cGU7IH07CgogIHN0cnVjdCBkZWZhdWx0X2RpZmZlcmVuY2VfdHlwZSB7CiAgICB0ZW1wbGF0 ZSA8Y2xhc3MgQmFzZSwgY2xhc3MgVHJhaXRzPgogICAgc3RydWN0IHNlbGVjdCB7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OmRldGFpbDo6aXRlcmF0b3JfdHJhaXRzPEJhc2U+OjpkaWZm ZXJlbmNlX3R5cGUgdHlwZTsKICAgIH07CiAgfTsKICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgZGVmYXVs dF9nZW5lcmF0b3I8ZGVmYXVsdF9kaWZmZXJlbmNlX3R5cGU+CiAgeyB0eXBlZGVmIGRlZmF1bHRf ZGlmZmVyZW5jZV90eXBlIHR5cGU7IH07CgogIHN0cnVjdCBkZWZhdWx0X2l0ZXJhdG9yX2NhdGVn b3J5IHsKICAgIHRlbXBsYXRlIDxjbGFzcyBCYXNlLCBjbGFzcyBUcmFpdHM+CiAgICBzdHJ1Y3Qg c2VsZWN0IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6ZGV0YWlsOjppdGVyYXRvcl90 cmFpdHM8QmFzZT46Oml0ZXJhdG9yX2NhdGVnb3J5IHR5cGU7CiAgICB9OwogIH07CiAgdGVtcGxh dGUgPD4gc3RydWN0IGRlZmF1bHRfZ2VuZXJhdG9yPGRlZmF1bHRfaXRlcmF0b3JfY2F0ZWdvcnk+ CiAgeyB0eXBlZGVmIGRlZmF1bHRfaXRlcmF0b3JfY2F0ZWdvcnkgdHlwZTsgfTsKCiAgc3RydWN0 IGRlZmF1bHRfcG9pbnRlciB7CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZSwgY2xhc3MgVHJhaXRz PgogICAgc3RydWN0IHNlbGVjdCB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVHJhaXRzOjp2YWx1 ZV90eXBlIFZhbHVlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGJvb3N0OjpkZXRhaWw6Om11bHRp X2FycmF5OjpkZXRhaWw6Oml0ZXJhdG9yX2RlZmF1bHRzPEJhc2UsVmFsdWU+Ojpwb2ludGVyCiAg ICAgICAgdHlwZTsKICAgIH07CiAgfTsKICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgZGVmYXVsdF9nZW5l cmF0b3I8ZGVmYXVsdF9wb2ludGVyPgogIHsgdHlwZWRlZiBkZWZhdWx0X3BvaW50ZXIgdHlwZTsg fTsKCiAgc3RydWN0IGRlZmF1bHRfcmVmZXJlbmNlIHsKICAgIHRlbXBsYXRlIDxjbGFzcyBCYXNl LCBjbGFzcyBUcmFpdHM+CiAgICBzdHJ1Y3Qgc2VsZWN0IHsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBUcmFpdHM6OnZhbHVlX3R5cGUgVmFsdWU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYm9vc3Q6 OmRldGFpbDo6bXVsdGlfYXJyYXk6OmRldGFpbDo6aXRlcmF0b3JfZGVmYXVsdHM8QmFzZSxWYWx1 ZT46OnJlZmVyZW5jZQogICAgICAgIHR5cGU7CiAgICB9OwogIH07CiAgdGVtcGxhdGUgPD4gc3Ry dWN0IGRlZmF1bHRfZ2VuZXJhdG9yPGRlZmF1bHRfcmVmZXJlbmNlPgogIHsgdHlwZWRlZiBkZWZh dWx0X3JlZmVyZW5jZSB0eXBlOyB9OwoKfQoKCgoKCnN0cnVjdCBuYW1lZF90ZW1wbGF0ZV9wYXJh bV9iYXNlIHsgfTsKCm5hbWVzcGFjZSBkZXRhaWwgewogIHN0cnVjdCB2YWx1ZV90eXBlX3RhZyB7 IH07CiAgc3RydWN0IHJlZmVyZW5jZV90YWcgeyB9OwogIHN0cnVjdCBwb2ludGVyX3RhZyB7IH07 CiAgc3RydWN0IGRpZmZlcmVuY2VfdHlwZV90YWcgeyB9OwogIHN0cnVjdCBpdGVyYXRvcl9jYXRl Z29yeV90YWcgeyB9OwoKCgogIHRlbXBsYXRlIDxjbGFzcyBBLCBjbGFzcyBCPgogIHN0cnVjdCBj b25zX3R5cGUgewogICAgdHlwZWRlZiBBIGZpcnN0X3R5cGU7CiAgICB0eXBlZGVmIEIgc2Vjb25k X3R5cGU7CiAgfTsKCn0KCnRlbXBsYXRlIDxjbGFzcyBWYWx1ZT4gc3RydWN0IHZhbHVlX3R5cGVf aXMgOiBwdWJsaWMgbmFtZWRfdGVtcGxhdGVfcGFyYW1fYmFzZQp7CiAgdHlwZWRlZiBkZXRhaWw6 OmNvbnNfdHlwZTxkZXRhaWw6OnZhbHVlX3R5cGVfdGFnLCBWYWx1ZT4gdHlwZTsKfTsKdGVtcGxh dGUgPGNsYXNzIFJlZmVyZW5jZT4gc3RydWN0IHJlZmVyZW5jZV9pcyA6IHB1YmxpYyBuYW1lZF90 ZW1wbGF0ZV9wYXJhbV9iYXNlCnsKICB0eXBlZGVmIGRldGFpbDo6Y29uc190eXBlPGRldGFpbDo6 cmVmZXJlbmNlX3RhZywgUmVmZXJlbmNlPiB0eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgUG9pbnRl cj4gc3RydWN0IHBvaW50ZXJfaXMgOiBwdWJsaWMgbmFtZWRfdGVtcGxhdGVfcGFyYW1fYmFzZQp7 CiAgdHlwZWRlZiBkZXRhaWw6OmNvbnNfdHlwZTxkZXRhaWw6OnBvaW50ZXJfdGFnLCBQb2ludGVy PiB0eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgRGlmZmVyZW5jZT4gc3RydWN0IGRpZmZlcmVuY2Vf dHlwZV9pcwogIDogcHVibGljIG5hbWVkX3RlbXBsYXRlX3BhcmFtX2Jhc2UKewogIHR5cGVkZWYg ZGV0YWlsOjpjb25zX3R5cGU8ZGV0YWlsOjpkaWZmZXJlbmNlX3R5cGVfdGFnLCBEaWZmZXJlbmNl PiB0eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3JDYXRlZ29yeT4gc3RydWN0IGl0ZXJh dG9yX2NhdGVnb3J5X2lzCiAgOiBwdWJsaWMgbmFtZWRfdGVtcGxhdGVfcGFyYW1fYmFzZQp7CiAg dHlwZWRlZiBkZXRhaWw6OmNvbnNfdHlwZTxkZXRhaWw6Oml0ZXJhdG9yX2NhdGVnb3J5X3RhZywg SXRlcmF0b3JDYXRlZ29yeT4gdHlwZTsKfTsKCm5hbWVzcGFjZSBkZXRhaWwgewoKICBzdHJ1Y3Qg ZW5kX29mX2xpc3QgeyB9OwojIDUyMiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v c3QvbXVsdGlfYXJyYXkvaXRlcmF0b3JfYWRhcHRvcnMuaHBwIiAzCiAgdGVtcGxhdGUgPGNsYXNz IEFzc29jTGlzdCwgY2xhc3MgS2V5PiBzdHJ1Y3QgZmluZF9wYXJhbTsKCiAgdGVtcGxhdGUgPGNs YXNzIEtleT4KICBzdHJ1Y3QgZmluZF9wYXJhbTxlbmRfb2ZfbGlzdCwgS2V5PiB7IHR5cGVkZWYg ZGVmYXVsdF9hcmd1bWVudCB0eXBlOyB9OwoKCiAgdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3Mg VmFsdWUsIGNsYXNzIFJlc3Q+CiAgc3RydWN0IGZpbmRfcGFyYW08ZGV0YWlsOjpjb25zX3R5cGU8 IGRldGFpbDo6Y29uc190eXBlPEtleSwgVmFsdWU+LCBSZXN0PiwgS2V5PiB7CiAgICB0eXBlZGVm IFZhbHVlIHR5cGU7CiAgfTsKCgogIHRlbXBsYXRlIDxjbGFzcyBLZXkxLCBjbGFzcyBWYWx1ZSwg Y2xhc3MgUmVzdCwgY2xhc3MgS2V5Mj4KICBzdHJ1Y3QgZmluZF9wYXJhbTxkZXRhaWw6OmNvbnNf dHlwZTwgZGV0YWlsOjpjb25zX3R5cGU8S2V5MSwgVmFsdWU+LCBSZXN0PiwgS2V5Mj4gewogICAg dHlwZWRlZiB0eXBlbmFtZSBmaW5kX3BhcmFtPFJlc3QsIEtleTI+Ojp0eXBlIHR5cGU7CiAgfTsK CgogIHN0cnVjdCBtYWtlX25hbWVkX2FyZyB7CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFz cyBWYWx1ZT4KICAgIHN0cnVjdCBzZWxlY3QgeyB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlOjp0eXBl IHR5cGU7IH07CiAgfTsKICBzdHJ1Y3QgbWFrZV9rZXlfdmFsdWUgewogICAgdGVtcGxhdGUgPGNs YXNzIEtleSwgY2xhc3MgVmFsdWU+CiAgICBzdHJ1Y3Qgc2VsZWN0IHsgdHlwZWRlZiBkZXRhaWw6 OmNvbnNfdHlwZTxLZXksIFZhbHVlPiB0eXBlOyB9OwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBW YWx1ZT4KICBzdHJ1Y3QgaXNfbmFtZWRfcGFyYW1ldGVyCiAgewogICAgICBlbnVtIHsgdmFsdWUg PSBpc19jb252ZXJ0aWJsZTxWYWx1ZSwgbmFtZWRfdGVtcGxhdGVfcGFyYW1fYmFzZT46OnZhbHVl IH07CiAgfTsKIyA1NjMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRp X2FycmF5L2l0ZXJhdG9yX2FkYXB0b3JzLmhwcCIgMwogIHRlbXBsYXRlIDxjbGFzcyBLZXksIGNs YXNzIFZhbHVlPgogIHN0cnVjdCBtYWtlX2FyZyB7CgoKCgoKCiAgICBlbnVtIHsgaXNfbmFtZWQg PSBpc19uYW1lZF9wYXJhbWV0ZXI8VmFsdWU+Ojp2YWx1ZSB9OwogICAgdHlwZWRlZiB0eXBlbmFt ZSBpZl90cnVlPChpc19uYW1lZCk+Ojp0ZW1wbGF0ZQogICAgICB0aGVuPG1ha2VfbmFtZWRfYXJn LCBtYWtlX2tleV92YWx1ZT46OnR5cGUgTWFrZTsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIE1ha2U6 OnRlbXBsYXRlIHNlbGVjdDxLZXksIFZhbHVlPjo6dHlwZSB0eXBlOwogIH07CgoKCiAgdGVtcGxh dGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19kZWZhdWx0IHsgdHlwZWRlZiB0eXBlX3RyYWl0czo6bm9f dHlwZSB0eXBlOyB9OwogIHRlbXBsYXRlIDw+IHN0cnVjdCBpc19kZWZhdWx0PGRlZmF1bHRfYXJn dW1lbnQ+CiAgeyB0eXBlZGVmIHR5cGVfdHJhaXRzOjp5ZXNfdHlwZSB0eXBlOyB9OwoKICBzdHJ1 Y3QgY2hvb3NlX2RlZmF1bHQgewogICAgdGVtcGxhdGUgPGNsYXNzIEFyZywgY2xhc3MgRGVmYXVs dEdlbiwgY2xhc3MgQmFzZSwgY2xhc3MgVHJhaXRzPgogICAgc3RydWN0IHNlbGVjdCB7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgZGVmYXVsdF9nZW5lcmF0b3I8RGVmYXVsdEdlbj46OnR5cGUgR2Vu OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbjo6dGVtcGxhdGUgc2VsZWN0PEJhc2UsVHJhaXRz Pjo6dHlwZSB0eXBlOwogICAgfTsKICB9OwogIHN0cnVjdCBjaG9vc2VfYXJnIHsKICAgIHRlbXBs YXRlIDxjbGFzcyBBcmcsIGNsYXNzIERlZmF1bHRHZW4sIGNsYXNzIEJhc2UsIGNsYXNzIFRyYWl0 cz4KICAgIHN0cnVjdCBzZWxlY3QgewogICAgICB0eXBlZGVmIEFyZyB0eXBlOwogICAgfTsKICB9 OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgVXNlRGVmYXVsdD4KICBzdHJ1Y3QgY2hvb3NlX2FyZ19vcl9k ZWZhdWx0IHsgdHlwZWRlZiBjaG9vc2VfYXJnIHR5cGU7IH07CiAgdGVtcGxhdGUgPD4gc3RydWN0 IGNob29zZV9hcmdfb3JfZGVmYXVsdDx0eXBlX3RyYWl0czo6eWVzX3R5cGU+IHsKICAgIHR5cGVk ZWYgY2hvb3NlX2RlZmF1bHQgdHlwZTsKICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgQXJnLCBjbGFz cyBEZWZhdWx0R2VuLCBjbGFzcyBCYXNlLCBjbGFzcyBUcmFpdHM+CiAgY2xhc3MgcmVzb2x2ZV9k ZWZhdWx0IHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgY2hvb3NlX2FyZ19vcl9kZWZhdWx0PHR5cGVu YW1lIGlzX2RlZmF1bHQ8QXJnPjo6dHlwZT46OnR5cGUKICAgICAgU2VsZWN0b3I7CiAgcHVibGlj OgogICAgdHlwZWRlZiB0eXBlbmFtZSBTZWxlY3RvcgogICAgICA6OnRlbXBsYXRlIHNlbGVjdDxB cmcsIERlZmF1bHRHZW4sIEJhc2UsIFRyYWl0cz46OnR5cGUgdHlwZTsKICB9OwoKICB0ZW1wbGF0 ZSA8Y2xhc3MgQmFzZSwgY2xhc3MgVmFsdWUsIGNsYXNzIFJlZmVyZW5jZSwgY2xhc3MgUG9pbnRl ciwKICAgICAgICAgICAgY2xhc3MgQ2F0ZWdvcnksIGNsYXNzIERpc3RhbmNlPgogIGNsYXNzIGl0 ZXJhdG9yX2FkYXB0b3JfdHJhaXRzX2dlbgogIHsKCgoKCgogICAgdHlwZWRlZiBkZXRhaWw6OmNv bnNfdHlwZTwgdHlwZW5hbWUgbWFrZV9hcmc8dmFsdWVfdHlwZV90YWcsIFZhbHVlPjo6dHlwZSwK ICAgICAgZGV0YWlsOjpjb25zX3R5cGU8dHlwZW5hbWUgbWFrZV9hcmc8cmVmZXJlbmNlX3RhZywg UmVmZXJlbmNlPjo6dHlwZSwKICAgICAgZGV0YWlsOjpjb25zX3R5cGU8dHlwZW5hbWUgbWFrZV9h cmc8cG9pbnRlcl90YWcsIFBvaW50ZXI+Ojp0eXBlLAogICAgICBkZXRhaWw6OmNvbnNfdHlwZTx0 eXBlbmFtZSBtYWtlX2FyZzxpdGVyYXRvcl9jYXRlZ29yeV90YWcsIENhdGVnb3J5Pjo6dHlwZSwK ICAgICAgZGV0YWlsOjpjb25zX3R5cGU8dHlwZW5hbWUgbWFrZV9hcmc8ZGlmZmVyZW5jZV90eXBl X3RhZywgRGlzdGFuY2U+Ojp0eXBlLAogICAgICAgICAgICAgICAgZW5kX29mX2xpc3Q+ID4gPiA+ ID4gQXJnTGlzdDsKCgogICAgdHlwZWRlZiB0eXBlbmFtZSBmaW5kX3BhcmFtPEFyZ0xpc3QsIHZh bHVlX3R5cGVfdGFnPjo6dHlwZSBWYWw7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGZpbmRfcGFyYW08 QXJnTGlzdCwgZGlmZmVyZW5jZV90eXBlX3RhZz46OnR5cGUgRGlmZjsKICAgIHR5cGVkZWYgdHlw ZW5hbWUgZmluZF9wYXJhbTxBcmdMaXN0LCBpdGVyYXRvcl9jYXRlZ29yeV90YWc+Ojp0eXBlIENh dDsKICAgIHR5cGVkZWYgdHlwZW5hbWUgZmluZF9wYXJhbTxBcmdMaXN0LCBwb2ludGVyX3RhZz46 OnR5cGUgUHRyOwogICAgdHlwZWRlZiB0eXBlbmFtZSBmaW5kX3BhcmFtPEFyZ0xpc3QsIHJlZmVy ZW5jZV90YWc+Ojp0eXBlIFJlZjsKCiAgICB0eXBlZGVmIGJvb3N0OjppdGVyYXRvcjxDYXRlZ29y eSwgVmFsdWUsIERpc3RhbmNlLCBQb2ludGVyLCBSZWZlcmVuY2U+CiAgICAgIFRyYWl0czA7CgoK ICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVzb2x2ZV9kZWZhdWx0PFZhbCwgZGVmYXVsdF92YWx1ZV90 eXBlLCBCYXNlLCBUcmFpdHMwPjo6dHlwZQogICAgICB2YWx1ZV90eXBlOwoKICAgIHR5cGVkZWYg dHlwZW5hbWUgcmVzb2x2ZV9kZWZhdWx0PERpZmYsIGRlZmF1bHRfZGlmZmVyZW5jZV90eXBlLCBC YXNlLAogICAgICBUcmFpdHMwPjo6dHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgICB0eXBlZGVmIHR5 cGVuYW1lIHJlc29sdmVfZGVmYXVsdDxDYXQsIGRlZmF1bHRfaXRlcmF0b3JfY2F0ZWdvcnksIEJh c2UsCiAgICAgIFRyYWl0czA+Ojp0eXBlIGl0ZXJhdG9yX2NhdGVnb3J5OwoKICAgIHR5cGVkZWYg Ym9vc3Q6Oml0ZXJhdG9yPGl0ZXJhdG9yX2NhdGVnb3J5LCB2YWx1ZV90eXBlLCBkaWZmZXJlbmNl X3R5cGUsCiAgICAgIFBvaW50ZXIsIFJlZmVyZW5jZT4gVHJhaXRzMTsKCgoKCiAgICB0eXBlZGVm IHR5cGVuYW1lIHJlc29sdmVfZGVmYXVsdDxQdHIsIGRlZmF1bHRfcG9pbnRlciwgQmFzZSwgVHJh aXRzMT46OnR5cGUKICAgICAgcG9pbnRlcjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVzb2x2ZV9k ZWZhdWx0PFJlZiwgZGVmYXVsdF9yZWZlcmVuY2UsIEJhc2UsIFRyYWl0czE+Ojp0eXBlCiAgICAg IHJlZmVyZW5jZTsKCiAgcHVibGljOgogICAgdHlwZWRlZiBib29zdDo6aXRlcmF0b3I8aXRlcmF0 b3JfY2F0ZWdvcnksCiAgICAgIHR5cGVuYW1lIHJlbW92ZV9jb25zdDx2YWx1ZV90eXBlPjo6dHlw ZSwKICAgICAgZGlmZmVyZW5jZV90eXBlLCBwb2ludGVyLCByZWZlcmVuY2U+IHR5cGU7CiAgfTsK CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2F0ZWdvcnksIGNsYXNzIFZhbHVlLCBjbGFzcyBEaWZmZXJl bmNlLCBjbGFzcyBQb2ludGVyLCBjbGFzcyBSZWZlcmVuY2U+CiAgc3RydWN0IHZhbGlkYXRvcgog IHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW5wdXRfb3Jfb3V0cHV0X2l0ZXIgPSAoYm9v c3Q6OmlzX2NvbnZlcnRpYmxlPENhdGVnb3J5KixzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZyo+Ojp2 YWx1ZSB8IGJvb3N0Ojppc19jb252ZXJ0aWJsZTxDYXRlZ29yeSosc3RkOjpvdXRwdXRfaXRlcmF0 b3JfdGFnKj46OnZhbHVlKTsKCgoKCgogICAgICB0eXBlZGVmIDo6Ym9vc3Q6OnN0YXRpY19hc3Nl cnRfdGVzdDwgc2l6ZW9mKDo6Ym9vc3Q6OlNUQVRJQ19BU1NFUlRJT05fRkFJTFVSRTwgKGJvb2wp KCBpc19pbnB1dF9vcl9vdXRwdXRfaXRlciApID4pPiBib29zdF9zdGF0aWNfYXNzZXJ0X3R5cGVk ZWZfNjc2OwoKCgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBmb3J3YXJkX2l0ZXJfd2l0aF9yZWFs X3JlZmVyZW5jZSA9ICgoIWJvb3N0Ojppc19jb252ZXJ0aWJsZTxDYXRlZ29yeSosc3RkOjpmb3J3 YXJkX2l0ZXJhdG9yX3RhZyo+Ojp2YWx1ZSkgfCBib29zdDo6aXNfc2FtZTxSZWZlcmVuY2UsVmFs dWUmPjo6dmFsdWUgfCBib29zdDo6aXNfc2FtZTxSZWZlcmVuY2UsdHlwZW5hbWUgYWRkX2NvbnN0 PFZhbHVlPjo6dHlwZSY+Ojp2YWx1ZSk7CgoKCgoKICAgICAgdHlwZWRlZiA6OmJvb3N0OjpzdGF0 aWNfYXNzZXJ0X3Rlc3Q8IHNpemVvZig6OmJvb3N0OjpTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU8 IChib29sKSggZm9yd2FyZF9pdGVyX3dpdGhfcmVhbF9yZWZlcmVuY2UgKSA+KT4gYm9vc3Rfc3Rh dGljX2Fzc2VydF90eXBlZGVmXzY4NjsKICB9Owp9CiMgNzI3ICIvaG9tZS9jb21wYmlvL2Q5NS1i bGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS9pdGVyYXRvcl9hZGFwdG9ycy5ocHAiIDMKdGVt cGxhdGUgPGNsYXNzIEJhc2UsIGNsYXNzIFBvbGljaWVzLAogICAgY2xhc3MgVmFsdWUgPSA6OmJv b3N0OjpkZXRhaWw6Om11bHRpX2FycmF5OjpkZXRhaWw6OmRlZmF1bHRfYXJndW1lbnQsCiAgICBj bGFzcyBSZWZlcmVuY2UgPSA6OmJvb3N0OjpkZXRhaWw6Om11bHRpX2FycmF5OjpkZXRhaWw6OmRl ZmF1bHRfYXJndW1lbnQsCiAgICBjbGFzcyBQb2ludGVyID0gOjpib29zdDo6ZGV0YWlsOjptdWx0 aV9hcnJheTo6ZGV0YWlsOjpkZWZhdWx0X2FyZ3VtZW50LAogICAgY2xhc3MgQ2F0ZWdvcnkgPSA6 OmJvb3N0OjpkZXRhaWw6Om11bHRpX2FycmF5OjpkZXRhaWw6OmRlZmF1bHRfYXJndW1lbnQsCiAg ICBjbGFzcyBEaXN0YW5jZSA9IDo6Ym9vc3Q6OmRldGFpbDo6bXVsdGlfYXJyYXk6OmRldGFpbDo6 ZGVmYXVsdF9hcmd1bWVudAogICAgICAgICA+CnN0cnVjdCBpdGVyYXRvcl9hZGFwdG9yIDoKCgoK CgoKICAgIGRldGFpbDo6aXRlcmF0b3JfYWRhcHRvcl90cmFpdHNfZ2VuPEJhc2UsVmFsdWUsUmVm ZXJlbmNlLFBvaW50ZXIsQ2F0ZWdvcnksRGlzdGFuY2U+Ojp0eXBlCgp7CiAgICB0eXBlZGVmIGl0 ZXJhdG9yX2FkYXB0b3I8QmFzZSxQb2xpY2llcyxWYWx1ZSxSZWZlcmVuY2UsUG9pbnRlcixDYXRl Z29yeSxEaXN0YW5jZT4gc2VsZjsKIHB1YmxpYzoKICAgIHR5cGVkZWYgZGV0YWlsOjppdGVyYXRv cl9hZGFwdG9yX3RyYWl0c19nZW48QmFzZSxWYWx1ZSxSZWZlcmVuY2UsUG9pbnRlcixDYXRlZ29y eSxEaXN0YW5jZT4gVHJhaXRzR2VuOwogICAgdHlwZWRlZiB0eXBlbmFtZSBUcmFpdHNHZW46OnR5 cGUgVHJhaXRzOwoKICAgIHR5cGVkZWYgdHlwZW5hbWUgVHJhaXRzOjpkaWZmZXJlbmNlX3R5cGUg ZGlmZmVyZW5jZV90eXBlOwogICAgdHlwZWRlZiB0eXBlbmFtZSBUcmFpdHM6OnZhbHVlX3R5cGUg dmFsdWVfdHlwZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgVHJhaXRzOjpwb2ludGVyIHBvaW50ZXI7 CiAgICB0eXBlZGVmIHR5cGVuYW1lIFRyYWl0czo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIHR5 cGVkZWYgdHlwZW5hbWUgVHJhaXRzOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29y eTsKCiAgICB0eXBlZGVmIEJhc2UgYmFzZV90eXBlOwogICAgdHlwZWRlZiBQb2xpY2llcyBwb2xp Y2llc190eXBlOwoKIHByaXZhdGU6CiAgICB0eXBlZGVmIGRldGFpbDo6dmFsaWRhdG9yPAogICAg ICAgIGl0ZXJhdG9yX2NhdGVnb3J5LHZhbHVlX3R5cGUsZGlmZmVyZW5jZV90eXBlLHBvaW50ZXIs cmVmZXJlbmNlCiAgICAgICAgPiBjb25jZXB0X2NoZWNrOwoKIHB1YmxpYzoKICAgIGl0ZXJhdG9y X2FkYXB0b3IoKQogICAgewogICAgfQoKICAgIGV4cGxpY2l0CiAgICBpdGVyYXRvcl9hZGFwdG9y KGNvbnN0IEJhc2UmIGl0LCBjb25zdCBQb2xpY2llcyYgcCA9IFBvbGljaWVzKCkpCiAgICAgICAg OiBtX2l0ZXJfcChpdCwgcCkgewogICAgICAgIHBvbGljaWVzKCkuaW5pdGlhbGl6ZShiYXNlKCkp OwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBJdGVyMiwgY2xhc3MgVmFsdWUyLCBjbGFzcyBQ b2ludGVyMiwgY2xhc3MgUmVmZXJlbmNlMj4KICAgIGl0ZXJhdG9yX2FkYXB0b3IgKAogICAgICAg IGNvbnN0IGl0ZXJhdG9yX2FkYXB0b3I8SXRlcjIsUG9saWNpZXMsVmFsdWUyLFJlZmVyZW5jZTIs UG9pbnRlcjIsQ2F0ZWdvcnksRGlzdGFuY2U+JiBzcmMpCiAgICAgICAgICAgIDogbV9pdGVyX3Ao c3JjLmJhc2UoKSwgc3JjLnBvbGljaWVzKCkpCiAgICB7CiAgICAgICAgcG9saWNpZXMoKS5pbml0 aWFsaXplKGJhc2UoKSk7CiAgICB9CiMgNzkwICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk ZS9ib29zdC9tdWx0aV9hcnJheS9pdGVyYXRvcl9hZGFwdG9ycy5ocHAiIDMKICAgIHJlZmVyZW5j ZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICAgICAgIHJldHVybiBwb2xpY2llcygpLmRlcmVmZXJl bmNlKCp0aGlzKTsKICAgIH0KCgoKCgoKICAgIHR5cGVuYW1lIGJvb3N0OjpkZXRhaWw6Om11bHRp X2FycmF5OjpkZXRhaWw6Om9wZXJhdG9yX2Fycm93X3Jlc3VsdF9nZW5lcmF0b3I8dmFsdWVfdHlw ZSxyZWZlcmVuY2UscG9pbnRlcj46OnR5cGUKICAgIG9wZXJhdG9yLT4oKSBjb25zdAogICAgICAg IHsgcmV0dXJuIGRldGFpbDo6b3BlcmF0b3JfYXJyb3coKnRoaXMsIGl0ZXJhdG9yX2NhdGVnb3J5 KCkpOyB9CgoKCgoKICAgIHZhbHVlX3R5cGUgb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgbikg Y29uc3QKICAgICAgICB7IHJldHVybiAqKCp0aGlzICsgbik7IH0KCiAgICBzZWxmJiBvcGVyYXRv cisrKCkgewoKICAgICAgICBwb2xpY2llcygpLmluY3JlbWVudCgqdGhpcyk7CgoKCgoKICAgICAg ICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgc2VsZiBvcGVyYXRvcisrKGludCkgeyBzZWxmIHRt cCgqdGhpcyk7ICsrKnRoaXM7IHJldHVybiB0bXA7IH0KCiAgICBzZWxmJiBvcGVyYXRvci0tKCkg ewoKICAgICAgICBwb2xpY2llcygpLmRlY3JlbWVudCgqdGhpcyk7CgoKCiAgICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICAgIHNlbGYgb3BlcmF0b3ItLShpbnQpIHsgc2VsZiB0bXAoKnRoaXMp OyAtLSp0aGlzOyByZXR1cm4gdG1wOyB9CgogICAgc2VsZiYgb3BlcmF0b3IrPShkaWZmZXJlbmNl X3R5cGUgbikgewogICAgICAgIHBvbGljaWVzKCkuYWR2YW5jZSgqdGhpcywgbik7CiAgICAgICAg cmV0dXJuICp0aGlzOwogICAgfQoKICAgIHNlbGYmIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBl IG4pIHsKICAgICAgICBwb2xpY2llcygpLmFkdmFuY2UoKnRoaXMsIC1uKTsKICAgICAgICByZXR1 cm4gKnRoaXM7CiAgICB9CgogICAgYmFzZV90eXBlIGNvbnN0JiBiYXNlKCkgY29uc3QgeyByZXR1 cm4gbV9pdGVyX3AuZmlyc3QoKTsgfQoKCgogICAgc2VsZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90 eXBlIHgpIGNvbnN0CiAgICAgICAgeyBzZWxmIHJlc3VsdCgqdGhpcyk7IHJldHVybiByZXN1bHQg LT0geDsgfQpwcml2YXRlOgogICAgY29tcHJlc3NlZF9wYWlyPEJhc2UsUG9saWNpZXM+IG1faXRl cl9wOwoKcHVibGljOgogICAgYmFzZV90eXBlJiBiYXNlKCkgeyByZXR1cm4gbV9pdGVyX3AuZmly c3QoKTsgfQogICAgUG9saWNpZXMmIHBvbGljaWVzKCkgeyByZXR1cm4gbV9pdGVyX3Auc2Vjb25k KCk7IH0KICAgIGNvbnN0IFBvbGljaWVzJiBwb2xpY2llcygpIGNvbnN0IHsgcmV0dXJuIG1faXRl cl9wLnNlY29uZCgpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQmFzZSwgY2xhc3MgUG9saWNpZXMs IGNsYXNzIFZhbHVlLCBjbGFzcyBSZWZlcmVuY2UsIGNsYXNzIFBvaW50ZXIsCiAgICBjbGFzcyBD YXRlZ29yeSwgY2xhc3MgRGlzdGFuY2UxLCBjbGFzcyBEaXN0YW5jZTI+Cml0ZXJhdG9yX2FkYXB0 b3I8QmFzZSxQb2xpY2llcyxWYWx1ZSxSZWZlcmVuY2UsUG9pbnRlcixDYXRlZ29yeSxEaXN0YW5j ZTE+Cm9wZXJhdG9yKygKICAgIGl0ZXJhdG9yX2FkYXB0b3I8QmFzZSxQb2xpY2llcyxWYWx1ZSxS ZWZlcmVuY2UsUG9pbnRlcixDYXRlZ29yeSxEaXN0YW5jZTE+IHAsCiAgICBEaXN0YW5jZTIgeCkK ewogICAgcmV0dXJuIHAgKz0geDsKfQoKdGVtcGxhdGUgPGNsYXNzIEJhc2UsIGNsYXNzIFBvbGlj aWVzLCBjbGFzcyBWYWx1ZSwgY2xhc3MgUmVmZXJlbmNlLCBjbGFzcyBQb2ludGVyLAogICAgY2xh c3MgQ2F0ZWdvcnksIGNsYXNzIERpc3RhbmNlMSwgY2xhc3MgRGlzdGFuY2UyPgppdGVyYXRvcl9h ZGFwdG9yPEJhc2UsUG9saWNpZXMsVmFsdWUsUmVmZXJlbmNlLFBvaW50ZXIsQ2F0ZWdvcnksRGlz dGFuY2UxPgpvcGVyYXRvcisoCiAgICBEaXN0YW5jZTIgeCwKICAgIGl0ZXJhdG9yX2FkYXB0b3I8 QmFzZSxQb2xpY2llcyxWYWx1ZSxSZWZlcmVuY2UsUG9pbnRlcixDYXRlZ29yeSxEaXN0YW5jZTE+ IHApCnsKICAgIHJldHVybiBwICs9IHg7Cn0KCnRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcjEsIGNs YXNzIEl0ZXJhdG9yMiwgY2xhc3MgUG9saWNpZXMsIGNsYXNzIFZhbHVlMSwgY2xhc3MgVmFsdWUy LAogICAgY2xhc3MgUmVmZXJlbmNlMSwgY2xhc3MgUmVmZXJlbmNlMiwgY2xhc3MgUG9pbnRlcjEs IGNsYXNzIFBvaW50ZXIyLCBjbGFzcyBDYXRlZ29yeSwKICAgIGNsYXNzIERpc3RhbmNlPgp0eXBl bmFtZSBpdGVyYXRvcl9hZGFwdG9yPEl0ZXJhdG9yMSxQb2xpY2llcyxWYWx1ZTEsUmVmZXJlbmNl MSxQb2ludGVyMSxDYXRlZ29yeSxEaXN0YW5jZT46OmRpZmZlcmVuY2VfdHlwZQpvcGVyYXRvci0o CiAgICBjb25zdCBpdGVyYXRvcl9hZGFwdG9yPEl0ZXJhdG9yMSxQb2xpY2llcyxWYWx1ZTEsUmVm ZXJlbmNlMSxQb2ludGVyMSxDYXRlZ29yeSxEaXN0YW5jZT4mIHgsCiAgICBjb25zdCBpdGVyYXRv cl9hZGFwdG9yPEl0ZXJhdG9yMixQb2xpY2llcyxWYWx1ZTIsUmVmZXJlbmNlMixQb2ludGVyMixD YXRlZ29yeSxEaXN0YW5jZT4mIHkpCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX2FkYXB0 b3I8SXRlcmF0b3IxLFBvbGljaWVzLFZhbHVlMSxSZWZlcmVuY2UxLAogICAgUG9pbnRlcjEsQ2F0 ZWdvcnksRGlzdGFuY2U+OjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHJldHVy biB4LnBvbGljaWVzKCkuZGlzdGFuY2UoeSwgeCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0 b3IxLCBjbGFzcyBJdGVyYXRvcjIsIGNsYXNzIFBvbGljaWVzLCBjbGFzcyBWYWx1ZTEsIGNsYXNz IFZhbHVlMiwKICAgIGNsYXNzIFJlZmVyZW5jZTEsIGNsYXNzIFJlZmVyZW5jZTIsIGNsYXNzIFBv aW50ZXIxLCBjbGFzcyBQb2ludGVyMiwKICAgIGNsYXNzIENhdGVnb3J5LCBjbGFzcyBEaXN0YW5j ZT4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PSgKICAgIGNvbnN0IGl0ZXJhdG9yX2FkYXB0b3I8SXRl cmF0b3IxLFBvbGljaWVzLFZhbHVlMSxSZWZlcmVuY2UxLFBvaW50ZXIxLENhdGVnb3J5LERpc3Rh bmNlPiYgeCwKICAgIGNvbnN0IGl0ZXJhdG9yX2FkYXB0b3I8SXRlcmF0b3IyLFBvbGljaWVzLFZh bHVlMixSZWZlcmVuY2UyLFBvaW50ZXIyLENhdGVnb3J5LERpc3RhbmNlPiYgeSkKewogICAgcmV0 dXJuIHgucG9saWNpZXMoKS5lcXVhbCh4LCB5KTsKfQoKdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9y MSwgY2xhc3MgSXRlcmF0b3IyLCBjbGFzcyBQb2xpY2llcywgY2xhc3MgVmFsdWUxLCBjbGFzcyBW YWx1ZTIsCiAgICBjbGFzcyBSZWZlcmVuY2UxLCBjbGFzcyBSZWZlcmVuY2UyLCBjbGFzcyBQb2lu dGVyMSwgY2xhc3MgUG9pbnRlcjIsCiAgICBjbGFzcyBDYXRlZ29yeSwgY2xhc3MgRGlzdGFuY2U+ CmlubGluZSBib29sCm9wZXJhdG9yPCgKICAgIGNvbnN0IGl0ZXJhdG9yX2FkYXB0b3I8SXRlcmF0 b3IxLFBvbGljaWVzLFZhbHVlMSxSZWZlcmVuY2UxLFBvaW50ZXIxLENhdGVnb3J5LERpc3RhbmNl PiYgeCwKICAgIGNvbnN0IGl0ZXJhdG9yX2FkYXB0b3I8SXRlcmF0b3IyLFBvbGljaWVzLFZhbHVl MixSZWZlcmVuY2UyLFBvaW50ZXIyLENhdGVnb3J5LERpc3RhbmNlPiYgeSkKewogICAgcmV0dXJu IHgucG9saWNpZXMoKS5kaXN0YW5jZSh5LCB4KSA8IDA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBJdGVy YXRvcjEsIGNsYXNzIEl0ZXJhdG9yMiwgY2xhc3MgUG9saWNpZXMsIGNsYXNzIFZhbHVlMSwgY2xh c3MgVmFsdWUyLAogICAgY2xhc3MgUmVmZXJlbmNlMSwgY2xhc3MgUmVmZXJlbmNlMiwgY2xhc3Mg UG9pbnRlcjEsIGNsYXNzIFBvaW50ZXIyLAogICAgY2xhc3MgQ2F0ZWdvcnksIGNsYXNzIERpc3Rh bmNlPgppbmxpbmUgYm9vbApvcGVyYXRvcj4oCiAgICBjb25zdCBpdGVyYXRvcl9hZGFwdG9yPEl0 ZXJhdG9yMSxQb2xpY2llcyxWYWx1ZTEsUmVmZXJlbmNlMSxQb2ludGVyMSxDYXRlZ29yeSxEaXN0 YW5jZT4mIHgsCiAgICBjb25zdCBpdGVyYXRvcl9hZGFwdG9yPEl0ZXJhdG9yMixQb2xpY2llcyxW YWx1ZTIsUmVmZXJlbmNlMixQb2ludGVyMixDYXRlZ29yeSxEaXN0YW5jZT4mIHkpCnsKICAgIHJl dHVybiB4LnBvbGljaWVzKCkuZGlzdGFuY2UoeSwgeCkgPiAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg SXRlcmF0b3IxLCBjbGFzcyBJdGVyYXRvcjIsIGNsYXNzIFBvbGljaWVzLCBjbGFzcyBWYWx1ZTEs IGNsYXNzIFZhbHVlMiwKICAgIGNsYXNzIFJlZmVyZW5jZTEsIGNsYXNzIFJlZmVyZW5jZTIsIGNs YXNzIFBvaW50ZXIxLCBjbGFzcyBQb2ludGVyMiwKICAgIGNsYXNzIENhdGVnb3J5LCBjbGFzcyBE aXN0YW5jZT4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PSgKICAgIGNvbnN0IGl0ZXJhdG9yX2FkYXB0 b3I8SXRlcmF0b3IxLFBvbGljaWVzLFZhbHVlMSxSZWZlcmVuY2UxLFBvaW50ZXIxLENhdGVnb3J5 LERpc3RhbmNlPiYgeCwKICAgIGNvbnN0IGl0ZXJhdG9yX2FkYXB0b3I8SXRlcmF0b3IyLFBvbGlj aWVzLFZhbHVlMixSZWZlcmVuY2UyLFBvaW50ZXIyLENhdGVnb3J5LERpc3RhbmNlPiYgeSkKewog ICAgcmV0dXJuIHgucG9saWNpZXMoKS5kaXN0YW5jZSh5LCB4KSA+PSAwOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgSXRlcmF0b3IxLCBjbGFzcyBJdGVyYXRvcjIsIGNsYXNzIFBvbGljaWVzLCBjbGFzcyBW YWx1ZTEsIGNsYXNzIFZhbHVlMiwKICAgIGNsYXNzIFJlZmVyZW5jZTEsIGNsYXNzIFJlZmVyZW5j ZTIsIGNsYXNzIFBvaW50ZXIxLCBjbGFzcyBQb2ludGVyMiwKICAgIGNsYXNzIENhdGVnb3J5LCBj bGFzcyBEaXN0YW5jZT4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PSgKICAgIGNvbnN0IGl0ZXJhdG9y X2FkYXB0b3I8SXRlcmF0b3IxLFBvbGljaWVzLFZhbHVlMSxSZWZlcmVuY2UxLFBvaW50ZXIxLENh dGVnb3J5LERpc3RhbmNlPiYgeCwKICAgIGNvbnN0IGl0ZXJhdG9yX2FkYXB0b3I8SXRlcmF0b3Iy LFBvbGljaWVzLFZhbHVlMixSZWZlcmVuY2UyLFBvaW50ZXIyLENhdGVnb3J5LERpc3RhbmNlPiYg eSkKewogICAgcmV0dXJuIHgucG9saWNpZXMoKS5kaXN0YW5jZSh5LCB4KSA8PSAwOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgSXRlcmF0b3IxLCBjbGFzcyBJdGVyYXRvcjIsIGNsYXNzIFBvbGljaWVzLCBj bGFzcyBWYWx1ZTEsIGNsYXNzIFZhbHVlMiwKICAgIGNsYXNzIFJlZmVyZW5jZTEsIGNsYXNzIFJl ZmVyZW5jZTIsIGNsYXNzIFBvaW50ZXIxLCBjbGFzcyBQb2ludGVyMiwKICAgIGNsYXNzIENhdGVn b3J5LCBjbGFzcyBEaXN0YW5jZT4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPSgKICAgIGNvbnN0IGl0 ZXJhdG9yX2FkYXB0b3I8SXRlcmF0b3IxLFBvbGljaWVzLFZhbHVlMSxSZWZlcmVuY2UxLFBvaW50 ZXIxLENhdGVnb3J5LERpc3RhbmNlPiYgeCwKICAgIGNvbnN0IGl0ZXJhdG9yX2FkYXB0b3I8SXRl cmF0b3IyLFBvbGljaWVzLFZhbHVlMixSZWZlcmVuY2UyLFBvaW50ZXIyLENhdGVnb3J5LERpc3Rh bmNlPiYgeSkKewogICAgcmV0dXJuICF4LnBvbGljaWVzKCkuZXF1YWwoeCwgeSk7Cn0KCgoKfQp9 Cn0KIyAyOSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkv YmFzZS5ocHAiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8z LjIvY2Fzc2VydCIgMSAzCiMgNDcgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysv My4yL2Nhc3NlcnQiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMKIyA2NSAiL3Vz ci9pbmNsdWRlL2Fzc2VydC5oIiAzCmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0 X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNo YXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f XykpOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9f Y29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3Jl dHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRp b24sIGNvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfQojIDQ5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4y L2luY2x1ZGUvYysrLzMuMi9jYXNzZXJ0IiAyIDMKIyAzMiAiL2hvbWUvY29tcGJpby9kOTUtYmxp L2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvYmFzZS5ocHAiIDIgMwoKCgpuYW1lc3BhY2UgYm9v c3QgewoKCgoKCnRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE51bURpbXMsCiAgdHlw ZW5hbWUgQWxsb2NhdG9yID0gc3RkOjphbGxvY2F0b3I8VD4gPgpjbGFzcyBtdWx0aV9hcnJheTsK CgpuYW1lc3BhY2UgbXVsdGlfYXJyYXlfdHlwZXMgewogIHR5cGVkZWYgYm9vc3Q6OmRldGFpbDo6 bXVsdGlfYXJyYXk6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiBzdGQ6OnB0cmRpZmZf dCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBib29zdDo6ZGV0YWlsOjptdWx0aV9hcnJheTo6 aW5kZXggaW5kZXg7CiAgdHlwZWRlZiBkZXRhaWw6Om11bHRpX2FycmF5OjppbmRleF9yYW5nZTxp bmRleCxzaXplX3R5cGU+IGluZGV4X3JhbmdlOwogIHR5cGVkZWYgZGV0YWlsOjptdWx0aV9hcnJh eTo6ZXh0ZW50X3JhbmdlPGluZGV4LHNpemVfdHlwZT4gZXh0ZW50X3JhbmdlOwogIHR5cGVkZWYg ZGV0YWlsOjptdWx0aV9hcnJheTo6aW5kZXhfZ2VuPDAsMD4gaW5kZXhfZ2VuOwogIHR5cGVkZWYg ZGV0YWlsOjptdWx0aV9hcnJheTo6ZXh0ZW50X2dlbjwwPiBleHRlbnRfZ2VuOwp9CiMgNjQgIi9o b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L2Jhc2UuaHBwIiAz Cm5hbWVzcGFjZSB7CiAgbXVsdGlfYXJyYXlfdHlwZXM6OmV4dGVudF9nZW4gZXh0ZW50czsKICBt dWx0aV9hcnJheV90eXBlczo6aW5kZXhfZ2VuIGluZGljZXM7Cn0KCgpuYW1lc3BhY2UgZGV0YWls IHsKbmFtZXNwYWNlIG11bHRpX2FycmF5IHsKCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNp emVfdCBOdW1EaW1zPgpjbGFzcyBzdWJfYXJyYXk7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3Rk OjpzaXplX3QgTnVtRGltcywgdHlwZW5hbWUgVFB0ciA9IGNvbnN0IFQqPgpjbGFzcyBjb25zdF9z dWJfYXJyYXk7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTnVtRGltcywgdHlw ZW5hbWUgdmFsdWVfdHlwZSwKICB0eXBlbmFtZSByZWZlcmVuY2VfdHlwZSwgdHlwZW5hbWUgdGFn LCB0eXBlbmFtZSBkaWZmZXJlbmNlX3R5cGU+CnN0cnVjdCBpdGVyYXRvcl9nZW5lcmF0b3I7Cgp0 ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTnVtRGltcywgdHlwZW5hbWUgdmFsdWVf dHlwZSwKICB0eXBlbmFtZSByZWZlcmVuY2VfdHlwZSwgdHlwZW5hbWUgdGFnLCB0eXBlbmFtZSBk aWZmZXJlbmNlX3R5cGU+CnN0cnVjdCBjb25zdF9pdGVyYXRvcl9nZW5lcmF0b3I7Cgp0ZW1wbGF0 ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTnVtRGltcywgdHlwZW5hbWUgdmFsdWVfdHlwZSwK ICB0eXBlbmFtZSByZWZlcmVuY2VfdHlwZSwgdHlwZW5hbWUgdGFnLCB0eXBlbmFtZSBkaWZmZXJl bmNlX3R5cGU+CnN0cnVjdCByZXZlcnNlX2l0ZXJhdG9yX2dlbmVyYXRvcjsKCnRlbXBsYXRlIDx0 eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOdW1EaW1zLCB0eXBlbmFtZSB2YWx1ZV90eXBlLAogIHR5 cGVuYW1lIHJlZmVyZW5jZV90eXBlLCB0eXBlbmFtZSB0YWcsIHR5cGVuYW1lIGRpZmZlcmVuY2Vf dHlwZT4Kc3RydWN0IGNvbnN0X3JldmVyc2VfaXRlcmF0b3JfZ2VuZXJhdG9yOwoKdGVtcGxhdGUg PHR5cGVuYW1lIFQsdHlwZW5hbWUgVFB0cj4Kc3RydWN0IGl0ZXJhdG9yX2Jhc2U7Cgp0ZW1wbGF0 ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTnVtRGltcz4Kc3RydWN0IGl0ZXJhdG9yX3BvbGlj aWVzOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE51bURpbXMsIHR5cGVuYW1l IFRQdHIgPSBjb25zdCBUKj4KY2xhc3MgY29uc3RfbXVsdGlfYXJyYXlfdmlldzsKCnRlbXBsYXRl IDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOdW1EaW1zPgpjbGFzcyBtdWx0aV9hcnJheV92aWV3 OwoKCgoKCmNsYXNzIG11bHRpX2FycmF5X2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiBtdWx0aV9h cnJheV90eXBlczo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBlZGVmIG11bHRpX2FycmF5X3R5 cGVzOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgbXVsdGlfYXJy YXlfdHlwZXM6OmluZGV4IGluZGV4OwogIHR5cGVkZWYgbXVsdGlfYXJyYXlfdHlwZXM6OmluZGV4 X3JhbmdlIGluZGV4X3JhbmdlOwogIHR5cGVkZWYgbXVsdGlfYXJyYXlfdHlwZXM6OmV4dGVudF9y YW5nZSBleHRlbnRfcmFuZ2U7CiAgdHlwZWRlZiBtdWx0aV9hcnJheV90eXBlczo6aW5kZXhfZ2Vu IGluZGV4X2dlbjsKICB0eXBlZGVmIG11bHRpX2FycmF5X3R5cGVzOjpleHRlbnRfZ2VuIGV4dGVu dF9nZW47Cn07CgoKCgoKCnRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE51bURpbXM+ CmNsYXNzIHZhbHVlX2FjY2Vzc29yX24gOiBwdWJsaWMgbXVsdGlfYXJyYXlfYmFzZSB7CiAgdHlw ZWRlZiBtdWx0aV9hcnJheV9iYXNlIHN1cGVyX3R5cGU7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVu YW1lIHN1cGVyX3R5cGU6OmluZGV4IGluZGV4OwoKCgoKICB0eXBlZGVmIFQgZWxlbWVudDsKICB0 eXBlZGVmIGJvb3N0OjptdWx0aV9hcnJheTxULE51bURpbXMtMT4gdmFsdWVfdHlwZTsKICB0eXBl ZGVmIHN1Yl9hcnJheTxULE51bURpbXMtMT4gcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3Rfc3Vi X2FycmF5PFQsTnVtRGltcy0xPiBjb25zdF9yZWZlcmVuY2U7Cgpwcm90ZWN0ZWQ6CgogIHRlbXBs YXRlIDx0eXBlbmFtZSBSZWZlcmVuY2UsIHR5cGVuYW1lIFRQdHI+CiAgUmVmZXJlbmNlIGFjY2Vz cyhib29zdDo6dHlwZTxSZWZlcmVuY2U+LGluZGV4IGlkeCxUUHRyIGJhc2UsCiAgICAgICAgICAg ICAgICAgICBjb25zdCBzaXplX3R5cGUqIGV4dGVudHMsCiAgICAgICAgICAgICAgICAgICBjb25z dCBpbmRleCogc3RyaWRlcywKICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4KiBpbmRleF9i YXNlKSBjb25zdCB7CgoKICAgIFRQdHIgbmV3YmFzZSA9IGJhc2UgKyBpZHggKiBzdHJpZGVzWzBd OwogICAgcmV0dXJuIFJlZmVyZW5jZShuZXdiYXNlLGV4dGVudHMrMSxzdHJpZGVzKzEsaW5kZXhf YmFzZSsxKTsKCiAgfQoKICB2YWx1ZV9hY2Nlc3Nvcl9uKCkgeyB9CiAgfnZhbHVlX2FjY2Vzc29y X24oKSB7IH0KfTsKIyAxNjYgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211 bHRpX2FycmF5L2Jhc2UuaHBwIiAzCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CmNsYXNzIHZhbHVlX2Fj Y2Vzc29yX29uZSA6IHB1YmxpYyBtdWx0aV9hcnJheV9iYXNlIHsKICB0eXBlZGVmIG11bHRpX2Fy cmF5X2Jhc2Ugc3VwZXJfdHlwZTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlw ZTo6aW5kZXggaW5kZXg7CgoKCiAgdHlwZWRlZiBUIGVsZW1lbnQ7CiAgdHlwZWRlZiBUIHZhbHVl X3R5cGU7CiAgdHlwZWRlZiBUJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBUIGNvbnN0JiBjb25zdF9y ZWZlcmVuY2U7Cgpwcm90ZWN0ZWQ6CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBSZWZlcmVuY2UsIHR5 cGVuYW1lIFRQdHI+CiAgUmVmZXJlbmNlIGFjY2Vzcyhib29zdDo6dHlwZTxSZWZlcmVuY2U+LGlu ZGV4IGlkeCxUUHRyIGJhc2UsCiAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3R5cGUqLAog ICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXgqIHN0cmlkZXMsCiAgICAgICAgICAgICAgICAg ICBjb25zdCBpbmRleCopIGNvbnN0IHsKICAgIHJldHVybiAqKGJhc2UgKyBpZHggKiBzdHJpZGVz WzBdKTsKICB9CgogIHZhbHVlX2FjY2Vzc29yX29uZSgpIHsgfQogIH52YWx1ZV9hY2Nlc3Nvcl9v bmUoKSB7IH0KfTsKCgoKCgoKc3RydWN0IGNob29zZV92YWx1ZV9hY2Nlc3Nvcl9uIHsKICB0ZW1w bGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTnVtRGltcz4KICBzdHJ1Y3QgYmluZCB7CiAg ICB0eXBlZGVmIHZhbHVlX2FjY2Vzc29yX248VCxOdW1EaW1zPiB0eXBlOwogIH07Cn07CgpzdHJ1 Y3QgY2hvb3NlX3ZhbHVlX2FjY2Vzc29yX29uZSB7CiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0 ZDo6c2l6ZV90IE51bURpbXM+CiAgc3RydWN0IGJpbmQgewogICAgdHlwZWRlZiB2YWx1ZV9hY2Nl c3Nvcl9vbmU8VD4gdHlwZTsKICB9Owp9OwoKCnRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOdW1EaW1z PgpzdHJ1Y3QgdmFsdWVfYWNjZXNzb3JfZ2VuX2hlbHBlciB7CiAgdHlwZWRlZiBjaG9vc2VfdmFs dWVfYWNjZXNzb3JfbiBjaG9pY2U7Cn07Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgdmFsdWVfYWNjZXNz b3JfZ2VuX2hlbHBlcjwxPiB7CiAgdHlwZWRlZiBjaG9vc2VfdmFsdWVfYWNjZXNzb3Jfb25lIGNo b2ljZTsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOdW1EaW1zPgpzdHJ1 Y3QgdmFsdWVfYWNjZXNzb3JfZ2VuZXJhdG9yIHsKcHJpdmF0ZToKICB0eXBlZGVmIHR5cGVuYW1l IHZhbHVlX2FjY2Vzc29yX2dlbl9oZWxwZXI8TnVtRGltcz46OmNob2ljZSBDaG9pY2U7CnB1Ymxp YzoKICB0eXBlZGVmIHR5cGVuYW1lIENob2ljZTo6dGVtcGxhdGUgYmluZDxULE51bURpbXM+Ojp0 eXBlIHR5cGU7Cn07CiMgMjM5ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9t dWx0aV9hcnJheS9iYXNlLmhwcCIgMwp0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTnVtRGltcz4Kc3Ry dWN0IGl0ZXJhdG9yX3RhZ19zZWxlY3RvciB7CiAgdHlwZWRlZiBzdGQ6OmlucHV0X2l0ZXJhdG9y X3RhZyB0eXBlOwp9OwoKdGVtcGxhdGUgPD4Kc3RydWN0IGl0ZXJhdG9yX3RhZ19zZWxlY3Rvcjwx PiB7CiAgdHlwZWRlZiBzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIHR5cGU7Cn07CgoK CgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE51bURpbXM+CmNsYXNzIG11bHRp X2FycmF5X2ltcGxfYmFzZSA6CiAgcHVibGljIHZhbHVlX2FjY2Vzc29yX2dlbmVyYXRvcjxULE51 bURpbXM+Ojp0eXBlIHsKICB0eXBlZGVmIHR5cGVuYW1lIHZhbHVlX2FjY2Vzc29yX2dlbmVyYXRv cjxULE51bURpbXM+Ojp0eXBlIHN1cGVyX3R5cGU7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1l IHN1cGVyX3R5cGU6OmluZGV4IGluZGV4OwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6 c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmVsZW1l bnQgZWxlbWVudDsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmluZGV4X3JhbmdlIGlu ZGV4X3JhbmdlOwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6dmFsdWVfdHlwZSB2YWx1 ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5j ZTsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9y ZWZlcmVuY2U7CgogIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBORGltcz4KICBzdHJ1Y3Qgc3ViYXJy YXkgewogICAgdHlwZWRlZiBib29zdDo6ZGV0YWlsOjptdWx0aV9hcnJheTo6c3ViX2FycmF5PFQs TkRpbXM+IHR5cGU7CiAgfTsKCiAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE5EaW1zPgogIHN0cnVj dCBjb25zdF9zdWJhcnJheSB7CiAgICB0eXBlZGVmIGJvb3N0OjpkZXRhaWw6Om11bHRpX2FycmF5 Ojpjb25zdF9zdWJfYXJyYXk8VCxORGltcz4gdHlwZTsKICB9OwoKICB0ZW1wbGF0ZSA8c3RkOjpz aXplX3QgTkRpbXM+CiAgc3RydWN0IGFycmF5X3ZpZXcgewogICAgdHlwZWRlZiBib29zdDo6ZGV0 YWlsOjptdWx0aV9hcnJheTo6bXVsdGlfYXJyYXlfdmlldzxULE5EaW1zPiB0eXBlOwogIH07Cgog IHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBORGltcz4KICBzdHJ1Y3QgY29uc3RfYXJyYXlfdmlldyB7 CiAgcHVibGljOgogICAgdHlwZWRlZiBib29zdDo6ZGV0YWlsOjptdWx0aV9hcnJheTo6Y29uc3Rf bXVsdGlfYXJyYXlfdmlldzxULE5EaW1zPiB0eXBlOwogIH07CgoKCgoKICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RhZ19zZWxlY3RvcjxOdW1EaW1zPjo6dHlwZSBpdGVyYXRvcl90YWc7Cgog IHR5cGVkZWYgdHlwZW5hbWUKICAgIGl0ZXJhdG9yX2dlbmVyYXRvcjxULE51bURpbXMsdmFsdWVf dHlwZSwKICAgIHJlZmVyZW5jZSxpdGVyYXRvcl90YWcsaW5kZXg+Ojp0eXBlIGl0ZXJhdG9yOwoK ICB0eXBlZGVmIHR5cGVuYW1lCiAgICBjb25zdF9pdGVyYXRvcl9nZW5lcmF0b3I8VCxOdW1EaW1z LHZhbHVlX3R5cGUsCiAgICBjb25zdF9yZWZlcmVuY2UsaXRlcmF0b3JfdGFnLGluZGV4Pjo6dHlw ZSBjb25zdF9pdGVyYXRvcjsKCiAgdHlwZWRlZiB0eXBlbmFtZQogICAgcmV2ZXJzZV9pdGVyYXRv cl9nZW5lcmF0b3I8VCxOdW1EaW1zLHZhbHVlX3R5cGUsCiAgICByZWZlcmVuY2UsaXRlcmF0b3Jf dGFnLGluZGV4Pjo6dHlwZSByZXZlcnNlX2l0ZXJhdG9yOwoKICB0eXBlZGVmIHR5cGVuYW1lCiAg ICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yX2dlbmVyYXRvcjxULE51bURpbXMsdmFsdWVfdHlwZSwK ICAgIGNvbnN0X3JlZmVyZW5jZSxpdGVyYXRvcl90YWcsaW5kZXg+Ojp0eXBlIGNvbnN0X3JldmVy c2VfaXRlcmF0b3I7Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiBpdGVyYXRvcl9iYXNlPFQsVCo+IGl0 ZXJfYmFzZTsKICB0eXBlZGVmIGl0ZXJhdG9yX2Jhc2U8VCxjb25zdCBUKj4gY29uc3RfaXRlcl9i YXNlOwoKICBtdWx0aV9hcnJheV9pbXBsX2Jhc2UoKSB7IH0KICB+bXVsdGlfYXJyYXlfaW1wbF9i YXNlKCkgeyB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVmZXJlbmNlLCB0eXBlbmFtZSBJbmRl eExpc3QsIHR5cGVuYW1lIFRQdHI+CiAgUmVmZXJlbmNlIGFjY2Vzc19lbGVtZW50KGJvb3N0Ojp0 eXBlPFJlZmVyZW5jZT4sIFRQdHIgYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgSW5kZXhMaXN0JiBpbmRpY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBp bmRleCogc3RyaWRlcykgY29uc3QgewogICAgaW5kZXggb2Zmc2V0ID0gMDsKICAgIGZvciAoc2l6 ZV90eXBlIG4gPSAwOyBuICE9IE51bURpbXM7ICsrbikKICAgICAgb2Zmc2V0ICs9IGluZGljZXNb bl0gKiBzdHJpZGVzW25dOwoKICAgIHJldHVybiBiYXNlW29mZnNldF07CiAgfQoKICB0ZW1wbGF0 ZSA8dHlwZW5hbWUgU3RyaWRlTGlzdCwgdHlwZW5hbWUgRXh0ZW50TGlzdD4KICB2b2lkIGNvbXB1 dGVfc3RyaWRlcyhTdHJpZGVMaXN0JiBzdHJpZGVfbGlzdCwgRXh0ZW50TGlzdCYgZXh0ZW50X2xp c3QsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2VuZXJhbF9zdG9yYWdlX29yZGVyPE51 bURpbXM+JiBzdG9yYWdlKQogIHsKCiAgICBpbmRleCBzdHJpZGUgPSAxOwogICAgZm9yIChzaXpl X3R5cGUgbiA9IDA7IG4gIT0gTnVtRGltczsgKytuKSB7CiAgICAgIGluZGV4IHN0cmlkZV9zaWdu ID0gKzE7CgogICAgICBpZiAoIXN0b3JhZ2UuYXNjZW5kaW5nKHN0b3JhZ2Uub3JkZXJpbmcobikp KQogICAgICAgIHN0cmlkZV9zaWduID0gLTE7CgoKCiAgICAgIHN0cmlkZV9saXN0W3N0b3JhZ2Uu b3JkZXJpbmcobildID0gc3RyaWRlICogc3RyaWRlX3NpZ247CgogICAgICBzdHJpZGUgKj0gZXh0 ZW50X2xpc3Rbc3RvcmFnZS5vcmRlcmluZyhuKV07CiAgICB9CiAgfQoKCgoKICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgU3RyaWRlTGlzdCwgdHlwZW5hbWUgRXh0ZW50TGlzdCwgdHlwZW5hbWUgQmFzZUxp c3Q+CiAgaW5kZXgKICBjYWxjdWxhdGVfb3JpZ2luX29mZnNldChjb25zdCBTdHJpZGVMaXN0JiBz dHJpZGVfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFeHRlbnRMaXN0JiBl eHRlbnRfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnZW5lcmFsX3N0b3Jh Z2Vfb3JkZXI8TnVtRGltcz4mIHN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgQmFzZUxpc3QmIGluZGV4X2Jhc2VfbGlzdCkKICB7CiAgICByZXR1cm4KICAgICAgY2FsY3Vs YXRlX2Rlc2NlbmRpbmdfZGltZW5zaW9uX29mZnNldChzdHJpZGVfbGlzdCxleHRlbnRfbGlzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlKSArCiAg ICAgIGNhbGN1bGF0ZV9pbmRleGluZ19vZmZzZXQoc3RyaWRlX2xpc3QsaW5kZXhfYmFzZV9saXN0 KTsKICB9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFN0cmlkZUxpc3QsIHR5cGVuYW1lIEV4dGVu dExpc3Q+CiAgaW5kZXgKICBjYWxjdWxhdGVfZGVzY2VuZGluZ19kaW1lbnNpb25fb2Zmc2V0KGNv bnN0IFN0cmlkZUxpc3QmIHN0cmlkZV9saXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IEV4dGVudExpc3QmIGV4dGVudF9saXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGdlbmVyYWxfc3RvcmFnZV9vcmRlcjxOdW1EaW1zPiYgc3RvcmFnZSkK ICB7CiAgICBpbmRleCBvZmZzZXQgPSAwOwogICAgaWYgKCFzdG9yYWdlLmFsbF9kaW1zX2FzY2Vu ZGluZygpKQogICAgICBmb3IgKHNpemVfdHlwZSBuID0gMDsgbiAhPSBOdW1EaW1zOyArK24pCiAg ICAgICAgaWYgKCFzdG9yYWdlLmFzY2VuZGluZyhuKSkKICAgICAgICAgIG9mZnNldCAtPSAoZXh0 ZW50X2xpc3Rbbl0gLSAxKSAqIHN0cmlkZV9saXN0W25dOwoKICAgIHJldHVybiBvZmZzZXQ7CiAg fQoKCgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFN0cmlkZUxpc3QsIHR5cGVuYW1lIEJhc2VMaXN0 PgogIGluZGV4CiAgY2FsY3VsYXRlX2luZGV4aW5nX29mZnNldChjb25zdCBTdHJpZGVMaXN0JiBz dHJpZGVfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXNlTGlzdCYgaW5k ZXhfYmFzZV9saXN0KQogIHsKICAgIGluZGV4IG9mZnNldCA9IDA7CiAgICBmb3IgKHNpemVfdHlw ZSBuID0gMDsgbiAhPSBOdW1EaW1zOyArK24pCiAgICAgICAgb2Zmc2V0IC09IHN0cmlkZV9saXN0 W25dICogaW5kZXhfYmFzZV9saXN0W25dOwogICAgcmV0dXJuIG9mZnNldDsKICB9CiMgNDA1ICIv aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS9iYXNlLmhwcCIg MwogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcnJheVJlZiwgaW50IE5EaW1zLCB0eXBlbmFtZSBUUHRy PgogIEFycmF5UmVmCiAgZ2VuZXJhdGVfYXJyYXlfdmlldyhib29zdDo6dHlwZTxBcnJheVJlZj4s CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29zdDo6ZGV0YWlsOjptdWx0aV9hcnJheTo6 CiAgICAgICAgICAgICAgICAgICAgICBpbmRleF9nZW48TnVtRGltcyxORGltcz4mIGluZGljZXMs CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3R5cGUqIGV4dGVudHMsCiAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBpbmRleCogc3RyaWRlcywKICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGluZGV4KiBpbmRleF9iYXNlcywKICAgICAgICAgICAgICAgICAgICAgIFRQdHIgYmFz ZSkgY29uc3QgewoKICAgIGJvb3N0OjphcnJheTxpbmRleCxORGltcz4gbmV3X3N0cmlkZXM7CiAg ICBib29zdDo6YXJyYXk8aW5kZXgsTkRpbXM+IG5ld19leHRlbnRzOwoKICAgIGluZGV4IG9mZnNl dCA9IDA7CiAgICBzaXplX3R5cGUgZGltID0gMDsKICAgIGZvciAoc2l6ZV90eXBlIG4gPSAwOyBu ICE9IE51bURpbXM7ICsrbikgewogICAgICBjb25zdCBpbmRleCBkZWZhdWx0X3N0YXJ0ID0gaW5k ZXhfYmFzZXNbbl07CiAgICAgIGNvbnN0IGluZGV4IGRlZmF1bHRfZmluaXNoID0gZGVmYXVsdF9z dGFydCtleHRlbnRzW25dOwogICAgICBjb25zdCBpbmRleF9yYW5nZSYgY3VycmVudF9yYW5nZSA9 IGluZGljZXMucmFuZ2VzX1tuXTsKICAgICAgaW5kZXggc3RhcnQgPSBjdXJyZW50X3JhbmdlLmdl dF9zdGFydChkZWZhdWx0X3N0YXJ0KTsKICAgICAgaW5kZXggZmluaXNoID0gY3VycmVudF9yYW5n ZS5nZXRfZmluaXNoKGRlZmF1bHRfZmluaXNoKTsKICAgICAgaW5kZXggaW5kZXhfZmFjdG9yID0g Y3VycmVudF9yYW5nZS5zdHJpZGUoKTsKICAgICAgaW5kZXggbGVuID0gKGZpbmlzaCAtIHN0YXJ0 KSAvIGluZGV4X2ZhY3RvcjsKCgoKICAgICAgb2Zmc2V0ICs9IHN0YXJ0ICogc3RyaWRlc1tuXTsK CiAgICAgIGlmICghY3VycmVudF9yYW5nZS5pc19kZWdlbmVyYXRlKCkpIHsKCgoKICAgICAgICBu ZXdfc3RyaWRlc1tkaW1dID0gaW5kZXhfZmFjdG9yICogc3RyaWRlc1tuXTsKCgogICAgICAgIG5l d19leHRlbnRzW2RpbV0gPSBsZW47CiAgICAgICAgKytkaW07CiAgICAgIH0KICAgIH0KICAgIChz dGF0aWNfY2FzdDx2b2lkPiAoKGRpbSA9PSBORGltcykgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJk aW0gPT0gTkRpbXMiLCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlf YXJyYXkvYmFzZS5ocHAiLCA0NDQsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKICAgIHJl dHVybgogICAgICBBcnJheVJlZihiYXNlK29mZnNldCwKICAgICAgICAgICAgICAgbmV3X2V4dGVu dHMsCiAgICAgICAgICAgICAgIG5ld19zdHJpZGVzKTsKICB9CgoKfTsKCn0KfQoKfQojIDIyICIv aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS5ocHAiIDIgMwoj IDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L2NvbGxl Y3Rpb25fY29uY2VwdC5ocHAiIDEgMwojIDE4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVk ZS9ib29zdC9tdWx0aV9hcnJheS9jb2xsZWN0aW9uX2NvbmNlcHQuaHBwIiAzCm5hbWVzcGFjZSBi b29zdCB7Cm5hbWVzcGFjZSBkZXRhaWwgewpuYW1lc3BhY2UgbXVsdGlfYXJyYXkgewoKCgoKICB0 ZW1wbGF0ZSA8Y2xhc3MgQ29sbGVjdGlvbj4KICBzdHJ1Y3QgQ29sbGVjdGlvbkNvbmNlcHQKICB7 CiAgICB0eXBlZGVmIHR5cGVuYW1lIENvbGxlY3Rpb246OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsK ICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29sbGVjdGlvbjo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgICB0 eXBlZGVmIHR5cGVuYW1lIENvbGxlY3Rpb246OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9y OwogICAgdHlwZWRlZiB0eXBlbmFtZSBDb2xsZWN0aW9uOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwog ICAgdHlwZWRlZiB0eXBlbmFtZSBDb2xsZWN0aW9uOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVm ZXJlbmNlOwoKICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29sbGVjdGlvbjo6ZGlmZmVyZW5jZV90eXBl IGRpZmZlcmVuY2VfdHlwZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29sbGVjdGlvbjo6c2l6ZV90 eXBlIHNpemVfdHlwZTsKCiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewogICAgICBib29zdDo6ZnVu Y3Rpb25fcmVxdWlyZXM8Ym9vc3Q6OklucHV0SXRlcmF0b3JDb25jZXB0PGl0ZXJhdG9yPiA+KCk7 CiAgICAgIGJvb3N0OjpmdW5jdGlvbl9yZXF1aXJlczxib29zdDo6SW5wdXRJdGVyYXRvckNvbmNl cHQ8Y29uc3RfaXRlcmF0b3I+ID4oKTsKICAgICAgYm9vc3Q6OmZ1bmN0aW9uX3JlcXVpcmVzPGJv b3N0OjpDb3B5Q29uc3RydWN0aWJsZUNvbmNlcHQ8dmFsdWVfdHlwZT4gPigpOwogICAgICBjb25z dF9jb25zdHJhaW50cyhjKTsKICAgICAgaSA9IGMuYmVnaW4oKTsKICAgICAgaSA9IGMuZW5kKCk7 CiAgICAgIGMuc3dhcChjKTsKICAgIH0KICAgIHZvaWQgY29uc3RfY29uc3RyYWludHMoY29uc3Qg Q29sbGVjdGlvbiYgYykgewogICAgICBjaSA9IGMuYmVnaW4oKTsKICAgICAgY2kgPSBjLmVuZCgp OwogICAgICBuID0gYy5zaXplKCk7CiAgICAgIGIgPSBjLmVtcHR5KCk7CiAgICB9CiAgICBDb2xs ZWN0aW9uIGM7CiAgICBib29sIGI7CiAgICBpdGVyYXRvciBpOwogICAgY29uc3RfaXRlcmF0b3Ig Y2k7CiAgICBzaXplX3R5cGUgbjsKICB9OwoKfQp9Cn0KIyAyMyAiL2hvbWUvY29tcGJpby9kOTUt YmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkuaHBwIiAyIDMKIyAxICIvaG9tZS9jb21wYmlv L2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS9jb3B5X2FycmF5LmhwcCIgMSAzCiMg MjIgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L2NvcHlf YXJyYXkuaHBwIiAzCiMgMSAiL3Vzci9sb2NhbC92b2wvZ2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIv Y2Fzc2VydCIgMSAzCiMgNDcgIi91c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4y L2Nhc3NlcnQiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMKIyA2NSAiL3Vzci9p bmNsdWRlL2Fzc2VydC5oIiAzCmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2Zh aWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIg Kl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp OwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29u c3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy bl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24s IGNvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfQojIDQ5ICIvdXNyL2xvY2FsL3ZvbC9nY2MvMy4yL2lu Y2x1ZGUvYysrLzMuMi9jYXNzZXJ0IiAyIDMKIyAyMyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu Y2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvY29weV9hcnJheS5ocHAiIDIgMwoKbmFtZXNwYWNlIGJv b3N0IHsKbmFtZXNwYWNlIGRldGFpbCB7Cm5hbWVzcGFjZSBtdWx0aV9hcnJheSB7Cgp0ZW1wbGF0 ZSA8dHlwZW5hbWUgRWxlbWVudD4KY2xhc3MgY29weV9kaXNwYXRjaCB7CnB1YmxpYzoKICB0ZW1w bGF0ZSA8dHlwZW5hbWUgU291cmNlSXRlcmF0b3IsIHR5cGVuYW1lIERlc3RJdGVyYXRvcj4KICBz dGF0aWMgdm9pZCBjb3B5X2FycmF5IChTb3VyY2VJdGVyYXRvciBmaXJzdCwgU291cmNlSXRlcmF0 b3IgbGFzdCwKICAgICAgICAgICAgICAgICAgIERlc3RJdGVyYXRvciByZXN1bHQpIHsKICAgIHdo aWxlIChmaXJzdCAhPSBsYXN0KSB7CiAgICAgIGNvcHlfYXJyYXkoKmZpcnN0KyssKnJlc3VsdCsr KTsKICAgIH0KICB9CnByaXZhdGU6CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJyYXkxLCB0eXBl bmFtZSBBcnJheTI+CiAgc3RhdGljIHZvaWQgY29weV9hcnJheSAoY29uc3QgQXJyYXkxJiBzb3Vy Y2UsIEFycmF5MiBkZXN0KSB7CiAgICBjb3B5X2FycmF5KHNvdXJjZS5iZWdpbigpLHNvdXJjZS5l bmQoKSxkZXN0LmJlZ2luKCkpOwogIH0KCiAgc3RhdGljIHZvaWQgY29weV9hcnJheSAoY29uc3Qg RWxlbWVudCYgc291cmNlLCBFbGVtZW50JiBkZXN0KSB7CiAgICBkZXN0ID0gc291cmNlOwogIH0K Cn07CgoKdGVtcGxhdGUgPHR5cGVuYW1lIEFycmF5MSwgdHlwZW5hbWUgQXJyYXkyPgp2b2lkIGNv cHlfYXJyYXkgKEFycmF5MSYgc291cmNlLCBBcnJheTImIGRlc3QpIHsKICAoc3RhdGljX2Nhc3Q8 dm9pZD4gKChzdGQ6OmVxdWFsKHNvdXJjZS5zaGFwZSgpLHNvdXJjZS5zaGFwZSgpK3NvdXJjZS5u dW1fZGltZW5zaW9ucygpLCBkZXN0LnNoYXBlKCkpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoInN0 ZDo6ZXF1YWwoc291cmNlLnNoYXBlKCksc291cmNlLnNoYXBlKCkrc291cmNlLm51bV9kaW1lbnNp b25zKCksIGRlc3Quc2hhcGUoKSkiLCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v c3QvbXVsdGlfYXJyYXkvY29weV9hcnJheS5ocHAiLCA1NiwgX19QUkVUVFlfRlVOQ1RJT05fXyks IDApKSk7CgoKICB0eXBlZGVmIHR5cGVuYW1lIEFycmF5MTo6ZWxlbWVudCBlbGVtZW50X3R5cGU7 CiAgY29weV9kaXNwYXRjaDxlbGVtZW50X3R5cGU+OjoKICAgIGNvcHlfYXJyYXkoc291cmNlLmJl Z2luKCksc291cmNlLmVuZCgpLGRlc3QuYmVnaW4oKSk7Cn0KCgp9Cn0KfQojIDI0ICIvaG9tZS9j b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS5ocHAiIDIgMwojIDEgIi9o b21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L2l0ZXJhdG9yLmhw cCIgMSAzCiMgMjMgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2Fy cmF5L2l0ZXJhdG9yLmhwcCIgMwojIDEgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv b3N0L2l0ZXJhdG9yX2FkYXB0b3JzLmhwcCIgMSAzCiMgMTM5ICIvaG9tZS9jb21wYmlvL2Q5NS1i bGkvaW5jbHVkZS9ib29zdC9pdGVyYXRvcl9hZGFwdG9ycy5ocHAiIDMKbmFtZXNwYWNlIGJvb3N0 IHsKIyAxNDggIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2l0ZXJhdG9yX2Fk YXB0b3JzLmhwcCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgUG9saWNpZXMsIGNsYXNzIEFkYXB0ZWQsIGNs YXNzIFRyYWl0cz4Kc3RydWN0IFRyaXZpYWxJdGVyYXRvclBvbGljaWVzQ29uY2VwdAp7CiAgdHlw ZWRlZiB0eXBlbmFtZSBUcmFpdHM6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgdm9pZCBjb25zdHJh aW50cygpIHsKICAgIGZ1bmN0aW9uX3JlcXVpcmVzPCBBc3NpZ25hYmxlQ29uY2VwdDxQb2xpY2ll cz4gPigpOwogICAgZnVuY3Rpb25fcmVxdWlyZXM8IERlZmF1bHRDb25zdHJ1Y3RpYmxlQ29uY2Vw dDxQb2xpY2llcz4gPigpOwogICAgZnVuY3Rpb25fcmVxdWlyZXM8IEFzc2lnbmFibGVDb25jZXB0 PEFkYXB0ZWQ+ID4oKTsKICAgIGZ1bmN0aW9uX3JlcXVpcmVzPCBEZWZhdWx0Q29uc3RydWN0aWJs ZUNvbmNlcHQ8QWRhcHRlZD4gPigpOwoKICAgIGNvbnN0X2NvbnN0cmFpbnRzKCk7CiAgfQogIHZv aWQgY29uc3RfY29uc3RyYWludHMoKSBjb25zdCB7CiAgICByZWZlcmVuY2UgciA9IHAuZGVyZWZl cmVuY2UoeCk7CiAgICBiID0gcC5lcXVhbCh4LCB4KTsKICAgIGlnbm9yZV91bnVzZWRfdmFyaWFi bGVfd2FybmluZyhyKTsKICB9CiAgUG9saWNpZXMgcDsKICBBZGFwdGVkIHg7CiAgbXV0YWJsZSBi b29sIGI7Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBQb2xpY2llcywgY2xhc3MgQWRhcHRlZCwgY2xh c3MgVHJhaXRzPgpzdHJ1Y3QgRm9yd2FyZEl0ZXJhdG9yUG9saWNpZXNDb25jZXB0CnsKICB0eXBl ZGVmIHR5cGVuYW1lIFRyYWl0czo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7 CiAgdm9pZCBjb25zdHJhaW50cygpIHsKICAgIGZ1bmN0aW9uX3JlcXVpcmVzPAogICAgICBUcml2 aWFsSXRlcmF0b3JQb2xpY2llc0NvbmNlcHQ8UG9saWNpZXMsIEFkYXB0ZWQsIFRyYWl0cz4KICAg ICAgPigpOwoKICAgIHAuaW5jcmVtZW50KHgpOwogICAgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3Rh ZyB0ID0gaXRlcmF0b3JfY2F0ZWdvcnkoKTsKICAgIGlnbm9yZV91bnVzZWRfdmFyaWFibGVfd2Fy bmluZyh0KTsKICB9CiAgUG9saWNpZXMgcDsKICBBZGFwdGVkIHg7CiAgaXRlcmF0b3JfY2F0ZWdv cnkgY2F0ZWdvcnk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUG9saWNpZXMsIGNsYXNzIEFkYXB0ZWQs IGNsYXNzIFRyYWl0cz4Kc3RydWN0IEJpZGlyZWN0aW9uYWxJdGVyYXRvclBvbGljaWVzQ29uY2Vw dAp7CiAgdHlwZWRlZiB0eXBlbmFtZSBUcmFpdHM6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9y X2NhdGVnb3J5OwogIHZvaWQgY29uc3RyYWludHMoKSB7CiAgICBmdW5jdGlvbl9yZXF1aXJlczwK ICAgICAgRm9yd2FyZEl0ZXJhdG9yUG9saWNpZXNDb25jZXB0PFBvbGljaWVzLCBBZGFwdGVkLCBU cmFpdHM+CiAgICAgID4oKTsKCiAgICBwLmRlY3JlbWVudCh4KTsKICAgIHN0ZDo6YmlkaXJlY3Rp b25hbF9pdGVyYXRvcl90YWcgdCA9IGl0ZXJhdG9yX2NhdGVnb3J5KCk7CiAgICBpZ25vcmVfdW51 c2VkX3ZhcmlhYmxlX3dhcm5pbmcodCk7CiAgfQogIFBvbGljaWVzIHA7CiAgQWRhcHRlZCB4Owp9 OwoKdGVtcGxhdGUgPGNsYXNzIFBvbGljaWVzLCBjbGFzcyBBZGFwdGVkLCBjbGFzcyBUcmFpdHM+ CnN0cnVjdCBSYW5kb21BY2Nlc3NJdGVyYXRvclBvbGljaWVzQ29uY2VwdAp7CiAgdHlwZWRlZiB0 eXBlbmFtZSBUcmFpdHM6OmRpZmZlcmVuY2VfdHlwZSBEaWZmZXJlbmNlVHlwZTsKICB0eXBlZGVm IHR5cGVuYW1lIFRyYWl0czo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg dm9pZCBjb25zdHJhaW50cygpIHsKICAgIGZ1bmN0aW9uX3JlcXVpcmVzPAogICAgICBCaWRpcmVj dGlvbmFsSXRlcmF0b3JQb2xpY2llc0NvbmNlcHQ8UG9saWNpZXMsIEFkYXB0ZWQsIFRyYWl0cz4K ICAgICAgPigpOwoKICAgIHAuYWR2YW5jZSh4LCBuKTsKICAgIHN0ZDo6cmFuZG9tX2FjY2Vzc19p dGVyYXRvcl90YWcgdCA9IGl0ZXJhdG9yX2NhdGVnb3J5KCk7CiAgICBjb25zdF9jb25zdHJhaW50 cygpOwogICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKHQpOwogIH0KICB2b2lkIGNv bnN0X2NvbnN0cmFpbnRzKCkgY29uc3QgewogICAgbiA9IHAuZGlzdGFuY2UoeCwgeCk7CiAgfQog IFBvbGljaWVzIHA7CiAgQWRhcHRlZCB4OwogIG11dGFibGUgRGlmZmVyZW5jZVR5cGUgbjsKICBt dXRhYmxlIGJvb2wgYjsKfTsKCgoKCgpzdHJ1Y3QgZGVmYXVsdF9pdGVyYXRvcl9wb2xpY2llcwp7 CiMgMjQ3ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9pdGVyYXRvcl9hZGFw dG9ycy5ocHAiIDMKICAgIHRlbXBsYXRlIDxjbGFzcyBCYXNlPgogICAgdm9pZCBpbml0aWFsaXpl KEJhc2UmKQogICAgICAgIHsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvckFkYXB0b3I+ CiAgICB0eXBlbmFtZSBJdGVyYXRvckFkYXB0b3I6OnJlZmVyZW5jZSBkZXJlZmVyZW5jZShjb25z dCBJdGVyYXRvckFkYXB0b3ImIHgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKnguYmFzZSgpOyB9 CgogICAgdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yQWRhcHRvcj4KICAgIHZvaWQgaW5jcmVtZW50 KEl0ZXJhdG9yQWRhcHRvciYgeCkKICAgICAgICB7ICsreC5iYXNlKCk7IH0KCiAgICB0ZW1wbGF0 ZSA8Y2xhc3MgSXRlcmF0b3JBZGFwdG9yPgogICAgdm9pZCBkZWNyZW1lbnQoSXRlcmF0b3JBZGFw dG9yJiB4KQogICAgICAgIHsgLS14LmJhc2UoKTsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBJdGVy YXRvckFkYXB0b3IsIGNsYXNzIERpZmZlcmVuY2VUeXBlPgogICAgdm9pZCBhZHZhbmNlKEl0ZXJh dG9yQWRhcHRvciYgeCwgRGlmZmVyZW5jZVR5cGUgbikKICAgICAgICB7IHguYmFzZSgpICs9IG47 IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3JBZGFwdG9yMSwgY2xhc3MgSXRlcmF0b3JB ZGFwdG9yMj4KICAgIHR5cGVuYW1lIEl0ZXJhdG9yQWRhcHRvcjE6OmRpZmZlcmVuY2VfdHlwZQog ICAgZGlzdGFuY2UoY29uc3QgSXRlcmF0b3JBZGFwdG9yMSYgeCwgY29uc3QgSXRlcmF0b3JBZGFw dG9yMiYgeSkgY29uc3QKICAgICAgICB7IHJldHVybiB5LmJhc2UoKSAtIHguYmFzZSgpOyB9Cgog ICAgdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yQWRhcHRvcjEsIGNsYXNzIEl0ZXJhdG9yQWRhcHRv cjI+CiAgICBib29sIGVxdWFsKGNvbnN0IEl0ZXJhdG9yQWRhcHRvcjEmIHgsIGNvbnN0IEl0ZXJh dG9yQWRhcHRvcjImIHkpIGNvbnN0CiAgICAgICAgeyByZXR1cm4geC5iYXNlKCkgPT0geS5iYXNl KCk7IH0KfTsKIyAzMzkgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2l0ZXJh dG9yX2FkYXB0b3JzLmhwcCIgMwpuYW1lc3BhY2UgZGV0YWlsIHsKCgoKCgoKICB0ZW1wbGF0ZSA8 Y2xhc3MgVD4KICBzdHJ1Y3Qgb3BlcmF0b3JfYXJyb3dfcHJveHkKICB7CiAgICAgIG9wZXJhdG9y X2Fycm93X3Byb3h5KGNvbnN0IFQmIHgpIDogbV92YWx1ZSh4KSB7fQogICAgICBjb25zdCBUKiBv cGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJm1fdmFsdWU7IH0KCgogICAgICBvcGVyYXRvciBj b25zdCBUKigpIGNvbnN0IHsgcmV0dXJuICZtX3ZhbHVlOyB9CiAgICAgIFQgbV92YWx1ZTsKICB9 OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgSXRlcj4KICBpbmxpbmUgb3BlcmF0b3JfYXJyb3dfcHJveHk8 dHlwZW5hbWUgSXRlcjo6dmFsdWVfdHlwZT4KICBvcGVyYXRvcl9hcnJvdyhjb25zdCBJdGVyJiBp LCBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgdHlwZWRlZiB0eXBlbmFtZSBJdGVyOjp2 YWx1ZV90eXBlIHZhbHVlX3Q7CiAgICByZXR1cm4gb3BlcmF0b3JfYXJyb3dfcHJveHk8dmFsdWVf dD4oKmkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIEl0ZXI+CiAgaW5saW5lIHR5cGVuYW1lIEl0 ZXI6OnBvaW50ZXIKICBvcGVyYXRvcl9hcnJvdyhjb25zdCBJdGVyJiBpLCBzdGQ6OmZvcndhcmRf aXRlcmF0b3JfdGFnKSB7CiAgICByZXR1cm4gJigqaSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg VmFsdWUsIGNsYXNzIFJlZmVyZW5jZSwgY2xhc3MgUG9pbnRlcj4KICBzdHJ1Y3Qgb3BlcmF0b3Jf YXJyb3dfcmVzdWx0X2dlbmVyYXRvcgogIHsKICAgICAgdHlwZWRlZiBvcGVyYXRvcl9hcnJvd19w cm94eTxWYWx1ZT4gcHJveHk7CgogICAgICBlbnVtIHsgdXNlX3Byb3h5ID0gIWJvb3N0Ojppc19y ZWZlcmVuY2U8UmVmZXJlbmNlPjo6dmFsdWUgfTsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYm9v c3Q6OmRldGFpbDo6aWZfdHJ1ZTwodXNlX3Byb3h5KT46OnRlbXBsYXRlCiAgICAgIHRoZW48CiAg ICAgICAgcHJveHksCgogICAgICAgIFBvaW50ZXIKICAgICAgPjo6dHlwZSB0eXBlOwogIH07CiMg NDI4ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9pdGVyYXRvcl9hZGFwdG9y cy5ocHAiIDMKICAgdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLGNsYXNzIFZhbHVlPgogICBzdHJ1 Y3QgaXRlcmF0b3JfZGVmYXVsdHMgOiBpdGVyYXRvcl90cmFpdHM8SXRlcmF0b3I+CiAgIHsKCgog ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpZl90cnVlPCgKICAgICAgICAgICAgICAgOjpib29zdDo6 aXNfc2FtZTxWYWx1ZSx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8SXRlcmF0b3I+Ojp2YWx1ZV90 eXBlPjo6dmFsdWUKICAgICAgICAgICApPjo6dGVtcGxhdGUgdGhlbjwKICAgICAgICAgICAgICAg IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxJdGVyYXRvcj46OnBvaW50ZXIsCiAgICAgICAgICAg ICAgICBWYWx1ZSoKICAgICAgID46OnR5cGUgcG9pbnRlcjsKCiAgICAgICB0eXBlZGVmIHR5cGVu YW1lIGlmX3RydWU8KAogICAgICAgICAgICAgICA6OmJvb3N0Ojppc19zYW1lPFZhbHVlLHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxJdGVyYXRvcj46OnZhbHVlX3R5cGU+Ojp2YWx1ZQogICAgICAg ICAgICk+Ojp0ZW1wbGF0ZSB0aGVuPAogICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPEl0ZXJhdG9yPjo6cmVmZXJlbmNlLAogICAgICAgICAgICAgICAgVmFsdWUmCiAgICAg ICA+Ojp0eXBlIHJlZmVyZW5jZTsKCiAgIH07CgoKCgoKICBzdHJ1Y3QgZGVmYXVsdF9hcmd1bWVu dCB7IH07CgogIHN0cnVjdCBkdW1teV9kZWZhdWx0X2dlbiB7CiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg QmFzZSwgY2xhc3MgVHJhaXRzPgogICAgc3RydWN0IHNlbGVjdCB7IHR5cGVkZWYgZGVmYXVsdF9h cmd1bWVudCB0eXBlOyB9OwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBHZW4+IHN0cnVjdCBkZWZh dWx0X2dlbmVyYXRvciB7CiAgICB0eXBlZGVmIGR1bW15X2RlZmF1bHRfZ2VuIHR5cGU7CiAgfTsK CiAgc3RydWN0IGRlZmF1bHRfdmFsdWVfdHlwZSB7CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZSwg Y2xhc3MgVHJhaXRzPgogICAgc3RydWN0IHNlbGVjdCB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg Ym9vc3Q6OmRldGFpbDo6aXRlcmF0b3JfdHJhaXRzPEJhc2U+Ojp2YWx1ZV90eXBlIHR5cGU7CiAg ICB9OwogIH07CiAgdGVtcGxhdGUgPD4gc3RydWN0IGRlZmF1bHRfZ2VuZXJhdG9yPGRlZmF1bHRf dmFsdWVfdHlwZT4KICB7IHR5cGVkZWYgZGVmYXVsdF92YWx1ZV90eXBlIHR5cGU7IH07CgogIHN0 cnVjdCBkZWZhdWx0X2RpZmZlcmVuY2VfdHlwZSB7CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZSwg Y2xhc3MgVHJhaXRzPgogICAgc3RydWN0IHNlbGVjdCB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg Ym9vc3Q6OmRldGFpbDo6aXRlcmF0b3JfdHJhaXRzPEJhc2U+OjpkaWZmZXJlbmNlX3R5cGUgdHlw ZTsKICAgIH07CiAgfTsKICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgZGVmYXVsdF9nZW5lcmF0b3I8ZGVm YXVsdF9kaWZmZXJlbmNlX3R5cGU+CiAgeyB0eXBlZGVmIGRlZmF1bHRfZGlmZmVyZW5jZV90eXBl IHR5cGU7IH07CgogIHN0cnVjdCBkZWZhdWx0X2l0ZXJhdG9yX2NhdGVnb3J5IHsKICAgIHRlbXBs YXRlIDxjbGFzcyBCYXNlLCBjbGFzcyBUcmFpdHM+CiAgICBzdHJ1Y3Qgc2VsZWN0IHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBib29zdDo6ZGV0YWlsOjppdGVyYXRvcl90cmFpdHM8QmFzZT46Oml0 ZXJhdG9yX2NhdGVnb3J5IHR5cGU7CiAgICB9OwogIH07CiAgdGVtcGxhdGUgPD4gc3RydWN0IGRl ZmF1bHRfZ2VuZXJhdG9yPGRlZmF1bHRfaXRlcmF0b3JfY2F0ZWdvcnk+CiAgeyB0eXBlZGVmIGRl ZmF1bHRfaXRlcmF0b3JfY2F0ZWdvcnkgdHlwZTsgfTsKCiAgc3RydWN0IGRlZmF1bHRfcG9pbnRl ciB7CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZSwgY2xhc3MgVHJhaXRzPgogICAgc3RydWN0IHNl bGVjdCB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVHJhaXRzOjp2YWx1ZV90eXBlIFZhbHVlOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGJvb3N0OjpkZXRhaWw6Oml0ZXJhdG9yX2RlZmF1bHRzPEJh c2UsVmFsdWU+Ojpwb2ludGVyCiAgICAgICAgdHlwZTsKICAgIH07CiAgfTsKICB0ZW1wbGF0ZSA8 PiBzdHJ1Y3QgZGVmYXVsdF9nZW5lcmF0b3I8ZGVmYXVsdF9wb2ludGVyPgogIHsgdHlwZWRlZiBk ZWZhdWx0X3BvaW50ZXIgdHlwZTsgfTsKCiAgc3RydWN0IGRlZmF1bHRfcmVmZXJlbmNlIHsKICAg IHRlbXBsYXRlIDxjbGFzcyBCYXNlLCBjbGFzcyBUcmFpdHM+CiAgICBzdHJ1Y3Qgc2VsZWN0IHsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBUcmFpdHM6OnZhbHVlX3R5cGUgVmFsdWU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OmRldGFpbDo6aXRlcmF0b3JfZGVmYXVsdHM8QmFzZSxWYWx1 ZT46OnJlZmVyZW5jZQogICAgICAgIHR5cGU7CiAgICB9OwogIH07CiAgdGVtcGxhdGUgPD4gc3Ry dWN0IGRlZmF1bHRfZ2VuZXJhdG9yPGRlZmF1bHRfcmVmZXJlbmNlPgogIHsgdHlwZWRlZiBkZWZh dWx0X3JlZmVyZW5jZSB0eXBlOyB9OwoKfQoKCgoKCnN0cnVjdCBuYW1lZF90ZW1wbGF0ZV9wYXJh bV9iYXNlIHsgfTsKCm5hbWVzcGFjZSBkZXRhaWwgewogIHN0cnVjdCB2YWx1ZV90eXBlX3RhZyB7 IH07CiAgc3RydWN0IHJlZmVyZW5jZV90YWcgeyB9OwogIHN0cnVjdCBwb2ludGVyX3RhZyB7IH07 CiAgc3RydWN0IGRpZmZlcmVuY2VfdHlwZV90YWcgeyB9OwogIHN0cnVjdCBpdGVyYXRvcl9jYXRl Z29yeV90YWcgeyB9OwoKCgogIHRlbXBsYXRlIDxjbGFzcyBBLCBjbGFzcyBCPgogIHN0cnVjdCBj b25zX3R5cGUgewogICAgdHlwZWRlZiBBIGZpcnN0X3R5cGU7CiAgICB0eXBlZGVmIEIgc2Vjb25k X3R5cGU7CiAgfTsKCn0KCnRlbXBsYXRlIDxjbGFzcyBWYWx1ZT4gc3RydWN0IHZhbHVlX3R5cGVf aXMgOiBwdWJsaWMgbmFtZWRfdGVtcGxhdGVfcGFyYW1fYmFzZQp7CiAgdHlwZWRlZiBkZXRhaWw6 OmNvbnNfdHlwZTxkZXRhaWw6OnZhbHVlX3R5cGVfdGFnLCBWYWx1ZT4gdHlwZTsKfTsKdGVtcGxh dGUgPGNsYXNzIFJlZmVyZW5jZT4gc3RydWN0IHJlZmVyZW5jZV9pcyA6IHB1YmxpYyBuYW1lZF90 ZW1wbGF0ZV9wYXJhbV9iYXNlCnsKICB0eXBlZGVmIGRldGFpbDo6Y29uc190eXBlPGRldGFpbDo6 cmVmZXJlbmNlX3RhZywgUmVmZXJlbmNlPiB0eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgUG9pbnRl cj4gc3RydWN0IHBvaW50ZXJfaXMgOiBwdWJsaWMgbmFtZWRfdGVtcGxhdGVfcGFyYW1fYmFzZQp7 CiAgdHlwZWRlZiBkZXRhaWw6OmNvbnNfdHlwZTxkZXRhaWw6OnBvaW50ZXJfdGFnLCBQb2ludGVy PiB0eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgRGlmZmVyZW5jZT4gc3RydWN0IGRpZmZlcmVuY2Vf dHlwZV9pcwogIDogcHVibGljIG5hbWVkX3RlbXBsYXRlX3BhcmFtX2Jhc2UKewogIHR5cGVkZWYg ZGV0YWlsOjpjb25zX3R5cGU8ZGV0YWlsOjpkaWZmZXJlbmNlX3R5cGVfdGFnLCBEaWZmZXJlbmNl PiB0eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3JDYXRlZ29yeT4gc3RydWN0IGl0ZXJh dG9yX2NhdGVnb3J5X2lzCiAgOiBwdWJsaWMgbmFtZWRfdGVtcGxhdGVfcGFyYW1fYmFzZQp7CiAg dHlwZWRlZiBkZXRhaWw6OmNvbnNfdHlwZTxkZXRhaWw6Oml0ZXJhdG9yX2NhdGVnb3J5X3RhZywg SXRlcmF0b3JDYXRlZ29yeT4gdHlwZTsKfTsKCm5hbWVzcGFjZSBkZXRhaWwgewoKICBzdHJ1Y3Qg ZW5kX29mX2xpc3QgeyB9OwojIDU5OSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v c3QvaXRlcmF0b3JfYWRhcHRvcnMuaHBwIiAzCiAgdGVtcGxhdGUgPGNsYXNzIEFzc29jTGlzdCwg Y2xhc3MgS2V5PiBzdHJ1Y3QgZmluZF9wYXJhbTsKCiAgdGVtcGxhdGUgPGNsYXNzIEtleT4KICBz dHJ1Y3QgZmluZF9wYXJhbTxlbmRfb2ZfbGlzdCwgS2V5PiB7IHR5cGVkZWYgZGVmYXVsdF9hcmd1 bWVudCB0eXBlOyB9OwoKCiAgdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVmFsdWUsIGNsYXNz IFJlc3Q+CiAgc3RydWN0IGZpbmRfcGFyYW08ZGV0YWlsOjpjb25zX3R5cGU8IGRldGFpbDo6Y29u c190eXBlPEtleSwgVmFsdWU+LCBSZXN0PiwgS2V5PiB7CiAgICB0eXBlZGVmIFZhbHVlIHR5cGU7 CiAgfTsKCgogIHRlbXBsYXRlIDxjbGFzcyBLZXkxLCBjbGFzcyBWYWx1ZSwgY2xhc3MgUmVzdCwg Y2xhc3MgS2V5Mj4KICBzdHJ1Y3QgZmluZF9wYXJhbTxkZXRhaWw6OmNvbnNfdHlwZTwgZGV0YWls Ojpjb25zX3R5cGU8S2V5MSwgVmFsdWU+LCBSZXN0PiwgS2V5Mj4gewogICAgdHlwZWRlZiB0eXBl bmFtZSBmaW5kX3BhcmFtPFJlc3QsIEtleTI+Ojp0eXBlIHR5cGU7CiAgfTsKCgogIHN0cnVjdCBt YWtlX25hbWVkX2FyZyB7CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBWYWx1ZT4KICAg IHN0cnVjdCBzZWxlY3QgeyB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlOjp0eXBlIHR5cGU7IH07CiAg fTsKICBzdHJ1Y3QgbWFrZV9rZXlfdmFsdWUgewogICAgdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xh c3MgVmFsdWU+CiAgICBzdHJ1Y3Qgc2VsZWN0IHsgdHlwZWRlZiBkZXRhaWw6OmNvbnNfdHlwZTxL ZXksIFZhbHVlPiB0eXBlOyB9OwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBWYWx1ZT4KICBzdHJ1 Y3QgaXNfbmFtZWRfcGFyYW1ldGVyCiAgewogICAgICBlbnVtIHsgdmFsdWUgPSBpc19jb252ZXJ0 aWJsZTwgdHlwZW5hbWUgYWRkX3JlZmVyZW5jZTwgVmFsdWUgPjo6dHlwZSwgYWRkX3JlZmVyZW5j ZTwgbmFtZWRfdGVtcGxhdGVfcGFyYW1fYmFzZSA+Ojp0eXBlID46OnZhbHVlIH07CiAgfTsKIyA2 NDAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2l0ZXJhdG9yX2FkYXB0b3Jz LmhwcCIgMwogIHRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIFZhbHVlPgogIHN0cnVjdCBtYWtl X2FyZyB7CgoKCgoKCiAgICBlbnVtIHsgaXNfbmFtZWQgPSBpc19uYW1lZF9wYXJhbWV0ZXI8VmFs dWU+Ojp2YWx1ZSB9OwogICAgdHlwZWRlZiB0eXBlbmFtZSBpZl90cnVlPChpc19uYW1lZCk+Ojp0 ZW1wbGF0ZQogICAgICB0aGVuPG1ha2VfbmFtZWRfYXJnLCBtYWtlX2tleV92YWx1ZT46OnR5cGUg TWFrZTsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIE1ha2U6OnRlbXBsYXRlIHNlbGVjdDxLZXksIFZh bHVlPjo6dHlwZSB0eXBlOwogIH07CgoKCiAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19k ZWZhdWx0IHsgdHlwZWRlZiB0eXBlX3RyYWl0czo6bm9fdHlwZSB0eXBlOyB9OwogIHRlbXBsYXRl IDw+IHN0cnVjdCBpc19kZWZhdWx0PGRlZmF1bHRfYXJndW1lbnQ+CiAgeyB0eXBlZGVmIHR5cGVf dHJhaXRzOjp5ZXNfdHlwZSB0eXBlOyB9OwoKICBzdHJ1Y3QgY2hvb3NlX2RlZmF1bHQgewogICAg dGVtcGxhdGUgPGNsYXNzIEFyZywgY2xhc3MgRGVmYXVsdEdlbiwgY2xhc3MgQmFzZSwgY2xhc3Mg VHJhaXRzPgogICAgc3RydWN0IHNlbGVjdCB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgZGVmYXVs dF9nZW5lcmF0b3I8RGVmYXVsdEdlbj46OnR5cGUgR2VuOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IEdlbjo6dGVtcGxhdGUgc2VsZWN0PEJhc2UsVHJhaXRzPjo6dHlwZSB0eXBlOwogICAgfTsKICB9 OwogIHN0cnVjdCBjaG9vc2VfYXJnIHsKICAgIHRlbXBsYXRlIDxjbGFzcyBBcmcsIGNsYXNzIERl ZmF1bHRHZW4sIGNsYXNzIEJhc2UsIGNsYXNzIFRyYWl0cz4KICAgIHN0cnVjdCBzZWxlY3Qgewog ICAgICB0eXBlZGVmIEFyZyB0eXBlOwogICAgfTsKICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgVXNl RGVmYXVsdD4KICBzdHJ1Y3QgY2hvb3NlX2FyZ19vcl9kZWZhdWx0IHsgdHlwZWRlZiBjaG9vc2Vf YXJnIHR5cGU7IH07CiAgdGVtcGxhdGUgPD4gc3RydWN0IGNob29zZV9hcmdfb3JfZGVmYXVsdDx0 eXBlX3RyYWl0czo6eWVzX3R5cGU+IHsKICAgIHR5cGVkZWYgY2hvb3NlX2RlZmF1bHQgdHlwZTsK ICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgQXJnLCBjbGFzcyBEZWZhdWx0R2VuLCBjbGFzcyBCYXNl LCBjbGFzcyBUcmFpdHM+CiAgY2xhc3MgcmVzb2x2ZV9kZWZhdWx0IHsKICAgIHR5cGVkZWYgdHlw ZW5hbWUgY2hvb3NlX2FyZ19vcl9kZWZhdWx0PHR5cGVuYW1lIGlzX2RlZmF1bHQ8QXJnPjo6dHlw ZT46OnR5cGUKICAgICAgU2VsZWN0b3I7CiAgcHVibGljOgogICAgdHlwZWRlZiB0eXBlbmFtZSBT ZWxlY3RvcgogICAgICA6OnRlbXBsYXRlIHNlbGVjdDxBcmcsIERlZmF1bHRHZW4sIEJhc2UsIFRy YWl0cz46OnR5cGUgdHlwZTsKICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZSwgY2xhc3MgVmFs dWUsIGNsYXNzIFJlZmVyZW5jZSwgY2xhc3MgUG9pbnRlciwKICAgICAgICAgICAgY2xhc3MgQ2F0 ZWdvcnksIGNsYXNzIERpc3RhbmNlPgogIGNsYXNzIGl0ZXJhdG9yX2FkYXB0b3JfdHJhaXRzX2dl bgogIHsKCgoKCgogICAgdHlwZWRlZiBkZXRhaWw6OmNvbnNfdHlwZTwgdHlwZW5hbWUgbWFrZV9h cmc8dmFsdWVfdHlwZV90YWcsIFZhbHVlPjo6dHlwZSwKICAgICAgZGV0YWlsOjpjb25zX3R5cGU8 dHlwZW5hbWUgbWFrZV9hcmc8cmVmZXJlbmNlX3RhZywgUmVmZXJlbmNlPjo6dHlwZSwKICAgICAg ZGV0YWlsOjpjb25zX3R5cGU8dHlwZW5hbWUgbWFrZV9hcmc8cG9pbnRlcl90YWcsIFBvaW50ZXI+ Ojp0eXBlLAogICAgICBkZXRhaWw6OmNvbnNfdHlwZTx0eXBlbmFtZSBtYWtlX2FyZzxpdGVyYXRv cl9jYXRlZ29yeV90YWcsIENhdGVnb3J5Pjo6dHlwZSwKICAgICAgZGV0YWlsOjpjb25zX3R5cGU8 dHlwZW5hbWUgbWFrZV9hcmc8ZGlmZmVyZW5jZV90eXBlX3RhZywgRGlzdGFuY2U+Ojp0eXBlLAog ICAgICAgICAgICAgICAgZW5kX29mX2xpc3Q+ID4gPiA+ID4gQXJnTGlzdDsKCgogICAgdHlwZWRl ZiB0eXBlbmFtZSBmaW5kX3BhcmFtPEFyZ0xpc3QsIHZhbHVlX3R5cGVfdGFnPjo6dHlwZSBWYWw7 CiAgICB0eXBlZGVmIHR5cGVuYW1lIGZpbmRfcGFyYW08QXJnTGlzdCwgZGlmZmVyZW5jZV90eXBl X3RhZz46OnR5cGUgRGlmZjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgZmluZF9wYXJhbTxBcmdMaXN0 LCBpdGVyYXRvcl9jYXRlZ29yeV90YWc+Ojp0eXBlIENhdDsKICAgIHR5cGVkZWYgdHlwZW5hbWUg ZmluZF9wYXJhbTxBcmdMaXN0LCBwb2ludGVyX3RhZz46OnR5cGUgUHRyOwogICAgdHlwZWRlZiB0 eXBlbmFtZSBmaW5kX3BhcmFtPEFyZ0xpc3QsIHJlZmVyZW5jZV90YWc+Ojp0eXBlIFJlZjsKCiAg ICB0eXBlZGVmIGJvb3N0OjppdGVyYXRvcjxDYXRlZ29yeSwgVmFsdWUsIERpc3RhbmNlLCBQb2lu dGVyLCBSZWZlcmVuY2U+CiAgICAgIFRyYWl0czA7CgoKICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVz b2x2ZV9kZWZhdWx0PFZhbCwgZGVmYXVsdF92YWx1ZV90eXBlLCBCYXNlLCBUcmFpdHMwPjo6dHlw ZQogICAgICB2YWx1ZV90eXBlOwoKICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVzb2x2ZV9kZWZhdWx0 PERpZmYsIGRlZmF1bHRfZGlmZmVyZW5jZV90eXBlLCBCYXNlLAogICAgICBUcmFpdHMwPjo6dHlw ZSBkaWZmZXJlbmNlX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVuYW1lIHJlc29sdmVfZGVmYXVsdDxD YXQsIGRlZmF1bHRfaXRlcmF0b3JfY2F0ZWdvcnksIEJhc2UsCiAgICAgIFRyYWl0czA+Ojp0eXBl IGl0ZXJhdG9yX2NhdGVnb3J5OwoKICAgIHR5cGVkZWYgYm9vc3Q6Oml0ZXJhdG9yPGl0ZXJhdG9y X2NhdGVnb3J5LCB2YWx1ZV90eXBlLCBkaWZmZXJlbmNlX3R5cGUsCiAgICAgIFBvaW50ZXIsIFJl ZmVyZW5jZT4gVHJhaXRzMTsKCgoKCiAgICB0eXBlZGVmIHR5cGVuYW1lIHJlc29sdmVfZGVmYXVs dDxQdHIsIGRlZmF1bHRfcG9pbnRlciwgQmFzZSwgVHJhaXRzMT46OnR5cGUKICAgICAgcG9pbnRl cjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVzb2x2ZV9kZWZhdWx0PFJlZiwgZGVmYXVsdF9yZWZl cmVuY2UsIEJhc2UsIFRyYWl0czE+Ojp0eXBlCiAgICAgIHJlZmVyZW5jZTsKCiAgcHVibGljOgog ICAgdHlwZWRlZiBib29zdDo6aXRlcmF0b3I8aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgIHR5cGVu YW1lIHJlbW92ZV9jb25zdDx2YWx1ZV90eXBlPjo6dHlwZSwKICAgICAgZGlmZmVyZW5jZV90eXBl LCBwb2ludGVyLCByZWZlcmVuY2U+IHR5cGU7CiAgfTsKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2F0 ZWdvcnksIGNsYXNzIFZhbHVlLCBjbGFzcyBEaWZmZXJlbmNlLCBjbGFzcyBQb2ludGVyLCBjbGFz cyBSZWZlcmVuY2U+CiAgc3RydWN0IHZhbGlkYXRvcgogIHsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfaW5wdXRfb3Jfb3V0cHV0X2l0ZXIgPSAoYm9vc3Q6OmlzX2NvbnZlcnRpYmxlPENhdGVn b3J5KixzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZyo+Ojp2YWx1ZSB8IGJvb3N0Ojppc19jb252ZXJ0 aWJsZTxDYXRlZ29yeSosc3RkOjpvdXRwdXRfaXRlcmF0b3JfdGFnKj46OnZhbHVlKTsKCgoKCgog ICAgICB0eXBlZGVmIDo6Ym9vc3Q6OnN0YXRpY19hc3NlcnRfdGVzdDwgc2l6ZW9mKDo6Ym9vc3Q6 OlNUQVRJQ19BU1NFUlRJT05fRkFJTFVSRTwgKGJvb2wpKCBpc19pbnB1dF9vcl9vdXRwdXRfaXRl ciApID4pPiBib29zdF9zdGF0aWNfYXNzZXJ0X3R5cGVkZWZfNzUzOwoKCgogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBmb3J3YXJkX2l0ZXJfd2l0aF9yZWFsX3JlZmVyZW5jZSA9ICgoIWJvb3N0Ojpp c19jb252ZXJ0aWJsZTxDYXRlZ29yeSosc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyo+Ojp2YWx1 ZSkgfCBib29zdDo6aXNfc2FtZTxSZWZlcmVuY2UsVmFsdWUmPjo6dmFsdWUgfCBib29zdDo6aXNf c2FtZTxSZWZlcmVuY2UsdHlwZW5hbWUgYWRkX2NvbnN0PFZhbHVlPjo6dHlwZSY+Ojp2YWx1ZSk7 CgoKCgoKICAgICAgdHlwZWRlZiA6OmJvb3N0OjpzdGF0aWNfYXNzZXJ0X3Rlc3Q8IHNpemVvZig6 OmJvb3N0OjpTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU8IChib29sKSggZm9yd2FyZF9pdGVyX3dp dGhfcmVhbF9yZWZlcmVuY2UgKSA+KT4gYm9vc3Rfc3RhdGljX2Fzc2VydF90eXBlZGVmXzc2MzsK ICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUmVzdWx0PiBzdHJ1Y3QgZGVwZW5kZW50 CiAgewogICAgdHlwZWRlZiBSZXN1bHQgdHlwZTsKICB9OwoKfQojIDgxMCAiL2hvbWUvY29tcGJp by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvaXRlcmF0b3JfYWRhcHRvcnMuaHBwIiAzCnRlbXBsYXRl IDxjbGFzcyBCYXNlLCBjbGFzcyBQb2xpY2llcywKICAgIGNsYXNzIFZhbHVlID0gOjpib29zdDo6 ZGV0YWlsOjpkZWZhdWx0X2FyZ3VtZW50LAogICAgY2xhc3MgUmVmZXJlbmNlID0gOjpib29zdDo6 ZGV0YWlsOjpkZWZhdWx0X2FyZ3VtZW50LAogICAgY2xhc3MgUG9pbnRlciA9IDo6Ym9vc3Q6OmRl dGFpbDo6ZGVmYXVsdF9hcmd1bWVudCwKICAgIGNsYXNzIENhdGVnb3J5ID0gOjpib29zdDo6ZGV0 YWlsOjpkZWZhdWx0X2FyZ3VtZW50LAogICAgY2xhc3MgRGlzdGFuY2UgPSA6OmJvb3N0OjpkZXRh aWw6OmRlZmF1bHRfYXJndW1lbnQKICAgICAgICAgPgpzdHJ1Y3QgaXRlcmF0b3JfYWRhcHRvciA6 CgoKCgoKCiAgICBkZXRhaWw6Oml0ZXJhdG9yX2FkYXB0b3JfdHJhaXRzX2dlbjxCYXNlLFZhbHVl LFJlZmVyZW5jZSxQb2ludGVyLENhdGVnb3J5LERpc3RhbmNlPjo6dHlwZQoKewogICAgdHlwZWRl ZiBpdGVyYXRvcl9hZGFwdG9yPEJhc2UsUG9saWNpZXMsVmFsdWUsUmVmZXJlbmNlLFBvaW50ZXIs Q2F0ZWdvcnksRGlzdGFuY2U+IHNlbGY7CiBwdWJsaWM6CiAgICB0eXBlZGVmIGRldGFpbDo6aXRl cmF0b3JfYWRhcHRvcl90cmFpdHNfZ2VuPEJhc2UsVmFsdWUsUmVmZXJlbmNlLFBvaW50ZXIsQ2F0 ZWdvcnksRGlzdGFuY2U+IFRyYWl0c0dlbjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgVHJhaXRzR2Vu Ojp0eXBlIFRyYWl0czsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIFRyYWl0czo6ZGlmZmVyZW5jZV90 eXBlIGRpZmZlcmVuY2VfdHlwZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgVHJhaXRzOjp2YWx1ZV90 eXBlIHZhbHVlX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVuYW1lIFRyYWl0czo6cG9pbnRlciBwb2lu dGVyOwogICAgdHlwZWRlZiB0eXBlbmFtZSBUcmFpdHM6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAg ICB0eXBlZGVmIHR5cGVuYW1lIFRyYWl0czo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0 ZWdvcnk7CgogICAgdHlwZWRlZiBCYXNlIGJhc2VfdHlwZTsKICAgIHR5cGVkZWYgUG9saWNpZXMg cG9saWNpZXNfdHlwZTsKCiBwcml2YXRlOgogICAgdHlwZWRlZiBkZXRhaWw6OnZhbGlkYXRvcjwK ICAgICAgICBpdGVyYXRvcl9jYXRlZ29yeSx2YWx1ZV90eXBlLGRpZmZlcmVuY2VfdHlwZSxwb2lu dGVyLHJlZmVyZW5jZQogICAgICAgID4gY29uY2VwdF9jaGVjazsKCiBwdWJsaWM6CiAgICBpdGVy YXRvcl9hZGFwdG9yKCkKICAgIHsKICAgIH0KCiAgICBleHBsaWNpdAogICAgaXRlcmF0b3JfYWRh cHRvcihjb25zdCBCYXNlJiBpdCwgY29uc3QgUG9saWNpZXMmIHAgPSBQb2xpY2llcygpKQogICAg ICAgIDogbV9pdGVyX3AoaXQsIHApIHsKICAgICAgICBwb2xpY2llcygpLmluaXRpYWxpemUoYmFz ZSgpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgSXRlcjIsIGNsYXNzIFZhbHVlMiwgY2xh c3MgUG9pbnRlcjIsIGNsYXNzIFJlZmVyZW5jZTI+CiAgICBpdGVyYXRvcl9hZGFwdG9yICgKICAg ICAgICBjb25zdCBpdGVyYXRvcl9hZGFwdG9yPEl0ZXIyLFBvbGljaWVzLFZhbHVlMixSZWZlcmVu Y2UyLFBvaW50ZXIyLENhdGVnb3J5LERpc3RhbmNlPiYgc3JjKQogICAgICAgICAgICA6IG1faXRl cl9wKHNyYy5iYXNlKCksIHNyYy5wb2xpY2llcygpKQogICAgewogICAgICAgIHBvbGljaWVzKCku aW5pdGlhbGl6ZShiYXNlKCkpOwogICAgfQojIDg3MyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu Y2x1ZGUvYm9vc3QvaXRlcmF0b3JfYWRhcHRvcnMuaHBwIiAzCiAgICByZWZlcmVuY2Ugb3BlcmF0 b3IqKCkgY29uc3QgewogICAgICAgICByZXR1cm4gcG9saWNpZXMoKS5kZXJlZmVyZW5jZSgqdGhp cyk7CiAgICB9CgoKCgoKCiAgICB0eXBlbmFtZSBib29zdDo6ZGV0YWlsOjpvcGVyYXRvcl9hcnJv d19yZXN1bHRfZ2VuZXJhdG9yPHZhbHVlX3R5cGUscmVmZXJlbmNlLHBvaW50ZXI+Ojp0eXBlCiAg ICBvcGVyYXRvci0+KCkgY29uc3QKICAgICAgICB7IHJldHVybiBkZXRhaWw6Om9wZXJhdG9yX2Fy cm93KCp0aGlzLCBpdGVyYXRvcl9jYXRlZ29yeSgpKTsgfQoKCgoKCiAgICB0ZW1wbGF0ZSA8Y2xh c3MgZGlmZl90eXBlPgogICAgdHlwZW5hbWUgZGV0YWlsOjpkZXBlbmRlbnQ8ZGlmZl90eXBlLCB2 YWx1ZV90eXBlPjo6dHlwZSBvcGVyYXRvcltdKGRpZmZfdHlwZSBuKSBjb25zdAogICAgICAgIHsg cmV0dXJuICooKnRoaXMgKyBuKTsgfQoKICAgIHNlbGYmIG9wZXJhdG9yKysoKSB7CgogICAgICAg IHBvbGljaWVzKCkuaW5jcmVtZW50KCp0aGlzKTsKCgoKCgogICAgICAgIHJldHVybiAqdGhpczsK ICAgIH0KCiAgICBzZWxmIG9wZXJhdG9yKysoaW50KSB7IHNlbGYgdG1wKCp0aGlzKTsgKysqdGhp czsgcmV0dXJuIHRtcDsgfQoKICAgIHNlbGYmIG9wZXJhdG9yLS0oKSB7CgogICAgICAgIHBvbGlj aWVzKCkuZGVjcmVtZW50KCp0aGlzKTsKCgoKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog ICAgc2VsZiBvcGVyYXRvci0tKGludCkgeyBzZWxmIHRtcCgqdGhpcyk7IC0tKnRoaXM7IHJldHVy biB0bXA7IH0KCiAgICBzZWxmJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBuKSB7CiAgICAg ICAgcG9saWNpZXMoKS5hZHZhbmNlKCp0aGlzLCBuKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAg ICB9CgogICAgc2VsZiYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgbikgewogICAgICAgIHBv bGljaWVzKCkuYWR2YW5jZSgqdGhpcywgLW4pOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0K CiAgICBiYXNlX3R5cGUgY29uc3QmIGJhc2UoKSBjb25zdCB7IHJldHVybiBtX2l0ZXJfcC5maXJz dCgpOyB9CgoKCiAgICBzZWxmIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgeCkgY29uc3QKICAg ICAgICB7IHNlbGYgcmVzdWx0KCp0aGlzKTsgcmV0dXJuIHJlc3VsdCAtPSB4OyB9CnByaXZhdGU6 CiAgICBjb21wcmVzc2VkX3BhaXI8QmFzZSxQb2xpY2llcz4gbV9pdGVyX3A7CgpwdWJsaWM6CiAg ICBiYXNlX3R5cGUmIGJhc2UoKSB7IHJldHVybiBtX2l0ZXJfcC5maXJzdCgpOyB9CiAgICBQb2xp Y2llcyYgcG9saWNpZXMoKSB7IHJldHVybiBtX2l0ZXJfcC5zZWNvbmQoKTsgfQogICAgY29uc3Qg UG9saWNpZXMmIHBvbGljaWVzKCkgY29uc3QgeyByZXR1cm4gbV9pdGVyX3Auc2Vjb25kKCk7IH0K fTsKCnRlbXBsYXRlIDxjbGFzcyBCYXNlLCBjbGFzcyBQb2xpY2llcywgY2xhc3MgVmFsdWUsIGNs YXNzIFJlZmVyZW5jZSwgY2xhc3MgUG9pbnRlciwKICAgIGNsYXNzIENhdGVnb3J5LCBjbGFzcyBE aXN0YW5jZTEsIGNsYXNzIERpc3RhbmNlMj4KaXRlcmF0b3JfYWRhcHRvcjxCYXNlLFBvbGljaWVz LFZhbHVlLFJlZmVyZW5jZSxQb2ludGVyLENhdGVnb3J5LERpc3RhbmNlMT4Kb3BlcmF0b3IrKAog ICAgaXRlcmF0b3JfYWRhcHRvcjxCYXNlLFBvbGljaWVzLFZhbHVlLFJlZmVyZW5jZSxQb2ludGVy LENhdGVnb3J5LERpc3RhbmNlMT4gcCwKICAgIERpc3RhbmNlMiB4KQp7CiAgICByZXR1cm4gcCAr PSB4Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQmFzZSwgY2xhc3MgUG9saWNpZXMsIGNsYXNzIFZhbHVl LCBjbGFzcyBSZWZlcmVuY2UsIGNsYXNzIFBvaW50ZXIsCiAgICBjbGFzcyBDYXRlZ29yeSwgY2xh c3MgRGlzdGFuY2UxLCBjbGFzcyBEaXN0YW5jZTI+Cml0ZXJhdG9yX2FkYXB0b3I8QmFzZSxQb2xp Y2llcyxWYWx1ZSxSZWZlcmVuY2UsUG9pbnRlcixDYXRlZ29yeSxEaXN0YW5jZTE+Cm9wZXJhdG9y KygKICAgIERpc3RhbmNlMiB4LAogICAgaXRlcmF0b3JfYWRhcHRvcjxCYXNlLFBvbGljaWVzLFZh bHVlLFJlZmVyZW5jZSxQb2ludGVyLENhdGVnb3J5LERpc3RhbmNlMT4gcCkKewogICAgcmV0dXJu IHAgKz0geDsKfQoKdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yMSwgY2xhc3MgSXRlcmF0b3IyLCBj bGFzcyBQb2xpY2llcywgY2xhc3MgVmFsdWUxLCBjbGFzcyBWYWx1ZTIsCiAgICBjbGFzcyBSZWZl cmVuY2UxLCBjbGFzcyBSZWZlcmVuY2UyLCBjbGFzcyBQb2ludGVyMSwgY2xhc3MgUG9pbnRlcjIs IGNsYXNzIENhdGVnb3J5LAogICAgY2xhc3MgRGlzdGFuY2U+CnR5cGVuYW1lIGl0ZXJhdG9yX2Fk YXB0b3I8SXRlcmF0b3IxLFBvbGljaWVzLFZhbHVlMSxSZWZlcmVuY2UxLFBvaW50ZXIxLENhdGVn b3J5LERpc3RhbmNlPjo6ZGlmZmVyZW5jZV90eXBlCm9wZXJhdG9yLSgKICAgIGNvbnN0IGl0ZXJh dG9yX2FkYXB0b3I8SXRlcmF0b3IxLFBvbGljaWVzLFZhbHVlMSxSZWZlcmVuY2UxLFBvaW50ZXIx LENhdGVnb3J5LERpc3RhbmNlPiYgeCwKICAgIGNvbnN0IGl0ZXJhdG9yX2FkYXB0b3I8SXRlcmF0 b3IyLFBvbGljaWVzLFZhbHVlMixSZWZlcmVuY2UyLFBvaW50ZXIyLENhdGVnb3J5LERpc3RhbmNl PiYgeSkKewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfYWRhcHRvcjxJdGVyYXRvcjEsUG9s aWNpZXMsVmFsdWUxLFJlZmVyZW5jZTEsCiAgICBQb2ludGVyMSxDYXRlZ29yeSxEaXN0YW5jZT46 OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgcmV0dXJuIHgucG9saWNpZXMoKS5k aXN0YW5jZSh5LCB4KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcjEsIGNsYXNzIEl0ZXJh dG9yMiwgY2xhc3MgUG9saWNpZXMsIGNsYXNzIFZhbHVlMSwgY2xhc3MgVmFsdWUyLAogICAgY2xh c3MgUmVmZXJlbmNlMSwgY2xhc3MgUmVmZXJlbmNlMiwgY2xhc3MgUG9pbnRlcjEsIGNsYXNzIFBv aW50ZXIyLAogICAgY2xhc3MgQ2F0ZWdvcnksIGNsYXNzIERpc3RhbmNlPgppbmxpbmUgYm9vbApv cGVyYXRvcj09KAogICAgY29uc3QgaXRlcmF0b3JfYWRhcHRvcjxJdGVyYXRvcjEsUG9saWNpZXMs VmFsdWUxLFJlZmVyZW5jZTEsUG9pbnRlcjEsQ2F0ZWdvcnksRGlzdGFuY2U+JiB4LAogICAgY29u c3QgaXRlcmF0b3JfYWRhcHRvcjxJdGVyYXRvcjIsUG9saWNpZXMsVmFsdWUyLFJlZmVyZW5jZTIs UG9pbnRlcjIsQ2F0ZWdvcnksRGlzdGFuY2U+JiB5KQp7CiAgICByZXR1cm4geC5wb2xpY2llcygp LmVxdWFsKHgsIHkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3IxLCBjbGFzcyBJdGVyYXRv cjIsIGNsYXNzIFBvbGljaWVzLCBjbGFzcyBWYWx1ZTEsIGNsYXNzIFZhbHVlMiwKICAgIGNsYXNz IFJlZmVyZW5jZTEsIGNsYXNzIFJlZmVyZW5jZTIsIGNsYXNzIFBvaW50ZXIxLCBjbGFzcyBQb2lu dGVyMiwKICAgIGNsYXNzIENhdGVnb3J5LCBjbGFzcyBEaXN0YW5jZT4KaW5saW5lIGJvb2wKb3Bl cmF0b3I8KAogICAgY29uc3QgaXRlcmF0b3JfYWRhcHRvcjxJdGVyYXRvcjEsUG9saWNpZXMsVmFs dWUxLFJlZmVyZW5jZTEsUG9pbnRlcjEsQ2F0ZWdvcnksRGlzdGFuY2U+JiB4LAogICAgY29uc3Qg aXRlcmF0b3JfYWRhcHRvcjxJdGVyYXRvcjIsUG9saWNpZXMsVmFsdWUyLFJlZmVyZW5jZTIsUG9p bnRlcjIsQ2F0ZWdvcnksRGlzdGFuY2U+JiB5KQp7CiAgICByZXR1cm4geC5wb2xpY2llcygpLmRp c3RhbmNlKHksIHgpIDwgMDsKfQoKdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yMSwgY2xhc3MgSXRl cmF0b3IyLCBjbGFzcyBQb2xpY2llcywgY2xhc3MgVmFsdWUxLCBjbGFzcyBWYWx1ZTIsCiAgICBj bGFzcyBSZWZlcmVuY2UxLCBjbGFzcyBSZWZlcmVuY2UyLCBjbGFzcyBQb2ludGVyMSwgY2xhc3Mg UG9pbnRlcjIsCiAgICBjbGFzcyBDYXRlZ29yeSwgY2xhc3MgRGlzdGFuY2U+CmlubGluZSBib29s Cm9wZXJhdG9yPigKICAgIGNvbnN0IGl0ZXJhdG9yX2FkYXB0b3I8SXRlcmF0b3IxLFBvbGljaWVz LFZhbHVlMSxSZWZlcmVuY2UxLFBvaW50ZXIxLENhdGVnb3J5LERpc3RhbmNlPiYgeCwKICAgIGNv bnN0IGl0ZXJhdG9yX2FkYXB0b3I8SXRlcmF0b3IyLFBvbGljaWVzLFZhbHVlMixSZWZlcmVuY2Uy LFBvaW50ZXIyLENhdGVnb3J5LERpc3RhbmNlPiYgeSkKewogICAgcmV0dXJuIHgucG9saWNpZXMo KS5kaXN0YW5jZSh5LCB4KSA+IDA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcjEsIGNsYXNz IEl0ZXJhdG9yMiwgY2xhc3MgUG9saWNpZXMsIGNsYXNzIFZhbHVlMSwgY2xhc3MgVmFsdWUyLAog ICAgY2xhc3MgUmVmZXJlbmNlMSwgY2xhc3MgUmVmZXJlbmNlMiwgY2xhc3MgUG9pbnRlcjEsIGNs YXNzIFBvaW50ZXIyLAogICAgY2xhc3MgQ2F0ZWdvcnksIGNsYXNzIERpc3RhbmNlPgppbmxpbmUg Ym9vbApvcGVyYXRvcj49KAogICAgY29uc3QgaXRlcmF0b3JfYWRhcHRvcjxJdGVyYXRvcjEsUG9s aWNpZXMsVmFsdWUxLFJlZmVyZW5jZTEsUG9pbnRlcjEsQ2F0ZWdvcnksRGlzdGFuY2U+JiB4LAog ICAgY29uc3QgaXRlcmF0b3JfYWRhcHRvcjxJdGVyYXRvcjIsUG9saWNpZXMsVmFsdWUyLFJlZmVy ZW5jZTIsUG9pbnRlcjIsQ2F0ZWdvcnksRGlzdGFuY2U+JiB5KQp7CiAgICByZXR1cm4geC5wb2xp Y2llcygpLmRpc3RhbmNlKHksIHgpID49IDA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcjEs IGNsYXNzIEl0ZXJhdG9yMiwgY2xhc3MgUG9saWNpZXMsIGNsYXNzIFZhbHVlMSwgY2xhc3MgVmFs dWUyLAogICAgY2xhc3MgUmVmZXJlbmNlMSwgY2xhc3MgUmVmZXJlbmNlMiwgY2xhc3MgUG9pbnRl cjEsIGNsYXNzIFBvaW50ZXIyLAogICAgY2xhc3MgQ2F0ZWdvcnksIGNsYXNzIERpc3RhbmNlPgpp bmxpbmUgYm9vbApvcGVyYXRvcjw9KAogICAgY29uc3QgaXRlcmF0b3JfYWRhcHRvcjxJdGVyYXRv cjEsUG9saWNpZXMsVmFsdWUxLFJlZmVyZW5jZTEsUG9pbnRlcjEsQ2F0ZWdvcnksRGlzdGFuY2U+ JiB4LAogICAgY29uc3QgaXRlcmF0b3JfYWRhcHRvcjxJdGVyYXRvcjIsUG9saWNpZXMsVmFsdWUy LFJlZmVyZW5jZTIsUG9pbnRlcjIsQ2F0ZWdvcnksRGlzdGFuY2U+JiB5KQp7CiAgICByZXR1cm4g eC5wb2xpY2llcygpLmRpc3RhbmNlKHksIHgpIDw9IDA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBJdGVy YXRvcjEsIGNsYXNzIEl0ZXJhdG9yMiwgY2xhc3MgUG9saWNpZXMsIGNsYXNzIFZhbHVlMSwgY2xh c3MgVmFsdWUyLAogICAgY2xhc3MgUmVmZXJlbmNlMSwgY2xhc3MgUmVmZXJlbmNlMiwgY2xhc3Mg UG9pbnRlcjEsIGNsYXNzIFBvaW50ZXIyLAogICAgY2xhc3MgQ2F0ZWdvcnksIGNsYXNzIERpc3Rh bmNlPgppbmxpbmUgYm9vbApvcGVyYXRvciE9KAogICAgY29uc3QgaXRlcmF0b3JfYWRhcHRvcjxJ dGVyYXRvcjEsUG9saWNpZXMsVmFsdWUxLFJlZmVyZW5jZTEsUG9pbnRlcjEsQ2F0ZWdvcnksRGlz dGFuY2U+JiB4LAogICAgY29uc3QgaXRlcmF0b3JfYWRhcHRvcjxJdGVyYXRvcjIsUG9saWNpZXMs VmFsdWUyLFJlZmVyZW5jZTIsUG9pbnRlcjIsQ2F0ZWdvcnksRGlzdGFuY2U+JiB5KQp7CiAgICBy ZXR1cm4gIXgucG9saWNpZXMoKS5lcXVhbCh4LCB5KTsKfQojIDEwNTAgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2l0ZXJhdG9yX2FkYXB0b3JzLmhwcCIgMwp0ZW1wbGF0ZSA8 Y2xhc3MgQWRhcHRhYmxlVW5hcnlGdW5jdGlvbj4Kc3RydWN0IHRyYW5zZm9ybV9pdGVyYXRvcl9w b2xpY2llcyA6IHB1YmxpYyBkZWZhdWx0X2l0ZXJhdG9yX3BvbGljaWVzCnsKICAgIHRyYW5zZm9y bV9pdGVyYXRvcl9wb2xpY2llcygpIHsgfQogICAgdHJhbnNmb3JtX2l0ZXJhdG9yX3BvbGljaWVz KGNvbnN0IEFkYXB0YWJsZVVuYXJ5RnVuY3Rpb24mIGYpIDogbV9mKGYpIHsgfQoKICAgIHRlbXBs YXRlIDxjbGFzcyBJdGVyYXRvckFkYXB0b3I+CiAgICB0eXBlbmFtZSBJdGVyYXRvckFkYXB0b3I6 OnJlZmVyZW5jZQogICAgZGVyZWZlcmVuY2UoY29uc3QgSXRlcmF0b3JBZGFwdG9yJiBpdGVyKSBj b25zdAogICAgICAgIHsgcmV0dXJuIG1fZigqaXRlci5iYXNlKCkpOyB9CgogICAgQWRhcHRhYmxl VW5hcnlGdW5jdGlvbiBtX2Y7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQWRhcHRhYmxlVW5hcnlGdW5j dGlvbiwgY2xhc3MgSXRlcmF0b3I+CmNsYXNzIHRyYW5zZm9ybV9pdGVyYXRvcl9nZW5lcmF0b3IK ewogICAgdHlwZWRlZiB0eXBlbmFtZSBBZGFwdGFibGVVbmFyeUZ1bmN0aW9uOjpyZXN1bHRfdHlw ZSB2YWx1ZV90eXBlOwpwdWJsaWM6CiAgICB0eXBlZGVmIGl0ZXJhdG9yX2FkYXB0b3I8SXRlcmF0 b3IsCiAgICAgIHRyYW5zZm9ybV9pdGVyYXRvcl9wb2xpY2llczxBZGFwdGFibGVVbmFyeUZ1bmN0 aW9uPiwKICAgICAgICB2YWx1ZV90eXBlLCB2YWx1ZV90eXBlLCB2YWx1ZV90eXBlKiwgc3RkOjpp bnB1dF9pdGVyYXRvcl90YWc+CiAgICAgIHR5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQWRhcHRh YmxlVW5hcnlGdW5jdGlvbiwgY2xhc3MgSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSB0cmFuc2Zv cm1faXRlcmF0b3JfZ2VuZXJhdG9yPEFkYXB0YWJsZVVuYXJ5RnVuY3Rpb24sSXRlcmF0b3I+Ojp0 eXBlCm1ha2VfdHJhbnNmb3JtX2l0ZXJhdG9yKAogICAgSXRlcmF0b3IgYmFzZSwKICAgIGNvbnN0 IEFkYXB0YWJsZVVuYXJ5RnVuY3Rpb24mIGYgPSBBZGFwdGFibGVVbmFyeUZ1bmN0aW9uKCkpCnsK ICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhbnNmb3JtX2l0ZXJhdG9yX2dlbmVyYXRvcjxBZGFwdGFi bGVVbmFyeUZ1bmN0aW9uLEl0ZXJhdG9yPjo6dHlwZSByZXN1bHRfdDsKICAgIHJldHVybiByZXN1 bHRfdChiYXNlLCBmKTsKfQojIDExMDAgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jv b3N0L2l0ZXJhdG9yX2FkYXB0b3JzLmhwcCIgMwpzdHJ1Y3QgaW5kaXJlY3RfaXRlcmF0b3JfcG9s aWNpZXMgOiBwdWJsaWMgZGVmYXVsdF9pdGVyYXRvcl9wb2xpY2llcwp7CiAgICB0ZW1wbGF0ZSA8 Y2xhc3MgSXRlcmF0b3JBZGFwdG9yPgogICAgdHlwZW5hbWUgSXRlcmF0b3JBZGFwdG9yOjpyZWZl cmVuY2UgZGVyZWZlcmVuY2UoY29uc3QgSXRlcmF0b3JBZGFwdG9yJiB4KSBjb25zdAogICAgICAg IHsgcmV0dXJuICoqeC5iYXNlKCk7IH0KfTsKCm5hbWVzcGFjZSBkZXRhaWwgewoKICB0ZW1wbGF0 ZSA8Y2xhc3MgVD4KICBzdHJ1Y3QgdHJhaXRzX29mX3ZhbHVlX3R5cGUgewogICAgICB0eXBlZGVm IHR5cGVuYW1lIGJvb3N0OjpkZXRhaWw6Oml0ZXJhdG9yX3RyYWl0czxUPjo6dmFsdWVfdHlwZSBv dXRlcl92YWx1ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6ZGV0YWlsOjppdGVyYXRv cl90cmFpdHM8b3V0ZXJfdmFsdWU+Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgYm9vc3Q6OmRldGFpbDo6aXRlcmF0b3JfdHJhaXRzPG91dGVyX3ZhbHVlPjo6 cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6ZGV0YWls OjppdGVyYXRvcl90cmFpdHM8b3V0ZXJfdmFsdWU+Ojpwb2ludGVyIHBvaW50ZXI7CiAgfTsKCn0K CnRlbXBsYXRlIDxjbGFzcyBPdXRlckl0ZXJhdG9yLAogICAgICAgICAgY2xhc3MgVmFsdWUKCiAg ICAgICAgICAgICAgICA9IHR5cGVuYW1lIGRldGFpbDo6dHJhaXRzX29mX3ZhbHVlX3R5cGU8CiAg ICAgICAgICAgICAgICAgICAgICAgIE91dGVySXRlcmF0b3I+Ojp2YWx1ZV90eXBlCgogICAgICAg ICAgLCBjbGFzcyBSZWZlcmVuY2UKCiAgICAgICAgICAgICAgICA9IHR5cGVuYW1lIGRldGFpbDo6 dHJhaXRzX29mX3ZhbHVlX3R5cGU8CiAgICAgICAgICAgICAgICAgICAgICAgIE91dGVySXRlcmF0 b3I+OjpyZWZlcmVuY2UKCgoKICAgICAgICAgICwgY2xhc3MgQ2F0ZWdvcnkgPSB0eXBlbmFtZSBi b29zdDo6ZGV0YWlsOjppdGVyYXRvcl90cmFpdHM8CiAgICAgICAgICAgICAgICAgICAgICAgIE91 dGVySXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgICAgICAgLCBjbGFzcyBQb2ludGVy CgogICAgICAgICAgICAgICAgPSB0eXBlbmFtZSBkZXRhaWw6OnRyYWl0c19vZl92YWx1ZV90eXBl PAogICAgICAgICAgICAgICAgICAgICAgICBPdXRlckl0ZXJhdG9yPjo6cG9pbnRlcgoKCgogICAg ICAgICA+CnN0cnVjdCBpbmRpcmVjdF9pdGVyYXRvcl9nZW5lcmF0b3IKewogICAgdHlwZWRlZiBp dGVyYXRvcl9hZGFwdG9yPE91dGVySXRlcmF0b3IsCiAgICAgICAgaW5kaXJlY3RfaXRlcmF0b3Jf cG9saWNpZXMsVmFsdWUsUmVmZXJlbmNlLFBvaW50ZXIsQ2F0ZWdvcnk+IHR5cGU7Cn07Cgp0ZW1w bGF0ZSA8Y2xhc3MgT3V0ZXJJdGVyYXRvciwKICAgICAgICAgIGNsYXNzIFZhbHVlCgogICAgICAg ICAgICAgICAgPSB0eXBlbmFtZSBkZXRhaWw6OnRyYWl0c19vZl92YWx1ZV90eXBlPAogICAgICAg ICAgICAgICAgICAgICAgICBPdXRlckl0ZXJhdG9yPjo6dmFsdWVfdHlwZQoKICAgICAgICAgICwg Y2xhc3MgUmVmZXJlbmNlCgogICAgICAgICAgICAgICAgPSB0eXBlbmFtZSBkZXRhaWw6OnRyYWl0 c19vZl92YWx1ZV90eXBlPAogICAgICAgICAgICAgICAgICAgICAgICBPdXRlckl0ZXJhdG9yPjo6 cmVmZXJlbmNlCgoKCiAgICAgICAgICAsIGNsYXNzIENvbnN0UmVmZXJlbmNlID0gVmFsdWUgY29u c3QmCiAgICAgICAgICAsIGNsYXNzIENhdGVnb3J5ID0gdHlwZW5hbWUgYm9vc3Q6OmRldGFpbDo6 aXRlcmF0b3JfdHJhaXRzPAogICAgICAgICAgICAgICAgT3V0ZXJJdGVyYXRvcj46Oml0ZXJhdG9y X2NhdGVnb3J5CiAgICAgICAgICAsIGNsYXNzIFBvaW50ZXIKCiAgICAgICAgICAgICAgICA9IHR5 cGVuYW1lIGRldGFpbDo6dHJhaXRzX29mX3ZhbHVlX3R5cGU8CiAgICAgICAgICAgICAgICAgICAg ICAgIE91dGVySXRlcmF0b3I+Ojpwb2ludGVyCgoKCiAgICAgICAgICAsIGNsYXNzIENvbnN0UG9p bnRlciA9IFZhbHVlIGNvbnN0KgogICAgICAgICAgID4Kc3RydWN0IGluZGlyZWN0X2l0ZXJhdG9y X3BhaXJfZ2VuZXJhdG9yCnsKICB0eXBlZGVmIHR5cGVuYW1lIGluZGlyZWN0X2l0ZXJhdG9yX2dl bmVyYXRvcjxPdXRlckl0ZXJhdG9yLAogICAgVmFsdWUsIFJlZmVyZW5jZSxDYXRlZ29yeSxQb2lu dGVyPjo6dHlwZSBpdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIGluZGlyZWN0X2l0ZXJhdG9y X2dlbmVyYXRvcjxPdXRlckl0ZXJhdG9yLAogICAgVmFsdWUsIENvbnN0UmVmZXJlbmNlLENhdGVn b3J5LENvbnN0UG9pbnRlcj46OnR5cGUgY29uc3RfaXRlcmF0b3I7Cn07CgoKdGVtcGxhdGUgPGNs YXNzIE91dGVySXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpbmRpcmVjdF9pdGVyYXRvcl9nZW5l cmF0b3I8T3V0ZXJJdGVyYXRvcj46OnR5cGUKbWFrZV9pbmRpcmVjdF9pdGVyYXRvcihPdXRlckl0 ZXJhdG9yIGJhc2UpCnsKICAgIHR5cGVkZWYgdHlwZW5hbWUgaW5kaXJlY3RfaXRlcmF0b3JfZ2Vu ZXJhdG9yCiAgICAgICAgPE91dGVySXRlcmF0b3I+Ojp0eXBlIHJlc3VsdF90OwogICAgcmV0dXJu IHJlc3VsdF90KGJhc2UpOwp9CgoKCgoKc3RydWN0IHJldmVyc2VfaXRlcmF0b3JfcG9saWNpZXMg OiBwdWJsaWMgZGVmYXVsdF9pdGVyYXRvcl9wb2xpY2llcwp7CiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg SXRlcmF0b3JBZGFwdG9yPgogICAgdHlwZW5hbWUgSXRlcmF0b3JBZGFwdG9yOjpyZWZlcmVuY2Ug ZGVyZWZlcmVuY2UoY29uc3QgSXRlcmF0b3JBZGFwdG9yJiB4KSBjb25zdAogICAgICAgIHsgcmV0 dXJuICpib29zdDo6cHJpb3IoeC5iYXNlKCkpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIEJpZGly ZWN0aW9uYWxJdGVyYXRvcj4KICAgIHZvaWQgaW5jcmVtZW50KEJpZGlyZWN0aW9uYWxJdGVyYXRv ciYgeCkgY29uc3QKICAgICAgICB7IC0teC5iYXNlKCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg QmlkaXJlY3Rpb25hbEl0ZXJhdG9yPgogICAgdm9pZCBkZWNyZW1lbnQoQmlkaXJlY3Rpb25hbEl0 ZXJhdG9yJiB4KSBjb25zdAogICAgICAgIHsgKyt4LmJhc2UoKTsgfQoKICAgIHRlbXBsYXRlIDxj bGFzcyBCaWRpcmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIERpZmZlcmVuY2VUeXBlPgogICAgdm9p ZCBhZHZhbmNlKEJpZGlyZWN0aW9uYWxJdGVyYXRvciYgeCwgRGlmZmVyZW5jZVR5cGUgbikgY29u c3QKICAgICAgICB7IHguYmFzZSgpIC09IG47IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0 b3IxLCBjbGFzcyBJdGVyYXRvcjI+CiAgICB0eXBlbmFtZSBJdGVyYXRvcjE6OmRpZmZlcmVuY2Vf dHlwZSBkaXN0YW5jZSgKICAgICAgICBjb25zdCBJdGVyYXRvcjEmIHgsIGNvbnN0IEl0ZXJhdG9y MiYgeSkgY29uc3QKICAgICAgICB7IHJldHVybiB4LmJhc2UoKSAtIHkuYmFzZSgpOyB9CgogICAg dGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yMSwgY2xhc3MgSXRlcmF0b3IyPgogICAgYm9vbCBlcXVh bChjb25zdCBJdGVyYXRvcjEmIHgsIGNvbnN0IEl0ZXJhdG9yMiYgeSkgY29uc3QKICAgICAgICB7 IHJldHVybiB4LmJhc2UoKSA9PSB5LmJhc2UoKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIEJpZGly ZWN0aW9uYWxJdGVyYXRvciwKICAgIGNsYXNzIFZhbHVlID0gdHlwZW5hbWUgYm9vc3Q6OmRldGFp bDo6aXRlcmF0b3JfdHJhaXRzPEJpZGlyZWN0aW9uYWxJdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAg ICBjbGFzcyBSZWZlcmVuY2UgPSB0eXBlbmFtZSBib29zdDo6ZGV0YWlsOjppdGVyYXRvcl9kZWZh dWx0czxCaWRpcmVjdGlvbmFsSXRlcmF0b3IsVmFsdWU+OjpyZWZlcmVuY2UsCiAgICBjbGFzcyBQ b2ludGVyID0gdHlwZW5hbWUgYm9vc3Q6OmRldGFpbDo6aXRlcmF0b3JfZGVmYXVsdHM8QmlkaXJl Y3Rpb25hbEl0ZXJhdG9yLFZhbHVlPjo6cG9pbnRlciwKICAgIGNsYXNzIENhdGVnb3J5ID0gdHlw ZW5hbWUgYm9vc3Q6OmRldGFpbDo6aXRlcmF0b3JfdHJhaXRzPEJpZGlyZWN0aW9uYWxJdGVyYXRv cj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAgY2xhc3MgRGlzdGFuY2UgPSB0eXBlbmFtZSBib29z dDo6ZGV0YWlsOjppdGVyYXRvcl90cmFpdHM8QmlkaXJlY3Rpb25hbEl0ZXJhdG9yPjo6ZGlmZmVy ZW5jZV90eXBlCiAgICAgICAgID4Kc3RydWN0IHJldmVyc2VfaXRlcmF0b3JfZ2VuZXJhdG9yCnsK ICAgIHR5cGVkZWYgaXRlcmF0b3JfYWRhcHRvcjxCaWRpcmVjdGlvbmFsSXRlcmF0b3IscmV2ZXJz ZV9pdGVyYXRvcl9wb2xpY2llcywKICAgICAgICBWYWx1ZSxSZWZlcmVuY2UsUG9pbnRlcixDYXRl Z29yeSxEaXN0YW5jZT4gdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBCaWRpcmVjdGlvbmFsSXRl cmF0b3I+CmlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yX2dlbmVyYXRvcjxCaWRpcmVj dGlvbmFsSXRlcmF0b3I+Ojp0eXBlCm1ha2VfcmV2ZXJzZV9pdGVyYXRvcihCaWRpcmVjdGlvbmFs SXRlcmF0b3IgYmFzZSkKewogICAgdHlwZWRlZiB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yX2dl bmVyYXRvcjxCaWRpcmVjdGlvbmFsSXRlcmF0b3I+Ojp0eXBlIHJlc3VsdF90OwogICAgcmV0dXJu IHJlc3VsdF90KGJhc2UpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgQWRhcHRhYmxlVW5hcnlGdW5j dGlvbj4Kc3RydWN0IHByb2plY3Rpb25faXRlcmF0b3JfcG9saWNpZXMgOiBwdWJsaWMgZGVmYXVs dF9pdGVyYXRvcl9wb2xpY2llcwp7CiAgICBwcm9qZWN0aW9uX2l0ZXJhdG9yX3BvbGljaWVzKCkg eyB9CiAgICBwcm9qZWN0aW9uX2l0ZXJhdG9yX3BvbGljaWVzKGNvbnN0IEFkYXB0YWJsZVVuYXJ5 RnVuY3Rpb24mIGYpIDogbV9mKGYpIHsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvckFk YXB0b3I+CiAgICB0eXBlbmFtZSBJdGVyYXRvckFkYXB0b3I6OnJlZmVyZW5jZSBkZXJlZmVyZW5j ZShJdGVyYXRvckFkYXB0b3IgY29uc3QmIGl0ZXIpIGNvbnN0IHsKICAgICAgICByZXR1cm4gbV9m KCppdGVyLmJhc2UoKSk7CiAgICB9CgogICAgQWRhcHRhYmxlVW5hcnlGdW5jdGlvbiBtX2Y7Cn07 Cgp0ZW1wbGF0ZSA8Y2xhc3MgQWRhcHRhYmxlVW5hcnlGdW5jdGlvbiwgY2xhc3MgSXRlcmF0b3I+ CmNsYXNzIHByb2plY3Rpb25faXRlcmF0b3JfZ2VuZXJhdG9yIHsKICAgIHR5cGVkZWYgdHlwZW5h bWUgQWRhcHRhYmxlVW5hcnlGdW5jdGlvbjo6cmVzdWx0X3R5cGUgdmFsdWVfdHlwZTsKICAgIHR5 cGVkZWYgcHJvamVjdGlvbl9pdGVyYXRvcl9wb2xpY2llczxBZGFwdGFibGVVbmFyeUZ1bmN0aW9u PiBwb2xpY2llczsKcHVibGljOgogICAgdHlwZWRlZiBpdGVyYXRvcl9hZGFwdG9yPEl0ZXJhdG9y LHBvbGljaWVzLHZhbHVlX3R5cGUsdmFsdWVfdHlwZSYsdmFsdWVfdHlwZSo+IHR5cGU7Cn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgQWRhcHRhYmxlVW5hcnlGdW5jdGlvbiwgY2xhc3MgSXRlcmF0b3I+CmNs YXNzIGNvbnN0X3Byb2plY3Rpb25faXRlcmF0b3JfZ2VuZXJhdG9yIHsKICAgIHR5cGVkZWYgdHlw ZW5hbWUgQWRhcHRhYmxlVW5hcnlGdW5jdGlvbjo6cmVzdWx0X3R5cGUgdmFsdWVfdHlwZTsKICAg IHR5cGVkZWYgcHJvamVjdGlvbl9pdGVyYXRvcl9wb2xpY2llczxBZGFwdGFibGVVbmFyeUZ1bmN0 aW9uPiBwb2xpY2llczsKcHVibGljOgogICAgdHlwZWRlZiBpdGVyYXRvcl9hZGFwdG9yPEl0ZXJh dG9yLHBvbGljaWVzLHZhbHVlX3R5cGUsY29uc3QgdmFsdWVfdHlwZSYsY29uc3QgdmFsdWVfdHlw ZSo+IHR5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQWRhcHRhYmxlVW5hcnlGdW5jdGlvbiwgY2xh c3MgSXRlcmF0b3IsIGNsYXNzIENvbnN0SXRlcmF0b3I+CnN0cnVjdCBwcm9qZWN0aW9uX2l0ZXJh dG9yX3BhaXJfZ2VuZXJhdG9yIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgcHJvamVjdGlvbl9pdGVy YXRvcl9nZW5lcmF0b3I8QWRhcHRhYmxlVW5hcnlGdW5jdGlvbiwgSXRlcmF0b3I+Ojp0eXBlIGl0 ZXJhdG9yOwogICAgdHlwZWRlZiB0eXBlbmFtZSBjb25zdF9wcm9qZWN0aW9uX2l0ZXJhdG9yX2dl bmVyYXRvcjxBZGFwdGFibGVVbmFyeUZ1bmN0aW9uLCBDb25zdEl0ZXJhdG9yPjo6dHlwZSBjb25z dF9pdGVyYXRvcjsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgQWRhcHRhYmxlVW5hcnlGdW5jdGlvbiwg Y2xhc3MgSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBwcm9qZWN0aW9uX2l0ZXJhdG9yX2dlbmVy YXRvcjxBZGFwdGFibGVVbmFyeUZ1bmN0aW9uLCBJdGVyYXRvcj46OnR5cGUKbWFrZV9wcm9qZWN0 aW9uX2l0ZXJhdG9yKAogICAgSXRlcmF0b3IgaXRlciwKICAgIGNvbnN0IEFkYXB0YWJsZVVuYXJ5 RnVuY3Rpb24mIGYgPSBBZGFwdGFibGVVbmFyeUZ1bmN0aW9uKCkpCnsKICAgIHR5cGVkZWYgdHlw ZW5hbWUgcHJvamVjdGlvbl9pdGVyYXRvcl9nZW5lcmF0b3I8QWRhcHRhYmxlVW5hcnlGdW5jdGlv biwgSXRlcmF0b3I+Ojp0eXBlIHJlc3VsdF90OwogICAgcmV0dXJuIHJlc3VsdF90KGl0ZXIsIGYp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQWRhcHRhYmxlVW5hcnlGdW5jdGlvbiwgY2xhc3MgSXRlcmF0 b3I+CmlubGluZSB0eXBlbmFtZSBjb25zdF9wcm9qZWN0aW9uX2l0ZXJhdG9yX2dlbmVyYXRvcjxB ZGFwdGFibGVVbmFyeUZ1bmN0aW9uLCBJdGVyYXRvcj46OnR5cGUKbWFrZV9jb25zdF9wcm9qZWN0 aW9uX2l0ZXJhdG9yKAogICAgSXRlcmF0b3IgaXRlciwKICAgIGNvbnN0IEFkYXB0YWJsZVVuYXJ5 RnVuY3Rpb24mIGYgPSBBZGFwdGFibGVVbmFyeUZ1bmN0aW9uKCkpCnsKICAgIHR5cGVkZWYgdHlw ZW5hbWUgY29uc3RfcHJvamVjdGlvbl9pdGVyYXRvcl9nZW5lcmF0b3I8QWRhcHRhYmxlVW5hcnlG dW5jdGlvbiwgSXRlcmF0b3I+Ojp0eXBlIHJlc3VsdF90OwogICAgcmV0dXJuIHJlc3VsdF90KGl0 ZXIsIGYpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgUHJlZGljYXRlLCBjbGFzcyBJdGVyYXRvcj4K Y2xhc3MgZmlsdGVyX2l0ZXJhdG9yX3BvbGljaWVzCnsKcHVibGljOgogICAgZmlsdGVyX2l0ZXJh dG9yX3BvbGljaWVzKCkgeyB9CgogICAgZmlsdGVyX2l0ZXJhdG9yX3BvbGljaWVzKGNvbnN0IFBy ZWRpY2F0ZSYgcCwgY29uc3QgSXRlcmF0b3ImIGVuZCkKICAgICAgICA6IG1fcHJlZGljYXRlKHAp LCBtX2VuZChlbmQpIHsgfQoKICAgIHZvaWQgaW5pdGlhbGl6ZShJdGVyYXRvciYgeCkgewogICAg ICAgIHNhdGlzZnlfcHJlZGljYXRlKHgpOwogICAgfQoKCgogICAgdGVtcGxhdGUgPGNsYXNzIEl0 ZXJhdG9yQWRhcHRvcj4KICAgIHZvaWQgaW5jcmVtZW50KEl0ZXJhdG9yQWRhcHRvciYgeCkgewog ICAgICAgICsreC5iYXNlKCk7CiAgICAgICAgc2F0aXNmeV9wcmVkaWNhdGUoeC5iYXNlKCkpOwog ICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvckFkYXB0b3I+CiAgICB0eXBlbmFtZSBJ dGVyYXRvckFkYXB0b3I6OnJlZmVyZW5jZSBkZXJlZmVyZW5jZShjb25zdCBJdGVyYXRvckFkYXB0 b3ImIHgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKnguYmFzZSgpOyB9CgogICAgdGVtcGxhdGUg PGNsYXNzIEl0ZXJhdG9yQWRhcHRvcjEsIGNsYXNzIEl0ZXJhdG9yQWRhcHRvcjI+CiAgICBib29s IGVxdWFsKGNvbnN0IEl0ZXJhdG9yQWRhcHRvcjEmIHgsIGNvbnN0IEl0ZXJhdG9yQWRhcHRvcjIm IHkpIGNvbnN0CiAgICAgICAgeyByZXR1cm4geC5iYXNlKCkgPT0geS5iYXNlKCk7IH0KCiBwcml2 YXRlOgogICAgdm9pZCBzYXRpc2Z5X3ByZWRpY2F0ZShJdGVyYXRvciYgaXRlcik7CiAgICBQcmVk aWNhdGUgbV9wcmVkaWNhdGU7CiAgICBJdGVyYXRvciBtX2VuZDsKfTsKCnRlbXBsYXRlIDxjbGFz cyBQcmVkaWNhdGUsIGNsYXNzIEl0ZXJhdG9yPgp2b2lkIGZpbHRlcl9pdGVyYXRvcl9wb2xpY2ll czxQcmVkaWNhdGUsSXRlcmF0b3I+OjpzYXRpc2Z5X3ByZWRpY2F0ZSgKICAgIEl0ZXJhdG9yJiBp dGVyKQp7CiAgICB3aGlsZSAobV9lbmQgIT0gaXRlciAmJiAhbV9wcmVkaWNhdGUoKml0ZXIpKQog ICAgICAgICsraXRlcjsKfQoKCgpuYW1lc3BhY2UgZGV0YWlsIHsKCiAgdGVtcGxhdGUgPGNsYXNz IEJhc2UsIGNsYXNzIFQ+CiAgc3RydWN0IHJlZHVjZV90b19iYXNlX2NsYXNzCiAgewogICAgICB0 eXBlZGVmIHR5cGVuYW1lIGlmX3RydWU8KAogICAgICAgICAgICA6OmJvb3N0Ojppc19jb252ZXJ0 aWJsZTxUKixCYXNlKj46OnZhbHVlCiAgICAgICAgICApPjo6dGVtcGxhdGUgdGhlbjxCYXNlLFQ+ Ojp0eXBlIHR5cGU7CiAgfTsKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3I+CiAgc3RydWN0 IG5vbl9iaWRpcmVjdGlvbmFsX2NhdGVnb3J5CiAgewoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBy ZWR1Y2VfdG9fYmFzZV9jbGFzczwKICAgICAgICAgICAgICBzdGQ6OmZvcndhcmRfaXRlcmF0b3Jf dGFnLAogICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9y Pjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAgPjo6dHlwZSB0eXBlOwogICBwcml2YXRlOgoKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYmlkaXJlY3Rpb25hbCA9ICghYm9vc3Q6OmlzX2NvbnZl cnRpYmxlPHR5cGUqLCBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKj46OnZhbHVlKTsK CgogICAgICB0eXBlZGVmIDo6Ym9vc3Q6OnN0YXRpY19hc3NlcnRfdGVzdDwgc2l6ZW9mKDo6Ym9v c3Q6OlNUQVRJQ19BU1NFUlRJT05fRkFJTFVSRTwgKGJvb2wpKCBpc19iaWRpcmVjdGlvbmFsICkg Pik+IGJvb3N0X3N0YXRpY19hc3NlcnRfdHlwZWRlZl8xMzc3OwojIDEzOTAgIi9ob21lL2NvbXBi aW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2l0ZXJhdG9yX2FkYXB0b3JzLmhwcCIgMwogIH07Cn0K CnRlbXBsYXRlIDxjbGFzcyBQcmVkaWNhdGUsIGNsYXNzIEl0ZXJhdG9yLAogICAgY2xhc3MgVmFs dWUgPSB0eXBlbmFtZSBib29zdDo6ZGV0YWlsOjppdGVyYXRvcl90cmFpdHM8SXRlcmF0b3I+Ojp2 YWx1ZV90eXBlLAogICAgY2xhc3MgUmVmZXJlbmNlID0gdHlwZW5hbWUgYm9vc3Q6OmRldGFpbDo6 aXRlcmF0b3JfZGVmYXVsdHM8SXRlcmF0b3IsVmFsdWU+OjpyZWZlcmVuY2UsCiAgICBjbGFzcyBQ b2ludGVyID0gdHlwZW5hbWUgYm9vc3Q6OmRldGFpbDo6aXRlcmF0b3JfZGVmYXVsdHM8SXRlcmF0 b3IsVmFsdWU+Ojpwb2ludGVyLAogICAgY2xhc3MgQ2F0ZWdvcnkgPSB0eXBlbmFtZSBib29zdDo6 ZGV0YWlsOjpub25fYmlkaXJlY3Rpb25hbF9jYXRlZ29yeTxJdGVyYXRvcj46OnR5cGUsCiAgICBj bGFzcyBEaXN0YW5jZSA9IHR5cGVuYW1lIGJvb3N0OjpkZXRhaWw6Oml0ZXJhdG9yX3RyYWl0czxJ dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICA+CmNsYXNzIGZpbHRlcl9pdGVyYXRv cl9nZW5lcmF0b3IgewogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYmlkaXJlY3Rpb25hbCA9IChi b29zdDo6aXNfY29udmVydGlibGU8Q2F0ZWdvcnkqLCBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0 b3JfdGFnKj46OnZhbHVlKTsKCgogICAgdHlwZWRlZiA6OmJvb3N0OjpzdGF0aWNfYXNzZXJ0X3Rl c3Q8IHNpemVvZig6OmJvb3N0OjpTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU8IChib29sKSggIWlz X2JpZGlyZWN0aW9uYWwgKSA+KT4gYm9vc3Rfc3RhdGljX2Fzc2VydF90eXBlZGVmXzE0MDQ7Cgog ICAgdHlwZWRlZiBmaWx0ZXJfaXRlcmF0b3JfcG9saWNpZXM8UHJlZGljYXRlLEl0ZXJhdG9yPiBw b2xpY2llc190eXBlOwogcHVibGljOgogICAgdHlwZWRlZiBpdGVyYXRvcl9hZGFwdG9yPEl0ZXJh dG9yLHBvbGljaWVzX3R5cGUsCiAgICAgICAgVmFsdWUsUmVmZXJlbmNlLFBvaW50ZXIsQ2F0ZWdv cnksRGlzdGFuY2U+IHR5cGU7Cn07CgoKCm5hbWVzcGFjZSBkZXRhaWwgewogIHRlbXBsYXRlIDxj bGFzcyBQcmVkaWNhdGUsIGNsYXNzIEl0ZXJhdG9yPgogIHN0cnVjdCBmaWx0ZXJfZ2VuZXJhdG9y IHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OmZpbHRlcl9pdGVyYXRvcl9nZW5lcmF0b3I8 UHJlZGljYXRlLEl0ZXJhdG9yPjo6dHlwZSB0eXBlOwogIH07Cn0KCnRlbXBsYXRlIDxjbGFzcyBQ cmVkaWNhdGUsIGNsYXNzIEl0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgZGV0YWlsOjpmaWx0ZXJf Z2VuZXJhdG9yPFByZWRpY2F0ZSwgSXRlcmF0b3I+Ojp0eXBlCm1ha2VfZmlsdGVyX2l0ZXJhdG9y KEl0ZXJhdG9yIGZpcnN0LCBJdGVyYXRvciBsYXN0LCBjb25zdCBQcmVkaWNhdGUmIHAgPSBQcmVk aWNhdGUoKSkKewogIHR5cGVkZWYgZmlsdGVyX2l0ZXJhdG9yX2dlbmVyYXRvcjxQcmVkaWNhdGUs IEl0ZXJhdG9yPiBHZW47CiAgdHlwZWRlZiBmaWx0ZXJfaXRlcmF0b3JfcG9saWNpZXM8UHJlZGlj YXRlLEl0ZXJhdG9yPiBwb2xpY2llc190OwogIHR5cGVkZWYgdHlwZW5hbWUgR2VuOjp0eXBlIHJl c3VsdF90OwogIHJldHVybiByZXN1bHRfdChmaXJzdCwgcG9saWNpZXNfdChwLCBsYXN0KSk7Cn0K Cn0KIyAyNCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkv aXRlcmF0b3IuaHBwIiAyIDMKCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIGRldGFpbCB7 Cm5hbWVzcGFjZSBtdWx0aV9hcnJheSB7CgoKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVu YW1lIFRQdHI+CnN0cnVjdCBpdGVyYXRvcl9iYXNlIDogcHJpdmF0ZSBtdWx0aV9hcnJheV9iYXNl IHsKICB0eXBlZGVmIG11bHRpX2FycmF5X2Jhc2Ugc3VwZXJfdHlwZTsKICB0eXBlZGVmIHN1cGVy X3R5cGU6OmluZGV4IGluZGV4OwogIHR5cGVkZWYgc3VwZXJfdHlwZTo6c2l6ZV90eXBlIHNpemVf dHlwZTsKCiAgaW5kZXggaWR4XzsKICBUUHRyIGJhc2VfOwogIGNvbnN0IHNpemVfdHlwZSogZXh0 ZW50c187CiAgY29uc3QgaW5kZXgqIHN0cmlkZXNfOwogIGNvbnN0IGluZGV4KiBpbmRleF9iYXNl XzsKCiAgaXRlcmF0b3JfYmFzZShpbnQgaWR4LCBUUHRyIGJhc2UsIGNvbnN0IHNpemVfdHlwZSog ZXh0ZW50cywKICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4KiBzdHJpZGVzLAogICAgICAgICAg ICAgICAgY29uc3QgaW5kZXgqIGluZGV4X2Jhc2UpIDoKICAgIGlkeF8oaWR4KSwgYmFzZV8oYmFz ZSksIGV4dGVudHNfKGV4dGVudHMpLAogICAgc3RyaWRlc18oc3RyaWRlcyksIGluZGV4X2Jhc2Vf KGluZGV4X2Jhc2UpIHsKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBPUHRyPgogIGl0ZXJhdG9y X2Jhc2UoY29uc3QgaXRlcmF0b3JfYmFzZTxULE9QdHI+JiByaHMpIDoKICAgIGlkeF8ocmhzLmlk eF8pLCBiYXNlXyhyaHMuYmFzZV8pLCBleHRlbnRzXyhyaHMuZXh0ZW50c18pLAogICAgc3RyaWRl c18ocmhzLnN0cmlkZXNfKSwgaW5kZXhfYmFzZV8ocmhzLmluZGV4X2Jhc2VfKSB7CiAgfQoKCiAg aXRlcmF0b3JfYmFzZSgpIHt9Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBO dW1EaW1zPgpzdHJ1Y3QgaXRlcmF0b3JfcG9saWNpZXMgOgogIHB1YmxpYyBib29zdDo6ZGV0YWls OjptdWx0aV9hcnJheTo6ZGVmYXVsdF9pdGVyYXRvcl9wb2xpY2llcywKICBwcml2YXRlIHZhbHVl X2FjY2Vzc29yX2dlbmVyYXRvcjxULE51bURpbXM+Ojp0eXBlIHsKcHJpdmF0ZToKICB0eXBlZGVm IHR5cGVuYW1lIHZhbHVlX2FjY2Vzc29yX2dlbmVyYXRvcjxULE51bURpbXM+Ojp0eXBlIHN1cGVy X3R5cGU7CnB1YmxpYzoKICB0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3JBZGFwdG9yPgogIHR5cGVu YW1lIEl0ZXJhdG9yQWRhcHRvcjo6cmVmZXJlbmNlCiAgZGVyZWZlcmVuY2UoY29uc3QgSXRlcmF0 b3JBZGFwdG9yJiBpdGVyKSBjb25zdCB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEl0ZXJhdG9yQWRh cHRvcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIHJldHVybiBzdXBlcl90eXBlOjphY2Nlc3Mo Ym9vc3Q6OnR5cGU8cmVmZXJlbmNlPigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp dGVyLmJhc2UoKS5pZHhfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyLmJhc2Uo KS5iYXNlXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlci5iYXNlKCkuZXh0ZW50 c18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXIuYmFzZSgpLnN0cmlkZXNfLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyLmJhc2UoKS5pbmRleF9iYXNlXyk7CiAg fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3JBZGFwdG9yPgogIHN0YXRpYyB2b2lkIGluY3Jl bWVudChJdGVyYXRvckFkYXB0b3ImIHgpIHsgKyt4LmJhc2UoKS5pZHhfOyB9CgogIHRlbXBsYXRl IDxjbGFzcyBJdGVyYXRvckFkYXB0b3I+CiAgc3RhdGljIHZvaWQgZGVjcmVtZW50KEl0ZXJhdG9y QWRhcHRvciYgeCkgeyAtLXguYmFzZSgpLmlkeF87IH0KCiAgdGVtcGxhdGUgPGNsYXNzIEl0ZXJh dG9yQWRhcHRvcjEsIGNsYXNzIEl0ZXJhdG9yQWRhcHRvcjI+CiAgYm9vbCBlcXVhbChJdGVyYXRv ckFkYXB0b3IxJiBsaHMsIEl0ZXJhdG9yQWRhcHRvcjImIHJocykgY29uc3QgewogICAgcmV0dXJu IChsaHMuYmFzZSgpLmlkeF8gPT0gcmhzLmJhc2UoKS5pZHhfKSAmJgogICAgICAobGhzLmJhc2Uo KS5iYXNlXyA9PSByaHMuYmFzZSgpLmJhc2VfKSAmJgogICAgICAobGhzLmJhc2UoKS5leHRlbnRz XyA9PSByaHMuYmFzZSgpLmV4dGVudHNfKSAmJgogICAgICAobGhzLmJhc2UoKS5zdHJpZGVzXyA9 PSByaHMuYmFzZSgpLnN0cmlkZXNfKSAmJgogICAgICAobGhzLmJhc2UoKS5pbmRleF9iYXNlXyA9 PSByaHMuYmFzZSgpLmluZGV4X2Jhc2VfKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBJdGVyYXRv ckFkYXB0b3IsIGNsYXNzIERpZmZlcmVuY2VUeXBlPgogIHN0YXRpYyB2b2lkIGFkdmFuY2UoSXRl cmF0b3JBZGFwdG9yJiB4LCBEaWZmZXJlbmNlVHlwZSBuKSB7CiAgICB4LmlkeF8gKz0gbjsKICB9 CgogIHRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvckFkYXB0b3IxLCBjbGFzcyBJdGVyYXRvckFkYXB0 b3IyPgogIHR5cGVuYW1lIEl0ZXJhdG9yQWRhcHRvcjE6OmRpZmZlcmVuY2VfdHlwZQogIGRpc3Rh bmNlKEl0ZXJhdG9yQWRhcHRvcjEmIGxocywgSXRlcmF0b3JBZGFwdG9yMiYgcmhzKSBjb25zdCB7 CiAgICByZXR1cm4gcmhzLmJhc2UoKS5pZHhfIC0gbGhzLmJhc2UoKS5pZHhfOwogIH0KfTsKCgp0 ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgYmFzZV90eXBlLAogIHN0ZDo6c2l6ZV90IE51 bURpbXMsIHR5cGVuYW1lIHZhbHVlX3R5cGUsCiAgdHlwZW5hbWUgcmVmZXJlbmNlX3R5cGUsIHR5 cGVuYW1lIHRhZywgdHlwZW5hbWUgZGlmZmVyZW5jZV90eXBlPgpzdHJ1Y3QgaXRlcmF0b3JfZ2Vu X2hlbHBlciB7CnByaXZhdGU6CiAgdHlwZWRlZiBpdGVyYXRvcl9wb2xpY2llczxULE51bURpbXM+ IHBvbGljaWVzOwogIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcl90eXBlOwogIHR5cGVkZWYg dGFnIGNhdGVnb3J5OwpwdWJsaWM6CiAgdHlwZWRlZiBib29zdDo6ZGV0YWlsOjptdWx0aV9hcnJh eTo6aXRlcmF0b3JfYWRhcHRvcjxiYXNlX3R5cGUscG9saWNpZXMsdmFsdWVfdHlwZSwKICAgIHJl ZmVyZW5jZV90eXBlLHBvaW50ZXJfdHlwZSxjYXRlZ29yeSxkaWZmZXJlbmNlX3R5cGU+IHR5cGU7 Cn07CgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE51bURpbXMsIHR5cGVuYW1l IHZhbHVlX3R5cGUsCiAgdHlwZW5hbWUgcmVmZXJlbmNlX3R5cGUsIHR5cGVuYW1lIHRhZywgdHlw ZW5hbWUgZGlmZmVyZW5jZV90eXBlPgpzdHJ1Y3QgaXRlcmF0b3JfZ2VuZXJhdG9yIHsKcHJpdmF0 ZToKICB0eXBlZGVmIGl0ZXJhdG9yX2Jhc2U8VCxUKj4gYmFzZV90eXBlOwpwdWJsaWM6CiAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl9nZW5faGVscGVyPFQsYmFzZV90eXBlLE51bURpbXMsdmFs dWVfdHlwZSwKICAgIHJlZmVyZW5jZV90eXBlLHRhZyxkaWZmZXJlbmNlX3R5cGU+Ojp0eXBlIHR5 cGU7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTnVtRGltcywgdHlwZW5h bWUgdmFsdWVfdHlwZSwKICB0eXBlbmFtZSByZWZlcmVuY2VfdHlwZSwgdHlwZW5hbWUgdGFnLCB0 eXBlbmFtZSBkaWZmZXJlbmNlX3R5cGU+CnN0cnVjdCBjb25zdF9pdGVyYXRvcl9nZW5lcmF0b3Ig ewpwcml2YXRlOgogIHR5cGVkZWYgaXRlcmF0b3JfYmFzZTxULGNvbnN0IFQqPiBiYXNlX3R5cGU7 CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX2dlbl9oZWxwZXI8VCxiYXNlX3R5 cGUsTnVtRGltcyx2YWx1ZV90eXBlLAogICAgcmVmZXJlbmNlX3R5cGUsdGFnLGRpZmZlcmVuY2Vf dHlwZT46OnR5cGUgdHlwZTsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBO dW1EaW1zLCB0eXBlbmFtZSB2YWx1ZV90eXBlLAogIHR5cGVuYW1lIHJlZmVyZW5jZV90eXBlLCB0 eXBlbmFtZSB0YWcsIHR5cGVuYW1lIGRpZmZlcmVuY2VfdHlwZT4Kc3RydWN0IHJldmVyc2VfaXRl cmF0b3JfZ2VuZXJhdG9yIHsKcHJpdmF0ZToKICB0eXBlZGVmIGl0ZXJhdG9yX2Jhc2U8VCxUKj4g YmFzZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfZ2VuX2hlbHBlcjxULGJhc2Vf dHlwZSxOdW1EaW1zLHZhbHVlX3R5cGUsCiAgICByZWZlcmVuY2VfdHlwZSx0YWcsZGlmZmVyZW5j ZV90eXBlPjo6dHlwZSBpdF90eXBlOwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6 cmV2ZXJzZV9pdGVyYXRvcl9nZW5lcmF0b3I8aXRfdHlwZT46OnR5cGUgdHlwZTsKfTsKCnRlbXBs YXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOdW1EaW1zLCB0eXBlbmFtZSB2YWx1ZV90eXBl LAogIHR5cGVuYW1lIHJlZmVyZW5jZV90eXBlLCB0eXBlbmFtZSB0YWcsIHR5cGVuYW1lIGRpZmZl cmVuY2VfdHlwZT4Kc3RydWN0IGNvbnN0X3JldmVyc2VfaXRlcmF0b3JfZ2VuZXJhdG9yIHsKcHJp dmF0ZToKICB0eXBlZGVmIGl0ZXJhdG9yX2Jhc2U8VCxjb25zdCBUKj4gYmFzZV90eXBlOwogIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfZ2VuX2hlbHBlcjxULGJhc2VfdHlwZSxOdW1EaW1zLHZh bHVlX3R5cGUsCiAgICByZWZlcmVuY2VfdHlwZSx0YWcsZGlmZmVyZW5jZV90eXBlPjo6dHlwZSBp dF90eXBlOwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6cmV2ZXJzZV9pdGVyYXRv cl9nZW5lcmF0b3I8aXRfdHlwZT46OnR5cGUgdHlwZTsKfTsKCn0KfQp9CiMgMjUgIi9ob21lL2Nv bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5LmhwcCIgMiAzCiMgMSAiL2hv bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvc3ViYXJyYXkuaHBw IiAxIDMKIyAyMiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJy YXkvc3ViYXJyYXkuaHBwIiAzCiMgMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v c3QvbXVsdGlfYXJyYXkvY29uY2VwdF9jaGVja3MuaHBwIiAxIDMKIyAyMyAiL2hvbWUvY29tcGJp by9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvY29uY2VwdF9jaGVja3MuaHBwIiAz Cm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBkZXRhaWwgewpuYW1lc3BhY2UgbXVsdGlfYXJy YXkgewojIDM2ICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJh eS9jb25jZXB0X2NoZWNrcy5ocHAiIDMKICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KICBzdHJ1 Y3QgaWRnZW5faGVscGVyIHsKCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJyYXksIHR5cGVuYW1l IElkeEdlbiwgdHlwZW5hbWUgQ2FsbF9UeXBlPgogICAgc3RhdGljIHZvaWQgY2FsbChBcnJheSYg YSwgY29uc3QgSWR4R2VuJiBpZGdlbiwgQ2FsbF9UeXBlIGMpIHsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBBcnJheTo6aW5kZXhfcmFuZ2UgaW5kZXhfcmFuZ2U7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgQXJyYXk6OmluZGV4IGluZGV4OwogICAgICBpZGdlbl9oZWxwZXI8Ti0xPjo6Y2FsbChhLGlk Z2VuW2NdLGMpOwogICAgfQogIH07CgogIHRlbXBsYXRlIDw+CiAgc3RydWN0IGlkZ2VuX2hlbHBl cjwwPiB7CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFycmF5LCB0eXBlbmFtZSBJZHhHZW4sIHR5 cGVuYW1lIENhbGxfVHlwZT4KICAgIHN0YXRpYyB2b2lkIGNhbGwoQXJyYXkmIGEsIGNvbnN0IElk eEdlbiYgaWRnZW4sIENhbGxfVHlwZSkgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIEFycmF5Ojpp bmRleF9yYW5nZSBpbmRleF9yYW5nZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBcnJheTo6aW5k ZXggaW5kZXg7CiAgICAgIGFbIGlkZ2VuIF07CiAgICB9CiAgfTsKCgogIHRlbXBsYXRlIDx0eXBl bmFtZSBBcnJheSwgc3RkOjpzaXplX3QgTnVtRGltcyA+CiAgc3RydWN0IENvbnN0TXVsdGlBcnJh eUNvbmNlcHQKICB7CiAgICB2b2lkIGNvbnN0cmFpbnRzKCkgewoKCgogICAgICBhWyBpZCBdOwoK ICAgICAgaWRnZW5faGVscGVyPE51bURpbXMtMT46OmNhbGwoYSxpZGdlbltyYW5nZV0saWQpOwoK CiAgICAgIGlkZ2VuX2hlbHBlcjxOdW1EaW1zLTE+OjpjYWxsKGEsaWRnZW5bcmFuZ2VdLHJhbmdl KTsKCiAgICAgIHN0ID0gYS5zaXplKCk7CiAgICAgIHN0ID0gYS5udW1fZGltZW5zaW9ucygpOwog ICAgICBzdCA9IGEubnVtX2VsZW1lbnRzKCk7CiAgICAgIHN0cCA9IGEuc2hhcGUoKTsKICAgICAg aWRwID0gYS5zdHJpZGVzKCk7CiAgICAgIGlkcCA9IGEuaW5kZXhfYmFzZXMoKTsKICAgICAgY2l0 ID0gYS5iZWdpbigpOwogICAgICBjaXQgPSBhLmVuZCgpOwogICAgICBjcml0ID0gYS5yYmVnaW4o KTsKICAgICAgY3JpdCA9IGEucmVuZCgpOwogICAgICBlbHRwID0gYS5vcmlnaW4oKTsKICAgIH0K CiAgICB0eXBlZGVmIHR5cGVuYW1lIEFycmF5Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgICB0 eXBlZGVmIHR5cGVuYW1lIEFycmF5OjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgdHlwZWRlZiB0 eXBlbmFtZSBBcnJheTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICAgIHR5cGVk ZWYgdHlwZW5hbWUgQXJyYXk6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVu YW1lIEFycmF5OjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgdHlwZWRlZiB0 eXBlbmFtZSBBcnJheTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEFy cmF5Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICAgIHR5cGVkZWYgdHlwZW5hbWUg QXJyYXk6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVkZWYgdHlw ZW5hbWUgQXJyYXk6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRv cjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQXJyYXk6OmVsZW1lbnQgZWxlbWVudDsKICAgIHR5cGVk ZWYgdHlwZW5hbWUgQXJyYXk6OmluZGV4IGluZGV4OwogICAgdHlwZWRlZiB0eXBlbmFtZSBBcnJh eTo6aW5kZXhfZ2VuIGluZGV4X2dlbjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQXJyYXk6OmluZGV4 X3JhbmdlIGluZGV4X3JhbmdlOwogICAgdHlwZWRlZiB0eXBlbmFtZSBBcnJheTo6ZXh0ZW50X2dl biBleHRlbnRfZ2VuOwogICAgdHlwZWRlZiB0eXBlbmFtZSBBcnJheTo6ZXh0ZW50X3JhbmdlIGV4 dGVudF9yYW5nZTsKCiAgICBBcnJheSBhOwogICAgc2l6ZV90eXBlIHN0OwogICAgY29uc3Qgc2l6 ZV90eXBlKiBzdHA7CiAgICBpbmRleCBpZDsKICAgIGNvbnN0IGluZGV4KiBpZHA7CiAgICBjb25z dF9pdGVyYXRvciBjaXQ7CiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNyaXQ7CiAgICBjb25z dCBlbGVtZW50KiBlbHRwOwogICAgaW5kZXhfZ2VuIGlkZ2VuOwogICAgaW5kZXhfcmFuZ2UgcmFu Z2U7CiAgfTsKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcnJheSwgc3RkOjpzaXplX3QgTnVtRGlt cyA+CiAgc3RydWN0IE11dGFibGVNdWx0aUFycmF5Q29uY2VwdAogIHsKICAgIHZvaWQgY29uc3Ry YWludHMoKSB7CgoKCiAgICAgIHZhbHVlX3R5cGUgdnQgPSBhWyBpZCBdOwoKCiAgICAgIGlkZ2Vu X2hlbHBlcjxOdW1EaW1zLTE+OjpjYWxsKGEsaWRnZW5bcmFuZ2VdLGlkKTsKCgogICAgICBpZGdl bl9oZWxwZXI8TnVtRGltcy0xPjo6Y2FsbChhLGlkZ2VuW3JhbmdlXSxyYW5nZSk7CgogICAgICBz dCA9IGEuc2l6ZSgpOwogICAgICBzdCA9IGEubnVtX2RpbWVuc2lvbnMoKTsKICAgICAgc3QgPSBh Lm51bV9lbGVtZW50cygpOwogICAgICBzdHAgPSBhLnNoYXBlKCk7CiAgICAgIGlkcCA9IGEuc3Ry aWRlcygpOwogICAgICBpZHAgPSBhLmluZGV4X2Jhc2VzKCk7CiAgICAgIGl0ID0gYS5iZWdpbigp OwogICAgICBpdCA9IGEuZW5kKCk7CiAgICAgIHJpdCA9IGEucmJlZ2luKCk7CiAgICAgIHJpdCA9 IGEucmVuZCgpOwogICAgICBlbHRwID0gYS5vcmlnaW4oKTsKICAgICAgY29uc3RfY29uc3RyYWlu dHMoYSk7CiAgICB9CgogICAgdm9pZCBjb25zdF9jb25zdHJhaW50cyhjb25zdCBBcnJheSYgYSkg ewoKCgoKICAgICAgaWRnZW5faGVscGVyPE51bURpbXMtMT46OmNhbGwoYSxpZGdlbltyYW5nZV0s aWQpOwoKCiAgICAgIGlkZ2VuX2hlbHBlcjxOdW1EaW1zLTE+OjpjYWxsKGEsaWRnZW5bcmFuZ2Vd LHJhbmdlKTsKCiAgICAgIHN0ID0gYS5zaXplKCk7CiAgICAgIHN0ID0gYS5udW1fZGltZW5zaW9u cygpOwogICAgICBzdCA9IGEubnVtX2VsZW1lbnRzKCk7CiAgICAgIHN0cCA9IGEuc2hhcGUoKTsK ICAgICAgaWRwID0gYS5zdHJpZGVzKCk7CiAgICAgIGlkcCA9IGEuaW5kZXhfYmFzZXMoKTsKICAg ICAgY2l0ID0gYS5iZWdpbigpOwogICAgICBjaXQgPSBhLmVuZCgpOwogICAgICBjcml0ID0gYS5y YmVnaW4oKTsKICAgICAgY3JpdCA9IGEucmVuZCgpOwogICAgICBlbHRwID0gYS5vcmlnaW4oKTsK ICAgIH0KCiAgICB0eXBlZGVmIHR5cGVuYW1lIEFycmF5Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7 CiAgICB0eXBlZGVmIHR5cGVuYW1lIEFycmF5OjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgdHlw ZWRlZiB0eXBlbmFtZSBBcnJheTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICAg IHR5cGVkZWYgdHlwZW5hbWUgQXJyYXk6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICB0eXBlZGVm IHR5cGVuYW1lIEFycmF5OjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgdHlw ZWRlZiB0eXBlbmFtZSBBcnJheTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgICB0eXBlZGVmIHR5cGVu YW1lIEFycmF5Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICAgIHR5cGVkZWYgdHlw ZW5hbWUgQXJyYXk6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVk ZWYgdHlwZW5hbWUgQXJyYXk6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9p dGVyYXRvcjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQXJyYXk6OmVsZW1lbnQgZWxlbWVudDsKICAg IHR5cGVkZWYgdHlwZW5hbWUgQXJyYXk6OmluZGV4IGluZGV4OwogICAgdHlwZWRlZiB0eXBlbmFt ZSBBcnJheTo6aW5kZXhfZ2VuIGluZGV4X2dlbjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQXJyYXk6 OmluZGV4X3JhbmdlIGluZGV4X3JhbmdlOwogICAgdHlwZWRlZiB0eXBlbmFtZSBBcnJheTo6ZXh0 ZW50X2dlbiBleHRlbnRfZ2VuOwogICAgdHlwZWRlZiB0eXBlbmFtZSBBcnJheTo6ZXh0ZW50X3Jh bmdlIGV4dGVudF9yYW5nZTsKCiAgICBBcnJheSBhOwogICAgc2l6ZV90eXBlIHN0OwogICAgY29u c3Qgc2l6ZV90eXBlKiBzdHA7CiAgICBpbmRleCBpZDsKICAgIGNvbnN0IGluZGV4KiBpZHA7CiAg ICBpdGVyYXRvciBpdDsKICAgIGNvbnN0X2l0ZXJhdG9yIGNpdDsKICAgIHJldmVyc2VfaXRlcmF0 b3Igcml0OwogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjcml0OwogICAgY29uc3QgZWxlbWVu dCogZWx0cDsKICAgIGluZGV4X2dlbiBpZGdlbjsKICAgIGluZGV4X3JhbmdlIHJhbmdlOwogIH07 CgoKfQp9Cn0KIyAyMyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlf YXJyYXkvc3ViYXJyYXkuaHBwIiAyIDMKCgoKCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNl IGRldGFpbCB7Cm5hbWVzcGFjZSBtdWx0aV9hcnJheSB7CgoKCgoKCnRlbXBsYXRlIDx0eXBlbmFt ZSBULCBzdGQ6OnNpemVfdCBOdW1EaW1zLCB0eXBlbmFtZSBUUHRyPgpjbGFzcyBjb25zdF9zdWJf YXJyYXkgOgogIHB1YmxpYyBib29zdDo6ZGV0YWlsOjptdWx0aV9hcnJheTo6bXVsdGlfYXJyYXlf aW1wbF9iYXNlPFQsTnVtRGltcz4KewogIHR5cGVkZWYgYm9vc3Q6OmRldGFpbDo6bXVsdGlfYXJy YXk6Om11bHRpX2FycmF5X2ltcGxfYmFzZTxULE51bURpbXM+IHN1cGVyX3R5cGU7CnB1YmxpYzoK ICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0 eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVu Y2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9p dGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X2l0ZXJfYmFzZSBj b25zdF9pdGVyX2Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpjb25zdF9yZXZl cnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBz dXBlcl90eXBlOjplbGVtZW50IGVsZW1lbnQ7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBl OjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6ZGlm ZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5 cGU6OmluZGV4IGluZGV4OwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6ZXh0ZW50X3Jh bmdlIGV4dGVudF9yYW5nZTsKCgogIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBORGltcz4KICBzdHJ1 Y3QgY29uc3RfYXJyYXlfdmlldyB7CiAgICB0eXBlZGVmIGJvb3N0OjpkZXRhaWw6Om11bHRpX2Fy cmF5Ojpjb25zdF9tdWx0aV9hcnJheV92aWV3PFQsTkRpbXM+IHR5cGU7CiAgfTsKCiAgdGVtcGxh dGUgPHN0ZDo6c2l6ZV90IE5EaW1zPgogIHN0cnVjdCBhcnJheV92aWV3IHsKICAgIHR5cGVkZWYg Ym9vc3Q6OmRldGFpbDo6bXVsdGlfYXJyYXk6Om11bHRpX2FycmF5X3ZpZXc8VCxORGltcz4gdHlw ZTsKICB9OwoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBPUHRyPgogIGNvbnN0X3N1Yl9hcnJheSAo Y29uc3QgY29uc3Rfc3ViX2FycmF5PFQsTnVtRGltcyxPUHRyPiYgcmhzKSA6CiAgICBiYXNlXyhy aHMuYmFzZV8pLCBleHRlbnRzXyhyaHMuZXh0ZW50c18pLCBzdHJpZGVzXyhyaHMuc3RyaWRlc18p LAogICAgaW5kZXhfYmFzZV8ocmhzLmluZGV4X2Jhc2VfKSB7CiAgfQoKCgogIGNvbnN0X3JlZmVy ZW5jZSBvcGVyYXRvcltdKGluZGV4IGlkeCkgY29uc3QgewogICAgcmV0dXJuIHN1cGVyX3R5cGU6 OmFjY2Vzcyhib29zdDo6dHlwZTxjb25zdF9yZWZlcmVuY2U+KCksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlkeCxiYXNlXyxzaGFwZSgpLHN0cmlkZXMoKSxpbmRleF9iYXNlcygpKTsK ICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBJbmRleExpc3Q+CiAgY29uc3QgZWxlbWVudCYgb3Bl cmF0b3IoKShjb25zdCBJbmRleExpc3QmIGluZGljZXMpIGNvbnN0IHsKICAgIHJldHVybiBzdXBl cl90eXBlOjphY2Nlc3NfZWxlbWVudChib29zdDo6dHlwZTxjb25zdCBlbGVtZW50Jj4oKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4oKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLHN0cmlkZXMoKSk7CiAgfQoKCgogIHRl bXBsYXRlIDxpbnQgTkRpbXM+CgoKCiAgdHlwZW5hbWUgY29uc3RfYXJyYXlfdmlldzxORGltcz46 OnR5cGUKICBvcGVyYXRvcltdKGNvbnN0IGJvb3N0OjpkZXRhaWw6Om11bHRpX2FycmF5OjoKICAg ICAgICAgICAgIGluZGV4X2dlbjxOdW1EaW1zLE5EaW1zPiYgaW5kaWNlcykKICAgIGNvbnN0IHsK ICAgIHR5cGVkZWYgdHlwZW5hbWUgY29uc3RfYXJyYXlfdmlldzxORGltcz46OnR5cGUgcmV0dXJu X3R5cGU7CiAgICByZXR1cm4KICAgICAgc3VwZXJfdHlwZTo6Z2VuZXJhdGVfYXJyYXlfdmlldyhi b29zdDo6dHlwZTxyZXR1cm5fdHlwZT4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbmRpY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNo YXBlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWRlcygpLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4X2Jhc2VzKCksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV8pOwogIH0KCiAgdGVtcGxhdGUg PHR5cGVuYW1lIE9QdHI+CiAgYm9vbCBvcGVyYXRvcjwoY29uc3QgY29uc3Rfc3ViX2FycmF5PFQs TnVtRGltcyxPUHRyPiYgcmhzKSBjb25zdCB7CiAgICByZXR1cm4gc3RkOjpsZXhpY29ncmFwaGlj YWxfY29tcGFyZShiZWdpbigpLGVuZCgpLHJocy5iZWdpbigpLHJocy5lbmQoKSk7CiAgfQoKICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgT1B0cj4KICBib29sIG9wZXJhdG9yPT0oY29uc3QgY29uc3Rfc3Vi X2FycmF5PFQsTnVtRGltcyxPUHRyPiYgcmhzKSBjb25zdCB7CiAgICBpZihzdGQ6OmVxdWFsKHNo YXBlKCksc2hhcGUoKStudW1fZGltZW5zaW9ucygpLHJocy5zaGFwZSgpKSkKICAgICAgcmV0dXJu IHN0ZDo6ZXF1YWwoYmVnaW4oKSxlbmQoKSxyaHMuYmVnaW4oKSk7CiAgICBlbHNlIHJldHVybiBm YWxzZTsKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBPUHRyPgogIGJvb2wgb3BlcmF0b3IhPShj b25zdCBjb25zdF9zdWJfYXJyYXk8VCxOdW1EaW1zLE9QdHI+JiByaHMpIGNvbnN0IHsKICAgIHJl dHVybiAhKCp0aGlzID09IHJocyk7CiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT1B0cj4KICBi b29sIG9wZXJhdG9yPihjb25zdCBjb25zdF9zdWJfYXJyYXk8VCxOdW1EaW1zLE9QdHI+JiByaHMp IGNvbnN0IHsKICAgIHJldHVybiByaHMgPCAqdGhpczsKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFt ZSBPUHRyPgogIGJvb2wgb3BlcmF0b3I8PShjb25zdCBjb25zdF9zdWJfYXJyYXk8VCxOdW1EaW1z LE9QdHI+JiByaHMpIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlzID4gcmhzKTsKICB9CgogIHRl bXBsYXRlIDx0eXBlbmFtZSBPUHRyPgogIGJvb2wgb3BlcmF0b3I+PShjb25zdCBjb25zdF9zdWJf YXJyYXk8VCxOdW1EaW1zLE9QdHI+JiByaHMpIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlzIDwg cmhzKTsKICB9CgogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgewogICAgcmV0dXJuIGNv bnN0X2l0ZXJhdG9yKGNvbnN0X2l0ZXJfYmFzZSgqaW5kZXhfYmFzZXMoKSxvcmlnaW4oKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZSgpLHN0cmlkZXMoKSxpbmRleF9i YXNlcygpKSk7CiAgfQoKICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7CiAgICByZXR1cm4g Y29uc3RfaXRlcmF0b3IoY29uc3RfaXRlcl9iYXNlKCppbmRleF9iYXNlcygpKypzaGFwZSgpLG9y aWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlKCksc3RyaWRl cygpLGluZGV4X2Jhc2VzKCkpKTsKICB9CgogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2lu KCkgY29uc3QgewogICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOwogIH0K CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgewogICAgcmV0dXJuIGNvbnN0 X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7CiAgfQoKICBUUHRyIG9yaWdpbigpIGNvbnN0IHsg cmV0dXJuIGJhc2VfOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBleHRlbnRz X1swXTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG51bV9lbGVtZW50 cygpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKSA9PSAwOyB9CiAgc2l6 ZV90eXBlIG51bV9kaW1lbnNpb25zKCkgY29uc3QgeyByZXR1cm4gTnVtRGltczsgfQogIGNvbnN0 IHNpemVfdHlwZSogc2hhcGUoKSBjb25zdCB7IHJldHVybiBleHRlbnRzXzsgfQogIGNvbnN0IGlu ZGV4KiBzdHJpZGVzKCkgY29uc3QgeyByZXR1cm4gc3RyaWRlc187IH0KICBjb25zdCBpbmRleCog aW5kZXhfYmFzZXMoKSBjb25zdCB7IHJldHVybiBpbmRleF9iYXNlXzsgfQoKICBzaXplX3R5cGUg bnVtX2VsZW1lbnRzKCkgY29uc3QgewogICAgcmV0dXJuIHN0ZDo6YWNjdW11bGF0ZShzaGFwZSgp LHNoYXBlKCkgKyBudW1fZGltZW5zaW9ucygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3R5cGUoMSksIHN0ZDo6bXVsdGlwbGllczxzaXplX3R5cGU+KCkpOwogIH0KCgoKcHJvdGVj dGVkOgogIHRlbXBsYXRlIDx0eXBlbmFtZSxzdGQ6OnNpemVfdD4gZnJpZW5kIGNsYXNzIHZhbHVl X2FjY2Vzc29yX247CiAgdGVtcGxhdGUgPHR5cGVuYW1lLHN0ZDo6c2l6ZV90LHR5cGVuYW1lPiBm cmllbmQgY2xhc3MgY29uc3Rfc3ViX2FycmF5OwoKCgoKICBjb25zdF9zdWJfYXJyYXkgKFRQdHIg YmFzZSwKICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3R5cGUqIGV4dGVudHMsCiAgICAgICAg ICAgICAgICAgY29uc3QgaW5kZXgqIHN0cmlkZXMsCiAgICAgICAgICAgICAgICAgY29uc3QgaW5k ZXgqIGluZGV4X2Jhc2UpIDoKICAgIGJhc2VfKGJhc2UpLCBleHRlbnRzXyhleHRlbnRzKSwgc3Ry aWRlc18oc3RyaWRlcyksCiAgICBpbmRleF9iYXNlXyhpbmRleF9iYXNlKSB7CiAgfQoKICBUUHRy IGJhc2VfOwogIGNvbnN0IHNpemVfdHlwZSogZXh0ZW50c187CiAgY29uc3QgaW5kZXgqIHN0cmlk ZXNfOwogIGNvbnN0IGluZGV4KiBpbmRleF9iYXNlXzsKcHJpdmF0ZToKCiAgY29uc3Rfc3ViX2Fy cmF5JiBvcGVyYXRvcj0oY29uc3QgY29uc3Rfc3ViX2FycmF5Jik7Cn07CgoKCgoKCnRlbXBsYXRl IDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOdW1EaW1zPgpjbGFzcyBzdWJfYXJyYXkgOiBwdWJs aWMgY29uc3Rfc3ViX2FycmF5PFQsTnVtRGltcyxUKj4KewogIHR5cGVkZWYgY29uc3Rfc3ViX2Fy cmF5PFQsTnVtRGltcyxUKj4gc3VwZXJfdHlwZTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUg c3VwZXJfdHlwZTo6ZWxlbWVudCBlbGVtZW50OwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlw ZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6Omlu ZGV4IGluZGV4OwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6c2l6ZV90eXBlIHNpemVf dHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwog IHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0 ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6aXRlcl9iYXNlIGl0ZXJfYmFz ZTsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9y ZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpjb25zdF9pdGVyYXRvciBj b25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X3JldmVy c2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIHN1 cGVyX3R5cGU6OmNvbnN0X2l0ZXJfYmFzZSBjb25zdF9pdGVyX2Jhc2U7CgoKICB0ZW1wbGF0ZSA8 c3RkOjpzaXplX3QgTkRpbXM+CiAgc3RydWN0IGNvbnN0X2FycmF5X3ZpZXcgewogICAgdHlwZWRl ZiBib29zdDo6ZGV0YWlsOjptdWx0aV9hcnJheTo6Y29uc3RfbXVsdGlfYXJyYXlfdmlldzxULE5E aW1zPiB0eXBlOwogIH07CgogIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBORGltcz4KICBzdHJ1Y3Qg YXJyYXlfdmlldyB7CiAgICB0eXBlZGVmIGJvb3N0OjpkZXRhaWw6Om11bHRpX2FycmF5OjptdWx0 aV9hcnJheV92aWV3PFQsTkRpbXM+IHR5cGU7CiAgfTsKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBD b25zdE11bHRpQXJyYXk+CiAgc3ViX2FycmF5JiBvcGVyYXRvcj0oY29uc3QgQ29uc3RNdWx0aUFy cmF5JiBvdGhlcikgewogICAgZnVuY3Rpb25fcmVxdWlyZXM8IGJvb3N0OjpkZXRhaWw6Om11bHRp X2FycmF5OjpDb25zdE11bHRpQXJyYXlDb25jZXB0PAogICAgICAgIENvbnN0TXVsdGlBcnJheSwg TnVtRGltcz4gPigpOwoKCiAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKChvdGhlci5udW1fZGltZW5z aW9ucygpID09IG51bV9kaW1lbnNpb25zKCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgib3RoZXIu bnVtX2RpbWVuc2lvbnMoKSA9PSBudW1fZGltZW5zaW9ucygpIiwgIi9ob21lL2NvbXBiaW8vZDk1 LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L3N1YmFycmF5LmhwcCIsIDIzOCwgX19QUkVU VFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKChzdGQ6OmVxdWFs KG90aGVyLnNoYXBlKCksb3RoZXIuc2hhcGUoKStudW1fZGltZW5zaW9ucygpLCBzaGFwZSgpKSkg PyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJzdGQ6OmVxdWFsKG90aGVyLnNoYXBlKCksb3RoZXIuc2hh cGUoKStudW1fZGltZW5zaW9ucygpLCBzaGFwZSgpKSIsICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkv aW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS9zdWJhcnJheS5ocHAiLCAyNDAsIF9fUFJFVFRZX0ZV TkNUSU9OX18pLCAwKSkpOwoKCiAgICBzdGQ6OmNvcHkob3RoZXIuYmVnaW4oKSxvdGhlci5lbmQo KSxiZWdpbigpKTsKICAgIHJldHVybiAqdGhpczsKICB9CgoKICBzdWJfYXJyYXkmIG9wZXJhdG9y PShjb25zdCBzdWJfYXJyYXkmIG90aGVyKSB7CiAgICBpZiAoJm90aGVyICE9IHRoaXMpIHsKCiAg ICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKG90aGVyLm51bV9kaW1lbnNpb25zKCkgPT0gbnVtX2Rp bWVuc2lvbnMoKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJvdGhlci5udW1fZGltZW5zaW9ucygp ID09IG51bV9kaW1lbnNpb25zKCkiLCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v c3QvbXVsdGlfYXJyYXkvc3ViYXJyYXkuaHBwIiwgMjUwLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwg MCkpKTsKICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoc3RkOjplcXVhbChvdGhlci5zaGFwZSgp LG90aGVyLnNoYXBlKCkrbnVtX2RpbWVuc2lvbnMoKSwgc2hhcGUoKSkpID8gMCA6IChfX2Fzc2Vy dF9mYWlsICgic3RkOjplcXVhbChvdGhlci5zaGFwZSgpLG90aGVyLnNoYXBlKCkrbnVtX2RpbWVu c2lvbnMoKSwgc2hhcGUoKSkiLCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3Qv bXVsdGlfYXJyYXkvc3ViYXJyYXkuaHBwIiwgMjUyLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkp KTsKCgogICAgICBzdGQ6OmNvcHkob3RoZXIuYmVnaW4oKSxvdGhlci5lbmQoKSxiZWdpbigpKTsK ICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CgogIFQqIG9yaWdpbigpIHsgcmV0dXJuIGJhc2Vf OyB9CiAgY29uc3QgVCogb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gYmFzZV87IH0KCiAgcmVmZXJl bmNlIG9wZXJhdG9yW10oaW5kZXggaWR4KSB7CiAgICByZXR1cm4gc3VwZXJfdHlwZTo6YWNjZXNz KGJvb3N0Ojp0eXBlPHJlZmVyZW5jZT4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWR4LGJhc2VfLHNoYXBlKCksc3RyaWRlcygpLGluZGV4X2Jhc2VzKCkpOwogIH0KCgoKICB0ZW1w bGF0ZSA8aW50IE5EaW1zPgoKCgogIHR5cGVuYW1lIGFycmF5X3ZpZXc8TkRpbXM+Ojp0eXBlCiAg b3BlcmF0b3JbXShjb25zdCBib29zdDo6ZGV0YWlsOjptdWx0aV9hcnJheTo6CiAgICAgICAgICAg ICBpbmRleF9nZW48TnVtRGltcyxORGltcz4mIGluZGljZXMpIHsKICAgIHR5cGVkZWYgdHlwZW5h bWUgYXJyYXlfdmlldzxORGltcz46OnR5cGUgcmV0dXJuX3R5cGU7CiAgICByZXR1cm4KICAgICAg c3VwZXJfdHlwZTo6Z2VuZXJhdGVfYXJyYXlfdmlldyhib29zdDo6dHlwZTxyZXR1cm5fdHlwZT4o KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlKCksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RyaWRlcygpLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGluZGV4X2Jhc2VzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgb3JpZ2luKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIEluZGV4TGlzdD4KICBl bGVtZW50JiBvcGVyYXRvcigpKGNvbnN0IEluZGV4TGlzdCYgaW5kaWNlcykgewogICAgcmV0dXJu IHN1cGVyX3R5cGU6OmFjY2Vzc19lbGVtZW50KGJvb3N0Ojp0eXBlPGVsZW1lbnQmPigpLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbigpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXMsc3RyaWRlcygpKTsKICB9CgogIGl0ZXJh dG9yIGJlZ2luKCkgewogICAgcmV0dXJuIGl0ZXJhdG9yKGl0ZXJfYmFzZSgqaW5kZXhfYmFzZXMo KSxvcmlnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZSgpLHN0 cmlkZXMoKSxpbmRleF9iYXNlcygpKSk7CiAgfQoKICBpdGVyYXRvciBlbmQoKSB7CiAgICByZXR1 cm4gaXRlcmF0b3IoaXRlcl9iYXNlKCppbmRleF9iYXNlcygpKypzaGFwZSgpLG9yaWdpbigpLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlKCksc3RyaWRlcygpLGluZGV4 X2Jhc2VzKCkpKTsKICB9CgoKICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsKICAgIHJldmVy c2VfaXRlcmF0b3IgcmkoZW5kKCkpOwogICAgcmV0dXJuIHJpOwogIH0KCiAgcmV2ZXJzZV9pdGVy YXRvciByZW5kKCkgewogICAgcmV2ZXJzZV9pdGVyYXRvciByaShiZWdpbigpKTsKICAgIHJldHVy biByaTsKICB9CgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgSW5kZXhMaXN0PgogIGNvbnN0IGVsZW1l bnQmIG9wZXJhdG9yKCkoY29uc3QgSW5kZXhMaXN0JiBpbmRpY2VzKSBjb25zdCB7CiAgICByZXR1 cm4gc3VwZXJfdHlwZTo6b3BlcmF0b3IoKShpbmRpY2VzKTsKICB9CgogIGNvbnN0X3JlZmVyZW5j ZSBvcGVyYXRvcltdKGluZGV4IGlkeCkgY29uc3QgewogICAgcmV0dXJuIHN1cGVyX3R5cGU6Om9w ZXJhdG9yW10oaWR4KTsKICB9CgoKCiAgdGVtcGxhdGUgPGludCBORGltcz4KCgoKICB0eXBlbmFt ZSBjb25zdF9hcnJheV92aWV3PE5EaW1zPjo6dHlwZQogIG9wZXJhdG9yW10oY29uc3QgYm9vc3Q6 OmRldGFpbDo6bXVsdGlfYXJyYXk6OgogICAgICAgICAgICAgaW5kZXhfZ2VuPE51bURpbXMsTkRp bXM+JiBpbmRpY2VzKQogICAgY29uc3QgewogICAgcmV0dXJuIHN1cGVyX3R5cGU6Om9wZXJhdG9y W10oaW5kaWNlcyk7CiAgfQoKICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsKICAgIHJl dHVybiBzdXBlcl90eXBlOjpiZWdpbigpOwogIH0KCiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29u c3QgewogICAgcmV0dXJuIHN1cGVyX3R5cGU6OmVuZCgpOwogIH0KCiAgY29uc3RfcmV2ZXJzZV9p dGVyYXRvciByYmVnaW4oKSBjb25zdCB7CiAgICByZXR1cm4gc3VwZXJfdHlwZTo6cmJlZ2luKCk7 CiAgfQoKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7CiAgICByZXR1cm4g c3VwZXJfdHlwZTo6cmVuZCgpOwogIH0KCgpwcml2YXRlOgogIHRlbXBsYXRlIDx0eXBlbmFtZSxz dGQ6OnNpemVfdD4gZnJpZW5kIGNsYXNzIHZhbHVlX2FjY2Vzc29yX247CgoKCgogIHN1Yl9hcnJh eSAoVCogYmFzZSwKICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlKiBleHRlbnRzLAogICAgICAg ICAgICBjb25zdCBpbmRleCogc3RyaWRlcywKICAgICAgICAgICAgY29uc3QgaW5kZXgqIGluZGV4 X2Jhc2UpIDoKICAgIHN1cGVyX3R5cGUoYmFzZSxleHRlbnRzLHN0cmlkZXMsaW5kZXhfYmFzZSkg ewogIH0KCn07Cgp9Cn0KCgoKdGVtcGxhdGUgPHR5cGVuYW1lIEFycmF5LCBpbnQgTj4KY2xhc3Mg c3ViYXJyYXlfZ2VuIHsKICB0eXBlZGVmIHR5cGVuYW1lIEFycmF5OjplbGVtZW50IGVsZW1lbnQ7 CnB1YmxpYzoKICB0eXBlZGVmIGJvb3N0OjpkZXRhaWw6Om11bHRpX2FycmF5OjpzdWJfYXJyYXk8 ZWxlbWVudCxOPiB0eXBlOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIEFycmF5LCBpbnQgTj4KY2xh c3MgY29uc3Rfc3ViYXJyYXlfZ2VuIHsKICB0eXBlZGVmIHR5cGVuYW1lIEFycmF5OjplbGVtZW50 IGVsZW1lbnQ7CnB1YmxpYzoKICB0eXBlZGVmIGJvb3N0OjpkZXRhaWw6Om11bHRpX2FycmF5Ojpj b25zdF9zdWJfYXJyYXk8ZWxlbWVudCxOPiB0eXBlOwp9Owp9CiMgMjYgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5LmhwcCIgMiAzCiMgMSAiL2hvbWUvY29t cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvbXVsdGlfYXJyYXlfcmVmLmhw cCIgMSAzCiMgMjYgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2Fy cmF5L211bHRpX2FycmF5X3JlZi5ocHAiIDMKIyAxICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5j bHVkZS9ib29zdC9tdWx0aV9hcnJheS92aWV3LmhwcCIgMSAzCiMgMzMgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L3ZpZXcuaHBwIiAzCm5hbWVzcGFjZSBi b29zdCB7Cm5hbWVzcGFjZSBkZXRhaWwgewpuYW1lc3BhY2UgbXVsdGlfYXJyYXkgewoKCnRlbXBs YXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOdW1EaW1zLCB0eXBlbmFtZSBUUHRyPgpjbGFz cyBjb25zdF9tdWx0aV9hcnJheV92aWV3IDoKICAgIHB1YmxpYyBib29zdDo6ZGV0YWlsOjptdWx0 aV9hcnJheTo6bXVsdGlfYXJyYXlfaW1wbF9iYXNlPFQsTnVtRGltcz4KewogIHR5cGVkZWYgYm9v c3Q6OmRldGFpbDo6bXVsdGlfYXJyYXk6Om11bHRpX2FycmF5X2ltcGxfYmFzZTxULE51bURpbXM+ IHN1cGVyX3R5cGU7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OnZhbHVl X3R5cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X3Jl ZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpj b25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5 cGU6OmNvbnN0X2l0ZXJfYmFzZSBjb25zdF9pdGVyX2Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBz dXBlcl90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7 CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjplbGVtZW50IGVsZW1lbnQ7CiAgdHlwZWRl ZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlw ZW5hbWUgc3VwZXJfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl ZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmluZGV4IGluZGV4OwogIHR5cGVkZWYgdHlwZW5hbWUg c3VwZXJfdHlwZTo6ZXh0ZW50X3JhbmdlIGV4dGVudF9yYW5nZTsKCgogIHRlbXBsYXRlIDxzdGQ6 OnNpemVfdCBORGltcz4KICBzdHJ1Y3QgY29uc3RfYXJyYXlfdmlldyB7CiAgICB0eXBlZGVmIGJv b3N0OjpkZXRhaWw6Om11bHRpX2FycmF5Ojpjb25zdF9tdWx0aV9hcnJheV92aWV3PFQsTkRpbXM+ IHR5cGU7CiAgfTsKCiAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE5EaW1zPgogIHN0cnVjdCBhcnJh eV92aWV3IHsKICAgIHR5cGVkZWYgYm9vc3Q6OmRldGFpbDo6bXVsdGlfYXJyYXk6Om11bHRpX2Fy cmF5X3ZpZXc8VCxORGltcz4gdHlwZTsKICB9OwoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT1B0cj4K ICBjb25zdF9tdWx0aV9hcnJheV92aWV3KGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdF9tdWx0aV9hcnJheV92aWV3PFQsTnVtRGltcyxPUHRyPiYgb3RoZXIpIDoKICAgIGJhc2Vf KG90aGVyLmJhc2VfKSwgb3JpZ2luX29mZnNldF8ob3RoZXIub3JpZ2luX29mZnNldF8pLAogICAg bnVtX2VsZW1lbnRzXyhvdGhlci5udW1fZWxlbWVudHNfKSwgZXh0ZW50X2xpc3RfKG90aGVyLmV4 dGVudF9saXN0XyksCiAgICBzdHJpZGVfbGlzdF8ob3RoZXIuc3RyaWRlX2xpc3RfKSwgaW5kZXhf YmFzZV9saXN0XyhvdGhlci5pbmRleF9iYXNlX2xpc3RfKQogIHsgfQoKCiAgdGVtcGxhdGUgPGNs YXNzIEJhc2VMaXN0PgogIHZvaWQgcmVpbmRleChjb25zdCBCYXNlTGlzdCYgdmFsdWVzKSB7CiAg ICBib29zdDo6Y29weV9uKHZhbHVlcy5iZWdpbigpLG51bV9kaW1lbnNpb25zKCksaW5kZXhfYmFz ZV9saXN0Xy5iZWdpbigpKTsKICAgIG9yaWdpbl9vZmZzZXRfID0KICAgICAgY2FsY3VsYXRlX2lu ZGV4aW5nX29mZnNldChzdHJpZGVfbGlzdF8saW5kZXhfYmFzZV9saXN0Xyk7CiAgfQoKICB2b2lk IHJlaW5kZXgoaW5kZXggdmFsdWUpIHsKICAgIGluZGV4X2Jhc2VfbGlzdF8uYXNzaWduKHZhbHVl KTsKICAgIG9yaWdpbl9vZmZzZXRfID0KICAgICAgY2FsY3VsYXRlX2luZGV4aW5nX29mZnNldChz dHJpZGVfbGlzdF8saW5kZXhfYmFzZV9saXN0Xyk7CiAgfQoKICBzaXplX3R5cGUgbnVtX2RpbWVu c2lvbnMoKSBjb25zdCB7IHJldHVybiBOdW1EaW1zOyB9CgogIHNpemVfdHlwZSBzaXplKCkgY29u c3QgeyByZXR1cm4gZXh0ZW50X2xpc3RfLmZyb250KCk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUo KSBjb25zdCB7IHJldHVybiBudW1fZWxlbWVudHMoKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7 IHJldHVybiBzaXplKCkgPT0gMDsgfQoKICBjb25zdCBzaXplX3R5cGUqIHNoYXBlKCkgY29uc3Qg ewogICAgcmV0dXJuIGV4dGVudF9saXN0Xy5kYXRhKCk7CiAgfQoKICBjb25zdCBpbmRleCogc3Ry aWRlcygpIGNvbnN0IHsKICAgIHJldHVybiBzdHJpZGVfbGlzdF8uZGF0YSgpOwogIH0KCiAgY29u c3QgVCogb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gYmFzZV8rb3JpZ2luX29mZnNldF87IH0KCiAg c2l6ZV90eXBlIG51bV9lbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG51bV9lbGVtZW50c187IH0K CiAgY29uc3QgaW5kZXgqIGluZGV4X2Jhc2VzKCkgY29uc3QgewogICAgcmV0dXJuIGluZGV4X2Jh c2VfbGlzdF8uZGF0YSgpOwogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4TGlzdD4KICBj b25zdCBlbGVtZW50JiBvcGVyYXRvcigpKEluZGV4TGlzdCBpbmRpY2VzKSBjb25zdCB7CiAgICBy ZXR1cm4gc3VwZXJfdHlwZTo6YWNjZXNzX2VsZW1lbnQoYm9vc3Q6OnR5cGU8Y29uc3QgZWxlbWVu dCY+KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luKCksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlcyxzdHJpZGVzKCkpOwog IH0KCgogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKGluZGV4IGlkeCkgY29uc3QgewogICAg cmV0dXJuIHN1cGVyX3R5cGU6OmFjY2Vzcyhib29zdDo6dHlwZTxjb25zdF9yZWZlcmVuY2U+KCks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeCxvcmlnaW4oKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2hhcGUoKSxzdHJpZGVzKCksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGluZGV4X2Jhc2VzKCkpOwogIH0KCgoKICB0ZW1wbGF0ZSA8aW50IE5EaW1zPgoK CgogIHR5cGVuYW1lIGNvbnN0X2FycmF5X3ZpZXc8TkRpbXM+Ojp0eXBlCiAgb3BlcmF0b3JbXShj b25zdCBib29zdDo6ZGV0YWlsOjptdWx0aV9hcnJheTo6CiAgICAgICAgICAgICBpbmRleF9nZW48 TnVtRGltcyxORGltcz4mIGluZGljZXMpCiAgICBjb25zdCB7CiAgICB0eXBlZGVmIHR5cGVuYW1l IGNvbnN0X2FycmF5X3ZpZXc8TkRpbXM+Ojp0eXBlIHJldHVybl90eXBlOwogICAgcmV0dXJuCiAg ICAgIHN1cGVyX3R5cGU6OmdlbmVyYXRlX2FycmF5X3ZpZXcoYm9vc3Q6OnR5cGU8cmV0dXJuX3R5 cGU+KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlcywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZSgpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlkZXMoKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbmRleF9iYXNlcygpLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG9yaWdpbigpKTsKICB9CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25z dCB7CiAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoY29uc3RfaXRlcl9iYXNlKCppbmRleF9iYXNl cygpLG9yaWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlKCks c3RyaWRlcygpLGluZGV4X2Jhc2VzKCkpKTsKICB9CgogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNv bnN0IHsKICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihjb25zdF9pdGVyX2Jhc2UoKmluZGV4X2Jh c2VzKCkrKnNoYXBlKCksb3JpZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2hhcGUoKSxzdHJpZGVzKCksaW5kZXhfYmFzZXMoKSkpOwogIH0KCiAgY29uc3RfcmV2ZXJz ZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7CiAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVy YXRvcihlbmQoKSk7CiAgfQoKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7 CiAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsKICB9CgoKICB0ZW1w bGF0ZSA8dHlwZW5hbWUgT1B0cj4KICBib29sIG9wZXJhdG9yPT0oY29uc3QKICAgICAgICAgICAg ICAgICAgY29uc3RfbXVsdGlfYXJyYXlfdmlldzxULE51bURpbXMsT1B0cj4mIHJocykKICAgIGNv bnN0IHsKICAgIGlmKHN0ZDo6ZXF1YWwoZXh0ZW50X2xpc3RfLmJlZ2luKCksCiAgICAgICAgICAg ICAgICAgIGV4dGVudF9saXN0Xy5lbmQoKSwKICAgICAgICAgICAgICAgICAgcmhzLmV4dGVudF9s aXN0Xy5iZWdpbigpKSkKICAgICAgcmV0dXJuIHN0ZDo6ZXF1YWwoYmVnaW4oKSxlbmQoKSxyaHMu YmVnaW4oKSk7CiAgICBlbHNlIHJldHVybiBmYWxzZTsKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFt ZSBPUHRyPgogIGJvb2wgb3BlcmF0b3I8KGNvbnN0CiAgICAgICAgICAgICAgICAgY29uc3RfbXVs dGlfYXJyYXlfdmlldzxULE51bURpbXMsT1B0cj4mIHJocykKICAgIGNvbnN0IHsKICAgIHJldHVy biBzdGQ6OmxleGljb2dyYXBoaWNhbF9jb21wYXJlKGJlZ2luKCksZW5kKCkscmhzLmJlZ2luKCks cmhzLmVuZCgpKTsKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBPUHRyPgogIGJvb2wgb3BlcmF0 b3IhPShjb25zdAogICAgICAgICAgICAgICAgICBjb25zdF9tdWx0aV9hcnJheV92aWV3PFQsTnVt RGltcyxPUHRyPiYgcmhzKQogICAgY29uc3QgewogICAgcmV0dXJuICEoKnRoaXMgPT0gcmhzKTsK ICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBPUHRyPgogIGJvb2wgb3BlcmF0b3I+KGNvbnN0CiAg ICAgICAgICAgICAgICAgY29uc3RfbXVsdGlfYXJyYXlfdmlldzxULE51bURpbXMsT1B0cj4mIHJo cykKICAgIGNvbnN0IHsKICAgIHJldHVybiByaHMgPCAqdGhpczsKICB9CgogIHRlbXBsYXRlIDx0 eXBlbmFtZSBPUHRyPgogIGJvb2wgb3BlcmF0b3I8PShjb25zdAogICAgICAgICAgICAgICAgIGNv bnN0X211bHRpX2FycmF5X3ZpZXc8VCxOdW1EaW1zLE9QdHI+JiByaHMpCiAgICBjb25zdCB7CiAg ICByZXR1cm4gISgqdGhpcyA+IHJocyk7CiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT1B0cj4K ICBib29sIG9wZXJhdG9yPj0oY29uc3QKICAgICAgICAgICAgICAgICBjb25zdF9tdWx0aV9hcnJh eV92aWV3PFQsTnVtRGltcyxPUHRyPiYgcmhzKQogICAgY29uc3QgewogICAgcmV0dXJuICEoKnRo aXMgPCByaHMpOwogIH0KCgoKcHJvdGVjdGVkOgogIHRlbXBsYXRlIDx0eXBlbmFtZSxzdGQ6OnNp emVfdD4gZnJpZW5kIGNsYXNzIG11bHRpX2FycmF5X2ltcGxfYmFzZTsKICB0ZW1wbGF0ZSA8dHlw ZW5hbWUsc3RkOjpzaXplX3QsdHlwZW5hbWU+IGZyaWVuZCBjbGFzcyBjb25zdF9tdWx0aV9hcnJh eV92aWV3OwoKCgoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBFeHRlbnRMaXN0LCB0eXBlbmFtZSBJ bmRleD4KICBleHBsaWNpdCBjb25zdF9tdWx0aV9hcnJheV92aWV3KFRQdHIgYmFzZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRXh0ZW50TGlzdCYgZXh0ZW50cywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgYm9vc3Q6OmFycmF5PEluZGV4LE51bURpbXM+JiBzdHJp ZGVzKToKICAgIGJhc2VfKGJhc2UpLCBvcmlnaW5fb2Zmc2V0XygwKSB7CgogICAgaW5kZXhfYmFz ZV9saXN0Xy5hc3NpZ24oMCk7CgoKICAgIGJvb3N0Ojpjb3B5X24oZXh0ZW50cy5iZWdpbigpLE51 bURpbXMsZXh0ZW50X2xpc3RfLmJlZ2luKCkpOwogICAgYm9vc3Q6OmNvcHlfbihzdHJpZGVzLmJl Z2luKCksTnVtRGltcyxzdHJpZGVfbGlzdF8uYmVnaW4oKSk7CgoKICAgIG51bV9lbGVtZW50c18g PSBzdGQ6OmFjY3VtdWxhdGUoZXh0ZW50X2xpc3RfLmJlZ2luKCksZXh0ZW50X2xpc3RfLmVuZCgp LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlKDEpLHN0ZDo6bXVsdGlwbGll czxzaXplX3R5cGU+KCkpOwogICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgobnVtX2VsZW1lbnRzXyAh PSAwKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIm51bV9lbGVtZW50c18gIT0gMCIsICIvaG9tZS9j b21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS92aWV3LmhwcCIsIDIzNSwg X19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgfQoKICB0eXBlZGVmIGJvb3N0OjphcnJheTxz aXplX3R5cGUsTnVtRGltcz4gc2l6ZV9saXN0OwogIHR5cGVkZWYgYm9vc3Q6OmFycmF5PGluZGV4 LE51bURpbXM+IGluZGV4X2xpc3Q7CgogIFRQdHIgYmFzZV87CiAgaW5kZXggb3JpZ2luX29mZnNl dF87CiAgc2l6ZV90eXBlIG51bV9lbGVtZW50c187CiAgc2l6ZV9saXN0IGV4dGVudF9saXN0XzsK ICBpbmRleF9saXN0IHN0cmlkZV9saXN0XzsKICBpbmRleF9saXN0IGluZGV4X2Jhc2VfbGlzdF87 Cgpwcml2YXRlOgoKICBjb25zdF9tdWx0aV9hcnJheV92aWV3JiBvcGVyYXRvcj0oY29uc3QgY29u c3RfbXVsdGlfYXJyYXlfdmlldyYgb3RoZXIpOwp9OwoKCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBz dGQ6OnNpemVfdCBOdW1EaW1zPgpjbGFzcyBtdWx0aV9hcnJheV92aWV3IDoKICBwdWJsaWMgY29u c3RfbXVsdGlfYXJyYXlfdmlldzxULE51bURpbXMsVCo+CnsKICB0eXBlZGVmIGNvbnN0X211bHRp X2FycmF5X3ZpZXc8VCxOdW1EaW1zLFQqPiBzdXBlcl90eXBlOwpwdWJsaWM6CiAgdHlwZWRlZiB0 eXBlbmFtZSBzdXBlcl90eXBlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBl bmFtZSBzdXBlcl90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUg c3VwZXJfdHlwZTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90 eXBlOjppdGVyX2Jhc2UgaXRlcl9iYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6 cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgc3Vw ZXJfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVu YW1lIHN1cGVyX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYg dHlwZW5hbWUgc3VwZXJfdHlwZTo6Y29uc3RfaXRlcl9iYXNlIGNvbnN0X2l0ZXJfYmFzZTsKICB0 eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3Rf cmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmVsZW1lbnQg ZWxlbWVudDsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5 cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVy ZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6aW5kZXggaW5kZXg7CiAg dHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpleHRlbnRfcmFuZ2UgZXh0ZW50X3JhbmdlOwoK CiAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE5EaW1zPgogIHN0cnVjdCBjb25zdF9hcnJheV92aWV3 IHsKICAgIHR5cGVkZWYgYm9vc3Q6OmRldGFpbDo6bXVsdGlfYXJyYXk6OmNvbnN0X211bHRpX2Fy cmF5X3ZpZXc8VCxORGltcz4gdHlwZTsKICB9OwoKICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTkRp bXM+CiAgc3RydWN0IGFycmF5X3ZpZXcgewogICAgdHlwZWRlZiBib29zdDo6ZGV0YWlsOjptdWx0 aV9hcnJheTo6bXVsdGlfYXJyYXlfdmlldzxULE5EaW1zPiB0eXBlOwogIH07CgoKICB0ZW1wbGF0 ZSA8dHlwZW5hbWUgQ29uc3RNdWx0aUFycmF5PgogIG11bHRpX2FycmF5X3ZpZXcmIG9wZXJhdG9y PShjb25zdCBDb25zdE11bHRpQXJyYXkmIG90aGVyKSB7CiAgICBmdW5jdGlvbl9yZXF1aXJlczwK ICAgICAgYm9vc3Q6OmRldGFpbDo6bXVsdGlfYXJyYXk6OgogICAgICBDb25zdE11bHRpQXJyYXlD b25jZXB0PENvbnN0TXVsdGlBcnJheSxOdW1EaW1zPiA+KCk7CgoKICAgIChzdGF0aWNfY2FzdDx2 b2lkPiAoKG90aGVyLm51bV9kaW1lbnNpb25zKCkgPT0gbnVtX2RpbWVuc2lvbnMoKSkgPyAwIDog KF9fYXNzZXJ0X2ZhaWwgKCJvdGhlci5udW1fZGltZW5zaW9ucygpID09IG51bV9kaW1lbnNpb25z KCkiLCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvdmll dy5ocHAiLCAyOTQsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgKHN0YXRpY19jYXN0 PHZvaWQ+ICgoc3RkOjplcXVhbChvdGhlci5zaGFwZSgpLG90aGVyLnNoYXBlKCkrbnVtX2RpbWVu c2lvbnMoKSwgc2hhcGUoKSkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgic3RkOjplcXVhbChvdGhl ci5zaGFwZSgpLG90aGVyLnNoYXBlKCkrbnVtX2RpbWVuc2lvbnMoKSwgc2hhcGUoKSkiLCAiL2hv bWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkvdmlldy5ocHAiLCAy OTYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKCiAgICBzdGQ6OmNvcHkob3RoZXIuYmVn aW4oKSxvdGhlci5lbmQoKSxiZWdpbigpKTsKICAgIHJldHVybiAqdGhpczsKICB9CgoKICBtdWx0 aV9hcnJheV92aWV3JiBvcGVyYXRvcj0oY29uc3QgbXVsdGlfYXJyYXlfdmlldyYgb3RoZXIpIHsK ICAgIGlmICgmb3RoZXIgIT0gdGhpcykgewoKICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgob3Ro ZXIubnVtX2RpbWVuc2lvbnMoKSA9PSBudW1fZGltZW5zaW9ucygpKSA/IDAgOiAoX19hc3NlcnRf ZmFpbCAoIm90aGVyLm51bV9kaW1lbnNpb25zKCkgPT0gbnVtX2RpbWVuc2lvbnMoKSIsICIvaG9t ZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS92aWV3LmhwcCIsIDMw NiwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAo KHN0ZDo6ZXF1YWwob3RoZXIuc2hhcGUoKSxvdGhlci5zaGFwZSgpK251bV9kaW1lbnNpb25zKCks IHNoYXBlKCkpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoInN0ZDo6ZXF1YWwob3RoZXIuc2hhcGUo KSxvdGhlci5zaGFwZSgpK251bV9kaW1lbnNpb25zKCksIHNoYXBlKCkpIiwgIi9ob21lL2NvbXBi aW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L3ZpZXcuaHBwIiwgMzA4LCBfX1BS RVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKCgogICAgICBzdGQ6OmNvcHkob3RoZXIuYmVnaW4oKSxv dGhlci5lbmQoKSxiZWdpbigpKTsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CgogIGVsZW1l bnQqIG9yaWdpbigpIHsgcmV0dXJuIGJhc2VfK29yaWdpbl9vZmZzZXRfOyB9CgogIHRlbXBsYXRl IDxjbGFzcyBJbmRleExpc3Q+CiAgZWxlbWVudCYgb3BlcmF0b3IoKShjb25zdCBJbmRleExpc3Qm IGluZGljZXMpIHsKICAgIHJldHVybiBzdXBlcl90eXBlOjphY2Nlc3NfZWxlbWVudChib29zdDo6 dHlwZTxlbGVtZW50Jj4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv cmlnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLHN0 cmlkZXMoKSk7CiAgfQoKCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oaW5kZXggaWR4KSB7CiAgICBy ZXR1cm4gc3VwZXJfdHlwZTo6YWNjZXNzKGJvb3N0Ojp0eXBlPHJlZmVyZW5jZT4oKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWR4LG9yaWdpbigpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaGFwZSgpLHN0cmlkZXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW5kZXhfYmFzZXMoKSk7CiAgfQoKCgoKICB0ZW1wbGF0ZSA8aW50IE5EaW1zPgoKCgogIHR5 cGVuYW1lIGFycmF5X3ZpZXc8TkRpbXM+Ojp0eXBlCiAgb3BlcmF0b3JbXShjb25zdCBib29zdDo6 ZGV0YWlsOjptdWx0aV9hcnJheTo6CiAgICAgICAgICAgICBpbmRleF9nZW48TnVtRGltcyxORGlt cz4mIGluZGljZXMpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgYXJyYXlfdmlldzxORGltcz46OnR5 cGUgcmV0dXJuX3R5cGU7CiAgICByZXR1cm4KICAgICAgc3VwZXJfdHlwZTo6Z2VuZXJhdGVfYXJy YXlfdmlldyhib29zdDo6dHlwZTxyZXR1cm5fdHlwZT4oKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbmRpY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNoYXBlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry aWRlcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4X2Jhc2Vz KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luKCkpOwogIH0K CgogIGl0ZXJhdG9yIGJlZ2luKCkgewogICAgcmV0dXJuIGl0ZXJhdG9yKGl0ZXJfYmFzZSgqaW5k ZXhfYmFzZXMoKSxvcmlnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aGFwZSgpLHN0cmlkZXMoKSxpbmRleF9iYXNlcygpKSk7CiAgfQoKICBpdGVyYXRvciBlbmQoKSB7 CiAgICByZXR1cm4gaXRlcmF0b3IoaXRlcl9iYXNlKCppbmRleF9iYXNlcygpKypzaGFwZSgpLG9y aWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlKCksc3RyaWRl cygpLGluZGV4X2Jhc2VzKCkpKTsKICB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgewog ICAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOwogIH0KCiAgcmV2ZXJzZV9pdGVyYXRv ciByZW5kKCkgewogICAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7CiAgfQoKCgoK ICBjb25zdCBlbGVtZW50KiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBzdXBlcl90eXBlOjpvcmln aW4oKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgSW5kZXhMaXN0PgogIGNvbnN0IGVsZW1lbnQmIG9w ZXJhdG9yKCkoY29uc3QgSW5kZXhMaXN0JiBpbmRpY2VzKSBjb25zdCB7CiAgICByZXR1cm4gc3Vw ZXJfdHlwZTo6b3BlcmF0b3IoKShpbmRpY2VzKTsKICB9CgogIGNvbnN0X3JlZmVyZW5jZSBvcGVy YXRvcltdKGluZGV4IGlkeCkgY29uc3QgewogICAgcmV0dXJuIHN1cGVyX3R5cGU6Om9wZXJhdG9y W10oaWR4KTsKICB9CgoKCiAgdGVtcGxhdGUgPGludCBORGltcz4KCgoKICB0eXBlbmFtZSBjb25z dF9hcnJheV92aWV3PE5EaW1zPjo6dHlwZQogIG9wZXJhdG9yW10oY29uc3QgYm9vc3Q6OmRldGFp bDo6bXVsdGlfYXJyYXk6OgogICAgICAgICAgICAgaW5kZXhfZ2VuPE51bURpbXMsTkRpbXM+JiBp bmRpY2VzKQogICAgY29uc3QgewogICAgcmV0dXJuIHN1cGVyX3R5cGU6Om9wZXJhdG9yW10oaW5k aWNlcyk7CiAgfQoKICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsKICAgIHJldHVybiBz dXBlcl90eXBlOjpiZWdpbigpOwogIH0KCiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qgewog ICAgcmV0dXJuIHN1cGVyX3R5cGU6OmVuZCgpOwogIH0KCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRv ciByYmVnaW4oKSBjb25zdCB7CiAgICByZXR1cm4gc3VwZXJfdHlwZTo6cmJlZ2luKCk7CiAgfQoK ICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7CiAgICByZXR1cm4gc3VwZXJf dHlwZTo6cmVuZCgpOwogIH0KCgpwcml2YXRlOgogIHRlbXBsYXRlIDx0eXBlbmFtZSxzdGQ6OnNp emVfdD4gZnJpZW5kIGNsYXNzIG11bHRpX2FycmF5X2ltcGxfYmFzZTsKCgoKCgoKICB0ZW1wbGF0 ZSA8dHlwZW5hbWUgRXh0ZW50TGlzdCwgdHlwZW5hbWUgSW5kZXg+CiAgZXhwbGljaXQgbXVsdGlf YXJyYXlfdmlldyhUKiBiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRXh0 ZW50TGlzdCYgZXh0ZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb3N0 OjphcnJheTxJbmRleCxOdW1EaW1zPiYgc3RyaWRlcykgOgogICAgc3VwZXJfdHlwZShiYXNlLGV4 dGVudHMsc3RyaWRlcykgeyB9Cgp9OwoKfQp9CgoKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJyYXks IGludCBOPgpjbGFzcyBhcnJheV92aWV3X2dlbiB7CiAgdHlwZWRlZiB0eXBlbmFtZSBBcnJheTo6 ZWxlbWVudCBlbGVtZW50OwpwdWJsaWM6CiAgdHlwZWRlZiBib29zdDo6ZGV0YWlsOjptdWx0aV9h cnJheTo6bXVsdGlfYXJyYXlfdmlldzxlbGVtZW50LE4+IHR5cGU7Cn07Cgp0ZW1wbGF0ZSA8dHlw ZW5hbWUgQXJyYXksIGludCBOPgpjbGFzcyBjb25zdF9hcnJheV92aWV3X2dlbiB7CiAgdHlwZWRl ZiB0eXBlbmFtZSBBcnJheTo6ZWxlbWVudCBlbGVtZW50OwpwdWJsaWM6CiAgdHlwZWRlZiBib29z dDo6ZGV0YWlsOjptdWx0aV9hcnJheTo6Y29uc3RfbXVsdGlfYXJyYXlfdmlldzxlbGVtZW50LE4+ IHR5cGU7Cn07Cgp9CiMgMjcgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211 bHRpX2FycmF5L211bHRpX2FycmF5X3JlZi5ocHAiIDIgMwoKCgojIDEgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L2Z1bmN0aW9uYWwuaHBwIiAxIDMKIyAyNyAiL2hvbWUvY29t cGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvZnVuY3Rpb25hbC5ocHAiIDMKbmFtZXNwYWNlIGJv b3N0CnsKIyA0MyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvZnVuY3Rpb25h bC5ocHAiIDMKICAgIG5hbWVzcGFjZSBkZXRhaWwKICAgIHsKICAgICAgICB0ZW1wbGF0ZSA8Y2xh c3MgT3BlcmF0aW9uPgogICAgICAgIHN0cnVjdCB1bmFyeV90cmFpdHNfaW1wOwoKICAgICAgICB0 ZW1wbGF0ZSA8Y2xhc3MgT3BlcmF0aW9uPgogICAgICAgIHN0cnVjdCB1bmFyeV90cmFpdHNfaW1w PE9wZXJhdGlvbio+CiAgICAgICAgewogICAgICAgICAgICB0eXBlZGVmIE9wZXJhdGlvbiBmdW5j dGlvbl90eXBlOwogICAgICAgICAgICB0eXBlZGVmIGNvbnN0IGZ1bmN0aW9uX3R5cGUgJiBwYXJh bV90eXBlOwogICAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIE9wZXJhdGlvbjo6cmVzdWx0X3R5 cGUgcmVzdWx0X3R5cGU7CiAgICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgT3BlcmF0aW9uOjph cmd1bWVudF90eXBlIGFyZ3VtZW50X3R5cGU7CiAgICAgICAgfTsKCiAgICAgICAgdGVtcGxhdGUg PGNsYXNzIFIsIGNsYXNzIEE+CiAgICAgICAgc3RydWN0IHVuYXJ5X3RyYWl0c19pbXA8UigqKShB KT4KICAgICAgICB7CiAgICAgICAgICAgIHR5cGVkZWYgUiAoKmZ1bmN0aW9uX3R5cGUpKEEpOwog ICAgICAgICAgICB0eXBlZGVmIFIgKCpwYXJhbV90eXBlKShBKTsKICAgICAgICAgICAgdHlwZWRl ZiBSIHJlc3VsdF90eXBlOwogICAgICAgICAgICB0eXBlZGVmIEEgYXJndW1lbnRfdHlwZTsKICAg ICAgICB9OwoKICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgT3BlcmF0aW9uPgogICAgICAgIHN0cnVj dCBiaW5hcnlfdHJhaXRzX2ltcDsKCiAgICAgICAgdGVtcGxhdGUgPGNsYXNzIE9wZXJhdGlvbj4K ICAgICAgICBzdHJ1Y3QgYmluYXJ5X3RyYWl0c19pbXA8T3BlcmF0aW9uKj4KICAgICAgICB7CiAg ICAgICAgICAgIHR5cGVkZWYgT3BlcmF0aW9uIGZ1bmN0aW9uX3R5cGU7CiAgICAgICAgICAgIHR5 cGVkZWYgY29uc3QgZnVuY3Rpb25fdHlwZSAmIHBhcmFtX3R5cGU7CiAgICAgICAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgT3BlcmF0aW9uOjpyZXN1bHRfdHlwZSByZXN1bHRfdHlwZTsKICAgICAgICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBPcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgZmlyc3Rf YXJndW1lbnRfdHlwZTsKICAgICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBPcGVyYXRpb246OnNl Y29uZF9hcmd1bWVudF90eXBlIHNlY29uZF9hcmd1bWVudF90eXBlOwogICAgICAgIH07CgogICAg ICAgIHRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBBMSwgY2xhc3MgQTI+CiAgICAgICAgc3RydWN0 IGJpbmFyeV90cmFpdHNfaW1wPFIoKikoQTEsQTIpPgogICAgICAgIHsKICAgICAgICAgICAgdHlw ZWRlZiBSICgqZnVuY3Rpb25fdHlwZSkoQTEsQTIpOwogICAgICAgICAgICB0eXBlZGVmIFIgKCpw YXJhbV90eXBlKShBMSxBMik7CiAgICAgICAgICAgIHR5cGVkZWYgUiByZXN1bHRfdHlwZTsKICAg ICAgICAgICAgdHlwZWRlZiBBMSBmaXJzdF9hcmd1bWVudF90eXBlOwogICAgICAgICAgICB0eXBl ZGVmIEEyIHNlY29uZF9hcmd1bWVudF90eXBlOwogICAgICAgIH07CiAgICB9CgogICAgdGVtcGxh dGUgPGNsYXNzIE9wZXJhdGlvbj4KICAgIHN0cnVjdCB1bmFyeV90cmFpdHMKICAgIHsKICAgICAg ICB0eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6dW5hcnlfdHJhaXRzX2ltcDxPcGVyYXRpb24qPjo6 ZnVuY3Rpb25fdHlwZSBmdW5jdGlvbl90eXBlOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgZGV0 YWlsOjp1bmFyeV90cmFpdHNfaW1wPE9wZXJhdGlvbio+OjpwYXJhbV90eXBlIHBhcmFtX3R5cGU7 CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OnVuYXJ5X3RyYWl0c19pbXA8T3BlcmF0 aW9uKj46OnJlc3VsdF90eXBlIHJlc3VsdF90eXBlOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUg ZGV0YWlsOjp1bmFyeV90cmFpdHNfaW1wPE9wZXJhdGlvbio+Ojphcmd1bWVudF90eXBlIGFyZ3Vt ZW50X3R5cGU7CiAgICB9OwoKICAgIHRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBBPgogICAgc3Ry dWN0IHVuYXJ5X3RyYWl0czxSKCopKEEpPgogICAgewogICAgICAgIHR5cGVkZWYgUiAoKmZ1bmN0 aW9uX3R5cGUpKEEpOwogICAgICAgIHR5cGVkZWYgUiAoKnBhcmFtX3R5cGUpKEEpOwogICAgICAg IHR5cGVkZWYgUiByZXN1bHRfdHlwZTsKICAgICAgICB0eXBlZGVmIEEgYXJndW1lbnRfdHlwZTsK ICAgIH07CgogICAgdGVtcGxhdGUgPGNsYXNzIE9wZXJhdGlvbj4KICAgIHN0cnVjdCBiaW5hcnlf dHJhaXRzCiAgICB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmJpbmFyeV90cmFp dHNfaW1wPE9wZXJhdGlvbio+OjpmdW5jdGlvbl90eXBlIGZ1bmN0aW9uX3R5cGU7CiAgICAgICAg dHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmJpbmFyeV90cmFpdHNfaW1wPE9wZXJhdGlvbio+Ojpw YXJhbV90eXBlIHBhcmFtX3R5cGU7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmJp bmFyeV90cmFpdHNfaW1wPE9wZXJhdGlvbio+OjpyZXN1bHRfdHlwZSByZXN1bHRfdHlwZTsKICAg ICAgICB0eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6YmluYXJ5X3RyYWl0c19pbXA8T3BlcmF0aW9u Kj46OmZpcnN0X2FyZ3VtZW50X3R5cGUgZmlyc3RfYXJndW1lbnRfdHlwZTsKICAgICAgICB0eXBl ZGVmIHR5cGVuYW1lIGRldGFpbDo6YmluYXJ5X3RyYWl0c19pbXA8T3BlcmF0aW9uKj46OnNlY29u ZF9hcmd1bWVudF90eXBlIHNlY29uZF9hcmd1bWVudF90eXBlOwogICAgfTsKCiAgICB0ZW1wbGF0 ZSA8Y2xhc3MgUiwgY2xhc3MgQTEsIGNsYXNzIEEyPgogICAgc3RydWN0IGJpbmFyeV90cmFpdHM8 UigqKShBMSxBMik+CiAgICB7CiAgICAgICAgdHlwZWRlZiBSICgqZnVuY3Rpb25fdHlwZSkoQTEs QTIpOwogICAgICAgIHR5cGVkZWYgUiAoKnBhcmFtX3R5cGUpKEExLEEyKTsKICAgICAgICB0eXBl ZGVmIFIgcmVzdWx0X3R5cGU7CiAgICAgICAgdHlwZWRlZiBBMSBmaXJzdF9hcmd1bWVudF90eXBl OwogICAgICAgIHR5cGVkZWYgQTIgc2Vjb25kX2FyZ3VtZW50X3R5cGU7CiAgICB9OwojIDE1NiAi L2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvZnVuY3Rpb25hbC5ocHAiIDMKICAg IHRlbXBsYXRlIDxjbGFzcyBQcmVkaWNhdGU+CiAgICBjbGFzcyB1bmFyeV9uZWdhdGUKICAgICAg ICA6IHB1YmxpYyBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIHVuYXJ5X3RyYWl0czxQcmVk aWNhdGU+Ojphcmd1bWVudF90eXBlLGJvb2w+CiAgICB7CiAgICAgIHB1YmxpYzoKICAgICAgICBl eHBsaWNpdCB1bmFyeV9uZWdhdGUodHlwZW5hbWUgdW5hcnlfdHJhaXRzPFByZWRpY2F0ZT46OnBh cmFtX3R5cGUgeCkKICAgICAgICAgICAgOgogICAgICAgICAgICBwcmVkKHgpCiAgICAgICAge30K ICAgICAgICBib29sIG9wZXJhdG9yKCkodHlwZW5hbWUgY2FsbF90cmFpdHM8dHlwZW5hbWUgdW5h cnlfdHJhaXRzPFByZWRpY2F0ZT46OmFyZ3VtZW50X3R5cGU+OjpwYXJhbV90eXBlIHgpIGNvbnN0 CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gIXByZWQoeCk7CiAgICAgICAgfQogICAgICBw cml2YXRlOgogICAgICAgIHR5cGVuYW1lIHVuYXJ5X3RyYWl0czxQcmVkaWNhdGU+OjpmdW5jdGlv bl90eXBlIHByZWQ7CiAgICB9OwoKICAgIHRlbXBsYXRlIDxjbGFzcyBQcmVkaWNhdGU+CiAgICB1 bmFyeV9uZWdhdGU8UHJlZGljYXRlPiBub3QxKGNvbnN0IFByZWRpY2F0ZSAmcHJlZCkKICAgIHsK CgogICAgICAgIHJldHVybiB1bmFyeV9uZWdhdGU8UHJlZGljYXRlPigodHlwZW5hbWUgdW5hcnlf dHJhaXRzPFByZWRpY2F0ZT46OnBhcmFtX3R5cGUpcHJlZCk7CiAgICB9CgogICAgdGVtcGxhdGUg PGNsYXNzIFByZWRpY2F0ZT4KICAgIHVuYXJ5X25lZ2F0ZTxQcmVkaWNhdGU+IG5vdDEoUHJlZGlj YXRlICZwcmVkKQogICAgewogICAgICAgIHJldHVybiB1bmFyeV9uZWdhdGU8UHJlZGljYXRlPihw cmVkKTsKICAgIH0KCgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgUHJlZGljYXRlPgogICAgY2xhc3Mg YmluYXJ5X25lZ2F0ZQogICAgICAgIDogcHVibGljIHN0ZDo6YmluYXJ5X2Z1bmN0aW9uPHR5cGVu YW1lIGJpbmFyeV90cmFpdHM8UHJlZGljYXRlPjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBiaW5hcnlfdHJhaXRzPFBy ZWRpY2F0ZT46OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJvb2w+CiAgICB7CiAgICAgIHB1YmxpYzoKICAgICAgICBleHBsaWNpdCBi aW5hcnlfbmVnYXRlKHR5cGVuYW1lIGJpbmFyeV90cmFpdHM8UHJlZGljYXRlPjo6cGFyYW1fdHlw ZSB4KQogICAgICAgICAgICA6CiAgICAgICAgICAgIHByZWQoeCkKICAgICAgICB7fQogICAgICAg IGJvb2wgb3BlcmF0b3IoKSh0eXBlbmFtZSBjYWxsX3RyYWl0czx0eXBlbmFtZSBiaW5hcnlfdHJh aXRzPFByZWRpY2F0ZT46OmZpcnN0X2FyZ3VtZW50X3R5cGU+OjpwYXJhbV90eXBlIHgsCiAgICAg ICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGNhbGxfdHJhaXRzPHR5cGVuYW1lIGJpbmFyeV90 cmFpdHM8UHJlZGljYXRlPjo6c2Vjb25kX2FyZ3VtZW50X3R5cGU+OjpwYXJhbV90eXBlIHkpIGNv bnN0CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gIXByZWQoeCx5KTsKICAgICAgICB9CiAg ICAgIHByaXZhdGU6CiAgICAgICAgdHlwZW5hbWUgYmluYXJ5X3RyYWl0czxQcmVkaWNhdGU+Ojpm dW5jdGlvbl90eXBlIHByZWQ7CiAgICB9OwoKICAgIHRlbXBsYXRlIDxjbGFzcyBQcmVkaWNhdGU+ CiAgICBiaW5hcnlfbmVnYXRlPFByZWRpY2F0ZT4gbm90Mihjb25zdCBQcmVkaWNhdGUgJnByZWQp CiAgICB7CgoKICAgICAgICByZXR1cm4gYmluYXJ5X25lZ2F0ZTxQcmVkaWNhdGU+KCh0eXBlbmFt ZSBiaW5hcnlfdHJhaXRzPFByZWRpY2F0ZT46OnBhcmFtX3R5cGUpcHJlZCk7CiAgICB9CgogICAg dGVtcGxhdGUgPGNsYXNzIFByZWRpY2F0ZT4KICAgIGJpbmFyeV9uZWdhdGU8UHJlZGljYXRlPiBu b3QyKFByZWRpY2F0ZSAmcHJlZCkKICAgIHsKICAgICAgICByZXR1cm4gYmluYXJ5X25lZ2F0ZTxQ cmVkaWNhdGU+KHByZWQpOwogICAgfQoKCgoKICAgIHRlbXBsYXRlIDxjbGFzcyBPcGVyYXRpb24+ CiAgICBjbGFzcyBiaW5kZXIxc3QKICAgICAgICA6IHB1YmxpYyBzdGQ6OnVuYXJ5X2Z1bmN0aW9u PHR5cGVuYW1lIGJpbmFyeV90cmFpdHM8T3BlcmF0aW9uPjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBiaW5hcnlfdHJh aXRzPE9wZXJhdGlvbj46OnJlc3VsdF90eXBlPgogICAgewogICAgICBwdWJsaWM6CiAgICAgICAg YmluZGVyMXN0KHR5cGVuYW1lIGJpbmFyeV90cmFpdHM8T3BlcmF0aW9uPjo6cGFyYW1fdHlwZSB4 LAogICAgICAgICAgICAgICAgICB0eXBlbmFtZSBjYWxsX3RyYWl0czx0eXBlbmFtZSBiaW5hcnlf dHJhaXRzPE9wZXJhdGlvbj46OmZpcnN0X2FyZ3VtZW50X3R5cGU+OjpwYXJhbV90eXBlIHkpCiAg ICAgICAgICAgIDoKICAgICAgICAgICAgb3AoeCksIHZhbHVlKHkpCiAgICAgICAge30KCiAgICAg ICAgdHlwZW5hbWUgYmluYXJ5X3RyYWl0czxPcGVyYXRpb24+OjpyZXN1bHRfdHlwZQogICAgICAg IG9wZXJhdG9yKCkodHlwZW5hbWUgY2FsbF90cmFpdHM8dHlwZW5hbWUgYmluYXJ5X3RyYWl0czxP cGVyYXRpb24+OjpzZWNvbmRfYXJndW1lbnRfdHlwZT46OnBhcmFtX3R5cGUgeCkgY29uc3QKICAg ICAgICB7CiAgICAgICAgICAgIHJldHVybiBvcCh2YWx1ZSwgeCk7CiAgICAgICAgfQoKICAgICAg cHJvdGVjdGVkOgogICAgICAgIHR5cGVuYW1lIGJpbmFyeV90cmFpdHM8T3BlcmF0aW9uPjo6ZnVu Y3Rpb25fdHlwZSBvcDsKICAgICAgICB0eXBlbmFtZSBiaW5hcnlfdHJhaXRzPE9wZXJhdGlvbj46 OmZpcnN0X2FyZ3VtZW50X3R5cGUgdmFsdWU7CiAgICB9OwoKICAgIHRlbXBsYXRlIDxjbGFzcyBP cGVyYXRpb24+CiAgICBpbmxpbmUgYmluZGVyMXN0PE9wZXJhdGlvbj4gYmluZDFzdChjb25zdCBP cGVyYXRpb24gJm9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw ZW5hbWUgY2FsbF90cmFpdHM8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0eXBlbmFtZSBiaW5hcnlfdHJhaXRzPE9wZXJhdGlvbj46OmZpcnN0X2Fy Z3VtZW50X3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID46OnBh cmFtX3R5cGUgeCkKICAgIHsKCgogICAgICAgIHJldHVybiBiaW5kZXIxc3Q8T3BlcmF0aW9uPigo dHlwZW5hbWUgYmluYXJ5X3RyYWl0czxPcGVyYXRpb24+OjpwYXJhbV90eXBlKW9wLCB4KTsKICAg IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgT3BlcmF0aW9uPgogICAgaW5saW5lIGJpbmRlcjFzdDxP cGVyYXRpb24+IGJpbmQxc3QoT3BlcmF0aW9uICZvcCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHR5cGVuYW1lIGNhbGxfdHJhaXRzPAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgYmluYXJ5X3RyYWl0czxP cGVyYXRpb24+OjpmaXJzdF9hcmd1bWVudF90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA+OjpwYXJhbV90eXBlIHgpCiAgICB7CiAgICAgICAgcmV0dXJuIGJpbmRl cjFzdDxPcGVyYXRpb24+KG9wLCB4KTsKICAgIH0KCgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgT3Bl cmF0aW9uPgogICAgY2xhc3MgYmluZGVyMm5kCiAgICAgICAgOiBwdWJsaWMgc3RkOjp1bmFyeV9m dW5jdGlvbjx0eXBlbmFtZSBiaW5hcnlfdHJhaXRzPE9wZXJhdGlvbj46OmZpcnN0X2FyZ3VtZW50 X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBiaW5h cnlfdHJhaXRzPE9wZXJhdGlvbj46OnJlc3VsdF90eXBlPgogICAgewogICAgICBwdWJsaWM6CiAg ICAgICAgYmluZGVyMm5kKHR5cGVuYW1lIGJpbmFyeV90cmFpdHM8T3BlcmF0aW9uPjo6cGFyYW1f dHlwZSB4LAogICAgICAgICAgICAgICAgICB0eXBlbmFtZSBjYWxsX3RyYWl0czx0eXBlbmFtZSBi aW5hcnlfdHJhaXRzPE9wZXJhdGlvbj46OnNlY29uZF9hcmd1bWVudF90eXBlPjo6cGFyYW1fdHlw ZSB5KQogICAgICAgICAgICA6CiAgICAgICAgICAgIG9wKHgpLCB2YWx1ZSh5KQogICAgICAgIHt9 CgogICAgICAgIHR5cGVuYW1lIGJpbmFyeV90cmFpdHM8T3BlcmF0aW9uPjo6cmVzdWx0X3R5cGUK ICAgICAgICBvcGVyYXRvcigpKHR5cGVuYW1lIGNhbGxfdHJhaXRzPHR5cGVuYW1lIGJpbmFyeV90 cmFpdHM8T3BlcmF0aW9uPjo6Zmlyc3RfYXJndW1lbnRfdHlwZT46OnBhcmFtX3R5cGUgeCkgY29u c3QKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBvcCh4LCB2YWx1ZSk7CiAgICAgICAgfQoK ICAgICAgcHJvdGVjdGVkOgogICAgICAgIHR5cGVuYW1lIGJpbmFyeV90cmFpdHM8T3BlcmF0aW9u Pjo6ZnVuY3Rpb25fdHlwZSBvcDsKICAgICAgICB0eXBlbmFtZSBiaW5hcnlfdHJhaXRzPE9wZXJh dGlvbj46OnNlY29uZF9hcmd1bWVudF90eXBlIHZhbHVlOwogICAgfTsKCiAgICB0ZW1wbGF0ZSA8 Y2xhc3MgT3BlcmF0aW9uPgogICAgaW5saW5lIGJpbmRlcjJuZDxPcGVyYXRpb24+IGJpbmQybmQo Y29uc3QgT3BlcmF0aW9uICZvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHR5cGVuYW1lIGNhbGxfdHJhaXRzPAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgYmluYXJ5X3RyYWl0czxPcGVyYXRpb24+Ojpz ZWNvbmRfYXJndW1lbnRfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgPjo6cGFyYW1fdHlwZSB4KQogICAgewoKCiAgICAgICAgcmV0dXJuIGJpbmRlcjJuZDxPcGVy YXRpb24+KCh0eXBlbmFtZSBiaW5hcnlfdHJhaXRzPE9wZXJhdGlvbj46OnBhcmFtX3R5cGUpb3As IHgpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBPcGVyYXRpb24+CiAgICBpbmxpbmUgYmlu ZGVyMm5kPE9wZXJhdGlvbj4gYmluZDJuZChPcGVyYXRpb24gJm9wLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgY2FsbF90cmFpdHM8CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBiaW5hcnlf dHJhaXRzPE9wZXJhdGlvbj46OnNlY29uZF9hcmd1bWVudF90eXBlCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA+OjpwYXJhbV90eXBlIHgpCiAgICB7CiAgICAgICAgcmV0 dXJuIGJpbmRlcjJuZDxPcGVyYXRpb24+KG9wLCB4KTsKICAgIH0KCgoKCiAgICB0ZW1wbGF0ZSA8 Y2xhc3MgUywgY2xhc3MgVD4KICAgIGNsYXNzIG1lbV9mdW5fdCA6IHB1YmxpYyBzdGQ6OnVuYXJ5 X2Z1bmN0aW9uPFQqLCBTPgogICAgewogICAgICBwdWJsaWM6CiAgICAgICAgZXhwbGljaXQgbWVt X2Z1bl90KFMgKFQ6OipwKSgpKQogICAgICAgICAgICA6CiAgICAgICAgICAgIHB0cihwKQogICAg ICAgIHt9CiAgICAgICAgUyBvcGVyYXRvcigpKFQqIHApIGNvbnN0CiAgICAgICAgewogICAgICAg ICAgICByZXR1cm4gKHAtPipwdHIpKCk7CiAgICAgICAgfQogICAgICBwcml2YXRlOgogICAgICAg IFMgKFQ6OipwdHIpKCk7CiAgICB9OwoKICAgIHRlbXBsYXRlIDxjbGFzcyBTLCBjbGFzcyBULCBj bGFzcyBBPgogICAgY2xhc3MgbWVtX2Z1bjFfdCA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9mdW5jdGlv bjxUKiwgQSwgUz4KICAgIHsKICAgICAgcHVibGljOgogICAgICAgIGV4cGxpY2l0IG1lbV9mdW4x X3QoUyAoVDo6KnApKEEpKQogICAgICAgICAgICA6CiAgICAgICAgICAgIHB0cihwKQogICAgICAg IHt9CiAgICAgICAgUyBvcGVyYXRvcigpKFQqIHAsIHR5cGVuYW1lIGNhbGxfdHJhaXRzPEE+Ojpw YXJhbV90eXBlIHgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKHAtPipwdHIp KHgpOwogICAgICAgIH0KICAgICAgcHJpdmF0ZToKICAgICAgICBTIChUOjoqcHRyKShBKTsKICAg IH07CgogICAgdGVtcGxhdGUgPGNsYXNzIFMsIGNsYXNzIFQ+CiAgICBjbGFzcyBjb25zdF9tZW1f ZnVuX3QgOiBwdWJsaWMgc3RkOjp1bmFyeV9mdW5jdGlvbjxjb25zdCBUKiwgUz4KICAgIHsKICAg ICAgcHVibGljOgogICAgICAgIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChTIChUOjoqcCkoKSBj b25zdCkKICAgICAgICAgICAgOgogICAgICAgICAgICBwdHIocCkKICAgICAgICB7fQogICAgICAg IFMgb3BlcmF0b3IoKShjb25zdCBUKiBwKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgcmV0 dXJuIChwLT4qcHRyKSgpOwogICAgICAgIH0KICAgICAgcHJpdmF0ZToKICAgICAgICBTIChUOjoq cHRyKSgpIGNvbnN0OwogICAgfTsKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgUywgY2xhc3MgVCwgY2xh c3MgQT4KICAgIGNsYXNzIGNvbnN0X21lbV9mdW4xX3QgOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVu Y3Rpb248Y29uc3QgVCosIEEsIFM+CiAgICB7CiAgICAgIHB1YmxpYzoKICAgICAgICBleHBsaWNp dCBjb25zdF9tZW1fZnVuMV90KFMgKFQ6OipwKShBKSBjb25zdCkKICAgICAgICAgICAgOgogICAg ICAgICAgICBwdHIocCkKICAgICAgICB7fQogICAgICAgIFMgb3BlcmF0b3IoKShjb25zdCBUKiBw LCB0eXBlbmFtZSBjYWxsX3RyYWl0czxBPjo6cGFyYW1fdHlwZSB4KSBjb25zdAogICAgICAgIHsK ICAgICAgICAgICAgcmV0dXJuIChwLT4qcHRyKSh4KTsKICAgICAgICB9CiAgICAgIHByaXZhdGU6 CiAgICAgICAgUyAoVDo6KnB0cikoQSkgY29uc3Q7CiAgICB9OwoKICAgIHRlbXBsYXRlPGNsYXNz IFMsIGNsYXNzIFQ+CiAgICBpbmxpbmUgbWVtX2Z1bl90PFMsVD4gbWVtX2Z1bihTIChUOjoqZiko KSkKICAgIHsKICAgICAgICByZXR1cm4gbWVtX2Z1bl90PFMsVD4oZik7CiAgICB9CgogICAgdGVt cGxhdGU8Y2xhc3MgUywgY2xhc3MgVCwgY2xhc3MgQT4KICAgIGlubGluZSBtZW1fZnVuMV90PFMs VCxBPiBtZW1fZnVuKFMgKFQ6OipmKShBKSkKICAgIHsKICAgICAgICByZXR1cm4gbWVtX2Z1bjFf dDxTLFQsQT4oZik7CiAgICB9CgoKICAgIHRlbXBsYXRlPGNsYXNzIFMsIGNsYXNzIFQ+CiAgICBp bmxpbmUgY29uc3RfbWVtX2Z1bl90PFMsVD4gbWVtX2Z1bihTIChUOjoqZikoKSBjb25zdCkKICAg IHsKICAgICAgICByZXR1cm4gY29uc3RfbWVtX2Z1bl90PFMsVD4oZik7CiAgICB9CgogICAgdGVt cGxhdGU8Y2xhc3MgUywgY2xhc3MgVCwgY2xhc3MgQT4KICAgIGlubGluZSBjb25zdF9tZW1fZnVu MV90PFMsVCxBPiBtZW1fZnVuKFMgKFQ6OipmKShBKSBjb25zdCkKICAgIHsKICAgICAgICByZXR1 cm4gY29uc3RfbWVtX2Z1bjFfdDxTLFQsQT4oZik7CiAgICB9CgoKCgoKICAgIHRlbXBsYXRlIDxj bGFzcyBTLCBjbGFzcyBUPgogICAgY2xhc3MgbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyBzdGQ6OnVu YXJ5X2Z1bmN0aW9uPFQmLCBTPgogICAgewogICAgICBwdWJsaWM6CiAgICAgICAgZXhwbGljaXQg bWVtX2Z1bl9yZWZfdChTIChUOjoqcCkoKSkKICAgICAgICAgICAgOgogICAgICAgICAgICBwdHIo cCkKICAgICAgICB7fQogICAgICAgIFMgb3BlcmF0b3IoKShUJiBwKSBjb25zdAogICAgICAgIHsK ICAgICAgICAgICAgcmV0dXJuIChwLipwdHIpKCk7CiAgICAgICAgfQogICAgICBwcml2YXRlOgog ICAgICAgIFMgKFQ6OipwdHIpKCk7CiAgICB9OwoKICAgIHRlbXBsYXRlIDxjbGFzcyBTLCBjbGFz cyBULCBjbGFzcyBBPgogICAgY2xhc3MgbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgc3RkOjpiaW5h cnlfZnVuY3Rpb248VCYsIEEsIFM+CiAgICB7CiAgICAgIHB1YmxpYzoKICAgICAgICBleHBsaWNp dCBtZW1fZnVuMV9yZWZfdChTIChUOjoqcCkoQSkpCiAgICAgICAgICAgIDoKICAgICAgICAgICAg cHRyKHApCiAgICAgICAge30KICAgICAgICBTIG9wZXJhdG9yKCkoVCYgcCwgdHlwZW5hbWUgY2Fs bF90cmFpdHM8QT46OnBhcmFtX3R5cGUgeCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgIHJl dHVybiAocC4qcHRyKSh4KTsKICAgICAgICB9CiAgICAgIHByaXZhdGU6CiAgICAgICAgUyAoVDo6 KnB0cikoQSk7CiAgICB9OwoKICAgIHRlbXBsYXRlIDxjbGFzcyBTLCBjbGFzcyBUPgogICAgY2xh c3MgY29uc3RfbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPGNvbnN0 IFQmLCBTPgogICAgewogICAgICBwdWJsaWM6CiAgICAgICAgZXhwbGljaXQgY29uc3RfbWVtX2Z1 bl9yZWZfdChTIChUOjoqcCkoKSBjb25zdCkKICAgICAgICAgICAgOgogICAgICAgICAgICBwdHIo cCkKICAgICAgICB7fQoKICAgICAgICBTIG9wZXJhdG9yKCkoY29uc3QgVCAmcCkgY29uc3QKICAg ICAgICB7CiAgICAgICAgICAgIHJldHVybiAocC4qcHRyKSgpOwogICAgICAgIH0KICAgICAgcHJp dmF0ZToKICAgICAgICBTIChUOjoqcHRyKSgpIGNvbnN0OwogICAgfTsKCiAgICB0ZW1wbGF0ZSA8 Y2xhc3MgUywgY2xhc3MgVCwgY2xhc3MgQT4KICAgIGNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90 IDogcHVibGljIHN0ZDo6YmluYXJ5X2Z1bmN0aW9uPGNvbnN0IFQmLCBBLCBTPgogICAgewogICAg ICBwdWJsaWM6CiAgICAgICAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoUyAoVDo6KnAp KEEpIGNvbnN0KQogICAgICAgICAgICA6CiAgICAgICAgICAgIHB0cihwKQogICAgICAgIHt9Cgog ICAgICAgIFMgb3BlcmF0b3IoKShjb25zdCBUJiBwLCB0eXBlbmFtZSBjYWxsX3RyYWl0czxBPjo6 cGFyYW1fdHlwZSB4KSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIChwLipwdHIp KHgpOwogICAgICAgIH0KICAgICAgcHJpdmF0ZToKICAgICAgICBTIChUOjoqcHRyKShBKSBjb25z dDsKICAgIH07CgogICAgdGVtcGxhdGU8Y2xhc3MgUywgY2xhc3MgVD4KICAgIGlubGluZSBtZW1f ZnVuX3JlZl90PFMsVD4gbWVtX2Z1bl9yZWYoUyAoVDo6KmYpKCkpCiAgICB7CiAgICAgICAgcmV0 dXJuIG1lbV9mdW5fcmVmX3Q8UyxUPihmKTsKICAgIH0KCiAgICB0ZW1wbGF0ZTxjbGFzcyBTLCBj bGFzcyBULCBjbGFzcyBBPgogICAgaW5saW5lIG1lbV9mdW4xX3JlZl90PFMsVCxBPiBtZW1fZnVu X3JlZihTIChUOjoqZikoQSkpCiAgICB7CiAgICAgICAgcmV0dXJuIG1lbV9mdW4xX3JlZl90PFMs VCxBPihmKTsKICAgIH0KCgogICAgdGVtcGxhdGU8Y2xhc3MgUywgY2xhc3MgVD4KICAgIGlubGlu ZSBjb25zdF9tZW1fZnVuX3JlZl90PFMsVD4gbWVtX2Z1bl9yZWYoUyAoVDo6KmYpKCkgY29uc3Qp CiAgICB7CiAgICAgICAgcmV0dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8UyxUPihmKTsKICAgIH0K CiAgICB0ZW1wbGF0ZTxjbGFzcyBTLCBjbGFzcyBULCBjbGFzcyBBPgogICAgaW5saW5lIGNvbnN0 X21lbV9mdW4xX3JlZl90PFMsVCxBPiBtZW1fZnVuX3JlZihTIChUOjoqZikoQSkgY29uc3QpCiAg ICB7CiAgICAgICAgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PFMsVCxBPihmKTsKICAgIH0K CgoKCgogICAgdGVtcGxhdGUgPGNsYXNzIEFyZywgY2xhc3MgUmVzdWx0PgogICAgY2xhc3MgcG9p bnRlcl90b191bmFyeV9mdW5jdGlvbiA6IHB1YmxpYyBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPEFyZyxS ZXN1bHQ+CiAgICB7CiAgICAgIHB1YmxpYzoKICAgICAgICBleHBsaWNpdCBwb2ludGVyX3RvX3Vu YXJ5X2Z1bmN0aW9uKFJlc3VsdCAoKmYpKEFyZykpCiAgICAgICAgICAgIDoKICAgICAgICAgICAg ZnVuYyhmKQogICAgICAgIHt9CgogICAgICAgIFJlc3VsdCBvcGVyYXRvcigpKHR5cGVuYW1lIGNh bGxfdHJhaXRzPEFyZz46OnBhcmFtX3R5cGUgeCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAg IHJldHVybiBmdW5jKHgpOwogICAgICAgIH0KCiAgICAgIHByaXZhdGU6CiAgICAgICAgUmVzdWx0 ICgqZnVuYykoQXJnKTsKICAgIH07CgogICAgdGVtcGxhdGUgPGNsYXNzIEFyZywgY2xhc3MgUmVz dWx0PgogICAgaW5saW5lIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248QXJnLFJlc3VsdD4gcHRy X2Z1bihSZXN1bHQgKCpmKShBcmcpKQogICAgewogICAgICAgIHJldHVybiBwb2ludGVyX3RvX3Vu YXJ5X2Z1bmN0aW9uPEFyZyxSZXN1bHQ+KGYpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBB cmcxLCBjbGFzcyBBcmcyLCBjbGFzcyBSZXN1bHQ+CiAgICBjbGFzcyBwb2ludGVyX3RvX2JpbmFy eV9mdW5jdGlvbiA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxBcmcxLEFyZzIsUmVzdWx0 PgogICAgewogICAgICBwdWJsaWM6CiAgICAgICAgZXhwbGljaXQgcG9pbnRlcl90b19iaW5hcnlf ZnVuY3Rpb24oUmVzdWx0ICgqZikoQXJnMSwgQXJnMikpCiAgICAgICAgICAgIDoKICAgICAgICAg ICAgZnVuYyhmKQogICAgICAgIHt9CgogICAgICAgIFJlc3VsdCBvcGVyYXRvcigpKHR5cGVuYW1l IGNhbGxfdHJhaXRzPEFyZzE+OjpwYXJhbV90eXBlIHgsIHR5cGVuYW1lIGNhbGxfdHJhaXRzPEFy ZzI+OjpwYXJhbV90eXBlIHkpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gZnVu Yyh4LHkpOwogICAgICAgIH0KCiAgICAgIHByaXZhdGU6CiAgICAgICAgUmVzdWx0ICgqZnVuYyko QXJnMSwgQXJnMik7CiAgICB9OwoKICAgIHRlbXBsYXRlIDxjbGFzcyBBcmcxLCBjbGFzcyBBcmcy LCBjbGFzcyBSZXN1bHQ+CiAgICBpbmxpbmUgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248QXJn MSxBcmcyLFJlc3VsdD4gcHRyX2Z1bihSZXN1bHQgKCpmKShBcmcxLCBBcmcyKSkKICAgIHsKICAg ICAgICByZXR1cm4gcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248QXJnMSxBcmcyLFJlc3VsdD4o Zik7CiAgICB9Cn0KIyAzMSAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9vc3QvbXVs dGlfYXJyYXkvbXVsdGlfYXJyYXlfcmVmLmhwcCIgMiAzCgoKIyAxICIvdXNyL2xvY2FsL3ZvbC9n Y2MvMy4yL2luY2x1ZGUvYysrLzMuMi9jYXNzZXJ0IiAxIDMKIyA0NyAiL3Vzci9sb2NhbC92b2wv Z2NjLzMuMi9pbmNsdWRlL2MrKy8zLjIvY2Fzc2VydCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYXNz ZXJ0LmgiIDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKZXh0ZXJuICJDIiB7CgoK ZXh0ZXJuIHZvaWQgX19hc3NlcnRfZmFpbCAoX19jb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgX19j b25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBfX2xpbmUsIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVycm9yX2Zh aWwgKGludCBfX2Vycm51bSwgX19jb25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0IChj b25zdCBjaGFyICpfX2Fzc2VydGlvbiwgY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19saW5lKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgp9CiMgNDkgIi91 c3IvbG9jYWwvdm9sL2djYy8zLjIvaW5jbHVkZS9jKysvMy4yL2Nhc3NlcnQiIDIgMwojIDM0ICIv aG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9hcnJheS9tdWx0aV9hcnJh eV9yZWYuaHBwIiAyIDMKCgoKCm5hbWVzcGFjZSBib29zdCB7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUg VCwgc3RkOjpzaXplX3QgTnVtRGltcywKICB0eXBlbmFtZSBUUHRyID0gY29uc3QgVCoKPgpjbGFz cyBjb25zdF9tdWx0aV9hcnJheV9yZWYgOgogICAgcHVibGljIGRldGFpbDo6bXVsdGlfYXJyYXk6 Om11bHRpX2FycmF5X2ltcGxfYmFzZTxULE51bURpbXM+CnsKICB0eXBlZGVmIGRldGFpbDo6bXVs dGlfYXJyYXk6Om11bHRpX2FycmF5X2ltcGxfYmFzZTxULE51bURpbXM+IHN1cGVyX3R5cGU7CnB1 YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OnZhbHVlX3R5cGUgdmFsdWVfdHlw ZTsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9y ZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpjb25zdF9pdGVyYXRvciBj b25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X2l0ZXJf YmFzZSBjb25zdF9pdGVyX2Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpjb25z dF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBl bmFtZSBzdXBlcl90eXBlOjplbGVtZW50IGVsZW1lbnQ7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBl cl90eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlw ZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIHN1 cGVyX3R5cGU6OmluZGV4IGluZGV4OwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6ZXh0 ZW50X3JhbmdlIGV4dGVudF9yYW5nZTsKCgoKICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTkRpbXM+ CiAgc3RydWN0IGNvbnN0X2FycmF5X3ZpZXcgewogICAgdHlwZWRlZiBib29zdDo6ZGV0YWlsOjpt dWx0aV9hcnJheTo6Y29uc3RfbXVsdGlfYXJyYXlfdmlldzxULE5EaW1zPiB0eXBlOwogIH07Cgog IHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBORGltcz4KICBzdHJ1Y3QgYXJyYXlfdmlldyB7CiAgICB0 eXBlZGVmIGJvb3N0OjpkZXRhaWw6Om11bHRpX2FycmF5OjptdWx0aV9hcnJheV92aWV3PFQsTkRp bXM+IHR5cGU7CiAgfTsKCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUsc3RkOjpzaXplX3QsdHlwZW5h bWU+CiAgZnJpZW5kIGNsYXNzIGNvbnN0X211bHRpX2FycmF5X3JlZjsKCgogIHRlbXBsYXRlIDx0 eXBlbmFtZSBPUHRyPgogIGNvbnN0X211bHRpX2FycmF5X3JlZihjb25zdCBjb25zdF9tdWx0aV9h cnJheV9yZWY8VCxOdW1EaW1zLAogICAgICAgICAgICAgICAgICAgICAgICBPUHRyPiYgb3RoZXIp CiAgICA6IGJhc2VfKG90aGVyLmJhc2VfKSwgc3RvcmFnZV8ob3RoZXIuc3RvcmFnZV8pLAogICAg ICBleHRlbnRfbGlzdF8ob3RoZXIuZXh0ZW50X2xpc3RfKSwKICAgICAgc3RyaWRlX2xpc3RfKG90 aGVyLnN0cmlkZV9saXN0XyksCiAgICAgIGluZGV4X2Jhc2VfbGlzdF8ob3RoZXIuaW5kZXhfYmFz ZV9saXN0XyksCiAgICAgIG9yaWdpbl9vZmZzZXRfKG90aGVyLm9yaWdpbl9vZmZzZXRfKSwKICAg ICAgZGlyZWN0aW9uYWxfb2Zmc2V0XyhvdGhlci5kaXJlY3Rpb25hbF9vZmZzZXRfKSwKICAgICAg bnVtX2VsZW1lbnRzXyhvdGhlci5udW1fZWxlbWVudHNfKSB7IH0KCiAgdGVtcGxhdGUgPHR5cGVu YW1lIEV4dGVudExpc3Q+CiAgZXhwbGljaXQgY29uc3RfbXVsdGlfYXJyYXlfcmVmKFRQdHIgYmFz ZSwgY29uc3QgRXh0ZW50TGlzdCYgZXh0ZW50cykgOgogICAgYmFzZV8oYmFzZSksIHN0b3JhZ2Vf KGNfc3RvcmFnZV9vcmRlcigpKSB7CiAgICBib29zdDo6ZnVuY3Rpb25fcmVxdWlyZXM8CiAgICAg IGRldGFpbDo6bXVsdGlfYXJyYXk6OkNvbGxlY3Rpb25Db25jZXB0PEV4dGVudExpc3Q+ID4oKTsK CiAgICBpbmRleF9iYXNlX2xpc3RfLmFzc2lnbigwKTsKICAgIGluaXRfbXVsdGlfYXJyYXlfcmVm KGV4dGVudHMuYmVnaW4oKSk7CiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRXh0ZW50TGlzdD4K ICBleHBsaWNpdCBjb25zdF9tdWx0aV9hcnJheV9yZWYoVFB0ciBiYXNlLCBjb25zdCBFeHRlbnRM aXN0JiBleHRlbnRzLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdlbmVyYWxfc3RvcmFn ZV9vcmRlcjxOdW1EaW1zPiYgc28pIDoKICAgIGJhc2VfKGJhc2UpLCBzdG9yYWdlXyhzbykgewog ICAgYm9vc3Q6OmZ1bmN0aW9uX3JlcXVpcmVzPAogICAgICBkZXRhaWw6Om11bHRpX2FycmF5OjpD b2xsZWN0aW9uQ29uY2VwdDxFeHRlbnRMaXN0PiA+KCk7CgogICAgaW5kZXhfYmFzZV9saXN0Xy5h c3NpZ24oMCk7CiAgICBpbml0X211bHRpX2FycmF5X3JlZihleHRlbnRzLmJlZ2luKCkpOwogIH0K CiAgZXhwbGljaXQgY29uc3RfbXVsdGlfYXJyYXlfcmVmKFRQdHIgYmFzZSwKICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGRldGFpbDo6bXVsdGlfYXJyYXk6OgogICAgICAgICAgICAgICAg ICAgICAgICAgZXh0ZW50X2dlbjxOdW1EaW1zPiYgcmFuZ2VzKSA6CiAgICBiYXNlXyhiYXNlKSwg c3RvcmFnZV8oY19zdG9yYWdlX29yZGVyKCkpIHsKCiAgICBpbml0X2Zyb21fZXh0ZW50X2dlbihy YW5nZXMpOwogIH0KCiAgZXhwbGljaXQgY29uc3RfbXVsdGlfYXJyYXlfcmVmKFRQdHIgYmFzZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGV0YWlsOjptdWx0aV9hcnJheTo6CiAg ICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVudF9nZW48TnVtRGltcz4mIHJhbmdlcywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2VuZXJhbF9zdG9yYWdlX29yZGVyPE51bURp bXM+JiBzbykgOgogICAgYmFzZV8oYmFzZSksIHN0b3JhZ2VfKHNvKSB7CgogICAgaW5pdF9mcm9t X2V4dGVudF9nZW4ocmFuZ2VzKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9y PgogIHZvaWQgYXNzaWduKElucHV0SXRlcmF0b3IgYmVnaW4sIElucHV0SXRlcmF0b3IgZW5kKSB7 CiAgICBib29zdDo6ZnVuY3Rpb25fcmVxdWlyZXM8SW5wdXRJdGVyYXRvckNvbmNlcHQ8SW5wdXRJ dGVyYXRvcj4gPigpOwoKICAgIElucHV0SXRlcmF0b3IgaW5faXRlciA9IGJlZ2luOwogICAgVCog b3V0X2l0ZXIgPSBiYXNlXzsKICAgIHN0ZDo6c2l6ZV90IGNvcHlfY291bnQ9MDsKICAgIHdoaWxl IChpbl9pdGVyICE9IGVuZCAmJiBjb3B5X2NvdW50IDwgbnVtX2VsZW1lbnRzXykgewogICAgICAq b3V0X2l0ZXIrKyA9ICppbl9pdGVyKys7CiAgICAgIGNvcHlfY291bnQrKzsKICAgIH0KICB9Cgog IHRlbXBsYXRlIDxjbGFzcyBCYXNlTGlzdD4KICB2b2lkIHJlaW5kZXgoY29uc3QgQmFzZUxpc3Qm IHZhbHVlcykgewogICAgYm9vc3Q6OmZ1bmN0aW9uX3JlcXVpcmVzPAogICAgICBkZXRhaWw6Om11 bHRpX2FycmF5OjpDb2xsZWN0aW9uQ29uY2VwdDxCYXNlTGlzdD4gPigpOwogICAgYm9vc3Q6OmNv cHlfbih2YWx1ZXMuYmVnaW4oKSxudW1fZGltZW5zaW9ucygpLGluZGV4X2Jhc2VfbGlzdF8uYmVn aW4oKSk7CiAgICBvcmlnaW5fb2Zmc2V0XyA9CiAgICAgIGNhbGN1bGF0ZV9vcmlnaW5fb2Zmc2V0 KHN0cmlkZV9saXN0XyxleHRlbnRfbGlzdF8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0b3JhZ2VfLGluZGV4X2Jhc2VfbGlzdF8pOwogIH0KCiAgdm9pZCByZWluZGV4KGluZGV4IHZh bHVlKSB7CiAgICBpbmRleF9iYXNlX2xpc3RfLmFzc2lnbih2YWx1ZSk7CiAgICBvcmlnaW5fb2Zm c2V0XyA9CiAgICAgIGNhbGN1bGF0ZV9vcmlnaW5fb2Zmc2V0KHN0cmlkZV9saXN0XyxleHRlbnRf bGlzdF8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VfLGluZGV4X2Jhc2Vf bGlzdF8pOwogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFNpemVMaXN0PgogIHZvaWQgcmVzaGFw ZShjb25zdCBTaXplTGlzdCYgZXh0ZW50cykgewogICAgYm9vc3Q6OmZ1bmN0aW9uX3JlcXVpcmVz PAogICAgICBkZXRhaWw6Om11bHRpX2FycmF5OjpDb2xsZWN0aW9uQ29uY2VwdDxTaXplTGlzdD4g PigpOwogICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgobnVtX2VsZW1lbnRzXyA9PSBzdGQ6OmFjY3Vt dWxhdGUoZXh0ZW50cy5iZWdpbigpLGV4dGVudHMuZW5kKCksIHNpemVfdHlwZSgxKSxzdGQ6Om11 bHRpcGxpZXM8c2l6ZV90eXBlPigpKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJudW1fZWxlbWVu dHNfID09IHN0ZDo6YWNjdW11bGF0ZShleHRlbnRzLmJlZ2luKCksZXh0ZW50cy5lbmQoKSwgc2l6 ZV90eXBlKDEpLHN0ZDo6bXVsdGlwbGllczxzaXplX3R5cGU+KCkpIiwgIi9ob21lL2NvbXBiaW8v ZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L211bHRpX2FycmF5X3JlZi5ocHAiLCAx NjIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKCgogICAgc3RkOjpjb3B5KGV4dGVudHMu YmVnaW4oKSxleHRlbnRzLmVuZCgpLGV4dGVudF9saXN0Xy5iZWdpbigpKTsKICAgIGNvbXB1dGVf c3RyaWRlcyhzdHJpZGVfbGlzdF8sZXh0ZW50X2xpc3RfLHN0b3JhZ2VfKTsKCiAgICBvcmlnaW5f b2Zmc2V0XyA9CiAgICAgIGNhbGN1bGF0ZV9vcmlnaW5fb2Zmc2V0KHN0cmlkZV9saXN0XyxleHRl bnRfbGlzdF8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VfLGluZGV4X2Jh c2VfbGlzdF8pOwogIH0KCiAgc2l6ZV90eXBlIG51bV9kaW1lbnNpb25zKCkgY29uc3QgeyByZXR1 cm4gTnVtRGltczsgfQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGV4dGVudF9s aXN0Xy5mcm9udCgpOyB9CgoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBu dW1fZWxlbWVudHMoKTsgfQoKICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpID09 IDA7IH0KCiAgY29uc3Qgc2l6ZV90eXBlKiBzaGFwZSgpIGNvbnN0IHsKICAgIHJldHVybiBleHRl bnRfbGlzdF8uZGF0YSgpOwogIH0KCiAgY29uc3QgaW5kZXgqIHN0cmlkZXMoKSBjb25zdCB7CiAg ICByZXR1cm4gc3RyaWRlX2xpc3RfLmRhdGEoKTsKICB9CgogIGNvbnN0IGVsZW1lbnQqIG9yaWdp bigpIGNvbnN0IHsgcmV0dXJuIGJhc2VfK29yaWdpbl9vZmZzZXRfOyB9CiAgY29uc3QgZWxlbWVu dCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIGJhc2VfOyB9CgogIHNpemVfdHlwZSBudW1fZWxlbWVu dHMoKSBjb25zdCB7IHJldHVybiBudW1fZWxlbWVudHNfOyB9CgogIGNvbnN0IGluZGV4KiBpbmRl eF9iYXNlcygpIGNvbnN0IHsKICAgIHJldHVybiBpbmRleF9iYXNlX2xpc3RfLmRhdGEoKTsKICB9 CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBJbmRleExpc3Q+CiAgY29uc3QgZWxlbWVudCYgb3BlcmF0 b3IoKShJbmRleExpc3QgaW5kaWNlcykgY29uc3QgewogICAgYm9vc3Q6OmZ1bmN0aW9uX3JlcXVp cmVzPAogICAgICBkZXRhaWw6Om11bHRpX2FycmF5OjpDb2xsZWN0aW9uQ29uY2VwdDxJbmRleExp c3Q+ID4oKTsKICAgIHJldHVybiBzdXBlcl90eXBlOjphY2Nlc3NfZWxlbWVudChib29zdDo6dHlw ZTxjb25zdCBlbGVtZW50Jj4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBvcmlnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2Vz LHN0cmlkZXMoKSk7CiAgfQoKCiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oaW5kZXggaWR4 KSBjb25zdCB7CiAgICByZXR1cm4gc3VwZXJfdHlwZTo6YWNjZXNzKGJvb3N0Ojp0eXBlPGNvbnN0 X3JlZmVyZW5jZT4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4LG9yaWdpbigp LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZSgpLHN0cmlkZXMoKSxpbmRleF9i YXNlcygpKTsKICB9CgoKCiAgdGVtcGxhdGUgPGludCBORGltcz4KCgoKICB0eXBlbmFtZSBjb25z dF9hcnJheV92aWV3PE5EaW1zPjo6dHlwZQogIG9wZXJhdG9yW10oY29uc3QgZGV0YWlsOjptdWx0 aV9hcnJheTo6CiAgICAgICAgICAgICBpbmRleF9nZW48TnVtRGltcyxORGltcz4mIGluZGljZXMp CiAgICBjb25zdCB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGNvbnN0X2FycmF5X3ZpZXc8TkRpbXM+ Ojp0eXBlIHJldHVybl90eXBlOwogICAgcmV0dXJuCiAgICAgIHN1cGVyX3R5cGU6OmdlbmVyYXRl X2FycmF5X3ZpZXcoYm9vc3Q6OnR5cGU8cmV0dXJuX3R5cGU+KCksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW5kaWNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaGFwZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cmlkZXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleF9i YXNlcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbigpKTsK ICB9CgogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgewogICAgcmV0dXJuIGNvbnN0X2l0 ZXJhdG9yKGNvbnN0X2l0ZXJfYmFzZSgqaW5kZXhfYmFzZXMoKSxvcmlnaW4oKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZSgpLHN0cmlkZXMoKSxpbmRleF9iYXNlcygp KSk7CiAgfQoKICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7CiAgICByZXR1cm4gY29uc3Rf aXRlcmF0b3IoY29uc3RfaXRlcl9iYXNlKCppbmRleF9iYXNlcygpKypzaGFwZSgpLG9yaWdpbigp LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlKCksc3RyaWRlcygpLGlu ZGV4X2Jhc2VzKCkpKTsKICB9CgogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29u c3QgewogICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOwogIH0KCiAgY29u c3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgewogICAgcmV0dXJuIGNvbnN0X3JldmVy c2VfaXRlcmF0b3IoYmVnaW4oKSk7CiAgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIE9QdHI+CiAg Ym9vbCBvcGVyYXRvcj09KGNvbnN0CiAgICAgICAgICAgICAgICAgIGNvbnN0X211bHRpX2FycmF5 X3JlZjxULE51bURpbXMsT1B0cj4mIHJocykKICAgIGNvbnN0IHsKICAgIGlmKHN0ZDo6ZXF1YWwo ZXh0ZW50X2xpc3RfLmJlZ2luKCksCiAgICAgICAgICAgICAgICAgIGV4dGVudF9saXN0Xy5lbmQo KSwKICAgICAgICAgICAgICAgICAgcmhzLmV4dGVudF9saXN0Xy5iZWdpbigpKSkKICAgICAgcmV0 dXJuIHN0ZDo6ZXF1YWwoYmVnaW4oKSxlbmQoKSxyaHMuYmVnaW4oKSk7CiAgICBlbHNlIHJldHVy biBmYWxzZTsKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBPUHRyPgogIGJvb2wgb3BlcmF0b3I8 KGNvbnN0CiAgICAgICAgICAgICAgICAgY29uc3RfbXVsdGlfYXJyYXlfcmVmPFQsTnVtRGltcyxP UHRyPiYgcmhzKQogICAgY29uc3QgewogICAgcmV0dXJuIHN0ZDo6bGV4aWNvZ3JhcGhpY2FsX2Nv bXBhcmUoYmVnaW4oKSxlbmQoKSxyaHMuYmVnaW4oKSxyaHMuZW5kKCkpOwogIH0KCiAgdGVtcGxh dGUgPHR5cGVuYW1lIE9QdHI+CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0CiAgICAgICAgICAgICAg ICAgIGNvbnN0X211bHRpX2FycmF5X3JlZjxULE51bURpbXMsT1B0cj4mIHJocykKICAgIGNvbnN0 IHsKICAgIHJldHVybiAhKCp0aGlzID09IHJocyk7CiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUg T1B0cj4KICBib29sIG9wZXJhdG9yPihjb25zdAogICAgICAgICAgICAgICAgIGNvbnN0X211bHRp X2FycmF5X3JlZjxULE51bURpbXMsT1B0cj4mIHJocykKICAgIGNvbnN0IHsKICAgIHJldHVybiBy aHMgPCAqdGhpczsKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBPUHRyPgogIGJvb2wgb3BlcmF0 b3I8PShjb25zdAogICAgICAgICAgICAgICAgIGNvbnN0X211bHRpX2FycmF5X3JlZjxULE51bURp bXMsT1B0cj4mIHJocykKICAgIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlzID4gcmhzKTsKICB9 CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBPUHRyPgogIGJvb2wgb3BlcmF0b3I+PShjb25zdAogICAg ICAgICAgICAgICAgIGNvbnN0X211bHRpX2FycmF5X3JlZjxULE51bURpbXMsT1B0cj4mIHJocykK ICAgIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlzIDwgcmhzKTsKICB9CgoKCgpwcm90ZWN0ZWQ6 CgoKCgogIHZvaWQgc2V0X2Jhc2VfcHRyKFRQdHIgbmV3X2Jhc2UpIHsgYmFzZV8gPSBuZXdfYmFz ZTsgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT1B0cj4KICBjb25zdF9tdWx0aV9hcnJheV9yZWYo Y29uc3QgZGV0YWlsOjptdWx0aV9hcnJheTo6CiAgICAgICAgICAgICAgICAgIGNvbnN0X3N1Yl9h cnJheTxULE51bURpbXMsT1B0cj4mIHJocykKICAgIDogYmFzZV8ocmhzLm9yaWdpbigpKSwKICAg ICAgc3RvcmFnZV8oY19zdG9yYWdlX29yZGVyKCkpLAogICAgICBvcmlnaW5fb2Zmc2V0XygwKSwg ZGlyZWN0aW9uYWxfb2Zmc2V0XygwKSwKICAgICAgbnVtX2VsZW1lbnRzXyhyaHMubnVtX2VsZW1l bnRzKCkpCiAgewogICAgdXNpbmcgYm9vc3Q6OmNvcHlfbjsKICAgIGNvcHlfbihyaHMuc2hhcGUo KSxyaHMubnVtX2RpbWVuc2lvbnMoKSxleHRlbnRfbGlzdF8uYmVnaW4oKSk7CiAgICBjb3B5X24o cmhzLnN0cmlkZXMoKSxyaHMubnVtX2RpbWVuc2lvbnMoKSxzdHJpZGVfbGlzdF8uYmVnaW4oKSk7 CiAgICBjb3B5X24ocmhzLmluZGV4X2Jhc2VzKCkscmhzLm51bV9kaW1lbnNpb25zKCksaW5kZXhf YmFzZV9saXN0Xy5iZWdpbigpKTsKICB9CgogIHR5cGVkZWYgYm9vc3Q6OmFycmF5PHNpemVfdHlw ZSxOdW1EaW1zPiBzaXplX2xpc3Q7CiAgdHlwZWRlZiBib29zdDo6YXJyYXk8aW5kZXgsTnVtRGlt cz4gaW5kZXhfbGlzdDsKCiAgVFB0ciBiYXNlXzsKICBnZW5lcmFsX3N0b3JhZ2Vfb3JkZXI8TnVt RGltcz4gc3RvcmFnZV87CiAgc2l6ZV9saXN0IGV4dGVudF9saXN0XzsKICBpbmRleF9saXN0IHN0 cmlkZV9saXN0XzsKICBpbmRleF9saXN0IGluZGV4X2Jhc2VfbGlzdF87CiAgaW5kZXggb3JpZ2lu X29mZnNldF87CiAgaW5kZXggZGlyZWN0aW9uYWxfb2Zmc2V0XzsKICBzaXplX3R5cGUgbnVtX2Vs ZW1lbnRzXzsKCnByaXZhdGU6CgogIGNvbnN0X211bHRpX2FycmF5X3JlZiYgb3BlcmF0b3I9KGNv bnN0IGNvbnN0X211bHRpX2FycmF5X3JlZiYgb3RoZXIpOwoKICB2b2lkIGluaXRfZnJvbV9leHRl bnRfZ2VuKGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDo6bXVsdGlfYXJyYXk6 OgogICAgICAgICAgICAgICAgICAgICAgICBleHRlbnRfZ2VuPE51bURpbXM+JiByYW5nZXMpIHsK CiAgICB0eXBlZGVmIGJvb3N0OjphcnJheTxpbmRleCxOdW1EaW1zPiBleHRlbnRfbGlzdDsKCgog ICAgc3RkOjp0cmFuc2Zvcm0ocmFuZ2VzLnJhbmdlc18uYmVnaW4oKSxyYW5nZXMucmFuZ2VzXy5l bmQoKSwKICAgICAgICAgICAgICBpbmRleF9iYXNlX2xpc3RfLmJlZ2luKCksCiAgICAgICAgICAg ICAgYm9vc3Q6Om1lbV9mdW5fcmVmKCZleHRlbnRfcmFuZ2U6OnN0YXJ0KSk7CgoKICAgIGV4dGVu dF9saXN0IGV4dGVudHM7CiAgICBzdGQ6OnRyYW5zZm9ybShyYW5nZXMucmFuZ2VzXy5iZWdpbigp LHJhbmdlcy5yYW5nZXNfLmVuZCgpLAogICAgICAgICAgICAgIGV4dGVudHMuYmVnaW4oKSwKICAg ICAgICAgICAgICBib29zdDo6bWVtX2Z1bl9yZWYoJmV4dGVudF9yYW5nZTo6c2l6ZSkpOwoKICAg IGluaXRfbXVsdGlfYXJyYXlfcmVmKGV4dGVudHMuYmVnaW4oKSk7CiAgfQoKCiAgdGVtcGxhdGUg PGNsYXNzIElucHV0SXRlcmF0b3I+CiAgdm9pZCBpbml0X211bHRpX2FycmF5X3JlZihJbnB1dEl0 ZXJhdG9yIGV4dGVudHNfaXRlcikgewogICAgYm9vc3Q6OmZ1bmN0aW9uX3JlcXVpcmVzPElucHV0 SXRlcmF0b3JDb25jZXB0PElucHV0SXRlcmF0b3I+ID4oKTsKCiAgICBib29zdDo6Y29weV9uKGV4 dGVudHNfaXRlcixudW1fZGltZW5zaW9ucygpLGV4dGVudF9saXN0Xy5iZWdpbigpKTsKCgogICAg bnVtX2VsZW1lbnRzXyA9IHN0ZDo6YWNjdW11bGF0ZShleHRlbnRfbGlzdF8uYmVnaW4oKSxleHRl bnRfbGlzdF8uZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLHN0ZDo6bXVsdGlw bGllczxpbmRleD4oKSk7CiAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKChudW1fZWxlbWVudHNfICE9 IDApID8gMCA6IChfX2Fzc2VydF9mYWlsICgibnVtX2VsZW1lbnRzXyAhPSAwIiwgIi9ob21lL2Nv bXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRpX2FycmF5L211bHRpX2FycmF5X3JlZi5o cHAiLCAzNjksIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKICAgIGNvbXB1dGVfc3RyaWRl cyhzdHJpZGVfbGlzdF8sZXh0ZW50X2xpc3RfLHN0b3JhZ2VfKTsKCiAgICBvcmlnaW5fb2Zmc2V0 XyA9CiAgICAgIGNhbGN1bGF0ZV9vcmlnaW5fb2Zmc2V0KHN0cmlkZV9saXN0XyxleHRlbnRfbGlz dF8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VfLGluZGV4X2Jhc2VfbGlz dF8pOwogICAgZGlyZWN0aW9uYWxfb2Zmc2V0XyA9CiAgICAgIGNhbGN1bGF0ZV9kZXNjZW5kaW5n X2RpbWVuc2lvbl9vZmZzZXQoc3RyaWRlX2xpc3RfLGV4dGVudF9saXN0XywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlXyk7CiAgfQp9OwoKCnRlbXBs YXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOdW1EaW1zPgpjbGFzcyBtdWx0aV9hcnJheV9y ZWYgOgogIHB1YmxpYyBjb25zdF9tdWx0aV9hcnJheV9yZWY8VCxOdW1EaW1zLFQqPgp7CiAgdHlw ZWRlZiBjb25zdF9tdWx0aV9hcnJheV9yZWY8VCxOdW1EaW1zLFQqPiBzdXBlcl90eXBlOwpwdWJs aWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7 CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5 cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0 eXBlbmFtZSBzdXBlcl90eXBlOjppdGVyX2Jhc2UgaXRlcl9iYXNlOwogIHR5cGVkZWYgdHlwZW5h bWUgc3VwZXJfdHlwZTo6cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVk ZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsK ICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJh dG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6Y29uc3RfaXRlcl9iYXNlIGNvbnN0 X2l0ZXJfYmFzZTsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X3JldmVyc2Vf aXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVy X3R5cGU6OmVsZW1lbnQgZWxlbWVudDsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OnNp emVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpkaWZmZXJl bmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6 aW5kZXggaW5kZXg7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpleHRlbnRfcmFuZ2Ug ZXh0ZW50X3JhbmdlOwoKCgogIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBORGltcz4KICBzdHJ1Y3Qg Y29uc3RfYXJyYXlfdmlldyB7CiAgICB0eXBlZGVmIGJvb3N0OjpkZXRhaWw6Om11bHRpX2FycmF5 Ojpjb25zdF9tdWx0aV9hcnJheV92aWV3PFQsTkRpbXM+IHR5cGU7CiAgfTsKCiAgdGVtcGxhdGUg PHN0ZDo6c2l6ZV90IE5EaW1zPgogIHN0cnVjdCBhcnJheV92aWV3IHsKICAgIHR5cGVkZWYgYm9v c3Q6OmRldGFpbDo6bXVsdGlfYXJyYXk6Om11bHRpX2FycmF5X3ZpZXc8VCxORGltcz4gdHlwZTsK ICB9OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgRXh0ZW50TGlzdD4KICBleHBsaWNpdCBtdWx0aV9hcnJh eV9yZWYoVCogYmFzZSwgY29uc3QgRXh0ZW50TGlzdCYgZXh0ZW50cykgOgogICAgc3VwZXJfdHlw ZShiYXNlLGV4dGVudHMpIHsKICAgIGJvb3N0OjpmdW5jdGlvbl9yZXF1aXJlczwKICAgICAgZGV0 YWlsOjptdWx0aV9hcnJheTo6Q29sbGVjdGlvbkNvbmNlcHQ8RXh0ZW50TGlzdD4gPigpOwogIH0K CiAgdGVtcGxhdGUgPGNsYXNzIEV4dGVudExpc3Q+CiAgZXhwbGljaXQgbXVsdGlfYXJyYXlfcmVm KFQqIGJhc2UsIGNvbnN0IEV4dGVudExpc3QmIGV4dGVudHMsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGdlbmVyYWxfc3RvcmFnZV9vcmRlcjxOdW1EaW1zPiYgc28pIDoKICAgIHN1 cGVyX3R5cGUoYmFzZSxleHRlbnRzLHNvKSB7CiAgICBib29zdDo6ZnVuY3Rpb25fcmVxdWlyZXM8 CiAgICAgIGRldGFpbDo6bXVsdGlfYXJyYXk6OkNvbGxlY3Rpb25Db25jZXB0PEV4dGVudExpc3Q+ ID4oKTsKICB9CgoKICBleHBsaWNpdCBtdWx0aV9hcnJheV9yZWYoVCogYmFzZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgZGV0YWlsOjptdWx0aV9hcnJheTo6CiAgICAgICAgICAg ICAgICAgICAgICAgICAgIGV4dGVudF9nZW48TnVtRGltcz4mIHJhbmdlcykgOgogICAgc3VwZXJf dHlwZShiYXNlLHJhbmdlcykgeyB9CgoKICBleHBsaWNpdCBtdWx0aV9hcnJheV9yZWYoVCogYmFz ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGV0YWlsOjptdWx0aV9hcnJheTo6 CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVudF9nZW48TnVtRGltcz4mCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBnZW5lcmFsX3N0b3JhZ2Vfb3JkZXI8TnVtRGltcz4mIHNvKSA6CiAgICBzdXBlcl90eXBl KGJhc2UscmFuZ2VzLHNvKSB7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIE9QdHI+CiAgbXVsdGlf YXJyYXlfcmVmKGNvbnN0IGRldGFpbDo6bXVsdGlfYXJyYXk6OgogICAgICAgICAgICAgICAgICBj b25zdF9zdWJfYXJyYXk8VCxOdW1EaW1zLE9QdHI+JiByaHMpCiAgICA6IHN1cGVyX3R5cGUocmhz KSB7fQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIENvbnN0TXVsdGlBcnJheT4KICBtdWx0aV9hcnJh eV9yZWYmIG9wZXJhdG9yPShjb25zdCBDb25zdE11bHRpQXJyYXkmIG90aGVyKSB7CiAgICBmdW5j dGlvbl9yZXF1aXJlczwKICAgICAgZGV0YWlsOjptdWx0aV9hcnJheTo6CiAgICAgIENvbnN0TXVs dGlBcnJheUNvbmNlcHQ8Q29uc3RNdWx0aUFycmF5LE51bURpbXM+ID4oKTsKCgogICAgKHN0YXRp Y19jYXN0PHZvaWQ+ICgob3RoZXIubnVtX2RpbWVuc2lvbnMoKSA9PSBudW1fZGltZW5zaW9ucygp KSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIm90aGVyLm51bV9kaW1lbnNpb25zKCkgPT0gbnVtX2Rp bWVuc2lvbnMoKSIsICIvaG9tZS9jb21wYmlvL2Q5NS1ibGkvaW5jbHVkZS9ib29zdC9tdWx0aV9h cnJheS9tdWx0aV9hcnJheV9yZWYuaHBwIiwgNDU4LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkp KTsKICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKHN0ZDo6ZXF1YWwob3RoZXIuc2hhcGUoKSxvdGhl ci5zaGFwZSgpK251bV9kaW1lbnNpb25zKCksIHNoYXBlKCkpKSA/IDAgOiAoX19hc3NlcnRfZmFp bCAoInN0ZDo6ZXF1YWwob3RoZXIuc2hhcGUoKSxvdGhlci5zaGFwZSgpK251bV9kaW1lbnNpb25z KCksIHNoYXBlKCkpIiwgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRlL2Jvb3N0L211bHRp X2FycmF5L211bHRpX2FycmF5X3JlZi5ocHAiLCA0NjAsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAw KSkpOwoKCiAgICBzdGQ6OmNvcHkob3RoZXIuYmVnaW4oKSxvdGhlci5lbmQoKSxiZWdpbigpKTsK ICAgIHJldHVybiAqdGhpczsKICB9CgogIG11bHRpX2FycmF5X3JlZiYgb3BlcmF0b3I9KGNvbnN0 IG11bHRpX2FycmF5X3JlZiYgb3RoZXIpIHsKICAgIGlmICgmb3RoZXIgIT0gdGhpcykgewoKCiAg ICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKG90aGVyLm51bV9kaW1lbnNpb25zKCkgPT0gbnVtX2Rp bWVuc2lvbnMoKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJvdGhlci5udW1fZGltZW5zaW9ucygp ID09IG51bV9kaW1lbnNpb25zKCkiLCAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUvYm9v c3QvbXVsdGlfYXJyYXkvbXVsdGlfYXJyYXlfcmVmLmhwcCIsIDQ3MCwgX19QUkVUVFlfRlVOQ1RJ T05fXyksIDApKSk7CiAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKHN0ZDo6ZXF1YWwob3RoZXIu c2hhcGUoKSxvdGhlci5zaGFwZSgpK251bV9kaW1lbnNpb25zKCksIHNoYXBlKCkpKSA/IDAgOiAo X19hc3NlcnRfZmFpbCAoInN0ZDo6ZXF1YWwob3RoZXIuc2hhcGUoKSxvdGhlci5zaGFwZSgpK251 bV9kaW1lbnNpb25zKCksIHNoYXBlKCkpIiwgIi9ob21lL2NvbXBiaW8vZDk1LWJsaS9pbmNsdWRl L2Jvb3N0L211bHRpX2FycmF5L211bHRpX2FycmF5X3JlZi5ocHAiLCA0NzIsIF9fUFJFVFRZX0ZV TkNUSU9OX18pLCAwKSkpOwoKCiAgICAgIHN0ZDo6Y29weShvdGhlci5iZWdpbigpLG90aGVyLmVu ZCgpLGJlZ2luKCkpOwogICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgZWxlbWVudCogb3Jp Z2luKCkgeyByZXR1cm4gYmFzZV8rb3JpZ2luX29mZnNldF87IH0KCiAgZWxlbWVudCogZGF0YSgp IHsgcmV0dXJuIGJhc2VfOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBJbmRleExpc3Q+CiAgZWxlbWVu dCYgb3BlcmF0b3IoKShjb25zdCBJbmRleExpc3QmIGluZGljZXMpIHsKICBib29zdDo6ZnVuY3Rp b25fcmVxdWlyZXM8CiAgICBkZXRhaWw6Om11bHRpX2FycmF5OjpDb2xsZWN0aW9uQ29uY2VwdDxJ bmRleExpc3Q+ID4oKTsKICByZXR1cm4gc3VwZXJfdHlwZTo6YWNjZXNzX2VsZW1lbnQoYm9vc3Q6 OnR5cGU8ZWxlbWVudCY+KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg b3JpZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlcyxz dHJpZGVzKCkpOwogIH0KCgogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGluZGV4IGlkeCkgewogICAg cmV0dXJuIHN1cGVyX3R5cGU6OmFjY2Vzcyhib29zdDo6dHlwZTxyZWZlcmVuY2U+KCksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlkeCxvcmlnaW4oKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2hhcGUoKSxzdHJpZGVzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGluZGV4X2Jhc2VzKCkpOwogIH0KCgoKCiAgdGVtcGxhdGUgPGludCBORGltcz4KCgoKICB0 eXBlbmFtZSBhcnJheV92aWV3PE5EaW1zPjo6dHlwZQogIG9wZXJhdG9yW10oY29uc3QgZGV0YWls OjptdWx0aV9hcnJheTo6CiAgICAgICAgICAgICBpbmRleF9nZW48TnVtRGltcyxORGltcz4mIGlu ZGljZXMpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgYXJyYXlfdmlldzxORGltcz46OnR5cGUgcmV0 dXJuX3R5cGU7CiAgICByZXR1cm4KICAgICAgc3VwZXJfdHlwZTo6Z2VuZXJhdGVfYXJyYXlfdmll dyhib29zdDo6dHlwZTxyZXR1cm5fdHlwZT4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbmRpY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNoYXBlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWRlcygp LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4X2Jhc2VzKCksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luKCkpOwogIH0KCgogIGl0 ZXJhdG9yIGJlZ2luKCkgewogICAgcmV0dXJuIGl0ZXJhdG9yKGl0ZXJfYmFzZSgqaW5kZXhfYmFz ZXMoKSxvcmlnaW4oKSxzaGFwZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJp ZGVzKCksaW5kZXhfYmFzZXMoKSkpOwogIH0KCiAgaXRlcmF0b3IgZW5kKCkgewogICAgcmV0dXJu IGl0ZXJhdG9yKGl0ZXJfYmFzZSgqaW5kZXhfYmFzZXMoKSsqc2hhcGUoKSxvcmlnaW4oKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUoKSxzdHJpZGVzKCksaW5kZXhfYmFzZXMo KSkpOwogIH0KCgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgewogICAgcmV2ZXJzZV9pdGVy YXRvciByaShlbmQoKSk7CiAgICByZXR1cm4gcmk7CiAgfQoKICByZXZlcnNlX2l0ZXJhdG9yIHJl bmQoKSB7CiAgICByZXZlcnNlX2l0ZXJhdG9yIHJpKGJlZ2luKCkpOwogICAgcmV0dXJuIHJpOwog IH0KCgoKCiAgY29uc3QgZWxlbWVudCogb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gc3VwZXJfdHlw ZTo6b3JpZ2luKCk7IH0KICBjb25zdCBlbGVtZW50KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gc3Vw ZXJfdHlwZTo6ZGF0YSgpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBJbmRleExpc3Q+CiAgY29uc3Qg ZWxlbWVudCYgb3BlcmF0b3IoKShjb25zdCBJbmRleExpc3QmIGluZGljZXMpIGNvbnN0IHsKICAg IGJvb3N0OjpmdW5jdGlvbl9yZXF1aXJlczwKICAgICAgZGV0YWlsOjptdWx0aV9hcnJheTo6Q29s bGVjdGlvbkNvbmNlcHQ8SW5kZXhMaXN0PiA+KCk7CiAgICByZXR1cm4gc3VwZXJfdHlwZTo6b3Bl cmF0b3IoKShpbmRpY2VzKTsKICB9CgogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKGluZGV4 IGlkeCkgY29uc3QgewogICAgcmV0dXJuIHN1cGVyX3R5cGU6OmFjY2Vzcyhib29zdDo6dHlwZTxj b25zdF9yZWZlcmVuY2U+KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeCxvcmln aW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUoKSxzdHJpZGVzKCksaW5k ZXhfYmFzZXMoKSk7CiAgfQoKCgogIHRlbXBsYXRlIDxpbnQgTkRpbXM+CgoKCiAgdHlwZW5hbWUg Y29uc3RfYXJyYXlfdmlldzxORGltcz46OnR5cGUKICBvcGVyYXRvcltdKGNvbnN0IGRldGFpbDo6 bXVsdGlfYXJyYXk6OgogICAgICAgICAgICAgaW5kZXhfZ2VuPE51bURpbXMsTkRpbXM+JiBpbmRp Y2VzKQogICAgY29uc3QgewogICAgcmV0dXJuIHN1cGVyX3R5cGU6Om9wZXJhdG9yW10oaW5kaWNl cyk7CiAgfQoKICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsKICAgIHJldHVybiBzdXBl cl90eXBlOjpiZWdpbigpOwogIH0KCiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgewogICAg cmV0dXJuIHN1cGVyX3R5cGU6OmVuZCgpOwogIH0KCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciBy YmVnaW4oKSBjb25zdCB7CiAgICByZXR1cm4gc3VwZXJfdHlwZTo6cmJlZ2luKCk7CiAgfQoKICBj b25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7CiAgICByZXR1cm4gc3VwZXJfdHlw ZTo6cmVuZCgpOwogIH0KfTsKCn0KIyAyNyAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2luY2x1ZGUv Ym9vc3QvbXVsdGlfYXJyYXkuaHBwIiAyIDMKIyAzNiAiL2hvbWUvY29tcGJpby9kOTUtYmxpL2lu Y2x1ZGUvYm9vc3QvbXVsdGlfYXJyYXkuaHBwIiAzCm5hbWVzcGFjZSBib29zdCB7Cgp0ZW1wbGF0 ZTx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOdW1EaW1zLAogIHR5cGVuYW1lIEFsbG9jYXRvcj4K Y2xhc3MgbXVsdGlfYXJyYXkgOgogIHB1YmxpYyBtdWx0aV9hcnJheV9yZWY8VCxOdW1EaW1zPgp7 CiAgdHlwZWRlZiBtdWx0aV9hcnJheV9yZWY8VCxOdW1EaW1zPiBzdXBlcl90eXBlOwpwdWJsaWM6 CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAg dHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVk ZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsK ICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogIHR5cGVk ZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAg dHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjppdGVyX2Jhc2UgaXRlcl9iYXNlOwogIHR5cGVk ZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6Y29uc3RfaXRlcl9iYXNlIGNvbnN0X2l0ZXJfYmFzZTsK ICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9p dGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRl cmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5 cGU6OmVsZW1lbnQgZWxlbWVudDsKICB0eXBlZGVmIHR5cGVuYW1lIHN1cGVyX3R5cGU6OnNpemVf dHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpkaWZmZXJlbmNl X3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgc3VwZXJfdHlwZTo6aW5k ZXggaW5kZXg7CiAgdHlwZWRlZiB0eXBlbmFtZSBzdXBlcl90eXBlOjpleHRlbnRfcmFuZ2UgZXh0 ZW50X3JhbmdlOwoKCiAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE5EaW1zPgogIHN0cnVjdCBjb25z dF9hcnJheV92aWV3IHsKICAgIHR5cGVkZWYgYm9vc3Q6OmRldGFpbDo6bXVsdGlfYXJyYXk6OmNv bnN0X211bHRpX2FycmF5X3ZpZXc8VCxORGltcz4gdHlwZTsKICB9OwoKICB0ZW1wbGF0ZSA8c3Rk OjpzaXplX3QgTkRpbXM+CiAgc3RydWN0IGFycmF5X3ZpZXcgewogICAgdHlwZWRlZiBib29zdDo6 ZGV0YWlsOjptdWx0aV9hcnJheTo6bXVsdGlfYXJyYXlfdmlldzxULE5EaW1zPiB0eXBlOwogIH07 CgogIHRlbXBsYXRlIDxjbGFzcyBFeHRlbnRMaXN0PgogIGV4cGxpY2l0IG11bHRpX2FycmF5KEV4 dGVudExpc3QgY29uc3QmIGV4dGVudHMpIDoKICAgIHN1cGVyX3R5cGUoKFQqKWluaXRpYWxfYmFz ZV8sZXh0ZW50cykgewogICAgYm9vc3Q6OmZ1bmN0aW9uX3JlcXVpcmVzPAogICAgICBkZXRhaWw6 Om11bHRpX2FycmF5OjpDb2xsZWN0aW9uQ29uY2VwdDxFeHRlbnRMaXN0PiA+KCk7CiAgICBhbGxv Y2F0ZV9zcGFjZSgpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIEV4dGVudExpc3Q+CiAgZXhwbGlj aXQgbXVsdGlfYXJyYXkoRXh0ZW50TGlzdCBjb25zdCYgZXh0ZW50cywKICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBnZW5lcmFsX3N0b3JhZ2Vfb3JkZXI8TnVtRGltcz4mIHNvKSA6CiAgICBz dXBlcl90eXBlKChUKilpbml0aWFsX2Jhc2VfLGV4dGVudHMsc28pIHsKICAgIGJvb3N0OjpmdW5j dGlvbl9yZXF1aXJlczwKICAgICAgZGV0YWlsOjptdWx0aV9hcnJheTo6Q29sbGVjdGlvbkNvbmNl cHQ8RXh0ZW50TGlzdD4gPigpOwogICAgYWxsb2NhdGVfc3BhY2UoKTsKICB9CgogIHRlbXBsYXRl IDxjbGFzcyBFeHRlbnRMaXN0PgogIGV4cGxpY2l0IG11bHRpX2FycmF5KEV4dGVudExpc3QgY29u c3QmIGV4dGVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2VuZXJhbF9zdG9yYWdl X29yZGVyPE51bURpbXM+JiBzbywKICAgICAgICAgICAgICAgICAgICAgICBBbGxvY2F0b3IgY29u c3QmIGFsbG9jKSA6CiAgICBzdXBlcl90eXBlKChUKilpbml0aWFsX2Jhc2VfLGV4dGVudHMsc28p LCBhbGxvY2F0b3JfKGFsbG9jKSB7CiAgICBib29zdDo6ZnVuY3Rpb25fcmVxdWlyZXM8CiAgICAg IGRldGFpbDo6bXVsdGlfYXJyYXk6OkNvbGxlY3Rpb25Db25jZXB0PEV4dGVudExpc3Q+ID4oKTsK ICAgIGFsbG9jYXRlX3NwYWNlKCk7CiAgfQoKCiAgZXhwbGljaXQgbXVsdGlfYXJyYXkoY29uc3Qg ZGV0YWlsOjptdWx0aV9hcnJheQogICAgICAgICAgICAgICAgICAgICAgIDo6ZXh0ZW50X2dlbjxO dW1EaW1zPiYgcmFuZ2VzKSA6CiAgICBzdXBlcl90eXBlKChUKilpbml0aWFsX2Jhc2VfLHJhbmdl cykgewoKICAgIGFsbG9jYXRlX3NwYWNlKCk7CiAgfQoKCiAgZXhwbGljaXQgbXVsdGlfYXJyYXko Y29uc3QgZGV0YWlsOjptdWx0aV9hcnJheQogICAgICAgICAgICAgICAgICAgICAgIDo6ZXh0ZW50 X2dlbjxOdW1EaW1zPiYgcmFuZ2VzLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdlbmVy YWxfc3RvcmFnZV9vcmRlcjxOdW1EaW1zPiYgc28pIDoKICAgIHN1cGVyX3R5cGUoKFQqKWluaXRp YWxfYmFzZV8scmFuZ2VzLHNvKSB7CgogICAgYWxsb2NhdGVfc3BhY2UoKTsKICB9CgoKICBleHBs aWNpdCBtdWx0aV9hcnJheShjb25zdCBkZXRhaWw6Om11bHRpX2FycmF5CiAgICAgICAgICAgICAg ICAgICAgICAgOjpleHRlbnRfZ2VuPE51bURpbXM+JiByYW5nZXMsCiAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgZ2VuZXJhbF9zdG9yYWdlX29yZGVyPE51bURpbXM+JiBzbywKICAgICAgICAg ICAgICAgICAgICAgICBBbGxvY2F0b3IgY29uc3QmIGFsbG9jKSA6CiAgICBzdXBlcl90eXBlKChU Kilpbml0aWFsX2Jhc2VfLHJhbmdlcyxzbyksIGFsbG9jYXRvcl8oYWxsb2MpIHsKCiAgICBhbGxv Y2F0ZV9zcGFjZSgpOwogIH0KCiAgbXVsdGlfYXJyYXkoY29uc3QgbXVsdGlfYXJyYXkmIHJocykg OgogIHN1cGVyX3R5cGUocmhzKSwgYWxsb2NhdG9yXyhyaHMuYWxsb2NhdG9yXykgewogICAgYWxs b2NhdGVfc3BhY2UoKTsKICAgIGJvb3N0Ojpjb3B5X24ocmhzLmJhc2VfLHJocy5udW1fZWxlbWVu dHMoKSxiYXNlXyk7CiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT1B0cj4KICBtdWx0aV9hcnJh eShjb25zdCBkZXRhaWw6Om11bHRpX2FycmF5OjoKICAgICAgICAgICAgICBjb25zdF9zdWJfYXJy YXk8VCxOdW1EaW1zLE9QdHI+JiByaHMpIDoKICAgIHN1cGVyX3R5cGUocmhzKSB7CiAgICBhbGxv Y2F0ZV9zcGFjZSgpOwogICAgc3RkOjpjb3B5KHJocy5iZWdpbigpLHJocy5lbmQoKSxiZWdpbigp KTsKICB9CgoKCgogIG11bHRpX2FycmF5KGNvbnN0IGRldGFpbDo6bXVsdGlfYXJyYXk6OgogICAg ICAgICAgICAgIHN1Yl9hcnJheTxULE51bURpbXM+JiByaHMpIDoKICAgIHN1cGVyX3R5cGUocmhz KSB7CiAgICBhbGxvY2F0ZV9zcGFjZSgpOwogICAgc3RkOjpjb3B5KHJocy5iZWdpbigpLHJocy5l bmQoKSxiZWdpbigpKTsKICB9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIENvbnN0TXVsdGlBcnJh eT4KICBtdWx0aV9hcnJheSYgb3BlcmF0b3I9KGNvbnN0IENvbnN0TXVsdGlBcnJheSYgb3RoZXIp IHsKICAgIHN1cGVyX3R5cGU6Om9wZXJhdG9yPShvdGhlcik7CiAgICByZXR1cm4gKnRoaXM7CiAg fQoKICBtdWx0aV9hcnJheSYgb3BlcmF0b3I9KGNvbnN0IG11bHRpX2FycmF5JiBvdGhlcikgewog ICAgaWYgKCZvdGhlciAhPSB0aGlzKSB7CiAgICAgIHN1cGVyX3R5cGU6Om9wZXJhdG9yPShvdGhl cik7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCiAgfm11bHRpX2FycmF5KCkgewogICAg ZGVhbGxvY2F0ZV9zcGFjZSgpOwogIH0KCnByaXZhdGU6CiAgdm9pZCBhbGxvY2F0ZV9zcGFjZSgp IHsKICAgIHR5cGVuYW1lIEFsbG9jYXRvcjo6Y29uc3RfcG9pbnRlciBub19oaW50PTA7CiAgICBi YXNlXyA9IGFsbG9jYXRvcl8uYWxsb2NhdGUoc3VwZXJfdHlwZTo6bnVtX2VsZW1lbnRzKCksbm9f aGludCk7CiAgICBzdXBlcl90eXBlOjpzZXRfYmFzZV9wdHIoYmFzZV8pOwogICAgYWxsb2NhdGVk X2VsZW1lbnRzXyA9IHN1cGVyX3R5cGU6Om51bV9lbGVtZW50cygpOwogICAgc3RkOjp1bmluaXRp YWxpemVkX2ZpbGxfbihiYXNlXyxhbGxvY2F0ZWRfZWxlbWVudHNfLFQoKSk7CiAgfQoKICB2b2lk IGRlYWxsb2NhdGVfc3BhY2UoKSB7CiAgICBpZihiYXNlXykgewogICAgICBmb3IoVCogaSA9IGJh c2VfOyBpICE9IGJhc2VfK2FsbG9jYXRlZF9lbGVtZW50c187ICsraSkKICAgICAgICBhbGxvY2F0 b3JfLmRlc3Ryb3koaSk7CiAgICAgIGFsbG9jYXRvcl8uZGVhbGxvY2F0ZShiYXNlXyxhbGxvY2F0 ZWRfZWxlbWVudHNfKTsKICAgIH0KICB9CgogIHR5cGVkZWYgYm9vc3Q6OmFycmF5PHNpemVfdHlw ZSxOdW1EaW1zPiBzaXplX2xpc3Q7CiAgdHlwZWRlZiBib29zdDo6YXJyYXk8aW5kZXgsTnVtRGlt cz4gaW5kZXhfbGlzdDsKCiAgQWxsb2NhdG9yIGFsbG9jYXRvcl87CiAgVCogYmFzZV87CiAgc2l6 ZV90eXBlIGFsbG9jYXRlZF9lbGVtZW50c187CiAgZW51bSB7aW5pdGlhbF9iYXNlXyA9IDB9Owp9 OwoKfQojIDMgImV4ZW1wZWwuY3BwIiAyCgoKc3RydWN0IFAKe307Cgp0ZW1wbGF0ZTx0eXBlbmFt ZSBUPgpzdHJ1Y3QgZnVuY3Rvcgp7CiAgICB0eXBlZGVmIGJvb3N0OjptdWx0aV9hcnJheTxULCAz PiB0YWJsZV90OwogICAgdHlwZWRlZiB0eXBlbmFtZSB0YWJsZV90OjphcnJheV92aWV3PDI+Ojp0 eXBlIG5vZGV0YWJfdDsKCiAgICB2b2lkIG9wZXJhdG9yKCkoKQogICAgewogICAgICAgIG5vZGV0 YWJfdCBub2RldGFiOwogICAgfQoKfTsKCmludCBtYWluKCkKewogICAgZnVuY3RvcjxQPiB2aXM7 CiAgICB2aXMoKTsKCiAgICByZXR1cm4gMDsKfQo=