From mboxrd@z Thu Jan 1 00:00:00 1970 From: jones.peter@uqam.ca To: gcc-gnats@gcc.gnu.org Cc: jones.peter@uqam.ca Subject: objc/4110: Error messages like bug 666, that was never resolved Date: Fri, 24 Aug 2001 00:56:00 -0000 Message-id: <20010824075220.5771.qmail@sourceware.cygnus.com> X-SW-Source: 2001-08/msg00615.html List-Id: >Number: 4110 >Category: objc >Synopsis: Error messages like bug 666, that was never resolved >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Fri Aug 24 00:56:02 PDT 2001 >Closed-Date: >Last-Modified: >Originator: Peter Jones >Release: 3.0.1 built locally >Organization: >Environment: RedHat 7.1 on Intel 686, "everything" installed. >Description: I have installed Swarm from SantaFe at /uar/local/swarm, and gcc 3.0.1 at /usr/local/gcc3, HDF5 at /usr/local/hdf5. When a user of swarm tries to run the first "hello-world" program in the Swarm package, spurious load errors are produced. They are of the form: "/usr/bin/ld: warning: type and size of dynamic symbol `__objc_class_name_XXXXXXX' are not defined." This problem has already been reported as bug 666, using GCC 2.95. >How-To-Repeat: Try to run a Swarm program. >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="qqq" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="qqq" U29ycnkgYWxsIHRoaXMgaXMgaW4gb25lIGZpbGUsIGFzIHRoZSBXZWIgaW50ZXJmYWNlIGRvZXNu J3Qgc2VlbSB0byBhbGxvdwp1cGxvYWRpbmcgb25lIGF0IGEgdGltZS4gVGhlIGZpbGVzIEkgYW0g c3VibWl0dGlnIGFyZToKCnNob3didWcgLSBwcm9jZWR1cmUgdG8gZG8gYSB0cmlhbCBydW4KYnVn c291dCAtIGFiYnJldmlhdGVkIG91dHB1dC4gVGhlIG91dHB1dCBvZiAibm0iIHNob3dzIHRoZSBz eW1ib2xzIGFyZQogICAgICAgICAgZGVmaW5lZCAod2l0aCBhbiAiUiIgZmxhZykuClNvdXJjZSBm aWxlczoKQ291bnRlci5taQptYWluLm1pClBlcnNvbi5taQpQcGxNb2RlbFN3YXJtLm1pClBwbE9i c2VydmVyU3dhcm0ubWkKClNvcnJyeSwgd2hlbiBJIHRyaWVkIGNvbmNhdGVuYXRpbmcgYWxsIHRo ZXNlIGZpbGVzLCBJIGdvdCBsb3RzIG9mCmR1cGxpY2F0ZSBzeW1ib2wgbWVzc2FnZXMuIEkgd291 bGQgaGF2ZSBsaWtlZCB0byBzdWJtaXQganVzdCBvbmUgZmlsZS4KCgoyMDAxLTA4LTI0IDAyOjQw ICAgICAgICAgICAgICAgICAgICBzaG93YnVnICAgICAgICAgICAgICAgICAgICBQYWdlICAgIDEK CgojIS9iaW4vYmFzaCAteAovdXNyL2xvY2FsL2djYzMvYmluL2djYyAtYyAtZyAtTzIgLVdhbGwg LVduby1pbXBvcnQgLVduby1wcm90b2NvbCAtV2Vycm9yICAtRF9HTlVfU09VUkNFIC1EQVBQTkFN RT1oZWxsby13b3JsZCAtREFQUFZFUlNJT049Mi4xIC1EQlVHQUREUkVTUz1idWctc3dhcm1Ac3dh cm0ub3JnIC1EQVBQTkFNRT1oZWxsby13b3JsZCAtREFQUFZFUlNJT049Mi4xIC1EQlVHQUREUkVT Uz1idWctc3dhcm1Ac3dhcm0ub3JnIC0tc2F2ZS10ZW1wcyAgIC1JL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlIG1haW4ubWkKL3Vzci9sb2NhbC9nY2MzL2Jpbi9nY2MgLWMgLWcgLU8yIC1XYWxsIC1X bm8taW1wb3J0IC1Xbm8tcHJvdG9jb2wgLVdlcnJvciAgLURfR05VX1NPVVJDRSAtREFQUE5BTUU9 aGVsbG8td29ybGQgLURBUFBWRVJTSU9OPTIuMSAtREJVR0FERFJFU1M9YnVnLXN3YXJtQHN3YXJt Lm9yZyAtREFQUE5BTUU9aGVsbG8td29ybGQgLURBUFBWRVJTSU9OPTIuMSAtREJVR0FERFJFU1M9 YnVnLXN3YXJtQHN3YXJtLm9yZyAtLXNhdmUtdGVtcHMgICAtSS91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZSBQZXJzb24ubWkKL3Vzci9sb2NhbC9nY2MzL2Jpbi9nY2MgLWMgLWcgLU8yIC1XYWxsIC1X bm8taW1wb3J0IC1Xbm8tcHJvdG9jb2wgLVdlcnJvciAgLURfR05VX1NPVVJDRSAtREFQUE5BTUU9 aGVsbG8td29ybGQgLURBUFBWRVJTSU9OPTIuMSAtREJVR0FERFJFU1M9YnVnLXN3YXJtQHN3YXJt Lm9yZyAtREFQUE5BTUU9aGVsbG8td29ybGQgLURBUFBWRVJTSU9OPTIuMSAtREJVR0FERFJFU1M9 YnVnLXN3YXJtQHN3YXJtLm9yZyAtLXNhdmUtdGVtcHMgICAtSS91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZSBDb3VudGVyLm1pCi91c3IvbG9jYWwvZ2NjMy9iaW4vZ2NjIC1jIC1nIC1PMiAtV2FsbCAt V25vLWltcG9ydCAtV25vLXByb3RvY29sIC1XZXJyb3IgIC1EX0dOVV9TT1VSQ0UgLURBUFBOQU1F PWhlbGxvLXdvcmxkIC1EQVBQVkVSU0lPTj0yLjEgLURCVUdBRERSRVNTPWJ1Zy1zd2FybUBzd2Fy bS5vcmcgLURBUFBOQU1FPWhlbGxvLXdvcmxkIC1EQVBQVkVSU0lPTj0yLjEgLURCVUdBRERSRVNT PWJ1Zy1zd2FybUBzd2FybS5vcmcgLS1zYXZlLXRlbXBzICAgLUkvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUgUHBsTW9kZWxTd2FybS5taQovdXNyL2xvY2FsL2djYzMvYmluL2djYyAtYyAtZyAtTzIg LVdhbGwgLVduby1pbXBvcnQgLVduby1wcm90b2NvbCAtV2Vycm9yICAtRF9HTlVfU09VUkNFIC1E QVBQTkFNRT1oZWxsby13b3JsZCAtREFQUFZFUlNJT049Mi4xIC1EQlVHQUREUkVTUz1idWctc3dh cm1Ac3dhcm0ub3JnIC1EQVBQTkFNRT1oZWxsby13b3JsZCAtREFQUFZFUlNJT049Mi4xIC1EQlVH QUREUkVTUz1idWctc3dhcm1Ac3dhcm0ub3JnIC0tc2F2ZS10ZW1wcyAgIC1JL3Vzci9sb2NhbC9z d2FybS9pbmNsdWRlIFBwbE9ic2VydmVyU3dhcm0ubWkKL3Vzci9sb2NhbC9nY2MzL2Jpbi9nY2Mg LWcgLU8yIC1vIC5saWJzL2hlbGxvLXdvcmxkIG1haW4ubyBQZXJzb24ubyBDb3VudGVyLm8gUHBs TW9kZWxTd2FybS5vIFBwbE9ic2VydmVyU3dhcm0ubyAtTC91c3IvbG9jYWwvc3dhcm0vbGliIC91 c3IvbG9jYWwvc3dhcm0vbGliL2xpYnN3YXJtLnNvIC1ML3Vzci9sb2NhbC9oZGY1L2xpYiAtTC91 c3IvbGliIC1ML3Vzci9YMTFSNi9saWIgLUwvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy4wLjEvIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnNwYWNlLnNvIC91 c3IvbG9jYWwvc3dhcm0vbGliL2xpYmFuYWx5c2lzLnNvIC91c3IvbG9jYWwvc3dhcm0vbGliL2xp YnNpbXRvb2xzZ3VpLnNvIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnNpbXRvb2xzLnNvIC91c3Iv bG9jYWwvc3dhcm0vbGliL2xpYnJhbmRvbS5zbyAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJ0a29i amMuc28gL3Vzci9sb2NhbC9zd2FybS9saWIvbGlidGNsb2JqYy5zbyAvdXNyL2xvY2FsL3N3YXJt L2xpYi9saWJvYmplY3RiYXNlLnNvIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmFjdGl2aXR5LnNv IC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmRlZm9iai5zbyAvdXNyL2xvY2FsL3N3YXJtL2xpYi9s aWJjb2xsZWN0aW9ucy5zbyAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJtaXNjLnNvIC91c3IvbG9j YWwvc3dhcm0vbGliL2xpYm9iamMuc28gLWxnY2MgLWxCTFQyNCAtbHRrOC4zIC1sdGNsOC4zIC1s WHBtIC1scG5nIC91c3IvbG9jYWwvaGRmNS9saWIvbGliaGRmNS5zbyAtbHNzbCAtbGNyeXB0byAt bHogLWxtIC1sWDExIC1sZGwgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlib2JqYy5zbyAtTC91c3Iv bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS8gLWxnY2MgLVds LC0tcnBhdGggLVdsLC91c3IvbG9jYWwvc3dhcm0vbGliIC1XbCwtLXJwYXRoIC1XbCwvdXNyL2xv Y2FsL2hkZjUvbGliIC1XbCwtLXJwYXRoIC1XbCwvdXNyL2xvY2FsL2djYzMvbGliIC1XbCwtLXJw YXRoIC1XbCwvdXNyL2xpYiAtV2wsLS1ycGF0aCAtV2wsL3Vzci9YMTFSNi9saWIKZm9yIHggaW4g U3dhcm1PYmplY3QgR1VJU3dhcm0gRW1wdHlQcm9iZU1hcCBTd2FybQpkbyBlY2hvIFNlYXJjaGlu ZyBmb3IgJHgKbm0gLW8gQ291bnRlci5vIG1haW4ubyBQZXJzb24ubyBQcGxNb2RlbFN3YXJtLm8g UHBsT2JzZXJ2ZXJTd2FybS5vICAvdXNyL2xvY2FsL2hkZjUvbGliLyogL3Vzci9sb2NhbC9zd2Fy bS9saWIvKiB8IGdyZXAgX19vYmpjX2NsYXNzX25hbWVfIiR4Igpkb25lCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAyOjUyICAg ICAgICAgICAgICAgICAgICBidWdzb3V0ICAgICAgICAgICAgICAgICAgICBQYWdlICAgIDEKCgpB YmJyZXZpYXRlZCBvdXRwdXQgb2Ygc2hvd2J1ZyxBdWcgMjQsIDIwMDEKCisgL3Vzci9sb2NhbC9n Y2MzL2Jpbi9nY2MgLWMgLWcgLU8yIC1XYWxsIC1Xbm8taW1wb3J0IC1Xbm8tcHJvdG9jb2wgLVdl cnJvciAtRF9HTlVfU09VUkNFIC1EQVBQTkFNRT1oZWxsby13b3JsZCAtREFQUFZFUlNJT049Mi4x IC1EQlVHQUREUkVTUz1idWctc3dhcm1Ac3dhcm0ub3JnIC1EQVBQTkFNRT1oZWxsby13b3JsZCAt REFQUFZFUlNJT049Mi4xIC1EQlVHQUREUkVTUz1idWctc3dhcm1Ac3dhcm0ub3JnIC0tc2F2ZS10 ZW1wcyAtSS91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZSBtYWluLm1pCisgL3Vzci9sb2NhbC9nY2Mz L2Jpbi9nY2MgLWMgLWcgLU8yIC1XYWxsIC1Xbm8taW1wb3J0IC1Xbm8tcHJvdG9jb2wgLVdlcnJv ciAtRF9HTlVfU09VUkNFIC1EQVBQTkFNRT1oZWxsby13b3JsZCAtREFQUFZFUlNJT049Mi4xIC1E QlVHQUREUkVTUz1idWctc3dhcm1Ac3dhcm0ub3JnIC1EQVBQTkFNRT1oZWxsby13b3JsZCAtREFQ UFZFUlNJT049Mi4xIC1EQlVHQUREUkVTUz1idWctc3dhcm1Ac3dhcm0ub3JnIC0tc2F2ZS10ZW1w cyAtSS91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZSBQZXJzb24ubWkKKyAvdXNyL2xvY2FsL2djYzMv YmluL2djYyAtYyAtZyAtTzIgLVdhbGwgLVduby1pbXBvcnQgLVduby1wcm90b2NvbCAtV2Vycm9y IC1EX0dOVV9TT1VSQ0UgLURBUFBOQU1FPWhlbGxvLXdvcmxkIC1EQVBQVkVSU0lPTj0yLjEgLURC VUdBRERSRVNTPWJ1Zy1zd2FybUBzd2FybS5vcmcgLURBUFBOQU1FPWhlbGxvLXdvcmxkIC1EQVBQ VkVSU0lPTj0yLjEgLURCVUdBRERSRVNTPWJ1Zy1zd2FybUBzd2FybS5vcmcgLS1zYXZlLXRlbXBz IC1JL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlIENvdW50ZXIubWkKKyAvdXNyL2xvY2FsL2djYzMv YmluL2djYyAtYyAtZyAtTzIgLVdhbGwgLVduby1pbXBvcnQgLVduby1wcm90b2NvbCAtV2Vycm9y IC1EX0dOVV9TT1VSQ0UgLURBUFBOQU1FPWhlbGxvLXdvcmxkIC1EQVBQVkVSU0lPTj0yLjEgLURC VUdBRERSRVNTPWJ1Zy1zd2FybUBzd2FybS5vcmcgLURBUFBOQU1FPWhlbGxvLXdvcmxkIC1EQVBQ VkVSU0lPTj0yLjEgLURCVUdBRERSRVNTPWJ1Zy1zd2FybUBzd2FybS5vcmcgLS1zYXZlLXRlbXBz IC1JL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlIFBwbE1vZGVsU3dhcm0ubWkKKyAvdXNyL2xvY2Fs L2djYzMvYmluL2djYyAtYyAtZyAtTzIgLVdhbGwgLVduby1pbXBvcnQgLVduby1wcm90b2NvbCAt V2Vycm9yIC1EX0dOVV9TT1VSQ0UgLURBUFBOQU1FPWhlbGxvLXdvcmxkIC1EQVBQVkVSU0lPTj0y LjEgLURCVUdBRERSRVNTPWJ1Zy1zd2FybUBzd2FybS5vcmcgLURBUFBOQU1FPWhlbGxvLXdvcmxk IC1EQVBQVkVSU0lPTj0yLjEgLURCVUdBRERSRVNTPWJ1Zy1zd2FybUBzd2FybS5vcmcgLS1zYXZl LXRlbXBzIC1JL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlIFBwbE9ic2VydmVyU3dhcm0ubWkKKyAv dXNyL2xvY2FsL2djYzMvYmluL2djYyAtZyAtTzIgLW8gLmxpYnMvaGVsbG8td29ybGQgbWFpbi5v IFBlcnNvbi5vIENvdW50ZXIubyBQcGxNb2RlbFN3YXJtLm8gUHBsT2JzZXJ2ZXJTd2FybS5vIC1M L3Vzci9sb2NhbC9zd2FybS9saWIgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlic3dhcm0uc28gLUwv dXNyL2xvY2FsL2hkZjUvbGliIC1ML3Vzci9saWIgLUwvdXNyL1gxMVI2L2xpYiAtTC91c3IvbG9j YWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS8gL3Vzci9sb2NhbC9z d2FybS9saWIvbGlic3BhY2Uuc28gL3Vzci9sb2NhbC9zd2FybS9saWIvbGliYW5hbHlzaXMuc28g L3Vzci9sb2NhbC9zd2FybS9saWIvbGlic2ltdG9vbHNndWkuc28gL3Vzci9sb2NhbC9zd2FybS9s aWIvbGlic2ltdG9vbHMuc28gL3Vzci9sb2NhbC9zd2FybS9saWIvbGlicmFuZG9tLnNvIC91c3Iv bG9jYWwvc3dhcm0vbGliL2xpYnRrb2JqYy5zbyAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJ0Y2xv YmpjLnNvIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYm9iamVjdGJhc2Uuc28gL3Vzci9sb2NhbC9z d2FybS9saWIvbGliYWN0aXZpdHkuc28gL3Vzci9sb2NhbC9zd2FybS9saWIvbGliZGVmb2JqLnNv IC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmNvbGxlY3Rpb25zLnNvIC91c3IvbG9jYWwvc3dhcm0v bGliL2xpYm1pc2Muc28gL3Vzci9sb2NhbC9zd2FybS9saWIvbGlib2JqYy5zbyAtbGdjYyAtbEJM VDI0IC1sdGs4LjMgLWx0Y2w4LjMgLWxYcG0gLWxwbmcgL3Vzci9sb2NhbC9oZGY1L2xpYi9saWJo ZGY1LnNvIC1sc3NsIC1sY3J5cHRvIC1seiAtbG0gLWxYMTEgLWxkbCAvdXNyL2xvY2FsL3N3YXJt L2xpYi9saWJvYmpjLnNvIC1ML3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMC4xLyAtbGdjYyAtV2wsLS1ycGF0aCAtV2wsL3Vzci9sb2NhbC9zd2FybS9saWIg LVdsLC0tcnBhdGggLVdsLC91c3IvbG9jYWwvaGRmNS9saWIgLVdsLC0tcnBhdGggLVdsLC91c3Iv bG9jYWwvZ2NjMy9saWIgLVdsLC0tcnBhdGggLVdsLC91c3IvbGliIC1XbCwtLXJwYXRoIC1XbCwv dXNyL1gxMVI2L2xpYgovdXNyL2Jpbi9sZDogd2FybmluZzogdHlwZSBhbmQgc2l6ZSBvZiBkeW5h bWljIHN5bWJvbCBgX19vYmpjX2NsYXNzX25hbWVfU3dhcm1PYmplY3QnIGFyZSBub3QgZGVmaW5l ZAovdXNyL2Jpbi9sZDogd2FybmluZzogdHlwZSBhbmQgc2l6ZSBvZiBkeW5hbWljIHN5bWJvbCBg X19vYmpjX2NsYXNzX25hbWVfR1VJU3dhcm0nIGFyZSBub3QgZGVmaW5lZAovdXNyL2Jpbi9sZDog d2FybmluZzogdHlwZSBhbmQgc2l6ZSBvZiBkeW5hbWljIHN5bWJvbCBgX19vYmpjX2NsYXNzX25h bWVfRW1wdHlQcm9iZU1hcCcgYXJlIG5vdCBkZWZpbmVkCi91c3IvYmluL2xkOiB3YXJuaW5nOiB0 eXBlIGFuZCBzaXplIG9mIGR5bmFtaWMgc3ltYm9sIGBfX29iamNfY2xhc3NfbmFtZV9Td2FybScg YXJlIG5vdCBkZWZpbmVkCisgZWNobyBTZWFyY2hpbmcgZm9yIFN3YXJtT2JqZWN0ClNlYXJjaGlu ZyBmb3IgU3dhcm1PYmplY3QKKyBubSAtbyBDb3VudGVyLm8gbWFpbi5vIFBlcnNvbi5vIFBwbE1v ZGVsU3dhcm0ubyBQcGxPYnNlcnZlclN3YXJtLm8gL3Vzci9sb2NhbC9oZGY1L2xpYi9saWJoZGY1 LmEgL3Vzci9sb2NhbC9oZGY1L2xpYi9saWJoZGY1LmxhIC91c3IvbG9jYWwvaGRmNS9saWIvbGli aGRmNS5zZXR0aW5ncyAvdXNyL2xvY2FsL2hkZjUvbGliL2xpYmhkZjUuc28gL3Vzci9sb2NhbC9o ZGY1L2xpYi9saWJoZGY1LnNvLjAgL3Vzci9sb2NhbC9oZGY1L2xpYi9saWJoZGY1LnNvLjAuMC4w IC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmFjdGl2aXR5LmEgL3Vzci9sb2NhbC9zd2FybS9saWIv bGliYWN0aXZpdHkubGEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGliYWN0aXZpdHkuc28gL3Vzci9s b2NhbC9zd2FybS9saWIvbGliYWN0aXZpdHkuc28uNSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJh Y3Rpdml0eS5zby41LjAuMCAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJhbmFseXNpcy5hIC91c3Iv bG9jYWwvc3dhcm0vbGliL2xpYmFuYWx5c2lzLmxhIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmFu YWx5c2lzLnNvIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmFuYWx5c2lzLnNvLjQgL3Vzci9sb2Nh bC9zd2FybS9saWIvbGliYW5hbHlzaXMuc28uNC4wLjAgL3Vzci9sb2NhbC9zd2FybS9saWIvbGli Y29sbGVjdGlvbnMuYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJjb2xsZWN0aW9ucy5sYSAvdXNy L2xvY2FsL3N3YXJtL2xpYi9saWJjb2xsZWN0aW9ucy5zbyAvdXNyL2xvY2FsL3N3YXJtL2xpYi9s aWJjb2xsZWN0aW9ucy5zby4zIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmNvbGxlY3Rpb25zLnNv LjMuMC4xIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmRlZm9iai5hIC91c3IvbG9jYWwvc3dhcm0v bGliL2xpYmRlZm9iai5sYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJkZWZvYmouc28gL3Vzci9s b2NhbC9zd2FybS9saWIvbGliZGVmb2JqLnNvLjQgL3Vzci9sb2NhbC9zd2FybS9saWIvbGliZGVm b2JqLnNvLjQuMC4wIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmphdmFzd2FybS5hIC91c3IvbG9j YWwvc3dhcm0vbGliL2xpYmphdmFzd2FybS5sYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJqYXZh c3dhcm0uc28gL3Vzci9sb2NhbC9zd2FybS9saWIvbGliamF2YXN3YXJtLnNvLjEgL3Vzci9sb2Nh bC9zd2FybS9saWIvbGliamF2YXN3YXJtLnNvLjEuMC4wIC91c3IvbG9jYWwvc3dhcm0vbGliL2xp YmphdmFzd2FybXN0dWJzLmEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGliamF2YXN3YXJtc3R1YnMu bGEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGliamF2YXN3YXJtc3R1YnMuc28gL3Vzci9sb2NhbC9z d2FybS9saWIvbGliamF2YXN3YXJtc3R1YnMuc28uMCAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJq YXZhc3dhcm1zdHVicy5zby4wLjAuMCAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJtaXNjLmEgL3Vz ci9sb2NhbC9zd2FybS9saWIvbGlibWlzYy5sYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJtaXNj LnNvIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYm1pc2Muc28uMSAvdXNyL2xvY2FsL3N3YXJtL2xp Yi9saWJtaXNjLnNvLjEuMS4zIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYm9iamMuYSAvdXNyL2xv Y2FsL3N3YXJtL2xpYi9saWJvYmpjLmxhIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYm9iamMuc28g L3Vzci9sb2NhbC9zd2FybS9saWIvbGlib2JqYy5zby4wIC91c3IvbG9jYWwvc3dhcm0vbGliL2xp Ym9iamMuc28uMC4wLjAgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlib2JqZWN0YmFzZS5hIC91c3Iv bG9jYWwvc3dhcm0vbGliL2xpYm9iamVjdGJhc2UubGEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGli b2JqZWN0YmFzZS5zbyAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJvYmplY3RiYXNlLnNvLjQgL3Vz ci9sb2NhbC9zd2FybS9saWIvbGlib2JqZWN0YmFzZS5zby40LjAuMCAvdXNyL2xvY2FsL3N3YXJt L2xpYi9saWJyYW5kb20uYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJyYW5kb20ubGEgL3Vzci9s b2NhbC9zd2FybS9saWIvbGlicmFuZG9tLnNvIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnJhbmRv bS5zby4xIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnJhbmRvbS5zby4xLjAuMCAvdXNyL2xvY2Fs L3N3YXJtL2xpYi9saWJzaW10b29scy5hIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnNpbXRvb2xz Z3VpLmEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlic2ltdG9vbHNndWkubGEgL3Vzci9sb2NhbC9z d2FybS9saWIvbGlic2ltdG9vbHNndWkuc28gL3Vzci9sb2NhbC9zd2FybS9saWIvbGlic2ltdG9v bHNndWkuc28uNSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJzaW10b29sc2d1aS5zby41LjAuMCAv dXNyL2xvY2FsL3N3YXJtL2xpYi9saWJzaW10b29scy5sYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9s aWJzaW10b29scy5zbyAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJzaW10b29scy5zby40IC91c3Iv bG9jYWwvc3dhcm0vbGliL2xpYnNpbXRvb2xzLnNvLjQuMC4wIC91c3IvbG9jYWwvc3dhcm0vbGli L2xpYnNwYWNlLmEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlic3BhY2UubGEgL3Vzci9sb2NhbC9z d2FybS9saWIvbGlic3BhY2Uuc28gL3Vzci9sb2NhbC9zd2FybS9saWIvbGlic3BhY2Uuc28uMiAv dXNyL2xvY2FsL3N3YXJtL2xpYi9saWJzcGFjZS5zby4yLjAuMSAvdXNyL2xvY2FsL3N3YXJtL2xp Yi9saWJzd2FybS5hIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnN3YXJtLmxhIC91c3IvbG9jYWwv c3dhcm0vbGliL2xpYnN3YXJtLnNvIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnN3YXJtLnNvLjAg L3Vzci9sb2NhbC9zd2FybS9saWIvbGlic3dhcm0uc28uMC4wLjAgL3Vzci9sb2NhbC9zd2FybS9s aWIvbGlidGNsb2JqYy5hIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnRjbG9iamMubGEgL3Vzci9s b2NhbC9zd2FybS9saWIvbGlidGNsb2JqYy5zbyAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJ0Y2xv YmpjLnNvLjAgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlidGNsb2JqYy5zby4wLjEuMyAvdXNyL2xv Y2FsL3N3YXJtL2xpYi9saWJ0a29iamMuYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJ0a29iamMu bGEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlidGtvYmpjLnNvIC91c3IvbG9jYWwvc3dhcm0vbGli L2xpYnRrb2JqYy5zby41IC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnRrb2JqYy5zby41LjAuMQor IGdyZXAgX19vYmpjX2NsYXNzX25hbWVfU3dhcm1PYmplY3QKQ291bnRlci5vOiAgICAgICAgIFUg X19vYmpjX2NsYXNzX25hbWVfU3dhcm1PYmplY3QKUGVyc29uLm86ICAgICAgICAgVSBfX29iamNf Y2xhc3NfbmFtZV9Td2FybU9iamVjdAouLi4KL3Vzci9sb2NhbC9zd2FybS9saWIvbGlib2JqZWN0 YmFzZS5hOlN3YXJtT2JqZWN0Lm86MDAwMDAwMDAgUiBfX29iamNfY2xhc3NfbmFtZV9Td2FybU9i amVjdAovdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJvYmplY3RiYXNlLnNvOjAwMDFjMTAwIFIgX19v YmpjX2NsYXNzX25hbWVfU3dhcm1PYmplY3QKL3Vzci9sb2NhbC9zd2FybS9saWIvbGlib2JqZWN0 YmFzZS5zby40OjAwMDFjMTAwIFIgX19vYmpjX2NsYXNzX25hbWVfU3dhcm1PYmplY3QKL3Vzci9s b2NhbC9zd2FybS9saWIvbGlib2JqZWN0YmFzZS5zby40LjAuMDowMDAxYzEwMCBSIF9fb2JqY19j bGFzc19uYW1lX1N3YXJtT2JqZWN0Ci4uLgoKKyBlY2hvIFNlYXJjaGluZyBmb3IgR1VJU3dhcm0K U2VhcmNoaW5nIGZvciBHVUlTd2FybQorIG5tIC1vIENvdW50ZXIubyBtYWluLm8gUGVyc29uLm8g UHBsTW9kZWxTd2FybS5vIFBwbE9ic2VydmVyU3dhcm0ubyAvdXNyL2xvY2FsL2hkZjUvbGliL2xp YmhkZjUuYSAvdXNyL2xvY2FsL2hkZjUvbGliL2xpYmhkZjUubGEgL3Vzci9sb2NhbC9oZGY1L2xp Yi9saWJoZGY1LnNldHRpbmdzIC91c3IvbG9jYWwvaGRmNS9saWIvbGliaGRmNS5zbyAvdXNyL2xv Y2FsL2hkZjUvbGliL2xpYmhkZjUuc28uMCAvdXNyL2xvY2FsL2hkZjUvbGliL2xpYmhkZjUuc28u MC4wLjAgL3Vzci9sb2NhbC9zd2FybS9saWIvbGliYWN0aXZpdHkuYSAvdXNyL2xvY2FsL3N3YXJt L2xpYi9saWJhY3Rpdml0eS5sYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJhY3Rpdml0eS5zbyAv dXNyL2xvY2FsL3N3YXJtL2xpYi9saWJhY3Rpdml0eS5zby41IC91c3IvbG9jYWwvc3dhcm0vbGli L2xpYmFjdGl2aXR5LnNvLjUuMC4wIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmFuYWx5c2lzLmEg L3Vzci9sb2NhbC9zd2FybS9saWIvbGliYW5hbHlzaXMubGEgL3Vzci9sb2NhbC9zd2FybS9saWIv bGliYW5hbHlzaXMuc28gL3Vzci9sb2NhbC9zd2FybS9saWIvbGliYW5hbHlzaXMuc28uNCAvdXNy L2xvY2FsL3N3YXJtL2xpYi9saWJhbmFseXNpcy5zby40LjAuMCAvdXNyL2xvY2FsL3N3YXJtL2xp Yi9saWJjb2xsZWN0aW9ucy5hIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmNvbGxlY3Rpb25zLmxh IC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmNvbGxlY3Rpb25zLnNvIC91c3IvbG9jYWwvc3dhcm0v bGliL2xpYmNvbGxlY3Rpb25zLnNvLjMgL3Vzci9sb2NhbC9zd2FybS9saWIvbGliY29sbGVjdGlv bnMuc28uMy4wLjEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGliZGVmb2JqLmEgL3Vzci9sb2NhbC9z d2FybS9saWIvbGliZGVmb2JqLmxhIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmRlZm9iai5zbyAv dXNyL2xvY2FsL3N3YXJtL2xpYi9saWJkZWZvYmouc28uNCAvdXNyL2xvY2FsL3N3YXJtL2xpYi9s aWJkZWZvYmouc28uNC4wLjAgL3Vzci9sb2NhbC9zd2FybS9saWIvbGliamF2YXN3YXJtLmEgL3Vz ci9sb2NhbC9zd2FybS9saWIvbGliamF2YXN3YXJtLmxhIC91c3IvbG9jYWwvc3dhcm0vbGliL2xp YmphdmFzd2FybS5zbyAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJqYXZhc3dhcm0uc28uMSAvdXNy L2xvY2FsL3N3YXJtL2xpYi9saWJqYXZhc3dhcm0uc28uMS4wLjAgL3Vzci9sb2NhbC9zd2FybS9s aWIvbGliamF2YXN3YXJtc3R1YnMuYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJqYXZhc3dhcm1z dHVicy5sYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJqYXZhc3dhcm1zdHVicy5zbyAvdXNyL2xv Y2FsL3N3YXJtL2xpYi9saWJqYXZhc3dhcm1zdHVicy5zby4wIC91c3IvbG9jYWwvc3dhcm0vbGli L2xpYmphdmFzd2FybXN0dWJzLnNvLjAuMC4wIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYm1pc2Mu YSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJtaXNjLmxhIC91c3IvbG9jYWwvc3dhcm0vbGliL2xp Ym1pc2Muc28gL3Vzci9sb2NhbC9zd2FybS9saWIvbGlibWlzYy5zby4xIC91c3IvbG9jYWwvc3dh cm0vbGliL2xpYm1pc2Muc28uMS4xLjMgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlib2JqYy5hIC91 c3IvbG9jYWwvc3dhcm0vbGliL2xpYm9iamMubGEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlib2Jq Yy5zbyAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJvYmpjLnNvLjAgL3Vzci9sb2NhbC9zd2FybS9s aWIvbGlib2JqYy5zby4wLjAuMCAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJvYmplY3RiYXNlLmEg L3Vzci9sb2NhbC9zd2FybS9saWIvbGlib2JqZWN0YmFzZS5sYSAvdXNyL2xvY2FsL3N3YXJtL2xp Yi9saWJvYmplY3RiYXNlLnNvIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYm9iamVjdGJhc2Uuc28u NCAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJvYmplY3RiYXNlLnNvLjQuMC4wIC91c3IvbG9jYWwv c3dhcm0vbGliL2xpYnJhbmRvbS5hIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnJhbmRvbS5sYSAv dXNyL2xvY2FsL3N3YXJtL2xpYi9saWJyYW5kb20uc28gL3Vzci9sb2NhbC9zd2FybS9saWIvbGli cmFuZG9tLnNvLjEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlicmFuZG9tLnNvLjEuMC4wIC91c3Iv bG9jYWwvc3dhcm0vbGliL2xpYnNpbXRvb2xzLmEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlic2lt dG9vbHNndWkuYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJzaW10b29sc2d1aS5sYSAvdXNyL2xv Y2FsL3N3YXJtL2xpYi9saWJzaW10b29sc2d1aS5zbyAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJz aW10b29sc2d1aS5zby41IC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnNpbXRvb2xzZ3VpLnNvLjUu MC4wIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnNpbXRvb2xzLmxhIC91c3IvbG9jYWwvc3dhcm0v bGliL2xpYnNpbXRvb2xzLnNvIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnNpbXRvb2xzLnNvLjQg L3Vzci9sb2NhbC9zd2FybS9saWIvbGlic2ltdG9vbHMuc28uNC4wLjAgL3Vzci9sb2NhbC9zd2Fy bS9saWIvbGlic3BhY2UuYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJzcGFjZS5sYSAvdXNyL2xv Y2FsL3N3YXJtL2xpYi9saWJzcGFjZS5zbyAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJzcGFjZS5z by4yIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnNwYWNlLnNvLjIuMC4xIC91c3IvbG9jYWwvc3dh cm0vbGliL2xpYnN3YXJtLmEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlic3dhcm0ubGEgL3Vzci9s b2NhbC9zd2FybS9saWIvbGlic3dhcm0uc28gL3Vzci9sb2NhbC9zd2FybS9saWIvbGlic3dhcm0u c28uMCAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJzd2FybS5zby4wLjAuMCAvdXNyL2xvY2FsL3N3 YXJtL2xpYi9saWJ0Y2xvYmpjLmEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlidGNsb2JqYy5sYSAv dXNyL2xvY2FsL3N3YXJtL2xpYi9saWJ0Y2xvYmpjLnNvIC91c3IvbG9jYWwvc3dhcm0vbGliL2xp YnRjbG9iamMuc28uMCAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJ0Y2xvYmpjLnNvLjAuMS4zIC91 c3IvbG9jYWwvc3dhcm0vbGliL2xpYnRrb2JqYy5hIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnRr b2JqYy5sYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJ0a29iamMuc28gL3Vzci9sb2NhbC9zd2Fy bS9saWIvbGlidGtvYmpjLnNvLjUgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlidGtvYmpjLnNvLjUu MC4xCisgZ3JlcCBfX29iamNfY2xhc3NfbmFtZV9HVUlTd2FybQpQcGxPYnNlcnZlclN3YXJtLm86 ICAgICAgICAgVSBfX29iamNfY2xhc3NfbmFtZV9HVUlTd2FybQovdXNyL2xvY2FsL3N3YXJtL2xp Yi9saWJzaW10b29sc2d1aS5hOkdVSVN3YXJtLm86MDAwMDAwMjUgUiBfX29iamNfY2xhc3NfbmFt ZV9HVUlTd2FybQovdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJzaW10b29sc2d1aS5zbzowMDAxNjZl NSBSIF9fb2JqY19jbGFzc19uYW1lX0dVSVN3YXJtCi91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnNp bXRvb2xzZ3VpLnNvLjU6MDAwMTY2ZTUgUiBfX29iamNfY2xhc3NfbmFtZV9HVUlTd2FybQovdXNy L2xvY2FsL3N3YXJtL2xpYi9saWJzaW10b29sc2d1aS5zby41LjAuMDowMDAxNjZlNSBSIF9fb2Jq Y19jbGFzc19uYW1lX0dVSVN3YXJtCisgZWNobyBTZWFyY2hpbmcgZm9yIEVtcHR5UHJvYmVNYXAK U2VhcmNoaW5nIGZvciBFbXB0eVByb2JlTWFwCisgbm0gLW8gQ291bnRlci5vIG1haW4ubyBQZXJz b24ubyBQcGxNb2RlbFN3YXJtLm8gUHBsT2JzZXJ2ZXJTd2FybS5vIC91c3IvbG9jYWwvaGRmNS9s aWIvbGliaGRmNS5hIC91c3IvbG9jYWwvaGRmNS9saWIvbGliaGRmNS5sYSAvdXNyL2xvY2FsL2hk ZjUvbGliL2xpYmhkZjUuc2V0dGluZ3MgL3Vzci9sb2NhbC9oZGY1L2xpYi9saWJoZGY1LnNvIC91 c3IvbG9jYWwvaGRmNS9saWIvbGliaGRmNS5zby4wIC91c3IvbG9jYWwvaGRmNS9saWIvbGliaGRm NS5zby4wLjAuMCAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJhY3Rpdml0eS5hIC91c3IvbG9jYWwv c3dhcm0vbGliL2xpYmFjdGl2aXR5LmxhIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmFjdGl2aXR5 LnNvIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmFjdGl2aXR5LnNvLjUgL3Vzci9sb2NhbC9zd2Fy bS9saWIvbGliYWN0aXZpdHkuc28uNS4wLjAgL3Vzci9sb2NhbC9zd2FybS9saWIvbGliYW5hbHlz aXMuYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJhbmFseXNpcy5sYSAvdXNyL2xvY2FsL3N3YXJt L2xpYi9saWJhbmFseXNpcy5zbyAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJhbmFseXNpcy5zby40 IC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmFuYWx5c2lzLnNvLjQuMC4wIC91c3IvbG9jYWwvc3dh cm0vbGliL2xpYmNvbGxlY3Rpb25zLmEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGliY29sbGVjdGlv bnMubGEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGliY29sbGVjdGlvbnMuc28gL3Vzci9sb2NhbC9z d2FybS9saWIvbGliY29sbGVjdGlvbnMuc28uMyAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJjb2xs ZWN0aW9ucy5zby4zLjAuMSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJkZWZvYmouYSAvdXNyL2xv Y2FsL3N3YXJtL2xpYi9saWJkZWZvYmoubGEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGliZGVmb2Jq LnNvIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmRlZm9iai5zby40IC91c3IvbG9jYWwvc3dhcm0v bGliL2xpYmRlZm9iai5zby40LjAuMCAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJqYXZhc3dhcm0u YSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJqYXZhc3dhcm0ubGEgL3Vzci9sb2NhbC9zd2FybS9s aWIvbGliamF2YXN3YXJtLnNvIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmphdmFzd2FybS5zby4x IC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmphdmFzd2FybS5zby4xLjAuMCAvdXNyL2xvY2FsL3N3 YXJtL2xpYi9saWJqYXZhc3dhcm1zdHVicy5hIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmphdmFz d2FybXN0dWJzLmxhIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmphdmFzd2FybXN0dWJzLnNvIC91 c3IvbG9jYWwvc3dhcm0vbGliL2xpYmphdmFzd2FybXN0dWJzLnNvLjAgL3Vzci9sb2NhbC9zd2Fy bS9saWIvbGliamF2YXN3YXJtc3R1YnMuc28uMC4wLjAgL3Vzci9sb2NhbC9zd2FybS9saWIvbGli bWlzYy5hIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYm1pc2MubGEgL3Vzci9sb2NhbC9zd2FybS9s aWIvbGlibWlzYy5zbyAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJtaXNjLnNvLjEgL3Vzci9sb2Nh bC9zd2FybS9saWIvbGlibWlzYy5zby4xLjEuMyAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJvYmpj LmEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlib2JqYy5sYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9s aWJvYmpjLnNvIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYm9iamMuc28uMCAvdXNyL2xvY2FsL3N3 YXJtL2xpYi9saWJvYmpjLnNvLjAuMC4wIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYm9iamVjdGJh c2UuYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJvYmplY3RiYXNlLmxhIC91c3IvbG9jYWwvc3dh cm0vbGliL2xpYm9iamVjdGJhc2Uuc28gL3Vzci9sb2NhbC9zd2FybS9saWIvbGlib2JqZWN0YmFz ZS5zby40IC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYm9iamVjdGJhc2Uuc28uNC4wLjAgL3Vzci9s b2NhbC9zd2FybS9saWIvbGlicmFuZG9tLmEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlicmFuZG9t LmxhIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnJhbmRvbS5zbyAvdXNyL2xvY2FsL3N3YXJtL2xp Yi9saWJyYW5kb20uc28uMSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJyYW5kb20uc28uMS4wLjAg L3Vzci9sb2NhbC9zd2FybS9saWIvbGlic2ltdG9vbHMuYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9s aWJzaW10b29sc2d1aS5hIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnNpbXRvb2xzZ3VpLmxhIC91 c3IvbG9jYWwvc3dhcm0vbGliL2xpYnNpbXRvb2xzZ3VpLnNvIC91c3IvbG9jYWwvc3dhcm0vbGli L2xpYnNpbXRvb2xzZ3VpLnNvLjUgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlic2ltdG9vbHNndWku c28uNS4wLjAgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlic2ltdG9vbHMubGEgL3Vzci9sb2NhbC9z d2FybS9saWIvbGlic2ltdG9vbHMuc28gL3Vzci9sb2NhbC9zd2FybS9saWIvbGlic2ltdG9vbHMu c28uNCAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJzaW10b29scy5zby40LjAuMCAvdXNyL2xvY2Fs L3N3YXJtL2xpYi9saWJzcGFjZS5hIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnNwYWNlLmxhIC91 c3IvbG9jYWwvc3dhcm0vbGliL2xpYnNwYWNlLnNvIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnNw YWNlLnNvLjIgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlic3BhY2Uuc28uMi4wLjEgL3Vzci9sb2Nh bC9zd2FybS9saWIvbGlic3dhcm0uYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJzd2FybS5sYSAv dXNyL2xvY2FsL3N3YXJtL2xpYi9saWJzd2FybS5zbyAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJz d2FybS5zby4wIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnN3YXJtLnNvLjAuMC4wIC91c3IvbG9j YWwvc3dhcm0vbGliL2xpYnRjbG9iamMuYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJ0Y2xvYmpj LmxhIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnRjbG9iamMuc28gL3Vzci9sb2NhbC9zd2FybS9s aWIvbGlidGNsb2JqYy5zby4wIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnRjbG9iamMuc28uMC4x LjMgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlidGtvYmpjLmEgL3Vzci9sb2NhbC9zd2FybS9saWIv bGlidGtvYmpjLmxhIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnRrb2JqYy5zbyAvdXNyL2xvY2Fs L3N3YXJtL2xpYi9saWJ0a29iamMuc28uNSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJ0a29iamMu c28uNS4wLjEKKyBncmVwIF9fb2JqY19jbGFzc19uYW1lX0VtcHR5UHJvYmVNYXAKUHBsTW9kZWxT d2FybS5vOiAgICAgICAgIFUgX19vYmpjX2NsYXNzX25hbWVfRW1wdHlQcm9iZU1hcApQcGxPYnNl cnZlclN3YXJtLm86ICAgICAgICAgVSBfX29iamNfY2xhc3NfbmFtZV9FbXB0eVByb2JlTWFwCi91 c3IvbG9jYWwvc3dhcm0vbGliL2xpYm9iamVjdGJhc2UuYTpBY3Rpdml0eUNvbnRyb2wubzogICAg ICAgICBVIF9fb2JqY19jbGFzc19uYW1lX0VtcHR5UHJvYmVNYXAKL3Vzci9sb2NhbC9zd2FybS9s aWIvbGlib2JqZWN0YmFzZS5hOkVtcHR5UHJvYmVNYXAubzowMDAwMDAwMCBSIF9fb2JqY19jbGFz c19uYW1lX0VtcHR5UHJvYmVNYXAKL3Vzci9sb2NhbC9zd2FybS9saWIvbGlib2JqZWN0YmFzZS5z bzowMDAxOTJlMCBSIF9fb2JqY19jbGFzc19uYW1lX0VtcHR5UHJvYmVNYXAKL3Vzci9sb2NhbC9z d2FybS9saWIvbGlib2JqZWN0YmFzZS5zby40OjAwMDE5MmUwIFIgX19vYmpjX2NsYXNzX25hbWVf RW1wdHlQcm9iZU1hcAovdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJvYmplY3RiYXNlLnNvLjQuMC4w OjAwMDE5MmUwIFIgX19vYmpjX2NsYXNzX25hbWVfRW1wdHlQcm9iZU1hcAorIGVjaG8gU2VhcmNo aW5nIGZvciBTd2FybQpTZWFyY2hpbmcgZm9yIFN3YXJtCisgbm0gLW8gQ291bnRlci5vIG1haW4u byBQZXJzb24ubyBQcGxNb2RlbFN3YXJtLm8gUHBsT2JzZXJ2ZXJTd2FybS5vIC91c3IvbG9jYWwv aGRmNS9saWIvbGliaGRmNS5hIC91c3IvbG9jYWwvaGRmNS9saWIvbGliaGRmNS5sYSAvdXNyL2xv Y2FsL2hkZjUvbGliL2xpYmhkZjUuc2V0dGluZ3MgL3Vzci9sb2NhbC9oZGY1L2xpYi9saWJoZGY1 LnNvIC91c3IvbG9jYWwvaGRmNS9saWIvbGliaGRmNS5zby4wIC91c3IvbG9jYWwvaGRmNS9saWIv bGliaGRmNS5zby4wLjAuMCAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJhY3Rpdml0eS5hIC91c3Iv bG9jYWwvc3dhcm0vbGliL2xpYmFjdGl2aXR5LmxhIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmFj dGl2aXR5LnNvIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmFjdGl2aXR5LnNvLjUgL3Vzci9sb2Nh bC9zd2FybS9saWIvbGliYWN0aXZpdHkuc28uNS4wLjAgL3Vzci9sb2NhbC9zd2FybS9saWIvbGli YW5hbHlzaXMuYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJhbmFseXNpcy5sYSAvdXNyL2xvY2Fs L3N3YXJtL2xpYi9saWJhbmFseXNpcy5zbyAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJhbmFseXNp cy5zby40IC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmFuYWx5c2lzLnNvLjQuMC4wIC91c3IvbG9j YWwvc3dhcm0vbGliL2xpYmNvbGxlY3Rpb25zLmEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGliY29s bGVjdGlvbnMubGEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGliY29sbGVjdGlvbnMuc28gL3Vzci9s b2NhbC9zd2FybS9saWIvbGliY29sbGVjdGlvbnMuc28uMyAvdXNyL2xvY2FsL3N3YXJtL2xpYi9s aWJjb2xsZWN0aW9ucy5zby4zLjAuMSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJkZWZvYmouYSAv dXNyL2xvY2FsL3N3YXJtL2xpYi9saWJkZWZvYmoubGEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGli ZGVmb2JqLnNvIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmRlZm9iai5zby40IC91c3IvbG9jYWwv c3dhcm0vbGliL2xpYmRlZm9iai5zby40LjAuMCAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJqYXZh c3dhcm0uYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJqYXZhc3dhcm0ubGEgL3Vzci9sb2NhbC9z d2FybS9saWIvbGliamF2YXN3YXJtLnNvIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmphdmFzd2Fy bS5zby4xIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmphdmFzd2FybS5zby4xLjAuMCAvdXNyL2xv Y2FsL3N3YXJtL2xpYi9saWJqYXZhc3dhcm1zdHVicy5hIC91c3IvbG9jYWwvc3dhcm0vbGliL2xp YmphdmFzd2FybXN0dWJzLmxhIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmphdmFzd2FybXN0dWJz LnNvIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYmphdmFzd2FybXN0dWJzLnNvLjAgL3Vzci9sb2Nh bC9zd2FybS9saWIvbGliamF2YXN3YXJtc3R1YnMuc28uMC4wLjAgL3Vzci9sb2NhbC9zd2FybS9s aWIvbGlibWlzYy5hIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYm1pc2MubGEgL3Vzci9sb2NhbC9z d2FybS9saWIvbGlibWlzYy5zbyAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJtaXNjLnNvLjEgL3Vz ci9sb2NhbC9zd2FybS9saWIvbGlibWlzYy5zby4xLjEuMyAvdXNyL2xvY2FsL3N3YXJtL2xpYi9s aWJvYmpjLmEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlib2JqYy5sYSAvdXNyL2xvY2FsL3N3YXJt L2xpYi9saWJvYmpjLnNvIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYm9iamMuc28uMCAvdXNyL2xv Y2FsL3N3YXJtL2xpYi9saWJvYmpjLnNvLjAuMC4wIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYm9i amVjdGJhc2UuYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJvYmplY3RiYXNlLmxhIC91c3IvbG9j YWwvc3dhcm0vbGliL2xpYm9iamVjdGJhc2Uuc28gL3Vzci9sb2NhbC9zd2FybS9saWIvbGlib2Jq ZWN0YmFzZS5zby40IC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYm9iamVjdGJhc2Uuc28uNC4wLjAg L3Vzci9sb2NhbC9zd2FybS9saWIvbGlicmFuZG9tLmEgL3Vzci9sb2NhbC9zd2FybS9saWIvbGli cmFuZG9tLmxhIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnJhbmRvbS5zbyAvdXNyL2xvY2FsL3N3 YXJtL2xpYi9saWJyYW5kb20uc28uMSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJyYW5kb20uc28u MS4wLjAgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlic2ltdG9vbHMuYSAvdXNyL2xvY2FsL3N3YXJt L2xpYi9saWJzaW10b29sc2d1aS5hIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnNpbXRvb2xzZ3Vp LmxhIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnNpbXRvb2xzZ3VpLnNvIC91c3IvbG9jYWwvc3dh cm0vbGliL2xpYnNpbXRvb2xzZ3VpLnNvLjUgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlic2ltdG9v bHNndWkuc28uNS4wLjAgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlic2ltdG9vbHMubGEgL3Vzci9s b2NhbC9zd2FybS9saWIvbGlic2ltdG9vbHMuc28gL3Vzci9sb2NhbC9zd2FybS9saWIvbGlic2lt dG9vbHMuc28uNCAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJzaW10b29scy5zby40LjAuMCAvdXNy L2xvY2FsL3N3YXJtL2xpYi9saWJzcGFjZS5hIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnNwYWNl LmxhIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnNwYWNlLnNvIC91c3IvbG9jYWwvc3dhcm0vbGli L2xpYnNwYWNlLnNvLjIgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlic3BhY2Uuc28uMi4wLjEgL3Vz ci9sb2NhbC9zd2FybS9saWIvbGlic3dhcm0uYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJzd2Fy bS5sYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJzd2FybS5zbyAvdXNyL2xvY2FsL3N3YXJtL2xp Yi9saWJzd2FybS5zby4wIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnN3YXJtLnNvLjAuMC4wIC91 c3IvbG9jYWwvc3dhcm0vbGliL2xpYnRjbG9iamMuYSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJ0 Y2xvYmpjLmxhIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnRjbG9iamMuc28gL3Vzci9sb2NhbC9z d2FybS9saWIvbGlidGNsb2JqYy5zby4wIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnRjbG9iamMu c28uMC4xLjMgL3Vzci9sb2NhbC9zd2FybS9saWIvbGlidGtvYmpjLmEgL3Vzci9sb2NhbC9zd2Fy bS9saWIvbGlidGtvYmpjLmxhIC91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnRrb2JqYy5zbyAvdXNy L2xvY2FsL3N3YXJtL2xpYi9saWJ0a29iamMuc28uNSAvdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJ0 a29iamMuc28uNS4wLjEKKyBncmVwIF9fb2JqY19jbGFzc19uYW1lX1N3YXJtCkNvdW50ZXIubzog ICAgICAgICBVIF9fb2JqY19jbGFzc19uYW1lX1N3YXJtT2JqZWN0ClBlcnNvbi5vOiAgICAgICAg IFUgX19vYmpjX2NsYXNzX25hbWVfU3dhcm1PYmplY3QKUHBsTW9kZWxTd2FybS5vOiAgICAgICAg IFUgX19vYmpjX2NsYXNzX25hbWVfU3dhcm0KL3Vzci9sb2NhbC9zd2FybS9saWIvbGliYWN0aXZp dHkuYTpTd2FybVByb2Nlc3MubzowMDAwMDcxNSBSIF9fb2JqY19jbGFzc19uYW1lX1N3YXJtQWN0 aXZpdHlfYwovdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJhY3Rpdml0eS5hOmFjdGl2aXR5Lm86ICAg ICAgICAgVSBfX29iamNfY2xhc3NfbmFtZV9Td2FybUFjdGl2aXR5X2MKL3Vzci9sb2NhbC9zd2Fy bS9saWIvbGliYWN0aXZpdHkuc286MDAwMWU5ZDUgUiBfX29iamNfY2xhc3NfbmFtZV9Td2FybUFj dGl2aXR5X2MKL3Vzci9sb2NhbC9zd2FybS9saWIvbGliYWN0aXZpdHkuc28uNTowMDAxZTlkNSBS IF9fb2JqY19jbGFzc19uYW1lX1N3YXJtQWN0aXZpdHlfYwoKMjAwMS0wOC0yNCAwMjo1MiAgICAg ICAgICAgICAgICAgICAgYnVnc291dCAgICAgICAgICAgICAgICAgICAgUGFnZSAgICAyCgoKL3Vz ci9sb2NhbC9zd2FybS9saWIvbGliYWN0aXZpdHkuc28uNS4wLjA6MDAwMWU5ZDUgUiBfX29iamNf Y2xhc3NfbmFtZV9Td2FybUFjdGl2aXR5X2MKLi4uCi91c3IvbG9jYWwvc3dhcm0vbGliL2xpYm9i amVjdGJhc2UuYTpTd2FybS5vOjAwMDAwMDAwIFIgX19vYmpjX2NsYXNzX25hbWVfU3dhcm0KL3Vz ci9sb2NhbC9zd2FybS9saWIvbGlib2JqZWN0YmFzZS5hOlN3YXJtT2JqZWN0Lm86MDAwMDAwMDAg UiBfX29iamNfY2xhc3NfbmFtZV9Td2FybU9iamVjdAovdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJv YmplY3RiYXNlLnNvOjAwMDFiYmMwIFIgX19vYmpjX2NsYXNzX25hbWVfU3dhcm0KL3Vzci9sb2Nh bC9zd2FybS9saWIvbGlib2JqZWN0YmFzZS5zbzowMDAxYzEwMCBSIF9fb2JqY19jbGFzc19uYW1l X1N3YXJtT2JqZWN0Ci91c3IvbG9jYWwvc3dhcm0vbGliL2xpYm9iamVjdGJhc2Uuc28uNDowMDAx YmJjMCBSIF9fb2JqY19jbGFzc19uYW1lX1N3YXJtCi91c3IvbG9jYWwvc3dhcm0vbGliL2xpYm9i amVjdGJhc2Uuc28uNDowMDAxYzEwMCBSIF9fb2JqY19jbGFzc19uYW1lX1N3YXJtT2JqZWN0Ci91 c3IvbG9jYWwvc3dhcm0vbGliL2xpYm9iamVjdGJhc2Uuc28uNC4wLjA6MDAwMWJiYzAgUiBfX29i amNfY2xhc3NfbmFtZV9Td2FybQovdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJvYmplY3RiYXNlLnNv LjQuMC4wOjAwMDFjMTAwIFIgX19vYmpjX2NsYXNzX25hbWVfU3dhcm1PYmplY3QKLi4uCi91c3Iv bG9jYWwvc3dhcm0vbGliL2xpYnNwYWNlLnNvLjIuMC4xOiAgICAgICAgIFUgX19vYmpjX2NsYXNz X25hbWVfU3dhcm1PYmplY3QKL3Vzci9sb2NhbC9zd2FybS9saWIvbGlic3dhcm0uYTpTd2FybUVu dmlyb25tZW50Lm86MDAwMDAwNGUgUiBfX29iamNfY2xhc3NfbmFtZV9Td2FybUVudmlyb25tZW50 Ci91c3IvbG9jYWwvc3dhcm0vbGliL2xpYnN3YXJtLnNvOjAwMDAzMzBlIFIgX19vYmpjX2NsYXNz X25hbWVfU3dhcm1FbnZpcm9ubWVudAovdXNyL2xvY2FsL3N3YXJtL2xpYi9saWJzd2FybS5zby4w OjAwMDAzMzBlIFIgX19vYmpjX2NsYXNzX25hbWVfU3dhcm1FbnZpcm9ubWVudAouc28uMC4wLjA6 MDAwMDMzMGUgUiBfX29iamNfY2xhc3NfbmFtZV9Td2FybUVudmlyb25tZW50CgoyMDAxLTA4LTI0 IDAwOjU0ICAgICAgICAgICAgICAgICAgIHRlc3RtYWtlICAgICAgICAgICAgICAgICAgICBQYWdl ICAgIDEKCgojIS9iaW4vYmFzaCAtdngKcm0gLWZyICoubyAqLm1pICoucwptYWtlIFNXQVJNSE9N RT0vdXNyL2xvY2FsL3N3YXJtIEVYVFJBTERGTEFHUz0iLXJwYXRoIC91c3IvbG9jYWwvZ2NjMy9s aWIiCmZvciB4IGluIFN3YXJtT2JqZWN0IEdVSVN3YXJtIEVtcHR5UHJvYmVNYXAgU3dhcm0KZG8g ZWNobyBTZWFyY2hpbmcgZm9yICR4Cm5tIC1vICoubyB8IGdyZXAgX19vYmpjX2NsYXNzX25hbWVf IiR4Igpkb25lCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1p ICAgICAgICAgICAgICAgICAgIFBhZ2UgICAgMQoKCiMgNiAiQ291bnRlci5tIgojIDEgIkNvdW50 ZXIuaCIgMQoKCgoKCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2UvU3dh cm1PYmplY3QuaCIgMQojIDkgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmplY3RiYXNlL1N3 YXJtT2JqZWN0LmgiCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9DcmVhdGUu aCIgMQojIDEyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0NyZWF0ZS5oIgojIDEg Ii91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmovQ3VzdG9taXplLmgiIDEKIyAxMiAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9DdXN0b21pemUuaCIKIyAxICIvdXNyL2xvY2Fs L3N3YXJtL2luY2x1ZGUvZGVmb2JqL0RlZkNsYXNzLmgiIDEKIyAxMiAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL2RlZm9iai9EZWZDbGFzcy5oIgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9vYmpjL09iamVjdC5oIiAxCiMgMzAgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL09i amVjdC5oIgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMuaCIgMQojIDM0 ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLmgiCiMgMSAiL3Vzci9sb2NhbC9n Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkZGVmLmgi IDEgMwojIDE0NyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMC4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwojIDE5OSAi L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1 ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDI4NyAiL3Vzci9s b2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3Rk ZGVmLmgiIDMKdHlwZWRlZiBsb25nIGludCB3Y2hhcl90OwojIDM1ICIvdXNyL2xvY2FsL3N3YXJt L2luY2x1ZGUvb2JqYy9vYmpjLmgiIDIKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBCT09M OwojIDUxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLmgiCnR5cGVkZWYgY29u c3Qgc3RydWN0IG9iamNfc2VsZWN0b3IKewogIHZvaWQgKnNlbF9pZDsKICBjb25zdCBjaGFyICpz ZWxfdHlwZXM7Cn0gKlNFTDsKCmlubGluZSBzdGF0aWMgQk9PTApzZWxfZXEgKFNFTCBzMSwgU0VM IHMyKQp7CiAgaWYgKHMxID09IDAgfHwgczIgPT0gMCkKICAgIHJldHVybiBzMSA9PSBzMjsKICBl bHNlCiAgICByZXR1cm4gczEtPnNlbF9pZCA9PSBzMi0+c2VsX2lkOwp9CgoKCgoKdHlwZWRlZiBz dHJ1Y3Qgb2JqY19vYmplY3QgewoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAg ICAgIENvdW50ZXIubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgICAyCgoKICBzdHJ1Y3Qgb2Jq Y19jbGFzcyogY2xhc3NfcG9pbnRlcjsKfSAqaWQ7CgoKCgoKdHlwZWRlZiBpZCAoKklNUCkoaWQs IFNFTCwgLi4uKTsKCgoKCgoKdHlwZWRlZiBjaGFyICpTVFI7CiMgOTcgIi91c3IvbG9jYWwvc3dh cm0vaW5jbHVkZS9vYmpjL29iamMuaCIKdHlwZWRlZiBzdHJ1Y3Qgb2JqY19jbGFzcyAqTWV0YUNs YXNzOwp0eXBlZGVmIHN0cnVjdCBvYmpjX2NsYXNzICpDbGFzczsKc3RydWN0IG9iamNfY2xhc3Mg ewogIE1ldGFDbGFzcyBjbGFzc19wb2ludGVyOwoKICBzdHJ1Y3Qgb2JqY19jbGFzcyogc3VwZXJf Y2xhc3M7CgoKICBjb25zdCBjaGFyKiBuYW1lOwogIGxvbmcgdmVyc2lvbjsKICB1bnNpZ25lZCBs b25nIGluZm87CgogIGxvbmcgaW5zdGFuY2Vfc2l6ZTsKCgoKICBzdHJ1Y3Qgb2JqY19pdmFyX2xp c3QqIGl2YXJzOwoKCgoKCgogIHN0cnVjdCBvYmpjX21ldGhvZF9saXN0KiBtZXRob2RzOwoKCiAg c3RydWN0IHNhcnJheSAqIGR0YWJsZTsKCiAgc3RydWN0IG9iamNfY2xhc3MqIHN1YmNsYXNzX2xp c3Q7CiAgc3RydWN0IG9iamNfY2xhc3MqIHNpYmxpbmdfY2xhc3M7CgogIHN0cnVjdCBvYmpjX3By b3RvY29sX2xpc3QgKnByb3RvY29sczsKICB2b2lkKiBnY19vYmplY3RfdHlwZTsKfTsKIyAxNDEg Ii91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMuaCIKQGNsYXNzIFByb3RvY29sOwoK CnR5cGVkZWYgdm9pZCogcmV0dmFsX3Q7CnR5cGVkZWYgdm9pZCgqYXBwbHlfdCkodm9pZCk7CgoK CgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgQ291bnRlci5taSAgICAgICAg ICAgICAgICAgICBQYWdlICAgIDMKCgp0eXBlZGVmIHVuaW9uIHsKICBjaGFyICphcmdfcHRyOwog IGNoYXIgYXJnX3JlZ3Nbc2l6ZW9mIChjaGFyKildOwp9ICphcmdsaXN0X3Q7CgoKSU1QIG9iamNf bXNnX2xvb2t1cCAoaWQgcmVjZWl2ZXIsIFNFTCBvcCk7CiMgMzEgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9vYmpjL09iamVjdC5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29i amMvdHlwZWRzdHJlYW0uaCIgMQojIDMwICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy90 eXBlZHN0cmVhbS5oIgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMuaCIg MQojIDMxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy90eXBlZHN0cmVhbS5oIiAyCiMg MSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvaGFzaC5oIiAxCiMgMzEgIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9vYmpjL2hhc2guaCIKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzIg Ii91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL2hhc2guaCIgMgojIDEgIi91c3IvbG9jYWwv c3dhcm0vaW5jbHVkZS9vYmpjL29iamMuaCIgMQojIDMzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1 ZGUvb2JqYy9oYXNoLmgiIDIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9leHRl cm52YXIuaCIgMQojIDM0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9oYXNoLmgiIDIK IyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3RyaW5n LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjgzICIvdXNyL2luY2x1 ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjg0 ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzExICIvdXNyL2luY2x1ZGUvZmVhdHVy ZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCiMgMzEyICIvdXNyL2lu Y2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoK CgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu MC4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIg MwoKCgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19u KSA7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpf X3NyYywgc2l6ZV90IF9fbikKICAgICAgICAgICAgOwoKCgoKCmV4dGVybiB2b2lkICptZW1jY3B5 ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3Jj LAogICAgICAgICAgICAgICAgICAgICAgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgICAgICAg OwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1pICAg ICAgICAgICAgICAgICAgIFBhZ2UgICAgNAoKCgoKCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQg Kl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0 IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICAgICAgICAg IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1jaHIgKF9fY29u c3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICAgICAgICAgIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHZvaWQgKnJhd21lbWNociAoX19jb25zdCB2 b2lkICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2 b2lkICptZW1yY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAg ICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpz dHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19zcmMpCiAgICAgICAgICAgIDsKCmV4dGVybiBjaGFyICpzdHJuY3B5IChjaGFyICpfX3Jlc3Ry aWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX3NyYywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVz dHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgICAgICAg IDsKCmV4dGVybiBjaGFyICpzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f bikgOwoKCmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hh ciAqX19zMikKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJu IGludCBzdHJuY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6 ZV90IF9fbikKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy biBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAg ICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3Ry eGZybSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKCgoKCgoKCgoKCjIw MDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAgICAgICAgICAg ICAgIFBhZ2UgICAgNQoKCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMjggIi91 c3IvaW5jbHVkZS94bG9jYWxlLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX19sb2NhbGVfc3RydWN0CnsK CiAgc3RydWN0IGxvY2FsZV9kYXRhICpfX2xvY2FsZXNbMTNdOwoKCiAgY29uc3QgdW5zaWduZWQg c2hvcnQgaW50ICpfX2N0eXBlX2I7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7CiAgY29u c3QgaW50ICpfX2N0eXBlX3RvdXBwZXI7Cn0gKl9fbG9jYWxlX3Q7CiMgMTA5ICIvdXNyL2luY2x1 ZGUvc3RyaW5nLmgiIDIgMwoKCmV4dGVybiBpbnQgX19zdHJjb2xsX2wgKF9fY29uc3QgY2hhciAq X19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBfX2xvY2FsZV90IF9fbCkKICAgICAgICAgICAgIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBfX3N0cnhmcm1fbCAoY2hh ciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3QgX19uLAogICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbCkgOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmR1cCAo X19jb25zdCBjaGFyICpfX3MpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKCmV4 dGVybiBjaGFyICpzdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQog ICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxNTUgIi91c3IvaW5j bHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywg aW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycmNo ciAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51bCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2Mp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChf X2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkKICAgICAgICAgICAgIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0 IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICAgICAgICAgIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAq X19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgIENv dW50ZXIubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgICA2CgoKZXh0ZXJuIGNoYXIgKnN0cnN0 ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAg ICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJj YXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUp CiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIg KnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2RlbGltKQogICAgICAgICAgICA7CgoKCmV4dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpf X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp Y3QgX19zYXZlX3B0cikgOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0 IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgOwoKCgoKCgpleHRlcm4gdm9pZCAq bWVtbWVtIChfX2NvbnN0IHZvaWQgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrbGVuLAog ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fbmVlZGxlLCBzaXplX3QgX19uZWVk bGVsZW4pCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJu IHZvaWQgKl9fbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwpl eHRlcm4gdm9pZCAqbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsK CgoKCmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4gKF9fY29uc3QgY2hhciAq X19zdHJpbmcsIHNpemVfdCBfX21heGxlbikKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIDsKCgoK CgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAg ICAgICAgICAgICAgIFBhZ2UgICAgNwoKCmV4dGVybiBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19l cnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIDsKCgoKCmV4dGVybiB2b2lkIF9f Ynplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19j b25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIHZv aWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgYmNtcCAoX19j b25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgICAg ICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqaW5kZXggKF9f Y29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpl eHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgZmZzIChpbnQgX19pKSBfX2F0dHJpYnV0 ZV9fICgoY29uc3QpKTsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19sKSBfX2F0dHJp YnV0ZV9fICgoY29uc3QpKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBs b25nIGludCBfX2xsKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CgoKCgpl eHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpf X3MyKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGlu dCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNp emVfdCBfX24pCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpl eHRlcm4gaW50IF9fc3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hh ciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IF9fc3RybmNhc2VjbXBfbCAoX19j b25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgICAgICAgICAgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAg ICAgICAgQ291bnRlci5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgIDgKCgoKCgoKCmV4dGVy biBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwKICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIDsKCgoKCmV4dGVybiBp bnQgc3RydmVyc2NtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAg ICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqc3Ry c2lnbmFsIChpbnQgX19zaWcpIDsKCgpleHRlcm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9fcmVz dHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgICAgICAg IDsKZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICAgICAgICAgOwoKCgpleHRlcm4gY2hhciAqX19z dHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CmV4dGVybiBjaGFy ICpzdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBj aGFyICpzdHJmcnkgKGNoYXIgKl9fc3RyaW5nKSA7CgoKZXh0ZXJuIHZvaWQgKm1lbWZyb2IgKHZv aWQgKl9fcywgc2l6ZV90IF9fbikgOwoKCgoKCgpleHRlcm4gY2hhciAqYmFzZW5hbWUgKF9fY29u c3QgY2hhciAqX19maWxlbmFtZSkgOwojIDM1NiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nLmgiIDEgMwojIDM1NyAiL3Vzci9pbmNsdWRlL3N0 cmluZy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMSAzCiMgNTIg Ii91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4u aCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9m ZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKIyAzNyAiL3Vz ci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZW5kaWFuLmgiIDEg MwojIDM4ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwoKCgoKCgoKMjAwMS0wOC0yNCAwMToy MSAgICAgICAgICAgICAgICAgIENvdW50ZXIubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgICA5 CgoKIyA1MyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAyIDMKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMv dHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9i aXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRl ZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7 CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1 bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBs b25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAz CnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3Vp bnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWdu ZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5 cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2ln bmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWdu ZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90 OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVkZWYgX191X2ludCBfX3VpZF90Owp0 eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190Owp0eXBlZGVm IF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7CnR5cGVkZWYgbG9u ZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBpbnQgX19w aWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVmIF9fdV9sb25nIF9fcmxpbV90Owp0 eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5 cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRl ZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGlu dCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxv bmcgaW50IF9fc3VzZWNvbmRzX3Q7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAg ICAgICAgQ291bnRlci5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgMTAKCgp0eXBlZGVmIGxv bmcgaW50IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYg aW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgoKCgoKdHlwZWRlZiBp bnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoK dHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtj bnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBf X2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVm IF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90 OwoKCnR5cGVkZWYgX191X3F1YWRfdCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29m ZjY0X3Q7CgoKdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQg bG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVk ZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90OwoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAg ICAgICAgICAgICAgICAgIENvdW50ZXIubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDExCgoK CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDEgMwojIDIzICIvdXNyL2lu Y2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVk LmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBfX3NjaGVk X3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNs dWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDIgMwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7 CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAgaW50IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0 cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYg c3RydWN0IF9fcHRocmVhZF9hdHRyX3MKewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3Nj aGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19p bmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBf X3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXpl Owp9IHB0aHJlYWRfYXR0cl90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9wdGhyZWFk X2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0aHJl YWRfY29uZF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9j b25kYXR0cl90OwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgQ291 bnRlci5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgMTIKCgp0eXBlZGVmIHVuc2lnbmVkIGlu dCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVk OwogIGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21f a2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRl eF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0 ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1 Y3QgX3B0aHJlYWRfcndsb2NrX3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xv Y2s7CiAgaW50IF9fcndfcmVhZGVyczsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBf cHRocmVhZF9kZXNjciBfX3J3X3JlYWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dy aXRlX3dhaXRpbmc7CiAgaW50IF9fcndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJl YWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQg X19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBp bnQgcHRocmVhZF9zcGlubG9ja190OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJl YWRfZmFzdGxvY2sgX19iYV9sb2NrOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAg ICAgICAgIENvdW50ZXIubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDEzCgoKICBpbnQgX19i YV9yZXF1aXJlZDsKICBpbnQgX19iYV9wcmVzZW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fYmFfd2Fp dGluZzsKfSBwdGhyZWFkX2JhcnJpZXJfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50IF9fcHNo YXJlZDsKfSBwdGhyZWFkX2JhcnJpZXJhdHRyX3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25n IGludCBwdGhyZWFkX3Q7CiMgMTQ0ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyA1 NCAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAyIDMKIyAyMTcgIi91c3IvaW5jbHVkZS9i aXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgdm9pZCAqX19tZW1wY3B5X3NtYWxsICh2 b2lkICosIGNoYXIsIGNoYXIsIGNoYXIsIGNoYXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fdWludDE2X3QsIF9fdWludDE2X3QsIF9fdWludDMyX3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdWludDMyX3QsIHNpemVfdCk7CmV4dGVy biBfX2lubGluZSB2b2lkICoKX19tZW1wY3B5X3NtYWxsICh2b2lkICpfX2Rlc3QxLAogICAgICAg ICAgICAgICAgIGNoYXIgX19zcmMwXzEsIGNoYXIgX19zcmMyXzEsIGNoYXIgX19zcmM0XzEsIGNo YXIgX19zcmM2XzEsCiAgICAgICAgICAgICAgICAgX191aW50MTZfdCBfX3NyYzBfMiwgX191aW50 MTZfdCBfX3NyYzRfMiwKICAgICAgICAgICAgICAgICBfX3VpbnQzMl90IF9fc3JjMF80LCBfX3Vp bnQzMl90IF9fc3JjNF80LAogICAgICAgICAgICAgICAgIHNpemVfdCBfX3NyY2xlbikKewogIHVu aW9uIHsKICAgIF9fdWludDMyX3QgX191aTsKICAgIF9fdWludDE2X3QgX191c2k7CiAgICB1bnNp Z25lZCBjaGFyIF9fdWM7CiAgICB1bnNpZ25lZCBjaGFyIF9fYzsKICB9ICpfX3UgPSBfX2Rlc3Qx OwogIHN3aXRjaCAoKHVuc2lnbmVkIGludCkgX19zcmNsZW4pCiAgICB7CiAgICBjYXNlIDE6CiAg ICAgIF9fdS0+X19jID0gX19zcmMwXzE7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lk ICopIF9fdSArIDEpOwogICAgICBicmVhazsKICAgIGNhc2UgMjoKICAgICAgX191LT5fX3VzaSA9 IF9fc3JjMF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAyKTsK ICAgICAgYnJlYWs7CiAgICBjYXNlIDM6CiAgICAgIF9fdS0+X191c2kgPSBfX3NyYzBfMjsKICAg ICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMik7CiAgICAgIF9fdS0+X19j ID0gX19zcmMyXzE7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDEp OwogICAgICBicmVhazsKICAgIGNhc2UgNDoKICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAg ICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOwogICAgICBicmVhazsK ICAgIGNhc2UgNToKICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CgoKCgoKCgoyMDAxLTA4LTI0 IDAxOjIxICAgICAgICAgICAgICAgICAgQ291bnRlci5taSAgICAgICAgICAgICAgICAgICBQYWdl ICAgMTQKCgogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKICAg ICAgX191LT5fX2MgPSBfX3NyYzRfMTsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQg KikgX191ICsgMSk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA2OgogICAgICBfX3UtPl9fdWkgPSBf X3NyYzBfNDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CiAg ICAgIF9fdS0+X191c2kgPSBfX3NyYzRfMjsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZv aWQgKikgX191ICsgMik7CiAgICAgIGJyZWFrOwogICAgY2FzZSA3OgogICAgICBfX3UtPl9fdWkg PSBfX3NyYzBfNDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7 CiAgICAgIF9fdS0+X191c2kgPSBfX3NyYzRfMjsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAo KHZvaWQgKikgX191ICsgMik7CiAgICAgIF9fdS0+X19jID0gX19zcmM2XzE7CiAgICAgIF9fdSA9 IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDEpOwogICAgICBicmVhazsKICAgIGNhc2Ug ODoKICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18g KCh2b2lkICopIF9fdSArIDQpOwogICAgICBfX3UtPl9fdWkgPSBfX3NyYzRfNDsKICAgICAgX191 ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CiAgICAgIGJyZWFrOwogICAgfQog IHJldHVybiAodm9pZCAqKSBfX3U7Cn0KIyAzNzEgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIu aCIgMwpleHRlcm4gdm9pZCAqX19yYXdtZW1jaHIgKGNvbnN0IHZvaWQgKl9fcywgaW50IF9fYyk7 CiMgMzk1ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIGNo YXIgKl9fc3RyY3B5X3NtYWxsIChjaGFyICosIF9fdWludDE2X3QsIF9fdWludDE2X3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191aW50MzJfdCwgX191aW50MzJfdCwg c2l6ZV90KTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cmNweV9zbWFsbCAoY2hhciAqX19k ZXN0LAogICAgICAgICAgICAgICAgX191aW50MTZfdCBfX3NyYzBfMiwgX191aW50MTZfdCBfX3Ny YzRfMiwKICAgICAgICAgICAgICAgIF9fdWludDMyX3QgX19zcmMwXzQsIF9fdWludDMyX3QgX19z cmM0XzQsCiAgICAgICAgICAgICAgICBzaXplX3QgX19zcmNsZW4pCnsKICB1bmlvbiB7CiAgICBf X3VpbnQzMl90IF9fdWk7CiAgICBfX3VpbnQxNl90IF9fdXNpOwogICAgdW5zaWduZWQgY2hhciBf X3VjOwogIH0gKl9fdSA9ICh2b2lkICopIF9fZGVzdDsKICBzd2l0Y2ggKCh1bnNpZ25lZCBpbnQp IF9fc3JjbGVuKQogICAgewogICAgY2FzZSAxOgogICAgICBfX3UtPl9fdWMgPSAnXDAnOwogICAg ICBicmVhazsKICAgIGNhc2UgMjoKICAgICAgX191LT5fX3VzaSA9IF9fc3JjMF8yOwogICAgICBi cmVhazsKICAgIGNhc2UgMzoKICAgICAgX191LT5fX3VzaSA9IF9fc3JjMF8yOwogICAgICBfX3Ug PSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAyKTsKICAgICAgX191LT5fX3VjID0gJ1ww JzsKICAgICAgYnJlYWs7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAg Q291bnRlci5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgMTUKCgogICAgY2FzZSA0OgogICAg ICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgYnJlYWs7CiAgICBjYXNlIDU6CiAgICAgIF9f dS0+X191aSA9IF9fc3JjMF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBf X3UgKyA0KTsKICAgICAgX191LT5fX3VjID0gJ1wwJzsKICAgICAgYnJlYWs7CiAgICBjYXNlIDY6 CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgo dm9pZCAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX3VzaSA9IF9fc3JjNF8yOwogICAgICBicmVh azsKICAgIGNhc2UgNzoKICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9IF9f ZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOwogICAgICBfX3UtPl9fdXNpID0gX19zcmM0 XzI7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOwogICAgICBf X3UtPl9fdWMgPSAnXDAnOwogICAgICBicmVhazsKICAgIGNhc2UgODoKICAgICAgX191LT5fX3Vp ID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQp OwogICAgICBfX3UtPl9fdWkgPSBfX3NyYzRfNDsKICAgICAgYnJlYWs7CiAgICB9CiAgcmV0dXJu IF9fZGVzdDsKfQojIDU1NCAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBf X2lubGluZSBjaGFyICpfX3N0cGNweV9zbWFsbCAoY2hhciAqLCBfX3VpbnQxNl90LCBfX3VpbnQx Nl90LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdWludDMyX3QsIF9f dWludDMyX3QsIHNpemVfdCk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHBjcHlfc21hbGwg KGNoYXIgKl9fZGVzdCwKICAgICAgICAgICAgICAgIF9fdWludDE2X3QgX19zcmMwXzIsIF9fdWlu dDE2X3QgX19zcmM0XzIsCiAgICAgICAgICAgICAgICBfX3VpbnQzMl90IF9fc3JjMF80LCBfX3Vp bnQzMl90IF9fc3JjNF80LAogICAgICAgICAgICAgICAgc2l6ZV90IF9fc3JjbGVuKQp7CiAgdW5p b24gewogICAgdW5zaWduZWQgaW50IF9fdWk7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX191c2k7 CiAgICB1bnNpZ25lZCBjaGFyIF9fdWM7CiAgICBjaGFyIF9fYzsKICB9ICpfX3UgPSAodm9pZCAq KSBfX2Rlc3Q7CiAgc3dpdGNoICgodW5zaWduZWQgaW50KSBfX3NyY2xlbikKICAgIHsKICAgIGNh c2UgMToKICAgICAgX191LT5fX3VjID0gJ1wwJzsKICAgICAgYnJlYWs7CiAgICBjYXNlIDI6CiAg ICAgIF9fdS0+X191c2kgPSBfX3NyYzBfMjsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZv aWQgKikgX191ICsgMSk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAzOgogICAgICBfX3UtPl9fdXNp ID0gX19zcmMwXzI7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIp OwogICAgICBfX3UtPl9fdWMgPSAnXDAnOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAg ICAgICAgICAgIENvdW50ZXIubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDE2CgoKICAgICAg YnJlYWs7CiAgICBjYXNlIDQ6CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAgICBfX3Ug PSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAzKTsKICAgICAgYnJlYWs7CiAgICBjYXNl IDU6CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9f ICgodm9pZCAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX3VjID0gJ1wwJzsKICAgICAgYnJlYWs7 CiAgICBjYXNlIDY6CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAgICBfX3UgPSBfX2V4 dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX3VzaSA9IF9fc3JjNF8y OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAxKTsKICAgICAgYnJl YWs7CiAgICBjYXNlIDc6CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAgICBfX3UgPSBf X2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX3VzaSA9IF9fc3Jj NF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAyKTsKICAgICAg X191LT5fX3VjID0gJ1wwJzsKICAgICAgYnJlYWs7CiAgICBjYXNlIDg6CiAgICAgIF9fdS0+X191 aSA9IF9fc3JjMF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0 KTsKICAgICAgX191LT5fX3VpID0gX19zcmM0XzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18g KCh2b2lkICopIF9fdSArIDMpOwogICAgICBicmVhazsKICAgIH0KICByZXR1cm4gJl9fdS0+X19j Owp9CiMgODczICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5l IHNpemVfdCBfX3N0cmNzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fcmVqZWN0KTsK ZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cmNzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBj aGFyIF9fcmVqZWN0KQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKICB3aGlsZSAo X19zW19fcmVzdWx0XSAhPSAnXDAnICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QpCiAgICAr K19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBf X3N0cmNzcG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fcmVqZWN0MSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19yZWplY3QyKTsKZXh0ZXJuIF9faW5s aW5lIHNpemVfdApfX3N0cmNzcG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fcmVqZWN0 MSwgY2hhciBfX3JlamVjdDIpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwogIHdo aWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDEK ICAgICAgICAgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDIpCiAgICArK19fcmVzdWx0Owog IHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cmNzcG5fYzMg KF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fcmVqZWN0MSwKCgoKCgoKCjIwMDEtMDgtMjQgMDE6 MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICAx NwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fcmVqZWN0Miwg Y2hhciBfX3JlamVjdDMpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMyAoX19j b25zdCBjaGFyICpfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MiwKICAgICAgICAg ICAgICBjaGFyIF9fcmVqZWN0MykKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CiAg d2hpbGUgKF9fc1tfX3Jlc3VsdF0gIT0gJ1wwJyAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0 MQogICAgICAgICAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MiAmJiBfX3NbX19yZXN1bHRd ICE9IF9fcmVqZWN0MykKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CiMgOTI4 ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBf X3N0cnNwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19hY2NlcHQpOwpleHRlcm4gX19p bmxpbmUgc2l6ZV90Cl9fc3Ryc3BuX2MxIChfX2NvbnN0IGNoYXIgKl9fcywgY2hhciBfX2FjY2Vw dCkKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CgogIHdoaWxlIChfX3NbX19yZXN1 bHRdID09IF9fYWNjZXB0KQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4 dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJzcG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBjaGFy IF9fYWNjZXB0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfX2Fj Y2VwdDIpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3Ryc3BuX2MyIChfX2NvbnN0IGNoYXIg Kl9fcywgY2hhciBfX2FjY2VwdDEsIGNoYXIgX19hY2NlcHQyKQp7CiAgcmVnaXN0ZXIgc2l6ZV90 IF9fcmVzdWx0ID0gMDsKCiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQxIHx8IF9f c1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQyKQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1 bHQ7Cn0KCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJzcG5fYzMgKF9fY29uc3QgY2hhciAq X19zLCBjaGFyIF9fYWNjZXB0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciBfX2FjY2VwdDIsIGNoYXIgX19hY2NlcHQzKTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApf X3N0cnNwbl9jMyAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19hY2NlcHQxLCBjaGFyIF9fYWNj ZXB0MiwgY2hhciBfX2FjY2VwdDMpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwoK ICB3aGlsZSAoX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDEgfHwgX19zW19fcmVzdWx0XSA9PSBf X2FjY2VwdDIKICAgICAgICAgfHwgX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDMpCiAgICArK19f cmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQojIDk4MyAiL3Vzci9pbmNsdWRlL2JpdHMvc3Ry aW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnBicmtfYzIgKF9fY29uc3QgY2hh ciAqX19zLCBpbnQgX19hY2NlcHQxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IF9fYWNjZXB0Mik7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJwYnJrX2MyIChf X2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwgaW50IF9fYWNjZXB0MikKewoKICB3aGls ZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0gX19hY2NlcHQxICYmICpfX3MgIT0gX19hY2NlcHQy KQogICAgKytfX3M7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgQ291 bnRlci5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgMTgKCgogIHJldHVybiAqX19zID09ICdc MCcgPyAoKHZvaWQgKikwKSA6IChjaGFyICopIChzaXplX3QpIF9fczsKfQoKZXh0ZXJuIF9faW5s aW5lIGNoYXIgKl9fc3RycGJya19jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19hY2NlcHQyLCBpbnQg X19hY2NlcHQzKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnBicmtfYzMgKF9fY29uc3Qg Y2hhciAqX19zLCBpbnQgX19hY2NlcHQxLCBpbnQgX19hY2NlcHQyLAogICAgICAgICAgICAgIGlu dCBfX2FjY2VwdDMpCnsKCiAgd2hpbGUgKCpfX3MgIT0gJ1wwJyAmJiAqX19zICE9IF9fYWNjZXB0 MSAmJiAqX19zICE9IF9fYWNjZXB0MgogICAgICAgICAmJiAqX19zICE9IF9fYWNjZXB0MykKICAg ICsrX19zOwogIHJldHVybiAqX19zID09ICdcMCcgPyAoKHZvaWQgKikwKSA6IChjaGFyICopIChz aXplX3QpIF9fczsKfQojIDEwMjYgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRl cm4gX19pbmxpbmUgc2l6ZV90CnN0cm5sZW4gKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVf dCBfX21heGxlbikKewogIF9fY29uc3QgY2hhciAqX19lbmQgPSAoX19jb25zdCBjaGFyICopIG1l bWNociAoX19zdHJpbmcsICdcMCcsIF9fbWF4bGVuKTsKICByZXR1cm4gX19lbmQgPyAoc2l6ZV90 KSAoX19lbmQgLSBfX3N0cmluZykgOiBfX21heGxlbjsKfQojIDEwNDUgIi91c3IvaW5jbHVkZS9i aXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJ0b2tfcl8xYyAoY2hh ciAqX19zLCBjaGFyIF9fc2VwLCBjaGFyICoqX19uZXh0cCk7CmV4dGVybiBfX2lubGluZSBjaGFy ICoKX19zdHJ0b2tfcl8xYyAoY2hhciAqX19zLCBjaGFyIF9fc2VwLCBjaGFyICoqX19uZXh0cCkK ewogIGNoYXIgKl9fcmVzdWx0OwogIGlmIChfX3MgPT0gKCh2b2lkICopMCkpCiAgICBfX3MgPSAq X19uZXh0cDsKICB3aGlsZSAoKl9fcyA9PSBfX3NlcCkKICAgICsrX19zOwogIGlmICgqX19zID09 ICdcMCcpCiAgICBfX3Jlc3VsdCA9ICgodm9pZCAqKTApOwogIGVsc2UKICAgIHsKICAgICAgX19y ZXN1bHQgPSBfX3M7CiAgICAgIHdoaWxlICgqX19zICE9ICdcMCcgJiYgKl9fcyAhPSBfX3NlcCkK ICAgICAgICArK19fczsKICAgICAgaWYgKCpfX3MgPT0gJ1wwJykKICAgICAgICAqX19uZXh0cCA9 IF9fczsKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICpfX3MgPSAnXDAnOwogICAgICAg ICAgKl9fbmV4dHAgPSBfX3MgKyAxOwogICAgICAgIH0KICAgIH0KICByZXR1cm4gX19yZXN1bHQ7 Cn0KIyAxMDk1ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5l IGNoYXIgKl9fc3Ryc2VwXzFjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0KTsKZXh0ZXJuIF9f aW5saW5lIGNoYXIgKgpfX3N0cnNlcF8xYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdCkKewog IHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFsID0gKl9fczsKICBpZiAoX19yZXR2YWwgPT0gKCh2b2lk ICopMCkpCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgQ291bnRlci5t aSAgICAgICAgICAgICAgICAgICBQYWdlICAgMTkKCgogICAgcmV0dXJuICpfX3MgPSAoKHZvaWQg KikwKTsKICBpZiAoKl9fcmV0dmFsID09IF9fcmVqZWN0KQogICAgKigqX19zKSsrID0gJ1wwJzsK ICBlbHNlCiAgICBpZiAoKCpfX3MgPSAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50 X3AgKF9fcmVqZWN0KSAmJiAoX19yZWplY3QpID09ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNo ciAoX19yZXR2YWwsIF9fcmVqZWN0KSA6IHN0cmNociAoX19yZXR2YWwsIF9fcmVqZWN0KSkpKSAh PSAoKHZvaWQgKikwKSkKICAgICAgKigqX19zKSsrID0gJ1wwJzsKICAgIGVsc2UKICAgICAgKl9f cyA9ICgodm9pZCAqKTApOwogIHJldHVybiBfX3JldHZhbDsKfQoKZXh0ZXJuIF9faW5saW5lIGNo YXIgKl9fc3Ryc2VwXzJjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVj dDIpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3Ryc2VwXzJjIChjaGFyICoqX19zLCBjaGFy IF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIpCnsKICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9 ICpfX3M7CiAgaWYgKF9fcmV0dmFsID09ICgodm9pZCAqKTApKQogICAgcmV0dXJuICpfX3MgPSAo KHZvaWQgKikwKTsKICBpZiAoKl9fcmV0dmFsID09IF9fcmVqZWN0MSB8fCAqX19yZXR2YWwgPT0g X19yZWplY3QyKQogICAgKigqX19zKSsrID0gJ1wwJzsKICBlbHNlCiAgICB7CiAgICAgIHJlZ2lz dGVyIGNoYXIgKl9fY3AgPSBfX3JldHZhbDsKICAgICAgd2hpbGUgKCpfX2NwICE9ICdcMCcgJiYg Kl9fY3AgIT0gX19yZWplY3QxICYmICpfX2NwICE9IF9fcmVqZWN0MikKICAgICAgICArK19fY3A7 CiAgICAgIGlmICgqX19jcCAhPSAnXDAnKQogICAgICAgIHsKICAgICAgICAgICpfX3MgPSBfX2Nw OwogICAgICAgICAgKigqX19zKSsrID0gJ1wwJzsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAg ICAqX19zID0gKCh2b2lkICopMCk7CiAgICB9CiAgcmV0dXJuIF9fcmV0dmFsOwp9CgpleHRlcm4g X19pbmxpbmUgY2hhciAqX19zdHJzZXBfM2MgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBj aGFyIF9fcmVqZWN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9f cmVqZWN0Myk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJzZXBfM2MgKGNoYXIgKipfX3Ms IGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MiwgY2hhciBfX3JlamVjdDMpCnsKICByZWdp c3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsID09ICgodm9pZCAqKTAp KQogICAgcmV0dXJuICpfX3MgPSAoKHZvaWQgKikwKTsKICBpZiAoKl9fcmV0dmFsID09IF9fcmVq ZWN0MSB8fCAqX19yZXR2YWwgPT0gX19yZWplY3QyCiAgICAgIHx8ICpfX3JldHZhbCA9PSBfX3Jl amVjdDMpCiAgICAqKCpfX3MpKysgPSAnXDAnOwogIGVsc2UKICAgIHsKICAgICAgcmVnaXN0ZXIg Y2hhciAqX19jcCA9IF9fcmV0dmFsOwogICAgICB3aGlsZSAoKl9fY3AgIT0gJ1wwJyAmJiAqX19j cCAhPSBfX3JlamVjdDEgJiYgKl9fY3AgIT0gX19yZWplY3QyCiAgICAgICAgICAgICAmJiAqX19j cCAhPSBfX3JlamVjdDMpCiAgICAgICAgKytfX2NwOwogICAgICBpZiAoKl9fY3AgIT0gJ1wwJykK ICAgICAgICB7CiAgICAgICAgICAqX19zID0gX19jcDsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEg ICAgICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICAyMAoK CiAgICAgICAgICAqKCpfX3MpKysgPSAnXDAnOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg ICpfX3MgPSAoKHZvaWQgKikwKTsKICAgIH0KICByZXR1cm4gX19yZXR2YWw7Cn0KCmV4dGVybiBf X2lubGluZSBjaGFyICpfX3N0cnNlcF9nIChjaGFyICoqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVq ZWN0KTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnNlcF9nIChjaGFyICoqX19zLCBfX2Nv bnN0IGNoYXIgKl9fcmVqZWN0KQp7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXR2YWwgPSAqX19zOwog IGlmIChfX3JldHZhbCA9PSAoKHZvaWQgKikwKSkKICAgIHJldHVybiAoKHZvaWQgKikwKTsKICBp ZiAoKCpfX3MgPSBfX2V4dGVuc2lvbl9fICh7IGNoYXIgX19hMCwgX19hMSwgX19hMjsgKF9fYnVp bHRpbl9jb25zdGFudF9wIChfX3JlamVjdCkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKF9f cmVqZWN0KSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShfX3JlamVjdCkgPT0gMSkgPyAo KF9fYTAgPSAoKF9fY29uc3QgY2hhciAqKSAoX19yZWplY3QpKVswXSwgX19hMCA9PSAnXDAnKSA/ ICgodm9pZCkgKF9fcmV0dmFsKSwgKCh2b2lkICopMCkpIDogKChfX2ExID0gKChfX2NvbnN0IGNo YXIgKikgKF9fcmVqZWN0KSlbMV0sIF9fYTEgPT0gJ1wwJykgPyAoX19leHRlbnNpb25fXyAoX19i dWlsdGluX2NvbnN0YW50X3AgKF9fYTApICYmIChfX2EwKSA9PSAnXDAnID8gKGNoYXIgKikgX19y YXdtZW1jaHIgKF9fcmV0dmFsLCBfX2EwKSA6IHN0cmNociAoX19yZXR2YWwsIF9fYTApKSkgOiAo KF9fYTIgPSAoKF9fY29uc3QgY2hhciAqKSAoX19yZWplY3QpKVsyXSwgX19hMiA9PSAnXDAnKSA/ IF9fc3RycGJya19jMiAoX19yZXR2YWwsIF9fYTAsIF9fYTEpIDogKCgoX19jb25zdCBjaGFyICop IChfX3JlamVjdCkpWzNdID09ICdcMCcgPyBfX3N0cnBicmtfYzMgKF9fcmV0dmFsLCBfX2EwLCBf X2ExLCBfX2EyKSA6IHN0cnBicmsgKF9fcmV0dmFsLCBfX3JlamVjdCkpKSkpIDogc3RycGJyayAo X19yZXR2YWwsIF9fcmVqZWN0KSk7IH0pKSAhPSAoKHZvaWQgKikwKSkKICAgICooKl9fcykrKyA9 ICdcMCc7CiAgcmV0dXJuIF9fcmV0dmFsOwp9CiMgMTE4OCAiL3Vzci9pbmNsdWRlL2JpdHMvc3Ry aW5nMi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAyNSAiL3Vzci9pbmNs dWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI2ICIv dXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg MzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgNTI4ICIvdXNyL2luY2x1ZGUvc3RkbGli LmgiIDMKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgX19hdHRyaWJ1dGVfXyAo KF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXpl X3QgX19zaXplKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAx MTg5ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDIgMwoKCgoKZXh0ZXJuIGNoYXIgKl9f c3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2Nf XykpOwojIDEyMTIgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gY2hhciAq X19zdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQogICAgICAgICAg ICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAzNjAgIi91c3IvaW5jbHVkZS9zdHJp bmcuaCIgMiAzCiMgMzUgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL2hhc2guaCIgMgoj IDQzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9oYXNoLmgiCnR5cGVkZWYgc3RydWN0 IGNhY2hlX25vZGUKewogIHN0cnVjdCBjYWNoZV9ub2RlICpuZXh0OwoKICBjb25zdCB2b2lkICpr ZXk7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgIENvdW50ZXIubWkg ICAgICAgICAgICAgICAgICAgUGFnZSAgIDIxCgoKCgogIHZvaWQgKnZhbHVlOwp9ICpub2RlX3B0 cjsKIyA2NCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvaGFzaC5oIgp0eXBlZGVmIHVu c2lnbmVkIGludCAoKmhhc2hfZnVuY190eXBlKSh2b2lkICosIGNvbnN0IHZvaWQgKik7CiMgNzMg Ii91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL2hhc2guaCIKdHlwZWRlZiBpbnQgKCpjb21w YXJlX2Z1bmNfdHlwZSkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOwojIDgyICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9oYXNoLmgiCnR5cGVkZWYgc3RydWN0CnsKCiAgbm9kZV9w dHIgKm5vZGVfdGFibGU7CgoKICB1bnNpZ25lZCBpbnQgc2l6ZTsKCgogIHVuc2lnbmVkIGludCB1 c2VkOwogIHVuc2lnbmVkIGludCBtYXNrOwoKCgogIHVuc2lnbmVkIGludCBsYXN0X2J1Y2tldDsK CgoKICBoYXNoX2Z1bmNfdHlwZSBoYXNoX2Z1bmM7CgogIGNvbXBhcmVfZnVuY190eXBlIGNvbXBh cmVfZnVuYzsKfSBjYWNoZV90OwoKdHlwZWRlZiBjYWNoZV90ICpjYWNoZV9wdHI7CgoKCmV4dGVy biBjYWNoZV9wdHIgbW9kdWxlX2hhc2hfdGFibGUsIGNsYXNzX2hhc2hfdGFibGU7CgoKCmNhY2hl X3B0ciBoYXNoX25ldyAodW5zaWduZWQgaW50IHNpemUsCiAgICAgICAgICAgICAgICAgICAgaGFz aF9mdW5jX3R5cGUgaGFzaF9mdW5jLAogICAgICAgICAgICAgICAgICAgIGNvbXBhcmVfZnVuY190 eXBlIGNvbXBhcmVfZnVuYyk7CgoKCnZvaWQgaGFzaF9kZWxldGUgKGNhY2hlX3B0ciBjYWNoZSk7 CgoKCgoKCnZvaWQgaGFzaF9hZGQgKGNhY2hlX3B0ciAqY2FjaGVwLCBjb25zdCB2b2lkICprZXks IHZvaWQgKnZhbHVlKTsKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAg IENvdW50ZXIubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDIyCgoKCgp2b2lkIGhhc2hfcmVt b3ZlIChjYWNoZV9wdHIgY2FjaGUsIGNvbnN0IHZvaWQgKmtleSk7CiMgMTQyICIvdXNyL2xvY2Fs L3N3YXJtL2luY2x1ZGUvb2JqYy9oYXNoLmgiCm5vZGVfcHRyIGhhc2hfbmV4dCAoY2FjaGVfcHRy IGNhY2hlLCBub2RlX3B0ciBub2RlKTsKCgoKdm9pZCAqaGFzaF92YWx1ZV9mb3Jfa2V5IChjYWNo ZV9wdHIgY2FjaGUsIGNvbnN0IHZvaWQgKmtleSk7CgoKCkJPT0wgaGFzaF9pc19rZXlfaW5faGFz aCAoY2FjaGVfcHRyIGNhY2hlLCBjb25zdCB2b2lkICprZXkpOwojIDE2NCAiL3Vzci9sb2NhbC9z d2FybS9pbmNsdWRlL29iamMvaGFzaC5oIgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludApoYXNo X3B0ciAoY2FjaGVfcHRyIGNhY2hlLCBjb25zdCB2b2lkICprZXkpCnsKICByZXR1cm4gKChzaXpl X3Qpa2V5IC8gc2l6ZW9mICh2b2lkICopKSAmIGNhY2hlLT5tYXNrOwp9CgoKCgoKc3RhdGljIGlu bGluZSB1bnNpZ25lZCBpbnQKaGFzaF9zdHJpbmcgKGNhY2hlX3B0ciBjYWNoZSwgY29uc3Qgdm9p ZCAqa2V5KQp7CiAgdW5zaWduZWQgaW50IHJldCA9IDA7CiAgdW5zaWduZWQgaW50IGN0ciA9IDA7 CgoKICB3aGlsZSAoKihjaGFyKilrZXkpIHsKICAgIHJldCBePSAqKGNoYXIqKWtleSsrIDw8IGN0 cjsKICAgIGN0ciA9IChjdHIgKyAxKSAlIHNpemVvZiAodm9pZCAqKTsKICB9CgogIHJldHVybiBy ZXQgJiBjYWNoZS0+bWFzazsKfQoKCgpzdGF0aWMgaW5saW5lIGludApjb21wYXJlX3B0cnMgKGNv bnN0IHZvaWQgKmsxLCBjb25zdCB2b2lkICprMikKewogIHJldHVybiAhKGsxIC0gazIpOwp9CgoK CnN0YXRpYyBpbmxpbmUgaW50CmNvbXBhcmVfc3RyaW5ncyAoY29uc3Qgdm9pZCAqazEsIGNvbnN0 IHZvaWQgKmsyKQp7CiAgaWYgKGsxID09IGsyKQogICAgcmV0dXJuIDE7CiAgZWxzZSBpZiAoazEg PT0gMCB8fCBrMiA9PSAwKQogICAgcmV0dXJuIDA7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAg ICAgICAgICAgICAgICAgQ291bnRlci5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgMjMKCgog IGVsc2UKICAgIHJldHVybiAhX19leHRlbnNpb25fXyAoeyBzaXplX3QgX19zMV9sZW4sIF9fczJf bGVuOyAoX19idWlsdGluX2NvbnN0YW50X3AgKGsxKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAo azIpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoazEpLCBfX3MyX2xlbiA9IHN0cmxlbiAoazIpLCAo ISgoc2l6ZV90KShjb25zdCB2b2lkICopKChrMSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQg KikoazEpID09IDEpIHx8IF9fczFfbGVuID49IDQpICYmICghKChzaXplX3QpKGNvbnN0IHZvaWQg KikoKGsyKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShrMikgPT0gMSkgfHwgX19zMl9s ZW4gPj0gNCkpID8gbWVtY21wICgoX19jb25zdCBjaGFyICopIChrMSksIChfX2NvbnN0IGNoYXIg KikgKGsyKSwgKF9fczFfbGVuIDwgX19zMl9sZW4gPyBfX3MxX2xlbiA6IF9fczJfbGVuKSArIDEp IDogKF9fYnVpbHRpbl9jb25zdGFudF9wIChrMSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKiko KGsxKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShrMSkgPT0gMSkgJiYgKF9fczFfbGVu ID0gc3RybGVuIChrMSksIF9fczFfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKGsy KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoazIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2 b2lkICopKGsyKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3Vs dCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChrMSkpWzBd IC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKShrMikpWzBdKTsg aWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsxKSlbMV0gLSAoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChrMikpWzFdKTsgaWYgKF9fczFfbGVu ID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsxKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopIChrMikpWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jl c3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChrMSkpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoazIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsg X19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MyID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopIChrMik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChrMSkpWzBdIC0gX19zMlswXSk7IGlm IChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChrMSkpWzFdIC0gX19zMlsxXSk7IGlm IChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChrMSkpWzJdIC0gX19zMlsyXSk7IGlm IChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazEpKVszXSAtIF9fczJbM10pOyB9IH0g X19yZXN1bHQ7IH0pKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKGsyKSAmJiAoKHNpemVfdCko Y29uc3Qgdm9pZCAqKSgoazIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGsyKSA9PSAx KSAmJiAoX19zMl9sZW4gPSBzdHJsZW4gKGsyKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5f Y29uc3RhbnRfcCAoazEpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChrMSkgKyAxKSAtIChz aXplX3QpKGNvbnN0IHZvaWQgKikoazEpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0 ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKGsxKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopKGsyKSlbMF0pOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1 bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazEpKVsx XSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsyKSlbMV0p OyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazEpKVsyXSAtICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsyKSlbMl0pOyBpZiAoX19zMl9s ZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsxKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopIChrMikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19l eHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEgPSAoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsxKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0 ID0gX19zMVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KGsyKSlbMF07IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9 IChfX3MxWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo azIpKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9 IChfX3MxWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo azIpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAo X19zMVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsy KSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKGsxLCBrMikpKSk7IH0pOwp9CiMg MzIgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL3R5cGVkc3RyZWFtLmgiIDIKIyAxICIv dXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVk ZS9zdGRpby5oIiAxIDMKIyAzNiAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0 dXJlcy5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgoKIyAxICIvdXNyL2xvY2FsL2dj YzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRkZWYuaCIg MSAzCiMgNDMgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5o IiAxIDMKIyA0NSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMC4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCiMgNTMgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBz dHJ1Y3QgX0lPX0ZJTEUgRklMRTsKIyA2MyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBf SU9fRklMRSBfX0ZJTEU7CiMgNzMgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGli aW8uaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L19HX2NvbmZpZy5oIiAxIDMKIyA5ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAxMCAiL3Vzci9pbmNsdWRlL19HX2NvbmZp Zy5oIiAyIDMKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMxMiAiL3Vzci9sb2NhbC9nY2Mz L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkZGVmLmgiIDMK dHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmln LmgiIDIgMwojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9s b2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3Rk ZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgojIDEgIi91c3IvaW5j bHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDUxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMg NjcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19jb3Vu dDsKICB1bmlvbgogIHsKICAgIHdpbnRfdCBfX3djaDsKICAgIGNoYXIgX193Y2hiWzRdOwogIH0g X192YWx1ZTsKfSBfX21ic3RhdGVfdDsKIyAyNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAy IDMKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1pICAg ICAgICAgICAgICAgICAgIFBhZ2UgICAyNAoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmZfdCBf X3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsKdHlwZWRlZiBzdHJ1Y3QK ewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3M2NF90 OwojIDQ0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ2Nv bnYuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9nY29udi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgojIDEgIi91 c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAx ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5j bHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCiMgMSAi L3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93Y2hhci5o IiAyIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKIyAxICIvdXNyL2xvY2FsL2dj YzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRkZWYuaCIg MSAzCiMgMzEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgoKCgplbnVtCnsKICBfX0dDT05W X09LID0gMCwKICBfX0dDT05WX05PQ09OViwKICBfX0dDT05WX05PREIsCiAgX19HQ09OVl9OT01F TSwKCiAgX19HQ09OVl9FTVBUWV9JTlBVVCwKICBfX0dDT05WX0ZVTExfT1VUUFVULAogIF9fR0NP TlZfSUxMRUdBTF9JTlBVVCwKICBfX0dDT05WX0lOQ09NUExFVEVfSU5QVVQsCgogIF9fR0NPTlZf SUxMRUdBTF9ERVNDUklQVE9SLAogIF9fR0NPTlZfSU5URVJOQUxfRVJST1IKfTsKCgoKZW51bQp7 CiAgX19HQ09OVl9JU19MQVNUID0gMHgwMDAxLAogIF9fR0NPTlZfSUdOT1JFX0VSUk9SUyA9IDB4 MDAwMgp9OwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgIENvdW50ZXIu bWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDI1CgoKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsK c3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhOwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0Owpz dHJ1Y3QgX19nY29udl90cmFuc19kYXRhOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAo c3RydWN0IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwgX19jb25zdCB1 bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy ICoqLCBzaXplX3QgKiwgaW50LCBpbnQpOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl9pbml0X2Zj dCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2Zj dCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFu c19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwgdm9pZCAqLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWdu ZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsK Cgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QpICh2b2lkICosIF9fY29u c3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOwoKCnR5cGVk ZWYgaW50ICgqX19nY29udl90cmFuc19xdWVyeV9mY3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25z dCBjaGFyICoqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBj b25zdCBjaGFyICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lk ICopOwoKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9f dHJhbnNfZmN0OwogIF9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QgX190cmFuc19jb250ZXh0X2Zj dDsKICBfX2djb252X3RyYW5zX2VuZF9mY3QgX190cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0 YTsKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2dj b252X3N0ZXAKewogIHN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxl OwogIF9fY29uc3QgY2hhciAqX19tb2RuYW1lOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAg ICAgICAgICAgICAgIENvdW50ZXIubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDI2CgoKCiAg aW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hhciAqX190b19uYW1lOwoK ICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19n Y29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50 IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25l ZWRlZF90bzsKCgogIGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVj dCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWdu ZWQgY2hhciAqX19vdXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2Nh dGlvbl9jb3VudGVyOwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9f c3RhdGVwOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNf ZGF0YSAqX190cmFuczsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXpl X3QgX19uc3RlcHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKCgoKCgoKCjIwMDEt MDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAgICAgICAgICAgICAg IFBhZ2UgICAyNwoKCiAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19k YXRhIFtdOwp9ICpfX2djb252X3Q7CiMgNDUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAz CnR5cGVkZWYgdW5pb24KewogIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7 CiAgICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2Rh dGEgX19kYXRhOwogIH0gX19jb21iaW5lZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0df aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQg X0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18p KSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21v ZGVfXyAoX19TSV9fKSkpOwojIDMxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgNTEgIi91 c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQzICIvdXNyL2xv Y2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRh cmcuaCIgMwp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDUyICIv dXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgMTU4ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpz dHJ1Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9JT19GSUxFOwojIDE2OCAiL3Vzci9pbmNsdWRlL2xp YmlvLmgiIDMKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIg ewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoK CgogIGludCBfcG9zOwojIDE5MSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfTsKCgplbnVtIF9f Y29kZWN2dF9yZXN1bHQKewogIF9fY29kZWN2dF9vaywKICBfX2NvZGVjdnRfcGFydGlhbCwKICBf X2NvZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0X25vY29udgp9OwojIDI1OSAiL3Vzci9pbmNsdWRl L2xpYmlvLmgiIDMKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoKCgoKCgoKMjAw MS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgIENvdW50ZXIubWkgICAgICAgICAgICAgICAg ICAgUGFnZSAgIDI4CgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2Vu ZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIq IF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jh c2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAq X0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJr ZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87 CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hv cnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hv cnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiMgMzAzICIvdXNyL2luY2x1ZGUvbGli aW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKCgoKCiAgdm9pZCAqX19wYWQxOwogIHZvaWQg Kl9fcGFkMjsKCiAgaW50IF9tb2RlOwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQp IC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9OwoKCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9J T19GSUxFOwoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9w bHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9z dGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwoKCgoK CgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgIENvdW50ZXIubWkgICAgICAgICAg ICAgICAgICAgUGFnZSAgIDI5CgoKIyAzNDIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVk ZWYgX19zc2l6ZV90IF9faW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNoYXIgKl9fYnVmLCBz aXplX3QgX19uYnl0ZXMpOwoKCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAo dm9pZCAqX19jb29raWUsIF9fY29uc3QgY2hhciAqX19idWYsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBfX24pOwoKCgoKCgoKdHlwZWRlZiBpbnQgX19pb19zZWVrX2Zu ICh2b2lkICpfX2Nvb2tpZSwgX19vZmY2NF90ICpfX3BvcywgaW50IF9fdyk7CgoKdHlwZWRlZiBp bnQgX19pb19jbG9zZV9mbiAodm9pZCAqX19jb29raWUpOwoKCgoKdHlwZWRlZiBfX2lvX3JlYWRf Zm4gY29va2llX3JlYWRfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3dyaXRlX2ZuIGNvb2tpZV93 cml0ZV9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fc2Vla19mbiBjb29raWVfc2Vla19mdW5jdGlv bl90Owp0eXBlZGVmIF9faW9fY2xvc2VfZm4gY29va2llX2Nsb3NlX2Z1bmN0aW9uX3Q7CgoKdHlw ZWRlZiBzdHJ1Y3QKewogIF9faW9fcmVhZF9mbiAqcmVhZDsKICBfX2lvX3dyaXRlX2ZuICp3cml0 ZTsKICBfX2lvX3NlZWtfZm4gKnNlZWs7CiAgX19pb19jbG9zZV9mbiAqY2xvc2U7Cn0gX0lPX2Nv b2tpZV9pb19mdW5jdGlvbnNfdDsKdHlwZWRlZiBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IGNv b2tpZV9pb19mdW5jdGlvbnNfdDsKCnN0cnVjdCBfSU9fY29va2llX2ZpbGU7CgoKZXh0ZXJuIHZv aWQgX0lPX2Nvb2tpZV9pbml0IChzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlICpfX2NmaWxlLCBpbnQg X19yZWFkX3dyaXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fY29va2ll LCBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9fZm5zKTsKCgoKCgoKCmV4dGVybiBpbnQgX191 bmRlcmZsb3cgKF9JT19GSUxFICopIDsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSA7 CmV4dGVybiBpbnQgX19vdmVyZmxvdyAoX0lPX0ZJTEUgKiwgaW50KSA7CgoKCgoKCgoyMDAxLTA4 LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgQ291bnRlci5taSAgICAgICAgICAgICAgICAgICBQ YWdlICAgMzAKCgpleHRlcm4gd2ludF90IF9fd3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRl cm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiB3aW50X3QgX193b3ZlcmZs b3cgKF9JT19GSUxFICosIHdpbnRfdCkgOwojIDQyNCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMK ZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fcHV0 YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJ TEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAqX19mcCkgOwoKZXh0 ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgOwoKCgoKCmV4dGVybiB2 b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tm aWxlIChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUg KikgOwojIDQ1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fdmZzY2Fu ZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKICAgICAg ICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgOwpleHRl cm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9f cmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCkgOwpleHRl cm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCkgOwpleHRl cm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QpIDsKCmV4dGVy biBfX29mZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50LCBpbnQp IDsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBp bnQpIDsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSA7CiMg NzQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9p bmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCBfX25vdF92YV9s aXN0X187CiMgODggIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu dS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBfR19mcG9zX3QgZnBvc190OwoKCgoK dHlwZWRlZiBfR19mcG9zNjRfdCBmcG9zNjRfdDsKIyAxMzcgIi91c3IvbG9jYWwvZ2NjMy9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzCiMgMTM4ICIvdXNyL2xvY2FsL2djYzMv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAyIDMK CgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpleHRlcm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAq c3RkZXJyOwojIDE1MiAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzMuMC4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IHJlbW92ZSAoX19jb25zdCBj aGFyICpfX2ZpbGVuYW1lKSA7CgpleHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpfX29s ZCwgX19jb25zdCBjaGFyICpfX25ldykgOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAg ICAgICAgICAgIENvdW50ZXIubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDMxCgoKCgoKCmV4 dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKSA7CiMgMTY4ICIvdXNyL2xvY2FsL2djYzMvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBG SUxFICp0bXBmaWxlNjQgKHZvaWQpIDsKCgpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3Mp IDsKCgoKCmV4dGVybiBjaGFyICp0bXBuYW1fciAoY2hhciAqX19zKSA7CiMgMTg4ICIvdXNyL2xv Y2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRp by5oIiAzCmV4dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0 IGNoYXIgKl9fcGZ4KQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsK CgoKCmV4dGVybiBpbnQgZmNsb3NlIChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBmZmx1 c2ggKEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxF ICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmY2xvc2VhbGwgKHZvaWQpIDsKCgoKCgpleHRl cm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzKSA7CgpleHRl cm4gRklMRSAqZnJlb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAg ICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKIyAyMzIgIi91 c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRl L3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbW9kZXMpIDsKZXh0ZXJuIEZJTEUgKmZyZW9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3Ry aWN0IF9fc3RyZWFtKSA7CgoKCgpleHRlcm4gRklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25z dCBjaGFyICpfX21vZGVzKSA7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAg ICAgQ291bnRlci5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgMzIKCgoKCgoKCmV4dGVybiBG SUxFICpmb3BlbmNvb2tpZSAodm9pZCAqX19yZXN0cmljdCBfX21hZ2ljX2Nvb2tpZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAg ICAgICAgICAgICAgICAgICAgICAgICBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9faW9fZnVu Y3MpIDsKCgpleHRlcm4gRklMRSAqZm1lbW9wZW4gKHZvaWQgKl9fcywgc2l6ZV90IF9fbGVuLCBf X2NvbnN0IGNoYXIgKl9fbW9kZXMpIDsKCgoKCmV4dGVybiBGSUxFICpvcGVuX21lbXN0cmVhbSAo Y2hhciAqKl9fcmVzdHJpY3QgX19idWZsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90ICpfX3Jlc3RyaWN0IF9fc2l6ZWxvYykgOwoKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZiAo RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgOwoKCgpl eHRlcm4gaW50IHNldHZidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVz dHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgaW50IF9fbW9kZXMsIHNpemVfdCBfX24p IDsKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZmZlciAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwg Y2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19z aXplKSA7CgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4 dGVybiBpbnQgZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJu IGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7Cgpl eHRlcm4gaW50IHNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgoKZXh0ZXJuIGlu dCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIDsK CmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBf X2dudWNfdmFfbGlzdCBfX2FyZykKICAgICAgICAgICAgOwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6 MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICAz MwoKCmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9s aXN0IF9fYXJnKSA7CgoKCmV4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19z LCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9y bWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAq X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAg ICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkp KTsKCgoKCgpleHRlcm4gaW50IHZhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2YsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNf dmFfbGlzdCBfX2FyZykKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf X3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IF9fYXNwcmludGYgKGNoYXIgKipfX3Jlc3Ry aWN0IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2ZtdCwgLi4uKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9f cHJpbnRmX18sIDIsIDMpKSk7CmV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0 IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m bXQsIC4uLikKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50 Zl9fLCAyLCAzKSkpOwoKCmV4dGVybiBpbnQgdmRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mbXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0 IF9fYXJnKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRm X18sIDIsIDApKSk7CmV4dGVybiBpbnQgZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9y bWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKCgpleHRlcm4gaW50IGZzY2FuZiAoRklMRSAq X19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJuIGludCBzc2NhbmYgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKCgpleHRlcm4gaW50IHZmc2NhbmYgKEZJTEUgKl9f cmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAg ICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgICAgICAgICBfX2F0dHJpYnV0 ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNjYW5m IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJn KQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMSwg MCkpKTsKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgIENvdW50ZXIu bWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDM0CgoKZXh0ZXJuIGludCB2c3NjYW5mIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgICAgICAg ICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCgoKZXh0 ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpf X3N0cmVhbSkgOwoKCmV4dGVybiBpbnQgZ2V0Y2hhciAodm9pZCkgOwoKCgoKCgoKZXh0ZXJuIGlu dCBnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGdldGNoYXJfdW5s b2NrZWQgKHZvaWQpIDsKCgoKCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3Ry ZWFtKSA7CgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwpl eHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGludCBw dXRjaGFyIChpbnQgX19jKSA7CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQg X19jLCBGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQg X19jLCBGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IHB1dGNoYXJfdW5sb2NrZWQgKGludCBf X2MpIDsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgoKCgoKMjAw MS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgIENvdW50ZXIubWkgICAgICAgICAgICAgICAg ICAgUGFnZSAgIDM1CgoKCmV4dGVybiBpbnQgcHV0dyAoaW50IF9fdywgRklMRSAqX19zdHJlYW0p IDsKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24s IEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgICAgICAgIDsKCgoKZXh0ZXJuIGNoYXIg KmZnZXRzX3VubG9ja2VkIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgoKCgpleHRl cm4gY2hhciAqZ2V0cyAoY2hhciAqX19zKSA7CiMgNDM2ICIvdXNyL2xvY2FsL2djYzMvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBf X3NzaXplX3QgX19nZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVs aW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBf X3N0cmVhbSkgOwpleHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBf X2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0 IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUg Kl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCgpleHRlcm4gX19zc2l6ZV90IGdldGxpbmUgKGNoYXIg KipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCAqX19yZXN0cmljdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jl c3RyaWN0IF9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgICAgICAgICA7CgoK CmV4dGVybiBpbnQgZnB1dHNfdW5sb2NrZWQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsK CgoKZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgOwoKCgpleHRlcm4gaW50IHVu Z2V0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAo dm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwoKZXh0ZXJuIHNpemVf dCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwK CgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAg ICAgICAgICAgICAgIFBhZ2UgICAzNgoKCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19u LCBGSUxFICpfX3Jlc3RyaWN0IF9fcykgOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkX3VubG9ja2Vk ICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CmV4 dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19w dHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZzZWVrIChG SUxFICpfX3N0cmVhbSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgOwoKZXh0ZXJuIGxv bmcgaW50IGZ0ZWxsIChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxF ICpfX3N0cmVhbSkgOwojIDQ5OSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbyAoRklM RSAqX19zdHJlYW0sIF9fb2ZmX3QgX19vZmYsIGludCBfX3doZW5jZSkgOwoKZXh0ZXJuIF9fb2Zm X3QgZnRlbGxvIChGSUxFICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUg Kl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3NfdCAqX19yZXN0cmljdCBfX3BvcykKICAgICAgICAg ICAgOwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3Qg Kl9fcG9zKSA7CiMgNTMzICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUg Kl9fc3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgOwpleHRlcm4gX19vZmY2 NF90IGZ0ZWxsbzY0IChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGZnZXRwb3M2NCAoRklM RSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvczY0X3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAg ICAgICAgIDsKZXh0ZXJuIGludCBmc2V0cG9zNjQgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZw b3M2NF90ICpfX3BvcykgOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVyciAoRklMRSAqX19zdHJlYW0p IDsKCmV4dGVybiBpbnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmVycm9y IChGSUxFICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklM RSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkg OwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVy biB2b2lkIHBlcnJvciAoX19jb25zdCBjaGFyICpfX3MpIDsKCgoKCgoKCgoKCjIwMDEtMDgtMjQg MDE6MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAgICAgICAgICAgICAgIFBhZ2Ug ICAzNwoKCgpleHRlcm4gaW50IHN5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0 IHN5c19lcnJsaXN0W107CgoKZXh0ZXJuIGludCBfc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNo YXIgKl9fY29uc3QgX3N5c19lcnJsaXN0W107CgoKCgoKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUg Kl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJl YW0pIDsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwg X19jb25zdCBjaGFyICpfX21vZGVzKSA7CgoKZXh0ZXJuIGludCBwY2xvc2UgKEZJTEUgKl9fc3Ry ZWFtKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQgKGNoYXIgKl9fcykgOwoKCgoKCmV4dGVy biBjaGFyICpjdXNlcmlkIChjaGFyICpfX3MpIDsKCgoKCnN0cnVjdCBvYnN0YWNrOwoKCmV4dGVy biBpbnQgb2JzdGFja19wcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFj aywKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f Zm9ybWF0LCAuLi4pIDsKZXh0ZXJuIGludCBvYnN0YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0YWNr ICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fZ251Y192YV9saXN0IF9fYXJncykgOwoKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAg ICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICAzOAoKCgoK CmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIGludCBm dHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUg KEZJTEUgKl9fc3RyZWFtKSA7CiMgNjQwICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvc3RkaW8uaCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDMKZXh0 ZXJuIF9faW5saW5lIGludAp2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQs IF9fZ251Y192YV9saXN0IF9fYXJnKQp7CiAgcmV0dXJuIHZmcHJpbnRmIChzdGRvdXQsIF9fZm10 LCBfX2FyZyk7Cn0KCgpleHRlcm4gX19pbmxpbmUgaW50CmdldGNoYXIgKHZvaWQpCnsKICByZXR1 cm4gX0lPX2dldGMgKHN0ZGluKTsKfQoKCgoKZXh0ZXJuIF9faW5saW5lIGludApnZXRjX3VubG9j a2VkIChGSUxFICpfX2ZwKQp7CiAgcmV0dXJuICgoX19mcCktPl9JT19yZWFkX3B0ciA+PSAoX19m cCktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKF9fZnApIDogKih1bnNpZ25lZCBjaGFyICopIChf X2ZwKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKZXh0ZXJuIF9faW5saW5lIGludApnZXRjaGFyX3Vu bG9ja2VkICh2b2lkKQp7CiAgcmV0dXJuICgoc3RkaW4pLT5fSU9fcmVhZF9wdHIgPj0gKHN0ZGlu KS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoc3RkaW4pIDogKih1bnNpZ25lZCBjaGFyICopIChz dGRpbiktPl9JT19yZWFkX3B0cisrKTsKfQoKCgoKZXh0ZXJuIF9faW5saW5lIGludApwdXRjaGFy IChpbnQgX19jKQp7CiAgcmV0dXJuIF9JT19wdXRjIChfX2MsIHN0ZG91dCk7Cn0KCgoKCmV4dGVy biBfX2lubGluZSBpbnQKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICBD b3VudGVyLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICAzOQoKCmZwdXRjX3VubG9ja2VkIChp bnQgX19jLCBGSUxFICpfX3N0cmVhbSkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193cml0 ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVh bSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSkt Pl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgoKCgpleHRlcm4gX19pbmxpbmUgaW50CnB1 dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3Ry ZWFtKS0+X0lPX3dyaXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3Zl cmZsb3cgKF9fc3RyZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIp ICgqKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCmV4dGVybiBfX2lu bGluZSBpbnQKcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykKewogIHJldHVybiAoKChzdGRvdXQp LT5fSU9fd3JpdGVfcHRyID49IChzdGRvdXQpLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cg KHN0ZG91dCwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRv dXQpLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKCgoKZXh0ZXJuIF9faW5saW5lIF9f c3NpemVfdApnZXRsaW5lIChjaGFyICoqX19saW5lcHRyLCBzaXplX3QgKl9fbiwgRklMRSAqX19z dHJlYW0pCnsKICByZXR1cm4gX19nZXRkZWxpbSAoX19saW5lcHRyLCBfX24sICdcbicsIF9fc3Ry ZWFtKTsKfQoKCgoKCmV4dGVybiBfX2lubGluZSBpbnQKZmVvZl91bmxvY2tlZCAoRklMRSAqX19z dHJlYW0pCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsKfQoK CmV4dGVybiBfX2lubGluZSBpbnQKZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkKewog IHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MjApICE9IDApOwp9CiMgNjQxICIvdXNy L2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9z dGRpby5oIiAyIDMKIyAzMyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvdHlwZWRzdHJl YW0uaCIgMgoKdHlwZWRlZiBpbnQgKCpvYmpjX3R5cGVkX3JlYWRfZnVuYykodm9pZCosIGNoYXIq LCBpbnQpOwp0eXBlZGVmIGludCAoKm9iamNfdHlwZWRfd3JpdGVfZnVuYykodm9pZCosIGNvbnN0 IGNoYXIqLCBpbnQpOwp0eXBlZGVmIGludCAoKm9iamNfdHlwZWRfZmx1c2hfZnVuYykodm9pZCop Owp0eXBlZGVmIGludCAoKm9iamNfdHlwZWRfZW9mX2Z1bmMpKHZvaWQqKTsKIyA0OCAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL29iamMvdHlwZWRzdHJlYW0uaCIKCgoKCgoKCjIwMDEtMDgtMjQg MDE6MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAgICAgICAgICAgICAgIFBhZ2Ug ICA0MAoKCnR5cGVkZWYgc3RydWN0IG9iamNfdHlwZWRfc3RyZWFtIHsKICB2b2lkKiBwaHlzaWNh bDsKICBjYWNoZV9wdHIgb2JqZWN0X3RhYmxlOwogIGNhY2hlX3B0ciBzdHJlYW1fdGFibGU7CiAg Y2FjaGVfcHRyIGNsYXNzX3RhYmxlOwogIGNhY2hlX3B0ciBvYmplY3RfcmVmczsKICBpbnQgbW9k ZTsKICBpbnQgdHlwZTsKICBpbnQgdmVyc2lvbjsKICBpbnQgd3JpdGluZ19yb290X3A7CiAgb2Jq Y190eXBlZF9yZWFkX2Z1bmMgcmVhZDsKICBvYmpjX3R5cGVkX3dyaXRlX2Z1bmMgd3JpdGU7CiAg b2JqY190eXBlZF9lb2ZfZnVuYyBlb2Y7CiAgb2JqY190eXBlZF9mbHVzaF9mdW5jIGZsdXNoOwp9 IFR5cGVkU3RyZWFtOwojIDkzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy90eXBlZHN0 cmVhbS5oIgppbnQgb2JqY193cml0ZV90eXBlIChUeXBlZFN0cmVhbSogc3RyZWFtLCBjb25zdCBj aGFyKiB0eXBlLCBjb25zdCB2b2lkKiBkYXRhKTsKaW50IG9iamNfcmVhZF90eXBlIChUeXBlZFN0 cmVhbSogc3RyZWFtLCBjb25zdCBjaGFyKiB0eXBlLCB2b2lkKiBkYXRhKTsKCmludCBvYmpjX3dy aXRlX3R5cGVzIChUeXBlZFN0cmVhbSogc3RyZWFtLCBjb25zdCBjaGFyKiB0eXBlLCAuLi4pOwpp bnQgb2JqY19yZWFkX3R5cGVzIChUeXBlZFN0cmVhbSogc3RyZWFtLCBjb25zdCBjaGFyKiB0eXBl LCAuLi4pOwoKaW50IG9iamNfd3JpdGVfb2JqZWN0X3JlZmVyZW5jZSAoVHlwZWRTdHJlYW0qIHN0 cmVhbSwgaWQgb2JqZWN0KTsKaW50IG9iamNfd3JpdGVfcm9vdF9vYmplY3QgKFR5cGVkU3RyZWFt KiBzdHJlYW0sIGlkIG9iamVjdCk7Cgpsb25nIG9iamNfZ2V0X3N0cmVhbV9jbGFzc192ZXJzaW9u IChUeXBlZFN0cmVhbSogc3RyZWFtLCBDbGFzcyBjbGFzcyk7CgoKCgoKCmludCBvYmpjX3dyaXRl X2FycmF5IChUeXBlZFN0cmVhbSogc3RyZWFtLCBjb25zdCBjaGFyKiB0eXBlLAogICAgICAgICAg ICAgICAgICAgICAgaW50IGNvdW50LCBjb25zdCB2b2lkKiBkYXRhKTsKaW50IG9iamNfcmVhZF9h cnJheSAoVHlwZWRTdHJlYW0qIHN0cmVhbSwgY29uc3QgY2hhciogdHlwZSwKICAgICAgICAgICAg ICAgICAgICAgaW50IGNvdW50LCB2b2lkKiBkYXRhKTsKCmludCBvYmpjX3dyaXRlX29iamVjdCAo VHlwZWRTdHJlYW0qIHN0cmVhbSwgaWQgb2JqZWN0KTsKaW50IG9iamNfcmVhZF9vYmplY3QgKFR5 cGVkU3RyZWFtKiBzdHJlYW0sIGlkKiBvYmplY3QpOwojIDEyNCAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL29iamMvdHlwZWRzdHJlYW0uaCIKVHlwZWRTdHJlYW0qIG9iamNfb3Blbl90eXBlZF9z dHJlYW0gKEZJTEUqIHBoeXNpY2FsLCBpbnQgbW9kZSk7ClR5cGVkU3RyZWFtKiBvYmpjX29wZW5f dHlwZWRfc3RyZWFtX2Zvcl9maWxlIChjb25zdCBjaGFyKiBmaWxlX25hbWUsIGludCBtb2RlKTsK CnZvaWQgb2JqY19jbG9zZV90eXBlZF9zdHJlYW0gKFR5cGVkU3RyZWFtKiBzdHJlYW0pOwoKQk9P TCBvYmpjX2VuZF9vZl90eXBlZF9zdHJlYW0gKFR5cGVkU3RyZWFtKiBzdHJlYW0pOwp2b2lkIG9i amNfZmx1c2hfdHlwZWRfc3RyZWFtIChUeXBlZFN0cmVhbSogc3RyZWFtKTsKIyAzMiAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL29iamMvT2JqZWN0LmgiIDIKCgoKCgpAaW50ZXJmYWNlIE9iamVj dAp7CiAgICBDbGFzcyBpc2E7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAg ICAgQ291bnRlci5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgNDEKCgp9CgoKKyBpbml0aWFs aXplOwotIGluaXQ7CgoKKyBuZXc7CisgYWxsb2M7Ci0gZnJlZTsKLSBjb3B5OwotIHNoYWxsb3dD b3B5OwotIGRlZXBlbjsKLSBkZWVwQ29weTsKCgotIChDbGFzcyljbGFzczsKLSAoQ2xhc3Mpc3Vw ZXJDbGFzczsKLSAoTWV0YUNsYXNzKW1ldGFDbGFzczsKLSAoY29uc3QgY2hhciAqKW5hbWU7CgoK LSBzZWxmOwotICh1bnNpZ25lZCBpbnQpaGFzaDsKLSAoQk9PTClpc0VxdWFsOmFuT2JqZWN0Owot IChpbnQpY29tcGFyZTphbm90aGVyT2JqZWN0OwoKCi0gKEJPT0wpaXNNZXRhQ2xhc3M7Ci0gKEJP T0wpaXNDbGFzczsKLSAoQk9PTClpc0luc3RhbmNlOwoKCi0gKEJPT0wpaXNLaW5kT2Y6KENsYXNz KWFDbGFzc09iamVjdDsKLSAoQk9PTClpc01lbWJlck9mOihDbGFzcylhQ2xhc3NPYmplY3Q7Ci0g KEJPT0wpaXNLaW5kT2ZDbGFzc05hbWVkOihjb25zdCBjaGFyICopYUNsYXNzTmFtZTsKLSAoQk9P TClpc01lbWJlck9mQ2xhc3NOYW1lZDooY29uc3QgY2hhciAqKWFDbGFzc05hbWU7CgoKKyAoQk9P TClpbnN0YW5jZXNSZXNwb25kVG86KFNFTClhU2VsOwotIChCT09MKXJlc3BvbmRzVG86KFNFTClh U2VsOwoKCi0gKEJPT0wpY29uZm9ybXNUbzooUHJvdG9jb2wqKWFQcm90b2NvbDsKCgorIChJTVAp aW5zdGFuY2VNZXRob2RGb3I6KFNFTClhU2VsOwotIChJTVApbWV0aG9kRm9yOihTRUwpYVNlbDsK KyAoc3RydWN0IG9iamNfbWV0aG9kX2Rlc2NyaXB0aW9uICopZGVzY3JpcHRpb25Gb3JJbnN0YW5j ZU1ldGhvZDooU0VMKWFTZWw7Ci0gKHN0cnVjdCBvYmpjX21ldGhvZF9kZXNjcmlwdGlvbiAqKWRl c2NyaXB0aW9uRm9yTWV0aG9kOihTRUwpYVNlbDsKCgotIHBlcmZvcm06KFNFTClhU2VsOwotIHBl cmZvcm06KFNFTClhU2VsIHdpdGg6YW5PYmplY3Q7Ci0gcGVyZm9ybTooU0VMKWFTZWwgd2l0aDph bk9iamVjdDEgd2l0aDphbk9iamVjdDI7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAg ICAgICAgICAgIENvdW50ZXIubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDQyCgoKCi0gKHJl dHZhbF90KWZvcndhcmQ6KFNFTClhU2VsIDooYXJnbGlzdF90KWFyZ0ZyYW1lOwotIChyZXR2YWxf dClwZXJmb3JtdjooU0VMKWFTZWwgOihhcmdsaXN0X3QpYXJnRnJhbWU7CgoKKyBwb3NlQXM6KENs YXNzKWFDbGFzc09iamVjdDsKLSAoQ2xhc3MpdHJhbnNtdXRlQ2xhc3NUbzooQ2xhc3MpYUNsYXNz T2JqZWN0OwoKCi0gc3ViY2xhc3NSZXNwb25zaWJpbGl0eTooU0VMKWFTZWw7Ci0gbm90SW1wbGVt ZW50ZWQ6KFNFTClhU2VsOwotIHNob3VsZE5vdEltcGxlbWVudDooU0VMKWFTZWw7CgoKLSBkb2Vz Tm90UmVjb2duaXplOihTRUwpYVNlbDsKLSBlcnJvcjooY29uc3QgY2hhciAqKWFTdHJpbmcsIC4u LjsKCgorIChpbnQpdmVyc2lvbjsKKyBzZXRWZXJzaW9uOihpbnQpYVZlcnNpb247CisgKGludClz dHJlYW1WZXJzaW9uOiAoVHlwZWRTdHJlYW0qKWFTdHJlYW07CgotIHJlYWQ6IChUeXBlZFN0cmVh bSopYVN0cmVhbTsKLSB3cml0ZTogKFR5cGVkU3RyZWFtKilhU3RyZWFtOwotIGF3YWtlOwoKQGVu ZAojIDEzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0RlZkNsYXNzLmgiIDIKIyAx ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLWFwaS5oIiAxCiMgMzQgIi91c3Iv bG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMtYXBpLmgiCiMgMSAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL29iamMvb2JqYy5oIiAxCiMgMzUgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9v YmpjL29iamMtYXBpLmgiIDIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9oYXNo LmgiIDEKIyAzNiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy1hcGkuaCIgMgoj IDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL3Roci5oIiAxCiMgNDEgIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9vYmpjL3Roci5oIgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9vYmpjL29iamMuaCIgMQojIDQyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy90aHIu aCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL2V4dGVybnZhci5oIiAxCiMg NDMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL3Roci5oIiAyCgoKCgpleHRlcm4gaW50 IF9fb2JqY190aHJlYWRfZXhpdF9zdGF0dXM7CiMgNTkgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9vYmpjL3Roci5oIgp0eXBlZGVmIHZvaWQgKiBvYmpjX3RocmVhZF90OwoKCnN0cnVjdCBvYmpj X211dGV4CnsKICB2b2xhdGlsZSBvYmpjX3RocmVhZF90IG93bmVyOwogIHZvbGF0aWxlIGludCBk ZXB0aDsKICB2b2lkICogYmFja2VuZDsKfTsKdHlwZWRlZiBzdHJ1Y3Qgb2JqY19tdXRleCAqb2Jq Y19tdXRleF90OwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgIENvdW50 ZXIubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDQzCgoKCgpzdHJ1Y3Qgb2JqY19jb25kaXRp b24KewogIHZvaWQgKiBiYWNrZW5kOwp9Owp0eXBlZGVmIHN0cnVjdCBvYmpjX2NvbmRpdGlvbiAq b2JqY19jb25kaXRpb25fdDsKCgpvYmpjX211dGV4X3Qgb2JqY19tdXRleF9hbGxvY2F0ZSh2b2lk KTsKaW50IG9iamNfbXV0ZXhfZGVhbGxvY2F0ZShvYmpjX211dGV4X3QgbXV0ZXgpOwppbnQgb2Jq Y19tdXRleF9sb2NrKG9iamNfbXV0ZXhfdCBtdXRleCk7CmludCBvYmpjX211dGV4X3VubG9jayhv YmpjX211dGV4X3QgbXV0ZXgpOwppbnQgb2JqY19tdXRleF90cnlsb2NrKG9iamNfbXV0ZXhfdCBt dXRleCk7CgoKb2JqY19jb25kaXRpb25fdCBvYmpjX2NvbmRpdGlvbl9hbGxvY2F0ZSh2b2lkKTsK aW50IG9iamNfY29uZGl0aW9uX2RlYWxsb2NhdGUob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24p OwppbnQgb2JqY19jb25kaXRpb25fd2FpdChvYmpjX2NvbmRpdGlvbl90IGNvbmRpdGlvbiwgb2Jq Y19tdXRleF90IG11dGV4KTsKaW50IG9iamNfY29uZGl0aW9uX3NpZ25hbChvYmpjX2NvbmRpdGlv bl90IGNvbmRpdGlvbik7CmludCBvYmpjX2NvbmRpdGlvbl9icm9hZGNhc3Qob2JqY19jb25kaXRp b25fdCBjb25kaXRpb24pOwoKCm9iamNfdGhyZWFkX3Qgb2JqY190aHJlYWRfZGV0YWNoKFNFTCBz ZWxlY3RvciwgaWQgb2JqZWN0LCBpZCBhcmd1bWVudCk7CnZvaWQgb2JqY190aHJlYWRfeWllbGQo dm9pZCk7CmludCBvYmpjX3RocmVhZF9leGl0KHZvaWQpOwppbnQgb2JqY190aHJlYWRfc2V0X3By aW9yaXR5KGludCBwcmlvcml0eSk7CmludCBvYmpjX3RocmVhZF9nZXRfcHJpb3JpdHkodm9pZCk7 CnZvaWQgKiBvYmpjX3RocmVhZF9nZXRfZGF0YSh2b2lkKTsKaW50IG9iamNfdGhyZWFkX3NldF9k YXRhKHZvaWQgKnZhbHVlKTsKb2JqY190aHJlYWRfdCBvYmpjX3RocmVhZF9pZCh2b2lkKTsKIyAx MTMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL3Roci5oIgp0eXBlZGVmIHZvaWQgKCpv YmpjX3RocmVhZF9jYWxsYmFjaykoKTsKb2JqY190aHJlYWRfY2FsbGJhY2sgb2JqY19zZXRfdGhy ZWFkX2NhbGxiYWNrKG9iamNfdGhyZWFkX2NhbGxiYWNrIGZ1bmMpOwoKCmludCBfX29iamNfaW5p dF90aHJlYWRfc3lzdGVtKHZvaWQpOwppbnQgX19vYmpjX2ZpbmlfdGhyZWFkX3N5c3RlbSh2b2lk KTsKCgppbnQgX19vYmpjX211dGV4X2FsbG9jYXRlKG9iamNfbXV0ZXhfdCBtdXRleCk7CmludCBf X29iamNfbXV0ZXhfZGVhbGxvY2F0ZShvYmpjX211dGV4X3QgbXV0ZXgpOwppbnQgX19vYmpjX211 dGV4X2xvY2sob2JqY19tdXRleF90IG11dGV4KTsKaW50IF9fb2JqY19tdXRleF90cnlsb2NrKG9i amNfbXV0ZXhfdCBtdXRleCk7CmludCBfX29iamNfbXV0ZXhfdW5sb2NrKG9iamNfbXV0ZXhfdCBt dXRleCk7CgoKaW50IF9fb2JqY19jb25kaXRpb25fYWxsb2NhdGUob2JqY19jb25kaXRpb25fdCBj b25kaXRpb24pOwppbnQgX19vYmpjX2NvbmRpdGlvbl9kZWFsbG9jYXRlKG9iamNfY29uZGl0aW9u X3QgY29uZGl0aW9uKTsKaW50IF9fb2JqY19jb25kaXRpb25fd2FpdChvYmpjX2NvbmRpdGlvbl90 IGNvbmRpdGlvbiwgb2JqY19tdXRleF90IG11dGV4KTsKaW50IF9fb2JqY19jb25kaXRpb25fYnJv YWRjYXN0KG9iamNfY29uZGl0aW9uX3QgY29uZGl0aW9uKTsKaW50IF9fb2JqY19jb25kaXRpb25f c2lnbmFsKG9iamNfY29uZGl0aW9uX3QgY29uZGl0aW9uKTsKCgpvYmpjX3RocmVhZF90IF9fb2Jq Y190aHJlYWRfZGV0YWNoKHZvaWQgKCpmdW5jKSh2b2lkICphcmcpLCB2b2lkICphcmcpOwppbnQg X19vYmpjX3RocmVhZF9zZXRfcHJpb3JpdHkoaW50IHByaW9yaXR5KTsKCgoKCgoKCjIwMDEtMDgt MjQgMDE6MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAgICAgICAgICAgICAgIFBh Z2UgICA0NAoKCmludCBfX29iamNfdGhyZWFkX2dldF9wcmlvcml0eSh2b2lkKTsKdm9pZCBfX29i amNfdGhyZWFkX3lpZWxkKHZvaWQpOwppbnQgX19vYmpjX3RocmVhZF9leGl0KHZvaWQpOwpvYmpj X3RocmVhZF90IF9fb2JqY190aHJlYWRfaWQodm9pZCk7CmludCBfX29iamNfdGhyZWFkX3NldF9k YXRhKHZvaWQgKnZhbHVlKTsKdm9pZCAqIF9fb2JqY190aHJlYWRfZ2V0X2RhdGEodm9pZCk7CiMg MzcgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMtYXBpLmgiIDIKIyAxICIvdXNy L2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9z dGRpby5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy1hcGku aCIgMgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjAuMS9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyAxMTAgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYg X19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyAzOSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29i amMvb2JqYy1hcGkuaCIgMgoKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9leHRl cm52YXIuaCIgMQojIDQxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLWFwaS5o IiAyCiMgNTAgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMtYXBpLmgiCnN0cnVj dCBvYmpjX21ldGhvZF9kZXNjcmlwdGlvbgp7CiAgICBTRUwgbmFtZTsKICAgIGNoYXIgKnR5cGVz Owp9OwojIDEwNiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy1hcGkuaCIKZXh0 ZXJuIHZvaWQgb2JqY19lcnJvciAoaWQgb2JqZWN0LCBpbnQgY29kZSwgY29uc3QgY2hhciogZm10 LCAuLi4pOwpleHRlcm4gdm9pZCBvYmpjX3ZlcnJvciAoaWQgb2JqZWN0LCBpbnQgY29kZSwgY29u c3QgY2hhciogZm10LCB2YV9saXN0IGFwKTsKdHlwZWRlZiBCT09MICgqb2JqY19lcnJvcl9oYW5k bGVyKSAoaWQsIGludCBjb2RlLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApOwpvYmpjX2Vy cm9yX2hhbmRsZXIgb2JqY19zZXRfZXJyb3JfaGFuZGxlciAob2JqY19lcnJvcl9oYW5kbGVyIGZ1 bmMpOwojIDE0NyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy1hcGkuaCIKc3Ry dWN0IG9iamNfc3RhdGljX2luc3RhbmNlcwp7CiAgY2hhciAqY2xhc3NfbmFtZTsKICBpZCBpbnN0 YW5jZXNbMF07Cn07CiMgMTYyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLWFw aS5oIgp0eXBlZGVmIHN0cnVjdCBvYmpjX3N5bXRhYiB7CiAgdW5zaWduZWQgbG9uZyBzZWxfcmVm X2NudDsKICBTRUwgcmVmczsKICB1bnNpZ25lZCBzaG9ydCBjbHNfZGVmX2NudDsKCiAgdW5zaWdu ZWQgc2hvcnQgY2F0X2RlZl9jbnQ7CgoKCiAgdm9pZCAqZGVmc1sxXTsKCgoKCgp9IFN5bXRhYiwg KlN5bXRhYl90OwojIDE4OSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy1hcGku aCIKdHlwZWRlZiBzdHJ1Y3Qgb2JqY19tb2R1bGUgewogIHVuc2lnbmVkIGxvbmcgdmVyc2lvbjsK ICB1bnNpZ25lZCBsb25nIHNpemU7CiAgY29uc3QgY2hhciogbmFtZTsKCgoKCgoKCgoyMDAxLTA4 LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgQ291bnRlci5taSAgICAgICAgICAgICAgICAgICBQ YWdlICAgNDUKCgoKCiAgU3ltdGFiX3Qgc3ltdGFiOwoKCgoKCn0gTW9kdWxlLCAqTW9kdWxlX3Q7 CgoKCgoKCnR5cGVkZWYgc3RydWN0IG9iamNfaXZhciogSXZhcl90Owp0eXBlZGVmIHN0cnVjdCBv YmpjX2l2YXJfbGlzdCB7CiAgaW50IGl2YXJfY291bnQ7CgoKCgogIHN0cnVjdCBvYmpjX2l2YXIg ewogICAgY29uc3QgY2hhciogaXZhcl9uYW1lOwoKCiAgICBjb25zdCBjaGFyKiBpdmFyX3R5cGU7 CgoKICAgIGludCBpdmFyX29mZnNldDsKCgoKICB9IGl2YXJfbGlzdFsxXTsKCn0gSXZhckxpc3Qs ICpJdmFyTGlzdF90OwojIDI0MCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy1h cGkuaCIKc3RydWN0IG9iamNfbWV0aG9kIHsKICBTRUwgbWV0aG9kX25hbWU7CgoKCgoKICBjb25z dCBjaGFyKiBtZXRob2RfdHlwZXM7CgoKICBJTVAgbWV0aG9kX2ltcDsKCn07Cgp0eXBlZGVmIHN0 cnVjdCBvYmpjX21ldGhvZCBNZXRob2Q7Cgp0eXBlZGVmIE1ldGhvZCogTWV0aG9kX3Q7CnR5cGVk ZWYgc3RydWN0IG9iamNfbWV0aG9kX2xpc3QgewogIHN0cnVjdCBvYmpjX21ldGhvZF9saXN0KiBt ZXRob2RfbmV4dDsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICBDb3Vu dGVyLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA0NgoKCgoKICBpbnQgbWV0aG9kX2NvdW50 OwoKICBzdHJ1Y3Qgb2JqY19tZXRob2QgbWV0aG9kX2xpc3RbMV07Cgp9IE1ldGhvZExpc3QsICpN ZXRob2RMaXN0X3Q7CgpzdHJ1Y3Qgb2JqY19wcm90b2NvbF9saXN0IHsKICBzdHJ1Y3Qgb2JqY19w cm90b2NvbF9saXN0ICpuZXh0OwogIGludCBjb3VudDsKICBQcm90b2NvbCAqbGlzdFsxXTsKfTsK IyAzMjQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMtYXBpLmgiCnR5cGVkZWYg c3RydWN0IG9iamNfY2F0ZWdvcnkgewogIGNvbnN0IGNoYXIqIGNhdGVnb3J5X25hbWU7CgoKICBj b25zdCBjaGFyKiBjbGFzc19uYW1lOwoKICBNZXRob2RMaXN0X3QgaW5zdGFuY2VfbWV0aG9kczsK CgoKICBNZXRob2RMaXN0X3QgY2xhc3NfbWV0aG9kczsKCgoKICBzdHJ1Y3Qgb2JqY19wcm90b2Nv bF9saXN0ICpwcm90b2NvbHM7Cgp9IENhdGVnb3J5LCAqQ2F0ZWdvcnlfdDsKCgoKCgoKdHlwZWRl ZiBzdHJ1Y3Qgb2JqY19zdXBlciB7CiAgaWQgc2VsZjsKCiAgQ2xhc3MgY2xhc3M7Cn0gU3VwZXIs ICpTdXBlcl90OwoKSU1QIG9iamNfbXNnX2xvb2t1cF9zdXBlcihTdXBlcl90IHN1cGVyLCBTRUwg c2VsKTsKCgpyZXR2YWxfdCBvYmpjX21zZ19zZW5kdihpZCwgU0VMLCBhcmdsaXN0X3QpOwojIDM2 NyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy1hcGkuaCIKZXh0ZXJuIENsYXNz ICgqX29iamNfbG9va3VwX2NsYXNzKSAoY29uc3QgY2hhciAqbmFtZSk7CgoKCgoKCgoKCgoKCgoK MjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgIENvdW50ZXIubWkgICAgICAgICAgICAg ICAgICAgUGFnZSAgIDQ3CgoKZXh0ZXJuIHZvaWQgKCpfb2JqY19sb2FkX2NhbGxiYWNrKSAoQ2xh c3MgY2xhc3MsIENhdGVnb3J5KiBjYXRlZ29yeSk7CgoKCgpleHRlcm4gaWQgKCpfb2JqY19vYmpl Y3RfYWxsb2MpIChDbGFzcyBjbGFzcyk7CmV4dGVybiBpZCAoKl9vYmpjX29iamVjdF9jb3B5KSAo aWQgb2JqZWN0KTsKZXh0ZXJuIGlkICgqX29iamNfb2JqZWN0X2Rpc3Bvc2UpIChpZCBvYmplY3Qp OwoKCgoKCgoKdm9pZCAqb2JqY19tYWxsb2MgKHNpemVfdCBzaXplKTsKCnZvaWQgKm9iamNfYXRv bWljX21hbGxvYyAoc2l6ZV90IHNpemUpOwoKdm9pZCAqb2JqY192YWxsb2MgKHNpemVfdCBzaXpl KTsKCnZvaWQgKm9iamNfcmVhbGxvYyAodm9pZCAqbWVtLCBzaXplX3Qgc2l6ZSk7Cgp2b2lkICpv YmpjX2NhbGxvYyAoc2l6ZV90IG5lbGVtLCBzaXplX3Qgc2l6ZSk7Cgp2b2lkIG9iamNfZnJlZSAo dm9pZCAqbWVtKTsKIyA0MTIgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMtYXBp LmgiCmV4dGVybiB2b2lkICooKl9vYmpjX21hbGxvYykgKHNpemVfdCk7CmV4dGVybiB2b2lkICoo Kl9vYmpjX2F0b21pY19tYWxsb2MpIChzaXplX3QpOwpleHRlcm4gdm9pZCAqKCpfb2JqY192YWxs b2MpIChzaXplX3QpOwpleHRlcm4gdm9pZCAqKCpfb2JqY19yZWFsbG9jKSAodm9pZCAqLCBzaXpl X3QpOwpleHRlcm4gdm9pZCAqKCpfb2JqY19jYWxsb2MpIChzaXplX3QsIHNpemVfdCk7CmV4dGVy biB2b2lkICgqX29iamNfZnJlZSkgKHZvaWQgKik7CgpNZXRob2RfdCBjbGFzc19nZXRfY2xhc3Nf bWV0aG9kIChNZXRhQ2xhc3MgY2xhc3MsIFNFTCBhU2VsKTsKCk1ldGhvZF90IGNsYXNzX2dldF9p bnN0YW5jZV9tZXRob2QgKENsYXNzIGNsYXNzLCBTRUwgYVNlbCk7CgpDbGFzcyBjbGFzc19wb3Nl X2FzIChDbGFzcyBpbXBvc3RvciwgQ2xhc3Mgc3VwZXJjbGFzcyk7CgpDbGFzcyBvYmpjX2dldF9j bGFzcyAoY29uc3QgY2hhciAqbmFtZSk7CgpDbGFzcyBvYmpjX2xvb2t1cF9jbGFzcyAoY29uc3Qg Y2hhciAqbmFtZSk7CgpDbGFzcyBvYmpjX25leHRfY2xhc3MgKHZvaWQgKiplbnVtX3N0YXRlKTsK CmNvbnN0IGNoYXIgKnNlbF9nZXRfbmFtZSAoU0VMIHNlbGVjdG9yKTsKCmNvbnN0IGNoYXIgKnNl bF9nZXRfdHlwZSAoU0VMIHNlbGVjdG9yKTsKClNFTCBzZWxfZ2V0X3VpZCAoY29uc3QgY2hhciAq bmFtZSk7CgpTRUwgc2VsX2dldF9hbnlfdWlkIChjb25zdCBjaGFyICpuYW1lKTsKClNFTCBzZWxf Z2V0X2FueV90eXBlZF91aWQgKGNvbnN0IGNoYXIgKm5hbWUpOwoKCgoKCgoKCjIwMDEtMDgtMjQg MDE6MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAgICAgICAgICAgICAgIFBhZ2Ug ICA0OAoKClNFTCBzZWxfZ2V0X3R5cGVkX3VpZCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hh ciopOwoKU0VMIHNlbF9yZWdpc3Rlcl9uYW1lIChjb25zdCBjaGFyICpuYW1lKTsKClNFTCBzZWxf cmVnaXN0ZXJfdHlwZWRfbmFtZSAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhcip0eXBlKTsK CgpCT09MIHNlbF9pc19tYXBwZWQgKFNFTCBhU2VsKTsKCmV4dGVybiBpZCBjbGFzc19jcmVhdGVf aW5zdGFuY2UgKENsYXNzIGNsYXNzKTsKCnN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCmNsYXNz X2dldF9jbGFzc19uYW1lIChDbGFzcyBjbGFzcykKewogIHJldHVybiAoKGNsYXNzKSYmKCgoKGNs YXNzKS0+aW5mbykgJiAweDFMKSA9PSAweDFMKSk/Y2xhc3MtPm5hbWU6KChjbGFzcz09KENsYXNz KTApPyJOaWwiOjApOwp9CgpzdGF0aWMgaW5saW5lIGxvbmcKY2xhc3NfZ2V0X2luc3RhbmNlX3Np emUgKENsYXNzIGNsYXNzKQp7CiAgcmV0dXJuICgoY2xhc3MpJiYoKCgoY2xhc3MpLT5pbmZvKSAm IDB4MUwpID09IDB4MUwpKSA/IGNsYXNzLT5pbnN0YW5jZV9zaXplIDogMDsKfQoKc3RhdGljIGlu bGluZSBNZXRhQ2xhc3MKY2xhc3NfZ2V0X21ldGFfY2xhc3MgKENsYXNzIGNsYXNzKQp7CiAgcmV0 dXJuICgoY2xhc3MpJiYoKCgoY2xhc3MpLT5pbmZvKSAmIDB4MUwpID09IDB4MUwpKSA/IGNsYXNz LT5jbGFzc19wb2ludGVyIDogKENsYXNzKTA7Cn0KCnN0YXRpYyBpbmxpbmUgQ2xhc3MKY2xhc3Nf Z2V0X3N1cGVyX2NsYXNzIChDbGFzcyBjbGFzcykKewogIHJldHVybiAoKGNsYXNzKSYmKCgoKGNs YXNzKS0+aW5mbykgJiAweDFMKSA9PSAweDFMKSkgPyBjbGFzcy0+c3VwZXJfY2xhc3MgOiAoQ2xh c3MpMDsKfQoKc3RhdGljIGlubGluZSBpbnQKY2xhc3NfZ2V0X3ZlcnNpb24gKENsYXNzIGNsYXNz KQp7CiAgcmV0dXJuICgoY2xhc3MpJiYoKCgoY2xhc3MpLT5pbmZvKSAmIDB4MUwpID09IDB4MUwp KSA/IGNsYXNzLT52ZXJzaW9uIDogLTE7Cn0KCnN0YXRpYyBpbmxpbmUgQk9PTApjbGFzc19pc19j bGFzcyAoQ2xhc3MgY2xhc3MpCnsKICByZXR1cm4gKChjbGFzcykmJigoKChjbGFzcyktPmluZm8p ICYgMHgxTCkgPT0gMHgxTCkpOwp9CgpzdGF0aWMgaW5saW5lIEJPT0wKY2xhc3NfaXNfbWV0YV9j bGFzcyAoQ2xhc3MgY2xhc3MpCnsKICByZXR1cm4gKChjbGFzcykmJigoKChjbGFzcyktPmluZm8p ICYgMHgyTCkgPT0gMHgyTCkpOwp9CgoKc3RhdGljIGlubGluZSB2b2lkCmNsYXNzX3NldF92ZXJz aW9uIChDbGFzcyBjbGFzcywgbG9uZyB2ZXJzaW9uKQoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAg ICAgICAgICAgICAgICAgIENvdW50ZXIubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDQ5CgoK ewogIGlmICgoKGNsYXNzKSYmKCgoKGNsYXNzKS0+aW5mbykgJiAweDFMKSA9PSAweDFMKSkpCiAg ICBjbGFzcy0+dmVyc2lvbiA9IHZlcnNpb247Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCAqCmNsYXNz X2dldF9nY19vYmplY3RfdHlwZSAoQ2xhc3MgY2xhc3MpCnsKICByZXR1cm4gKChjbGFzcykmJigo KChjbGFzcyktPmluZm8pICYgMHgxTCkgPT0gMHgxTCkpID8gY2xhc3MtPmdjX29iamVjdF90eXBl IDogKCh2b2lkICopMCk7Cn0KCgpleHRlcm4gdm9pZCBjbGFzc19pdmFyX3NldF9nY2ludmlzaWJs ZSAoQ2xhc3MgY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyKiBpdmFybmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEJPT0wgZ2NJbnZpc2libGUpOwoKc3RhdGljIGlubGluZSBJTVAKbWV0aG9kX2dldF9pbXAg KE1ldGhvZF90IG1ldGhvZCkKewogIHJldHVybiAobWV0aG9kICE9IChNZXRob2RfdCkwKSA/IG1l dGhvZC0+bWV0aG9kX2ltcCA6IChJTVApIDA7Cn0KCklNUCBnZXRfaW1wIChDbGFzcyBjbGFzcywg U0VMIHNlbCk7CgoKCgoKCgppZCBvYmplY3RfY29weSAoaWQgb2JqZWN0KTsKCmlkIG9iamVjdF9k aXNwb3NlIChpZCBvYmplY3QpOwoKc3RhdGljIGlubGluZSBDbGFzcwpvYmplY3RfZ2V0X2NsYXNz IChpZCBvYmplY3QpCnsKICByZXR1cm4gKChvYmplY3QgIT0gKGlkKTApCiAgICAgICAgICA/ICgo KG9iamVjdC0+Y2xhc3NfcG9pbnRlcikmJigoKChvYmplY3QtPmNsYXNzX3BvaW50ZXIpLT5pbmZv KSAmIDB4MUwpID09IDB4MUwpKQogICAgICAgICAgICAgPyBvYmplY3QtPmNsYXNzX3BvaW50ZXIK ICAgICAgICAgICAgIDogKCgob2JqZWN0LT5jbGFzc19wb2ludGVyKSYmKCgoKG9iamVjdC0+Y2xh c3NfcG9pbnRlciktPmluZm8pICYgMHgyTCkgPT0gMHgyTCkpCiAgICAgICAgICAgICAgICA/IChD bGFzcykgb2JqZWN0CiAgICAgICAgICAgICAgICA6IChDbGFzcykwKSkKICAgICAgICAgIDogKENs YXNzKTApOwp9CgpzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgpvYmplY3RfZ2V0X2NsYXNzX25h bWUgKGlkIG9iamVjdCkKewogIHJldHVybiAoKG9iamVjdCE9KGlkKTApID8gKCgob2JqZWN0LT5j bGFzc19wb2ludGVyKSYmKCgoKG9iamVjdC0+Y2xhc3NfcG9pbnRlciktPmluZm8pICYgMHgxTCkg PT0gMHgxTCkpCiAgICAgICAgICAgICAgICAgICAgICAgICA/IG9iamVjdC0+Y2xhc3NfcG9pbnRl ci0+bmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgOiAoKENsYXNzKSBvYmplY3QpLT5uYW1l KQogICAgICAgICAgICAgICAgICAgICAgIDoiTmlsIik7Cn0KCnN0YXRpYyBpbmxpbmUgTWV0YUNs YXNzCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgQ291bnRlci5taSAg ICAgICAgICAgICAgICAgICBQYWdlICAgNTAKCgpvYmplY3RfZ2V0X21ldGFfY2xhc3MoaWQgb2Jq ZWN0KQp7CiAgcmV0dXJuICgob2JqZWN0IT0oaWQpMCkgPyAoKChvYmplY3QtPmNsYXNzX3BvaW50 ZXIpJiYoKCgob2JqZWN0LT5jbGFzc19wb2ludGVyKS0+aW5mbykgJiAweDFMKSA9PSAweDFMKSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBvYmplY3QtPmNsYXNzX3BvaW50ZXItPmNsYXNz X3BvaW50ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoKChvYmplY3QtPmNsYXNzX3Bv aW50ZXIpJiYoKCgob2JqZWN0LT5jbGFzc19wb2ludGVyKS0+aW5mbykgJiAweDJMKSA9PSAweDJM KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBvYmplY3QtPmNsYXNzX3BvaW50ZXIK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOihDbGFzcykwKSkKICAgICAgICAgIDogKENs YXNzKTApOwp9CgpzdGF0aWMgaW5saW5lIENsYXNzCm9iamVjdF9nZXRfc3VwZXJfY2xhc3MgKGlk IG9iamVjdCkKewogIHJldHVybiAoKG9iamVjdCE9KGlkKTApID8gKCgob2JqZWN0LT5jbGFzc19w b2ludGVyKSYmKCgoKG9iamVjdC0+Y2xhc3NfcG9pbnRlciktPmluZm8pICYgMHgxTCkgPT0gMHgx TCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgID8gb2JqZWN0LT5jbGFzc19wb2ludGVyLT5z dXBlcl9jbGFzcwogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICgoKG9iamVjdC0+Y2xhc3Nf cG9pbnRlcikmJigoKChvYmplY3QtPmNsYXNzX3BvaW50ZXIpLT5pbmZvKSAmIDB4MkwpID09IDB4 MkwpKQogICAgICAgICAgICAgICAgICAgICAgICAgICA/KChDbGFzcykgb2JqZWN0KS0+c3VwZXJf Y2xhc3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoQ2xhc3MpMCkpCiAgICAgICAg ICA6IChDbGFzcykwKTsKfQoKc3RhdGljIGlubGluZSBCT09MCm9iamVjdF9pc19jbGFzcyAoaWQg b2JqZWN0KQp7CiAgcmV0dXJuICgoKENsYXNzKSBvYmplY3QpJiYoKCgoKENsYXNzKSBvYmplY3Qp LT5pbmZvKSAmIDB4MUwpID09IDB4MUwpKTsKfQoKc3RhdGljIGlubGluZSBCT09MCm9iamVjdF9p c19pbnN0YW5jZShpZCBvYmplY3QpCnsKICByZXR1cm4gKG9iamVjdCAhPSAoaWQpMCkgJiYgKChv YmplY3QtPmNsYXNzX3BvaW50ZXIpJiYoKCgob2JqZWN0LT5jbGFzc19wb2ludGVyKS0+aW5mbykg JiAweDFMKSA9PSAweDFMKSk7Cn0KCnN0YXRpYyBpbmxpbmUgQk9PTApvYmplY3RfaXNfbWV0YV9j bGFzcyAoaWQgb2JqZWN0KQp7CiAgcmV0dXJuICgoKENsYXNzKSBvYmplY3QpJiYoKCgoKENsYXNz KSBvYmplY3QpLT5pbmZvKSAmIDB4MkwpID09IDB4MkwpKTsKfQoKc3RydWN0IHNhcnJheSogb2Jq Y19nZXRfdW5pbnN0YWxsZWRfZHRhYmxlICh2b2lkKTsKIyAxNCAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL2RlZm9iai9EZWZDbGFzcy5oIiAyCgoKCgp0eXBlZGVmIHN0cnVjdCBjbGFzc0RhdGEg KmNsYXNzRGF0YV90Owp0eXBlZGVmIHN0cnVjdCBtZXRob2REZWZzICptZXRob2REZWZzX3Q7CgoK CgpAaW50ZXJmYWNlIENsYXNzX3M6IE9iamVjdAp7CkBwdWJsaWMKICBDbGFzc19zICpzdXBlcmNs YXNzOwogIGNvbnN0IGNoYXIgKm5hbWU7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAg ICAgICAgICAgQ291bnRlci5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgNTEKCgogIGxvbmcg dmVyc2lvbjsKICB1bnNpZ25lZCBsb25nIGluZm87CiAgbG9uZyBpbnN0YW5jZVNpemU7CiAgdm9p ZCAqaXZhckxpc3Q7CiAgdm9pZCAqbWV0aG9kTGlzdDsKICBzdHJ1Y3Qgc2FycmF5ICpkdGFibGU7 Cn0KCgpAZW5kCgoKCgpleHRlcm4gY2xhc3NEYXRhX3QgX29ial9nZXRDbGFzc0RhdGEgKENsYXNz X3MgKmNsYXNzKTsKCgoKCnZvaWQgX29ial9pbml0TWV0aG9kSW50ZXJmYWNlcyAoQ2xhc3NfcyAq Y2xhc3MpOwoKCgoKCgoKQGludGVyZmFjZSBDcmVhdGVkQ2xhc3NfczogQ2xhc3Nfcwp7CkBwdWJs aWMKICBDbGFzc19zICpkZWZpbmluZ0NsYXNzOwogIGlkIG1ldGFvYmplY3RzOwp9CgorIGNyZWF0 ZUJlZ2luOiBhWm9uZTsKLSBzZXROYW1lOiAoY29uc3QgY2hhciAqKWNsYXNzTmFtZTsKLSBzZXRD bGFzczogYUNsYXNzOwotIHNldFN1cGVyY2xhc3M6IGFDbGFzczsKLSBzZXREZWZpbmluZ0NsYXNz OiBhQ2xhc3M7Ci0gYXQ6IChTRUwpYVNlbCBhZGRNZXRob2Q6IChJTVApYU1ldGhvZDsKLSBsaXNw SW5DcmVhdGU6IGV4cHI7Ci0gaGRmNUluQ3JlYXRlOiBleHByOwotIGNyZWF0ZUVuZDsKLSAodm9p ZCloZGY1T3V0U2hhbGxvdzogc3RyZWFtOwotICh2b2lkKWxpc3BPdXRTaGFsbG93OiBzdHJlYW07 CkBlbmQKCkBpbnRlcmZhY2UgQmVoYXZpb3JQaGFzZV9zOiBDcmVhdGVkQ2xhc3Nfcwp7CkBwdWJs aWMKICBDbGFzc19zICpuZXh0UGhhc2U7CiAgaWQgZmlsbGVyOwogIGlkIG1vcmVmaWxsZXI7Cn0K Ci0gKHZvaWQpc2V0TmV4dFBoYXNlOiBhQmVoYXZpb3JQaGFzZTsKCgoKCgoKCjIwMDEtMDgtMjQg MDE6MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAgICAgICAgICAgICAgIFBhZ2Ug ICA1MgoKCkBlbmQKCgoKCgoKCnN0cnVjdCBjbGFzc0RhdGEgewogIGlkICpjbGFzc0lEOwogIGlk IG93bmVyOwogIGlkIHR5cGVJbXBsZW1lbnRlZDsKICBCZWhhdmlvclBoYXNlX3MgKmluaXRpYWxQ aGFzZTsKICBpZCBtZXRhb2JqZWN0czsKfTsKCgoKCnN0cnVjdCBtZXRob2REZWZzIHsKICBtZXRo b2REZWZzX3QgbmV4dDsKICBpZCBpbnRlcmZhY2VJRDsKICBNZXRob2RfdCBmaXJzdEVudHJ5Owog IGludCBjb3VudDsKfTsKIyAxMyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9DdXN0 b21pemUuaCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmovRGVmT2JqZWN0 LmgiIDEKIyAxMyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9EZWZPYmplY3QuaCIK IyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiIDEKIyAxOCAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgp0eXBlZGVmIGVudW0ge2ZjYWxsX3R5cGVfdm9pZCA9 IDAsCiAgICAgICAgICAgICAgZmNhbGxfdHlwZV9ib29sZWFuLAogICAgICAgICAgICAgIGZjYWxs X3R5cGVfdWNoYXIsIGZjYWxsX3R5cGVfc2NoYXIsCiAgICAgICAgICAgICAgZmNhbGxfdHlwZV91 c2hvcnQsIGZjYWxsX3R5cGVfc3Nob3J0LAogICAgICAgICAgICAgIGZjYWxsX3R5cGVfdWludCwg ZmNhbGxfdHlwZV9zaW50LAogICAgICAgICAgICAgIGZjYWxsX3R5cGVfdWxvbmcsIGZjYWxsX3R5 cGVfc2xvbmcsCiAgICAgICAgICAgICAgZmNhbGxfdHlwZV91bG9uZ2xvbmcsIGZjYWxsX3R5cGVf c2xvbmdsb25nLAogICAgICAgICAgICAgIGZjYWxsX3R5cGVfZmxvYXQsIGZjYWxsX3R5cGVfZG91 YmxlLCBmY2FsbF90eXBlX2xvbmdfZG91YmxlLAogICAgICAgICAgICAgIGZjYWxsX3R5cGVfb2Jq ZWN0LCBmY2FsbF90eXBlX2NsYXNzLAogICAgICAgICAgICAgIGZjYWxsX3R5cGVfc3RyaW5nLCBm Y2FsbF90eXBlX3NlbGVjdG9yLAogICAgICAgICAgICAgIGZjYWxsX3R5cGVfam9iamVjdCwgZmNh bGxfdHlwZV9qc3RyaW5nLCBmY2FsbF90eXBlX2pzZWxlY3RvciwKICAgICAgICAgICAgICBmY2Fs bF90eXBlX2lpZAogICAgICAgICAgICAgIH0gZmNhbGxfdHlwZV90OwoKIyAxICIvdXNyL2xvY2Fs L3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLmgiIDEKIyAzMyAiL3Vzci9sb2NhbC9zd2FybS9pbmNs dWRlL2RlZm9iai5oIiAyCgp0eXBlZGVmIHVuaW9uIHsKICBpZCBvYmplY3Q7CiAgU0VMIHNlbGVj dG9yOwogIENsYXNzIF9jbGFzczsKICBjb25zdCBjaGFyICpzdHJpbmc7CiAgQk9PTCBib29sZWFu OwogIGNoYXIgc2NoYXI7CiAgdW5zaWduZWQgY2hhciB1Y2hhcjsKICBzaG9ydCBzc2hvcnQ7CgoK CgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgQ291bnRlci5taSAgICAgICAg ICAgICAgICAgICBQYWdlICAgNTMKCgogIHVuc2lnbmVkIHNob3J0IHVzaG9ydDsKICBpbnQgc2lu dDsKICB1bnNpZ25lZCBpbnQgdWludDsKICBsb25nIHNsb25nOwogIHVuc2lnbmVkIGxvbmcgdWxv bmc7CiAgbG9uZyBsb25nIHNsb25nbG9uZzsKICB1bnNpZ25lZCBsb25nIGxvbmcgdWxvbmdsb25n OwogIGZsb2F0IF9mbG9hdDsKICBkb3VibGUgX2RvdWJsZTsKICBsb25nIGRvdWJsZSBfbG9uZ19k b3VibGU7CiAgdm9pZCAqaWlkOwp9IHR5cGVzX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgZmNhbGxf dHlwZV90IHR5cGU7CiAgdHlwZXNfdCB2YWw7Cn0gdmFsX3Q7CgoKCgoKCiMgMSAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL2RlZm9iai9kZWZ0eXBlLmgiIDEKIyAyMSAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL2RlZm9iai9kZWZ0eXBlLmgiCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRl L29iamMvT2JqZWN0LmgiIDEKIyAyMiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9k ZWZ0eXBlLmgiIDIKCgoKCgoKQHByb3RvY29sIENSRUFUQUJMRQpAZW5kCgoKQHByb3RvY29sIFJF VFVSTkFCTEUKQGVuZAojIDQ2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL2RlZnR5 cGUuaCIKdHlwZWRlZiB2b2lkICgqbm90aWZ5X3QpKCBpZCBvYmplY3QsIGlkIHJlYWxsb2NBZGRy ZXNzLCB2b2lkICphcmcgKTsKCgoKCgoKdHlwZWRlZiB2b2lkICpyZWZfdDsKCgoKCnR5cGVkZWYg dm9pZCAoKmZ1bmNfdCkoIHZvaWQgKTsKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAg ICAgICAgICAgICBDb3VudGVyLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA1NAoKCgp0eXBl ZGVmIGlkICgqZml4dXBSb3V0aW5lX3QpKCB2b2lkICpmaXh1cENvbnRleHQsIGlkIGZpeHVwT2Jq ZWN0ICk7CnR5cGVkZWYgdm9pZCAoKmZpeHVwX3QpKCBmaXh1cFJvdXRpbmVfdCBmaXh1cFJvdXRp bmUsIHZvaWQgKmZpeHVwQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBpZCBmaXh1 cEFyZ3VtZW50ICk7CiMgNjcgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIgMgoj IDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9leHRlcm52YXIuaCIgMQojIDY4ICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiIDIKIyA3NyAiL3Vzci9sb2NhbC9zd2FybS9pbmNs dWRlL2RlZm9iai5oIgpAcHJvdG9jb2wgR2V0TmFtZQojIDg5ICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvZGVmb2JqLmgiCi0gX0lfVXNpbmc7Ci0gKGNvbnN0IGNoYXIgKilnZXROYW1lOwpAZW5k CgpAcHJvdG9jb2wgRGVmaW5lZE9iamVjdCA8R2V0TmFtZT4KIyAxMDggIi91c3IvbG9jYWwvc3dh cm0vaW5jbHVkZS9kZWZvYmouaCIKLSBfSV9Vc2luZzsKIyAxMTcgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9kZWZvYmouaCIKLSAoQk9PTClyZXNwb25kc1RvOiAoU0VMKWFTZWw7CgorIChCT09M KWNvbmZvcm1zVG86IChQcm90b2NvbCAqKXByb3RvY29sOwotIChCT09MKWNvbmZvcm1zVG86IChQ cm90b2NvbCAqKXByb3RvY29sOwoKCgotIGdldENsYXNzOwoKCi0gKGNvbnN0IGNoYXIgKilnZXRU eXBlTmFtZTsKCgoKLSAocmVmX3QpYWRkUmVmOiAobm90aWZ5X3Qpbm90aWZ5RnVuY3Rpb24gd2l0 aEFyZ3VtZW50OiAodm9pZCAqKWFyZzsKCgotICh2b2lkKXJlbW92ZVJlZjogKHJlZl90KXJlZlZh bDsKCgotIChpbnQpY29tcGFyZTogYW5PYmplY3Q7CgoKLSBwZXJmb3JtOiAoU0VMKWFTZWw7CgoK LSBwZXJmb3JtOiAoU0VMKWFTZWwgd2l0aDogYW5PYmplY3QxOwoKCi0gcGVyZm9ybTogKFNFTClh U2VsIHdpdGg6IGFuT2JqZWN0MSB3aXRoOiBhbk9iajI7CgoKLSBwZXJmb3JtOiAoU0VMKWFTZWwg d2l0aDogYW5PYmplY3QxIHdpdGg6IGFuT2JqMiB3aXRoOiBhbk9iajM7CgoKCi0gKHZvaWQpc2V0 RGlzcGxheU5hbWU6IChjb25zdCBjaGFyICopZGlzcGxheU5hbWU7CgoKCgoKCgoKMjAwMS0wOC0y NCAwMToyMSAgICAgICAgICAgICAgICAgIENvdW50ZXIubWkgICAgICAgICAgICAgICAgICAgUGFn ZSAgIDU1CgoKCgoKLSAoY29uc3QgY2hhciAqKWdldERpc3BsYXlOYW1lOwojIDE2OCAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgotICh2b2lkKWRlc2NyaWJlOiBvdXRwdXRDaGFy U3RyZWFtOwoKCgotICh2b2lkKWRlc2NyaWJlSUQ6IG91dHB1dENoYXJTdHJlYW07CgoKLSAodm9p ZCl4cHJpbnQ7CgoKLSAodm9pZCl4cHJpbnRpZDsKCgotICh2b2lkKXhmcHJpbnQ7CgoKLSAodm9p ZCl4ZnByaW50aWQ7CgoKLSBnZXRab25lOwpAZW5kCgpAcHJvdG9jb2wgQ3VzdG9taXplCiMgMjIz ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCi0gX0lfQ3JlYXRpbmc7CiMgMjM5 ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCisgY3VzdG9taXplQmVnaW46IGFa b25lOwoKCi0gY3VzdG9taXplRW5kOwojIDI2NSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2Rl Zm9iai5oIgotIGN1c3RvbWl6ZUNvcHk6IGFab25lOwpAZW5kCgpAcHJvdG9jb2wgQ3JlYXRlIDxE ZWZpbmVkT2JqZWN0LCBDdXN0b21pemU+CiMgMzE5ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv ZGVmb2JqLmgiCi0gX0lfQ3JlYXRpbmc7CiMgMzM1ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv ZGVmb2JqLmgiCisgY3JlYXRlOiBhWm9uZTsKCgoKCgoKCisgY3JlYXRlQmVnaW46IGFab25lOwoj IDM3MSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgotIGNyZWF0ZUVuZDsKQGVu ZAoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1pICAg ICAgICAgICAgICAgICAgIFBhZ2UgICA1NgoKCkBwcm90b2NvbCBEcm9wCiMgNDAxICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCi0gX0lfVXNpbmc7Ci0gKHZvaWQpZHJvcDsKQGVu ZAoKQHByb3RvY29sIFpvbmUgPENyZWF0ZSwgRHJvcCwgQ1JFQVRBQkxFPgojIDQ1NiAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgotIF9JX0NyZWF0aW5nOwoKCgoKCgoKLSAodm9p ZClzZXRQYWdlU2l6ZTogKHNpemVfdClwYWdlU2l6ZTsKCi0gX0lfVXNpbmc7Ci0gKHNpemVfdCln ZXRQYWdlU2l6ZTsKCgoKCgoKLSBhbGxvY0lWYXJzOiAoQ2xhc3MpYUNsYXNzOwoKCgoKCgotIGNv cHlJVmFyczogYW5PYmplY3Q7CgoKCgoKCgotICh2b2lkKWZyZWVJVmFyczogYW5PYmplY3Q7CiMg NDk5ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCi0gYWxsb2NJVmFyc0NvbXBv bmVudDogKENsYXNzKWFDbGFzczsKCgoKLSBjb3B5SVZhcnNDb21wb25lbnQ6IGFuT2JqZWN0OwoK Ci0gKHZvaWQpZnJlZUlWYXJzQ29tcG9uZW50OiBhbk9iamVjdDsKCgoKCgoKCgoKCgoKMjAwMS0w OC0yNCAwMToyMSAgICAgICAgICAgICAgICAgIENvdW50ZXIubWkgICAgICAgICAgICAgICAgICAg UGFnZSAgIDU3CgoKCi0gZ2V0Q29tcG9uZW50Wm9uZTsKCgoKCgotICh2b2lkICopYWxsb2M6IChz aXplX3Qpc2l6ZTsKCgoKCgoKLSAodm9pZClmcmVlOiAodm9pZCAqKWFCbG9jazsKCgoKCi0gKHZv aWQgKilhbGxvY0Jsb2NrOiAoc2l6ZV90KXNpemU7CgoKCi0gKHZvaWQpZnJlZUJsb2NrOiAodm9p ZCAqKWFCbG9jayBibG9ja1NpemU6IChzaXplX3Qpc2l6ZTsKIyA1NDUgIi91c3IvbG9jYWwvc3dh cm0vaW5jbHVkZS9kZWZvYmouaCIKLSBnZXRQb3B1bGF0aW9uOwoKCi0gKHZvaWQpZGVzY3JpYmVG b3JFYWNoOiBvdXRwdXRDaGFyU3RyZWFtOwoKCi0gKHZvaWQpZGVzY3JpYmVGb3JFYWNoSUQ6IG91 dHB1dENoYXJTdHJlYW07CkBlbmQKCkBwcm90b2NvbCBEZWZpbmVkQ2xhc3MgPERlZmluZWRPYmpl Y3Q+CgoKCi0gX0lfVXNpbmc7CisgZ2V0U3VwZXJjbGFzczsKKyAoQk9PTClpc1N1YmNsYXNzOiBh Q2xhc3M7CgorICh2b2lkKXNldFR5cGVJbXBsZW1lbnRlZDogYVR5cGU7CisgZ2V0VHlwZUltcGxl bWVudGVkOwoKKyAoSU1QKWdldE1ldGhvZEZvcjogKFNFTClhU2VsOwpAZW5kCgpAcHJvdG9jb2wg Q3JlYXRlZENsYXNzIDxDcmVhdGUsIERlZmluZWRDbGFzcz4KCgoKCi0gX0lfQ3JlYXRpbmc7Ci0g c2V0TmFtZTogKGNvbnN0IGNoYXIgKiluYW1lOwotIHNldENsYXNzOiBhQ2xhc3M7CgoKCgoKCgoy MDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgQ291bnRlci5taSAgICAgICAgICAgICAg ICAgICBQYWdlICAgNTgKCgotIHNldFN1cGVyY2xhc3M6IGFDbGFzczsKLSBzZXREZWZpbmluZ0Ns YXNzOiBhQ2xhc3M7Ci0gYXQ6IChTRUwpYVNlbCBhZGRNZXRob2Q6IChJTVApYU1ldGhvZDsKLSBs aXNwSW5DcmVhdGU6IGV4cHI7Ci0gaGRmNUluQ3JlYXRlOiBoZGY1T2JqOwotICh2b2lkKWxpc3BP dXRTaGFsbG93OiBzdHJlYW07Ci0gKHZvaWQpaGRmNU91dFNoYWxsb3c6IGhkZjVPYmo7Ci0gKHZv aWQpdXBkYXRlQXJjaGl2ZXI6IGFyY2hpdmVyOwotIF9JX1VzaW5nOwotIGdldERlZmluaW5nQ2xh c3M7CkBlbmQKCkBwcm90b2NvbCBCZWhhdmlvclBoYXNlIDxDcmVhdGVkQ2xhc3M+CgoKCgotIF9J X0NyZWF0aW5nOwotICh2b2lkKXNldE5leHRQaGFzZTogYUNsYXNzOwoKLSBfSV9Vc2luZzsKLSBn ZXROZXh0UGhhc2U7CkBlbmQKCkBwcm90b2NvbCBDb3B5CiMgNjIwICIvdXNyL2xvY2FsL3N3YXJt L2luY2x1ZGUvZGVmb2JqLmgiCi0gX0lfVXNpbmc7Ci0gY29weTogKGlkIDxab25lPilhWm9uZTsK QGVuZAoKCgoKCkBwcm90b2NvbCBHZXRPd25lcgojIDY0NyAiL3Vzci9sb2NhbC9zd2FybS9pbmNs dWRlL2RlZm9iai5oIgotIF9JX1VzaW5nOwotIGdldE93bmVyOwpAZW5kCgpAcHJvdG9jb2wgU2V0 SW5pdGlhbFZhbHVlCiMgNjcyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCi0g X0lfQ3JlYXRpbmc7CgoKCgoKCgotICh2b2lkKXNldEluaXRpYWxWYWx1ZTogaW5pdGlhbFZhbHVl OwpAZW5kCgpAcHJvdG9jb2wgU3ltYm9sIDxDcmVhdGUsIEdldE5hbWUsIENSRUFUQUJMRT4KIyA3 MDYgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIKLSBfSV9DcmVhdGluZzsKCgoK CgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAgICAg ICAgICAgICAgIFBhZ2UgICA1OQoKCgoKCisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNldE5h bWU6IChjb25zdCBjaGFyICopbmFtZTsKCgoKQGVuZAoKQHByb3RvY29sIEV2ZW50VHlwZSA8U3lt Ym9sPgoKCgoKLSBfSV9Vc2luZzsKCi0gKHZvaWQpcmFpc2VFdmVudDsKCgoKLSAodm9pZClyYWlz ZUV2ZW50OiAoY29uc3Qgdm9pZCAqKWV2ZW50RGF0YSwgLi4uOwoKCgoKCkBlbmQKCgpAcHJvdG9j b2wgV2FybmluZyA8RXZlbnRUeXBlLCBDUkVBVEFCTEU+CgoKCgotIF9JX1VzaW5nOwoKLSAodm9p ZClzZXRNZXNzYWdlU3RyaW5nOiAoY29uc3QgY2hhciAqKW1lc3NhZ2VTdHJpbmc7CgoKLSAoY29u c3QgY2hhciAqKWdldE1lc3NhZ2VTdHJpbmc7CgpleHRlcm4gaWQgPFdhcm5pbmc+CiAgV2Fybmlu Z01lc3NhZ2UsCiAgUmVzb3VyY2VBdmFpbGFiaWxpdHksCiAgTGlicmFyeVVzYWdlLAogIERlZmF1 bHRBc3N1bWVkLAogIE9ic29sZXRlRmVhdHVyZSwKICBPYnNvbGV0ZU1lc3NhZ2UsCiAgU2F2ZVdh cm5pbmc7CgoKCgoKQGVuZAoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAg ICBDb3VudGVyLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA2MAoKCkBwcm90b2NvbCBFcnJv ciA8V2FybmluZywgQ1JFQVRBQkxFPgoKCgoKZXh0ZXJuIGlkIDxFcnJvcj4KICBTb3VyY2VNZXNz YWdlLAogIE5vdEltcGxlbWVudGVkLAogIFN1YmNsYXNzTXVzdEltcGxlbWVudCwKICBJbnZhbGlk Q29tYmluYXRpb24sCiAgSW52YWxpZE9wZXJhdGlvbiwKICBJbnZhbGlkQXJndW1lbnQsCiAgQ3Jl YXRlU3ViY2xhc3NpbmcsCiAgQ3JlYXRlVXNhZ2UsCiAgT3V0T2ZNZW1vcnksCiAgSW52YWxpZEFs bG9jU2l6ZSwKICBJbnRlcm5hbEVycm9yLAogIEJsb2NrZWRPYmplY3RBbGxvYywKICBCbG9ja2Vk T2JqZWN0VXNhZ2UsCiAgUHJvdG9jb2xWaW9sYXRpb24sCiAgTG9hZEVycm9yLAogIFNhdmVFcnJv cjsKCgoKCgpAZW5kCgpAcHJvdG9jb2wgQXJndW1lbnRzIDxDcmVhdGUsIERyb3AsIENSRUFUQUJM RT4KIyA4NzYgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIKLSBfSV9DcmVhdGlu ZzsKLSBzZXRBcmdjOiAodW5zaWduZWQpY291bnQgQXJndjogKGNvbnN0IGNoYXIgKiopdGhlQXJn djsKLSBzZXRBcHBOYW1lOiAoY29uc3QgY2hhciAqKWFwcE5hbWU7Ci0gc2V0QXBwTW9kZVN0cmlu ZzogKGNvbnN0IGNoYXIgKilhcHBNb2RlU3RyaW5nOwotIHNldE9wdGlvbkZ1bmM6IChpbnQgKCop IChpbnQsIGNvbnN0IGNoYXIgKikpb3B0aW9uRnVuYzsKLSBzZXRCdWdBZGRyZXNzOiAoY29uc3Qg Y2hhciAqKWJ1Z0FkZHJlc3M7Ci0gc2V0VmVyc2lvbjogKGNvbnN0IGNoYXIgKil2ZXJzaW9uOwot IGFkZE9wdGlvbnM6IChzdHJ1Y3QgYXJncF9vcHRpb24gKilvcHRpb25zOwojIDkwMyAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgotICh2b2lkKWFkZE9wdGlvbjogKGNvbnN0IGNo YXIgKiluYW1lIGtleTogKGludClrZXkgYXJnOiAoY29uc3QgY2hhciAqKWFyZyBmbGFnczogKGlu dClmbGFncyBkb2M6IChjb25zdCBjaGFyICopZG9jIGdyb3VwOiAoaW50KWdyb3VwOwoKKyBjcmVh dGVBcmdjOiAoaW50KWFyZ2MgQXJndjogKGNvbnN0IGNoYXIgKiopYXJndiBhcHBOYW1lOiAoY29u c3QgY2hhciAqKWFwcE5hbWUgdmVyc2lvbjogKGNvbnN0IGNoYXIgKil2ZXJzaW9uIGJ1Z0FkZHJl c3M6IChjb25zdCBjaGFyICopYnVnQWRkcmVzcyBvcHRpb25zOiAoc3RydWN0IGFyZ3Bfb3B0aW9u ICopb3B0aW9ucyBvcHRpb25GdW5jOiAoaW50ICgqKSAoaW50LCBjb25zdCBjaGFyICopKW9wdGlv bkZ1bmMgaW5oaWJpdEV4ZWN1dGFibGVTZWFyY2hGbGFnOiAoQk9PTClpbmhpYml0RXhlY3V0YWJs ZVNlYXJjaEZsYWc7CgoKLSAoaW50KXBhcnNlS2V5OiAoaW50KWtleSBhcmc6IChjb25zdCBjaGFy ICopYXJnOwotIF9JX1NldHRpbmc7Ci0gc2V0SW5oaWJpdEFyY2hpdmVyTG9hZEZsYWc6IChCT09M KWluaGliaXRBcmNoaXZlckxvYWRGbGFnOwotIHNldEluaGliaXRFeGVjdXRhYmxlU2VhcmNoRmxh ZzogKEJPT0wpdGhlSW5oaWJpdEV4ZWN1dGFibGVTZWFyY2hGbGFnOwotIHNldEJhdGNoTW9kZUZs YWc6IChCT09MKWJhdGNoTW9kZUZsYWc7Ci0gc2V0VmFyeVNlZWRGbGFnOiAoQk9PTCl2YXJ5U2Vl ZEZsYWc7Ci0gc2V0VmVyYm9zZUZsYWc6IChCT09MKXZlcmJvc2VGbGFnOwoKCgotIHNldERlZmF1 bHRBcHBDb25maWdQYXRoOiAoY29uc3QgY2hhciAqKXBhdGg7CgoKCgoKCgoyMDAxLTA4LTI0IDAx OjIxICAgICAgICAgICAgICAgICAgQ291bnRlci5taSAgICAgICAgICAgICAgICAgICBQYWdlICAg NjEKCgoKCi0gc2V0RGVmYXVsdEFwcERhdGFQYXRoOiAoY29uc3QgY2hhciAqKXBhdGg7Ci0gc2V0 Rml4ZWRTZWVkOiAodW5zaWduZWQpc2VlZDsKCgotIF9JX1VzaW5nOwotIChCT09MKWdldEJhdGNo TW9kZUZsYWc7Ci0gKEJPT0wpZ2V0VmFyeVNlZWRGbGFnOwotIChCT09MKWdldEZpeGVkU2VlZEZs YWc7Ci0gKHVuc2lnbmVkKWdldEZpeGVkU2VlZDsKLSAoQk9PTClnZXRWZXJib3NlRmxhZzsKLSAo Y29uc3QgY2hhciAqKWdldEFwcE5hbWU7Ci0gKGNvbnN0IGNoYXIgKilnZXRBcHBNb2RlU3RyaW5n OwotIChpbnQpZ2V0QXJnYzsKLSAoaW50KWdldExhc3RBcmdJbmRleDsKLSAoY29uc3QgY2hhciAq KilnZXRBcmd2OwotIChjb25zdCBjaGFyICopZ2V0RXhlY3V0YWJsZVBhdGg7Ci0gKGNvbnN0IGNo YXIgKilnZXRTd2FybUhvbWU7Ci0gKGNvbnN0IGNoYXIgKilnZXRDb25maWdQYXRoOwotIChjb25z dCBjaGFyICopZ2V0RGF0YVBhdGg7CgotIChjb25zdCBjaGFyICopZ2V0QXBwRGF0YVBhdGg7CgoK LSAoY29uc3QgY2hhciAqKWdldEFwcENvbmZpZ1BhdGg7Ci0gKEJPT0wpZ2V0U2hvd0N1cnJlbnRU aW1lRmxhZzsKLSAoQk9PTClnZXRJbmhpYml0QXJjaGl2ZXJMb2FkRmxhZzsKCkBlbmQKCkBwcm90 b2NvbCBBcmNoaXZlciA8Q3JlYXRlLCBEcm9wLCBSRVRVUk5BQkxFPgoKCi0gX0lfQ3JlYXRpbmc7 CgoKLSBzZXRJbmhpYml0TG9hZEZsYWc6IChCT09MKWluaGliaXRMb2FkRmxhZzsKCgotIHNldFBh dGg6IChjb25zdCBjaGFyICopcGF0aDsKCgoKLSBzZXRTeXN0ZW1BcmNoaXZlckZsYWc6IChCT09M KXN5c3RlbUFyY2hpdmVyRmxhZzsKCgotIHNldERlZmF1bHRQYXRoOwoKCi0gc2V0RGVmYXVsdEFw cFBhdGg7Ci0gX0lfVXNpbmc7Ci0gKHZvaWQpcmVnaXN0ZXJDbGllbnQ6IGNsaWVudDsKLSAodm9p ZCl1bnJlZ2lzdGVyQ2xpZW50OiBjbGllbnQ7CgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAg ICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA2MgoKCgot ICh2b2lkKXB1dERlZXA6IChjb25zdCBjaGFyICopa2V5IG9iamVjdDogb2JqZWN0OwoKCi0gKHZv aWQpcHV0U2hhbGxvdzogKGNvbnN0IGNoYXIgKilrZXkgb2JqZWN0OiBvYmplY3Q7CgoKLSBnZXRP YmplY3Q6IChjb25zdCBjaGFyICopa2V5OwoKCi0gZ2V0V2l0aFpvbmU6IChpZCA8Wm9uZT4pYVpv bmUga2V5OiAoY29uc3QgY2hhciAqKWtleTsKCgoKLSAodm9pZClzeW5jOwpAZW5kCgpAcHJvdG9j b2wgTGlzcEFyY2hpdmVyIDxBcmNoaXZlciwgQ1JFQVRBQkxFPgoKCgoKCi0gX0lfQ3JlYXRpbmc7 CgoKKyBjcmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUgc2V0UGF0aDogKGNvbnN0IGNoYXIgKilwYXRo OwoKLSBfSV9TZXR0aW5nOwotIF9JX1VzaW5nOwpAZW5kCgpAcHJvdG9jb2wgSERGNUFyY2hpdmVy IDxBcmNoaXZlciwgQ1JFQVRBQkxFPgoKCgoKCi0gX0lfQ3JlYXRpbmc7CgoKKyBjcmVhdGU6IChp ZCA8Wm9uZT4pYVpvbmUgc2V0UGF0aDogKGNvbnN0IGNoYXIgKilwYXRoOwoKLSBfSV9TZXR0aW5n OwotIF9JX1VzaW5nOwpAZW5kCgpAcHJvdG9jb2wgSERGNSA8Q3JlYXRlLCBEcm9wLCBDUkVBVEFC TEU+CgoKLSBfSV9DcmVhdGluZzsKLSBzZXRXcml0ZUZsYWc6IChCT09MKXdyaXRlRmxhZzsKLSBz ZXREYXRhc2V0RmxhZzogKEJPT0wpZGF0YXNldEZsYWc7Ci0gc2V0RXh0ZW5zaWJsZVZlY3RvclR5 cGU6IChmY2FsbF90eXBlX3QpdHlwZTsKLSBzZXRFeHRlbnNpYmxlRG91YmxlVmVjdG9yOwotIHNl dFBhcmVudDogcGFyZW50OwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAg IENvdW50ZXIubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDYzCgoKLSBzZXRDb21wb3VuZFR5 cGU6IGNvbXBvdW5kVHlwZTsKLSBzZXRDb3VudDogKHVuc2lnbmVkKWNvdW50OwotIF9JX1NldHRp bmc7CgoKCi0gc2V0TmFtZTogKGNvbnN0IGNoYXIgKiluYW1lOwotIHNldEJhc2VUeXBlT2JqZWN0 OiBiYXNlVHlwZU9iamVjdDsKLSBfSV9Vc2luZzsKLSAodm9pZClpdGVyYXRlOiAoaW50ICgqKSAo aWQgPEhERjU+aGRmNU9iaikpaXRlcmF0ZUZ1bmM7Ci0gKHZvaWQpaXRlcmF0ZTogKGludCAoKikg KGlkIDxIREY1PmhkZjVPYmopKWl0ZXJhdGVGdW5jIGRyb3A6IChCT09MKWRyb3BGbGFnOwotIChC T09MKWdldERhdGFzZXRGbGFnOwotIChCT09MKWdldFdyaXRlRmxhZzsKLSAoc2l6ZV90KWdldERh dGFzZXRSYW5rOwotIChzaXplX3QpZ2V0RGF0YXNldERpbWVuc2lvbjogKHVuc2lnbmVkKWRpbU51 bWJlcjsKLSAodW5zaWduZWQpZ2V0Q291bnQ7Ci0gZ2V0Q29tcG91bmRUeXBlOwotIGdldENsYXNz OwotICh2b2lkKWFzc2lnbkl2YXI6IG9iajsKCi0gKEJPT0wpY2hlY2tOYW1lOiAoY29uc3QgY2hh ciAqKW5hbWU7Ci0gKEJPT0wpY2hlY2tEYXRhc2V0TmFtZTogKGNvbnN0IGNoYXIgKilkYXRhc2V0 TmFtZTsKCi0gKHZvaWQpbG9hZERhdGFzZXQ6ICh2b2lkICopcHRyOwotICh2b2lkKXN0b3JlQXNE YXRhc2V0OiAoY29uc3QgY2hhciAqKW5hbWUgdHlwZU5hbWU6IChjb25zdCBjaGFyICopdHlwZU5h bWUgdHlwZTogKGZjYWxsX3R5cGVfdCl0eXBlIHJhbms6ICh1bnNpZ25lZClyYW5rIGRpbXM6ICh1 bnNpZ25lZCAqKWRpbXMgcHRyOiAodm9pZCAqKXB0cjsKCi0gKHZvaWQpYWRkRG91YmxlVG9WZWN0 b3I6IChkb3VibGUpdmFsOwoKLSAodm9pZClzdG9yZVR5cGVOYW1lOiAoY29uc3QgY2hhciAqKXR5 cGVOYW1lOwotICh2b2lkKXN0b3JlQ29tcG9uZW50VHlwZU5hbWU6IChjb25zdCBjaGFyICopdHlw ZU5hbWU7Ci0gKHZvaWQpc2hhbGxvd0xvYWRPYmplY3Q6IG9iajsKLSAodm9pZClzaGFsbG93U3Rv cmVPYmplY3Q6IG9iajsKLSAodm9pZCluYW1lUmVjb3JkOiAodW5zaWduZWQpcmVjb3JkTnVtYmVy IG5hbWU6IChjb25zdCBjaGFyICopcmVjb3JkTmFtZTsKLSAodm9pZCludW1iZXJSZWNvcmQ6ICh1 bnNpZ25lZClyZWNvcmROdW1iZXI7Ci0gKHZvaWQpc2VsZWN0UmVjb3JkOiAodW5zaWduZWQpcmVj b3JkTnVtYmVyOwoKLSAoY29uc3QgY2hhciAqKilyZWFkUm93TmFtZXM7Ci0gKHZvaWQpd3JpdGVS b3dOYW1lczsKLSAodm9pZCl3cml0ZUxldmVsczsKCi0gKHZvaWQpc3RvcmVBdHRyaWJ1dGU6IChj b25zdCBjaGFyICopYXR0cmlidXRlTmFtZSB2YWx1ZTogKGNvbnN0IGNoYXIgKil2YWx1ZVN0cmlu ZzsKLSAodm9pZClpdGVyYXRlQXR0cmlidXRlczogKGludCAoKikgKGNvbnN0IGNoYXIgKmtleSwg Y29uc3QgY2hhciAqdmFsdWUpKWl0ZXJhdGVGdW5jOwotIChjb25zdCBjaGFyICopZ2V0QXR0cmli dXRlOiAoY29uc3QgY2hhciAqKWF0dHJpYnV0ZU5hbWU7Ci0gKHZvaWQpZmx1c2g7CkBlbmQKCkBw cm90b2NvbCBIREY1Q29tcG91bmRUeXBlIDxDcmVhdGUsIERyb3AsIENSRUFUQUJMRT4KCgotIF9J X0NyZWF0aW5nOwotIHNldFByb3RvdHlwZTogcHJvdG90eXBlOwotIF9JX1VzaW5nOwotIGdldFBy b3RvdHlwZTsKQGVuZAoKdHlwZWRlZiB2b2lkICpKT0JKRUNUOwoKCgoKCgoKMjAwMS0wOC0yNCAw MToyMSAgICAgICAgICAgICAgICAgIENvdW50ZXIubWkgICAgICAgICAgICAgICAgICAgUGFnZSAg IDY0CgoKdHlwZWRlZiBjb25zdCB2b2lkICpDT01PQkpFQ1Q7CgpAcHJvdG9jb2wgRkFyZ3VtZW50 cyA8Q3JlYXRlLCBEcm9wLCBDUkVBVEFCTEU+CgoKLSBfSV9DcmVhdGluZzsKLSBzZXRMYW5ndWFn ZTogKGlkIDxTeW1ib2w+KWxhbmd1YWdlVHlwZTsKCgotIHNldFNlbGVjdG9yOiAoU0VMKWFTZWw7 Ci0gc2V0SmF2YVNpZ25hdHVyZTogKGNvbnN0IGNoYXIgKilqYXZhU2lnbmF0dXJlOworIGNyZWF0 ZTogKGlkIDxab25lPilhWm9uZSBzZXRTZWxlY3RvcjogKFNFTClhU2VsOwotIGFkZEFyZ3VtZW50 OiAodHlwZXNfdCAqKXZhbHVlIG9mVHlwZTogKGZjYWxsX3R5cGVfdCl0eXBlOwotIGFkZEFyZ3Vt ZW50OiAodm9pZCAqKXZhbHVlIG9mT2JqQ1R5cGU6IChjaGFyKXR5cGU7Ci0gYWRkQ2hhcjogKGNo YXIpdmFsdWU7Ci0gYWRkQm9vbGVhbjogKEJPT0wpdmFsdWU7Ci0gYWRkVW5zaWduZWRDaGFyOiAo dW5zaWduZWQgY2hhcil2YWx1ZTsKLSBhZGRTaG9ydDogKHNob3J0KXZhbHVlOwotIGFkZFVuc2ln bmVkU2hvcnQ6ICh1bnNpZ25lZCBzaG9ydCl2YWx1ZTsKLSBhZGRJbnQ6IChpbnQpdmFsdWU7Ci0g YWRkVW5zaWduZWQ6ICh1bnNpZ25lZCl2YWx1ZTsKLSBhZGRMb25nOiAobG9uZyl2YWx1ZTsKLSBh ZGRVbnNpZ25lZExvbmc6ICh1bnNpZ25lZCBsb25nKXZhbHVlOwotIGFkZExvbmdMb25nOiAobG9u ZyBsb25nKXZhbHVlOwotIGFkZFVuc2lnbmVkTG9uZ0xvbmc6ICh1bnNpZ25lZCBsb25nIGxvbmcp dmFsdWU7Ci0gYWRkRmxvYXQ6IChmbG9hdCl2YWx1ZTsKLSBhZGREb3VibGU6IChkb3VibGUpdmFs dWU7Ci0gYWRkTG9uZ0RvdWJsZTogKGxvbmcgZG91YmxlKXZhbHVlOwotIGFkZFN0cmluZzogKGNv bnN0IGNoYXIgKil2YWx1ZTsKLSBhZGRPYmplY3Q6IG9iajsKLSBhZGRTZWxlY3RvcjogKFNFTClh U2VsOwotIGFkZEphdmFPYmplY3Q6IChKT0JKRUNUKW9iajsKLSBzZXRPYmpDUmV0dXJuVHlwZTog KGNoYXIpdHlwZTsKLSBzZXRSZXR1cm5UeXBlOiAoZmNhbGxfdHlwZV90KXJldFR5cGU7Ci0gc2V0 Qm9vbGVhblJldHVyblR5cGU7Ci0gX0lfVXNpbmc7Ci0gKHZhbF90KWdldFJldFZhbDsKLSAoaWQg PFN5bWJvbD4pZ2V0TGFuZ3VhZ2U7Ci0gKHZvaWQgKilnZXRSZXN1bHQ7CkBlbmQKCnR5cGVkZWYg ZW51bSBjYWxsVHlwZXMgeyBjY2FsbCwgQ09NY2FsbCwgSlNjYWxsLCBqYXZhY2FsbCwgamF2YXN0 YXRpY2NhbGwsIG9iamNjYWxsIH0gY2FsbF90OwoKQHByb3RvY29sIEZDYWxsIDxDcmVhdGUsIERy b3AsIENSRUFUQUJMRT4KCgotIF9JX0NyZWF0aW5nOworIGNyZWF0ZTogKGlkIDxab25lPilhWm9u ZSB0YXJnZXQ6IG9iagogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3I6IChTRUwpc2Vs CiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50czogKGlkIDxGQXJndW1lbnRzPilmYTsK KyBjcmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUgdGFyZ2V0OiBvYmoKICAgICAgICAgICAgICAgICAg ICAgICBtZXRob2ROYW1lOiAoY29uc3QgY2hhciAqKW1ldGhvZE5hbWUKICAgICAgICAgICAgICAg ICAgICAgICAgYXJndW1lbnRzOiAoaWQgPEZBcmd1bWVudHM+KWZhOwotIHNldEFyZ3VtZW50czog YXJnczsKLSBzZXRGdW5jdGlvblBvaW50ZXI6IChmdW5jX3QpZm47Ci0gc2V0TWV0aG9kRnJvbVNl bGVjdG9yOiAoU0VMKW1ldGhvZCBpbk9iamVjdDogb2JqZWN0OwoKCgoKCgoKMjAwMS0wOC0yNCAw MToyMSAgICAgICAgICAgICAgICAgIENvdW50ZXIubWkgICAgICAgICAgICAgICAgICAgUGFnZSAg IDY1CgoKLSBzZXRNZXRob2RGcm9tTmFtZTogKGNvbnN0IGNoYXIgKiltZXRob2ROYW1lIGluT2Jq ZWN0OiBvYmplY3Q7Ci0gc2V0SmF2YU1ldGhvZEZyb21OYW1lOiAoY29uc3QgY2hhciAqKW1ldGhv ZE5hbWUgaW5PYmplY3Q6IChKT0JKRUNUKWpPYmo7Ci0gc2V0SmF2YU1ldGhvZEZyb21OYW1lOiAo Y29uc3QgY2hhciAqKW1ldGhvZE5hbWUgaW5DbGFzczogKGNvbnN0IGNoYXIgKiljbGFzc05hbWU7 Ci0gX0lfVXNpbmc7Ci0gKGNhbGxfdClnZXRDYWxsVHlwZTsKLSBnZXRBcmd1bWVudHM7Ci0gKHZv aWQpcGVyZm9ybUNhbGw7Ci0gKHZvaWQgKilnZXRSZXN1bHQ7Ci0gKHJldHZhbF90KWdldFJldFZh bDogKHJldHZhbF90KXJldFZhbCBidWY6ICh0eXBlc190ICopYnVmOwotIChmdW5jX3QpZ2V0RnVu Y3Rpb25Qb2ludGVyOwpleHRlcm4gdm9pZCBkZWZvYmpfaW5pdF9qYXZhX2NhbGxfdGFibGVzICh2 b2lkICpqbmlFbnYpOwpleHRlcm4gdm9pZCB1cGRhdGVUYXJnZXQgKGlkIGNhbGwsIGlkIHRhcmdl dCk7CkBlbmQKCkBwcm90b2NvbCBTZXJpYWxpemF0aW9uCgoKCi0gX0lfQ3JlYXRpbmc7CgoKLSBs aXNwSW5DcmVhdGU6IGV4cHI7CgoKLSBoZGY1SW5DcmVhdGU6IChpZCA8SERGNT4paGRmNU9iajsK CgoKZXh0ZXJuIGlkIGxpc3BJbiAoaWQgPFpvbmU+IGFab25lLCBpZCBleHByKTsKCgpleHRlcm4g aWQgaGRmNUluIChpZCA8Wm9uZT4gYVpvbmUsIGlkIDxIREY1PiBoZGY1T2JqKTsKCi0gX0lfU2V0 dGluZzsKCgotIGxpc3BJbjogZXhwcjsKCgotIGhkZjVJbjogKGlkIDxIREY1PiloZGY1T2JqOwoK LSBfSV9Vc2luZzsKCi0gKHZvaWQpbGlzcE91dFNoYWxsb3c6IHN0cmVhbTsKCgotICh2b2lkKWxp c3BPdXREZWVwOiBzdHJlYW07CgoKCi0gKHZvaWQpbGlzcE91dFZhcnM6IHN0cmVhbSBkZWVwOiAo Qk9PTClkZWVwRmxhZzsKCgotICh2b2lkKWhkZjVPdXRTaGFsbG93OiAoaWQgPEhERjU+KWhkZjVv Ymo7CgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1p ICAgICAgICAgICAgICAgICAgIFBhZ2UgICA2NgoKCi0gKHZvaWQpaGRmNU91dERlZXA6IChpZCA8 SERGNT4paGRmNW9iajsKCi0gKHZvaWQpdXBkYXRlQXJjaGl2ZXI6IGFyY2hpdmVyOwoKCmV4dGVy biBCT09MIGxpc3BJbkJvb2xlYW4gKGlkIGluZGV4KTsKCgpleHRlcm4gaW50IGxpc3BJbkludGVn ZXIgKGlkIGluZGV4KTsKCgpleHRlcm4gY29uc3QgY2hhciAqbGlzcEluU3RyaW5nIChpZCBpbmRl eCk7CgoKZXh0ZXJuIGlkIGxpc3BJbktleXdvcmQgKGlkIGluZGV4KTsKCkBlbmQKCgpleHRlcm4g aWQgPEFyZ3VtZW50cz4gYXJndW1lbnRzOwoKCmV4dGVybiBpZCA8SERGNUFyY2hpdmVyPiBoZGY1 QXJjaGl2ZXI7CgoKZXh0ZXJuIGlkIDxMaXNwQXJjaGl2ZXI+IGxpc3BBcmNoaXZlcjsKCgpleHRl cm4gaWQgPEhERjVBcmNoaXZlcj4gaGRmNUFwcEFyY2hpdmVyOwoKCmV4dGVybiBpZCA8TGlzcEFy Y2hpdmVyPiBsaXNwQXBwQXJjaGl2ZXI7CgoKZXh0ZXJuIGlkIDxTeW1ib2w+IHRfQnl0ZUFycmF5 LCB0X0xlYWZPYmplY3QsIHRfUG9wdWxhdGlvbk9iamVjdDsKCgpleHRlcm4gaWQgPFN5bWJvbD4g TGFuZ3VhZ2VDT00sIExhbmd1YWdlSlMsIExhbmd1YWdlSmF2YSwgTGFuZ3VhZ2VPYmpjOwoKCgoK CgpleHRlcm4gdm9pZCBfb2JqX2Zvcm1hdElEU3RyaW5nIChjaGFyICpidWZmZXIsIGlkIGFuT2Jq ZWN0KTsKCgoKZXh0ZXJuIENsYXNzIG9iamNfZ2V0X2NsYXNzIChjb25zdCBjaGFyICpuYW1lKTsK CgpleHRlcm4gaWQgZGVmb2JqX2xvb2t1cF90eXBlIChjb25zdCBjaGFyICpuYW1lKTsKCgoKCgoK CgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgQ291bnRlci5taSAgICAgICAg ICAgICAgICAgICBQYWdlICAgNjcKCgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZv YmovdHlwZXMuaCIgMQpleHRlcm4gdm9pZCAqX2RlZm9ial9bXTsKCmV4dGVybiBpZCBHZXROYW1l OwpleHRlcm4gaWQgRGVmaW5lZE9iamVjdDsKZXh0ZXJuIGlkIEN1c3RvbWl6ZTsKZXh0ZXJuIGlk IENyZWF0ZTsKZXh0ZXJuIGlkIERyb3A7CmV4dGVybiBpZCBab25lOwpleHRlcm4gaWQgRGVmaW5l ZENsYXNzOwpleHRlcm4gaWQgQ3JlYXRlZENsYXNzOwpleHRlcm4gaWQgQmVoYXZpb3JQaGFzZTsK ZXh0ZXJuIGlkIENvcHk7CmV4dGVybiBpZCBHZXRPd25lcjsKZXh0ZXJuIGlkIFNldEluaXRpYWxW YWx1ZTsKZXh0ZXJuIGlkIFN5bWJvbDsKZXh0ZXJuIGlkIEV2ZW50VHlwZTsKZXh0ZXJuIGlkIFdh cm5pbmc7CmV4dGVybiBpZCBFcnJvcjsKZXh0ZXJuIGlkIEFyZ3VtZW50czsKZXh0ZXJuIGlkIEFy Y2hpdmVyOwpleHRlcm4gaWQgTGlzcEFyY2hpdmVyOwpleHRlcm4gaWQgSERGNUFyY2hpdmVyOwpl eHRlcm4gaWQgSERGNTsKZXh0ZXJuIGlkIEhERjVDb21wb3VuZFR5cGU7CmV4dGVybiBpZCBGQXJn dW1lbnRzOwpleHRlcm4gaWQgRkNhbGw7CmV4dGVybiBpZCBTZXJpYWxpemF0aW9uOwoKCiMgMSAi L3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9jbGFzc2VzLmgiIDEKZXh0ZXJuIGlkIGlk X0FyY2hpdmVyX2M7CmV4dGVybiBpZCBpZF9BcHBsaWNhdGlvbjsKZXh0ZXJuIGlkIGlkX0xpc3BB cmNoaXZlcl9jOwpleHRlcm4gaWQgaWRfSERGNUFyY2hpdmVyX2M7CmV4dGVybiBpZCBpZF9Bcmd1 bWVudHNfYzsKZXh0ZXJuIGlkIGlkX0NyZWF0ZURyb3BfczsKZXh0ZXJuIGlkIGlkX0NyZWF0ZURy b3A7CmV4dGVybiBpZCBpZF9DdXN0b21pemVfczsKZXh0ZXJuIGlkIGlkX0NyZWF0ZUJ5X2M7CmV4 dGVybiBpZCBpZF9DcmVhdGVfYnljb3B5OwpleHRlcm4gaWQgaWRfQ3JlYXRlX2J5c2VuZDsKZXh0 ZXJuIGlkIGlkX0NyZWF0ZV9ieWJvdGg7CmV4dGVybiBpZCBpZF9DbGFzc19zOwpleHRlcm4gaWQg aWRfQ3JlYXRlZENsYXNzX3M7CmV4dGVybiBpZCBpZF9CZWhhdmlvclBoYXNlX3M7CmV4dGVybiBp ZCBpZF9PYmplY3RfczsKZXh0ZXJuIGlkIGlkX0hERjVDb21wb3VuZFR5cGVfYzsKZXh0ZXJuIGlk IGlkX0hERjVfYzsKZXh0ZXJuIGlkIGlkX1R5cGVfYzsKZXh0ZXJuIGlkIGlkX1Byb2dyYW1Nb2R1 bGVfYzsKZXh0ZXJuIGlkIGlkX01vZHVsZV9zdXBlcl87CmV4dGVybiBpZCBpZF9TeW1ib2xfYzsK ZXh0ZXJuIGlkIGlkX0V2ZW50VHlwZV9jOwpleHRlcm4gaWQgaWRfV2FybmluZ19jOwpleHRlcm4g aWQgaWRfRXJyb3JfYzsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICBD b3VudGVyLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA2OAoKCmV4dGVybiBpZCBpZF9ab25l X2M7CmV4dGVybiBpZCBpZF9Db21wb25lbnRab25lX2M7CmV4dGVybiBpZCBpZF9GQ2FsbF9jOwpl eHRlcm4gaWQgaWRfRkFyZ3VtZW50c19jOwpleHRlcm4gaWQgaWRfRGlyZWN0b3J5RW50cnk7CmV4 dGVybiBpZCBpZF9PYmplY3RFbnRyeTsKZXh0ZXJuIGlkIGlkX1NlbGVjdG9yRW50cnk7CmV4dGVy biBpZCBpZF9EaXJlY3Rvcnk7CmV4dGVybiBpZCBpZF9KYXZhUHJveHk7CmV4dGVybiBpZCBpZF9K YXZhQ2xhc3NQcm94eTsKZXh0ZXJuIGlkIGlkX0phdmFDb2xsZWN0aW9uOwpleHRlcm4gaWQgaWRf SmF2YUNvbGxlY3Rpb25JbmRleDsKZXh0ZXJuIGlkIGlkX0NPTVByb3h5OwojIDMxICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL3R5cGVzLmgiIDIKIyAxMjU2ICIvdXNyL2xvY2FsL3N3 YXJtL2luY2x1ZGUvZGVmb2JqLmgiIDIKCmV4dGVybiB2b2lkIGluaXREZWZvYmogKGlkIDxBcmd1 bWVudHM+IGFyZ3VtZW50cyk7CgoKZXh0ZXJuIHZvaWQgX29ial9pbml0TW9kdWxlICh2b2lkICpt b2R1bGUpOwoKCgoKCmV4dGVybiBpZCBfb2JqX2dsb2JhbFpvbmU7CgoKZXh0ZXJuIGlkIF9vYmpf c2NyYXRjaFpvbmU7CiMgMTI3OSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgpl eHRlcm4gQk9PTCBfb2JqX2RlYnVnOwoKCgpleHRlcm4gRklMRSAqX29ial94ZXJyb3I7CgpleHRl cm4gRklMRSAqX29ial94ZGVidWc7CgoKZXh0ZXJuIHZvaWQgeHNldG5hbWUgKGlkIGFuT2JqZWN0 LCBjb25zdCBjaGFyICpuYW1lKTsKCgpleHRlcm4gdm9pZCB4cHJpbnQgKGlkIGFuT2JqZWN0KTsK CgpleHRlcm4gdm9pZCB4cHJpbnRpZCAoaWQgYW5PYmplY3QpOwoKCmV4dGVybiB2b2lkIHhmcHJp bnQgKGlkIGFuT2JqZWN0KTsKCgpleHRlcm4gdm9pZCB4ZnByaW50aWQgKGlkIGFuT2JqZWN0KTsK CgpleHRlcm4gdm9pZCB4ZXhlYyAoaWQgYW5PYmplY3QsIGNvbnN0IGNoYXIgKm5hbWUpOwoKCgoK CgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAgICAg ICAgICAgICAgIFBhZ2UgICA2OQoKCgpleHRlcm4gdm9pZCB4ZmV4ZWMgKGlkIGFuT2JqZWN0LCBj b25zdCBjaGFyICpuYW1lKTsKCgpleHRlcm4gaWQgbmFtZVRvT2JqZWN0IChjb25zdCBjaGFyICpu YW1lKTsKIyAxMzI1ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCmV4dGVybiBj aGFyICp6c3RyZHVwIChpZCA8Wm9uZT4gYVpvbmUsIGNvbnN0IGNoYXIgKnN0cik7CiMgMTQgIi91 c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmovRGVmT2JqZWN0LmgiIDIKCiMgMSAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL3N3YXJtY29uZmlnLmgiIDEKIyAxNiAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL2RlZm9iai9EZWZPYmplY3QuaCIgMgoKQGNsYXNzIE9iamVjdEVudHJ5OwoKCkBp bnRlcmZhY2UgT2JqZWN0X3M6IE9iamVjdCA8RGVmaW5lZENsYXNzLCBTZXJpYWxpemF0aW9uLCBH ZXROYW1lPgp7CkBwdWJsaWMKCgogIHVuc2lnbmVkIHpiaXRzOwogIE9iamVjdEVudHJ5ICpmb3Jl aWduRW50cnk7Cn0KIyA0MSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9EZWZPYmpl Y3QuaCIKLSAoY29uc3QgY2hhciAqKWdldE5hbWU7CisgKEJPT0wpcmVzcG9uZHNUbzogKFNFTClh U2VsOwotIChCT09MKXJlc3BvbmRzVG86IChTRUwpYVNlbDsKKyAoQk9PTCljb25mb3Jtc1RvOiAo UHJvdG9jb2wgKilhUHJvdG9jb2w7CisgZ2V0Q2xhc3M7Ci0gZ2V0Q2xhc3M7Ci0gZ2V0Wm9uZTsK LSAodm9pZClkcm9wQWxsb2NhdGlvbnM6IChCT09MKWNvbXBvbmVudEFsbG9jOwotICh2b2lkKWRy b3A7Ci0gKHJlZl90KWFkZFJlZjogKG5vdGlmeV90KW5vdGlmeUZ1bmN0aW9uIHdpdGhBcmd1bWVu dDogKHZvaWQgKilhcmc7OwotICh2b2lkKXJlbW92ZVJlZjogKHJlZl90KXJlZlZhbDsKKyBnZXRT dXBlcmNsYXNzOworIChCT09MKWlzU3ViY2xhc3M6IGFDbGFzczsKKyAodm9pZClzZXRUeXBlSW1w bGVtZW50ZWQ6IGFUeXBlOworIGdldFR5cGVJbXBsZW1lbnRlZDsKKyBnZXRPd25lcjsKKyAoSU1Q KWdldE1ldGhvZEZvcjogKFNFTClhU2VsOworIGdldERlZmluaW5nQ2xhc3M7CisgZ2V0TmV4dFBo YXNlOworIHNlbGY7Ci0gZ2V0VHlwZTsKLSAoaW50KWNvbXBhcmU6IGFuT2JqZWN0OwotIHBlcmZv cm06IChTRUwpYVNlbDsKLSBwZXJmb3JtOiAoU0VMKWFTZWwgd2l0aDogYW5PYmplY3QxOwotIHBl cmZvcm06IChTRUwpYVNlbCB3aXRoOiBhbk9iamVjdDEgd2l0aDogYW5PYmplY3QyOwotIHBlcmZv cm06IChTRUwpYVNlbCB3aXRoOiBhbk9iamVjdDEgd2l0aDogYW5PYmplY3QyIHdpdGg6IGFuT2Jq ZWN0MzsKLSAodm9pZClzZXREaXNwbGF5TmFtZTogKGNvbnN0IGNoYXIgKilhTmFtZTsKLSAoY29u c3QgY2hhciAqKWdldERpc3BsYXlOYW1lOwotIChjb25zdCBjaGFyICopZ2V0T2JqZWN0TmFtZTsK LSAoY29uc3QgY2hhciAqKWdldFR5cGVOYW1lOwotICh2b2lkKWRlc2NyaWJlOiBvdXRwdXRDaGFy U3RyZWFtOwotICh2b2lkKWRlc2NyaWJlSUQ6IG91dHB1dENoYXJTdHJlYW07CgoKCgoKCgoyMDAx LTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgQ291bnRlci5taSAgICAgICAgICAgICAgICAg ICBQYWdlICAgNzAKCgotICh2b2lkKXhwcmludDsKLSAodm9pZCl4cHJpbnRpZDsKLSAodm9pZCl4 ZnByaW50OwotICh2b2lkKXhmcHJpbnRpZDsKLSBsaXNwSW5DcmVhdGU6IGV4cHI7Ci0gbGlzcElu OiBleHByOwotIGhkZjVJbkNyZWF0ZTogZXhwcjsKLSBoZGY1SW46IGV4cHI7Ci0gKHZvaWQpbGlz cE91dFZhcnM6IHN0cmVhbSBkZWVwOiAoQk9PTClkZWVwRmxhZzsKLSAodm9pZClsaXNwT3V0RGVl cDogc3RyZWFtOwotICh2b2lkKWxpc3BPdXRTaGFsbG93OiBzdHJlYW07Ci0gKHZvaWQpaGRmNU91 dERlZXA6IGhkZjVvYmo7Ci0gKHZvaWQpaGRmNU91dFNoYWxsb3c6IGhkZjVvYmo7Ci0gKHZvaWQp dXBkYXRlQXJjaGl2ZXI6IGFyY2hpdmVyOwpAZW5kCgpleHRlcm4gaWQgbGlzcEluIChpZCBhWm9u ZSwgaWQgZXhwcik7CgpleHRlcm4gQk9PTCBsaXNwSW5Cb29sZWFuIChpZCBpbmRleCk7CmV4dGVy biBpbnQgbGlzcEluSW50ZWdlciAoaWQgaW5kZXgpOwpleHRlcm4gY29uc3QgY2hhciAqbGlzcElu U3RyaW5nIChpZCBpbmRleCk7CmV4dGVybiBpZCBsaXNwSW5LZXl3b3JkIChpZCBpbmRleCk7CiMg MTIxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0RlZk9iamVjdC5oIgpleHRlcm4g SU1QIGdldF9pbXAgKENsYXNzIGNsYXNzLCBTRUwgc2VsKTsKCgoKCmV4dGVybiBCT09MIHJlc3Bv bmRzVG8gKGlkIGFuT2JqZWN0LCBTRUwgYVNlbCk7CgoKCgoKZXh0ZXJuIElNUCBnZXRNZXRob2RG b3IgKGlkIGFuT2JqZWN0LCBTRUwgYVNlbCk7CiMgMTU0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1 ZGUvZGVmb2JqL0RlZk9iamVjdC5oIgp0eXBlZGVmIHN0cnVjdCBtYXBhbGxvYyAqbWFwYWxsb2Nf dDsKCnN0cnVjdCBtYXBhbGxvYyB7CiAgdm9pZCAoKm1hcHBpbmdGdW5jdGlvbikgKG1hcGFsbG9j X3QgbWFwYWxsb2MsIEJPT0wgb2JqZWN0QWxsb2NhdGlvbik7CiAgdm9pZCAqYWxsb2M7CiAgaWQg PFN5bWJvbD4gZGVzY3JpcHRvcjsKICBpZCB6b25lOwogIHNpemVfdCBzaXplOwp9OwojIDE0ICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0N1c3RvbWl6ZS5oIiAyCiMgMjQgIi91c3Iv bG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmovQ3VzdG9taXplLmgiCmV4dGVybiBpZCBDcmVhdGlu ZywgU2V0dGluZywgVXNpbmcsIENyZWF0aW5nT25seSwgVXNpbmdPbmx5OwoKCgoKQGludGVyZmFj ZSBDdXN0b21pemVfczogT2JqZWN0X3MKCisgY3VzdG9taXplQmVnaW46IGFab25lOwotIGN1c3Rv bWl6ZUVuZDsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICBDb3VudGVy Lm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA3MQoKCi0gY3VzdG9taXplQ29weTogYVpvbmU7 CisgY3VzdG9taXplQmVnaW5FbmQ6IGFab25lOwotIF9zZXRDcmVhdGVCeV86IChDbGFzcylzdWJj bGFzcyBtZXNzYWdlOiAoU0VMKW1lc3NhZ2VTZWxlY3RvciB0bzogYW5PYmplY3Q7Ci0gKHZvaWQp X3NldENyZWF0ZUJ5Q29weV87Ci0gKHZvaWQpX3NldENyZWF0ZUJ5TWVzc2FnZV86IChTRUwpbWVz c2FnZVNlbGVjdG9yIHRvOiBhbk9iamVjdDsKLSAodm9pZClfc2V0Q3JlYXRlQnlNZXNzYWdlXzog KFNFTCltZXNzYWdlU2VsZWN0b3IgdG9Db3B5OiBhbk9iamVjdDsKLSAodm9pZClfc2V0UmVjdXN0 b21pemVfOiBhbk9iamVjdDsKKyAodm9pZClzZXRUeXBlSW1wbGVtZW50ZWQ6IGFUeXBlOwpAZW5k CiMgNTYgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmovQ3VzdG9taXplLmgiCmV4dGVy biBpbmxpbmUgQk9PTApfb2JqX2N1c3RvbWl6ZSAoaWQgYW5PYmplY3QpCnsKICByZXR1cm4gKCgq KENsYXNzICopKGFuT2JqZWN0KSktPmluZm8gJiAweDIwMCkgIT0gMDsKfQojIDgyICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0N1c3RvbWl6ZS5oIgpAaW50ZXJmYWNlIENyZWF0ZUJ5 X2M6IE9iamVjdF9zCnsKQHB1YmxpYwogIGlkIGltcGxlbWVudGVkVHlwZTsKICBpZCBjcmVhdGVS ZWNlaXZlcjsKICBTRUwgY3JlYXRlTWVzc2FnZTsKICBJTVAgY3JlYXRlTWV0aG9kOwogIGlkIHJl Y3VzdG9taXplOwp9CgotIGNyZWF0ZUJlZ2luOiBhWm9uZTsKLSBjdXN0b21pemVCZWdpbjogYVpv bmU7Ci0gKHZvaWQpbWFwQWxsb2NhdGlvbnM6IChtYXBhbGxvY190KW1hcGFsbG9jOwpAZW5kCgpA aW50ZXJmYWNlIENyZWF0ZV9ieWNvcHk6IENyZWF0ZUJ5X2MKCi0gY3JlYXRlOiBhWm9uZTsKQGVu ZAoKQGludGVyZmFjZSBDcmVhdGVfYnlzZW5kOiBDcmVhdGVCeV9jCgotIGNyZWF0ZTogYVpvbmU7 CkBlbmQKCkBpbnRlcmZhY2UgQ3JlYXRlX2J5Ym90aDogQ3JlYXRlQnlfYwoKLSBjcmVhdGU6IGFa b25lOwpAZW5kCgoKCgpleHRlcm4gaW5saW5lIENsYXNzCmdldE5leHRQaGFzZSAoaWQgYUNsYXNz KQp7CiAgcmV0dXJuIChDbGFzcykgKChCZWhhdmlvclBoYXNlX3MgKikgYUNsYXNzKS0+bmV4dFBo YXNlOwp9CgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICBDb3VudGVy Lm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA3MgoKCgoKZXh0ZXJuIGlubGluZSB2b2lkCnNl dE5leHRQaGFzZSAoaWQgYW5PYmplY3QpCnsKICAqKENsYXNzICopIGFuT2JqZWN0ID0gKENsYXNz KSAoKihCZWhhdmlvclBoYXNlX3MgKiopIGFuT2JqZWN0KS0+bmV4dFBoYXNlOwp9CiMgMTMgIi91 c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmovQ3JlYXRlLmgiIDIKCgoKCkBpbnRlcmZhY2Ug Q3JlYXRlRHJvcF9zOiBDdXN0b21pemVfcwoKKyBjcmVhdGU6IGFab25lOworIGNyZWF0ZUJlZ2lu OiBhWm9uZTsKLSBjcmVhdGVFbmQ7CkBlbmQKCkBpbnRlcmZhY2UgQ3JlYXRlRHJvcDogQ3JlYXRl RHJvcF9zCgotIGNyZWF0ZUVuZDsKQGVuZAojIDEwICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv b2JqZWN0YmFzZS9Td2FybU9iamVjdC5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRl L29iamVjdGJhc2UuaCIgMQojIDIwICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFz ZS5oIgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIgMQojIDIxICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFzZS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL2FjdGl2aXR5LmgiIDEKIyAyNiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2Fj dGl2aXR5LmgiCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiIDEK IyAxMiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCiMgMSAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIiAxCiMgMTMgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9jb2xsZWN0aW9ucy5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2V4dGVy bnZhci5oIiAxCiMgMTQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIiAy CiMgMjQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgpAcHJvdG9jb2wg T2Zmc2V0cwojIDQyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSBf SV9Vc2luZzsKCi0gYXRPZmZzZXQ6ICh1bnNpZ25lZClvZmZzZXQ7CgoKCi0gYXRPZmZzZXQ6ICh1 bnNpZ25lZClvZmZzZXQgcHV0OiBhbk9iamVjdDsKCgotIGdldEZpcnN0OwoKCi0gZ2V0TGFzdDsK QGVuZAoKQHByb3RvY29sIEZvckVhY2gKIyA3OCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2Nv bGxlY3Rpb25zLmgiCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgQ291 bnRlci5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgNzMKCgotIF9JX1VzaW5nOwotICh2b2lk KWZvckVhY2g6IChTRUwpYVNlbGVjdG9yOwotICh2b2lkKWZvckVhY2g6IChTRUwpYVNlbGVjdG9y IDogYXJnMTsKLSAodm9pZClmb3JFYWNoOiAoU0VMKWFTZWxlY3RvciA6IGFyZzEgOiBhcmcyOwot ICh2b2lkKWZvckVhY2g6IChTRUwpYVNlbGVjdG9yIDogYXJnMSA6IGFyZzIgOiBhcmczOwoKLSAo dm9pZClkZXNjcmliZUZvckVhY2g6IG91dHB1dENoYXJTdHJlYW07Ci0gKHZvaWQpZGVzY3JpYmVG b3JFYWNoSUQ6IG91dHB1dENoYXJTdHJlYW07CgpAZW5kCgpAcHJvdG9jb2wgRm9yRWFjaEtleQoK CgoKCi0gX0lfVXNpbmc7Ci0gKHZvaWQpZm9yRWFjaEtleTogKFNFTClhU2VsZWN0b3I7Ci0gKHZv aWQpZm9yRWFjaEtleTogKFNFTClhU2VsZWN0b3IgOiBhcmcxOwotICh2b2lkKWZvckVhY2hLZXk6 IChTRUwpYVNlbGVjdG9yIDogYXJnMSA6IGFyZzI7Ci0gKHZvaWQpZm9yRWFjaEtleTogKFNFTClh U2VsZWN0b3IgOiBhcmcxIDogYXJnMiA6IGFyZzM7CkBlbmQKCkBwcm90b2NvbCBJbmRleCA8RGVm aW5lZE9iamVjdCwgRHJvcCwgUkVUVVJOQUJMRT4KIyAxNTcgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9jb2xsZWN0aW9ucy5oIgotIF9JX1VzaW5nOwoKCi0gZ2V0Q29sbGVjdGlvbjsKCgoKCgoK LSBuZXh0OwoKCgoKLSBwcmV2OwoKCgoKLSBmaW5kTmV4dDogYW5PYmplY3Q7CgoKCgotIGZpbmRQ cmV2OiBhbk9iamVjdDsKIyAxOTEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9u cy5oIgotIGdldDsKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgIENv dW50ZXIubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDc0CgoKCgotIHB1dDogYW5PYmplY3Q7 CiMgMjA5ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSByZW1vdmU7 CiMgMjUzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSAoaWQgPFN5 bWJvbD4pZ2V0TG9jOwojIDI2NyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25z LmgiCi0gKHZvaWQpc2V0TG9jOiAoaWQgPFN5bWJvbD4pbG9jU3ltYm9sOwojIDI4OCAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCi0gKGludClnZXRPZmZzZXQ7CgoKCgoK CgotIHNldE9mZnNldDogKHVuc2lnbmVkKW9mZnNldDsKIyAzMDggIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9jb2xsZWN0aW9ucy5oIgotIChpbnQpY29tcGFyZTogYW5JbmRleDsKIyAzMjEgIi91 c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgpleHRlcm4gaWQgPFN5bWJvbD4g U3RhcnQsIEVuZCwgQmV0d2VlbiwgUmVtb3ZlZCwgTWVtYmVyOwoKCgoKCgoKZXh0ZXJuIGlkIDxF cnJvcj4gT2Zmc2V0T3V0T2ZSYW5nZSwgTm9NZW1iZXJzLAogIEFscmVhZHlBdEVuZCwgQWxyZWFk eUF0U3RhcnQsIEludmFsaWRJbmRleExvYywgSW52YWxpZExvY1N5bWJvbDsKCkBlbmQKCkBwcm90 b2NvbCBQZXJtdXRlZEluZGV4IDxJbmRleCwgUkVUVVJOQUJMRT4KCgoKCgotIF9JX0NyZWF0aW5n OwotIHNldENvbGxlY3Rpb246IGFDb2xsZWN0aW9uOwotIHNldFVuaWZvcm1SYW5kb206IHJuZDsK LSBfSV9Vc2luZzsKLSByZXNodWZmbGU7CkBlbmQ7CgpAcHJvdG9jb2wgQ29sbGVjdGlvbiA8Q3Jl YXRlLCBTZXRJbml0aWFsVmFsdWUsIENvcHksIERyb3AsIE9mZnNldHMsIEZvckVhY2g+CiMgNDA3 ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSBfSV9DcmVhdGluZzsK CgoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgIENvdW50ZXIubWkg ICAgICAgICAgICAgICAgICAgUGFnZSAgIDc1CgoKCgotICh2b2lkKXNldFJlcGxhY2VPbmx5OiAo Qk9PTClyZXBsYWNlT25seTsKCi0gKHZvaWQpc2V0SW5kZXhGcm9tTWVtYmVyTG9jOiAoaW50KWJ5 dGVPZmZzZXQ7CgotIF9JX1VzaW5nOwoKCi0gY29weTogKGlkIDxab25lPilhWm9uZTsKCgotIChC T09MKWdldFJlcGxhY2VPbmx5OwoKCgoKCi0gKHVuc2lnbmVkKWdldENvdW50OwojIDQ0MCAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCi0gKEJPT0wpY29udGFpbnM6IGFN ZW1iZXI7CgoKCgoKCi0gcmVtb3ZlOiBhTWVtYmVyOwojIDQ1NiAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL2NvbGxlY3Rpb25zLmgiCi0gKHZvaWQpcmVtb3ZlQWxsOwoKCi0gKHZvaWQpZGVsZXRl QWxsOwoKCi0gKEJPT0wpYWxsU2FtZUNsYXNzOwoKCgoKLSAoaWQgPEluZGV4PiliZWdpbjogKGlk IDxab25lPilhWm9uZTsKCi0gKGlkIDxQZXJtdXRlZEluZGV4PiliZWdpblBlcm11dGVkOiAoaWQg PFpvbmU+KWFab25lOwpAZW5kCgoKCkBwcm90b2NvbCBEZWZhdWx0TWVtYmVyCiMgNDg4ICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSBfSV9TZXR0aW5nOwotICh2b2lk KXNldERlZmF1bHRNZW1iZXI6IG1lbWJlclZhbHVlOwoKLSBfSV9Vc2luZzsKLSBnZXREZWZhdWx0 TWVtYmVyOwpAZW5kCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgIENv dW50ZXIubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDc2CgoKQHByb3RvY29sIE1lbWJlckJs b2NrCiMgNTM3ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSBfSV9D cmVhdGluZzsKKyBjcmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUgc2V0TWVtYmVyQmxvY2s6IChpZCAq KW1lbWJlcnMgc2V0Q291bnQ6ICh1bnNpZ25lZCljb3VudDsKCi0gX0lfU2V0dGluZzsKLSAodm9p ZClzZXRNZW1iZXJCbG9jazogKGlkICopbWVtYmVycyBzZXRDb3VudDogKHVuc2lnbmVkKWNvdW50 OwoKLSBfSV9Vc2luZzsKLSAodm9pZCAqKWdldE1lbWJlckJsb2NrOwpAZW5kCgpAcHJvdG9jb2wg QXJyYXkgPENvbGxlY3Rpb24sIERlZmF1bHRNZW1iZXIsIE1lbWJlckJsb2NrLCBDUkVBVEFCTEU+ CiMgNTk4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSBfSV9DcmVh dGluZzsKKyBjcmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUgc2V0Q291bnQ6ICh1bnNpZ25lZCljb3Vu dDsKCi0gX0lfU2V0dGluZzsKCgoKCgoKCi0gc2V0Q291bnQ6ICh1bnNpZ25lZCljb3VudDsKQGVu ZAoKQHByb3RvY29sIExpc3RJbmRleCA8SW5kZXgsIFJFVFVSTkFCTEU+CiMgNjQwICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSBfSV9Vc2luZzsKCi0gKHZvaWQpYWRk QWZ0ZXI6IGFuT2JqZWN0OwoKCi0gKHZvaWQpYWRkQmVmb3JlOiBhbk9iamVjdDsKQGVuZAoKCkBw cm90b2NvbCBMaXN0IDxDb2xsZWN0aW9uLCBDUkVBVEFCTEU+CiMgNjY5ICIvdXNyL2xvY2FsL3N3 YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSBfSV9Vc2luZzsKCi0gKHZvaWQpYWRkRmlyc3Q6 IGFuT2JqZWN0OwoKCi0gKHZvaWQpYWRkTGFzdDogYW5PYmplY3Q7CgoKLSByZW1vdmVGaXJzdDsK CgotIHJlbW92ZUxhc3Q7CgoKLSAoaWQgPExpc3RJbmRleD4pbGlzdEJlZ2luOiAoaWQgPFpvbmU+ KWFab25lOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgIENvdW50ZXIu bWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDc3CgoKQGVuZAoKCgpleHRlcm4gaW50IGNvbXBh cmVJRHMgKGlkLCBpZCk7CgoKZXh0ZXJuIGludCBjb21wYXJlSW50ZWdlcnMgKGlkLCBpZCk7CgoK ZXh0ZXJuIGludCBjb21wYXJlVW5zaWduZWRJbnRlZ2VycyAoaWQsIGlkKTsKCgpleHRlcm4gaW50 IGNvbXBhcmVDU3RyaW5ncyAoaWQsIGlkKTsKCkBwcm90b2NvbCBDb21wYXJlRnVuY3Rpb24KIyA3 MjEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgp0eXBlZGVmIGludCAo KmNvbXBhcmVfdCkgKGlkLCBpZCk7CgotIF9JX0NyZWF0aW5nOwotIHNldENvbXBhcmVGdW5jdGlv bjogKGNvbXBhcmVfdClhRnVuY3Rpb247Ci0gc2V0Q29tcGFyZUNTdHJpbmdzOwotIHNldENvbXBh cmVJRHM7Ci0gc2V0Q29tcGFyZUludGVnZXJzOwotIHNldENvbXBhcmVVbnNpZ25lZEludGVnZXJz OwotIF9JX1VzaW5nOwotIChjb21wYXJlX3QpZ2V0Q29tcGFyZUZ1bmN0aW9uOwpAZW5kCgpAcHJv dG9jb2wgS2V5ZWRDb2xsZWN0aW9uIDxDb2xsZWN0aW9uLCBGb3JFYWNoS2V5PgojIDc1MCAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCi0gX0lfQ3JlYXRpbmc7CgotIF9J X1VzaW5nOwotIGNyZWF0ZUluZGV4OiAoaWQgPFpvbmU+KWFab25lIGZyb21NZW1iZXI6IGFuT2Jq ZWN0OwoKCgoKCgotIGF0OiBhS2V5OwoKCgoKCgotIHJlbW92ZUtleTogYUtleTsKCgoKLSAoQk9P TCljb250YWluc0tleTogYUtleTsKQGVuZAoKQHByb3RvY29sIEtleWVkQ29sbGVjdGlvbkluZGV4 IDxJbmRleD4KCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICBDb3VudGVy Lm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA3OAoKCiMgNzgzICIvdXNyL2xvY2FsL3N3YXJt L2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKQGVuZAoKCkBwcm90b2NvbCBNZW1iZXJTbG90CiMgODE0 ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKdHlwZWRlZiBzdHJ1Y3Qg bWVtYmVyRGF0YSB7IHZvaWQgKm1lbWJlckRhdGFbMl07IH0gbWVtYmVyX3Q7CgoKCgoKCgp0eXBl ZGVmIHN0cnVjdCB7IHZvaWQgKm1lbWJlckRhdGFbMl07IGlkIG93bmVyOyB9IGR1cG1lbWJlcl90 OwpAZW5kCgpAcHJvdG9jb2wgX1NldAoKCi0gX0lfVXNpbmc7CgotIChCT09MKWFkZDogYW5PYmpl Y3Q7CiMgODM5ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKQGVuZAoK QHByb3RvY29sIFNldCA8X1NldCwgS2V5ZWRDb2xsZWN0aW9uLCBDUkVBVEFCTEU+CiMgODU3ICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSBfSV9Vc2luZzsKCgoKCgot IHJlcGxhY2U6IGFuT2JqZWN0OwpAZW5kCgpAcHJvdG9jb2wgT3JkZXJlZFNldCA8X1NldCwgTGlz dCwgQ1JFQVRBQkxFPgojIDg4NiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25z LmgiCkBlbmQKCkBwcm90b2NvbCBNYXBJbmRleCA8S2V5ZWRDb2xsZWN0aW9uSW5kZXgsIFJFVFVS TkFCTEU+CgoKCgotIF9JX1VzaW5nOwoKCgoKLSBzZXRLZXk6IGFLZXk7CgoKCgoKCgoKCgoKMjAw MS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgIENvdW50ZXIubWkgICAgICAgICAgICAgICAg ICAgUGFnZSAgIDc5CgoKLSBnZXRLZXk7CgoKCgoKCi0gKHVuc2lnbmVkIGxvbmcpZ2V0S2V5VmFs dWU7CgoKLSBuZXh0OiAoaWQgKilrZXk7CgoKLSBwcmV2OiAoaWQgKilrZXk7CgoKLSBnZXQ6IChp ZCAqKWtleTsKQGVuZAoKCkBwcm90b2NvbCBNYXAgPEtleWVkQ29sbGVjdGlvbiwgQ29tcGFyZUZ1 bmN0aW9uLCBDUkVBVEFCTEU+CiMgOTM4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVj dGlvbnMuaCIKLSBfSV9Vc2luZzsKCgoKCi0gKEJPT0wpYXQ6IGFLZXkgaW5zZXJ0OiBhbk9iamVj dDsKCgoKCi0gYXQ6IGFLZXkgcmVwbGFjZTogYW5PYmplY3Q7CgoKLSAoaWQgPE1hcEluZGV4Pilt YXBCZWdpbjogKGlkIDxab25lPilhWm9uZTsKQGVuZAoKCkBwcm90b2NvbCBPdXRwdXRTdHJlYW0g PENyZWF0ZSwgRHJvcCwgQ1JFQVRBQkxFPgojIDk2NCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRl L2NvbGxlY3Rpb25zLmgiCi0gX0lfQ3JlYXRpbmc7CisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25l IHNldEZpbGVTdHJlYW06IChGSUxFICopZmlsZVN0cmVhbTsKLSBzZXRGaWxlU3RyZWFtOiAoRklM RSAqKWZpbGVTdHJlYW07Ci0gc2V0RXhwckZsYWc6IChCT09MKWV4cHJGbGFnOwotIF9JX1VzaW5n OwotIChGSUxFICopZ2V0RmlsZVN0cmVhbTsKLSBnZXRFeHByOwoKCi0gKHZvaWQpY2F0QzogKGNv bnN0IGNoYXIgKiljc3RyaW5nOwoKCi0gKHZvaWQpY2F0Qm9vbGVhbjogKEJPT0wpYm9vbDsKCgoK CgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgIENvdW50ZXIubWkgICAgICAg ICAgICAgICAgICAgUGFnZSAgIDgwCgoKLSAodm9pZCljYXRDaGFyOiAoY2hhciljaDsKCgotICh2 b2lkKWNhdEZsb2F0OiAoZmxvYXQpZmx0OwoKCi0gKHZvaWQpY2F0RG91YmxlOiAoZG91YmxlKWRi bDsKCgotICh2b2lkKWNhdExvbmdEb3VibGU6IChsb25nIGRvdWJsZSlkYmw7CgoKLSAodm9pZClj YXRJbnQ6IChpbnQpaTsKCgotICh2b2lkKWNhdFVuc2lnbmVkOiAodW5zaWduZWQpdW47CgotICh2 b2lkKWNhdFNob3J0OiAoc2hvcnQpc2h0OwotICh2b2lkKWNhdFVuc2lnbmVkU2hvcnQ6ICh1bnNp Z25lZCBzaG9ydCl1c2h0OwotICh2b2lkKWNhdExvbmc6IChsb25nKWxuZzsKLSAodm9pZCljYXRV bnNpZ25lZExvbmc6ICh1bnNpZ25lZCBsb25nKXVsbmc7Ci0gKHZvaWQpY2F0TG9uZ0xvbmc6IChs b25nIGxvbmcpbG5nbG5nOwotICh2b2lkKWNhdFVuc2lnbmVkTG9uZ0xvbmc6ICh1bnNpZ25lZCBs b25nIGxvbmcpdWxuZ2xuZzsKLSAodm9pZCljYXRQb2ludGVyOiAoY29uc3Qgdm9pZCAqKXB0cjsK LSAodm9pZCljYXRMaXRlcmFsOiAoY29uc3QgY2hhciAqKXN0cjsKLSAodm9pZCljYXRTdGFydEV4 cHI7Ci0gKHZvaWQpY2F0RW5kRXhwcjsKLSAodm9pZCljYXRLZXl3b3JkOiAoY29uc3QgY2hhciAq KWtleXdvcmQ7Ci0gKHZvaWQpY2F0U3ltYm9sOiAoY29uc3QgY2hhciAqKXN5bWJvbDsKLSAodm9p ZCljYXRTdHJpbmc6IChjb25zdCBjaGFyICopc3RyOwotICh2b2lkKWNhdFNlcGFyYXRvcjsKLSAo dm9pZCljYXRBcnJheVJhbms6ICh1bnNpZ25lZClyYW5rOwotICh2b2lkKWNhdEVuZEFycmF5Owot ICh2b2lkKWNhdFR5cGU6IChjb25zdCBjaGFyICopdHlwZTsKLSAodm9pZCljYXRDbGFzczogKENs YXNzKWNsYXNzOwotICh2b2lkKWNhdFN0YXJ0RnVuY3Rpb246IChjb25zdCBjaGFyICopZnVuY3Rp b25OYW1lOwotICh2b2lkKWNhdEVuZEZ1bmN0aW9uOwotICh2b2lkKWNhdFN0YXJ0Q29uczsKLSAo dm9pZCljYXRFbmRDb25zOwotICh2b2lkKWNhdFN0YXJ0TGlzdDsKLSAodm9pZCljYXRFbmRMaXN0 OwotICh2b2lkKWNhdFN0YXJ0UXVvdGVkTGlzdDsKLSAodm9pZCljYXRFbmRRdW90ZWRMaXN0Owot ICh2b2lkKWNhdFN0YXJ0UGFyc2U7Ci0gKHZvaWQpY2F0RW5kUGFyc2U7Ci0gKHZvaWQpY2F0U3Rh cnRNYWtlSW5zdGFuY2U6IChjb25zdCBjaGFyICopdHlwZU5hbWU7Ci0gKHZvaWQpY2F0RW5kTWFr ZUluc3RhbmNlOwotICh2b2lkKWNhdFN0YXJ0TWFrZUNsYXNzOiAoY29uc3QgY2hhciAqKWNsYXNz TmFtZTsKLSAodm9pZCljYXRFbmRNYWtlQ2xhc3M7Ci0gKHZvaWQpY2F0VW5zaWduZWRQYWlyOiAo dW5zaWduZWQpYSA6ICh1bnNpZ25lZCliOwotICh2b2lkKWNhdE5pbDsKQGVuZAoKQHByb3RvY29s IElucHV0U3RyZWFtIDxDcmVhdGUsIERyb3AsIENSRUFUQUJMRT4KCgoKCgoKCgoKMjAwMS0wOC0y NCAwMToyMSAgICAgICAgICAgICAgICAgIENvdW50ZXIubWkgICAgICAgICAgICAgICAgICAgUGFn ZSAgIDgxCgoKCgotIF9JX0NyZWF0aW5nOworIGNyZWF0ZTogKGlkIDxab25lPilhWm9uZSBzZXRG aWxlU3RyZWFtOiAoRklMRSAqKWZpbGU7CisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNldEV4 cHI6IGV4cHI7Ci0gc2V0RXhwcjogZXhwcjsKLSBzZXRGaWxlU3RyZWFtOiAoRklMRSAqKWZpbGVT dHJlYW07Ci0gX0lfVXNpbmc7Ci0gKEZJTEUgKilnZXRGaWxlU3RyZWFtOwotIGdldEV4cHI7CkBl bmQKCgpleHRlcm4gaWQgPFN5bWJvbD4gQXJjaGl2ZXJMaXRlcmFsLCBBcmNoaXZlclF1b3RlLCBB cmNoaXZlckVPTCwgQXJjaGl2ZXJEb3Q7CgpAcHJvdG9jb2wgQXJjaGl2ZXJLZXl3b3JkIDxDcmVh dGUsIERyb3AsIFJFVFVSTkFCTEU+CgoKLSBfSV9DcmVhdGluZzsKLSBzZXRLZXl3b3JkTmFtZTog KGNvbnN0IGNoYXIgKiluYW1lOwotIF9JX1VzaW5nOwotIChjb25zdCBjaGFyICopZ2V0S2V5d29y ZE5hbWU7Ci0gKHZvaWQpbGlzcE91dFNoYWxsb3c6IChpZCA8T3V0cHV0U3RyZWFtPilzdHJlYW07 Ci0gKHZvaWQpbGlzcE91dERlZXA6IChpZCA8T3V0cHV0U3RyZWFtPilzdHJlYW07CkBlbmQKCkBw cm90b2NvbCBBcmNoaXZlckFycmF5IDxDcmVhdGUsIERyb3AsIFJFVFVSTkFCTEU+CgoKLSBfSV9D cmVhdGluZzsKLSBzZXRBcnJheTogYXJyYXk7Ci0gX0lfVXNpbmc7Ci0gKHZvaWQgKilnZXREYXRh OwotICh1bnNpZ25lZClnZXRSYW5rOwotICh1bnNpZ25lZCAqKWdldERpbXM7Ci0gKHNpemVfdCln ZXRFbGVtZW50U2l6ZTsKLSAodW5zaWduZWQpZ2V0RWxlbWVudENvdW50OwotIChmY2FsbF90eXBl X3QpZ2V0QXJyYXlUeXBlOwotIGNvbnZlcnRUb1R5cGU6IChjaGFyKWRlc3RUeXBlIGRlc3Q6ICh2 b2lkICopcHRyOwotICh2b2lkKWxpc3BPdXRTaGFsbG93OiAoaWQgPE91dHB1dFN0cmVhbT4pc3Ry ZWFtOwotICh2b2lkKWxpc3BPdXREZWVwOiAoaWQgPE91dHB1dFN0cmVhbT4pc3RyZWFtOwotICh2 b2lkKWRyb3A7CkBlbmQKCkBwcm90b2NvbCBBcmNoaXZlclZhbHVlIDxDcmVhdGUsIERyb3AsIFJF VFVSTkFCTEU+CgoKLSBfSV9DcmVhdGluZzsKLSBzZXREb3VibGU6IChkb3VibGUpdmFsOwotIHNl dExvbmdEb3VibGU6IChsb25nIGRvdWJsZSl2YWw7Ci0gc2V0RmxvYXQ6IChmbG9hdCl2YWw7Ci0g c2V0TG9uZ0xvbmc6IChsb25nIGxvbmcpdmFsOwotIHNldENoYXI6IChjaGFyKXZhbDsKLSBzZXRC b29sZWFuOiAoQk9PTCl2YWw7Ci0gc2V0Q2xhc3M6IChDbGFzcyljbGFzczsKLSBzZXROaWw7CgoK CgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgQ291bnRlci5taSAgICAgICAg ICAgICAgICAgICBQYWdlICAgODIKCgotIF9JX1VzaW5nOwotIChmY2FsbF90eXBlX3QpZ2V0VmFs dWVUeXBlOwotIChkb3VibGUpZ2V0RG91YmxlOwotIChsb25nIGRvdWJsZSlnZXRMb25nRG91Ymxl OwotIChmbG9hdClnZXRGbG9hdDsKLSAobG9uZyBsb25nKWdldExvbmdMb25nOwotIChpbnQpZ2V0 SW50ZWdlcjsKLSAodW5zaWduZWQpZ2V0VW5zaWduZWQ7Ci0gKGNoYXIpZ2V0Q2hhcjsKLSAoQk9P TClnZXRCb29sZWFuOwotIGdldE9iamVjdDsKLSAoQ2xhc3MpZ2V0Q2xhc3M7Ci0gKHZvaWQpbGlz cE91dFNoYWxsb3c6IChpZCA8T3V0cHV0U3RyZWFtPilzdHJlYW07Ci0gKHZvaWQpbGlzcE91dERl ZXA6IChpZCA8T3V0cHV0U3RyZWFtPilzdHJlYW07Ci0gKHZvaWQpZHJvcDsKQGVuZAoKQHByb3Rv Y29sIEFyY2hpdmVyUGFpciA8Q3JlYXRlLCBEcm9wLCBSRVRVUk5BQkxFPgoKCi0gX0lfQ3JlYXRp bmc7Ci0gc2V0Q2FyOiBjYXI7Ci0gc2V0Q2RyOiBjZHI7Ci0gc2V0Q29uc0Zvcm1hdEZsYWc6IChC T09MKXRoZUNvbnNGb3JtYXRGbGFnOwotIF9JX1VzaW5nOwotIGdldENhcjsKLSBnZXRDZHI7Ci0g KEJPT0wpZ2V0Q29uc0Zvcm1hdEZsYWc7Ci0gKHZvaWQpbGlzcE91dFNoYWxsb3c6IChpZCA8T3V0 cHV0U3RyZWFtPilzdHJlYW07Ci0gKHZvaWQpbGlzcE91dERlZXA6IChpZCA8T3V0cHV0U3RyZWFt PilzdHJlYW07CkBlbmQKCkBwcm90b2NvbCBBcmNoaXZlckxpc3QgPExpc3QsIFJFVFVSTkFCTEU+ CgoKLSBfSV9DcmVhdGluZzsKLSBfSV9Vc2luZzsKLSAodm9pZClsaXNwT3V0U2hhbGxvdzogKGlk IDxPdXRwdXRTdHJlYW0+KXN0cmVhbTsKLSAodm9pZClsaXNwT3V0RGVlcDogKGlkIDxPdXRwdXRT dHJlYW0+KXN0cmVhbTsKQGVuZAoKQHByb3RvY29sIEFyY2hpdmVyUXVvdGVkIDxSRVRVUk5BQkxF PgoKCi0gX0lfQ3JlYXRpbmc7Ci0gc2V0UXVvdGVkT2JqZWN0OiB2YWx1ZTsKLSBfSV9Vc2luZzsK LSBnZXRRdW90ZWRPYmplY3Q7Ci0gKHZvaWQpbGlzcE91dERlZXA6IChpZCA8T3V0cHV0U3RyZWFt PilzdHJlYW07CkBlbmQKCgoKQHByb3RvY29sIFN0cmluZyA8Q3JlYXRlLCBEcm9wLCBDb3B5LCBD UkVBVEFCTEU+CiMgMTE1NSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgi Ci0gX0lfQ3JlYXRpbmc7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAg Q291bnRlci5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgODMKCgorIGNyZWF0ZTogKGlkIDxa b25lPilhWm9uZSBzZXRDOiAoY29uc3QgY2hhciAqKWNzdHJpbmc7CgotIF9JX1NldHRpbmc7Ci0g KHZvaWQpc2V0QzogKGNvbnN0IGNoYXIgKiljc3RyaW5nOwoKLSBfSV9Vc2luZzsKLSAoY29uc3Qg Y2hhciAqKWdldEM7Ci0gKHZvaWQpY2F0QzogKGNvbnN0IGNoYXIgKiljc3RyaW5nOwotICh1bnNp Z25lZClnZXRDb3VudDsKQGVuZAoKQHByb3RvY29sIExpc3RTaHVmZmxlciA8Q3JlYXRlLCBEcm9w LCBDUkVBVEFCTEU+CiMgMTE3NiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25z LmgiCi0gX0lfQ3JlYXRpbmc7CgoKLSBzZXRVbmlmb3JtUmFuZG9tOiBkaXN0OwoKCgorIGNyZWF0 ZTogKGlkIDxab25lPilhWm9uZSBzZXRVbmlmb3JtUmFuZG9tOiBkaXN0OwoKLSBfSV9Vc2luZzsK Ci0gc2h1ZmZsZVdob2xlTGlzdDogbGlzdDsKCgoKLSBzaHVmZmxlUGFydGlhbExpc3Q6IGxpc3Qg TnVtOiAodW5zaWduZWQpbnVtOwpAZW5kCgpAcHJvdG9jb2wgUGVybXV0YXRpb25JdGVtIDxDcmVh dGUsIFJFVFVSTkFCTEU+CgoKCi0gX0lfQ3JlYXRpbmc7Ci0gc2V0SXRlbTogaXRlbTsKLSBzZXRQ b3NpdGlvbjogKHVuc2lnbmVkKXBvc2l0aW9uOwotIF9JX1VzaW5nOwotIGdldEl0ZW07Ci0gKHVu c2lnbmVkKWdldFBvc2l0aW9uOwpAZW5kCgpAcHJvdG9jb2wgUGVybXV0YXRpb24gPENvbGxlY3Rp b24sIENyZWF0ZSwgQXJyYXksIENSRUFUQUJMRT4KCgoKCgoKCi0gX0lfQ3JlYXRpbmc7Ci0gc2V0 Q29sbGVjdGlvbjogKGlkIDxDb2xsZWN0aW9uPiljb2xsZWN0aW9uOwotIHNldExhc3RQZXJtdXRh dGlvbjogKGlkIDxQZXJtdXRhdGlvbj4pcGVybXV0YXRpb247Ci0gc2V0VW5pZm9ybVJhbmRvbTog cm5kOwpAZW5kCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgQ291bnRl ci5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgODQKCgoKIyAxICIvdXNyL2xvY2FsL3N3YXJt L2luY2x1ZGUvY29sbGVjdGlvbnMvdHlwZXMuaCIgMQpleHRlcm4gdm9pZCAqX2NvbGxlY3Rpb25z X1tdOwoKZXh0ZXJuIGlkIE9mZnNldHM7CmV4dGVybiBpZCBGb3JFYWNoOwpleHRlcm4gaWQgRm9y RWFjaEtleTsKZXh0ZXJuIGlkIEluZGV4OwpleHRlcm4gaWQgUGVybXV0ZWRJbmRleDsKZXh0ZXJu IGlkIENvbGxlY3Rpb247CmV4dGVybiBpZCBEZWZhdWx0TWVtYmVyOwpleHRlcm4gaWQgTWVtYmVy QmxvY2s7CmV4dGVybiBpZCBBcnJheTsKZXh0ZXJuIGlkIExpc3RJbmRleDsKZXh0ZXJuIGlkIExp c3Q7CmV4dGVybiBpZCBDb21wYXJlRnVuY3Rpb247CmV4dGVybiBpZCBLZXllZENvbGxlY3Rpb247 CmV4dGVybiBpZCBLZXllZENvbGxlY3Rpb25JbmRleDsKZXh0ZXJuIGlkIE1lbWJlclNsb3Q7CmV4 dGVybiBpZCBfU2V0OwpleHRlcm4gaWQgU2V0OwpleHRlcm4gaWQgT3JkZXJlZFNldDsKZXh0ZXJu IGlkIE1hcEluZGV4OwpleHRlcm4gaWQgTWFwOwpleHRlcm4gaWQgT3V0cHV0U3RyZWFtOwpleHRl cm4gaWQgSW5wdXRTdHJlYW07CmV4dGVybiBpZCBBcmNoaXZlcktleXdvcmQ7CmV4dGVybiBpZCBB cmNoaXZlckFycmF5OwpleHRlcm4gaWQgQXJjaGl2ZXJWYWx1ZTsKZXh0ZXJuIGlkIEFyY2hpdmVy UGFpcjsKZXh0ZXJuIGlkIEFyY2hpdmVyTGlzdDsKZXh0ZXJuIGlkIEFyY2hpdmVyUXVvdGVkOwpl eHRlcm4gaWQgU3RyaW5nOwpleHRlcm4gaWQgTGlzdFNodWZmbGVyOwpleHRlcm4gaWQgUGVybXV0 YXRpb25JdGVtOwpleHRlcm4gaWQgUGVybXV0YXRpb247CgoKIyAxICIvdXNyL2xvY2FsL3N3YXJt L2luY2x1ZGUvY29sbGVjdGlvbnMvY2xhc3Nlcy5oIiAxCmV4dGVybiBpZCBpZF9BcnJheV9jOwpl eHRlcm4gaWQgaWRfQXJyYXlJbmRleF9jOwpleHRlcm4gaWQgaWRfQ29sbGVjdGlvbl9hbnk7CmV4 dGVybiBpZCBpZF9JbmRleF9hbnk7CmV4dGVybiBpZCBpZF9QZXJtdXRlZEluZGV4X2M7CmV4dGVy biBpZCBpZF9JbnB1dFN0cmVhbV9jOwpleHRlcm4gaWQgaWRfQXJjaGl2ZXJLZXl3b3JkX2M7CmV4 dGVybiBpZCBpZF9BcmNoaXZlckFycmF5X2M7CmV4dGVybiBpZCBpZF9BcmNoaXZlclZhbHVlX2M7 CmV4dGVybiBpZCBpZF9BcmNoaXZlclBhaXJfYzsKZXh0ZXJuIGlkIGlkX0FyY2hpdmVyTGlzdF9j OwpleHRlcm4gaWQgaWRfQXJjaGl2ZXJRdW90ZWRfYzsKZXh0ZXJuIGlkIGlkX0xpc3RfYW55Owpl eHRlcm4gaWQgaWRfTGlzdEluZGV4X2FueTsKZXh0ZXJuIGlkIGlkX0xpc3RfbGlua2VkOwpleHRl cm4gaWQgaWRfTGlzdEluZGV4X2xpbmtlZDsKZXh0ZXJuIGlkIGlkX0xpc3RfbWxpbmtzOwoKCgoK CgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgIENvdW50ZXIubWkgICAgICAgICAg ICAgICAgICAgUGFnZSAgIDg1CgoKZXh0ZXJuIGlkIGlkX0xpc3RJbmRleF9tbGlua3M7CmV4dGVy biBpZCBpZF9MaXN0U2h1ZmZsZXJfYzsKZXh0ZXJuIGlkIGlkX01hcF9jOwpleHRlcm4gaWQgaWRf TWFwSW5kZXhfYzsKZXh0ZXJuIGlkIGlkX09yZGVyZWRTZXRfYzsKZXh0ZXJuIGlkIGlkX09yZGVy ZWRTZXRJbmRleF9jOwpleHRlcm4gaWQgaWRfT3V0cHV0U3RyZWFtX2M7CmV4dGVybiBpZCBpZF9T ZXRfYzsKZXh0ZXJuIGlkIGlkX1NldEluZGV4X2M7CmV4dGVybiBpZCBpZF9QZXJtdXRhdGlvbkl0 ZW1fYzsKZXh0ZXJuIGlkIGlkX1Blcm11dGF0aW9uX2M7CmV4dGVybiBpZCBpZF9TdHJpbmdfYzsK IyAzOCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zL3R5cGVzLmgiIDIKIyAx MjIxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIgMgojIDI3ICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9leHRlcm52YXIuaCIgMQojIDI4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0 aXZpdHkuaCIgMgoKQHByb3RvY29sIERlZmF1bHRPcmRlcgojIDc1ICIvdXNyL2xvY2FsL3N3YXJt L2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9DcmVhdGluZzsKLSBfSV9TZXR0aW5nOwotIHNldERl ZmF1bHRPcmRlcjogKGlkIDxTeW1ib2w+KWFTeW1ib2w7Ci0gX0lfVXNpbmc7Ci0gKGlkIDxTeW1i b2w+KWdldERlZmF1bHRPcmRlcjsKQGVuZAoKCkBwcm90b2NvbCBBY3Rpdml0eSA8RGVmaW5lZE9i amVjdCwgRHJvcCwgUkVUVVJOQUJMRT4KIyAxMjYgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9h Y3Rpdml0eS5oIgotIF9JX1VzaW5nOwoKCgoKCi0gKGlkIDxTeW1ib2w+KXJ1bjsKCgoKLSAodm9p ZClzdG9wOwoKCgoKCgoKLSAodm9pZCl0ZXJtaW5hdGU7CgoKCgotIChpZCA8U3ltYm9sPiluZXh0 QWN0aW9uOwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgQ291bnRl ci5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgODYKCgotIChpZCA8U3ltYm9sPilzdGVwQWN0 aW9uOwoKCgoKLSAoaWQgPFN5bWJvbD4pZ2V0U3RhdHVzOwojIDE2NyAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL2FjdGl2aXR5LmgiCi0gKGlkIDxTeW1ib2w+KWdldEhvbGRUeXBlOwoKCi0gZ2V0 QWN0aW9uOwoKCi0gZ2V0QWN0aW9uVHlwZTsKCgotICh2b2lkKXNldE93bmVyQWN0aXZpdHk6IG93 bmVyQWN0aXZpdHk7CgoKLSBnZXRPd25lckFjdGl2aXR5OwoKCi0gZ2V0U3ViYWN0aXZpdGllczsK CgotIGdldENvbnRyb2xsaW5nQWN0aXZpdHk7CgoKLSBnZXRUb3BMZXZlbEFjdGl2aXR5OwoKCi0g Z2V0U3dhcm1BY3Rpdml0eTsKCgotIGdldFNjaGVkdWxlQWN0aXZpdHk7CgoKLSBzZXRTZXJpYWxN b2RlOiAoQk9PTClzZXJpYWxNb2RlOwoKCi0gKEJPT0wpZ2V0U2VyaWFsTW9kZTsKCgotIChpZCA8 QWN0aXZpdHk+KWdldEN1cnJlbnRTdWJhY3Rpdml0eTsKQGVuZAoKCmV4dGVybiBpZCA8U3ltYm9s PiBJbml0aWFsaXplZCwgUnVubmluZywgSG9sZGluZywgUmVsZWFzZWQsIFN0b3BwZWQsCiAgVGVy bWluYXRlZCwgQ29tcGxldGVkOwoKQHByb3RvY29sIEFjdGlvbiA8Q3JlYXRlLCBEcm9wLCBHZXRP d25lcj4KIyAyNDIgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgotIF9JX1Vz aW5nOwotICh2b2lkKV9wZXJmb3JtQWN0aW9uXzogKGlkIDxBY3Rpdml0eT4pYWN0aXZpdHk7CkBl bmQKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgQ291bnRlci5taSAg ICAgICAgICAgICAgICAgICBQYWdlICAgODcKCgpAcHJvdG9jb2wgQWN0aW9uQXJncwoKCgoKCgoK LSBfSV9DcmVhdGluZzsKLSAodm9pZClzZXRBcmcxOiBhcmcxOwotICh2b2lkKXNldEFyZzI6IGFy ZzI7Ci0gKHZvaWQpc2V0QXJnMzogYXJnMzsKLSBfSV9Vc2luZzsKLSAodW5zaWduZWQpZ2V0TkFy Z3M7Ci0gZ2V0QXJnMTsKLSBnZXRBcmcyOwotIGdldEFyZzM7CkBlbmQKCkBwcm90b2NvbCBGQWN0 aW9uIDxBY3Rpb24sIFJFVFVSTkFCTEU+CgoKLSBfSV9DcmVhdGluZzsKLSBzZXRDYWxsOiBmY2Fs bDsKLSBfSV9TZXR0aW5nOwotIHNldEF1dG9Ecm9wOiAoQk9PTClhdXRvRHJvcDsKLSBfSV9Vc2lu ZzsKQGVuZAoKQHByb3RvY29sIEFjdGlvblRhcmdldAoKCi0gX0lfQ3JlYXRpbmc7Ci0gKHZvaWQp c2V0VGFyZ2V0OiB0YXJnZXQ7Ci0gX0lfVXNpbmc7Ci0gZ2V0VGFyZ2V0OwpAZW5kCgpAcHJvdG9j b2wgQWN0aW9uU2VsZWN0b3IKCgotIF9JX1NldHRpbmc7Ci0gKHZvaWQpc2V0TWVzc2FnZVNlbGVj dG9yOiAoU0VMKWFTZWw7Ci0gX0lfVXNpbmc7Ci0gKFNFTClnZXRNZXNzYWdlU2VsZWN0b3I7CkBl bmQKCkBwcm90b2NvbCBBY3Rpb25UbyA8QWN0aW9uLCBBY3Rpb25UYXJnZXQsIEFjdGlvblNlbGVj dG9yLCBBY3Rpb25BcmdzLCBSRVRVUk5BQkxFPgoKCkBlbmQKCkBwcm90b2NvbCBBY3Rpb25Gb3JF YWNoIDxBY3Rpb25UbywgRGVmYXVsdE9yZGVyLCBSRVRVUk5BQkxFPgoKCkBlbmQKCgoKCgoKCjIw MDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAgICAgICAgICAg ICAgIFBhZ2UgICA4OAoKCgpAcHJvdG9jb2wgQWN0aW9uRm9yRWFjaEhvbW9nZW5lb3VzIDxBY3Rp b24sIEFjdGlvblRhcmdldCwgQWN0aW9uU2VsZWN0b3IsIERlZmF1bHRPcmRlciwgUkVUVVJOQUJM RT4KCgpAZW5kCgpAcHJvdG9jb2wgRkFjdGlvbkZvckVhY2ggPEZBY3Rpb24sIEFjdGlvblRhcmdl dCwgRGVmYXVsdE9yZGVyPgoKCkBlbmQKCkBwcm90b2NvbCBGQWN0aW9uRm9yRWFjaEhldGVyb2dl bmVvdXMgPEZBY3Rpb25Gb3JFYWNoLCBSRVRVUk5BQkxFPgoKCkBlbmQKCkBwcm90b2NvbCBGQWN0 aW9uRm9yRWFjaEhvbW9nZW5lb3VzIDxGQWN0aW9uRm9yRWFjaCwgUkVUVVJOQUJMRT4KCgoKCgpA ZW5kCgpAcHJvdG9jb2wgQWN0aW9uQ2FsbCA8QWN0aW9uLCBBY3Rpb25BcmdzLCBSRVRVUk5BQkxF PgoKCi0gX0lfQ3JlYXRpbmc7Ci0gKHZvaWQpc2V0RnVuY3Rpb25Qb2ludGVyOiAoZnVuY190KWZw dHI7Ci0gX0lfVXNpbmc7Ci0gKGZ1bmNfdClnZXRGdW5jdGlvblBvaW50ZXI7CkBlbmQKCkBwcm90 b2NvbCBBY3Rpb25DaGFuZ2VkIDxBY3Rpb24sIFJFVFVSTkFCTEU+CgoKQGVuZAoKQHByb3RvY29s IEZBY3Rpb25DcmVhdGluZwoKCi0gX0lfVXNpbmc7Ci0gKGlkIDxGQWN0aW9uPiljcmVhdGVGQWN0 aW9uOiAoaWQgPEZDYWxsPiljYWxsOwpAZW5kCgpAcHJvdG9jb2wgQWN0aW9uQ3JlYXRpbmdDYWxs CgoKCgoKCgotIF9JX1VzaW5nOwotIChpZCA8QWN0aW9uQ2FsbD4pY3JlYXRlQWN0aW9uQ2FsbDog KGZ1bmNfdClmcHRyOwotIChpZCA8QWN0aW9uQ2FsbD4pY3JlYXRlQWN0aW9uQ2FsbDogKGZ1bmNf dClmcHRyIDogYXJnMTsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICBD b3VudGVyLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA4OQoKCi0gKGlkIDxBY3Rpb25DYWxs PiljcmVhdGVBY3Rpb25DYWxsOiAoZnVuY190KWZwdHIgOiBhcmcxIDogYXJnMjsKLSAoaWQgPEFj dGlvbkNhbGw+KWNyZWF0ZUFjdGlvbkNhbGw6IChmdW5jX3QpZnB0ciA6IGFyZzEgOiBhcmcyIDog YXJnMzsKQGVuZAoKQHByb3RvY29sIEFjdGlvbkNyZWF0aW5nVG8KIyAzODQgIi91c3IvbG9jYWwv c3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgotIF9JX1VzaW5nOwotIChpZCA8QWN0aW9uVG8+KWNy ZWF0ZUFjdGlvblRvOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsOwotIChpZCA8QWN0aW9uVG8+ KWNyZWF0ZUFjdGlvblRvOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsIDogYXJnMTsKLSAoaWQg PEFjdGlvblRvPiljcmVhdGVBY3Rpb25UbzogdGFyZ2V0IG1lc3NhZ2U6IChTRUwpYVNlbCA6IGFy ZzEgOiBhcmcyOwotIChpZCA8QWN0aW9uVG8+KWNyZWF0ZUFjdGlvblRvOiB0YXJnZXQgbWVzc2Fn ZTogKFNFTClhU2VsIDogYXJnMSA6IGFyZzIgOiBhcmczOwpAZW5kCgpAcHJvdG9jb2wgQWN0aW9u Q3JlYXRpbmdGb3JFYWNoCiMgNDAyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHku aCIKLSBfSV9Vc2luZzsKLSAoaWQgPEFjdGlvbkZvckVhY2hIb21vZ2VuZW91cz4pY3JlYXRlQWN0 aW9uRm9yRWFjaEhvbW9nZW5lb3VzOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsOwoKLSAoaWQg PEFjdGlvbkZvckVhY2g+KWNyZWF0ZUFjdGlvbkZvckVhY2g6IHRhcmdldCBtZXNzYWdlOiAoU0VM KWFTZWw7Ci0gKGlkIDxBY3Rpb25Gb3JFYWNoPiljcmVhdGVBY3Rpb25Gb3JFYWNoOiB0YXJnZXQg bWVzc2FnZTogKFNFTClhU2VsIDogYXJnMTsKLSAoaWQgPEFjdGlvbkZvckVhY2g+KWNyZWF0ZUFj dGlvbkZvckVhY2g6IHRhcmdldCBtZXNzYWdlOiAoU0VMKWFTZWwgOiBhcmcxIDogYXJnMjsKLSAo aWQgPEFjdGlvbkZvckVhY2g+KWNyZWF0ZUFjdGlvbkZvckVhY2g6IHRhcmdldCBtZXNzYWdlOiAo U0VMKWFTZWwgOiBhcmcxIDogYXJnMiA6IGFyZzM7CkBlbmQKCkBwcm90b2NvbCBGQWN0aW9uQ3Jl YXRpbmdGb3JFYWNoSGV0ZXJvZ2VuZW91cwoKCgoKCi0gX0lfVXNpbmc7Ci0gKGlkIDxGQWN0aW9u Rm9yRWFjaEhldGVyb2dlbmVvdXM+KWNyZWF0ZUZBY3Rpb25Gb3JFYWNoSGV0ZXJvZ2VuZW91czog dGFyZ2V0IGNhbGw6IChpZCA8RkNhbGw+KWNhbGw7CkBlbmQKCkBwcm90b2NvbCBGQWN0aW9uQ3Jl YXRpbmdGb3JFYWNoSG9tb2dlbmVvdXMKCgoKCgotIF9JX1VzaW5nOwotIChpZCA8RkFjdGlvbkZv ckVhY2hIb21vZ2VuZW91cz4pY3JlYXRlRkFjdGlvbkZvckVhY2hIb21vZ2VuZW91czogdGFyZ2V0 IGNhbGw6IChpZCA8RkNhbGw+KWNhbGw7CkBlbmQKCkBwcm90b2NvbCBBY3Rpb25DcmVhdGluZyA8 RkFjdGlvbkNyZWF0aW5nLCBBY3Rpb25DcmVhdGluZ0NhbGwsIEFjdGlvbkNyZWF0aW5nVG8sIEFj dGlvbkNyZWF0aW5nRm9yRWFjaCwgRkFjdGlvbkNyZWF0aW5nRm9yRWFjaEhldGVyb2dlbmVvdXMs IEZBY3Rpb25DcmVhdGluZ0ZvckVhY2hIb21vZ2VuZW91cz4KIyA0NjIgIi91c3IvbG9jYWwvc3dh cm0vaW5jbHVkZS9hY3Rpdml0eS5oIgotIF9JX1VzaW5nOwoKCgoKLSBjcmVhdGVBY3Rpb246IGFu QWN0aW9uVHlwZTsKCkBlbmQKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAg ICAgIENvdW50ZXIubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDkwCgoKZXh0ZXJuIGlkIDxT eW1ib2w+IENvbmN1cnJlbnQsIFNlcXVlbnRpYWwsIFJhbmRvbWl6ZWQ7CiMgNDkzICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHRpbWV2 YWxfdDsKCgoKQHByb3RvY29sIEFjdGl2aXR5SW5kZXggPEluZGV4LCBSRVRVUk5BQkxFPgoKCi0g X0lfVXNpbmc7Ci0gKGlkIDxTeW1ib2w+KWdldEhvbGRUeXBlOwotIChpZCA8QWN0aW9uPiluZXh0 QWN0aW9uOiAoaWQgKilzdGF0dXM7CkBlbmQKCgpleHRlcm4gaWQgPFN5bWJvbD4gSG9sZFN0YXJ0 LCBIb2xkRW5kOwoKQHByb3RvY29sIEFjdGlvblR5cGUKIyA1MzEgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9hY3Rpdml0eS5oIgotIF9JX1VzaW5nOwojIDU1MSAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL2FjdGl2aXR5LmgiCi0gKGlkIDxBY3Rpdml0eT4pYWN0aXZhdGVJbjogc3dhcm1Db250 ZXh0OwpAZW5kCgpAcHJvdG9jb2wgU3luY2hyb25pemF0aW9uVHlwZQojIDU2OSAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiCi0gX0lfQ3JlYXRpbmc7Ci0gKHZvaWQpc2V0U3lu Y2hyb25pemF0aW9uVHlwZTogYVNjaGVkdWxlVHlwZTsKCi0gX0lfVXNpbmc7Ci0gZ2V0U3luY2hy b25pemF0aW9uVHlwZTsKQGVuZAoKQHByb3RvY29sIEF1dG9Ecm9wCiMgNTk2ICIvdXNyL2xvY2Fs L3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9DcmVhdGluZzsKLSBzZXRBdXRvRHJvcDog KEJPT0wpYXV0b0Ryb3A7Ci0gX0lfVXNpbmc7Ci0gKEJPT0wpZ2V0QXV0b0Ryb3A7CkBlbmQKCkBw cm90b2NvbCBDb21wb3VuZEFjdGlvbiA8QWN0aW9uVHlwZSwgQ29sbGVjdGlvbiwgQXV0b0Ryb3As IERlZmF1bHRPcmRlcj4KIyA2MTMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5o IgpAZW5kCgpAcHJvdG9jb2wgQWN0aW9uR3JvdXAgPENvbXBvdW5kQWN0aW9uLCBBY3Rpb25DcmVh dGluZywgRGVmYXVsdE9yZGVyLCBDUkVBVEFCTEU+CiMgNjM0ICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvYWN0aXZpdHkuaCIKQGVuZAoKQHByb3RvY29sIEFjdGlvbkNvbmN1cnJlbnQgPEFjdGlv biwgUkVUVVJOQUJMRT4KLSBfSV9Vc2luZzsKCgotIChpZCA8QWN0aW9uR3JvdXA+KWdldENvbmN1 cnJlbnRHcm91cDsKQGVuZAoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAg ICBDb3VudGVyLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA5MQoKCkBwcm90b2NvbCBSZWxh dGl2ZVRpbWUKCgoKCgoKLSBfSV9TZXR0aW5nOwotIHNldFJlbGF0aXZlVGltZTogKEJPT0wpcmVs YXRpdmVUaW1lOwotIF9JX1VzaW5nOwotIChCT09MKWdldFJlbGF0aXZlVGltZTsKQGVuZAoKQHBy b3RvY29sIFJlcGVhdEludGVydmFsCiMgNjcxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0 aXZpdHkuaCIKLSBfSV9TZXR0aW5nOwotIHNldFJlcGVhdEludGVydmFsOiAodGltZXZhbF90KXJl cGVhdEludGVydmFsOwotIF9JX1VzaW5nOwotICh0aW1ldmFsX3QpZ2V0UmVwZWF0SW50ZXJ2YWw7 CkBlbmQKCkBwcm90b2NvbCBDb25jdXJyZW50R3JvdXBUeXBlCiMgNzA2ICIvdXNyL2xvY2FsL3N3 YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9TZXR0aW5nOwotICh2b2lkKXNldENvbmN1cnJl bnRHcm91cFR5cGU6IGdyb3VwVHlwZTsKLSBfSV9Vc2luZzsKLSBnZXRDb25jdXJyZW50R3JvdXBU eXBlOwpAZW5kCgpAcHJvdG9jb2wgU2luZ2xldG9uR3JvdXBzCiMgNzI4ICIvdXNyL2xvY2FsL3N3 YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9TZXR0aW5nOwotICh2b2lkKXNldFNpbmdsZXRv bkdyb3VwczogKEJPT0wpc2luZ2xldG9uR3JvdXBzOwotIF9JX1VzaW5nOwotIChCT09MKWdldFNp bmdsZXRvbkdyb3VwczsKQGVuZAoKQHByb3RvY29sIFNjaGVkdWxlIDxNYXAsIENvbXBvdW5kQWN0 aW9uLCBBY3Rpb25DcmVhdGluZywgUmVsYXRpdmVUaW1lLCBSZXBlYXRJbnRlcnZhbCwgQ29uY3Vy cmVudEdyb3VwVHlwZSwgU2luZ2xldG9uR3JvdXBzLCBDUkVBVEFCTEU+CiMgNzYzICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9DcmVhdGluZzsKCisgY3JlYXRlOiAo aWQgPFpvbmU+KWFab25lIHNldFJlcGVhdEludGVydmFsOiAodGltZXZhbF90KXJwdEludGVydmFs OwoKCisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNldEF1dG9Ecm9wOiAoQk9PTClhdXRvRHJv cDsKCgoKLSBzZXRLZWVwRW1wdHlGbGFnOiAoQk9PTClrZWVwRW1wdHlGbGFnOwotIF9JX1VzaW5n OwotIGF0OiAodGltZXZhbF90KXRWYWwgY3JlYXRlQWN0aW9uOiBhbkFjdGlvblR5cGU7CgotIChp ZCA8RkFjdGlvbj4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVGQWN0aW9uOiAoaWQgPEZDYWxs PiljYWxsOwotIChpZCA8QWN0aW9uQ2FsbD4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVBY3Rp b25DYWxsOiAoZnVuY190KWZwdHI7Ci0gKGlkIDxBY3Rpb25DYWxsPilhdDogKHRpbWV2YWxfdCl0 VmFsIGNyZWF0ZUFjdGlvbkNhbGw6IChmdW5jX3QpZnB0cjphcmcxOwotIChpZCA8QWN0aW9uQ2Fs bD4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVBY3Rpb25DYWxsOiAoZnVuY190KWZwdHI6YXJn MTphcmcyOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgIENvdW50ZXIu bWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDkyCgoKLSAoaWQgPEFjdGlvbkNhbGw+KWF0OiAo dGltZXZhbF90KXRWYWwgY3JlYXRlQWN0aW9uQ2FsbDogKGZ1bmNfdClmcHRyOmFyZzE6YXJnMjph cmczOwoKLSAoaWQgPEFjdGlvblRvPilhdDogKHRpbWV2YWxfdCl0VmFsIGNyZWF0ZUFjdGlvblRv OiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsOwotIChpZCA8QWN0aW9uVG8+KWF0OiAodGltZXZh bF90KXRWYWwgY3JlYXRlQWN0aW9uVG86IHRhcmdldCBtZXNzYWdlOiAoU0VMKWFTZWw6YXJnMTsK LSAoaWQgPEFjdGlvblRvPilhdDogKHRpbWV2YWxfdCl0VmFsIGNyZWF0ZUFjdGlvblRvOiB0YXJn ZXQgbWVzc2FnZTogKFNFTClhU2VsOmFyZzE6YXJnMjsKLSAoaWQgPEFjdGlvblRvPilhdDogKHRp bWV2YWxfdCl0VmFsIGNyZWF0ZUFjdGlvblRvOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsOmFy ZzE6YXJnMjphcmczOwoKLSAoaWQgPEFjdGlvbkZvckVhY2hIb21vZ2VuZW91cz4pYXQ6ICh0aW1l dmFsX3QpdFZhbCBjcmVhdGVBY3Rpb25Gb3JFYWNoSG9tb2dlbmVvdXM6IHRhcmdldCBtZXNzYWdl OiAoU0VMKWFTZWw7CgotIChpZCA8QWN0aW9uRm9yRWFjaD4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBj cmVhdGVBY3Rpb25Gb3JFYWNoOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsOwotIChpZCA8QWN0 aW9uRm9yRWFjaD4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVBY3Rpb25Gb3JFYWNoOiB0YXJn ZXQgbWVzc2FnZTogKFNFTClhU2VsOmFyZzE7Ci0gKGlkIDxBY3Rpb25Gb3JFYWNoPilhdDogKHRp bWV2YWxfdCl0VmFsIGNyZWF0ZUFjdGlvbkZvckVhY2g6IHRhcmdldCBtZXNzYWdlOiAoU0VMKWFT ZWw6YXJnMTphcmcyOwotIChpZCA8QWN0aW9uRm9yRWFjaD4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBj cmVhdGVBY3Rpb25Gb3JFYWNoOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsOmFyZzE6YXJnMjph cmczOwoKLSAoaWQgPEZBY3Rpb25Gb3JFYWNoSGV0ZXJvZ2VuZW91cz4pYXQ6ICh0aW1ldmFsX3Qp dFZhbCBjcmVhdGVGQWN0aW9uRm9yRWFjaEhldGVyb2dlbmVvdXM6IHRhcmdldCBjYWxsOiAoaWQg PEZDYWxsPiljYWxsOwotIChpZCA8RkFjdGlvbkZvckVhY2hIb21vZ2VuZW91cz4pYXQ6ICh0aW1l dmFsX3QpdFZhbCBjcmVhdGVGQWN0aW9uRm9yRWFjaEhvbW9nZW5lb3VzOiB0YXJnZXQgY2FsbDog KGlkIDxGQ2FsbD4pY2FsbDsKCgoKLSByZW1vdmU6IGFuQWN0aW9uOwoKCi0gKGlkIDxBY3Rpb25H cm91cD4paW5zZXJ0R3JvdXA6ICh0aW1ldmFsX3QpdFZhbDsKQGVuZAoKQHByb3RvY29sIFNjaGVk dWxlQWN0aXZpdHkgPEFjdGl2aXR5LCBSRVRVUk5BQkxFPgoKCi0gX0lfQ3JlYXRpbmc7Ci0gX0lf VXNpbmc7CgotICh0aW1ldmFsX3QpZ2V0Q3VycmVudFRpbWU7CgoKLSBzdGVwVW50aWw6ICh0aW1l dmFsX3QpdFZhbDsKQGVuZAoKQHByb3RvY29sIFN3YXJtQWN0aXZpdHkgPFNjaGVkdWxlQWN0aXZp dHksIFJFVFVSTkFCTEU+CgoKCi0gX0lfVXNpbmc7CgotIGdldFN3YXJtOwoKLSAoaWQgPFNjaGVk dWxlPilnZXRTeW5jaHJvbml6YXRpb25TY2hlZHVsZTsKQGVuZAoKQHByb3RvY29sIEZvckVhY2hB Y3Rpdml0eSA8QWN0aXZpdHksIFJFVFVSTkFCTEU+CgoKCi0gX0lfVXNpbmc7Ci0gZ2V0Q3VycmVu dE1lbWJlcjsKQGVuZAoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICBD b3VudGVyLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA5MwoKCkBwcm90b2NvbCBTd2FybVBy b2Nlc3MgPEFjdGlvblR5cGUsIFpvbmUsIFN5bmNocm9uaXphdGlvblR5cGU+CiMgODUwICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9DcmVhdGluZzsKCgoKCgoKCi0g c2V0SW50ZXJuYWxab25lVHlwZTogYVpvbmVUeXBlOwoKLSBfSV9Vc2luZzsKCgoKCgotIGdldElu dGVybmFsWm9uZTsKCgoKCgotIChpZCA8U3dhcm1BY3Rpdml0eT4pZ2V0QWN0aXZpdHk7CkBlbmQK IyA5MjQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgpAcHJvdG9jb2wgR2V0 U3ViYWN0aXZpdHlBY3Rpb24KCgoKLSBfSV9Vc2luZzsKLSBfZ2V0U3ViYWN0aXZpdHlBY3Rpb25f OwpAZW5kCgoKCgoKZXh0ZXJuIGlkIF9hY3Rpdml0eV9jdXJyZW50OwoKCgpleHRlcm4gaWQgX2Fj dGl2aXR5X2NvbnRleHRfZXJyb3IgKGNvbnN0IGNoYXIgKm1hY3JvTmFtZSk7CgoKQHByb3RvY29s IENvbmN1cnJlbnRHcm91cCA8QWN0aW9uR3JvdXAsIFJFVFVSTkFCTEU+CgoKLSBfSV9Vc2luZzsK LSAodm9pZClfc2V0QWN0aW9uQ29uY3VycmVudF86IGFjdGlvbjsKLSBfZ2V0RW1wdHlBY3Rpb25D b25jdXJyZW50XzsKQGVuZAoKQHByb3RvY29sIENvbmN1cnJlbnRTY2hlZHVsZSA8Q29uY3VycmVu dEdyb3VwLCBTY2hlZHVsZSwgQ1JFQVRBQkxFPgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAg ICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA5NAoKCgpA ZW5kCgpAcHJvdG9jb2wgQWN0aXZhdGlvbk9yZGVyIDxBY3Rpb25Hcm91cCwgUkVUVVJOQUJMRT4K CgotIF9JX1VzaW5nOwoKLSAodm9pZClhZGRMYXN0OiBtZXJnZUFjdGlvbjsKCgoKLSByZW1vdmU6 IG1lcmdlQWN0aW9uOwoKQGVuZAoKCmV4dGVybiBpZCA8RXJyb3I+IEludmFsaWRTd2FybVpvbmU7 CgoKCmV4dGVybiBpZCBfYWN0aXZpdHlfem9uZTsKIyA5ODUgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9hY3Rpdml0eS5oIgpleHRlcm4gQk9PTCAoKl9hY3Rpdml0eV90cmFjZSkgKGlkKTsKIyA5 OTggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgojIDEgIi91c3IvbG9jYWwv c3dhcm0vaW5jbHVkZS9hY3Rpdml0eS90eXBlcy5oIiAxCmV4dGVybiB2b2lkICpfYWN0aXZpdHlf W107CgpleHRlcm4gaWQgRGVmYXVsdE9yZGVyOwpleHRlcm4gaWQgQWN0aXZpdHk7CmV4dGVybiBp ZCBBY3Rpb247CmV4dGVybiBpZCBBY3Rpb25BcmdzOwpleHRlcm4gaWQgRkFjdGlvbjsKZXh0ZXJu IGlkIEFjdGlvblRhcmdldDsKZXh0ZXJuIGlkIEFjdGlvblNlbGVjdG9yOwpleHRlcm4gaWQgQWN0 aW9uVG87CmV4dGVybiBpZCBBY3Rpb25Gb3JFYWNoOwpleHRlcm4gaWQgQWN0aW9uRm9yRWFjaEhv bW9nZW5lb3VzOwpleHRlcm4gaWQgRkFjdGlvbkZvckVhY2g7CmV4dGVybiBpZCBGQWN0aW9uRm9y RWFjaEhldGVyb2dlbmVvdXM7CmV4dGVybiBpZCBGQWN0aW9uRm9yRWFjaEhvbW9nZW5lb3VzOwpl eHRlcm4gaWQgQWN0aW9uQ2FsbDsKZXh0ZXJuIGlkIEFjdGlvbkNoYW5nZWQ7CmV4dGVybiBpZCBG QWN0aW9uQ3JlYXRpbmc7CmV4dGVybiBpZCBBY3Rpb25DcmVhdGluZ0NhbGw7CmV4dGVybiBpZCBB Y3Rpb25DcmVhdGluZ1RvOwpleHRlcm4gaWQgQWN0aW9uQ3JlYXRpbmdGb3JFYWNoOwpleHRlcm4g aWQgRkFjdGlvbkNyZWF0aW5nRm9yRWFjaEhldGVyb2dlbmVvdXM7CmV4dGVybiBpZCBGQWN0aW9u Q3JlYXRpbmdGb3JFYWNoSG9tb2dlbmVvdXM7CmV4dGVybiBpZCBBY3Rpb25DcmVhdGluZzsKZXh0 ZXJuIGlkIEFjdGl2aXR5SW5kZXg7CmV4dGVybiBpZCBBY3Rpb25UeXBlOwpleHRlcm4gaWQgU3lu Y2hyb25pemF0aW9uVHlwZTsKZXh0ZXJuIGlkIEF1dG9Ecm9wOwpleHRlcm4gaWQgQ29tcG91bmRB Y3Rpb247CmV4dGVybiBpZCBBY3Rpb25Hcm91cDsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAg ICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA5NQoKCmV4 dGVybiBpZCBBY3Rpb25Db25jdXJyZW50OwpleHRlcm4gaWQgUmVsYXRpdmVUaW1lOwpleHRlcm4g aWQgUmVwZWF0SW50ZXJ2YWw7CmV4dGVybiBpZCBDb25jdXJyZW50R3JvdXBUeXBlOwpleHRlcm4g aWQgU2luZ2xldG9uR3JvdXBzOwpleHRlcm4gaWQgU2NoZWR1bGU7CmV4dGVybiBpZCBTY2hlZHVs ZUFjdGl2aXR5OwpleHRlcm4gaWQgU3dhcm1BY3Rpdml0eTsKZXh0ZXJuIGlkIEZvckVhY2hBY3Rp dml0eTsKZXh0ZXJuIGlkIFN3YXJtUHJvY2VzczsKZXh0ZXJuIGlkIEdldFN1YmFjdGl2aXR5QWN0 aW9uOwpleHRlcm4gaWQgQ29uY3VycmVudEdyb3VwOwpleHRlcm4gaWQgQ29uY3VycmVudFNjaGVk dWxlOwpleHRlcm4gaWQgQWN0aXZhdGlvbk9yZGVyOwoKCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL2FjdGl2aXR5L2NsYXNzZXMuaCIgMQpleHRlcm4gaWQgaWRfQ0FjdGlvbjsKZXh0ZXJu IGlkIGlkX1BBY3Rpb247CmV4dGVybiBpZCBpZF9QRkFjdGlvbjsKZXh0ZXJuIGlkIGlkX0ZBY3Rp b25fYzsKZXh0ZXJuIGlkIGlkX0FjdGlvbkNhbGxfYzsKZXh0ZXJuIGlkIGlkX0FjdGlvblRvX2M7 CmV4dGVybiBpZCBpZF9BY3Rpb25Gb3JFYWNoX2M7CmV4dGVybiBpZCBpZF9BY3Rpb25Gb3JFYWNo SG9tb2dlbmVvdXNfYzsKZXh0ZXJuIGlkIGlkX0ZBY3Rpb25Gb3JFYWNoSGV0ZXJvZ2VuZW91c19j OwpleHRlcm4gaWQgaWRfRkFjdGlvbkZvckVhY2hIb21vZ2VuZW91c19jOwpleHRlcm4gaWQgaWRf QWN0aW9uR3JvdXBfYzsKZXh0ZXJuIGlkIGlkX0NvbmN1cnJlbnRHcm91cF9jOwpleHRlcm4gaWQg aWRfR3JvdXBBY3Rpdml0eV9jOwpleHRlcm4gaWQgaWRfR3JvdXBJbmRleF9jOwpleHRlcm4gaWQg aWRfR3JvdXBQZXJtdXRlZEluZGV4X2M7CmV4dGVybiBpZCBpZF9Gb3JFYWNoQWN0aXZpdHlfYzsK ZXh0ZXJuIGlkIGlkX0ZvckVhY2hJbmRleF9jOwpleHRlcm4gaWQgaWRfQWN0aW9uVHlwZV9jOwpl eHRlcm4gaWQgaWRfQ29tcG91bmRBY3Rpb25fYzsKZXh0ZXJuIGlkIGlkX1NjaGVkdWxlX2M7CmV4 dGVybiBpZCBpZF9BY3Rpb25Db25jdXJyZW50X2M7CmV4dGVybiBpZCBpZF9Db25jdXJyZW50U2No ZWR1bGVfYzsKZXh0ZXJuIGlkIGlkX0FjdGl2YXRpb25PcmRlcl9jOwpleHRlcm4gaWQgaWRfU2No ZWR1bGVBY3Rpdml0eV9jOwpleHRlcm4gaWQgaWRfU2NoZWR1bGVJbmRleF9jOwpleHRlcm4gaWQg aWRfQWN0aW9uQ2hhbmdlZF9jOwpleHRlcm4gaWQgaWRfQ1N3YXJtUHJvY2VzczsKZXh0ZXJuIGlk IGlkX1N3YXJtQWN0aXZpdHlfYzsKZXh0ZXJuIGlkIGlkX0FjdGlvbk1lcmdlX2M7CmV4dGVybiBp ZCBpZF9BY3Rpdml0eV9jOwojIDQ4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkv dHlwZXMuaCIgMgojIDk5OSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiIDIK IyAyMiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2UuaCIgMgojIDEgIi91c3Iv bG9jYWwvc3dhcm0vaW5jbHVkZS9leHRlcm52YXIuaCIgMQojIDIzICIvdXNyL2xvY2FsL3N3YXJt L2luY2x1ZGUvb2JqZWN0YmFzZS5oIiAyCgpAcHJvdG9jb2wgU3dhcm1PYmplY3QgPENyZWF0ZSwg RHJvcCwgQ1JFQVRBQkxFPgojIDM5ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFz ZS5oIgotIF9JX1VzaW5nOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAg IENvdW50ZXIubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDk2CgoKCgoKLSBnZXRQcm9iZU1h cDsKCgoKLSBnZXRDb21wbGV0ZVByb2JlTWFwOwoKCgotIGdldFByb2JlRm9yVmFyaWFibGU6IChj b25zdCBjaGFyICopYVZhcmlhYmxlOwoKCgotIGdldFByb2JlRm9yTWVzc2FnZTogKGNvbnN0IGNo YXIgKilhTWVzc2FnZTsKQGVuZAoKQHByb3RvY29sIFByb2JlQ29uZmlnCgoKCgoKLSBfSV9Vc2lu ZzsKLSBzZXRPYmplY3RUb05vdGlmeTogYW5PYmplY3Q7Ci0gZ2V0T2JqZWN0VG9Ob3RpZnk7CkBl bmQKCkBwcm90b2NvbCBQcm9iZSA8U3dhcm1PYmplY3QsIFByb2JlQ29uZmlnPgojIDgxICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFzZS5oIgotIF9JX0NyZWF0aW5nOwoKCi0gc2V0 UHJvYmVkQ2xhc3M6IChDbGFzcyljbGFzczsKCi0gc2V0UHJvYmVkT2JqZWN0OiBvYmplY3Q7Ci0g X0lfU2V0dGluZzsKCgoKLSBzZXRTYWZldHk7CgoKCgotIHVuc2V0U2FmZXR5OwoKLSBfSV9Vc2lu ZzsKCgoKCgotIGNsb25lOiAoaWQgPFpvbmU+KWFab25lOwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6 MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA5 NwoKCgoKLSAoQ2xhc3MpZ2V0UHJvYmVkQ2xhc3M7CgoKCgotIChjb25zdCBjaGFyICopZ2V0UHJv YmVkVHlwZTsKQGVuZAoKQHByb3RvY29sIFZhclByb2JlIDxQcm9iZSwgQ1JFQVRBQkxFPgoKCgoK CgotIF9JX0NyZWF0aW5nOwoKCgoKLSBzZXRQcm9iZWRWYXJpYWJsZTogKGNvbnN0IGNoYXIgKilh VmFyaWFibGU7CgotIF9JX1NldHRpbmc7CgoKCgoKCgotIHNldE5vbkludGVyYWN0aXZlOwoKCgoK CgotIHNldFN0cmluZ1JldHVyblR5cGU6IHJldHVyblR5cGU7CgoKCi0gc2V0RmxvYXRGb3JtYXQ6 IChjb25zdCBjaGFyICopZm9ybWF0OwoKLSBfSV9Vc2luZzsKCgotIChjb25zdCBjaGFyICopZ2V0 UHJvYmVkVmFyaWFibGU7CgoKCi0gKEJPT0wpZ2V0SW50ZXJhY3RpdmVGbGFnOwoKCi0gKHZvaWQg Kilwcm9iZVJhdzogYW5PYmplY3Q7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAg ICAgICAgQ291bnRlci5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgOTgKCgoKCgotICh2b2lk ICopcHJvYmVBc1BvaW50ZXI6IGFuT2JqZWN0OwoKCi0gcHJvYmVPYmplY3Q6IGFuT2JqZWN0OwoK CgotIChpbnQpcHJvYmVBc0ludDogYW5PYmplY3Q7CgoKCi0gKGRvdWJsZSlwcm9iZUFzRG91Ymxl OiBhbk9iamVjdDsKCgoKLSAoY29uc3QgY2hhciAqKXByb2JlQXNTdHJpbmc6IGFuT2JqZWN0IEJ1 ZmZlcjogKGNoYXIgKilidWZmZXI7CgoKCi0gKGlkIDxTdHJpbmc+KXByb2JlQXNTdHJpbmc6IGFu T2JqZWN0OwoKCgoKCgotIChjb25zdCBjaGFyICopcHJvYmVBc1N0cmluZzogYW5PYmplY3QKICAg ICAgICAgICAgICAgICAgICAgICBCdWZmZXI6IChjaGFyICopYnVmCiAgICAgICAgICAgIHdpdGhG dWxsUHJlY2lzaW9uOiAoQk9PTClwcmVjaXNpb247CgoKLSAodW5zaWduZWQpZ2V0UmFuazsKCgot IChjb25zdCBjaGFyICopZ2V0QmFzZVR5cGU7CgoKCi0gKHVuc2lnbmVkICopZ2V0RGltczsKCgoK LSBpdGVyYXRlQXNEb3VibGU6IGFuT2JqZWN0IHVzaW5nOiAodm9pZCAoKikgKHVuc2lnbmVkIHJh bmssIHVuc2lnbmVkICp2ZWMsIGRvdWJsZSB2YWwpKWZ1bmM7CgoKCi0gaXRlcmF0ZUFzSW50ZWdl cjogYW5PYmplY3QgdXNpbmc6ICh2b2lkICgqKSAodW5zaWduZWQgcmFuaywgdW5zaWduZWQgKnZl YywgaW50IHZhbCkpZnVuYzsKCgoKLSAodm9pZClzZXREYXRhOiBhbk9iamVjdCBUbzogKHZvaWQg KiluZXdWYWx1ZTsKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgIENv dW50ZXIubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDk5CgoKCgoKCgotIChCT09MKXNldERh dGE6IGFuT2JqZWN0IFRvU3RyaW5nOiAoY29uc3QgY2hhciAqKXM7CgoKCi0gKHZvaWQpc2V0RGF0 YTogYW5PYmplY3QgVG9Eb3VibGU6IChkb3VibGUpdmFsOwoKZXh0ZXJuIGlkIDxTeW1ib2w+IERl ZmF1bHRTdHJpbmcsIENoYXJTdHJpbmcsIEludFN0cmluZzsKQGVuZAoKQHByb3RvY29sIE1lc3Nh Z2VQcm9iZSA8UHJvYmUsIENSRUFUQUJMRT4KCgoKCgoKCi0gX0lfQ3JlYXRpbmc7CgoKLSBzZXRQ cm9iZWRTZWxlY3RvcjogKFNFTClhU2VsOwoKCgoKCi0gc2V0UHJvYmVkTWV0aG9kTmFtZTogKGNv bnN0IGNoYXIgKiltZXRob2ROYW1lOwoKCisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNldFBy b2JlZFNlbGVjdG9yOiAoU0VMKWFTZWw7CgotIF9JX1NldHRpbmc7CgoKCgotIHNldEhpZGVSZXN1 bHQ6IChCT09MKXZhbDsKCi0gX0lfVXNpbmc7CgoKLSAoQk9PTClpc1Jlc3VsdElkOwoKCgotIChC T09MKWlzQXJndW1lbnRJZDogKHVuc2lnbmVkKXdoaWNoOwoKCgotIChjb25zdCBjaGFyICopZ2V0 UHJvYmVkTWVzc2FnZTsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAg Q291bnRlci5taSAgICAgICAgICAgICAgICAgICBQYWdlICAxMDAKCgotICh1bnNpZ25lZClnZXRB cmdDb3VudDsKCgotICh2YWxfdClnZXRBcmc6ICh1bnNpZ25lZCl3aGljaDsKCgoKLSAoY29uc3Qg Y2hhciAqKWdldEFyZ05hbWU6ICh1bnNpZ25lZCl3aGljaDsKCgotIChCT09MKWdldEhpZGVSZXN1 bHQ7CgoKCi0gc2V0QXJnOiAodW5zaWduZWQpd2hpY2ggVG9TdHJpbmc6IChjb25zdCBjaGFyICop d2hhdDsKCgoKCgotIHNldEFyZzogKHVuc2lnbmVkKXdoaWNoIFRvVW5zaWduZWQ6ICh1bnNpZ25l ZCl4OwoKCgotICh2YWxfdClkeW5hbWljQ2FsbE9uOiB0YXJnZXQ7CgoKCgotIChkb3VibGUpZG91 YmxlRHluYW1pY0NhbGxPbjogdGFyZ2V0OwoKCgoKLSAobG9uZylsb25nRHluYW1pY0NhbGxPbjog dGFyZ2V0OwoKCgoKLSAoY29uc3QgY2hhciAqKXN0cmluZ0R5bmFtaWNDYWxsT246IHRhcmdldDsK CgoKCi0gb2JqZWN0RHluYW1pY0NhbGxPbjogdGFyZ2V0OwpAZW5kCgpAcHJvdG9jb2wgUHJvYmVN YXAgPFN3YXJtT2JqZWN0LCBQcm9iZUNvbmZpZywgQ1JFQVRBQkxFPgojIDMzMSAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2UuaCIKLSBfSV9DcmVhdGluZzsKCgoKLSBzZXRQcm9i ZWRDbGFzczogKENsYXNzKWNsYXNzOwoKLSBzZXRQcm9iZWRPYmplY3Q6IG9iamVjdDsKCgoKCgoK CjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAgICAgICAg ICAgICAgIFBhZ2UgIDEwMQoKCi0gX0lfVXNpbmc7CgotICh1bnNpZ25lZClnZXRDb3VudDsKCgoK LSAoQ2xhc3MpZ2V0UHJvYmVkQ2xhc3M7CgoKCgotIGFkZFByb2JlOiAoaWQgPFByb2JlPilhUHJv YmU7CgoKCgotIGFkZFByb2JlTWFwOiBhUHJvYmVNYXA7CgoKCgoKLSBkcm9wUHJvYmVGb3JWYXJp YWJsZTogKGNvbnN0IGNoYXIgKilhVmFyaWFibGU7CgoKCgotIGRyb3BQcm9iZUZvck1lc3NhZ2U6 IChjb25zdCBjaGFyICopYU1lc3NhZ2U7CgoKCgoKLSBkcm9wUHJvYmVNYXA6IGFQcm9iZU1hcDsK CgoKLSAoaWQgPEluZGV4PiliZWdpbjogKGlkIDxab25lPilhWm9uZTsKCgoKCgoKLSBjbG9uZTog KGlkIDxab25lPilhWm9uZTsKCkBlbmQKCkBwcm90b2NvbCBTd2FybSA8U3dhcm1Qcm9jZXNzLCBD UkVBVEFCTEU+CgoKCgoKLSBfSV9Vc2luZzsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAg ICAgICAgICAgICAgQ291bnRlci5taSAgICAgICAgICAgICAgICAgICBQYWdlICAxMDIKCgoKLSBi dWlsZE9iamVjdHM7CgoKLSBidWlsZEFjdGlvbnM7CiMgNDA4ICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvb2JqZWN0YmFzZS5oIgotIChpZCA8QWN0aXZpdHk+KWFjdGl2YXRlSW46IHN3YXJtQ29u dGV4dDsKCgoKLSAoaWQgPFByb2JlTWFwPilnZXRQcm9iZU1hcDsKCgotIChpZCA8UHJvYmVNYXA+ KWdldENvbXBsZXRlUHJvYmVNYXA7CgoKLSAoaWQgPFZhclByb2JlPilnZXRQcm9iZUZvclZhcmlh YmxlOiAoY29uc3QgY2hhciAqKWFWYXJpYWJsZTsKQGVuZAoKQHByb3RvY29sIERlZmF1bHRQcm9i ZU1hcCA8UHJvYmVNYXAsIENSRUFUQUJMRT4KCgoKCgoKCkBlbmQKCkBwcm90b2NvbCBDdXN0b21Q cm9iZU1hcCA8UHJvYmVNYXAsIENSRUFUQUJMRT4KIyA0NDMgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9vYmplY3RiYXNlLmgiCi0gX0lfQ3JlYXRpbmc7CgoKCgoKKyBjcmVhdGU6IChpZCA8Wm9u ZT4pYVpvbmUgZm9yQ2xhc3M6IChDbGFzcylhQ2xhc3Mgd2l0aElkZW50aWZpZXJzOiAoY29uc3Qg Y2hhciAqKXZhcnMsIC4uLjsKLSBfSV9TZXR0aW5nOwoKCi0gYWRkUHJvYmVzRm9yQ2xhc3M6IChD bGFzcykgYUNsYXNzCiAgICB3aXRoSWRlbnRpZmllcnM6IChjb25zdCBjaGFyICopdmFycywgLi4u OwotIF9JX1VzaW5nOwpAZW5kCgpAcHJvdG9jb2wgRW1wdHlQcm9iZU1hcCA8Q3VzdG9tUHJvYmVN YXAsIENSRUFUQUJMRT4KCgoKCi0gX0lfQ3JlYXRpbmc7CgorIGNyZWF0ZTogKGlkIDxab25lPilh Wm9uZSBmb3JDbGFzczogKENsYXNzKWFDbGFzczsKQGVuZAoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6 MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgIDEw MwoKCkBwcm90b2NvbCBDb21wbGV0ZVByb2JlTWFwIDxQcm9iZU1hcCwgQ1JFQVRBQkxFPgoKCgoK CgoKQGVuZAoKQHByb3RvY29sIENvbXBsZXRlVmFyTWFwIDxQcm9iZU1hcCwgQ1JFQVRBQkxFPgoK CgoKCkBlbmQKCkBwcm90b2NvbCBQcm9iZUxpYnJhcnkgPENyZWF0ZSwgRHJvcCwgUHJvYmVDb25m aWcsIENSRUFUQUJMRT4KIyA0OTggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmplY3RiYXNl LmgiCi0gX0lfVXNpbmc7CiMgNTA3ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFz ZS5oIgotIHNldERpc3BsYXlQcmVjaXNpb246ICh1bnNpZ25lZCluU2lnRGlzcGxheTsKCgoKLSAo dW5zaWduZWQpZ2V0RGlzcGxheVByZWNpc2lvbjsKCgoKCgoKCi0gc2V0U2F2ZWRQcmVjaXNpb246 ICh1bnNpZ25lZCluU2lnU2F2ZWQ7CgoKCi0gKHVuc2lnbmVkKWdldFNhdmVkUHJlY2lzaW9uOwoK CgotIChCT09MKWlzUHJvYmVNYXBEZWZpbmVkRm9yOiAoQ2xhc3MpYUNsYXNzOwotIChCT09MKWlz UHJvYmVNYXBEZWZpbmVkRm9yT2JqZWN0OiBhbk9iamVjdDsKCgoKCgoKLSAoaWQgPFByb2JlTWFw PilnZXRQcm9iZU1hcEZvcjogKENsYXNzKWFDbGFzczsKLSAoaWQgPFByb2JlTWFwPilnZXRQcm9i ZU1hcEZvck9iamVjdDogYW5PYmplY3Q7CgoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAg ICAgICAgICAgICAgIENvdW50ZXIubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgMTA0CgoKCi0g KGlkIDxQcm9iZU1hcD4pZ2V0Q29tcGxldGVQcm9iZU1hcEZvcjogKENsYXNzKWFDbGFzczsKLSAo aWQgPFByb2JlTWFwPilnZXRDb21wbGV0ZVByb2JlTWFwRm9yT2JqZWN0OiBhbk9iamVjdDsKCgoK Ci0gKGlkIDxQcm9iZU1hcD4pZ2V0Q29tcGxldGVWYXJNYXBGb3I6IChDbGFzcylhQ2xhc3M7Ci0g KGlkIDxQcm9iZU1hcD4pZ2V0Q29tcGxldGVWYXJNYXBGb3JPYmplY3Q6IGFuT2JqZWN0OwoKCgoK CgotIChpZCA8VmFyUHJvYmU+KWdldFByb2JlRm9yVmFyaWFibGU6IChjb25zdCBjaGFyICopYVZh ciBpbkNsYXNzOiAoQ2xhc3MpYUNsYXNzOwotIChpZCA8VmFyUHJvYmU+KWdldFByb2JlRm9yVmFy aWFibGU6IChjb25zdCBjaGFyICopYVZhciBpbk9iamVjdDogYW5PYmplY3Q7CgoKCgoKCi0gKGlk IDxNZXNzYWdlUHJvYmU+KWdldFByb2JlRm9yTWVzc2FnZTogKGNvbnN0IGNoYXIgKilhTWVzc2Fn ZSBpbkNsYXNzOiAoQ2xhc3MpYUNsYXNzOwotIChpZCA8TWVzc2FnZVByb2JlPilnZXRQcm9iZUZv ck1lc3NhZ2U6IChjb25zdCBjaGFyICopYU1lc3NhZ2UgaW5PYmplY3Q6IGFuT2JqZWN0OwoKCgoK LSBzZXRQcm9iZU1hcDogKGlkIDxQcm9iZU1hcD4pYU1hcCBGb3I6IChDbGFzcylhQ2xhc3M7Ci0g c2V0UHJvYmVNYXA6IChpZCA8UHJvYmVNYXA+KWFNYXAgRm9yT2JqZWN0OiBhbk9iamVjdDsKCkBl bmQKCgpleHRlcm4gaWQgPFByb2JlTGlicmFyeT4gcHJvYmVMaWJyYXJ5OwoKQHByb3RvY29sIEFj dGl2aXR5Q29udHJvbCA8U3dhcm1PYmplY3QsIENSRUFUQUJMRT4KIyA1OTIgIi91c3IvbG9jYWwv c3dhcm0vaW5jbHVkZS9vYmplY3RiYXNlLmgiCi0gX0lfQ3JlYXRpbmc7CgotIF9JX1VzaW5nOwoK CgoKCi0gKHZvaWQpYXR0YWNoVG9BY3Rpdml0eTogKGlkIDxTY2hlZHVsZUFjdGl2aXR5PilhbkFj dGl2aXR5OwoKCgoKCgoKLSAoaWQgPFN5bWJvbD4pcnVuQWN0aXZpdHk7CgoKCgoKCgoyMDAxLTA4 LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgQ291bnRlci5taSAgICAgICAgICAgICAgICAgICBQ YWdlICAxMDUKCgoKCgoKCgotIChpZCA8U3ltYm9sPilzdG9wQWN0aXZpdHk7CgoKCgoKCgotIChp ZCA8U3ltYm9sPiluZXh0QWN0aW9uOwoKCgotIChpZCA8U3ltYm9sPilzdGVwQWN0aW9uOwoKCgoK Ci0gKGlkIDxTeW1ib2w+KXN0ZXBVbnRpbDogKHRpbWV2YWxfdClzdG9wVGltZTsKCgoKCgotICh2 b2lkKXVwZGF0ZVN0YXRlVmFyOwoKCi0gKGlkIDxTeW1ib2w+KWdldFN0YXR1czsKCgotICh2b2lk KXRlcm1pbmF0ZTsKCgotIChpZCA8U2NoZWR1bGVBY3Rpdml0eT4pZ2V0QWN0aXZpdHk7CkBlbmQK CkBjbGFzcyBQcm9iZTsKQGNsYXNzIFZhclByb2JlOwpAY2xhc3MgTWVzc2FnZVByb2JlOwpAY2xh c3MgUHJvYmVNYXA7CkBjbGFzcyBEZWZhdWx0UHJvYmVNYXA7CkBjbGFzcyBDdXN0b21Qcm9iZU1h cDsKQGNsYXNzIEVtcHR5UHJvYmVNYXA7CkBjbGFzcyBDb21wbGV0ZVByb2JlTWFwOwpAY2xhc3Mg Q29tcGxldGVWYXJNYXA7CkBjbGFzcyBQcm9iZUxpYnJhcnk7CkBjbGFzcyBBY3Rpdml0eUNvbnRy b2w7CkBjbGFzcyBTd2FybTsKQGNsYXNzIFN3YXJtT2JqZWN0OwoKCgoKCgoKCjIwMDEtMDgtMjQg MDE6MjEgICAgICAgICAgICAgICAgICBDb3VudGVyLm1pICAgICAgICAgICAgICAgICAgIFBhZ2Ug IDEwNgoKCgpleHRlcm4gY29uc3QgY2hhciAqc3dhcm1fdmVyc2lvbjsKIyAxMSAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2UvU3dhcm1PYmplY3QuaCIgMgoKQGludGVyZmFjZSBT d2FybU9iamVjdDogQ3JlYXRlRHJvcCA8U3dhcm1PYmplY3Q+CnsKfQoKLSBnZXRQcm9iZU1hcDsK LSBnZXRDb21wbGV0ZVByb2JlTWFwOwotIGdldFByb2JlRm9yVmFyaWFibGU6IChjb25zdCBjaGFy ICopYVZhcmlhYmxlOwotIGdldFByb2JlRm9yTWVzc2FnZTogKGNvbnN0IGNoYXIgKilhTWVzc2Fn ZTsKLSAodm9pZClldmVudE9jY3VycmVkT246IGFuT2JqZWN0CiAgICAgICAgICAgICAgICAgICAg dmlhOiBhUHJvYmUKICAgICAgICAgIHdpdGhQcm9iZVR5cGU6IChjb25zdCBjaGFyICopYVByb2Jl VHlwZQogICAgICAgICAgICAgICAgICAgICBvbjogKGNvbnN0IGNoYXIgKilwcm9iZWRFbGVtZW50 CiAgICAgICAgICAgICAgICAgb2ZUeXBlOiAoY2hhcilkYXRhVHlwZQogICAgICAgICAgICAgICB3 aXRoRGF0YTogKHZvaWQgKilkYXRhOwpAZW5kCiMgNyAiQ291bnRlci5oIiAyCgoKCkBpbnRlcmZh Y2UgQ291bnRlcjogU3dhcm1PYmplY3QKewogIGludCB2YWx1ZTsKICBpbnQgaW5jcjsKfQoKLSBz dGVwOwotIHNldEluY3I6IChpbnQpIG47Ci0gcHJpbnQ7CgpAZW5kCiMgNyAiQ291bnRlci5tIiAy CgoKCkBpbXBsZW1lbnRhdGlvbiBDb3VudGVyCgotc3RlcCB7CiAgdmFsdWUgKz0gaW5jcjsKICBy ZXR1cm4gc2VsZjsKfQoKLXNldEluY3I6IChpbnQpIG4gewogIGluY3IgPSBuOwogIHJldHVybiBz ZWxmOwp9CgotcHJpbnQgewogIGZwcmludGYgKHN0ZG91dCwgIiVkXG4iLCB2YWx1ZSk7CiAgcmV0 dXJuIHNlbGY7Cn0KCkBlbmQKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAg ICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgICAgMQoKCiMgMTAgIm1haW4ubSIK IyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvc2ltdG9vbHMuaCIgMQojIDExICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvc2ltdG9vbHMuaCIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1 ZGUvc3dhcm0uaCIgMQojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIgMQoj IDE4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCnR5cGVkZWYgZW51bSB7ZmNh bGxfdHlwZV92b2lkID0gMCwKICAgICAgICAgICAgICBmY2FsbF90eXBlX2Jvb2xlYW4sCiAgICAg ICAgICAgICAgZmNhbGxfdHlwZV91Y2hhciwgZmNhbGxfdHlwZV9zY2hhciwKICAgICAgICAgICAg ICBmY2FsbF90eXBlX3VzaG9ydCwgZmNhbGxfdHlwZV9zc2hvcnQsCiAgICAgICAgICAgICAgZmNh bGxfdHlwZV91aW50LCBmY2FsbF90eXBlX3NpbnQsCiAgICAgICAgICAgICAgZmNhbGxfdHlwZV91 bG9uZywgZmNhbGxfdHlwZV9zbG9uZywKICAgICAgICAgICAgICBmY2FsbF90eXBlX3Vsb25nbG9u ZywgZmNhbGxfdHlwZV9zbG9uZ2xvbmcsCiAgICAgICAgICAgICAgZmNhbGxfdHlwZV9mbG9hdCwg ZmNhbGxfdHlwZV9kb3VibGUsIGZjYWxsX3R5cGVfbG9uZ19kb3VibGUsCiAgICAgICAgICAgICAg ZmNhbGxfdHlwZV9vYmplY3QsIGZjYWxsX3R5cGVfY2xhc3MsCiAgICAgICAgICAgICAgZmNhbGxf dHlwZV9zdHJpbmcsIGZjYWxsX3R5cGVfc2VsZWN0b3IsCiAgICAgICAgICAgICAgZmNhbGxfdHlw ZV9qb2JqZWN0LCBmY2FsbF90eXBlX2pzdHJpbmcsIGZjYWxsX3R5cGVfanNlbGVjdG9yLAogICAg ICAgICAgICAgIGZjYWxsX3R5cGVfaWlkCiAgICAgICAgICAgICAgfSBmY2FsbF90eXBlX3Q7Cgoj IDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMuaCIgMQojIDM0ICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLmgiCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE0 NyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2lu Y2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwojIDE5OSAiL3Vzci9sb2Nh bC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkZGVm LmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDI4NyAiL3Vzci9sb2NhbC9nY2Mz L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkZGVmLmgiIDMK dHlwZWRlZiBsb25nIGludCB3Y2hhcl90OwojIDM1ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv b2JqYy9vYmpjLmgiIDIKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBCT09MOwojIDUxICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLmgiCnR5cGVkZWYgY29uc3Qgc3RydWN0 IG9iamNfc2VsZWN0b3IKewogIHZvaWQgKnNlbF9pZDsKICBjb25zdCBjaGFyICpzZWxfdHlwZXM7 Cn0gKlNFTDsKCmlubGluZSBzdGF0aWMgQk9PTApzZWxfZXEgKFNFTCBzMSwgU0VMIHMyKQp7CiAg aWYgKHMxID09IDAgfHwgczIgPT0gMCkKICAgIHJldHVybiBzMSA9PSBzMjsKICBlbHNlCiAgICBy ZXR1cm4gczEtPnNlbF9pZCA9PSBzMi0+c2VsX2lkOwp9CgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAx OjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAg IDIKCgoKCnR5cGVkZWYgc3RydWN0IG9iamNfb2JqZWN0IHsKICBzdHJ1Y3Qgb2JqY19jbGFzcyog Y2xhc3NfcG9pbnRlcjsKfSAqaWQ7CgoKCgoKdHlwZWRlZiBpZCAoKklNUCkoaWQsIFNFTCwgLi4u KTsKCgoKCgoKdHlwZWRlZiBjaGFyICpTVFI7CiMgOTcgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9vYmpjL29iamMuaCIKdHlwZWRlZiBzdHJ1Y3Qgb2JqY19jbGFzcyAqTWV0YUNsYXNzOwp0eXBl ZGVmIHN0cnVjdCBvYmpjX2NsYXNzICpDbGFzczsKc3RydWN0IG9iamNfY2xhc3MgewogIE1ldGFD bGFzcyBjbGFzc19wb2ludGVyOwoKICBzdHJ1Y3Qgb2JqY19jbGFzcyogc3VwZXJfY2xhc3M7CgoK ICBjb25zdCBjaGFyKiBuYW1lOwogIGxvbmcgdmVyc2lvbjsKICB1bnNpZ25lZCBsb25nIGluZm87 CgogIGxvbmcgaW5zdGFuY2Vfc2l6ZTsKCgoKICBzdHJ1Y3Qgb2JqY19pdmFyX2xpc3QqIGl2YXJz OwoKCgoKCgogIHN0cnVjdCBvYmpjX21ldGhvZF9saXN0KiBtZXRob2RzOwoKCiAgc3RydWN0IHNh cnJheSAqIGR0YWJsZTsKCiAgc3RydWN0IG9iamNfY2xhc3MqIHN1YmNsYXNzX2xpc3Q7CiAgc3Ry dWN0IG9iamNfY2xhc3MqIHNpYmxpbmdfY2xhc3M7CgogIHN0cnVjdCBvYmpjX3Byb3RvY29sX2xp c3QgKnByb3RvY29sczsKICB2b2lkKiBnY19vYmplY3RfdHlwZTsKfTsKIyAxNDEgIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMuaCIKQGNsYXNzIFByb3RvY29sOwoKCgoKCgoKCjIw MDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAg ICAgIFBhZ2UgICAgMwoKCgp0eXBlZGVmIHZvaWQqIHJldHZhbF90Owp0eXBlZGVmIHZvaWQoKmFw cGx5X3QpKHZvaWQpOwp0eXBlZGVmIHVuaW9uIHsKICBjaGFyICphcmdfcHRyOwogIGNoYXIgYXJn X3JlZ3Nbc2l6ZW9mIChjaGFyKildOwp9ICphcmdsaXN0X3Q7CgoKSU1QIG9iamNfbXNnX2xvb2t1 cCAoaWQgcmVjZWl2ZXIsIFNFTCBvcCk7CiMgMzMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9k ZWZvYmouaCIgMgoKdHlwZWRlZiB1bmlvbiB7CiAgaWQgb2JqZWN0OwogIFNFTCBzZWxlY3RvcjsK ICBDbGFzcyBfY2xhc3M7CiAgY29uc3QgY2hhciAqc3RyaW5nOwogIEJPT0wgYm9vbGVhbjsKICBj aGFyIHNjaGFyOwogIHVuc2lnbmVkIGNoYXIgdWNoYXI7CiAgc2hvcnQgc3Nob3J0OwogIHVuc2ln bmVkIHNob3J0IHVzaG9ydDsKICBpbnQgc2ludDsKICB1bnNpZ25lZCBpbnQgdWludDsKICBsb25n IHNsb25nOwogIHVuc2lnbmVkIGxvbmcgdWxvbmc7CiAgbG9uZyBsb25nIHNsb25nbG9uZzsKICB1 bnNpZ25lZCBsb25nIGxvbmcgdWxvbmdsb25nOwogIGZsb2F0IF9mbG9hdDsKICBkb3VibGUgX2Rv dWJsZTsKICBsb25nIGRvdWJsZSBfbG9uZ19kb3VibGU7CiAgdm9pZCAqaWlkOwp9IHR5cGVzX3Q7 Cgp0eXBlZGVmIHN0cnVjdCB7CiAgZmNhbGxfdHlwZV90IHR5cGU7CiAgdHlwZXNfdCB2YWw7Cn0g dmFsX3Q7CgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9kZWZ0eXBl LmgiIDEKIyAyMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9kZWZ0eXBlLmgiCiMg MSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvT2JqZWN0LmgiIDEKIyAzMCAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL29iamMvT2JqZWN0LmgiCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL29iamMvb2JqYy5oIiAxCiMgMzEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpj L09iamVjdC5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvdHlwZWRzdHJl YW0uaCIgMQojIDMwICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy90eXBlZHN0cmVhbS5o IgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMuaCIgMQojIDMxICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy90eXBlZHN0cmVhbS5oIiAyCiMgMSAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL29iamMvaGFzaC5oIiAxCiMgMzEgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9vYmpjL2hhc2guaCIKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAg ICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgICAgNAoKCiMgMSAiL3Vzci9sb2Nh bC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkZGVm LmgiIDEgMwojIDMyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9oYXNoLmgiIDIKIyAx ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLmgiIDEKIyAzMyAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL29iamMvaGFzaC5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNs dWRlL29iamMvZXh0ZXJudmFyLmgiIDEKIyAzNCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29i amMvaGFzaC5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAyNiAiL3Vzci9p bmNsdWRlL3N0cmluZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI4 MyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZz LmgiIDEgMwojIDI4NCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDMxMSAiL3Vzci9p bmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLmgiIDEgMwoj IDMxMiAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDI3ICIvdXNyL2luY2x1ZGUvc3Ry aW5nLmgiIDIgMwoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRl L3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0cmljdCBf X2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3Ny Yywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiB2b2lkICptZW1tb3ZlICh2b2lkICpfX2Rlc3QsIF9f Y29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgICAgICAgIDsKCgoKCgpleHRlcm4g dm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19y ZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24p CiAgICAgICAgICAgIDsKCgoKCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9f Yywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEs IF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICAgICAgICAgIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19z LCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWlu Lm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAgIDUKCgoKCmV4dGVybiB2b2lkICpyYXdtZW1j aHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCgpleHRlcm4gdm9pZCAqbWVtcmNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNp emVfdCBfX24pCiAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpl eHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgICAgICAgICA7CgpleHRlcm4gY2hhciAqc3RybmNweSAo Y2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gY2hhciAqc3RyY2F0 IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Jj KQogICAgICAgICAgICA7CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBf X2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3Mx LCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo YXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCgpleHRlcm4gaW50IHN0cmNvbGwgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBj aGFyICpfX3MyKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRl cm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwoK CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS94 bG9jYWxlLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX19sb2NhbGVfc3RydWN0CnsKCiAgc3RydWN0IGxv Y2FsZV9kYXRhICpfX2xvY2FsZXNbMTNdOwoKCiAgY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICpf X2N0eXBlX2I7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7CiAgY29uc3QgaW50ICpfX2N0 eXBlX3RvdXBwZXI7Cn0gKl9fbG9jYWxlX3Q7CiMgMTA5ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgi IDIgMwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkg ICAgICAgICAgICAgICAgICAgIFBhZ2UgICAgNgoKCgpleHRlcm4gaW50IF9fc3RyY29sbF9sIChf X2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2wpCiAg ICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3QgX19z dHJ4ZnJtX2wgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2wpIDsKCgoKCmV4dGVybiBj aGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2Nf XykpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywg c2l6ZV90IF9fbikKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMg MTU1ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19jb25z dCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJu IGNoYXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjaHJudWwgKF9fY29uc3QgY2hhciAq X19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXpl X3Qgc3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3QpCiAg ICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gc2l6ZV90IHN0 cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgICAg ICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJwYnJrIChf X2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICAgICAgICAgIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBj aGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgICAgICAgICAgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJjYXNlc3RyIChfX2Nv bnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgICAgICAg ICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cnRvayAoY2hh ciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKQogICAg ICAgICAgICA7CgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1h aW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgICAgNwoKCgpleHRlcm4gY2hhciAqX19zdHJ0 b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIDsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hh ciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIDsKCgoKCgoK ZXh0ZXJuIHZvaWQgKm1lbW1lbSAoX19jb25zdCB2b2lkICpfX2hheXN0YWNrLCBzaXplX3QgX19o YXlzdGFja2xlbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX25lZWRsZSwg c2l6ZV90IF9fbmVlZGxlbGVuKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgoKCmV4dGVybiB2b2lkICpfX21lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAog ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNp emVfdCBfX24pIDsKZXh0ZXJuIHZvaWQgKm1lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0 LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBz aXplX3QgX19uKSA7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3Mp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChf X2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCiAgICAgICAgICAgICBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50IF9f ZXJybnVtKSA7CgoKCmV4dGVybiBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIg Kl9fYnVmLCBzaXplX3QgX19idWZsZW4pIDsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQg Kl9fcywgc2l6ZV90IF9fbikgOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICpf X3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIHZvaWQgYnplcm8gKHZv aWQgKl9fcywgc2l6ZV90IF9fbikgOwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAg ICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgICAgOAoKCgpleHRlcm4g aW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3Qg X19uKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNo YXIgKmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBf X2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gaW50IGZmcyAoaW50IF9f aSkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CgoKCgpleHRlcm4gaW50IGZmc2wgKGxvbmcgaW50 IF9fbCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBpbnQg ZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChj b25zdCkpOwoKCgoKZXh0ZXJuIGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f Y29uc3QgY2hhciAqX19zMikKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBj aGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgoKCgoKZXh0ZXJuIGludCBfX3N0cmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3Mx LCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxl X3QgX19sb2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBfX3N0cm5j YXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykKICAgICAg ICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJz ZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIDsKCgoKCmV4dGVybiBpbnQgc3RydmVyc2Nt cCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgICAgICAgICBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAg ICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAgIDkKCgoKZXh0 ZXJuIGNoYXIgKnN0cnNpZ25hbCAoaW50IF9fc2lnKSA7CgoKZXh0ZXJuIGNoYXIgKl9fc3RwY3B5 IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Jj KQogICAgICAgICAgICA7CmV4dGVybiBjaGFyICpzdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19k ZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgICAgICAgIDsKCgoKZXh0 ZXJuIGNoYXIgKl9fc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikg OwpleHRlcm4gY2hhciAqc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p IDsKCgpleHRlcm4gY2hhciAqc3RyZnJ5IChjaGFyICpfX3N0cmluZykgOwoKCmV4dGVybiB2b2lk ICptZW1mcm9iICh2b2lkICpfX3MsIHNpemVfdCBfX24pIDsKCgoKCgoKZXh0ZXJuIGNoYXIgKmJh c2VuYW1lIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIDsKIyAzNTYgIi91c3IvaW5jbHVkZS9z dHJpbmcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZy5oIiAxIDMKIyAzNTcgIi91 c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcy LmgiIDEgMwojIDUyICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvZW5kaWFuLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIg MiAzCiMgMzcgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz L2VuZGlhbi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKIyA1MyAiL3Vz ci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBl cy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5j bHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAz CgoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w LjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgi IDIgMwoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBz aG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7CgoKCgoKCgoyMDAx LTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAg ICBQYWdlICAgMTAKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lv bl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lv bl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNsdWRlL2Jp dHMvdHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2ln bmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0 eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQg X19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNpb25f XyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0 eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19xdWFk X3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVmIF9fdV9p bnQgX191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xvbmcgX19p bm9fdDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19ubGlua190 Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CnR5 cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX3VfbG9u ZyBfX3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX191X2lu dCBfX2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9fZnNp ZF90OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CnR5 cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdXNlY29uZHNf dDsKdHlwZWRlZiBsb25nIGludCBfX3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3di bGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tp ZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToy MSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgIDEx CgoKCnR5cGVkZWYgaW50IF9fa2V5X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19p cGNfcGlkX3Q7CgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxv bmcgaW50IF9fYmxrY250X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVk ZWYgX191X2xvbmcgX19mc2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0 X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBf X2ZzZmlsY250NjRfdDsKCgp0eXBlZGVmIF9fdV9xdWFkX3QgX19pbm82NF90OwoKCnR5cGVkZWYg X19sb2ZmX3QgX19vZmY2NF90OwoKCnR5cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBl ZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRw dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3NvY2tsZW5fdDsKCgoKCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9w dGhyZWFkdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDY4 ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewog ICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRo cmVhZHR5cGVzLmgiIDIgMwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CgoKCgoKCgoyMDAx LTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAg ICBQYWdlICAgMTIKCgogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsK CgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsK CgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0 ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFy YW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJk c2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVf dCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0 cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2Fp dGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15 Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tl eV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21f Y291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1 Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgoKCgoK MjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAg ICAgICAgUGFnZSAgIDEzCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsK fSBwdGhyZWFkX211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgoK CnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX3J3bG9ja190CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFz dGxvY2sgX19yd19sb2NrOwogIGludCBfX3J3X3JlYWRlcnM7CiAgX3B0aHJlYWRfZGVzY3IgX19y d193cml0ZXI7CiAgX3B0aHJlYWRfZGVzY3IgX19yd19yZWFkX3dhaXRpbmc7CiAgX3B0aHJlYWRf ZGVzY3IgX19yd193cml0ZV93YWl0aW5nOwogIGludCBfX3J3X2tpbmQ7CiAgaW50IF9fcndfcHNo YXJlZDsKfSBwdGhyZWFkX3J3bG9ja190OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbG9j a2tpbmQ7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCgoKCnR5cGVk ZWYgdm9sYXRpbGUgaW50IHB0aHJlYWRfc3BpbmxvY2tfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAg c3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fYmFfbG9jazsKICBpbnQgX19iYV9yZXF1aXJlZDsK ICBpbnQgX19iYV9wcmVzZW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fYmFfd2FpdGluZzsKfSBwdGhy ZWFkX2JhcnJpZXJfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhy ZWFkX2JhcnJpZXJhdHRyX3Q7CgoKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAg ICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgICAxNAoKCnR5cGVkZWYg dW5zaWduZWQgbG9uZyBpbnQgcHRocmVhZF90OwojIDE0NCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw ZXMuaCIgMiAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMiAzCiMgMjE3ICIv dXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIHZvaWQgKl9fbWVt cGNweV9zbWFsbCAodm9pZCAqLCBjaGFyLCBjaGFyLCBjaGFyLCBjaGFyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VpbnQxNl90LCBfX3VpbnQxNl90LCBfX3VpbnQz Ml90LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VpbnQzMl90LCBz aXplX3QpOwpleHRlcm4gX19pbmxpbmUgdm9pZCAqCl9fbWVtcGNweV9zbWFsbCAodm9pZCAqX19k ZXN0MSwKICAgICAgICAgICAgICAgICBjaGFyIF9fc3JjMF8xLCBjaGFyIF9fc3JjMl8xLCBjaGFy IF9fc3JjNF8xLCBjaGFyIF9fc3JjNl8xLAogICAgICAgICAgICAgICAgIF9fdWludDE2X3QgX19z cmMwXzIsIF9fdWludDE2X3QgX19zcmM0XzIsCiAgICAgICAgICAgICAgICAgX191aW50MzJfdCBf X3NyYzBfNCwgX191aW50MzJfdCBfX3NyYzRfNCwKICAgICAgICAgICAgICAgICBzaXplX3QgX19z cmNsZW4pCnsKICB1bmlvbiB7CiAgICBfX3VpbnQzMl90IF9fdWk7CiAgICBfX3VpbnQxNl90IF9f dXNpOwogICAgdW5zaWduZWQgY2hhciBfX3VjOwogICAgdW5zaWduZWQgY2hhciBfX2M7CiAgfSAq X191ID0gX19kZXN0MTsKICBzd2l0Y2ggKCh1bnNpZ25lZCBpbnQpIF9fc3JjbGVuKQogICAgewog ICAgY2FzZSAxOgogICAgICBfX3UtPl9fYyA9IF9fc3JjMF8xOwogICAgICBfX3UgPSBfX2V4dGVu c2lvbl9fICgodm9pZCAqKSBfX3UgKyAxKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDI6CiAgICAg IF9fdS0+X191c2kgPSBfX3NyYzBfMjsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQg KikgX191ICsgMik7CiAgICAgIGJyZWFrOwogICAgY2FzZSAzOgogICAgICBfX3UtPl9fdXNpID0g X19zcmMwXzI7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOwog ICAgICBfX3UtPl9fYyA9IF9fc3JjMl8xOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9p ZCAqKSBfX3UgKyAxKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDQ6CiAgICAgIF9fdS0+X191aSA9 IF9fc3JjMF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsK ICAgICAgYnJlYWs7CiAgICBjYXNlIDU6CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAg ICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX2Mg PSBfX3NyYzRfMTsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMSk7 CiAgICAgIGJyZWFrOwogICAgY2FzZSA2OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAg ICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CiAgICAgIF9fdS0+X191 c2kgPSBfX3NyYzRfMjsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsg Mik7CiAgICAgIGJyZWFrOwogICAgY2FzZSA3OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsK ICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CiAgICAgIF9fdS0+ X191c2kgPSBfX3NyYzRfMjsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAg ICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgICAxNQoKCiAgICAgIF9fdSA9IF9f ZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOwogICAgICBfX3UtPl9fYyA9IF9fc3JjNl8x OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAxKTsKICAgICAgYnJl YWs7CiAgICBjYXNlIDg6CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAgICBfX3UgPSBf X2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX3VpID0gX19zcmM0 XzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOwogICAgICBi cmVhazsKICAgIH0KICByZXR1cm4gKHZvaWQgKikgX191Owp9CiMgMzcxICIvdXNyL2luY2x1ZGUv Yml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIHZvaWQgKl9fcmF3bWVtY2hyIChjb25zdCB2b2lkICpf X3MsIGludCBfX2MpOwojIDM5NSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVy biBfX2lubGluZSBjaGFyICpfX3N0cmNweV9zbWFsbCAoY2hhciAqLCBfX3VpbnQxNl90LCBfX3Vp bnQxNl90LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdWludDMyX3Qs IF9fdWludDMyX3QsIHNpemVfdCk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJjcHlfc21h bGwgKGNoYXIgKl9fZGVzdCwKICAgICAgICAgICAgICAgIF9fdWludDE2X3QgX19zcmMwXzIsIF9f dWludDE2X3QgX19zcmM0XzIsCiAgICAgICAgICAgICAgICBfX3VpbnQzMl90IF9fc3JjMF80LCBf X3VpbnQzMl90IF9fc3JjNF80LAogICAgICAgICAgICAgICAgc2l6ZV90IF9fc3JjbGVuKQp7CiAg dW5pb24gewogICAgX191aW50MzJfdCBfX3VpOwogICAgX191aW50MTZfdCBfX3VzaTsKICAgIHVu c2lnbmVkIGNoYXIgX191YzsKICB9ICpfX3UgPSAodm9pZCAqKSBfX2Rlc3Q7CiAgc3dpdGNoICgo dW5zaWduZWQgaW50KSBfX3NyY2xlbikKICAgIHsKICAgIGNhc2UgMToKICAgICAgX191LT5fX3Vj ID0gJ1wwJzsKICAgICAgYnJlYWs7CiAgICBjYXNlIDI6CiAgICAgIF9fdS0+X191c2kgPSBfX3Ny YzBfMjsKICAgICAgYnJlYWs7CiAgICBjYXNlIDM6CiAgICAgIF9fdS0+X191c2kgPSBfX3NyYzBf MjsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMik7CiAgICAgIF9f dS0+X191YyA9ICdcMCc7CiAgICAgIGJyZWFrOwogICAgY2FzZSA0OgogICAgICBfX3UtPl9fdWkg PSBfX3NyYzBfNDsKICAgICAgYnJlYWs7CiAgICBjYXNlIDU6CiAgICAgIF9fdS0+X191aSA9IF9f c3JjMF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKICAg ICAgX191LT5fX3VjID0gJ1wwJzsKICAgICAgYnJlYWs7CiAgICBjYXNlIDY6CiAgICAgIF9fdS0+ X191aSA9IF9fc3JjMF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3Ug KyA0KTsKICAgICAgX191LT5fX3VzaSA9IF9fc3JjNF8yOwogICAgICBicmVhazsKICAgIGNhc2Ug NzoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAg ICAgICAgICAgICAgICAgIFBhZ2UgICAxNgoKCiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80Owog ICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKICAgICAgX191LT5f X3VzaSA9IF9fc3JjNF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3Ug KyAyKTsKICAgICAgX191LT5fX3VjID0gJ1wwJzsKICAgICAgYnJlYWs7CiAgICBjYXNlIDg6CiAg ICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9p ZCAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX3VpID0gX19zcmM0XzQ7CiAgICAgIGJyZWFrOwog ICAgfQogIHJldHVybiBfX2Rlc3Q7Cn0KIyA1NTQgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIu aCIgMwpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHBjcHlfc21hbGwgKGNoYXIgKiwgX191aW50 MTZfdCwgX191aW50MTZfdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X3VpbnQzMl90LCBfX3VpbnQzMl90LCBzaXplX3QpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9f c3RwY3B5X3NtYWxsIChjaGFyICpfX2Rlc3QsCiAgICAgICAgICAgICAgICBfX3VpbnQxNl90IF9f c3JjMF8yLCBfX3VpbnQxNl90IF9fc3JjNF8yLAogICAgICAgICAgICAgICAgX191aW50MzJfdCBf X3NyYzBfNCwgX191aW50MzJfdCBfX3NyYzRfNCwKICAgICAgICAgICAgICAgIHNpemVfdCBfX3Ny Y2xlbikKewogIHVuaW9uIHsKICAgIHVuc2lnbmVkIGludCBfX3VpOwogICAgdW5zaWduZWQgc2hv cnQgaW50IF9fdXNpOwogICAgdW5zaWduZWQgY2hhciBfX3VjOwogICAgY2hhciBfX2M7CiAgfSAq X191ID0gKHZvaWQgKikgX19kZXN0OwogIHN3aXRjaCAoKHVuc2lnbmVkIGludCkgX19zcmNsZW4p CiAgICB7CiAgICBjYXNlIDE6CiAgICAgIF9fdS0+X191YyA9ICdcMCc7CiAgICAgIGJyZWFrOwog ICAgY2FzZSAyOgogICAgICBfX3UtPl9fdXNpID0gX19zcmMwXzI7CiAgICAgIF9fdSA9IF9fZXh0 ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDEpOwogICAgICBicmVhazsKICAgIGNhc2UgMzoKICAg ICAgX191LT5fX3VzaSA9IF9fc3JjMF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9p ZCAqKSBfX3UgKyAyKTsKICAgICAgX191LT5fX3VjID0gJ1wwJzsKICAgICAgYnJlYWs7CiAgICBj YXNlIDQ6CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lv bl9fICgodm9pZCAqKSBfX3UgKyAzKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDU6CiAgICAgIF9f dS0+X191aSA9IF9fc3JjMF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBf X3UgKyA0KTsKICAgICAgX191LT5fX3VjID0gJ1wwJzsKICAgICAgYnJlYWs7CiAgICBjYXNlIDY6 CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgo dm9pZCAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX3VzaSA9IF9fc3JjNF8yOwoKCgoKCgoKMjAw MS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAg ICAgUGFnZSAgIDE3CgoKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsg MSk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA3OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsK ICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CiAgICAgIF9fdS0+ X191c2kgPSBfX3NyYzRfMjsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191 ICsgMik7CiAgICAgIF9fdS0+X191YyA9ICdcMCc7CiAgICAgIGJyZWFrOwogICAgY2FzZSA4Ogog ICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZv aWQgKikgX191ICsgNCk7CiAgICAgIF9fdS0+X191aSA9IF9fc3JjNF80OwogICAgICBfX3UgPSBf X2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAzKTsKICAgICAgYnJlYWs7CiAgICB9CiAgcmV0 dXJuICZfX3UtPl9fYzsKfQojIDg3MyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4 dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJjc3BuX2MxIChfX2NvbnN0IGNoYXIgKl9fcywgY2hh ciBfX3JlamVjdCk7CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJjc3BuX2MxIChfX2NvbnN0 IGNoYXIgKl9fcywgY2hhciBfX3JlamVjdCkKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9 IDA7CiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gIT0gJ1wwJyAmJiBfX3NbX19yZXN1bHRdICE9IF9f cmVqZWN0KQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBfX2lu bGluZSBzaXplX3QgX19zdHJjc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgY2hhciBfX3JlamVj dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fcmVqZWN0Mik7 CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJjc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywg Y2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyKQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVz dWx0ID0gMDsKICB3aGlsZSAoX19zW19fcmVzdWx0XSAhPSAnXDAnICYmIF9fc1tfX3Jlc3VsdF0g IT0gX19yZWplY3QxCiAgICAgICAgICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QyKQogICAg KytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBfX2lubGluZSBzaXplX3Qg X19zdHJjc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgY2hhciBfX3JlamVjdDEsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fcmVqZWN0MiwgY2hhciBfX3JlamVj dDMpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMyAoX19jb25zdCBjaGFyICpf X3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MiwKICAgICAgICAgICAgICBjaGFyIF9f cmVqZWN0MykKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CiAgd2hpbGUgKF9fc1tf X3Jlc3VsdF0gIT0gJ1wwJyAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MQogICAgICAgICAm JiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MiAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0 MykKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CiMgOTI4ICIvdXNyL2luY2x1 ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cnNwbl9jMSAo X19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19hY2NlcHQpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90 CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAg ICAgICAgICAgICAgICBQYWdlICAgMTgKCgpfX3N0cnNwbl9jMSAoX19jb25zdCBjaGFyICpfX3Ms IGNoYXIgX19hY2NlcHQpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwoKICB3aGls ZSAoX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdCkKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9f cmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ryc3BuX2MyIChfX2NvbnN0IGNo YXIgKl9fcywgY2hhciBfX2FjY2VwdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgX19hY2NlcHQyKTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cnNwbl9jMiAo X19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19hY2NlcHQxLCBjaGFyIF9fYWNjZXB0MikKewogIHJl Z2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CgogIHdoaWxlIChfX3NbX19yZXN1bHRdID09IF9f YWNjZXB0MSB8fCBfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MikKICAgICsrX19yZXN1bHQ7CiAg cmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ryc3BuX2MzIChf X2NvbnN0IGNoYXIgKl9fcywgY2hhciBfX2FjY2VwdDEsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgX19hY2NlcHQyLCBjaGFyIF9fYWNjZXB0Myk7CmV4dGVybiBfX2lu bGluZSBzaXplX3QKX19zdHJzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fYWNjZXB0 MSwgY2hhciBfX2FjY2VwdDIsIGNoYXIgX19hY2NlcHQzKQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9f cmVzdWx0ID0gMDsKCiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQxIHx8IF9fc1tf X3Jlc3VsdF0gPT0gX19hY2NlcHQyCiAgICAgICAgIHx8IF9fc1tfX3Jlc3VsdF0gPT0gX19hY2Nl cHQzKQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KIyA5ODMgIi91c3IvaW5j bHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJwYnJrX2My IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX2FjY2VwdDIpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9f c3RycGJya19jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2Vw dDIpCnsKCiAgd2hpbGUgKCpfX3MgIT0gJ1wwJyAmJiAqX19zICE9IF9fYWNjZXB0MSAmJiAqX19z ICE9IF9fYWNjZXB0MikKICAgICsrX19zOwogIHJldHVybiAqX19zID09ICdcMCcgPyAoKHZvaWQg KikwKSA6IChjaGFyICopIChzaXplX3QpIF9fczsKfQoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9f c3RycGJya19jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19hY2NlcHQyLCBpbnQgX19hY2NlcHQzKTsK ZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnBicmtfYzMgKF9fY29uc3QgY2hhciAqX19zLCBp bnQgX19hY2NlcHQxLCBpbnQgX19hY2NlcHQyLAogICAgICAgICAgICAgIGludCBfX2FjY2VwdDMp CnsKCiAgd2hpbGUgKCpfX3MgIT0gJ1wwJyAmJiAqX19zICE9IF9fYWNjZXB0MSAmJiAqX19zICE9 IF9fYWNjZXB0MgogICAgICAgICAmJiAqX19zICE9IF9fYWNjZXB0MykKICAgICsrX19zOwogIHJl dHVybiAqX19zID09ICdcMCcgPyAoKHZvaWQgKikwKSA6IChjaGFyICopIChzaXplX3QpIF9fczsK CgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAg ICAgICAgICAgICAgIFBhZ2UgICAxOQoKCn0KIyAxMDI2ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJp bmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIHNpemVfdApzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9f c3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCnsKICBfX2NvbnN0IGNoYXIgKl9fZW5kID0gKF9fY29u c3QgY2hhciAqKSBtZW1jaHIgKF9fc3RyaW5nLCAnXDAnLCBfX21heGxlbik7CiAgcmV0dXJuIF9f ZW5kID8gKHNpemVfdCkgKF9fZW5kIC0gX19zdHJpbmcpIDogX19tYXhsZW47Cn0KIyAxMDQ1ICIv dXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3Ry dG9rX3JfMWMgKGNoYXIgKl9fcywgY2hhciBfX3NlcCwgY2hhciAqKl9fbmV4dHApOwpleHRlcm4g X19pbmxpbmUgY2hhciAqCl9fc3RydG9rX3JfMWMgKGNoYXIgKl9fcywgY2hhciBfX3NlcCwgY2hh ciAqKl9fbmV4dHApCnsKICBjaGFyICpfX3Jlc3VsdDsKICBpZiAoX19zID09ICgodm9pZCAqKTAp KQogICAgX19zID0gKl9fbmV4dHA7CiAgd2hpbGUgKCpfX3MgPT0gX19zZXApCiAgICArK19fczsK ICBpZiAoKl9fcyA9PSAnXDAnKQogICAgX19yZXN1bHQgPSAoKHZvaWQgKikwKTsKICBlbHNlCiAg ICB7CiAgICAgIF9fcmVzdWx0ID0gX19zOwogICAgICB3aGlsZSAoKl9fcyAhPSAnXDAnICYmICpf X3MgIT0gX19zZXApCiAgICAgICAgKytfX3M7CiAgICAgIGlmICgqX19zID09ICdcMCcpCiAgICAg ICAgKl9fbmV4dHAgPSBfX3M7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAqX19zID0g J1wwJzsKICAgICAgICAgICpfX25leHRwID0gX19zICsgMTsKICAgICAgICB9CiAgICB9CiAgcmV0 dXJuIF9fcmVzdWx0Owp9CiMgMTA5NSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4 dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnNlcF8xYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVj dCk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJzZXBfMWMgKGNoYXIgKipfX3MsIGNoYXIg X19yZWplY3QpCnsKICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0 dmFsID09ICgodm9pZCAqKTApKQogICAgcmV0dXJuICpfX3MgPSAoKHZvaWQgKikwKTsKICBpZiAo Kl9fcmV0dmFsID09IF9fcmVqZWN0KQogICAgKigqX19zKSsrID0gJ1wwJzsKICBlbHNlCiAgICBp ZiAoKCpfX3MgPSAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKF9fcmVqZWN0 KSAmJiAoX19yZWplY3QpID09ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNociAoX19yZXR2YWws IF9fcmVqZWN0KSA6IHN0cmNociAoX19yZXR2YWwsIF9fcmVqZWN0KSkpKSAhPSAoKHZvaWQgKikw KSkKICAgICAgKigqX19zKSsrID0gJ1wwJzsKICAgIGVsc2UKICAgICAgKl9fcyA9ICgodm9pZCAq KTApOwogIHJldHVybiBfX3JldHZhbDsKfQoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3Ryc2Vw XzJjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIpOwpleHRlcm4g X19pbmxpbmUgY2hhciAqCl9fc3Ryc2VwXzJjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0MSwg Y2hhciBfX3JlamVjdDIpCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAg ICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAgMjAKCgp7CiAgcmVnaXN0ZXIgY2hh ciAqX19yZXR2YWwgPSAqX19zOwogIGlmIChfX3JldHZhbCA9PSAoKHZvaWQgKikwKSkKICAgIHJl dHVybiAqX19zID0gKCh2b2lkICopMCk7CiAgaWYgKCpfX3JldHZhbCA9PSBfX3JlamVjdDEgfHwg Kl9fcmV0dmFsID09IF9fcmVqZWN0MikKICAgICooKl9fcykrKyA9ICdcMCc7CiAgZWxzZQogICAg ewogICAgICByZWdpc3RlciBjaGFyICpfX2NwID0gX19yZXR2YWw7CiAgICAgIHdoaWxlICgqX19j cCAhPSAnXDAnICYmICpfX2NwICE9IF9fcmVqZWN0MSAmJiAqX19jcCAhPSBfX3JlamVjdDIpCiAg ICAgICAgKytfX2NwOwogICAgICBpZiAoKl9fY3AgIT0gJ1wwJykKICAgICAgICB7CiAgICAgICAg ICAqX19zID0gX19jcDsKICAgICAgICAgICooKl9fcykrKyA9ICdcMCc7CiAgICAgICAgfQogICAg ICBlbHNlCiAgICAgICAgKl9fcyA9ICgodm9pZCAqKTApOwogICAgfQogIHJldHVybiBfX3JldHZh bDsKfQoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3Ryc2VwXzNjIChjaGFyICoqX19zLCBjaGFy IF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciBfX3JlamVjdDMpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3Ryc2VwXzNj IChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIsIGNoYXIgX19yZWpl Y3QzKQp7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXR2YWwgPSAqX19zOwogIGlmIChfX3JldHZhbCA9 PSAoKHZvaWQgKikwKSkKICAgIHJldHVybiAqX19zID0gKCh2b2lkICopMCk7CiAgaWYgKCpfX3Jl dHZhbCA9PSBfX3JlamVjdDEgfHwgKl9fcmV0dmFsID09IF9fcmVqZWN0MgogICAgICB8fCAqX19y ZXR2YWwgPT0gX19yZWplY3QzKQogICAgKigqX19zKSsrID0gJ1wwJzsKICBlbHNlCiAgICB7CiAg ICAgIHJlZ2lzdGVyIGNoYXIgKl9fY3AgPSBfX3JldHZhbDsKICAgICAgd2hpbGUgKCpfX2NwICE9 ICdcMCcgJiYgKl9fY3AgIT0gX19yZWplY3QxICYmICpfX2NwICE9IF9fcmVqZWN0MgogICAgICAg ICAgICAgJiYgKl9fY3AgIT0gX19yZWplY3QzKQogICAgICAgICsrX19jcDsKICAgICAgaWYgKCpf X2NwICE9ICdcMCcpCiAgICAgICAgewogICAgICAgICAgKl9fcyA9IF9fY3A7CiAgICAgICAgICAq KCpfX3MpKysgPSAnXDAnOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgICpfX3MgPSAoKHZv aWQgKikwKTsKICAgIH0KICByZXR1cm4gX19yZXR2YWw7Cn0KCmV4dGVybiBfX2lubGluZSBjaGFy ICpfX3N0cnNlcF9nIChjaGFyICoqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KTsKZXh0ZXJu IF9faW5saW5lIGNoYXIgKgpfX3N0cnNlcF9nIChjaGFyICoqX19zLCBfX2NvbnN0IGNoYXIgKl9f cmVqZWN0KQp7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXR2YWwgPSAqX19zOwogIGlmIChfX3JldHZh bCA9PSAoKHZvaWQgKikwKSkKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAg ICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgICAyMQoKCiAgICByZXR1cm4gKCh2 b2lkICopMCk7CiAgaWYgKCgqX19zID0gX19leHRlbnNpb25fXyAoeyBjaGFyIF9fYTAsIF9fYTEs IF9fYTI7IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19yZWplY3QpICYmICgoc2l6ZV90KShjb25z dCB2b2lkICopKChfX3JlamVjdCkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoX19yZWpl Y3QpID09IDEpID8gKChfX2EwID0gKChfX2NvbnN0IGNoYXIgKikgKF9fcmVqZWN0KSlbMF0sIF9f YTAgPT0gJ1wwJykgPyAoKHZvaWQpIChfX3JldHZhbCksICgodm9pZCAqKTApKSA6ICgoX19hMSA9 ICgoX19jb25zdCBjaGFyICopIChfX3JlamVjdCkpWzFdLCBfX2ExID09ICdcMCcpID8gKF9fZXh0 ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChfX2EwKSAmJiAoX19hMCkgPT0gJ1wwJyA/ IChjaGFyICopIF9fcmF3bWVtY2hyIChfX3JldHZhbCwgX19hMCkgOiBzdHJjaHIgKF9fcmV0dmFs LCBfX2EwKSkpIDogKChfX2EyID0gKChfX2NvbnN0IGNoYXIgKikgKF9fcmVqZWN0KSlbMl0sIF9f YTIgPT0gJ1wwJykgPyBfX3N0cnBicmtfYzIgKF9fcmV0dmFsLCBfX2EwLCBfX2ExKSA6ICgoKF9f Y29uc3QgY2hhciAqKSAoX19yZWplY3QpKVszXSA9PSAnXDAnID8gX19zdHJwYnJrX2MzIChfX3Jl dHZhbCwgX19hMCwgX19hMSwgX19hMikgOiBzdHJwYnJrIChfX3JldHZhbCwgX19yZWplY3QpKSkp KSA6IHN0cnBicmsgKF9fcmV0dmFsLCBfX3JlamVjdCkpOyB9KSkgIT0gKCh2b2lkICopMCkpCiAg ICAqKCpfX3MpKysgPSAnXDAnOwogIHJldHVybiBfX3JldHZhbDsKfQojIDExODggIi91c3IvaW5j bHVkZS9iaXRzL3N0cmluZzIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiMg MjUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o IiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vzci9s b2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3Rk ZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDUyOCAiL3Vzci9p bmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUpIF9f YXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3Qg X19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX21h bGxvY19fKSk7CiMgMTE4OSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAyIDMKCgoKCmV4 dGVybiBjaGFyICpfX3N0cmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZykgX19hdHRyaWJ1dGVf XyAoKF9fbWFsbG9jX18pKTsKIyAxMjEyICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMK ZXh0ZXJuIGNoYXIgKl9fc3RybmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9f bikKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgMzYwICIvdXNy L2luY2x1ZGUvc3RyaW5nLmgiIDIgMwojIDM1ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2Jq Yy9oYXNoLmgiIDIKIyA0MyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvaGFzaC5oIgp0 eXBlZGVmIHN0cnVjdCBjYWNoZV9ub2RlCnsKICBzdHJ1Y3QgY2FjaGVfbm9kZSAqbmV4dDsKCiAg Y29uc3Qgdm9pZCAqa2V5OwoKCgogIHZvaWQgKnZhbHVlOwp9ICpub2RlX3B0cjsKIyA2NCAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvaGFzaC5oIgp0eXBlZGVmIHVuc2lnbmVkIGludCAo Kmhhc2hfZnVuY190eXBlKSh2b2lkICosIGNvbnN0IHZvaWQgKik7CiMgNzMgIi91c3IvbG9jYWwv c3dhcm0vaW5jbHVkZS9vYmpjL2hhc2guaCIKdHlwZWRlZiBpbnQgKCpjb21wYXJlX2Z1bmNfdHlw ZSkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOwojIDgyICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvb2JqYy9oYXNoLmgiCnR5cGVkZWYgc3RydWN0CnsKCiAgbm9kZV9wdHIgKm5vZGVfdGFi bGU7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAg ICAgICAgICAgICAgICAgICAgUGFnZSAgIDIyCgoKCiAgdW5zaWduZWQgaW50IHNpemU7CgoKICB1 bnNpZ25lZCBpbnQgdXNlZDsKICB1bnNpZ25lZCBpbnQgbWFzazsKCgoKICB1bnNpZ25lZCBpbnQg bGFzdF9idWNrZXQ7CgoKCiAgaGFzaF9mdW5jX3R5cGUgaGFzaF9mdW5jOwoKICBjb21wYXJlX2Z1 bmNfdHlwZSBjb21wYXJlX2Z1bmM7Cn0gY2FjaGVfdDsKCnR5cGVkZWYgY2FjaGVfdCAqY2FjaGVf cHRyOwoKCgpleHRlcm4gY2FjaGVfcHRyIG1vZHVsZV9oYXNoX3RhYmxlLCBjbGFzc19oYXNoX3Rh YmxlOwoKCgpjYWNoZV9wdHIgaGFzaF9uZXcgKHVuc2lnbmVkIGludCBzaXplLAogICAgICAgICAg ICAgICAgICAgIGhhc2hfZnVuY190eXBlIGhhc2hfZnVuYywKICAgICAgICAgICAgICAgICAgICBj b21wYXJlX2Z1bmNfdHlwZSBjb21wYXJlX2Z1bmMpOwoKCgp2b2lkIGhhc2hfZGVsZXRlIChjYWNo ZV9wdHIgY2FjaGUpOwoKCgoKCgp2b2lkIGhhc2hfYWRkIChjYWNoZV9wdHIgKmNhY2hlcCwgY29u c3Qgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSk7CgoKCgp2b2lkIGhhc2hfcmVtb3ZlIChjYWNoZV9w dHIgY2FjaGUsIGNvbnN0IHZvaWQgKmtleSk7CiMgMTQyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1 ZGUvb2JqYy9oYXNoLmgiCm5vZGVfcHRyIGhhc2hfbmV4dCAoY2FjaGVfcHRyIGNhY2hlLCBub2Rl X3B0ciBub2RlKTsKCgoKdm9pZCAqaGFzaF92YWx1ZV9mb3Jfa2V5IChjYWNoZV9wdHIgY2FjaGUs IGNvbnN0IHZvaWQgKmtleSk7CgoKCkJPT0wgaGFzaF9pc19rZXlfaW5faGFzaCAoY2FjaGVfcHRy IGNhY2hlLCBjb25zdCB2b2lkICprZXkpOwojIDE2NCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRl L29iamMvaGFzaC5oIgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAg bWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgIDIzCgoKc3RhdGljIGlubGluZSB1bnNp Z25lZCBpbnQKaGFzaF9wdHIgKGNhY2hlX3B0ciBjYWNoZSwgY29uc3Qgdm9pZCAqa2V5KQp7CiAg cmV0dXJuICgoc2l6ZV90KWtleSAvIHNpemVvZiAodm9pZCAqKSkgJiBjYWNoZS0+bWFzazsKfQoK CgoKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Cmhhc2hfc3RyaW5nIChjYWNoZV9wdHIgY2Fj aGUsIGNvbnN0IHZvaWQgKmtleSkKewogIHVuc2lnbmVkIGludCByZXQgPSAwOwogIHVuc2lnbmVk IGludCBjdHIgPSAwOwoKCiAgd2hpbGUgKCooY2hhciopa2V5KSB7CiAgICByZXQgXj0gKihjaGFy KilrZXkrKyA8PCBjdHI7CiAgICBjdHIgPSAoY3RyICsgMSkgJSBzaXplb2YgKHZvaWQgKik7CiAg fQoKICByZXR1cm4gcmV0ICYgY2FjaGUtPm1hc2s7Cn0KCgoKc3RhdGljIGlubGluZSBpbnQKY29t cGFyZV9wdHJzIChjb25zdCB2b2lkICprMSwgY29uc3Qgdm9pZCAqazIpCnsKICByZXR1cm4gIShr MSAtIGsyKTsKfQoKCgpzdGF0aWMgaW5saW5lIGludApjb21wYXJlX3N0cmluZ3MgKGNvbnN0IHZv aWQgKmsxLCBjb25zdCB2b2lkICprMikKewogIGlmIChrMSA9PSBrMikKICAgIHJldHVybiAxOwog IGVsc2UgaWYgKGsxID09IDAgfHwgazIgPT0gMCkKICAgIHJldHVybiAwOwogIGVsc2UKICAgIHJl dHVybiAhX19leHRlbnNpb25fXyAoeyBzaXplX3QgX19zMV9sZW4sIF9fczJfbGVuOyAoX19idWls dGluX2NvbnN0YW50X3AgKGsxKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAoazIpICYmIChfX3Mx X2xlbiA9IHN0cmxlbiAoazEpLCBfX3MyX2xlbiA9IHN0cmxlbiAoazIpLCAoISgoc2l6ZV90KShj b25zdCB2b2lkICopKChrMSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoazEpID09IDEp IHx8IF9fczFfbGVuID49IDQpICYmICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGsyKSArIDEp IC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShrMikgPT0gMSkgfHwgX19zMl9sZW4gPj0gNCkpID8g bWVtY21wICgoX19jb25zdCBjaGFyICopIChrMSksIChfX2NvbnN0IGNoYXIgKikgKGsyKSwgKF9f czFfbGVuIDwgX19zMl9sZW4gPyBfX3MxX2xlbiA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVpbHRp bl9jb25zdGFudF9wIChrMSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGsxKSArIDEpIC0g KHNpemVfdCkoY29uc3Qgdm9pZCAqKShrMSkgPT0gMSkgJiYgKF9fczFfbGVuID0gc3RybGVuIChr MSksIF9fczFfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKGsyKSAmJiAoKHNpemVf dCkoY29uc3Qgdm9pZCAqKSgoazIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGsyKSA9 PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChrMSkpWzBdIC0gKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKShrMikpWzBdKTsgaWYgKF9fczFfbGVu ID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsxKSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopIChrMikpWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jl c3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKGsxKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChrMikpWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBf X3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChr MSkpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazIp KVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNp Z25lZCBjaGFyICpfX3MyID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopIChrMik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopIChrMSkpWzBdIC0gX19zMlswXSk7IGlmIChfX3MxX2xlbiA+ IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopIChrMSkpWzFdIC0gX19zMlsxXSk7IGlmIChfX3MxX2xlbiA+ IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopIChrMSkpWzJdIC0gX19zMlsyXSk7IGlmIChfX3MxX2xlbiA+ IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAoazEpKVszXSAtIF9fczJbM10pOyB9IH0gX19yZXN1bHQ7IH0p KSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKGsyKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAq KSgoazIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGsyKSA9PSAxKSAmJiAoX19zMl9s ZW4gPSBzdHJsZW4gKGsyKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAo azEpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChrMSkgKyAxKSAtIChzaXplX3QpKGNvbnN0 IHZvaWQgKikoazEpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVz dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsxKSlb MF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopKGsyKSlbMF0p OyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazEpKVsxXSAtICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsyKSlbMV0pOyBpZiAoX19zMl9s ZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazEpKVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsyKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9f cmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKGsxKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChrMikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAo eyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKGsxKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gX19zMVswXSAt ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsyKSlbMF07IGlm IChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0g KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazIpKVsxXSk7IGlm IChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzJdIC0g KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazIpKVsyXSk7IGlm IChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoX19zMVszXSAtICgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsyKSlbM10pOyB9IH0g X19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKGsxLCBrMikpKSk7IH0pOwp9CiMgMzIgIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9vYmpjL3R5cGVkc3RyZWFtLmgiIDIKIyAxICIvdXNyL2xvY2FsL2dj YzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAx IDMKIyAzNiAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu MC4xL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMK IyAzNyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4x L2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1s aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCgoy MDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAg ICAgICBQYWdlICAgMjQKCgojIDQzICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvdHlwZXMuaCIgMSAzCiMgNDUgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDUzICIvdXNyL2xvY2Fs L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRpby5o IiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7CiMgNjMgIi91c3IvbG9jYWwvZ2NjMy9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlw ZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgX19GSUxFOwojIDczICIvdXNyL2xvY2FsL2djYzMvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2xpYmlvLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiMgOSAiL3Vzci9pbmNsdWRlL19HX2NvbmZp Zy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMTAgIi91c3IvaW5j bHVkZS9fR19jb25maWcuaCIgMiAzCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMTIgIi91 c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRl L3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHdpbnRfdDsKIyAxNSAiL3Vzci9pbmNs dWRlL19HX2NvbmZpZy5oIiAyIDMKIyAyNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg MwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAu MS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoK IyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMKIyA1MSAiL3Vzci9pbmNsdWRlL3dj aGFyLmgiIDIgMwojIDY3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwp0eXBlZGVmIHN0cnVjdAp7 CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193Y2g7CiAgICBjaGFyIF9f d2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CiMgMjUgIi91c3IvaW5jbHVkZS9f R19jb25maWcuaCIgMiAzCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmZfdCBfX3BvczsKICBfX21i c3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmNjRf dCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3M2NF90OwojIDQ0ICIvdXNy L2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMSAzCiMg MjYgIi91c3IvaW5jbHVkZS9nY29udi5oIiAzCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAg ICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAgMjUKCgojIDEg Ii91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2djb252Lmgi IDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93 Y2hhci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzMuMC4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIu aCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDUxICIvdXNyL2lu Y2x1ZGUvd2NoYXIuaCIgMiAzCiMgMjkgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCiMgMSAi L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1 ZGUvc3RkZGVmLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKCgoKZW51 bQp7CiAgX19HQ09OVl9PSyA9IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09OVl9OT0RCLAog IF9fR0NPTlZfTk9NRU0sCgogIF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09OVl9GVUxMX09V VFBVVCwKICBfX0dDT05WX0lMTEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBMRVRFX0lOUFVU LAoKICBfX0dDT05WX0lMTEVHQUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVSTkFMX0VSUk9S Cn07CgoKCmVudW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dDT05WX0lHTk9S RV9FUlJPUlMgPSAweDAwMDIKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3RydWN0IF9fZ2Nv bnZfc3RlcF9kYXRhOwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3QgX19nY29u dl90cmFuc19kYXRhOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0IF9fZ2Nv bnZfc3RlcCAqLCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwgX19jb25zdCB1bnNpZ25lZCBjaGFy ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBzaXplX3Qg KiwgaW50LCBpbnQpOwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAg IG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgICAyNgoKCgp0eXBlZGVmIGludCAoKl9f Z2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpf X2djb252X2VuZF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAo Kl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAq LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFy ICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBj aGFyICosIHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAo dm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hh ciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBj aGFyICosIF9fY29uc3QgY2hhciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0 KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19l bmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252 X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJh bnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsK ICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoK CgpzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpf X3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRl cjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2Zj dCBfX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0 IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRl ZF9mcm9tOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5t aSAgICAgICAgICAgICAgICAgICAgUGFnZSAgIDI3CgoKICBpbnQgX19taW5fbmVlZGVkX3RvOwog IGludCBfX21heF9uZWVkZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9pZCAqX19kYXRh Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNoYXIgKl9fb3V0 YnVmOwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGludCBfX2ZsYWdzOwoKCgog IGludCBfX2ludm9jYXRpb25fY291bnRlcjsKCgoKICBpbnQgX19pbnRlcm5hbF91c2U7CgogIF9f bWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwoKCgogIHN0cnVjdCBf X2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9fZ2NvbnZf aW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0ZXAgKl9fc3RlcHM7 CiAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhIFtdOwp9ICpf X2djb252X3Q7CiMgNDUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCnR5cGVkZWYgdW5p b24KewogIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1Y3Qg X19nY29udl9pbmZvIF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhOwog IH0gX19jb21iaW5lZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0 dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEg ICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgICAyOAoK CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18p KSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21v ZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJp YnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKIyAzMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi IDIgMwojIDUxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMK IyA0MyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4x L2luY2x1ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFf bGlzdDsKIyA1MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE1OCAiL3Vzci9pbmNsdWRl L2xpYmlvLmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNjggIi91 c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCnN0cnVj dCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19G SUxFICpfc2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAz Cn07CgoKZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0 X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2NvbnYKfTsKIyAyNTkg Ii91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsK CgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBf SU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9w dHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciog X0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9i YXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAg ICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAgMjkKCgogIHN0 cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47Cgog IGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90IF9vbGRfb2Zmc2V0OwoKCgog IHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0 OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2NrOwojIDMwMyAiL3Vz ci9pbmNsdWRlL2xpYmlvLmgiIDMKICBfX29mZjY0X3QgX29mZnNldDsKCgoKCgogIHZvaWQgKl9f cGFkMTsKICB2b2lkICpfX3BhZDI7CgogIGludCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAq IHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgp0eXBlZGVmIHN0cnVj dCBfSU9fRklMRSBfSU9fRklMRTsKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1 Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9w bHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFf c3RkZXJyXzsKIyAzNDIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgX19zc2l6ZV90 IF9faW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0 ZXMpOwoKCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqX19jb29r aWUsIF9fY29uc3QgY2hhciAqX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBfX24pOwoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAg ICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgIDMwCgoKCgoKCnR5cGVkZWYgaW50 IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19wb3MsIGludCBfX3cp OwoKCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2llKTsKCgoKCnR5cGVk ZWYgX19pb19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb193cml0 ZV9mbiBjb29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3NlZWtfZm4gY29va2ll X3NlZWtfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNvb2tpZV9jbG9zZV9mdW5j dGlvbl90OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJlYWQ7CiAgX19pb193 cml0ZV9mbiAqd3JpdGU7CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9faW9fY2xvc2VfZm4gKmNs b3NlOwp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lPX2Nvb2tpZV9pb19m dW5jdGlvbnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxl OwoKCmV4dGVybiB2b2lkIF9JT19jb29raWVfaW5pdCAoc3RydWN0IF9JT19jb29raWVfZmlsZSAq X19jZmlsZSwgaW50IF9fcmVhZF93cml0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICpfX2Nvb2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2Zucyk7CgoKCgoKCgpl eHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX191ZmxvdyAo X0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cgKF9JT19GSUxFICosIGludCkgOwpl eHRlcm4gd2ludF90IF9fd3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gd2ludF90IF9f d3VmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiB3aW50X3QgX193b3ZlcmZsb3cgKF9JT19GSUxF ICosIHdpbnRfdCkgOwojIDQyNCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBf SU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywg X0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIDsK ZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAqX19mcCkgOwoKZXh0ZXJuIGludCBfSU9f cGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgOwoKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6 MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgICAz MQoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAqKSA7CmV4dGVybiB2b2lk IF9JT19mdW5sb2NrZmlsZSAoX0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2Zp bGUgKF9JT19GSUxFICopIDsKIyA0NTQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBp bnQgX0lPX3Zmc2NhbmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVz dHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVz dHJpY3QpIDsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBj b25zdCBjaGFyICpfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3Zh X2xpc3QpIDsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3Nz aXplX3QpIDsKZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4gKF9JT19GSUxFICosIHZvaWQgKiwgc2l6 ZV90KSA7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklMRSAqLCBfX29mZjY0 X3QsIGludCwgaW50KSA7CmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICos IF9fb2ZmNjRfdCwgaW50KSA7CgpleHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lP X0ZJTEUgKikgOwojIDc0ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCnR5cGVkZWYgX19nbnVjX3ZhX2xp c3QgX19ub3RfdmFfbGlzdF9fOwojIDg4ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgX0dfZnBvc190 IGZwb3NfdDsKCgoKCnR5cGVkZWYgX0dfZnBvczY0X3QgZnBvczY0X3Q7CiMgMTM3ICIvdXNyL2xv Y2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRp by5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDEzOCAiL3Vz ci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUv c3RkaW8uaCIgMiAzCgoKCmV4dGVybiBGSUxFICpzdGRpbjsKZXh0ZXJuIEZJTEUgKnN0ZG91dDsK ZXh0ZXJuIEZJTEUgKnN0ZGVycjsKIyAxNTIgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCByZW1v dmUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgOwoKZXh0ZXJuIGludCByZW5hbWUgKF9fY29u c3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcpIDsKCgoKCmV4dGVybiBGSUxFICp0 bXBmaWxlICh2b2lkKSA7CiMgMTY4ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICp0bXBmaWxl NjQgKHZvaWQpIDsKCgpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIDsKCgoKCgoKCgoK CgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAg ICAgICAgICBQYWdlICAgMzIKCgpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgOwoj IDE4OCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4x L2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdGVtcG5hbSAoX19jb25zdCBjaGFyICpf X2RpciwgX19jb25zdCBjaGFyICpfX3BmeCkKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChf X21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIDsKCmV4 dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gaW50IGZmbHVzaF91 bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZmNsb3NlYWxsICh2b2lk KSA7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m aWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19t b2RlcykgOwoKZXh0ZXJuIEZJTEUgKmZyZW9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt KSA7CiMgMjMyICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4wLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICpmb3BlbjY0IChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX21vZGVzKSA7CmV4dGVybiBGSUxFICpmcmVvcGVuNjQgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAg RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50 IF9fZmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgOwoKCgoKCmV4dGVybiBGSUxFICpmb3BlbmNv b2tpZSAodm9pZCAqX19yZXN0cmljdCBfX21hZ2ljX2Nvb2tpZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAg ICAgICAgICAgICBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9faW9fZnVuY3MpIDsKCgpleHRl cm4gRklMRSAqZm1lbW9wZW4gKHZvaWQgKl9fcywgc2l6ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIg Kl9fbW9kZXMpIDsKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAg IG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgICAzMwoKCgpleHRlcm4gRklMRSAqb3Bl bl9tZW1zdHJlYW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fYnVmbG9jLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX3NpemVsb2MpIDsKCgoKCgpleHRlcm4g dm9pZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3Qg X19idWYpIDsKCgoKZXh0ZXJuIGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt LCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgIGludCBfX21vZGVz LCBzaXplX3QgX19uKSA7CgoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJp Y3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IF9fc2l6ZSkgOwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3Ry ZWFtKSA7CgoKCgpleHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0s CiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAu Li4pIDsKCmV4dGVybiBpbnQgcHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt YXQsIC4uLikgOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikg OwoKCmV4dGVybiBpbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9s aXN0IF9fYXJnKSA7CgpleHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgICAgICAgIDsKCmV4dGVybiBp bnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSA7 CgoKCmV4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19t YXhsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv cm1hdCwgLi4uKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJp bnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBf X3MsIHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgICAgICAgICBf X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgoKCgoK MjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAg ICAgICAgUGFnZSAgIDM0CgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3Ry aWN0IF9fcHRyLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLAogICAgICAgICAgICAgICAg ICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgo X19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBfX2FzcHJpbnRmIChj aGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChf X2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwpleHRlcm4gaW50IGFzcHJpbnRmIChjaGFy ICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt YXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19m ZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LAogICAgICAgICAgICAgICAgICAgICBf X2dudWNfdmFfbGlzdCBfX2FyZykKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1h dF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IGRwcmludGYgKGludCBfX2ZkLCBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICAgICAgICAgIF9fYXR0cmli dXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCgoKZXh0ZXJuIGludCBm c2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJuIGludCBzY2FuZiAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgc3Nj YW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCgoKZXh0ZXJuIGludCB2ZnNj YW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y bWF0LAogICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgICAgICAg ICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgpleHRl cm4gaW50IHZzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNf dmFfbGlzdCBfX2FyZykKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf X3NjYW5mX18sIDEsIDApKSk7CgoKZXh0ZXJuIGludCB2c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgICAgICAgICBfX2F0dHJpYnV0 ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCgoKZXh0ZXJuIGludCBmZ2V0 YyAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgOwoK CmV4dGVybiBpbnQgZ2V0Y2hhciAodm9pZCkgOwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAg ICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAgMzUKCgoK CgoKCmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGlu dCBnZXRjaGFyX3VubG9ja2VkICh2b2lkKSA7CgoKCgpleHRlcm4gaW50IGZnZXRjX3VubG9ja2Vk IChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmcHV0YyAoaW50IF9fYywgRklMRSAq X19zdHJlYW0pIDsKZXh0ZXJuIGludCBwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwoK CmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgOwoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191 bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgcHV0Y191 bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBwdXRjaGFyX3Vu bG9ja2VkIChpbnQgX19jKSA7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkg OwoKCmV4dGVybiBpbnQgcHV0dyAoaW50IF9fdywgRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVy biBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sIEZJTEUgKl9fcmVz dHJpY3QgX19zdHJlYW0pCiAgICAgICAgICAgIDsKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzX3VubG9j a2VkIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgoKCgoKCgoKMjAwMS0wOC0yNCAw MToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAg IDM2CgoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgOwojIDQzNiAiL3Vzci9sb2Nh bC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkaW8u aCIgMwpleHRlcm4gX19zc2l6ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGlu ZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBf X24sIGludCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUg Kl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKZXh0ZXJuIF9fc3NpemVfdCBnZXRkZWxpbSAoY2hhciAq Kl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgoKZXh0ZXJuIF9fc3NpemVfdCBn ZXRsaW5lIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmcHV0cyAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAg ICAgICAgICAgOwoKCgpleHRlcm4gaW50IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtKSA7CgoKCmV4dGVybiBpbnQgcHV0cyAoX19jb25zdCBjaGFyICpfX3MpIDsKCgoK ZXh0ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBz aXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsK CmV4dGVybiBzaXplX3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNp emVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jl c3RyaWN0IF9fcykgOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jl c3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CmV4dGVybiBzaXplX3Qg ZndyaXRlX3VubG9ja2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBf X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpf X3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVh bSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgOwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6 MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgICAz NwoKCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiB2b2lk IHJld2luZCAoRklMRSAqX19zdHJlYW0pIDsKIyA0OTkgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGlu dCBmc2Vla28gKEZJTEUgKl9fc3RyZWFtLCBfX29mZl90IF9fb2ZmLCBpbnQgX193aGVuY2UpIDsK CmV4dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIGludCBm Z2V0cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zX3QgKl9fcmVzdHJpY3QgX19w b3MpCiAgICAgICAgICAgIDsKCmV4dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9f Y29uc3QgZnBvc190ICpfX3BvcykgOwojIDUzMyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZz ZWVrbzY0IChGSUxFICpfX3N0cmVhbSwgX19vZmY2NF90IF9fb2ZmLCBpbnQgX193aGVuY2UpIDsK ZXh0ZXJuIF9fb2ZmNjRfdCBmdGVsbG82NCAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBm Z2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0 IF9fcG9zKQogICAgICAgICAgICA7CmV4dGVybiBpbnQgZnNldHBvczY0IChGSUxFICpfX3N0cmVh bSwgX19jb25zdCBmcG9zNjRfdCAqX19wb3MpIDsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJ TEUgKl9fc3RyZWFtKSA7CgpleHRlcm4gaW50IGZlb2YgKEZJTEUgKl9fc3RyZWFtKSA7CgpleHRl cm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJf dW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklM RSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFt KSA7CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSA7CgoKCgpleHRl cm4gaW50IHN5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0 W107CgoKZXh0ZXJuIGludCBfc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qg X3N5c19lcnJsaXN0W107CgoKCgoKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUgKl9fc3RyZWFtKSA7 CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAg ICAgICAgICAgICAgICAgUGFnZSAgIDM4CgoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQg KEZJTEUgKl9fc3RyZWFtKSA7CgoKCgoKCmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25zdCBjaGFy ICpfX2NvbW1hbmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgOwoKCmV4dGVybiBpbnQgcGNsb3Nl IChGSUxFICpfX3N0cmVhbSkgOwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3Mp IDsKCgoKCgpleHRlcm4gY2hhciAqY3VzZXJpZCAoY2hhciAqX19zKSA7CgoKCgpzdHJ1Y3Qgb2Jz dGFjazsKCgpleHRlcm4gaW50IG9ic3RhY2tfcHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0 cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChz dHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZ3MpIDsKCgoKCgoKCmV4dGVybiB2b2lk IGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUg KEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUgKEZJTEUgKl9fc3Ry ZWFtKSA7CiMgNjQwICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8u aCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDMKCgoKCgoKCjIwMDEtMDgt MjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBh Z2UgICAzOQoKCmV4dGVybiBfX2lubGluZSBpbnQKdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKewogIHJldHVybiB2ZnByaW50ZiAo c3Rkb3V0LCBfX2ZtdCwgX19hcmcpOwp9CgoKZXh0ZXJuIF9faW5saW5lIGludApnZXRjaGFyICh2 b2lkKQp7CiAgcmV0dXJuIF9JT19nZXRjIChzdGRpbik7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBp bnQKZ2V0Y191bmxvY2tlZCAoRklMRSAqX19mcCkKewogIHJldHVybiAoKF9fZnApLT5fSU9fcmVh ZF9wdHIgPj0gKF9fZnApLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChfX2ZwKSA6ICoodW5zaWdu ZWQgY2hhciAqKSAoX19mcCktPl9JT19yZWFkX3B0cisrKTsKfQoKCmV4dGVybiBfX2lubGluZSBp bnQKZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkKewogIHJldHVybiAoKHN0ZGluKS0+X0lPX3JlYWRf cHRyID49IChzdGRpbiktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKHN0ZGluKSA6ICoodW5zaWdu ZWQgY2hhciAqKSAoc3RkaW4pLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoKCmV4dGVybiBfX2lubGlu ZSBpbnQKcHV0Y2hhciAoaW50IF9fYykKewogIHJldHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQp Owp9CgoKCgpleHRlcm4gX19pbmxpbmUgaW50CmZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxF ICpfX3N0cmVhbSkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9f c3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVk IGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9w dHIrKyA9IChfX2MpKSk7Cn0KCgoKCgpleHRlcm4gX19pbmxpbmUgaW50CnB1dGNfdW5sb2NrZWQg KGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dy aXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3Ry ZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFt KS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAg ICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgIDQwCgoK CgpleHRlcm4gX19pbmxpbmUgaW50CnB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpCnsKICByZXR1 cm4gKCgoc3Rkb3V0KS0+X0lPX3dyaXRlX3B0ciA+PSAoc3Rkb3V0KS0+X0lPX3dyaXRlX2VuZCkg PyBfX292ZXJmbG93IChzdGRvdXQsICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQg Y2hhcikgKCooc3Rkb3V0KS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmV4dGVy biBfX2lubGluZSBfX3NzaXplX3QKZ2V0bGluZSAoY2hhciAqKl9fbGluZXB0ciwgc2l6ZV90ICpf X24sIEZJTEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJuIF9fZ2V0ZGVsaW0gKF9fbGluZXB0ciwgX19u LCAnXG4nLCBfX3N0cmVhbSk7Cn0KCgoKCgpleHRlcm4gX19pbmxpbmUgaW50CmZlb2ZfdW5sb2Nr ZWQgKEZJTEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgx MCkgIT0gMCk7Cn0KCgpleHRlcm4gX19pbmxpbmUgaW50CmZlcnJvcl91bmxvY2tlZCAoRklMRSAq X19zdHJlYW0pCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDIwKSAhPSAwKTsK fQojIDY0MSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu MC4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCiMgMzMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9v YmpjL3R5cGVkc3RyZWFtLmgiIDIKCnR5cGVkZWYgaW50ICgqb2JqY190eXBlZF9yZWFkX2Z1bmMp KHZvaWQqLCBjaGFyKiwgaW50KTsKdHlwZWRlZiBpbnQgKCpvYmpjX3R5cGVkX3dyaXRlX2Z1bmMp KHZvaWQqLCBjb25zdCBjaGFyKiwgaW50KTsKdHlwZWRlZiBpbnQgKCpvYmpjX3R5cGVkX2ZsdXNo X2Z1bmMpKHZvaWQqKTsKdHlwZWRlZiBpbnQgKCpvYmpjX3R5cGVkX2VvZl9mdW5jKSh2b2lkKik7 CiMgNDggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL3R5cGVkc3RyZWFtLmgiCnR5cGVk ZWYgc3RydWN0IG9iamNfdHlwZWRfc3RyZWFtIHsKICB2b2lkKiBwaHlzaWNhbDsKICBjYWNoZV9w dHIgb2JqZWN0X3RhYmxlOwogIGNhY2hlX3B0ciBzdHJlYW1fdGFibGU7CiAgY2FjaGVfcHRyIGNs YXNzX3RhYmxlOwogIGNhY2hlX3B0ciBvYmplY3RfcmVmczsKICBpbnQgbW9kZTsKICBpbnQgdHlw ZTsKICBpbnQgdmVyc2lvbjsKICBpbnQgd3JpdGluZ19yb290X3A7CiAgb2JqY190eXBlZF9yZWFk X2Z1bmMgcmVhZDsKICBvYmpjX3R5cGVkX3dyaXRlX2Z1bmMgd3JpdGU7CiAgb2JqY190eXBlZF9l b2ZfZnVuYyBlb2Y7CiAgb2JqY190eXBlZF9mbHVzaF9mdW5jIGZsdXNoOwoKCgoKCgoKMjAwMS0w OC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAg UGFnZSAgIDQxCgoKfSBUeXBlZFN0cmVhbTsKIyA5MyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRl L29iamMvdHlwZWRzdHJlYW0uaCIKaW50IG9iamNfd3JpdGVfdHlwZSAoVHlwZWRTdHJlYW0qIHN0 cmVhbSwgY29uc3QgY2hhciogdHlwZSwgY29uc3Qgdm9pZCogZGF0YSk7CmludCBvYmpjX3JlYWRf dHlwZSAoVHlwZWRTdHJlYW0qIHN0cmVhbSwgY29uc3QgY2hhciogdHlwZSwgdm9pZCogZGF0YSk7 CgppbnQgb2JqY193cml0ZV90eXBlcyAoVHlwZWRTdHJlYW0qIHN0cmVhbSwgY29uc3QgY2hhciog dHlwZSwgLi4uKTsKaW50IG9iamNfcmVhZF90eXBlcyAoVHlwZWRTdHJlYW0qIHN0cmVhbSwgY29u c3QgY2hhciogdHlwZSwgLi4uKTsKCmludCBvYmpjX3dyaXRlX29iamVjdF9yZWZlcmVuY2UgKFR5 cGVkU3RyZWFtKiBzdHJlYW0sIGlkIG9iamVjdCk7CmludCBvYmpjX3dyaXRlX3Jvb3Rfb2JqZWN0 IChUeXBlZFN0cmVhbSogc3RyZWFtLCBpZCBvYmplY3QpOwoKbG9uZyBvYmpjX2dldF9zdHJlYW1f Y2xhc3NfdmVyc2lvbiAoVHlwZWRTdHJlYW0qIHN0cmVhbSwgQ2xhc3MgY2xhc3MpOwoKCgoKCgpp bnQgb2JqY193cml0ZV9hcnJheSAoVHlwZWRTdHJlYW0qIHN0cmVhbSwgY29uc3QgY2hhciogdHlw ZSwKICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgY29uc3Qgdm9pZCogZGF0YSk7Cmlu dCBvYmpjX3JlYWRfYXJyYXkgKFR5cGVkU3RyZWFtKiBzdHJlYW0sIGNvbnN0IGNoYXIqIHR5cGUs CiAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgdm9pZCogZGF0YSk7CgppbnQgb2JqY193 cml0ZV9vYmplY3QgKFR5cGVkU3RyZWFtKiBzdHJlYW0sIGlkIG9iamVjdCk7CmludCBvYmpjX3Jl YWRfb2JqZWN0IChUeXBlZFN0cmVhbSogc3RyZWFtLCBpZCogb2JqZWN0KTsKIyAxMjQgIi91c3Iv bG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL3R5cGVkc3RyZWFtLmgiClR5cGVkU3RyZWFtKiBvYmpj X29wZW5fdHlwZWRfc3RyZWFtIChGSUxFKiBwaHlzaWNhbCwgaW50IG1vZGUpOwpUeXBlZFN0cmVh bSogb2JqY19vcGVuX3R5cGVkX3N0cmVhbV9mb3JfZmlsZSAoY29uc3QgY2hhciogZmlsZV9uYW1l LCBpbnQgbW9kZSk7Cgp2b2lkIG9iamNfY2xvc2VfdHlwZWRfc3RyZWFtIChUeXBlZFN0cmVhbSog c3RyZWFtKTsKCkJPT0wgb2JqY19lbmRfb2ZfdHlwZWRfc3RyZWFtIChUeXBlZFN0cmVhbSogc3Ry ZWFtKTsKdm9pZCBvYmpjX2ZsdXNoX3R5cGVkX3N0cmVhbSAoVHlwZWRTdHJlYW0qIHN0cmVhbSk7 CiMgMzIgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL09iamVjdC5oIiAyCgoKCgoKQGlu dGVyZmFjZSBPYmplY3QKewogICAgQ2xhc3MgaXNhOwp9CgoKKyBpbml0aWFsaXplOwotIGluaXQ7 CgoKKyBuZXc7CisgYWxsb2M7Ci0gZnJlZTsKLSBjb3B5OwotIHNoYWxsb3dDb3B5OwotIGRlZXBl bjsKLSBkZWVwQ29weTsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAg IG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgICA0MgoKCgoKLSAoQ2xhc3MpY2xhc3M7 Ci0gKENsYXNzKXN1cGVyQ2xhc3M7Ci0gKE1ldGFDbGFzcyltZXRhQ2xhc3M7Ci0gKGNvbnN0IGNo YXIgKiluYW1lOwoKCi0gc2VsZjsKLSAodW5zaWduZWQgaW50KWhhc2g7Ci0gKEJPT0wpaXNFcXVh bDphbk9iamVjdDsKLSAoaW50KWNvbXBhcmU6YW5vdGhlck9iamVjdDsKCgotIChCT09MKWlzTWV0 YUNsYXNzOwotIChCT09MKWlzQ2xhc3M7Ci0gKEJPT0wpaXNJbnN0YW5jZTsKCgotIChCT09MKWlz S2luZE9mOihDbGFzcylhQ2xhc3NPYmplY3Q7Ci0gKEJPT0wpaXNNZW1iZXJPZjooQ2xhc3MpYUNs YXNzT2JqZWN0OwotIChCT09MKWlzS2luZE9mQ2xhc3NOYW1lZDooY29uc3QgY2hhciAqKWFDbGFz c05hbWU7Ci0gKEJPT0wpaXNNZW1iZXJPZkNsYXNzTmFtZWQ6KGNvbnN0IGNoYXIgKilhQ2xhc3NO YW1lOwoKCisgKEJPT0wpaW5zdGFuY2VzUmVzcG9uZFRvOihTRUwpYVNlbDsKLSAoQk9PTClyZXNw b25kc1RvOihTRUwpYVNlbDsKCgotIChCT09MKWNvbmZvcm1zVG86KFByb3RvY29sKilhUHJvdG9j b2w7CgoKKyAoSU1QKWluc3RhbmNlTWV0aG9kRm9yOihTRUwpYVNlbDsKLSAoSU1QKW1ldGhvZEZv cjooU0VMKWFTZWw7CisgKHN0cnVjdCBvYmpjX21ldGhvZF9kZXNjcmlwdGlvbiAqKWRlc2NyaXB0 aW9uRm9ySW5zdGFuY2VNZXRob2Q6KFNFTClhU2VsOwotIChzdHJ1Y3Qgb2JqY19tZXRob2RfZGVz Y3JpcHRpb24gKilkZXNjcmlwdGlvbkZvck1ldGhvZDooU0VMKWFTZWw7CgoKLSBwZXJmb3JtOihT RUwpYVNlbDsKLSBwZXJmb3JtOihTRUwpYVNlbCB3aXRoOmFuT2JqZWN0OwotIHBlcmZvcm06KFNF TClhU2VsIHdpdGg6YW5PYmplY3QxIHdpdGg6YW5PYmplY3QyOwoKCi0gKHJldHZhbF90KWZvcndh cmQ6KFNFTClhU2VsIDooYXJnbGlzdF90KWFyZ0ZyYW1lOwotIChyZXR2YWxfdClwZXJmb3Jtdjoo U0VMKWFTZWwgOihhcmdsaXN0X3QpYXJnRnJhbWU7CgoKKyBwb3NlQXM6KENsYXNzKWFDbGFzc09i amVjdDsKLSAoQ2xhc3MpdHJhbnNtdXRlQ2xhc3NUbzooQ2xhc3MpYUNsYXNzT2JqZWN0OwoKCi0g c3ViY2xhc3NSZXNwb25zaWJpbGl0eTooU0VMKWFTZWw7Ci0gbm90SW1wbGVtZW50ZWQ6KFNFTClh U2VsOwotIHNob3VsZE5vdEltcGxlbWVudDooU0VMKWFTZWw7CgoKCgoKCgoKCjIwMDEtMDgtMjQg MDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2Ug ICA0MwoKCi0gZG9lc05vdFJlY29nbml6ZTooU0VMKWFTZWw7Ci0gZXJyb3I6KGNvbnN0IGNoYXIg KilhU3RyaW5nLCAuLi47CgoKKyAoaW50KXZlcnNpb247Cisgc2V0VmVyc2lvbjooaW50KWFWZXJz aW9uOworIChpbnQpc3RyZWFtVmVyc2lvbjogKFR5cGVkU3RyZWFtKilhU3RyZWFtOwoKLSByZWFk OiAoVHlwZWRTdHJlYW0qKWFTdHJlYW07Ci0gd3JpdGU6IChUeXBlZFN0cmVhbSopYVN0cmVhbTsK LSBhd2FrZTsKCkBlbmQKIyAyMiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9kZWZ0 eXBlLmgiIDIKCgoKCgoKQHByb3RvY29sIENSRUFUQUJMRQpAZW5kCgoKQHByb3RvY29sIFJFVFVS TkFCTEUKQGVuZAojIDQ2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL2RlZnR5cGUu aCIKdHlwZWRlZiB2b2lkICgqbm90aWZ5X3QpKCBpZCBvYmplY3QsIGlkIHJlYWxsb2NBZGRyZXNz LCB2b2lkICphcmcgKTsKCgoKCgoKdHlwZWRlZiB2b2lkICpyZWZfdDsKCgoKCnR5cGVkZWYgdm9p ZCAoKmZ1bmNfdCkoIHZvaWQgKTsKCgoKCnR5cGVkZWYgaWQgKCpmaXh1cFJvdXRpbmVfdCkoIHZv aWQgKmZpeHVwQ29udGV4dCwgaWQgZml4dXBPYmplY3QgKTsKdHlwZWRlZiB2b2lkICgqZml4dXBf dCkoIGZpeHVwUm91dGluZV90IGZpeHVwUm91dGluZSwgdm9pZCAqZml4dXBDb250ZXh0LAogICAg ICAgICAgICAgICAgICAgICAgICAgIGlkIGZpeHVwQXJndW1lbnQgKTsKIyA2NyAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRl L2V4dGVybnZhci5oIiAxCiMgNjggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIg MgojIDc3ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCkBwcm90b2NvbCBHZXRO YW1lCiMgODkgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIKLSBfSV9Vc2luZzsK LSAoY29uc3QgY2hhciAqKWdldE5hbWU7CkBlbmQKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAg ICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgICA0NAoKCgpA cHJvdG9jb2wgRGVmaW5lZE9iamVjdCA8R2V0TmFtZT4KIyAxMDggIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9kZWZvYmouaCIKLSBfSV9Vc2luZzsKIyAxMTcgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9kZWZvYmouaCIKLSAoQk9PTClyZXNwb25kc1RvOiAoU0VMKWFTZWw7CgorIChCT09MKWNv bmZvcm1zVG86IChQcm90b2NvbCAqKXByb3RvY29sOwotIChCT09MKWNvbmZvcm1zVG86IChQcm90 b2NvbCAqKXByb3RvY29sOwoKCgotIGdldENsYXNzOwoKCi0gKGNvbnN0IGNoYXIgKilnZXRUeXBl TmFtZTsKCgoKLSAocmVmX3QpYWRkUmVmOiAobm90aWZ5X3Qpbm90aWZ5RnVuY3Rpb24gd2l0aEFy Z3VtZW50OiAodm9pZCAqKWFyZzsKCgotICh2b2lkKXJlbW92ZVJlZjogKHJlZl90KXJlZlZhbDsK CgotIChpbnQpY29tcGFyZTogYW5PYmplY3Q7CgoKLSBwZXJmb3JtOiAoU0VMKWFTZWw7CgoKLSBw ZXJmb3JtOiAoU0VMKWFTZWwgd2l0aDogYW5PYmplY3QxOwoKCi0gcGVyZm9ybTogKFNFTClhU2Vs IHdpdGg6IGFuT2JqZWN0MSB3aXRoOiBhbk9iajI7CgoKLSBwZXJmb3JtOiAoU0VMKWFTZWwgd2l0 aDogYW5PYmplY3QxIHdpdGg6IGFuT2JqMiB3aXRoOiBhbk9iajM7CgoKCi0gKHZvaWQpc2V0RGlz cGxheU5hbWU6IChjb25zdCBjaGFyICopZGlzcGxheU5hbWU7CgoKCgotIChjb25zdCBjaGFyICop Z2V0RGlzcGxheU5hbWU7CiMgMTY4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgi Ci0gKHZvaWQpZGVzY3JpYmU6IG91dHB1dENoYXJTdHJlYW07CgoKCi0gKHZvaWQpZGVzY3JpYmVJ RDogb3V0cHV0Q2hhclN0cmVhbTsKCgotICh2b2lkKXhwcmludDsKCgoKCgoKCjIwMDEtMDgtMjQg MDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2Ug ICA0NQoKCgoKLSAodm9pZCl4cHJpbnRpZDsKCgotICh2b2lkKXhmcHJpbnQ7CgoKLSAodm9pZCl4 ZnByaW50aWQ7CgoKLSBnZXRab25lOwpAZW5kCgpAcHJvdG9jb2wgQ3VzdG9taXplCiMgMjIzICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCi0gX0lfQ3JlYXRpbmc7CiMgMjM5ICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCisgY3VzdG9taXplQmVnaW46IGFab25l OwoKCi0gY3VzdG9taXplRW5kOwojIDI2NSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9i ai5oIgotIGN1c3RvbWl6ZUNvcHk6IGFab25lOwpAZW5kCgpAcHJvdG9jb2wgQ3JlYXRlIDxEZWZp bmVkT2JqZWN0LCBDdXN0b21pemU+CiMgMzE5ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVm b2JqLmgiCi0gX0lfQ3JlYXRpbmc7CiMgMzM1ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVm b2JqLmgiCisgY3JlYXRlOiBhWm9uZTsKCgoKCgoKCisgY3JlYXRlQmVnaW46IGFab25lOwojIDM3 MSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgotIGNyZWF0ZUVuZDsKQGVuZAoK QHByb3RvY29sIERyb3AKIyA0MDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIK LSBfSV9Vc2luZzsKLSAodm9pZClkcm9wOwpAZW5kCgpAcHJvdG9jb2wgWm9uZSA8Q3JlYXRlLCBE cm9wLCBDUkVBVEFCTEU+CiMgNDU2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgi Ci0gX0lfQ3JlYXRpbmc7CgoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAg ICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgIDQ2CgoKCgoKLSAodm9pZClz ZXRQYWdlU2l6ZTogKHNpemVfdClwYWdlU2l6ZTsKCi0gX0lfVXNpbmc7Ci0gKHNpemVfdClnZXRQ YWdlU2l6ZTsKCgoKCgoKLSBhbGxvY0lWYXJzOiAoQ2xhc3MpYUNsYXNzOwoKCgoKCgotIGNvcHlJ VmFyczogYW5PYmplY3Q7CgoKCgoKCgotICh2b2lkKWZyZWVJVmFyczogYW5PYmplY3Q7CiMgNDk5 ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCi0gYWxsb2NJVmFyc0NvbXBvbmVu dDogKENsYXNzKWFDbGFzczsKCgoKLSBjb3B5SVZhcnNDb21wb25lbnQ6IGFuT2JqZWN0OwoKCi0g KHZvaWQpZnJlZUlWYXJzQ29tcG9uZW50OiBhbk9iamVjdDsKCgoKCgoKLSBnZXRDb21wb25lbnRa b25lOwoKCgoKCi0gKHZvaWQgKilhbGxvYzogKHNpemVfdClzaXplOwoKCgoKCgoKCgoKCgoyMDAx LTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAg ICBQYWdlICAgNDcKCgoKLSAodm9pZClmcmVlOiAodm9pZCAqKWFCbG9jazsKCgoKCi0gKHZvaWQg KilhbGxvY0Jsb2NrOiAoc2l6ZV90KXNpemU7CgoKCi0gKHZvaWQpZnJlZUJsb2NrOiAodm9pZCAq KWFCbG9jayBibG9ja1NpemU6IChzaXplX3Qpc2l6ZTsKIyA1NDUgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9kZWZvYmouaCIKLSBnZXRQb3B1bGF0aW9uOwoKCi0gKHZvaWQpZGVzY3JpYmVGb3JF YWNoOiBvdXRwdXRDaGFyU3RyZWFtOwoKCi0gKHZvaWQpZGVzY3JpYmVGb3JFYWNoSUQ6IG91dHB1 dENoYXJTdHJlYW07CkBlbmQKCkBwcm90b2NvbCBEZWZpbmVkQ2xhc3MgPERlZmluZWRPYmplY3Q+ CgoKCi0gX0lfVXNpbmc7CisgZ2V0U3VwZXJjbGFzczsKKyAoQk9PTClpc1N1YmNsYXNzOiBhQ2xh c3M7CgorICh2b2lkKXNldFR5cGVJbXBsZW1lbnRlZDogYVR5cGU7CisgZ2V0VHlwZUltcGxlbWVu dGVkOwoKKyAoSU1QKWdldE1ldGhvZEZvcjogKFNFTClhU2VsOwpAZW5kCgpAcHJvdG9jb2wgQ3Jl YXRlZENsYXNzIDxDcmVhdGUsIERlZmluZWRDbGFzcz4KCgoKCi0gX0lfQ3JlYXRpbmc7Ci0gc2V0 TmFtZTogKGNvbnN0IGNoYXIgKiluYW1lOwotIHNldENsYXNzOiBhQ2xhc3M7Ci0gc2V0U3VwZXJj bGFzczogYUNsYXNzOwotIHNldERlZmluaW5nQ2xhc3M6IGFDbGFzczsKLSBhdDogKFNFTClhU2Vs IGFkZE1ldGhvZDogKElNUClhTWV0aG9kOwotIGxpc3BJbkNyZWF0ZTogZXhwcjsKLSBoZGY1SW5D cmVhdGU6IGhkZjVPYmo7Ci0gKHZvaWQpbGlzcE91dFNoYWxsb3c6IHN0cmVhbTsKLSAodm9pZClo ZGY1T3V0U2hhbGxvdzogaGRmNU9iajsKLSAodm9pZCl1cGRhdGVBcmNoaXZlcjogYXJjaGl2ZXI7 Ci0gX0lfVXNpbmc7Ci0gZ2V0RGVmaW5pbmdDbGFzczsKQGVuZAoKQHByb3RvY29sIEJlaGF2aW9y UGhhc2UgPENyZWF0ZWRDbGFzcz4KCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAg ICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgICA0OAoKCgoKCgotIF9JX0Ny ZWF0aW5nOwotICh2b2lkKXNldE5leHRQaGFzZTogYUNsYXNzOwoKLSBfSV9Vc2luZzsKLSBnZXRO ZXh0UGhhc2U7CkBlbmQKCkBwcm90b2NvbCBDb3B5CiMgNjIwICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvZGVmb2JqLmgiCi0gX0lfVXNpbmc7Ci0gY29weTogKGlkIDxab25lPilhWm9uZTsKQGVu ZAoKCgoKCkBwcm90b2NvbCBHZXRPd25lcgojIDY0NyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRl L2RlZm9iai5oIgotIF9JX1VzaW5nOwotIGdldE93bmVyOwpAZW5kCgpAcHJvdG9jb2wgU2V0SW5p dGlhbFZhbHVlCiMgNjcyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCi0gX0lf Q3JlYXRpbmc7CgoKCgoKCgotICh2b2lkKXNldEluaXRpYWxWYWx1ZTogaW5pdGlhbFZhbHVlOwpA ZW5kCgpAcHJvdG9jb2wgU3ltYm9sIDxDcmVhdGUsIEdldE5hbWUsIENSRUFUQUJMRT4KIyA3MDYg Ii91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIKLSBfSV9DcmVhdGluZzsKCgoKKyBj cmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUgc2V0TmFtZTogKGNvbnN0IGNoYXIgKiluYW1lOwoKCgpA ZW5kCgpAcHJvdG9jb2wgRXZlbnRUeXBlIDxTeW1ib2w+CgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAx OjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAg NDkKCgoKLSBfSV9Vc2luZzsKCi0gKHZvaWQpcmFpc2VFdmVudDsKCgoKLSAodm9pZClyYWlzZUV2 ZW50OiAoY29uc3Qgdm9pZCAqKWV2ZW50RGF0YSwgLi4uOwoKCgoKCkBlbmQKCgpAcHJvdG9jb2wg V2FybmluZyA8RXZlbnRUeXBlLCBDUkVBVEFCTEU+CgoKCgotIF9JX1VzaW5nOwoKLSAodm9pZClz ZXRNZXNzYWdlU3RyaW5nOiAoY29uc3QgY2hhciAqKW1lc3NhZ2VTdHJpbmc7CgoKLSAoY29uc3Qg Y2hhciAqKWdldE1lc3NhZ2VTdHJpbmc7CgpleHRlcm4gaWQgPFdhcm5pbmc+CiAgV2FybmluZ01l c3NhZ2UsCiAgUmVzb3VyY2VBdmFpbGFiaWxpdHksCiAgTGlicmFyeVVzYWdlLAogIERlZmF1bHRB c3N1bWVkLAogIE9ic29sZXRlRmVhdHVyZSwKICBPYnNvbGV0ZU1lc3NhZ2UsCiAgU2F2ZVdhcm5p bmc7CgoKCgoKQGVuZAoKQHByb3RvY29sIEVycm9yIDxXYXJuaW5nLCBDUkVBVEFCTEU+CgoKCgpl eHRlcm4gaWQgPEVycm9yPgogIFNvdXJjZU1lc3NhZ2UsCiAgTm90SW1wbGVtZW50ZWQsCiAgU3Vi Y2xhc3NNdXN0SW1wbGVtZW50LAogIEludmFsaWRDb21iaW5hdGlvbiwKICBJbnZhbGlkT3BlcmF0 aW9uLAogIEludmFsaWRBcmd1bWVudCwKICBDcmVhdGVTdWJjbGFzc2luZywKCgoKCgoKCjIwMDEt MDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAg IFBhZ2UgICA1MAoKCiAgQ3JlYXRlVXNhZ2UsCiAgT3V0T2ZNZW1vcnksCiAgSW52YWxpZEFsbG9j U2l6ZSwKICBJbnRlcm5hbEVycm9yLAogIEJsb2NrZWRPYmplY3RBbGxvYywKICBCbG9ja2VkT2Jq ZWN0VXNhZ2UsCiAgUHJvdG9jb2xWaW9sYXRpb24sCiAgTG9hZEVycm9yLAogIFNhdmVFcnJvcjsK CgoKCgpAZW5kCgpAcHJvdG9jb2wgQXJndW1lbnRzIDxDcmVhdGUsIERyb3AsIENSRUFUQUJMRT4K IyA4NzYgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIKLSBfSV9DcmVhdGluZzsK LSBzZXRBcmdjOiAodW5zaWduZWQpY291bnQgQXJndjogKGNvbnN0IGNoYXIgKiopdGhlQXJndjsK LSBzZXRBcHBOYW1lOiAoY29uc3QgY2hhciAqKWFwcE5hbWU7Ci0gc2V0QXBwTW9kZVN0cmluZzog KGNvbnN0IGNoYXIgKilhcHBNb2RlU3RyaW5nOwotIHNldE9wdGlvbkZ1bmM6IChpbnQgKCopIChp bnQsIGNvbnN0IGNoYXIgKikpb3B0aW9uRnVuYzsKLSBzZXRCdWdBZGRyZXNzOiAoY29uc3QgY2hh ciAqKWJ1Z0FkZHJlc3M7Ci0gc2V0VmVyc2lvbjogKGNvbnN0IGNoYXIgKil2ZXJzaW9uOwotIGFk ZE9wdGlvbnM6IChzdHJ1Y3QgYXJncF9vcHRpb24gKilvcHRpb25zOwojIDkwMyAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgotICh2b2lkKWFkZE9wdGlvbjogKGNvbnN0IGNoYXIg KiluYW1lIGtleTogKGludClrZXkgYXJnOiAoY29uc3QgY2hhciAqKWFyZyBmbGFnczogKGludClm bGFncyBkb2M6IChjb25zdCBjaGFyICopZG9jIGdyb3VwOiAoaW50KWdyb3VwOwoKKyBjcmVhdGVB cmdjOiAoaW50KWFyZ2MgQXJndjogKGNvbnN0IGNoYXIgKiopYXJndiBhcHBOYW1lOiAoY29uc3Qg Y2hhciAqKWFwcE5hbWUgdmVyc2lvbjogKGNvbnN0IGNoYXIgKil2ZXJzaW9uIGJ1Z0FkZHJlc3M6 IChjb25zdCBjaGFyICopYnVnQWRkcmVzcyBvcHRpb25zOiAoc3RydWN0IGFyZ3Bfb3B0aW9uICop b3B0aW9ucyBvcHRpb25GdW5jOiAoaW50ICgqKSAoaW50LCBjb25zdCBjaGFyICopKW9wdGlvbkZ1 bmMgaW5oaWJpdEV4ZWN1dGFibGVTZWFyY2hGbGFnOiAoQk9PTClpbmhpYml0RXhlY3V0YWJsZVNl YXJjaEZsYWc7CgoKLSAoaW50KXBhcnNlS2V5OiAoaW50KWtleSBhcmc6IChjb25zdCBjaGFyICop YXJnOwotIF9JX1NldHRpbmc7Ci0gc2V0SW5oaWJpdEFyY2hpdmVyTG9hZEZsYWc6IChCT09MKWlu aGliaXRBcmNoaXZlckxvYWRGbGFnOwotIHNldEluaGliaXRFeGVjdXRhYmxlU2VhcmNoRmxhZzog KEJPT0wpdGhlSW5oaWJpdEV4ZWN1dGFibGVTZWFyY2hGbGFnOwotIHNldEJhdGNoTW9kZUZsYWc6 IChCT09MKWJhdGNoTW9kZUZsYWc7Ci0gc2V0VmFyeVNlZWRGbGFnOiAoQk9PTCl2YXJ5U2VlZEZs YWc7Ci0gc2V0VmVyYm9zZUZsYWc6IChCT09MKXZlcmJvc2VGbGFnOwoKCgotIHNldERlZmF1bHRB cHBDb25maWdQYXRoOiAoY29uc3QgY2hhciAqKXBhdGg7CgoKLSBzZXREZWZhdWx0QXBwRGF0YVBh dGg6IChjb25zdCBjaGFyICopcGF0aDsKLSBzZXRGaXhlZFNlZWQ6ICh1bnNpZ25lZClzZWVkOwoK Ci0gX0lfVXNpbmc7Ci0gKEJPT0wpZ2V0QmF0Y2hNb2RlRmxhZzsKLSAoQk9PTClnZXRWYXJ5U2Vl ZEZsYWc7Ci0gKEJPT0wpZ2V0Rml4ZWRTZWVkRmxhZzsKLSAodW5zaWduZWQpZ2V0Rml4ZWRTZWVk OwotIChCT09MKWdldFZlcmJvc2VGbGFnOwotIChjb25zdCBjaGFyICopZ2V0QXBwTmFtZTsKCgoK CgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAg ICAgICAgICAgIFBhZ2UgICA1MQoKCi0gKGNvbnN0IGNoYXIgKilnZXRBcHBNb2RlU3RyaW5nOwot IChpbnQpZ2V0QXJnYzsKLSAoaW50KWdldExhc3RBcmdJbmRleDsKLSAoY29uc3QgY2hhciAqKiln ZXRBcmd2OwotIChjb25zdCBjaGFyICopZ2V0RXhlY3V0YWJsZVBhdGg7Ci0gKGNvbnN0IGNoYXIg KilnZXRTd2FybUhvbWU7Ci0gKGNvbnN0IGNoYXIgKilnZXRDb25maWdQYXRoOwotIChjb25zdCBj aGFyICopZ2V0RGF0YVBhdGg7CgotIChjb25zdCBjaGFyICopZ2V0QXBwRGF0YVBhdGg7CgoKLSAo Y29uc3QgY2hhciAqKWdldEFwcENvbmZpZ1BhdGg7Ci0gKEJPT0wpZ2V0U2hvd0N1cnJlbnRUaW1l RmxhZzsKLSAoQk9PTClnZXRJbmhpYml0QXJjaGl2ZXJMb2FkRmxhZzsKCkBlbmQKCkBwcm90b2Nv bCBBcmNoaXZlciA8Q3JlYXRlLCBEcm9wLCBSRVRVUk5BQkxFPgoKCi0gX0lfQ3JlYXRpbmc7CgoK LSBzZXRJbmhpYml0TG9hZEZsYWc6IChCT09MKWluaGliaXRMb2FkRmxhZzsKCgotIHNldFBhdGg6 IChjb25zdCBjaGFyICopcGF0aDsKCgoKLSBzZXRTeXN0ZW1BcmNoaXZlckZsYWc6IChCT09MKXN5 c3RlbUFyY2hpdmVyRmxhZzsKCgotIHNldERlZmF1bHRQYXRoOwoKCi0gc2V0RGVmYXVsdEFwcFBh dGg7Ci0gX0lfVXNpbmc7Ci0gKHZvaWQpcmVnaXN0ZXJDbGllbnQ6IGNsaWVudDsKLSAodm9pZCl1 bnJlZ2lzdGVyQ2xpZW50OiBjbGllbnQ7CgoKCi0gKHZvaWQpcHV0RGVlcDogKGNvbnN0IGNoYXIg KilrZXkgb2JqZWN0OiBvYmplY3Q7CgoKLSAodm9pZClwdXRTaGFsbG93OiAoY29uc3QgY2hhciAq KWtleSBvYmplY3Q6IG9iamVjdDsKCgotIGdldE9iamVjdDogKGNvbnN0IGNoYXIgKilrZXk7CgoK LSBnZXRXaXRoWm9uZTogKGlkIDxab25lPilhWm9uZSBrZXk6IChjb25zdCBjaGFyICopa2V5OwoK CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAg ICAgICAgICAgICAgICBQYWdlICAgNTIKCgoKLSAodm9pZClzeW5jOwpAZW5kCgpAcHJvdG9jb2wg TGlzcEFyY2hpdmVyIDxBcmNoaXZlciwgQ1JFQVRBQkxFPgoKCgoKCi0gX0lfQ3JlYXRpbmc7CgoK KyBjcmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUgc2V0UGF0aDogKGNvbnN0IGNoYXIgKilwYXRoOwoK LSBfSV9TZXR0aW5nOwotIF9JX1VzaW5nOwpAZW5kCgpAcHJvdG9jb2wgSERGNUFyY2hpdmVyIDxB cmNoaXZlciwgQ1JFQVRBQkxFPgoKCgoKCi0gX0lfQ3JlYXRpbmc7CgoKKyBjcmVhdGU6IChpZCA8 Wm9uZT4pYVpvbmUgc2V0UGF0aDogKGNvbnN0IGNoYXIgKilwYXRoOwoKLSBfSV9TZXR0aW5nOwot IF9JX1VzaW5nOwpAZW5kCgpAcHJvdG9jb2wgSERGNSA8Q3JlYXRlLCBEcm9wLCBDUkVBVEFCTEU+ CgoKLSBfSV9DcmVhdGluZzsKLSBzZXRXcml0ZUZsYWc6IChCT09MKXdyaXRlRmxhZzsKLSBzZXRE YXRhc2V0RmxhZzogKEJPT0wpZGF0YXNldEZsYWc7Ci0gc2V0RXh0ZW5zaWJsZVZlY3RvclR5cGU6 IChmY2FsbF90eXBlX3QpdHlwZTsKLSBzZXRFeHRlbnNpYmxlRG91YmxlVmVjdG9yOwotIHNldFBh cmVudDogcGFyZW50OwotIHNldENvbXBvdW5kVHlwZTogY29tcG91bmRUeXBlOwotIHNldENvdW50 OiAodW5zaWduZWQpY291bnQ7Ci0gX0lfU2V0dGluZzsKCgoKLSBzZXROYW1lOiAoY29uc3QgY2hh ciAqKW5hbWU7Ci0gc2V0QmFzZVR5cGVPYmplY3Q6IGJhc2VUeXBlT2JqZWN0OwotIF9JX1VzaW5n OwotICh2b2lkKWl0ZXJhdGU6IChpbnQgKCopIChpZCA8SERGNT5oZGY1T2JqKSlpdGVyYXRlRnVu YzsKLSAodm9pZClpdGVyYXRlOiAoaW50ICgqKSAoaWQgPEhERjU+aGRmNU9iaikpaXRlcmF0ZUZ1 bmMgZHJvcDogKEJPT0wpZHJvcEZsYWc7Ci0gKEJPT0wpZ2V0RGF0YXNldEZsYWc7Ci0gKEJPT0wp Z2V0V3JpdGVGbGFnOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAg bWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgIDUzCgoKLSAoc2l6ZV90KWdldERhdGFz ZXRSYW5rOwotIChzaXplX3QpZ2V0RGF0YXNldERpbWVuc2lvbjogKHVuc2lnbmVkKWRpbU51bWJl cjsKLSAodW5zaWduZWQpZ2V0Q291bnQ7Ci0gZ2V0Q29tcG91bmRUeXBlOwotIGdldENsYXNzOwot ICh2b2lkKWFzc2lnbkl2YXI6IG9iajsKCi0gKEJPT0wpY2hlY2tOYW1lOiAoY29uc3QgY2hhciAq KW5hbWU7Ci0gKEJPT0wpY2hlY2tEYXRhc2V0TmFtZTogKGNvbnN0IGNoYXIgKilkYXRhc2V0TmFt ZTsKCi0gKHZvaWQpbG9hZERhdGFzZXQ6ICh2b2lkICopcHRyOwotICh2b2lkKXN0b3JlQXNEYXRh c2V0OiAoY29uc3QgY2hhciAqKW5hbWUgdHlwZU5hbWU6IChjb25zdCBjaGFyICopdHlwZU5hbWUg dHlwZTogKGZjYWxsX3R5cGVfdCl0eXBlIHJhbms6ICh1bnNpZ25lZClyYW5rIGRpbXM6ICh1bnNp Z25lZCAqKWRpbXMgcHRyOiAodm9pZCAqKXB0cjsKCi0gKHZvaWQpYWRkRG91YmxlVG9WZWN0b3I6 IChkb3VibGUpdmFsOwoKLSAodm9pZClzdG9yZVR5cGVOYW1lOiAoY29uc3QgY2hhciAqKXR5cGVO YW1lOwotICh2b2lkKXN0b3JlQ29tcG9uZW50VHlwZU5hbWU6IChjb25zdCBjaGFyICopdHlwZU5h bWU7Ci0gKHZvaWQpc2hhbGxvd0xvYWRPYmplY3Q6IG9iajsKLSAodm9pZClzaGFsbG93U3RvcmVP YmplY3Q6IG9iajsKLSAodm9pZCluYW1lUmVjb3JkOiAodW5zaWduZWQpcmVjb3JkTnVtYmVyIG5h bWU6IChjb25zdCBjaGFyICopcmVjb3JkTmFtZTsKLSAodm9pZCludW1iZXJSZWNvcmQ6ICh1bnNp Z25lZClyZWNvcmROdW1iZXI7Ci0gKHZvaWQpc2VsZWN0UmVjb3JkOiAodW5zaWduZWQpcmVjb3Jk TnVtYmVyOwoKLSAoY29uc3QgY2hhciAqKilyZWFkUm93TmFtZXM7Ci0gKHZvaWQpd3JpdGVSb3dO YW1lczsKLSAodm9pZCl3cml0ZUxldmVsczsKCi0gKHZvaWQpc3RvcmVBdHRyaWJ1dGU6IChjb25z dCBjaGFyICopYXR0cmlidXRlTmFtZSB2YWx1ZTogKGNvbnN0IGNoYXIgKil2YWx1ZVN0cmluZzsK LSAodm9pZClpdGVyYXRlQXR0cmlidXRlczogKGludCAoKikgKGNvbnN0IGNoYXIgKmtleSwgY29u c3QgY2hhciAqdmFsdWUpKWl0ZXJhdGVGdW5jOwotIChjb25zdCBjaGFyICopZ2V0QXR0cmlidXRl OiAoY29uc3QgY2hhciAqKWF0dHJpYnV0ZU5hbWU7Ci0gKHZvaWQpZmx1c2g7CkBlbmQKCkBwcm90 b2NvbCBIREY1Q29tcG91bmRUeXBlIDxDcmVhdGUsIERyb3AsIENSRUFUQUJMRT4KCgotIF9JX0Ny ZWF0aW5nOwotIHNldFByb3RvdHlwZTogcHJvdG90eXBlOwotIF9JX1VzaW5nOwotIGdldFByb3Rv dHlwZTsKQGVuZAoKdHlwZWRlZiB2b2lkICpKT0JKRUNUOwp0eXBlZGVmIGNvbnN0IHZvaWQgKkNP TU9CSkVDVDsKCkBwcm90b2NvbCBGQXJndW1lbnRzIDxDcmVhdGUsIERyb3AsIENSRUFUQUJMRT4K CgotIF9JX0NyZWF0aW5nOwotIHNldExhbmd1YWdlOiAoaWQgPFN5bWJvbD4pbGFuZ3VhZ2VUeXBl OwoKCi0gc2V0U2VsZWN0b3I6IChTRUwpYVNlbDsKLSBzZXRKYXZhU2lnbmF0dXJlOiAoY29uc3Qg Y2hhciAqKWphdmFTaWduYXR1cmU7CisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNldFNlbGVj dG9yOiAoU0VMKWFTZWw7Ci0gYWRkQXJndW1lbnQ6ICh0eXBlc190ICopdmFsdWUgb2ZUeXBlOiAo ZmNhbGxfdHlwZV90KXR5cGU7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAg ICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAgNTQKCgotIGFkZEFyZ3VtZW50 OiAodm9pZCAqKXZhbHVlIG9mT2JqQ1R5cGU6IChjaGFyKXR5cGU7Ci0gYWRkQ2hhcjogKGNoYXIp dmFsdWU7Ci0gYWRkQm9vbGVhbjogKEJPT0wpdmFsdWU7Ci0gYWRkVW5zaWduZWRDaGFyOiAodW5z aWduZWQgY2hhcil2YWx1ZTsKLSBhZGRTaG9ydDogKHNob3J0KXZhbHVlOwotIGFkZFVuc2lnbmVk U2hvcnQ6ICh1bnNpZ25lZCBzaG9ydCl2YWx1ZTsKLSBhZGRJbnQ6IChpbnQpdmFsdWU7Ci0gYWRk VW5zaWduZWQ6ICh1bnNpZ25lZCl2YWx1ZTsKLSBhZGRMb25nOiAobG9uZyl2YWx1ZTsKLSBhZGRV bnNpZ25lZExvbmc6ICh1bnNpZ25lZCBsb25nKXZhbHVlOwotIGFkZExvbmdMb25nOiAobG9uZyBs b25nKXZhbHVlOwotIGFkZFVuc2lnbmVkTG9uZ0xvbmc6ICh1bnNpZ25lZCBsb25nIGxvbmcpdmFs dWU7Ci0gYWRkRmxvYXQ6IChmbG9hdCl2YWx1ZTsKLSBhZGREb3VibGU6IChkb3VibGUpdmFsdWU7 Ci0gYWRkTG9uZ0RvdWJsZTogKGxvbmcgZG91YmxlKXZhbHVlOwotIGFkZFN0cmluZzogKGNvbnN0 IGNoYXIgKil2YWx1ZTsKLSBhZGRPYmplY3Q6IG9iajsKLSBhZGRTZWxlY3RvcjogKFNFTClhU2Vs OwotIGFkZEphdmFPYmplY3Q6IChKT0JKRUNUKW9iajsKLSBzZXRPYmpDUmV0dXJuVHlwZTogKGNo YXIpdHlwZTsKLSBzZXRSZXR1cm5UeXBlOiAoZmNhbGxfdHlwZV90KXJldFR5cGU7Ci0gc2V0Qm9v bGVhblJldHVyblR5cGU7Ci0gX0lfVXNpbmc7Ci0gKHZhbF90KWdldFJldFZhbDsKLSAoaWQgPFN5 bWJvbD4pZ2V0TGFuZ3VhZ2U7Ci0gKHZvaWQgKilnZXRSZXN1bHQ7CkBlbmQKCnR5cGVkZWYgZW51 bSBjYWxsVHlwZXMgeyBjY2FsbCwgQ09NY2FsbCwgSlNjYWxsLCBqYXZhY2FsbCwgamF2YXN0YXRp Y2NhbGwsIG9iamNjYWxsIH0gY2FsbF90OwoKQHByb3RvY29sIEZDYWxsIDxDcmVhdGUsIERyb3As IENSRUFUQUJMRT4KCgotIF9JX0NyZWF0aW5nOworIGNyZWF0ZTogKGlkIDxab25lPilhWm9uZSB0 YXJnZXQ6IG9iagogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3I6IChTRUwpc2VsCiAg ICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50czogKGlkIDxGQXJndW1lbnRzPilmYTsKKyBj cmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUgdGFyZ2V0OiBvYmoKICAgICAgICAgICAgICAgICAgICAg ICBtZXRob2ROYW1lOiAoY29uc3QgY2hhciAqKW1ldGhvZE5hbWUKICAgICAgICAgICAgICAgICAg ICAgICAgYXJndW1lbnRzOiAoaWQgPEZBcmd1bWVudHM+KWZhOwotIHNldEFyZ3VtZW50czogYXJn czsKLSBzZXRGdW5jdGlvblBvaW50ZXI6IChmdW5jX3QpZm47Ci0gc2V0TWV0aG9kRnJvbVNlbGVj dG9yOiAoU0VMKW1ldGhvZCBpbk9iamVjdDogb2JqZWN0OwotIHNldE1ldGhvZEZyb21OYW1lOiAo Y29uc3QgY2hhciAqKW1ldGhvZE5hbWUgaW5PYmplY3Q6IG9iamVjdDsKLSBzZXRKYXZhTWV0aG9k RnJvbU5hbWU6IChjb25zdCBjaGFyICopbWV0aG9kTmFtZSBpbk9iamVjdDogKEpPQkpFQ1Qpak9i ajsKLSBzZXRKYXZhTWV0aG9kRnJvbU5hbWU6IChjb25zdCBjaGFyICopbWV0aG9kTmFtZSBpbkNs YXNzOiAoY29uc3QgY2hhciAqKWNsYXNzTmFtZTsKLSBfSV9Vc2luZzsKLSAoY2FsbF90KWdldENh bGxUeXBlOwotIGdldEFyZ3VtZW50czsKLSAodm9pZClwZXJmb3JtQ2FsbDsKLSAodm9pZCAqKWdl dFJlc3VsdDsKLSAocmV0dmFsX3QpZ2V0UmV0VmFsOiAocmV0dmFsX3QpcmV0VmFsIGJ1ZjogKHR5 cGVzX3QgKilidWY7Ci0gKGZ1bmNfdClnZXRGdW5jdGlvblBvaW50ZXI7CmV4dGVybiB2b2lkIGRl Zm9ial9pbml0X2phdmFfY2FsbF90YWJsZXMgKHZvaWQgKmpuaUVudik7CmV4dGVybiB2b2lkIHVw ZGF0ZVRhcmdldCAoaWQgY2FsbCwgaWQgdGFyZ2V0KTsKQGVuZAoKCgoKCgoKMjAwMS0wOC0yNCAw MToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAg IDU1CgoKCkBwcm90b2NvbCBTZXJpYWxpemF0aW9uCgoKCi0gX0lfQ3JlYXRpbmc7CgoKLSBsaXNw SW5DcmVhdGU6IGV4cHI7CgoKLSBoZGY1SW5DcmVhdGU6IChpZCA8SERGNT4paGRmNU9iajsKCgoK ZXh0ZXJuIGlkIGxpc3BJbiAoaWQgPFpvbmU+IGFab25lLCBpZCBleHByKTsKCgpleHRlcm4gaWQg aGRmNUluIChpZCA8Wm9uZT4gYVpvbmUsIGlkIDxIREY1PiBoZGY1T2JqKTsKCi0gX0lfU2V0dGlu ZzsKCgotIGxpc3BJbjogZXhwcjsKCgotIGhkZjVJbjogKGlkIDxIREY1PiloZGY1T2JqOwoKLSBf SV9Vc2luZzsKCi0gKHZvaWQpbGlzcE91dFNoYWxsb3c6IHN0cmVhbTsKCgotICh2b2lkKWxpc3BP dXREZWVwOiBzdHJlYW07CgoKCi0gKHZvaWQpbGlzcE91dFZhcnM6IHN0cmVhbSBkZWVwOiAoQk9P TClkZWVwRmxhZzsKCgotICh2b2lkKWhkZjVPdXRTaGFsbG93OiAoaWQgPEhERjU+KWhkZjVvYmo7 CgoKLSAodm9pZCloZGY1T3V0RGVlcDogKGlkIDxIREY1PiloZGY1b2JqOwoKLSAodm9pZCl1cGRh dGVBcmNoaXZlcjogYXJjaGl2ZXI7CgoKZXh0ZXJuIEJPT0wgbGlzcEluQm9vbGVhbiAoaWQgaW5k ZXgpOwoKCmV4dGVybiBpbnQgbGlzcEluSW50ZWdlciAoaWQgaW5kZXgpOwoKCmV4dGVybiBjb25z dCBjaGFyICpsaXNwSW5TdHJpbmcgKGlkIGluZGV4KTsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAgNTYK CgoKZXh0ZXJuIGlkIGxpc3BJbktleXdvcmQgKGlkIGluZGV4KTsKCkBlbmQKCgpleHRlcm4gaWQg PEFyZ3VtZW50cz4gYXJndW1lbnRzOwoKCmV4dGVybiBpZCA8SERGNUFyY2hpdmVyPiBoZGY1QXJj aGl2ZXI7CgoKZXh0ZXJuIGlkIDxMaXNwQXJjaGl2ZXI+IGxpc3BBcmNoaXZlcjsKCgpleHRlcm4g aWQgPEhERjVBcmNoaXZlcj4gaGRmNUFwcEFyY2hpdmVyOwoKCmV4dGVybiBpZCA8TGlzcEFyY2hp dmVyPiBsaXNwQXBwQXJjaGl2ZXI7CgoKZXh0ZXJuIGlkIDxTeW1ib2w+IHRfQnl0ZUFycmF5LCB0 X0xlYWZPYmplY3QsIHRfUG9wdWxhdGlvbk9iamVjdDsKCgpleHRlcm4gaWQgPFN5bWJvbD4gTGFu Z3VhZ2VDT00sIExhbmd1YWdlSlMsIExhbmd1YWdlSmF2YSwgTGFuZ3VhZ2VPYmpjOwoKCgoKCgpl eHRlcm4gdm9pZCBfb2JqX2Zvcm1hdElEU3RyaW5nIChjaGFyICpidWZmZXIsIGlkIGFuT2JqZWN0 KTsKCgoKZXh0ZXJuIENsYXNzIG9iamNfZ2V0X2NsYXNzIChjb25zdCBjaGFyICpuYW1lKTsKCgpl eHRlcm4gaWQgZGVmb2JqX2xvb2t1cF90eXBlIChjb25zdCBjaGFyICpuYW1lKTsKCgoKCiMgMSAi L3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai90eXBlcy5oIiAxCmV4dGVybiB2b2lkICpf ZGVmb2JqX1tdOwoKZXh0ZXJuIGlkIEdldE5hbWU7CmV4dGVybiBpZCBEZWZpbmVkT2JqZWN0Owpl eHRlcm4gaWQgQ3VzdG9taXplOwpleHRlcm4gaWQgQ3JlYXRlOwpleHRlcm4gaWQgRHJvcDsKZXh0 ZXJuIGlkIFpvbmU7CmV4dGVybiBpZCBEZWZpbmVkQ2xhc3M7CmV4dGVybiBpZCBDcmVhdGVkQ2xh c3M7CmV4dGVybiBpZCBCZWhhdmlvclBoYXNlOwpleHRlcm4gaWQgQ29weTsKCgoKCgoKCjIwMDEt MDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAg IFBhZ2UgICA1NwoKCmV4dGVybiBpZCBHZXRPd25lcjsKZXh0ZXJuIGlkIFNldEluaXRpYWxWYWx1 ZTsKZXh0ZXJuIGlkIFN5bWJvbDsKZXh0ZXJuIGlkIEV2ZW50VHlwZTsKZXh0ZXJuIGlkIFdhcm5p bmc7CmV4dGVybiBpZCBFcnJvcjsKZXh0ZXJuIGlkIEFyZ3VtZW50czsKZXh0ZXJuIGlkIEFyY2hp dmVyOwpleHRlcm4gaWQgTGlzcEFyY2hpdmVyOwpleHRlcm4gaWQgSERGNUFyY2hpdmVyOwpleHRl cm4gaWQgSERGNTsKZXh0ZXJuIGlkIEhERjVDb21wb3VuZFR5cGU7CmV4dGVybiBpZCBGQXJndW1l bnRzOwpleHRlcm4gaWQgRkNhbGw7CmV4dGVybiBpZCBTZXJpYWxpemF0aW9uOwojIDEyNTYgIi91 c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIgMgoKZXh0ZXJuIHZvaWQgaW5pdERlZm9i aiAoaWQgPEFyZ3VtZW50cz4gYXJndW1lbnRzKTsKCgpleHRlcm4gdm9pZCBfb2JqX2luaXRNb2R1 bGUgKHZvaWQgKm1vZHVsZSk7CgoKCgoKZXh0ZXJuIGlkIF9vYmpfZ2xvYmFsWm9uZTsKCgpleHRl cm4gaWQgX29ial9zY3JhdGNoWm9uZTsKIyAxMjc5ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv ZGVmb2JqLmgiCmV4dGVybiBCT09MIF9vYmpfZGVidWc7CgoKCmV4dGVybiBGSUxFICpfb2JqX3hl cnJvcjsKCmV4dGVybiBGSUxFICpfb2JqX3hkZWJ1ZzsKCgpleHRlcm4gdm9pZCB4c2V0bmFtZSAo aWQgYW5PYmplY3QsIGNvbnN0IGNoYXIgKm5hbWUpOwoKCmV4dGVybiB2b2lkIHhwcmludCAoaWQg YW5PYmplY3QpOwoKCmV4dGVybiB2b2lkIHhwcmludGlkIChpZCBhbk9iamVjdCk7CgoKZXh0ZXJu IHZvaWQgeGZwcmludCAoaWQgYW5PYmplY3QpOwoKCmV4dGVybiB2b2lkIHhmcHJpbnRpZCAoaWQg YW5PYmplY3QpOwoKCmV4dGVybiB2b2lkIHhleGVjIChpZCBhbk9iamVjdCwgY29uc3QgY2hhciAq bmFtZSk7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1p ICAgICAgICAgICAgICAgICAgICBQYWdlICAgNTgKCgoKCmV4dGVybiB2b2lkIHhmZXhlYyAoaWQg YW5PYmplY3QsIGNvbnN0IGNoYXIgKm5hbWUpOwoKCmV4dGVybiBpZCBuYW1lVG9PYmplY3QgKGNv bnN0IGNoYXIgKm5hbWUpOwojIDEzMjUgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmou aCIKZXh0ZXJuIGNoYXIgKnpzdHJkdXAgKGlkIDxab25lPiBhWm9uZSwgY29uc3QgY2hhciAqc3Ry KTsKIyAyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvc3dhcm0uaCIgMgojIDEgIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9yYW5kb20uaCIgMQojIDI0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1 ZGUvcmFuZG9tLmgiCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2UuaCIg MQojIDIwICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFzZS5oIgojIDEgIi91c3Iv bG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIgMQojIDIxICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvb2JqZWN0YmFzZS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2 aXR5LmgiIDEKIyAyNiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiCiMgMSAi L3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiIDEKIyAxMiAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNs dWRlL2RlZm9iai5oIiAxCiMgMTMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9u cy5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2V4dGVybnZhci5oIiAxCiMgMTQg Ii91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIiAyCiMgMjQgIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgpAcHJvdG9jb2wgT2Zmc2V0cwojIDQyICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSBfSV9Vc2luZzsKCi0gYXRP ZmZzZXQ6ICh1bnNpZ25lZClvZmZzZXQ7CgoKCi0gYXRPZmZzZXQ6ICh1bnNpZ25lZClvZmZzZXQg cHV0OiBhbk9iamVjdDsKCgotIGdldEZpcnN0OwoKCi0gZ2V0TGFzdDsKQGVuZAoKQHByb3RvY29s IEZvckVhY2gKIyA3OCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCi0g X0lfVXNpbmc7Ci0gKHZvaWQpZm9yRWFjaDogKFNFTClhU2VsZWN0b3I7Ci0gKHZvaWQpZm9yRWFj aDogKFNFTClhU2VsZWN0b3IgOiBhcmcxOwotICh2b2lkKWZvckVhY2g6IChTRUwpYVNlbGVjdG9y IDogYXJnMSA6IGFyZzI7Ci0gKHZvaWQpZm9yRWFjaDogKFNFTClhU2VsZWN0b3IgOiBhcmcxIDog YXJnMiA6IGFyZzM7CgotICh2b2lkKWRlc2NyaWJlRm9yRWFjaDogb3V0cHV0Q2hhclN0cmVhbTsK LSAodm9pZClkZXNjcmliZUZvckVhY2hJRDogb3V0cHV0Q2hhclN0cmVhbTsKCkBlbmQKCkBwcm90 b2NvbCBGb3JFYWNoS2V5CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAg ICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgIDU5CgoKCgoKCi0gX0lfVXNpbmc7 Ci0gKHZvaWQpZm9yRWFjaEtleTogKFNFTClhU2VsZWN0b3I7Ci0gKHZvaWQpZm9yRWFjaEtleTog KFNFTClhU2VsZWN0b3IgOiBhcmcxOwotICh2b2lkKWZvckVhY2hLZXk6IChTRUwpYVNlbGVjdG9y IDogYXJnMSA6IGFyZzI7Ci0gKHZvaWQpZm9yRWFjaEtleTogKFNFTClhU2VsZWN0b3IgOiBhcmcx IDogYXJnMiA6IGFyZzM7CkBlbmQKCkBwcm90b2NvbCBJbmRleCA8RGVmaW5lZE9iamVjdCwgRHJv cCwgUkVUVVJOQUJMRT4KIyAxNTcgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9u cy5oIgotIF9JX1VzaW5nOwoKCi0gZ2V0Q29sbGVjdGlvbjsKCgoKCgoKLSBuZXh0OwoKCgoKLSBw cmV2OwoKCgoKLSBmaW5kTmV4dDogYW5PYmplY3Q7CgoKCgotIGZpbmRQcmV2OiBhbk9iamVjdDsK IyAxOTEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgotIGdldDsKCgoK Ci0gcHV0OiBhbk9iamVjdDsKIyAyMDkgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0 aW9ucy5oIgotIHJlbW92ZTsKIyAyNTMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0 aW9ucy5oIgotIChpZCA8U3ltYm9sPilnZXRMb2M7CiMgMjY3ICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvY29sbGVjdGlvbnMuaCIKLSAodm9pZClzZXRMb2M6IChpZCA8U3ltYm9sPilsb2NTeW1i b2w7CiMgMjg4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSAoaW50 KWdldE9mZnNldDsKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAg bWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgIDYwCgoKCgoKCgotIHNldE9mZnNldDog KHVuc2lnbmVkKW9mZnNldDsKIyAzMDggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0 aW9ucy5oIgotIChpbnQpY29tcGFyZTogYW5JbmRleDsKIyAzMjEgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9jb2xsZWN0aW9ucy5oIgpleHRlcm4gaWQgPFN5bWJvbD4gU3RhcnQsIEVuZCwgQmV0 d2VlbiwgUmVtb3ZlZCwgTWVtYmVyOwoKCgoKCgoKZXh0ZXJuIGlkIDxFcnJvcj4gT2Zmc2V0T3V0 T2ZSYW5nZSwgTm9NZW1iZXJzLAogIEFscmVhZHlBdEVuZCwgQWxyZWFkeUF0U3RhcnQsIEludmFs aWRJbmRleExvYywgSW52YWxpZExvY1N5bWJvbDsKCkBlbmQKCkBwcm90b2NvbCBQZXJtdXRlZElu ZGV4IDxJbmRleCwgUkVUVVJOQUJMRT4KCgoKCgotIF9JX0NyZWF0aW5nOwotIHNldENvbGxlY3Rp b246IGFDb2xsZWN0aW9uOwotIHNldFVuaWZvcm1SYW5kb206IHJuZDsKLSBfSV9Vc2luZzsKLSBy ZXNodWZmbGU7CkBlbmQ7CgpAcHJvdG9jb2wgQ29sbGVjdGlvbiA8Q3JlYXRlLCBTZXRJbml0aWFs VmFsdWUsIENvcHksIERyb3AsIE9mZnNldHMsIEZvckVhY2g+CiMgNDA3ICIvdXNyL2xvY2FsL3N3 YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSBfSV9DcmVhdGluZzsKCgoKCgoKCi0gKHZvaWQp c2V0UmVwbGFjZU9ubHk6IChCT09MKXJlcGxhY2VPbmx5OwoKLSAodm9pZClzZXRJbmRleEZyb21N ZW1iZXJMb2M6IChpbnQpYnl0ZU9mZnNldDsKCi0gX0lfVXNpbmc7CgoKLSBjb3B5OiAoaWQgPFpv bmU+KWFab25lOwoKCi0gKEJPT0wpZ2V0UmVwbGFjZU9ubHk7CgoKCgoKCgoyMDAxLTA4LTI0IDAx OjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAg NjEKCgoKCgoKCi0gKHVuc2lnbmVkKWdldENvdW50OwojIDQ0MCAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL2NvbGxlY3Rpb25zLmgiCi0gKEJPT0wpY29udGFpbnM6IGFNZW1iZXI7CgoKCgoKCi0g cmVtb3ZlOiBhTWVtYmVyOwojIDQ1NiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rp b25zLmgiCi0gKHZvaWQpcmVtb3ZlQWxsOwoKCi0gKHZvaWQpZGVsZXRlQWxsOwoKCi0gKEJPT0wp YWxsU2FtZUNsYXNzOwoKCgoKLSAoaWQgPEluZGV4PiliZWdpbjogKGlkIDxab25lPilhWm9uZTsK Ci0gKGlkIDxQZXJtdXRlZEluZGV4PiliZWdpblBlcm11dGVkOiAoaWQgPFpvbmU+KWFab25lOwpA ZW5kCgoKCkBwcm90b2NvbCBEZWZhdWx0TWVtYmVyCiMgNDg4ICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvY29sbGVjdGlvbnMuaCIKLSBfSV9TZXR0aW5nOwotICh2b2lkKXNldERlZmF1bHRNZW1i ZXI6IG1lbWJlclZhbHVlOwoKLSBfSV9Vc2luZzsKLSBnZXREZWZhdWx0TWVtYmVyOwpAZW5kCgpA cHJvdG9jb2wgTWVtYmVyQmxvY2sKIyA1MzcgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xs ZWN0aW9ucy5oIgotIF9JX0NyZWF0aW5nOworIGNyZWF0ZTogKGlkIDxab25lPilhWm9uZSBzZXRN ZW1iZXJCbG9jazogKGlkICopbWVtYmVycyBzZXRDb3VudDogKHVuc2lnbmVkKWNvdW50OwoKLSBf SV9TZXR0aW5nOwotICh2b2lkKXNldE1lbWJlckJsb2NrOiAoaWQgKiltZW1iZXJzIHNldENvdW50 OiAodW5zaWduZWQpY291bnQ7CgotIF9JX1VzaW5nOwotICh2b2lkICopZ2V0TWVtYmVyQmxvY2s7 CkBlbmQKCkBwcm90b2NvbCBBcnJheSA8Q29sbGVjdGlvbiwgRGVmYXVsdE1lbWJlciwgTWVtYmVy QmxvY2ssIENSRUFUQUJMRT4KCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAg ICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgICA2MgoKCiMgNTk4ICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSBfSV9DcmVhdGluZzsKKyBjcmVhdGU6 IChpZCA8Wm9uZT4pYVpvbmUgc2V0Q291bnQ6ICh1bnNpZ25lZCljb3VudDsKCi0gX0lfU2V0dGlu ZzsKCgoKCgoKCi0gc2V0Q291bnQ6ICh1bnNpZ25lZCljb3VudDsKQGVuZAoKQHByb3RvY29sIExp c3RJbmRleCA8SW5kZXgsIFJFVFVSTkFCTEU+CiMgNjQwICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1 ZGUvY29sbGVjdGlvbnMuaCIKLSBfSV9Vc2luZzsKCi0gKHZvaWQpYWRkQWZ0ZXI6IGFuT2JqZWN0 OwoKCi0gKHZvaWQpYWRkQmVmb3JlOiBhbk9iamVjdDsKQGVuZAoKCkBwcm90b2NvbCBMaXN0IDxD b2xsZWN0aW9uLCBDUkVBVEFCTEU+CiMgNjY5ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29s bGVjdGlvbnMuaCIKLSBfSV9Vc2luZzsKCi0gKHZvaWQpYWRkRmlyc3Q6IGFuT2JqZWN0OwoKCi0g KHZvaWQpYWRkTGFzdDogYW5PYmplY3Q7CgoKLSByZW1vdmVGaXJzdDsKCgotIHJlbW92ZUxhc3Q7 CgoKLSAoaWQgPExpc3RJbmRleD4pbGlzdEJlZ2luOiAoaWQgPFpvbmU+KWFab25lOwpAZW5kCgoK CmV4dGVybiBpbnQgY29tcGFyZUlEcyAoaWQsIGlkKTsKCgpleHRlcm4gaW50IGNvbXBhcmVJbnRl Z2VycyAoaWQsIGlkKTsKCgpleHRlcm4gaW50IGNvbXBhcmVVbnNpZ25lZEludGVnZXJzIChpZCwg aWQpOwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1p ICAgICAgICAgICAgICAgICAgICBQYWdlICAgNjMKCgpleHRlcm4gaW50IGNvbXBhcmVDU3RyaW5n cyAoaWQsIGlkKTsKCkBwcm90b2NvbCBDb21wYXJlRnVuY3Rpb24KIyA3MjEgIi91c3IvbG9jYWwv c3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgp0eXBlZGVmIGludCAoKmNvbXBhcmVfdCkgKGlk LCBpZCk7CgotIF9JX0NyZWF0aW5nOwotIHNldENvbXBhcmVGdW5jdGlvbjogKGNvbXBhcmVfdClh RnVuY3Rpb247Ci0gc2V0Q29tcGFyZUNTdHJpbmdzOwotIHNldENvbXBhcmVJRHM7Ci0gc2V0Q29t cGFyZUludGVnZXJzOwotIHNldENvbXBhcmVVbnNpZ25lZEludGVnZXJzOwotIF9JX1VzaW5nOwot IChjb21wYXJlX3QpZ2V0Q29tcGFyZUZ1bmN0aW9uOwpAZW5kCgpAcHJvdG9jb2wgS2V5ZWRDb2xs ZWN0aW9uIDxDb2xsZWN0aW9uLCBGb3JFYWNoS2V5PgojIDc1MCAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL2NvbGxlY3Rpb25zLmgiCi0gX0lfQ3JlYXRpbmc7CgotIF9JX1VzaW5nOwotIGNyZWF0 ZUluZGV4OiAoaWQgPFpvbmU+KWFab25lIGZyb21NZW1iZXI6IGFuT2JqZWN0OwoKCgoKCgotIGF0 OiBhS2V5OwoKCgoKCgotIHJlbW92ZUtleTogYUtleTsKCgoKLSAoQk9PTCljb250YWluc0tleTog YUtleTsKQGVuZAoKQHByb3RvY29sIEtleWVkQ29sbGVjdGlvbkluZGV4IDxJbmRleD4KIyA3ODMg Ii91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgpAZW5kCgoKQHByb3RvY29s IE1lbWJlclNsb3QKIyA4MTQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5o Igp0eXBlZGVmIHN0cnVjdCBtZW1iZXJEYXRhIHsgdm9pZCAqbWVtYmVyRGF0YVsyXTsgfSBtZW1i ZXJfdDsKCgoKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1h aW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgICA2NAoKCgp0eXBlZGVmIHN0cnVjdCB7IHZv aWQgKm1lbWJlckRhdGFbMl07IGlkIG93bmVyOyB9IGR1cG1lbWJlcl90OwpAZW5kCgpAcHJvdG9j b2wgX1NldAoKCi0gX0lfVXNpbmc7CgotIChCT09MKWFkZDogYW5PYmplY3Q7CiMgODM5ICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKQGVuZAoKQHByb3RvY29sIFNldCA8 X1NldCwgS2V5ZWRDb2xsZWN0aW9uLCBDUkVBVEFCTEU+CiMgODU3ICIvdXNyL2xvY2FsL3N3YXJt L2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSBfSV9Vc2luZzsKCgoKCgotIHJlcGxhY2U6IGFuT2Jq ZWN0OwpAZW5kCgpAcHJvdG9jb2wgT3JkZXJlZFNldCA8X1NldCwgTGlzdCwgQ1JFQVRBQkxFPgoj IDg4NiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCkBlbmQKCkBwcm90 b2NvbCBNYXBJbmRleCA8S2V5ZWRDb2xsZWN0aW9uSW5kZXgsIFJFVFVSTkFCTEU+CgoKCgotIF9J X1VzaW5nOwoKCgoKLSBzZXRLZXk6IGFLZXk7CgoKCgotIGdldEtleTsKCgoKCgoKLSAodW5zaWdu ZWQgbG9uZylnZXRLZXlWYWx1ZTsKCgotIG5leHQ6IChpZCAqKWtleTsKCgoKCgoKCgoKMjAwMS0w OC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAg UGFnZSAgIDY1CgoKLSBwcmV2OiAoaWQgKilrZXk7CgoKLSBnZXQ6IChpZCAqKWtleTsKQGVuZAoK CkBwcm90b2NvbCBNYXAgPEtleWVkQ29sbGVjdGlvbiwgQ29tcGFyZUZ1bmN0aW9uLCBDUkVBVEFC TEU+CiMgOTM4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSBfSV9V c2luZzsKCgoKCi0gKEJPT0wpYXQ6IGFLZXkgaW5zZXJ0OiBhbk9iamVjdDsKCgoKCi0gYXQ6IGFL ZXkgcmVwbGFjZTogYW5PYmplY3Q7CgoKLSAoaWQgPE1hcEluZGV4PiltYXBCZWdpbjogKGlkIDxa b25lPilhWm9uZTsKQGVuZAoKCkBwcm90b2NvbCBPdXRwdXRTdHJlYW0gPENyZWF0ZSwgRHJvcCwg Q1JFQVRBQkxFPgojIDk2NCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgi Ci0gX0lfQ3JlYXRpbmc7CisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNldEZpbGVTdHJlYW06 IChGSUxFICopZmlsZVN0cmVhbTsKLSBzZXRGaWxlU3RyZWFtOiAoRklMRSAqKWZpbGVTdHJlYW07 Ci0gc2V0RXhwckZsYWc6IChCT09MKWV4cHJGbGFnOwotIF9JX1VzaW5nOwotIChGSUxFICopZ2V0 RmlsZVN0cmVhbTsKLSBnZXRFeHByOwoKCi0gKHZvaWQpY2F0QzogKGNvbnN0IGNoYXIgKiljc3Ry aW5nOwoKCi0gKHZvaWQpY2F0Qm9vbGVhbjogKEJPT0wpYm9vbDsKCgotICh2b2lkKWNhdENoYXI6 IChjaGFyKWNoOwoKCi0gKHZvaWQpY2F0RmxvYXQ6IChmbG9hdClmbHQ7CgoKLSAodm9pZCljYXRE b3VibGU6IChkb3VibGUpZGJsOwoKCi0gKHZvaWQpY2F0TG9uZ0RvdWJsZTogKGxvbmcgZG91Ymxl KWRibDsKCgotICh2b2lkKWNhdEludDogKGludClpOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAg ICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgIDY2CgoK CgotICh2b2lkKWNhdFVuc2lnbmVkOiAodW5zaWduZWQpdW47CgotICh2b2lkKWNhdFNob3J0OiAo c2hvcnQpc2h0OwotICh2b2lkKWNhdFVuc2lnbmVkU2hvcnQ6ICh1bnNpZ25lZCBzaG9ydCl1c2h0 OwotICh2b2lkKWNhdExvbmc6IChsb25nKWxuZzsKLSAodm9pZCljYXRVbnNpZ25lZExvbmc6ICh1 bnNpZ25lZCBsb25nKXVsbmc7Ci0gKHZvaWQpY2F0TG9uZ0xvbmc6IChsb25nIGxvbmcpbG5nbG5n OwotICh2b2lkKWNhdFVuc2lnbmVkTG9uZ0xvbmc6ICh1bnNpZ25lZCBsb25nIGxvbmcpdWxuZ2xu ZzsKLSAodm9pZCljYXRQb2ludGVyOiAoY29uc3Qgdm9pZCAqKXB0cjsKLSAodm9pZCljYXRMaXRl cmFsOiAoY29uc3QgY2hhciAqKXN0cjsKLSAodm9pZCljYXRTdGFydEV4cHI7Ci0gKHZvaWQpY2F0 RW5kRXhwcjsKLSAodm9pZCljYXRLZXl3b3JkOiAoY29uc3QgY2hhciAqKWtleXdvcmQ7Ci0gKHZv aWQpY2F0U3ltYm9sOiAoY29uc3QgY2hhciAqKXN5bWJvbDsKLSAodm9pZCljYXRTdHJpbmc6IChj b25zdCBjaGFyICopc3RyOwotICh2b2lkKWNhdFNlcGFyYXRvcjsKLSAodm9pZCljYXRBcnJheVJh bms6ICh1bnNpZ25lZClyYW5rOwotICh2b2lkKWNhdEVuZEFycmF5OwotICh2b2lkKWNhdFR5cGU6 IChjb25zdCBjaGFyICopdHlwZTsKLSAodm9pZCljYXRDbGFzczogKENsYXNzKWNsYXNzOwotICh2 b2lkKWNhdFN0YXJ0RnVuY3Rpb246IChjb25zdCBjaGFyICopZnVuY3Rpb25OYW1lOwotICh2b2lk KWNhdEVuZEZ1bmN0aW9uOwotICh2b2lkKWNhdFN0YXJ0Q29uczsKLSAodm9pZCljYXRFbmRDb25z OwotICh2b2lkKWNhdFN0YXJ0TGlzdDsKLSAodm9pZCljYXRFbmRMaXN0OwotICh2b2lkKWNhdFN0 YXJ0UXVvdGVkTGlzdDsKLSAodm9pZCljYXRFbmRRdW90ZWRMaXN0OwotICh2b2lkKWNhdFN0YXJ0 UGFyc2U7Ci0gKHZvaWQpY2F0RW5kUGFyc2U7Ci0gKHZvaWQpY2F0U3RhcnRNYWtlSW5zdGFuY2U6 IChjb25zdCBjaGFyICopdHlwZU5hbWU7Ci0gKHZvaWQpY2F0RW5kTWFrZUluc3RhbmNlOwotICh2 b2lkKWNhdFN0YXJ0TWFrZUNsYXNzOiAoY29uc3QgY2hhciAqKWNsYXNzTmFtZTsKLSAodm9pZClj YXRFbmRNYWtlQ2xhc3M7Ci0gKHZvaWQpY2F0VW5zaWduZWRQYWlyOiAodW5zaWduZWQpYSA6ICh1 bnNpZ25lZCliOwotICh2b2lkKWNhdE5pbDsKQGVuZAoKQHByb3RvY29sIElucHV0U3RyZWFtIDxD cmVhdGUsIERyb3AsIENSRUFUQUJMRT4KCgoKCi0gX0lfQ3JlYXRpbmc7CisgY3JlYXRlOiAoaWQg PFpvbmU+KWFab25lIHNldEZpbGVTdHJlYW06IChGSUxFICopZmlsZTsKKyBjcmVhdGU6IChpZCA8 Wm9uZT4pYVpvbmUgc2V0RXhwcjogZXhwcjsKLSBzZXRFeHByOiBleHByOwotIHNldEZpbGVTdHJl YW06IChGSUxFICopZmlsZVN0cmVhbTsKLSBfSV9Vc2luZzsKLSAoRklMRSAqKWdldEZpbGVTdHJl YW07Ci0gZ2V0RXhwcjsKQGVuZAoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAg ICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAgNjcKCgpleHRlcm4gaWQg PFN5bWJvbD4gQXJjaGl2ZXJMaXRlcmFsLCBBcmNoaXZlclF1b3RlLCBBcmNoaXZlckVPTCwgQXJj aGl2ZXJEb3Q7CgpAcHJvdG9jb2wgQXJjaGl2ZXJLZXl3b3JkIDxDcmVhdGUsIERyb3AsIFJFVFVS TkFCTEU+CgoKLSBfSV9DcmVhdGluZzsKLSBzZXRLZXl3b3JkTmFtZTogKGNvbnN0IGNoYXIgKilu YW1lOwotIF9JX1VzaW5nOwotIChjb25zdCBjaGFyICopZ2V0S2V5d29yZE5hbWU7Ci0gKHZvaWQp bGlzcE91dFNoYWxsb3c6IChpZCA8T3V0cHV0U3RyZWFtPilzdHJlYW07Ci0gKHZvaWQpbGlzcE91 dERlZXA6IChpZCA8T3V0cHV0U3RyZWFtPilzdHJlYW07CkBlbmQKCkBwcm90b2NvbCBBcmNoaXZl ckFycmF5IDxDcmVhdGUsIERyb3AsIFJFVFVSTkFCTEU+CgoKLSBfSV9DcmVhdGluZzsKLSBzZXRB cnJheTogYXJyYXk7Ci0gX0lfVXNpbmc7Ci0gKHZvaWQgKilnZXREYXRhOwotICh1bnNpZ25lZCln ZXRSYW5rOwotICh1bnNpZ25lZCAqKWdldERpbXM7Ci0gKHNpemVfdClnZXRFbGVtZW50U2l6ZTsK LSAodW5zaWduZWQpZ2V0RWxlbWVudENvdW50OwotIChmY2FsbF90eXBlX3QpZ2V0QXJyYXlUeXBl OwotIGNvbnZlcnRUb1R5cGU6IChjaGFyKWRlc3RUeXBlIGRlc3Q6ICh2b2lkICopcHRyOwotICh2 b2lkKWxpc3BPdXRTaGFsbG93OiAoaWQgPE91dHB1dFN0cmVhbT4pc3RyZWFtOwotICh2b2lkKWxp c3BPdXREZWVwOiAoaWQgPE91dHB1dFN0cmVhbT4pc3RyZWFtOwotICh2b2lkKWRyb3A7CkBlbmQK CkBwcm90b2NvbCBBcmNoaXZlclZhbHVlIDxDcmVhdGUsIERyb3AsIFJFVFVSTkFCTEU+CgoKLSBf SV9DcmVhdGluZzsKLSBzZXREb3VibGU6IChkb3VibGUpdmFsOwotIHNldExvbmdEb3VibGU6IChs b25nIGRvdWJsZSl2YWw7Ci0gc2V0RmxvYXQ6IChmbG9hdCl2YWw7Ci0gc2V0TG9uZ0xvbmc6IChs b25nIGxvbmcpdmFsOwotIHNldENoYXI6IChjaGFyKXZhbDsKLSBzZXRCb29sZWFuOiAoQk9PTCl2 YWw7Ci0gc2V0Q2xhc3M6IChDbGFzcyljbGFzczsKLSBzZXROaWw7Ci0gX0lfVXNpbmc7Ci0gKGZj YWxsX3R5cGVfdClnZXRWYWx1ZVR5cGU7Ci0gKGRvdWJsZSlnZXREb3VibGU7Ci0gKGxvbmcgZG91 YmxlKWdldExvbmdEb3VibGU7Ci0gKGZsb2F0KWdldEZsb2F0OwotIChsb25nIGxvbmcpZ2V0TG9u Z0xvbmc7Ci0gKGludClnZXRJbnRlZ2VyOwotICh1bnNpZ25lZClnZXRVbnNpZ25lZDsKLSAoY2hh cilnZXRDaGFyOwotIChCT09MKWdldEJvb2xlYW47Ci0gZ2V0T2JqZWN0OwotIChDbGFzcylnZXRD bGFzczsKLSAodm9pZClsaXNwT3V0U2hhbGxvdzogKGlkIDxPdXRwdXRTdHJlYW0+KXN0cmVhbTsK CgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAg ICAgICAgICAgICAgIFBhZ2UgICA2OAoKCi0gKHZvaWQpbGlzcE91dERlZXA6IChpZCA8T3V0cHV0 U3RyZWFtPilzdHJlYW07Ci0gKHZvaWQpZHJvcDsKQGVuZAoKQHByb3RvY29sIEFyY2hpdmVyUGFp ciA8Q3JlYXRlLCBEcm9wLCBSRVRVUk5BQkxFPgoKCi0gX0lfQ3JlYXRpbmc7Ci0gc2V0Q2FyOiBj YXI7Ci0gc2V0Q2RyOiBjZHI7Ci0gc2V0Q29uc0Zvcm1hdEZsYWc6IChCT09MKXRoZUNvbnNGb3Jt YXRGbGFnOwotIF9JX1VzaW5nOwotIGdldENhcjsKLSBnZXRDZHI7Ci0gKEJPT0wpZ2V0Q29uc0Zv cm1hdEZsYWc7Ci0gKHZvaWQpbGlzcE91dFNoYWxsb3c6IChpZCA8T3V0cHV0U3RyZWFtPilzdHJl YW07Ci0gKHZvaWQpbGlzcE91dERlZXA6IChpZCA8T3V0cHV0U3RyZWFtPilzdHJlYW07CkBlbmQK CkBwcm90b2NvbCBBcmNoaXZlckxpc3QgPExpc3QsIFJFVFVSTkFCTEU+CgoKLSBfSV9DcmVhdGlu ZzsKLSBfSV9Vc2luZzsKLSAodm9pZClsaXNwT3V0U2hhbGxvdzogKGlkIDxPdXRwdXRTdHJlYW0+ KXN0cmVhbTsKLSAodm9pZClsaXNwT3V0RGVlcDogKGlkIDxPdXRwdXRTdHJlYW0+KXN0cmVhbTsK QGVuZAoKQHByb3RvY29sIEFyY2hpdmVyUXVvdGVkIDxSRVRVUk5BQkxFPgoKCi0gX0lfQ3JlYXRp bmc7Ci0gc2V0UXVvdGVkT2JqZWN0OiB2YWx1ZTsKLSBfSV9Vc2luZzsKLSBnZXRRdW90ZWRPYmpl Y3Q7Ci0gKHZvaWQpbGlzcE91dERlZXA6IChpZCA8T3V0cHV0U3RyZWFtPilzdHJlYW07CkBlbmQK CgoKQHByb3RvY29sIFN0cmluZyA8Q3JlYXRlLCBEcm9wLCBDb3B5LCBDUkVBVEFCTEU+CiMgMTE1 NSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCi0gX0lfQ3JlYXRpbmc7 CisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNldEM6IChjb25zdCBjaGFyICopY3N0cmluZzsK Ci0gX0lfU2V0dGluZzsKLSAodm9pZClzZXRDOiAoY29uc3QgY2hhciAqKWNzdHJpbmc7CgotIF9J X1VzaW5nOwotIChjb25zdCBjaGFyICopZ2V0QzsKLSAodm9pZCljYXRDOiAoY29uc3QgY2hhciAq KWNzdHJpbmc7Ci0gKHVuc2lnbmVkKWdldENvdW50OwpAZW5kCgpAcHJvdG9jb2wgTGlzdFNodWZm bGVyIDxDcmVhdGUsIERyb3AsIENSRUFUQUJMRT4KIyAxMTc2ICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvY29sbGVjdGlvbnMuaCIKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAg ICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgICA2OQoKCi0gX0lfQ3JlYXRp bmc7CgoKLSBzZXRVbmlmb3JtUmFuZG9tOiBkaXN0OwoKCgorIGNyZWF0ZTogKGlkIDxab25lPilh Wm9uZSBzZXRVbmlmb3JtUmFuZG9tOiBkaXN0OwoKLSBfSV9Vc2luZzsKCi0gc2h1ZmZsZVdob2xl TGlzdDogbGlzdDsKCgoKLSBzaHVmZmxlUGFydGlhbExpc3Q6IGxpc3QgTnVtOiAodW5zaWduZWQp bnVtOwpAZW5kCgpAcHJvdG9jb2wgUGVybXV0YXRpb25JdGVtIDxDcmVhdGUsIFJFVFVSTkFCTEU+ CgoKCi0gX0lfQ3JlYXRpbmc7Ci0gc2V0SXRlbTogaXRlbTsKLSBzZXRQb3NpdGlvbjogKHVuc2ln bmVkKXBvc2l0aW9uOwotIF9JX1VzaW5nOwotIGdldEl0ZW07Ci0gKHVuc2lnbmVkKWdldFBvc2l0 aW9uOwpAZW5kCgpAcHJvdG9jb2wgUGVybXV0YXRpb24gPENvbGxlY3Rpb24sIENyZWF0ZSwgQXJy YXksIENSRUFUQUJMRT4KCgoKCgoKCi0gX0lfQ3JlYXRpbmc7Ci0gc2V0Q29sbGVjdGlvbjogKGlk IDxDb2xsZWN0aW9uPiljb2xsZWN0aW9uOwotIHNldExhc3RQZXJtdXRhdGlvbjogKGlkIDxQZXJt dXRhdGlvbj4pcGVybXV0YXRpb247Ci0gc2V0VW5pZm9ybVJhbmRvbTogcm5kOwpAZW5kCgojIDEg Ii91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy90eXBlcy5oIiAxCmV4dGVybiB2 b2lkICpfY29sbGVjdGlvbnNfW107CgpleHRlcm4gaWQgT2Zmc2V0czsKZXh0ZXJuIGlkIEZvckVh Y2g7CmV4dGVybiBpZCBGb3JFYWNoS2V5OwpleHRlcm4gaWQgSW5kZXg7CmV4dGVybiBpZCBQZXJt dXRlZEluZGV4OwpleHRlcm4gaWQgQ29sbGVjdGlvbjsKZXh0ZXJuIGlkIERlZmF1bHRNZW1iZXI7 CmV4dGVybiBpZCBNZW1iZXJCbG9jazsKZXh0ZXJuIGlkIEFycmF5OwoKCgoKCgoKMjAwMS0wOC0y NCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFn ZSAgIDcwCgoKZXh0ZXJuIGlkIExpc3RJbmRleDsKZXh0ZXJuIGlkIExpc3Q7CmV4dGVybiBpZCBD b21wYXJlRnVuY3Rpb247CmV4dGVybiBpZCBLZXllZENvbGxlY3Rpb247CmV4dGVybiBpZCBLZXll ZENvbGxlY3Rpb25JbmRleDsKZXh0ZXJuIGlkIE1lbWJlclNsb3Q7CmV4dGVybiBpZCBfU2V0Owpl eHRlcm4gaWQgU2V0OwpleHRlcm4gaWQgT3JkZXJlZFNldDsKZXh0ZXJuIGlkIE1hcEluZGV4Owpl eHRlcm4gaWQgTWFwOwpleHRlcm4gaWQgT3V0cHV0U3RyZWFtOwpleHRlcm4gaWQgSW5wdXRTdHJl YW07CmV4dGVybiBpZCBBcmNoaXZlcktleXdvcmQ7CmV4dGVybiBpZCBBcmNoaXZlckFycmF5Owpl eHRlcm4gaWQgQXJjaGl2ZXJWYWx1ZTsKZXh0ZXJuIGlkIEFyY2hpdmVyUGFpcjsKZXh0ZXJuIGlk IEFyY2hpdmVyTGlzdDsKZXh0ZXJuIGlkIEFyY2hpdmVyUXVvdGVkOwpleHRlcm4gaWQgU3RyaW5n OwpleHRlcm4gaWQgTGlzdFNodWZmbGVyOwpleHRlcm4gaWQgUGVybXV0YXRpb25JdGVtOwpleHRl cm4gaWQgUGVybXV0YXRpb247CiMgMTIyMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxl Y3Rpb25zLmgiIDIKIyAyNyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiIDIK IyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZXh0ZXJudmFyLmgiIDEKIyAyOCAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiIDIKCkBwcm90b2NvbCBEZWZhdWx0T3JkZXIK IyA3NSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiCi0gX0lfQ3JlYXRpbmc7 Ci0gX0lfU2V0dGluZzsKLSBzZXREZWZhdWx0T3JkZXI6IChpZCA8U3ltYm9sPilhU3ltYm9sOwot IF9JX1VzaW5nOwotIChpZCA8U3ltYm9sPilnZXREZWZhdWx0T3JkZXI7CkBlbmQKCgpAcHJvdG9j b2wgQWN0aXZpdHkgPERlZmluZWRPYmplY3QsIERyb3AsIFJFVFVSTkFCTEU+CiMgMTI2ICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9Vc2luZzsKCgoKCgotIChpZCA8 U3ltYm9sPilydW47CgoKCi0gKHZvaWQpc3RvcDsKCgoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToy MSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgIDcx CgoKCgotICh2b2lkKXRlcm1pbmF0ZTsKCgoKCi0gKGlkIDxTeW1ib2w+KW5leHRBY3Rpb247CgoK LSAoaWQgPFN5bWJvbD4pc3RlcEFjdGlvbjsKCgoKCi0gKGlkIDxTeW1ib2w+KWdldFN0YXR1czsK IyAxNjcgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgotIChpZCA8U3ltYm9s PilnZXRIb2xkVHlwZTsKCgotIGdldEFjdGlvbjsKCgotIGdldEFjdGlvblR5cGU7CgoKLSAodm9p ZClzZXRPd25lckFjdGl2aXR5OiBvd25lckFjdGl2aXR5OwoKCi0gZ2V0T3duZXJBY3Rpdml0eTsK CgotIGdldFN1YmFjdGl2aXRpZXM7CgoKLSBnZXRDb250cm9sbGluZ0FjdGl2aXR5OwoKCi0gZ2V0 VG9wTGV2ZWxBY3Rpdml0eTsKCgotIGdldFN3YXJtQWN0aXZpdHk7CgoKLSBnZXRTY2hlZHVsZUFj dGl2aXR5OwoKCi0gc2V0U2VyaWFsTW9kZTogKEJPT0wpc2VyaWFsTW9kZTsKCgotIChCT09MKWdl dFNlcmlhbE1vZGU7CgoKLSAoaWQgPEFjdGl2aXR5PilnZXRDdXJyZW50U3ViYWN0aXZpdHk7CkBl bmQKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAg ICAgICAgICAgICAgICAgICBQYWdlICAgNzIKCgoKZXh0ZXJuIGlkIDxTeW1ib2w+IEluaXRpYWxp emVkLCBSdW5uaW5nLCBIb2xkaW5nLCBSZWxlYXNlZCwgU3RvcHBlZCwKICBUZXJtaW5hdGVkLCBD b21wbGV0ZWQ7CgpAcHJvdG9jb2wgQWN0aW9uIDxDcmVhdGUsIERyb3AsIEdldE93bmVyPgojIDI0 MiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiCi0gX0lfVXNpbmc7Ci0gKHZv aWQpX3BlcmZvcm1BY3Rpb25fOiAoaWQgPEFjdGl2aXR5PilhY3Rpdml0eTsKQGVuZAoKQHByb3Rv Y29sIEFjdGlvbkFyZ3MKCgoKCgoKCi0gX0lfQ3JlYXRpbmc7Ci0gKHZvaWQpc2V0QXJnMTogYXJn MTsKLSAodm9pZClzZXRBcmcyOiBhcmcyOwotICh2b2lkKXNldEFyZzM6IGFyZzM7Ci0gX0lfVXNp bmc7Ci0gKHVuc2lnbmVkKWdldE5BcmdzOwotIGdldEFyZzE7Ci0gZ2V0QXJnMjsKLSBnZXRBcmcz OwpAZW5kCgpAcHJvdG9jb2wgRkFjdGlvbiA8QWN0aW9uLCBSRVRVUk5BQkxFPgoKCi0gX0lfQ3Jl YXRpbmc7Ci0gc2V0Q2FsbDogZmNhbGw7Ci0gX0lfU2V0dGluZzsKLSBzZXRBdXRvRHJvcDogKEJP T0wpYXV0b0Ryb3A7Ci0gX0lfVXNpbmc7CkBlbmQKCkBwcm90b2NvbCBBY3Rpb25UYXJnZXQKCgot IF9JX0NyZWF0aW5nOwotICh2b2lkKXNldFRhcmdldDogdGFyZ2V0OwotIF9JX1VzaW5nOwotIGdl dFRhcmdldDsKQGVuZAoKQHByb3RvY29sIEFjdGlvblNlbGVjdG9yCgoKLSBfSV9TZXR0aW5nOwot ICh2b2lkKXNldE1lc3NhZ2VTZWxlY3RvcjogKFNFTClhU2VsOwotIF9JX1VzaW5nOwotIChTRUwp Z2V0TWVzc2FnZVNlbGVjdG9yOwpAZW5kCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAg ICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAgNzMKCgoKQHByb3Rv Y29sIEFjdGlvblRvIDxBY3Rpb24sIEFjdGlvblRhcmdldCwgQWN0aW9uU2VsZWN0b3IsIEFjdGlv bkFyZ3MsIFJFVFVSTkFCTEU+CgoKQGVuZAoKQHByb3RvY29sIEFjdGlvbkZvckVhY2ggPEFjdGlv blRvLCBEZWZhdWx0T3JkZXIsIFJFVFVSTkFCTEU+CgoKQGVuZAoKQHByb3RvY29sIEFjdGlvbkZv ckVhY2hIb21vZ2VuZW91cyA8QWN0aW9uLCBBY3Rpb25UYXJnZXQsIEFjdGlvblNlbGVjdG9yLCBE ZWZhdWx0T3JkZXIsIFJFVFVSTkFCTEU+CgoKQGVuZAoKQHByb3RvY29sIEZBY3Rpb25Gb3JFYWNo IDxGQWN0aW9uLCBBY3Rpb25UYXJnZXQsIERlZmF1bHRPcmRlcj4KCgpAZW5kCgpAcHJvdG9jb2wg RkFjdGlvbkZvckVhY2hIZXRlcm9nZW5lb3VzIDxGQWN0aW9uRm9yRWFjaCwgUkVUVVJOQUJMRT4K CgpAZW5kCgpAcHJvdG9jb2wgRkFjdGlvbkZvckVhY2hIb21vZ2VuZW91cyA8RkFjdGlvbkZvckVh Y2gsIFJFVFVSTkFCTEU+CgoKCgoKQGVuZAoKQHByb3RvY29sIEFjdGlvbkNhbGwgPEFjdGlvbiwg QWN0aW9uQXJncywgUkVUVVJOQUJMRT4KCgotIF9JX0NyZWF0aW5nOwotICh2b2lkKXNldEZ1bmN0 aW9uUG9pbnRlcjogKGZ1bmNfdClmcHRyOwotIF9JX1VzaW5nOwotIChmdW5jX3QpZ2V0RnVuY3Rp b25Qb2ludGVyOwpAZW5kCgpAcHJvdG9jb2wgQWN0aW9uQ2hhbmdlZCA8QWN0aW9uLCBSRVRVUk5B QkxFPgoKCkBlbmQKCkBwcm90b2NvbCBGQWN0aW9uQ3JlYXRpbmcKCgotIF9JX1VzaW5nOwotIChp ZCA8RkFjdGlvbj4pY3JlYXRlRkFjdGlvbjogKGlkIDxGQ2FsbD4pY2FsbDsKQGVuZAoKQHByb3Rv Y29sIEFjdGlvbkNyZWF0aW5nQ2FsbAoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAg ICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgIDc0CgoKCgoKCgoKCi0g X0lfVXNpbmc7Ci0gKGlkIDxBY3Rpb25DYWxsPiljcmVhdGVBY3Rpb25DYWxsOiAoZnVuY190KWZw dHI7Ci0gKGlkIDxBY3Rpb25DYWxsPiljcmVhdGVBY3Rpb25DYWxsOiAoZnVuY190KWZwdHIgOiBh cmcxOwotIChpZCA8QWN0aW9uQ2FsbD4pY3JlYXRlQWN0aW9uQ2FsbDogKGZ1bmNfdClmcHRyIDog YXJnMSA6IGFyZzI7Ci0gKGlkIDxBY3Rpb25DYWxsPiljcmVhdGVBY3Rpb25DYWxsOiAoZnVuY190 KWZwdHIgOiBhcmcxIDogYXJnMiA6IGFyZzM7CkBlbmQKCkBwcm90b2NvbCBBY3Rpb25DcmVhdGlu Z1RvCiMgMzg0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9Vc2lu ZzsKLSAoaWQgPEFjdGlvblRvPiljcmVhdGVBY3Rpb25UbzogdGFyZ2V0IG1lc3NhZ2U6IChTRUwp YVNlbDsKLSAoaWQgPEFjdGlvblRvPiljcmVhdGVBY3Rpb25UbzogdGFyZ2V0IG1lc3NhZ2U6IChT RUwpYVNlbCA6IGFyZzE7Ci0gKGlkIDxBY3Rpb25Ubz4pY3JlYXRlQWN0aW9uVG86IHRhcmdldCBt ZXNzYWdlOiAoU0VMKWFTZWwgOiBhcmcxIDogYXJnMjsKLSAoaWQgPEFjdGlvblRvPiljcmVhdGVB Y3Rpb25UbzogdGFyZ2V0IG1lc3NhZ2U6IChTRUwpYVNlbCA6IGFyZzEgOiBhcmcyIDogYXJnMzsK QGVuZAoKQHByb3RvY29sIEFjdGlvbkNyZWF0aW5nRm9yRWFjaAojIDQwMiAiL3Vzci9sb2NhbC9z d2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiCi0gX0lfVXNpbmc7Ci0gKGlkIDxBY3Rpb25Gb3JFYWNo SG9tb2dlbmVvdXM+KWNyZWF0ZUFjdGlvbkZvckVhY2hIb21vZ2VuZW91czogdGFyZ2V0IG1lc3Nh Z2U6IChTRUwpYVNlbDsKCi0gKGlkIDxBY3Rpb25Gb3JFYWNoPiljcmVhdGVBY3Rpb25Gb3JFYWNo OiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsOwotIChpZCA8QWN0aW9uRm9yRWFjaD4pY3JlYXRl QWN0aW9uRm9yRWFjaDogdGFyZ2V0IG1lc3NhZ2U6IChTRUwpYVNlbCA6IGFyZzE7Ci0gKGlkIDxB Y3Rpb25Gb3JFYWNoPiljcmVhdGVBY3Rpb25Gb3JFYWNoOiB0YXJnZXQgbWVzc2FnZTogKFNFTClh U2VsIDogYXJnMSA6IGFyZzI7Ci0gKGlkIDxBY3Rpb25Gb3JFYWNoPiljcmVhdGVBY3Rpb25Gb3JF YWNoOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsIDogYXJnMSA6IGFyZzIgOiBhcmczOwpAZW5k CgpAcHJvdG9jb2wgRkFjdGlvbkNyZWF0aW5nRm9yRWFjaEhldGVyb2dlbmVvdXMKCgoKCgotIF9J X1VzaW5nOwotIChpZCA8RkFjdGlvbkZvckVhY2hIZXRlcm9nZW5lb3VzPiljcmVhdGVGQWN0aW9u Rm9yRWFjaEhldGVyb2dlbmVvdXM6IHRhcmdldCBjYWxsOiAoaWQgPEZDYWxsPiljYWxsOwpAZW5k CgpAcHJvdG9jb2wgRkFjdGlvbkNyZWF0aW5nRm9yRWFjaEhvbW9nZW5lb3VzCgoKCgoKLSBfSV9V c2luZzsKLSAoaWQgPEZBY3Rpb25Gb3JFYWNoSG9tb2dlbmVvdXM+KWNyZWF0ZUZBY3Rpb25Gb3JF YWNoSG9tb2dlbmVvdXM6IHRhcmdldCBjYWxsOiAoaWQgPEZDYWxsPiljYWxsOwpAZW5kCgpAcHJv dG9jb2wgQWN0aW9uQ3JlYXRpbmcgPEZBY3Rpb25DcmVhdGluZywgQWN0aW9uQ3JlYXRpbmdDYWxs LCBBY3Rpb25DcmVhdGluZ1RvLCBBY3Rpb25DcmVhdGluZ0ZvckVhY2gsIEZBY3Rpb25DcmVhdGlu Z0ZvckVhY2hIZXRlcm9nZW5lb3VzLCBGQWN0aW9uQ3JlYXRpbmdGb3JFYWNoSG9tb2dlbmVvdXM+ CiMgNDYyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKCgoKCgoKCjIwMDEt MDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAg IFBhZ2UgICA3NQoKCi0gX0lfVXNpbmc7CgoKCgotIGNyZWF0ZUFjdGlvbjogYW5BY3Rpb25UeXBl OwoKQGVuZAoKCmV4dGVybiBpZCA8U3ltYm9sPiBDb25jdXJyZW50LCBTZXF1ZW50aWFsLCBSYW5k b21pemVkOwojIDQ5MyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiCnR5cGVk ZWYgdW5zaWduZWQgbG9uZyB0aW1ldmFsX3Q7CgoKCkBwcm90b2NvbCBBY3Rpdml0eUluZGV4IDxJ bmRleCwgUkVUVVJOQUJMRT4KCgotIF9JX1VzaW5nOwotIChpZCA8U3ltYm9sPilnZXRIb2xkVHlw ZTsKLSAoaWQgPEFjdGlvbj4pbmV4dEFjdGlvbjogKGlkICopc3RhdHVzOwpAZW5kCgoKZXh0ZXJu IGlkIDxTeW1ib2w+IEhvbGRTdGFydCwgSG9sZEVuZDsKCkBwcm90b2NvbCBBY3Rpb25UeXBlCiMg NTMxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9Vc2luZzsKIyA1 NTEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgotIChpZCA8QWN0aXZpdHk+ KWFjdGl2YXRlSW46IHN3YXJtQ29udGV4dDsKQGVuZAoKQHByb3RvY29sIFN5bmNocm9uaXphdGlv blR5cGUKIyA1NjkgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgotIF9JX0Ny ZWF0aW5nOwotICh2b2lkKXNldFN5bmNocm9uaXphdGlvblR5cGU6IGFTY2hlZHVsZVR5cGU7Cgot IF9JX1VzaW5nOwotIGdldFN5bmNocm9uaXphdGlvblR5cGU7CkBlbmQKCkBwcm90b2NvbCBBdXRv RHJvcAojIDU5NiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiCi0gX0lfQ3Jl YXRpbmc7Ci0gc2V0QXV0b0Ryb3A6IChCT09MKWF1dG9Ecm9wOwotIF9JX1VzaW5nOwotIChCT09M KWdldEF1dG9Ecm9wOwpAZW5kCgpAcHJvdG9jb2wgQ29tcG91bmRBY3Rpb24gPEFjdGlvblR5cGUs IENvbGxlY3Rpb24sIEF1dG9Ecm9wLCBEZWZhdWx0T3JkZXI+CiMgNjEzICIvdXNyL2xvY2FsL3N3 YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKQGVuZAoKQHByb3RvY29sIEFjdGlvbkdyb3VwIDxDb21w b3VuZEFjdGlvbiwgQWN0aW9uQ3JlYXRpbmcsIERlZmF1bHRPcmRlciwgQ1JFQVRBQkxFPgoKCgoK CgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAg ICAgICAgICAgUGFnZSAgIDc2CgoKIyA2MzQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rp dml0eS5oIgpAZW5kCgpAcHJvdG9jb2wgQWN0aW9uQ29uY3VycmVudCA8QWN0aW9uLCBSRVRVUk5B QkxFPgotIF9JX1VzaW5nOwoKCi0gKGlkIDxBY3Rpb25Hcm91cD4pZ2V0Q29uY3VycmVudEdyb3Vw OwpAZW5kCgpAcHJvdG9jb2wgUmVsYXRpdmVUaW1lCgoKCgoKCi0gX0lfU2V0dGluZzsKLSBzZXRS ZWxhdGl2ZVRpbWU6IChCT09MKXJlbGF0aXZlVGltZTsKLSBfSV9Vc2luZzsKLSAoQk9PTClnZXRS ZWxhdGl2ZVRpbWU7CkBlbmQKCkBwcm90b2NvbCBSZXBlYXRJbnRlcnZhbAojIDY3MSAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiCi0gX0lfU2V0dGluZzsKLSBzZXRSZXBlYXRJ bnRlcnZhbDogKHRpbWV2YWxfdClyZXBlYXRJbnRlcnZhbDsKLSBfSV9Vc2luZzsKLSAodGltZXZh bF90KWdldFJlcGVhdEludGVydmFsOwpAZW5kCgpAcHJvdG9jb2wgQ29uY3VycmVudEdyb3VwVHlw ZQojIDcwNiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiCi0gX0lfU2V0dGlu ZzsKLSAodm9pZClzZXRDb25jdXJyZW50R3JvdXBUeXBlOiBncm91cFR5cGU7Ci0gX0lfVXNpbmc7 Ci0gZ2V0Q29uY3VycmVudEdyb3VwVHlwZTsKQGVuZAoKQHByb3RvY29sIFNpbmdsZXRvbkdyb3Vw cwojIDcyOCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiCi0gX0lfU2V0dGlu ZzsKLSAodm9pZClzZXRTaW5nbGV0b25Hcm91cHM6IChCT09MKXNpbmdsZXRvbkdyb3VwczsKLSBf SV9Vc2luZzsKLSAoQk9PTClnZXRTaW5nbGV0b25Hcm91cHM7CkBlbmQKCkBwcm90b2NvbCBTY2hl ZHVsZSA8TWFwLCBDb21wb3VuZEFjdGlvbiwgQWN0aW9uQ3JlYXRpbmcsIFJlbGF0aXZlVGltZSwg UmVwZWF0SW50ZXJ2YWwsIENvbmN1cnJlbnRHcm91cFR5cGUsIFNpbmdsZXRvbkdyb3VwcywgQ1JF QVRBQkxFPgojIDc2MyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiCi0gX0lf Q3JlYXRpbmc7CgorIGNyZWF0ZTogKGlkIDxab25lPilhWm9uZSBzZXRSZXBlYXRJbnRlcnZhbDog KHRpbWV2YWxfdClycHRJbnRlcnZhbDsKCgorIGNyZWF0ZTogKGlkIDxab25lPilhWm9uZSBzZXRB dXRvRHJvcDogKEJPT0wpYXV0b0Ryb3A7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAg ICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgIDc3CgoKCgotIHNl dEtlZXBFbXB0eUZsYWc6IChCT09MKWtlZXBFbXB0eUZsYWc7Ci0gX0lfVXNpbmc7Ci0gYXQ6ICh0 aW1ldmFsX3QpdFZhbCBjcmVhdGVBY3Rpb246IGFuQWN0aW9uVHlwZTsKCi0gKGlkIDxGQWN0aW9u PilhdDogKHRpbWV2YWxfdCl0VmFsIGNyZWF0ZUZBY3Rpb246IChpZCA8RkNhbGw+KWNhbGw7Ci0g KGlkIDxBY3Rpb25DYWxsPilhdDogKHRpbWV2YWxfdCl0VmFsIGNyZWF0ZUFjdGlvbkNhbGw6IChm dW5jX3QpZnB0cjsKLSAoaWQgPEFjdGlvbkNhbGw+KWF0OiAodGltZXZhbF90KXRWYWwgY3JlYXRl QWN0aW9uQ2FsbDogKGZ1bmNfdClmcHRyOmFyZzE7Ci0gKGlkIDxBY3Rpb25DYWxsPilhdDogKHRp bWV2YWxfdCl0VmFsIGNyZWF0ZUFjdGlvbkNhbGw6IChmdW5jX3QpZnB0cjphcmcxOmFyZzI7Ci0g KGlkIDxBY3Rpb25DYWxsPilhdDogKHRpbWV2YWxfdCl0VmFsIGNyZWF0ZUFjdGlvbkNhbGw6IChm dW5jX3QpZnB0cjphcmcxOmFyZzI6YXJnMzsKCi0gKGlkIDxBY3Rpb25Ubz4pYXQ6ICh0aW1ldmFs X3QpdFZhbCBjcmVhdGVBY3Rpb25UbzogdGFyZ2V0IG1lc3NhZ2U6IChTRUwpYVNlbDsKLSAoaWQg PEFjdGlvblRvPilhdDogKHRpbWV2YWxfdCl0VmFsIGNyZWF0ZUFjdGlvblRvOiB0YXJnZXQgbWVz c2FnZTogKFNFTClhU2VsOmFyZzE7Ci0gKGlkIDxBY3Rpb25Ubz4pYXQ6ICh0aW1ldmFsX3QpdFZh bCBjcmVhdGVBY3Rpb25UbzogdGFyZ2V0IG1lc3NhZ2U6IChTRUwpYVNlbDphcmcxOmFyZzI7Ci0g KGlkIDxBY3Rpb25Ubz4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVBY3Rpb25UbzogdGFyZ2V0 IG1lc3NhZ2U6IChTRUwpYVNlbDphcmcxOmFyZzI6YXJnMzsKCi0gKGlkIDxBY3Rpb25Gb3JFYWNo SG9tb2dlbmVvdXM+KWF0OiAodGltZXZhbF90KXRWYWwgY3JlYXRlQWN0aW9uRm9yRWFjaEhvbW9n ZW5lb3VzOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsOwoKLSAoaWQgPEFjdGlvbkZvckVhY2g+ KWF0OiAodGltZXZhbF90KXRWYWwgY3JlYXRlQWN0aW9uRm9yRWFjaDogdGFyZ2V0IG1lc3NhZ2U6 IChTRUwpYVNlbDsKLSAoaWQgPEFjdGlvbkZvckVhY2g+KWF0OiAodGltZXZhbF90KXRWYWwgY3Jl YXRlQWN0aW9uRm9yRWFjaDogdGFyZ2V0IG1lc3NhZ2U6IChTRUwpYVNlbDphcmcxOwotIChpZCA8 QWN0aW9uRm9yRWFjaD4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVBY3Rpb25Gb3JFYWNoOiB0 YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsOmFyZzE6YXJnMjsKLSAoaWQgPEFjdGlvbkZvckVhY2g+ KWF0OiAodGltZXZhbF90KXRWYWwgY3JlYXRlQWN0aW9uRm9yRWFjaDogdGFyZ2V0IG1lc3NhZ2U6 IChTRUwpYVNlbDphcmcxOmFyZzI6YXJnMzsKCi0gKGlkIDxGQWN0aW9uRm9yRWFjaEhldGVyb2dl bmVvdXM+KWF0OiAodGltZXZhbF90KXRWYWwgY3JlYXRlRkFjdGlvbkZvckVhY2hIZXRlcm9nZW5l b3VzOiB0YXJnZXQgY2FsbDogKGlkIDxGQ2FsbD4pY2FsbDsKLSAoaWQgPEZBY3Rpb25Gb3JFYWNo SG9tb2dlbmVvdXM+KWF0OiAodGltZXZhbF90KXRWYWwgY3JlYXRlRkFjdGlvbkZvckVhY2hIb21v Z2VuZW91czogdGFyZ2V0IGNhbGw6IChpZCA8RkNhbGw+KWNhbGw7CgoKCi0gcmVtb3ZlOiBhbkFj dGlvbjsKCgotIChpZCA8QWN0aW9uR3JvdXA+KWluc2VydEdyb3VwOiAodGltZXZhbF90KXRWYWw7 CkBlbmQKCkBwcm90b2NvbCBTY2hlZHVsZUFjdGl2aXR5IDxBY3Rpdml0eSwgUkVUVVJOQUJMRT4K CgotIF9JX0NyZWF0aW5nOwotIF9JX1VzaW5nOwoKLSAodGltZXZhbF90KWdldEN1cnJlbnRUaW1l OwoKCi0gc3RlcFVudGlsOiAodGltZXZhbF90KXRWYWw7CkBlbmQKCkBwcm90b2NvbCBTd2FybUFj dGl2aXR5IDxTY2hlZHVsZUFjdGl2aXR5LCBSRVRVUk5BQkxFPgoKCgotIF9JX1VzaW5nOwoKLSBn ZXRTd2FybTsKCi0gKGlkIDxTY2hlZHVsZT4pZ2V0U3luY2hyb25pemF0aW9uU2NoZWR1bGU7CgoK CgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAg ICAgICAgICAgICBQYWdlICAgNzgKCgpAZW5kCgpAcHJvdG9jb2wgRm9yRWFjaEFjdGl2aXR5IDxB Y3Rpdml0eSwgUkVUVVJOQUJMRT4KCgoKLSBfSV9Vc2luZzsKLSBnZXRDdXJyZW50TWVtYmVyOwpA ZW5kCgpAcHJvdG9jb2wgU3dhcm1Qcm9jZXNzIDxBY3Rpb25UeXBlLCBab25lLCBTeW5jaHJvbml6 YXRpb25UeXBlPgojIDg1MCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiCi0g X0lfQ3JlYXRpbmc7CgoKCgoKCgotIHNldEludGVybmFsWm9uZVR5cGU6IGFab25lVHlwZTsKCi0g X0lfVXNpbmc7CgoKCgoKLSBnZXRJbnRlcm5hbFpvbmU7CgoKCgoKLSAoaWQgPFN3YXJtQWN0aXZp dHk+KWdldEFjdGl2aXR5OwpAZW5kCiMgOTI0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0 aXZpdHkuaCIKQHByb3RvY29sIEdldFN1YmFjdGl2aXR5QWN0aW9uCgoKCi0gX0lfVXNpbmc7Ci0g X2dldFN1YmFjdGl2aXR5QWN0aW9uXzsKQGVuZAoKCgoKCmV4dGVybiBpZCBfYWN0aXZpdHlfY3Vy cmVudDsKCgoKZXh0ZXJuIGlkIF9hY3Rpdml0eV9jb250ZXh0X2Vycm9yIChjb25zdCBjaGFyICpt YWNyb05hbWUpOwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBt YWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAgNzkKCgpAcHJvdG9jb2wgQ29uY3VycmVu dEdyb3VwIDxBY3Rpb25Hcm91cCwgUkVUVVJOQUJMRT4KCgotIF9JX1VzaW5nOwotICh2b2lkKV9z ZXRBY3Rpb25Db25jdXJyZW50XzogYWN0aW9uOwotIF9nZXRFbXB0eUFjdGlvbkNvbmN1cnJlbnRf OwpAZW5kCgpAcHJvdG9jb2wgQ29uY3VycmVudFNjaGVkdWxlIDxDb25jdXJyZW50R3JvdXAsIFNj aGVkdWxlLCBDUkVBVEFCTEU+CgoKQGVuZAoKQHByb3RvY29sIEFjdGl2YXRpb25PcmRlciA8QWN0 aW9uR3JvdXAsIFJFVFVSTkFCTEU+CgoKLSBfSV9Vc2luZzsKCi0gKHZvaWQpYWRkTGFzdDogbWVy Z2VBY3Rpb247CgoKCi0gcmVtb3ZlOiBtZXJnZUFjdGlvbjsKCkBlbmQKCgpleHRlcm4gaWQgPEVy cm9yPiBJbnZhbGlkU3dhcm1ab25lOwoKCgpleHRlcm4gaWQgX2FjdGl2aXR5X3pvbmU7CiMgOTg1 ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKZXh0ZXJuIEJPT0wgKCpfYWN0 aXZpdHlfdHJhY2UpIChpZCk7CiMgOTk4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZp dHkuaCIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkvdHlwZXMuaCIgMQpl eHRlcm4gdm9pZCAqX2FjdGl2aXR5X1tdOwoKZXh0ZXJuIGlkIERlZmF1bHRPcmRlcjsKZXh0ZXJu IGlkIEFjdGl2aXR5OwpleHRlcm4gaWQgQWN0aW9uOwpleHRlcm4gaWQgQWN0aW9uQXJnczsKZXh0 ZXJuIGlkIEZBY3Rpb247CmV4dGVybiBpZCBBY3Rpb25UYXJnZXQ7CmV4dGVybiBpZCBBY3Rpb25T ZWxlY3RvcjsKZXh0ZXJuIGlkIEFjdGlvblRvOwpleHRlcm4gaWQgQWN0aW9uRm9yRWFjaDsKZXh0 ZXJuIGlkIEFjdGlvbkZvckVhY2hIb21vZ2VuZW91czsKZXh0ZXJuIGlkIEZBY3Rpb25Gb3JFYWNo OwpleHRlcm4gaWQgRkFjdGlvbkZvckVhY2hIZXRlcm9nZW5lb3VzOwpleHRlcm4gaWQgRkFjdGlv bkZvckVhY2hIb21vZ2VuZW91czsKZXh0ZXJuIGlkIEFjdGlvbkNhbGw7CmV4dGVybiBpZCBBY3Rp b25DaGFuZ2VkOwpleHRlcm4gaWQgRkFjdGlvbkNyZWF0aW5nOwpleHRlcm4gaWQgQWN0aW9uQ3Jl YXRpbmdDYWxsOwpleHRlcm4gaWQgQWN0aW9uQ3JlYXRpbmdUbzsKCgoKCgoKCjIwMDEtMDgtMjQg MDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2Ug ICA4MAoKCmV4dGVybiBpZCBBY3Rpb25DcmVhdGluZ0ZvckVhY2g7CmV4dGVybiBpZCBGQWN0aW9u Q3JlYXRpbmdGb3JFYWNoSGV0ZXJvZ2VuZW91czsKZXh0ZXJuIGlkIEZBY3Rpb25DcmVhdGluZ0Zv ckVhY2hIb21vZ2VuZW91czsKZXh0ZXJuIGlkIEFjdGlvbkNyZWF0aW5nOwpleHRlcm4gaWQgQWN0 aXZpdHlJbmRleDsKZXh0ZXJuIGlkIEFjdGlvblR5cGU7CmV4dGVybiBpZCBTeW5jaHJvbml6YXRp b25UeXBlOwpleHRlcm4gaWQgQXV0b0Ryb3A7CmV4dGVybiBpZCBDb21wb3VuZEFjdGlvbjsKZXh0 ZXJuIGlkIEFjdGlvbkdyb3VwOwpleHRlcm4gaWQgQWN0aW9uQ29uY3VycmVudDsKZXh0ZXJuIGlk IFJlbGF0aXZlVGltZTsKZXh0ZXJuIGlkIFJlcGVhdEludGVydmFsOwpleHRlcm4gaWQgQ29uY3Vy cmVudEdyb3VwVHlwZTsKZXh0ZXJuIGlkIFNpbmdsZXRvbkdyb3VwczsKZXh0ZXJuIGlkIFNjaGVk dWxlOwpleHRlcm4gaWQgU2NoZWR1bGVBY3Rpdml0eTsKZXh0ZXJuIGlkIFN3YXJtQWN0aXZpdHk7 CmV4dGVybiBpZCBGb3JFYWNoQWN0aXZpdHk7CmV4dGVybiBpZCBTd2FybVByb2Nlc3M7CmV4dGVy biBpZCBHZXRTdWJhY3Rpdml0eUFjdGlvbjsKZXh0ZXJuIGlkIENvbmN1cnJlbnRHcm91cDsKZXh0 ZXJuIGlkIENvbmN1cnJlbnRTY2hlZHVsZTsKZXh0ZXJuIGlkIEFjdGl2YXRpb25PcmRlcjsKIyA5 OTkgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIiAyCiMgMjIgIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9vYmplY3RiYXNlLmgiIDIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvZXh0ZXJudmFyLmgiIDEKIyAyMyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamVj dGJhc2UuaCIgMgoKQHByb3RvY29sIFN3YXJtT2JqZWN0IDxDcmVhdGUsIERyb3AsIENSRUFUQUJM RT4KIyAzOSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2UuaCIKLSBfSV9Vc2lu ZzsKCgoKLSBnZXRQcm9iZU1hcDsKCgoKLSBnZXRDb21wbGV0ZVByb2JlTWFwOwoKCgotIGdldFBy b2JlRm9yVmFyaWFibGU6IChjb25zdCBjaGFyICopYVZhcmlhYmxlOwoKCgotIGdldFByb2JlRm9y TWVzc2FnZTogKGNvbnN0IGNoYXIgKilhTWVzc2FnZTsKQGVuZAoKQHByb3RvY29sIFByb2JlQ29u ZmlnCgoKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4u bWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgICA4MQoKCi0gX0lfVXNpbmc7Ci0gc2V0T2JqZWN0 VG9Ob3RpZnk6IGFuT2JqZWN0OwotIGdldE9iamVjdFRvTm90aWZ5OwpAZW5kCgpAcHJvdG9jb2wg UHJvYmUgPFN3YXJtT2JqZWN0LCBQcm9iZUNvbmZpZz4KIyA4MSAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL29iamVjdGJhc2UuaCIKLSBfSV9DcmVhdGluZzsKCgotIHNldFByb2JlZENsYXNzOiAo Q2xhc3MpY2xhc3M7CgotIHNldFByb2JlZE9iamVjdDogb2JqZWN0OwotIF9JX1NldHRpbmc7CgoK Ci0gc2V0U2FmZXR5OwoKCgoKLSB1bnNldFNhZmV0eTsKCi0gX0lfVXNpbmc7CgoKCgoKLSBjbG9u ZTogKGlkIDxab25lPilhWm9uZTsKCgoKLSAoQ2xhc3MpZ2V0UHJvYmVkQ2xhc3M7CgoKCgotIChj b25zdCBjaGFyICopZ2V0UHJvYmVkVHlwZTsKQGVuZAoKQHByb3RvY29sIFZhclByb2JlIDxQcm9i ZSwgQ1JFQVRBQkxFPgoKCgoKCgotIF9JX0NyZWF0aW5nOwoKCgoKLSBzZXRQcm9iZWRWYXJpYWJs ZTogKGNvbnN0IGNoYXIgKilhVmFyaWFibGU7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAg ICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgIDgyCgoKLSBf SV9TZXR0aW5nOwoKCgoKCgoKLSBzZXROb25JbnRlcmFjdGl2ZTsKCgoKCgoKLSBzZXRTdHJpbmdS ZXR1cm5UeXBlOiByZXR1cm5UeXBlOwoKCgotIHNldEZsb2F0Rm9ybWF0OiAoY29uc3QgY2hhciAq KWZvcm1hdDsKCi0gX0lfVXNpbmc7CgoKLSAoY29uc3QgY2hhciAqKWdldFByb2JlZFZhcmlhYmxl OwoKCgotIChCT09MKWdldEludGVyYWN0aXZlRmxhZzsKCgotICh2b2lkICopcHJvYmVSYXc6IGFu T2JqZWN0OwoKCgotICh2b2lkICopcHJvYmVBc1BvaW50ZXI6IGFuT2JqZWN0OwoKCi0gcHJvYmVP YmplY3Q6IGFuT2JqZWN0OwoKCgotIChpbnQpcHJvYmVBc0ludDogYW5PYmplY3Q7CgoKCi0gKGRv dWJsZSlwcm9iZUFzRG91YmxlOiBhbk9iamVjdDsKCgoKLSAoY29uc3QgY2hhciAqKXByb2JlQXNT dHJpbmc6IGFuT2JqZWN0IEJ1ZmZlcjogKGNoYXIgKilidWZmZXI7CgoKCi0gKGlkIDxTdHJpbmc+ KXByb2JlQXNTdHJpbmc6IGFuT2JqZWN0OwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAg ICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgICA4MwoKCgoKCgoK LSAoY29uc3QgY2hhciAqKXByb2JlQXNTdHJpbmc6IGFuT2JqZWN0CiAgICAgICAgICAgICAgICAg ICAgICAgQnVmZmVyOiAoY2hhciAqKWJ1ZgogICAgICAgICAgICB3aXRoRnVsbFByZWNpc2lvbjog KEJPT0wpcHJlY2lzaW9uOwoKCi0gKHVuc2lnbmVkKWdldFJhbms7CgoKLSAoY29uc3QgY2hhciAq KWdldEJhc2VUeXBlOwoKCgotICh1bnNpZ25lZCAqKWdldERpbXM7CgoKCi0gaXRlcmF0ZUFzRG91 YmxlOiBhbk9iamVjdCB1c2luZzogKHZvaWQgKCopICh1bnNpZ25lZCByYW5rLCB1bnNpZ25lZCAq dmVjLCBkb3VibGUgdmFsKSlmdW5jOwoKCgotIGl0ZXJhdGVBc0ludGVnZXI6IGFuT2JqZWN0IHVz aW5nOiAodm9pZCAoKikgKHVuc2lnbmVkIHJhbmssIHVuc2lnbmVkICp2ZWMsIGludCB2YWwpKWZ1 bmM7CgoKCi0gKHZvaWQpc2V0RGF0YTogYW5PYmplY3QgVG86ICh2b2lkICopbmV3VmFsdWU7CgoK CgoKCgotIChCT09MKXNldERhdGE6IGFuT2JqZWN0IFRvU3RyaW5nOiAoY29uc3QgY2hhciAqKXM7 CgoKCi0gKHZvaWQpc2V0RGF0YTogYW5PYmplY3QgVG9Eb3VibGU6IChkb3VibGUpdmFsOwoKZXh0 ZXJuIGlkIDxTeW1ib2w+IERlZmF1bHRTdHJpbmcsIENoYXJTdHJpbmcsIEludFN0cmluZzsKQGVu ZAoKQHByb3RvY29sIE1lc3NhZ2VQcm9iZSA8UHJvYmUsIENSRUFUQUJMRT4KCgoKCgoKCi0gX0lf Q3JlYXRpbmc7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFp bi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgIDg0CgoKCi0gc2V0UHJvYmVkU2VsZWN0b3I6 IChTRUwpYVNlbDsKCgoKCgotIHNldFByb2JlZE1ldGhvZE5hbWU6IChjb25zdCBjaGFyICopbWV0 aG9kTmFtZTsKCgorIGNyZWF0ZTogKGlkIDxab25lPilhWm9uZSBzZXRQcm9iZWRTZWxlY3Rvcjog KFNFTClhU2VsOwoKLSBfSV9TZXR0aW5nOwoKCgoKLSBzZXRIaWRlUmVzdWx0OiAoQk9PTCl2YWw7 CgotIF9JX1VzaW5nOwoKCi0gKEJPT0wpaXNSZXN1bHRJZDsKCgoKLSAoQk9PTClpc0FyZ3VtZW50 SWQ6ICh1bnNpZ25lZCl3aGljaDsKCgoKLSAoY29uc3QgY2hhciAqKWdldFByb2JlZE1lc3NhZ2U7 CgotICh1bnNpZ25lZClnZXRBcmdDb3VudDsKCgotICh2YWxfdClnZXRBcmc6ICh1bnNpZ25lZCl3 aGljaDsKCgoKLSAoY29uc3QgY2hhciAqKWdldEFyZ05hbWU6ICh1bnNpZ25lZCl3aGljaDsKCgot IChCT09MKWdldEhpZGVSZXN1bHQ7CgoKCi0gc2V0QXJnOiAodW5zaWduZWQpd2hpY2ggVG9TdHJp bmc6IChjb25zdCBjaGFyICopd2hhdDsKCgoKCgotIHNldEFyZzogKHVuc2lnbmVkKXdoaWNoIFRv VW5zaWduZWQ6ICh1bnNpZ25lZCl4OwoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAg ICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgIDg1CgoKLSAodmFs X3QpZHluYW1pY0NhbGxPbjogdGFyZ2V0OwoKCgoKLSAoZG91YmxlKWRvdWJsZUR5bmFtaWNDYWxs T246IHRhcmdldDsKCgoKCi0gKGxvbmcpbG9uZ0R5bmFtaWNDYWxsT246IHRhcmdldDsKCgoKCi0g KGNvbnN0IGNoYXIgKilzdHJpbmdEeW5hbWljQ2FsbE9uOiB0YXJnZXQ7CgoKCgotIG9iamVjdER5 bmFtaWNDYWxsT246IHRhcmdldDsKQGVuZAoKQHByb3RvY29sIFByb2JlTWFwIDxTd2FybU9iamVj dCwgUHJvYmVDb25maWcsIENSRUFUQUJMRT4KIyAzMzEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9vYmplY3RiYXNlLmgiCi0gX0lfQ3JlYXRpbmc7CgoKCi0gc2V0UHJvYmVkQ2xhc3M6IChDbGFz cyljbGFzczsKCi0gc2V0UHJvYmVkT2JqZWN0OiBvYmplY3Q7Ci0gX0lfVXNpbmc7CgotICh1bnNp Z25lZClnZXRDb3VudDsKCgoKLSAoQ2xhc3MpZ2V0UHJvYmVkQ2xhc3M7CgoKCgotIGFkZFByb2Jl OiAoaWQgPFByb2JlPilhUHJvYmU7CgoKCgotIGFkZFByb2JlTWFwOiBhUHJvYmVNYXA7CgoKCgoK LSBkcm9wUHJvYmVGb3JWYXJpYWJsZTogKGNvbnN0IGNoYXIgKilhVmFyaWFibGU7CgoKCgoKCgoK MjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAg ICAgICAgUGFnZSAgIDg2CgoKCgoKLSBkcm9wUHJvYmVGb3JNZXNzYWdlOiAoY29uc3QgY2hhciAq KWFNZXNzYWdlOwoKCgoKCi0gZHJvcFByb2JlTWFwOiBhUHJvYmVNYXA7CgoKCi0gKGlkIDxJbmRl eD4pYmVnaW46IChpZCA8Wm9uZT4pYVpvbmU7CgoKCgoKCi0gY2xvbmU6IChpZCA8Wm9uZT4pYVpv bmU7CgpAZW5kCgpAcHJvdG9jb2wgU3dhcm0gPFN3YXJtUHJvY2VzcywgQ1JFQVRBQkxFPgoKCgoK Ci0gX0lfVXNpbmc7CgoKLSBidWlsZE9iamVjdHM7CgoKLSBidWlsZEFjdGlvbnM7CiMgNDA4ICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFzZS5oIgotIChpZCA8QWN0aXZpdHk+KWFj dGl2YXRlSW46IHN3YXJtQ29udGV4dDsKCgoKLSAoaWQgPFByb2JlTWFwPilnZXRQcm9iZU1hcDsK CgotIChpZCA8UHJvYmVNYXA+KWdldENvbXBsZXRlUHJvYmVNYXA7CgoKLSAoaWQgPFZhclByb2Jl PilnZXRQcm9iZUZvclZhcmlhYmxlOiAoY29uc3QgY2hhciAqKWFWYXJpYWJsZTsKQGVuZAoKQHBy b3RvY29sIERlZmF1bHRQcm9iZU1hcCA8UHJvYmVNYXAsIENSRUFUQUJMRT4KCgoKCgoKCgoKCgoy MDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAg ICAgICBQYWdlICAgODcKCgoKCgpAZW5kCgpAcHJvdG9jb2wgQ3VzdG9tUHJvYmVNYXAgPFByb2Jl TWFwLCBDUkVBVEFCTEU+CiMgNDQzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFz ZS5oIgotIF9JX0NyZWF0aW5nOwoKCgoKCisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIGZvckNs YXNzOiAoQ2xhc3MpYUNsYXNzIHdpdGhJZGVudGlmaWVyczogKGNvbnN0IGNoYXIgKil2YXJzLCAu Li47Ci0gX0lfU2V0dGluZzsKCgotIGFkZFByb2Jlc0ZvckNsYXNzOiAoQ2xhc3MpIGFDbGFzcwog ICAgd2l0aElkZW50aWZpZXJzOiAoY29uc3QgY2hhciAqKXZhcnMsIC4uLjsKLSBfSV9Vc2luZzsK QGVuZAoKQHByb3RvY29sIEVtcHR5UHJvYmVNYXAgPEN1c3RvbVByb2JlTWFwLCBDUkVBVEFCTEU+ CgoKCgotIF9JX0NyZWF0aW5nOwoKKyBjcmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUgZm9yQ2xhc3M6 IChDbGFzcylhQ2xhc3M7CkBlbmQKCkBwcm90b2NvbCBDb21wbGV0ZVByb2JlTWFwIDxQcm9iZU1h cCwgQ1JFQVRBQkxFPgoKCgoKCgoKQGVuZAoKQHByb3RvY29sIENvbXBsZXRlVmFyTWFwIDxQcm9i ZU1hcCwgQ1JFQVRBQkxFPgoKCgoKCkBlbmQKCkBwcm90b2NvbCBQcm9iZUxpYnJhcnkgPENyZWF0 ZSwgRHJvcCwgUHJvYmVDb25maWcsIENSRUFUQUJMRT4KIyA0OTggIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9vYmplY3RiYXNlLmgiCi0gX0lfVXNpbmc7CiMgNTA3ICIvdXNyL2xvY2FsL3N3YXJt L2luY2x1ZGUvb2JqZWN0YmFzZS5oIgotIHNldERpc3BsYXlQcmVjaXNpb246ICh1bnNpZ25lZClu U2lnRGlzcGxheTsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBt YWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAgODgKCgoKCi0gKHVuc2lnbmVkKWdldERp c3BsYXlQcmVjaXNpb247CgoKCgoKCgotIHNldFNhdmVkUHJlY2lzaW9uOiAodW5zaWduZWQpblNp Z1NhdmVkOwoKCgotICh1bnNpZ25lZClnZXRTYXZlZFByZWNpc2lvbjsKCgoKLSAoQk9PTClpc1By b2JlTWFwRGVmaW5lZEZvcjogKENsYXNzKWFDbGFzczsKLSAoQk9PTClpc1Byb2JlTWFwRGVmaW5l ZEZvck9iamVjdDogYW5PYmplY3Q7CgoKCgoKCi0gKGlkIDxQcm9iZU1hcD4pZ2V0UHJvYmVNYXBG b3I6IChDbGFzcylhQ2xhc3M7Ci0gKGlkIDxQcm9iZU1hcD4pZ2V0UHJvYmVNYXBGb3JPYmplY3Q6 IGFuT2JqZWN0OwoKCgoKCi0gKGlkIDxQcm9iZU1hcD4pZ2V0Q29tcGxldGVQcm9iZU1hcEZvcjog KENsYXNzKWFDbGFzczsKLSAoaWQgPFByb2JlTWFwPilnZXRDb21wbGV0ZVByb2JlTWFwRm9yT2Jq ZWN0OiBhbk9iamVjdDsKCgoKCi0gKGlkIDxQcm9iZU1hcD4pZ2V0Q29tcGxldGVWYXJNYXBGb3I6 IChDbGFzcylhQ2xhc3M7Ci0gKGlkIDxQcm9iZU1hcD4pZ2V0Q29tcGxldGVWYXJNYXBGb3JPYmpl Y3Q6IGFuT2JqZWN0OwoKCgoKCgotIChpZCA8VmFyUHJvYmU+KWdldFByb2JlRm9yVmFyaWFibGU6 IChjb25zdCBjaGFyICopYVZhciBpbkNsYXNzOiAoQ2xhc3MpYUNsYXNzOwotIChpZCA8VmFyUHJv YmU+KWdldFByb2JlRm9yVmFyaWFibGU6IChjb25zdCBjaGFyICopYVZhciBpbk9iamVjdDogYW5P YmplY3Q7CgoKCgoKCi0gKGlkIDxNZXNzYWdlUHJvYmU+KWdldFByb2JlRm9yTWVzc2FnZTogKGNv bnN0IGNoYXIgKilhTWVzc2FnZSBpbkNsYXNzOiAoQ2xhc3MpYUNsYXNzOwoKCgoKCgoKMjAwMS0w OC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAg UGFnZSAgIDg5CgoKLSAoaWQgPE1lc3NhZ2VQcm9iZT4pZ2V0UHJvYmVGb3JNZXNzYWdlOiAoY29u c3QgY2hhciAqKWFNZXNzYWdlIGluT2JqZWN0OiBhbk9iamVjdDsKCgoKCi0gc2V0UHJvYmVNYXA6 IChpZCA8UHJvYmVNYXA+KWFNYXAgRm9yOiAoQ2xhc3MpYUNsYXNzOwotIHNldFByb2JlTWFwOiAo aWQgPFByb2JlTWFwPilhTWFwIEZvck9iamVjdDogYW5PYmplY3Q7CgpAZW5kCgoKZXh0ZXJuIGlk IDxQcm9iZUxpYnJhcnk+IHByb2JlTGlicmFyeTsKCkBwcm90b2NvbCBBY3Rpdml0eUNvbnRyb2wg PFN3YXJtT2JqZWN0LCBDUkVBVEFCTEU+CiMgNTkyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv b2JqZWN0YmFzZS5oIgotIF9JX0NyZWF0aW5nOwoKLSBfSV9Vc2luZzsKCgoKCgotICh2b2lkKWF0 dGFjaFRvQWN0aXZpdHk6IChpZCA8U2NoZWR1bGVBY3Rpdml0eT4pYW5BY3Rpdml0eTsKCgoKCgoK Ci0gKGlkIDxTeW1ib2w+KXJ1bkFjdGl2aXR5OwoKCgoKCgotIChpZCA8U3ltYm9sPilzdG9wQWN0 aXZpdHk7CgoKCgoKCgotIChpZCA8U3ltYm9sPiluZXh0QWN0aW9uOwoKCgotIChpZCA8U3ltYm9s PilzdGVwQWN0aW9uOwoKCgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAg ICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAgOTAKCgotIChpZCA8U3ltYm9s PilzdGVwVW50aWw6ICh0aW1ldmFsX3Qpc3RvcFRpbWU7CgoKCgoKLSAodm9pZCl1cGRhdGVTdGF0 ZVZhcjsKCgotIChpZCA8U3ltYm9sPilnZXRTdGF0dXM7CgoKLSAodm9pZCl0ZXJtaW5hdGU7CgoK LSAoaWQgPFNjaGVkdWxlQWN0aXZpdHk+KWdldEFjdGl2aXR5OwpAZW5kCgpAY2xhc3MgUHJvYmU7 CkBjbGFzcyBWYXJQcm9iZTsKQGNsYXNzIE1lc3NhZ2VQcm9iZTsKQGNsYXNzIFByb2JlTWFwOwpA Y2xhc3MgRGVmYXVsdFByb2JlTWFwOwpAY2xhc3MgQ3VzdG9tUHJvYmVNYXA7CkBjbGFzcyBFbXB0 eVByb2JlTWFwOwpAY2xhc3MgQ29tcGxldGVQcm9iZU1hcDsKQGNsYXNzIENvbXBsZXRlVmFyTWFw OwpAY2xhc3MgUHJvYmVMaWJyYXJ5OwpAY2xhc3MgQWN0aXZpdHlDb250cm9sOwpAY2xhc3MgU3dh cm07CkBjbGFzcyBTd2FybU9iamVjdDsKCgpleHRlcm4gY29uc3QgY2hhciAqc3dhcm1fdmVyc2lv bjsKIyAyNSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3JhbmRvbS5oIiAyCgoKQHByb3RvY29s IEludGVybmFsU3RhdGUKIyA0MCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3JhbmRvbS5oIgot IF9JX1VzaW5nOwoKLSAodW5zaWduZWQpZ2V0U3RhdGVTaXplOwotICh2b2lkKXB1dFN0YXRlSW50 bzogKHZvaWQgKilidWZmZXI7Ci0gKHZvaWQpc2V0U3RhdGVGcm9tOiAodm9pZCAqKWJ1ZmZlcjsK LSAodW5zaWduZWQpZ2V0TWFnaWM7CkBlbmQKCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRl L3JhbmRvbS9nZW5lcmF0b3JzLmgiIDEKIyAyOCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3Jh bmRvbS9nZW5lcmF0b3JzLmgiCkBwcm90b2NvbCBDb21tb25HZW5lcmF0b3IKCi0gX0lfQ3JlYXRp bmc7CisgY3JlYXRlV2l0aERlZmF1bHRzOiAoaWQgPFpvbmU+KWFab25lOwoKLSBfSV9TZXR0aW5n OwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAg ICAgICAgICAgICAgICAgIFBhZ2UgICA5MQoKCgotIHNldFN0YXRlRnJvbVNlZWQ6ICh1bnNpZ25l ZClzZWVkOwoKCgotIHNldFN0YXRlRnJvbVNlZWRzOiAodW5zaWduZWQgKilzZWVkczsKCgoKLSBz ZXRBbnRpdGhldGljOiAoQk9PTCkgYW50aVQ7CgotIF9JX1VzaW5nOwoKLSAoQk9PTClnZXRBbnRp dGhldGljOwoKCgotICh1bnNpZ25lZClnZXRNYXhTZWVkVmFsdWU7CgoKCi0gKHVuc2lnbmVkICop Z2V0TWF4U2VlZFZhbHVlczsKCgoKLSAodW5zaWduZWQpZ2V0SW5pdGlhbFNlZWQ7CgoKCi0gKHVu c2lnbmVkICopZ2V0SW5pdGlhbFNlZWRzOwoKCgotICh1bnNpZ25lZClsZW5ndGhPZlNlZWRWZWN0 b3I7CgoKCi0gcmVzZXQ7CgoKCi0gKHVuc2lnbmVkKWdldFVuc2lnbmVkTWF4OwpAZW5kCgpAcHJv dG9jb2wgU2ltcGxlR2VuZXJhdG9yCgotIF9JX0NyZWF0aW5nOworIGNyZWF0ZTogKGlkIDxab25l PilhWm9uZSBzZXRTdGF0ZUZyb21TZWVkOiAodW5zaWduZWQpc2VlZDsKCisgY3JlYXRlOiAoaWQg PFpvbmU+KWFab25lIHNldFN0YXRlRnJvbVNlZWRzOiAodW5zaWduZWQgKilzZWVkczsKCi0gX0lf VXNpbmc7CgoKLSAodW5zaWduZWQpZ2V0VW5zaWduZWRTYW1wbGU7CgoKCgoKCgoKMjAwMS0wOC0y NCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFn ZSAgIDkyCgoKCgoKLSAoZmxvYXQpZ2V0RmxvYXRTYW1wbGU7CgoKCgotIChkb3VibGUpZ2V0VGhp bkRvdWJsZVNhbXBsZTsKCgoKCi0gKGRvdWJsZSlnZXREb3VibGVTYW1wbGU7CgoKCgoKLSAobG9u ZyBkb3VibGUpZ2V0TG9uZ0RvdWJsZVNhbXBsZTsKCgotICh1bnNpZ25lZCBsb25nIGxvbmcgaW50 KWdldEN1cnJlbnRDb3VudDsKQGVuZAoKQHByb3RvY29sIFNwbGl0R2VuZXJhdG9yCgotIF9JX0Ny ZWF0aW5nOworIGNyZWF0ZSA6IChpZCA8Wm9uZT4pYVpvbmUKICAgICAgICAgICAgICBzZXRBOiAo dW5zaWduZWQpQQogICAgICAgICAgICAgIHNldFY6ICh1bnNpZ25lZCl2CiAgICAgICAgICAgICAg c2V0VzogKHVuc2lnbmVkKXcKICBzZXRTdGF0ZUZyb21TZWVkOiAodW5zaWduZWQpc2VlZDsKCisg Y3JlYXRlIDogKGlkIDxab25lPilhWm9uZQogICAgICAgICAgICAgIHNldEE6ICh1bnNpZ25lZClB CiAgICAgICAgICAgICAgc2V0VjogKHVuc2lnbmVkKXYKICAgICAgICAgICAgICBzZXRXOiAodW5z aWduZWQpdwogc2V0U3RhdGVGcm9tU2VlZHM6ICh1bnNpZ25lZCAqKXNlZWRzOwoKLSBfSV9TZXR0 aW5nOwoKCi0gaW5pdEdlbmVyYXRvcjogKHVuc2lnbmVkKXZHZW47CgoKCi0gaW5pdEFsbDsKCi0g X0lfVXNpbmc7CgoKCgotICh1bnNpZ25lZClnZXROdW1HZW5lcmF0b3JzOwoKCgoKCgoKCjIwMDEt MDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAg IFBhZ2UgICA5MwoKCgoKLSAodW5zaWduZWQpZ2V0TnVtU2VnbWVudHM7CgoKCi0gKHVuc2lnbmVk KWdldFNlZ21lbnRMZW5ndGg7CgoKCi0gcmVzdGFydEdlbmVyYXRvcjogKHVuc2lnbmVkKXZHZW47 CgoKCi0gYWR2YW5jZUdlbmVyYXRvcjogKHVuc2lnbmVkKXZHZW47CgoKCi0ganVtcEdlbmVyYXRv cjogKHVuc2lnbmVkKXZHZW4gdG9TZWdtZW50OiAodW5zaWduZWQgbG9uZyBsb25nIGludClzZWc7 CgoKCi0gcmVzdGFydEFsbDsKCgoKLSBhZHZhbmNlQWxsOwoKCgotIGp1bXBBbGxUb1NlZ21lbnQ6 ICh1bnNpZ25lZCBsb25nIGxvbmcgaW50KXNlZzsKCgoKCi0gKHVuc2lnbmVkKWdldFVuc2lnbmVk U2FtcGxlOiAodW5zaWduZWQpdkdlbjsKCgoKCgotIChmbG9hdClnZXRGbG9hdFNhbXBsZTogKHVu c2lnbmVkKXZHZW47CgoKCgoKLSAoZG91YmxlKWdldFRoaW5Eb3VibGVTYW1wbGU6ICh1bnNpZ25l ZCl2R2VuOwoKCgoKCi0gKGRvdWJsZSlnZXREb3VibGVTYW1wbGU6ICh1bnNpZ25lZCl2R2VuOwoK CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAg ICAgICAgICAgICAgICBQYWdlICAgOTQKCgoKCgoKLSAobG9uZyBkb3VibGUpZ2V0TG9uZ0RvdWJs ZVNhbXBsZTogKHVuc2lnbmVkKXZHZW47CgoKCi0gKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpZ2V0 Q3VycmVudFNlZ21lbnQ6ICh1bnNpZ25lZCl2R2VuOwoKCgotICh1bnNpZ25lZCBsb25nIGxvbmcg aW50KWdldEN1cnJlbnRDb3VudDogKHVuc2lnbmVkKXZHZW47CkBlbmQKIyAyMjggIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9yYW5kb20vZ2VuZXJhdG9ycy5oIgpAcHJvdG9jb2wgQmFzaWNSYW5k b21HZW5lcmF0b3IgPFN3YXJtT2JqZWN0LCBJbnRlcm5hbFN0YXRlLCBDb21tb25HZW5lcmF0b3I+ CgoKCkBlbmQKCkBwcm90b2NvbCBTaW1wbGVSYW5kb21HZW5lcmF0b3IgPEJhc2ljUmFuZG9tR2Vu ZXJhdG9yLCBTaW1wbGVHZW5lcmF0b3I+CgoKCgpAZW5kCgpAcHJvdG9jb2wgU3BsaXRSYW5kb21H ZW5lcmF0b3IgPEJhc2ljUmFuZG9tR2VuZXJhdG9yLCBTcGxpdEdlbmVyYXRvcj4KCgoKCgoKQGVu ZAojIDI1OSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3JhbmRvbS9nZW5lcmF0b3JzLmgiCkBw cm90b2NvbCBMQ0dnZW4gPFNpbXBsZVJhbmRvbUdlbmVyYXRvcj4KIyAyNjkgIi91c3IvbG9jYWwv c3dhcm0vaW5jbHVkZS9yYW5kb20vZ2VuZXJhdG9ycy5oIgpAZW5kCgpAcHJvdG9jb2wgTENHMWdl biA8TENHZ2VuLCBDUkVBVEFCTEU+CgoKCgpAZW5kCgpAcHJvdG9jb2wgTENHMmdlbiA8TENHZ2Vu LCBDUkVBVEFCTEU+CgoKCgpAZW5kCgpAcHJvdG9jb2wgTENHM2dlbiA8TENHZ2VuLCBDUkVBVEFC TEU+CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAg ICAgICAgICAgICAgICAgICBQYWdlICAgOTUKCgoKCgoKQGVuZAojIDMwMyAiL3Vzci9sb2NhbC9z d2FybS9pbmNsdWRlL3JhbmRvbS9nZW5lcmF0b3JzLmgiCkBwcm90b2NvbCBQTU1MQ0dnZW4gPFNp bXBsZVJhbmRvbUdlbmVyYXRvcj4KCgoKQGVuZAoKQHByb3RvY29sIFBNTUxDRzFnZW4gPFBNTUxD R2dlbiwgQ1JFQVRBQkxFPgoKCgoKQGVuZAoKQHByb3RvY29sIFBNTUxDRzJnZW4gPFBNTUxDR2dl biwgQ1JFQVRBQkxFPgoKCgoKQGVuZAoKQHByb3RvY29sIFBNTUxDRzNnZW4gPFBNTUxDR2dlbiwg Q1JFQVRBQkxFPgoKCgoKQGVuZAoKQHByb3RvY29sIFBNTUxDRzRnZW4gPFBNTUxDR2dlbiwgQ1JF QVRBQkxFPgoKCgoKCkBlbmQKCkBwcm90b2NvbCBQTU1MQ0c1Z2VuIDxQTU1MQ0dnZW4sIENSRUFU QUJMRT4KCgoKCgpAZW5kCgpAcHJvdG9jb2wgUE1NTENHNmdlbiA8UE1NTENHZ2VuLCBDUkVBVEFC TEU+CgoKCgoKQGVuZAoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAg bWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgIDk2CgoKCkBwcm90b2NvbCBQTU1MQ0c3 Z2VuIDxQTU1MQ0dnZW4sIENSRUFUQUJMRT4KCgoKCgpAZW5kCgpAcHJvdG9jb2wgUE1NTENHOGdl biA8UE1NTENHZ2VuLCBDUkVBVEFCTEU+CgoKCgoKQGVuZAoKQHByb3RvY29sIFBNTUxDRzlnZW4g PFBNTUxDR2dlbiwgQ1JFQVRBQkxFPgoKCgoKCkBlbmQKCgoKQHByb3RvY29sIEFDR2dlbiA8U2lt cGxlUmFuZG9tR2VuZXJhdG9yLCBDUkVBVEFCTEU+CiMgMzkxICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvcmFuZG9tL2dlbmVyYXRvcnMuaCIKQGVuZAoKQHByb3RvY29sIFNDR2dlbiA8U2ltcGxl UmFuZG9tR2VuZXJhdG9yLCBDUkVBVEFCTEU+CiMgNDA0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1 ZGUvcmFuZG9tL2dlbmVyYXRvcnMuaCIKQGVuZAoKCgpAcHJvdG9jb2wgU1dCZ2VuIDxTaW1wbGVS YW5kb21HZW5lcmF0b3I+CgoKCgoKCgpAZW5kCgpAcHJvdG9jb2wgU1dCMWdlbiA8U1dCZ2VuLCBD UkVBVEFCTEU+CgoKCgpAZW5kCgpAcHJvdG9jb2wgU1dCMmdlbiA8U1dCZ2VuLCBDUkVBVEFCTEU+ CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAg ICAgICAgICAgICAgICAgUGFnZSAgIDk3CgoKCgoKQGVuZAoKQHByb3RvY29sIFNXQjNnZW4gPFNX QmdlbiwgQ1JFQVRBQkxFPgoKCgoKQGVuZAoKCkBwcm90b2NvbCBQU1dCZ2VuIDxTaW1wbGVSYW5k b21HZW5lcmF0b3IsIENSRUFUQUJMRT4KCgoKCkBlbmQKCgoKQHByb3RvY29sIE1XQ0FnZW4gPFNp bXBsZVJhbmRvbUdlbmVyYXRvciwgQ1JFQVRBQkxFPgoKCgoKQGVuZAoKQHByb3RvY29sIE1XQ0Jn ZW4gPFNpbXBsZVJhbmRvbUdlbmVyYXRvciwgQ1JFQVRBQkxFPgoKCgoKCkBlbmQKCgpAcHJvdG9j b2wgUldDMmdlbiA8U2ltcGxlUmFuZG9tR2VuZXJhdG9yLCBDUkVBVEFCTEU+CgoKCkBlbmQKCgpA cHJvdG9jb2wgUldDOGdlbiA8U2ltcGxlUmFuZG9tR2VuZXJhdG9yLCBDUkVBVEFCTEU+CgoKCgpA ZW5kCgoKQHByb3RvY29sIFRHRlNSZ2VuIDxTaW1wbGVSYW5kb21HZW5lcmF0b3I+CgoKCgoKCgoK CjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAg ICAgICAgIFBhZ2UgICA5OAoKCgoKQGVuZAoKQHByb3RvY29sIFRUNDAzZ2VuIDxUR0ZTUmdlbiwg Q1JFQVRBQkxFPgoKCgpAZW5kCgpAcHJvdG9jb2wgVFQ3NzVnZW4gPFRHRlNSZ2VuLCBDUkVBVEFC TEU+CgoKCkBlbmQKCkBwcm90b2NvbCBUVDgwMGdlbiA8VEdGU1JnZW4sIENSRUFUQUJMRT4KCgoK QGVuZAoKCkBwcm90b2NvbCBNVDE5OTM3Z2VuIDxTaW1wbGVSYW5kb21HZW5lcmF0b3IsIENSRUFU QUJMRT4KCgoKQGVuZAoKCkBwcm90b2NvbCBNUkdnZW4gPFNpbXBsZVJhbmRvbUdlbmVyYXRvcj4K CgoKCgoKCkBlbmQKCkBwcm90b2NvbCBNUkc1Z2VuIDxNUkdnZW4sIENSRUFUQUJMRT4KCgoKCkBl bmQKCkBwcm90b2NvbCBNUkc2Z2VuIDxNUkdnZW4sIENSRUFUQUJMRT4KCgoKCkBlbmQKCkBwcm90 b2NvbCBNUkc3Z2VuIDxNUkdnZW4sIENSRUFUQUJMRT4KCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAgOTkK CgoKCgpAZW5kCgoKQHByb3RvY29sIEMyVEFVU2dlbiA8U2ltcGxlUmFuZG9tR2VuZXJhdG9yPgoK CgoKQGVuZAoKQHByb3RvY29sIEMyVEFVUzFnZW4gPEMyVEFVU2dlbiwgQ1JFQVRBQkxFPgoKCgoK CgpAZW5kCgpAcHJvdG9jb2wgQzJUQVVTMmdlbiA8QzJUQVVTZ2VuLCBDUkVBVEFCTEU+CgoKCgoK CkBlbmQKCkBwcm90b2NvbCBDMlRBVVMzZ2VuIDxDMlRBVVNnZW4sIENSRUFUQUJMRT4KCgoKCgoK QGVuZAoKCkBwcm90b2NvbCBDMk1SRzNnZW4gPFNpbXBsZVJhbmRvbUdlbmVyYXRvciwgQ1JFQVRB QkxFPgoKCgoKCgoKQGVuZAoKCkBwcm90b2NvbCBDM01XQ2dlbiA8U2ltcGxlUmFuZG9tR2VuZXJh dG9yLCBDUkVBVEFCTEU+CgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAg ICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAxMDAKCgoKQGVuZAojIDYxNCAi L3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3JhbmRvbS9nZW5lcmF0b3JzLmgiCkBwcm90b2NvbCBD MkxDR1hnZW4gPFNwbGl0UmFuZG9tR2VuZXJhdG9yLCBDUkVBVEFCTEU+CiMgNjI0ICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvcmFuZG9tL2dlbmVyYXRvcnMuaCIKQGVuZAoKCkBwcm90b2NvbCBD NExDR1hnZW4gPFNwbGl0UmFuZG9tR2VuZXJhdG9yLCBDUkVBVEFCTEU+CgoKCgoKQGVuZAojIDY1 MiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3JhbmRvbS9nZW5lcmF0b3JzLmgiCkBjbGFzcyBM Q0cxZ2VuOwpAY2xhc3MgTENHMmdlbjsKQGNsYXNzIExDRzNnZW47CkBjbGFzcyBQTU1MQ0cxZ2Vu OwpAY2xhc3MgUE1NTENHMmdlbjsKQGNsYXNzIFBNTUxDRzNnZW47CkBjbGFzcyBQTU1MQ0c0Z2Vu OwpAY2xhc3MgUE1NTENHNWdlbjsKQGNsYXNzIFBNTUxDRzZnZW47CkBjbGFzcyBQTU1MQ0c3Z2Vu OwpAY2xhc3MgUE1NTENHOGdlbjsKQGNsYXNzIFBNTUxDRzlnZW47CgoKCkBjbGFzcyBBQ0dnZW47 CkBjbGFzcyBTQ0dnZW47CkBjbGFzcyBTV0IxZ2VuOwpAY2xhc3MgU1dCMmdlbjsKQGNsYXNzIFNX QjNnZW47CkBjbGFzcyBQU1dCZ2VuOwpAY2xhc3MgVFQ0MDNnZW47CkBjbGFzcyBUVDc3NWdlbjsK QGNsYXNzIFRUODAwZ2VuOwpAY2xhc3MgTVQxOTkzN2dlbjsKQGNsYXNzIE1SRzVnZW47CkBjbGFz cyBNUkc2Z2VuOwpAY2xhc3MgTVJHN2dlbjsKQGNsYXNzIE1XQ0FnZW47CkBjbGFzcyBNV0NCZ2Vu OwpAY2xhc3MgUldDMmdlbjsKQGNsYXNzIFJXQzhnZW47CgoKCkBjbGFzcyBDMlRBVVMxZ2VuOwpA Y2xhc3MgQzJUQVVTMmdlbjsKQGNsYXNzIEMyVEFVUzNnZW47CgoKCgoKCgoKCjIwMDEtMDgtMjQg MDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2Ug IDEwMQoKCgpAY2xhc3MgQzJNUkczZ2VuOwpAY2xhc3MgQzNNV0NnZW47CiMgNzA4ICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvcmFuZG9tL2dlbmVyYXRvcnMuaCIKQGNsYXNzIEMyTENHWGdlbjsK QGNsYXNzIEM0TENHWGdlbjsKIyA0OSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3JhbmRvbS5o IiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3JhbmRvbS9kaXN0cmlidXRpb25zLmgi IDEKIyAyNSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3JhbmRvbS9kaXN0cmlidXRpb25zLmgi CkBwcm90b2NvbCBQcm9iYWJpbGl0eURpc3RyaWJ1dGlvbiA8U3dhcm1PYmplY3QsIEludGVybmFs U3RhdGU+CgoKCgoKCi0gX0lfQ3JlYXRpbmc7CgoKKyBjcmVhdGVXaXRoRGVmYXVsdHM6IChpZCA8 Wm9uZT4pYVpvbmU7CgoKKyBjcmVhdGUgOiAoaWQgPFpvbmU+KWFab25lCiAgc2V0R2VuZXJhdG9y OiAoaWQgPFNpbXBsZVJhbmRvbUdlbmVyYXRvcj4pc2ltcGxlR2VuZXJhdG9yOwoKCisgY3JlYXRl IDogKGlkIDxab25lPilhWm9uZQogICAgICAgICBzZXRHZW5lcmF0b3I6IChpZCA8U3BsaXRSYW5k b21HZW5lcmF0b3I+KXNwbGl0R2VuZXJhdG9yCiAgc2V0VmlydHVhbEdlbmVyYXRvcjogKHVuc2ln bmVkKSB2R2VuOwoKLSBfSV9TZXR0aW5nOwoKLSBzZXRHZW5lcmF0b3I6IChpZCA8U2ltcGxlUmFu ZG9tR2VuZXJhdG9yPilzaW1wbGVHZW5lcmF0b3I7CgoKLSBzZXRHZW5lcmF0b3IgOiAoaWQgPFNw bGl0UmFuZG9tR2VuZXJhdG9yPilzcGxpdEdlbmVyYXRvcgogIHNldFZpcnR1YWxHZW5lcmF0b3I6 ICh1bnNpZ25lZCl2R2VuOwoKCi0gcmVzZXQ7CgotIF9JX1VzaW5nOwoKLSAoaWQgPEJhc2ljUmFu ZG9tR2VuZXJhdG9yPikgZ2V0R2VuZXJhdG9yOwoKCi0gKHVuc2lnbmVkKWdldFZpcnR1YWxHZW5l cmF0b3I7CgoKLSAoQk9PTClnZXRPcHRpb25zSW5pdGlhbGl6ZWQ7CgoKLSAodW5zaWduZWQgbG9u ZyBsb25nIGludClnZXRDdXJyZW50Q291bnQ7CkBlbmQKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToy MSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgMTAy CgoKCgoKQHByb3RvY29sIEJvb2xlYW5EaXN0cmlidXRpb24gPFByb2JhYmlsaXR5RGlzdHJpYnV0 aW9uPgoKCgoKLSBfSV9Vc2luZzsKCi0gKEJPT0wpZ2V0Qm9vbGVhblNhbXBsZTsKLSAoaW50KWdl dEludGVnZXJTYW1wbGU7CkBlbmQKCkBwcm90b2NvbCBJbnRlZ2VyRGlzdHJpYnV0aW9uIDxQcm9i YWJpbGl0eURpc3RyaWJ1dGlvbj4KCgoKCi0gX0lfVXNpbmc7CgotIChpbnQpZ2V0SW50ZWdlclNh bXBsZTsKQGVuZAoKQHByb3RvY29sIFVuc2lnbmVkRGlzdHJpYnV0aW9uIDxQcm9iYWJpbGl0eURp c3RyaWJ1dGlvbj4KCgoKCgotIF9JX1VzaW5nOwoKLSAodW5zaWduZWQpZ2V0VW5zaWduZWRTYW1w bGU7CkBlbmQKCkBwcm90b2NvbCBEb3VibGVEaXN0cmlidXRpb24gPFByb2JhYmlsaXR5RGlzdHJp YnV0aW9uPgoKCgoKCi0gX0lfVXNpbmc7CgoKLSAoZG91YmxlKWdldERvdWJsZVNhbXBsZTsKQGVu ZAoKCgoKCgpAcHJvdG9jb2wgUmFuZG9tQml0RGlzdCA8Qm9vbGVhbkRpc3RyaWJ1dGlvbiwgQ1JF QVRBQkxFPgoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFp bi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgMTAzCgoKCgotIF9JX1VzaW5nOwoKLSAoQk9P TClnZXRDb2luVG9zczsKQGVuZAoKQHByb3RvY29sIEJlcm5vdWxsaURpc3QgPEJvb2xlYW5EaXN0 cmlidXRpb24sIENSRUFUQUJMRT4KCgoKLSBfSV9DcmVhdGluZzsKCisgY3JlYXRlIDogKGlkIDxa b25lPilhWm9uZQogICAgc2V0R2VuZXJhdG9yOiAoaWQgPFNpbXBsZVJhbmRvbUdlbmVyYXRvcj4p c2ltcGxlR2VuZXJhdG9yCiAgc2V0UHJvYmFiaWxpdHk6IChkb3VibGUpcDsKCgorIGNyZWF0ZSA6 IChpZCA8Wm9uZT4pYVpvbmUKICAgICAgICAgc2V0R2VuZXJhdG9yOiAoaWQgPFNwbGl0UmFuZG9t R2VuZXJhdG9yPilzcGxpdEdlbmVyYXRvcgogIHNldFZpcnR1YWxHZW5lcmF0b3I6ICh1bnNpZ25l ZCl2R2VuCiAgICAgICBzZXRQcm9iYWJpbGl0eTogKGRvdWJsZSlwOwoKLSBfSV9TZXR0aW5nOwoK LSBzZXRQcm9iYWJpbGl0eTogKGRvdWJsZSlwOwoKLSBfSV9Vc2luZzsKCi0gKGRvdWJsZSlnZXRQ cm9iYWJpbGl0eTsKCgotIChCT09MKWdldFNhbXBsZVdpdGhQcm9iYWJpbGl0eTogKGRvdWJsZSlw OwpAZW5kCgoKQHByb3RvY29sIFVuaWZvcm1JbnRlZ2VyRGlzdCA8SW50ZWdlckRpc3RyaWJ1dGlv biwgQ1JFQVRBQkxFPgoKCgoKCi0gX0lfQ3JlYXRpbmc7CgorIGNyZWF0ZSA6IChpZCA8Wm9uZT4p YVpvbmUKICBzZXRHZW5lcmF0b3I6IChpZCA8U2ltcGxlUmFuZG9tR2VuZXJhdG9yPilzaW1wbGVH ZW5lcmF0b3IKIHNldEludGVnZXJNaW46IChpbnQpbWluVmFsdWUKICAgICAgICBzZXRNYXg6IChp bnQpbWF4VmFsdWU7CgoKKyBjcmVhdGUgOiAoaWQgPFpvbmU+KWFab25lCiAgICAgICBzZXRHZW5l cmF0b3I6IChpZCA8U3BsaXRSYW5kb21HZW5lcmF0b3I+KXNwbGl0R2VuZXJhdG9yCnNldFZpcnR1 YWxHZW5lcmF0b3I6ICh1bnNpZ25lZCkgdkdlbgogICAgICBzZXRJbnRlZ2VyTWluOiAoaW50KW1p blZhbHVlCiAgICAgICAgICAgICBzZXRNYXg6IChpbnQpbWF4VmFsdWU7CgoKCgoKCgoKMjAwMS0w OC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAg UGFnZSAgMTA0CgoKLSBfSV9TZXR0aW5nOwoKCi0gc2V0SW50ZWdlck1pbjogKGludCltaW5WYWx1 ZSBzZXRNYXg6IChpbnQpbWF4VmFsdWU7CgotIF9JX1VzaW5nOwoKLSAoaW50KWdldEludGVnZXJN aW47CgoKLSAoaW50KWdldEludGVnZXJNYXg7CgoKCi0gKGludClnZXRJbnRlZ2VyV2l0aE1pbjog KGludCltaW5WYWx1ZSB3aXRoTWF4OiAoaW50KW1heFZhbHVlOwpAZW5kCgpAcHJvdG9jb2wgVW5p Zm9ybVVuc2lnbmVkRGlzdCA8VW5zaWduZWREaXN0cmlidXRpb24sIENSRUFUQUJMRT4KCgoKCgot IF9JX0NyZWF0aW5nOwoKKyBjcmVhdGUgOiAoaWQgPFpvbmU+KWFab25lCiAgICBzZXRHZW5lcmF0 b3I6IChpZCA8U2ltcGxlUmFuZG9tR2VuZXJhdG9yPilzaW1wbGVHZW5lcmF0b3IKICBzZXRVbnNp Z25lZE1pbjogKHVuc2lnbmVkKW1pblZhbHVlCiAgICAgICAgICBzZXRNYXg6ICh1bnNpZ25lZClt YXhWYWx1ZTsKCgorIGNyZWF0ZSA6IChpZCA8Wm9uZT4pYVpvbmUKICAgICAgICAgc2V0R2VuZXJh dG9yOiAoaWQgPFNwbGl0UmFuZG9tR2VuZXJhdG9yPilzcGxpdEdlbmVyYXRvcgogIHNldFZpcnR1 YWxHZW5lcmF0b3I6ICh1bnNpZ25lZCl2R2VuCiAgICAgICBzZXRVbnNpZ25lZE1pbjogKHVuc2ln bmVkKW1pblZhbHVlCiAgICAgICAgICAgICAgIHNldE1heDogKHVuc2lnbmVkKW1heFZhbHVlOwoK LSBfSV9TZXR0aW5nOwoKCi0gc2V0VW5zaWduZWRNaW46ICh1bnNpZ25lZCltaW5WYWx1ZQogICAg ICAgICAgc2V0TWF4OiAodW5zaWduZWQpbWF4VmFsdWU7CgotIF9JX1VzaW5nOwoKLSAodW5zaWdu ZWQpZ2V0VW5zaWduZWRNaW47CgoKLSAodW5zaWduZWQpZ2V0VW5zaWduZWRNYXg7CgoKCi0gKHVu c2lnbmVkKWdldFVuc2lnbmVkV2l0aE1pbjogKHVuc2lnbmVkKW1pblZhbAogICAgICAgICAgICAg ICAgICAgICAgIHdpdGhNYXg6ICh1bnNpZ25lZCltYXhWYWw7CkBlbmQKCgoKCgoKCgoyMDAxLTA4 LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQ YWdlICAxMDUKCgpAcHJvdG9jb2wgVW5pZm9ybURvdWJsZURpc3QgPERvdWJsZURpc3RyaWJ1dGlv biwgQ1JFQVRBQkxFPgoKCgoKCgoKLSBfSV9DcmVhdGluZzsKCisgY3JlYXRlIDogKGlkIDxab25l PilhWm9uZQogICAgc2V0R2VuZXJhdG9yOiAoaWQgPFNpbXBsZVJhbmRvbUdlbmVyYXRvcj4pc2lt cGxlR2VuZXJhdG9yCiAgICBzZXREb3VibGVNaW46IChkb3VibGUpbWluVmFsdWUKICAgICAgICAg IHNldE1heDogKGRvdWJsZSltYXhWYWx1ZTsKCgorIGNyZWF0ZSA6IChpZCA8Wm9uZT4pYVpvbmUK ICAgICAgICAgc2V0R2VuZXJhdG9yOiAoaWQgPFNwbGl0UmFuZG9tR2VuZXJhdG9yPilzcGxpdEdl bmVyYXRvcgogIHNldFZpcnR1YWxHZW5lcmF0b3I6ICh1bnNpZ25lZCl2R2VuCiAgICAgICAgIHNl dERvdWJsZU1pbjogKGRvdWJsZSltaW5WYWx1ZQogICAgICAgICAgICAgICBzZXRNYXg6IChkb3Vi bGUpbWF4VmFsdWU7CgotIF9JX1NldHRpbmc7CgoKLSBzZXREb3VibGVNaW46IChkb3VibGUpbWlu VmFsdWUgc2V0TWF4OiAoZG91YmxlKW1heFZhbHVlOwoKLSBfSV9Vc2luZzsKCgotIChkb3VibGUp Z2V0RG91YmxlTWluOwoKCgotIChkb3VibGUpZ2V0RG91YmxlTWF4OwoKCgotIChkb3VibGUpZ2V0 RG91YmxlV2l0aE1pbjogKGRvdWJsZSltaW5WYWx1ZSB3aXRoTWF4OiAoZG91YmxlKW1heFZhbHVl OwpAZW5kCgpAcHJvdG9jb2wgTm9ybWFsIDxEb3VibGVEaXN0cmlidXRpb24+CgotIF9JX0NyZWF0 aW5nOwoKCisgY3JlYXRlIDogKGlkIDxab25lPilhWm9uZQogICAgc2V0R2VuZXJhdG9yOiAoaWQg PFNpbXBsZVJhbmRvbUdlbmVyYXRvcj4pc2ltcGxlR2VuZXJhdG9yCiAgICAgICAgIHNldE1lYW46 IChkb3VibGUpbWVhbgogICAgIHNldFZhcmlhbmNlOiAoZG91YmxlKXZhcmlhbmNlOwoKCgorIGNy ZWF0ZSA6IChpZCA8Wm9uZT4pYVpvbmUKICAgIHNldEdlbmVyYXRvcjogKGlkIDxTaW1wbGVSYW5k b21HZW5lcmF0b3I+KXNpbXBsZUdlbmVyYXRvcgogICAgICAgICBzZXRNZWFuOiAoZG91YmxlKW1l YW4KCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAg ICAgICAgICAgICAgICAgIFBhZ2UgIDEwNgoKCiAgICAgICBzZXRTdGREZXY6IChkb3VibGUpc2Rl djsKCgoKKyBjcmVhdGUgOiAoaWQgPFpvbmU+KWFab25lCiAgICAgICAgIHNldEdlbmVyYXRvcjog KGlkIDxTcGxpdFJhbmRvbUdlbmVyYXRvcj4pc3BsaXRHZW5lcmF0b3IKICBzZXRWaXJ0dWFsR2Vu ZXJhdG9yOiAodW5zaWduZWQpdkdlbgogICAgICAgICAgICAgIHNldE1lYW46IChkb3VibGUpbWVh bgogICAgICAgICAgc2V0VmFyaWFuY2U6IChkb3VibGUpdmFyaWFuY2U7CgoKCisgY3JlYXRlIDog KGlkIDxab25lPilhWm9uZQogICAgICAgICBzZXRHZW5lcmF0b3I6IChpZCA8U3BsaXRSYW5kb21H ZW5lcmF0b3I+KXNwbGl0R2VuZXJhdG9yCiAgc2V0VmlydHVhbEdlbmVyYXRvcjogKHVuc2lnbmVk KXZHZW4KICAgICAgICAgICAgICBzZXRNZWFuOiAoZG91YmxlKW1lYW4KICAgICAgICAgICAgc2V0 U3RkRGV2OiAoZG91YmxlKXNkZXY7CgotIF9JX1NldHRpbmc7CgoKLSBzZXRNZWFuOiAoZG91Ymxl KW1lYW4gc2V0VmFyaWFuY2U6IChkb3VibGUpdmFyaWFuY2U7CgoKCi0gc2V0TWVhbjogKGRvdWJs ZSltZWFuIHNldFN0ZERldjogKGRvdWJsZSlzZGV2OwoKLSBfSV9Vc2luZzsKCi0gKGRvdWJsZSln ZXRNZWFuOwoKCi0gKGRvdWJsZSlnZXRWYXJpYW5jZTsKCgotIChkb3VibGUpZ2V0U3RkRGV2OwoK CgotIChkb3VibGUpZ2V0U2FtcGxlV2l0aE1lYW46IChkb3VibGUpbWVhbgogICAgICAgICAgICAg ICB3aXRoVmFyaWFuY2U6IChkb3VibGUpdmFyaWFuY2U7CgoKCi0gKGRvdWJsZSlnZXRTYW1wbGVX aXRoTWVhbjogKGRvdWJsZSltZWFuCiAgICAgICAgICAgICAgICAgd2l0aFN0ZERldjogKGRvdWJs ZSlzZGV2OwpAZW5kCgpAcHJvdG9jb2wgTm9ybWFsRGlzdCA8Tm9ybWFsLCBDUkVBVEFCTEU+CgoK CkBlbmQKCkBwcm90b2NvbCBMb2dOb3JtYWxEaXN0IDxOb3JtYWwsIENSRUFUQUJMRT4KCgoKCgoK CgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAg ICAgICAgICBQYWdlICAxMDcKCgoKCkBlbmQKCkBwcm90b2NvbCBFeHBvbmVudGlhbERpc3QgPERv dWJsZURpc3RyaWJ1dGlvbiwgQ1JFQVRBQkxFPgoKCgotIF9JX0NyZWF0aW5nOwoKKyBjcmVhdGUg OiAoaWQgPFpvbmU+KWFab25lCiAgc2V0R2VuZXJhdG9yOiAoaWQgPFNpbXBsZVJhbmRvbUdlbmVy YXRvcj4pc2ltcGxlR2VuZXJhdG9yCiAgICAgICBzZXRNZWFuOiAoZG91YmxlKW1lYW47CgoKKyBj cmVhdGUgOiAoaWQgPFpvbmU+KWFab25lCiAgICAgICAgIHNldEdlbmVyYXRvcjogKGlkIDxTcGxp dFJhbmRvbUdlbmVyYXRvcj4pc3BsaXRHZW5lcmF0b3IKICBzZXRWaXJ0dWFsR2VuZXJhdG9yOiAo dW5zaWduZWQpdkdlbgogICAgICAgICAgICAgIHNldE1lYW46IChkb3VibGUpbWVhbjsKCgotIF9J X1NldHRpbmc7CgotIHNldE1lYW46IChkb3VibGUpbWVhbjsKCi0gX0lfVXNpbmc7CgotIChkb3Vi bGUpZ2V0TWVhbjsKCgoKLSAoZG91YmxlKWdldFNhbXBsZVdpdGhNZWFuOiAoZG91YmxlKW1lYW47 CkBlbmQKCkBwcm90b2NvbCBHYW1tYURpc3QgPERvdWJsZURpc3RyaWJ1dGlvbiwgQ1JFQVRBQkxF PgoKCgotIF9JX0NyZWF0aW5nOwoKKyBjcmVhdGUgOiAoaWQgPFpvbmU+KWFab25lCiBzZXRHZW5l cmF0b3I6IChpZCA8U2ltcGxlUmFuZG9tR2VuZXJhdG9yPilzaW1wbGVHZW5lcmF0b3IKICAgICBz ZXRBbHBoYTogKGRvdWJsZSlhbHBoYQogICAgICBzZXRCZXRhOiAoZG91YmxlKWJldGE7CgoKKyBj cmVhdGUgOiAoaWQgPFpvbmU+KWFab25lCiAgICAgICAgIHNldEdlbmVyYXRvcjogKGlkIDxTcGxp dFJhbmRvbUdlbmVyYXRvcj4pc3BsaXRHZW5lcmF0b3IKICBzZXRWaXJ0dWFsR2VuZXJhdG9yOiAo dW5zaWduZWQpdkdlbgogICAgICAgICAgICAgc2V0QWxwaGE6IChkb3VibGUpYWxwaGEKICAgICAg ICAgICAgICBzZXRCZXRhOiAoZG91YmxlKWJldGE7CgotIF9JX1NldHRpbmc7CgoKLSBzZXRBbHBo YTogKGRvdWJsZSlhbHBoYSBzZXRCZXRhOiAoZG91YmxlKWJldGE7CgoKCgoKCgoyMDAxLTA4LTI0 IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdl ICAxMDgKCgoKLSBfSV9Vc2luZzsKCi0gKGRvdWJsZSlnZXRBbHBoYTsKCgotIChkb3VibGUpZ2V0 QmV0YTsKCgoKLSAoZG91YmxlKWdldFNhbXBsZVdpdGhBbHBoYTogKGRvdWJsZSlhbHBoYQogICAg ICAgICAgICAgICAgICAgIHdpdGhCZXRhOiAoZG91YmxlKWJldGE7CkBlbmQKCkBwcm90b2NvbCBQ b2lzc29uRGlzdCA8VW5zaWduZWREaXN0cmlidXRpb24sIENSRUFUQUJMRT4KCgoKCi0gX0lfQ3Jl YXRpbmc7CgorIGNyZWF0ZSA6IChpZCA8Wm9uZT4pYVpvbmUKIHNldEdlbmVyYXRvcjogKGlkIDxT aW1wbGVSYW5kb21HZW5lcmF0b3I+KWdlbmVyYXRvcjsKCgoKKyBjcmVhdGUgOiAoaWQgPFpvbmU+ KWFab25lCiBzZXRHZW5lcmF0b3I6IChpZCA8U2ltcGxlUmFuZG9tR2VuZXJhdG9yPilnZW5lcmF0 b3IKIHNldE9jY3VyUmF0ZTogKGRvdWJsZSkgYW5PY2N1clJhdGUKICBzZXRJbnRlcnZhbDogKGRv dWJsZSkgYW5JbnRlcnZhbDsKCgoKKyBjcmVhdGUgOiAoaWQgPFpvbmU+KWFab25lCiAgICAgICAg IHNldEdlbmVyYXRvcjogKGlkIDxTcGxpdFJhbmRvbUdlbmVyYXRvcj4pZ2VuZXJhdG9yCiAgc2V0 VmlydHVhbEdlbmVyYXRvcjogKHVuc2lnbmVkKXZHZW47CgoKCisgY3JlYXRlIDogKGlkIDxab25l PilhWm9uZQogICAgICAgICBzZXRHZW5lcmF0b3I6IChpZCA8U3BsaXRSYW5kb21HZW5lcmF0b3I+ KWdlbmVyYXRvcgogIHNldFZpcnR1YWxHZW5lcmF0b3I6ICh1bnNpZ25lZCl2R2VuCiAgICAgICAg IHNldE9jY3VyUmF0ZTogKGRvdWJsZSkgYW5PY2N1clJhdGUKICAgICAgICAgIHNldEludGVydmFs OiAoZG91YmxlKSBhbkludGVydmFsOwoKLSBfSV9TZXR0aW5nOwoKCgotIHNldEludGVydmFsOiAo ZG91YmxlKSBhbkludGVydmFsOwoKCgotIHNldE9jY3VyUmF0ZTogKGRvdWJsZSkgYW5PY2N1clJh dGU7CgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkg ICAgICAgICAgICAgICAgICAgIFBhZ2UgIDEwOQoKCgotIHNldE9jY3VyUmF0ZTogKGRvdWJsZSkg YW5PY2N1clJhdGUKICAgc2V0SW50ZXJ2YWw6IChkb3VibGUpIGFuSW50ZXJ2YWw7CgotIF9JX1Vz aW5nOwoKCi0gKGRvdWJsZSkgZ2V0T2NjdXJSYXRlOwoKCi0gKGRvdWJsZSkgZ2V0SW50ZXJ2YWw7 CgoKCgotICh1bnNpZ25lZCkgZ2V0VW5zaWduZWRTYW1wbGU7CgoKCgotICh1bnNpZ25lZCkgZ2V0 VW5zaWduZWRTYW1wbGVXaXRoSW50ZXJ2YWw6IChkb3VibGUpIGFuSW50ZXJ2YWw7CgoKCgoKLSAo dW5zaWduZWQpIGdldFVuc2lnbmVkU2FtcGxlV2l0aE9jY3VyUmF0ZTogKGRvdWJsZSkgYW5PY2N1 clJhdGUKICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhJbnRlcnZhbDogKGRvdWJsZSkgYW5J bnRlcnZhbDsKCkBlbmQKCgoKCgpAY2xhc3MgUmFuZG9tQml0RGlzdDsKQGNsYXNzIEJlcm5vdWxs aURpc3Q7CgoKQGNsYXNzIFVuaWZvcm1JbnRlZ2VyRGlzdDsKCgpAY2xhc3MgVW5pZm9ybVVuc2ln bmVkRGlzdDsKCgpAY2xhc3MgVW5pZm9ybURvdWJsZURpc3Q7CkBjbGFzcyBOb3JtYWxEaXN0OwpA Y2xhc3MgTG9nTm9ybWFsRGlzdDsKQGNsYXNzIEV4cG9uZW50aWFsRGlzdDsKQGNsYXNzIEdhbW1h RGlzdDsKQGNsYXNzIFBvaXNzb25EaXN0OwojIDUwICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv cmFuZG9tLmgiIDIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvcmFuZG9tL3JhbmRvbXZh cnMuaCIgMQojIDIyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvcmFuZG9tL3JhbmRvbXZhcnMu aCIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZXh0ZXJudmFyLmgiIDEKIyAyMyAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL3JhbmRvbS9yYW5kb212YXJzLmgiIDIKCgoKCgoKCjIwMDEt MDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAg IFBhZ2UgIDExMAoKCgoKCmV4dGVybiBpZCA8TVQxOTkzN2dlbj4gcmFuZG9tR2VuZXJhdG9yOwoK CmV4dGVybiBpZCA8VW5pZm9ybUludGVnZXJEaXN0PiB1bmlmb3JtSW50UmFuZDsKZXh0ZXJuIGlk IDxVbmlmb3JtVW5zaWduZWREaXN0PiB1bmlmb3JtVW5zUmFuZDsKZXh0ZXJuIGlkIDxVbmlmb3Jt RG91YmxlRGlzdD4gdW5pZm9ybURibFJhbmQ7CgoKCgpleHRlcm4gQk9PTCBfdXNlRml4ZWRTZWVk OwpleHRlcm4gdW5zaWduZWQgaW50IF9maXJzdFNlZWQ7CgoKCgoKCgpleHRlcm4gdm9pZCBpbml0 UmFuZG9tIChpZCBhcmd1bWVudHMpOwpleHRlcm4gdW5zaWduZWQgaW50IHRlbXB1c0Z1Z2l0ICh2 b2lkKTsKZXh0ZXJuIHVuc2lnbmVkIGludCBuZXh0U2VlZCAodm9pZCk7CiMgNTEgIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9yYW5kb20uaCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9yYW5kb20vcmFuZG9tZGVmcy5oIiAxCiMgMjggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9y YW5kb20vcmFuZG9tZGVmcy5oIgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9taXNjLmgi IDEKIyA5ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvbWlzYy5oIgojIDEgIi91c3IvbG9jYWwv c3dhcm0vaW5jbHVkZS9zd2FybWNvbmZpZy5oIiAxCiMgMTAgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9taXNjLmgiIDIKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDEyICIvdXNyL2xvY2FsL3N3 YXJtL2luY2x1ZGUvbWlzYy5oIiAyCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMTYgIi91c3Iv bG9jYWwvc3dhcm0vaW5jbHVkZS9taXNjLmgiIDIKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgMTEw ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5j bHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7CiMgMTcgIi91 c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9taXNjLmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5n LmgiIDEgMwojIDE4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvbWlzYy5oIiAyCgojIDEgIi91 c3IvaW5jbHVkZS91bmlzdGQuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3VuaXN0 ZC5oIiAyIDMKIyAxNzUgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL3Bvc2l4X29wdC5oIiAxIDMKIyAxNzYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAz CgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAg ICAgICAgICAgICAgICAgIFBhZ2UgIDExMQoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vudmly b25tZW50cy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvZW52aXJvbm1lbnRzLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRl L2JpdHMvZW52aXJvbm1lbnRzLmgiIDIgMwojIDE4MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAy IDMKIyAxOTAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz L3R5cGVzLmgiIDEgMwojIDE5MSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgp0eXBlZGVm IF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDIwMCAiL3Vz ci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0 eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwoKCgoKCgp0 eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwoKCgoKdHlwZWRlZiBfX3VzZWNvbmRzX3QgdXNlY29u ZHNfdDsKCgoKCnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6 MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDEx MgoKCgoKCnR5cGVkZWYgX19pbnRwdHJfdCBpbnRwdHJfdDsKCgoKCgoKdHlwZWRlZiBfX3NvY2ts ZW5fdCBzb2NrbGVuX3Q7CiMgMjYwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGlu dCBhY2Nlc3MgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBlKSA7CgoKCgpleHRlcm4g aW50IGV1aWRhY2Nlc3MgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBlKSA7CiMgMjkw ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9fb2ZmX3QgbHNlZWsgKGludCBfX2Zk LCBfX29mZl90IF9fb2Zmc2V0LCBpbnQgX193aGVuY2UpIDsKIyAzMDIgIi91c3IvaW5jbHVkZS91 bmlzdGQuaCIgMwpleHRlcm4gX19vZmY2NF90IGxzZWVrNjQgKGludCBfX2ZkLCBfX29mZjY0X3Qg X19vZmZzZXQsIGludCBfX3doZW5jZSkgOwoKCgpleHRlcm4gaW50IGNsb3NlIChpbnQgX19mZCkg OwoKCgpleHRlcm4gc3NpemVfdCByZWFkIChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBf X25ieXRlcykgOwoKCmV4dGVybiBzc2l6ZV90IHdyaXRlIChpbnQgX19mZCwgX19jb25zdCB2b2lk ICpfX2J1Ziwgc2l6ZV90IF9fbikgOwoKCgpleHRlcm4gc3NpemVfdCBwcmVhZCAoaW50IF9fZmQs IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsIF9fb2ZmX3QgX19vZmZzZXQpCiAgICAgICAg ICAgIDsKZXh0ZXJuIHNzaXplX3QgcHdyaXRlIChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1 Ziwgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICBfX29mZl90IF9fb2Zmc2V0KSA7 CiMgMzQwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIHNzaXplX3QgcHJlYWQ2NCAo aW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsCiAgICAgICAgICAgICAgICAg ICAgICAgIF9fb2ZmNjRfdCBfX29mZnNldCkgOwoKCmV4dGVybiBzc2l6ZV90IHB3cml0ZTY0IChp bnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAg ICAgICAgICAgIF9fb2ZmNjRfdCBfX29mZnNldCkgOwoKCgoKCgoKZXh0ZXJuIGludCBwaXBlIChp bnQgX19waXBlZGVzWzJdKSA7CiMgMzYyICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKCgoKCgoK CjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAg ICAgICAgIFBhZ2UgIDExMwoKCmV4dGVybiB1bnNpZ25lZCBpbnQgYWxhcm0gKHVuc2lnbmVkIGlu dCBfX3NlY29uZHMpIDsKIyAzNzEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gdW5z aWduZWQgaW50IHNsZWVwICh1bnNpZ25lZCBpbnQgX19zZWNvbmRzKSA7CgoKCgoKCmV4dGVybiBf X3VzZWNvbmRzX3QgdWFsYXJtIChfX3VzZWNvbmRzX3QgX192YWx1ZSwgX191c2Vjb25kc190IF9f aW50ZXJ2YWwpCiAgICAgICAgICAgIDsKCgoKZXh0ZXJuIGludCB1c2xlZXAgKF9fdXNlY29uZHNf dCBfX3VzZWNvbmRzKSA7CgoKCgoKZXh0ZXJuIGludCBwYXVzZSAodm9pZCkgOwoKCgpleHRlcm4g aW50IGNob3duIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBfX2dpZF90 IF9fZ3JvdXApCiAgICAgICAgICAgIDsKCgoKZXh0ZXJuIGludCBmY2hvd24gKGludCBfX2ZkLCBf X3VpZF90IF9fb3duZXIsIF9fZ2lkX3QgX19ncm91cCkgOwoKCgoKZXh0ZXJuIGludCBsY2hvd24g KF9fY29uc3QgY2hhciAqX19maWxlLCBfX3VpZF90IF9fb3duZXIsIF9fZ2lkX3QgX19ncm91cCkK ICAgICAgICAgICAgOwoKCgoKZXh0ZXJuIGludCBjaGRpciAoX19jb25zdCBjaGFyICpfX3BhdGgp IDsKCgoKZXh0ZXJuIGludCBmY2hkaXIgKGludCBfX2ZkKSA7CiMgNDIzICIvdXNyL2luY2x1ZGUv dW5pc3RkLmgiIDMKZXh0ZXJuIGNoYXIgKmdldGN3ZCAoY2hhciAqX19idWYsIHNpemVfdCBfX3Np emUpIDsKCgoKCgpleHRlcm4gY2hhciAqZ2V0X2N1cnJlbnRfZGlyX25hbWUgKHZvaWQpIDsKCgoK CgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAg ICAgICAgICAgICAgIFBhZ2UgIDExNAoKCgoKCmV4dGVybiBjaGFyICpnZXR3ZCAoY2hhciAqX19i dWYpIDsKCgoKCmV4dGVybiBpbnQgZHVwIChpbnQgX19mZCkgOwoKCmV4dGVybiBpbnQgZHVwMiAo aW50IF9fZmQsIGludCBfX2ZkMikgOwoKCmV4dGVybiBjaGFyICoqX19lbnZpcm9uOwoKZXh0ZXJu IGNoYXIgKiplbnZpcm9uOwoKCgoKCmV4dGVybiBpbnQgZXhlY3ZlIChfX2NvbnN0IGNoYXIgKl9f cGF0aCwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSwKICAgICAgICAgICAgICAgICAgIGNoYXIgKl9f Y29uc3QgX19lbnZwW10pIDsKCgoKCmV4dGVybiBpbnQgZmV4ZWN2ZSAoaW50IF9fZmQsIGNoYXIg Kl9fY29uc3QgX19hcmd2W10sIGNoYXIgKl9fY29uc3QgX19lbnZwW10pCiAgICAgICAgICAgIDsK CgoKCmV4dGVybiBpbnQgZXhlY3YgKF9fY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpfX2NvbnN0 IF9fYXJndltdKSA7CgoKCmV4dGVybiBpbnQgZXhlY2xlIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwg X19jb25zdCBjaGFyICpfX2FyZywgLi4uKSA7CgoKCmV4dGVybiBpbnQgZXhlY2wgKF9fY29uc3Qg Y2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4pIDsKCgoKZXh0ZXJuIGludCBl eGVjdnAgKF9fY29uc3QgY2hhciAqX19maWxlLCBjaGFyICpfX2NvbnN0IF9fYXJndltdKSA7CgoK CgpleHRlcm4gaW50IGV4ZWNscCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fY29uc3QgY2hhciAq X19hcmcsIC4uLikgOwoKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAg ICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDExNQoKCmV4dGVybiBpbnQgbmlj ZSAoaW50IF9faW5jKSA7CgoKCgpleHRlcm4gdm9pZCBfZXhpdCAoaW50IF9fc3RhdHVzKSBfX2F0 dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9j b25mbmFtZS5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2JpdHMvY29uZm5hbWUuaCIgMwplbnVt CiAgewogICAgX1BDX0xJTktfTUFYLAoKICAgIF9QQ19NQVhfQ0FOT04sCgogICAgX1BDX01BWF9J TlBVVCwKCiAgICBfUENfTkFNRV9NQVgsCgogICAgX1BDX1BBVEhfTUFYLAoKICAgIF9QQ19QSVBF X0JVRiwKCiAgICBfUENfQ0hPV05fUkVTVFJJQ1RFRCwKCiAgICBfUENfTk9fVFJVTkMsCgogICAg X1BDX1ZESVNBQkxFLAoKICAgIF9QQ19TWU5DX0lPLAoKICAgIF9QQ19BU1lOQ19JTywKCiAgICBf UENfUFJJT19JTywKCiAgICBfUENfU09DS19NQVhCVUYsCgogICAgX1BDX0ZJTEVTSVpFQklUUywK CiAgICBfUENfUkVDX0lOQ1JfWEZFUl9TSVpFLAoKICAgIF9QQ19SRUNfTUFYX1hGRVJfU0laRSwK CiAgICBfUENfUkVDX01JTl9YRkVSX1NJWkUsCgogICAgX1BDX1JFQ19YRkVSX0FMSUdOCgogIH07 CgoKZW51bQogIHsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1h aW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDExNgoKCiAgICBfU0NfQVJHX01BWCwKCiAg ICBfU0NfQ0hJTERfTUFYLAoKICAgIF9TQ19DTEtfVENLLAoKICAgIF9TQ19OR1JPVVBTX01BWCwK CiAgICBfU0NfT1BFTl9NQVgsCgogICAgX1NDX1NUUkVBTV9NQVgsCgogICAgX1NDX1RaTkFNRV9N QVgsCgogICAgX1NDX0pPQl9DT05UUk9MLAoKICAgIF9TQ19TQVZFRF9JRFMsCgogICAgX1NDX1JF QUxUSU1FX1NJR05BTFMsCgogICAgX1NDX1BSSU9SSVRZX1NDSEVEVUxJTkcsCgogICAgX1NDX1RJ TUVSUywKCiAgICBfU0NfQVNZTkNIUk9OT1VTX0lPLAoKICAgIF9TQ19QUklPUklUSVpFRF9JTywK CiAgICBfU0NfU1lOQ0hST05JWkVEX0lPLAoKICAgIF9TQ19GU1lOQywKCiAgICBfU0NfTUFQUEVE X0ZJTEVTLAoKICAgIF9TQ19NRU1MT0NLLAoKICAgIF9TQ19NRU1MT0NLX1JBTkdFLAoKICAgIF9T Q19NRU1PUllfUFJPVEVDVElPTiwKCiAgICBfU0NfTUVTU0FHRV9QQVNTSU5HLAoKICAgIF9TQ19T RU1BUEhPUkVTLAoKICAgIF9TQ19TSEFSRURfTUVNT1JZX09CSkVDVFMsCgogICAgX1NDX0FJT19M SVNUSU9fTUFYLAoKICAgIF9TQ19BSU9fTUFYLAoKICAgIF9TQ19BSU9fUFJJT19ERUxUQV9NQVgs CgogICAgX1NDX0RFTEFZVElNRVJfTUFYLAoKICAgIF9TQ19NUV9PUEVOX01BWCwKCgoKCgoKCgoy MDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAg ICAgICBQYWdlICAxMTcKCgogICAgX1NDX01RX1BSSU9fTUFYLAoKICAgIF9TQ19WRVJTSU9OLAoK ICAgIF9TQ19QQUdFU0laRSwKCgogICAgX1NDX1JUU0lHX01BWCwKCiAgICBfU0NfU0VNX05TRU1T X01BWCwKCiAgICBfU0NfU0VNX1ZBTFVFX01BWCwKCiAgICBfU0NfU0lHUVVFVUVfTUFYLAoKICAg IF9TQ19USU1FUl9NQVgsCgoKCgogICAgX1NDX0JDX0JBU0VfTUFYLAoKICAgIF9TQ19CQ19ESU1f TUFYLAoKICAgIF9TQ19CQ19TQ0FMRV9NQVgsCgogICAgX1NDX0JDX1NUUklOR19NQVgsCgogICAg X1NDX0NPTExfV0VJR0hUU19NQVgsCgogICAgX1NDX0VRVUlWX0NMQVNTX01BWCwKCiAgICBfU0Nf RVhQUl9ORVNUX01BWCwKCiAgICBfU0NfTElORV9NQVgsCgogICAgX1NDX1JFX0RVUF9NQVgsCgog ICAgX1NDX0NIQVJDTEFTU19OQU1FX01BWCwKCgogICAgX1NDXzJfVkVSU0lPTiwKCiAgICBfU0Nf Ml9DX0JJTkQsCgogICAgX1NDXzJfQ19ERVYsCgogICAgX1NDXzJfRk9SVF9ERVYsCgogICAgX1ND XzJfRk9SVF9SVU4sCgogICAgX1NDXzJfU1dfREVWLAoKICAgIF9TQ18yX0xPQ0FMRURFRiwKCgoK CgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAg ICAgICAgICAgICAgUGFnZSAgMTE4CgoKICAgIF9TQ19QSUksCgogICAgX1NDX1BJSV9YVEksCgog ICAgX1NDX1BJSV9TT0NLRVQsCgogICAgX1NDX1BJSV9JTlRFUk5FVCwKCiAgICBfU0NfUElJX09T SSwKCiAgICBfU0NfUE9MTCwKCiAgICBfU0NfU0VMRUNULAoKICAgIF9TQ19VSU9fTUFYSU9WLAoK ICAgIF9TQ19JT1ZfTUFYID0gX1NDX1VJT19NQVhJT1YsCgogICAgX1NDX1BJSV9JTlRFUk5FVF9T VFJFQU0sCgogICAgX1NDX1BJSV9JTlRFUk5FVF9ER1JBTSwKCiAgICBfU0NfUElJX09TSV9DT1RT LAoKICAgIF9TQ19QSUlfT1NJX0NMVFMsCgogICAgX1NDX1BJSV9PU0lfTSwKCiAgICBfU0NfVF9J T1ZfTUFYLAoKCgogICAgX1NDX1RIUkVBRFMsCgogICAgX1NDX1RIUkVBRF9TQUZFX0ZVTkNUSU9O UywKCiAgICBfU0NfR0VUR1JfUl9TSVpFX01BWCwKCiAgICBfU0NfR0VUUFdfUl9TSVpFX01BWCwK CiAgICBfU0NfTE9HSU5fTkFNRV9NQVgsCgogICAgX1NDX1RUWV9OQU1FX01BWCwKCiAgICBfU0Nf VEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUywKCiAgICBfU0NfVEhSRUFEX0tFWVNfTUFYLAoK ICAgIF9TQ19USFJFQURfU1RBQ0tfTUlOLAoKICAgIF9TQ19USFJFQURfVEhSRUFEU19NQVgsCgog ICAgX1NDX1RIUkVBRF9BVFRSX1NUQUNLQUREUiwKCiAgICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tT SVpFLAoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkg ICAgICAgICAgICAgICAgICAgIFBhZ2UgIDExOQoKCiAgICBfU0NfVEhSRUFEX1BSSU9SSVRZX1ND SEVEVUxJTkcsCgogICAgX1NDX1RIUkVBRF9QUklPX0lOSEVSSVQsCgogICAgX1NDX1RIUkVBRF9Q UklPX1BST1RFQ1QsCgogICAgX1NDX1RIUkVBRF9QUk9DRVNTX1NIQVJFRCwKCgogICAgX1NDX05Q Uk9DRVNTT1JTX0NPTkYsCgogICAgX1NDX05QUk9DRVNTT1JTX09OTE4sCgogICAgX1NDX1BIWVNf UEFHRVMsCgogICAgX1NDX0FWUEhZU19QQUdFUywKCiAgICBfU0NfQVRFWElUX01BWCwKCiAgICBf U0NfUEFTU19NQVgsCgoKICAgIF9TQ19YT1BFTl9WRVJTSU9OLAoKICAgIF9TQ19YT1BFTl9YQ1Vf VkVSU0lPTiwKCiAgICBfU0NfWE9QRU5fVU5JWCwKCiAgICBfU0NfWE9QRU5fQ1JZUFQsCgogICAg X1NDX1hPUEVOX0VOSF9JMThOLAoKICAgIF9TQ19YT1BFTl9TSE0sCgoKICAgIF9TQ18yX0NIQVJf VEVSTSwKCiAgICBfU0NfMl9DX1ZFUlNJT04sCgogICAgX1NDXzJfVVBFLAoKCiAgICBfU0NfWE9Q RU5fWFBHMiwKCiAgICBfU0NfWE9QRU5fWFBHMywKCiAgICBfU0NfWE9QRU5fWFBHNCwKCgogICAg X1NDX0NIQVJfQklULAoKICAgIF9TQ19DSEFSX01BWCwKCiAgICBfU0NfQ0hBUl9NSU4sCgogICAg X1NDX0lOVF9NQVgsCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBt YWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAxMjAKCgoKICAgIF9TQ19JTlRfTUlOLAoK ICAgIF9TQ19MT05HX0JJVCwKCiAgICBfU0NfV09SRF9CSVQsCgogICAgX1NDX01CX0xFTl9NQVgs CgogICAgX1NDX05aRVJPLAoKICAgIF9TQ19TU0laRV9NQVgsCgogICAgX1NDX1NDSEFSX01BWCwK CiAgICBfU0NfU0NIQVJfTUlOLAoKICAgIF9TQ19TSFJUX01BWCwKCiAgICBfU0NfU0hSVF9NSU4s CgogICAgX1NDX1VDSEFSX01BWCwKCiAgICBfU0NfVUlOVF9NQVgsCgogICAgX1NDX1VMT05HX01B WCwKCiAgICBfU0NfVVNIUlRfTUFYLAoKCiAgICBfU0NfTkxfQVJHTUFYLAoKICAgIF9TQ19OTF9M QU5HTUFYLAoKICAgIF9TQ19OTF9NU0dNQVgsCgogICAgX1NDX05MX05NQVgsCgogICAgX1NDX05M X1NFVE1BWCwKCiAgICBfU0NfTkxfVEVYVE1BWCwKCgogICAgX1NDX1hCUzVfSUxQMzJfT0ZGMzIs CgogICAgX1NDX1hCUzVfSUxQMzJfT0ZGQklHLAoKICAgIF9TQ19YQlM1X0xQNjRfT0ZGNjQsCgog ICAgX1NDX1hCUzVfTFBCSUdfT0ZGQklHLAoKCiAgICBfU0NfWE9QRU5fTEVHQUNZLAoKICAgIF9T Q19YT1BFTl9SRUFMVElNRSwKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAg ICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAxMjEKCgogICAgX1NDX1hPUEVO X1JFQUxUSU1FX1RIUkVBRFMsCgoKICAgIF9TQ19BRFZJU09SWV9JTkZPLAoKICAgIF9TQ19CQVJS SUVSUywKCiAgICBfU0NfQkFTRSwKCiAgICBfU0NfQ19MQU5HX1NVUFBPUlQsCgogICAgX1NDX0Nf TEFOR19TVVBQT1JUX1IsCgogICAgX1NDX0NMT0NLX1NFTEVDVElPTiwKCiAgICBfU0NfQ1BVVElN RSwKCiAgICBfU0NfVEhSRUFEX0NQVVRJTUUsCgogICAgX1NDX0RFVklDRV9JTywKCiAgICBfU0Nf REVWSUNFX1NQRUNJRklDLAoKICAgIF9TQ19ERVZJQ0VfU1BFQ0lGSUNfUiwKCiAgICBfU0NfRkRf TUdNVCwKCiAgICBfU0NfRklGTywKCiAgICBfU0NfUElQRSwKCiAgICBfU0NfRklMRV9BVFRSSUJV VEVTLAoKICAgIF9TQ19GSUxFX0xPQ0tJTkcsCgogICAgX1NDX0ZJTEVfU1lTVEVNLAoKICAgIF9T Q19NT05PVE9OSUNfQ0xPQ0ssCgogICAgX1NDX01VTFRJUExFX1BST0NFU1MsCgogICAgX1NDX1NJ TkdMRV9QUk9DRVNTLAoKICAgIF9TQ19ORVRXT1JLSU5HLAoKICAgIF9TQ19SRUFERVJfV1JJVEVS X0xPQ0tTLAoKICAgIF9TQ19TUElOX0xPQ0tTLAoKICAgIF9TQ19SRUdFWFAsCgogICAgX1NDX1JF R0VYX1ZFUlNJT04sCgogICAgX1NDX1NIRUxMLAoKICAgIF9TQ19TSUdOQUxTLAoKCgoKCgoKMjAw MS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAg ICAgUGFnZSAgMTIyCgoKCiAgICBfU0NfU1BBV04sCgogICAgX1NDX1NQT1JBRElDX1NFUlZFUiwK CiAgICBfU0NfVEhSRUFEX1NQT1JBRElDX1NFUlZFUiwKCiAgICBfU0NfU1lTVEVNX0RBVEFCQVNF LAoKICAgIF9TQ19TWVNURU1fREFUQUJBU0VfUiwKCiAgICBfU0NfVElNRU9VVFMsCgogICAgX1ND X1RZUEVEX01FTU9SWV9PQkpFQ1RTLAoKICAgIF9TQ19VU0VSX0dST1VQUywKCiAgICBfU0NfVVNF Ul9HUk9VUFNfUiwKCiAgICBfU0NfMl9QQlMsCgogICAgX1NDXzJfUEJTX0FDQ09VTlRJTkcsCgog ICAgX1NDXzJfUEJTX0xPQ0FURSwKCiAgICBfU0NfMl9QQlNfTUVTU0FHRSwKCiAgICBfU0NfMl9Q QlNfVFJBQ0ssCgogICAgX1NDX1NZTUxPT1AsCgogICAgX1NDX1NUUkVBTVMsCgogICAgX1NDXzJf UEJTX0NIRUNLUE9JTlQKCiAgfTsKCgoKCgplbnVtCiAgewogICAgX0NTX1BBVEgKCgoKCiAgICAs CiAgICBfQ1NfTEZTX0NGTEFHUyA9IDEwMDAsCgogICAgX0NTX0xGU19MREZMQUdTLAoKICAgIF9D U19MRlNfTElCUywKCiAgICBfQ1NfTEZTX0xJTlRGTEFHUywKCgoKCgoKCjIwMDEtMDgtMjQgMDE6 MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDEy MwoKCgogICAgX0NTX0xGUzY0X0NGTEFHUywKCiAgICBfQ1NfTEZTNjRfTERGTEFHUywKCiAgICBf Q1NfTEZTNjRfTElCUywKCiAgICBfQ1NfTEZTNjRfTElOVEZMQUdTCgoKCgogICAgLAogICAgX0NT X1hCUzVfSUxQMzJfT0ZGMzJfQ0ZMQUdTID0gMTEwMCwKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYz Ml9MREZMQUdTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xJQlMsCgogICAgX0NTX1hCUzVf SUxQMzJfT0ZGMzJfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19DRkxBR1Ms CgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJf T0ZGQklHX0xJQlMsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xJTlRGTEFHUywKCiAgICBf Q1NfWEJTNV9MUDY0X09GRjY0X0NGTEFHUywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0xERkxB R1MsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9MSUJTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZG NjRfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19DRkxBR1MsCgogICAgX0NT X1hCUzVfTFBCSUdfT0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xJ QlMsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xJTlRGTEFHUwoKCiAgfTsKIyA1MDEgIi91 c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoKZXh0ZXJuIGxvbmcgaW50IHBhdGhjb25mIChfX2Nv bnN0IGNoYXIgKl9fcGF0aCwgaW50IF9fbmFtZSkgOwoKCmV4dGVybiBsb25nIGludCBmcGF0aGNv bmYgKGludCBfX2ZkLCBpbnQgX19uYW1lKSA7CgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAg ICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDEyNAoKCmV4 dGVybiBsb25nIGludCBzeXNjb25mIChpbnQgX19uYW1lKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKCmV4dGVybiBzaXplX3QgY29uZnN0ciAoaW50IF9fbmFtZSwgY2hhciAqX19idWYs IHNpemVfdCBfX2xlbikgOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGlkICh2b2lkKSA7CgoKZXh0 ZXJuIF9fcGlkX3QgZ2V0cHBpZCAodm9pZCkgOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGdycCAo dm9pZCkgOwojIDUzNiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX3BpZF90IF9f Z2V0cGdpZCAoX19waWRfdCBfX3BpZCkgOwoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGdpZCAoX19waWRf dCBfX3BpZCkgOwoKCgoKCgpleHRlcm4gaW50IHNldHBnaWQgKF9fcGlkX3QgX19waWQsIF9fcGlk X3QgX19wZ2lkKSA7CiMgNTYyICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBz ZXRwZ3JwICh2b2lkKSA7CiMgNTgwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9f cGlkX3Qgc2V0c2lkICh2b2lkKSA7CgoKCmV4dGVybiBfX3BpZF90IGdldHNpZCAoX19waWRfdCBf X3BpZCkgOwoKCgpleHRlcm4gX191aWRfdCBnZXR1aWQgKHZvaWQpIDsKCgpleHRlcm4gX191aWRf dCBnZXRldWlkICh2b2lkKSA7CgoKZXh0ZXJuIF9fZ2lkX3QgZ2V0Z2lkICh2b2lkKSA7CgoKZXh0 ZXJuIF9fZ2lkX3QgZ2V0ZWdpZCAodm9pZCkgOwoKCgoKZXh0ZXJuIGludCBnZXRncm91cHMgKGlu dCBfX3NpemUsIF9fZ2lkX3QgX19saXN0W10pIDsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAg ICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAxMjUKCgoK CmV4dGVybiBpbnQgZ3JvdXBfbWVtYmVyIChfX2dpZF90IF9fZ2lkKSA7CgoKCgoKCmV4dGVybiBp bnQgc2V0dWlkIChfX3VpZF90IF9fdWlkKSA7CgoKCgpleHRlcm4gaW50IHNldHJldWlkIChfX3Vp ZF90IF9fcnVpZCwgX191aWRfdCBfX2V1aWQpIDsKCgoKCmV4dGVybiBpbnQgc2V0ZXVpZCAoX191 aWRfdCBfX3VpZCkgOwoKCgoKCgpleHRlcm4gaW50IHNldGdpZCAoX19naWRfdCBfX2dpZCkgOwoK CgoKZXh0ZXJuIGludCBzZXRyZWdpZCAoX19naWRfdCBfX3JnaWQsIF9fZ2lkX3QgX19lZ2lkKSA7 CgoKCgpleHRlcm4gaW50IHNldGVnaWQgKF9fZ2lkX3QgX19naWQpIDsKCgoKCgoKZXh0ZXJuIF9f cGlkX3QgZm9yayAodm9pZCkgOwoKCgoKCgpleHRlcm4gX19waWRfdCB2Zm9yayAodm9pZCkgOwoK CgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAg ICAgICAgICAgICAgICAgICBQYWdlICAxMjYKCgpleHRlcm4gY2hhciAqdHR5bmFtZSAoaW50IF9f ZmQpIDsKCgoKZXh0ZXJuIGludCB0dHluYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6 ZV90IF9fYnVmbGVuKSA7CgoKCmV4dGVybiBpbnQgaXNhdHR5IChpbnQgX19mZCkgOwoKCgoKCmV4 dGVybiBpbnQgdHR5c2xvdCAodm9pZCkgOwoKCgoKZXh0ZXJuIGludCBsaW5rIChfX2NvbnN0IGNo YXIgKl9fZnJvbSwgX19jb25zdCBjaGFyICpfX3RvKSA7CgoKCmV4dGVybiBpbnQgc3ltbGluayAo X19jb25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190bykgOwoKCgoKZXh0ZXJuIGlu dCByZWFkbGluayAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcGF0aCwgY2hhciAqX19yZXN0 cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSA7CgoKCmV4dGVy biBpbnQgdW5saW5rIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCmV4dGVybiBpbnQgcm1kaXIg KF9fY29uc3QgY2hhciAqX19wYXRoKSA7CgoKCmV4dGVybiBfX3BpZF90IHRjZ2V0cGdycCAoaW50 IF9fZmQpIDsKCgpleHRlcm4gaW50IHRjc2V0cGdycCAoaW50IF9fZmQsIF9fcGlkX3QgX19wZ3Jw X2lkKSA7CgoKCmV4dGVybiBjaGFyICpnZXRsb2dpbiAodm9pZCkgOwoKCgoKZXh0ZXJuIGludCBn ZXRsb2dpbl9yIChjaGFyICpfX25hbWUsIHNpemVfdCBfX25hbWVfbGVuKSA7CgoKCgoKCgoKCgoy MDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAg ICAgICBQYWdlICAxMjcKCgoKZXh0ZXJuIGludCBzZXRsb2dpbiAoX19jb25zdCBjaGFyICpfX25h bWUpIDsKIyA3MjYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9n ZXRvcHQuaCIgMSAzCiMgNDcgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwpleHRlcm4gY2hhciAq b3B0YXJnOwojIDYxICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuIGludCBvcHRpbmQ7 CgoKCgpleHRlcm4gaW50IG9wdGVycjsKCgoKZXh0ZXJuIGludCBvcHRvcHQ7CiMgMTQ1ICIvdXNy L2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuIGludCBnZXRvcHQgKGludCBfX2FyZ2MsIGNoYXIg KmNvbnN0ICpfX2FyZ3YsIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzKTsKIyA3MjcgIi91c3IvaW5j bHVkZS91bmlzdGQuaCIgMiAzCgoKCgoKCgpleHRlcm4gaW50IGdldGhvc3RuYW1lIChjaGFyICpf X25hbWUsIHNpemVfdCBfX2xlbikgOwoKCgoKCgpleHRlcm4gaW50IHNldGhvc3RuYW1lIChfX2Nv bnN0IGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSA7CgoKCmV4dGVybiBpbnQgc2V0aG9zdGlk IChsb25nIGludCBfX2lkKSA7CgoKCgoKZXh0ZXJuIGludCBnZXRkb21haW5uYW1lIChjaGFyICpf X25hbWUsIHNpemVfdCBfX2xlbikgOwpleHRlcm4gaW50IHNldGRvbWFpbm5hbWUgKF9fY29uc3Qg Y2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIDsKCgoKCgpleHRlcm4gaW50IHZoYW5ndXAgKHZv aWQpIDsKCgpleHRlcm4gaW50IHJldm9rZSAoX19jb25zdCBjaGFyICpfX2ZpbGUpIDsKCgoKCgoK CgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAg ICAgICAgICBQYWdlICAxMjgKCgoKCgoKCgpleHRlcm4gaW50IHByb2ZpbCAodW5zaWduZWQgc2hv cnQgaW50ICpfX3NhbXBsZV9idWZmZXIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAg ICBzaXplX3QgX19vZmZzZXQsIHVuc2lnbmVkIGludCBfX3NjYWxlKSA7CgoKCgoKZXh0ZXJuIGlu dCBhY2N0IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCgpleHRlcm4gY2hhciAqZ2V0dXNlcnNo ZWxsICh2b2lkKSA7CmV4dGVybiB2b2lkIGVuZHVzZXJzaGVsbCAodm9pZCkgOwpleHRlcm4gdm9p ZCBzZXR1c2Vyc2hlbGwgKHZvaWQpIDsKCgoKCgpleHRlcm4gaW50IGRhZW1vbiAoaW50IF9fbm9j aGRpciwgaW50IF9fbm9jbG9zZSkgOwoKCgoKCgpleHRlcm4gaW50IGNocm9vdCAoX19jb25zdCBj aGFyICpfX3BhdGgpIDsKCgoKZXh0ZXJuIGNoYXIgKmdldHBhc3MgKF9fY29uc3QgY2hhciAqX19w cm9tcHQpIDsKCgoKCgpleHRlcm4gaW50IGZzeW5jIChpbnQgX19mZCkgOwoKCgoKCgpleHRlcm4g bG9uZyBpbnQgZ2V0aG9zdGlkICh2b2lkKSA7CgoKZXh0ZXJuIHZvaWQgc3luYyAodm9pZCkgOwoK CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAg ICAgICAgICAgICAgICAgUGFnZSAgMTI5CgoKCmV4dGVybiBpbnQgZ2V0cGFnZXNpemUgKHZvaWQp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgdHJ1bmNhdGUgKF9f Y29uc3QgY2hhciAqX19maWxlLCBfX29mZl90IF9fbGVuZ3RoKSA7CiMgODM2ICIvdXNyL2luY2x1 ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCB0cnVuY2F0ZTY0IChfX2NvbnN0IGNoYXIgKl9fZmls ZSwgX19vZmY2NF90IF9fbGVuZ3RoKSA7CgoKCgpleHRlcm4gaW50IGZ0cnVuY2F0ZSAoaW50IF9f ZmQsIF9fb2ZmX3QgX19sZW5ndGgpIDsKIyA4NTEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpl eHRlcm4gaW50IGZ0cnVuY2F0ZTY0IChpbnQgX19mZCwgX19vZmY2NF90IF9fbGVuZ3RoKSA7CgoK CgoKZXh0ZXJuIGludCBnZXRkdGFibGVzaXplICh2b2lkKSA7CiMgODY2ICIvdXNyL2luY2x1ZGUv dW5pc3RkLmgiIDMKZXh0ZXJuIGludCBicmsgKHZvaWQgKl9fYWRkcikgOwoKCgoKCmV4dGVybiB2 b2lkICpzYnJrIChpbnRwdHJfdCBfX2RlbHRhKSA7CiMgODg3ICIvdXNyL2luY2x1ZGUvdW5pc3Rk LmgiIDMKZXh0ZXJuIGxvbmcgaW50IHN5c2NhbGwgKGxvbmcgaW50IF9fc3lzbm8sIC4uLikgOwoj IDkwNyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgbG9ja2YgKGludCBfX2Zk LCBpbnQgX19jbWQsIF9fb2ZmX3QgX19sZW4pIDsKIyA5MTcgIi91c3IvaW5jbHVkZS91bmlzdGQu aCIgMwpleHRlcm4gaW50IGxvY2tmNjQgKGludCBfX2ZkLCBpbnQgX19jbWQsIF9fb2ZmNjRfdCBf X2xlbikgOwojIDkzOCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgZmRhdGFz eW5jIChpbnQgX19maWxkZXMpIDsKCgoKCgoKCmV4dGVybiBjaGFyICpjcnlwdCAoX19jb25zdCBj aGFyICpfX2tleSwgX19jb25zdCBjaGFyICpfX3NhbHQpIDsKCgoKZXh0ZXJuIHZvaWQgZW5jcnlw dCAoY2hhciAqX19ibG9jaywgaW50IF9fZWRmbGFnKSA7CgoKCgoKCgoKCgoKCgoyMDAxLTA4LTI0 IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdl ICAxMzAKCgpleHRlcm4gdm9pZCBzd2FiIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19mcm9t LCB2b2lkICpfX3Jlc3RyaWN0IF9fdG8sCiAgICAgICAgICAgICAgICAgIHNzaXplX3QgX19uKSA7 CgoKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSA7CiMgOTgzICIvdXNyL2lu Y2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJl cGFyZSkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19wYXJlbnQp ICh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fY2hpbGQpICh2b2lk KSkgOwojIDIwICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvbWlzYy5oIiAyCiMgMSAiL3Vzci9p bmNsdWRlL3RpbWUuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoj IDM4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM5ICIv dXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgi IDEgMwojIDQzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKIyA1NiAiL3Vzci9pbmNsdWRlL3Rp bWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDU3ICIvdXNyL2lu Y2x1ZGUvdGltZS5oIiAyIDMKCgp0eXBlZGVmIF9fY2xvY2tfdCBjbG9ja190OwoKCgoKCgoKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL3RpbWUu aCIgMiAzCgoKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CiMgNzkgIi91c3IvaW5jbHVkZS90aW1l LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA4MCAiL3Vzci9pbmNs dWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CiMgOTEgIi91 c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMK IyA5MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEg ICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDEzMQoK CnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMgMTA2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz CnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIGxvbmcgaW50IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2 X25zZWM7CiAgfTsKCgoKCgoKCnN0cnVjdCB0bQp7CiAgaW50IHRtX3NlYzsKICBpbnQgdG1fbWlu OwogIGludCB0bV9ob3VyOwogIGludCB0bV9tZGF5OwogIGludCB0bV9tb247CiAgaW50IHRtX3ll YXI7CiAgaW50IHRtX3dkYXk7CiAgaW50IHRtX3lkYXk7CiAgaW50IHRtX2lzZHN0OwoKCiAgbG9u ZyBpbnQgdG1fZ210b2ZmOwogIF9fY29uc3QgY2hhciAqdG1fem9uZTsKCgoKCn07CgoKCgpzdHJ1 Y3QgaXRpbWVyc3BlYwogIHsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKICAgIHN0 cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsKICB9OwoKCnN0cnVjdCBzaWdldmVudDsKIyAxNjMgIi91 c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIGNsb2NrX3QgY2xvY2sgKHZvaWQpIDsKCgpleHRl cm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgOwoKCmV4dGVybiBkb3VibGUgZGlmZnRp bWUgKHRpbWVfdCBfX3RpbWUxLCB0aW1lX3QgX190aW1lMCkKICAgICAgICAgICAgIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAg ICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAxMzIKCgoKZXh0ZXJuIHRp bWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqX190cCkgOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RyZnRp bWUgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIDsKCgoKCmV4 dGVybiBjaGFyICpzdHJwdGltZSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIHN0cnVjdCB0 bSAqX190cCkKICAgICAgICAgICAgOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZSAoX19j b25zdCB0aW1lX3QgKl9fdGltZXIpIDsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lIChf X2NvbnN0IHRpbWVfdCAqX190aW1lcikgOwoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3Ig KF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgOwoKCgpleHRlcm4gc3RydWN0IHRt ICpsb2NhbHRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSA7CgoK CgpleHRlcm4gY2hhciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIDsKCgpleHRl cm4gY2hhciAqY3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSA7CgoKCgoKCmV4dGVybiBj aGFyICphc2N0aW1lX3IgKF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAsCiAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIDsKCgoKCgoKCgoKMjAw MS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAg ICAgUGFnZSAgMTMzCgoKZXh0ZXJuIGNoYXIgKmN0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jl c3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9f YnVmKSA7CgoKCgpleHRlcm4gY2hhciAqX190em5hbWVbMl07CmV4dGVybiBpbnQgX19kYXlsaWdo dDsKZXh0ZXJuIGxvbmcgaW50IF9fdGltZXpvbmU7CgoKCgpleHRlcm4gY2hhciAqdHpuYW1lWzJd OwoKCgpleHRlcm4gdm9pZCB0enNldCAodm9pZCkgOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0Owpl eHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25zdCB0 aW1lX3QgKl9fd2hlbikgOwojIDI3MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gdGlt ZV90IHRpbWVnbSAoc3RydWN0IHRtICpfX3RwKSA7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwg KHN0cnVjdCB0bSAqX190cCkgOwoKCmV4dGVybiBpbnQgZHlzaXplIChpbnQgX195ZWFyKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBuYW5vc2xlZXAgKF9fY29u c3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90aW1lLAogICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZykgOwoKCgpleHRlcm4gaW50IGNsb2NrX2dl dHJlcyAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAqX19yZXMpIDsKCgpl eHRlcm4gaW50IGNsb2NrX2dldHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGlt ZXNwZWMgKl9fdHApIDsKCgpleHRlcm4gaW50IGNsb2NrX3NldHRpbWUgKGNsb2NraWRfdCBfX2Ns b2NrX2lkLCBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX190cCkKICAgICAgICAgICAgOwoKCgoK CgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAg ICAgICAgICAgIFBhZ2UgIDEzNAoKCgoKZXh0ZXJuIGludCBjbG9ja19uYW5vc2xlZXAgKGNsb2Nr aWRfdCBfX2Nsb2NrX2lkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW0pIDsKCgpleHRlcm4gaW50IGNsb2NrX2dldGNwdWNs b2NraWQgKHBpZF90IF9fcGlkLCBjbG9ja2lkX3QgKl9fY2xvY2tfaWQpIDsKCgoKCmV4dGVybiBp bnQgdGltZXJfY3JlYXRlIChjbG9ja2lkX3QgX19jbG9ja19pZCwKICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBzaWdldmVudCAqX19yZXN0cmljdCBfX2V2cCwKICAgICAgICAgICAgICAg ICAgICAgICAgIHRpbWVyX3QgKl9fcmVzdHJpY3QgX190aW1lcmlkKSA7CgoKZXh0ZXJuIGludCB0 aW1lcl9kZWxldGUgKHRpbWVyX3QgX190aW1lcmlkKSA7CgoKZXh0ZXJuIGludCB0aW1lcl9zZXR0 aW1lICh0aW1lcl90IF9fdGltZXJpZCwgaW50IF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX3ZhbHVlLAogICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9fb3Zh bHVlKSA7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgc3Ry dWN0IGl0aW1lcnNwZWMgKl9fdmFsdWUpCiAgICAgICAgICAgIDsKCgpleHRlcm4gaW50IHRpbWVy X2dldG92ZXJydW4gKHRpbWVyX3QgX190aW1lcmlkKSA7CiMgMzQyICIvdXNyL2luY2x1ZGUvdGlt ZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ2V0 ZGF0ZSAoX19jb25zdCBjaGFyICpfX3N0cmluZykgOwojIDM1NyAiL3Vzci9pbmNsdWRlL3RpbWUu aCIgMwpleHRlcm4gaW50IGdldGRhdGVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Ry aW5nLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fcmVzYnVm cCkgOwojIDIxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvbWlzYy5oIiAyCiMgMSAiL3Vzci9p bmNsdWRlL3N5cy90aW1lLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL3N5cy90 aW1lLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyNSAiL3Vz ci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMK IyAyNyAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy90aW1lLmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAg ICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDEzNQoKCiMgNjQg Ii91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMiAzCgoKCnN0cnVjdCB0aW1ldmFsCiAgewogICAg X190aW1lX3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwogIH07CiMgMjkgIi91 c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3Qu aCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoK CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9z eXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwoj IDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9i aXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlw ZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2ln bmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50 KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIg MwoKCgp0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS90 aW1lLmgiIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA0NiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3Qu aCIgMiAzCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwoKCgoKCgoKCgoyMDAxLTA4LTI0 IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdl ICAxMzYKCgoKCgoKCnR5cGVkZWYgc3RydWN0CiAgewoKCgogICAgX19mZF9tYXNrIGZkc19iaXRz WzEwMjQgLyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSldOwoKCgoKCiAgfSBmZF9zZXQ7CgoKCgoK CnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CiMgOTYgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0 LmgiIDMKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBf X3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZk cywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAg ICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgOwoK CgoKCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9f cmVhZGZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZk cywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCiAg ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0IF9fdGlt ZW91dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9f c2lnbWFzaykgOwojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBf X3N1c2Vjb25kc190IHN1c2Vjb25kc190OwojIDU2ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIg MwpzdHJ1Y3QgdGltZXpvbmUKICB7CiAgICBpbnQgdHpfbWludXRlc3dlc3Q7CiAgICBpbnQgdHpf ZHN0dGltZTsKICB9OwoKdHlwZWRlZiBzdHJ1Y3QgdGltZXpvbmUgKl9fcmVzdHJpY3QgX190aW1l em9uZV9wdHJfdDsKIyA3MiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMKZXh0ZXJuIGludCBn ZXR0aW1lb2ZkYXkgKHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdHYsCiAgICAgICAgICAg ICAgICAgICAgICAgICBfX3RpbWV6b25lX3B0cl90IF9fdHopIDsKCgoKCgoKCgoKMjAwMS0wOC0y NCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFn ZSAgMTM3CgoKCgpleHRlcm4gaW50IHNldHRpbWVvZmRheSAoX19jb25zdCBzdHJ1Y3QgdGltZXZh bCAqX190diwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWV6b25l ICpfX3R6KSA7CgoKCgoKZXh0ZXJuIGludCBhZGp0aW1lIChfX2NvbnN0IHN0cnVjdCB0aW1ldmFs ICpfX2RlbHRhLAogICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX29sZGRlbHRh KSA7CgoKCgplbnVtIF9faXRpbWVyX3doaWNoCiAgewoKICAgIElUSU1FUl9SRUFMID0gMCwKCgog ICAgSVRJTUVSX1ZJUlRVQUwgPSAxLAoKCgogICAgSVRJTUVSX1BST0YgPSAyCgogIH07CgoKCnN0 cnVjdCBpdGltZXJ2YWwKICB7CgogICAgc3RydWN0IHRpbWV2YWwgaXRfaW50ZXJ2YWw7CgogICAg c3RydWN0IHRpbWV2YWwgaXRfdmFsdWU7CiAgfTsKCgp0eXBlZGVmIGVudW0gX19pdGltZXJfd2hp Y2ggX19pdGltZXJfd2hpY2hfdDsKCgoKCgoKZXh0ZXJuIGludCBnZXRpdGltZXIgKF9faXRpbWVy X3doaWNoX3QgX193aGljaCwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpdGltZXJ2YWwg Kl9fdmFsdWUpIDsKCgoKCmV4dGVybiBpbnQgc2V0aXRpbWVyIChfX2l0aW1lcl93aGljaF90IF9f d2hpY2gsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBpdGltZXJ2YWwgKl9f cmVzdHJpY3QgX19uZXcsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVydmFsICpf X3Jlc3RyaWN0IF9fb2xkKSA7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAg ICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAxMzgKCgoKCgpleHRlcm4gaW50 IHV0aW1lcyAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fY29uc3Qgc3RydWN0IHRpbWV2YWwgX190 dnBbMl0pCiAgICAgICAgICAgIDsKIyAyMiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL21pc2Mu aCIgMgojIDEgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2Vy cm5vLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzAgIi91c3IvaW5j bHVkZS9lcnJuby5oIiAyIDMKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAx IDMKIyAyNSAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9s aW51eC9lcnJuby5oIiAxIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNtL2Vycm5vLmgiIDEgMwoj IDUgIi91c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIiAyIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2Jp dHMvZXJybm8uaCIgMiAzCiMgMzYgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMKZXh0ZXJu IGludCBlcnJubzsKCgpleHRlcm4gaW50ICpfX2Vycm5vX2xvY2F0aW9uICh2b2lkKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CiMgMzcgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAyIDMKIyA1 NSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDMKZXh0ZXJuIGNoYXIgKnByb2dyYW1faW52b2NhdGlv bl9uYW1lLCAqcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWU7CiMgNjkgIi91c3IvaW5jbHVk ZS9lcnJuby5oIiAzCnR5cGVkZWYgaW50IGVycm9yX3Q7CiMgMjMgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9taXNjLmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzCiMgMjYgIi91 c3IvaW5jbHVkZS9jdHlwZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwoj IDI3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw ZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKIyA0MCAiL3Vzci9pbmNs dWRlL2N0eXBlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDQxICIvdXNy L2luY2x1ZGUvY3R5cGUuaCIgMiAzCgoKCgoKCmVudW0KewogIF9JU3VwcGVyID0gKCgwKSA8IDgg PyAoKDEgPDwgKDApKSA8PCA4KSA6ICgoMSA8PCAoMCkpID4+IDgpKSwKICBfSVNsb3dlciA9ICgo MSkgPCA4ID8gKCgxIDw8ICgxKSkgPDwgOCkgOiAoKDEgPDwgKDEpKSA+PiA4KSksCiAgX0lTYWxw aGEgPSAoKDIpIDwgOCA/ICgoMSA8PCAoMikpIDw8IDgpIDogKCgxIDw8ICgyKSkgPj4gOCkpLAoK CgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAg ICAgICAgICAgICAgUGFnZSAgMTM5CgoKICBfSVNkaWdpdCA9ICgoMykgPCA4ID8gKCgxIDw8ICgz KSkgPDwgOCkgOiAoKDEgPDwgKDMpKSA+PiA4KSksCiAgX0lTeGRpZ2l0ID0gKCg0KSA8IDggPyAo KDEgPDwgKDQpKSA8PCA4KSA6ICgoMSA8PCAoNCkpID4+IDgpKSwKICBfSVNzcGFjZSA9ICgoNSkg PCA4ID8gKCgxIDw8ICg1KSkgPDwgOCkgOiAoKDEgPDwgKDUpKSA+PiA4KSksCiAgX0lTcHJpbnQg PSAoKDYpIDwgOCA/ICgoMSA8PCAoNikpIDw8IDgpIDogKCgxIDw8ICg2KSkgPj4gOCkpLAogIF9J U2dyYXBoID0gKCg3KSA8IDggPyAoKDEgPDwgKDcpKSA8PCA4KSA6ICgoMSA8PCAoNykpID4+IDgp KSwKICBfSVNibGFuayA9ICgoOCkgPCA4ID8gKCgxIDw8ICg4KSkgPDwgOCkgOiAoKDEgPDwgKDgp KSA+PiA4KSksCiAgX0lTY250cmwgPSAoKDkpIDwgOCA/ICgoMSA8PCAoOSkpIDw8IDgpIDogKCgx IDw8ICg5KSkgPj4gOCkpLAogIF9JU3B1bmN0ID0gKCgxMCkgPCA4ID8gKCgxIDw8ICgxMCkpIDw8 IDgpIDogKCgxIDw8ICgxMCkpID4+IDgpKSwKICBfSVNhbG51bSA9ICgoMTEpIDwgOCA/ICgoMSA8 PCAoMTEpKSA8PCA4KSA6ICgoMSA8PCAoMTEpKSA+PiA4KSkKfTsKIyA3NSAiL3Vzci9pbmNsdWRl L2N0eXBlLmgiIDMKZXh0ZXJuIF9fY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7 CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b2xvd2VyOwpleHRlcm4gX19jb25z dCBfX2ludDMyX3QgKl9fY3R5cGVfdG91cHBlcjsKIyA5MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgi IDMKZXh0ZXJuIGludCBpc2FsbnVtIChpbnQpIDsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIDsK ZXh0ZXJuIGludCBpc2NudHJsIChpbnQpIDsKZXh0ZXJuIGludCBpc2RpZ2l0IChpbnQpIDsKZXh0 ZXJuIGludCBpc2xvd2VyIChpbnQpIDsKZXh0ZXJuIGludCBpc2dyYXBoIChpbnQpIDsKZXh0ZXJu IGludCBpc3ByaW50IChpbnQpIDsKZXh0ZXJuIGludCBpc3B1bmN0IChpbnQpIDsKZXh0ZXJuIGlu dCBpc3NwYWNlIChpbnQpIDsKZXh0ZXJuIGludCBpc3VwcGVyIChpbnQpIDsKZXh0ZXJuIGludCBp c3hkaWdpdCAoaW50KSA7CgoKZXh0ZXJuIGludCBpc2JsYW5rIChpbnQpIDsKCgoKCmV4dGVybiBp bnQgdG9sb3dlciAoaW50IF9fYykgOwoKCmV4dGVybiBpbnQgdG91cHBlciAoaW50IF9fYykgOwoK CgoKCgpleHRlcm4gaW50IGlzYXNjaWkgKGludCBfX2MpIDsKCgoKZXh0ZXJuIGludCB0b2FzY2lp IChpbnQgX19jKSA7CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGludCkgOwpleHRlcm4gaW50IF90 b2xvd2VyIChpbnQpIDsKIyAxNjggIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBfX2lu bGluZSBpbnQKdG9sb3dlciAoaW50IF9fYykKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAg ICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE0MAoKCnsKICBy ZXR1cm4gX19jID49IC0xMjggJiYgX19jIDwgMjU2ID8gX19jdHlwZV90b2xvd2VyW19fY10gOiBf X2M7Cn0KCmV4dGVybiBfX2lubGluZSBpbnQKdG91cHBlciAoaW50IF9fYykKewogIHJldHVybiBf X2MgPj0gLTEyOCAmJiBfX2MgPCAyNTYgPyBfX2N0eXBlX3RvdXBwZXJbX19jXSA6IF9fYzsKfQoj IDIxMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5o IiAxIDMKIyAyMTIgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKIyAyMjQgIi91c3IvaW5jbHVk ZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgX19pc2FsbnVtX2wgKGludCwgX19sb2NhbGVfdCkgOwpl eHRlcm4gaW50IF9faXNhbHBoYV9sIChpbnQsIF9fbG9jYWxlX3QpIDsKZXh0ZXJuIGludCBfX2lz Y250cmxfbCAoaW50LCBfX2xvY2FsZV90KSA7CmV4dGVybiBpbnQgX19pc2RpZ2l0X2wgKGludCwg X19sb2NhbGVfdCkgOwpleHRlcm4gaW50IF9faXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIDsK ZXh0ZXJuIGludCBfX2lzZ3JhcGhfbCAoaW50LCBfX2xvY2FsZV90KSA7CmV4dGVybiBpbnQgX19p c3ByaW50X2wgKGludCwgX19sb2NhbGVfdCkgOwpleHRlcm4gaW50IF9faXNwdW5jdF9sIChpbnQs IF9fbG9jYWxlX3QpIDsKZXh0ZXJuIGludCBfX2lzc3BhY2VfbCAoaW50LCBfX2xvY2FsZV90KSA7 CmV4dGVybiBpbnQgX19pc3VwcGVyX2wgKGludCwgX19sb2NhbGVfdCkgOwpleHRlcm4gaW50IF9f aXN4ZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KSA7CgpleHRlcm4gaW50IF9faXNibGFua19sIChp bnQsIF9fbG9jYWxlX3QpIDsKCgoKZXh0ZXJuIGludCBfX3RvbG93ZXJfbCAoaW50IF9fYywgX19s b2NhbGVfdCBfX2wpIDsKCgpleHRlcm4gaW50IF9fdG91cHBlcl9sIChpbnQgX19jLCBfX2xvY2Fs ZV90IF9fbCkgOwojIDI0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvbWlzYy5oIiAyCiMgMSAi L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy90eXBl cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEg MwojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgX191X2NoYXIg dV9jaGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7 CnR5cGVkZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRl ZiBfX3VfcXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgp0eXBlZGVm IF9fbG9mZl90IGxvZmZfdDsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAg ICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAxNDEKCgoKCnR5cGVkZWYgX19p bm9fdCBpbm9fdDsKCgoKCgoKdHlwZWRlZiBfX2lubzY0X3QgaW5vNjRfdDsKCgoKCnR5cGVkZWYg X19kZXZfdCBkZXZfdDsKIyA2OCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYg X19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKIyAxMDEgIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9faWRfdCBpZF90OwojIDExMSAiL3Vz ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVk ZWYgX19jYWRkcl90IGNhZGRyX3Q7CgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKIyAxMjYgIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwoj IDEyNyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKIyAxNDAgIi91c3IvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDEgIi91c3IvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVk ZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsK IyAxODQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19h dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19h dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19h dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19h dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQg dV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5z aWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsK dHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo X19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAo KF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBlZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX193b3JkX18pKSk7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAg ICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAxNDIKCgojIDIw NiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5o IiAxIDMKIyAyMDcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2lu Y2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIyAyMTAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg MiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMKIyAyMTMgIi91c3Iv aW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCgp0eXBlZGVmIF9fYmxrc2l6ZV90IGJsa3NpemVf dDsKCgoKCgoKdHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNibGtj bnRfdCBmc2Jsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90OwojIDI1 MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19ibGtjbnQ2NF90IGJsa2Nu dDY0X3Q7CnR5cGVkZWYgX19mc2Jsa2NudDY0X3QgZnNibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNm aWxjbnQ2NF90IGZzZmlsY250NjRfdDsKIyAyNSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL21p c2MuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAxIDMKIyAyNiAiL3Vzci9pbmNs dWRlL3N5cy9zdGF0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcg Ii91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw ZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAyIDMKCgoKIyAxICIvdXNy L2luY2x1ZGUvdGltZS5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDIgMwoj IDk4ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0 YXQuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9iaXRzL3N0YXQuaCIgMwpzdHJ1Y3Qgc3RhdAog IHsKICAgIF9fZGV2X3Qgc3RfZGV2OwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fcGFkMTsKCgoK CgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAg ICAgICAgICAgICBQYWdlICAxNDMKCgogICAgX19pbm9fdCBzdF9pbm87CgoKCiAgICBfX21vZGVf dCBzdF9tb2RlOwogICAgX19ubGlua190IHN0X25saW5rOwogICAgX191aWRfdCBzdF91aWQ7CiAg ICBfX2dpZF90IHN0X2dpZDsKICAgIF9fZGV2X3Qgc3RfcmRldjsKICAgIHVuc2lnbmVkIHNob3J0 IGludCBfX3BhZDI7CgogICAgX19vZmZfdCBzdF9zaXplOwoKCgogICAgX19ibGtzaXplX3Qgc3Rf Ymxrc2l6ZTsKCgogICAgX19ibGtjbnRfdCBzdF9ibG9ja3M7CgoKCiAgICBfX3RpbWVfdCBzdF9h dGltZTsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMTsKICAgIF9fdGltZV90IHN0X210 aW1lOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQyOwogICAgX190aW1lX3Qgc3RfY3Rp bWU7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDM7CgogICAgdW5zaWduZWQgbG9uZyBp bnQgX191bnVzZWQ0OwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQ1OwoKCgogIH07CgoK c3RydWN0IHN0YXQ2NAogIHsKICAgIF9fZGV2X3Qgc3RfZGV2OwogICAgdW5zaWduZWQgaW50IF9f cGFkMTsKCiAgICBfX2lub190IF9fc3RfaW5vOwogICAgX19tb2RlX3Qgc3RfbW9kZTsKICAgIF9f bmxpbmtfdCBzdF9ubGluazsKICAgIF9fdWlkX3Qgc3RfdWlkOwogICAgX19naWRfdCBzdF9naWQ7 CiAgICBfX2Rldl90IHN0X3JkZXY7CiAgICB1bnNpZ25lZCBpbnQgX19wYWQyOwogICAgX19vZmY2 NF90IHN0X3NpemU7CiAgICBfX2Jsa3NpemVfdCBzdF9ibGtzaXplOwoKICAgIF9fYmxrY250NjRf dCBzdF9ibG9ja3M7CiAgICBfX3RpbWVfdCBzdF9hdGltZTsKICAgIHVuc2lnbmVkIGxvbmcgaW50 IF9fdW51c2VkMTsKICAgIF9fdGltZV90IHN0X210aW1lOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToy MSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgMTQ0 CgoKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMjsKICAgIF9fdGltZV90IHN0X2N0aW1l OwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQzOwogICAgX19pbm82NF90IHN0X2lubzsK ICB9OwojIDk5ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMiAzCiMgMjAwICIvdXNyL2luY2x1 ZGUvc3lzL3N0YXQuaCIgMwpleHRlcm4gaW50IHN0YXQgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2ZpbGUsCiAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgKl9fcmVzdHJpY3QgX19idWYp IDsKCgoKZXh0ZXJuIGludCBmc3RhdCAoaW50IF9fZmQsIHN0cnVjdCBzdGF0ICpfX2J1ZikgOwoj IDIxOSAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMKZXh0ZXJuIGludCBzdGF0NjQgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGUsCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3Rh dDY0ICpfX3Jlc3RyaWN0IF9fYnVmKSA7CmV4dGVybiBpbnQgZnN0YXQ2NCAoaW50IF9fZmQsIHN0 cnVjdCBzdGF0NjQgKl9fYnVmKSA7CgoKCgoKCmV4dGVybiBpbnQgbHN0YXQgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2ZpbGUsCiAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3Jl c3RyaWN0IF9fYnVmKSA7CiMgMjQxICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwpleHRlcm4g aW50IGxzdGF0NjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGUsCiAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHN0YXQ2NCAqX19yZXN0cmljdCBfX2J1ZikgOwoKCgoKCgpleHRlcm4g aW50IGNobW9kIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19tb2RlX3QgX19tb2RlKSA7CgoKCmV4 dGVybiBpbnQgZmNobW9kIChpbnQgX19mZCwgX19tb2RlX3QgX19tb2RlKSA7CgoKCgoKZXh0ZXJu IF9fbW9kZV90IHVtYXNrIChfX21vZGVfdCBfX21hc2spIDsKCgoKCmV4dGVybiBfX21vZGVfdCBn ZXR1bWFzayAodm9pZCkgOwoKCgpleHRlcm4gaW50IG1rZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0 aCwgX19tb2RlX3QgX19tb2RlKSA7CgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAg ICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE0NQoKCgoKCmV4dGVy biBpbnQgbWtub2QgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX21vZGVfdCBfX21vZGUsIF9fZGV2 X3QgX19kZXYpCiAgICAgICAgICAgIDsKCgoKCmV4dGVybiBpbnQgbWtmaWZvIChfX2NvbnN0IGNo YXIgKl9fcGF0aCwgX19tb2RlX3QgX19tb2RlKSA7CiMgMzA2ICIvdXNyL2luY2x1ZGUvc3lzL3N0 YXQuaCIgMwpleHRlcm4gaW50IF9fZnhzdGF0IChpbnQgX192ZXIsIGludCBfX2ZpbGRlcywgc3Ry dWN0IHN0YXQgKl9fc3RhdF9idWYpIDsKZXh0ZXJuIGludCBfX3hzdGF0IChpbnQgX192ZXIsIF9f Y29uc3QgY2hhciAqX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCAq X19zdGF0X2J1ZikgOwpleHRlcm4gaW50IF9fbHhzdGF0IChpbnQgX192ZXIsIF9fY29uc3QgY2hh ciAqX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgKl9fc3RhdF9i dWYpIDsKIyAzMzAgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAzCmV4dGVybiBpbnQgX19meHN0 YXQ2NCAoaW50IF9fdmVyLCBpbnQgX19maWxkZXMsIHN0cnVjdCBzdGF0NjQgKl9fc3RhdF9idWYp CiAgICAgICAgICAgIDsKZXh0ZXJuIGludCBfX3hzdGF0NjQgKGludCBfX3ZlciwgX19jb25zdCBj aGFyICpfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQ2NCAqX19z dGF0X2J1ZikgOwpleHRlcm4gaW50IF9fbHhzdGF0NjQgKGludCBfX3ZlciwgX19jb25zdCBjaGFy ICpfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0NjQgKl9fc3Rh dF9idWYpIDsKCmV4dGVybiBpbnQgX194bWtub2QgKGludCBfX3ZlciwgX19jb25zdCBjaGFyICpf X3BhdGgsIF9fbW9kZV90IF9fbW9kZSwKICAgICAgICAgICAgICAgICAgICAgX19kZXZfdCAqX19k ZXYpIDsKCgoKCmV4dGVybiBfX2lubGluZV9fIGludCBzdGF0IChfX2NvbnN0IGNoYXIgKl9fcGF0 aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3N0YXRidWYpCnsK ICByZXR1cm4gX194c3RhdCAoMywgX19wYXRoLCBfX3N0YXRidWYpOwp9CgoKZXh0ZXJuIF9faW5s aW5lX18gaW50IGxzdGF0IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3Qgc3RhdCAqX19zdGF0YnVmKQp7CiAgcmV0dXJuIF9fbHhzdGF0ICgz LCBfX3BhdGgsIF9fc3RhdGJ1Zik7Cn0KCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgZnN0YXQgKGlu dCBfX2ZkLCBzdHJ1Y3Qgc3RhdCAqX19zdGF0YnVmKQp7CiAgcmV0dXJuIF9fZnhzdGF0ICgzLCBf X2ZkLCBfX3N0YXRidWYpOwp9CgoKZXh0ZXJuIF9faW5saW5lX18gaW50IG1rbm9kIChfX2NvbnN0 IGNoYXIgKl9fcGF0aCwgX19tb2RlX3QgX19tb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fZGV2X3QgX19kZXYpCnsKICByZXR1cm4gX194bWtub2QgKDEsIF9fcGF0aCwgX19tb2Rl LCAmX19kZXYpOwp9CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAg bWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgMTQ2CgoKCgoKCmV4dGVybiBfX2lubGlu ZV9fIGludCBzdGF0NjQgKF9fY29uc3QgY2hhciAqX19wYXRoLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3Qgc3RhdDY0ICpfX3N0YXRidWYpCnsKICByZXR1cm4gX194c3RhdDY0 ICgzLCBfX3BhdGgsIF9fc3RhdGJ1Zik7Cn0KCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgbHN0YXQ2 NCAoX19jb25zdCBjaGFyICpfX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3Qgc3RhdDY0ICpfX3N0YXRidWYpCnsKICByZXR1cm4gX19seHN0YXQ2NCAoMywgX19wYXRo LCBfX3N0YXRidWYpOwp9CgoKZXh0ZXJuIF9faW5saW5lX18gaW50IGZzdGF0NjQgKGludCBfX2Zk LCBzdHJ1Y3Qgc3RhdDY0ICpfX3N0YXRidWYpCnsKICByZXR1cm4gX19meHN0YXQ2NCAoMywgX19m ZCwgX19zdGF0YnVmKTsKfQojIDI2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvbWlzYy5oIiAy CiMgMSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9tYXRoLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9t YXRoLmgiIDIgMwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMSAzCiMg MjUgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVh dHVyZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDIgMwojIDM0 ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9uYW4u aCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvbWF0aGRlZi5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGRlZi5oIiAz CnR5cGVkZWYgbG9uZyBkb3VibGUgZmxvYXRfdDsKCnR5cGVkZWYgbG9uZyBkb3VibGUgZG91Ymxl X3Q7CiMgNDEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDYzICIvdXNyL2luY2x1ZGUvbWF0 aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNy L2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZG91YmxlIGFjb3MgKGRvdWJsZSBf X3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3MgKGRvdWJsZSBfX3gpIDsKCmV4dGVybiBkb3VibGUg YXNpbiAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fYXNpbiAoZG91YmxlIF9feCkgOwoK CgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAg ICAgICAgICAgICAgUGFnZSAgMTQ3CgoKCmV4dGVybiBkb3VibGUgYXRhbiAoZG91YmxlIF9feCkg OyBleHRlcm4gZG91YmxlIF9fYXRhbiAoZG91YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJsZSBhdGFu MiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fYXRhbjIgKGRvdWJs ZSBfX3ksIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gZG91YmxlIGNvcyAoZG91YmxlIF9feCkgOyBl eHRlcm4gZG91YmxlIF9fY29zIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIHNpbiAoZG91 YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fc2luIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91 YmxlIHRhbiAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fdGFuIChkb3VibGUgX194KSA7 CgoKCmV4dGVybiB2b2lkIHNpbmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJs ZSAqX19jb3N4KSA7IGV4dGVybiB2b2lkIF9fc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9f c2lueCwgZG91YmxlICpfX2Nvc3gpIDsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBjb3NoIChkb3VibGUg X194KSA7IGV4dGVybiBkb3VibGUgX19jb3NoIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91Ymxl IHNpbmggKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX3NpbmggKGRvdWJsZSBfX3gpIDsK CmV4dGVybiBkb3VibGUgdGFuaCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fdGFuaCAo ZG91YmxlIF9feCkgOwoKCgpleHRlcm4gZG91YmxlIGFjb3NoIChkb3VibGUgX194KSA7IGV4dGVy biBkb3VibGUgX19hY29zaCAoZG91YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJsZSBhc2luaCAoZG91 YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fYXNpbmggKGRvdWJsZSBfX3gpIDsKCmV4dGVybiBk b3VibGUgYXRhbmggKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2F0YW5oIChkb3VibGUg X194KSA7CgoKCgoKZXh0ZXJuIGRvdWJsZSBleHAgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJs ZSBfX2V4cCAoZG91YmxlIF9feCkgOwoKCgpleHRlcm4gZG91YmxlIGV4cDEwIChkb3VibGUgX194 KSA7IGV4dGVybiBkb3VibGUgX19leHAxMCAoZG91YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJsZSBw b3cxMCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fcG93MTAgKGRvdWJsZSBfX3gpIDsK CgoKZXh0ZXJuIGRvdWJsZSBmcmV4cCAoZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSA7IGV4 dGVybiBkb3VibGUgX19mcmV4cCAoZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSA7CgoKZXh0 ZXJuIGRvdWJsZSBsZGV4cCAoZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIDsgZXh0ZXJuIGRv dWJsZSBfX2xkZXhwIChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgOwoKCmV4dGVybiBkb3Vi bGUgbG9nIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19sb2cgKGRvdWJsZSBfX3gpIDsK CgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAg ICAgICAgICAgICAgIFBhZ2UgIDE0OAoKCgoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAoZG91YmxlIF9f eCkgOyBleHRlcm4gZG91YmxlIF9fbG9nMTAgKGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gZG91Ymxl IG1vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSA7IGV4dGVybiBkb3VibGUgX19tb2Rm IChkb3VibGUgX194LCBkb3VibGUgKl9faXB0cikgOwoKCgpleHRlcm4gZG91YmxlIGV4cG0xIChk b3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19leHBtMSAoZG91YmxlIF9feCkgOwoKCmV4dGVy biBkb3VibGUgbG9nMXAgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2xvZzFwIChkb3Vi bGUgX194KSA7CgoKZXh0ZXJuIGRvdWJsZSBsb2diIChkb3VibGUgX194KSA7IGV4dGVybiBkb3Vi bGUgX19sb2diIChkb3VibGUgX194KSA7CgoKCgpleHRlcm4gZG91YmxlIGV4cDIgKGRvdWJsZSBf X3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2V4cDIgKGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gZG91Ymxl IGxvZzIgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2xvZzIgKGRvdWJsZSBfX3gpIDsK CgoKCgoKZXh0ZXJuIGRvdWJsZSBwb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsgZXh0ZXJu IGRvdWJsZSBfX3BvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOwoKCmV4dGVybiBkb3VibGUg c3FydCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fc3FydCAoZG91YmxlIF9feCkgOwoK CgpleHRlcm4gZG91YmxlIGh5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KSA7IGV4dGVybiBk b3VibGUgX19oeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOwoKCgoKZXh0ZXJuIGRvdWJs ZSBjYnJ0IChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19jYnJ0IChkb3VibGUgX194KSA7 CgoKCgoKCmV4dGVybiBkb3VibGUgY2VpbCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9f Y2VpbCAoZG91YmxlIF9feCkgOwoKCmV4dGVybiBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fZmFicyAoZG91YmxlIF9f eCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZmxvb3IgKGRv dWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2Zsb29yIChkb3VibGUgX194KSA7CgoKCgoKCgoy MDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAg ICAgICBQYWdlICAxNDkKCgoKCmV4dGVybiBkb3VibGUgZm1vZCAoZG91YmxlIF9feCwgZG91Ymxl IF9feSkgOyBleHRlcm4gZG91YmxlIF9fZm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOwoK CgoKZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3VibGUgX192YWx1 ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlIChkb3Vi bGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGRv dWJsZSBpbmZuYW4gKGludCBfX2Vycm9yKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4 dGVybiBkb3VibGUgX19pbmZuYW4gKGludCBfX2Vycm9yKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSA7IGV4 dGVybiBkb3VibGUgX19kcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSA7CgoKCmV4dGVybiBk b3VibGUgc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX3NpZ25pZmlj YW5kIChkb3VibGUgX194KSA7CgoKCgpleHRlcm4gZG91YmxlIGNvcHlzaWduIChkb3VibGUgX194 LCBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUg X19jb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJsZSBuYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uYW4gKF9fY29uc3QgY2hh ciAqX190YWdiKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9f aXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4 dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKSA7IGV4dGVybiBkb3VibGUgX19qMCAoZG91 YmxlKSA7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1p ICAgICAgICAgICAgICAgICAgICBQYWdlICAxNTAKCgpleHRlcm4gZG91YmxlIGoxIChkb3VibGUp IDsgZXh0ZXJuIGRvdWJsZSBfX2oxIChkb3VibGUpIDsKZXh0ZXJuIGRvdWJsZSBqbiAoaW50LCBk b3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX2puIChpbnQsIGRvdWJsZSkgOwpleHRlcm4gZG91Ymxl IHkwIChkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX3kwIChkb3VibGUpIDsKZXh0ZXJuIGRvdWJs ZSB5MSAoZG91YmxlKSA7IGV4dGVybiBkb3VibGUgX195MSAoZG91YmxlKSA7CmV4dGVybiBkb3Vi bGUgeW4gKGludCwgZG91YmxlKSA7IGV4dGVybiBkb3VibGUgX195biAoaW50LCBkb3VibGUpIDsK CgoKCgpleHRlcm4gZG91YmxlIGVyZiAoZG91YmxlKSA7IGV4dGVybiBkb3VibGUgX19lcmYgKGRv dWJsZSkgOwpleHRlcm4gZG91YmxlIGVyZmMgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fZXJm YyAoZG91YmxlKSA7CmV4dGVybiBkb3VibGUgbGdhbW1hIChkb3VibGUpIDsgZXh0ZXJuIGRvdWJs ZSBfX2xnYW1tYSAoZG91YmxlKSA7CgoKCmV4dGVybiBkb3VibGUgdGdhbW1hIChkb3VibGUpIDsg ZXh0ZXJuIGRvdWJsZSBfX3RnYW1tYSAoZG91YmxlKSA7CgoKCgpleHRlcm4gZG91YmxlIGdhbW1h IChkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX2dhbW1hIChkb3VibGUpIDsKCgoKCgoKZXh0ZXJu IGRvdWJsZSBsZ2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIDsgZXh0ZXJuIGRvdWJs ZSBfX2xnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgOwoKCgoKCgpleHRlcm4gZG91 YmxlIHJpbnQgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX3JpbnQgKGRvdWJsZSBfX3gp IDsKCgpleHRlcm4gZG91YmxlIG5leHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dGFmdGVyIChkb3Vi bGUgX194LCBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4g ZG91YmxlIG5leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dHRvd2FyZCAoZG91YmxlIF9f eCwgbG9uZyBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVy biBkb3VibGUgcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSA7IGV4dGVybiBkb3Vi bGUgX19yZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsKCgoKZXh0ZXJuIGRvdWJs ZSBzY2FsYiAoZG91YmxlIF9feCwgZG91YmxlIF9fbikgOyBleHRlcm4gZG91YmxlIF9fc2NhbGIg KGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIDsKCgoKCmV4dGVybiBkb3VibGUgc2NhbGJuIChkb3Vi bGUgX194LCBpbnQgX19uKSA7IGV4dGVybiBkb3VibGUgX19zY2FsYm4gKGRvdWJsZSBfX3gsIGlu dCBfX24pIDsKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFp bi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgMTUxCgoKCmV4dGVybiBpbnQgaWxvZ2IgKGRv dWJsZSBfX3gpIDsgZXh0ZXJuIGludCBfX2lsb2diIChkb3VibGUgX194KSA7CgoKCgpleHRlcm4g ZG91YmxlIHNjYWxibG4gKGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgOyBleHRlcm4gZG91Ymxl IF9fc2NhbGJsbiAoZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSA7CgoKCmV4dGVybiBkb3VibGUg bmVhcmJ5aW50IChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19uZWFyYnlpbnQgKGRvdWJs ZSBfX3gpIDsKCgoKZXh0ZXJuIGRvdWJsZSByb3VuZCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91 YmxlIF9fcm91bmQgKGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJuIGRvdWJsZSB0cnVuYyAoZG91Ymxl IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fdHJ1bmMg KGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBkb3Vi bGUgcmVtcXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSA7IGV4dGVybiBk b3VibGUgX19yZW1xdW8gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIDsKCgoK CgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50IChkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGludCBf X2xyaW50IChkb3VibGUgX194KSA7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludCAoZG91Ymxl IF9feCkgOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludCAoZG91YmxlIF9feCkgOwoKCgpl eHRlcm4gbG9uZyBpbnQgbHJvdW5kIChkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGludCBfX2xy b3VuZCAoZG91YmxlIF9feCkgOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kIChkb3VibGUg X194KSA7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZCAoZG91YmxlIF9feCkgOwoKCgpl eHRlcm4gZG91YmxlIGZkaW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGRvdWJs ZSBfX2ZkaW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsKCgpleHRlcm4gZG91YmxlIGZtYXgg KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGRvdWJsZSBfX2ZtYXggKGRvdWJsZSBf X3gsIGRvdWJsZSBfX3kpIDsKCgpleHRlcm4gZG91YmxlIGZtaW4gKGRvdWJsZSBfX3gsIGRvdWJs ZSBfX3kpIDsgZXh0ZXJuIGRvdWJsZSBfX2ZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsK CgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnkgKGRvdWJsZSBfX3ZhbHVlKQogICAgIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdCAoZG91YmxlIF9fdmFs dWUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKMjAwMS0wOC0yNCAw MToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAg MTUyCgoKCgoKZXh0ZXJuIGRvdWJsZSBmbWEgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJs ZSBfX3opIDsgZXh0ZXJuIGRvdWJsZSBfX2ZtYSAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgZG91 YmxlIF9feikgOwojIDY0ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA4MiAiL3Vzci9pbmNs dWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1 NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IGFjb3NmIChm bG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fYWNvc2YgKGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZs b2F0IGFzaW5mIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fYXNpbmYgKGZsb2F0IF9feCkg OwoKZXh0ZXJuIGZsb2F0IGF0YW5mIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fYXRhbmYg KGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZsb2F0IGF0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gp IDsgZXh0ZXJuIGZsb2F0IF9fYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgOwoKCmV4dGVy biBmbG9hdCBjb3NmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fY29zZiAoZmxvYXQgX194 KSA7CgpleHRlcm4gZmxvYXQgc2luZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3NpbmYg KGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZsb2F0IHRhbmYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxv YXQgX190YW5mIChmbG9hdCBfX3gpIDsKCgoKZXh0ZXJuIHZvaWQgc2luY29zZiAoZmxvYXQgX194 LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KSA7IGV4dGVybiB2b2lkIF9fc2luY29zZiAo ZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KSA7CgoKCgoKCmV4dGVybiBm bG9hdCBjb3NoZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2Nvc2hmIChmbG9hdCBfX3gp IDsKCmV4dGVybiBmbG9hdCBzaW5oZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3Npbmhm IChmbG9hdCBfX3gpIDsKCmV4dGVybiBmbG9hdCB0YW5oZiAoZmxvYXQgX194KSA7IGV4dGVybiBm bG9hdCBfX3RhbmhmIChmbG9hdCBfX3gpIDsKCgoKZXh0ZXJuIGZsb2F0IGFjb3NoZiAoZmxvYXQg X194KSA7IGV4dGVybiBmbG9hdCBfX2Fjb3NoZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQg YXNpbmhmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fYXNpbmhmIChmbG9hdCBfX3gpIDsK CmV4dGVybiBmbG9hdCBhdGFuaGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19hdGFuaGYg KGZsb2F0IF9feCkgOwoKCgoKCmV4dGVybiBmbG9hdCBleHBmIChmbG9hdCBfX3gpIDsgZXh0ZXJu IGZsb2F0IF9fZXhwZiAoZmxvYXQgX194KSA7CgoKCmV4dGVybiBmbG9hdCBleHAxMGYgKGZsb2F0 IF9feCkgOyBleHRlcm4gZmxvYXQgX19leHAxMGYgKGZsb2F0IF9feCkgOwoKCgoKCgoKCjIwMDEt MDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAg IFBhZ2UgIDE1MwoKCmV4dGVybiBmbG9hdCBwb3cxMGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxv YXQgX19wb3cxMGYgKGZsb2F0IF9feCkgOwoKCgpleHRlcm4gZmxvYXQgZnJleHBmIChmbG9hdCBf X3gsIGludCAqX19leHBvbmVudCkgOyBleHRlcm4gZmxvYXQgX19mcmV4cGYgKGZsb2F0IF9feCwg aW50ICpfX2V4cG9uZW50KSA7CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoZmxvYXQgX194LCBpbnQg X19leHBvbmVudCkgOyBleHRlcm4gZmxvYXQgX19sZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhw b25lbnQpIDsKCgpleHRlcm4gZmxvYXQgbG9nZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBf X2xvZ2YgKGZsb2F0IF9feCkgOwoKCmV4dGVybiBmbG9hdCBsb2cxMGYgKGZsb2F0IF9feCkgOyBl eHRlcm4gZmxvYXQgX19sb2cxMGYgKGZsb2F0IF9feCkgOwoKCmV4dGVybiBmbG9hdCBtb2RmZiAo ZmxvYXQgX194LCBmbG9hdCAqX19pcHRyKSA7IGV4dGVybiBmbG9hdCBfX21vZGZmIChmbG9hdCBf X3gsIGZsb2F0ICpfX2lwdHIpIDsKCgoKZXh0ZXJuIGZsb2F0IGV4cG0xZiAoZmxvYXQgX194KSA7 IGV4dGVybiBmbG9hdCBfX2V4cG0xZiAoZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0IGxvZzFw ZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2xvZzFwZiAoZmxvYXQgX194KSA7CgoKZXh0 ZXJuIGZsb2F0IGxvZ2JmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fbG9nYmYgKGZsb2F0 IF9feCkgOwoKCgoKZXh0ZXJuIGZsb2F0IGV4cDJmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0 IF9fZXhwMmYgKGZsb2F0IF9feCkgOwoKCmV4dGVybiBmbG9hdCBsb2cyZiAoZmxvYXQgX194KSA7 IGV4dGVybiBmbG9hdCBfX2xvZzJmIChmbG9hdCBfX3gpIDsKCgoKCgoKZXh0ZXJuIGZsb2F0IHBv d2YgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7IGV4dGVybiBmbG9hdCBfX3Bvd2YgKGZsb2F0IF9f eCwgZmxvYXQgX195KSA7CgoKZXh0ZXJuIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpIDsgZXh0ZXJu IGZsb2F0IF9fc3FydGYgKGZsb2F0IF9feCkgOwoKCgpleHRlcm4gZmxvYXQgaHlwb3RmIChmbG9h dCBfX3gsIGZsb2F0IF9feSkgOyBleHRlcm4gZmxvYXQgX19oeXBvdGYgKGZsb2F0IF9feCwgZmxv YXQgX195KSA7CgoKCgpleHRlcm4gZmxvYXQgY2JydGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxv YXQgX19jYnJ0ZiAoZmxvYXQgX194KSA7CgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAg ICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE1NAoKCgoKCgpl eHRlcm4gZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19jZWlsZiAoZmxv YXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0IGZhYnNmIChmbG9hdCBfX3gpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fZmFic2YgKGZsb2F0IF9feCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCkgOyBl eHRlcm4gZmxvYXQgX19mbG9vcmYgKGZsb2F0IF9feCkgOwoKCmV4dGVybiBmbG9hdCBmbW9kZiAo ZmxvYXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJuIGZsb2F0IF9fZm1vZGYgKGZsb2F0IF9feCwg ZmxvYXQgX195KSA7CgoKCgpleHRlcm4gaW50IF9faXNpbmZmIChmbG9hdCBfX3ZhbHVlKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWYgKGZsb2F0IF9f dmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmZm IChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGlu dCBmaW5pdGVmIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK CgoKCgpleHRlcm4gZmxvYXQgaW5mbmFuZiAoaW50IF9fZXJyb3IpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9faW5mbmFuZiAoaW50IF9fZXJyb3IpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwgZmxv YXQgX195KSA7IGV4dGVybiBmbG9hdCBfX2RyZW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOwoK CgpleHRlcm4gZmxvYXQgc2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9f c2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIDsKCgoKCmV4dGVybiBmbG9hdCBjb3B5c2lnbmYgKGZs b2F0IF9feCwgZmxvYXQgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBm bG9hdCBfX2NvcHlzaWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCgoKCmV4dGVybiBmbG9hdCBuYW5mIChfX2NvbnN0IGNoYXIgKl9fdGFnYikg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19uYW5mIChfX2NvbnN0 IGNoYXIgKl9fdGFnYikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKCjIwMDEt MDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAg IFBhZ2UgIDE1NQoKCgoKCmV4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmYgKGZsb2F0IF9fdmFs dWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgajBmIChmbG9h dCkgOyBleHRlcm4gZmxvYXQgX19qMGYgKGZsb2F0KSA7CmV4dGVybiBmbG9hdCBqMWYgKGZsb2F0 KSA7IGV4dGVybiBmbG9hdCBfX2oxZiAoZmxvYXQpIDsKZXh0ZXJuIGZsb2F0IGpuZiAoaW50LCBm bG9hdCkgOyBleHRlcm4gZmxvYXQgX19qbmYgKGludCwgZmxvYXQpIDsKZXh0ZXJuIGZsb2F0IHkw ZiAoZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9feTBmIChmbG9hdCkgOwpleHRlcm4gZmxvYXQgeTFm IChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX195MWYgKGZsb2F0KSA7CmV4dGVybiBmbG9hdCB5bmYg KGludCwgZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9feW5mIChpbnQsIGZsb2F0KSA7CgoKCgoKZXh0 ZXJuIGZsb2F0IGVyZmYgKGZsb2F0KSA7IGV4dGVybiBmbG9hdCBfX2VyZmYgKGZsb2F0KSA7CmV4 dGVybiBmbG9hdCBlcmZjZiAoZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9fZXJmY2YgKGZsb2F0KSA7 CmV4dGVybiBmbG9hdCBsZ2FtbWFmIChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX19sZ2FtbWFmIChm bG9hdCkgOwoKCgpleHRlcm4gZmxvYXQgdGdhbW1hZiAoZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9f dGdhbW1hZiAoZmxvYXQpIDsKCgoKCmV4dGVybiBmbG9hdCBnYW1tYWYgKGZsb2F0KSA7IGV4dGVy biBmbG9hdCBfX2dhbW1hZiAoZmxvYXQpIDsKCgoKCgoKZXh0ZXJuIGZsb2F0IGxnYW1tYWZfciAo ZmxvYXQsIGludCAqX19zaWduZ2FtcCkgOyBleHRlcm4gZmxvYXQgX19sZ2FtbWFmX3IgKGZsb2F0 LCBpbnQgKl9fc2lnbmdhbXApIDsKCgoKCgoKZXh0ZXJuIGZsb2F0IHJpbnRmIChmbG9hdCBfX3gp IDsgZXh0ZXJuIGZsb2F0IF9fcmludGYgKGZsb2F0IF9feCkgOwoKCmV4dGVybiBmbG9hdCBuZXh0 YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OyBleHRlcm4gZmxvYXQgX19uZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGZsb2F0IG5leHR0b3dhcmRmIChmbG9hdCBf X3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4g ZmxvYXQgX19uZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGZsb2F0IHJlbWFpbmRlcmYgKGZsb2F0IF9f eCwgZmxvYXQgX195KSA7IGV4dGVybiBmbG9hdCBfX3JlbWFpbmRlcmYgKGZsb2F0IF9feCwgZmxv YXQgX195KSA7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWlu Lm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAxNTYKCgoKCgpleHRlcm4gZmxvYXQgc2NhbGJm IChmbG9hdCBfX3gsIGZsb2F0IF9fbikgOyBleHRlcm4gZmxvYXQgX19zY2FsYmYgKGZsb2F0IF9f eCwgZmxvYXQgX19uKSA7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJuZiAoZmxvYXQgX194LCBpbnQg X19uKSA7IGV4dGVybiBmbG9hdCBfX3NjYWxibmYgKGZsb2F0IF9feCwgaW50IF9fbikgOwoKCgpl eHRlcm4gaW50IGlsb2diZiAoZmxvYXQgX194KSA7IGV4dGVybiBpbnQgX19pbG9nYmYgKGZsb2F0 IF9feCkgOwoKCgoKZXh0ZXJuIGZsb2F0IHNjYWxibG5mIChmbG9hdCBfX3gsIGxvbmcgaW50IF9f bikgOyBleHRlcm4gZmxvYXQgX19zY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIDsK CgoKZXh0ZXJuIGZsb2F0IG5lYXJieWludGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19u ZWFyYnlpbnRmIChmbG9hdCBfX3gpIDsKCgoKZXh0ZXJuIGZsb2F0IHJvdW5kZiAoZmxvYXQgX194 KSA7IGV4dGVybiBmbG9hdCBfX3JvdW5kZiAoZmxvYXQgX194KSA7CgoKCmV4dGVybiBmbG9hdCB0 cnVuY2YgKGZsb2F0IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxv YXQgX190cnVuY2YgKGZsb2F0IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoK ZXh0ZXJuIGZsb2F0IHJlbXF1b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVvKSA7 IGV4dGVybiBmbG9hdCBfX3JlbXF1b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVv KSA7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludGYgKGZsb2F0IF9feCkgOyBleHRlcm4gbG9u ZyBpbnQgX19scmludGYgKGZsb2F0IF9feCkgOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnRm IChmbG9hdCBfX3gpIDsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRmIChmbG9hdCBfX3gp IDsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3VuZGYgKGZsb2F0IF9feCkgOyBleHRlcm4gbG9uZyBp bnQgX19scm91bmRmIChmbG9hdCBfX3gpIDsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZGYg KGZsb2F0IF9feCkgOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmRmIChmbG9hdCBfX3gp IDsKCgoKZXh0ZXJuIGZsb2F0IGZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOyBleHRlcm4g ZmxvYXQgX19mZGltZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsKCgpleHRlcm4gZmxvYXQgZm1h eGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7IGV4dGVybiBmbG9hdCBfX2ZtYXhmIChmbG9hdCBf X3gsIGZsb2F0IF9feSkgOwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAg ICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE1NwoKCgpleHRlcm4gZmxvYXQg Zm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7IGV4dGVybiBmbG9hdCBfX2ZtaW5mIChmbG9h dCBfX3gsIGZsb2F0IF9feSkgOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWYgKGZsb2F0IF9f dmFsdWUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19z aWduYml0ZiAoZmxvYXQgX192YWx1ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKCmV4dGVybiBmbG9hdCBmbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQgX196KSA7 IGV4dGVybiBmbG9hdCBfX2ZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opIDsK IyA4MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgOTkgIi91c3IvaW5jbHVkZS9tYXRoLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5j bHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJsZSBhY29zbCAobG9uZyBk b3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NsIChsb25nIGRvdWJsZSBfX3gp IDsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2lubCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBs b25nIGRvdWJsZSBfX2FzaW5sIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25nIGRvdWJs ZSBhdGFubCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5sIChs b25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuMmwgKGxvbmcgZG91Ymxl IF9feSwgbG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW4ybCAobG9u ZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUgY29z bCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2wgKGxvbmcgZG91 YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmwgKGxvbmcgZG91YmxlIF9feCkgOyBl eHRlcm4gbG9uZyBkb3VibGUgX19zaW5sIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25n IGRvdWJsZSB0YW5sIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFu bCAobG9uZyBkb3VibGUgX194KSA7CgoKCmV4dGVybiB2b2lkIHNpbmNvc2wgKGxvbmcgZG91Ymxl IF9feCwgbG9uZyBkb3VibGUgKl9fc2lueCwgbG9uZyBkb3VibGUgKl9fY29zeCkgOyBleHRlcm4g dm9pZCBfX3NpbmNvc2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9fc2lueCwgbG9u ZyBkb3VibGUgKl9fY29zeCkgOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY29zaGwgKGxvbmcg ZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3NobCAobG9uZyBkb3VibGUgX194 KSA7CgpleHRlcm4gbG9uZyBkb3VibGUgc2luaGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4g bG9uZyBkb3VibGUgX19zaW5obCAobG9uZyBkb3VibGUgX194KSA7CgpleHRlcm4gbG9uZyBkb3Vi bGUgdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5obCAo bG9uZyBkb3VibGUgX194KSA7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91 YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19hY29zaGwgKGxvbmcgZG91YmxlIF9feCkg OwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5obCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBs b25nIGRvdWJsZSBfX2FzaW5obCAobG9uZyBkb3VibGUgX194KSA7CgpleHRlcm4gbG9uZyBkb3Vi bGUgYXRhbmhsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmhs IChsb25nIGRvdWJsZSBfX3gpIDsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAg ICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE1OAoKCgoKCgoKZXh0ZXJu IGxvbmcgZG91YmxlIGV4cGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUg X19leHBsIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDEwbCAo bG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cDEwbCAobG9uZyBkb3Vi bGUgX194KSA7CgpleHRlcm4gbG9uZyBkb3VibGUgcG93MTBsIChsb25nIGRvdWJsZSBfX3gpIDsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93MTBsIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJu IGxvbmcgZG91YmxlIGZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIDsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZnJleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCAqX19leHBv bmVudCkgOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50 IF9fZXhwb25lbnQpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGRleHBsIChsb25nIGRvdWJsZSBf X3gsIGludCBfX2V4cG9uZW50KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2wgKGxvbmcgZG91 YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsIChsb25nIGRvdWJsZSBfX3gpIDsK CgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gbG9uZyBkb3Vi bGUgbW9kZmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgOyBleHRlcm4g bG9uZyBkb3VibGUgX19tb2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19pcHRy KSA7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBtMWwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRl cm4gbG9uZyBkb3VibGUgX19leHBtMWwgKGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25n IGRvdWJsZSBsb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19s b2cxcGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dibCAobG9u ZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2JsIChsb25nIGRvdWJsZSBf X3gpIDsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHAybCAobG9uZyBkb3VibGUgX194KSA7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2V4cDJsIChsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gbG9u ZyBkb3VibGUgbG9nMmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19s b2cybCAobG9uZyBkb3VibGUgX194KSA7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBwb3dsIChs b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19w b3dsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOwoKCmV4dGVybiBsb25nIGRv dWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRs IChsb25nIGRvdWJsZSBfX3gpIDsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAg ICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE1OQoKCgoKCmV4dGVybiBs b25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2h5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf X3kpIDsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjYnJ0bCAobG9uZyBkb3VibGUgX194KSA7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2NicnRsIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKCgoKZXh0ZXJu IGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fY2VpbGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmYWJzbCAo bG9uZyBkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25n IGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gbG9u ZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7IGV4dGVy biBsb25nIGRvdWJsZSBfX2Ztb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg OwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVsIChsb25nIGRvdWJsZSBf X3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5m bCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4 dGVybiBpbnQgZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGluZm5hbmwgKGludCBfX2Vycm9y KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2luZm5h bmwgKGludCBfX2Vycm9yKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxv bmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOyBleHRl cm4gbG9uZyBkb3VibGUgX19kcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp IDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpZ25pZmljYW5kbCAobG9uZyBkb3VibGUgX194KSA7 IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpZ25pZmljYW5kbCAobG9uZyBkb3VibGUgX194KSA7CgoK CgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAg ICAgICAgICAgICBQYWdlICAxNjAKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvcHlzaWdubCAo bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxv bmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGxv bmcgZG91YmxlIG5hbmwgKF9fY29uc3QgY2hhciAqX190YWdiKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25hbmwgKF9fY29uc3QgY2hhciAqX190YWdi KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW5sIChs b25nIGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVy biBpbnQgaXNuYW5sIChsb25nIGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGowbCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fajBsIChsb25nIGRvdWJsZSkgOwpleHRlcm4gbG9uZyBkb3VibGUgajFsIChs b25nIGRvdWJsZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19qMWwgKGxvbmcgZG91YmxlKSA7CmV4 dGVybiBsb25nIGRvdWJsZSBqbmwgKGludCwgbG9uZyBkb3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fam5sIChpbnQsIGxvbmcgZG91YmxlKSA7CmV4dGVybiBsb25nIGRvdWJsZSB5MGwgKGxv bmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kwbCAobG9uZyBkb3VibGUpIDsKZXh0 ZXJuIGxvbmcgZG91YmxlIHkxbCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f eTFsIChsb25nIGRvdWJsZSkgOwpleHRlcm4gbG9uZyBkb3VibGUgeW5sIChpbnQsIGxvbmcgZG91 YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3lubCAoaW50LCBsb25nIGRvdWJsZSkgOwoKCgoK CmV4dGVybiBsb25nIGRvdWJsZSBlcmZsIChsb25nIGRvdWJsZSkgOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19lcmZsIChsb25nIGRvdWJsZSkgOwpleHRlcm4gbG9uZyBkb3VibGUgZXJmY2wgKGxvbmcg ZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2VyZmNsIChsb25nIGRvdWJsZSkgOwpleHRl cm4gbG9uZyBkb3VibGUgbGdhbW1hbCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fbGdhbW1hbCAobG9uZyBkb3VibGUpIDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRnYW1tYWwg KGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RnYW1tYWwgKGxvbmcgZG91Ymxl KSA7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZ2FtbWFsIChsb25nIGRvdWJsZSkgOyBleHRlcm4g bG9uZyBkb3VibGUgX19nYW1tYWwgKGxvbmcgZG91YmxlKSA7CgoKCgoKCmV4dGVybiBsb25nIGRv dWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIDsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fbGdhbW1hbF9yIChsb25nIGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSA7CgoK CgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAg ICAgICAgICAgICAgICAgIFBhZ2UgIDE2MQoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmludGwgKGxv bmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19yaW50bCAobG9uZyBkb3VibGUg X194KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHRhZnRlcmwgKGxvbmcgZG91YmxlIF9feCwg bG9uZyBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25n IGRvdWJsZSBfX25leHRhZnRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gbG9uZyBkb3VibGUgbmV4dHRvd2Fy ZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25leHR0b3dhcmRsIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRl cm4gbG9uZyBkb3VibGUgcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf X3kpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194LCBs b25nIGRvdWJsZSBfX3kpIDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibCAobG9uZyBkb3Vi bGUgX194LCBsb25nIGRvdWJsZSBfX24pIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsIChs b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbikgOwoKCgoKZXh0ZXJuIGxvbmcgZG91Ymxl IHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikgOyBleHRlcm4gbG9uZyBkb3VibGUg X19zY2FsYm5sIChsb25nIGRvdWJsZSBfX3gsIGludCBfX24pIDsKCgoKZXh0ZXJuIGludCBpbG9n YmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gaW50IF9faWxvZ2JsIChsb25nIGRvdWJsZSBf X3gpIDsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYmxubCAobG9uZyBkb3VibGUgX194LCBs b25nIGludCBfX24pIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsbmwgKGxvbmcgZG91Ymxl IF9feCwgbG9uZyBpbnQgX19uKSA7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBuZWFyYnlpbnRsIChs b25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmVhcmJ5aW50bCAobG9uZyBk b3VibGUgX194KSA7CgoKCmV4dGVybiBsb25nIGRvdWJsZSByb3VuZGwgKGxvbmcgZG91YmxlIF9f eCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19yb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgpl eHRlcm4gbG9uZyBkb3VibGUgdHJ1bmNsIChsb25nIGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdHJ1bmNsIChsb25nIGRvdWJsZSBf X3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBy ZW1xdW9sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50ICpfX3F1bykgOyBl eHRlcm4gbG9uZyBkb3VibGUgX19yZW1xdW9sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl IF9feSwgaW50ICpfX3F1bykgOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnRsIChsb25nIGRv dWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIDsK ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50bCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBs b25nIGxvbmcgaW50IF9fbGxyaW50bCAobG9uZyBkb3VibGUgX194KSA7CgoKCgoKCgoKCjIwMDEt MDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAg IFBhZ2UgIDE2MgoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSA7 IGV4dGVybiBsb25nIGludCBfX2xyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgOwpleHRlcm4gbG9u ZyBsb25nIGludCBsbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGxvbmcg aW50IF9fbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgpleHRlcm4gbG9uZyBkb3VibGUg ZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7IGV4dGVybiBsb25nIGRv dWJsZSBfX2ZkaW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOwoKCmV4dGVy biBsb25nIGRvdWJsZSBmbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1heGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtaW5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg ZG91YmxlIF9feSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWlubCAobG9uZyBkb3VibGUgX194 LCBsb25nIGRvdWJsZSBfX3kpIDsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlsIChsb25nIGRv dWJsZSBfX3ZhbHVlKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g aW50IF9fc2lnbmJpdGwgKGxvbmcgZG91YmxlIF9fdmFsdWUpCiAgICAgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1hbCAobG9uZyBkb3VibGUgX194 LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgOyBleHRlcm4gbG9uZyBkb3VibGUg X19mbWFsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196 KSA7CiMgMTAwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyAxMTMgIi91c3IvaW5jbHVkZS9t YXRoLmgiIDMKZXh0ZXJuIGludCBzaWduZ2FtOwojIDE1NCAiL3Vzci9pbmNsdWRlL21hdGguaCIg MwplbnVtCiAgewogICAgRlBfTkFOLAoKICAgIEZQX0lORklOSVRFLAoKICAgIEZQX1pFUk8sCgog ICAgRlBfU1VCTk9STUFMLAoKICAgIEZQX05PUk1BTAoKICB9OwojIDI0MCAiL3Vzci9pbmNsdWRl L21hdGguaCIgMwp0eXBlZGVmIGVudW0KewogIF9JRUVFXyA9IC0xLAogIF9TVklEXywKICBfWE9Q RU5fLAogIF9QT1NJWF8sCiAgX0lTT0NfCn0gX0xJQl9WRVJTSU9OX1RZUEU7CgoKCgoKCgoKCgoK MjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAg ICAgICAgUGFnZSAgMTYzCgoKZXh0ZXJuIF9MSUJfVkVSU0lPTl9UWVBFIF9MSUJfVkVSU0lPTjsK IyAyNjUgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKc3RydWN0IGV4Y2VwdGlvbgoKICB7CiAgICBp bnQgdHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3VibGUgYXJnMTsKICAgIGRvdWJsZSBhcmcy OwogICAgZG91YmxlIHJldHZhbDsKICB9OwoKCgoKZXh0ZXJuIGludCBtYXRoZXJyIChzdHJ1Y3Qg ZXhjZXB0aW9uICpfX2V4Yyk7CiMgMzUwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAxIDMKIyAxMjcgIi91c3IvaW5jbHVkZS9iaXRz L21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgaW50Cl9fc2lnbmJpdGYgKGZsb2F0IF9f eCkKewogIF9fZXh0ZW5zaW9uX18gdW5pb24geyBmbG9hdCBfX2Y7IGludCBfX2k7IH0gX191ID0g eyBfX2Y6IF9feCB9OwogIHJldHVybiBfX3UuX19pIDwgMDsKfQpleHRlcm4gX19pbmxpbmUgaW50 Cl9fc2lnbmJpdCAoZG91YmxlIF9feCkKewogIF9fZXh0ZW5zaW9uX18gdW5pb24geyBkb3VibGUg X19kOyBpbnQgX19pWzJdOyB9IF9fdSA9IHsgX19kOiBfX3ggfTsKICByZXR1cm4gX191Ll9faVsx XSA8IDA7Cn0KZXh0ZXJuIF9faW5saW5lIGludApfX3NpZ25iaXRsIChsb25nIGRvdWJsZSBfX3gp CnsKICBfX2V4dGVuc2lvbl9fIHVuaW9uIHsgbG9uZyBkb3VibGUgX19sOyBpbnQgX19pWzNdOyB9 IF9fdSA9IHsgX19sOiBfX3ggfTsKICByZXR1cm4gKF9fdS5fX2lbMl0gJiAweDgwMDApICE9IDA7 Cn0KIyAyOTEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxp bmUgZG91YmxlIF9fc2duIChkb3VibGUpIDsgZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBfX3NnbiAo ZG91YmxlIF9feCkgeyByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAg OiAtMS4wKTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgX19zZ25mIChmbG9hdCkgOyBleHRlcm4g X19pbmxpbmUgZmxvYXQgX19zZ25mIChmbG9hdCBfX3gpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAw LjAgOiAoX194ID4gMC4wID8gMS4wIDogLTEuMCk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91 YmxlIF9fc2dubCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9f c2dubCAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+ IDAuMCA/IDEuMCA6IC0xLjApOyB9CiMgNDI2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5l LmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9f eCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm cGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIp OyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgYXRhbjJmIChmbG9hdCBf X3ksIGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3Zv bGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195 KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3Vi bGUgYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBs b25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAo X192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1 ZTsgfQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91YmxlIF9f eSwgbG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNt IF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUi IChfX3kpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9CgoKZXh0ZXJuIF9faW5saW5lIGRv dWJsZSBmbW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3RzdwklJWF4 XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1 IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUg ZmxvYXQgZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3RzdwklJWF4 XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1 IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUg bG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVt XG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1 ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsg fQojIDQ0MSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGlu ZSBkb3VibGUgc3FydCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9f YXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7 IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgc3FydGYgKGZsb2F0IF9f eCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNxcnQi IDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IGV4dGVy biBfX2lubGluZSBsb25nIGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVy IGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQi IChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KZXh0ZXJuIF9faW5s aW5lIGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25n IGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19y ZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9CgoKZXh0ZXJuIF9faW5saW5l IGRvdWJsZSBmYWJzIChkb3VibGUgX194KSB7IHJldHVybiBfX2J1aWx0aW5fZmFicyAoX194KTsg fQpleHRlcm4gX19pbmxpbmUgZmxvYXQgZmFic2YgKGZsb2F0IF9feCkgeyByZXR1cm4gX19idWls dGluX2ZhYnNmIChfX3gpOyB9CmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBmYWJzbCAobG9u ZyBkb3VibGUgX194KSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2wgKF9feCk7IH0KZXh0ZXJuIF9f aW5saW5lIGxvbmcgZG91YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX19i dWlsdGluX2ZhYnNsIChfX3gpOyB9CiMgNDY3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5l LmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBhdGFuIChkb3VibGUgX194KSB7IHJlZ2lzdGVy IGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9 dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0g ZXh0ZXJuIF9faW5saW5lIGZsb2F0IGF0YW5mIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgZmxvYXQg X19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jl c3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9IGV4dGVybiBf X2lubGluZSBsb25nIGRvdWJsZSBhdGFubCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxv bmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQxOyBmcGF0YW4iIDog Ij10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsg fQoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAg ICAgICAgICAgICAgICAgUGFnZSAgMTY0CgoKCmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBf X3NnbjFsIChsb25nIGRvdWJsZSkgOyBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ24x bCAobG9uZyBkb3VibGUgX194KSB7IF9fZXh0ZW5zaW9uX18gdW5pb24geyBsb25nIGRvdWJsZSBf X3hsZDsgdW5zaWduZWQgaW50IF9feGlbM107IH0gX19uID0geyBfX3hsZDogX194IH07IF9fbi5f X3hpWzJdID0gKF9fbi5fX3hpWzJdICYgMHg4MDAwKSB8IDB4M2ZmZjsgX19uLl9feGlbMV0gPSAw eDgwMDAwMDAwOyBfX24uX194aVswXSA9IDA7IHJldHVybiBfX24uX194bGQ7IH0KIyA0OTMgIi91 c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlIGZs b29yIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRp bGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50 IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBf X2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxk Y3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDog Ij10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAi IDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0 IGZsb29yZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9s YXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQg aW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykp OyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3ZvbGF0aWxlICgi ZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQi IDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cg JTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGxv bmcgZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUg dW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAi IDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2Fz bSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xh dGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3Zv bGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1 MDQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91 YmxlIGNlaWwgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192 b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9y dCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3 KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4MDA7IF9fYXNtIF9fdm9sYXRpbGUg KCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGlu dCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRj dyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUg ZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBf X3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNo b3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9f Y3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGls ZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5k aW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZs ZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGlu ZSBsb25nIGRvdWJsZSBjZWlsbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91 YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRp bGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cg JTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBf X2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192 b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBf X3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0K IyA1MjIgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUg ZG91YmxlCmxkZXhwIChkb3VibGUgX194LCBpbnQgX195KQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUp IDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195KSk7IHJldHVybiBfX3ZhbHVlOwp9 CiMgNTQwICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5l IGRvdWJsZSBsb2cxcCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVl OyBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAwLjUgKiAxLjQxNDIxMzU2MjM3MzA5NTA0ODgw TCkgX192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7IGVsc2UgX19hc20gX192b2xhdGlsZV9fICgi ZmxkbG4yXG5cdCIgImZ4Y2hcblx0IiAiZnlsMnhwMSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAo X194KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQg bG9nMXBmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9f ZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFs dWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxu XHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAi c3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGxv ZzFwbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IGlm IChfX2ZhYnNsIChfX3gpID49IDEuMCAtIDAuNSAqIDEuNDE0MjEzNTYyMzczMDk1MDQ4ODBMKSBf X3ZhbHVlID0gbG9nbCAoMS4wICsgX194KTsgZWxzZSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRs bjJcblx0IiAiZnhjaFxuXHQiICJmeWwyeHAxIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gp IDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9CiMgNTU0ICIvdXNyL2luY2x1ZGUvYml0cy9t YXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBhc2luaCAoZG91YmxlIF9feCkg eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFw bCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KSAq IF9fc2duMWwgKF9feCkpOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBhc2luaGYgKGZsb2F0IF9f eCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxv ZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195 KSAqIF9fc2duMWwgKF9feCkpOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhc2luaGwg KGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChf X3gpOyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEu MCkgKyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9CgoKCgpleHRlcm4gX19pbmxpbmUg ZG91YmxlIGFjb3NoIChkb3VibGUgX194KSB7IHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChf X3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0 IGFjb3NoZiAoZmxvYXQgX194KSB7IHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3ggLSAx LjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91Ymxl IGFjb3NobCAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChf X3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0KCgpleHRlcm4gX19pbmxpbmUgZG91 YmxlIGF0YW5oIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFi c2wgKF9feCk7IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195 KSkgKiBfX3NnbjFsIChfX3gpOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBhdGFuaGYgKGZsb2F0 IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4g LTAuNSAqIGxvZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194 KTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbmhsIChsb25nIGRvdWJsZSBfX3gp IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIC0wLjUg KiBsb2cxcGwgKC0oX195ICsgX195KSAvICgxLjAgKyBfX3kpKSAqIF9fc2duMWwgKF9feCk7IH0K CgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp IHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9feSAqIF9feSk7IH0gZXh0ZXJuIF9faW5s aW5lIGZsb2F0IGh5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIF9fc3FydGwg KF9feCAqIF9feCArIF9feSAqIF9feSk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGh5 cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIF9fc3FydGwg KF9feCAqIF9feCArIF9feSAqIF9feSk7IH0KCmV4dGVybiBfX2lubGluZSBkb3VibGUgbG9nYiAo ZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25n IGRvdWJsZSBfX2p1bms7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZ4dHJhY3Rcblx0IiA6ICI9dCIg KF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0g ZXh0ZXJuIF9faW5saW5lIGZsb2F0IGxvZ2JmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBk b3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0 aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIw IiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBs b2dibCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fanVuazsgX19hc20gX192b2xhdGlsZV9fICgiZnh0cmFjdFxu XHQiIDogIj10IiAoX19qdW5rKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4g X192YWx1ZTsgfQojIDU4NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVy biBfX2lubGluZSBmbG9hdApsZGV4cGYgKGZsb2F0IF9feCwgaW50IF9feSkKewogIHJlZ2lzdGVy IGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQi IChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiICgobG9uZyBkb3VibGUpIF9feSkpOyByZXR1cm4g X192YWx1ZTsKfQoKZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlCmxkZXhwbCAobG9uZyBkb3Vi bGUgX194LCBpbnQgX195KQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20g X192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIg KChsb25nIGRvdWJsZSkgX195KSk7IHJldHVybiBfX3ZhbHVlOwp9CiMgNjA4ICIvdXNyL2luY2x1 ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CmxyaW50ZiAo ZmxvYXQgX194KQp7CiAgbG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18g KCJmaXN0cGwgJTAiIDogIj1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0 dXJuIF9fbHJpbnRyZXM7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CmxyaW50IChkb3VibGUg X194KQp7CiAgbG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0 cGwgJTAiIDogIj1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9f bHJpbnRyZXM7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CmxyaW50bCAobG9uZyBkb3VibGUg X194KQoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAg ICAgICAgICAgICAgICAgICAgUGFnZSAgMTY1CgoKewogIGxvbmcgaW50IF9fbHJpbnRyZXM7IF9f YXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsICUwIiA6ICI9bSIgKF9fbHJpbnRyZXMpIDogInQi IChfX3gpIDogInN0Iik7IHJldHVybiBfX2xyaW50cmVzOwp9CiMgNjMxICIvdXNyL2luY2x1ZGUv Yml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKbGxyaW50 ZiAoZmxvYXQgX194KQp7CiAgbG9uZyBsb25nIGludCBfX2xscmludHJlczsgX19hc21fXyBfX3Zv bGF0aWxlX18gKCJmaXN0cGxsICUwIiA6ICI9bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194KSA6 ICJzdCIpOyByZXR1cm4gX19sbHJpbnRyZXM7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBp bnQKbGxyaW50IChkb3VibGUgX194KQp7CiAgbG9uZyBsb25nIGludCBfX2xscmludHJlczsgX19h c21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGxsICUwIiA6ICI9bSIgKF9fbGxyaW50cmVzKSA6ICJ0 IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19sbHJpbnRyZXM7Cn0KZXh0ZXJuIF9faW5saW5lIGxv bmcgbG9uZyBpbnQKbGxyaW50bCAobG9uZyBkb3VibGUgX194KQp7CiAgbG9uZyBsb25nIGludCBf X2xscmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGxsICUwIiA6ICI9bSIgKF9f bGxyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19sbHJpbnRyZXM7Cn0KCgoK CgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg eyByZWdpc3RlciBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgaW50IF9fY2xvYmJlcmVkOyBfX2Fz bSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbTFcblx0IiAiZnN0c3cJJSVheFxuXHQiICJzYWhmXG5c dCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZhIiAoX19jbG9iYmVyZWQpIDogIjAiIChf X3gpLCAidSIgKF9feSkgOiAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5l IGZsb2F0IGRyZW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyByZWdpc3RlciBkb3VibGUgX192 YWx1ZTsgcmVnaXN0ZXIgaW50IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglm cHJlbTFcblx0IiAiZnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9f dmFsdWUpLCAiPSZhIiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2Mi KTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGRyZW1sIChs b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgeyByZWdpc3RlciBkb3VibGUgX192YWx1 ZTsgcmVnaXN0ZXIgaW50IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJl bTFcblx0IiAiZnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFs dWUpLCAiPSZhIiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2MiKTsg cmV0dXJuIF9fdmFsdWU7IH0KIyA2NjYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIg MwpleHRlcm4gX19pbmxpbmUgaW50Cl9fZmluaXRlIChkb3VibGUgX194KQp7CiAgcmV0dXJuIChf X2V4dGVuc2lvbl9fCiAgICAgICAgICAoKCgoKHVuaW9uIHsgZG91YmxlIF9fZDsgaW50IF9faVsy XTsgfSkge19fZDogX194fSkuX19pWzFdCiAgICAgICAgICAgICB8IDB4ODAwZmZmZmZ1KSArIDEp ID4+IDMxKSk7Cn0KIyAzNTEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDI3ICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvbWlzYy5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRl L29iamMvb2JqYy5oIiAxCiMgMjggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9taXNjLmgiIDIK CiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4x L2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvbG9j YWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N5c2xp bWl0cy5oIiAxIDMKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTI1ICIvdXNyL2xvY2Fs L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9saW1pdHMu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9s aW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9p bmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAxNDQgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwoKCgoK CgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAg ICAgICAgICAgUGFnZSAgMTY2CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgi IDEgMwojIDEyNiAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9sb2Nh bF9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9saW1pdHMuaCIgMSAzCiMgMzcgIi91 c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAyIDMKIyAxMjcgIi91c3IvaW5jbHVkZS9iaXRz L3Bvc2l4MV9saW0uaCIgMiAzCiMgMTQ1ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoj IDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzCiMgMTQ5ICIvdXNyL2luY2x1 ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAx IDMKIyAzNCAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xp bS5oIiAyIDMKIyAxMzYgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMTM3ICIvdXNyL2luY2x1ZGUvYml0cy94 b3Blbl9saW0uaCIgMiAzCiMgMTUzICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDEyNiAi L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1 ZGUvbGltaXRzLmgiIDIgMwojIDggIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAiL3Vzci9sb2Nh bC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvbGltaXRz LmgiIDIgMwojIDMwICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvbWlzYy5oIiAyCiMgNDQgIi91 c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9taXNjLmgiCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o IiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Zl YXR1cmVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgoKIyAx ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5j bHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgNDIg Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRmbGFn cy5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy93YWl0c3RhdHVzLmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3Rh dHVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1 ZGUvYml0cy93YWl0c3RhdHVzLmgiIDIgMwoKdW5pb24gd2FpdAogIHsKICAgIGludCB3X3N0YXR1 czsKICAgIHN0cnVjdAogICAgICB7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAg ICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgMTY3CgoKICAgICAgICB1 bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6NzsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X2NvcmVk dW1wOjE7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19yZXRjb2RlOjg7CiAgICAgICAgdW5zaWdu ZWQgaW50OjE2OwoKCgoKCgoKICAgICAgfSBfX3dhaXRfdGVybWluYXRlZDsKICAgIHN0cnVjdAog ICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHZhbDo4OwogICAgICAgIHVuc2ln bmVkIGludCBfX3dfc3RvcHNpZzo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKICAg ICAgfSBfX3dhaXRfc3RvcHBlZDsKICB9OwojIDQ0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIg MwojIDY4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKdHlwZWRlZiB1bmlvbgogIHsKICAgIHVu aW9uIHdhaXQgKl9fdXB0cjsKICAgIGludCAqX19pcHRyOwogIH0gX19XQUlUX1NUQVRVUyBfX2F0 dHJpYnV0ZV9fICgoX190cmFuc3BhcmVudF91bmlvbl9fKSk7CiMgOTQgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMwp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsK ICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBs b25nIGludCByZW07CiAgfSBsZGl2X3Q7CgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVj dAogIHsKICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwoKCgoK CgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAg ICAgICAgICAgUGFnZSAgMTY4CgoKICB9IGxsZGl2X3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUvc3Rk bGliLmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSA7CgoK CmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBj aGFyICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4dGVuc2lvbl9f IGV4dGVybiBsb25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICAg ICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gZG91YmxlIHN0cnRv ZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSA7CgoKCmV4dGVybiBmbG9hdCBzdHJ0b2YgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyKSA7CgpleHRlcm4gbG9uZyBkb3VibGUgc3RydG9sZCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSA7CgoKCmV4dGVybiBsb25nIGludCBzdHJ0b2wg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSA7CgpleHRlcm4gdW5zaWdu ZWQgbG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LCBpbnQgX19iYXNlKQogICAgICAgICAgICA7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcg bG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i YXNlKSA7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRv dXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNl KQogICAgICAgICAgICA7CgoKCgoKCl9fZXh0ZW5zaW9uX18KCgoKCgoKCjIwMDEtMDgtMjQgMDE6 MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE2 OQoKCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19iYXNlKSA7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBs b25nIGxvbmcgaW50IHN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgICAgICAgIDsKIyAyMTEgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDIxMiAiL3Vzci9p bmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2wgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIDsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBf X3N0cnRvdWxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90 IF9fbG9jKSA7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9s IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSA7CgpfX2V4dGVu c2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfbCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9j KQogICAgICAgICAgICA7CgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2wgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgICAgICAgIDsKCmV4dGVybiBm bG9hdCBfX3N0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3Qg X19sb2MpIDsKCmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRfbCAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xv Y2FsZV90IF9fbG9jKSA7CgoKCgoKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICAgICAg ICAgOwpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgICAgICAgICA7CmV4dGVybiBsb25nIGRv dWJsZSBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLAoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFp bi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgMTcwCgoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIDsKCmV4dGVybiBsb25nIGludCBfX3N0cnRv bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoK CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsKCgoK Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoK Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9p bnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg X19iYXNlLCBpbnQgX19ncm91cCkKICAgICAgICAgICAgOwojIDI5NCAiL3Vzci9pbmNsdWRlL3N0 ZGxpYi5oIiAzCmV4dGVybiBfX2lubGluZSBkb3VibGUKc3RydG9kIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikKewogIHJldHVybiBf X3N0cnRvZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5l IGxvbmcgaW50CnN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0 cnRvbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpleHRlcm4gX19p bmxpbmUgdW5zaWduZWQgbG9uZyBpbnQKc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2Up CnsKICByZXR1cm4gX19zdHJ0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2Us IDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0CnN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpCnsKICByZXR1cm4gX19z dHJ0b2ZfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBs b25nIGRvdWJsZQpzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0cikKewoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAg ICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgMTcxCgoKICByZXR1 cm4gX19zdHJ0b2xkX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQoKCgpfX2V4dGVu c2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg aW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRw dHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQg bG9uZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVy biBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoK Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9sbCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs CiAgICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25w dHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5l IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwgKF9fY29uc3QgY2hhciAqIF9fcmVzdHJp Y3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgIGludCBfX2Jh c2UpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19i YXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBkb3VibGUKYXRvZiAoX19jb25zdCBjaGFyICpf X25wdHIpCnsKICByZXR1cm4gc3RydG9kIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSk7 Cn0KZXh0ZXJuIF9faW5saW5lIGludAphdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewogIHJl dHVybiAoaW50KSBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7Cn0K ZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CmF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7CiAg cmV0dXJuIHN0cnRvbCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCksIDEwKTsKfQoKCl9f ZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKYXRvbGwgKF9fY29uc3Qg Y2hhciAqX19ucHRyKQp7CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopICgodm9p ZCAqKTApLCAxMCk7Cn0KCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAg IG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE3MgoKCiMgMzg1ICIvdXNyL2luY2x1 ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgOwoKCmV4dGVy biBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDM5MiAiL3Vzci9p bmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IHJhbmRvbSAodm9pZCkg OwoKCmV4dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVkIGludCBfX3NlZWQpIDsKCgoKCgpleHRl cm4gY2hhciAqaW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVm LAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgOwoKCgpleHRlcm4g Y2hhciAqc2V0c3RhdGUgKGNoYXIgKl9fc3RhdGVidWYpIDsKCgoKCgoKCnN0cnVjdCByYW5kb21f ZGF0YQogIHsKICAgIGludDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJf dCAqc3RhdGU7CiAgICBpbnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJh bmRfc2VwOwogICAgaW50MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAo c3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAg ICBpbnQzMl90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgpleHRlcm4gaW50IHNyYW5kb21fciAo dW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgOwoKZXh0ZXJu IGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19yZXN0cmljdCBf X3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbiwKICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm KSA7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAg ICAgICAgICAgICAgICAgICBQYWdlICAxNzMKCgoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFy ICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJh bmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCgoKZXh0ZXJuIGludCByYW5kICh2b2lk KSA7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQgaW50IF9fc2VlZCkgOwoKCgpleHRlcm4g aW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIDsKCgoKCgoKCmV4dGVybiBkb3VibGUg ZHJhbmQ0OCAodm9pZCkgOwpleHRlcm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNob3J0IGlu dCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIDsKZXh0ZXJu IGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0 ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVu c2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9u ZyBpbnQgX19zZWVkdmFsKSA7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5z aWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNp Z25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgOwoKCgoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7 CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX194WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9f b2xkX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19jOwogICAgdW5zaWduZWQgc2hvcnQg aW50IF9faW5pdDsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19hOwogIH07CgoKZXh0ZXJu IGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIs CiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKZXh0 ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwK CgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAg ICAgICAgICAgICAgIFBhZ2UgIDE3NAoKCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9f cmVzdHJpY3QgX19yZXN1bHQpIDsKCgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5k NDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcg aW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNpZ25l ZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFu ZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25n IGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1 Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAg ICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBqcmFuZDQ4X3Ig KHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAg ICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGludCBzcmFuZDQ4 X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAg ICAgICAgICAgIDsKCmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3Nl ZWQxNnZbM10sCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVm ZmVyKSA7CgpleHRlcm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1b N10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikg OwojIDUzNyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lkICpyZWFsbG9jICh2 b2lkICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsK CmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9fcHRyKSA7CgoKCmV4dGVybiB2b2lkIGNmcmVlICh2 b2lkICpfX3B0cikgOwoKCgojIDEgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzCiMgMjIgIi91 c3IvaW5jbHVkZS9hbGxvY2EuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMK IyAyMyAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK IyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCgoKCgoKCmV4dGVybiB2b2lkICphbGxv Y2EgKHNpemVfdCBfX3NpemUpIDsKIyA1NDggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoK CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAg ICAgICAgICAgICAgICBQYWdlICAxNzUKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9f c2l6ZSkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBpbnQgcG9zaXhf bWVtYWxpZ24gKHZvaWQgKipfX21lbXB0ciwgc2l6ZV90IF9fYWxpZ25tZW50LCBzaXplX3QgX19z aXplKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJu IHZvaWQgYWJvcnQgKHZvaWQpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKZXh0 ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkgOwoKCgoKZXh0ZXJuIGludCBv bl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQg Kl9fYXJnKQogICAgICAgICAgICA7CgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVz KSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfRXhpdCAo aW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4g Y2hhciAqZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCgpleHRlcm4gY2hhciAqX19z ZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCgoKCmV4dGVybiBpbnQgcHV0 ZW52IChjaGFyICpfX3N0cmluZykgOwoKCgoKCmV4dGVybiBpbnQgc2V0ZW52IChfX2NvbnN0IGNo YXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19yZXBsYWNlKQogICAgICAg ICAgICA7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5t aSAgICAgICAgICAgICAgICAgICAgUGFnZSAgMTc2CgoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9f Y29uc3QgY2hhciAqX19uYW1lKSA7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIDsK IyA2MjQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFy ICpfX3RlbXBsYXRlKSA7CgoKCgoKCgpleHRlcm4gaW50IG1rc3RlbXAgKGNoYXIgKl9fdGVtcGxh dGUpIDsKIyA2NDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IG1rc3RlbXA2 NCAoY2hhciAqX190ZW1wbGF0ZSkgOwojIDY1MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4 dGVybiBjaGFyICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSA7CgoKCgpleHRlcm4gaW50IHN5 c3RlbSAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQpIDsKCgoKCgoKZXh0ZXJuIGNoYXIgKmNhbm9u aWNhbGl6ZV9maWxlX25hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CiMgNjczICIvdXNyL2lu Y2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3Qg X19yZXNvbHZlZCkgOwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0 IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJfZm5fdCBjb21wYXJp c29uX2ZuX3Q7CgoKCgoKZXh0ZXJuIHZvaWQgKmJzZWFyY2ggKF9fY29uc3Qgdm9pZCAqX19rZXks IF9fY29uc3Qgdm9pZCAqX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbm1l bWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgoKCgoKCjIwMDEt MDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAg IFBhZ2UgIDE3NwoKCgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9f bm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9f Y29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxvbmcgaW50IF9feCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBsbGFi cyAobG9uZyBsb25nIGludCBfX3gpCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKCgoKCmV4dGVybiBkaXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSkK ICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBs ZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAgICAgICAgICAgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gbGxkaXZfdCBs bGRpdiAobG9uZyBsb25nIGludCBfX251bWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsb25nIGxvbmcgaW50IF9fZGVub20pCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CiMgNzI5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNo YXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBf X2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwoKCgoK ZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19y ZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2ln bikgOwoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs IGNoYXIgKl9fYnVmKSA7CgoKCgpleHRlcm4gY2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFs dWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19k ZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcg ZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9f cmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwpleHRlcm4gY2hhciAq cWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIDsK CgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQg Kl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBf X3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19sZW4pIDsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4u bWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE3OAoKCmV4dGVybiBpbnQgZmN2dF9yIChkb3Vi bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAg ICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19i dWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIDsKCmV4dGVybiBpbnQgcWVjdnRf ciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAg IGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAg ICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgOwpleHRl cm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAg ICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9f c2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3Qg X19sZW4pIDsKCgoKCgoKZXh0ZXJuIGludCBtYmxlbiAoX19jb25zdCBjaGFyICpfX3MsIHNpemVf dCBfX24pIDsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywK ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBf X24pIDsKCgpleHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIDsK CgoKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsCiAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVf dCBfX24pIDsKCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAog ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2Nz LCBzaXplX3QgX19uKQogICAgICAgICAgICA7CgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKF9f Y29uc3QgY2hhciAqX19yZXNwb25zZSkgOwojIDgwOSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz CmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsCiAgICAg ICAgICAgICAgICAgICAgICBjaGFyICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLAogICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIDsKCgoKCgpleHRl cm4gdm9pZCBzZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIDsKCgoKCgoKCgoKCgoKMjAwMS0w OC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAg UGFnZSAgMTc5CgoKCgpleHRlcm4gaW50IHBvc2l4X29wZW5wdCAoaW50IF9fb2ZsYWcpIDsKCgoK CgoKCmV4dGVybiBpbnQgZ3JhbnRwdCAoaW50IF9fZmQpIDsKCgoKZXh0ZXJuIGludCB1bmxvY2tw dCAoaW50IF9fZmQpIDsKCgoKCmV4dGVybiBjaGFyICpwdHNuYW1lIChpbnQgX19mZCkgOwoKCgoK CgpleHRlcm4gaW50IHB0c25hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19i dWZsZW4pIDsKCgpleHRlcm4gaW50IGdldHB0ICh2b2lkKSA7CgoKCgoKCmV4dGVybiBpbnQgZ2V0 bG9hZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkgOwojIDQ1ICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvbWlzYy5oIiAyCiMgNTcgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9taXNjLmgiCnZvaWQgKnhtYWxsb2MgKHNpemVfdCBzaXplKTsKdm9pZCAqeG1hbGxvY19hdG9t aWMgKHNpemVfdCBzaXplKTsKdm9pZCAqeGNhbGxvYyAoc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6 ZSk7CnZvaWQgKnhyZWFsbG9jICh2b2lkICpidWYsIHNpemVfdCBzaXplKTsKdm9pZCB4ZnJlZSAo dm9pZCAqYnVmKTsKCgpjaGFyICpkcm9wZGlyIChjaGFyICpwYXRoKTsKCmNoYXIgKnhzdHJkdXAg KGNvbnN0IGNoYXIgKnN0cmluZyk7CiMgMTQ0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvbWlz Yy5oIgpjb25zdCBjaGFyICpmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnByb2dyYW1fbmFt ZSk7Cgp2b2lkIGRlYnVnYWJvcnQgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBsaW5l bm8sIGNvbnN0IGNoYXIgKmZ1bmN0aW9uKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKCnR5 cGVkZWYgaW50ICgqcXVpY2tzb3J0X2NvbXBhcl9mbl90KSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2 b2lkICopOwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4u bWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE4MAoKCmV4dGVybiB2b2lkIHF1aWNrc29ydCAo dm9pZCAqY29uc3QgcGJhc2UsIHNpemVfdCB0b3RhbF9lbGVtcywKICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3Qgc2l6ZSwgcXVpY2tzb3J0X2NvbXBhcl9mbl90IGNtcCk7CgoKCgoKCnN0YXRp YyBpbmxpbmUgQk9PTAppc0RpZ2l0IChjaGFyIGNoKQp7CiAgcmV0dXJuIGNoID49ICcwJyAmJiBj aCA8PSAnOSc7Cn0KCnN0YXRpYyBpbmxpbmUgQk9PTAppc1NwYWNlIChjaGFyIGNoKQp7CiAgcmV0 dXJuIGNoID09ICcgJyB8fCBjaCA9PSAnXHQnIHx8IGNoID09ICdcbicgfHwgY2ggPT0gJ1xyJyB8 fCBjaCA9PSAnXGYnOwp9CgpzdGF0aWMgaW5saW5lIEJPT0wKaXNVcHBlciAoY2hhciBjaCkKewog IHJldHVybiBjaCA+PSAnQScgJiYgY2ggPD0gJ1onOwp9CgpzdGF0aWMgaW5saW5lIEJPT0wKaXNM b3dlciAoY2hhciBjaCkKewogIHJldHVybiBjaCA+PSAnYScgJiYgY2ggPD0gJ3onOwp9CgpzdGF0 aWMgaW5saW5lIEJPT0wKaXNBbHBoYSAoY2hhciBjaCkKewogIHJldHVybiBpc1VwcGVyIChjaCkg fHwgaXNMb3dlciAoY2gpOwp9CgpzdGF0aWMgaW5saW5lIEJPT0wKaXNBbG51bSAoY2hhciBjaCkK ewogIHJldHVybiBpc0FscGhhIChjaCkgfHwgaXNEaWdpdCAoY2gpOwp9CgpzdGF0aWMgaW5saW5l IEJPT0wKaXNQdW5jdCAoY2hhciBjaCkKewogIHJldHVybiAoKChjaCA+ICcgJykgJiYgKGNoIDwg JzAnKSkKICAgICAgICAgIHx8ICgoY2ggPiAnOScpICYmIChjaCA8ICdBJykpCiAgICAgICAgICB8 fCAoKGNoID4gJ1onKSAmJiAoY2ggPCAnYScpKQogICAgICAgICAgfHwgKChjaCA+ICd6JykgJiYg KGNoIDw9ICd+JykpKTsKfQoKc3RhdGljIGlubGluZSBCT09MCmlzUHJpbnQgKGNoYXIgY2gpCnsK CgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAg ICAgICAgICAgICAgIFBhZ2UgIDE4MQoKCiAgcmV0dXJuIGlzUHVuY3QgKGNoKSB8fCBpc0FsbnVt IChjaCkgfHwgY2ggPT0gJyAnOwp9CiMgMjkgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9yYW5k b20vcmFuZG9tZGVmcy5oIiAyCiMgNTIgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9yYW5kb20u aCIgMgojIDMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9zd2FybS5oIiAyCiMgMSAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2UuaCIgMQojIDQgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9zd2FybS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3NpbXRvb2xz Z3VpLmgiIDEKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2Uu aCIgMQojIDkgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9zaW10b29sc2d1aS5oIiAyCiMgMSAi L3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiIDEKIyAxMCAiL3Vzci9sb2NhbC9z d2FybS9pbmNsdWRlL3NpbXRvb2xzZ3VpLmgiIDIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1 ZGUvZ3VpLmgiIDEKCgoKCgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmplY3RiYXNl LmgiIDEKIyA3ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZ3VpLmgiIDIKIyAzMCAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL2d1aS5oIgpAcHJvdG9jb2wgV2lkZ2V0IDxDcmVhdGUsIERyb3A+ CiMgMzkgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9ndWkuaCIKLSBfSV9DcmVhdGluZzsKCgoK CisgY3JlYXRlUGFyZW50OiBwYXJlbnQ7CgoKLSBzZXRQYXJlbnQ6IHBhcmVudDsKCgotIChjb25z dCBjaGFyICopbWFrZVdpZGdldE5hbWVGb3I6IHdpZGdldDsKCgotIHNldFdpZGdldE5hbWVGcm9t UGFyZW50OiAoaWQgPFdpZGdldD4pcGFyZW50OwoKCi0gc2V0V2lkZ2V0TmFtZUZyb21QYXJlbnRO YW1lOiAoY29uc3QgY2hhciAqKXBhcmVudFdpZGdldE5hbWU7Ci0gX0lfVXNpbmc7CgoKCi0gKHZv aWQpcGFjazsKCi0gKHZvaWQpcGFja0ZpbGw7Ci0gKHZvaWQpcGFja0JlZm9yZUFuZEZpbGxMZWZ0 OiB3aWRnZXQgZXhwYW5kOiAoQk9PTClleHBhbmRGbGFnOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToy MSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgMTgy CgoKLSAodm9pZClwYWNrRmlsbExlZnQ6IChCT09MKWV4cGFuZEZsYWc7Ci0gKHZvaWQpcGFja1Rv UmlnaHQgOiB3aWRnZXQ7Ci0gKHZvaWQpcGFja0ZvcmdldEFuZEV4cGFuZDsKCgotICh2b2lkKXNl dEFjdGl2ZUZsYWc6IChCT09MKWFjdGl2ZUZsYWc7CgoKLSBzZXRXaWR0aDogKHVuc2lnbmVkKXdp ZHRoOwoKCi0gc2V0SGVpZ2h0OiAodW5zaWduZWQpaGVpZ2h0OwoKCi0gc2V0V2lkdGg6ICh1bnNp Z25lZCl3aWR0aCBIZWlnaHQ6ICh1bnNpZ25lZCloZWlnaHQ7CgoKLSBzZXRYOiAoaW50KXggWTog KGludCl5OwoKCi0gKHZvaWQpc2V0V2luZG93VGl0bGU6IChjb25zdCBjaGFyICopdGl0bGU7CgoK LSBnZXRQYXJlbnQ7CgoKLSBnZXRUb3BMZXZlbDsKCgotIChjb25zdCBjaGFyICopZ2V0V2lkZ2V0 TmFtZTsKCgotICh1bnNpZ25lZClnZXRIZWlnaHQ7CgoKLSAodW5zaWduZWQpZ2V0V2lkdGg7CgoK LSAoaW50KWdldFg7CgoKLSAoaW50KWdldFk7CgotIChjb25zdCBjaGFyICopZ2V0V2luZG93R2Vv bWV0cnk7Ci0gKHZvaWQpc2V0V2luZG93R2VvbWV0cnk6IChjb25zdCBjaGFyICopczsKCgotICh2 b2lkKWVuYWJsZURlc3Ryb3lOb3RpZmljYXRpb246IG5vdGlmaWNhdGlvblRhcmdldAogICAgICAg ICAgICAgICBub3RpZmljYXRpb25NZXRob2Q6IChTRUwpZGVzdHJveU5vdGlmaWNhdGlvbk1ldGhv ZDsKCgotICh2b2lkKWRpc2FibGVEZXN0cm95Tm90aWZpY2F0aW9uOwoKLSAoQk9PTClnZXREZXN0 cm95ZWRGbGFnOwpAZW5kCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAg ICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgMTgzCgoKCkBwcm90b2NvbCBXaW5k b3dHZW9tZXRyeVJlY29yZCA8U2VyaWFsaXphdGlvbiwgQ3JlYXRlLCBEcm9wPgoKCgoKLSBfSV9V c2luZzsKCi0gc2V0WDogKGludCl4IFk6IChpbnQpeTsKCgotIHNldFdpZHRoOiAodW5zaWduZWQp dyBIZWlnaHQ6ICh1bnNpZ25lZCloOwoKCi0gKEJPT0wpZ2V0U2l6ZUZsYWc7CgoKLSAoQk9PTCln ZXRQb3NpdGlvbkZsYWc7CgoKLSAodW5zaWduZWQpZ2V0V2lkdGg7CgoKLSAodW5zaWduZWQpZ2V0 SGVpZ2h0OwoKCi0gKGludClnZXRYOwoKCi0gKGludClnZXRZOwpAZW5kCgpAcHJvdG9jb2wgQXJj aGl2ZWRHZW9tZXRyeVdpZGdldCA8V2lkZ2V0PgoKCgoKCi0gX0lfQ3JlYXRpbmc7CisgY3JlYXRl OiAoaWQgPFpvbmU+KWFab25lIHNldFdpbmRvd0dlb21ldHJ5UmVjb3JkTmFtZTogKGNvbnN0IGNo YXIgKiluYW1lOwoKCi0gc2V0V2luZG93R2VvbWV0cnlSZWNvcmROYW1lOiAoY29uc3QgY2hhciAq KXJlY29yZE5hbWU7CgoKLSBzZXRTYXZlU2l6ZUZsYWc6IChCT09MKXNhdmVTaXplRmxhZzsKCi0g bG9hZFdpbmRvd0dlb21ldHJ5UmVjb3JkOwotIHJlZ2lzdGVyQW5kTG9hZDsKLSB1cGRhdGVTaXpl OwotIF9JX1VzaW5nOwotICh2b2lkKXVwZGF0ZUFyY2hpdmVyOiBhcmNoaXZlcjsKQGVuZAoKQHBy b3RvY29sIEZyYW1lIDxBcmNoaXZlZEdlb21ldHJ5V2lkZ2V0LCBDUkVBVEFCTEU+CgoKCgoKCgoK MjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAg ICAgICAgUGFnZSAgMTg0CgoKCgoKCgoKLSBfSV9DcmVhdGluZzsKCi0gc2V0Qm9yZGVyV2lkdGg6 IChpbnQpd2lkdGg7CgoKLSBzZXRSZWxpZWZGbGFnOiAoQk9PTClyZWxpZWZGbGFnOwotIF9JX1Vz aW5nOwoKLSAodm9pZCl3aXRoZHJhdzsKCgotICh2b2lkKWRlaWNvbmlmeTsKQGVuZAoKQHByb3Rv Y29sIENhbnZhcyA8QXJjaGl2ZWRHZW9tZXRyeVdpZGdldCwgQ1JFQVRBQkxFPgoKCgotIF9JX0Ny ZWF0aW5nOwotIF9JX1VzaW5nOwoKLSBhZGRXaWRnZXQ6IHdpZGdldCBYOiAoaW50KXggWTogKGlu dCl5IGNlbnRlckZsYWc6IChCT09MKWNlbnRlckZsYWc7CgoKLSByZW1vdmVXaWRnZXQ6IHdpZGdl dDsKCgotIGNoZWNrR2VvbWV0cnk6IGZyYW1lOwpAZW5kCgpAcHJvdG9jb2wgUHJvYmVDYW52YXMg PENhbnZhcywgQ1JFQVRBQkxFPgoKCgoKLSBfSV9DcmVhdGluZzsKCi0gc2V0SG9yaXpvbnRhbFNj cm9sbGJhckZsYWc6IChCT09MKWhvcml6b250YWxTY3JvbGJhckZsYWc7CkBlbmQKCkBwcm90b2Nv bCBHcmFwaEVsZW1lbnQgPENyZWF0ZSwgRHJvcCwgQ1JFQVRBQkxFPgoKCgoKLSBfSV9DcmVhdGlu ZzsKLSBzZXRPd25lckdyYXBoOiBvd25lckdyYXBoOwoKKyBjcmVhdGVPd25lckdyYXBoOiBvd25l ckdyYXBoOwotIF9JX1VzaW5nOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAg ICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgMTg1CgoKCi0gKHZvaWQpc2V0 TGFiZWw6IChjb25zdCBjaGFyICopbGFiZWw7CgoKLSAodm9pZClzZXRDb2xvcjogKGNvbnN0IGNo YXIgKiljb2xvck5hbWU7CgoKLSAodm9pZClzZXREYXNoZXM6IChpbnQpZGFzaGVzVmFsOwoKCi0g KHZvaWQpc2V0U3ltYm9sOiAoY29uc3QgY2hhciAqKXN5bWJvbDsKCgotICh2b2lkKXNldFN5bWJv bFNpemU6ICh1bnNpZ25lZClzaXplOwoKCi0gKHZvaWQpYWRkWDogKGRvdWJsZSl4IFk6IChkb3Vi bGUpeTsKCgotICh2b2lkKXJlc2V0RGF0YTsKCgotIHNldFdpZHRoOiAodW5zaWduZWQpdzsKQGVu ZAoKQHByb3RvY29sIEdyYXBoIDxBcmNoaXZlZEdlb21ldHJ5V2lkZ2V0LCBDUkVBVEFCTEU+CiMg MjY3ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZ3VpLmgiCi0gX0lfQ3JlYXRpbmc7Ci0gX0lf VXNpbmc7CgotIHNldFRpdGxlOiAoY29uc3QgY2hhciAqKXRpdGxlOwoKLSBzZXRBeGlzTGFiZWxz WDogKGNvbnN0IGNoYXIgKil4bCBZOiAoY29uc3QgY2hhciAqKXlsOwoKLSAoaWQgPEdyYXBoRWxl bWVudD4pY3JlYXRlRWxlbWVudDsKCi0gKHZvaWQpc2V0U2NhbGVNb2RlWDogKEJPT0wpeHMgWTog KEJPT0wpeXM7CgotICh2b2lkKXNldFJhbmdlc1hNaW46IChkb3VibGUpbWlueCBNYXg6KGRvdWJs ZSltYXh4OwoKLSAodm9pZClzZXRSYW5nZXNZTWluOiAoZG91YmxlKW1pbnkgTWF4Oihkb3VibGUp bWF4eTsKCi0gKHZvaWQpc2V0UmFuZ2VzWE1pbjogKGRvdWJsZSltaW54IE1heDooZG91YmxlKW1h eHggWU1pbjogKGRvdWJsZSltaW55IE1heDogKGRvdWJsZSltYXh5OwpAZW5kCgoKQHByb3RvY29s IEhpc3RvZ3JhbSA8QXJjaGl2ZWRHZW9tZXRyeVdpZGdldCwgQ1JFQVRBQkxFPgoKCgoKCgoKLSBf SV9DcmVhdGluZzsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBt YWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAxODYKCgotIHNldEJpbkNvdW50OiAodW5z aWduZWQpbjsKLSBfSV9Vc2luZzsKCgotICh2b2lkKXNldENvbG9yczogKGNvbnN0IGNoYXIgKiBj b25zdCAqKWMgY291bnQ6ICh1bnNpZ25lZCljb3VudDsKCgoKLSAodm9pZClzZXRMYWJlbHM6IChj b25zdCBjaGFyICogY29uc3QgKilsIGNvdW50OiAodW5zaWduZWQpY291bnQ7CgoKLSBzZXRUaXRs ZTogKGNvbnN0IGNoYXIgKil0aXRsZTsKCgotICh2b2lkKXNldEJhcldpZHRoOiAoZG91YmxlKXN0 ZXA7CgoKCi0gKHZvaWQpc2V0WGF4aXNNaW46IChkb3VibGUpbWluIG1heDogKGRvdWJsZSltYXgg c3RlcDogKGRvdWJsZSlzdGVwOwoKCi0gKHZvaWQpc2V0WGF4aXNNaW46IChkb3VibGUpbWluIG1h eDogKGRvdWJsZSltYXggc3RlcDogKGRvdWJsZSlzdGVwIHByZWNpc2lvbjogKHVuc2lnbmVkKXBy ZWNpc2lvbjsKCgotIHNldEF4aXNMYWJlbHNYOiAoY29uc3QgY2hhciAqKXhsIFk6IChjb25zdCBj aGFyICopeWw7CgoKLSAodm9pZClzZXRBY3RpdmVPdXRsaWVyVGV4dDogKHVuc2lnbmVkKW91dGxp ZXJzIGNvdW50OiAodW5zaWduZWQpY291bnQ7CgoKLSAodm9pZCloaWRlTGVnZW5kOwoKCi0gKHZv aWQpZHJhd0hpc3RvZ3JhbVdpdGhJbnQ6IChpbnQgKilwb2ludHM7CgoKLSAodm9pZClkcmF3SGlz dG9ncmFtV2l0aERvdWJsZTogKGRvdWJsZSAqKXBvaW50czsKCgotICh2b2lkKWRyYXdIaXN0b2dy YW1XaXRoSW50OiAoaW50ICopcG9pbnRzIGF0TG9jYXRpb25zOiAoZG91YmxlICopbG9jYXRpb25z OwoKCi0gKHZvaWQpZHJhd0hpc3RvZ3JhbVdpdGhEb3VibGU6IChkb3VibGUgKilwb2ludHMgYXRM b2NhdGlvbnM6IChkb3VibGUgKilsb2NhdGlvbnM7CgotICh2b2lkKXNldHVwWm9vbVN0YWNrOwot ICh2b2lkKXNldHVwQWN0aXZlT3V0bGllck1hcmtlcjsKLSAodm9pZClzZXR1cEFjdGl2ZUl0ZW1J bmZvOwpAZW5kCgpAcHJvdG9jb2wgTGFiZWwgPFdpZGdldCwgQ1JFQVRBQkxFPgoKCgotIF9JX0Ny ZWF0aW5nOwotIF9JX1VzaW5nOwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAg ICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE4NwoKCi0gc2V0VGV4dDog KGNvbnN0IGNoYXIgKil0ZXh0OwpAZW5kCgpAcHJvdG9jb2wgQ2xhc3NEaXNwbGF5TGFiZWwgPExh YmVsLCBDUkVBVEFCTEU+CgoKCi0gX0lfQ3JlYXRpbmc7Ci0gX0lfVXNpbmc7CkBlbmQKCkBwcm90 b2NvbCBWYXJQcm9iZUxhYmVsIDxMYWJlbCwgQ1JFQVRBQkxFPgoKCgotIF9JX0NyZWF0aW5nOwpA ZW5kCgpAcHJvdG9jb2wgQ29tcGxldGVQcm9iZURpc3BsYXlMYWJlbCA8TGFiZWwsIENSRUFUQUJM RT4KCgoKCgotIF9JX0NyZWF0aW5nOwoKLSBzZXRUYXJnZXRXaWRnZXQ6IHRhcmdldFdpZGdldDsK CgotIHNldFByb2JlZE9iamVjdDogcHJvYmVkT2JqZWN0OwotIF9JX1VzaW5nOwpAZW5kCgpAcHJv dG9jb2wgQnV0dG9uIDxXaWRnZXQsIENSRUFUQUJMRT4KCgoKLSBfSV9DcmVhdGluZzsKLSBfSV9V c2luZzsKCi0gc2V0VGV4dDogKGNvbnN0IGNoYXIgKil0ZXh0OwoKCi0gKHZvaWQpc2V0QnV0dG9u VGFyZ2V0OiB0YXJnZXQgbWV0aG9kOiAoU0VMKW1ldGhvZDsKQGVuZAoKQHByb3RvY29sIENsYXNz RGlzcGxheUhpZGVCdXR0b24gPEJ1dHRvbiwgQ1JFQVRBQkxFPgoKCgoKLSBfSV9DcmVhdGluZzsK LSBzZXRTdWJXaWRnZXQ6IHN1YldpZGdldDsKLSBzZXRVc2VyOiB1c2VyOwotIHNldE93bmVyOiBv d25lcjsKLSBfSV9Vc2luZzsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAg ICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE4OAoKCkBlbmQKCkBwcm90b2Nv bCBTaW1wbGVQcm9iZURpc3BsYXlIaWRlQnV0dG9uIDxCdXR0b24sIENSRUFUQUJMRT4KCgoKLSBf SV9DcmVhdGluZzsKCi0gc2V0UHJvYmVEaXNwbGF5OiBwcm9iZURpc3BsYXk7CkBlbmQKCkBwcm90 b2NvbCBTdXBlckJ1dHRvbiA8QnV0dG9uLCBDUkVBVEFCTEU+CgoKCi0gX0lfQ3JlYXRpbmc7Ci0g c2V0U3VwZXJXaWRnZXQ6IChpZCA8V2lkZ2V0PilzdXBlcldpZGdldDsKLSBzZXRPd25lcjogKGlk IDxXaWRnZXQ+KW93bmVyOwotIHNldFVzZXI6IHVzZXI7Ci0gX0lfVXNpbmc7CkBlbmQKCkBwcm90 b2NvbCBJbnB1dFdpZGdldCA8V2lkZ2V0PgoKCgoKLSBfSV9DcmVhdGluZzsKLSBfSV9Vc2luZzsK Ci0gKGNvbnN0IGNoYXIgKilnZXRWYWx1ZTsKCgoKLSAodm9pZClzZXRWYWx1ZTogKGNvbnN0IGNo YXIgKil2OwoKCi0gKHZvaWQpbGlua1ZhcmlhYmxlSW50OiAoaW50ICopcDsKCgotICh2b2lkKWxp bmtWYXJpYWJsZURvdWJsZTogKGRvdWJsZSAqKXA7CgoKLSAodm9pZClsaW5rVmFyaWFibGVCb29s ZWFuOiAodW5zaWduZWQgKilwOwpAZW5kCgpAcHJvdG9jb2wgRW50cnkgPElucHV0V2lkZ2V0LCBD UkVBVEFCTEU+CgoKCi0gX0lfQ3JlYXRpbmc7Ci0gX0lfVXNpbmc7CgotIHNldEhlaWdodDogKHVu c2lnbmVkKWg7CkBlbmQKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAg ICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAxODkKCgpAcHJvdG9jb2wgTWVzc2Fn ZVByb2JlRW50cnkgPEVudHJ5LCBDUkVBVEFCTEU+CgoKCi0gX0lfQ3JlYXRpbmc7CgotIHNldElk RmxhZzogKEJPT0wpaWRGbGFnOwoKCi0gc2V0QXJnOiAoaW50KWFyZzsKLSBfSV9Vc2luZzsKQGVu ZAoKQHByb3RvY29sIFZhclByb2JlRW50cnkgPEVudHJ5LCBDUkVBVEFCTEU+CgoKCi0gX0lfQ3Jl YXRpbmc7CgotIHNldEludGVyYWN0aXZlRmxhZzogKEJPT0wpaW50ZXJhY3RpdmVGbGFnOwoKCi0g c2V0T3duZXI6IG93bmVyOwoKCi0gc2V0VmFyUHJvYmU6IHZhclByb2JlOwotIF9JX1VzaW5nOwot IGdldFZhclByb2JlOwpAZW5kCgpAcHJvdG9jb2wgQnV0dG9uUGFuZWwgPEZyYW1lLCBDUkVBVEFC TEU+CgoKCi0gX0lfQ3JlYXRpbmc7Ci0gX0lfVXNpbmc7CgotICh2b2lkKXNldEJ1dHRvblRhcmdl dDogdGFyZ2V0OwoKCi0gKHZvaWQpYWRkQnV0dG9uTmFtZTogKGNvbnN0IGNoYXIgKiluYW1lIHRh cmdldDogdGFyZ2V0IG1ldGhvZDogKFNFTClzZWw7CgoKLSAodm9pZClhZGRCdXR0b25OYW1lOiAo Y29uc3QgY2hhciAqKW5hbWUgbWV0aG9kOiAoU0VMKXNlbDsKQGVuZAoKQHByb3RvY29sIEZvcm0g PFdpZGdldCwgQ1JFQVRBQkxFPgoKCgotIF9JX0NyZWF0aW5nOwotIF9JX1VzaW5nOwoKLSAodm9p ZClzZXRFbnRyeVdpZHRoOiAodW5zaWduZWQpZXc7CgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEg ICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE5MAoK Ci0gKHZvaWQpYWRkTGluZU5hbWU6IChjb25zdCBjaGFyICopbiBCb29sZWFuOiAodW5zaWduZWQg KilwOwoKCi0gKHZvaWQpYWRkTGluZU5hbWU6IChjb25zdCBjaGFyICopbiBJbnQ6IChpbnQgKilw OwoKCi0gKHZvaWQpYWRkTGluZU5hbWU6IChjb25zdCBjaGFyICopbiBEb3VibGU6IChkb3VibGUg KilwOwpAZW5kCgpAcHJvdG9jb2wgQ2hlY2tCdXR0b24gPElucHV0V2lkZ2V0LCBDUkVBVEFCTEU+ CgoKCi0gX0lfQ3JlYXRpbmc7Ci0gX0lfVXNpbmc7CgotIChCT09MKWdldEJvb2xWYWx1ZTsKCgot IHNldEJvb2xWYWx1ZTogKEJPT0wpdjsKQGVuZAoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIENvbG9y Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgUGl4ZWxWYWx1ZTsKCkBwcm90b2NvbCBDb2xvcm1hcCA8 Q3JlYXRlLCBDUkVBVEFCTEU+CgoKCgoKLSBfSV9DcmVhdGluZzsKLSBfSV9Vc2luZzsKCi0gKFBp eGVsVmFsdWUgKiltYXA7CgoKLSAoUGl4ZWxWYWx1ZSlibGFjazsKCgotIChQaXhlbFZhbHVlKXdo aXRlOwoKCgotIChCT09MKXNldENvbG9yOiAoQ29sb3IpYyBUb1JlZDogKGRvdWJsZSlyIEdyZWVu OiAoZG91YmxlKWcgQmx1ZTogKGRvdWJsZSliOwoKCi0gKEJPT0wpc2V0Q29sb3I6IChDb2xvcilj IFRvTmFtZTogKGNvbnN0IGNoYXIgKiljb2xvck5hbWU7CgoKLSAoQk9PTClzZXRDb2xvcjogKENv bG9yKWMgVG9HcmV5OiAoZG91YmxlKWc7CgoKLSAodm9pZCl1bnNldENvbG9yOiAoQ29sb3IpYzsK QGVuZAoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkg ICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE5MQoKCkBjbGFzcyBSYXN0ZXI7CgpAcHJvdG9jb2wg RHJhd2VyCgoKCgotIF9JX1VzaW5nOwotICh2b2lkKWRyYXdYOiAoaW50KXggWTogKGludCl5OwpA ZW5kCgpAcHJvdG9jb2wgUmFzdGVyIDxBcmNoaXZlZEdlb21ldHJ5V2lkZ2V0LCBDUkVBVEFCTEU+ CgoKCgoKCgotIF9JX0NyZWF0aW5nOwotIF9JX1VzaW5nOwoKLSBzZXRDb2xvcm1hcDogKGlkIDxD b2xvcm1hcD4pYzsKCgotICh2b2lkKWRyYXdQb2ludFg6IChpbnQpeCBZOiAoaW50KXkgQ29sb3I6 IChDb2xvciljOwoKCi0gKHZvaWQpZHJhd1NlbGY7CgoKLSAodm9pZClzZXRCdXR0b246IChpbnQp biBDbGllbnQ6IGMgTWVzc2FnZTogKFNFTClzZWw7CgoKLSAodm9pZClmaWxsUmVjdGFuZ2xlWDA6 IChpbnQpeDAgWTA6IChpbnQpeTAgWDE6IChpbnQpeDEgWTE6IChpbnQpeTEgQ29sb3I6IChDb2xv ciljb2xvcjsKCgotICh2b2lkKWVsbGlwc2VYMDogKGludCl4MCBZMDogKGludCl5MCBYMTogKGlu dCl4MSBZMTogKGludCl5MQogICAgICAgICAgICBXaWR0aDogKHVuc2lnbmVkKXBlbldpZHRoIENv bG9yOiAoQ29sb3IpYzsKCgotICh2b2lkKWxpbmVYMDogKGludCl4MCBZMDogKGludCl5MCBYMTog KGludCl4MSBZMTogKGludCl5MQogICAgICAgICBXaWR0aDogKHVuc2lnbmVkKXBlbldpZHRoIENv bG9yOiAoQ29sb3IpYzsKCgotICh2b2lkKXJlY3RhbmdsZVgwOiAoaW50KXgwIFkwOiAoaW50KXkw IFgxOiAoaW50KXgxIFkxOiAoaW50KXkxCiAgICAgICAgICAgICAgV2lkdGg6ICh1bnNpZ25lZClw ZW5XaWR0aCBDb2xvcjogKENvbG9yKWM7CgoKLSAodm9pZClkcmF3OiAoaWQgPERyYXdlcj4pZHJh d2VyIFg6IChpbnQpeCBZOiAoaW50KXk7CgoKLSAodm9pZCllcmFzZTsKQGVuZAoKQHByb3RvY29s IFpvb21SYXN0ZXIgPFJhc3RlciwgQ1JFQVRBQkxFPgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAg ICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgMTkyCgoK CgoKCi0gX0lfQ3JlYXRpbmc7Ci0gX0lfVXNpbmc7CgotICh2b2lkKWluY3JlYXNlWm9vbTsKCgot ICh2b2lkKWRlY3JlYXNlWm9vbTsKCgotICh1bnNpZ25lZClnZXRab29tRmFjdG9yOwoKCi0gc2V0 Wm9vbUZhY3RvcjogKHVuc2lnbmVkKXo7CgoKLSAodm9pZCloYW5kbGVDb25maWd1cmVXaWR0aDog KHVuc2lnbmVkKW5ld1dpZHRoIEhlaWdodDogKHVuc2lnbmVkKW5ld0hlaWdodDsKQGVuZAoKQHBy b3RvY29sIFBpeG1hcCA8RHJhd2VyLCBDcmVhdGUsIERyb3AsIENSRUFUQUJMRT4KCgoKCi0gX0lf Q3JlYXRpbmc7CgotIHNldEZpbGU6IChjb25zdCBjaGFyICopZmlsZW5hbWU7CgoKLSBzZXREaXJl Y3Rvcnk6IChjb25zdCBjaGFyICopcGF0aDsKCgotIHNldFdpZGdldDogKGlkIDxXaWRnZXQ+KXdp ZGdldDsKCgoKLSBzZXREZWNvcmF0aW9uc0ZsYWc6IChCT09MKWRlY29yYXRpb25zRmxhZzsKLSBf SV9Vc2luZzsKCgotICh2b2lkKXNldFJhc3RlcjogKGlkIDxSYXN0ZXI+KXJhc3RlcjsKCgotICh1 bnNpZ25lZClnZXRXaWR0aDsKCgotICh1bnNpZ25lZClnZXRIZWlnaHQ7CgoKLSAodm9pZClzYXZl OiAoY29uc3QgY2hhciAqKWZpbGVuYW1lOwpAZW5kCgpAcHJvdG9jb2wgQ2FudmFzQWJzdHJhY3RJ dGVtIDxDcmVhdGUsIERyb3A+CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAg ICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAxOTMKCgoKCgotIF9JX0NyZWF0 aW5nOwoKLSAodm9pZCljcmVhdGVJdGVtOwoKCi0gKHZvaWQpY3JlYXRlQmluZGluZ3M7CgoKLSBz ZXRDYW52YXM6IChpZCA8Q2FudmFzPiljYW52YXM7Ci0gX0lfVXNpbmc7CgotICh2b2lkKXNldFRh cmdldElkOiB0YXJnZXQ7CgoKLSAodm9pZClzZXRDbGlja1NlbDogKFNFTClzZWw7CgoKLSAodm9p ZClzZXRNb3ZlU2VsOiAoU0VMKXNlbDsKCgotICh2b2lkKXNldFBvc3RNb3ZlU2VsOiAoU0VMKXNl bDsKCgotICh2b2lkKWNsaWNrZWQ7CgoKLSAodm9pZClpbml0aWF0ZU1vdmVYOiAobG9uZylkZWx0 YVggWTogKGxvbmcpZGVsdGFZOwoKCi0gKGlkIDxDYW52YXM+KWdldENhbnZhczsKQGVuZAoKQHBy b3RvY29sIENhbnZhc0l0ZW0gPENhbnZhc0Fic3RyYWN0SXRlbSwgQ1JFQVRBQkxFPgoKCgotIF9J X0NyZWF0aW5nOwotIF9JX1VzaW5nOwpAZW5kCgpAcHJvdG9jb2wgQ29tcG9zaXRlSXRlbSA8Q2Fu dmFzQWJzdHJhY3RJdGVtPgoKCgoKLSBfSV9DcmVhdGluZzsKLSBfSV9Vc2luZzsKCi0gKHZvaWQp bW92ZVg6IChsb25nKWRlbHRhWCBZOiAobG9uZylkZWx0YVk7CkBlbmQKCkBwcm90b2NvbCBOb2Rl SXRlbSA8Q29tcG9zaXRlSXRlbSwgQ1JFQVRBQkxFPgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEg ICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE5NAoK CgoKCi0gX0lfQ3JlYXRpbmc7CgotIHNldFN0cmluZzogKGNvbnN0IGNoYXIgKilsYWJlbDsKCgot IHNldEZvbnQ6IChjb25zdCBjaGFyICopZm9udDsKCgotIHNldFg6IChpbnQpeCBZOiAoaW50KXk7 Ci0gX0lfVXNpbmc7CgotICh2b2lkKXJlc2V0U3RyaW5nOiAoY29uc3QgY2hhciAqKXN0cmluZzsK CgotIChpbnQpZ2V0WDsKCgotIChpbnQpZ2V0WTsKCgotICh2b2lkKXNldENvbG9yOiAoY29uc3Qg Y2hhciAqKWFDb2xvcjsKCgotICh2b2lkKXNldEJvcmRlckNvbG9yOiAoY29uc3QgY2hhciAqKWFD b2xvcjsKCgotICh2b2lkKXNldEJvcmRlcldpZHRoOiAoaW50KWFWYWw7CgoKLSAodm9pZCljcmVh dGVUZXh0OwoKCi0gKHZvaWQpY3JlYXRlUGFkZGVkVGV4dDsKQGVuZAoKQHByb3RvY29sIExpbmtJ dGVtIDxDb21wb3NpdGVJdGVtLCBDUkVBVEFCTEU+CgoKCi0gX0lfQ3JlYXRpbmc7CgotIHNldEZy b206IChpZCA8Tm9kZUl0ZW0+KWZyb207CgoKLSBzZXRUbzogKGlkIDxOb2RlSXRlbT4pdG87CgoK LSBzZXREaXJlY3RlZEZsYWc6IChCT09MKWRpcmVjdGVkRmxhZzsKLSBfSV9Vc2luZzsKCi0gKHZv aWQpc2V0Q29sb3I6IChjb25zdCBjaGFyICopYUNvbG9yOwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAx OjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAx OTUKCgotICh2b2lkKXVwZGF0ZTsKQGVuZAoKQHByb3RvY29sIFNjaGVkdWxlSXRlbSA8Q29tcG9z aXRlSXRlbSwgQ1JFQVRBQkxFPgoKCgotIF9JX0NyZWF0aW5nOwoKLSBzZXRTY2hlZHVsZTogc2No ZWR1bGU7CgoKLSBzZXRTdGVwOiAodW5zaWduZWQpc3RlcDsKCgotIHNldFg6IChpbnQpeCBZOiAo aW50KXk7Ci0gX0lfVXNpbmc7CgotICh2b2lkKXVwZGF0ZTsKCgotICh2b2lkKWF0OiAodGltZXZh bF90KXR2YWwgb3duZXI6IG93bmVyIHdpZGdldDogd2lkZ2V0IHg6IChpbnQpc291cmNlWCB5OiAo aW50KXNvdXJjZVk7CgoKLSAodm9pZCl0cmlnZ2VyOiB3aWRnZXQgWDogKGludCl4IFk6IChpbnQp eTsKQGVuZAoKQHByb3RvY29sIE92YWxOb2RlSXRlbSA8Tm9kZUl0ZW0sIENSRUFUQUJMRT4KCgoK LSBfSV9DcmVhdGluZzsKQGVuZAoKQHByb3RvY29sIFJlY3RhbmdsZU5vZGVJdGVtIDxOb2RlSXRl bSwgQ1JFQVRBQkxFPgoKCgotIF9JX0NyZWF0aW5nOwpAZW5kCgpAcHJvdG9jb2wgVGV4dEl0ZW0g PENhbnZhc0l0ZW0sIENSRUFUQUJMRT4KCgoKLSBfSV9DcmVhdGluZzsKCi0gc2V0WDogKGludCl4 IFk6IChpbnQpeTsKCgotIHNldFRleHQ6IChjb25zdCBjaGFyICopdGV4dDsKCgotIHNldEZvbnQ6 IChjb25zdCBjaGFyICopZm9udDsKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAg ICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgMTk2CgoKLSBzZXRDZW50 ZXJGbGFnOiAoQk9PTCljZW50ZXJGbGFnOwotIF9JX1VzaW5nOwpAZW5kCgpAcHJvdG9jb2wgQ2ly Y2xlIDxDYW52YXNJdGVtLCBDUkVBVEFCTEU+CgoKCi0gX0lfQ3JlYXRpbmc7CgotIHNldFg6IChp bnQpeCBZOiAoaW50KXk7CgoKLSBzZXRSYWRpdXM6ICh1bnNpZ25lZClyOwotIF9JX1VzaW5nOwpA ZW5kCgpAcHJvdG9jb2wgUmVjdGFuZ2xlIDxDYW52YXNJdGVtLCBDUkVBVEFCTEU+CgoKCi0gX0lf Q3JlYXRpbmc7CgotIHNldFRYOiAoaW50KXR4IFRZOiAoaW50KXR5IExYOiAoaW50KWx4IExZOiAo aW50KWx5OwpAZW5kCgpAcHJvdG9jb2wgTGluZSA8Q2FudmFzSXRlbSwgQ1JFQVRBQkxFPgoKCgot IF9JX0NyZWF0aW5nOwoKLSBzZXRUWDogKGludCl0eCBUWTogKGludCl0eSBMWDogKGludClseCBM WTogKGludClseTsKQGVuZAojIDkxNSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2d1aS5oIgoj IDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS90a29iamMvY29tbW9uLmgiIDEKCgoKCgojIDEg Ii91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMuaCIgMQojIDcgIi91c3IvbG9jYWwv c3dhcm0vaW5jbHVkZS90a29iamMvY29tbW9uLmgiIDIKCnZvaWQgdGtvYmpjX2RyYWdBbmREcm9w IChpZCBzb3VyY2UsIGlkIG9iamVjdCk7CnZvaWQgdGtvYmpjX2RyYWdBbmREcm9wQXJnIChpZCBz b3VyY2UsIGlkIG9iamVjdCwgaW50IGFyZyk7CnZvaWQgdGtvYmpjX2RyYWdBbmREcm9wVGFyZ2V0 IChpZCB0YXJnZXQsIGlkIG9iamVjdCk7CgppbnQgdGtvYmpjX2RvT25lRXZlbnRTeW5jICh2b2lk KTsKaW50IHRrb2JqY19kb09uZUV2ZW50QXN5bmMgKHZvaWQpOwoKdm9pZCB0a29iamNfYmluZEJ1 dHRvbjNUb1NwYXduIChpZCB3aWRnZXQsIGlkIHNlbGYsIGludCBmb2N1c0ZsYWcpOwp2b2lkIHRr b2JqY19iaW5kQnV0dG9uM1RvQXJnU3Bhd24gKGlkIHdpZGdldCwgaWQgc2VsZiwgaW50IHdoaWNo KTsKCnZvaWQgdGtvYmpjX3JpbmdCZWxsICh2b2lkKTsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAxOTcK CgppZCB0a29iamNfZHJhZ19hbmRfZHJvcF9vYmplY3QgKHZvaWQpOwoKdm9pZCB0a29iamNfY29u ZmlndXJlU3BlY2lhbEJpdG1hcCAoaWQgd2lkZ2V0KTsKCnZvaWQgdGtvYmpjX3VwZGF0ZSAodm9p ZCk7CnZvaWQgdGtvYmpjX3JlbGVhc2VBbmRVcGRhdGUgKHZvaWQpOwp2b2lkIHRrb2JqY191cGRh dGVJZGxlVGFza3MgKGludCBob2xkKTsKCmNvbnN0IGNoYXIgKnRrb2JqY19keW5hbWljRXZhbCAo Y29uc3QgY2hhciAqY21kKTsKCnZvaWQgdGtvYmpjX2ZvY3VzIChpZCB3aWRnZXQpOwoKdm9pZCB0 a29iamNfbWFrZUZyYW1lIChpZCB3aWRnZXQpOwp2b2lkIHRrb2JqY19wYWNrIChpZCB3aWRnZXQp OwoKY29uc3QgY2hhciAqdGtvYmpjX2NyZWF0ZVRleHQgKGlkIGFab25lLCBpZCB3aWRnZXQsIGlu dCB4LCBpbnQgeSwgY29uc3QgY2hhciAqdGV4dCwgY29uc3QgY2hhciAqZm9udCwgQk9PTCBjZW50 ZXJGbGFnKTsKIyA5MTYgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9ndWkuaCIgMgpleHRlcm4g dm9pZCBpbml0VGtPYmpjIChpZCBhcmd1bWVudHMpOwojIDkzNyAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL2d1aS5oIgpAY2xhc3MgQnV0dG9uOwpAY2xhc3MgQnV0dG9uUGFuZWw7CkBjbGFzcyBD aGVja0J1dHRvbjsKQGNsYXNzIENsYXNzRGlzcGxheUhpZGVCdXR0b247CkBjbGFzcyBDbGFzc0Rp c3BsYXlMYWJlbDsKQGNsYXNzIENsYXNzRGlzcGxheVdpZGdldDsKQGNsYXNzIENvbXBsZXRlUHJv YmVEaXNwbGF5TGFiZWw7CkBjbGFzcyBGb3JtOwpAY2xhc3MgRnJhbWU7CkBjbGFzcyBMYWJlbDsK QGNsYXNzIE1lc3NhZ2VQcm9iZUVudHJ5OwpAY2xhc3MgUHJvYmVDYW52YXM7CkBjbGFzcyBTaW1w bGVQcm9iZURpc3BsYXlIaWRlQnV0dG9uOwpAY2xhc3MgU3VwZXJCdXR0b247CkBjbGFzcyBWYXJQ cm9iZUVudHJ5OwpAY2xhc3MgVmFyUHJvYmVMYWJlbDsKQGNsYXNzIFdpZGdldDsKCkBjbGFzcyBD b2xvcm1hcDsKQGNsYXNzIEVudHJ5OwpAY2xhc3MgR3JhcGg7CkBjbGFzcyBDYW52YXM7CkBjbGFz cyBDYW52YXNJdGVtOwpAY2xhc3MgSGlzdG9ncmFtOwpAY2xhc3MgTGlua0l0ZW07CkBjbGFzcyBP dmFsTm9kZUl0ZW07CkBjbGFzcyBQaXhtYXA7CkBjbGFzcyBSZWN0YW5nbGVOb2RlSXRlbTsKQGNs YXNzIFJhc3RlcjsKQGNsYXNzIFpvb21SYXN0ZXI7CgpAY2xhc3MgQ2lyY2xlOwpAY2xhc3MgTGlu ZTsKQGNsYXNzIE5vZGVJdGVtOwpAY2xhc3MgUmVjdGFuZ2xlOwpAY2xhc3MgU2NoZWR1bGVJdGVt OwpAY2xhc3MgVGV4dEl0ZW07CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAg ICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAxOTgKCgojIDExICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvc2ltdG9vbHNndWkuaCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9leHRlcm52YXIuaCIgMQojIDEyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvc2lt dG9vbHNndWkuaCIgMgoKQHByb3RvY29sIFdpbmRvd0dlb21ldHJ5UmVjb3JkTmFtZQoKCgoKCi0g X0lfQ3JlYXRpbmc7CgoKCi0gc2V0V2luZG93R2VvbWV0cnlSZWNvcmROYW1lOiAoY29uc3QgY2hh ciAqKXdpbmRvd0dlb21ldHJ5UmVjb3JkTmFtZTsKCi0gc2V0U2F2ZVNpemVGbGFnOiAoQk9PTClz YXZlU2l6ZUZsYWc7CgoKCgoKQGVuZAoKQHByb3RvY29sIENvbXBvc2l0ZVdpbmRvd0dlb21ldHJ5 UmVjb3JkTmFtZSA8V2luZG93R2VvbWV0cnlSZWNvcmROYW1lPgoKCgoKLSBfSV9DcmVhdGluZzsK Ci0gc2V0V2luZG93R2VvbWV0cnlSZWNvcmROYW1lRm9yQ29tcG9uZW50OiAoY29uc3QgY2hhciAq KWNvbXBvbmVudE5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXQ6 IHdpZGdldDsKCgoKCgoKCkBlbmQKCgpAcHJvdG9jb2wgQ29udHJvbFBhbmVsIDxTd2FybU9iamVj dCwgUkVUVVJOQUJMRT4KCgoKCgotIF9JX0NyZWF0aW5nOwoKLSBfSV9Vc2luZzsKCgoKLSAoaWQg PFN5bWJvbD4pZ2V0U3RhdGU7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAg ICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAxOTkKCgoKLSBzZXRTdGF0ZTog KGlkIDxTeW1ib2w+KXM7CgotIHN0YXJ0SW5BY3Rpdml0eTogKGlkIDxTd2FybUFjdGl2aXR5Pilh Y3Rpdml0eUlEOwoKCi0gc2V0U3RhdGVSdW5uaW5nOwoKCgoKCi0gc2V0U3RhdGVTdG9wcGVkOwoK Ci0gc2V0U3RhdGVTdGVwcGluZzsKCgotIHNldFN0YXRlUXVpdDsKCgotIHNldFN0YXRlTmV4dFRp bWU7CgoKLSBzZXRTdGF0ZVNhdmU7CgpAZW5kCgpAcHJvdG9jb2wgQWN0aW9uQ2FjaGUgPENvbXBv c2l0ZVdpbmRvd0dlb21ldHJ5UmVjb3JkTmFtZSwgU3dhcm1PYmplY3QsIFJFVFVSTkFCTEU+CgoK CgoKLSBfSV9DcmVhdGluZzsKLSBzZXRDb250cm9sUGFuZWw6IChpZCA8Q29udHJvbFBhbmVsPilj cDsKLSBjcmVhdGVQcm9jQ3RybDsKCi0gX0lfVXNpbmc7Ci0gc2V0U2NoZWR1bGVDb250ZXh0OiAo aWQgPFN3YXJtPiljb250ZXh0OwotIGluc2VydEFjdGlvbjogYWN0aW9uSG9sZGVyOwotIGRlbGl2 ZXJBY3Rpb25zOwotIHNlbmRBY3Rpb25PZlR5cGU6IChpZCA8U3ltYm9sPil0eXBlIHRvRXhlY3V0 ZTogKGNvbnN0IGNoYXIgKiljbWQ7Ci0gc2VuZFN0YXJ0QWN0aW9uOwotIHNlbmRTdG9wQWN0aW9u OwotIHNlbmRTdGVwQWN0aW9uOwotIHNlbmROZXh0QWN0aW9uOwotIHNlbmRRdWl0QWN0aW9uOwot IHZlcmlmeUFjdGlvbnM7CgotIGdldFBhbmVsOwoKCgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAyMDAK CgoKLSBkb1RrRXZlbnRzOwotIHdhaXRGb3JDb250cm9sRXZlbnQ7CkBlbmQKCgpleHRlcm4gaWQg PFN5bWJvbD4gQ29udHJvbCwgUHJvYmluZywgU3BhdGlhbDsKCgpleHRlcm4gaWQgPFN5bWJvbD4g SW52YWxpZEFjdGlvblR5cGUsIEFjdGlvblR5cGVOb3RJbXBsZW1lbnRlZDsKCgpAcHJvdG9jb2wg Q29tbW9uUHJvYmVEaXNwbGF5IDxTd2FybU9iamVjdCwgV2luZG93R2VvbWV0cnlSZWNvcmROYW1l PgoKCgotIF9JX1VzaW5nOwoKCgoKCgoKLSAodm9pZCl1cGRhdGU7CgotIChCT09MKWdldE1hcmtl ZEZvckRyb3BGbGFnOwotIGdldFRvcExldmVsOwpAZW5kCgpAcHJvdG9jb2wgU2luZ2xlUHJvYmVE aXNwbGF5IDxDb21tb25Qcm9iZURpc3BsYXk+CgoKCi0gX0lfQ3JlYXRpbmc7CgotIHNldFByb2Jl ZE9iamVjdDogYW5PYmplY3Q7CgotIF9JX1VzaW5nOwoKLSBnZXRQcm9iZWRPYmplY3Q7CkBlbmQK CkBwcm90b2NvbCBTaW1wbGVQcm9iZURpc3BsYXkgPFNpbmdsZVByb2JlRGlzcGxheSwgUkVUVVJO QUJMRT4KCgoKLSBfSV9DcmVhdGluZzsKCi0gc2V0UHJvYmVNYXA6IChpZCA8UHJvYmVNYXA+KXBy b2JlTWFwOwotIF9JX1VzaW5nOwpAZW5kCgpAcHJvdG9jb2wgUHJvYmVEaXNwbGF5IDxTaW5nbGVQ cm9iZURpc3BsYXksIENSRUFUQUJMRT4KCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAg ICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgMjAxCgoKCgoKLSBf SV9DcmVhdGluZzsKCgoKCgotIHNldFByb2JlTWFwOiAoaWQgPFByb2JlTWFwPilwcm9iZU1hcDsK Ci0gX0lfVXNpbmc7CkBlbmQKCkBwcm90b2NvbCBDb21wbGV0ZVByb2JlRGlzcGxheSA8U2luZ2xl UHJvYmVEaXNwbGF5LCBSRVRVUk5BQkxFPgoKCgoKCkBlbmQKCkBwcm90b2NvbCBNdWx0aVZhclBy b2JlRGlzcGxheSA8Q29tbW9uUHJvYmVEaXNwbGF5LCBDUkVBVEFCTEU+CgoKCgoKLSBfSV9DcmVh dGluZzsKCi0gc2V0T2JqZWN0TGlzdDogKGlkIDxMaXN0PilvYmplY3RMaXN0OwoKCi0gc2V0UHJv YmVNYXA6IChpZCA8UHJvYmVNYXA+KXByb2JlTWFwOwoKCi0gc2V0T2JqZWN0TmFtZVNlbGVjdG9y OiAoU0VMKW9iamVjdE5hbWVTZWxlY3RvcjsKCi0gX0lfVXNpbmc7CkBlbmQKCgpAcHJvdG9jb2wg UHJvYmVEaXNwbGF5TWFuYWdlciA8U3dhcm1PYmplY3QsIENSRUFUQUJMRT4KCgoKCgotIF9JX1Vz aW5nOwotIChCT09MKWdldERyb3BJbW1lZGlhdGVseUZsYWc7CgotIChpZCA8UHJvYmVEaXNwbGF5 PiljcmVhdGVQcm9iZURpc3BsYXlGb3I6IGFuT2JqZWN0OwoKLSAoaWQgPFByb2JlRGlzcGxheT4p Y3JlYXRlQXJjaGl2ZWRQcm9iZURpc3BsYXlGb3I6IGFuT2JqZWN0IHZhcmlhYmxlTmFtZTogKGNv bnN0IGNoYXIgKil2YXJpYWJsZU5hbWU7CgotIChpZCA8UHJvYmVEaXNwbGF5PiljcmVhdGVEZWZh dWx0UHJvYmVEaXNwbGF5Rm9yOiBhbk9iamVjdDsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAg ICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDIwMgoKCgot IChpZCA8UHJvYmVEaXNwbGF5PiljcmVhdGVBcmNoaXZlZERlZmF1bHRQcm9iZURpc3BsYXlGb3I6 IGFuT2JqZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh cmlhYmxlTmFtZTogKGNvbnN0IGNoYXIgKil2YXJpYWJsZU5hbWU7CgotIChpZCA8Q29tcGxldGVQ cm9iZURpc3BsYXk+KWNyZWF0ZUNvbXBsZXRlUHJvYmVEaXNwbGF5Rm9yOiBhbk9iamVjdDsKCi0g KGlkIDxDb21wbGV0ZVByb2JlRGlzcGxheT4pY3JlYXRlQXJjaGl2ZWRDb21wbGV0ZVByb2JlRGlz cGxheUZvcjogYW5PYmplY3QgdmFyaWFibGVOYW1lOiAoY29uc3QgY2hhciAqKXZhcmlhYmxlTmFt ZTsKCgotIGFkZFByb2JlRGlzcGxheTogKGlkIDxDb21tb25Qcm9iZURpc3BsYXk+KXByb2JlRGlz cGxheTsKCgotIHJlbW92ZVByb2JlRGlzcGxheTogKGlkIDxDb21tb25Qcm9iZURpc3BsYXk+KXBy b2JlRGlzcGxheTsKCgotIGRyb3BQcm9iZURpc3BsYXlzRm9yOiBhbk9iamVjdDsKCgoKLSAodm9p ZCl1cGRhdGU7CgotIHNldERyb3BJbW1lZGlhdGVseUZsYWc6IChCT09MKWRyb3BJbW1lZGlhdGVG bGFnOwojIDI3NCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3NpbXRvb2xzZ3VpLmgiCmV4dGVy biBpZCA8UHJvYmVEaXNwbGF5PiBfY3JlYXRlUHJvYmVEaXNwbGF5IChpZCBvYmopOwpleHRlcm4g aWQgPENvbXBsZXRlUHJvYmVEaXNwbGF5PiBfY3JlYXRlQ29tcGxldGVQcm9iZURpc3BsYXkgKGlk IG9iaik7CgpleHRlcm4gaWQgPFByb2JlRGlzcGxheT4gY3JlYXRlQXJjaGl2ZWRQcm9iZURpc3Bs YXlOYW1lZCAoaWQgb2JqLCBjb25zdCBjaGFyICpuYW1lKTsKZXh0ZXJuIGlkIDxDb21wbGV0ZVBy b2JlRGlzcGxheT4gY3JlYXRlQXJjaGl2ZWRDb21wbGV0ZVByb2JlRGlzcGxheU5hbWVkIChpZCBv YmosIGNvbnN0IGNoYXIgKm5hbWUpOwoKZXh0ZXJuIGNvbnN0IGNoYXIgKmJ1aWxkV2luZG93R2Vv bWV0cnlSZWNvcmROYW1lIChjb25zdCBjaGFyICpiYXNlTmFtZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb21wb25lbnROYW1l KTsKQGVuZAoKQHByb3RvY29sIEdVSUNvbXBvc2l0ZSA8Q29tcG9zaXRlV2luZG93R2VvbWV0cnlS ZWNvcmROYW1lPgoKCgotIF9JX1VzaW5nOwotICh2b2lkKWVuYWJsZURlc3Ryb3lOb3RpZmljYXRp b246IG5vdGlmaWNhdGlvblRhcmdldAogICAgICAgICAgICAgICBub3RpZmljYXRpb25NZXRob2Q6 IChTRUwpbm90aWZpY2F0aW9uTWV0aG9kOwotICh2b2lkKWRpc2FibGVEZXN0cm95Tm90aWZpY2F0 aW9uOwpAZW5kCgpAcHJvdG9jb2wgR1VJU3dhcm0gPFN3YXJtLCBXaW5kb3dHZW9tZXRyeVJlY29y ZE5hbWUsIENSRUFUQUJMRT4KIyAzMTQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9zaW10b29s c2d1aS5oIgotIF9JX1VzaW5nOwoKCgoKLSBnbzsKCi0gKGlkIDxBY3Rpb25DYWNoZT4pZ2V0QWN0 aW9uQ2FjaGU7Ci0gKGlkIDxDb250cm9sUGFuZWw+KWdldENvbnRyb2xQYW5lbDsKQGVuZAoKCgoK CgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAg ICAgICAgICAgIFBhZ2UgIDIwMwoKCkBwcm90b2NvbCBNZXNzYWdlUHJvYmVXaWRnZXQgPENSRUFU QUJMRT4KCgoKLSBfSV9DcmVhdGluZzsKLSBzZXRQYXJlbnQ6IChpZCA8RnJhbWU+KXBhcmVudDsK LSBzZXRPYmplY3Q6IG9iamVjdDsKLSBzZXRQcm9iZTogKGlkIDxQcm9iZT4pcHJvYmU7CgotIF9J X1VzaW5nOwotICh2b2lkKXBhY2s7CkBlbmQKCkBwcm90b2NvbCBNdWx0aVZhclByb2JlV2lkZ2V0 IDxTd2FybU9iamVjdCwgQ1JFQVRBQkxFPgoKCgotIF9JX0NyZWF0aW5nOwotIHNldFBhcmVudDog KGlkIDxGcmFtZT4pcGFyZW50OwoKCi0gc2V0RmllbGRMYWJlbGluZ0ZsYWc6IChCT09MKWxhYmVs aW5nRmxhZzsKCi0gc2V0T2JqZWN0TmFtZVNlbGVjdG9yOiAoU0VMKW9iamVjdE5hbWVTZWxlY3Rv cjsKCi0gc2V0T2JqZWN0TGlzdDogKGlkIDxMaXN0PilvYmplY3RMaXN0OwoKLSBzZXRQcm9iZU1h cDogKGlkIDxQcm9iZU1hcD4pcHJvYmVNYXA7CgotIF9JX1VzaW5nOwotICh2b2lkKXVwZGF0ZTsK LSAodm9pZClwYWNrOwpAZW5kCgoKZXh0ZXJuIGlkIDxQcm9iZURpc3BsYXlNYW5hZ2VyPiBwcm9i ZURpc3BsYXlNYW5hZ2VyOwoKCmV4dGVybiBpZCA8U3ltYm9sPiBDb250cm9sU3RhdGVSdW5uaW5n LCBDb250cm9sU3RhdGVTdG9wcGVkLAogIENvbnRyb2xTdGF0ZVN0ZXBwaW5nLCBDb250cm9sU3Rh dGVOZXh0VGltZSwgQ29udHJvbFN0YXRlUXVpdDsKCgpleHRlcm4gdm9pZCBpbml0U2ltdG9vbHNH VUkgKHZvaWQpOwoKQGNsYXNzIENvbnRyb2xQYW5lbDsKQGNsYXNzIEFjdGlvbkNhY2hlOwpAY2xh c3MgUHJvYmVEaXNwbGF5OwpAY2xhc3MgU2luZ2xlUHJvYmVEaXNwbGF5OwpAY2xhc3MgU2ltcGxl UHJvYmVEaXNwbGF5OwpAY2xhc3MgQ29tcGxldGVQcm9iZURpc3BsYXk7CkBjbGFzcyBHVUlDb21w b3NpdGU7CkBjbGFzcyBNdWx0aVZhclByb2JlRGlzcGxheTsKQGNsYXNzIFByb2JlRGlzcGxheU1h bmFnZXI7CkBjbGFzcyBHVUlTd2FybTsKQGNsYXNzIE1lc3NhZ2VQcm9iZVdpZGdldDsKQGNsYXNz IE11bHRpVmFyUHJvYmVXaWRnZXQ7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAg ICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAyMDQKCgojIDUgIi91c3Iv bG9jYWwvc3dhcm0vaW5jbHVkZS9zd2FybS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNs dWRlL2V4dGVybnZhci5oIiAxCiMgNiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3N3YXJtLmgi IDIKCgoKCgpAcHJvdG9jb2wgU3dhcm1FbnZpcm9ubWVudCA8Q1JFQVRBQkxFPgoKCgotIF9JX0Ny ZWF0aW5nOworIGNyZWF0ZUJlZ2luOwotIHNldEFyZ3VtZW50czogKGlkIDxBcmd1bWVudHM+KWFy Z3VtZW50czsKLSBzZXRCYXRjaE1vZGU6IChCT09MKWJhdGNoTW9kZTsKLSBjcmVhdGVFbmQ7Cisg aW5pdFN3YXJtOiAoY29uc3QgY2hhciAqKWFwcE5hbWUgdmVyc2lvbjogKGNvbnN0IGNoYXIgKil2 ZXJzaW9uIGJ1Z0FkZHJlc3M6IChjb25zdCBjaGFyICopYnVnQWRkcmVzcyBhcmdDb3VudDogKHVu c2lnbmVkKWNvdW50IGFyZ3M6IChjb25zdCBjaGFyICoqKWFyZ3M7Ci0gX0lfVXNpbmc7Ci0gKHZv aWQpaW5pdFN3YXJtVXNpbmc6IChjb25zdCBjaGFyICopYXBwTmFtZSB2ZXJzaW9uOiAoY29uc3Qg Y2hhciAqKXZlcnNpb24gYnVnQWRkcmVzczogKGNvbnN0IGNoYXIgKilidWdBZGRyZXNzIGFyZ3M6 IChjb25zdCBjaGFyICoqKWFyZ3M7Ci0gKHRpbWV2YWxfdClnZXRDdXJyZW50VGltZTsKLSAoaWQg PFN3YXJtQWN0aXZpdHk+KWdldEN1cnJlbnRTd2FybUFjdGl2aXR5OwotICh2b2lkKWNyZWF0ZVBy b2JlRGlzcGxheTogb2JqOwotICh2b2lkKWNyZWF0ZUNvbXBsZXRlUHJvYmVEaXNwbGF5OiBvYmo7 Ci0gKHZvaWQpY3JlYXRlQXJjaGl2ZWRQcm9iZURpc3BsYXk6IG9iaiBuYW1lOiAoY29uc3QgY2hh ciAqKW5hbWU7Ci0gKHZvaWQpY3JlYXRlQXJjaGl2ZWRDb21wbGV0ZVByb2JlRGlzcGxheTogb2Jq IG5hbWU6IChjb25zdCBjaGFyICopbmFtZTsKLSAodm9pZClzZXRXaW5kb3dHZW9tZXRyeVJlY29y ZE5hbWU6IG9iaiBuYW1lOiAoY29uc3QgY2hhciAqKW5hbWU7Ci0gKHZvaWQpc2V0Q29tcG9uZW50 V2luZG93R2VvbWV0cnlSZWNvcmROYW1lRm9yOiBvYmogd2lkZ2V0OiB3aWRnZXQgbmFtZTogbmFt ZTsKLSAodm9pZClzZXRDb21wb25lbnRXaW5kb3dHZW9tZXRyeVJlY29yZE5hbWU6IHdpZGdldCBu YW1lOiBuYW1lOwotICh2b2lkKXhwcmludDogb2JqOwotICh2b2lkKXhmcHJpbnQ6IG9iajsKLSAo dm9pZClkdW1wRGlyZWN0b3J5OwotIChjb25zdCBjaGFyICopdHlwZU1vZHVsZTogKGNvbnN0IGNo YXIgKil0eXBlTmFtZTsKLSAodm9pZCl2ZXJib3NlTWVzc2FnZTogKGNvbnN0IGNoYXIgKiltZXNz YWdlOwotICh2b2lkKXVwZGF0ZURpc3BsYXk7CgotIChpZCA8QXJndW1lbnRzPilnZXRBcmd1bWVu dHM7Ci0gKGlkIDxTeW1ib2w+KWdldFN0YXJ0OwotIChpZCA8U3ltYm9sPilnZXRNZW1iZXI7Ci0g KGlkIDxTeW1ib2w+KWdldEVuZDsKCi0gKGlkIDxTeW1ib2w+KWdldEluaXRpYWxpemVkOwotIChp ZCA8U3ltYm9sPilnZXRSdW5uaW5nOwotIChpZCA8U3ltYm9sPilnZXRTdG9wcGVkOwotIChpZCA8 U3ltYm9sPilnZXRIb2xkaW5nOwotIChpZCA8U3ltYm9sPilnZXRSZWxlYXNlZDsKLSAoaWQgPFN5 bWJvbD4pZ2V0VGVybWluYXRlZDsKLSAoaWQgPFN5bWJvbD4pZ2V0Q29tcGxldGVkOwoKLSAoaWQg PFN5bWJvbD4pZ2V0UmFuZG9taXplZDsKLSAoaWQgPFN5bWJvbD4pZ2V0U2VxdWVudGlhbDsKCi0g KGlkIDxTeW1ib2w+KWdldENvbnRyb2xTdGF0ZVJ1bm5pbmc7Ci0gKGlkIDxTeW1ib2w+KWdldENv bnRyb2xTdGF0ZVN0b3BwZWQ7Ci0gKGlkIDxTeW1ib2w+KWdldENvbnRyb2xTdGF0ZVN0ZXBwaW5n OwotIChpZCA8U3ltYm9sPilnZXRDb250cm9sU3RhdGVRdWl0OwoKCgoKCgoKMjAwMS0wOC0yNCAw MToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAg MjA1CgoKLSAoaWQgPFN5bWJvbD4pZ2V0Q29udHJvbFN0YXRlTmV4dFRpbWU7CgotIChpZCA8Wm9u ZT4pZ2V0U2NyYXRjaFpvbmU7Ci0gKGlkIDxab25lPilnZXRHbG9iYWxab25lOwoKLSAoaWQgPE1U MTk5MzdnZW4+KWdldFJhbmRvbUdlbmVyYXRvcjsKLSAoaWQgPFVuaWZvcm1JbnRlZ2VyRGlzdD4p Z2V0VW5pZm9ybUludFJhbmQ7Ci0gKGlkIDxVbmlmb3JtRG91YmxlRGlzdD4pZ2V0VW5pZm9ybURi bFJhbmQ7CgotIChpZCA8UHJvYmVMaWJyYXJ5PilnZXRQcm9iZUxpYnJhcnk7Ci0gKGlkIDxQcm9i ZURpc3BsYXlNYW5hZ2VyPilnZXRQcm9iZURpc3BsYXlNYW5hZ2VyOwoKLSAoaWQgPEFyY2hpdmVy PilnZXRIZGY1QXJjaGl2ZXI7Ci0gKGlkIDxBcmNoaXZlcj4pZ2V0TGlzcEFyY2hpdmVyOwotIChp ZCA8QXJjaGl2ZXI+KWdldEhkZjVBcHBBcmNoaXZlcjsKLSAoaWQgPEFyY2hpdmVyPilnZXRMaXNw QXBwQXJjaGl2ZXI7Ci0gKEJPT0wpZ2V0R3VpRmxhZzsKCi0gKGlkIDxTeW1ib2w+KWdldExhbmd1 YWdlQ09NOwotIChpZCA8U3ltYm9sPilnZXRMYW5ndWFnZUphdmE7Ci0gKGlkIDxTeW1ib2w+KWdl dExhbmd1YWdlT2JqYzsKQGVuZAoKCmV4dGVybiBCT09MIHN3YXJtR1VJTW9kZTsKCkBjbGFzcyBT d2FybUVudmlyb25tZW50OwoKZXh0ZXJuIHZvaWQgX2luaXRTd2FybV8gKGludCBhcmdjLCBjb25z dCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqYXBwTmFtZSwKICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKnZlcnNpb24sIGNvbnN0IGNoYXIgKmJ1Z0FkZHJlc3MsCiAgICAgICAg ICAgICAgICAgICAgICAgICBDbGFzcyBhcmd1bWVudHNDbGFzcywKICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAg ICAgIGludCAoKm9wdGlvbkZ1bmMpIChpbnQga2V5LCBjb25zdCBjaGFyICphcmcpLAogICAgICAg ICAgICAgICAgICAgICAgICAgQk9PTCBmb3JjZUJhdGNoTW9kZSwKICAgICAgICAgICAgICAgICAg ICAgICAgIEJPT0wgaW5oaWJpdEV4ZWN1dGFibGVTZWFyY2hGbGFnKTsKIyAxMiAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL3NpbXRvb2xzLmgiIDIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1 ZGUvb2JqZWN0YmFzZS5oIiAxCiMgMTMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9zaW10b29s cy5oIiAyCgpAcHJvdG9jb2wgVU5hbWUgPFN3YXJtT2JqZWN0LCBDUkVBVEFCTEU+CiMgMzEgIi91 c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9zaW10b29scy5oIgotIF9JX0NyZWF0aW5nOwoKCgorIGNy ZWF0ZTogKGlkIDxab25lPilhWm9uZSBzZXRCYXNlTmFtZTogKGNvbnN0IGNoYXIgKilhU3RyaW5n OwoKCgoKKyBjcmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUgc2V0QmFzZU5hbWVPYmplY3Q6IGFTdHJp bmdPYmplY3Q7CgoKLSBzZXRCYXNlTmFtZTogKGNvbnN0IGNoYXIgKilhU3RyaW5nOwoKCgoKCgoK CgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAg ICAgICAgICBQYWdlICAyMDYKCgoKLSBzZXRCYXNlTmFtZU9iamVjdDogYVN0cmluZ09iamVjdDsK Ci0gX0lfVXNpbmc7CgotIChjb25zdCBjaGFyICopZ2V0TmV3TmFtZTsKCgotIGdldE5ld05hbWVP YmplY3Q7CgoKLSByZXNldENvdW50ZXI7CkBlbmQKCkBwcm90b2NvbCBJbkZpbGUgPFN3YXJtT2Jq ZWN0LCBDUkVBVEFCTEU+CiMgNzEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9zaW10b29scy5o IgotIF9JX0NyZWF0aW5nOwoKCisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNldE5hbWU6IChj b25zdCBjaGFyICopdGhlTmFtZTsKCgorIGNyZWF0ZTogKGlkIDxab25lPilhWm9uZSB3aXRoTmFt ZTogKGNvbnN0IGNoYXIgKil0aGVOYW1lOwoKLSBfSV9Vc2luZzsKCgotIChpbnQpZ2V0V29yZDog KGNoYXIgKilhV29yZDsKCgoKLSAoaW50KWdldExpbmU6IChjaGFyICopYUxpbmU7CgoKCgotIChp bnQpZ2V0SW50OiAoaW50ICopYW5JbnQ7CgoKCgotIChpbnQpZ2V0VW5zaWduZWQ6ICh1bnNpZ25l ZCAqKWFuVW5zaWduZWQ7CgoKCgotIChpbnQpZ2V0TG9uZzogKGxvbmcgKilhTG9uZzsKCgoKCi0g KGludClnZXRVbnNpZ25lZExvbmc6ICh1bnNpZ25lZCBsb25nICopYW5VbnNMb25nOwoKCgoKCgoK CgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAg ICAgICAgICAgIFBhZ2UgIDIwNwoKCi0gKGludClnZXREb3VibGU6IChkb3VibGUgKilhRG91Ymxl OwoKCgoKLSAoaW50KWdldEZsb2F0OiAoZmxvYXQgKilhRmxvYXQ7CgoKCgotIChpbnQpZ2V0Q2hh cjogKGNoYXIgKilhQ2hhcjsKCgotIChpbnQpdW5HZXRDaGFyOiAoY2hhcilhQ2hhcjsKCgotIChp bnQpc2tpcExpbmU7CgoKCi0gKHZvaWQpZHJvcDsKQGVuZAoKQHByb3RvY29sIE91dEZpbGUgPFN3 YXJtT2JqZWN0LCBDUkVBVEFCTEU+CiMgMTQ1ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvc2lt dG9vbHMuaCIKLSBfSV9DcmVhdGluZzsKCgorIGNyZWF0ZTogKGlkIDxab25lPilhWm9uZSBzZXRO YW1lOiAoY29uc3QgY2hhciAqKXRoZU5hbWU7CgoKKyBjcmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUg d2l0aE5hbWU6IChjb25zdCBjaGFyICopdGhlTmFtZTsKCi0gX0lfVXNpbmc7CgoKLSBwdXRTdHJp bmc6IChjb25zdCBjaGFyICopYVN0cmluZzsKCgoKLSBwdXRJbnQ6IChpbnQpIGFuSW50OwoKCgot IHB1dFVuc2lnbmVkOiAodW5zaWduZWQpYW5VbnNpZ25lZDsKCgoKLSBwdXRMb25nOiAobG9uZylh TG9uZzsKCgoKLSBwdXRVbnNpZ25lZExvbmc6ICh1bnNpZ25lZCBsb25nKWFuVW5zTG9uZzsKCgoK CgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAg ICAgICAgICAgICAgIFBhZ2UgIDIwOAoKCi0gcHV0RG91YmxlOiAoZG91YmxlKWFEb3VibGU7CgoK Ci0gcHV0RmxvYXQ6IChmbG9hdClhRmxvYXQ7CgoKCi0gcHV0Q2hhcjogKGNoYXIpYUNoYXI7CgoK LSBwdXROZXdMaW5lOwoKCi0gcHV0VGFiOwoKCgotICh2b2lkKWRyb3A7CkBlbmQKCgpAcHJvdG9j b2wgQXBwZW5kRmlsZSA8T3V0RmlsZSwgQ1JFQVRBQkxFPgojIDIwOCAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL3NpbXRvb2xzLmgiCi0gX0lfQ3JlYXRpbmc7CgoKKyBjcmVhdGU6IChpZCA8Wm9u ZT4pYVpvbmUgc2V0TmFtZTogKGNvbnN0IGNoYXIgKil0aGVOYW1lOwoKCisgY3JlYXRlOiAoaWQg PFpvbmU+KWFab25lIHdpdGhOYW1lOiAoY29uc3QgY2hhciAqKXRoZU5hbWU7CkBlbmQKCkBwcm90 b2NvbCBPYmplY3RMb2FkZXIgPFN3YXJtT2JqZWN0LCBDUkVBVEFCTEU+CiMgMjI2ICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvc2ltdG9vbHMuaCIKLSBfSV9DcmVhdGluZzsKCgoKCisgbG9hZDog YW5PYmplY3QgZnJvbTogYUZpbGVPYmplY3Q7CgoKCgorIGxvYWQ6IGFuT2JqZWN0IGZyb21GaWxl TmFtZWQ6IChjb25zdCBjaGFyICopYUZpbGVOYW1lOwoKCgoKCisgbG9hZDogYW5PYmplY3QgZnJv bUFwcENvbmZpZ0ZpbGVOYW1lZDogKGNvbnN0IGNoYXIgKilhRmlsZU5hbWU7CgoKCgoKCgoKCgoK MjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAg ICAgICAgUGFnZSAgMjA5CgoKCisgbG9hZDogYW5PYmplY3QgZnJvbUFwcERhdGFGaWxlTmFtZWQ6 IChjb25zdCBjaGFyICopYUZpbGVOYW1lOwotIF9JX1NldHRpbmc7CgoKLSBzZXRGaWxlT2JqZWN0 OiBhRmlsZU9iamVjdDsKCgoKCi0gc2V0VGVtcGxhdGVQcm9iZU1hcDogKGlkIDxQcm9iZU1hcD4p cHJvYmVNYXA7CgotIF9JX1VzaW5nOwoKCi0gbG9hZE9iamVjdDogYW5PYmplY3Q7CgoKCi0gdXBk YXRlQ2FjaGU6IGV4YW1wbGVUYXJnZXQ7CkBlbmQKCgoKQHByb3RvY29sIE9iamVjdFNhdmVyIDxT d2FybU9iamVjdCwgQ1JFQVRBQkxFPgojIDI4MiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3Np bXRvb2xzLmgiCi0gX0lfQ3JlYXRpbmc7CgoKKyBzYXZlOiBhbk9iamVjdCB0bzogYUZpbGVPYmpl Y3Q7CgoKCgorIHNhdmU6IGFuT2JqZWN0IHRvOiBhRmlsZU9iamVjdCB3aXRoVGVtcGxhdGU6IChp ZCA8UHJvYmVNYXA+KWFQcm9iZU1hcDsKCgoKKyBzYXZlOiBhbk9iamVjdCB0b0ZpbGVOYW1lZDog KGNvbnN0IGNoYXIgKilhRmlsZU5hbWU7CgoKCgorIHNhdmU6IGFuT2JqZWN0IHRvRmlsZU5hbWVk OiAoY29uc3QgY2hhciAqKWFGaWxlTmFtZQogICAgICAgICAgICAgICAgd2l0aFRlbXBsYXRlOiAo aWQgPFByb2JlTWFwPilhUHJvYmVNYXA7CgotIF9JX1NldHRpbmc7CgoKLSBzZXRGaWxlT2JqZWN0 OiBhRmlsZU9iamVjdDsKCgoKCi0gc2V0VGVtcGxhdGVQcm9iZU1hcDogKGlkIDxQcm9iZU1hcD4p YVByb2JlTWFwOwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1h aW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDIxMAoKCi0gX0lfVXNpbmc7CgoKLSBzYXZl T2JqZWN0OiBhbk9iamVjdDsKQGVuZAoKQHByb3RvY29sIFFTb3J0IDxTd2FybU9iamVjdCwgQ1JF QVRBQkxFPgoKCgoKCgoKLSBfSV9DcmVhdGluZzsKLSBfSV9Vc2luZzsKCgoKKyAodm9pZClzb3J0 T2JqZWN0c0luOiBhQ29sbGVjdGlvbjsKCgoKKyAodm9pZClzb3J0T2JqZWN0c0luOiBhQ29sbGVj dGlvbiB1c2luZzogKFNFTClhU2VsZWN0b3I7CgoKCgorICh2b2lkKXNvcnROdW1iZXJzSW46IGFD b2xsZWN0aW9uOwoKCgoKKyAodm9pZClzb3J0TnVtYmVyc0luOiBhQ29sbGVjdGlvbgogICAgICAg ICAgICAgICAgdXNpbmc6IChpbnQgKCopIChjb25zdCB2b2lkKiwgY29uc3Qgdm9pZCopKWNvbXBf ZnVuOwoKCgoKKyAodm9pZClyZXZlcnNlT3JkZXJPZjogYUNvbGxlY3Rpb247CkBlbmQKCkBwcm90 b2NvbCBOU2VsZWN0IDxTd2FybU9iamVjdCwgQ1JFQVRBQkxFPgoKCgoKLSBfSV9DcmVhdGluZzsK LSBfSV9Vc2luZzsKCgoKKyAodm9pZClzZWxlY3Q6IChpbnQpbiBmcm9tOiBhQ29sbGVjdGlvbiBp bnRvOiBiQ29sbGVjdGlvbjsKQGVuZAoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAg ICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAyMTEKCgoKIyAxICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvc2ltdG9vbHMvaW5pdFN3YXJtLmgiIDEKIyAzNzAgIi91 c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9zaW10b29scy5oIiAyCiMgNDMwICIvdXNyL2xvY2FsL3N3 YXJtL2luY2x1ZGUvc2ltdG9vbHMuaCIKQGNsYXNzIENvbnRyb2xQYW5lbDsKQGNsYXNzIFVOYW1l OwpAY2xhc3MgSW5GaWxlOwpAY2xhc3MgT3V0RmlsZTsKQGNsYXNzIEFwcGVuZEZpbGU7CkBjbGFz cyBPYmplY3RMb2FkZXI7CkBjbGFzcyBPYmplY3RTYXZlcjsKQGNsYXNzIFFTb3J0OwpAY2xhc3Mg TlNlbGVjdDsKIyAxMSAibWFpbi5tIiAyCiMgMSAiUHBsT2JzZXJ2ZXJTd2FybS5oIiAxCgoKCgoK IyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFzZS5oIiAxCiMgNyAiUHBsT2Jz ZXJ2ZXJTd2FybS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3NpbXRvb2xzZ3Vp L0dVSVN3YXJtLmgiIDEKCgoKCgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9zaW10b29s c2d1aS5oIiAxCiMgNyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3NpbXRvb2xzZ3VpL0dVSVN3 YXJtLmgiIDIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFzZS9Td2FybS5o IiAxCgoKCgoKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFzZS5oIiAxCiMg NyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2UvU3dhcm0uaCIgMgojIDEgIi91 c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS9Td2FybVByb2Nlc3MuaCIgMQojIDEyICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkvU3dhcm1Qcm9jZXNzLmgiCiMgMSAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5L1hBY3Rpdml0eS5oIiAxCiMgMTIgIi91c3Iv bG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS9YQWN0aXZpdHkuaCIKIyAxICIvdXNyL2xvY2Fs L3N3YXJtL2luY2x1ZGUvZGVmb2JqL0NyZWF0ZS5oIiAxCiMgMTIgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9kZWZvYmovQ3JlYXRlLmgiCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2Rl Zm9iai9DdXN0b21pemUuaCIgMQojIDEyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2Jq L0N1c3RvbWl6ZS5oIgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmovRGVmQ2xh c3MuaCIgMQojIDEyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0RlZkNsYXNzLmgi CiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvT2JqZWN0LmgiIDEKIyAxMyAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9EZWZDbGFzcy5oIiAyCiMgMSAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy1hcGkuaCIgMQojIDM0ICIvdXNyL2xvY2FsL3N3YXJt L2luY2x1ZGUvb2JqYy9vYmpjLWFwaS5oIgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9v YmpjL29iamMuaCIgMQojIDM1ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLWFw aS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvaGFzaC5oIiAxCiMgMzYg Ii91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMtYXBpLmgiIDIKCgoKCgoKCjIwMDEt MDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAg IFBhZ2UgIDIxMgoKCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvdGhyLmgiIDEK IyA0MSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvdGhyLmgiCiMgMSAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy5oIiAxCiMgNDIgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9vYmpjL3Roci5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvZXh0 ZXJudmFyLmgiIDEKIyA0MyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvdGhyLmgiIDIK CgoKCmV4dGVybiBpbnQgX19vYmpjX3RocmVhZF9leGl0X3N0YXR1czsKIyA1OSAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL29iamMvdGhyLmgiCnR5cGVkZWYgdm9pZCAqIG9iamNfdGhyZWFkX3Q7 CgoKc3RydWN0IG9iamNfbXV0ZXgKewogIHZvbGF0aWxlIG9iamNfdGhyZWFkX3Qgb3duZXI7CiAg dm9sYXRpbGUgaW50IGRlcHRoOwogIHZvaWQgKiBiYWNrZW5kOwp9Owp0eXBlZGVmIHN0cnVjdCBv YmpjX211dGV4ICpvYmpjX211dGV4X3Q7CgoKc3RydWN0IG9iamNfY29uZGl0aW9uCnsKICB2b2lk ICogYmFja2VuZDsKfTsKdHlwZWRlZiBzdHJ1Y3Qgb2JqY19jb25kaXRpb24gKm9iamNfY29uZGl0 aW9uX3Q7CgoKb2JqY19tdXRleF90IG9iamNfbXV0ZXhfYWxsb2NhdGUodm9pZCk7CmludCBvYmpj X211dGV4X2RlYWxsb2NhdGUob2JqY19tdXRleF90IG11dGV4KTsKaW50IG9iamNfbXV0ZXhfbG9j ayhvYmpjX211dGV4X3QgbXV0ZXgpOwppbnQgb2JqY19tdXRleF91bmxvY2sob2JqY19tdXRleF90 IG11dGV4KTsKaW50IG9iamNfbXV0ZXhfdHJ5bG9jayhvYmpjX211dGV4X3QgbXV0ZXgpOwoKCm9i amNfY29uZGl0aW9uX3Qgb2JqY19jb25kaXRpb25fYWxsb2NhdGUodm9pZCk7CmludCBvYmpjX2Nv bmRpdGlvbl9kZWFsbG9jYXRlKG9iamNfY29uZGl0aW9uX3QgY29uZGl0aW9uKTsKaW50IG9iamNf Y29uZGl0aW9uX3dhaXQob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24sIG9iamNfbXV0ZXhfdCBt dXRleCk7CmludCBvYmpjX2NvbmRpdGlvbl9zaWduYWwob2JqY19jb25kaXRpb25fdCBjb25kaXRp b24pOwppbnQgb2JqY19jb25kaXRpb25fYnJvYWRjYXN0KG9iamNfY29uZGl0aW9uX3QgY29uZGl0 aW9uKTsKCgpvYmpjX3RocmVhZF90IG9iamNfdGhyZWFkX2RldGFjaChTRUwgc2VsZWN0b3IsIGlk IG9iamVjdCwgaWQgYXJndW1lbnQpOwp2b2lkIG9iamNfdGhyZWFkX3lpZWxkKHZvaWQpOwppbnQg b2JqY190aHJlYWRfZXhpdCh2b2lkKTsKaW50IG9iamNfdGhyZWFkX3NldF9wcmlvcml0eShpbnQg cHJpb3JpdHkpOwppbnQgb2JqY190aHJlYWRfZ2V0X3ByaW9yaXR5KHZvaWQpOwp2b2lkICogb2Jq Y190aHJlYWRfZ2V0X2RhdGEodm9pZCk7CmludCBvYmpjX3RocmVhZF9zZXRfZGF0YSh2b2lkICp2 YWx1ZSk7Cm9iamNfdGhyZWFkX3Qgb2JqY190aHJlYWRfaWQodm9pZCk7CiMgMTEzICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvb2JqYy90aHIuaCIKdHlwZWRlZiB2b2lkICgqb2JqY190aHJlYWRf Y2FsbGJhY2spKCk7Cm9iamNfdGhyZWFkX2NhbGxiYWNrIG9iamNfc2V0X3RocmVhZF9jYWxsYmFj ayhvYmpjX3RocmVhZF9jYWxsYmFjayBmdW5jKTsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAg ICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDIxMwoKCgoK aW50IF9fb2JqY19pbml0X3RocmVhZF9zeXN0ZW0odm9pZCk7CmludCBfX29iamNfZmluaV90aHJl YWRfc3lzdGVtKHZvaWQpOwoKCmludCBfX29iamNfbXV0ZXhfYWxsb2NhdGUob2JqY19tdXRleF90 IG11dGV4KTsKaW50IF9fb2JqY19tdXRleF9kZWFsbG9jYXRlKG9iamNfbXV0ZXhfdCBtdXRleCk7 CmludCBfX29iamNfbXV0ZXhfbG9jayhvYmpjX211dGV4X3QgbXV0ZXgpOwppbnQgX19vYmpjX211 dGV4X3RyeWxvY2sob2JqY19tdXRleF90IG11dGV4KTsKaW50IF9fb2JqY19tdXRleF91bmxvY2so b2JqY19tdXRleF90IG11dGV4KTsKCgppbnQgX19vYmpjX2NvbmRpdGlvbl9hbGxvY2F0ZShvYmpj X2NvbmRpdGlvbl90IGNvbmRpdGlvbik7CmludCBfX29iamNfY29uZGl0aW9uX2RlYWxsb2NhdGUo b2JqY19jb25kaXRpb25fdCBjb25kaXRpb24pOwppbnQgX19vYmpjX2NvbmRpdGlvbl93YWl0KG9i amNfY29uZGl0aW9uX3QgY29uZGl0aW9uLCBvYmpjX211dGV4X3QgbXV0ZXgpOwppbnQgX19vYmpj X2NvbmRpdGlvbl9icm9hZGNhc3Qob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24pOwppbnQgX19v YmpjX2NvbmRpdGlvbl9zaWduYWwob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24pOwoKCm9iamNf dGhyZWFkX3QgX19vYmpjX3RocmVhZF9kZXRhY2godm9pZCAoKmZ1bmMpKHZvaWQgKmFyZyksIHZv aWQgKmFyZyk7CmludCBfX29iamNfdGhyZWFkX3NldF9wcmlvcml0eShpbnQgcHJpb3JpdHkpOwpp bnQgX19vYmpjX3RocmVhZF9nZXRfcHJpb3JpdHkodm9pZCk7CnZvaWQgX19vYmpjX3RocmVhZF95 aWVsZCh2b2lkKTsKaW50IF9fb2JqY190aHJlYWRfZXhpdCh2b2lkKTsKb2JqY190aHJlYWRfdCBf X29iamNfdGhyZWFkX2lkKHZvaWQpOwppbnQgX19vYmpjX3RocmVhZF9zZXRfZGF0YSh2b2lkICp2 YWx1ZSk7CnZvaWQgKiBfX29iamNfdGhyZWFkX2dldF9kYXRhKHZvaWQpOwojIDM3ICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLWFwaS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9nY2Mz L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkaW8uaCIgMSAz CiMgMzggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMtYXBpLmgiIDIKIyAxICIv dXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVk ZS9zdGRhcmcuaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMt YXBpLmgiIDIKCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvZXh0ZXJudmFyLmgi IDEKIyA0MSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy1hcGkuaCIgMgojIDUw ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLWFwaS5oIgpzdHJ1Y3Qgb2JqY19t ZXRob2RfZGVzY3JpcHRpb24KewogICAgU0VMIG5hbWU7CiAgICBjaGFyICp0eXBlczsKfTsKIyAx MDYgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMtYXBpLmgiCmV4dGVybiB2b2lk IG9iamNfZXJyb3IgKGlkIG9iamVjdCwgaW50IGNvZGUsIGNvbnN0IGNoYXIqIGZtdCwgLi4uKTsK ZXh0ZXJuIHZvaWQgb2JqY192ZXJyb3IgKGlkIG9iamVjdCwgaW50IGNvZGUsIGNvbnN0IGNoYXIq IGZtdCwgdmFfbGlzdCBhcCk7CnR5cGVkZWYgQk9PTCAoKm9iamNfZXJyb3JfaGFuZGxlcikgKGlk LCBpbnQgY29kZSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKTsKb2JqY19lcnJvcl9oYW5k bGVyIG9iamNfc2V0X2Vycm9yX2hhbmRsZXIgKG9iamNfZXJyb3JfaGFuZGxlciBmdW5jKTsKIyAx NDcgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMtYXBpLmgiCnN0cnVjdCBvYmpj X3N0YXRpY19pbnN0YW5jZXMKewogIGNoYXIgKmNsYXNzX25hbWU7CiAgaWQgaW5zdGFuY2VzWzBd Owp9OwojIDE2MiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy1hcGkuaCIKdHlw ZWRlZiBzdHJ1Y3Qgb2JqY19zeW10YWIgewogIHVuc2lnbmVkIGxvbmcgc2VsX3JlZl9jbnQ7CgoK CgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAg ICAgICAgICAgICBQYWdlICAyMTQKCgogIFNFTCByZWZzOwogIHVuc2lnbmVkIHNob3J0IGNsc19k ZWZfY250OwoKICB1bnNpZ25lZCBzaG9ydCBjYXRfZGVmX2NudDsKCgoKICB2b2lkICpkZWZzWzFd OwoKCgoKCn0gU3ltdGFiLCAqU3ltdGFiX3Q7CiMgMTg5ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1 ZGUvb2JqYy9vYmpjLWFwaS5oIgp0eXBlZGVmIHN0cnVjdCBvYmpjX21vZHVsZSB7CiAgdW5zaWdu ZWQgbG9uZyB2ZXJzaW9uOwogIHVuc2lnbmVkIGxvbmcgc2l6ZTsKICBjb25zdCBjaGFyKiBuYW1l OwoKCgogIFN5bXRhYl90IHN5bXRhYjsKCgoKCgp9IE1vZHVsZSwgKk1vZHVsZV90OwoKCgoKCgp0 eXBlZGVmIHN0cnVjdCBvYmpjX2l2YXIqIEl2YXJfdDsKdHlwZWRlZiBzdHJ1Y3Qgb2JqY19pdmFy X2xpc3QgewogIGludCBpdmFyX2NvdW50OwoKCgoKICBzdHJ1Y3Qgb2JqY19pdmFyIHsKICAgIGNv bnN0IGNoYXIqIGl2YXJfbmFtZTsKCgogICAgY29uc3QgY2hhciogaXZhcl90eXBlOwoKCiAgICBp bnQgaXZhcl9vZmZzZXQ7CgoKCiAgfSBpdmFyX2xpc3RbMV07Cgp9IEl2YXJMaXN0LCAqSXZhckxp c3RfdDsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkg ICAgICAgICAgICAgICAgICAgIFBhZ2UgIDIxNQoKCiMgMjQwICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvb2JqYy9vYmpjLWFwaS5oIgpzdHJ1Y3Qgb2JqY19tZXRob2QgewogIFNFTCBtZXRob2Rf bmFtZTsKCgoKCgogIGNvbnN0IGNoYXIqIG1ldGhvZF90eXBlczsKCgogIElNUCBtZXRob2RfaW1w OwoKfTsKCnR5cGVkZWYgc3RydWN0IG9iamNfbWV0aG9kIE1ldGhvZDsKCnR5cGVkZWYgTWV0aG9k KiBNZXRob2RfdDsKdHlwZWRlZiBzdHJ1Y3Qgb2JqY19tZXRob2RfbGlzdCB7CiAgc3RydWN0IG9i amNfbWV0aG9kX2xpc3QqIG1ldGhvZF9uZXh0OwoKCiAgaW50IG1ldGhvZF9jb3VudDsKCiAgc3Ry dWN0IG9iamNfbWV0aG9kIG1ldGhvZF9saXN0WzFdOwoKfSBNZXRob2RMaXN0LCAqTWV0aG9kTGlz dF90OwoKc3RydWN0IG9iamNfcHJvdG9jb2xfbGlzdCB7CiAgc3RydWN0IG9iamNfcHJvdG9jb2xf bGlzdCAqbmV4dDsKICBpbnQgY291bnQ7CiAgUHJvdG9jb2wgKmxpc3RbMV07Cn07CiMgMzI0ICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLWFwaS5oIgp0eXBlZGVmIHN0cnVjdCBv YmpjX2NhdGVnb3J5IHsKICBjb25zdCBjaGFyKiBjYXRlZ29yeV9uYW1lOwoKCiAgY29uc3QgY2hh ciogY2xhc3NfbmFtZTsKCiAgTWV0aG9kTGlzdF90IGluc3RhbmNlX21ldGhvZHM7CgoKCiAgTWV0 aG9kTGlzdF90IGNsYXNzX21ldGhvZHM7CgoKCiAgc3RydWN0IG9iamNfcHJvdG9jb2xfbGlzdCAq cHJvdG9jb2xzOwoKfSBDYXRlZ29yeSwgKkNhdGVnb3J5X3Q7CgoKCgoKCgoKCgoKCjIwMDEtMDgt MjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBh Z2UgIDIxNgoKCgp0eXBlZGVmIHN0cnVjdCBvYmpjX3N1cGVyIHsKICBpZCBzZWxmOwoKICBDbGFz cyBjbGFzczsKfSBTdXBlciwgKlN1cGVyX3Q7CgpJTVAgb2JqY19tc2dfbG9va3VwX3N1cGVyKFN1 cGVyX3Qgc3VwZXIsIFNFTCBzZWwpOwoKCnJldHZhbF90IG9iamNfbXNnX3NlbmR2KGlkLCBTRUws IGFyZ2xpc3RfdCk7CiMgMzY3ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLWFw aS5oIgpleHRlcm4gQ2xhc3MgKCpfb2JqY19sb29rdXBfY2xhc3MpIChjb25zdCBjaGFyICpuYW1l KTsKCgoKCgoKCmV4dGVybiB2b2lkICgqX29iamNfbG9hZF9jYWxsYmFjaykgKENsYXNzIGNsYXNz LCBDYXRlZ29yeSogY2F0ZWdvcnkpOwoKCgoKZXh0ZXJuIGlkICgqX29iamNfb2JqZWN0X2FsbG9j KSAoQ2xhc3MgY2xhc3MpOwpleHRlcm4gaWQgKCpfb2JqY19vYmplY3RfY29weSkgKGlkIG9iamVj dCk7CmV4dGVybiBpZCAoKl9vYmpjX29iamVjdF9kaXNwb3NlKSAoaWQgb2JqZWN0KTsKCgoKCgoK CnZvaWQgKm9iamNfbWFsbG9jIChzaXplX3Qgc2l6ZSk7Cgp2b2lkICpvYmpjX2F0b21pY19tYWxs b2MgKHNpemVfdCBzaXplKTsKCnZvaWQgKm9iamNfdmFsbG9jIChzaXplX3Qgc2l6ZSk7Cgp2b2lk ICpvYmpjX3JlYWxsb2MgKHZvaWQgKm1lbSwgc2l6ZV90IHNpemUpOwoKdm9pZCAqb2JqY19jYWxs b2MgKHNpemVfdCBuZWxlbSwgc2l6ZV90IHNpemUpOwoKdm9pZCBvYmpjX2ZyZWUgKHZvaWQgKm1l bSk7CiMgNDEyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLWFwaS5oIgpleHRl cm4gdm9pZCAqKCpfb2JqY19tYWxsb2MpIChzaXplX3QpOwpleHRlcm4gdm9pZCAqKCpfb2JqY19h dG9taWNfbWFsbG9jKSAoc2l6ZV90KTsKZXh0ZXJuIHZvaWQgKigqX29iamNfdmFsbG9jKSAoc2l6 ZV90KTsKZXh0ZXJuIHZvaWQgKigqX29iamNfcmVhbGxvYykgKHZvaWQgKiwgc2l6ZV90KTsKZXh0 ZXJuIHZvaWQgKigqX29iamNfY2FsbG9jKSAoc2l6ZV90LCBzaXplX3QpOwpleHRlcm4gdm9pZCAo Kl9vYmpjX2ZyZWUpICh2b2lkICopOwoKTWV0aG9kX3QgY2xhc3NfZ2V0X2NsYXNzX21ldGhvZCAo TWV0YUNsYXNzIGNsYXNzLCBTRUwgYVNlbCk7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAg ICAgICAgICAgICAgICAgbWFpbi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgMjE3CgoKTWV0 aG9kX3QgY2xhc3NfZ2V0X2luc3RhbmNlX21ldGhvZCAoQ2xhc3MgY2xhc3MsIFNFTCBhU2VsKTsK CkNsYXNzIGNsYXNzX3Bvc2VfYXMgKENsYXNzIGltcG9zdG9yLCBDbGFzcyBzdXBlcmNsYXNzKTsK CkNsYXNzIG9iamNfZ2V0X2NsYXNzIChjb25zdCBjaGFyICpuYW1lKTsKCkNsYXNzIG9iamNfbG9v a3VwX2NsYXNzIChjb25zdCBjaGFyICpuYW1lKTsKCkNsYXNzIG9iamNfbmV4dF9jbGFzcyAodm9p ZCAqKmVudW1fc3RhdGUpOwoKY29uc3QgY2hhciAqc2VsX2dldF9uYW1lIChTRUwgc2VsZWN0b3Ip OwoKY29uc3QgY2hhciAqc2VsX2dldF90eXBlIChTRUwgc2VsZWN0b3IpOwoKU0VMIHNlbF9nZXRf dWlkIChjb25zdCBjaGFyICpuYW1lKTsKClNFTCBzZWxfZ2V0X2FueV91aWQgKGNvbnN0IGNoYXIg Km5hbWUpOwoKU0VMIHNlbF9nZXRfYW55X3R5cGVkX3VpZCAoY29uc3QgY2hhciAqbmFtZSk7CgpT RUwgc2VsX2dldF90eXBlZF91aWQgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIqKTsKClNF TCBzZWxfcmVnaXN0ZXJfbmFtZSAoY29uc3QgY2hhciAqbmFtZSk7CgpTRUwgc2VsX3JlZ2lzdGVy X3R5cGVkX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIqdHlwZSk7CgoKQk9PTCBz ZWxfaXNfbWFwcGVkIChTRUwgYVNlbCk7CgpleHRlcm4gaWQgY2xhc3NfY3JlYXRlX2luc3RhbmNl IChDbGFzcyBjbGFzcyk7CgpzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgpjbGFzc19nZXRfY2xh c3NfbmFtZSAoQ2xhc3MgY2xhc3MpCnsKICByZXR1cm4gKChjbGFzcykmJigoKChjbGFzcyktPmlu Zm8pICYgMHgxTCkgPT0gMHgxTCkpP2NsYXNzLT5uYW1lOigoY2xhc3M9PShDbGFzcykwKT8iTmls IjowKTsKfQoKc3RhdGljIGlubGluZSBsb25nCmNsYXNzX2dldF9pbnN0YW5jZV9zaXplIChDbGFz cyBjbGFzcykKewogIHJldHVybiAoKGNsYXNzKSYmKCgoKGNsYXNzKS0+aW5mbykgJiAweDFMKSA9 PSAweDFMKSkgPyBjbGFzcy0+aW5zdGFuY2Vfc2l6ZSA6IDA7Cn0KCnN0YXRpYyBpbmxpbmUgTWV0 YUNsYXNzCmNsYXNzX2dldF9tZXRhX2NsYXNzIChDbGFzcyBjbGFzcykKewogIHJldHVybiAoKGNs YXNzKSYmKCgoKGNsYXNzKS0+aW5mbykgJiAweDFMKSA9PSAweDFMKSkgPyBjbGFzcy0+Y2xhc3Nf cG9pbnRlciA6IChDbGFzcykwOwp9CgpzdGF0aWMgaW5saW5lIENsYXNzCmNsYXNzX2dldF9zdXBl cl9jbGFzcyAoQ2xhc3MgY2xhc3MpCnsKICByZXR1cm4gKChjbGFzcykmJigoKChjbGFzcyktPmlu Zm8pICYgMHgxTCkgPT0gMHgxTCkpID8gY2xhc3MtPnN1cGVyX2NsYXNzIDogKENsYXNzKTA7Cn0K CnN0YXRpYyBpbmxpbmUgaW50CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAg ICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAyMTgKCgpjbGFzc19nZXRfdmVy c2lvbiAoQ2xhc3MgY2xhc3MpCnsKICByZXR1cm4gKChjbGFzcykmJigoKChjbGFzcyktPmluZm8p ICYgMHgxTCkgPT0gMHgxTCkpID8gY2xhc3MtPnZlcnNpb24gOiAtMTsKfQoKc3RhdGljIGlubGlu ZSBCT09MCmNsYXNzX2lzX2NsYXNzIChDbGFzcyBjbGFzcykKewogIHJldHVybiAoKGNsYXNzKSYm KCgoKGNsYXNzKS0+aW5mbykgJiAweDFMKSA9PSAweDFMKSk7Cn0KCnN0YXRpYyBpbmxpbmUgQk9P TApjbGFzc19pc19tZXRhX2NsYXNzIChDbGFzcyBjbGFzcykKewogIHJldHVybiAoKGNsYXNzKSYm KCgoKGNsYXNzKS0+aW5mbykgJiAweDJMKSA9PSAweDJMKSk7Cn0KCgpzdGF0aWMgaW5saW5lIHZv aWQKY2xhc3Nfc2V0X3ZlcnNpb24gKENsYXNzIGNsYXNzLCBsb25nIHZlcnNpb24pCnsKICBpZiAo KChjbGFzcykmJigoKChjbGFzcyktPmluZm8pICYgMHgxTCkgPT0gMHgxTCkpKQogICAgY2xhc3Mt PnZlcnNpb24gPSB2ZXJzaW9uOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgKgpjbGFzc19nZXRfZ2Nf b2JqZWN0X3R5cGUgKENsYXNzIGNsYXNzKQp7CiAgcmV0dXJuICgoY2xhc3MpJiYoKCgoY2xhc3Mp LT5pbmZvKSAmIDB4MUwpID09IDB4MUwpKSA/IGNsYXNzLT5nY19vYmplY3RfdHlwZSA6ICgodm9p ZCAqKTApOwp9CgoKZXh0ZXJuIHZvaWQgY2xhc3NfaXZhcl9zZXRfZ2NpbnZpc2libGUgKENsYXNz IGNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciogaXZhcm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09M IGdjSW52aXNpYmxlKTsKCnN0YXRpYyBpbmxpbmUgSU1QCm1ldGhvZF9nZXRfaW1wIChNZXRob2Rf dCBtZXRob2QpCnsKICByZXR1cm4gKG1ldGhvZCAhPSAoTWV0aG9kX3QpMCkgPyBtZXRob2QtPm1l dGhvZF9pbXAgOiAoSU1QKSAwOwp9CgpJTVAgZ2V0X2ltcCAoQ2xhc3MgY2xhc3MsIFNFTCBzZWwp OwoKCgoKCgoKaWQgb2JqZWN0X2NvcHkgKGlkIG9iamVjdCk7CgppZCBvYmplY3RfZGlzcG9zZSAo aWQgb2JqZWN0KTsKCnN0YXRpYyBpbmxpbmUgQ2xhc3MKb2JqZWN0X2dldF9jbGFzcyAoaWQgb2Jq ZWN0KQoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAg ICAgICAgICAgICAgICAgICAgUGFnZSAgMjE5CgoKewogIHJldHVybiAoKG9iamVjdCAhPSAoaWQp MCkKICAgICAgICAgID8gKCgob2JqZWN0LT5jbGFzc19wb2ludGVyKSYmKCgoKG9iamVjdC0+Y2xh c3NfcG9pbnRlciktPmluZm8pICYgMHgxTCkgPT0gMHgxTCkpCiAgICAgICAgICAgICA/IG9iamVj dC0+Y2xhc3NfcG9pbnRlcgogICAgICAgICAgICAgOiAoKChvYmplY3QtPmNsYXNzX3BvaW50ZXIp JiYoKCgob2JqZWN0LT5jbGFzc19wb2ludGVyKS0+aW5mbykgJiAweDJMKSA9PSAweDJMKSkKICAg ICAgICAgICAgICAgID8gKENsYXNzKSBvYmplY3QKICAgICAgICAgICAgICAgIDogKENsYXNzKTAp KQogICAgICAgICAgOiAoQ2xhc3MpMCk7Cn0KCnN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCm9i amVjdF9nZXRfY2xhc3NfbmFtZSAoaWQgb2JqZWN0KQp7CiAgcmV0dXJuICgob2JqZWN0IT0oaWQp MCkgPyAoKChvYmplY3QtPmNsYXNzX3BvaW50ZXIpJiYoKCgob2JqZWN0LT5jbGFzc19wb2ludGVy KS0+aW5mbykgJiAweDFMKSA9PSAweDFMKSkKICAgICAgICAgICAgICAgICAgICAgICAgID8gb2Jq ZWN0LT5jbGFzc19wb2ludGVyLT5uYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICA6ICgoQ2xh c3MpIG9iamVjdCktPm5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgOiJOaWwiKTsKfQoKc3Rh dGljIGlubGluZSBNZXRhQ2xhc3MKb2JqZWN0X2dldF9tZXRhX2NsYXNzKGlkIG9iamVjdCkKewog IHJldHVybiAoKG9iamVjdCE9KGlkKTApID8gKCgob2JqZWN0LT5jbGFzc19wb2ludGVyKSYmKCgo KG9iamVjdC0+Y2xhc3NfcG9pbnRlciktPmluZm8pICYgMHgxTCkgPT0gMHgxTCkpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgID8gb2JqZWN0LT5jbGFzc19wb2ludGVyLT5jbGFzc19wb2ludGVy CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKCgob2JqZWN0LT5jbGFzc19wb2ludGVyKSYm KCgoKG9iamVjdC0+Y2xhc3NfcG9pbnRlciktPmluZm8pICYgMHgyTCkgPT0gMHgyTCkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgID8gb2JqZWN0LT5jbGFzc19wb2ludGVyCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDooQ2xhc3MpMCkpCiAgICAgICAgICA6IChDbGFzcykwKTsK fQoKc3RhdGljIGlubGluZSBDbGFzcwpvYmplY3RfZ2V0X3N1cGVyX2NsYXNzIChpZCBvYmplY3Qp CnsKICByZXR1cm4gKChvYmplY3QhPShpZCkwKSA/ICgoKG9iamVjdC0+Y2xhc3NfcG9pbnRlcikm JigoKChvYmplY3QtPmNsYXNzX3BvaW50ZXIpLT5pbmZvKSAmIDB4MUwpID09IDB4MUwpKQogICAg ICAgICAgICAgICAgICAgICAgICAgICA/IG9iamVjdC0+Y2xhc3NfcG9pbnRlci0+c3VwZXJfY2xh c3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoKChvYmplY3QtPmNsYXNzX3BvaW50ZXIp JiYoKCgob2JqZWN0LT5jbGFzc19wb2ludGVyKS0+aW5mbykgJiAweDJMKSA9PSAweDJMKSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgPygoQ2xhc3MpIG9iamVjdCktPnN1cGVyX2NsYXNzCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKENsYXNzKTApKQogICAgICAgICAgOiAoQ2xh c3MpMCk7Cn0KCnN0YXRpYyBpbmxpbmUgQk9PTApvYmplY3RfaXNfY2xhc3MgKGlkIG9iamVjdCkK ewogIHJldHVybiAoKChDbGFzcykgb2JqZWN0KSYmKCgoKChDbGFzcykgb2JqZWN0KS0+aW5mbykg JiAweDFMKSA9PSAweDFMKSk7Cn0KCnN0YXRpYyBpbmxpbmUgQk9PTApvYmplY3RfaXNfaW5zdGFu Y2UoaWQgb2JqZWN0KQp7CiAgcmV0dXJuIChvYmplY3QgIT0gKGlkKTApICYmICgob2JqZWN0LT5j bGFzc19wb2ludGVyKSYmKCgoKG9iamVjdC0+Y2xhc3NfcG9pbnRlciktPmluZm8pICYgMHgxTCkg PT0gMHgxTCkpOwp9CgpzdGF0aWMgaW5saW5lIEJPT0wKb2JqZWN0X2lzX21ldGFfY2xhc3MgKGlk IG9iamVjdCkKewoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFp bi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgMjIwCgoKICByZXR1cm4gKCgoQ2xhc3MpIG9i amVjdCkmJigoKCgoQ2xhc3MpIG9iamVjdCktPmluZm8pICYgMHgyTCkgPT0gMHgyTCkpOwp9Cgpz dHJ1Y3Qgc2FycmF5KiBvYmpjX2dldF91bmluc3RhbGxlZF9kdGFibGUgKHZvaWQpOwojIDE0ICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0RlZkNsYXNzLmgiIDIKCgoKCnR5cGVkZWYg c3RydWN0IGNsYXNzRGF0YSAqY2xhc3NEYXRhX3Q7CnR5cGVkZWYgc3RydWN0IG1ldGhvZERlZnMg Km1ldGhvZERlZnNfdDsKCgoKCkBpbnRlcmZhY2UgQ2xhc3NfczogT2JqZWN0CnsKQHB1YmxpYwog IENsYXNzX3MgKnN1cGVyY2xhc3M7CiAgY29uc3QgY2hhciAqbmFtZTsKICBsb25nIHZlcnNpb247 CiAgdW5zaWduZWQgbG9uZyBpbmZvOwogIGxvbmcgaW5zdGFuY2VTaXplOwogIHZvaWQgKml2YXJM aXN0OwogIHZvaWQgKm1ldGhvZExpc3Q7CiAgc3RydWN0IHNhcnJheSAqZHRhYmxlOwp9CgoKQGVu ZAoKCgoKZXh0ZXJuIGNsYXNzRGF0YV90IF9vYmpfZ2V0Q2xhc3NEYXRhIChDbGFzc19zICpjbGFz cyk7CgoKCgp2b2lkIF9vYmpfaW5pdE1ldGhvZEludGVyZmFjZXMgKENsYXNzX3MgKmNsYXNzKTsK CgoKCgoKCkBpbnRlcmZhY2UgQ3JlYXRlZENsYXNzX3M6IENsYXNzX3MKewpAcHVibGljCiAgQ2xh c3NfcyAqZGVmaW5pbmdDbGFzczsKICBpZCBtZXRhb2JqZWN0czsKfQoKKyBjcmVhdGVCZWdpbjog YVpvbmU7Ci0gc2V0TmFtZTogKGNvbnN0IGNoYXIgKiljbGFzc05hbWU7CgoKCgoKCgoyMDAxLTA4 LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAgICAgICAgICAgICBQ YWdlICAyMjEKCgotIHNldENsYXNzOiBhQ2xhc3M7Ci0gc2V0U3VwZXJjbGFzczogYUNsYXNzOwot IHNldERlZmluaW5nQ2xhc3M6IGFDbGFzczsKLSBhdDogKFNFTClhU2VsIGFkZE1ldGhvZDogKElN UClhTWV0aG9kOwotIGxpc3BJbkNyZWF0ZTogZXhwcjsKLSBoZGY1SW5DcmVhdGU6IGV4cHI7Ci0g Y3JlYXRlRW5kOwotICh2b2lkKWhkZjVPdXRTaGFsbG93OiBzdHJlYW07Ci0gKHZvaWQpbGlzcE91 dFNoYWxsb3c6IHN0cmVhbTsKQGVuZAoKQGludGVyZmFjZSBCZWhhdmlvclBoYXNlX3M6IENyZWF0 ZWRDbGFzc19zCnsKQHB1YmxpYwogIENsYXNzX3MgKm5leHRQaGFzZTsKICBpZCBmaWxsZXI7CiAg aWQgbW9yZWZpbGxlcjsKfQoKLSAodm9pZClzZXROZXh0UGhhc2U6IGFCZWhhdmlvclBoYXNlOwpA ZW5kCgoKCgoKCgpzdHJ1Y3QgY2xhc3NEYXRhIHsKICBpZCAqY2xhc3NJRDsKICBpZCBvd25lcjsK ICBpZCB0eXBlSW1wbGVtZW50ZWQ7CiAgQmVoYXZpb3JQaGFzZV9zICppbml0aWFsUGhhc2U7CiAg aWQgbWV0YW9iamVjdHM7Cn07CgoKCgpzdHJ1Y3QgbWV0aG9kRGVmcyB7CiAgbWV0aG9kRGVmc190 IG5leHQ7CiAgaWQgaW50ZXJmYWNlSUQ7CiAgTWV0aG9kX3QgZmlyc3RFbnRyeTsKICBpbnQgY291 bnQ7Cn07CiMgMTMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmovQ3VzdG9taXplLmgi IDIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0RlZk9iamVjdC5oIiAxCiMg MTMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmovRGVmT2JqZWN0LmgiCiMgMSAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIiAxCiMgMTQgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9kZWZvYmovRGVmT2JqZWN0LmgiIDIKCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNs dWRlL3N3YXJtY29uZmlnLmgiIDEKIyAxNiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9i ai9EZWZPYmplY3QuaCIgMgoKQGNsYXNzIE9iamVjdEVudHJ5OwoKCgoKCgoKCjIwMDEtMDgtMjQg MDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2Ug IDIyMgoKCgpAaW50ZXJmYWNlIE9iamVjdF9zOiBPYmplY3QgPERlZmluZWRDbGFzcywgU2VyaWFs aXphdGlvbiwgR2V0TmFtZT4KewpAcHVibGljCgoKICB1bnNpZ25lZCB6Yml0czsKICBPYmplY3RF bnRyeSAqZm9yZWlnbkVudHJ5Owp9CiMgNDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZv YmovRGVmT2JqZWN0LmgiCi0gKGNvbnN0IGNoYXIgKilnZXROYW1lOworIChCT09MKXJlc3BvbmRz VG86IChTRUwpYVNlbDsKLSAoQk9PTClyZXNwb25kc1RvOiAoU0VMKWFTZWw7CisgKEJPT0wpY29u Zm9ybXNUbzogKFByb3RvY29sICopYVByb3RvY29sOworIGdldENsYXNzOwotIGdldENsYXNzOwot IGdldFpvbmU7Ci0gKHZvaWQpZHJvcEFsbG9jYXRpb25zOiAoQk9PTCljb21wb25lbnRBbGxvYzsK LSAodm9pZClkcm9wOwotIChyZWZfdClhZGRSZWY6IChub3RpZnlfdClub3RpZnlGdW5jdGlvbiB3 aXRoQXJndW1lbnQ6ICh2b2lkICopYXJnOzsKLSAodm9pZClyZW1vdmVSZWY6IChyZWZfdClyZWZW YWw7CisgZ2V0U3VwZXJjbGFzczsKKyAoQk9PTClpc1N1YmNsYXNzOiBhQ2xhc3M7CisgKHZvaWQp c2V0VHlwZUltcGxlbWVudGVkOiBhVHlwZTsKKyBnZXRUeXBlSW1wbGVtZW50ZWQ7CisgZ2V0T3du ZXI7CisgKElNUClnZXRNZXRob2RGb3I6IChTRUwpYVNlbDsKKyBnZXREZWZpbmluZ0NsYXNzOwor IGdldE5leHRQaGFzZTsKKyBzZWxmOwotIGdldFR5cGU7Ci0gKGludCljb21wYXJlOiBhbk9iamVj dDsKLSBwZXJmb3JtOiAoU0VMKWFTZWw7Ci0gcGVyZm9ybTogKFNFTClhU2VsIHdpdGg6IGFuT2Jq ZWN0MTsKLSBwZXJmb3JtOiAoU0VMKWFTZWwgd2l0aDogYW5PYmplY3QxIHdpdGg6IGFuT2JqZWN0 MjsKLSBwZXJmb3JtOiAoU0VMKWFTZWwgd2l0aDogYW5PYmplY3QxIHdpdGg6IGFuT2JqZWN0MiB3 aXRoOiBhbk9iamVjdDM7Ci0gKHZvaWQpc2V0RGlzcGxheU5hbWU6IChjb25zdCBjaGFyICopYU5h bWU7Ci0gKGNvbnN0IGNoYXIgKilnZXREaXNwbGF5TmFtZTsKLSAoY29uc3QgY2hhciAqKWdldE9i amVjdE5hbWU7Ci0gKGNvbnN0IGNoYXIgKilnZXRUeXBlTmFtZTsKLSAodm9pZClkZXNjcmliZTog b3V0cHV0Q2hhclN0cmVhbTsKLSAodm9pZClkZXNjcmliZUlEOiBvdXRwdXRDaGFyU3RyZWFtOwot ICh2b2lkKXhwcmludDsKLSAodm9pZCl4cHJpbnRpZDsKLSAodm9pZCl4ZnByaW50OwotICh2b2lk KXhmcHJpbnRpZDsKLSBsaXNwSW5DcmVhdGU6IGV4cHI7Ci0gbGlzcEluOiBleHByOwotIGhkZjVJ bkNyZWF0ZTogZXhwcjsKLSBoZGY1SW46IGV4cHI7Ci0gKHZvaWQpbGlzcE91dFZhcnM6IHN0cmVh bSBkZWVwOiAoQk9PTClkZWVwRmxhZzsKLSAodm9pZClsaXNwT3V0RGVlcDogc3RyZWFtOwotICh2 b2lkKWxpc3BPdXRTaGFsbG93OiBzdHJlYW07Ci0gKHZvaWQpaGRmNU91dERlZXA6IGhkZjVvYmo7 Ci0gKHZvaWQpaGRmNU91dFNoYWxsb3c6IGhkZjVvYmo7Ci0gKHZvaWQpdXBkYXRlQXJjaGl2ZXI6 IGFyY2hpdmVyOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFp bi5taSAgICAgICAgICAgICAgICAgICAgUGFnZSAgMjIzCgoKQGVuZAoKZXh0ZXJuIGlkIGxpc3BJ biAoaWQgYVpvbmUsIGlkIGV4cHIpOwoKZXh0ZXJuIEJPT0wgbGlzcEluQm9vbGVhbiAoaWQgaW5k ZXgpOwpleHRlcm4gaW50IGxpc3BJbkludGVnZXIgKGlkIGluZGV4KTsKZXh0ZXJuIGNvbnN0IGNo YXIgKmxpc3BJblN0cmluZyAoaWQgaW5kZXgpOwpleHRlcm4gaWQgbGlzcEluS2V5d29yZCAoaWQg aW5kZXgpOwojIDEyMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9EZWZPYmplY3Qu aCIKZXh0ZXJuIElNUCBnZXRfaW1wIChDbGFzcyBjbGFzcywgU0VMIHNlbCk7CgoKCgpleHRlcm4g Qk9PTCByZXNwb25kc1RvIChpZCBhbk9iamVjdCwgU0VMIGFTZWwpOwoKCgoKCmV4dGVybiBJTVAg Z2V0TWV0aG9kRm9yIChpZCBhbk9iamVjdCwgU0VMIGFTZWwpOwojIDE1NCAiL3Vzci9sb2NhbC9z d2FybS9pbmNsdWRlL2RlZm9iai9EZWZPYmplY3QuaCIKdHlwZWRlZiBzdHJ1Y3QgbWFwYWxsb2Mg Km1hcGFsbG9jX3Q7CgpzdHJ1Y3QgbWFwYWxsb2MgewogIHZvaWQgKCptYXBwaW5nRnVuY3Rpb24p IChtYXBhbGxvY190IG1hcGFsbG9jLCBCT09MIG9iamVjdEFsbG9jYXRpb24pOwogIHZvaWQgKmFs bG9jOwogIGlkIDxTeW1ib2w+IGRlc2NyaXB0b3I7CiAgaWQgem9uZTsKICBzaXplX3Qgc2l6ZTsK fTsKIyAxNCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9DdXN0b21pemUuaCIgMgoj IDI0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0N1c3RvbWl6ZS5oIgpleHRlcm4g aWQgQ3JlYXRpbmcsIFNldHRpbmcsIFVzaW5nLCBDcmVhdGluZ09ubHksIFVzaW5nT25seTsKCgoK CkBpbnRlcmZhY2UgQ3VzdG9taXplX3M6IE9iamVjdF9zCgorIGN1c3RvbWl6ZUJlZ2luOiBhWm9u ZTsKLSBjdXN0b21pemVFbmQ7Ci0gY3VzdG9taXplQ29weTogYVpvbmU7CisgY3VzdG9taXplQmVn aW5FbmQ6IGFab25lOwotIF9zZXRDcmVhdGVCeV86IChDbGFzcylzdWJjbGFzcyBtZXNzYWdlOiAo U0VMKW1lc3NhZ2VTZWxlY3RvciB0bzogYW5PYmplY3Q7Ci0gKHZvaWQpX3NldENyZWF0ZUJ5Q29w eV87Ci0gKHZvaWQpX3NldENyZWF0ZUJ5TWVzc2FnZV86IChTRUwpbWVzc2FnZVNlbGVjdG9yIHRv OiBhbk9iamVjdDsKLSAodm9pZClfc2V0Q3JlYXRlQnlNZXNzYWdlXzogKFNFTCltZXNzYWdlU2Vs ZWN0b3IgdG9Db3B5OiBhbk9iamVjdDsKLSAodm9pZClfc2V0UmVjdXN0b21pemVfOiBhbk9iamVj dDsKKyAodm9pZClzZXRUeXBlSW1wbGVtZW50ZWQ6IGFUeXBlOwpAZW5kCiMgNTYgIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9kZWZvYmovQ3VzdG9taXplLmgiCmV4dGVybiBpbmxpbmUgQk9PTApf b2JqX2N1c3RvbWl6ZSAoaWQgYW5PYmplY3QpCnsKICByZXR1cm4gKCgqKENsYXNzICopKGFuT2Jq ZWN0KSktPmluZm8gJiAweDIwMCkgIT0gMDsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAg ICAgICAgICAgICAgIG1haW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDIyNAoKCn0KIyA4 MiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9DdXN0b21pemUuaCIKQGludGVyZmFj ZSBDcmVhdGVCeV9jOiBPYmplY3Rfcwp7CkBwdWJsaWMKICBpZCBpbXBsZW1lbnRlZFR5cGU7CiAg aWQgY3JlYXRlUmVjZWl2ZXI7CiAgU0VMIGNyZWF0ZU1lc3NhZ2U7CiAgSU1QIGNyZWF0ZU1ldGhv ZDsKICBpZCByZWN1c3RvbWl6ZTsKfQoKLSBjcmVhdGVCZWdpbjogYVpvbmU7Ci0gY3VzdG9taXpl QmVnaW46IGFab25lOwotICh2b2lkKW1hcEFsbG9jYXRpb25zOiAobWFwYWxsb2NfdCltYXBhbGxv YzsKQGVuZAoKQGludGVyZmFjZSBDcmVhdGVfYnljb3B5OiBDcmVhdGVCeV9jCgotIGNyZWF0ZTog YVpvbmU7CkBlbmQKCkBpbnRlcmZhY2UgQ3JlYXRlX2J5c2VuZDogQ3JlYXRlQnlfYwoKLSBjcmVh dGU6IGFab25lOwpAZW5kCgpAaW50ZXJmYWNlIENyZWF0ZV9ieWJvdGg6IENyZWF0ZUJ5X2MKCi0g Y3JlYXRlOiBhWm9uZTsKQGVuZAoKCgoKZXh0ZXJuIGlubGluZSBDbGFzcwpnZXROZXh0UGhhc2Ug KGlkIGFDbGFzcykKewogIHJldHVybiAoQ2xhc3MpICgoQmVoYXZpb3JQaGFzZV9zICopIGFDbGFz cyktPm5leHRQaGFzZTsKfQoKCgoKZXh0ZXJuIGlubGluZSB2b2lkCnNldE5leHRQaGFzZSAoaWQg YW5PYmplY3QpCnsKICAqKENsYXNzICopIGFuT2JqZWN0ID0gKENsYXNzKSAoKihCZWhhdmlvclBo YXNlX3MgKiopIGFuT2JqZWN0KS0+bmV4dFBoYXNlOwp9CiMgMTMgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9kZWZvYmovQ3JlYXRlLmgiIDIKCgoKCkBpbnRlcmZhY2UgQ3JlYXRlRHJvcF9zOiBD dXN0b21pemVfcwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1h aW4ubWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDIyNQoKCisgY3JlYXRlOiBhWm9uZTsKKyBj cmVhdGVCZWdpbjogYVpvbmU7Ci0gY3JlYXRlRW5kOwpAZW5kCgpAaW50ZXJmYWNlIENyZWF0ZURy b3A6IENyZWF0ZURyb3BfcwoKLSBjcmVhdGVFbmQ7CkBlbmQKIyAxMyAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL2FjdGl2aXR5L1hBY3Rpdml0eS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL2FjdGl2aXR5LmgiIDEKIyAxNCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2 aXR5L1hBY3Rpdml0eS5oIiAyCgoKCgpAaW50ZXJmYWNlIEFjdGl2aXR5X2M6IE9iamVjdF9zIDxB Y3Rpdml0eT4KewpAcHVibGljCiAgQWN0aXZpdHlfYyAqb3duZXJBY3Rpdml0eTsKICBpZCA8QWN0 aW9uPiB0b3BMZXZlbEFjdGlvbjsKICBpZCA8U3ltYm9sPiBzdGF0dXM7CiAgbWVtYmVyX3QgYWN0 aXZpdHlSZWZzOwoKICBBY3Rpdml0eV9jICpyZWdpc3RlcmVkT3duZXJBY3Rpdml0eTsKICBpZCBh Y3Rpdml0eVNldDsKICBtZW1iZXJfdCBhY3Rpdml0eVNldFJlZnM7CgogIGlkIDxBY3Rpdml0eUlu ZGV4PiBjdXJyZW50SW5kZXg7CgogIEFjdGl2aXR5X2MgKmN1cnJlbnRTdWJhY3Rpdml0eTsKICBC T09MICgqYnJlYWtGdW5jdGlvbikgKGlkKTsKICBCT09MIGtlZXBFbXB0eUZsYWc7Cn0KCi0gKGlk IDxTeW1ib2w+KXJ1bjsKLSAoaWQgPFN5bWJvbD4pX3J1bl87Ci0gKHZvaWQpdGVybWluYXRlOwot ICh2b2lkKXN0b3A7Ci0gKGlkIDxTeW1ib2w+KW5leHRBY3Rpb247Ci0gKGlkIDxTeW1ib2w+KXN0 ZXBBY3Rpb247Ci0gKGlkIDxTeW1ib2w+KWdldFN0YXR1czsKLSAoaWQgPFN5bWJvbD4pZ2V0SG9s ZFR5cGU7Ci0gZ2V0QWN0aW9uVHlwZTsKLSAoaWQgPEFjdGlvbj4pZ2V0QWN0aW9uOwotIF9nZXRT dWJhY3Rpdml0eUFjdGlvbl87Ci0gKHZvaWQpc2V0T3duZXJBY3Rpdml0eTogKGlkIDxTd2FybUFj dGl2aXR5PilhU3dhcm1BY3Rpdml0eTsKLSAoaWQgPEFjdGl2aXR5PilnZXRPd25lckFjdGl2aXR5 OwotIChpZCA8QWN0aXZpdHk+KWdldENvbnRyb2xsaW5nQWN0aXZpdHk7Ci0gKGlkIDxBY3Rpdml0 eT4pZ2V0VG9wTGV2ZWxBY3Rpdml0eTsKLSAoaWQgPFN3YXJtQWN0aXZpdHk+KWdldFN3YXJtQWN0 aXZpdHk7Ci0gKGlkIDxTY2hlZHVsZUFjdGl2aXR5PilnZXRTY2hlZHVsZUFjdGl2aXR5OwotIGdl dFN1YmFjdGl2aXRpZXM7Ci0gKHZvaWQpc2V0U2VyaWFsTW9kZTogKEJPT0wpc2VyaWFsTW9kZTsK LSAoQk9PTClnZXRTZXJpYWxNb2RlOwotIHNldEtlZXBFbXB0eUZsYWc6IChCT09MKWtlZXBFbXB0 eUZsYWc7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1p ICAgICAgICAgICAgICAgICAgICBQYWdlICAyMjYKCgotIChpZCA8QWN0aXZpdHk+KWdldEN1cnJl bnRTdWJhY3Rpdml0eTsKLSAodm9pZCltYXBBbGxvY2F0aW9uczogKG1hcGFsbG9jX3QpbWFwYWxs b2M7Ci0gKHZvaWQpZHJvcDsKLSAodm9pZClkZXNjcmliZTogb3V0cHV0Q2hhclN0cmVhbTsKQGVu ZAojIDEzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkvU3dhcm1Qcm9jZXNzLmgi IDIKCkBjbGFzcyBTd2FybUFjdGl2aXR5X2MsIFNjaGVkdWxlQWN0aXZpdHlfYzsKCkBpbnRlcmZh Y2UgQ1N3YXJtUHJvY2VzczogQ3JlYXRlRHJvcF9zIDxTd2FybVByb2Nlc3M+CnsKQHB1YmxpYwog IGlkIGludGVybmFsWm9uZTsKICBpZCBzeW5jVHlwZTsKICBTd2FybUFjdGl2aXR5X2MgKmFjdGl2 aXR5Owp9CgotIChzaXplX3QpZ2V0UGFnZVNpemU7Ci0gYWxsb2NJVmFyczogYUNsYXNzOwotIGNv cHlJVmFyczogYW5PYmplY3Q7Ci0gKHZvaWQpZnJlZUlWYXJzOiBhbk9iamVjdDsKLSBhbGxvY0lW YXJzQ29tcG9uZW50OiBhQ2xhc3M7Ci0gY29weUlWYXJzQ29tcG9uZW50OiBhbk9iamVjdDsKLSAo dm9pZClmcmVlSVZhcnNDb21wb25lbnQ6IGFuT2JqZWN0OwotIGdldENvbXBvbmVudFpvbmU7Ci0g KHZvaWQgKilhbGxvYzogKHNpemVfdClzaXplOwotICh2b2lkKWZyZWU6ICh2b2lkICopIGFCbG9j azsKLSAodm9pZCAqKWFsbG9jQmxvY2s6IChzaXplX3Qpc2l6ZTsKLSAodm9pZClmcmVlQmxvY2s6 ICh2b2lkICopYUJsb2NrIGJsb2NrU2l6ZTogKHNpemVfdClzaXplOwotIGdldFBvcHVsYXRpb247 Ci0gKHZvaWQpIGRlc2NyaWJlRm9yRWFjaElEOiAoaWQpIG91dHB1dENoYXJTdHJlYW07Ci0gKHZv aWQpIGRlc2NyaWJlRm9yRWFjaDogKGlkKSBvdXRwdXRDaGFyU3RyZWFtOwotIChCT09MKWdldFN0 YWNrZWRTdWJ6b25lczsKLSBnZXRSZWNsYWltUG9saWN5OwoKCisgY3JlYXRlQmVnaW46IGFab25l OwotICh2b2lkKXNldFN5bmNocm9uaXphdGlvblR5cGU6IGFTY2hlZHVsZVR5cGU7Ci0gKHZvaWQp c2V0SW50ZXJuYWxab25lVHlwZTogaW50ZXJuYWxab25lVHlwZTsKLSAodm9pZClzZXRJbnRlcm5h bFRpbWVNdWx0aXBsaWVyOiAodGltZXZhbF90KWludGVybmFsVGltZU11bHRpcGxpZXI7Ci0gKHZv aWQpc2V0UGFnZVNpemU6IChzaXplX3QpcGFnZVNpemU7Ci0gY3JlYXRlRW5kOwotICh0aW1ldmFs X3QpZ2V0SW50ZXJuYWxUaW1lTXVsdGlwbGllcjsKLSBnZXRJbnRlcm5hbFpvbmU7Ci0gKGlkIDxT d2FybUFjdGl2aXR5PilnZXRBY3Rpdml0eTsKLSAoaWQgPFN3YXJtQWN0aXZpdHk+KWdldFN3YXJt QWN0aXZpdHk7Ci0gZ2V0U3luY2hyb25pemF0aW9uVHlwZTsKLSBhY3RpdmF0ZTsKLSBhY3RpdmF0 ZTogYW5BY3Rpb25UeXBlOwotIGF0OiAodGltZXZhbF90KXRWYWwgYWN0aXZhdGU6IGFuQWN0aW9u VHlwZTsKLSBhdDogKGludCl0aW1lYmFzZSA6ICh0aW1ldmFsX3QpdFZhbCBhY3RpdmF0ZTogYW5B Y3Rpb25UeXBlOwotIChpZCA8QWN0aXZpdHk+KWFjdGl2YXRlSW46IHN3YXJtQ29udGV4dDsKLSAo dm9pZCltYXBBbGxvY2F0aW9uczogKG1hcGFsbG9jX3QpbWFwYWxsb2M7Ci0gKHZvaWQpX3BlcmZv cm1QbGFuXzsKQGVuZAojIDggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmplY3RiYXNlL1N3 YXJtLmgiIDIKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgIG1haW4u bWkgICAgICAgICAgICAgICAgICAgIFBhZ2UgIDIyNwoKCgpAaW50ZXJmYWNlIFN3YXJtOiBDU3dh cm1Qcm9jZXNzIDxTd2FybT4Kewp9CgoKLSBidWlsZE9iamVjdHM7Ci0gYnVpbGRBY3Rpb25zOwot IGFjdGl2YXRlSW46IHN3YXJtQ29udGV4dDsKCgoKLSBnZXRQcm9iZU1hcDsKLSBnZXRDb21wbGV0 ZVByb2JlTWFwOwotIGdldFByb2JlRm9yVmFyaWFibGU6IChjb25zdCBjaGFyICopYVZhcmlhYmxl OwoKQGVuZAojIDggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9zaW10b29sc2d1aS9HVUlTd2Fy bS5oIiAyCgoKCgoKCgpAaW50ZXJmYWNlIEdVSVN3YXJtOiBTd2FybSA8R1VJU3dhcm0+CnsKICBp ZCA8Q29udHJvbFBhbmVsPiBjb250cm9sUGFuZWw7CiAgaWQgPEFjdGlvbkNhY2hlPiBhY3Rpb25D YWNoZTsKICBjb25zdCBjaGFyICpiYXNlV2luZG93R2VvbWV0cnlSZWNvcmROYW1lOwogIEJPT0wg c2F2ZVNpemVGbGFnOwp9CgotIHNldFdpbmRvd0dlb21ldHJ5UmVjb3JkTmFtZTogKGNvbnN0IGNo YXIgKil3aW5kb3dHZW9tZXRyeVJlY29yZE5hbWU7Ci0gc2V0U2F2ZVNpemVGbGFnOiAoQk9PTClz YXZlU2l6ZUZsYWc7Ci0gc2V0V2luZG93R2VvbWV0cnlSZWNvcmROYW1lRm9yQ29tcG9uZW50OiAo Y29uc3QgY2hhciAqKWNvbXBvbmVudE5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB3aWRnZXQ6IGFXaWRnZXQ7Ci0gKGlkIDxBY3Rpb25DYWNoZT4pZ2V0QWN0aW9uQ2FjaGU7 Ci0gKGlkIDxDb250cm9sUGFuZWw+KWdldENvbnRyb2xQYW5lbDsKLSBidWlsZE9iamVjdHM7Ci0g Z287Ci0gKHZvaWQpZHJvcDsKQGVuZAojIDggIlBwbE9ic2VydmVyU3dhcm0uaCIgMgojIDEgIlBw bE1vZGVsU3dhcm0uaCIgMQoKCgoKCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamVj dGJhc2UvU3dhcm0uaCIgMQojIDcgIlBwbE1vZGVsU3dhcm0uaCIgMgojIDEgIkNvdW50ZXIuaCIg MQoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICAgbWFpbi5taSAg ICAgICAgICAgICAgICAgICAgUGFnZSAgMjI4CgoKCgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9vYmplY3RiYXNlL1N3YXJtT2JqZWN0LmgiIDEKIyA5ICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvb2JqZWN0YmFzZS9Td2FybU9iamVjdC5oIgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9kZWZvYmovQ3JlYXRlLmgiIDEKIyAxMCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29i amVjdGJhc2UvU3dhcm1PYmplY3QuaCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9v YmplY3RiYXNlLmgiIDEKIyAxMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2Uv U3dhcm1PYmplY3QuaCIgMgoKQGludGVyZmFjZSBTd2FybU9iamVjdDogQ3JlYXRlRHJvcCA8U3dh cm1PYmplY3Q+CnsKfQoKLSBnZXRQcm9iZU1hcDsKLSBnZXRDb21wbGV0ZVByb2JlTWFwOwotIGdl dFByb2JlRm9yVmFyaWFibGU6IChjb25zdCBjaGFyICopYVZhcmlhYmxlOwotIGdldFByb2JlRm9y TWVzc2FnZTogKGNvbnN0IGNoYXIgKilhTWVzc2FnZTsKLSAodm9pZClldmVudE9jY3VycmVkT246 IGFuT2JqZWN0CiAgICAgICAgICAgICAgICAgICAgdmlhOiBhUHJvYmUKICAgICAgICAgIHdpdGhQ cm9iZVR5cGU6IChjb25zdCBjaGFyICopYVByb2JlVHlwZQogICAgICAgICAgICAgICAgICAgICBv bjogKGNvbnN0IGNoYXIgKilwcm9iZWRFbGVtZW50CiAgICAgICAgICAgICAgICAgb2ZUeXBlOiAo Y2hhcilkYXRhVHlwZQogICAgICAgICAgICAgICB3aXRoRGF0YTogKHZvaWQgKilkYXRhOwpAZW5k CiMgNyAiQ291bnRlci5oIiAyCgoKCkBpbnRlcmZhY2UgQ291bnRlcjogU3dhcm1PYmplY3QKewog IGludCB2YWx1ZTsKICBpbnQgaW5jcjsKfQoKLSBzdGVwOwotIHNldEluY3I6IChpbnQpIG47Ci0g cHJpbnQ7CgpAZW5kCiMgOCAiUHBsTW9kZWxTd2FybS5oIiAyCiMgMSAiUGVyc29uLmgiIDEKIyA5 ICJQZXJzb24uaCIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFzZS9Td2Fy bU9iamVjdC5oIiAxCiMgMTAgIlBlcnNvbi5oIiAyCgoKdHlwZWRlZiBlbnVtIHsKICBudWxsID0g MCwKICBoZWxsbyA9IDEsCn0gdG9waWNfdHlwZTsKCgoKCkBpbnRlcmZhY2UgUGVyc29uOiBTd2Fy bU9iamVjdAp7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWlu Lm1pICAgICAgICAgICAgICAgICAgICBQYWdlICAyMjkKCgogIGlkIHdvcmxkOwogIGZsb2F0IHRv cGljc1syXTsKICBpbnQgdmFsdWU7CiAgaWQgbmFtZTsKfQoKCi0gc3RlcDsKCgotIHNldFdvcmxk OiBsOwoKCi0gc2V0UGVyc29uOiBuIFRvcGljX2FycmF5OiAoZmxvYXQgKil0OwoKCi0gKGNvbnN0 IGNoYXIgKilnZXROYW1lOwoKCi0gcHJpbnQ7CgoKLSBzcGVhazogKHRvcGljX3R5cGUpIHRvcGlj IFRvUGVyc29uOiAoaWQpdGFyZ2V0OwoKCi0gbG9vazsKCkBlbmQKIyA5ICJQcGxNb2RlbFN3YXJt LmgiIDIKCkBpbnRlcmZhY2UgUHBsTW9kZWxTd2FybTogU3dhcm0KewoKICBpbnQgaW5jcmVtZW50 OwoKCgogIGludCBudW1QcGw7CgogIGlkIHBwbExpc3Q7CgogIGlkIG1vZGVsQWN0aW9uczsKICBp ZCBtb2RlbFNjaGVkdWxlOwoKCiAgQ291bnRlciAqY291bnRlcjsKfQoKCi0gKENvdW50ZXIgKiln ZXRDb3VudGVyOwoKKyBjcmVhdGVCZWdpbjogYVpvbmU7Ci0gY3JlYXRlRW5kOwotIGJ1aWxkT2Jq ZWN0czsKLSBidWlsZEFjdGlvbnM7Ci0gYWN0aXZhdGVJbjogKGlkKSBzd2FybUNvbnRleHQ7CgoK CgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgICBtYWluLm1pICAgICAgICAg ICAgICAgICAgICBQYWdlICAyMzAKCgoKQGVuZAojIDkgIlBwbE9ic2VydmVyU3dhcm0uaCIgMgoK CkBpbnRlcmZhY2UgUHBsT2JzZXJ2ZXJTd2FybTogR1VJU3dhcm0KewogIGludCBkaXNwbGF5RnJl cXVlbmN5OwoKICBpZCBkaXNwbGF5QWN0aW9uczsKICBpZCBkaXNwbGF5U2NoZWR1bGU7CgoKICBQ cGxNb2RlbFN3YXJtKiBwcGxNb2RlbFN3YXJtOwoKICBDb3VudGVyKiBvYnNlcnZlZENvdW50ZXI7 Cn0KCisgY3JlYXRlQmVnaW46IGFab25lOwotIGNyZWF0ZUVuZDsKLSBidWlsZE9iamVjdHM7Ci0g YnVpbGRBY3Rpb25zOwotIGFjdGl2YXRlSW46IHN3YXJtQ29udGV4dDsKCkBlbmQKIyAxMiAibWFp bi5tIiAyCgppbnQKbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQp7CiAgUHBsT2Jz ZXJ2ZXJTd2FybSAqb2JzZXJ2ZXJTd2FybTsKCiAgX2luaXRTd2FybV8gKGFyZ2MsIGFyZ3YsICJo ZWxsby13b3JsZCIsICIyLjEiLCAiYnVnLXN3YXJtQHN3YXJtLm9yZyIsIChDbGFzcykwLCAoKHZv aWQgKikwKSwgKCh2b2lkICopMCksIChCT09MKTAsIChCT09MKTApOwoKICBvYnNlcnZlclN3YXJt ID0gW1BwbE9ic2VydmVyU3dhcm0gY3JlYXRlOiBfb2JqX2dsb2JhbFpvbmVdOwogIFtvYnNlcnZl clN3YXJtIGJ1aWxkT2JqZWN0c107CiAgW29ic2VydmVyU3dhcm0gYnVpbGRBY3Rpb25zXTsKICBb b2JzZXJ2ZXJTd2FybSBhY3RpdmF0ZUluOiAoaWQpMF07CiAgW29ic2VydmVyU3dhcm0gZ29dOwoK ICByZXR1cm4gMDsKfQoKCgoKCgoKCgoKCgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAg ICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgIDEKCgojIDkg IlBlcnNvbi5tIgojIDEgIlBlcnNvbi5oIiAxCiMgOSAiUGVyc29uLmgiCiMgMSAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2UvU3dhcm1PYmplY3QuaCIgMQojIDkgIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9vYmplY3RiYXNlL1N3YXJtT2JqZWN0LmgiCiMgMSAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL2RlZm9iai9DcmVhdGUuaCIgMQojIDEyICIvdXNyL2xvY2FsL3N3YXJt L2luY2x1ZGUvZGVmb2JqL0NyZWF0ZS5oIgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9k ZWZvYmovQ3VzdG9taXplLmgiIDEKIyAxMiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9i ai9DdXN0b21pemUuaCIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0RlZkNs YXNzLmgiIDEKIyAxMiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9EZWZDbGFzcy5o IgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL09iamVjdC5oIiAxCiMgMzAgIi91 c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL09iamVjdC5oIgojIDEgIi91c3IvbG9jYWwvc3dh cm0vaW5jbHVkZS9vYmpjL29iamMuaCIgMQojIDM0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv b2JqYy9vYmpjLmgiCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE0NyAiL3Vzci9sb2NhbC9nY2Mz L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkZGVmLmgiIDMK dHlwZWRlZiBpbnQgcHRyZGlmZl90OwojIDE5OSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNp Z25lZCBpbnQgc2l6ZV90OwojIDI4NyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBsb25nIGludCB3 Y2hhcl90OwojIDM1ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLmgiIDIKCgoK CgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBCT09MOwojIDUxICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvb2JqYy9vYmpjLmgiCnR5cGVkZWYgY29uc3Qgc3RydWN0IG9iamNfc2VsZWN0b3IKewog IHZvaWQgKnNlbF9pZDsKICBjb25zdCBjaGFyICpzZWxfdHlwZXM7Cn0gKlNFTDsKCmlubGluZSBz dGF0aWMgQk9PTApzZWxfZXEgKFNFTCBzMSwgU0VMIHMyKQp7CiAgaWYgKHMxID09IDAgfHwgczIg PT0gMCkKICAgIHJldHVybiBzMSA9PSBzMjsKICBlbHNlCiAgICByZXR1cm4gczEtPnNlbF9pZCA9 PSBzMi0+c2VsX2lkOwp9CgoKCgoKdHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3QgewogIHN0cnVj dCBvYmpjX2NsYXNzKiBjbGFzc19wb2ludGVyOwp9ICppZDsKCgoKCgoKCgoKMjAwMS0wOC0yNCAw MToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAg ICAyCgoKCgoKdHlwZWRlZiBpZCAoKklNUCkoaWQsIFNFTCwgLi4uKTsKCgoKCgoKdHlwZWRlZiBj aGFyICpTVFI7CiMgOTcgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMuaCIKdHlw ZWRlZiBzdHJ1Y3Qgb2JqY19jbGFzcyAqTWV0YUNsYXNzOwp0eXBlZGVmIHN0cnVjdCBvYmpjX2Ns YXNzICpDbGFzczsKc3RydWN0IG9iamNfY2xhc3MgewogIE1ldGFDbGFzcyBjbGFzc19wb2ludGVy OwoKICBzdHJ1Y3Qgb2JqY19jbGFzcyogc3VwZXJfY2xhc3M7CgoKICBjb25zdCBjaGFyKiBuYW1l OwogIGxvbmcgdmVyc2lvbjsKICB1bnNpZ25lZCBsb25nIGluZm87CgogIGxvbmcgaW5zdGFuY2Vf c2l6ZTsKCgoKICBzdHJ1Y3Qgb2JqY19pdmFyX2xpc3QqIGl2YXJzOwoKCgoKCgogIHN0cnVjdCBv YmpjX21ldGhvZF9saXN0KiBtZXRob2RzOwoKCiAgc3RydWN0IHNhcnJheSAqIGR0YWJsZTsKCiAg c3RydWN0IG9iamNfY2xhc3MqIHN1YmNsYXNzX2xpc3Q7CiAgc3RydWN0IG9iamNfY2xhc3MqIHNp YmxpbmdfY2xhc3M7CgogIHN0cnVjdCBvYmpjX3Byb3RvY29sX2xpc3QgKnByb3RvY29sczsKICB2 b2lkKiBnY19vYmplY3RfdHlwZTsKfTsKIyAxNDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9v YmpjL29iamMuaCIKQGNsYXNzIFByb3RvY29sOwoKCnR5cGVkZWYgdm9pZCogcmV0dmFsX3Q7CnR5 cGVkZWYgdm9pZCgqYXBwbHlfdCkodm9pZCk7CnR5cGVkZWYgdW5pb24gewogIGNoYXIgKmFyZ19w dHI7CiAgY2hhciBhcmdfcmVnc1tzaXplb2YgKGNoYXIqKV07Cn0gKmFyZ2xpc3RfdDsKCgoKCgoK CjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAg ICAgICAgIFBhZ2UgICAgMwoKCgoKSU1QIG9iamNfbXNnX2xvb2t1cCAoaWQgcmVjZWl2ZXIsIFNF TCBvcCk7CiMgMzEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL09iamVjdC5oIiAyCiMg MSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvdHlwZWRzdHJlYW0uaCIgMQojIDMwICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy90eXBlZHN0cmVhbS5oIgojIDEgIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMuaCIgMQojIDMxICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvb2JqYy90eXBlZHN0cmVhbS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRl L29iamMvaGFzaC5oIiAxCiMgMzEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL2hhc2gu aCIKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w LjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzIgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9v YmpjL2hhc2guaCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMuaCIg MQojIDMzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9oYXNoLmgiIDIKIyAxICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9leHRlcm52YXIuaCIgMQojIDM0ICIvdXNyL2xvY2Fs L3N3YXJtL2luY2x1ZGUvb2JqYy9oYXNoLmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgi IDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVh dHVyZXMuaCIgMSAzCiMgMjgzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjg0ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg MiAzCiMgMzExICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9n bnUvc3R1YnMuaCIgMSAzCiMgMzEyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjcg Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoj IDM0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2 b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lk ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUg KHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICAgICAg ICAgOwoKCgoKCmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwg X19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgaW50 IF9fYywgc2l6ZV90IF9fbikKICAgICAgICAgICAgOwoKCgoKZXh0ZXJuIHZvaWQgKm1lbXNldCAo dm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSA7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgIDQK CgoKCmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAq X19zMiwgc2l6ZV90IF9fbikKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCmV4dGVybiB2b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXpl X3QgX19uKQogICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0 ZXJuIHZvaWQgKnJhd21lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1yY2hyIChfX2NvbnN0IHZvaWQg Kl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19k ZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgICAgICAgIDsKCmV4dGVy biBjaGFyICpzdHJuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwoKCmV4 dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19zcmMpCiAgICAgICAgICAgIDsKCmV4dGVybiBjaGFyICpzdHJuY2F0IChj aGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAog ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgc3RyY21wIChf X2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICAgICAgICAgIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY21wIChfX2NvbnN0IGNoYXIg Kl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICAgICAgICAgIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFy ICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0cmljdCBfX2Rl c3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Jj LCBzaXplX3QgX19uKSA7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAy OCAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMwp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1 Y3QKewoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkg ICAgICAgICAgICAgICAgICAgUGFnZSAgICA1CgoKCiAgc3RydWN0IGxvY2FsZV9kYXRhICpfX2xv Y2FsZXNbMTNdOwoKCiAgY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7CiAgY29u c3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvdXBwZXI7Cn0g Kl9fbG9jYWxlX3Q7CiMgMTA5ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCmV4dGVybiBp bnQgX19zdHJjb2xsX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBf X2xvY2FsZV90IF9fbCkKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK ZXh0ZXJuIHNpemVfdCBfX3N0cnhmcm1fbCAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9f c3JjLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9f bCkgOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIF9fYXR0cmli dXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKCmV4dGVybiBjaGFyICpzdHJuZHVwIChfX2NvbnN0 IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAo KF9fbWFsbG9jX18pKTsKIyAxNTUgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hh ciAqc3RyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBf X2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51 bCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBj aGFyICpfX3JlamVjdCkKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK CmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpf X2FjY2VwdCkKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJu IGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0 KQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAq c3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUp CiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgoKCgoKMjAwMS0w OC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAg UGFnZSAgICA2CgoKCmV4dGVybiBjaGFyICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5 c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBf X3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKQogICAgICAgICAgICA7CgoKCmV4 dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgOwoKZXh0ZXJuIGNo YXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19z YXZlX3B0cikgOwoKCgoKCgpleHRlcm4gdm9pZCAqbWVtbWVtIChfX2NvbnN0IHZvaWQgKl9faGF5 c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrbGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHZvaWQgKl9fbmVlZGxlLCBzaXplX3QgX19uZWVkbGVsZW4pCiAgICAgICAgICAgICBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAodm9pZCAqX19y ZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19y ZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwpleHRlcm4gdm9pZCAqbWVtcGNweSAodm9pZCAq X19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9f cmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKCgoKCmV4dGVybiBzaXplX3Qgc3RybGVuIChf X2NvbnN0IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4g c2l6ZV90IHN0cm5sZW4gKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikK ICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIg KnN0cmVycm9yIChpbnQgX19lcnJudW0pIDsKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGlu dCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgOwoKCgoKCgoKCgoKMjAw MS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAg ICAgUGFnZSAgICA3CgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9f bikgOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19k ZXN0LCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90 IF9fbikgOwoKCmV4dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZv aWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCgpleHRlcm4gY2hhciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0 IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVy biBpbnQgZmZzIChpbnQgX19pKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKCmV4dGVybiBp bnQgZmZzbCAobG9uZyBpbnQgX19sKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCl9fZXh0ZW5z aW9uX18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBsb25nIGludCBfX2xsKQogICAgICAgICAgICAg X19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29u c3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgICAgICAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFy ICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgICAgICAgICBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gaW50IF9fc3RyY2FzZWNtcF9sIChf X2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl eHRlcm4gaW50IF9fc3RybmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo YXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2Fs ZV90IF9fbG9jKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoK CgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAg ICAgICAgICAgICAgUGFnZSAgICA4CgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jl c3RyaWN0IF9fc3RyaW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZGVsaW0pIDsKCgoKCmV4dGVybiBpbnQgc3RydmVyc2NtcCAoX19jb25zdCBjaGFy ICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChpbnQgX19zaWcpIDsKCgpleHRl cm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19zcmMpCiAgICAgICAgICAgIDsKZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hh ciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAg ICAgICAgICAgOwoKCgpleHRlcm4gY2hhciAqX19zdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9f ZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f c3JjLCBzaXplX3QgX19uKSA7CmV4dGVybiBjaGFyICpzdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0 IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X3NyYywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBjaGFyICpzdHJmcnkgKGNoYXIgKl9fc3RyaW5n KSA7CgoKZXh0ZXJuIHZvaWQgKm1lbWZyb2IgKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgOwoKCgoK CgpleHRlcm4gY2hhciAqYmFzZW5hbWUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgOwojIDM1 NiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5n LmgiIDEgMwojIDM1NyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgojIDEgIi91c3IvaW5j bHVkZS9iaXRzL3N0cmluZzIuaCIgMSAzCiMgNTIgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9l bmRpYW4uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9p bmNsdWRlL2VuZGlhbi5oIiAyIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL2JpdHMvZW5kaWFuLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZW5kaWFu LmgiIDIgMwojIDUzICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDIgMwojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwoKCgoKCgoKMjAwMS0wOC0yNCAw MToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAg ICA5CgoKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2xv Y2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRk ZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYg dW5zaWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7 CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3Vf bG9uZzsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9x dWFkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5 ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4 X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0 IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5 cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMy X3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90 OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90 OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2 X3Q7CnR5cGVkZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlw ZWRlZiBfX3VfbG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYg X191X2ludCBfX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1 YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90 Owp0eXBlZGVmIF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRf dDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9f dmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNo YXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVk ZWYgbG9uZyBpbnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKCgoK CgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAg ICAgICAgICAgUGFnZSAgIDEwCgoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYg aW50IF9fdGltZXJfdDsKCgoKCgoKdHlwZWRlZiBpbnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2ln bmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVf dDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Js a2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1 YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlw ZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVkZWYgX191X3F1YWRfdCBfX2lu bzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoKdHlwZWRlZiBsb25nIGludCBf X3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCgp0 eXBlZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90 OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMgMjMgIi91 c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv c2NoZWQuaCIgMSAzCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBl cnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgMTEKCgojIDY4ICIvdXNyL2luY2x1ZGUv Yml0cy9zY2hlZC5oIiAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRf cHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDIg MwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAgaW50 IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3Qg Kl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MKewog IGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVk X3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7 CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19z dGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0eXBl ZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9wdGhy ZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0cnVj dAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5zaWdu ZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAg ICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgMTIKCgoKCnR5cGVk ZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJl YWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFz dGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAg aW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0 aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewogIHN0 cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsKICBf cHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRfd2Fp dGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndfa2lu ZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYgc3Ry dWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2Nr YXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9zcGlubG9ja190OwoKCnR5 cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19iYV9sb2NrOwogIGlu dCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19i YV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90OwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAg ICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDEzCgoK Cgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX2JhcnJpZXJhdHRy X3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CiMgMTQ0ICIvdXNy L2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5n Mi5oIiAyIDMKIyAyMTcgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19p bmxpbmUgdm9pZCAqX19tZW1wY3B5X3NtYWxsICh2b2lkICosIGNoYXIsIGNoYXIsIGNoYXIsIGNo YXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdWludDE2X3QsIF9f dWludDE2X3QsIF9fdWludDMyX3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fdWludDMyX3QsIHNpemVfdCk7CmV4dGVybiBfX2lubGluZSB2b2lkICoKX19tZW1wY3B5 X3NtYWxsICh2b2lkICpfX2Rlc3QxLAogICAgICAgICAgICAgICAgIGNoYXIgX19zcmMwXzEsIGNo YXIgX19zcmMyXzEsIGNoYXIgX19zcmM0XzEsIGNoYXIgX19zcmM2XzEsCiAgICAgICAgICAgICAg ICAgX191aW50MTZfdCBfX3NyYzBfMiwgX191aW50MTZfdCBfX3NyYzRfMiwKICAgICAgICAgICAg ICAgICBfX3VpbnQzMl90IF9fc3JjMF80LCBfX3VpbnQzMl90IF9fc3JjNF80LAogICAgICAgICAg ICAgICAgIHNpemVfdCBfX3NyY2xlbikKewogIHVuaW9uIHsKICAgIF9fdWludDMyX3QgX191aTsK ICAgIF9fdWludDE2X3QgX191c2k7CiAgICB1bnNpZ25lZCBjaGFyIF9fdWM7CiAgICB1bnNpZ25l ZCBjaGFyIF9fYzsKICB9ICpfX3UgPSBfX2Rlc3QxOwogIHN3aXRjaCAoKHVuc2lnbmVkIGludCkg X19zcmNsZW4pCiAgICB7CiAgICBjYXNlIDE6CiAgICAgIF9fdS0+X19jID0gX19zcmMwXzE7CiAg ICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDEpOwogICAgICBicmVhazsK ICAgIGNhc2UgMjoKICAgICAgX191LT5fX3VzaSA9IF9fc3JjMF8yOwogICAgICBfX3UgPSBfX2V4 dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAyKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDM6CiAg ICAgIF9fdS0+X191c2kgPSBfX3NyYzBfMjsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZv aWQgKikgX191ICsgMik7CiAgICAgIF9fdS0+X19jID0gX19zcmMyXzE7CiAgICAgIF9fdSA9IF9f ZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDEpOwogICAgICBicmVhazsKICAgIGNhc2UgNDoK ICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2 b2lkICopIF9fdSArIDQpOwogICAgICBicmVhazsKICAgIGNhc2UgNToKICAgICAgX191LT5fX3Vp ID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQp OwogICAgICBfX3UtPl9fYyA9IF9fc3JjNF8xOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgo dm9pZCAqKSBfX3UgKyAxKTsKICAgICAgYnJlYWs7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAg ICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgMTQKCgog ICAgY2FzZSA2OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0gX19leHRl bnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CiAgICAgIF9fdS0+X191c2kgPSBfX3NyYzRfMjsK ICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMik7CiAgICAgIGJyZWFr OwogICAgY2FzZSA3OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0gX19l eHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CiAgICAgIF9fdS0+X191c2kgPSBfX3NyYzRf MjsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMik7CiAgICAgIF9f dS0+X19jID0gX19zcmM2XzE7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9f dSArIDEpOwogICAgICBicmVhazsKICAgIGNhc2UgODoKICAgICAgX191LT5fX3VpID0gX19zcmMw XzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOwogICAgICBf X3UtPl9fdWkgPSBfX3NyYzRfNDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikg X191ICsgNCk7CiAgICAgIGJyZWFrOwogICAgfQogIHJldHVybiAodm9pZCAqKSBfX3U7Cn0KIyAz NzEgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gdm9pZCAqX19yYXdtZW1j aHIgKGNvbnN0IHZvaWQgKl9fcywgaW50IF9fYyk7CiMgMzk1ICIvdXNyL2luY2x1ZGUvYml0cy9z dHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RyY3B5X3NtYWxsIChjaGFyICos IF9fdWludDE2X3QsIF9fdWludDE2X3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX191aW50MzJfdCwgX191aW50MzJfdCwgc2l6ZV90KTsKZXh0ZXJuIF9faW5saW5lIGNo YXIgKgpfX3N0cmNweV9zbWFsbCAoY2hhciAqX19kZXN0LAogICAgICAgICAgICAgICAgX191aW50 MTZfdCBfX3NyYzBfMiwgX191aW50MTZfdCBfX3NyYzRfMiwKICAgICAgICAgICAgICAgIF9fdWlu dDMyX3QgX19zcmMwXzQsIF9fdWludDMyX3QgX19zcmM0XzQsCiAgICAgICAgICAgICAgICBzaXpl X3QgX19zcmNsZW4pCnsKICB1bmlvbiB7CiAgICBfX3VpbnQzMl90IF9fdWk7CiAgICBfX3VpbnQx Nl90IF9fdXNpOwogICAgdW5zaWduZWQgY2hhciBfX3VjOwogIH0gKl9fdSA9ICh2b2lkICopIF9f ZGVzdDsKICBzd2l0Y2ggKCh1bnNpZ25lZCBpbnQpIF9fc3JjbGVuKQogICAgewogICAgY2FzZSAx OgogICAgICBfX3UtPl9fdWMgPSAnXDAnOwogICAgICBicmVhazsKICAgIGNhc2UgMjoKICAgICAg X191LT5fX3VzaSA9IF9fc3JjMF8yOwogICAgICBicmVhazsKICAgIGNhc2UgMzoKICAgICAgX191 LT5fX3VzaSA9IF9fc3JjMF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBf X3UgKyAyKTsKICAgICAgX191LT5fX3VjID0gJ1wwJzsKICAgICAgYnJlYWs7CiAgICBjYXNlIDQ6 CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAgICBicmVhazsKICAgIGNhc2UgNToKCgoK CgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAg ICAgICAgICAgIFBhZ2UgICAxNQoKCiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAgICBf X3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX3VjID0g J1wwJzsKICAgICAgYnJlYWs7CiAgICBjYXNlIDY6CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80 OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKICAgICAgX191 LT5fX3VzaSA9IF9fc3JjNF8yOwogICAgICBicmVhazsKICAgIGNhc2UgNzoKICAgICAgX191LT5f X3VpID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSAr IDQpOwogICAgICBfX3UtPl9fdXNpID0gX19zcmM0XzI7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9u X18gKCh2b2lkICopIF9fdSArIDIpOwogICAgICBfX3UtPl9fdWMgPSAnXDAnOwogICAgICBicmVh azsKICAgIGNhc2UgODoKICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9IF9f ZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOwogICAgICBfX3UtPl9fdWkgPSBfX3NyYzRf NDsKICAgICAgYnJlYWs7CiAgICB9CiAgcmV0dXJuIF9fZGVzdDsKfQojIDU1NCAiL3Vzci9pbmNs dWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cGNweV9zbWFs bCAoY2hhciAqLCBfX3VpbnQxNl90LCBfX3VpbnQxNl90LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fdWludDMyX3QsIF9fdWludDMyX3QsIHNpemVfdCk7CmV4dGVybiBf X2lubGluZSBjaGFyICoKX19zdHBjcHlfc21hbGwgKGNoYXIgKl9fZGVzdCwKICAgICAgICAgICAg ICAgIF9fdWludDE2X3QgX19zcmMwXzIsIF9fdWludDE2X3QgX19zcmM0XzIsCiAgICAgICAgICAg ICAgICBfX3VpbnQzMl90IF9fc3JjMF80LCBfX3VpbnQzMl90IF9fc3JjNF80LAogICAgICAgICAg ICAgICAgc2l6ZV90IF9fc3JjbGVuKQp7CiAgdW5pb24gewogICAgdW5zaWduZWQgaW50IF9fdWk7 CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX191c2k7CiAgICB1bnNpZ25lZCBjaGFyIF9fdWM7CiAg ICBjaGFyIF9fYzsKICB9ICpfX3UgPSAodm9pZCAqKSBfX2Rlc3Q7CiAgc3dpdGNoICgodW5zaWdu ZWQgaW50KSBfX3NyY2xlbikKICAgIHsKICAgIGNhc2UgMToKICAgICAgX191LT5fX3VjID0gJ1ww JzsKICAgICAgYnJlYWs7CiAgICBjYXNlIDI6CiAgICAgIF9fdS0+X191c2kgPSBfX3NyYzBfMjsK ICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMSk7CiAgICAgIGJyZWFr OwogICAgY2FzZSAzOgogICAgICBfX3UtPl9fdXNpID0gX19zcmMwXzI7CiAgICAgIF9fdSA9IF9f ZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOwogICAgICBfX3UtPl9fdWMgPSAnXDAnOwog ICAgICBicmVhazsKICAgIGNhc2UgNDoKICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAg IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDMpOwoKCgoKCgoKMjAwMS0wOC0y NCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFn ZSAgIDE2CgoKICAgICAgYnJlYWs7CiAgICBjYXNlIDU6CiAgICAgIF9fdS0+X191aSA9IF9fc3Jj MF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKICAgICAg X191LT5fX3VjID0gJ1wwJzsKICAgICAgYnJlYWs7CiAgICBjYXNlIDY6CiAgICAgIF9fdS0+X191 aSA9IF9fc3JjMF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0 KTsKICAgICAgX191LT5fX3VzaSA9IF9fc3JjNF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9f ICgodm9pZCAqKSBfX3UgKyAxKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDc6CiAgICAgIF9fdS0+ X191aSA9IF9fc3JjMF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3Ug KyA0KTsKICAgICAgX191LT5fX3VzaSA9IF9fc3JjNF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lv bl9fICgodm9pZCAqKSBfX3UgKyAyKTsKICAgICAgX191LT5fX3VjID0gJ1wwJzsKICAgICAgYnJl YWs7CiAgICBjYXNlIDg6CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAgICBfX3UgPSBf X2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX3VpID0gX19zcmM0 XzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDMpOwogICAgICBi cmVhazsKICAgIH0KICByZXR1cm4gJl9fdS0+X19jOwp9CiMgODczICIvdXNyL2luY2x1ZGUvYml0 cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cmNzcG5fYzEgKF9fY29u c3QgY2hhciAqX19zLCBjaGFyIF9fcmVqZWN0KTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0 cmNzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fcmVqZWN0KQp7CiAgcmVnaXN0ZXIg c2l6ZV90IF9fcmVzdWx0ID0gMDsKICB3aGlsZSAoX19zW19fcmVzdWx0XSAhPSAnXDAnICYmIF9f c1tfX3Jlc3VsdF0gIT0gX19yZWplY3QpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3Vs dDsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cmNzcG5fYzIgKF9fY29uc3QgY2hhciAq X19zLCBjaGFyIF9fcmVqZWN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgX19yZWplY3QyKTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cmNzcG5fYzIgKF9f Y29uc3QgY2hhciAqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIpCnsKICByZWdp c3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcg JiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDEKICAgICAgICAgJiYgX19zW19fcmVzdWx0XSAh PSBfX3JlamVjdDIpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJu IF9faW5saW5lIHNpemVfdCBfX3N0cmNzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9f cmVqZWN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19yZWpl Y3QyLCBjaGFyIF9fcmVqZWN0Myk7CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJjc3BuX2Mz IChfX2NvbnN0IGNoYXIgKl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyLAogICAg ICAgICAgICAgIGNoYXIgX19yZWplY3QzKQoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAg ICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDE3CgoKewogIHJl Z2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gIT0gJ1ww JyAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MQogICAgICAgICAmJiBfX3NbX19yZXN1bHRd ICE9IF9fcmVqZWN0MiAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MykKICAgICsrX19yZXN1 bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CiMgOTI4ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcy LmgiIDMKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cnNwbl9jMSAoX19jb25zdCBjaGFyICpf X3MsIGNoYXIgX19hY2NlcHQpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3Ryc3BuX2MxIChf X2NvbnN0IGNoYXIgKl9fcywgY2hhciBfX2FjY2VwdCkKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jl c3VsdCA9IDA7CgogIHdoaWxlIChfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0KQogICAgKytfX3Jl c3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJz cG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fYWNjZXB0MSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciBfX2FjY2VwdDIpOwpleHRlcm4gX19pbmxpbmUgc2l6 ZV90Cl9fc3Ryc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgY2hhciBfX2FjY2VwdDEsIGNoYXIg X19hY2NlcHQyKQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKCiAgd2hpbGUgKF9f c1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQxIHx8IF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQyKQog ICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBfX2lubGluZSBzaXpl X3QgX19zdHJzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fYWNjZXB0MSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfX2FjY2VwdDIsIGNoYXIgX19hY2Nl cHQzKTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cnNwbl9jMyAoX19jb25zdCBjaGFyICpf X3MsIGNoYXIgX19hY2NlcHQxLCBjaGFyIF9fYWNjZXB0MiwgY2hhciBfX2FjY2VwdDMpCnsKICBy ZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwoKICB3aGlsZSAoX19zW19fcmVzdWx0XSA9PSBf X2FjY2VwdDEgfHwgX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDIKICAgICAgICAgfHwgX19zW19f cmVzdWx0XSA9PSBfX2FjY2VwdDMpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsK fQojIDk4MyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBj aGFyICpfX3N0cnBicmtfYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQxLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYWNjZXB0Mik7CmV4dGVybiBf X2lubGluZSBjaGFyICoKX19zdHJwYnJrX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNj ZXB0MSwgaW50IF9fYWNjZXB0MikKewoKICB3aGlsZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0g X19hY2NlcHQxICYmICpfX3MgIT0gX19hY2NlcHQyKQogICAgKytfX3M7CiAgcmV0dXJuICpfX3Mg PT0gJ1wwJyA/ICgodm9pZCAqKTApIDogKGNoYXIgKikgKHNpemVfdCkgX19zOwp9CgpleHRlcm4g X19pbmxpbmUgY2hhciAqX19zdHJwYnJrX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNj ZXB0MSwKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1p ICAgICAgICAgICAgICAgICAgIFBhZ2UgICAxOAoKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgX19hY2NlcHQyLCBpbnQgX19hY2NlcHQzKTsKZXh0ZXJuIF9faW5saW5l IGNoYXIgKgpfX3N0cnBicmtfYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQxLCBp bnQgX19hY2NlcHQyLAogICAgICAgICAgICAgIGludCBfX2FjY2VwdDMpCnsKCiAgd2hpbGUgKCpf X3MgIT0gJ1wwJyAmJiAqX19zICE9IF9fYWNjZXB0MSAmJiAqX19zICE9IF9fYWNjZXB0MgogICAg ICAgICAmJiAqX19zICE9IF9fYWNjZXB0MykKICAgICsrX19zOwogIHJldHVybiAqX19zID09ICdc MCcgPyAoKHZvaWQgKikwKSA6IChjaGFyICopIChzaXplX3QpIF9fczsKfQojIDEwMjYgIi91c3Iv aW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgc2l6ZV90CnN0cm5sZW4g KF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikKewogIF9fY29uc3QgY2hh ciAqX19lbmQgPSAoX19jb25zdCBjaGFyICopIG1lbWNociAoX19zdHJpbmcsICdcMCcsIF9fbWF4 bGVuKTsKICByZXR1cm4gX19lbmQgPyAoc2l6ZV90KSAoX19lbmQgLSBfX3N0cmluZykgOiBfX21h eGxlbjsKfQojIDEwNDUgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19p bmxpbmUgY2hhciAqX19zdHJ0b2tfcl8xYyAoY2hhciAqX19zLCBjaGFyIF9fc2VwLCBjaGFyICoq X19uZXh0cCk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJ0b2tfcl8xYyAoY2hhciAqX19z LCBjaGFyIF9fc2VwLCBjaGFyICoqX19uZXh0cCkKewogIGNoYXIgKl9fcmVzdWx0OwogIGlmIChf X3MgPT0gKCh2b2lkICopMCkpCiAgICBfX3MgPSAqX19uZXh0cDsKICB3aGlsZSAoKl9fcyA9PSBf X3NlcCkKICAgICsrX19zOwogIGlmICgqX19zID09ICdcMCcpCiAgICBfX3Jlc3VsdCA9ICgodm9p ZCAqKTApOwogIGVsc2UKICAgIHsKICAgICAgX19yZXN1bHQgPSBfX3M7CiAgICAgIHdoaWxlICgq X19zICE9ICdcMCcgJiYgKl9fcyAhPSBfX3NlcCkKICAgICAgICArK19fczsKICAgICAgaWYgKCpf X3MgPT0gJ1wwJykKICAgICAgICAqX19uZXh0cCA9IF9fczsKICAgICAgZWxzZQogICAgICAgIHsK ICAgICAgICAgICpfX3MgPSAnXDAnOwogICAgICAgICAgKl9fbmV4dHAgPSBfX3MgKyAxOwogICAg ICAgIH0KICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KIyAxMDk1ICIvdXNyL2luY2x1ZGUvYml0 cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3Ryc2VwXzFjIChjaGFyICoq X19zLCBjaGFyIF9fcmVqZWN0KTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnNlcF8xYyAo Y2hhciAqKl9fcywgY2hhciBfX3JlamVjdCkKewogIHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFsID0g Kl9fczsKICBpZiAoX19yZXR2YWwgPT0gKCh2b2lkICopMCkpCiAgICByZXR1cm4gKl9fcyA9ICgo dm9pZCAqKTApOwogIGlmICgqX19yZXR2YWwgPT0gX19yZWplY3QpCiAgICAqKCpfX3MpKysgPSAn XDAnOwogIGVsc2UKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVy c29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICAxOQoKCiAgICBpZiAoKCpfX3MgPSAoX19l eHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKF9fcmVqZWN0KSAmJiAoX19yZWplY3Qp ID09ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNociAoX19yZXR2YWwsIF9fcmVqZWN0KSA6IHN0 cmNociAoX19yZXR2YWwsIF9fcmVqZWN0KSkpKSAhPSAoKHZvaWQgKikwKSkKICAgICAgKigqX19z KSsrID0gJ1wwJzsKICAgIGVsc2UKICAgICAgKl9fcyA9ICgodm9pZCAqKTApOwogIHJldHVybiBf X3JldHZhbDsKfQoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3Ryc2VwXzJjIChjaGFyICoqX19z LCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIpOwpleHRlcm4gX19pbmxpbmUgY2hhciAq Cl9fc3Ryc2VwXzJjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIp CnsKICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsID09ICgo dm9pZCAqKTApKQogICAgcmV0dXJuICpfX3MgPSAoKHZvaWQgKikwKTsKICBpZiAoKl9fcmV0dmFs ID09IF9fcmVqZWN0MSB8fCAqX19yZXR2YWwgPT0gX19yZWplY3QyKQogICAgKigqX19zKSsrID0g J1wwJzsKICBlbHNlCiAgICB7CiAgICAgIHJlZ2lzdGVyIGNoYXIgKl9fY3AgPSBfX3JldHZhbDsK ICAgICAgd2hpbGUgKCpfX2NwICE9ICdcMCcgJiYgKl9fY3AgIT0gX19yZWplY3QxICYmICpfX2Nw ICE9IF9fcmVqZWN0MikKICAgICAgICArK19fY3A7CiAgICAgIGlmICgqX19jcCAhPSAnXDAnKQog ICAgICAgIHsKICAgICAgICAgICpfX3MgPSBfX2NwOwogICAgICAgICAgKigqX19zKSsrID0gJ1ww JzsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICAqX19zID0gKCh2b2lkICopMCk7CiAgICB9 CiAgcmV0dXJuIF9fcmV0dmFsOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfM2Mg KGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fcmVqZWN0Myk7CmV4dGVybiBfX2lubGluZSBj aGFyICoKX19zdHJzZXBfM2MgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVq ZWN0MiwgY2hhciBfX3JlamVjdDMpCnsKICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7 CiAgaWYgKF9fcmV0dmFsID09ICgodm9pZCAqKTApKQogICAgcmV0dXJuICpfX3MgPSAoKHZvaWQg KikwKTsKICBpZiAoKl9fcmV0dmFsID09IF9fcmVqZWN0MSB8fCAqX19yZXR2YWwgPT0gX19yZWpl Y3QyCiAgICAgIHx8ICpfX3JldHZhbCA9PSBfX3JlamVjdDMpCiAgICAqKCpfX3MpKysgPSAnXDAn OwogIGVsc2UKICAgIHsKICAgICAgcmVnaXN0ZXIgY2hhciAqX19jcCA9IF9fcmV0dmFsOwogICAg ICB3aGlsZSAoKl9fY3AgIT0gJ1wwJyAmJiAqX19jcCAhPSBfX3JlamVjdDEgJiYgKl9fY3AgIT0g X19yZWplY3QyCiAgICAgICAgICAgICAmJiAqX19jcCAhPSBfX3JlamVjdDMpCiAgICAgICAgKytf X2NwOwogICAgICBpZiAoKl9fY3AgIT0gJ1wwJykKICAgICAgICB7CiAgICAgICAgICAqX19zID0g X19jcDsKICAgICAgICAgICooKl9fcykrKyA9ICdcMCc7CiAgICAgICAgfQogICAgICBlbHNlCiAg ICAgICAgKl9fcyA9ICgodm9pZCAqKTApOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAg ICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDIwCgoKICAgIH0K ICByZXR1cm4gX19yZXR2YWw7Cn0KCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnNlcF9nIChj aGFyICoqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KTsKZXh0ZXJuIF9faW5saW5lIGNoYXIg KgpfX3N0cnNlcF9nIChjaGFyICoqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KQp7CiAgcmVn aXN0ZXIgY2hhciAqX19yZXR2YWwgPSAqX19zOwogIGlmIChfX3JldHZhbCA9PSAoKHZvaWQgKikw KSkKICAgIHJldHVybiAoKHZvaWQgKikwKTsKICBpZiAoKCpfX3MgPSBfX2V4dGVuc2lvbl9fICh7 IGNoYXIgX19hMCwgX19hMSwgX19hMjsgKF9fYnVpbHRpbl9jb25zdGFudF9wIChfX3JlamVjdCkg JiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKF9fcmVqZWN0KSArIDEpIC0gKHNpemVfdCkoY29u c3Qgdm9pZCAqKShfX3JlamVjdCkgPT0gMSkgPyAoKF9fYTAgPSAoKF9fY29uc3QgY2hhciAqKSAo X19yZWplY3QpKVswXSwgX19hMCA9PSAnXDAnKSA/ICgodm9pZCkgKF9fcmV0dmFsKSwgKCh2b2lk ICopMCkpIDogKChfX2ExID0gKChfX2NvbnN0IGNoYXIgKikgKF9fcmVqZWN0KSlbMV0sIF9fYTEg PT0gJ1wwJykgPyAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKF9fYTApICYm IChfX2EwKSA9PSAnXDAnID8gKGNoYXIgKikgX19yYXdtZW1jaHIgKF9fcmV0dmFsLCBfX2EwKSA6 IHN0cmNociAoX19yZXR2YWwsIF9fYTApKSkgOiAoKF9fYTIgPSAoKF9fY29uc3QgY2hhciAqKSAo X19yZWplY3QpKVsyXSwgX19hMiA9PSAnXDAnKSA/IF9fc3RycGJya19jMiAoX19yZXR2YWwsIF9f YTAsIF9fYTEpIDogKCgoX19jb25zdCBjaGFyICopIChfX3JlamVjdCkpWzNdID09ICdcMCcgPyBf X3N0cnBicmtfYzMgKF9fcmV0dmFsLCBfX2EwLCBfX2ExLCBfX2EyKSA6IHN0cnBicmsgKF9fcmV0 dmFsLCBfX3JlamVjdCkpKSkpIDogc3RycGJyayAoX19yZXR2YWwsIF9fcmVqZWN0KSk7IH0pKSAh PSAoKHZvaWQgKikwKSkKICAgICooKl9fcykrKyA9ICdcMCc7CiAgcmV0dXJuIF9fcmV0dmFsOwp9 CiMgMTE4OCAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L3N0ZGxpYi5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoK CgoKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4wLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg MiAzCiMgNTI4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKm1hbGxvYyAo c2l6ZV90IF9fc2l6ZSkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lk ICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgICAgICAgICAgX19h dHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxMTg5ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJp bmcyLmgiIDIgMwoKCgoKZXh0ZXJuIGNoYXIgKl9fc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fc3Ry aW5nKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDEyMTIgIi91c3IvaW5jbHVkZS9i aXRzL3N0cmluZzIuaCIgMwpleHRlcm4gY2hhciAqX19zdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9f c3RyaW5nLCBzaXplX3QgX19uKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9j X18pKTsKIyAzNjAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCiMgMzUgIi91c3IvbG9jYWwv c3dhcm0vaW5jbHVkZS9vYmpjL2hhc2guaCIgMgojIDQzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1 ZGUvb2JqYy9oYXNoLmgiCnR5cGVkZWYgc3RydWN0IGNhY2hlX25vZGUKewogIHN0cnVjdCBjYWNo ZV9ub2RlICpuZXh0OwoKICBjb25zdCB2b2lkICprZXk7CgoKCiAgdm9pZCAqdmFsdWU7Cn0gKm5v ZGVfcHRyOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24u bWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDIxCgoKIyA2NCAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL29iamMvaGFzaC5oIgp0eXBlZGVmIHVuc2lnbmVkIGludCAoKmhhc2hfZnVuY190eXBl KSh2b2lkICosIGNvbnN0IHZvaWQgKik7CiMgNzMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9v YmpjL2hhc2guaCIKdHlwZWRlZiBpbnQgKCpjb21wYXJlX2Z1bmNfdHlwZSkoY29uc3Qgdm9pZCAq LCBjb25zdCB2b2lkICopOwojIDgyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9oYXNo LmgiCnR5cGVkZWYgc3RydWN0CnsKCiAgbm9kZV9wdHIgKm5vZGVfdGFibGU7CgoKICB1bnNpZ25l ZCBpbnQgc2l6ZTsKCgogIHVuc2lnbmVkIGludCB1c2VkOwogIHVuc2lnbmVkIGludCBtYXNrOwoK CgogIHVuc2lnbmVkIGludCBsYXN0X2J1Y2tldDsKCgoKICBoYXNoX2Z1bmNfdHlwZSBoYXNoX2Z1 bmM7CgogIGNvbXBhcmVfZnVuY190eXBlIGNvbXBhcmVfZnVuYzsKfSBjYWNoZV90OwoKdHlwZWRl ZiBjYWNoZV90ICpjYWNoZV9wdHI7CgoKCmV4dGVybiBjYWNoZV9wdHIgbW9kdWxlX2hhc2hfdGFi bGUsIGNsYXNzX2hhc2hfdGFibGU7CgoKCmNhY2hlX3B0ciBoYXNoX25ldyAodW5zaWduZWQgaW50 IHNpemUsCiAgICAgICAgICAgICAgICAgICAgaGFzaF9mdW5jX3R5cGUgaGFzaF9mdW5jLAogICAg ICAgICAgICAgICAgICAgIGNvbXBhcmVfZnVuY190eXBlIGNvbXBhcmVfZnVuYyk7CgoKCnZvaWQg aGFzaF9kZWxldGUgKGNhY2hlX3B0ciBjYWNoZSk7CgoKCgoKCnZvaWQgaGFzaF9hZGQgKGNhY2hl X3B0ciAqY2FjaGVwLCBjb25zdCB2b2lkICprZXksIHZvaWQgKnZhbHVlKTsKCgoKCnZvaWQgaGFz aF9yZW1vdmUgKGNhY2hlX3B0ciBjYWNoZSwgY29uc3Qgdm9pZCAqa2V5KTsKIyAxNDIgIi91c3Iv bG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL2hhc2guaCIKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEg ICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICAyMgoK Cm5vZGVfcHRyIGhhc2hfbmV4dCAoY2FjaGVfcHRyIGNhY2hlLCBub2RlX3B0ciBub2RlKTsKCgoK dm9pZCAqaGFzaF92YWx1ZV9mb3Jfa2V5IChjYWNoZV9wdHIgY2FjaGUsIGNvbnN0IHZvaWQgKmtl eSk7CgoKCkJPT0wgaGFzaF9pc19rZXlfaW5faGFzaCAoY2FjaGVfcHRyIGNhY2hlLCBjb25zdCB2 b2lkICprZXkpOwojIDE2NCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvaGFzaC5oIgpz dGF0aWMgaW5saW5lIHVuc2lnbmVkIGludApoYXNoX3B0ciAoY2FjaGVfcHRyIGNhY2hlLCBjb25z dCB2b2lkICprZXkpCnsKICByZXR1cm4gKChzaXplX3Qpa2V5IC8gc2l6ZW9mICh2b2lkICopKSAm IGNhY2hlLT5tYXNrOwp9CgoKCgoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKaGFzaF9zdHJp bmcgKGNhY2hlX3B0ciBjYWNoZSwgY29uc3Qgdm9pZCAqa2V5KQp7CiAgdW5zaWduZWQgaW50IHJl dCA9IDA7CiAgdW5zaWduZWQgaW50IGN0ciA9IDA7CgoKICB3aGlsZSAoKihjaGFyKilrZXkpIHsK ICAgIHJldCBePSAqKGNoYXIqKWtleSsrIDw8IGN0cjsKICAgIGN0ciA9IChjdHIgKyAxKSAlIHNp emVvZiAodm9pZCAqKTsKICB9CgogIHJldHVybiByZXQgJiBjYWNoZS0+bWFzazsKfQoKCgpzdGF0 aWMgaW5saW5lIGludApjb21wYXJlX3B0cnMgKGNvbnN0IHZvaWQgKmsxLCBjb25zdCB2b2lkICpr MikKewogIHJldHVybiAhKGsxIC0gazIpOwp9CgoKCnN0YXRpYyBpbmxpbmUgaW50CmNvbXBhcmVf c3RyaW5ncyAoY29uc3Qgdm9pZCAqazEsIGNvbnN0IHZvaWQgKmsyKQp7CiAgaWYgKGsxID09IGsy KQogICAgcmV0dXJuIDE7CiAgZWxzZSBpZiAoazEgPT0gMCB8fCBrMiA9PSAwKQogICAgcmV0dXJu IDA7CiAgZWxzZQogICAgcmV0dXJuICFfX2V4dGVuc2lvbl9fICh7IHNpemVfdCBfX3MxX2xlbiwg X19zMl9sZW47IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoazEpICYmIF9fYnVpbHRpbl9jb25zdGFu dF9wIChrMikgJiYgKF9fczFfbGVuID0gc3RybGVuIChrMSksIF9fczJfbGVuID0gc3RybGVuIChr MiksICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGsxKSArIDEpIC0gKHNpemVfdCkoY29uc3Qg dm9pZCAqKShrMSkgPT0gMSkgfHwgX19zMV9sZW4gPj0gNCkgJiYgKCEoKHNpemVfdCkoY29uc3Qg dm9pZCAqKSgoazIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGsyKSA9PSAxKSB8fCBf X3MyX2xlbiA+PSA0KSkgPyBtZW1jbXAgKChfX2NvbnN0IGNoYXIgKikgKGsxKSwgKF9fY29uc3Qg Y2hhciAqKSAoazIpLCAoX19zMV9sZW4gPCBfX3MyX2xlbiA/IF9fczFfbGVuIDogX19zMl9sZW4p ICsgMSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKGsxKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9p ZCAqKSgoazEpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGsxKSA9PSAxKSAmJiAoX19z MV9sZW4gPSBzdHJsZW4gKGsxKSwgX19zMV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRf cCAoazIpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChrMikgKyAxKSAtIChzaXplX3QpKGNv bnN0IHZvaWQgKikoazIpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9f cmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsx KSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopKGsyKSlb MF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazEpKVsxXSAtICgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsyKSlbMV0pOyBpZiAoX19z MV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazEpKVsyXSAtICgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsyKSlbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYm IF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKGsxKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopIChrMikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25f XyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKGsyKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsxKSlbMF0gLSBfX3MyWzBd KTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsxKSlbMV0gLSBfX3MyWzFd KTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsxKSlbMl0gLSBfX3MyWzJd KTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChrMSkpWzNdIC0gX19zMlszXSk7 IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoazIpICYmICgoc2l6 ZV90KShjb25zdCB2b2lkICopKChrMikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoazIp ID09IDEpICYmIChfX3MyX2xlbiA9IHN0cmxlbiAoazIpLCBfX3MyX2xlbiA8IDQpID8gKF9fYnVp bHRpbl9jb25zdGFudF9wIChrMSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGsxKSArIDEp IC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShrMSkgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyBy ZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoazEpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikoazIpKVswXSk7IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBf X3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChr MSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazIp KVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChrMSkpWzJdIC0gKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazIpKVsyXSk7IGlmIChf X3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazEpKVszXSAtICgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsyKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6 IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMSA9IChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazEpOyByZWdpc3RlciBpbnQgX19y ZXN1bHQgPSBfX3MxWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoazIpKVswXTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVz dWx0ID0gKF9fczFbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopIChrMikpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVz dWx0ID0gKF9fczFbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopIChrMikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3Vs dCA9IChfX3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAoazIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IHN0cmNtcCAoazEsIGsyKSkpKTsgfSk7 Cn0KIyAzMiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvdHlwZWRzdHJlYW0uaCIgMgoK CgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAg ICAgICAgICAgICAgUGFnZSAgIDIzCgoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAzNiAiL3Vzci9s b2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3Rk aW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAzNyAiL3Vzci9sb2Nh bC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkaW8u aCIgMiAzCgoKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvZ2NjMy9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoK IyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA0NSAiL3Vzci9sb2NhbC9nY2Mz L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkaW8uaCIgMiAz CiMgNTMgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAu MS9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKIyA2MyAi L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1 ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgNzMgIi91c3Iv bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0 ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVk ZS9saWJpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIyA5ICIvdXNy L2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAx IDMKIyAxMCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCgoKCiMgMSAiL3Vzci9sb2Nh bC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkZGVm LmgiIDEgMwojIDMxMiAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzMuMC4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90 OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwojIDI0ICIvdXNyL2luY2x1ZGUv X0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3Iv aW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1 ZGUvd2NoYXIuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDUx ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgNjcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz CnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19jb3VudDsKICB1bmlvbgogIHsKICAgIHdpbnRfdCBf X3djaDsKICAgIGNoYXIgX193Y2hiWzRdOwogIH0gX192YWx1ZTsKfSBfX21ic3RhdGVfdDsKIyAy NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCnR5cGVkZWYgc3RydWN0CnsKICBfX29m Zl90IF9fcG9zOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJz b24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDI0CgoKICBfX21ic3RhdGVfdCBfX3N0YXRl Owp9IF9HX2Zwb3NfdDsKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21i c3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3M2NF90OwojIDQ0ICIvdXNyL2luY2x1ZGUvX0dfY29u ZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVk ZS9nY29udi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNy L2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0 OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1s aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91 c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIg MSAzCiMgNTEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2dj b252LmgiIDIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9nY29u di5oIiAyIDMKCgoKCgplbnVtCnsKICBfX0dDT05WX09LID0gMCwKICBfX0dDT05WX05PQ09OViwK ICBfX0dDT05WX05PREIsCiAgX19HQ09OVl9OT01FTSwKCiAgX19HQ09OVl9FTVBUWV9JTlBVVCwK ICBfX0dDT05WX0ZVTExfT1VUUFVULAogIF9fR0NPTlZfSUxMRUdBTF9JTlBVVCwKICBfX0dDT05W X0lOQ09NUExFVEVfSU5QVVQsCgogIF9fR0NPTlZfSUxMRUdBTF9ERVNDUklQVE9SLAogIF9fR0NP TlZfSU5URVJOQUxfRVJST1IKfTsKCgoKZW51bQp7CiAgX19HQ09OVl9JU19MQVNUID0gMHgwMDAx LAogIF9fR0NPTlZfSUdOT1JFX0VSUk9SUyA9IDB4MDAwMgp9OwoKCgpzdHJ1Y3QgX19nY29udl9z dGVwOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkg ICAgICAgICAgICAgICAgICAgUGFnZSAgIDI1CgoKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhOwpz dHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhOwoK Cgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1 Y3QgX19nY29udl9zdGVwX2RhdGEgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgdW5zaWduZWQgY2hhciAqKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBzaXplX3QgKiwgaW50LCBpbnQpOwoK CnR5cGVkZWYgaW50ICgqX19nY29udl9pbml0X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7 CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7 CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVw ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX19nY29udl9zdGVw X2RhdGEgKiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJh bnNfY29udGV4dF9mY3QpICh2b2lkICosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hh ciAqLCB1bnNpZ25lZCBjaGFyICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19xdWVy eV9mY3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFyICoqKiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2Nv bnZfdHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBjaGFyICopOwp0eXBlZGVmIHZvaWQg KCpfX2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoKc3RydWN0IF9fZ2NvbnZfdHJhbnNf ZGF0YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNfZmN0OwogIF9fZ2NvbnZfdHJhbnNf Y29udGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBfX2djb252X3RyYW5zX2VuZF9mY3Qg X190cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBzdHJ1Y3QgX19nY29udl90cmFuc19k YXRhICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXAKewogIHN0cnVjdCBfX2djb252 X2xvYWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIF9fY29uc3QgY2hhciAqX19tb2RuYW1l OwoKICBpbnQgX19jb3VudGVyOwoKICBjaGFyICpfX2Zyb21fbmFtZTsKCgoKCgoKCjIwMDEtMDgt MjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBh Z2UgICAyNgoKCiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2dj b252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoK ICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBf X21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0YXRlZnVs OwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5z aWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7CgoKCiAg aW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGludCBfX2lu dGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90IF9fc3Rh dGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoKdHlwZWRl ZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0IF9fZ2Nv bnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0 YSBfX2RhdGEgW107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5o IiAyIDMKdHlwZWRlZiB1bmlvbgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAg ICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDI3CgoKewogIHN0cnVjdCBf X2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1Y3QgX19nY29udl9pbmZvIF9f Y2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhOwogIH0gX19jb21iaW5lZDsK fSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19t b2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgo X19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19h dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9H X3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwojIDMxICIvdXNy L2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgNTEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAi L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1 ZGUvc3RkYXJnLmgiIDEgMwojIDQzICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fYnVpbHRpbl92 YV9saXN0IF9fZ251Y192YV9saXN0OwojIDUyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMg MTU4ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9J T19GSUxFOwojIDE2OCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiB2b2lkIF9JT19s b2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4 dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE5MSAiL3Vzci9p bmNsdWRlL2xpYmlvLmgiIDMKfTsKCgplbnVtIF9fY29kZWN2dF9yZXN1bHQKewogIF9fY29kZWN2 dF9vaywKICBfX2NvZGVjdnRfcGFydGlhbCwKICBfX2NvZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0 X25vY29udgp9OwojIDI1OSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19GSUxF IHsKICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9fcmVhZF9wdHI7CiAgY2hhciogX0lPX3Jl YWRfZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAg ICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgMjgKCgog IGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lP X3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7Cgog IGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9J T19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lP X0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3Qg X29sZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNo YXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAq X2xvY2s7CiMgMzAzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0 OwoKCgoKCiAgdm9pZCAqX19wYWQxOwogIHZvaWQgKl9fcGFkMjsKCiAgaW50IF9tb2RlOwoKICBj aGFyIF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9 OwoKCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9JT19GSUxFOwoKCnN0cnVjdCBfSU9fRklMRV9w bHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4g c3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19G SUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDM0MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMK dHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19i dWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAg ICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICAyOQoKCgoKCgoKdHlw ZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqX19jb29raWUsIF9fY29uc3QgY2hh ciAqX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pOwoK CgoKCgoKdHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19vZmY2NF90 ICpfX3BvcywgaW50IF9fdyk7CgoKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9mbiAodm9pZCAqX19j b29raWUpOwoKCgoKdHlwZWRlZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRfZnVuY3Rpb25fdDsK dHlwZWRlZiBfX2lvX3dyaXRlX2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90Owp0eXBlZGVmIF9f aW9fc2Vla19mbiBjb29raWVfc2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fY2xvc2VfZm4g Y29va2llX2Nsb3NlX2Z1bmN0aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9faW9fcmVhZF9m biAqcmVhZDsKICBfX2lvX3dyaXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtfZm4gKnNlZWs7CiAg X19pb19jbG9zZV9mbiAqY2xvc2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsKdHlwZWRl ZiBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlvbnNfdDsKCnN0cnVj dCBfSU9fY29va2llX2ZpbGU7CgoKZXh0ZXJuIHZvaWQgX0lPX2Nvb2tpZV9pbml0IChzdHJ1Y3Qg X0lPX2Nvb2tpZV9maWxlICpfX2NmaWxlLCBpbnQgX19yZWFkX3dyaXRlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKl9fY29va2llLCBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190 IF9fZm5zKTsKCgoKCgoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgKF9JT19GSUxFICopIDsKZXh0 ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAoX0lP X0ZJTEUgKiwgaW50KSA7CmV4dGVybiB3aW50X3QgX193dW5kZXJmbG93IChfSU9fRklMRSAqKSA7 CmV4dGVybiB3aW50X3QgX193dWZsb3cgKF9JT19GSUxFICopIDsKZXh0ZXJuIHdpbnRfdCBfX3dv dmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90KSA7CiMgNDI0ICIvdXNyL2luY2x1ZGUvbGliaW8u aCIgMwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkg ICAgICAgICAgICAgICAgICAgUGFnZSAgIDMwCgoKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJ TEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnAp IDsKZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9f ZmVycm9yIChfSU9fRklMRSAqX19mcCkgOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChf SU9fRklMRSAqX19mcCkgOwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxF ICopIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSA7CmV4dGVybiBp bnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUgKikgOwojIDQ1NCAiL3Vzci9pbmNsdWRlL2xp YmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBj b25zdCBjaGFyICogX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3Zh X2xpc3QsIGludCAqX19yZXN0cmljdCkgOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJ TEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICBfX2dudWNfdmFfbGlzdCkgOwpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9f RklMRSAqLCBpbnQsIF9fc3NpemVfdCkgOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJ TEUgKiwgdm9pZCAqLCBzaXplX3QpIDsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtvZmYgKF9J T19GSUxFICosIF9fb2ZmNjRfdCwgaW50LCBpbnQpIDsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vl a3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIDsKCmV4dGVybiB2b2lkIF9JT19mcmVl X2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSA7CiMgNzQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKdHlw ZWRlZiBfX2dudWNfdmFfbGlzdCBfX25vdF92YV9saXN0X187CiMgODggIi91c3IvbG9jYWwvZ2Nj My9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDMK dHlwZWRlZiBfR19mcG9zX3QgZnBvc190OwoKCgoKdHlwZWRlZiBfR19mcG9zNjRfdCBmcG9zNjRf dDsKIyAxMzcgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0u aCIgMSAzCiMgMTM4ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpleHRl cm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwojIDE1MiAiL3Vzci9sb2NhbC9n Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkaW8uaCIg MwpleHRlcm4gaW50IHJlbW92ZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSA7CgpleHRlcm4g aW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpfX25ldykgOwoK CgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAg ICAgICAgICAgICAgICAgIFBhZ2UgICAzMQoKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKSA7 CiMgMTY4ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w LjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICp0bXBmaWxlNjQgKHZvaWQpIDsKCgpl eHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIDsKCgoKCmV4dGVybiBjaGFyICp0bXBuYW1f ciAoY2hhciAqX19zKSA7CiMgMTg4ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBjaGFyICp0ZW1wbmFt IChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4KQogICAgICAgICAgICAg X19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlIChGSUxF ICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4 dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGlu dCBmY2xvc2VhbGwgKHZvaWQpIDsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX21vZGVzKSA7CgpleHRlcm4gRklMRSAqZnJlb3BlbiAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0pIDsKIyAyMzIgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKmZv cGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIDsKZXh0ZXJuIEZJTEUg KmZyZW9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAg ICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgoKCgpleHRlcm4g RklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSA7CgoKCgoKCgoK CgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAg ICAgICAgICAgUGFnZSAgIDMyCgoKCmV4dGVybiBGSUxFICpmb3BlbmNvb2tpZSAodm9pZCAqX19y ZXN0cmljdCBfX21hZ2ljX2Nvb2tpZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSU9f Y29va2llX2lvX2Z1bmN0aW9uc190IF9faW9fZnVuY3MpIDsKCgpleHRlcm4gRklMRSAqZm1lbW9w ZW4gKHZvaWQgKl9fcywgc2l6ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIDsKCgoK CmV4dGVybiBGSUxFICpvcGVuX21lbXN0cmVhbSAoY2hhciAqKl9fcmVzdHJpY3QgX19idWZsb2Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc2l6ZWxv YykgOwoKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwg Y2hhciAqX19yZXN0cmljdCBfX2J1ZikgOwoKCgpleHRlcm4gaW50IHNldHZidWYgKEZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAg ICAgICAgaW50IF9fbW9kZXMsIHNpemVfdCBfX24pIDsKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZmZl ciAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zaXplKSA7CgoKZXh0ZXJuIHZvaWQgc2V0bGlu ZWJ1ZiAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHNwcmludGYgKGNoYXIgKl9f cmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2Zvcm1hdCwgLi4uKSA7CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmlj dCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg ICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIDsKCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICAg ICAgICAgOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVj X3ZhX2xpc3QgX19hcmcpIDsKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAg ICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDMzCgoKCmV4dGVybiBpbnQg c25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAg ICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7 CgpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21h eGxlbiwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv cm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgo X19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgpleHRlcm4gaW50IHZhc3ByaW50 ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Ys CiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICAgICAgICAg IF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4g aW50IF9fYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgICAgICAgICAg X19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4dGVybiBp bnQgYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICAgICAgICAgIF9fYXR0 cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCmV4dGVybiBpbnQg dmRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsCiAgICAg ICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgICAgICAgICAgX19hdHRy aWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgZHBy aW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAg ICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7 CgoKCgpleHRlcm4gaW50IGZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7Cgpl eHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikg OwoKZXh0ZXJuIGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoK CgpleHRlcm4gaW50IHZmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3Qg X19hcmcpCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9f LCAyLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVf XyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMSwgMCkpKTsKCgpleHRlcm4gaW50IHZzc2NhbmYg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICAg ICAgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoK CgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAg ICAgICAgICAgICAgUGFnZSAgIDM0CgoKCgoKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJl YW0pIDsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiBpbnQgZ2V0 Y2hhciAodm9pZCkgOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0 cmVhbSkgOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIDsKCgoKCmV4dGVybiBp bnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZwdXRj IChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJ TEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGludCBwdXRjaGFyIChpbnQgX19jKSA7CgoKCgoKCgpl eHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwoKCgoK ZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwpleHRl cm4gaW50IHB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpIDsKCgoKCgpleHRlcm4gaW50IGdldHcg KEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0 cmVhbSkgOwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNv bi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgMzUKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAo Y2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0p CiAgICAgICAgICAgIDsKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzX3VubG9ja2VkIChjaGFyICpfX3Jl c3RyaWN0IF9fcywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpf X3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgoKCgpleHRlcm4gY2hhciAqZ2V0cyAoY2hhciAqX19zKSA7 CiMgNDM2ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w LjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBfX3NzaXplX3QgX19nZXRkZWxpbSAoY2hhciAq Kl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwpleHRlcm4gX19zc2l6ZV90 IGdldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCgpl eHRlcm4gX19zc2l6ZV90IGdldGxpbmUgKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgoKCgpleHRl cm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBGSUxFICpfX3Jlc3Ry aWN0IF9fc3RyZWFtKQogICAgICAgICAgICA7CgoKCmV4dGVybiBpbnQgZnB1dHNfdW5sb2NrZWQg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCgoKZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0 IGNoYXIgKl9fcykgOwoKCgpleHRlcm4gaW50IHVuZ2V0YyAoaW50IF9fYywgRklMRSAqX19zdHJl YW0pIDsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6 ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0 cmljdCBfX3N0cmVhbSkgOwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19y ZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSA7CgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgMzYK CgpleHRlcm4gc2l6ZV90IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBz aXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBG SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2Vk IChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry ZWFtKSA7CgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVhbSwgbG9uZyBpbnQgX19v ZmYsIGludCBfX3doZW5jZSkgOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChGSUxFICpfX3N0cmVh bSkgOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgOwojIDQ5OSAiL3Vzci9s b2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3Rk aW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3QgX19vZmYs IGludCBfX3doZW5jZSkgOwoKZXh0ZXJuIF9fb2ZmX3QgZnRlbGxvIChGSUxFICpfX3N0cmVhbSkg OwoKCgpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3Nf dCAqX19yZXN0cmljdCBfX3BvcykKICAgICAgICAgICAgOwoKZXh0ZXJuIGludCBmc2V0cG9zIChG SUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSA7CiMgNTMzICIvdXNyL2xvY2Fs L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRpby5o IiAzCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBfX29mZjY0X3QgX19vZmYs IGludCBfX3doZW5jZSkgOwpleHRlcm4gX19vZmY2NF90IGZ0ZWxsbzY0IChGSUxFICpfX3N0cmVh bSkgOwpleHRlcm4gaW50IGZnZXRwb3M2NCAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBv czY0X3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgICAgICAgIDsKZXh0ZXJuIGludCBmc2V0cG9z NjQgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3M2NF90ICpfX3BvcykgOwoKCgpleHRlcm4g dm9pZCBjbGVhcmVyciAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmVvZiAoRklMRSAq X19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmVycm9yIChGSUxFICpfX3N0cmVhbSkgOwoKCgpleHRl cm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBm ZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tl ZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBjaGFy ICpfX3MpIDsKCgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9f Y29uc3Qgc3lzX2Vycmxpc3RbXTsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAg ICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgMzcKCgoKZXh0ZXJuIGlu dCBfc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3QgX3N5c19lcnJsaXN0W107 CgoKCgoKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50 IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBv cGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSA7CgoK ZXh0ZXJuIGludCBwY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmN0 ZXJtaWQgKGNoYXIgKl9fcykgOwoKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFyICpfX3Mp IDsKCgoKCnN0cnVjdCBvYnN0YWNrOwoKCmV4dGVybiBpbnQgb2JzdGFja19wcmludGYgKHN0cnVj dCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKZXh0ZXJuIGludCBv YnN0YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJncykgOwoK CgoKCgoKZXh0ZXJuIHZvaWQgZmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKCgoKMjAw MS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAg ICAgUGFnZSAgIDM4CgoKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFt KSA7CgoKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSA7CiMgNjQwICIv dXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVk ZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMSAzCiMgMzkgIi91 c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDMKZXh0ZXJuIF9faW5saW5lIGludAp2cHJpbnRmIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQp7CiAg cmV0dXJuIHZmcHJpbnRmIChzdGRvdXQsIF9fZm10LCBfX2FyZyk7Cn0KCgpleHRlcm4gX19pbmxp bmUgaW50CmdldGNoYXIgKHZvaWQpCnsKICByZXR1cm4gX0lPX2dldGMgKHN0ZGluKTsKfQoKCgoK ZXh0ZXJuIF9faW5saW5lIGludApnZXRjX3VubG9ja2VkIChGSUxFICpfX2ZwKQp7CiAgcmV0dXJu ICgoX19mcCktPl9JT19yZWFkX3B0ciA+PSAoX19mcCktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cg KF9fZnApIDogKih1bnNpZ25lZCBjaGFyICopIChfX2ZwKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoK ZXh0ZXJuIF9faW5saW5lIGludApnZXRjaGFyX3VubG9ja2VkICh2b2lkKQp7CiAgcmV0dXJuICgo c3RkaW4pLT5fSU9fcmVhZF9wdHIgPj0gKHN0ZGluKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAo c3RkaW4pIDogKih1bnNpZ25lZCBjaGFyICopIChzdGRpbiktPl9JT19yZWFkX3B0cisrKTsKfQoK CgoKZXh0ZXJuIF9faW5saW5lIGludApwdXRjaGFyIChpbnQgX19jKQp7CiAgcmV0dXJuIF9JT19w dXRjIChfX2MsIHN0ZG91dCk7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBpbnQKZnB1dGNfdW5sb2Nr ZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lP X3dyaXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9f c3RyZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3Ry ZWFtKS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCgoKMjAwMS0wOC0yNCAwMToy MSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDM5 CgoKCgoKCgpleHRlcm4gX19pbmxpbmUgaW50CnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUg Kl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0ciA+PSAoX19z dHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFtLCAodW5zaWduZWQg Y2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0 cisrID0gKF9fYykpKTsKfQoKCmV4dGVybiBfX2lubGluZSBpbnQKcHV0Y2hhcl91bmxvY2tlZCAo aW50IF9fYykKewogIHJldHVybiAoKChzdGRvdXQpLT5fSU9fd3JpdGVfcHRyID49IChzdGRvdXQp LT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKHN0ZG91dCwgKHVuc2lnbmVkIGNoYXIpIChf X2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRvdXQpLT5fSU9fd3JpdGVfcHRyKysgPSAoX19j KSkpOwp9CgoKCgoKZXh0ZXJuIF9faW5saW5lIF9fc3NpemVfdApnZXRsaW5lIChjaGFyICoqX19s aW5lcHRyLCBzaXplX3QgKl9fbiwgRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gX19nZXRkZWxp bSAoX19saW5lcHRyLCBfX24sICdcbicsIF9fc3RyZWFtKTsKfQoKCgoKCmV4dGVybiBfX2lubGlu ZSBpbnQKZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gKCgoX19zdHJl YW0pLT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBpbnQKZmVycm9y X3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFn cyAmIDB4MjApICE9IDApOwp9CiMgNjQxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyAzMyAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL29iamMvdHlwZWRzdHJlYW0uaCIgMgoKdHlwZWRlZiBpbnQgKCpvYmpj X3R5cGVkX3JlYWRfZnVuYykodm9pZCosIGNoYXIqLCBpbnQpOwp0eXBlZGVmIGludCAoKm9iamNf dHlwZWRfd3JpdGVfZnVuYykodm9pZCosIGNvbnN0IGNoYXIqLCBpbnQpOwp0eXBlZGVmIGludCAo Km9iamNfdHlwZWRfZmx1c2hfZnVuYykodm9pZCopOwp0eXBlZGVmIGludCAoKm9iamNfdHlwZWRf ZW9mX2Z1bmMpKHZvaWQqKTsKIyA0OCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvdHlw ZWRzdHJlYW0uaCIKdHlwZWRlZiBzdHJ1Y3Qgb2JqY190eXBlZF9zdHJlYW0gewogIHZvaWQqIHBo eXNpY2FsOwogIGNhY2hlX3B0ciBvYmplY3RfdGFibGU7CiAgY2FjaGVfcHRyIHN0cmVhbV90YWJs ZTsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAg ICAgICAgICAgICAgICAgIFBhZ2UgICA0MAoKCiAgY2FjaGVfcHRyIGNsYXNzX3RhYmxlOwogIGNh Y2hlX3B0ciBvYmplY3RfcmVmczsKICBpbnQgbW9kZTsKICBpbnQgdHlwZTsKICBpbnQgdmVyc2lv bjsKICBpbnQgd3JpdGluZ19yb290X3A7CiAgb2JqY190eXBlZF9yZWFkX2Z1bmMgcmVhZDsKICBv YmpjX3R5cGVkX3dyaXRlX2Z1bmMgd3JpdGU7CiAgb2JqY190eXBlZF9lb2ZfZnVuYyBlb2Y7CiAg b2JqY190eXBlZF9mbHVzaF9mdW5jIGZsdXNoOwp9IFR5cGVkU3RyZWFtOwojIDkzICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvb2JqYy90eXBlZHN0cmVhbS5oIgppbnQgb2JqY193cml0ZV90eXBl IChUeXBlZFN0cmVhbSogc3RyZWFtLCBjb25zdCBjaGFyKiB0eXBlLCBjb25zdCB2b2lkKiBkYXRh KTsKaW50IG9iamNfcmVhZF90eXBlIChUeXBlZFN0cmVhbSogc3RyZWFtLCBjb25zdCBjaGFyKiB0 eXBlLCB2b2lkKiBkYXRhKTsKCmludCBvYmpjX3dyaXRlX3R5cGVzIChUeXBlZFN0cmVhbSogc3Ry ZWFtLCBjb25zdCBjaGFyKiB0eXBlLCAuLi4pOwppbnQgb2JqY19yZWFkX3R5cGVzIChUeXBlZFN0 cmVhbSogc3RyZWFtLCBjb25zdCBjaGFyKiB0eXBlLCAuLi4pOwoKaW50IG9iamNfd3JpdGVfb2Jq ZWN0X3JlZmVyZW5jZSAoVHlwZWRTdHJlYW0qIHN0cmVhbSwgaWQgb2JqZWN0KTsKaW50IG9iamNf d3JpdGVfcm9vdF9vYmplY3QgKFR5cGVkU3RyZWFtKiBzdHJlYW0sIGlkIG9iamVjdCk7Cgpsb25n IG9iamNfZ2V0X3N0cmVhbV9jbGFzc192ZXJzaW9uIChUeXBlZFN0cmVhbSogc3RyZWFtLCBDbGFz cyBjbGFzcyk7CgoKCgoKCmludCBvYmpjX3dyaXRlX2FycmF5IChUeXBlZFN0cmVhbSogc3RyZWFt LCBjb25zdCBjaGFyKiB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBjb25z dCB2b2lkKiBkYXRhKTsKaW50IG9iamNfcmVhZF9hcnJheSAoVHlwZWRTdHJlYW0qIHN0cmVhbSwg Y29uc3QgY2hhciogdHlwZSwKICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCB2b2lkKiBk YXRhKTsKCmludCBvYmpjX3dyaXRlX29iamVjdCAoVHlwZWRTdHJlYW0qIHN0cmVhbSwgaWQgb2Jq ZWN0KTsKaW50IG9iamNfcmVhZF9vYmplY3QgKFR5cGVkU3RyZWFtKiBzdHJlYW0sIGlkKiBvYmpl Y3QpOwojIDEyNCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvdHlwZWRzdHJlYW0uaCIK VHlwZWRTdHJlYW0qIG9iamNfb3Blbl90eXBlZF9zdHJlYW0gKEZJTEUqIHBoeXNpY2FsLCBpbnQg bW9kZSk7ClR5cGVkU3RyZWFtKiBvYmpjX29wZW5fdHlwZWRfc3RyZWFtX2Zvcl9maWxlIChjb25z dCBjaGFyKiBmaWxlX25hbWUsIGludCBtb2RlKTsKCnZvaWQgb2JqY19jbG9zZV90eXBlZF9zdHJl YW0gKFR5cGVkU3RyZWFtKiBzdHJlYW0pOwoKQk9PTCBvYmpjX2VuZF9vZl90eXBlZF9zdHJlYW0g KFR5cGVkU3RyZWFtKiBzdHJlYW0pOwp2b2lkIG9iamNfZmx1c2hfdHlwZWRfc3RyZWFtIChUeXBl ZFN0cmVhbSogc3RyZWFtKTsKIyAzMiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvT2Jq ZWN0LmgiIDIKCgoKCgpAaW50ZXJmYWNlIE9iamVjdAp7CiAgICBDbGFzcyBpc2E7Cn0KCgorIGlu aXRpYWxpemU7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNv bi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgNDEKCgotIGluaXQ7CgoKKyBuZXc7CisgYWxs b2M7Ci0gZnJlZTsKLSBjb3B5OwotIHNoYWxsb3dDb3B5OwotIGRlZXBlbjsKLSBkZWVwQ29weTsK CgotIChDbGFzcyljbGFzczsKLSAoQ2xhc3Mpc3VwZXJDbGFzczsKLSAoTWV0YUNsYXNzKW1ldGFD bGFzczsKLSAoY29uc3QgY2hhciAqKW5hbWU7CgoKLSBzZWxmOwotICh1bnNpZ25lZCBpbnQpaGFz aDsKLSAoQk9PTClpc0VxdWFsOmFuT2JqZWN0OwotIChpbnQpY29tcGFyZTphbm90aGVyT2JqZWN0 OwoKCi0gKEJPT0wpaXNNZXRhQ2xhc3M7Ci0gKEJPT0wpaXNDbGFzczsKLSAoQk9PTClpc0luc3Rh bmNlOwoKCi0gKEJPT0wpaXNLaW5kT2Y6KENsYXNzKWFDbGFzc09iamVjdDsKLSAoQk9PTClpc01l bWJlck9mOihDbGFzcylhQ2xhc3NPYmplY3Q7Ci0gKEJPT0wpaXNLaW5kT2ZDbGFzc05hbWVkOihj b25zdCBjaGFyICopYUNsYXNzTmFtZTsKLSAoQk9PTClpc01lbWJlck9mQ2xhc3NOYW1lZDooY29u c3QgY2hhciAqKWFDbGFzc05hbWU7CgoKKyAoQk9PTClpbnN0YW5jZXNSZXNwb25kVG86KFNFTClh U2VsOwotIChCT09MKXJlc3BvbmRzVG86KFNFTClhU2VsOwoKCi0gKEJPT0wpY29uZm9ybXNUbzoo UHJvdG9jb2wqKWFQcm90b2NvbDsKCgorIChJTVApaW5zdGFuY2VNZXRob2RGb3I6KFNFTClhU2Vs OwotIChJTVApbWV0aG9kRm9yOihTRUwpYVNlbDsKKyAoc3RydWN0IG9iamNfbWV0aG9kX2Rlc2Ny aXB0aW9uICopZGVzY3JpcHRpb25Gb3JJbnN0YW5jZU1ldGhvZDooU0VMKWFTZWw7Ci0gKHN0cnVj dCBvYmpjX21ldGhvZF9kZXNjcmlwdGlvbiAqKWRlc2NyaXB0aW9uRm9yTWV0aG9kOihTRUwpYVNl bDsKCgotIHBlcmZvcm06KFNFTClhU2VsOwotIHBlcmZvcm06KFNFTClhU2VsIHdpdGg6YW5PYmpl Y3Q7Ci0gcGVyZm9ybTooU0VMKWFTZWwgd2l0aDphbk9iamVjdDEgd2l0aDphbk9iamVjdDI7CgoK LSAocmV0dmFsX3QpZm9yd2FyZDooU0VMKWFTZWwgOihhcmdsaXN0X3QpYXJnRnJhbWU7Ci0gKHJl dHZhbF90KXBlcmZvcm12OihTRUwpYVNlbCA6KGFyZ2xpc3RfdClhcmdGcmFtZTsKCgoKCgoKCgoy MDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAg ICAgICBQYWdlICAgNDIKCgoKKyBwb3NlQXM6KENsYXNzKWFDbGFzc09iamVjdDsKLSAoQ2xhc3Mp dHJhbnNtdXRlQ2xhc3NUbzooQ2xhc3MpYUNsYXNzT2JqZWN0OwoKCi0gc3ViY2xhc3NSZXNwb25z aWJpbGl0eTooU0VMKWFTZWw7Ci0gbm90SW1wbGVtZW50ZWQ6KFNFTClhU2VsOwotIHNob3VsZE5v dEltcGxlbWVudDooU0VMKWFTZWw7CgoKLSBkb2VzTm90UmVjb2duaXplOihTRUwpYVNlbDsKLSBl cnJvcjooY29uc3QgY2hhciAqKWFTdHJpbmcsIC4uLjsKCgorIChpbnQpdmVyc2lvbjsKKyBzZXRW ZXJzaW9uOihpbnQpYVZlcnNpb247CisgKGludClzdHJlYW1WZXJzaW9uOiAoVHlwZWRTdHJlYW0q KWFTdHJlYW07CgotIHJlYWQ6IChUeXBlZFN0cmVhbSopYVN0cmVhbTsKLSB3cml0ZTogKFR5cGVk U3RyZWFtKilhU3RyZWFtOwotIGF3YWtlOwoKQGVuZAojIDEzICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvZGVmb2JqL0RlZkNsYXNzLmgiIDIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv b2JqYy9vYmpjLWFwaS5oIiAxCiMgMzQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29i amMtYXBpLmgiCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy5oIiAxCiMg MzUgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMtYXBpLmgiIDIKIyAxICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9oYXNoLmgiIDEKIyAzNiAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL29iamMvb2JqYy1hcGkuaCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9vYmpjL3Roci5oIiAxCiMgNDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL3Roci5o IgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMuaCIgMQojIDQyICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy90aHIuaCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9vYmpjL2V4dGVybnZhci5oIiAxCiMgNDMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9vYmpjL3Roci5oIiAyCgoKCgpleHRlcm4gaW50IF9fb2JqY190aHJlYWRfZXhpdF9zdGF0dXM7 CiMgNTkgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL3Roci5oIgp0eXBlZGVmIHZvaWQg KiBvYmpjX3RocmVhZF90OwoKCnN0cnVjdCBvYmpjX211dGV4CnsKICB2b2xhdGlsZSBvYmpjX3Ro cmVhZF90IG93bmVyOwogIHZvbGF0aWxlIGludCBkZXB0aDsKICB2b2lkICogYmFja2VuZDsKfTsK dHlwZWRlZiBzdHJ1Y3Qgb2JqY19tdXRleCAqb2JqY19tdXRleF90OwoKCnN0cnVjdCBvYmpjX2Nv bmRpdGlvbgp7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNv bi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgNDMKCgogIHZvaWQgKiBiYWNrZW5kOwp9Owp0 eXBlZGVmIHN0cnVjdCBvYmpjX2NvbmRpdGlvbiAqb2JqY19jb25kaXRpb25fdDsKCgpvYmpjX211 dGV4X3Qgb2JqY19tdXRleF9hbGxvY2F0ZSh2b2lkKTsKaW50IG9iamNfbXV0ZXhfZGVhbGxvY2F0 ZShvYmpjX211dGV4X3QgbXV0ZXgpOwppbnQgb2JqY19tdXRleF9sb2NrKG9iamNfbXV0ZXhfdCBt dXRleCk7CmludCBvYmpjX211dGV4X3VubG9jayhvYmpjX211dGV4X3QgbXV0ZXgpOwppbnQgb2Jq Y19tdXRleF90cnlsb2NrKG9iamNfbXV0ZXhfdCBtdXRleCk7CgoKb2JqY19jb25kaXRpb25fdCBv YmpjX2NvbmRpdGlvbl9hbGxvY2F0ZSh2b2lkKTsKaW50IG9iamNfY29uZGl0aW9uX2RlYWxsb2Nh dGUob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24pOwppbnQgb2JqY19jb25kaXRpb25fd2FpdChv YmpjX2NvbmRpdGlvbl90IGNvbmRpdGlvbiwgb2JqY19tdXRleF90IG11dGV4KTsKaW50IG9iamNf Y29uZGl0aW9uX3NpZ25hbChvYmpjX2NvbmRpdGlvbl90IGNvbmRpdGlvbik7CmludCBvYmpjX2Nv bmRpdGlvbl9icm9hZGNhc3Qob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24pOwoKCm9iamNfdGhy ZWFkX3Qgb2JqY190aHJlYWRfZGV0YWNoKFNFTCBzZWxlY3RvciwgaWQgb2JqZWN0LCBpZCBhcmd1 bWVudCk7CnZvaWQgb2JqY190aHJlYWRfeWllbGQodm9pZCk7CmludCBvYmpjX3RocmVhZF9leGl0 KHZvaWQpOwppbnQgb2JqY190aHJlYWRfc2V0X3ByaW9yaXR5KGludCBwcmlvcml0eSk7CmludCBv YmpjX3RocmVhZF9nZXRfcHJpb3JpdHkodm9pZCk7CnZvaWQgKiBvYmpjX3RocmVhZF9nZXRfZGF0 YSh2b2lkKTsKaW50IG9iamNfdGhyZWFkX3NldF9kYXRhKHZvaWQgKnZhbHVlKTsKb2JqY190aHJl YWRfdCBvYmpjX3RocmVhZF9pZCh2b2lkKTsKIyAxMTMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9vYmpjL3Roci5oIgp0eXBlZGVmIHZvaWQgKCpvYmpjX3RocmVhZF9jYWxsYmFjaykoKTsKb2Jq Y190aHJlYWRfY2FsbGJhY2sgb2JqY19zZXRfdGhyZWFkX2NhbGxiYWNrKG9iamNfdGhyZWFkX2Nh bGxiYWNrIGZ1bmMpOwoKCmludCBfX29iamNfaW5pdF90aHJlYWRfc3lzdGVtKHZvaWQpOwppbnQg X19vYmpjX2ZpbmlfdGhyZWFkX3N5c3RlbSh2b2lkKTsKCgppbnQgX19vYmpjX211dGV4X2FsbG9j YXRlKG9iamNfbXV0ZXhfdCBtdXRleCk7CmludCBfX29iamNfbXV0ZXhfZGVhbGxvY2F0ZShvYmpj X211dGV4X3QgbXV0ZXgpOwppbnQgX19vYmpjX211dGV4X2xvY2sob2JqY19tdXRleF90IG11dGV4 KTsKaW50IF9fb2JqY19tdXRleF90cnlsb2NrKG9iamNfbXV0ZXhfdCBtdXRleCk7CmludCBfX29i amNfbXV0ZXhfdW5sb2NrKG9iamNfbXV0ZXhfdCBtdXRleCk7CgoKaW50IF9fb2JqY19jb25kaXRp b25fYWxsb2NhdGUob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24pOwppbnQgX19vYmpjX2NvbmRp dGlvbl9kZWFsbG9jYXRlKG9iamNfY29uZGl0aW9uX3QgY29uZGl0aW9uKTsKaW50IF9fb2JqY19j b25kaXRpb25fd2FpdChvYmpjX2NvbmRpdGlvbl90IGNvbmRpdGlvbiwgb2JqY19tdXRleF90IG11 dGV4KTsKaW50IF9fb2JqY19jb25kaXRpb25fYnJvYWRjYXN0KG9iamNfY29uZGl0aW9uX3QgY29u ZGl0aW9uKTsKaW50IF9fb2JqY19jb25kaXRpb25fc2lnbmFsKG9iamNfY29uZGl0aW9uX3QgY29u ZGl0aW9uKTsKCgpvYmpjX3RocmVhZF90IF9fb2JqY190aHJlYWRfZGV0YWNoKHZvaWQgKCpmdW5j KSh2b2lkICphcmcpLCB2b2lkICphcmcpOwppbnQgX19vYmpjX3RocmVhZF9zZXRfcHJpb3JpdHko aW50IHByaW9yaXR5KTsKaW50IF9fb2JqY190aHJlYWRfZ2V0X3ByaW9yaXR5KHZvaWQpOwp2b2lk IF9fb2JqY190aHJlYWRfeWllbGQodm9pZCk7CmludCBfX29iamNfdGhyZWFkX2V4aXQodm9pZCk7 Cm9iamNfdGhyZWFkX3QgX19vYmpjX3RocmVhZF9pZCh2b2lkKTsKCgoKCgoKCjIwMDEtMDgtMjQg MDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2Ug ICA0NAoKCmludCBfX29iamNfdGhyZWFkX3NldF9kYXRhKHZvaWQgKnZhbHVlKTsKdm9pZCAqIF9f b2JqY190aHJlYWRfZ2V0X2RhdGEodm9pZCk7CiMgMzcgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9vYmpjL29iamMtYXBpLmgiIDIKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAzOCAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy1hcGkuaCIgMgojIDEgIi91c3IvbG9jYWwvZ2NjMy9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMK IyAxMTAgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAu MS9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyAz OSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy1hcGkuaCIgMgoKIyAxICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9leHRlcm52YXIuaCIgMQojIDQxICIvdXNyL2xvY2Fs L3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLWFwaS5oIiAyCiMgNTAgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9vYmpjL29iamMtYXBpLmgiCnN0cnVjdCBvYmpjX21ldGhvZF9kZXNjcmlwdGlvbgp7 CiAgICBTRUwgbmFtZTsKICAgIGNoYXIgKnR5cGVzOwp9OwojIDEwNiAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL29iamMvb2JqYy1hcGkuaCIKZXh0ZXJuIHZvaWQgb2JqY19lcnJvciAoaWQgb2Jq ZWN0LCBpbnQgY29kZSwgY29uc3QgY2hhciogZm10LCAuLi4pOwpleHRlcm4gdm9pZCBvYmpjX3Zl cnJvciAoaWQgb2JqZWN0LCBpbnQgY29kZSwgY29uc3QgY2hhciogZm10LCB2YV9saXN0IGFwKTsK dHlwZWRlZiBCT09MICgqb2JqY19lcnJvcl9oYW5kbGVyKSAoaWQsIGludCBjb2RlLCBjb25zdCBj aGFyICpmbXQsIHZhX2xpc3QgYXApOwpvYmpjX2Vycm9yX2hhbmRsZXIgb2JqY19zZXRfZXJyb3Jf aGFuZGxlciAob2JqY19lcnJvcl9oYW5kbGVyIGZ1bmMpOwojIDE0NyAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL29iamMvb2JqYy1hcGkuaCIKc3RydWN0IG9iamNfc3RhdGljX2luc3RhbmNlcwp7 CiAgY2hhciAqY2xhc3NfbmFtZTsKICBpZCBpbnN0YW5jZXNbMF07Cn07CiMgMTYyICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLWFwaS5oIgp0eXBlZGVmIHN0cnVjdCBvYmpjX3N5 bXRhYiB7CiAgdW5zaWduZWQgbG9uZyBzZWxfcmVmX2NudDsKICBTRUwgcmVmczsKICB1bnNpZ25l ZCBzaG9ydCBjbHNfZGVmX2NudDsKCiAgdW5zaWduZWQgc2hvcnQgY2F0X2RlZl9jbnQ7CgoKCiAg dm9pZCAqZGVmc1sxXTsKCgoKCgp9IFN5bXRhYiwgKlN5bXRhYl90OwojIDE4OSAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy1hcGkuaCIKdHlwZWRlZiBzdHJ1Y3Qgb2JqY19tb2R1 bGUgewogIHVuc2lnbmVkIGxvbmcgdmVyc2lvbjsKICB1bnNpZ25lZCBsb25nIHNpemU7CiAgY29u c3QgY2hhciogbmFtZTsKCgoKICBTeW10YWJfdCBzeW10YWI7CgoKCgoKCgoKMjAwMS0wOC0yNCAw MToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAg IDQ1CgoKCgoKCn0gTW9kdWxlLCAqTW9kdWxlX3Q7CgoKCgoKCnR5cGVkZWYgc3RydWN0IG9iamNf aXZhciogSXZhcl90Owp0eXBlZGVmIHN0cnVjdCBvYmpjX2l2YXJfbGlzdCB7CiAgaW50IGl2YXJf Y291bnQ7CgoKCgogIHN0cnVjdCBvYmpjX2l2YXIgewogICAgY29uc3QgY2hhciogaXZhcl9uYW1l OwoKCiAgICBjb25zdCBjaGFyKiBpdmFyX3R5cGU7CgoKICAgIGludCBpdmFyX29mZnNldDsKCgoK ICB9IGl2YXJfbGlzdFsxXTsKCn0gSXZhckxpc3QsICpJdmFyTGlzdF90OwojIDI0MCAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy1hcGkuaCIKc3RydWN0IG9iamNfbWV0aG9kIHsK ICBTRUwgbWV0aG9kX25hbWU7CgoKCgoKICBjb25zdCBjaGFyKiBtZXRob2RfdHlwZXM7CgoKICBJ TVAgbWV0aG9kX2ltcDsKCn07Cgp0eXBlZGVmIHN0cnVjdCBvYmpjX21ldGhvZCBNZXRob2Q7Cgp0 eXBlZGVmIE1ldGhvZCogTWV0aG9kX3Q7CnR5cGVkZWYgc3RydWN0IG9iamNfbWV0aG9kX2xpc3Qg ewogIHN0cnVjdCBvYmpjX21ldGhvZF9saXN0KiBtZXRob2RfbmV4dDsKCgogIGludCBtZXRob2Rf Y291bnQ7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24u bWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDQ2CgoKICBzdHJ1Y3Qgb2JqY19tZXRob2QgbWV0 aG9kX2xpc3RbMV07Cgp9IE1ldGhvZExpc3QsICpNZXRob2RMaXN0X3Q7CgpzdHJ1Y3Qgb2JqY19w cm90b2NvbF9saXN0IHsKICBzdHJ1Y3Qgb2JqY19wcm90b2NvbF9saXN0ICpuZXh0OwogIGludCBj b3VudDsKICBQcm90b2NvbCAqbGlzdFsxXTsKfTsKIyAzMjQgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9vYmpjL29iamMtYXBpLmgiCnR5cGVkZWYgc3RydWN0IG9iamNfY2F0ZWdvcnkgewogIGNv bnN0IGNoYXIqIGNhdGVnb3J5X25hbWU7CgoKICBjb25zdCBjaGFyKiBjbGFzc19uYW1lOwoKICBN ZXRob2RMaXN0X3QgaW5zdGFuY2VfbWV0aG9kczsKCgoKICBNZXRob2RMaXN0X3QgY2xhc3NfbWV0 aG9kczsKCgoKICBzdHJ1Y3Qgb2JqY19wcm90b2NvbF9saXN0ICpwcm90b2NvbHM7Cgp9IENhdGVn b3J5LCAqQ2F0ZWdvcnlfdDsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3Qgb2JqY19zdXBlciB7CiAgaWQg c2VsZjsKCiAgQ2xhc3MgY2xhc3M7Cn0gU3VwZXIsICpTdXBlcl90OwoKSU1QIG9iamNfbXNnX2xv b2t1cF9zdXBlcihTdXBlcl90IHN1cGVyLCBTRUwgc2VsKTsKCgpyZXR2YWxfdCBvYmpjX21zZ19z ZW5kdihpZCwgU0VMLCBhcmdsaXN0X3QpOwojIDM2NyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRl L29iamMvb2JqYy1hcGkuaCIKZXh0ZXJuIENsYXNzICgqX29iamNfbG9va3VwX2NsYXNzKSAoY29u c3QgY2hhciAqbmFtZSk7CgoKCgoKCgpleHRlcm4gdm9pZCAoKl9vYmpjX2xvYWRfY2FsbGJhY2sp IChDbGFzcyBjbGFzcywgQ2F0ZWdvcnkqIGNhdGVnb3J5KTsKCgoKCgoKCgoKCjIwMDEtMDgtMjQg MDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2Ug ICA0NwoKCgpleHRlcm4gaWQgKCpfb2JqY19vYmplY3RfYWxsb2MpIChDbGFzcyBjbGFzcyk7CmV4 dGVybiBpZCAoKl9vYmpjX29iamVjdF9jb3B5KSAoaWQgb2JqZWN0KTsKZXh0ZXJuIGlkICgqX29i amNfb2JqZWN0X2Rpc3Bvc2UpIChpZCBvYmplY3QpOwoKCgoKCgoKdm9pZCAqb2JqY19tYWxsb2Mg KHNpemVfdCBzaXplKTsKCnZvaWQgKm9iamNfYXRvbWljX21hbGxvYyAoc2l6ZV90IHNpemUpOwoK dm9pZCAqb2JqY192YWxsb2MgKHNpemVfdCBzaXplKTsKCnZvaWQgKm9iamNfcmVhbGxvYyAodm9p ZCAqbWVtLCBzaXplX3Qgc2l6ZSk7Cgp2b2lkICpvYmpjX2NhbGxvYyAoc2l6ZV90IG5lbGVtLCBz aXplX3Qgc2l6ZSk7Cgp2b2lkIG9iamNfZnJlZSAodm9pZCAqbWVtKTsKIyA0MTIgIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMtYXBpLmgiCmV4dGVybiB2b2lkICooKl9vYmpjX21h bGxvYykgKHNpemVfdCk7CmV4dGVybiB2b2lkICooKl9vYmpjX2F0b21pY19tYWxsb2MpIChzaXpl X3QpOwpleHRlcm4gdm9pZCAqKCpfb2JqY192YWxsb2MpIChzaXplX3QpOwpleHRlcm4gdm9pZCAq KCpfb2JqY19yZWFsbG9jKSAodm9pZCAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCAqKCpfb2JqY19j YWxsb2MpIChzaXplX3QsIHNpemVfdCk7CmV4dGVybiB2b2lkICgqX29iamNfZnJlZSkgKHZvaWQg Kik7CgpNZXRob2RfdCBjbGFzc19nZXRfY2xhc3NfbWV0aG9kIChNZXRhQ2xhc3MgY2xhc3MsIFNF TCBhU2VsKTsKCk1ldGhvZF90IGNsYXNzX2dldF9pbnN0YW5jZV9tZXRob2QgKENsYXNzIGNsYXNz LCBTRUwgYVNlbCk7CgpDbGFzcyBjbGFzc19wb3NlX2FzIChDbGFzcyBpbXBvc3RvciwgQ2xhc3Mg c3VwZXJjbGFzcyk7CgpDbGFzcyBvYmpjX2dldF9jbGFzcyAoY29uc3QgY2hhciAqbmFtZSk7CgpD bGFzcyBvYmpjX2xvb2t1cF9jbGFzcyAoY29uc3QgY2hhciAqbmFtZSk7CgpDbGFzcyBvYmpjX25l eHRfY2xhc3MgKHZvaWQgKiplbnVtX3N0YXRlKTsKCmNvbnN0IGNoYXIgKnNlbF9nZXRfbmFtZSAo U0VMIHNlbGVjdG9yKTsKCmNvbnN0IGNoYXIgKnNlbF9nZXRfdHlwZSAoU0VMIHNlbGVjdG9yKTsK ClNFTCBzZWxfZ2V0X3VpZCAoY29uc3QgY2hhciAqbmFtZSk7CgpTRUwgc2VsX2dldF9hbnlfdWlk IChjb25zdCBjaGFyICpuYW1lKTsKClNFTCBzZWxfZ2V0X2FueV90eXBlZF91aWQgKGNvbnN0IGNo YXIgKm5hbWUpOwoKU0VMIHNlbF9nZXRfdHlwZWRfdWlkIChjb25zdCBjaGFyICpuYW1lLCBjb25z dCBjaGFyKik7CgpTRUwgc2VsX3JlZ2lzdGVyX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpOwoKCgoK CgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAg ICAgICAgICAgIFBhZ2UgICA0OAoKClNFTCBzZWxfcmVnaXN0ZXJfdHlwZWRfbmFtZSAoY29uc3Qg Y2hhciAqbmFtZSwgY29uc3QgY2hhcip0eXBlKTsKCgpCT09MIHNlbF9pc19tYXBwZWQgKFNFTCBh U2VsKTsKCmV4dGVybiBpZCBjbGFzc19jcmVhdGVfaW5zdGFuY2UgKENsYXNzIGNsYXNzKTsKCnN0 YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCmNsYXNzX2dldF9jbGFzc19uYW1lIChDbGFzcyBjbGFz cykKewogIHJldHVybiAoKGNsYXNzKSYmKCgoKGNsYXNzKS0+aW5mbykgJiAweDFMKSA9PSAweDFM KSk/Y2xhc3MtPm5hbWU6KChjbGFzcz09KENsYXNzKTApPyJOaWwiOjApOwp9CgpzdGF0aWMgaW5s aW5lIGxvbmcKY2xhc3NfZ2V0X2luc3RhbmNlX3NpemUgKENsYXNzIGNsYXNzKQp7CiAgcmV0dXJu ICgoY2xhc3MpJiYoKCgoY2xhc3MpLT5pbmZvKSAmIDB4MUwpID09IDB4MUwpKSA/IGNsYXNzLT5p bnN0YW5jZV9zaXplIDogMDsKfQoKc3RhdGljIGlubGluZSBNZXRhQ2xhc3MKY2xhc3NfZ2V0X21l dGFfY2xhc3MgKENsYXNzIGNsYXNzKQp7CiAgcmV0dXJuICgoY2xhc3MpJiYoKCgoY2xhc3MpLT5p bmZvKSAmIDB4MUwpID09IDB4MUwpKSA/IGNsYXNzLT5jbGFzc19wb2ludGVyIDogKENsYXNzKTA7 Cn0KCnN0YXRpYyBpbmxpbmUgQ2xhc3MKY2xhc3NfZ2V0X3N1cGVyX2NsYXNzIChDbGFzcyBjbGFz cykKewogIHJldHVybiAoKGNsYXNzKSYmKCgoKGNsYXNzKS0+aW5mbykgJiAweDFMKSA9PSAweDFM KSkgPyBjbGFzcy0+c3VwZXJfY2xhc3MgOiAoQ2xhc3MpMDsKfQoKc3RhdGljIGlubGluZSBpbnQK Y2xhc3NfZ2V0X3ZlcnNpb24gKENsYXNzIGNsYXNzKQp7CiAgcmV0dXJuICgoY2xhc3MpJiYoKCgo Y2xhc3MpLT5pbmZvKSAmIDB4MUwpID09IDB4MUwpKSA/IGNsYXNzLT52ZXJzaW9uIDogLTE7Cn0K CnN0YXRpYyBpbmxpbmUgQk9PTApjbGFzc19pc19jbGFzcyAoQ2xhc3MgY2xhc3MpCnsKICByZXR1 cm4gKChjbGFzcykmJigoKChjbGFzcyktPmluZm8pICYgMHgxTCkgPT0gMHgxTCkpOwp9CgpzdGF0 aWMgaW5saW5lIEJPT0wKY2xhc3NfaXNfbWV0YV9jbGFzcyAoQ2xhc3MgY2xhc3MpCnsKICByZXR1 cm4gKChjbGFzcykmJigoKChjbGFzcyktPmluZm8pICYgMHgyTCkgPT0gMHgyTCkpOwp9CgoKc3Rh dGljIGlubGluZSB2b2lkCmNsYXNzX3NldF92ZXJzaW9uIChDbGFzcyBjbGFzcywgbG9uZyB2ZXJz aW9uKQp7CiAgaWYgKCgoY2xhc3MpJiYoKCgoY2xhc3MpLT5pbmZvKSAmIDB4MUwpID09IDB4MUwp KSkKICAgIGNsYXNzLT52ZXJzaW9uID0gdmVyc2lvbjsKfQoKCgoKCgoKMjAwMS0wOC0yNCAwMToy MSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDQ5 CgoKCnN0YXRpYyBpbmxpbmUgdm9pZCAqCmNsYXNzX2dldF9nY19vYmplY3RfdHlwZSAoQ2xhc3Mg Y2xhc3MpCnsKICByZXR1cm4gKChjbGFzcykmJigoKChjbGFzcyktPmluZm8pICYgMHgxTCkgPT0g MHgxTCkpID8gY2xhc3MtPmdjX29iamVjdF90eXBlIDogKCh2b2lkICopMCk7Cn0KCgpleHRlcm4g dm9pZCBjbGFzc19pdmFyX3NldF9nY2ludmlzaWJsZSAoQ2xhc3MgY2xhc3MsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpdmFybmFtZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgZ2NJbnZpc2libGUpOwoKc3Rh dGljIGlubGluZSBJTVAKbWV0aG9kX2dldF9pbXAgKE1ldGhvZF90IG1ldGhvZCkKewogIHJldHVy biAobWV0aG9kICE9IChNZXRob2RfdCkwKSA/IG1ldGhvZC0+bWV0aG9kX2ltcCA6IChJTVApIDA7 Cn0KCklNUCBnZXRfaW1wIChDbGFzcyBjbGFzcywgU0VMIHNlbCk7CgoKCgoKCgppZCBvYmplY3Rf Y29weSAoaWQgb2JqZWN0KTsKCmlkIG9iamVjdF9kaXNwb3NlIChpZCBvYmplY3QpOwoKc3RhdGlj IGlubGluZSBDbGFzcwpvYmplY3RfZ2V0X2NsYXNzIChpZCBvYmplY3QpCnsKICByZXR1cm4gKChv YmplY3QgIT0gKGlkKTApCiAgICAgICAgICA/ICgoKG9iamVjdC0+Y2xhc3NfcG9pbnRlcikmJigo KChvYmplY3QtPmNsYXNzX3BvaW50ZXIpLT5pbmZvKSAmIDB4MUwpID09IDB4MUwpKQogICAgICAg ICAgICAgPyBvYmplY3QtPmNsYXNzX3BvaW50ZXIKICAgICAgICAgICAgIDogKCgob2JqZWN0LT5j bGFzc19wb2ludGVyKSYmKCgoKG9iamVjdC0+Y2xhc3NfcG9pbnRlciktPmluZm8pICYgMHgyTCkg PT0gMHgyTCkpCiAgICAgICAgICAgICAgICA/IChDbGFzcykgb2JqZWN0CiAgICAgICAgICAgICAg ICA6IChDbGFzcykwKSkKICAgICAgICAgIDogKENsYXNzKTApOwp9CgpzdGF0aWMgaW5saW5lIGNv bnN0IGNoYXIgKgpvYmplY3RfZ2V0X2NsYXNzX25hbWUgKGlkIG9iamVjdCkKewogIHJldHVybiAo KG9iamVjdCE9KGlkKTApID8gKCgob2JqZWN0LT5jbGFzc19wb2ludGVyKSYmKCgoKG9iamVjdC0+ Y2xhc3NfcG9pbnRlciktPmluZm8pICYgMHgxTCkgPT0gMHgxTCkpCiAgICAgICAgICAgICAgICAg ICAgICAgICA/IG9iamVjdC0+Y2xhc3NfcG9pbnRlci0+bmFtZQogICAgICAgICAgICAgICAgICAg ICAgICAgOiAoKENsYXNzKSBvYmplY3QpLT5uYW1lKQogICAgICAgICAgICAgICAgICAgICAgIDoi TmlsIik7Cn0KCnN0YXRpYyBpbmxpbmUgTWV0YUNsYXNzCm9iamVjdF9nZXRfbWV0YV9jbGFzcyhp ZCBvYmplY3QpCnsKICByZXR1cm4gKChvYmplY3QhPShpZCkwKSA/ICgoKG9iamVjdC0+Y2xhc3Nf cG9pbnRlcikmJigoKChvYmplY3QtPmNsYXNzX3BvaW50ZXIpLT5pbmZvKSAmIDB4MUwpID09IDB4 MUwpKQogICAgICAgICAgICAgICAgICAgICAgICAgICA/IG9iamVjdC0+Y2xhc3NfcG9pbnRlci0+ Y2xhc3NfcG9pbnRlcgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQ ZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDUwCgoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgOiAoKChvYmplY3QtPmNsYXNzX3BvaW50ZXIpJiYoKCgob2JqZWN0LT5jbGFzc19w b2ludGVyKS0+aW5mbykgJiAweDJMKSA9PSAweDJMKSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgPyBvYmplY3QtPmNsYXNzX3BvaW50ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOihDbGFzcykwKSkKICAgICAgICAgIDogKENsYXNzKTApOwp9CgpzdGF0aWMgaW5saW5lIENs YXNzCm9iamVjdF9nZXRfc3VwZXJfY2xhc3MgKGlkIG9iamVjdCkKewogIHJldHVybiAoKG9iamVj dCE9KGlkKTApID8gKCgob2JqZWN0LT5jbGFzc19wb2ludGVyKSYmKCgoKG9iamVjdC0+Y2xhc3Nf cG9pbnRlciktPmluZm8pICYgMHgxTCkgPT0gMHgxTCkpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgID8gb2JqZWN0LT5jbGFzc19wb2ludGVyLT5zdXBlcl9jbGFzcwogICAgICAgICAgICAgICAg ICAgICAgICAgICA6ICgoKG9iamVjdC0+Y2xhc3NfcG9pbnRlcikmJigoKChvYmplY3QtPmNsYXNz X3BvaW50ZXIpLT5pbmZvKSAmIDB4MkwpID09IDB4MkwpKQogICAgICAgICAgICAgICAgICAgICAg ICAgICA/KChDbGFzcykgb2JqZWN0KS0+c3VwZXJfY2xhc3MKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOiAoQ2xhc3MpMCkpCiAgICAgICAgICA6IChDbGFzcykwKTsKfQoKc3RhdGljIGlu bGluZSBCT09MCm9iamVjdF9pc19jbGFzcyAoaWQgb2JqZWN0KQp7CiAgcmV0dXJuICgoKENsYXNz KSBvYmplY3QpJiYoKCgoKENsYXNzKSBvYmplY3QpLT5pbmZvKSAmIDB4MUwpID09IDB4MUwpKTsK fQoKc3RhdGljIGlubGluZSBCT09MCm9iamVjdF9pc19pbnN0YW5jZShpZCBvYmplY3QpCnsKICBy ZXR1cm4gKG9iamVjdCAhPSAoaWQpMCkgJiYgKChvYmplY3QtPmNsYXNzX3BvaW50ZXIpJiYoKCgo b2JqZWN0LT5jbGFzc19wb2ludGVyKS0+aW5mbykgJiAweDFMKSA9PSAweDFMKSk7Cn0KCnN0YXRp YyBpbmxpbmUgQk9PTApvYmplY3RfaXNfbWV0YV9jbGFzcyAoaWQgb2JqZWN0KQp7CiAgcmV0dXJu ICgoKENsYXNzKSBvYmplY3QpJiYoKCgoKENsYXNzKSBvYmplY3QpLT5pbmZvKSAmIDB4MkwpID09 IDB4MkwpKTsKfQoKc3RydWN0IHNhcnJheSogb2JqY19nZXRfdW5pbnN0YWxsZWRfZHRhYmxlICh2 b2lkKTsKIyAxNCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9EZWZDbGFzcy5oIiAy CgoKCgp0eXBlZGVmIHN0cnVjdCBjbGFzc0RhdGEgKmNsYXNzRGF0YV90Owp0eXBlZGVmIHN0cnVj dCBtZXRob2REZWZzICptZXRob2REZWZzX3Q7CgoKCgpAaW50ZXJmYWNlIENsYXNzX3M6IE9iamVj dAp7CkBwdWJsaWMKICBDbGFzc19zICpzdXBlcmNsYXNzOwogIGNvbnN0IGNoYXIgKm5hbWU7CiAg bG9uZyB2ZXJzaW9uOwogIHVuc2lnbmVkIGxvbmcgaW5mbzsKICBsb25nIGluc3RhbmNlU2l6ZTsK ICB2b2lkICppdmFyTGlzdDsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAg ICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA1MQoKCiAgdm9pZCAqbWV0aG9k TGlzdDsKICBzdHJ1Y3Qgc2FycmF5ICpkdGFibGU7Cn0KCgpAZW5kCgoKCgpleHRlcm4gY2xhc3NE YXRhX3QgX29ial9nZXRDbGFzc0RhdGEgKENsYXNzX3MgKmNsYXNzKTsKCgoKCnZvaWQgX29ial9p bml0TWV0aG9kSW50ZXJmYWNlcyAoQ2xhc3NfcyAqY2xhc3MpOwoKCgoKCgoKQGludGVyZmFjZSBD cmVhdGVkQ2xhc3NfczogQ2xhc3Nfcwp7CkBwdWJsaWMKICBDbGFzc19zICpkZWZpbmluZ0NsYXNz OwogIGlkIG1ldGFvYmplY3RzOwp9CgorIGNyZWF0ZUJlZ2luOiBhWm9uZTsKLSBzZXROYW1lOiAo Y29uc3QgY2hhciAqKWNsYXNzTmFtZTsKLSBzZXRDbGFzczogYUNsYXNzOwotIHNldFN1cGVyY2xh c3M6IGFDbGFzczsKLSBzZXREZWZpbmluZ0NsYXNzOiBhQ2xhc3M7Ci0gYXQ6IChTRUwpYVNlbCBh ZGRNZXRob2Q6IChJTVApYU1ldGhvZDsKLSBsaXNwSW5DcmVhdGU6IGV4cHI7Ci0gaGRmNUluQ3Jl YXRlOiBleHByOwotIGNyZWF0ZUVuZDsKLSAodm9pZCloZGY1T3V0U2hhbGxvdzogc3RyZWFtOwot ICh2b2lkKWxpc3BPdXRTaGFsbG93OiBzdHJlYW07CkBlbmQKCkBpbnRlcmZhY2UgQmVoYXZpb3JQ aGFzZV9zOiBDcmVhdGVkQ2xhc3Nfcwp7CkBwdWJsaWMKICBDbGFzc19zICpuZXh0UGhhc2U7CiAg aWQgZmlsbGVyOwogIGlkIG1vcmVmaWxsZXI7Cn0KCi0gKHZvaWQpc2V0TmV4dFBoYXNlOiBhQmVo YXZpb3JQaGFzZTsKQGVuZAoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAg ICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDUyCgoKCgoKCnN0cnVjdCBj bGFzc0RhdGEgewogIGlkICpjbGFzc0lEOwogIGlkIG93bmVyOwogIGlkIHR5cGVJbXBsZW1lbnRl ZDsKICBCZWhhdmlvclBoYXNlX3MgKmluaXRpYWxQaGFzZTsKICBpZCBtZXRhb2JqZWN0czsKfTsK CgoKCnN0cnVjdCBtZXRob2REZWZzIHsKICBtZXRob2REZWZzX3QgbmV4dDsKICBpZCBpbnRlcmZh Y2VJRDsKICBNZXRob2RfdCBmaXJzdEVudHJ5OwogIGludCBjb3VudDsKfTsKIyAxMyAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9DdXN0b21pemUuaCIgMgojIDEgIi91c3IvbG9jYWwv c3dhcm0vaW5jbHVkZS9kZWZvYmovRGVmT2JqZWN0LmgiIDEKIyAxMyAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL2RlZm9iai9EZWZPYmplY3QuaCIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1 ZGUvZGVmb2JqLmgiIDEKIyAxOCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgp0 eXBlZGVmIGVudW0ge2ZjYWxsX3R5cGVfdm9pZCA9IDAsCiAgICAgICAgICAgICAgZmNhbGxfdHlw ZV9ib29sZWFuLAogICAgICAgICAgICAgIGZjYWxsX3R5cGVfdWNoYXIsIGZjYWxsX3R5cGVfc2No YXIsCiAgICAgICAgICAgICAgZmNhbGxfdHlwZV91c2hvcnQsIGZjYWxsX3R5cGVfc3Nob3J0LAog ICAgICAgICAgICAgIGZjYWxsX3R5cGVfdWludCwgZmNhbGxfdHlwZV9zaW50LAogICAgICAgICAg ICAgIGZjYWxsX3R5cGVfdWxvbmcsIGZjYWxsX3R5cGVfc2xvbmcsCiAgICAgICAgICAgICAgZmNh bGxfdHlwZV91bG9uZ2xvbmcsIGZjYWxsX3R5cGVfc2xvbmdsb25nLAogICAgICAgICAgICAgIGZj YWxsX3R5cGVfZmxvYXQsIGZjYWxsX3R5cGVfZG91YmxlLCBmY2FsbF90eXBlX2xvbmdfZG91Ymxl LAogICAgICAgICAgICAgIGZjYWxsX3R5cGVfb2JqZWN0LCBmY2FsbF90eXBlX2NsYXNzLAogICAg ICAgICAgICAgIGZjYWxsX3R5cGVfc3RyaW5nLCBmY2FsbF90eXBlX3NlbGVjdG9yLAogICAgICAg ICAgICAgIGZjYWxsX3R5cGVfam9iamVjdCwgZmNhbGxfdHlwZV9qc3RyaW5nLCBmY2FsbF90eXBl X2pzZWxlY3RvciwKICAgICAgICAgICAgICBmY2FsbF90eXBlX2lpZAogICAgICAgICAgICAgIH0g ZmNhbGxfdHlwZV90OwoKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLmgi IDEKIyAzMyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIiAyCgp0eXBlZGVmIHVu aW9uIHsKICBpZCBvYmplY3Q7CiAgU0VMIHNlbGVjdG9yOwogIENsYXNzIF9jbGFzczsKICBjb25z dCBjaGFyICpzdHJpbmc7CiAgQk9PTCBib29sZWFuOwogIGNoYXIgc2NoYXI7CiAgdW5zaWduZWQg Y2hhciB1Y2hhcjsKICBzaG9ydCBzc2hvcnQ7CiAgdW5zaWduZWQgc2hvcnQgdXNob3J0OwogIGlu dCBzaW50OwogIHVuc2lnbmVkIGludCB1aW50OwogIGxvbmcgc2xvbmc7CgoKCgoKCgoyMDAxLTA4 LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQ YWdlICAgNTMKCgogIHVuc2lnbmVkIGxvbmcgdWxvbmc7CiAgbG9uZyBsb25nIHNsb25nbG9uZzsK ICB1bnNpZ25lZCBsb25nIGxvbmcgdWxvbmdsb25nOwogIGZsb2F0IF9mbG9hdDsKICBkb3VibGUg X2RvdWJsZTsKICBsb25nIGRvdWJsZSBfbG9uZ19kb3VibGU7CiAgdm9pZCAqaWlkOwp9IHR5cGVz X3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgZmNhbGxfdHlwZV90IHR5cGU7CiAgdHlwZXNfdCB2YWw7 Cn0gdmFsX3Q7CgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9kZWZ0 eXBlLmgiIDEKIyAyMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9kZWZ0eXBlLmgi CiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvT2JqZWN0LmgiIDEKIyAyMiAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9kZWZ0eXBlLmgiIDIKCgoKCgoKQHByb3RvY29s IENSRUFUQUJMRQpAZW5kCgoKQHByb3RvY29sIFJFVFVSTkFCTEUKQGVuZAojIDQ2ICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL2RlZnR5cGUuaCIKdHlwZWRlZiB2b2lkICgqbm90aWZ5 X3QpKCBpZCBvYmplY3QsIGlkIHJlYWxsb2NBZGRyZXNzLCB2b2lkICphcmcgKTsKCgoKCgoKdHlw ZWRlZiB2b2lkICpyZWZfdDsKCgoKCnR5cGVkZWYgdm9pZCAoKmZ1bmNfdCkoIHZvaWQgKTsKCgoK CnR5cGVkZWYgaWQgKCpmaXh1cFJvdXRpbmVfdCkoIHZvaWQgKmZpeHVwQ29udGV4dCwgaWQgZml4 dXBPYmplY3QgKTsKdHlwZWRlZiB2b2lkICgqZml4dXBfdCkoIGZpeHVwUm91dGluZV90IGZpeHVw Um91dGluZSwgdm9pZCAqZml4dXBDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGlk IGZpeHVwQXJndW1lbnQgKTsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAg ICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA1NAoKCiMgNjcgIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9leHRlcm52YXIuaCIgMQojIDY4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgi IDIKIyA3NyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgpAcHJvdG9jb2wgR2V0 TmFtZQojIDg5ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCi0gX0lfVXNpbmc7 Ci0gKGNvbnN0IGNoYXIgKilnZXROYW1lOwpAZW5kCgpAcHJvdG9jb2wgRGVmaW5lZE9iamVjdCA8 R2V0TmFtZT4KIyAxMDggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIKLSBfSV9V c2luZzsKIyAxMTcgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIKLSAoQk9PTCly ZXNwb25kc1RvOiAoU0VMKWFTZWw7CgorIChCT09MKWNvbmZvcm1zVG86IChQcm90b2NvbCAqKXBy b3RvY29sOwotIChCT09MKWNvbmZvcm1zVG86IChQcm90b2NvbCAqKXByb3RvY29sOwoKCgotIGdl dENsYXNzOwoKCi0gKGNvbnN0IGNoYXIgKilnZXRUeXBlTmFtZTsKCgoKLSAocmVmX3QpYWRkUmVm OiAobm90aWZ5X3Qpbm90aWZ5RnVuY3Rpb24gd2l0aEFyZ3VtZW50OiAodm9pZCAqKWFyZzsKCgot ICh2b2lkKXJlbW92ZVJlZjogKHJlZl90KXJlZlZhbDsKCgotIChpbnQpY29tcGFyZTogYW5PYmpl Y3Q7CgoKLSBwZXJmb3JtOiAoU0VMKWFTZWw7CgoKLSBwZXJmb3JtOiAoU0VMKWFTZWwgd2l0aDog YW5PYmplY3QxOwoKCi0gcGVyZm9ybTogKFNFTClhU2VsIHdpdGg6IGFuT2JqZWN0MSB3aXRoOiBh bk9iajI7CgoKLSBwZXJmb3JtOiAoU0VMKWFTZWwgd2l0aDogYW5PYmplY3QxIHdpdGg6IGFuT2Jq MiB3aXRoOiBhbk9iajM7CgoKCi0gKHZvaWQpc2V0RGlzcGxheU5hbWU6IChjb25zdCBjaGFyICop ZGlzcGxheU5hbWU7CgoKCgotIChjb25zdCBjaGFyICopZ2V0RGlzcGxheU5hbWU7CgoKCgoKCgoy MDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAg ICAgICBQYWdlICAgNTUKCgojIDE2OCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5o IgotICh2b2lkKWRlc2NyaWJlOiBvdXRwdXRDaGFyU3RyZWFtOwoKCgotICh2b2lkKWRlc2NyaWJl SUQ6IG91dHB1dENoYXJTdHJlYW07CgoKLSAodm9pZCl4cHJpbnQ7CgoKLSAodm9pZCl4cHJpbnRp ZDsKCgotICh2b2lkKXhmcHJpbnQ7CgoKLSAodm9pZCl4ZnByaW50aWQ7CgoKLSBnZXRab25lOwpA ZW5kCgpAcHJvdG9jb2wgQ3VzdG9taXplCiMgMjIzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv ZGVmb2JqLmgiCi0gX0lfQ3JlYXRpbmc7CiMgMjM5ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv ZGVmb2JqLmgiCisgY3VzdG9taXplQmVnaW46IGFab25lOwoKCi0gY3VzdG9taXplRW5kOwojIDI2 NSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgotIGN1c3RvbWl6ZUNvcHk6IGFa b25lOwpAZW5kCgpAcHJvdG9jb2wgQ3JlYXRlIDxEZWZpbmVkT2JqZWN0LCBDdXN0b21pemU+CiMg MzE5ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCi0gX0lfQ3JlYXRpbmc7CiMg MzM1ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCisgY3JlYXRlOiBhWm9uZTsK CgoKCgoKCisgY3JlYXRlQmVnaW46IGFab25lOwojIDM3MSAiL3Vzci9sb2NhbC9zd2FybS9pbmNs dWRlL2RlZm9iai5oIgotIGNyZWF0ZUVuZDsKQGVuZAoKQHByb3RvY29sIERyb3AKIyA0MDEgIi91 c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIKLSBfSV9Vc2luZzsKLSAodm9pZClkcm9w OwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAg ICAgICAgICAgICAgICAgUGFnZSAgIDU2CgoKQGVuZAoKQHByb3RvY29sIFpvbmUgPENyZWF0ZSwg RHJvcCwgQ1JFQVRBQkxFPgojIDQ1NiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5o IgotIF9JX0NyZWF0aW5nOwoKCgoKCgoKLSAodm9pZClzZXRQYWdlU2l6ZTogKHNpemVfdClwYWdl U2l6ZTsKCi0gX0lfVXNpbmc7Ci0gKHNpemVfdClnZXRQYWdlU2l6ZTsKCgoKCgoKLSBhbGxvY0lW YXJzOiAoQ2xhc3MpYUNsYXNzOwoKCgoKCgotIGNvcHlJVmFyczogYW5PYmplY3Q7CgoKCgoKCgot ICh2b2lkKWZyZWVJVmFyczogYW5PYmplY3Q7CiMgNDk5ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1 ZGUvZGVmb2JqLmgiCi0gYWxsb2NJVmFyc0NvbXBvbmVudDogKENsYXNzKWFDbGFzczsKCgoKLSBj b3B5SVZhcnNDb21wb25lbnQ6IGFuT2JqZWN0OwoKCi0gKHZvaWQpZnJlZUlWYXJzQ29tcG9uZW50 OiBhbk9iamVjdDsKCgoKCgoKLSBnZXRDb21wb25lbnRab25lOwoKCgoKCgoKCgoyMDAxLTA4LTI0 IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdl ICAgNTcKCgoKCgotICh2b2lkICopYWxsb2M6IChzaXplX3Qpc2l6ZTsKCgoKCgoKLSAodm9pZClm cmVlOiAodm9pZCAqKWFCbG9jazsKCgoKCi0gKHZvaWQgKilhbGxvY0Jsb2NrOiAoc2l6ZV90KXNp emU7CgoKCi0gKHZvaWQpZnJlZUJsb2NrOiAodm9pZCAqKWFCbG9jayBibG9ja1NpemU6IChzaXpl X3Qpc2l6ZTsKIyA1NDUgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIKLSBnZXRQ b3B1bGF0aW9uOwoKCi0gKHZvaWQpZGVzY3JpYmVGb3JFYWNoOiBvdXRwdXRDaGFyU3RyZWFtOwoK Ci0gKHZvaWQpZGVzY3JpYmVGb3JFYWNoSUQ6IG91dHB1dENoYXJTdHJlYW07CkBlbmQKCkBwcm90 b2NvbCBEZWZpbmVkQ2xhc3MgPERlZmluZWRPYmplY3Q+CgoKCi0gX0lfVXNpbmc7CisgZ2V0U3Vw ZXJjbGFzczsKKyAoQk9PTClpc1N1YmNsYXNzOiBhQ2xhc3M7CgorICh2b2lkKXNldFR5cGVJbXBs ZW1lbnRlZDogYVR5cGU7CisgZ2V0VHlwZUltcGxlbWVudGVkOwoKKyAoSU1QKWdldE1ldGhvZEZv cjogKFNFTClhU2VsOwpAZW5kCgpAcHJvdG9jb2wgQ3JlYXRlZENsYXNzIDxDcmVhdGUsIERlZmlu ZWRDbGFzcz4KCgoKCi0gX0lfQ3JlYXRpbmc7Ci0gc2V0TmFtZTogKGNvbnN0IGNoYXIgKiluYW1l OwotIHNldENsYXNzOiBhQ2xhc3M7Ci0gc2V0U3VwZXJjbGFzczogYUNsYXNzOwotIHNldERlZmlu aW5nQ2xhc3M6IGFDbGFzczsKLSBhdDogKFNFTClhU2VsIGFkZE1ldGhvZDogKElNUClhTWV0aG9k OwotIGxpc3BJbkNyZWF0ZTogZXhwcjsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAg ICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA1OAoKCi0gaGRmNUlu Q3JlYXRlOiBoZGY1T2JqOwotICh2b2lkKWxpc3BPdXRTaGFsbG93OiBzdHJlYW07Ci0gKHZvaWQp aGRmNU91dFNoYWxsb3c6IGhkZjVPYmo7Ci0gKHZvaWQpdXBkYXRlQXJjaGl2ZXI6IGFyY2hpdmVy OwotIF9JX1VzaW5nOwotIGdldERlZmluaW5nQ2xhc3M7CkBlbmQKCkBwcm90b2NvbCBCZWhhdmlv clBoYXNlIDxDcmVhdGVkQ2xhc3M+CgoKCgotIF9JX0NyZWF0aW5nOwotICh2b2lkKXNldE5leHRQ aGFzZTogYUNsYXNzOwoKLSBfSV9Vc2luZzsKLSBnZXROZXh0UGhhc2U7CkBlbmQKCkBwcm90b2Nv bCBDb3B5CiMgNjIwICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCi0gX0lfVXNp bmc7Ci0gY29weTogKGlkIDxab25lPilhWm9uZTsKQGVuZAoKCgoKCkBwcm90b2NvbCBHZXRPd25l cgojIDY0NyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgotIF9JX1VzaW5nOwot IGdldE93bmVyOwpAZW5kCgpAcHJvdG9jb2wgU2V0SW5pdGlhbFZhbHVlCiMgNjcyICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCi0gX0lfQ3JlYXRpbmc7CgoKCgoKCgotICh2b2lk KXNldEluaXRpYWxWYWx1ZTogaW5pdGlhbFZhbHVlOwpAZW5kCgpAcHJvdG9jb2wgU3ltYm9sIDxD cmVhdGUsIEdldE5hbWUsIENSRUFUQUJMRT4KIyA3MDYgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9kZWZvYmouaCIKLSBfSV9DcmVhdGluZzsKCgoKKyBjcmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUg c2V0TmFtZTogKGNvbnN0IGNoYXIgKiluYW1lOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAg ICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDU5CgoKCgoK QGVuZAoKQHByb3RvY29sIEV2ZW50VHlwZSA8U3ltYm9sPgoKCgoKLSBfSV9Vc2luZzsKCi0gKHZv aWQpcmFpc2VFdmVudDsKCgoKLSAodm9pZClyYWlzZUV2ZW50OiAoY29uc3Qgdm9pZCAqKWV2ZW50 RGF0YSwgLi4uOwoKCgoKCkBlbmQKCgpAcHJvdG9jb2wgV2FybmluZyA8RXZlbnRUeXBlLCBDUkVB VEFCTEU+CgoKCgotIF9JX1VzaW5nOwoKLSAodm9pZClzZXRNZXNzYWdlU3RyaW5nOiAoY29uc3Qg Y2hhciAqKW1lc3NhZ2VTdHJpbmc7CgoKLSAoY29uc3QgY2hhciAqKWdldE1lc3NhZ2VTdHJpbmc7 CgpleHRlcm4gaWQgPFdhcm5pbmc+CiAgV2FybmluZ01lc3NhZ2UsCiAgUmVzb3VyY2VBdmFpbGFi aWxpdHksCiAgTGlicmFyeVVzYWdlLAogIERlZmF1bHRBc3N1bWVkLAogIE9ic29sZXRlRmVhdHVy ZSwKICBPYnNvbGV0ZU1lc3NhZ2UsCiAgU2F2ZVdhcm5pbmc7CgoKCgoKQGVuZAoKQHByb3RvY29s IEVycm9yIDxXYXJuaW5nLCBDUkVBVEFCTEU+CgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAg ICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgNjAKCgoK ZXh0ZXJuIGlkIDxFcnJvcj4KICBTb3VyY2VNZXNzYWdlLAogIE5vdEltcGxlbWVudGVkLAogIFN1 YmNsYXNzTXVzdEltcGxlbWVudCwKICBJbnZhbGlkQ29tYmluYXRpb24sCiAgSW52YWxpZE9wZXJh dGlvbiwKICBJbnZhbGlkQXJndW1lbnQsCiAgQ3JlYXRlU3ViY2xhc3NpbmcsCiAgQ3JlYXRlVXNh Z2UsCiAgT3V0T2ZNZW1vcnksCiAgSW52YWxpZEFsbG9jU2l6ZSwKICBJbnRlcm5hbEVycm9yLAog IEJsb2NrZWRPYmplY3RBbGxvYywKICBCbG9ja2VkT2JqZWN0VXNhZ2UsCiAgUHJvdG9jb2xWaW9s YXRpb24sCiAgTG9hZEVycm9yLAogIFNhdmVFcnJvcjsKCgoKCgpAZW5kCgpAcHJvdG9jb2wgQXJn dW1lbnRzIDxDcmVhdGUsIERyb3AsIENSRUFUQUJMRT4KIyA4NzYgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9kZWZvYmouaCIKLSBfSV9DcmVhdGluZzsKLSBzZXRBcmdjOiAodW5zaWduZWQpY291 bnQgQXJndjogKGNvbnN0IGNoYXIgKiopdGhlQXJndjsKLSBzZXRBcHBOYW1lOiAoY29uc3QgY2hh ciAqKWFwcE5hbWU7Ci0gc2V0QXBwTW9kZVN0cmluZzogKGNvbnN0IGNoYXIgKilhcHBNb2RlU3Ry aW5nOwotIHNldE9wdGlvbkZ1bmM6IChpbnQgKCopIChpbnQsIGNvbnN0IGNoYXIgKikpb3B0aW9u RnVuYzsKLSBzZXRCdWdBZGRyZXNzOiAoY29uc3QgY2hhciAqKWJ1Z0FkZHJlc3M7Ci0gc2V0VmVy c2lvbjogKGNvbnN0IGNoYXIgKil2ZXJzaW9uOwotIGFkZE9wdGlvbnM6IChzdHJ1Y3QgYXJncF9v cHRpb24gKilvcHRpb25zOwojIDkwMyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5o IgotICh2b2lkKWFkZE9wdGlvbjogKGNvbnN0IGNoYXIgKiluYW1lIGtleTogKGludClrZXkgYXJn OiAoY29uc3QgY2hhciAqKWFyZyBmbGFnczogKGludClmbGFncyBkb2M6IChjb25zdCBjaGFyICop ZG9jIGdyb3VwOiAoaW50KWdyb3VwOwoKKyBjcmVhdGVBcmdjOiAoaW50KWFyZ2MgQXJndjogKGNv bnN0IGNoYXIgKiopYXJndiBhcHBOYW1lOiAoY29uc3QgY2hhciAqKWFwcE5hbWUgdmVyc2lvbjog KGNvbnN0IGNoYXIgKil2ZXJzaW9uIGJ1Z0FkZHJlc3M6IChjb25zdCBjaGFyICopYnVnQWRkcmVz cyBvcHRpb25zOiAoc3RydWN0IGFyZ3Bfb3B0aW9uICopb3B0aW9ucyBvcHRpb25GdW5jOiAoaW50 ICgqKSAoaW50LCBjb25zdCBjaGFyICopKW9wdGlvbkZ1bmMgaW5oaWJpdEV4ZWN1dGFibGVTZWFy Y2hGbGFnOiAoQk9PTClpbmhpYml0RXhlY3V0YWJsZVNlYXJjaEZsYWc7CgoKLSAoaW50KXBhcnNl S2V5OiAoaW50KWtleSBhcmc6IChjb25zdCBjaGFyICopYXJnOwotIF9JX1NldHRpbmc7Ci0gc2V0 SW5oaWJpdEFyY2hpdmVyTG9hZEZsYWc6IChCT09MKWluaGliaXRBcmNoaXZlckxvYWRGbGFnOwot IHNldEluaGliaXRFeGVjdXRhYmxlU2VhcmNoRmxhZzogKEJPT0wpdGhlSW5oaWJpdEV4ZWN1dGFi bGVTZWFyY2hGbGFnOwotIHNldEJhdGNoTW9kZUZsYWc6IChCT09MKWJhdGNoTW9kZUZsYWc7Ci0g c2V0VmFyeVNlZWRGbGFnOiAoQk9PTCl2YXJ5U2VlZEZsYWc7Ci0gc2V0VmVyYm9zZUZsYWc6IChC T09MKXZlcmJvc2VGbGFnOwoKCgotIHNldERlZmF1bHRBcHBDb25maWdQYXRoOiAoY29uc3QgY2hh ciAqKXBhdGg7CgoKLSBzZXREZWZhdWx0QXBwRGF0YVBhdGg6IChjb25zdCBjaGFyICopcGF0aDsK LSBzZXRGaXhlZFNlZWQ6ICh1bnNpZ25lZClzZWVkOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAg ICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDYxCgoK CgotIF9JX1VzaW5nOwotIChCT09MKWdldEJhdGNoTW9kZUZsYWc7Ci0gKEJPT0wpZ2V0VmFyeVNl ZWRGbGFnOwotIChCT09MKWdldEZpeGVkU2VlZEZsYWc7Ci0gKHVuc2lnbmVkKWdldEZpeGVkU2Vl ZDsKLSAoQk9PTClnZXRWZXJib3NlRmxhZzsKLSAoY29uc3QgY2hhciAqKWdldEFwcE5hbWU7Ci0g KGNvbnN0IGNoYXIgKilnZXRBcHBNb2RlU3RyaW5nOwotIChpbnQpZ2V0QXJnYzsKLSAoaW50KWdl dExhc3RBcmdJbmRleDsKLSAoY29uc3QgY2hhciAqKilnZXRBcmd2OwotIChjb25zdCBjaGFyICop Z2V0RXhlY3V0YWJsZVBhdGg7Ci0gKGNvbnN0IGNoYXIgKilnZXRTd2FybUhvbWU7Ci0gKGNvbnN0 IGNoYXIgKilnZXRDb25maWdQYXRoOwotIChjb25zdCBjaGFyICopZ2V0RGF0YVBhdGg7CgotIChj b25zdCBjaGFyICopZ2V0QXBwRGF0YVBhdGg7CgoKLSAoY29uc3QgY2hhciAqKWdldEFwcENvbmZp Z1BhdGg7Ci0gKEJPT0wpZ2V0U2hvd0N1cnJlbnRUaW1lRmxhZzsKLSAoQk9PTClnZXRJbmhpYml0 QXJjaGl2ZXJMb2FkRmxhZzsKCkBlbmQKCkBwcm90b2NvbCBBcmNoaXZlciA8Q3JlYXRlLCBEcm9w LCBSRVRVUk5BQkxFPgoKCi0gX0lfQ3JlYXRpbmc7CgoKLSBzZXRJbmhpYml0TG9hZEZsYWc6IChC T09MKWluaGliaXRMb2FkRmxhZzsKCgotIHNldFBhdGg6IChjb25zdCBjaGFyICopcGF0aDsKCgoK LSBzZXRTeXN0ZW1BcmNoaXZlckZsYWc6IChCT09MKXN5c3RlbUFyY2hpdmVyRmxhZzsKCgotIHNl dERlZmF1bHRQYXRoOwoKCi0gc2V0RGVmYXVsdEFwcFBhdGg7Ci0gX0lfVXNpbmc7Ci0gKHZvaWQp cmVnaXN0ZXJDbGllbnQ6IGNsaWVudDsKLSAodm9pZCl1bnJlZ2lzdGVyQ2xpZW50OiBjbGllbnQ7 CgoKCi0gKHZvaWQpcHV0RGVlcDogKGNvbnN0IGNoYXIgKilrZXkgb2JqZWN0OiBvYmplY3Q7CgoK CgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAg ICAgICAgICAgICAgIFBhZ2UgICA2MgoKCi0gKHZvaWQpcHV0U2hhbGxvdzogKGNvbnN0IGNoYXIg KilrZXkgb2JqZWN0OiBvYmplY3Q7CgoKLSBnZXRPYmplY3Q6IChjb25zdCBjaGFyICopa2V5OwoK Ci0gZ2V0V2l0aFpvbmU6IChpZCA8Wm9uZT4pYVpvbmUga2V5OiAoY29uc3QgY2hhciAqKWtleTsK CgoKLSAodm9pZClzeW5jOwpAZW5kCgpAcHJvdG9jb2wgTGlzcEFyY2hpdmVyIDxBcmNoaXZlciwg Q1JFQVRBQkxFPgoKCgoKCi0gX0lfQ3JlYXRpbmc7CgoKKyBjcmVhdGU6IChpZCA8Wm9uZT4pYVpv bmUgc2V0UGF0aDogKGNvbnN0IGNoYXIgKilwYXRoOwoKLSBfSV9TZXR0aW5nOwotIF9JX1VzaW5n OwpAZW5kCgpAcHJvdG9jb2wgSERGNUFyY2hpdmVyIDxBcmNoaXZlciwgQ1JFQVRBQkxFPgoKCgoK Ci0gX0lfQ3JlYXRpbmc7CgoKKyBjcmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUgc2V0UGF0aDogKGNv bnN0IGNoYXIgKilwYXRoOwoKLSBfSV9TZXR0aW5nOwotIF9JX1VzaW5nOwpAZW5kCgpAcHJvdG9j b2wgSERGNSA8Q3JlYXRlLCBEcm9wLCBDUkVBVEFCTEU+CgoKLSBfSV9DcmVhdGluZzsKLSBzZXRX cml0ZUZsYWc6IChCT09MKXdyaXRlRmxhZzsKLSBzZXREYXRhc2V0RmxhZzogKEJPT0wpZGF0YXNl dEZsYWc7Ci0gc2V0RXh0ZW5zaWJsZVZlY3RvclR5cGU6IChmY2FsbF90eXBlX3QpdHlwZTsKLSBz ZXRFeHRlbnNpYmxlRG91YmxlVmVjdG9yOwotIHNldFBhcmVudDogcGFyZW50OwotIHNldENvbXBv dW5kVHlwZTogY29tcG91bmRUeXBlOwotIHNldENvdW50OiAodW5zaWduZWQpY291bnQ7Ci0gX0lf U2V0dGluZzsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNv bi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgNjMKCgoKCi0gc2V0TmFtZTogKGNvbnN0IGNo YXIgKiluYW1lOwotIHNldEJhc2VUeXBlT2JqZWN0OiBiYXNlVHlwZU9iamVjdDsKLSBfSV9Vc2lu ZzsKLSAodm9pZClpdGVyYXRlOiAoaW50ICgqKSAoaWQgPEhERjU+aGRmNU9iaikpaXRlcmF0ZUZ1 bmM7Ci0gKHZvaWQpaXRlcmF0ZTogKGludCAoKikgKGlkIDxIREY1PmhkZjVPYmopKWl0ZXJhdGVG dW5jIGRyb3A6IChCT09MKWRyb3BGbGFnOwotIChCT09MKWdldERhdGFzZXRGbGFnOwotIChCT09M KWdldFdyaXRlRmxhZzsKLSAoc2l6ZV90KWdldERhdGFzZXRSYW5rOwotIChzaXplX3QpZ2V0RGF0 YXNldERpbWVuc2lvbjogKHVuc2lnbmVkKWRpbU51bWJlcjsKLSAodW5zaWduZWQpZ2V0Q291bnQ7 Ci0gZ2V0Q29tcG91bmRUeXBlOwotIGdldENsYXNzOwotICh2b2lkKWFzc2lnbkl2YXI6IG9iajsK Ci0gKEJPT0wpY2hlY2tOYW1lOiAoY29uc3QgY2hhciAqKW5hbWU7Ci0gKEJPT0wpY2hlY2tEYXRh c2V0TmFtZTogKGNvbnN0IGNoYXIgKilkYXRhc2V0TmFtZTsKCi0gKHZvaWQpbG9hZERhdGFzZXQ6 ICh2b2lkICopcHRyOwotICh2b2lkKXN0b3JlQXNEYXRhc2V0OiAoY29uc3QgY2hhciAqKW5hbWUg dHlwZU5hbWU6IChjb25zdCBjaGFyICopdHlwZU5hbWUgdHlwZTogKGZjYWxsX3R5cGVfdCl0eXBl IHJhbms6ICh1bnNpZ25lZClyYW5rIGRpbXM6ICh1bnNpZ25lZCAqKWRpbXMgcHRyOiAodm9pZCAq KXB0cjsKCi0gKHZvaWQpYWRkRG91YmxlVG9WZWN0b3I6IChkb3VibGUpdmFsOwoKLSAodm9pZClz dG9yZVR5cGVOYW1lOiAoY29uc3QgY2hhciAqKXR5cGVOYW1lOwotICh2b2lkKXN0b3JlQ29tcG9u ZW50VHlwZU5hbWU6IChjb25zdCBjaGFyICopdHlwZU5hbWU7Ci0gKHZvaWQpc2hhbGxvd0xvYWRP YmplY3Q6IG9iajsKLSAodm9pZClzaGFsbG93U3RvcmVPYmplY3Q6IG9iajsKLSAodm9pZCluYW1l UmVjb3JkOiAodW5zaWduZWQpcmVjb3JkTnVtYmVyIG5hbWU6IChjb25zdCBjaGFyICopcmVjb3Jk TmFtZTsKLSAodm9pZCludW1iZXJSZWNvcmQ6ICh1bnNpZ25lZClyZWNvcmROdW1iZXI7Ci0gKHZv aWQpc2VsZWN0UmVjb3JkOiAodW5zaWduZWQpcmVjb3JkTnVtYmVyOwoKLSAoY29uc3QgY2hhciAq KilyZWFkUm93TmFtZXM7Ci0gKHZvaWQpd3JpdGVSb3dOYW1lczsKLSAodm9pZCl3cml0ZUxldmVs czsKCi0gKHZvaWQpc3RvcmVBdHRyaWJ1dGU6IChjb25zdCBjaGFyICopYXR0cmlidXRlTmFtZSB2 YWx1ZTogKGNvbnN0IGNoYXIgKil2YWx1ZVN0cmluZzsKLSAodm9pZClpdGVyYXRlQXR0cmlidXRl czogKGludCAoKikgKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpKWl0ZXJhdGVG dW5jOwotIChjb25zdCBjaGFyICopZ2V0QXR0cmlidXRlOiAoY29uc3QgY2hhciAqKWF0dHJpYnV0 ZU5hbWU7Ci0gKHZvaWQpZmx1c2g7CkBlbmQKCkBwcm90b2NvbCBIREY1Q29tcG91bmRUeXBlIDxD cmVhdGUsIERyb3AsIENSRUFUQUJMRT4KCgotIF9JX0NyZWF0aW5nOwotIHNldFByb3RvdHlwZTog cHJvdG90eXBlOwotIF9JX1VzaW5nOwotIGdldFByb3RvdHlwZTsKQGVuZAoKdHlwZWRlZiB2b2lk ICpKT0JKRUNUOwp0eXBlZGVmIGNvbnN0IHZvaWQgKkNPTU9CSkVDVDsKCkBwcm90b2NvbCBGQXJn dW1lbnRzIDxDcmVhdGUsIERyb3AsIENSRUFUQUJMRT4KCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgNjQK CgoKLSBfSV9DcmVhdGluZzsKLSBzZXRMYW5ndWFnZTogKGlkIDxTeW1ib2w+KWxhbmd1YWdlVHlw ZTsKCgotIHNldFNlbGVjdG9yOiAoU0VMKWFTZWw7Ci0gc2V0SmF2YVNpZ25hdHVyZTogKGNvbnN0 IGNoYXIgKilqYXZhU2lnbmF0dXJlOworIGNyZWF0ZTogKGlkIDxab25lPilhWm9uZSBzZXRTZWxl Y3RvcjogKFNFTClhU2VsOwotIGFkZEFyZ3VtZW50OiAodHlwZXNfdCAqKXZhbHVlIG9mVHlwZTog KGZjYWxsX3R5cGVfdCl0eXBlOwotIGFkZEFyZ3VtZW50OiAodm9pZCAqKXZhbHVlIG9mT2JqQ1R5 cGU6IChjaGFyKXR5cGU7Ci0gYWRkQ2hhcjogKGNoYXIpdmFsdWU7Ci0gYWRkQm9vbGVhbjogKEJP T0wpdmFsdWU7Ci0gYWRkVW5zaWduZWRDaGFyOiAodW5zaWduZWQgY2hhcil2YWx1ZTsKLSBhZGRT aG9ydDogKHNob3J0KXZhbHVlOwotIGFkZFVuc2lnbmVkU2hvcnQ6ICh1bnNpZ25lZCBzaG9ydCl2 YWx1ZTsKLSBhZGRJbnQ6IChpbnQpdmFsdWU7Ci0gYWRkVW5zaWduZWQ6ICh1bnNpZ25lZCl2YWx1 ZTsKLSBhZGRMb25nOiAobG9uZyl2YWx1ZTsKLSBhZGRVbnNpZ25lZExvbmc6ICh1bnNpZ25lZCBs b25nKXZhbHVlOwotIGFkZExvbmdMb25nOiAobG9uZyBsb25nKXZhbHVlOwotIGFkZFVuc2lnbmVk TG9uZ0xvbmc6ICh1bnNpZ25lZCBsb25nIGxvbmcpdmFsdWU7Ci0gYWRkRmxvYXQ6IChmbG9hdCl2 YWx1ZTsKLSBhZGREb3VibGU6IChkb3VibGUpdmFsdWU7Ci0gYWRkTG9uZ0RvdWJsZTogKGxvbmcg ZG91YmxlKXZhbHVlOwotIGFkZFN0cmluZzogKGNvbnN0IGNoYXIgKil2YWx1ZTsKLSBhZGRPYmpl Y3Q6IG9iajsKLSBhZGRTZWxlY3RvcjogKFNFTClhU2VsOwotIGFkZEphdmFPYmplY3Q6IChKT0JK RUNUKW9iajsKLSBzZXRPYmpDUmV0dXJuVHlwZTogKGNoYXIpdHlwZTsKLSBzZXRSZXR1cm5UeXBl OiAoZmNhbGxfdHlwZV90KXJldFR5cGU7Ci0gc2V0Qm9vbGVhblJldHVyblR5cGU7Ci0gX0lfVXNp bmc7Ci0gKHZhbF90KWdldFJldFZhbDsKLSAoaWQgPFN5bWJvbD4pZ2V0TGFuZ3VhZ2U7Ci0gKHZv aWQgKilnZXRSZXN1bHQ7CkBlbmQKCnR5cGVkZWYgZW51bSBjYWxsVHlwZXMgeyBjY2FsbCwgQ09N Y2FsbCwgSlNjYWxsLCBqYXZhY2FsbCwgamF2YXN0YXRpY2NhbGwsIG9iamNjYWxsIH0gY2FsbF90 OwoKQHByb3RvY29sIEZDYWxsIDxDcmVhdGUsIERyb3AsIENSRUFUQUJMRT4KCgotIF9JX0NyZWF0 aW5nOworIGNyZWF0ZTogKGlkIDxab25lPilhWm9uZSB0YXJnZXQ6IG9iagogICAgICAgICAgICAg ICAgICAgICAgICAgc2VsZWN0b3I6IChTRUwpc2VsCiAgICAgICAgICAgICAgICAgICAgICAgIGFy Z3VtZW50czogKGlkIDxGQXJndW1lbnRzPilmYTsKKyBjcmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUg dGFyZ2V0OiBvYmoKICAgICAgICAgICAgICAgICAgICAgICBtZXRob2ROYW1lOiAoY29uc3QgY2hh ciAqKW1ldGhvZE5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzOiAoaWQgPEZB cmd1bWVudHM+KWZhOwotIHNldEFyZ3VtZW50czogYXJnczsKLSBzZXRGdW5jdGlvblBvaW50ZXI6 IChmdW5jX3QpZm47Ci0gc2V0TWV0aG9kRnJvbVNlbGVjdG9yOiAoU0VMKW1ldGhvZCBpbk9iamVj dDogb2JqZWN0OwotIHNldE1ldGhvZEZyb21OYW1lOiAoY29uc3QgY2hhciAqKW1ldGhvZE5hbWUg aW5PYmplY3Q6IG9iamVjdDsKLSBzZXRKYXZhTWV0aG9kRnJvbU5hbWU6IChjb25zdCBjaGFyICop bWV0aG9kTmFtZSBpbk9iamVjdDogKEpPQkpFQ1Qpak9iajsKLSBzZXRKYXZhTWV0aG9kRnJvbU5h bWU6IChjb25zdCBjaGFyICopbWV0aG9kTmFtZSBpbkNsYXNzOiAoY29uc3QgY2hhciAqKWNsYXNz TmFtZTsKLSBfSV9Vc2luZzsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAg ICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA2NQoKCi0gKGNhbGxfdClnZXRD YWxsVHlwZTsKLSBnZXRBcmd1bWVudHM7Ci0gKHZvaWQpcGVyZm9ybUNhbGw7Ci0gKHZvaWQgKiln ZXRSZXN1bHQ7Ci0gKHJldHZhbF90KWdldFJldFZhbDogKHJldHZhbF90KXJldFZhbCBidWY6ICh0 eXBlc190ICopYnVmOwotIChmdW5jX3QpZ2V0RnVuY3Rpb25Qb2ludGVyOwpleHRlcm4gdm9pZCBk ZWZvYmpfaW5pdF9qYXZhX2NhbGxfdGFibGVzICh2b2lkICpqbmlFbnYpOwpleHRlcm4gdm9pZCB1 cGRhdGVUYXJnZXQgKGlkIGNhbGwsIGlkIHRhcmdldCk7CkBlbmQKCkBwcm90b2NvbCBTZXJpYWxp emF0aW9uCgoKCi0gX0lfQ3JlYXRpbmc7CgoKLSBsaXNwSW5DcmVhdGU6IGV4cHI7CgoKLSBoZGY1 SW5DcmVhdGU6IChpZCA8SERGNT4paGRmNU9iajsKCgoKZXh0ZXJuIGlkIGxpc3BJbiAoaWQgPFpv bmU+IGFab25lLCBpZCBleHByKTsKCgpleHRlcm4gaWQgaGRmNUluIChpZCA8Wm9uZT4gYVpvbmUs IGlkIDxIREY1PiBoZGY1T2JqKTsKCi0gX0lfU2V0dGluZzsKCgotIGxpc3BJbjogZXhwcjsKCgot IGhkZjVJbjogKGlkIDxIREY1PiloZGY1T2JqOwoKLSBfSV9Vc2luZzsKCi0gKHZvaWQpbGlzcE91 dFNoYWxsb3c6IHN0cmVhbTsKCgotICh2b2lkKWxpc3BPdXREZWVwOiBzdHJlYW07CgoKCi0gKHZv aWQpbGlzcE91dFZhcnM6IHN0cmVhbSBkZWVwOiAoQk9PTClkZWVwRmxhZzsKCgotICh2b2lkKWhk ZjVPdXRTaGFsbG93OiAoaWQgPEhERjU+KWhkZjVvYmo7CgoKLSAodm9pZCloZGY1T3V0RGVlcDog KGlkIDxIREY1PiloZGY1b2JqOwoKLSAodm9pZCl1cGRhdGVBcmNoaXZlcjogYXJjaGl2ZXI7CgoK CgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAg ICAgICAgICAgICAgUGFnZSAgIDY2CgoKCmV4dGVybiBCT09MIGxpc3BJbkJvb2xlYW4gKGlkIGlu ZGV4KTsKCgpleHRlcm4gaW50IGxpc3BJbkludGVnZXIgKGlkIGluZGV4KTsKCgpleHRlcm4gY29u c3QgY2hhciAqbGlzcEluU3RyaW5nIChpZCBpbmRleCk7CgoKZXh0ZXJuIGlkIGxpc3BJbktleXdv cmQgKGlkIGluZGV4KTsKCkBlbmQKCgpleHRlcm4gaWQgPEFyZ3VtZW50cz4gYXJndW1lbnRzOwoK CmV4dGVybiBpZCA8SERGNUFyY2hpdmVyPiBoZGY1QXJjaGl2ZXI7CgoKZXh0ZXJuIGlkIDxMaXNw QXJjaGl2ZXI+IGxpc3BBcmNoaXZlcjsKCgpleHRlcm4gaWQgPEhERjVBcmNoaXZlcj4gaGRmNUFw cEFyY2hpdmVyOwoKCmV4dGVybiBpZCA8TGlzcEFyY2hpdmVyPiBsaXNwQXBwQXJjaGl2ZXI7CgoK ZXh0ZXJuIGlkIDxTeW1ib2w+IHRfQnl0ZUFycmF5LCB0X0xlYWZPYmplY3QsIHRfUG9wdWxhdGlv bk9iamVjdDsKCgpleHRlcm4gaWQgPFN5bWJvbD4gTGFuZ3VhZ2VDT00sIExhbmd1YWdlSlMsIExh bmd1YWdlSmF2YSwgTGFuZ3VhZ2VPYmpjOwoKCgoKCgpleHRlcm4gdm9pZCBfb2JqX2Zvcm1hdElE U3RyaW5nIChjaGFyICpidWZmZXIsIGlkIGFuT2JqZWN0KTsKCgoKZXh0ZXJuIENsYXNzIG9iamNf Z2V0X2NsYXNzIChjb25zdCBjaGFyICpuYW1lKTsKCgpleHRlcm4gaWQgZGVmb2JqX2xvb2t1cF90 eXBlIChjb25zdCBjaGFyICpuYW1lKTsKCgoKCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRl L2RlZm9iai90eXBlcy5oIiAxCmV4dGVybiB2b2lkICpfZGVmb2JqX1tdOwoKZXh0ZXJuIGlkIEdl dE5hbWU7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5t aSAgICAgICAgICAgICAgICAgICBQYWdlICAgNjcKCgpleHRlcm4gaWQgRGVmaW5lZE9iamVjdDsK ZXh0ZXJuIGlkIEN1c3RvbWl6ZTsKZXh0ZXJuIGlkIENyZWF0ZTsKZXh0ZXJuIGlkIERyb3A7CmV4 dGVybiBpZCBab25lOwpleHRlcm4gaWQgRGVmaW5lZENsYXNzOwpleHRlcm4gaWQgQ3JlYXRlZENs YXNzOwpleHRlcm4gaWQgQmVoYXZpb3JQaGFzZTsKZXh0ZXJuIGlkIENvcHk7CmV4dGVybiBpZCBH ZXRPd25lcjsKZXh0ZXJuIGlkIFNldEluaXRpYWxWYWx1ZTsKZXh0ZXJuIGlkIFN5bWJvbDsKZXh0 ZXJuIGlkIEV2ZW50VHlwZTsKZXh0ZXJuIGlkIFdhcm5pbmc7CmV4dGVybiBpZCBFcnJvcjsKZXh0 ZXJuIGlkIEFyZ3VtZW50czsKZXh0ZXJuIGlkIEFyY2hpdmVyOwpleHRlcm4gaWQgTGlzcEFyY2hp dmVyOwpleHRlcm4gaWQgSERGNUFyY2hpdmVyOwpleHRlcm4gaWQgSERGNTsKZXh0ZXJuIGlkIEhE RjVDb21wb3VuZFR5cGU7CmV4dGVybiBpZCBGQXJndW1lbnRzOwpleHRlcm4gaWQgRkNhbGw7CmV4 dGVybiBpZCBTZXJpYWxpemF0aW9uOwoKCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2Rl Zm9iai9jbGFzc2VzLmgiIDEKZXh0ZXJuIGlkIGlkX0FyY2hpdmVyX2M7CmV4dGVybiBpZCBpZF9B cHBsaWNhdGlvbjsKZXh0ZXJuIGlkIGlkX0xpc3BBcmNoaXZlcl9jOwpleHRlcm4gaWQgaWRfSERG NUFyY2hpdmVyX2M7CmV4dGVybiBpZCBpZF9Bcmd1bWVudHNfYzsKZXh0ZXJuIGlkIGlkX0NyZWF0 ZURyb3BfczsKZXh0ZXJuIGlkIGlkX0NyZWF0ZURyb3A7CmV4dGVybiBpZCBpZF9DdXN0b21pemVf czsKZXh0ZXJuIGlkIGlkX0NyZWF0ZUJ5X2M7CmV4dGVybiBpZCBpZF9DcmVhdGVfYnljb3B5Owpl eHRlcm4gaWQgaWRfQ3JlYXRlX2J5c2VuZDsKZXh0ZXJuIGlkIGlkX0NyZWF0ZV9ieWJvdGg7CmV4 dGVybiBpZCBpZF9DbGFzc19zOwpleHRlcm4gaWQgaWRfQ3JlYXRlZENsYXNzX3M7CmV4dGVybiBp ZCBpZF9CZWhhdmlvclBoYXNlX3M7CmV4dGVybiBpZCBpZF9PYmplY3RfczsKZXh0ZXJuIGlkIGlk X0hERjVDb21wb3VuZFR5cGVfYzsKZXh0ZXJuIGlkIGlkX0hERjVfYzsKZXh0ZXJuIGlkIGlkX1R5 cGVfYzsKZXh0ZXJuIGlkIGlkX1Byb2dyYW1Nb2R1bGVfYzsKZXh0ZXJuIGlkIGlkX01vZHVsZV9z dXBlcl87CmV4dGVybiBpZCBpZF9TeW1ib2xfYzsKZXh0ZXJuIGlkIGlkX0V2ZW50VHlwZV9jOwpl eHRlcm4gaWQgaWRfV2FybmluZ19jOwpleHRlcm4gaWQgaWRfRXJyb3JfYzsKZXh0ZXJuIGlkIGlk X1pvbmVfYzsKZXh0ZXJuIGlkIGlkX0NvbXBvbmVudFpvbmVfYzsKZXh0ZXJuIGlkIGlkX0ZDYWxs X2M7CmV4dGVybiBpZCBpZF9GQXJndW1lbnRzX2M7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAg ICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgNjgKCgpl eHRlcm4gaWQgaWRfRGlyZWN0b3J5RW50cnk7CmV4dGVybiBpZCBpZF9PYmplY3RFbnRyeTsKZXh0 ZXJuIGlkIGlkX1NlbGVjdG9yRW50cnk7CmV4dGVybiBpZCBpZF9EaXJlY3Rvcnk7CmV4dGVybiBp ZCBpZF9KYXZhUHJveHk7CmV4dGVybiBpZCBpZF9KYXZhQ2xhc3NQcm94eTsKZXh0ZXJuIGlkIGlk X0phdmFDb2xsZWN0aW9uOwpleHRlcm4gaWQgaWRfSmF2YUNvbGxlY3Rpb25JbmRleDsKZXh0ZXJu IGlkIGlkX0NPTVByb3h5OwojIDMxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL3R5 cGVzLmgiIDIKIyAxMjU2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiIDIKCmV4 dGVybiB2b2lkIGluaXREZWZvYmogKGlkIDxBcmd1bWVudHM+IGFyZ3VtZW50cyk7CgoKZXh0ZXJu IHZvaWQgX29ial9pbml0TW9kdWxlICh2b2lkICptb2R1bGUpOwoKCgoKCmV4dGVybiBpZCBfb2Jq X2dsb2JhbFpvbmU7CgoKZXh0ZXJuIGlkIF9vYmpfc2NyYXRjaFpvbmU7CiMgMTI3OSAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgpleHRlcm4gQk9PTCBfb2JqX2RlYnVnOwoKCgpl eHRlcm4gRklMRSAqX29ial94ZXJyb3I7CgpleHRlcm4gRklMRSAqX29ial94ZGVidWc7CgoKZXh0 ZXJuIHZvaWQgeHNldG5hbWUgKGlkIGFuT2JqZWN0LCBjb25zdCBjaGFyICpuYW1lKTsKCgpleHRl cm4gdm9pZCB4cHJpbnQgKGlkIGFuT2JqZWN0KTsKCgpleHRlcm4gdm9pZCB4cHJpbnRpZCAoaWQg YW5PYmplY3QpOwoKCmV4dGVybiB2b2lkIHhmcHJpbnQgKGlkIGFuT2JqZWN0KTsKCgpleHRlcm4g dm9pZCB4ZnByaW50aWQgKGlkIGFuT2JqZWN0KTsKCgpleHRlcm4gdm9pZCB4ZXhlYyAoaWQgYW5P YmplY3QsIGNvbnN0IGNoYXIgKm5hbWUpOwoKCmV4dGVybiB2b2lkIHhmZXhlYyAoaWQgYW5PYmpl Y3QsIGNvbnN0IGNoYXIgKm5hbWUpOwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAg ICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgNjkKCgpleHRlcm4g aWQgbmFtZVRvT2JqZWN0IChjb25zdCBjaGFyICpuYW1lKTsKIyAxMzI1ICIvdXNyL2xvY2FsL3N3 YXJtL2luY2x1ZGUvZGVmb2JqLmgiCmV4dGVybiBjaGFyICp6c3RyZHVwIChpZCA8Wm9uZT4gYVpv bmUsIGNvbnN0IGNoYXIgKnN0cik7CiMgMTQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZv YmovRGVmT2JqZWN0LmgiIDIKCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3N3YXJtY29u ZmlnLmgiIDEKIyAxNiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9EZWZPYmplY3Qu aCIgMgoKQGNsYXNzIE9iamVjdEVudHJ5OwoKCkBpbnRlcmZhY2UgT2JqZWN0X3M6IE9iamVjdCA8 RGVmaW5lZENsYXNzLCBTZXJpYWxpemF0aW9uLCBHZXROYW1lPgp7CkBwdWJsaWMKCgogIHVuc2ln bmVkIHpiaXRzOwogIE9iamVjdEVudHJ5ICpmb3JlaWduRW50cnk7Cn0KIyA0MSAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL2RlZm9iai9EZWZPYmplY3QuaCIKLSAoY29uc3QgY2hhciAqKWdldE5h bWU7CisgKEJPT0wpcmVzcG9uZHNUbzogKFNFTClhU2VsOwotIChCT09MKXJlc3BvbmRzVG86IChT RUwpYVNlbDsKKyAoQk9PTCljb25mb3Jtc1RvOiAoUHJvdG9jb2wgKilhUHJvdG9jb2w7CisgZ2V0 Q2xhc3M7Ci0gZ2V0Q2xhc3M7Ci0gZ2V0Wm9uZTsKLSAodm9pZClkcm9wQWxsb2NhdGlvbnM6IChC T09MKWNvbXBvbmVudEFsbG9jOwotICh2b2lkKWRyb3A7Ci0gKHJlZl90KWFkZFJlZjogKG5vdGlm eV90KW5vdGlmeUZ1bmN0aW9uIHdpdGhBcmd1bWVudDogKHZvaWQgKilhcmc7OwotICh2b2lkKXJl bW92ZVJlZjogKHJlZl90KXJlZlZhbDsKKyBnZXRTdXBlcmNsYXNzOworIChCT09MKWlzU3ViY2xh c3M6IGFDbGFzczsKKyAodm9pZClzZXRUeXBlSW1wbGVtZW50ZWQ6IGFUeXBlOworIGdldFR5cGVJ bXBsZW1lbnRlZDsKKyBnZXRPd25lcjsKKyAoSU1QKWdldE1ldGhvZEZvcjogKFNFTClhU2VsOwor IGdldERlZmluaW5nQ2xhc3M7CisgZ2V0TmV4dFBoYXNlOworIHNlbGY7Ci0gZ2V0VHlwZTsKLSAo aW50KWNvbXBhcmU6IGFuT2JqZWN0OwotIHBlcmZvcm06IChTRUwpYVNlbDsKLSBwZXJmb3JtOiAo U0VMKWFTZWwgd2l0aDogYW5PYmplY3QxOwotIHBlcmZvcm06IChTRUwpYVNlbCB3aXRoOiBhbk9i amVjdDEgd2l0aDogYW5PYmplY3QyOwotIHBlcmZvcm06IChTRUwpYVNlbCB3aXRoOiBhbk9iamVj dDEgd2l0aDogYW5PYmplY3QyIHdpdGg6IGFuT2JqZWN0MzsKLSAodm9pZClzZXREaXNwbGF5TmFt ZTogKGNvbnN0IGNoYXIgKilhTmFtZTsKLSAoY29uc3QgY2hhciAqKWdldERpc3BsYXlOYW1lOwot IChjb25zdCBjaGFyICopZ2V0T2JqZWN0TmFtZTsKLSAoY29uc3QgY2hhciAqKWdldFR5cGVOYW1l OwotICh2b2lkKWRlc2NyaWJlOiBvdXRwdXRDaGFyU3RyZWFtOwotICh2b2lkKWRlc2NyaWJlSUQ6 IG91dHB1dENoYXJTdHJlYW07Ci0gKHZvaWQpeHByaW50OwotICh2b2lkKXhwcmludGlkOwotICh2 b2lkKXhmcHJpbnQ7Ci0gKHZvaWQpeGZwcmludGlkOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAg ICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDcwCgoK LSBsaXNwSW5DcmVhdGU6IGV4cHI7Ci0gbGlzcEluOiBleHByOwotIGhkZjVJbkNyZWF0ZTogZXhw cjsKLSBoZGY1SW46IGV4cHI7Ci0gKHZvaWQpbGlzcE91dFZhcnM6IHN0cmVhbSBkZWVwOiAoQk9P TClkZWVwRmxhZzsKLSAodm9pZClsaXNwT3V0RGVlcDogc3RyZWFtOwotICh2b2lkKWxpc3BPdXRT aGFsbG93OiBzdHJlYW07Ci0gKHZvaWQpaGRmNU91dERlZXA6IGhkZjVvYmo7Ci0gKHZvaWQpaGRm NU91dFNoYWxsb3c6IGhkZjVvYmo7Ci0gKHZvaWQpdXBkYXRlQXJjaGl2ZXI6IGFyY2hpdmVyOwpA ZW5kCgpleHRlcm4gaWQgbGlzcEluIChpZCBhWm9uZSwgaWQgZXhwcik7CgpleHRlcm4gQk9PTCBs aXNwSW5Cb29sZWFuIChpZCBpbmRleCk7CmV4dGVybiBpbnQgbGlzcEluSW50ZWdlciAoaWQgaW5k ZXgpOwpleHRlcm4gY29uc3QgY2hhciAqbGlzcEluU3RyaW5nIChpZCBpbmRleCk7CmV4dGVybiBp ZCBsaXNwSW5LZXl3b3JkIChpZCBpbmRleCk7CiMgMTIxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1 ZGUvZGVmb2JqL0RlZk9iamVjdC5oIgpleHRlcm4gSU1QIGdldF9pbXAgKENsYXNzIGNsYXNzLCBT RUwgc2VsKTsKCgoKCmV4dGVybiBCT09MIHJlc3BvbmRzVG8gKGlkIGFuT2JqZWN0LCBTRUwgYVNl bCk7CgoKCgoKZXh0ZXJuIElNUCBnZXRNZXRob2RGb3IgKGlkIGFuT2JqZWN0LCBTRUwgYVNlbCk7 CiMgMTU0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0RlZk9iamVjdC5oIgp0eXBl ZGVmIHN0cnVjdCBtYXBhbGxvYyAqbWFwYWxsb2NfdDsKCnN0cnVjdCBtYXBhbGxvYyB7CiAgdm9p ZCAoKm1hcHBpbmdGdW5jdGlvbikgKG1hcGFsbG9jX3QgbWFwYWxsb2MsIEJPT0wgb2JqZWN0QWxs b2NhdGlvbik7CiAgdm9pZCAqYWxsb2M7CiAgaWQgPFN5bWJvbD4gZGVzY3JpcHRvcjsKICBpZCB6 b25lOwogIHNpemVfdCBzaXplOwp9OwojIDE0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVm b2JqL0N1c3RvbWl6ZS5oIiAyCiMgMjQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmov Q3VzdG9taXplLmgiCmV4dGVybiBpZCBDcmVhdGluZywgU2V0dGluZywgVXNpbmcsIENyZWF0aW5n T25seSwgVXNpbmdPbmx5OwoKCgoKQGludGVyZmFjZSBDdXN0b21pemVfczogT2JqZWN0X3MKCisg Y3VzdG9taXplQmVnaW46IGFab25lOwotIGN1c3RvbWl6ZUVuZDsKLSBjdXN0b21pemVDb3B5OiBh Wm9uZTsKKyBjdXN0b21pemVCZWdpbkVuZDogYVpvbmU7Ci0gX3NldENyZWF0ZUJ5XzogKENsYXNz KXN1YmNsYXNzIG1lc3NhZ2U6IChTRUwpbWVzc2FnZVNlbGVjdG9yIHRvOiBhbk9iamVjdDsKLSAo dm9pZClfc2V0Q3JlYXRlQnlDb3B5XzsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAg ICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA3MQoKCi0gKHZvaWQp X3NldENyZWF0ZUJ5TWVzc2FnZV86IChTRUwpbWVzc2FnZVNlbGVjdG9yIHRvOiBhbk9iamVjdDsK LSAodm9pZClfc2V0Q3JlYXRlQnlNZXNzYWdlXzogKFNFTCltZXNzYWdlU2VsZWN0b3IgdG9Db3B5 OiBhbk9iamVjdDsKLSAodm9pZClfc2V0UmVjdXN0b21pemVfOiBhbk9iamVjdDsKKyAodm9pZClz ZXRUeXBlSW1wbGVtZW50ZWQ6IGFUeXBlOwpAZW5kCiMgNTYgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9kZWZvYmovQ3VzdG9taXplLmgiCmV4dGVybiBpbmxpbmUgQk9PTApfb2JqX2N1c3RvbWl6 ZSAoaWQgYW5PYmplY3QpCnsKICByZXR1cm4gKCgqKENsYXNzICopKGFuT2JqZWN0KSktPmluZm8g JiAweDIwMCkgIT0gMDsKfQojIDgyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0N1 c3RvbWl6ZS5oIgpAaW50ZXJmYWNlIENyZWF0ZUJ5X2M6IE9iamVjdF9zCnsKQHB1YmxpYwogIGlk IGltcGxlbWVudGVkVHlwZTsKICBpZCBjcmVhdGVSZWNlaXZlcjsKICBTRUwgY3JlYXRlTWVzc2Fn ZTsKICBJTVAgY3JlYXRlTWV0aG9kOwogIGlkIHJlY3VzdG9taXplOwp9CgotIGNyZWF0ZUJlZ2lu OiBhWm9uZTsKLSBjdXN0b21pemVCZWdpbjogYVpvbmU7Ci0gKHZvaWQpbWFwQWxsb2NhdGlvbnM6 IChtYXBhbGxvY190KW1hcGFsbG9jOwpAZW5kCgpAaW50ZXJmYWNlIENyZWF0ZV9ieWNvcHk6IENy ZWF0ZUJ5X2MKCi0gY3JlYXRlOiBhWm9uZTsKQGVuZAoKQGludGVyZmFjZSBDcmVhdGVfYnlzZW5k OiBDcmVhdGVCeV9jCgotIGNyZWF0ZTogYVpvbmU7CkBlbmQKCkBpbnRlcmZhY2UgQ3JlYXRlX2J5 Ym90aDogQ3JlYXRlQnlfYwoKLSBjcmVhdGU6IGFab25lOwpAZW5kCgoKCgpleHRlcm4gaW5saW5l IENsYXNzCmdldE5leHRQaGFzZSAoaWQgYUNsYXNzKQp7CiAgcmV0dXJuIChDbGFzcykgKChCZWhh dmlvclBoYXNlX3MgKikgYUNsYXNzKS0+bmV4dFBoYXNlOwp9CgoKCgpleHRlcm4gaW5saW5lIHZv aWQKc2V0TmV4dFBoYXNlIChpZCBhbk9iamVjdCkKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAg ICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA3MgoKCnsK ICAqKENsYXNzICopIGFuT2JqZWN0ID0gKENsYXNzKSAoKihCZWhhdmlvclBoYXNlX3MgKiopIGFu T2JqZWN0KS0+bmV4dFBoYXNlOwp9CiMgMTMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZv YmovQ3JlYXRlLmgiIDIKCgoKCkBpbnRlcmZhY2UgQ3JlYXRlRHJvcF9zOiBDdXN0b21pemVfcwoK KyBjcmVhdGU6IGFab25lOworIGNyZWF0ZUJlZ2luOiBhWm9uZTsKLSBjcmVhdGVFbmQ7CkBlbmQK CkBpbnRlcmZhY2UgQ3JlYXRlRHJvcDogQ3JlYXRlRHJvcF9zCgotIGNyZWF0ZUVuZDsKQGVuZAoj IDEwICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFzZS9Td2FybU9iamVjdC5oIiAy CiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2UuaCIgMQojIDIwICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFzZS5oIgojIDEgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9kZWZvYmouaCIgMQojIDIxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0 YmFzZS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiIDEKIyAy NiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiCiMgMSAiL3Vzci9sb2NhbC9z d2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiIDEKIyAxMiAiL3Vzci9sb2NhbC9zd2FybS9pbmNs dWRlL2NvbGxlY3Rpb25zLmgiCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5o IiAxCiMgMTMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIiAyCiMgMSAi L3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2V4dGVybnZhci5oIiAxCiMgMTQgIi91c3IvbG9jYWwv c3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIiAyCiMgMjQgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9jb2xsZWN0aW9ucy5oIgpAcHJvdG9jb2wgT2Zmc2V0cwojIDQyICIvdXNyL2xvY2FsL3N3 YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSBfSV9Vc2luZzsKCi0gYXRPZmZzZXQ6ICh1bnNp Z25lZClvZmZzZXQ7CgoKCi0gYXRPZmZzZXQ6ICh1bnNpZ25lZClvZmZzZXQgcHV0OiBhbk9iamVj dDsKCgotIGdldEZpcnN0OwoKCi0gZ2V0TGFzdDsKQGVuZAoKQHByb3RvY29sIEZvckVhY2gKIyA3 OCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCi0gX0lfVXNpbmc7Ci0g KHZvaWQpZm9yRWFjaDogKFNFTClhU2VsZWN0b3I7Ci0gKHZvaWQpZm9yRWFjaDogKFNFTClhU2Vs ZWN0b3IgOiBhcmcxOwotICh2b2lkKWZvckVhY2g6IChTRUwpYVNlbGVjdG9yIDogYXJnMSA6IGFy ZzI7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAg ICAgICAgICAgICAgICAgICBQYWdlICAgNzMKCgotICh2b2lkKWZvckVhY2g6IChTRUwpYVNlbGVj dG9yIDogYXJnMSA6IGFyZzIgOiBhcmczOwoKLSAodm9pZClkZXNjcmliZUZvckVhY2g6IG91dHB1 dENoYXJTdHJlYW07Ci0gKHZvaWQpZGVzY3JpYmVGb3JFYWNoSUQ6IG91dHB1dENoYXJTdHJlYW07 CgpAZW5kCgpAcHJvdG9jb2wgRm9yRWFjaEtleQoKCgoKCi0gX0lfVXNpbmc7Ci0gKHZvaWQpZm9y RWFjaEtleTogKFNFTClhU2VsZWN0b3I7Ci0gKHZvaWQpZm9yRWFjaEtleTogKFNFTClhU2VsZWN0 b3IgOiBhcmcxOwotICh2b2lkKWZvckVhY2hLZXk6IChTRUwpYVNlbGVjdG9yIDogYXJnMSA6IGFy ZzI7Ci0gKHZvaWQpZm9yRWFjaEtleTogKFNFTClhU2VsZWN0b3IgOiBhcmcxIDogYXJnMiA6IGFy ZzM7CkBlbmQKCkBwcm90b2NvbCBJbmRleCA8RGVmaW5lZE9iamVjdCwgRHJvcCwgUkVUVVJOQUJM RT4KIyAxNTcgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgotIF9JX1Vz aW5nOwoKCi0gZ2V0Q29sbGVjdGlvbjsKCgoKCgoKLSBuZXh0OwoKCgoKLSBwcmV2OwoKCgoKLSBm aW5kTmV4dDogYW5PYmplY3Q7CgoKCgotIGZpbmRQcmV2OiBhbk9iamVjdDsKIyAxOTEgIi91c3Iv bG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgotIGdldDsKCgoKCi0gcHV0OiBhbk9i amVjdDsKIyAyMDkgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgoKCgoK CgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAg ICAgICAgICAgUGFnZSAgIDc0CgoKLSByZW1vdmU7CiMgMjUzICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvY29sbGVjdGlvbnMuaCIKLSAoaWQgPFN5bWJvbD4pZ2V0TG9jOwojIDI2NyAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCi0gKHZvaWQpc2V0TG9jOiAoaWQgPFN5 bWJvbD4pbG9jU3ltYm9sOwojIDI4OCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rp b25zLmgiCi0gKGludClnZXRPZmZzZXQ7CgoKCgoKCgotIHNldE9mZnNldDogKHVuc2lnbmVkKW9m ZnNldDsKIyAzMDggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgotIChp bnQpY29tcGFyZTogYW5JbmRleDsKIyAzMjEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xs ZWN0aW9ucy5oIgpleHRlcm4gaWQgPFN5bWJvbD4gU3RhcnQsIEVuZCwgQmV0d2VlbiwgUmVtb3Zl ZCwgTWVtYmVyOwoKCgoKCgoKZXh0ZXJuIGlkIDxFcnJvcj4gT2Zmc2V0T3V0T2ZSYW5nZSwgTm9N ZW1iZXJzLAogIEFscmVhZHlBdEVuZCwgQWxyZWFkeUF0U3RhcnQsIEludmFsaWRJbmRleExvYywg SW52YWxpZExvY1N5bWJvbDsKCkBlbmQKCkBwcm90b2NvbCBQZXJtdXRlZEluZGV4IDxJbmRleCwg UkVUVVJOQUJMRT4KCgoKCgotIF9JX0NyZWF0aW5nOwotIHNldENvbGxlY3Rpb246IGFDb2xsZWN0 aW9uOwotIHNldFVuaWZvcm1SYW5kb206IHJuZDsKLSBfSV9Vc2luZzsKLSByZXNodWZmbGU7CkBl bmQ7CgpAcHJvdG9jb2wgQ29sbGVjdGlvbiA8Q3JlYXRlLCBTZXRJbml0aWFsVmFsdWUsIENvcHks IERyb3AsIE9mZnNldHMsIEZvckVhY2g+CiMgNDA3ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv Y29sbGVjdGlvbnMuaCIKLSBfSV9DcmVhdGluZzsKCgoKCgoKCi0gKHZvaWQpc2V0UmVwbGFjZU9u bHk6IChCT09MKXJlcGxhY2VPbmx5OwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAg ICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA3NQoKCi0gKHZvaWQp c2V0SW5kZXhGcm9tTWVtYmVyTG9jOiAoaW50KWJ5dGVPZmZzZXQ7CgotIF9JX1VzaW5nOwoKCi0g Y29weTogKGlkIDxab25lPilhWm9uZTsKCgotIChCT09MKWdldFJlcGxhY2VPbmx5OwoKCgoKCi0g KHVuc2lnbmVkKWdldENvdW50OwojIDQ0MCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxl Y3Rpb25zLmgiCi0gKEJPT0wpY29udGFpbnM6IGFNZW1iZXI7CgoKCgoKCi0gcmVtb3ZlOiBhTWVt YmVyOwojIDQ1NiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCi0gKHZv aWQpcmVtb3ZlQWxsOwoKCi0gKHZvaWQpZGVsZXRlQWxsOwoKCi0gKEJPT0wpYWxsU2FtZUNsYXNz OwoKCgoKLSAoaWQgPEluZGV4PiliZWdpbjogKGlkIDxab25lPilhWm9uZTsKCi0gKGlkIDxQZXJt dXRlZEluZGV4PiliZWdpblBlcm11dGVkOiAoaWQgPFpvbmU+KWFab25lOwpAZW5kCgoKCkBwcm90 b2NvbCBEZWZhdWx0TWVtYmVyCiMgNDg4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVj dGlvbnMuaCIKLSBfSV9TZXR0aW5nOwotICh2b2lkKXNldERlZmF1bHRNZW1iZXI6IG1lbWJlclZh bHVlOwoKLSBfSV9Vc2luZzsKLSBnZXREZWZhdWx0TWVtYmVyOwpAZW5kCgpAcHJvdG9jb2wgTWVt YmVyQmxvY2sKIyA1MzcgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgot IF9JX0NyZWF0aW5nOworIGNyZWF0ZTogKGlkIDxab25lPilhWm9uZSBzZXRNZW1iZXJCbG9jazog KGlkICopbWVtYmVycyBzZXRDb3VudDogKHVuc2lnbmVkKWNvdW50OwoKCgoKCgoKMjAwMS0wOC0y NCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFn ZSAgIDc2CgoKCi0gX0lfU2V0dGluZzsKLSAodm9pZClzZXRNZW1iZXJCbG9jazogKGlkICopbWVt YmVycyBzZXRDb3VudDogKHVuc2lnbmVkKWNvdW50OwoKLSBfSV9Vc2luZzsKLSAodm9pZCAqKWdl dE1lbWJlckJsb2NrOwpAZW5kCgpAcHJvdG9jb2wgQXJyYXkgPENvbGxlY3Rpb24sIERlZmF1bHRN ZW1iZXIsIE1lbWJlckJsb2NrLCBDUkVBVEFCTEU+CiMgNTk4ICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvY29sbGVjdGlvbnMuaCIKLSBfSV9DcmVhdGluZzsKKyBjcmVhdGU6IChpZCA8Wm9uZT4p YVpvbmUgc2V0Q291bnQ6ICh1bnNpZ25lZCljb3VudDsKCi0gX0lfU2V0dGluZzsKCgoKCgoKCi0g c2V0Q291bnQ6ICh1bnNpZ25lZCljb3VudDsKQGVuZAoKQHByb3RvY29sIExpc3RJbmRleCA8SW5k ZXgsIFJFVFVSTkFCTEU+CiMgNjQwICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlv bnMuaCIKLSBfSV9Vc2luZzsKCi0gKHZvaWQpYWRkQWZ0ZXI6IGFuT2JqZWN0OwoKCi0gKHZvaWQp YWRkQmVmb3JlOiBhbk9iamVjdDsKQGVuZAoKCkBwcm90b2NvbCBMaXN0IDxDb2xsZWN0aW9uLCBD UkVBVEFCTEU+CiMgNjY5ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIK LSBfSV9Vc2luZzsKCi0gKHZvaWQpYWRkRmlyc3Q6IGFuT2JqZWN0OwoKCi0gKHZvaWQpYWRkTGFz dDogYW5PYmplY3Q7CgoKLSByZW1vdmVGaXJzdDsKCgotIHJlbW92ZUxhc3Q7CgoKLSAoaWQgPExp c3RJbmRleD4pbGlzdEJlZ2luOiAoaWQgPFpvbmU+KWFab25lOwpAZW5kCgoKCgoKCgoKCgoyMDAx LTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAg ICBQYWdlICAgNzcKCgpleHRlcm4gaW50IGNvbXBhcmVJRHMgKGlkLCBpZCk7CgoKZXh0ZXJuIGlu dCBjb21wYXJlSW50ZWdlcnMgKGlkLCBpZCk7CgoKZXh0ZXJuIGludCBjb21wYXJlVW5zaWduZWRJ bnRlZ2VycyAoaWQsIGlkKTsKCgpleHRlcm4gaW50IGNvbXBhcmVDU3RyaW5ncyAoaWQsIGlkKTsK CkBwcm90b2NvbCBDb21wYXJlRnVuY3Rpb24KIyA3MjEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9jb2xsZWN0aW9ucy5oIgp0eXBlZGVmIGludCAoKmNvbXBhcmVfdCkgKGlkLCBpZCk7CgotIF9J X0NyZWF0aW5nOwotIHNldENvbXBhcmVGdW5jdGlvbjogKGNvbXBhcmVfdClhRnVuY3Rpb247Ci0g c2V0Q29tcGFyZUNTdHJpbmdzOwotIHNldENvbXBhcmVJRHM7Ci0gc2V0Q29tcGFyZUludGVnZXJz OwotIHNldENvbXBhcmVVbnNpZ25lZEludGVnZXJzOwotIF9JX1VzaW5nOwotIChjb21wYXJlX3Qp Z2V0Q29tcGFyZUZ1bmN0aW9uOwpAZW5kCgpAcHJvdG9jb2wgS2V5ZWRDb2xsZWN0aW9uIDxDb2xs ZWN0aW9uLCBGb3JFYWNoS2V5PgojIDc1MCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxl Y3Rpb25zLmgiCi0gX0lfQ3JlYXRpbmc7CgotIF9JX1VzaW5nOwotIGNyZWF0ZUluZGV4OiAoaWQg PFpvbmU+KWFab25lIGZyb21NZW1iZXI6IGFuT2JqZWN0OwoKCgoKCgotIGF0OiBhS2V5OwoKCgoK CgotIHJlbW92ZUtleTogYUtleTsKCgoKLSAoQk9PTCljb250YWluc0tleTogYUtleTsKQGVuZAoK QHByb3RvY29sIEtleWVkQ29sbGVjdGlvbkluZGV4IDxJbmRleD4KIyA3ODMgIi91c3IvbG9jYWwv c3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgpAZW5kCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6 MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA3 OAoKCkBwcm90b2NvbCBNZW1iZXJTbG90CiMgODE0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv Y29sbGVjdGlvbnMuaCIKdHlwZWRlZiBzdHJ1Y3QgbWVtYmVyRGF0YSB7IHZvaWQgKm1lbWJlckRh dGFbMl07IH0gbWVtYmVyX3Q7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdCB7IHZvaWQgKm1lbWJlckRh dGFbMl07IGlkIG93bmVyOyB9IGR1cG1lbWJlcl90OwpAZW5kCgpAcHJvdG9jb2wgX1NldAoKCi0g X0lfVXNpbmc7CgotIChCT09MKWFkZDogYW5PYmplY3Q7CiMgODM5ICIvdXNyL2xvY2FsL3N3YXJt L2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKQGVuZAoKQHByb3RvY29sIFNldCA8X1NldCwgS2V5ZWRD b2xsZWN0aW9uLCBDUkVBVEFCTEU+CiMgODU3ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29s bGVjdGlvbnMuaCIKLSBfSV9Vc2luZzsKCgoKCgotIHJlcGxhY2U6IGFuT2JqZWN0OwpAZW5kCgpA cHJvdG9jb2wgT3JkZXJlZFNldCA8X1NldCwgTGlzdCwgQ1JFQVRBQkxFPgojIDg4NiAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCkBlbmQKCkBwcm90b2NvbCBNYXBJbmRl eCA8S2V5ZWRDb2xsZWN0aW9uSW5kZXgsIFJFVFVSTkFCTEU+CgoKCgotIF9JX1VzaW5nOwoKCgoK LSBzZXRLZXk6IGFLZXk7CgoKCgotIGdldEtleTsKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEg ICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA3OQoK CgoKCi0gKHVuc2lnbmVkIGxvbmcpZ2V0S2V5VmFsdWU7CgoKLSBuZXh0OiAoaWQgKilrZXk7CgoK LSBwcmV2OiAoaWQgKilrZXk7CgoKLSBnZXQ6IChpZCAqKWtleTsKQGVuZAoKCkBwcm90b2NvbCBN YXAgPEtleWVkQ29sbGVjdGlvbiwgQ29tcGFyZUZ1bmN0aW9uLCBDUkVBVEFCTEU+CiMgOTM4ICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSBfSV9Vc2luZzsKCgoKCi0g KEJPT0wpYXQ6IGFLZXkgaW5zZXJ0OiBhbk9iamVjdDsKCgoKCi0gYXQ6IGFLZXkgcmVwbGFjZTog YW5PYmplY3Q7CgoKLSAoaWQgPE1hcEluZGV4PiltYXBCZWdpbjogKGlkIDxab25lPilhWm9uZTsK QGVuZAoKCkBwcm90b2NvbCBPdXRwdXRTdHJlYW0gPENyZWF0ZSwgRHJvcCwgQ1JFQVRBQkxFPgoj IDk2NCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCi0gX0lfQ3JlYXRp bmc7CisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNldEZpbGVTdHJlYW06IChGSUxFICopZmls ZVN0cmVhbTsKLSBzZXRGaWxlU3RyZWFtOiAoRklMRSAqKWZpbGVTdHJlYW07Ci0gc2V0RXhwckZs YWc6IChCT09MKWV4cHJGbGFnOwotIF9JX1VzaW5nOwotIChGSUxFICopZ2V0RmlsZVN0cmVhbTsK LSBnZXRFeHByOwoKCi0gKHZvaWQpY2F0QzogKGNvbnN0IGNoYXIgKiljc3RyaW5nOwoKCi0gKHZv aWQpY2F0Qm9vbGVhbjogKEJPT0wpYm9vbDsKCgotICh2b2lkKWNhdENoYXI6IChjaGFyKWNoOwoK Ci0gKHZvaWQpY2F0RmxvYXQ6IChmbG9hdClmbHQ7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAg ICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgODAKCgoK Ci0gKHZvaWQpY2F0RG91YmxlOiAoZG91YmxlKWRibDsKCgotICh2b2lkKWNhdExvbmdEb3VibGU6 IChsb25nIGRvdWJsZSlkYmw7CgoKLSAodm9pZCljYXRJbnQ6IChpbnQpaTsKCgotICh2b2lkKWNh dFVuc2lnbmVkOiAodW5zaWduZWQpdW47CgotICh2b2lkKWNhdFNob3J0OiAoc2hvcnQpc2h0Owot ICh2b2lkKWNhdFVuc2lnbmVkU2hvcnQ6ICh1bnNpZ25lZCBzaG9ydCl1c2h0OwotICh2b2lkKWNh dExvbmc6IChsb25nKWxuZzsKLSAodm9pZCljYXRVbnNpZ25lZExvbmc6ICh1bnNpZ25lZCBsb25n KXVsbmc7Ci0gKHZvaWQpY2F0TG9uZ0xvbmc6IChsb25nIGxvbmcpbG5nbG5nOwotICh2b2lkKWNh dFVuc2lnbmVkTG9uZ0xvbmc6ICh1bnNpZ25lZCBsb25nIGxvbmcpdWxuZ2xuZzsKLSAodm9pZClj YXRQb2ludGVyOiAoY29uc3Qgdm9pZCAqKXB0cjsKLSAodm9pZCljYXRMaXRlcmFsOiAoY29uc3Qg Y2hhciAqKXN0cjsKLSAodm9pZCljYXRTdGFydEV4cHI7Ci0gKHZvaWQpY2F0RW5kRXhwcjsKLSAo dm9pZCljYXRLZXl3b3JkOiAoY29uc3QgY2hhciAqKWtleXdvcmQ7Ci0gKHZvaWQpY2F0U3ltYm9s OiAoY29uc3QgY2hhciAqKXN5bWJvbDsKLSAodm9pZCljYXRTdHJpbmc6IChjb25zdCBjaGFyICop c3RyOwotICh2b2lkKWNhdFNlcGFyYXRvcjsKLSAodm9pZCljYXRBcnJheVJhbms6ICh1bnNpZ25l ZClyYW5rOwotICh2b2lkKWNhdEVuZEFycmF5OwotICh2b2lkKWNhdFR5cGU6IChjb25zdCBjaGFy ICopdHlwZTsKLSAodm9pZCljYXRDbGFzczogKENsYXNzKWNsYXNzOwotICh2b2lkKWNhdFN0YXJ0 RnVuY3Rpb246IChjb25zdCBjaGFyICopZnVuY3Rpb25OYW1lOwotICh2b2lkKWNhdEVuZEZ1bmN0 aW9uOwotICh2b2lkKWNhdFN0YXJ0Q29uczsKLSAodm9pZCljYXRFbmRDb25zOwotICh2b2lkKWNh dFN0YXJ0TGlzdDsKLSAodm9pZCljYXRFbmRMaXN0OwotICh2b2lkKWNhdFN0YXJ0UXVvdGVkTGlz dDsKLSAodm9pZCljYXRFbmRRdW90ZWRMaXN0OwotICh2b2lkKWNhdFN0YXJ0UGFyc2U7Ci0gKHZv aWQpY2F0RW5kUGFyc2U7Ci0gKHZvaWQpY2F0U3RhcnRNYWtlSW5zdGFuY2U6IChjb25zdCBjaGFy ICopdHlwZU5hbWU7Ci0gKHZvaWQpY2F0RW5kTWFrZUluc3RhbmNlOwotICh2b2lkKWNhdFN0YXJ0 TWFrZUNsYXNzOiAoY29uc3QgY2hhciAqKWNsYXNzTmFtZTsKLSAodm9pZCljYXRFbmRNYWtlQ2xh c3M7Ci0gKHZvaWQpY2F0VW5zaWduZWRQYWlyOiAodW5zaWduZWQpYSA6ICh1bnNpZ25lZCliOwot ICh2b2lkKWNhdE5pbDsKQGVuZAoKQHByb3RvY29sIElucHV0U3RyZWFtIDxDcmVhdGUsIERyb3As IENSRUFUQUJMRT4KCgoKCi0gX0lfQ3JlYXRpbmc7CisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25l IHNldEZpbGVTdHJlYW06IChGSUxFICopZmlsZTsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAg ICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA4MQoKCisg Y3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNldEV4cHI6IGV4cHI7Ci0gc2V0RXhwcjogZXhwcjsK LSBzZXRGaWxlU3RyZWFtOiAoRklMRSAqKWZpbGVTdHJlYW07Ci0gX0lfVXNpbmc7Ci0gKEZJTEUg KilnZXRGaWxlU3RyZWFtOwotIGdldEV4cHI7CkBlbmQKCgpleHRlcm4gaWQgPFN5bWJvbD4gQXJj aGl2ZXJMaXRlcmFsLCBBcmNoaXZlclF1b3RlLCBBcmNoaXZlckVPTCwgQXJjaGl2ZXJEb3Q7CgpA cHJvdG9jb2wgQXJjaGl2ZXJLZXl3b3JkIDxDcmVhdGUsIERyb3AsIFJFVFVSTkFCTEU+CgoKLSBf SV9DcmVhdGluZzsKLSBzZXRLZXl3b3JkTmFtZTogKGNvbnN0IGNoYXIgKiluYW1lOwotIF9JX1Vz aW5nOwotIChjb25zdCBjaGFyICopZ2V0S2V5d29yZE5hbWU7Ci0gKHZvaWQpbGlzcE91dFNoYWxs b3c6IChpZCA8T3V0cHV0U3RyZWFtPilzdHJlYW07Ci0gKHZvaWQpbGlzcE91dERlZXA6IChpZCA8 T3V0cHV0U3RyZWFtPilzdHJlYW07CkBlbmQKCkBwcm90b2NvbCBBcmNoaXZlckFycmF5IDxDcmVh dGUsIERyb3AsIFJFVFVSTkFCTEU+CgoKLSBfSV9DcmVhdGluZzsKLSBzZXRBcnJheTogYXJyYXk7 Ci0gX0lfVXNpbmc7Ci0gKHZvaWQgKilnZXREYXRhOwotICh1bnNpZ25lZClnZXRSYW5rOwotICh1 bnNpZ25lZCAqKWdldERpbXM7Ci0gKHNpemVfdClnZXRFbGVtZW50U2l6ZTsKLSAodW5zaWduZWQp Z2V0RWxlbWVudENvdW50OwotIChmY2FsbF90eXBlX3QpZ2V0QXJyYXlUeXBlOwotIGNvbnZlcnRU b1R5cGU6IChjaGFyKWRlc3RUeXBlIGRlc3Q6ICh2b2lkICopcHRyOwotICh2b2lkKWxpc3BPdXRT aGFsbG93OiAoaWQgPE91dHB1dFN0cmVhbT4pc3RyZWFtOwotICh2b2lkKWxpc3BPdXREZWVwOiAo aWQgPE91dHB1dFN0cmVhbT4pc3RyZWFtOwotICh2b2lkKWRyb3A7CkBlbmQKCkBwcm90b2NvbCBB cmNoaXZlclZhbHVlIDxDcmVhdGUsIERyb3AsIFJFVFVSTkFCTEU+CgoKLSBfSV9DcmVhdGluZzsK LSBzZXREb3VibGU6IChkb3VibGUpdmFsOwotIHNldExvbmdEb3VibGU6IChsb25nIGRvdWJsZSl2 YWw7Ci0gc2V0RmxvYXQ6IChmbG9hdCl2YWw7Ci0gc2V0TG9uZ0xvbmc6IChsb25nIGxvbmcpdmFs OwotIHNldENoYXI6IChjaGFyKXZhbDsKLSBzZXRCb29sZWFuOiAoQk9PTCl2YWw7Ci0gc2V0Q2xh c3M6IChDbGFzcyljbGFzczsKLSBzZXROaWw7Ci0gX0lfVXNpbmc7Ci0gKGZjYWxsX3R5cGVfdCln ZXRWYWx1ZVR5cGU7Ci0gKGRvdWJsZSlnZXREb3VibGU7Ci0gKGxvbmcgZG91YmxlKWdldExvbmdE b3VibGU7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5t aSAgICAgICAgICAgICAgICAgICBQYWdlICAgODIKCgotIChmbG9hdClnZXRGbG9hdDsKLSAobG9u ZyBsb25nKWdldExvbmdMb25nOwotIChpbnQpZ2V0SW50ZWdlcjsKLSAodW5zaWduZWQpZ2V0VW5z aWduZWQ7Ci0gKGNoYXIpZ2V0Q2hhcjsKLSAoQk9PTClnZXRCb29sZWFuOwotIGdldE9iamVjdDsK LSAoQ2xhc3MpZ2V0Q2xhc3M7Ci0gKHZvaWQpbGlzcE91dFNoYWxsb3c6IChpZCA8T3V0cHV0U3Ry ZWFtPilzdHJlYW07Ci0gKHZvaWQpbGlzcE91dERlZXA6IChpZCA8T3V0cHV0U3RyZWFtPilzdHJl YW07Ci0gKHZvaWQpZHJvcDsKQGVuZAoKQHByb3RvY29sIEFyY2hpdmVyUGFpciA8Q3JlYXRlLCBE cm9wLCBSRVRVUk5BQkxFPgoKCi0gX0lfQ3JlYXRpbmc7Ci0gc2V0Q2FyOiBjYXI7Ci0gc2V0Q2Ry OiBjZHI7Ci0gc2V0Q29uc0Zvcm1hdEZsYWc6IChCT09MKXRoZUNvbnNGb3JtYXRGbGFnOwotIF9J X1VzaW5nOwotIGdldENhcjsKLSBnZXRDZHI7Ci0gKEJPT0wpZ2V0Q29uc0Zvcm1hdEZsYWc7Ci0g KHZvaWQpbGlzcE91dFNoYWxsb3c6IChpZCA8T3V0cHV0U3RyZWFtPilzdHJlYW07Ci0gKHZvaWQp bGlzcE91dERlZXA6IChpZCA8T3V0cHV0U3RyZWFtPilzdHJlYW07CkBlbmQKCkBwcm90b2NvbCBB cmNoaXZlckxpc3QgPExpc3QsIFJFVFVSTkFCTEU+CgoKLSBfSV9DcmVhdGluZzsKLSBfSV9Vc2lu ZzsKLSAodm9pZClsaXNwT3V0U2hhbGxvdzogKGlkIDxPdXRwdXRTdHJlYW0+KXN0cmVhbTsKLSAo dm9pZClsaXNwT3V0RGVlcDogKGlkIDxPdXRwdXRTdHJlYW0+KXN0cmVhbTsKQGVuZAoKQHByb3Rv Y29sIEFyY2hpdmVyUXVvdGVkIDxSRVRVUk5BQkxFPgoKCi0gX0lfQ3JlYXRpbmc7Ci0gc2V0UXVv dGVkT2JqZWN0OiB2YWx1ZTsKLSBfSV9Vc2luZzsKLSBnZXRRdW90ZWRPYmplY3Q7Ci0gKHZvaWQp bGlzcE91dERlZXA6IChpZCA8T3V0cHV0U3RyZWFtPilzdHJlYW07CkBlbmQKCgoKQHByb3RvY29s IFN0cmluZyA8Q3JlYXRlLCBEcm9wLCBDb3B5LCBDUkVBVEFCTEU+CiMgMTE1NSAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCi0gX0lfQ3JlYXRpbmc7CisgY3JlYXRlOiAo aWQgPFpvbmU+KWFab25lIHNldEM6IChjb25zdCBjaGFyICopY3N0cmluZzsKCi0gX0lfU2V0dGlu ZzsKLSAodm9pZClzZXRDOiAoY29uc3QgY2hhciAqKWNzdHJpbmc7CgoKCgoKCgoyMDAxLTA4LTI0 IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdl ICAgODMKCgoKLSBfSV9Vc2luZzsKLSAoY29uc3QgY2hhciAqKWdldEM7Ci0gKHZvaWQpY2F0Qzog KGNvbnN0IGNoYXIgKiljc3RyaW5nOwotICh1bnNpZ25lZClnZXRDb3VudDsKQGVuZAoKQHByb3Rv Y29sIExpc3RTaHVmZmxlciA8Q3JlYXRlLCBEcm9wLCBDUkVBVEFCTEU+CiMgMTE3NiAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCi0gX0lfQ3JlYXRpbmc7CgoKLSBzZXRV bmlmb3JtUmFuZG9tOiBkaXN0OwoKCgorIGNyZWF0ZTogKGlkIDxab25lPilhWm9uZSBzZXRVbmlm b3JtUmFuZG9tOiBkaXN0OwoKLSBfSV9Vc2luZzsKCi0gc2h1ZmZsZVdob2xlTGlzdDogbGlzdDsK CgoKLSBzaHVmZmxlUGFydGlhbExpc3Q6IGxpc3QgTnVtOiAodW5zaWduZWQpbnVtOwpAZW5kCgpA cHJvdG9jb2wgUGVybXV0YXRpb25JdGVtIDxDcmVhdGUsIFJFVFVSTkFCTEU+CgoKCi0gX0lfQ3Jl YXRpbmc7Ci0gc2V0SXRlbTogaXRlbTsKLSBzZXRQb3NpdGlvbjogKHVuc2lnbmVkKXBvc2l0aW9u OwotIF9JX1VzaW5nOwotIGdldEl0ZW07Ci0gKHVuc2lnbmVkKWdldFBvc2l0aW9uOwpAZW5kCgpA cHJvdG9jb2wgUGVybXV0YXRpb24gPENvbGxlY3Rpb24sIENyZWF0ZSwgQXJyYXksIENSRUFUQUJM RT4KCgoKCgoKCi0gX0lfQ3JlYXRpbmc7Ci0gc2V0Q29sbGVjdGlvbjogKGlkIDxDb2xsZWN0aW9u Piljb2xsZWN0aW9uOwotIHNldExhc3RQZXJtdXRhdGlvbjogKGlkIDxQZXJtdXRhdGlvbj4pcGVy bXV0YXRpb247Ci0gc2V0VW5pZm9ybVJhbmRvbTogcm5kOwpAZW5kCgojIDEgIi91c3IvbG9jYWwv c3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy90eXBlcy5oIiAxCmV4dGVybiB2b2lkICpfY29sbGVj dGlvbnNfW107CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJz b24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDg0CgoKZXh0ZXJuIGlkIE9mZnNldHM7CmV4 dGVybiBpZCBGb3JFYWNoOwpleHRlcm4gaWQgRm9yRWFjaEtleTsKZXh0ZXJuIGlkIEluZGV4Owpl eHRlcm4gaWQgUGVybXV0ZWRJbmRleDsKZXh0ZXJuIGlkIENvbGxlY3Rpb247CmV4dGVybiBpZCBE ZWZhdWx0TWVtYmVyOwpleHRlcm4gaWQgTWVtYmVyQmxvY2s7CmV4dGVybiBpZCBBcnJheTsKZXh0 ZXJuIGlkIExpc3RJbmRleDsKZXh0ZXJuIGlkIExpc3Q7CmV4dGVybiBpZCBDb21wYXJlRnVuY3Rp b247CmV4dGVybiBpZCBLZXllZENvbGxlY3Rpb247CmV4dGVybiBpZCBLZXllZENvbGxlY3Rpb25J bmRleDsKZXh0ZXJuIGlkIE1lbWJlclNsb3Q7CmV4dGVybiBpZCBfU2V0OwpleHRlcm4gaWQgU2V0 OwpleHRlcm4gaWQgT3JkZXJlZFNldDsKZXh0ZXJuIGlkIE1hcEluZGV4OwpleHRlcm4gaWQgTWFw OwpleHRlcm4gaWQgT3V0cHV0U3RyZWFtOwpleHRlcm4gaWQgSW5wdXRTdHJlYW07CmV4dGVybiBp ZCBBcmNoaXZlcktleXdvcmQ7CmV4dGVybiBpZCBBcmNoaXZlckFycmF5OwpleHRlcm4gaWQgQXJj aGl2ZXJWYWx1ZTsKZXh0ZXJuIGlkIEFyY2hpdmVyUGFpcjsKZXh0ZXJuIGlkIEFyY2hpdmVyTGlz dDsKZXh0ZXJuIGlkIEFyY2hpdmVyUXVvdGVkOwpleHRlcm4gaWQgU3RyaW5nOwpleHRlcm4gaWQg TGlzdFNodWZmbGVyOwpleHRlcm4gaWQgUGVybXV0YXRpb25JdGVtOwpleHRlcm4gaWQgUGVybXV0 YXRpb247CgoKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMvY2xhc3Nl cy5oIiAxCmV4dGVybiBpZCBpZF9BcnJheV9jOwpleHRlcm4gaWQgaWRfQXJyYXlJbmRleF9jOwpl eHRlcm4gaWQgaWRfQ29sbGVjdGlvbl9hbnk7CmV4dGVybiBpZCBpZF9JbmRleF9hbnk7CmV4dGVy biBpZCBpZF9QZXJtdXRlZEluZGV4X2M7CmV4dGVybiBpZCBpZF9JbnB1dFN0cmVhbV9jOwpleHRl cm4gaWQgaWRfQXJjaGl2ZXJLZXl3b3JkX2M7CmV4dGVybiBpZCBpZF9BcmNoaXZlckFycmF5X2M7 CmV4dGVybiBpZCBpZF9BcmNoaXZlclZhbHVlX2M7CmV4dGVybiBpZCBpZF9BcmNoaXZlclBhaXJf YzsKZXh0ZXJuIGlkIGlkX0FyY2hpdmVyTGlzdF9jOwpleHRlcm4gaWQgaWRfQXJjaGl2ZXJRdW90 ZWRfYzsKZXh0ZXJuIGlkIGlkX0xpc3RfYW55OwpleHRlcm4gaWQgaWRfTGlzdEluZGV4X2FueTsK ZXh0ZXJuIGlkIGlkX0xpc3RfbGlua2VkOwpleHRlcm4gaWQgaWRfTGlzdEluZGV4X2xpbmtlZDsK ZXh0ZXJuIGlkIGlkX0xpc3RfbWxpbmtzOwpleHRlcm4gaWQgaWRfTGlzdEluZGV4X21saW5rczsK ZXh0ZXJuIGlkIGlkX0xpc3RTaHVmZmxlcl9jOwpleHRlcm4gaWQgaWRfTWFwX2M7CmV4dGVybiBp ZCBpZF9NYXBJbmRleF9jOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAg ICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDg1CgoKZXh0ZXJuIGlkIGlkX09y ZGVyZWRTZXRfYzsKZXh0ZXJuIGlkIGlkX09yZGVyZWRTZXRJbmRleF9jOwpleHRlcm4gaWQgaWRf T3V0cHV0U3RyZWFtX2M7CmV4dGVybiBpZCBpZF9TZXRfYzsKZXh0ZXJuIGlkIGlkX1NldEluZGV4 X2M7CmV4dGVybiBpZCBpZF9QZXJtdXRhdGlvbkl0ZW1fYzsKZXh0ZXJuIGlkIGlkX1Blcm11dGF0 aW9uX2M7CmV4dGVybiBpZCBpZF9TdHJpbmdfYzsKIyAzOCAiL3Vzci9sb2NhbC9zd2FybS9pbmNs dWRlL2NvbGxlY3Rpb25zL3R5cGVzLmgiIDIKIyAxMjIxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1 ZGUvY29sbGVjdGlvbnMuaCIgMgojIDI3ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZp dHkuaCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9leHRlcm52YXIuaCIgMQojIDI4 ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIgMgoKQHByb3RvY29sIERlZmF1 bHRPcmRlcgojIDc1ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9D cmVhdGluZzsKLSBfSV9TZXR0aW5nOwotIHNldERlZmF1bHRPcmRlcjogKGlkIDxTeW1ib2w+KWFT eW1ib2w7Ci0gX0lfVXNpbmc7Ci0gKGlkIDxTeW1ib2w+KWdldERlZmF1bHRPcmRlcjsKQGVuZAoK CkBwcm90b2NvbCBBY3Rpdml0eSA8RGVmaW5lZE9iamVjdCwgRHJvcCwgUkVUVVJOQUJMRT4KIyAx MjYgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgotIF9JX1VzaW5nOwoKCgoK Ci0gKGlkIDxTeW1ib2w+KXJ1bjsKCgoKLSAodm9pZClzdG9wOwoKCgoKCgoKLSAodm9pZCl0ZXJt aW5hdGU7CgoKCgotIChpZCA8U3ltYm9sPiluZXh0QWN0aW9uOwoKCi0gKGlkIDxTeW1ib2w+KXN0 ZXBBY3Rpb247CgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBl cnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgODYKCgoKLSAoaWQgPFN5bWJvbD4pZ2V0 U3RhdHVzOwojIDE2NyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiCi0gKGlk IDxTeW1ib2w+KWdldEhvbGRUeXBlOwoKCi0gZ2V0QWN0aW9uOwoKCi0gZ2V0QWN0aW9uVHlwZTsK CgotICh2b2lkKXNldE93bmVyQWN0aXZpdHk6IG93bmVyQWN0aXZpdHk7CgoKLSBnZXRPd25lckFj dGl2aXR5OwoKCi0gZ2V0U3ViYWN0aXZpdGllczsKCgotIGdldENvbnRyb2xsaW5nQWN0aXZpdHk7 CgoKLSBnZXRUb3BMZXZlbEFjdGl2aXR5OwoKCi0gZ2V0U3dhcm1BY3Rpdml0eTsKCgotIGdldFNj aGVkdWxlQWN0aXZpdHk7CgoKLSBzZXRTZXJpYWxNb2RlOiAoQk9PTClzZXJpYWxNb2RlOwoKCi0g KEJPT0wpZ2V0U2VyaWFsTW9kZTsKCgotIChpZCA8QWN0aXZpdHk+KWdldEN1cnJlbnRTdWJhY3Rp dml0eTsKQGVuZAoKCmV4dGVybiBpZCA8U3ltYm9sPiBJbml0aWFsaXplZCwgUnVubmluZywgSG9s ZGluZywgUmVsZWFzZWQsIFN0b3BwZWQsCiAgVGVybWluYXRlZCwgQ29tcGxldGVkOwoKQHByb3Rv Y29sIEFjdGlvbiA8Q3JlYXRlLCBEcm9wLCBHZXRPd25lcj4KIyAyNDIgIi91c3IvbG9jYWwvc3dh cm0vaW5jbHVkZS9hY3Rpdml0eS5oIgotIF9JX1VzaW5nOwotICh2b2lkKV9wZXJmb3JtQWN0aW9u XzogKGlkIDxBY3Rpdml0eT4pYWN0aXZpdHk7CkBlbmQKCkBwcm90b2NvbCBBY3Rpb25BcmdzCgoK CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAg ICAgICAgICAgICAgICBQYWdlICAgODcKCgoKCgoKLSBfSV9DcmVhdGluZzsKLSAodm9pZClzZXRB cmcxOiBhcmcxOwotICh2b2lkKXNldEFyZzI6IGFyZzI7Ci0gKHZvaWQpc2V0QXJnMzogYXJnMzsK LSBfSV9Vc2luZzsKLSAodW5zaWduZWQpZ2V0TkFyZ3M7Ci0gZ2V0QXJnMTsKLSBnZXRBcmcyOwot IGdldEFyZzM7CkBlbmQKCkBwcm90b2NvbCBGQWN0aW9uIDxBY3Rpb24sIFJFVFVSTkFCTEU+CgoK LSBfSV9DcmVhdGluZzsKLSBzZXRDYWxsOiBmY2FsbDsKLSBfSV9TZXR0aW5nOwotIHNldEF1dG9E cm9wOiAoQk9PTClhdXRvRHJvcDsKLSBfSV9Vc2luZzsKQGVuZAoKQHByb3RvY29sIEFjdGlvblRh cmdldAoKCi0gX0lfQ3JlYXRpbmc7Ci0gKHZvaWQpc2V0VGFyZ2V0OiB0YXJnZXQ7Ci0gX0lfVXNp bmc7Ci0gZ2V0VGFyZ2V0OwpAZW5kCgpAcHJvdG9jb2wgQWN0aW9uU2VsZWN0b3IKCgotIF9JX1Nl dHRpbmc7Ci0gKHZvaWQpc2V0TWVzc2FnZVNlbGVjdG9yOiAoU0VMKWFTZWw7Ci0gX0lfVXNpbmc7 Ci0gKFNFTClnZXRNZXNzYWdlU2VsZWN0b3I7CkBlbmQKCkBwcm90b2NvbCBBY3Rpb25UbyA8QWN0 aW9uLCBBY3Rpb25UYXJnZXQsIEFjdGlvblNlbGVjdG9yLCBBY3Rpb25BcmdzLCBSRVRVUk5BQkxF PgoKCkBlbmQKCkBwcm90b2NvbCBBY3Rpb25Gb3JFYWNoIDxBY3Rpb25UbywgRGVmYXVsdE9yZGVy LCBSRVRVUk5BQkxFPgoKCkBlbmQKCkBwcm90b2NvbCBBY3Rpb25Gb3JFYWNoSG9tb2dlbmVvdXMg PEFjdGlvbiwgQWN0aW9uVGFyZ2V0LCBBY3Rpb25TZWxlY3RvciwgRGVmYXVsdE9yZGVyLCBSRVRV Uk5BQkxFPgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNv bi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgODgKCgpAZW5kCgpAcHJvdG9jb2wgRkFjdGlv bkZvckVhY2ggPEZBY3Rpb24sIEFjdGlvblRhcmdldCwgRGVmYXVsdE9yZGVyPgoKCkBlbmQKCkBw cm90b2NvbCBGQWN0aW9uRm9yRWFjaEhldGVyb2dlbmVvdXMgPEZBY3Rpb25Gb3JFYWNoLCBSRVRV Uk5BQkxFPgoKCkBlbmQKCkBwcm90b2NvbCBGQWN0aW9uRm9yRWFjaEhvbW9nZW5lb3VzIDxGQWN0 aW9uRm9yRWFjaCwgUkVUVVJOQUJMRT4KCgoKCgpAZW5kCgpAcHJvdG9jb2wgQWN0aW9uQ2FsbCA8 QWN0aW9uLCBBY3Rpb25BcmdzLCBSRVRVUk5BQkxFPgoKCi0gX0lfQ3JlYXRpbmc7Ci0gKHZvaWQp c2V0RnVuY3Rpb25Qb2ludGVyOiAoZnVuY190KWZwdHI7Ci0gX0lfVXNpbmc7Ci0gKGZ1bmNfdCln ZXRGdW5jdGlvblBvaW50ZXI7CkBlbmQKCkBwcm90b2NvbCBBY3Rpb25DaGFuZ2VkIDxBY3Rpb24s IFJFVFVSTkFCTEU+CgoKQGVuZAoKQHByb3RvY29sIEZBY3Rpb25DcmVhdGluZwoKCi0gX0lfVXNp bmc7Ci0gKGlkIDxGQWN0aW9uPiljcmVhdGVGQWN0aW9uOiAoaWQgPEZDYWxsPiljYWxsOwpAZW5k CgpAcHJvdG9jb2wgQWN0aW9uQ3JlYXRpbmdDYWxsCgoKCgoKCgotIF9JX1VzaW5nOwotIChpZCA8 QWN0aW9uQ2FsbD4pY3JlYXRlQWN0aW9uQ2FsbDogKGZ1bmNfdClmcHRyOwotIChpZCA8QWN0aW9u Q2FsbD4pY3JlYXRlQWN0aW9uQ2FsbDogKGZ1bmNfdClmcHRyIDogYXJnMTsKLSAoaWQgPEFjdGlv bkNhbGw+KWNyZWF0ZUFjdGlvbkNhbGw6IChmdW5jX3QpZnB0ciA6IGFyZzEgOiBhcmcyOwotIChp ZCA8QWN0aW9uQ2FsbD4pY3JlYXRlQWN0aW9uQ2FsbDogKGZ1bmNfdClmcHRyIDogYXJnMSA6IGFy ZzIgOiBhcmczOwpAZW5kCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAg ICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDg5CgoKQHByb3RvY29sIEFjdGlv bkNyZWF0aW5nVG8KIyAzODQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgot IF9JX1VzaW5nOwotIChpZCA8QWN0aW9uVG8+KWNyZWF0ZUFjdGlvblRvOiB0YXJnZXQgbWVzc2Fn ZTogKFNFTClhU2VsOwotIChpZCA8QWN0aW9uVG8+KWNyZWF0ZUFjdGlvblRvOiB0YXJnZXQgbWVz c2FnZTogKFNFTClhU2VsIDogYXJnMTsKLSAoaWQgPEFjdGlvblRvPiljcmVhdGVBY3Rpb25Ubzog dGFyZ2V0IG1lc3NhZ2U6IChTRUwpYVNlbCA6IGFyZzEgOiBhcmcyOwotIChpZCA8QWN0aW9uVG8+ KWNyZWF0ZUFjdGlvblRvOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsIDogYXJnMSA6IGFyZzIg OiBhcmczOwpAZW5kCgpAcHJvdG9jb2wgQWN0aW9uQ3JlYXRpbmdGb3JFYWNoCiMgNDAyICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9Vc2luZzsKLSAoaWQgPEFjdGlv bkZvckVhY2hIb21vZ2VuZW91cz4pY3JlYXRlQWN0aW9uRm9yRWFjaEhvbW9nZW5lb3VzOiB0YXJn ZXQgbWVzc2FnZTogKFNFTClhU2VsOwoKLSAoaWQgPEFjdGlvbkZvckVhY2g+KWNyZWF0ZUFjdGlv bkZvckVhY2g6IHRhcmdldCBtZXNzYWdlOiAoU0VMKWFTZWw7Ci0gKGlkIDxBY3Rpb25Gb3JFYWNo PiljcmVhdGVBY3Rpb25Gb3JFYWNoOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsIDogYXJnMTsK LSAoaWQgPEFjdGlvbkZvckVhY2g+KWNyZWF0ZUFjdGlvbkZvckVhY2g6IHRhcmdldCBtZXNzYWdl OiAoU0VMKWFTZWwgOiBhcmcxIDogYXJnMjsKLSAoaWQgPEFjdGlvbkZvckVhY2g+KWNyZWF0ZUFj dGlvbkZvckVhY2g6IHRhcmdldCBtZXNzYWdlOiAoU0VMKWFTZWwgOiBhcmcxIDogYXJnMiA6IGFy ZzM7CkBlbmQKCkBwcm90b2NvbCBGQWN0aW9uQ3JlYXRpbmdGb3JFYWNoSGV0ZXJvZ2VuZW91cwoK CgoKCi0gX0lfVXNpbmc7Ci0gKGlkIDxGQWN0aW9uRm9yRWFjaEhldGVyb2dlbmVvdXM+KWNyZWF0 ZUZBY3Rpb25Gb3JFYWNoSGV0ZXJvZ2VuZW91czogdGFyZ2V0IGNhbGw6IChpZCA8RkNhbGw+KWNh bGw7CkBlbmQKCkBwcm90b2NvbCBGQWN0aW9uQ3JlYXRpbmdGb3JFYWNoSG9tb2dlbmVvdXMKCgoK CgotIF9JX1VzaW5nOwotIChpZCA8RkFjdGlvbkZvckVhY2hIb21vZ2VuZW91cz4pY3JlYXRlRkFj dGlvbkZvckVhY2hIb21vZ2VuZW91czogdGFyZ2V0IGNhbGw6IChpZCA8RkNhbGw+KWNhbGw7CkBl bmQKCkBwcm90b2NvbCBBY3Rpb25DcmVhdGluZyA8RkFjdGlvbkNyZWF0aW5nLCBBY3Rpb25DcmVh dGluZ0NhbGwsIEFjdGlvbkNyZWF0aW5nVG8sIEFjdGlvbkNyZWF0aW5nRm9yRWFjaCwgRkFjdGlv bkNyZWF0aW5nRm9yRWFjaEhldGVyb2dlbmVvdXMsIEZBY3Rpb25DcmVhdGluZ0ZvckVhY2hIb21v Z2VuZW91cz4KIyA0NjIgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgotIF9J X1VzaW5nOwoKCgoKLSBjcmVhdGVBY3Rpb246IGFuQWN0aW9uVHlwZTsKCkBlbmQKCgpleHRlcm4g aWQgPFN5bWJvbD4gQ29uY3VycmVudCwgU2VxdWVudGlhbCwgUmFuZG9taXplZDsKIyA0OTMgIi91 c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg dGltZXZhbF90OwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVy c29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgICA5MAoKCgoKQHByb3RvY29sIEFjdGl2aXR5 SW5kZXggPEluZGV4LCBSRVRVUk5BQkxFPgoKCi0gX0lfVXNpbmc7Ci0gKGlkIDxTeW1ib2w+KWdl dEhvbGRUeXBlOwotIChpZCA8QWN0aW9uPiluZXh0QWN0aW9uOiAoaWQgKilzdGF0dXM7CkBlbmQK CgpleHRlcm4gaWQgPFN5bWJvbD4gSG9sZFN0YXJ0LCBIb2xkRW5kOwoKQHByb3RvY29sIEFjdGlv blR5cGUKIyA1MzEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgotIF9JX1Vz aW5nOwojIDU1MSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiCi0gKGlkIDxB Y3Rpdml0eT4pYWN0aXZhdGVJbjogc3dhcm1Db250ZXh0OwpAZW5kCgpAcHJvdG9jb2wgU3luY2hy b25pemF0aW9uVHlwZQojIDU2OSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5Lmgi Ci0gX0lfQ3JlYXRpbmc7Ci0gKHZvaWQpc2V0U3luY2hyb25pemF0aW9uVHlwZTogYVNjaGVkdWxl VHlwZTsKCi0gX0lfVXNpbmc7Ci0gZ2V0U3luY2hyb25pemF0aW9uVHlwZTsKQGVuZAoKQHByb3Rv Y29sIEF1dG9Ecm9wCiMgNTk2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIK LSBfSV9DcmVhdGluZzsKLSBzZXRBdXRvRHJvcDogKEJPT0wpYXV0b0Ryb3A7Ci0gX0lfVXNpbmc7 Ci0gKEJPT0wpZ2V0QXV0b0Ryb3A7CkBlbmQKCkBwcm90b2NvbCBDb21wb3VuZEFjdGlvbiA8QWN0 aW9uVHlwZSwgQ29sbGVjdGlvbiwgQXV0b0Ryb3AsIERlZmF1bHRPcmRlcj4KIyA2MTMgIi91c3Iv bG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgpAZW5kCgpAcHJvdG9jb2wgQWN0aW9uR3Jv dXAgPENvbXBvdW5kQWN0aW9uLCBBY3Rpb25DcmVhdGluZywgRGVmYXVsdE9yZGVyLCBDUkVBVEFC TEU+CiMgNjM0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKQGVuZAoKQHBy b3RvY29sIEFjdGlvbkNvbmN1cnJlbnQgPEFjdGlvbiwgUkVUVVJOQUJMRT4KLSBfSV9Vc2luZzsK CgotIChpZCA8QWN0aW9uR3JvdXA+KWdldENvbmN1cnJlbnRHcm91cDsKQGVuZAoKQHByb3RvY29s IFJlbGF0aXZlVGltZQoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAg ICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDkxCgoKCgoKLSBfSV9TZXR0aW5n OwotIHNldFJlbGF0aXZlVGltZTogKEJPT0wpcmVsYXRpdmVUaW1lOwotIF9JX1VzaW5nOwotIChC T09MKWdldFJlbGF0aXZlVGltZTsKQGVuZAoKQHByb3RvY29sIFJlcGVhdEludGVydmFsCiMgNjcx ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9TZXR0aW5nOwotIHNl dFJlcGVhdEludGVydmFsOiAodGltZXZhbF90KXJlcGVhdEludGVydmFsOwotIF9JX1VzaW5nOwot ICh0aW1ldmFsX3QpZ2V0UmVwZWF0SW50ZXJ2YWw7CkBlbmQKCkBwcm90b2NvbCBDb25jdXJyZW50 R3JvdXBUeXBlCiMgNzA2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBf SV9TZXR0aW5nOwotICh2b2lkKXNldENvbmN1cnJlbnRHcm91cFR5cGU6IGdyb3VwVHlwZTsKLSBf SV9Vc2luZzsKLSBnZXRDb25jdXJyZW50R3JvdXBUeXBlOwpAZW5kCgpAcHJvdG9jb2wgU2luZ2xl dG9uR3JvdXBzCiMgNzI4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBf SV9TZXR0aW5nOwotICh2b2lkKXNldFNpbmdsZXRvbkdyb3VwczogKEJPT0wpc2luZ2xldG9uR3Jv dXBzOwotIF9JX1VzaW5nOwotIChCT09MKWdldFNpbmdsZXRvbkdyb3VwczsKQGVuZAoKQHByb3Rv Y29sIFNjaGVkdWxlIDxNYXAsIENvbXBvdW5kQWN0aW9uLCBBY3Rpb25DcmVhdGluZywgUmVsYXRp dmVUaW1lLCBSZXBlYXRJbnRlcnZhbCwgQ29uY3VycmVudEdyb3VwVHlwZSwgU2luZ2xldG9uR3Jv dXBzLCBDUkVBVEFCTEU+CiMgNzYzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHku aCIKLSBfSV9DcmVhdGluZzsKCisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNldFJlcGVhdElu dGVydmFsOiAodGltZXZhbF90KXJwdEludGVydmFsOwoKCisgY3JlYXRlOiAoaWQgPFpvbmU+KWFa b25lIHNldEF1dG9Ecm9wOiAoQk9PTClhdXRvRHJvcDsKCgoKLSBzZXRLZWVwRW1wdHlGbGFnOiAo Qk9PTClrZWVwRW1wdHlGbGFnOwotIF9JX1VzaW5nOwotIGF0OiAodGltZXZhbF90KXRWYWwgY3Jl YXRlQWN0aW9uOiBhbkFjdGlvblR5cGU7CgotIChpZCA8RkFjdGlvbj4pYXQ6ICh0aW1ldmFsX3Qp dFZhbCBjcmVhdGVGQWN0aW9uOiAoaWQgPEZDYWxsPiljYWxsOwotIChpZCA8QWN0aW9uQ2FsbD4p YXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVBY3Rpb25DYWxsOiAoZnVuY190KWZwdHI7Ci0gKGlk IDxBY3Rpb25DYWxsPilhdDogKHRpbWV2YWxfdCl0VmFsIGNyZWF0ZUFjdGlvbkNhbGw6IChmdW5j X3QpZnB0cjphcmcxOwotIChpZCA8QWN0aW9uQ2FsbD4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVh dGVBY3Rpb25DYWxsOiAoZnVuY190KWZwdHI6YXJnMTphcmcyOwotIChpZCA8QWN0aW9uQ2FsbD4p YXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVBY3Rpb25DYWxsOiAoZnVuY190KWZwdHI6YXJnMTph cmcyOmFyZzM7CgotIChpZCA8QWN0aW9uVG8+KWF0OiAodGltZXZhbF90KXRWYWwgY3JlYXRlQWN0 aW9uVG86IHRhcmdldCBtZXNzYWdlOiAoU0VMKWFTZWw7Ci0gKGlkIDxBY3Rpb25Ubz4pYXQ6ICh0 aW1ldmFsX3QpdFZhbCBjcmVhdGVBY3Rpb25UbzogdGFyZ2V0IG1lc3NhZ2U6IChTRUwpYVNlbDph cmcxOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkg ICAgICAgICAgICAgICAgICAgUGFnZSAgIDkyCgoKLSAoaWQgPEFjdGlvblRvPilhdDogKHRpbWV2 YWxfdCl0VmFsIGNyZWF0ZUFjdGlvblRvOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsOmFyZzE6 YXJnMjsKLSAoaWQgPEFjdGlvblRvPilhdDogKHRpbWV2YWxfdCl0VmFsIGNyZWF0ZUFjdGlvblRv OiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsOmFyZzE6YXJnMjphcmczOwoKLSAoaWQgPEFjdGlv bkZvckVhY2hIb21vZ2VuZW91cz4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVBY3Rpb25Gb3JF YWNoSG9tb2dlbmVvdXM6IHRhcmdldCBtZXNzYWdlOiAoU0VMKWFTZWw7CgotIChpZCA8QWN0aW9u Rm9yRWFjaD4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVBY3Rpb25Gb3JFYWNoOiB0YXJnZXQg bWVzc2FnZTogKFNFTClhU2VsOwotIChpZCA8QWN0aW9uRm9yRWFjaD4pYXQ6ICh0aW1ldmFsX3Qp dFZhbCBjcmVhdGVBY3Rpb25Gb3JFYWNoOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsOmFyZzE7 Ci0gKGlkIDxBY3Rpb25Gb3JFYWNoPilhdDogKHRpbWV2YWxfdCl0VmFsIGNyZWF0ZUFjdGlvbkZv ckVhY2g6IHRhcmdldCBtZXNzYWdlOiAoU0VMKWFTZWw6YXJnMTphcmcyOwotIChpZCA8QWN0aW9u Rm9yRWFjaD4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVBY3Rpb25Gb3JFYWNoOiB0YXJnZXQg bWVzc2FnZTogKFNFTClhU2VsOmFyZzE6YXJnMjphcmczOwoKLSAoaWQgPEZBY3Rpb25Gb3JFYWNo SGV0ZXJvZ2VuZW91cz4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVGQWN0aW9uRm9yRWFjaEhl dGVyb2dlbmVvdXM6IHRhcmdldCBjYWxsOiAoaWQgPEZDYWxsPiljYWxsOwotIChpZCA8RkFjdGlv bkZvckVhY2hIb21vZ2VuZW91cz4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVGQWN0aW9uRm9y RWFjaEhvbW9nZW5lb3VzOiB0YXJnZXQgY2FsbDogKGlkIDxGQ2FsbD4pY2FsbDsKCgoKLSByZW1v dmU6IGFuQWN0aW9uOwoKCi0gKGlkIDxBY3Rpb25Hcm91cD4paW5zZXJ0R3JvdXA6ICh0aW1ldmFs X3QpdFZhbDsKQGVuZAoKQHByb3RvY29sIFNjaGVkdWxlQWN0aXZpdHkgPEFjdGl2aXR5LCBSRVRV Uk5BQkxFPgoKCi0gX0lfQ3JlYXRpbmc7Ci0gX0lfVXNpbmc7CgotICh0aW1ldmFsX3QpZ2V0Q3Vy cmVudFRpbWU7CgoKLSBzdGVwVW50aWw6ICh0aW1ldmFsX3QpdFZhbDsKQGVuZAoKQHByb3RvY29s IFN3YXJtQWN0aXZpdHkgPFNjaGVkdWxlQWN0aXZpdHksIFJFVFVSTkFCTEU+CgoKCi0gX0lfVXNp bmc7CgotIGdldFN3YXJtOwoKLSAoaWQgPFNjaGVkdWxlPilnZXRTeW5jaHJvbml6YXRpb25TY2hl ZHVsZTsKQGVuZAoKQHByb3RvY29sIEZvckVhY2hBY3Rpdml0eSA8QWN0aXZpdHksIFJFVFVSTkFC TEU+CgoKCi0gX0lfVXNpbmc7Ci0gZ2V0Q3VycmVudE1lbWJlcjsKQGVuZAoKQHByb3RvY29sIFN3 YXJtUHJvY2VzcyA8QWN0aW9uVHlwZSwgWm9uZSwgU3luY2hyb25pemF0aW9uVHlwZT4KIyA4NTAg Ii91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgotIF9JX0NyZWF0aW5nOwoKCgoK CgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAg ICAgICAgICAgIFBhZ2UgICA5MwoKCgoKCgoKCi0gc2V0SW50ZXJuYWxab25lVHlwZTogYVpvbmVU eXBlOwoKLSBfSV9Vc2luZzsKCgoKCgotIGdldEludGVybmFsWm9uZTsKCgoKCgotIChpZCA8U3dh cm1BY3Rpdml0eT4pZ2V0QWN0aXZpdHk7CkBlbmQKIyA5MjQgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9hY3Rpdml0eS5oIgpAcHJvdG9jb2wgR2V0U3ViYWN0aXZpdHlBY3Rpb24KCgoKLSBfSV9V c2luZzsKLSBfZ2V0U3ViYWN0aXZpdHlBY3Rpb25fOwpAZW5kCgoKCgoKZXh0ZXJuIGlkIF9hY3Rp dml0eV9jdXJyZW50OwoKCgpleHRlcm4gaWQgX2FjdGl2aXR5X2NvbnRleHRfZXJyb3IgKGNvbnN0 IGNoYXIgKm1hY3JvTmFtZSk7CgoKQHByb3RvY29sIENvbmN1cnJlbnRHcm91cCA8QWN0aW9uR3Jv dXAsIFJFVFVSTkFCTEU+CgoKLSBfSV9Vc2luZzsKLSAodm9pZClfc2V0QWN0aW9uQ29uY3VycmVu dF86IGFjdGlvbjsKLSBfZ2V0RW1wdHlBY3Rpb25Db25jdXJyZW50XzsKQGVuZAoKQHByb3RvY29s IENvbmN1cnJlbnRTY2hlZHVsZSA8Q29uY3VycmVudEdyb3VwLCBTY2hlZHVsZSwgQ1JFQVRBQkxF PgoKCkBlbmQKCkBwcm90b2NvbCBBY3RpdmF0aW9uT3JkZXIgPEFjdGlvbkdyb3VwLCBSRVRVUk5B QkxFPgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkg ICAgICAgICAgICAgICAgICAgUGFnZSAgIDk0CgoKCgotIF9JX1VzaW5nOwoKLSAodm9pZClhZGRM YXN0OiBtZXJnZUFjdGlvbjsKCgoKLSByZW1vdmU6IG1lcmdlQWN0aW9uOwoKQGVuZAoKCmV4dGVy biBpZCA8RXJyb3I+IEludmFsaWRTd2FybVpvbmU7CgoKCmV4dGVybiBpZCBfYWN0aXZpdHlfem9u ZTsKIyA5ODUgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgpleHRlcm4gQk9P TCAoKl9hY3Rpdml0eV90cmFjZSkgKGlkKTsKIyA5OTggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9hY3Rpdml0eS5oIgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS90eXBl cy5oIiAxCmV4dGVybiB2b2lkICpfYWN0aXZpdHlfW107CgpleHRlcm4gaWQgRGVmYXVsdE9yZGVy OwpleHRlcm4gaWQgQWN0aXZpdHk7CmV4dGVybiBpZCBBY3Rpb247CmV4dGVybiBpZCBBY3Rpb25B cmdzOwpleHRlcm4gaWQgRkFjdGlvbjsKZXh0ZXJuIGlkIEFjdGlvblRhcmdldDsKZXh0ZXJuIGlk IEFjdGlvblNlbGVjdG9yOwpleHRlcm4gaWQgQWN0aW9uVG87CmV4dGVybiBpZCBBY3Rpb25Gb3JF YWNoOwpleHRlcm4gaWQgQWN0aW9uRm9yRWFjaEhvbW9nZW5lb3VzOwpleHRlcm4gaWQgRkFjdGlv bkZvckVhY2g7CmV4dGVybiBpZCBGQWN0aW9uRm9yRWFjaEhldGVyb2dlbmVvdXM7CmV4dGVybiBp ZCBGQWN0aW9uRm9yRWFjaEhvbW9nZW5lb3VzOwpleHRlcm4gaWQgQWN0aW9uQ2FsbDsKZXh0ZXJu IGlkIEFjdGlvbkNoYW5nZWQ7CmV4dGVybiBpZCBGQWN0aW9uQ3JlYXRpbmc7CmV4dGVybiBpZCBB Y3Rpb25DcmVhdGluZ0NhbGw7CmV4dGVybiBpZCBBY3Rpb25DcmVhdGluZ1RvOwpleHRlcm4gaWQg QWN0aW9uQ3JlYXRpbmdGb3JFYWNoOwpleHRlcm4gaWQgRkFjdGlvbkNyZWF0aW5nRm9yRWFjaEhl dGVyb2dlbmVvdXM7CmV4dGVybiBpZCBGQWN0aW9uQ3JlYXRpbmdGb3JFYWNoSG9tb2dlbmVvdXM7 CmV4dGVybiBpZCBBY3Rpb25DcmVhdGluZzsKZXh0ZXJuIGlkIEFjdGl2aXR5SW5kZXg7CmV4dGVy biBpZCBBY3Rpb25UeXBlOwpleHRlcm4gaWQgU3luY2hyb25pemF0aW9uVHlwZTsKZXh0ZXJuIGlk IEF1dG9Ecm9wOwpleHRlcm4gaWQgQ29tcG91bmRBY3Rpb247CmV4dGVybiBpZCBBY3Rpb25Hcm91 cDsKZXh0ZXJuIGlkIEFjdGlvbkNvbmN1cnJlbnQ7CmV4dGVybiBpZCBSZWxhdGl2ZVRpbWU7CmV4 dGVybiBpZCBSZXBlYXRJbnRlcnZhbDsKZXh0ZXJuIGlkIENvbmN1cnJlbnRHcm91cFR5cGU7CgoK CgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAg ICAgICAgICAgICBQYWdlICAgOTUKCgpleHRlcm4gaWQgU2luZ2xldG9uR3JvdXBzOwpleHRlcm4g aWQgU2NoZWR1bGU7CmV4dGVybiBpZCBTY2hlZHVsZUFjdGl2aXR5OwpleHRlcm4gaWQgU3dhcm1B Y3Rpdml0eTsKZXh0ZXJuIGlkIEZvckVhY2hBY3Rpdml0eTsKZXh0ZXJuIGlkIFN3YXJtUHJvY2Vz czsKZXh0ZXJuIGlkIEdldFN1YmFjdGl2aXR5QWN0aW9uOwpleHRlcm4gaWQgQ29uY3VycmVudEdy b3VwOwpleHRlcm4gaWQgQ29uY3VycmVudFNjaGVkdWxlOwpleHRlcm4gaWQgQWN0aXZhdGlvbk9y ZGVyOwoKCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5L2NsYXNzZXMuaCIg MQpleHRlcm4gaWQgaWRfQ0FjdGlvbjsKZXh0ZXJuIGlkIGlkX1BBY3Rpb247CmV4dGVybiBpZCBp ZF9QRkFjdGlvbjsKZXh0ZXJuIGlkIGlkX0ZBY3Rpb25fYzsKZXh0ZXJuIGlkIGlkX0FjdGlvbkNh bGxfYzsKZXh0ZXJuIGlkIGlkX0FjdGlvblRvX2M7CmV4dGVybiBpZCBpZF9BY3Rpb25Gb3JFYWNo X2M7CmV4dGVybiBpZCBpZF9BY3Rpb25Gb3JFYWNoSG9tb2dlbmVvdXNfYzsKZXh0ZXJuIGlkIGlk X0ZBY3Rpb25Gb3JFYWNoSGV0ZXJvZ2VuZW91c19jOwpleHRlcm4gaWQgaWRfRkFjdGlvbkZvckVh Y2hIb21vZ2VuZW91c19jOwpleHRlcm4gaWQgaWRfQWN0aW9uR3JvdXBfYzsKZXh0ZXJuIGlkIGlk X0NvbmN1cnJlbnRHcm91cF9jOwpleHRlcm4gaWQgaWRfR3JvdXBBY3Rpdml0eV9jOwpleHRlcm4g aWQgaWRfR3JvdXBJbmRleF9jOwpleHRlcm4gaWQgaWRfR3JvdXBQZXJtdXRlZEluZGV4X2M7CmV4 dGVybiBpZCBpZF9Gb3JFYWNoQWN0aXZpdHlfYzsKZXh0ZXJuIGlkIGlkX0ZvckVhY2hJbmRleF9j OwpleHRlcm4gaWQgaWRfQWN0aW9uVHlwZV9jOwpleHRlcm4gaWQgaWRfQ29tcG91bmRBY3Rpb25f YzsKZXh0ZXJuIGlkIGlkX1NjaGVkdWxlX2M7CmV4dGVybiBpZCBpZF9BY3Rpb25Db25jdXJyZW50 X2M7CmV4dGVybiBpZCBpZF9Db25jdXJyZW50U2NoZWR1bGVfYzsKZXh0ZXJuIGlkIGlkX0FjdGl2 YXRpb25PcmRlcl9jOwpleHRlcm4gaWQgaWRfU2NoZWR1bGVBY3Rpdml0eV9jOwpleHRlcm4gaWQg aWRfU2NoZWR1bGVJbmRleF9jOwpleHRlcm4gaWQgaWRfQWN0aW9uQ2hhbmdlZF9jOwpleHRlcm4g aWQgaWRfQ1N3YXJtUHJvY2VzczsKZXh0ZXJuIGlkIGlkX1N3YXJtQWN0aXZpdHlfYzsKZXh0ZXJu IGlkIGlkX0FjdGlvbk1lcmdlX2M7CmV4dGVybiBpZCBpZF9BY3Rpdml0eV9jOwojIDQ4ICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkvdHlwZXMuaCIgMgojIDk5OSAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiIDIKIyAyMiAiL3Vzci9sb2NhbC9zd2FybS9pbmNs dWRlL29iamVjdGJhc2UuaCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9leHRlcm52 YXIuaCIgMQojIDIzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFzZS5oIiAyCgpA cHJvdG9jb2wgU3dhcm1PYmplY3QgPENyZWF0ZSwgRHJvcCwgQ1JFQVRBQkxFPgojIDM5ICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFzZS5oIgotIF9JX1VzaW5nOwoKCgotIGdldFBy b2JlTWFwOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24u bWkgICAgICAgICAgICAgICAgICAgUGFnZSAgIDk2CgoKCgoKLSBnZXRDb21wbGV0ZVByb2JlTWFw OwoKCgotIGdldFByb2JlRm9yVmFyaWFibGU6IChjb25zdCBjaGFyICopYVZhcmlhYmxlOwoKCgot IGdldFByb2JlRm9yTWVzc2FnZTogKGNvbnN0IGNoYXIgKilhTWVzc2FnZTsKQGVuZAoKQHByb3Rv Y29sIFByb2JlQ29uZmlnCgoKCgoKLSBfSV9Vc2luZzsKLSBzZXRPYmplY3RUb05vdGlmeTogYW5P YmplY3Q7Ci0gZ2V0T2JqZWN0VG9Ob3RpZnk7CkBlbmQKCkBwcm90b2NvbCBQcm9iZSA8U3dhcm1P YmplY3QsIFByb2JlQ29uZmlnPgojIDgxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0 YmFzZS5oIgotIF9JX0NyZWF0aW5nOwoKCi0gc2V0UHJvYmVkQ2xhc3M6IChDbGFzcyljbGFzczsK Ci0gc2V0UHJvYmVkT2JqZWN0OiBvYmplY3Q7Ci0gX0lfU2V0dGluZzsKCgoKLSBzZXRTYWZldHk7 CgoKCgotIHVuc2V0U2FmZXR5OwoKLSBfSV9Vc2luZzsKCgoKCgotIGNsb25lOiAoaWQgPFpvbmU+ KWFab25lOwoKCgotIChDbGFzcylnZXRQcm9iZWRDbGFzczsKCgoKCgoKCgoyMDAxLTA4LTI0IDAx OjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAg OTcKCgoKCgotIChjb25zdCBjaGFyICopZ2V0UHJvYmVkVHlwZTsKQGVuZAoKQHByb3RvY29sIFZh clByb2JlIDxQcm9iZSwgQ1JFQVRBQkxFPgoKCgoKCgotIF9JX0NyZWF0aW5nOwoKCgoKLSBzZXRQ cm9iZWRWYXJpYWJsZTogKGNvbnN0IGNoYXIgKilhVmFyaWFibGU7CgotIF9JX1NldHRpbmc7CgoK CgoKCgotIHNldE5vbkludGVyYWN0aXZlOwoKCgoKCgotIHNldFN0cmluZ1JldHVyblR5cGU6IHJl dHVyblR5cGU7CgoKCi0gc2V0RmxvYXRGb3JtYXQ6IChjb25zdCBjaGFyICopZm9ybWF0OwoKLSBf SV9Vc2luZzsKCgotIChjb25zdCBjaGFyICopZ2V0UHJvYmVkVmFyaWFibGU7CgoKCi0gKEJPT0wp Z2V0SW50ZXJhY3RpdmVGbGFnOwoKCi0gKHZvaWQgKilwcm9iZVJhdzogYW5PYmplY3Q7CgoKCi0g KHZvaWQgKilwcm9iZUFzUG9pbnRlcjogYW5PYmplY3Q7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAgOTgK CgoKCi0gcHJvYmVPYmplY3Q6IGFuT2JqZWN0OwoKCgotIChpbnQpcHJvYmVBc0ludDogYW5PYmpl Y3Q7CgoKCi0gKGRvdWJsZSlwcm9iZUFzRG91YmxlOiBhbk9iamVjdDsKCgoKLSAoY29uc3QgY2hh ciAqKXByb2JlQXNTdHJpbmc6IGFuT2JqZWN0IEJ1ZmZlcjogKGNoYXIgKilidWZmZXI7CgoKCi0g KGlkIDxTdHJpbmc+KXByb2JlQXNTdHJpbmc6IGFuT2JqZWN0OwoKCgoKCgotIChjb25zdCBjaGFy ICopcHJvYmVBc1N0cmluZzogYW5PYmplY3QKICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXI6 IChjaGFyICopYnVmCiAgICAgICAgICAgIHdpdGhGdWxsUHJlY2lzaW9uOiAoQk9PTClwcmVjaXNp b247CgoKLSAodW5zaWduZWQpZ2V0UmFuazsKCgotIChjb25zdCBjaGFyICopZ2V0QmFzZVR5cGU7 CgoKCi0gKHVuc2lnbmVkICopZ2V0RGltczsKCgoKLSBpdGVyYXRlQXNEb3VibGU6IGFuT2JqZWN0 IHVzaW5nOiAodm9pZCAoKikgKHVuc2lnbmVkIHJhbmssIHVuc2lnbmVkICp2ZWMsIGRvdWJsZSB2 YWwpKWZ1bmM7CgoKCi0gaXRlcmF0ZUFzSW50ZWdlcjogYW5PYmplY3QgdXNpbmc6ICh2b2lkICgq KSAodW5zaWduZWQgcmFuaywgdW5zaWduZWQgKnZlYywgaW50IHZhbCkpZnVuYzsKCgoKLSAodm9p ZClzZXREYXRhOiBhbk9iamVjdCBUbzogKHZvaWQgKiluZXdWYWx1ZTsKCgoKCgoKCgoKCgoKCjIw MDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAg ICAgIFBhZ2UgICA5OQoKCgotIChCT09MKXNldERhdGE6IGFuT2JqZWN0IFRvU3RyaW5nOiAoY29u c3QgY2hhciAqKXM7CgoKCi0gKHZvaWQpc2V0RGF0YTogYW5PYmplY3QgVG9Eb3VibGU6IChkb3Vi bGUpdmFsOwoKZXh0ZXJuIGlkIDxTeW1ib2w+IERlZmF1bHRTdHJpbmcsIENoYXJTdHJpbmcsIElu dFN0cmluZzsKQGVuZAoKQHByb3RvY29sIE1lc3NhZ2VQcm9iZSA8UHJvYmUsIENSRUFUQUJMRT4K CgoKCgoKCi0gX0lfQ3JlYXRpbmc7CgoKLSBzZXRQcm9iZWRTZWxlY3RvcjogKFNFTClhU2VsOwoK CgoKCi0gc2V0UHJvYmVkTWV0aG9kTmFtZTogKGNvbnN0IGNoYXIgKiltZXRob2ROYW1lOwoKCisg Y3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNldFByb2JlZFNlbGVjdG9yOiAoU0VMKWFTZWw7Cgot IF9JX1NldHRpbmc7CgoKCgotIHNldEhpZGVSZXN1bHQ6IChCT09MKXZhbDsKCi0gX0lfVXNpbmc7 CgoKLSAoQk9PTClpc1Jlc3VsdElkOwoKCgotIChCT09MKWlzQXJndW1lbnRJZDogKHVuc2lnbmVk KXdoaWNoOwoKCgotIChjb25zdCBjaGFyICopZ2V0UHJvYmVkTWVzc2FnZTsKCi0gKHVuc2lnbmVk KWdldEFyZ0NvdW50OwoKCi0gKHZhbF90KWdldEFyZzogKHVuc2lnbmVkKXdoaWNoOwoKCgoKCgoK MjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAg ICAgICAgUGFnZSAgMTAwCgoKCgoKLSAoY29uc3QgY2hhciAqKWdldEFyZ05hbWU6ICh1bnNpZ25l ZCl3aGljaDsKCgotIChCT09MKWdldEhpZGVSZXN1bHQ7CgoKCi0gc2V0QXJnOiAodW5zaWduZWQp d2hpY2ggVG9TdHJpbmc6IChjb25zdCBjaGFyICopd2hhdDsKCgoKCgotIHNldEFyZzogKHVuc2ln bmVkKXdoaWNoIFRvVW5zaWduZWQ6ICh1bnNpZ25lZCl4OwoKCgotICh2YWxfdClkeW5hbWljQ2Fs bE9uOiB0YXJnZXQ7CgoKCgotIChkb3VibGUpZG91YmxlRHluYW1pY0NhbGxPbjogdGFyZ2V0OwoK CgoKLSAobG9uZylsb25nRHluYW1pY0NhbGxPbjogdGFyZ2V0OwoKCgoKLSAoY29uc3QgY2hhciAq KXN0cmluZ0R5bmFtaWNDYWxsT246IHRhcmdldDsKCgoKCi0gb2JqZWN0RHluYW1pY0NhbGxPbjog dGFyZ2V0OwpAZW5kCgpAcHJvdG9jb2wgUHJvYmVNYXAgPFN3YXJtT2JqZWN0LCBQcm9iZUNvbmZp ZywgQ1JFQVRBQkxFPgojIDMzMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2Uu aCIKLSBfSV9DcmVhdGluZzsKCgoKLSBzZXRQcm9iZWRDbGFzczogKENsYXNzKWNsYXNzOwoKLSBz ZXRQcm9iZWRPYmplY3Q6IG9iamVjdDsKLSBfSV9Vc2luZzsKCi0gKHVuc2lnbmVkKWdldENvdW50 OwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAg ICAgICAgICAgICAgICAgIFBhZ2UgIDEwMQoKCgoKLSAoQ2xhc3MpZ2V0UHJvYmVkQ2xhc3M7CgoK CgotIGFkZFByb2JlOiAoaWQgPFByb2JlPilhUHJvYmU7CgoKCgotIGFkZFByb2JlTWFwOiBhUHJv YmVNYXA7CgoKCgoKLSBkcm9wUHJvYmVGb3JWYXJpYWJsZTogKGNvbnN0IGNoYXIgKilhVmFyaWFi bGU7CgoKCgotIGRyb3BQcm9iZUZvck1lc3NhZ2U6IChjb25zdCBjaGFyICopYU1lc3NhZ2U7CgoK CgoKLSBkcm9wUHJvYmVNYXA6IGFQcm9iZU1hcDsKCgoKLSAoaWQgPEluZGV4PiliZWdpbjogKGlk IDxab25lPilhWm9uZTsKCgoKCgoKLSBjbG9uZTogKGlkIDxab25lPilhWm9uZTsKCkBlbmQKCkBw cm90b2NvbCBTd2FybSA8U3dhcm1Qcm9jZXNzLCBDUkVBVEFCTEU+CgoKCgoKLSBfSV9Vc2luZzsK CgotIGJ1aWxkT2JqZWN0czsKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAg ICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgMTAyCgoKLSBidWlsZEFjdGlv bnM7CiMgNDA4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFzZS5oIgotIChpZCA8 QWN0aXZpdHk+KWFjdGl2YXRlSW46IHN3YXJtQ29udGV4dDsKCgoKLSAoaWQgPFByb2JlTWFwPiln ZXRQcm9iZU1hcDsKCgotIChpZCA8UHJvYmVNYXA+KWdldENvbXBsZXRlUHJvYmVNYXA7CgoKLSAo aWQgPFZhclByb2JlPilnZXRQcm9iZUZvclZhcmlhYmxlOiAoY29uc3QgY2hhciAqKWFWYXJpYWJs ZTsKQGVuZAoKQHByb3RvY29sIERlZmF1bHRQcm9iZU1hcCA8UHJvYmVNYXAsIENSRUFUQUJMRT4K CgoKCgoKCkBlbmQKCkBwcm90b2NvbCBDdXN0b21Qcm9iZU1hcCA8UHJvYmVNYXAsIENSRUFUQUJM RT4KIyA0NDMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmplY3RiYXNlLmgiCi0gX0lfQ3Jl YXRpbmc7CgoKCgoKKyBjcmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUgZm9yQ2xhc3M6IChDbGFzcylh Q2xhc3Mgd2l0aElkZW50aWZpZXJzOiAoY29uc3QgY2hhciAqKXZhcnMsIC4uLjsKLSBfSV9TZXR0 aW5nOwoKCi0gYWRkUHJvYmVzRm9yQ2xhc3M6IChDbGFzcykgYUNsYXNzCiAgICB3aXRoSWRlbnRp ZmllcnM6IChjb25zdCBjaGFyICopdmFycywgLi4uOwotIF9JX1VzaW5nOwpAZW5kCgpAcHJvdG9j b2wgRW1wdHlQcm9iZU1hcCA8Q3VzdG9tUHJvYmVNYXAsIENSRUFUQUJMRT4KCgoKCi0gX0lfQ3Jl YXRpbmc7CgorIGNyZWF0ZTogKGlkIDxab25lPilhWm9uZSBmb3JDbGFzczogKENsYXNzKWFDbGFz czsKQGVuZAoKQHByb3RvY29sIENvbXBsZXRlUHJvYmVNYXAgPFByb2JlTWFwLCBDUkVBVEFCTEU+ CgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAg ICAgICAgICAgICAgICAgICBQYWdlICAxMDMKCgoKCgoKQGVuZAoKQHByb3RvY29sIENvbXBsZXRl VmFyTWFwIDxQcm9iZU1hcCwgQ1JFQVRBQkxFPgoKCgoKCkBlbmQKCkBwcm90b2NvbCBQcm9iZUxp YnJhcnkgPENyZWF0ZSwgRHJvcCwgUHJvYmVDb25maWcsIENSRUFUQUJMRT4KIyA0OTggIi91c3Iv bG9jYWwvc3dhcm0vaW5jbHVkZS9vYmplY3RiYXNlLmgiCi0gX0lfVXNpbmc7CiMgNTA3ICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFzZS5oIgotIHNldERpc3BsYXlQcmVjaXNpb246 ICh1bnNpZ25lZCluU2lnRGlzcGxheTsKCgoKLSAodW5zaWduZWQpZ2V0RGlzcGxheVByZWNpc2lv bjsKCgoKCgoKCi0gc2V0U2F2ZWRQcmVjaXNpb246ICh1bnNpZ25lZCluU2lnU2F2ZWQ7CgoKCi0g KHVuc2lnbmVkKWdldFNhdmVkUHJlY2lzaW9uOwoKCgotIChCT09MKWlzUHJvYmVNYXBEZWZpbmVk Rm9yOiAoQ2xhc3MpYUNsYXNzOwotIChCT09MKWlzUHJvYmVNYXBEZWZpbmVkRm9yT2JqZWN0OiBh bk9iamVjdDsKCgoKCgoKLSAoaWQgPFByb2JlTWFwPilnZXRQcm9iZU1hcEZvcjogKENsYXNzKWFD bGFzczsKLSAoaWQgPFByb2JlTWFwPilnZXRQcm9iZU1hcEZvck9iamVjdDogYW5PYmplY3Q7CgoK CgoKLSAoaWQgPFByb2JlTWFwPilnZXRDb21wbGV0ZVByb2JlTWFwRm9yOiAoQ2xhc3MpYUNsYXNz OwotIChpZCA8UHJvYmVNYXA+KWdldENvbXBsZXRlUHJvYmVNYXBGb3JPYmplY3Q6IGFuT2JqZWN0 OwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAg ICAgICAgICAgICAgICAgIFBhZ2UgIDEwNAoKCgoKCi0gKGlkIDxQcm9iZU1hcD4pZ2V0Q29tcGxl dGVWYXJNYXBGb3I6IChDbGFzcylhQ2xhc3M7Ci0gKGlkIDxQcm9iZU1hcD4pZ2V0Q29tcGxldGVW YXJNYXBGb3JPYmplY3Q6IGFuT2JqZWN0OwoKCgoKCgotIChpZCA8VmFyUHJvYmU+KWdldFByb2Jl Rm9yVmFyaWFibGU6IChjb25zdCBjaGFyICopYVZhciBpbkNsYXNzOiAoQ2xhc3MpYUNsYXNzOwot IChpZCA8VmFyUHJvYmU+KWdldFByb2JlRm9yVmFyaWFibGU6IChjb25zdCBjaGFyICopYVZhciBp bk9iamVjdDogYW5PYmplY3Q7CgoKCgoKCi0gKGlkIDxNZXNzYWdlUHJvYmU+KWdldFByb2JlRm9y TWVzc2FnZTogKGNvbnN0IGNoYXIgKilhTWVzc2FnZSBpbkNsYXNzOiAoQ2xhc3MpYUNsYXNzOwot IChpZCA8TWVzc2FnZVByb2JlPilnZXRQcm9iZUZvck1lc3NhZ2U6IChjb25zdCBjaGFyICopYU1l c3NhZ2UgaW5PYmplY3Q6IGFuT2JqZWN0OwoKCgoKLSBzZXRQcm9iZU1hcDogKGlkIDxQcm9iZU1h cD4pYU1hcCBGb3I6IChDbGFzcylhQ2xhc3M7Ci0gc2V0UHJvYmVNYXA6IChpZCA8UHJvYmVNYXA+ KWFNYXAgRm9yT2JqZWN0OiBhbk9iamVjdDsKCkBlbmQKCgpleHRlcm4gaWQgPFByb2JlTGlicmFy eT4gcHJvYmVMaWJyYXJ5OwoKQHByb3RvY29sIEFjdGl2aXR5Q29udHJvbCA8U3dhcm1PYmplY3Qs IENSRUFUQUJMRT4KIyA1OTIgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmplY3RiYXNlLmgi Ci0gX0lfQ3JlYXRpbmc7CgotIF9JX1VzaW5nOwoKCgoKCi0gKHZvaWQpYXR0YWNoVG9BY3Rpdml0 eTogKGlkIDxTY2hlZHVsZUFjdGl2aXR5PilhbkFjdGl2aXR5OwoKCgoKCgoKLSAoaWQgPFN5bWJv bD4pcnVuQWN0aXZpdHk7CgoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAg ICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgMTA1CgoKCgotIChpZCA8U3lt Ym9sPilzdG9wQWN0aXZpdHk7CgoKCgoKCgotIChpZCA8U3ltYm9sPiluZXh0QWN0aW9uOwoKCgot IChpZCA8U3ltYm9sPilzdGVwQWN0aW9uOwoKCgoKCi0gKGlkIDxTeW1ib2w+KXN0ZXBVbnRpbDog KHRpbWV2YWxfdClzdG9wVGltZTsKCgoKCgotICh2b2lkKXVwZGF0ZVN0YXRlVmFyOwoKCi0gKGlk IDxTeW1ib2w+KWdldFN0YXR1czsKCgotICh2b2lkKXRlcm1pbmF0ZTsKCgotIChpZCA8U2NoZWR1 bGVBY3Rpdml0eT4pZ2V0QWN0aXZpdHk7CkBlbmQKCkBjbGFzcyBQcm9iZTsKQGNsYXNzIFZhclBy b2JlOwpAY2xhc3MgTWVzc2FnZVByb2JlOwpAY2xhc3MgUHJvYmVNYXA7CkBjbGFzcyBEZWZhdWx0 UHJvYmVNYXA7CkBjbGFzcyBDdXN0b21Qcm9iZU1hcDsKQGNsYXNzIEVtcHR5UHJvYmVNYXA7CkBj bGFzcyBDb21wbGV0ZVByb2JlTWFwOwpAY2xhc3MgQ29tcGxldGVWYXJNYXA7CkBjbGFzcyBQcm9i ZUxpYnJhcnk7CkBjbGFzcyBBY3Rpdml0eUNvbnRyb2w7CkBjbGFzcyBTd2FybTsKQGNsYXNzIFN3 YXJtT2JqZWN0OwoKCmV4dGVybiBjb25zdCBjaGFyICpzd2FybV92ZXJzaW9uOwojIDExICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFzZS9Td2FybU9iamVjdC5oIiAyCgoKCgoKCgoK MjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAg ICAgICAgUGFnZSAgMTA2CgoKQGludGVyZmFjZSBTd2FybU9iamVjdDogQ3JlYXRlRHJvcCA8U3dh cm1PYmplY3Q+CnsKfQoKLSBnZXRQcm9iZU1hcDsKLSBnZXRDb21wbGV0ZVByb2JlTWFwOwotIGdl dFByb2JlRm9yVmFyaWFibGU6IChjb25zdCBjaGFyICopYVZhcmlhYmxlOwotIGdldFByb2JlRm9y TWVzc2FnZTogKGNvbnN0IGNoYXIgKilhTWVzc2FnZTsKLSAodm9pZClldmVudE9jY3VycmVkT246 IGFuT2JqZWN0CiAgICAgICAgICAgICAgICAgICAgdmlhOiBhUHJvYmUKICAgICAgICAgIHdpdGhQ cm9iZVR5cGU6IChjb25zdCBjaGFyICopYVByb2JlVHlwZQogICAgICAgICAgICAgICAgICAgICBv bjogKGNvbnN0IGNoYXIgKilwcm9iZWRFbGVtZW50CiAgICAgICAgICAgICAgICAgb2ZUeXBlOiAo Y2hhcilkYXRhVHlwZQogICAgICAgICAgICAgICB3aXRoRGF0YTogKHZvaWQgKilkYXRhOwpAZW5k CiMgMTAgIlBlcnNvbi5oIiAyCgoKdHlwZWRlZiBlbnVtIHsKICBudWxsID0gMCwKICBoZWxsbyA9 IDEsCn0gdG9waWNfdHlwZTsKCgoKCkBpbnRlcmZhY2UgUGVyc29uOiBTd2FybU9iamVjdAp7CiAg aWQgd29ybGQ7CiAgZmxvYXQgdG9waWNzWzJdOwogIGludCB2YWx1ZTsKICBpZCBuYW1lOwp9CgoK LSBzdGVwOwoKCi0gc2V0V29ybGQ6IGw7CgoKLSBzZXRQZXJzb246IG4gVG9waWNfYXJyYXk6IChm bG9hdCAqKXQ7CgoKLSAoY29uc3QgY2hhciAqKWdldE5hbWU7CgoKLSBwcmludDsKCgotIHNwZWFr OiAodG9waWNfdHlwZSkgdG9waWMgVG9QZXJzb246IChpZCl0YXJnZXQ7CgoKLSBsb29rOwoKQGVu ZAoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAg ICAgICAgICAgICAgICAgUGFnZSAgMTA3CgoKIyAxMCAiUGVyc29uLm0iIDIKCiMgMSAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL3JhbmRvbS5oIiAxCiMgMjQgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9yYW5kb20uaCIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFzZS5o IiAxCiMgMjUgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9yYW5kb20uaCIgMgoKCkBwcm90b2Nv bCBJbnRlcm5hbFN0YXRlCiMgNDAgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9yYW5kb20uaCIK LSBfSV9Vc2luZzsKCi0gKHVuc2lnbmVkKWdldFN0YXRlU2l6ZTsKLSAodm9pZClwdXRTdGF0ZUlu dG86ICh2b2lkICopYnVmZmVyOwotICh2b2lkKXNldFN0YXRlRnJvbTogKHZvaWQgKilidWZmZXI7 Ci0gKHVuc2lnbmVkKWdldE1hZ2ljOwpAZW5kCgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9yYW5kb20vZ2VuZXJhdG9ycy5oIiAxCiMgMjggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9y YW5kb20vZ2VuZXJhdG9ycy5oIgpAcHJvdG9jb2wgQ29tbW9uR2VuZXJhdG9yCgotIF9JX0NyZWF0 aW5nOworIGNyZWF0ZVdpdGhEZWZhdWx0czogKGlkIDxab25lPilhWm9uZTsKCi0gX0lfU2V0dGlu ZzsKCgotIHNldFN0YXRlRnJvbVNlZWQ6ICh1bnNpZ25lZClzZWVkOwoKCgotIHNldFN0YXRlRnJv bVNlZWRzOiAodW5zaWduZWQgKilzZWVkczsKCgoKLSBzZXRBbnRpdGhldGljOiAoQk9PTCkgYW50 aVQ7CgotIF9JX1VzaW5nOwoKLSAoQk9PTClnZXRBbnRpdGhldGljOwoKCgotICh1bnNpZ25lZCln ZXRNYXhTZWVkVmFsdWU7CgoKCi0gKHVuc2lnbmVkICopZ2V0TWF4U2VlZFZhbHVlczsKCgoKLSAo dW5zaWduZWQpZ2V0SW5pdGlhbFNlZWQ7CgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAg ICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAxMDgKCgotICh1 bnNpZ25lZCAqKWdldEluaXRpYWxTZWVkczsKCgoKLSAodW5zaWduZWQpbGVuZ3RoT2ZTZWVkVmVj dG9yOwoKCgotIHJlc2V0OwoKCgotICh1bnNpZ25lZClnZXRVbnNpZ25lZE1heDsKQGVuZAoKQHBy b3RvY29sIFNpbXBsZUdlbmVyYXRvcgoKLSBfSV9DcmVhdGluZzsKKyBjcmVhdGU6IChpZCA8Wm9u ZT4pYVpvbmUgc2V0U3RhdGVGcm9tU2VlZDogKHVuc2lnbmVkKXNlZWQ7CgorIGNyZWF0ZTogKGlk IDxab25lPilhWm9uZSBzZXRTdGF0ZUZyb21TZWVkczogKHVuc2lnbmVkICopc2VlZHM7CgotIF9J X1VzaW5nOwoKCi0gKHVuc2lnbmVkKWdldFVuc2lnbmVkU2FtcGxlOwoKCgoKLSAoZmxvYXQpZ2V0 RmxvYXRTYW1wbGU7CgoKCgotIChkb3VibGUpZ2V0VGhpbkRvdWJsZVNhbXBsZTsKCgoKCi0gKGRv dWJsZSlnZXREb3VibGVTYW1wbGU7CgoKCgoKLSAobG9uZyBkb3VibGUpZ2V0TG9uZ0RvdWJsZVNh bXBsZTsKCgotICh1bnNpZ25lZCBsb25nIGxvbmcgaW50KWdldEN1cnJlbnRDb3VudDsKQGVuZAoK QHByb3RvY29sIFNwbGl0R2VuZXJhdG9yCgotIF9JX0NyZWF0aW5nOworIGNyZWF0ZSA6IChpZCA8 Wm9uZT4pYVpvbmUKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVy c29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgIDEwOQoKCiAgICAgICAgICAgICAgc2V0QTog KHVuc2lnbmVkKUEKICAgICAgICAgICAgICBzZXRWOiAodW5zaWduZWQpdgogICAgICAgICAgICAg IHNldFc6ICh1bnNpZ25lZCl3CiAgc2V0U3RhdGVGcm9tU2VlZDogKHVuc2lnbmVkKXNlZWQ7Cgor IGNyZWF0ZSA6IChpZCA8Wm9uZT4pYVpvbmUKICAgICAgICAgICAgICBzZXRBOiAodW5zaWduZWQp QQogICAgICAgICAgICAgIHNldFY6ICh1bnNpZ25lZCl2CiAgICAgICAgICAgICAgc2V0VzogKHVu c2lnbmVkKXcKIHNldFN0YXRlRnJvbVNlZWRzOiAodW5zaWduZWQgKilzZWVkczsKCi0gX0lfU2V0 dGluZzsKCgotIGluaXRHZW5lcmF0b3I6ICh1bnNpZ25lZCl2R2VuOwoKCgotIGluaXRBbGw7Cgot IF9JX1VzaW5nOwoKCgoKLSAodW5zaWduZWQpZ2V0TnVtR2VuZXJhdG9yczsKCgoKLSAodW5zaWdu ZWQpZ2V0TnVtU2VnbWVudHM7CgoKCi0gKHVuc2lnbmVkKWdldFNlZ21lbnRMZW5ndGg7CgoKCi0g cmVzdGFydEdlbmVyYXRvcjogKHVuc2lnbmVkKXZHZW47CgoKCi0gYWR2YW5jZUdlbmVyYXRvcjog KHVuc2lnbmVkKXZHZW47CgoKCi0ganVtcEdlbmVyYXRvcjogKHVuc2lnbmVkKXZHZW4gdG9TZWdt ZW50OiAodW5zaWduZWQgbG9uZyBsb25nIGludClzZWc7CgoKCi0gcmVzdGFydEFsbDsKCgoKLSBh ZHZhbmNlQWxsOwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBl cnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAxMTAKCgoKLSBqdW1wQWxsVG9TZWdtZW50 OiAodW5zaWduZWQgbG9uZyBsb25nIGludClzZWc7CgoKCgotICh1bnNpZ25lZClnZXRVbnNpZ25l ZFNhbXBsZTogKHVuc2lnbmVkKXZHZW47CgoKCgoKLSAoZmxvYXQpZ2V0RmxvYXRTYW1wbGU6ICh1 bnNpZ25lZCl2R2VuOwoKCgoKCi0gKGRvdWJsZSlnZXRUaGluRG91YmxlU2FtcGxlOiAodW5zaWdu ZWQpdkdlbjsKCgoKCgotIChkb3VibGUpZ2V0RG91YmxlU2FtcGxlOiAodW5zaWduZWQpdkdlbjsK CgoKCgoKLSAobG9uZyBkb3VibGUpZ2V0TG9uZ0RvdWJsZVNhbXBsZTogKHVuc2lnbmVkKXZHZW47 CgoKCi0gKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpZ2V0Q3VycmVudFNlZ21lbnQ6ICh1bnNpZ25l ZCl2R2VuOwoKCgotICh1bnNpZ25lZCBsb25nIGxvbmcgaW50KWdldEN1cnJlbnRDb3VudDogKHVu c2lnbmVkKXZHZW47CkBlbmQKIyAyMjggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9yYW5kb20v Z2VuZXJhdG9ycy5oIgpAcHJvdG9jb2wgQmFzaWNSYW5kb21HZW5lcmF0b3IgPFN3YXJtT2JqZWN0 LCBJbnRlcm5hbFN0YXRlLCBDb21tb25HZW5lcmF0b3I+CgoKCkBlbmQKCkBwcm90b2NvbCBTaW1w bGVSYW5kb21HZW5lcmF0b3IgPEJhc2ljUmFuZG9tR2VuZXJhdG9yLCBTaW1wbGVHZW5lcmF0b3I+ CgoKCgpAZW5kCgpAcHJvdG9jb2wgU3BsaXRSYW5kb21HZW5lcmF0b3IgPEJhc2ljUmFuZG9tR2Vu ZXJhdG9yLCBTcGxpdEdlbmVyYXRvcj4KCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAg ICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgIDExMQoKCgoKCgoKCkBl bmQKIyAyNTkgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9yYW5kb20vZ2VuZXJhdG9ycy5oIgpA cHJvdG9jb2wgTENHZ2VuIDxTaW1wbGVSYW5kb21HZW5lcmF0b3I+CiMgMjY5ICIvdXNyL2xvY2Fs L3N3YXJtL2luY2x1ZGUvcmFuZG9tL2dlbmVyYXRvcnMuaCIKQGVuZAoKQHByb3RvY29sIExDRzFn ZW4gPExDR2dlbiwgQ1JFQVRBQkxFPgoKCgoKQGVuZAoKQHByb3RvY29sIExDRzJnZW4gPExDR2dl biwgQ1JFQVRBQkxFPgoKCgoKQGVuZAoKQHByb3RvY29sIExDRzNnZW4gPExDR2dlbiwgQ1JFQVRB QkxFPgoKCgoKQGVuZAojIDMwMyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3JhbmRvbS9nZW5l cmF0b3JzLmgiCkBwcm90b2NvbCBQTU1MQ0dnZW4gPFNpbXBsZVJhbmRvbUdlbmVyYXRvcj4KCgoK QGVuZAoKQHByb3RvY29sIFBNTUxDRzFnZW4gPFBNTUxDR2dlbiwgQ1JFQVRBQkxFPgoKCgoKQGVu ZAoKQHByb3RvY29sIFBNTUxDRzJnZW4gPFBNTUxDR2dlbiwgQ1JFQVRBQkxFPgoKCgoKQGVuZAoK QHByb3RvY29sIFBNTUxDRzNnZW4gPFBNTUxDR2dlbiwgQ1JFQVRBQkxFPgoKCgoKCgoKCgoyMDAx LTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAg ICBQYWdlICAxMTIKCgoKCkBlbmQKCkBwcm90b2NvbCBQTU1MQ0c0Z2VuIDxQTU1MQ0dnZW4sIENS RUFUQUJMRT4KCgoKCgpAZW5kCgpAcHJvdG9jb2wgUE1NTENHNWdlbiA8UE1NTENHZ2VuLCBDUkVB VEFCTEU+CgoKCgoKQGVuZAoKQHByb3RvY29sIFBNTUxDRzZnZW4gPFBNTUxDR2dlbiwgQ1JFQVRB QkxFPgoKCgoKCkBlbmQKCkBwcm90b2NvbCBQTU1MQ0c3Z2VuIDxQTU1MQ0dnZW4sIENSRUFUQUJM RT4KCgoKCgpAZW5kCgpAcHJvdG9jb2wgUE1NTENHOGdlbiA8UE1NTENHZ2VuLCBDUkVBVEFCTEU+ CgoKCgoKQGVuZAoKQHByb3RvY29sIFBNTUxDRzlnZW4gPFBNTUxDR2dlbiwgQ1JFQVRBQkxFPgoK CgoKCkBlbmQKCgoKQHByb3RvY29sIEFDR2dlbiA8U2ltcGxlUmFuZG9tR2VuZXJhdG9yLCBDUkVB VEFCTEU+CiMgMzkxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvcmFuZG9tL2dlbmVyYXRvcnMu aCIKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAg ICAgICAgICAgICAgICAgIFBhZ2UgIDExMwoKCkBlbmQKCkBwcm90b2NvbCBTQ0dnZW4gPFNpbXBs ZVJhbmRvbUdlbmVyYXRvciwgQ1JFQVRBQkxFPgojIDQwNCAiL3Vzci9sb2NhbC9zd2FybS9pbmNs dWRlL3JhbmRvbS9nZW5lcmF0b3JzLmgiCkBlbmQKCgoKQHByb3RvY29sIFNXQmdlbiA8U2ltcGxl UmFuZG9tR2VuZXJhdG9yPgoKCgoKCgoKQGVuZAoKQHByb3RvY29sIFNXQjFnZW4gPFNXQmdlbiwg Q1JFQVRBQkxFPgoKCgoKQGVuZAoKQHByb3RvY29sIFNXQjJnZW4gPFNXQmdlbiwgQ1JFQVRBQkxF PgoKCgoKQGVuZAoKQHByb3RvY29sIFNXQjNnZW4gPFNXQmdlbiwgQ1JFQVRBQkxFPgoKCgoKQGVu ZAoKCkBwcm90b2NvbCBQU1dCZ2VuIDxTaW1wbGVSYW5kb21HZW5lcmF0b3IsIENSRUFUQUJMRT4K CgoKCkBlbmQKCgoKQHByb3RvY29sIE1XQ0FnZW4gPFNpbXBsZVJhbmRvbUdlbmVyYXRvciwgQ1JF QVRBQkxFPgoKCgoKQGVuZAoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAg ICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgIDExNAoKCkBwcm90b2NvbCBNV0NC Z2VuIDxTaW1wbGVSYW5kb21HZW5lcmF0b3IsIENSRUFUQUJMRT4KCgoKCgpAZW5kCgoKQHByb3Rv Y29sIFJXQzJnZW4gPFNpbXBsZVJhbmRvbUdlbmVyYXRvciwgQ1JFQVRBQkxFPgoKCgpAZW5kCgoK QHByb3RvY29sIFJXQzhnZW4gPFNpbXBsZVJhbmRvbUdlbmVyYXRvciwgQ1JFQVRBQkxFPgoKCgoK QGVuZAoKCkBwcm90b2NvbCBUR0ZTUmdlbiA8U2ltcGxlUmFuZG9tR2VuZXJhdG9yPgoKCgoKQGVu ZAoKQHByb3RvY29sIFRUNDAzZ2VuIDxUR0ZTUmdlbiwgQ1JFQVRBQkxFPgoKCgpAZW5kCgpAcHJv dG9jb2wgVFQ3NzVnZW4gPFRHRlNSZ2VuLCBDUkVBVEFCTEU+CgoKCkBlbmQKCkBwcm90b2NvbCBU VDgwMGdlbiA8VEdGU1JnZW4sIENSRUFUQUJMRT4KCgoKQGVuZAoKCkBwcm90b2NvbCBNVDE5OTM3 Z2VuIDxTaW1wbGVSYW5kb21HZW5lcmF0b3IsIENSRUFUQUJMRT4KCgoKQGVuZAoKCgoKCgoKCjIw MDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAg ICAgIFBhZ2UgIDExNQoKCgpAcHJvdG9jb2wgTVJHZ2VuIDxTaW1wbGVSYW5kb21HZW5lcmF0b3I+ CgoKCgoKCgpAZW5kCgpAcHJvdG9jb2wgTVJHNWdlbiA8TVJHZ2VuLCBDUkVBVEFCTEU+CgoKCgpA ZW5kCgpAcHJvdG9jb2wgTVJHNmdlbiA8TVJHZ2VuLCBDUkVBVEFCTEU+CgoKCgpAZW5kCgpAcHJv dG9jb2wgTVJHN2dlbiA8TVJHZ2VuLCBDUkVBVEFCTEU+CgoKCgpAZW5kCgoKQHByb3RvY29sIEMy VEFVU2dlbiA8U2ltcGxlUmFuZG9tR2VuZXJhdG9yPgoKCgoKQGVuZAoKQHByb3RvY29sIEMyVEFV UzFnZW4gPEMyVEFVU2dlbiwgQ1JFQVRBQkxFPgoKCgoKCgpAZW5kCgpAcHJvdG9jb2wgQzJUQVVT MmdlbiA8QzJUQVVTZ2VuLCBDUkVBVEFCTEU+CgoKCgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAxMTYK CgpAZW5kCgpAcHJvdG9jb2wgQzJUQVVTM2dlbiA8QzJUQVVTZ2VuLCBDUkVBVEFCTEU+CgoKCgoK CkBlbmQKCgpAcHJvdG9jb2wgQzJNUkczZ2VuIDxTaW1wbGVSYW5kb21HZW5lcmF0b3IsIENSRUFU QUJMRT4KCgoKCgoKCkBlbmQKCgpAcHJvdG9jb2wgQzNNV0NnZW4gPFNpbXBsZVJhbmRvbUdlbmVy YXRvciwgQ1JFQVRBQkxFPgoKCgoKQGVuZAojIDYxNCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRl L3JhbmRvbS9nZW5lcmF0b3JzLmgiCkBwcm90b2NvbCBDMkxDR1hnZW4gPFNwbGl0UmFuZG9tR2Vu ZXJhdG9yLCBDUkVBVEFCTEU+CiMgNjI0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvcmFuZG9t L2dlbmVyYXRvcnMuaCIKQGVuZAoKCkBwcm90b2NvbCBDNExDR1hnZW4gPFNwbGl0UmFuZG9tR2Vu ZXJhdG9yLCBDUkVBVEFCTEU+CgoKCgoKQGVuZAojIDY1MiAiL3Vzci9sb2NhbC9zd2FybS9pbmNs dWRlL3JhbmRvbS9nZW5lcmF0b3JzLmgiCkBjbGFzcyBMQ0cxZ2VuOwpAY2xhc3MgTENHMmdlbjsK QGNsYXNzIExDRzNnZW47CkBjbGFzcyBQTU1MQ0cxZ2VuOwpAY2xhc3MgUE1NTENHMmdlbjsKQGNs YXNzIFBNTUxDRzNnZW47CkBjbGFzcyBQTU1MQ0c0Z2VuOwpAY2xhc3MgUE1NTENHNWdlbjsKQGNs YXNzIFBNTUxDRzZnZW47CkBjbGFzcyBQTU1MQ0c3Z2VuOwpAY2xhc3MgUE1NTENHOGdlbjsKQGNs YXNzIFBNTUxDRzlnZW47CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAg ICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgMTE3CgoKCgpAY2xhc3MgQUNHZ2Vu OwpAY2xhc3MgU0NHZ2VuOwpAY2xhc3MgU1dCMWdlbjsKQGNsYXNzIFNXQjJnZW47CkBjbGFzcyBT V0IzZ2VuOwpAY2xhc3MgUFNXQmdlbjsKQGNsYXNzIFRUNDAzZ2VuOwpAY2xhc3MgVFQ3NzVnZW47 CkBjbGFzcyBUVDgwMGdlbjsKQGNsYXNzIE1UMTk5MzdnZW47CkBjbGFzcyBNUkc1Z2VuOwpAY2xh c3MgTVJHNmdlbjsKQGNsYXNzIE1SRzdnZW47CkBjbGFzcyBNV0NBZ2VuOwpAY2xhc3MgTVdDQmdl bjsKQGNsYXNzIFJXQzJnZW47CkBjbGFzcyBSV0M4Z2VuOwoKCgpAY2xhc3MgQzJUQVVTMWdlbjsK QGNsYXNzIEMyVEFVUzJnZW47CkBjbGFzcyBDMlRBVVMzZ2VuOwoKCgpAY2xhc3MgQzJNUkczZ2Vu OwpAY2xhc3MgQzNNV0NnZW47CiMgNzA4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvcmFuZG9t L2dlbmVyYXRvcnMuaCIKQGNsYXNzIEMyTENHWGdlbjsKQGNsYXNzIEM0TENHWGdlbjsKIyA0OSAi L3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3JhbmRvbS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL3JhbmRvbS9kaXN0cmlidXRpb25zLmgiIDEKIyAyNSAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL3JhbmRvbS9kaXN0cmlidXRpb25zLmgiCkBwcm90b2NvbCBQcm9iYWJpbGl0eURp c3RyaWJ1dGlvbiA8U3dhcm1PYmplY3QsIEludGVybmFsU3RhdGU+CgoKCgoKCi0gX0lfQ3JlYXRp bmc7CgoKKyBjcmVhdGVXaXRoRGVmYXVsdHM6IChpZCA8Wm9uZT4pYVpvbmU7CgoKKyBjcmVhdGUg OiAoaWQgPFpvbmU+KWFab25lCiAgc2V0R2VuZXJhdG9yOiAoaWQgPFNpbXBsZVJhbmRvbUdlbmVy YXRvcj4pc2ltcGxlR2VuZXJhdG9yOwoKCisgY3JlYXRlIDogKGlkIDxab25lPilhWm9uZQogICAg ICAgICBzZXRHZW5lcmF0b3I6IChpZCA8U3BsaXRSYW5kb21HZW5lcmF0b3I+KXNwbGl0R2VuZXJh dG9yCiAgc2V0VmlydHVhbEdlbmVyYXRvcjogKHVuc2lnbmVkKSB2R2VuOwoKCgoKCgoKMjAwMS0w OC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAg UGFnZSAgMTE4CgoKCi0gX0lfU2V0dGluZzsKCi0gc2V0R2VuZXJhdG9yOiAoaWQgPFNpbXBsZVJh bmRvbUdlbmVyYXRvcj4pc2ltcGxlR2VuZXJhdG9yOwoKCi0gc2V0R2VuZXJhdG9yIDogKGlkIDxT cGxpdFJhbmRvbUdlbmVyYXRvcj4pc3BsaXRHZW5lcmF0b3IKICBzZXRWaXJ0dWFsR2VuZXJhdG9y OiAodW5zaWduZWQpdkdlbjsKCgotIHJlc2V0OwoKLSBfSV9Vc2luZzsKCi0gKGlkIDxCYXNpY1Jh bmRvbUdlbmVyYXRvcj4pIGdldEdlbmVyYXRvcjsKCgotICh1bnNpZ25lZClnZXRWaXJ0dWFsR2Vu ZXJhdG9yOwoKCi0gKEJPT0wpZ2V0T3B0aW9uc0luaXRpYWxpemVkOwoKCi0gKHVuc2lnbmVkIGxv bmcgbG9uZyBpbnQpZ2V0Q3VycmVudENvdW50OwpAZW5kCgoKCgoKQHByb3RvY29sIEJvb2xlYW5E aXN0cmlidXRpb24gPFByb2JhYmlsaXR5RGlzdHJpYnV0aW9uPgoKCgoKLSBfSV9Vc2luZzsKCi0g KEJPT0wpZ2V0Qm9vbGVhblNhbXBsZTsKLSAoaW50KWdldEludGVnZXJTYW1wbGU7CkBlbmQKCkBw cm90b2NvbCBJbnRlZ2VyRGlzdHJpYnV0aW9uIDxQcm9iYWJpbGl0eURpc3RyaWJ1dGlvbj4KCgoK Ci0gX0lfVXNpbmc7CgotIChpbnQpZ2V0SW50ZWdlclNhbXBsZTsKQGVuZAoKQHByb3RvY29sIFVu c2lnbmVkRGlzdHJpYnV0aW9uIDxQcm9iYWJpbGl0eURpc3RyaWJ1dGlvbj4KCgoKCgoKCgoKCgoy MDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAg ICAgICBQYWdlICAxMTkKCgoKLSBfSV9Vc2luZzsKCi0gKHVuc2lnbmVkKWdldFVuc2lnbmVkU2Ft cGxlOwpAZW5kCgpAcHJvdG9jb2wgRG91YmxlRGlzdHJpYnV0aW9uIDxQcm9iYWJpbGl0eURpc3Ry aWJ1dGlvbj4KCgoKCgotIF9JX1VzaW5nOwoKCi0gKGRvdWJsZSlnZXREb3VibGVTYW1wbGU7CkBl bmQKCgoKCgoKQHByb3RvY29sIFJhbmRvbUJpdERpc3QgPEJvb2xlYW5EaXN0cmlidXRpb24sIENS RUFUQUJMRT4KCgoKCgotIF9JX1VzaW5nOwoKLSAoQk9PTClnZXRDb2luVG9zczsKQGVuZAoKQHBy b3RvY29sIEJlcm5vdWxsaURpc3QgPEJvb2xlYW5EaXN0cmlidXRpb24sIENSRUFUQUJMRT4KCgoK LSBfSV9DcmVhdGluZzsKCisgY3JlYXRlIDogKGlkIDxab25lPilhWm9uZQogICAgc2V0R2VuZXJh dG9yOiAoaWQgPFNpbXBsZVJhbmRvbUdlbmVyYXRvcj4pc2ltcGxlR2VuZXJhdG9yCiAgc2V0UHJv YmFiaWxpdHk6IChkb3VibGUpcDsKCgorIGNyZWF0ZSA6IChpZCA8Wm9uZT4pYVpvbmUKICAgICAg ICAgc2V0R2VuZXJhdG9yOiAoaWQgPFNwbGl0UmFuZG9tR2VuZXJhdG9yPilzcGxpdEdlbmVyYXRv cgogIHNldFZpcnR1YWxHZW5lcmF0b3I6ICh1bnNpZ25lZCl2R2VuCiAgICAgICBzZXRQcm9iYWJp bGl0eTogKGRvdWJsZSlwOwoKLSBfSV9TZXR0aW5nOwoKLSBzZXRQcm9iYWJpbGl0eTogKGRvdWJs ZSlwOwoKLSBfSV9Vc2luZzsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAg ICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAxMjAKCgotIChkb3VibGUpZ2V0 UHJvYmFiaWxpdHk7CgoKLSAoQk9PTClnZXRTYW1wbGVXaXRoUHJvYmFiaWxpdHk6IChkb3VibGUp cDsKQGVuZAoKCkBwcm90b2NvbCBVbmlmb3JtSW50ZWdlckRpc3QgPEludGVnZXJEaXN0cmlidXRp b24sIENSRUFUQUJMRT4KCgoKCgotIF9JX0NyZWF0aW5nOwoKKyBjcmVhdGUgOiAoaWQgPFpvbmU+ KWFab25lCiAgc2V0R2VuZXJhdG9yOiAoaWQgPFNpbXBsZVJhbmRvbUdlbmVyYXRvcj4pc2ltcGxl R2VuZXJhdG9yCiBzZXRJbnRlZ2VyTWluOiAoaW50KW1pblZhbHVlCiAgICAgICAgc2V0TWF4OiAo aW50KW1heFZhbHVlOwoKCisgY3JlYXRlIDogKGlkIDxab25lPilhWm9uZQogICAgICAgc2V0R2Vu ZXJhdG9yOiAoaWQgPFNwbGl0UmFuZG9tR2VuZXJhdG9yPilzcGxpdEdlbmVyYXRvcgpzZXRWaXJ0 dWFsR2VuZXJhdG9yOiAodW5zaWduZWQpIHZHZW4KICAgICAgc2V0SW50ZWdlck1pbjogKGludClt aW5WYWx1ZQogICAgICAgICAgICAgc2V0TWF4OiAoaW50KW1heFZhbHVlOwoKLSBfSV9TZXR0aW5n OwoKCi0gc2V0SW50ZWdlck1pbjogKGludCltaW5WYWx1ZSBzZXRNYXg6IChpbnQpbWF4VmFsdWU7 CgotIF9JX1VzaW5nOwoKLSAoaW50KWdldEludGVnZXJNaW47CgoKLSAoaW50KWdldEludGVnZXJN YXg7CgoKCi0gKGludClnZXRJbnRlZ2VyV2l0aE1pbjogKGludCltaW5WYWx1ZSB3aXRoTWF4OiAo aW50KW1heFZhbHVlOwpAZW5kCgpAcHJvdG9jb2wgVW5pZm9ybVVuc2lnbmVkRGlzdCA8VW5zaWdu ZWREaXN0cmlidXRpb24sIENSRUFUQUJMRT4KCgoKCgotIF9JX0NyZWF0aW5nOwoKKyBjcmVhdGUg OiAoaWQgPFpvbmU+KWFab25lCiAgICBzZXRHZW5lcmF0b3I6IChpZCA8U2ltcGxlUmFuZG9tR2Vu ZXJhdG9yPilzaW1wbGVHZW5lcmF0b3IKICBzZXRVbnNpZ25lZE1pbjogKHVuc2lnbmVkKW1pblZh bHVlCiAgICAgICAgICBzZXRNYXg6ICh1bnNpZ25lZCltYXhWYWx1ZTsKCgoKCgoKCjIwMDEtMDgt MjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBh Z2UgIDEyMQoKCgoKKyBjcmVhdGUgOiAoaWQgPFpvbmU+KWFab25lCiAgICAgICAgIHNldEdlbmVy YXRvcjogKGlkIDxTcGxpdFJhbmRvbUdlbmVyYXRvcj4pc3BsaXRHZW5lcmF0b3IKICBzZXRWaXJ0 dWFsR2VuZXJhdG9yOiAodW5zaWduZWQpdkdlbgogICAgICAgc2V0VW5zaWduZWRNaW46ICh1bnNp Z25lZCltaW5WYWx1ZQogICAgICAgICAgICAgICBzZXRNYXg6ICh1bnNpZ25lZCltYXhWYWx1ZTsK Ci0gX0lfU2V0dGluZzsKCgotIHNldFVuc2lnbmVkTWluOiAodW5zaWduZWQpbWluVmFsdWUKICAg ICAgICAgIHNldE1heDogKHVuc2lnbmVkKW1heFZhbHVlOwoKLSBfSV9Vc2luZzsKCi0gKHVuc2ln bmVkKWdldFVuc2lnbmVkTWluOwoKCi0gKHVuc2lnbmVkKWdldFVuc2lnbmVkTWF4OwoKCgotICh1 bnNpZ25lZClnZXRVbnNpZ25lZFdpdGhNaW46ICh1bnNpZ25lZCltaW5WYWwKICAgICAgICAgICAg ICAgICAgICAgICB3aXRoTWF4OiAodW5zaWduZWQpbWF4VmFsOwpAZW5kCgpAcHJvdG9jb2wgVW5p Zm9ybURvdWJsZURpc3QgPERvdWJsZURpc3RyaWJ1dGlvbiwgQ1JFQVRBQkxFPgoKCgoKCgoKLSBf SV9DcmVhdGluZzsKCisgY3JlYXRlIDogKGlkIDxab25lPilhWm9uZQogICAgc2V0R2VuZXJhdG9y OiAoaWQgPFNpbXBsZVJhbmRvbUdlbmVyYXRvcj4pc2ltcGxlR2VuZXJhdG9yCiAgICBzZXREb3Vi bGVNaW46IChkb3VibGUpbWluVmFsdWUKICAgICAgICAgIHNldE1heDogKGRvdWJsZSltYXhWYWx1 ZTsKCgorIGNyZWF0ZSA6IChpZCA8Wm9uZT4pYVpvbmUKICAgICAgICAgc2V0R2VuZXJhdG9yOiAo aWQgPFNwbGl0UmFuZG9tR2VuZXJhdG9yPilzcGxpdEdlbmVyYXRvcgogIHNldFZpcnR1YWxHZW5l cmF0b3I6ICh1bnNpZ25lZCl2R2VuCiAgICAgICAgIHNldERvdWJsZU1pbjogKGRvdWJsZSltaW5W YWx1ZQogICAgICAgICAgICAgICBzZXRNYXg6IChkb3VibGUpbWF4VmFsdWU7CgotIF9JX1NldHRp bmc7CgoKLSBzZXREb3VibGVNaW46IChkb3VibGUpbWluVmFsdWUgc2V0TWF4OiAoZG91YmxlKW1h eFZhbHVlOwoKLSBfSV9Vc2luZzsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAg ICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAxMjIKCgoKLSAoZG91Ymxl KWdldERvdWJsZU1pbjsKCgoKLSAoZG91YmxlKWdldERvdWJsZU1heDsKCgoKLSAoZG91YmxlKWdl dERvdWJsZVdpdGhNaW46IChkb3VibGUpbWluVmFsdWUgd2l0aE1heDogKGRvdWJsZSltYXhWYWx1 ZTsKQGVuZAoKQHByb3RvY29sIE5vcm1hbCA8RG91YmxlRGlzdHJpYnV0aW9uPgoKLSBfSV9DcmVh dGluZzsKCgorIGNyZWF0ZSA6IChpZCA8Wm9uZT4pYVpvbmUKICAgIHNldEdlbmVyYXRvcjogKGlk IDxTaW1wbGVSYW5kb21HZW5lcmF0b3I+KXNpbXBsZUdlbmVyYXRvcgogICAgICAgICBzZXRNZWFu OiAoZG91YmxlKW1lYW4KICAgICBzZXRWYXJpYW5jZTogKGRvdWJsZSl2YXJpYW5jZTsKCgoKKyBj cmVhdGUgOiAoaWQgPFpvbmU+KWFab25lCiAgICBzZXRHZW5lcmF0b3I6IChpZCA8U2ltcGxlUmFu ZG9tR2VuZXJhdG9yPilzaW1wbGVHZW5lcmF0b3IKICAgICAgICAgc2V0TWVhbjogKGRvdWJsZSlt ZWFuCiAgICAgICBzZXRTdGREZXY6IChkb3VibGUpc2RldjsKCgoKKyBjcmVhdGUgOiAoaWQgPFpv bmU+KWFab25lCiAgICAgICAgIHNldEdlbmVyYXRvcjogKGlkIDxTcGxpdFJhbmRvbUdlbmVyYXRv cj4pc3BsaXRHZW5lcmF0b3IKICBzZXRWaXJ0dWFsR2VuZXJhdG9yOiAodW5zaWduZWQpdkdlbgog ICAgICAgICAgICAgIHNldE1lYW46IChkb3VibGUpbWVhbgogICAgICAgICAgc2V0VmFyaWFuY2U6 IChkb3VibGUpdmFyaWFuY2U7CgoKCisgY3JlYXRlIDogKGlkIDxab25lPilhWm9uZQogICAgICAg ICBzZXRHZW5lcmF0b3I6IChpZCA8U3BsaXRSYW5kb21HZW5lcmF0b3I+KXNwbGl0R2VuZXJhdG9y CiAgc2V0VmlydHVhbEdlbmVyYXRvcjogKHVuc2lnbmVkKXZHZW4KICAgICAgICAgICAgICBzZXRN ZWFuOiAoZG91YmxlKW1lYW4KICAgICAgICAgICAgc2V0U3RkRGV2OiAoZG91YmxlKXNkZXY7Cgot IF9JX1NldHRpbmc7CgoKLSBzZXRNZWFuOiAoZG91YmxlKW1lYW4gc2V0VmFyaWFuY2U6IChkb3Vi bGUpdmFyaWFuY2U7CgoKCi0gc2V0TWVhbjogKGRvdWJsZSltZWFuIHNldFN0ZERldjogKGRvdWJs ZSlzZGV2OwoKLSBfSV9Vc2luZzsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAg ICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAxMjMKCgotIChkb3VibGUp Z2V0TWVhbjsKCgotIChkb3VibGUpZ2V0VmFyaWFuY2U7CgoKLSAoZG91YmxlKWdldFN0ZERldjsK CgoKLSAoZG91YmxlKWdldFNhbXBsZVdpdGhNZWFuOiAoZG91YmxlKW1lYW4KICAgICAgICAgICAg ICAgd2l0aFZhcmlhbmNlOiAoZG91YmxlKXZhcmlhbmNlOwoKCgotIChkb3VibGUpZ2V0U2FtcGxl V2l0aE1lYW46IChkb3VibGUpbWVhbgogICAgICAgICAgICAgICAgIHdpdGhTdGREZXY6IChkb3Vi bGUpc2RldjsKQGVuZAoKQHByb3RvY29sIE5vcm1hbERpc3QgPE5vcm1hbCwgQ1JFQVRBQkxFPgoK CgpAZW5kCgpAcHJvdG9jb2wgTG9nTm9ybWFsRGlzdCA8Tm9ybWFsLCBDUkVBVEFCTEU+CgoKCkBl bmQKCkBwcm90b2NvbCBFeHBvbmVudGlhbERpc3QgPERvdWJsZURpc3RyaWJ1dGlvbiwgQ1JFQVRB QkxFPgoKCgotIF9JX0NyZWF0aW5nOwoKKyBjcmVhdGUgOiAoaWQgPFpvbmU+KWFab25lCiAgc2V0 R2VuZXJhdG9yOiAoaWQgPFNpbXBsZVJhbmRvbUdlbmVyYXRvcj4pc2ltcGxlR2VuZXJhdG9yCiAg ICAgICBzZXRNZWFuOiAoZG91YmxlKW1lYW47CgoKKyBjcmVhdGUgOiAoaWQgPFpvbmU+KWFab25l CiAgICAgICAgIHNldEdlbmVyYXRvcjogKGlkIDxTcGxpdFJhbmRvbUdlbmVyYXRvcj4pc3BsaXRH ZW5lcmF0b3IKICBzZXRWaXJ0dWFsR2VuZXJhdG9yOiAodW5zaWduZWQpdkdlbgogICAgICAgICAg ICAgIHNldE1lYW46IChkb3VibGUpbWVhbjsKCgotIF9JX1NldHRpbmc7CgotIHNldE1lYW46IChk b3VibGUpbWVhbjsKCi0gX0lfVXNpbmc7CgotIChkb3VibGUpZ2V0TWVhbjsKCgoKCgoKCgoyMDAx LTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAg ICBQYWdlICAxMjQKCgoKCi0gKGRvdWJsZSlnZXRTYW1wbGVXaXRoTWVhbjogKGRvdWJsZSltZWFu OwpAZW5kCgpAcHJvdG9jb2wgR2FtbWFEaXN0IDxEb3VibGVEaXN0cmlidXRpb24sIENSRUFUQUJM RT4KCgoKLSBfSV9DcmVhdGluZzsKCisgY3JlYXRlIDogKGlkIDxab25lPilhWm9uZQogc2V0R2Vu ZXJhdG9yOiAoaWQgPFNpbXBsZVJhbmRvbUdlbmVyYXRvcj4pc2ltcGxlR2VuZXJhdG9yCiAgICAg c2V0QWxwaGE6IChkb3VibGUpYWxwaGEKICAgICAgc2V0QmV0YTogKGRvdWJsZSliZXRhOwoKCisg Y3JlYXRlIDogKGlkIDxab25lPilhWm9uZQogICAgICAgICBzZXRHZW5lcmF0b3I6IChpZCA8U3Bs aXRSYW5kb21HZW5lcmF0b3I+KXNwbGl0R2VuZXJhdG9yCiAgc2V0VmlydHVhbEdlbmVyYXRvcjog KHVuc2lnbmVkKXZHZW4KICAgICAgICAgICAgIHNldEFscGhhOiAoZG91YmxlKWFscGhhCiAgICAg ICAgICAgICAgc2V0QmV0YTogKGRvdWJsZSliZXRhOwoKLSBfSV9TZXR0aW5nOwoKCi0gc2V0QWxw aGE6IChkb3VibGUpYWxwaGEgc2V0QmV0YTogKGRvdWJsZSliZXRhOwoKLSBfSV9Vc2luZzsKCi0g KGRvdWJsZSlnZXRBbHBoYTsKCgotIChkb3VibGUpZ2V0QmV0YTsKCgoKLSAoZG91YmxlKWdldFNh bXBsZVdpdGhBbHBoYTogKGRvdWJsZSlhbHBoYQogICAgICAgICAgICAgICAgICAgIHdpdGhCZXRh OiAoZG91YmxlKWJldGE7CkBlbmQKCkBwcm90b2NvbCBQb2lzc29uRGlzdCA8VW5zaWduZWREaXN0 cmlidXRpb24sIENSRUFUQUJMRT4KCgoKCi0gX0lfQ3JlYXRpbmc7CgorIGNyZWF0ZSA6IChpZCA8 Wm9uZT4pYVpvbmUKIHNldEdlbmVyYXRvcjogKGlkIDxTaW1wbGVSYW5kb21HZW5lcmF0b3I+KWdl bmVyYXRvcjsKCgoKKyBjcmVhdGUgOiAoaWQgPFpvbmU+KWFab25lCiBzZXRHZW5lcmF0b3I6IChp ZCA8U2ltcGxlUmFuZG9tR2VuZXJhdG9yPilnZW5lcmF0b3IKIHNldE9jY3VyUmF0ZTogKGRvdWJs ZSkgYW5PY2N1clJhdGUKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAg UGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgIDEyNQoKCiAgc2V0SW50ZXJ2YWw6IChk b3VibGUpIGFuSW50ZXJ2YWw7CgoKCisgY3JlYXRlIDogKGlkIDxab25lPilhWm9uZQogICAgICAg ICBzZXRHZW5lcmF0b3I6IChpZCA8U3BsaXRSYW5kb21HZW5lcmF0b3I+KWdlbmVyYXRvcgogIHNl dFZpcnR1YWxHZW5lcmF0b3I6ICh1bnNpZ25lZCl2R2VuOwoKCgorIGNyZWF0ZSA6IChpZCA8Wm9u ZT4pYVpvbmUKICAgICAgICAgc2V0R2VuZXJhdG9yOiAoaWQgPFNwbGl0UmFuZG9tR2VuZXJhdG9y PilnZW5lcmF0b3IKICBzZXRWaXJ0dWFsR2VuZXJhdG9yOiAodW5zaWduZWQpdkdlbgogICAgICAg ICBzZXRPY2N1clJhdGU6IChkb3VibGUpIGFuT2NjdXJSYXRlCiAgICAgICAgICBzZXRJbnRlcnZh bDogKGRvdWJsZSkgYW5JbnRlcnZhbDsKCi0gX0lfU2V0dGluZzsKCgoKLSBzZXRJbnRlcnZhbDog KGRvdWJsZSkgYW5JbnRlcnZhbDsKCgoKLSBzZXRPY2N1clJhdGU6IChkb3VibGUpIGFuT2NjdXJS YXRlOwoKCgotIHNldE9jY3VyUmF0ZTogKGRvdWJsZSkgYW5PY2N1clJhdGUKICAgc2V0SW50ZXJ2 YWw6IChkb3VibGUpIGFuSW50ZXJ2YWw7CgotIF9JX1VzaW5nOwoKCi0gKGRvdWJsZSkgZ2V0T2Nj dXJSYXRlOwoKCi0gKGRvdWJsZSkgZ2V0SW50ZXJ2YWw7CgoKCgotICh1bnNpZ25lZCkgZ2V0VW5z aWduZWRTYW1wbGU7CgoKCgotICh1bnNpZ25lZCkgZ2V0VW5zaWduZWRTYW1wbGVXaXRoSW50ZXJ2 YWw6IChkb3VibGUpIGFuSW50ZXJ2YWw7CgoKCgoKLSAodW5zaWduZWQpIGdldFVuc2lnbmVkU2Ft cGxlV2l0aE9jY3VyUmF0ZTogKGRvdWJsZSkgYW5PY2N1clJhdGUKICAgICAgICAgICAgICAgICAg ICAgICAgIHdpdGhJbnRlcnZhbDogKGRvdWJsZSkgYW5JbnRlcnZhbDsKCgoKCgoKCgoyMDAxLTA4 LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQ YWdlICAxMjYKCgpAZW5kCgoKCgoKQGNsYXNzIFJhbmRvbUJpdERpc3Q7CkBjbGFzcyBCZXJub3Vs bGlEaXN0OwoKCkBjbGFzcyBVbmlmb3JtSW50ZWdlckRpc3Q7CgoKQGNsYXNzIFVuaWZvcm1VbnNp Z25lZERpc3Q7CgoKQGNsYXNzIFVuaWZvcm1Eb3VibGVEaXN0OwpAY2xhc3MgTm9ybWFsRGlzdDsK QGNsYXNzIExvZ05vcm1hbERpc3Q7CkBjbGFzcyBFeHBvbmVudGlhbERpc3Q7CkBjbGFzcyBHYW1t YURpc3Q7CkBjbGFzcyBQb2lzc29uRGlzdDsKIyA1MCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRl L3JhbmRvbS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3JhbmRvbS9yYW5kb212 YXJzLmgiIDEKIyAyMiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3JhbmRvbS9yYW5kb212YXJz LmgiCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2V4dGVybnZhci5oIiAxCiMgMjMgIi91 c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9yYW5kb20vcmFuZG9tdmFycy5oIiAyCgoKCmV4dGVybiBp ZCA8TVQxOTkzN2dlbj4gcmFuZG9tR2VuZXJhdG9yOwoKCmV4dGVybiBpZCA8VW5pZm9ybUludGVn ZXJEaXN0PiB1bmlmb3JtSW50UmFuZDsKZXh0ZXJuIGlkIDxVbmlmb3JtVW5zaWduZWREaXN0PiB1 bmlmb3JtVW5zUmFuZDsKZXh0ZXJuIGlkIDxVbmlmb3JtRG91YmxlRGlzdD4gdW5pZm9ybURibFJh bmQ7CgoKCgpleHRlcm4gQk9PTCBfdXNlRml4ZWRTZWVkOwpleHRlcm4gdW5zaWduZWQgaW50IF9m aXJzdFNlZWQ7CgoKCgoKCgpleHRlcm4gdm9pZCBpbml0UmFuZG9tIChpZCBhcmd1bWVudHMpOwpl eHRlcm4gdW5zaWduZWQgaW50IHRlbXB1c0Z1Z2l0ICh2b2lkKTsKZXh0ZXJuIHVuc2lnbmVkIGlu dCBuZXh0U2VlZCAodm9pZCk7CiMgNTEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9yYW5kb20u aCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9yYW5kb20vcmFuZG9tZGVmcy5oIiAx CiMgMjggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9yYW5kb20vcmFuZG9tZGVmcy5oIgojIDEg Ii91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9taXNjLmgiIDEKCgoKCgoKCjIwMDEtMDgtMjQgMDE6 MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgIDEy NwoKCiMgOSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL21pc2MuaCIKIyAxICIvdXNyL2xvY2Fs L3N3YXJtL2luY2x1ZGUvc3dhcm1jb25maWcuaCIgMQojIDEwICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvbWlzYy5oIiAyCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxMiAiL3Vzci9sb2NhbC9z d2FybS9pbmNsdWRlL21pc2MuaCIgMgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDE2ICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvbWlzYy5oIiAyCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDE3 ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvbWlzYy5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3N0 cmluZy5oIiAxIDMKIyAxOCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL21pc2MuaCIgMgoKIyAx ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS91 bmlzdGQuaCIgMiAzCiMgMTc1ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy9wb3NpeF9vcHQuaCIgMSAzCiMgMTc2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi IDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vudmlyb25tZW50cy5oIiAxIDMKIyAyMyAi L3Vzci9pbmNsdWRlL2JpdHMvZW52aXJvbm1lbnRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy93b3Jkc2l6ZS5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvZW52aXJvbm1lbnRzLmgi IDIgMwojIDE4MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKIyAxOTAgIi91c3IvaW5jbHVk ZS91bmlzdGQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDE5MSAi L3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgp0eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoK CgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu MC4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDIwMCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAy IDMKCgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7 CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAg ICAgICAgICAgICAgICAgUGFnZSAgMTI4CgoKCgoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKCgoK CgoKdHlwZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsKCgoKCnR5cGVkZWYgX191c2Vjb25kc190IHVz ZWNvbmRzX3Q7CgoKCgp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgoKCnR5cGVkZWYgX19pbnRw dHJfdCBpbnRwdHJfdDsKCgoKCgoKdHlwZWRlZiBfX3NvY2tsZW5fdCBzb2NrbGVuX3Q7CiMgMjYw ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBhY2Nlc3MgKF9fY29uc3QgY2hh ciAqX19uYW1lLCBpbnQgX190eXBlKSA7CgoKCgpleHRlcm4gaW50IGV1aWRhY2Nlc3MgKF9fY29u c3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBlKSA7CiMgMjkwICIvdXNyL2luY2x1ZGUvdW5pc3Rk LmgiIDMKZXh0ZXJuIF9fb2ZmX3QgbHNlZWsgKGludCBfX2ZkLCBfX29mZl90IF9fb2Zmc2V0LCBp bnQgX193aGVuY2UpIDsKIyAzMDIgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19v ZmY2NF90IGxzZWVrNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsIGludCBfX3doZW5j ZSkgOwoKCgpleHRlcm4gaW50IGNsb3NlIChpbnQgX19mZCkgOwoKCgpleHRlcm4gc3NpemVfdCBy ZWFkIChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcykgOwoKCgoKCgoKCjIw MDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAg ICAgIFBhZ2UgIDEyOQoKCgpleHRlcm4gc3NpemVfdCB3cml0ZSAoaW50IF9fZmQsIF9fY29uc3Qg dm9pZCAqX19idWYsIHNpemVfdCBfX24pIDsKCgoKZXh0ZXJuIHNzaXplX3QgcHJlYWQgKGludCBf X2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzLCBfX29mZl90IF9fb2Zmc2V0KQogICAg ICAgICAgICA7CmV4dGVybiBzc2l6ZV90IHB3cml0ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAq X19idWYsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgX19vZmZfdCBfX29mZnNl dCkgOwojIDM0MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBzc2l6ZV90IHByZWFk NjQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzLAogICAgICAgICAgICAg ICAgICAgICAgICBfX29mZjY0X3QgX19vZmZzZXQpIDsKCgpleHRlcm4gc3NpemVfdCBwd3JpdGU2 NCAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24sCiAgICAgICAgICAg ICAgICAgICAgICAgICBfX29mZjY0X3QgX19vZmZzZXQpIDsKCgoKCgoKCmV4dGVybiBpbnQgcGlw ZSAoaW50IF9fcGlwZWRlc1syXSkgOwojIDM2MiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4 dGVybiB1bnNpZ25lZCBpbnQgYWxhcm0gKHVuc2lnbmVkIGludCBfX3NlY29uZHMpIDsKIyAzNzEg Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gdW5zaWduZWQgaW50IHNsZWVwICh1bnNp Z25lZCBpbnQgX19zZWNvbmRzKSA7CgoKCgoKCmV4dGVybiBfX3VzZWNvbmRzX3QgdWFsYXJtIChf X3VzZWNvbmRzX3QgX192YWx1ZSwgX191c2Vjb25kc190IF9faW50ZXJ2YWwpCiAgICAgICAgICAg IDsKCgoKZXh0ZXJuIGludCB1c2xlZXAgKF9fdXNlY29uZHNfdCBfX3VzZWNvbmRzKSA7CgoKCgoK ZXh0ZXJuIGludCBwYXVzZSAodm9pZCkgOwoKCgpleHRlcm4gaW50IGNob3duIChfX2NvbnN0IGNo YXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXApCiAgICAgICAgICAg IDsKCgoKZXh0ZXJuIGludCBmY2hvd24gKGludCBfX2ZkLCBfX3VpZF90IF9fb3duZXIsIF9fZ2lk X3QgX19ncm91cCkgOwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAg UGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgIDEzMAoKCgoKCmV4dGVybiBpbnQgbGNo b3duIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3Jv dXApCiAgICAgICAgICAgIDsKCgoKCmV4dGVybiBpbnQgY2hkaXIgKF9fY29uc3QgY2hhciAqX19w YXRoKSA7CgoKCmV4dGVybiBpbnQgZmNoZGlyIChpbnQgX19mZCkgOwojIDQyMyAiL3Vzci9pbmNs dWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBjaGFyICpnZXRjd2QgKGNoYXIgKl9fYnVmLCBzaXplX3Qg X19zaXplKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmdldF9jdXJyZW50X2Rpcl9uYW1lICh2b2lkKSA7 CgoKCgoKCmV4dGVybiBjaGFyICpnZXR3ZCAoY2hhciAqX19idWYpIDsKCgoKCmV4dGVybiBpbnQg ZHVwIChpbnQgX19mZCkgOwoKCmV4dGVybiBpbnQgZHVwMiAoaW50IF9fZmQsIGludCBfX2ZkMikg OwoKCmV4dGVybiBjaGFyICoqX19lbnZpcm9uOwoKZXh0ZXJuIGNoYXIgKiplbnZpcm9uOwoKCgoK CmV4dGVybiBpbnQgZXhlY3ZlIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqX19jb25zdCBf X2FyZ3ZbXSwKICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fY29uc3QgX19lbnZwW10pIDsKCgoK CmV4dGVybiBpbnQgZmV4ZWN2ZSAoaW50IF9fZmQsIGNoYXIgKl9fY29uc3QgX19hcmd2W10sIGNo YXIgKl9fY29uc3QgX19lbnZwW10pCiAgICAgICAgICAgIDsKCgoKCgoKCgoyMDAxLTA4LTI0IDAx OjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAx MzEKCgoKCgpleHRlcm4gaW50IGV4ZWN2IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqX19j b25zdCBfX2FyZ3ZbXSkgOwoKCgpleHRlcm4gaW50IGV4ZWNsZSAoX19jb25zdCBjaGFyICpfX3Bh dGgsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikgOwoKCgpleHRlcm4gaW50IGV4ZWNsIChfX2Nv bnN0IGNoYXIgKl9fcGF0aCwgX19jb25zdCBjaGFyICpfX2FyZywgLi4uKSA7CgoKCmV4dGVybiBp bnQgZXhlY3ZwIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSkg OwoKCgoKZXh0ZXJuIGludCBleGVjbHAgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX2NvbnN0IGNo YXIgKl9fYXJnLCAuLi4pIDsKCgoKCmV4dGVybiBpbnQgbmljZSAoaW50IF9faW5jKSA7CgoKCgpl eHRlcm4gdm9pZCBfZXhpdCAoaW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy bl9fKSk7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9jb25mbmFtZS5oIiAxIDMKIyAyNSAi L3Vzci9pbmNsdWRlL2JpdHMvY29uZm5hbWUuaCIgMwplbnVtCiAgewogICAgX1BDX0xJTktfTUFY LAoKICAgIF9QQ19NQVhfQ0FOT04sCgogICAgX1BDX01BWF9JTlBVVCwKCiAgICBfUENfTkFNRV9N QVgsCgogICAgX1BDX1BBVEhfTUFYLAoKICAgIF9QQ19QSVBFX0JVRiwKCiAgICBfUENfQ0hPV05f UkVTVFJJQ1RFRCwKCiAgICBfUENfTk9fVFJVTkMsCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAg ICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgMTMyCgoK ICAgIF9QQ19WRElTQUJMRSwKCiAgICBfUENfU1lOQ19JTywKCiAgICBfUENfQVNZTkNfSU8sCgog ICAgX1BDX1BSSU9fSU8sCgogICAgX1BDX1NPQ0tfTUFYQlVGLAoKICAgIF9QQ19GSUxFU0laRUJJ VFMsCgogICAgX1BDX1JFQ19JTkNSX1hGRVJfU0laRSwKCiAgICBfUENfUkVDX01BWF9YRkVSX1NJ WkUsCgogICAgX1BDX1JFQ19NSU5fWEZFUl9TSVpFLAoKICAgIF9QQ19SRUNfWEZFUl9BTElHTgoK ICB9OwoKCmVudW0KICB7CiAgICBfU0NfQVJHX01BWCwKCiAgICBfU0NfQ0hJTERfTUFYLAoKICAg IF9TQ19DTEtfVENLLAoKICAgIF9TQ19OR1JPVVBTX01BWCwKCiAgICBfU0NfT1BFTl9NQVgsCgog ICAgX1NDX1NUUkVBTV9NQVgsCgogICAgX1NDX1RaTkFNRV9NQVgsCgogICAgX1NDX0pPQl9DT05U Uk9MLAoKICAgIF9TQ19TQVZFRF9JRFMsCgogICAgX1NDX1JFQUxUSU1FX1NJR05BTFMsCgogICAg X1NDX1BSSU9SSVRZX1NDSEVEVUxJTkcsCgogICAgX1NDX1RJTUVSUywKCiAgICBfU0NfQVNZTkNI Uk9OT1VTX0lPLAoKICAgIF9TQ19QUklPUklUSVpFRF9JTywKCiAgICBfU0NfU1lOQ0hST05JWkVE X0lPLAoKICAgIF9TQ19GU1lOQywKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAg ICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgIDEzMwoKCgogICAgX1NDX01B UFBFRF9GSUxFUywKCiAgICBfU0NfTUVNTE9DSywKCiAgICBfU0NfTUVNTE9DS19SQU5HRSwKCiAg ICBfU0NfTUVNT1JZX1BST1RFQ1RJT04sCgogICAgX1NDX01FU1NBR0VfUEFTU0lORywKCiAgICBf U0NfU0VNQVBIT1JFUywKCiAgICBfU0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RTLAoKICAgIF9TQ19B SU9fTElTVElPX01BWCwKCiAgICBfU0NfQUlPX01BWCwKCiAgICBfU0NfQUlPX1BSSU9fREVMVEFf TUFYLAoKICAgIF9TQ19ERUxBWVRJTUVSX01BWCwKCiAgICBfU0NfTVFfT1BFTl9NQVgsCgogICAg X1NDX01RX1BSSU9fTUFYLAoKICAgIF9TQ19WRVJTSU9OLAoKICAgIF9TQ19QQUdFU0laRSwKCgog ICAgX1NDX1JUU0lHX01BWCwKCiAgICBfU0NfU0VNX05TRU1TX01BWCwKCiAgICBfU0NfU0VNX1ZB TFVFX01BWCwKCiAgICBfU0NfU0lHUVVFVUVfTUFYLAoKICAgIF9TQ19USU1FUl9NQVgsCgoKCgog ICAgX1NDX0JDX0JBU0VfTUFYLAoKICAgIF9TQ19CQ19ESU1fTUFYLAoKICAgIF9TQ19CQ19TQ0FM RV9NQVgsCgogICAgX1NDX0JDX1NUUklOR19NQVgsCgogICAgX1NDX0NPTExfV0VJR0hUU19NQVgs CgogICAgX1NDX0VRVUlWX0NMQVNTX01BWCwKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAg ICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgIDEzNAoKCgogICAg X1NDX0VYUFJfTkVTVF9NQVgsCgogICAgX1NDX0xJTkVfTUFYLAoKICAgIF9TQ19SRV9EVVBfTUFY LAoKICAgIF9TQ19DSEFSQ0xBU1NfTkFNRV9NQVgsCgoKICAgIF9TQ18yX1ZFUlNJT04sCgogICAg X1NDXzJfQ19CSU5ELAoKICAgIF9TQ18yX0NfREVWLAoKICAgIF9TQ18yX0ZPUlRfREVWLAoKICAg IF9TQ18yX0ZPUlRfUlVOLAoKICAgIF9TQ18yX1NXX0RFViwKCiAgICBfU0NfMl9MT0NBTEVERUYs CgoKICAgIF9TQ19QSUksCgogICAgX1NDX1BJSV9YVEksCgogICAgX1NDX1BJSV9TT0NLRVQsCgog ICAgX1NDX1BJSV9JTlRFUk5FVCwKCiAgICBfU0NfUElJX09TSSwKCiAgICBfU0NfUE9MTCwKCiAg ICBfU0NfU0VMRUNULAoKICAgIF9TQ19VSU9fTUFYSU9WLAoKICAgIF9TQ19JT1ZfTUFYID0gX1ND X1VJT19NQVhJT1YsCgogICAgX1NDX1BJSV9JTlRFUk5FVF9TVFJFQU0sCgogICAgX1NDX1BJSV9J TlRFUk5FVF9ER1JBTSwKCiAgICBfU0NfUElJX09TSV9DT1RTLAoKICAgIF9TQ19QSUlfT1NJX0NM VFMsCgogICAgX1NDX1BJSV9PU0lfTSwKCiAgICBfU0NfVF9JT1ZfTUFYLAoKCgoKCgoKCgoyMDAx LTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAg ICBQYWdlICAxMzUKCgoKICAgIF9TQ19USFJFQURTLAoKICAgIF9TQ19USFJFQURfU0FGRV9GVU5D VElPTlMsCgogICAgX1NDX0dFVEdSX1JfU0laRV9NQVgsCgogICAgX1NDX0dFVFBXX1JfU0laRV9N QVgsCgogICAgX1NDX0xPR0lOX05BTUVfTUFYLAoKICAgIF9TQ19UVFlfTkFNRV9NQVgsCgogICAg X1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMsCgogICAgX1NDX1RIUkVBRF9LRVlTX01B WCwKCiAgICBfU0NfVEhSRUFEX1NUQUNLX01JTiwKCiAgICBfU0NfVEhSRUFEX1RIUkVBRFNfTUFY LAoKICAgIF9TQ19USFJFQURfQVRUUl9TVEFDS0FERFIsCgogICAgX1NDX1RIUkVBRF9BVFRSX1NU QUNLU0laRSwKCiAgICBfU0NfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcsCgogICAgX1NDX1RI UkVBRF9QUklPX0lOSEVSSVQsCgogICAgX1NDX1RIUkVBRF9QUklPX1BST1RFQ1QsCgogICAgX1ND X1RIUkVBRF9QUk9DRVNTX1NIQVJFRCwKCgogICAgX1NDX05QUk9DRVNTT1JTX0NPTkYsCgogICAg X1NDX05QUk9DRVNTT1JTX09OTE4sCgogICAgX1NDX1BIWVNfUEFHRVMsCgogICAgX1NDX0FWUEhZ U19QQUdFUywKCiAgICBfU0NfQVRFWElUX01BWCwKCiAgICBfU0NfUEFTU19NQVgsCgoKICAgIF9T Q19YT1BFTl9WRVJTSU9OLAoKICAgIF9TQ19YT1BFTl9YQ1VfVkVSU0lPTiwKCiAgICBfU0NfWE9Q RU5fVU5JWCwKCiAgICBfU0NfWE9QRU5fQ1JZUFQsCgogICAgX1NDX1hPUEVOX0VOSF9JMThOLAoK CgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAg ICAgICAgICAgICAgUGFnZSAgMTM2CgoKCiAgICBfU0NfWE9QRU5fU0hNLAoKCiAgICBfU0NfMl9D SEFSX1RFUk0sCgogICAgX1NDXzJfQ19WRVJTSU9OLAoKICAgIF9TQ18yX1VQRSwKCgogICAgX1ND X1hPUEVOX1hQRzIsCgogICAgX1NDX1hPUEVOX1hQRzMsCgogICAgX1NDX1hPUEVOX1hQRzQsCgoK ICAgIF9TQ19DSEFSX0JJVCwKCiAgICBfU0NfQ0hBUl9NQVgsCgogICAgX1NDX0NIQVJfTUlOLAoK ICAgIF9TQ19JTlRfTUFYLAoKICAgIF9TQ19JTlRfTUlOLAoKICAgIF9TQ19MT05HX0JJVCwKCiAg ICBfU0NfV09SRF9CSVQsCgogICAgX1NDX01CX0xFTl9NQVgsCgogICAgX1NDX05aRVJPLAoKICAg IF9TQ19TU0laRV9NQVgsCgogICAgX1NDX1NDSEFSX01BWCwKCiAgICBfU0NfU0NIQVJfTUlOLAoK ICAgIF9TQ19TSFJUX01BWCwKCiAgICBfU0NfU0hSVF9NSU4sCgogICAgX1NDX1VDSEFSX01BWCwK CiAgICBfU0NfVUlOVF9NQVgsCgogICAgX1NDX1VMT05HX01BWCwKCiAgICBfU0NfVVNIUlRfTUFY LAoKCiAgICBfU0NfTkxfQVJHTUFYLAoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAg ICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgMTM3CgoKCiAgICBfU0Nf TkxfTEFOR01BWCwKCiAgICBfU0NfTkxfTVNHTUFYLAoKICAgIF9TQ19OTF9OTUFYLAoKICAgIF9T Q19OTF9TRVRNQVgsCgogICAgX1NDX05MX1RFWFRNQVgsCgoKICAgIF9TQ19YQlM1X0lMUDMyX09G RjMyLAoKICAgIF9TQ19YQlM1X0lMUDMyX09GRkJJRywKCiAgICBfU0NfWEJTNV9MUDY0X09GRjY0 LAoKICAgIF9TQ19YQlM1X0xQQklHX09GRkJJRywKCgogICAgX1NDX1hPUEVOX0xFR0FDWSwKCiAg ICBfU0NfWE9QRU5fUkVBTFRJTUUsCgogICAgX1NDX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMsCgoK ICAgIF9TQ19BRFZJU09SWV9JTkZPLAoKICAgIF9TQ19CQVJSSUVSUywKCiAgICBfU0NfQkFTRSwK CiAgICBfU0NfQ19MQU5HX1NVUFBPUlQsCgogICAgX1NDX0NfTEFOR19TVVBQT1JUX1IsCgogICAg X1NDX0NMT0NLX1NFTEVDVElPTiwKCiAgICBfU0NfQ1BVVElNRSwKCiAgICBfU0NfVEhSRUFEX0NQ VVRJTUUsCgogICAgX1NDX0RFVklDRV9JTywKCiAgICBfU0NfREVWSUNFX1NQRUNJRklDLAoKICAg IF9TQ19ERVZJQ0VfU1BFQ0lGSUNfUiwKCiAgICBfU0NfRkRfTUdNVCwKCiAgICBfU0NfRklGTywK CiAgICBfU0NfUElQRSwKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAg IFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAxMzgKCgogICAgX1NDX0ZJTEVfQVRU UklCVVRFUywKCiAgICBfU0NfRklMRV9MT0NLSU5HLAoKICAgIF9TQ19GSUxFX1NZU1RFTSwKCiAg ICBfU0NfTU9OT1RPTklDX0NMT0NLLAoKICAgIF9TQ19NVUxUSVBMRV9QUk9DRVNTLAoKICAgIF9T Q19TSU5HTEVfUFJPQ0VTUywKCiAgICBfU0NfTkVUV09SS0lORywKCiAgICBfU0NfUkVBREVSX1dS SVRFUl9MT0NLUywKCiAgICBfU0NfU1BJTl9MT0NLUywKCiAgICBfU0NfUkVHRVhQLAoKICAgIF9T Q19SRUdFWF9WRVJTSU9OLAoKICAgIF9TQ19TSEVMTCwKCiAgICBfU0NfU0lHTkFMUywKCiAgICBf U0NfU1BBV04sCgogICAgX1NDX1NQT1JBRElDX1NFUlZFUiwKCiAgICBfU0NfVEhSRUFEX1NQT1JB RElDX1NFUlZFUiwKCiAgICBfU0NfU1lTVEVNX0RBVEFCQVNFLAoKICAgIF9TQ19TWVNURU1fREFU QUJBU0VfUiwKCiAgICBfU0NfVElNRU9VVFMsCgogICAgX1NDX1RZUEVEX01FTU9SWV9PQkpFQ1RT LAoKICAgIF9TQ19VU0VSX0dST1VQUywKCiAgICBfU0NfVVNFUl9HUk9VUFNfUiwKCiAgICBfU0Nf Ml9QQlMsCgogICAgX1NDXzJfUEJTX0FDQ09VTlRJTkcsCgogICAgX1NDXzJfUEJTX0xPQ0FURSwK CiAgICBfU0NfMl9QQlNfTUVTU0FHRSwKCiAgICBfU0NfMl9QQlNfVFJBQ0ssCgogICAgX1NDX1NZ TUxPT1AsCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24u bWkgICAgICAgICAgICAgICAgICAgUGFnZSAgMTM5CgoKICAgIF9TQ19TVFJFQU1TLAoKICAgIF9T Q18yX1BCU19DSEVDS1BPSU5UCgogIH07CgoKCgoKZW51bQogIHsKICAgIF9DU19QQVRICgoKCgog ICAgLAogICAgX0NTX0xGU19DRkxBR1MgPSAxMDAwLAoKICAgIF9DU19MRlNfTERGTEFHUywKCiAg ICBfQ1NfTEZTX0xJQlMsCgogICAgX0NTX0xGU19MSU5URkxBR1MsCgogICAgX0NTX0xGUzY0X0NG TEFHUywKCiAgICBfQ1NfTEZTNjRfTERGTEFHUywKCiAgICBfQ1NfTEZTNjRfTElCUywKCiAgICBf Q1NfTEZTNjRfTElOVEZMQUdTCgoKCgogICAgLAogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfQ0ZM QUdTID0gMTEwMCwKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9MREZMQUdTLAoKICAgIF9DU19Y QlM1X0lMUDMyX09GRjMyX0xJQlMsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTElOVEZMQUdT LAoKICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19DRkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJf T0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xJQlMsCgogICAgX0NT X1hCUzVfSUxQMzJfT0ZGQklHX0xJTlRGTEFHUywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0NG TEFHUywKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5t aSAgICAgICAgICAgICAgICAgICBQYWdlICAxNDAKCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9M REZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTElCUywKCiAgICBfQ1NfWEJTNV9MUDY0 X09GRjY0X0xJTlRGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfQ0ZMQUdTLAoKICAg IF9DU19YQlM1X0xQQklHX09GRkJJR19MREZMQUdTLAoKICAgIF9DU19YQlM1X0xQQklHX09GRkJJ R19MSUJTLAoKICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19MSU5URkxBR1MKCgogIH07CiMgNTAx ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCmV4dGVybiBsb25nIGludCBwYXRoY29uZiAo X19jb25zdCBjaGFyICpfX3BhdGgsIGludCBfX25hbWUpIDsKCgpleHRlcm4gbG9uZyBpbnQgZnBh dGhjb25mIChpbnQgX19mZCwgaW50IF9fbmFtZSkgOwoKCmV4dGVybiBsb25nIGludCBzeXNjb25m IChpbnQgX19uYW1lKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBzaXpl X3QgY29uZnN0ciAoaW50IF9fbmFtZSwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgOwoKCgoK ZXh0ZXJuIF9fcGlkX3QgZ2V0cGlkICh2b2lkKSA7CgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cHBpZCAo dm9pZCkgOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGdycCAodm9pZCkgOwojIDUzNiAiL3Vzci9p bmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX3BpZF90IF9fZ2V0cGdpZCAoX19waWRfdCBfX3Bp ZCkgOwoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGdpZCAoX19waWRfdCBfX3BpZCkgOwoKCgoKCgpleHRl cm4gaW50IHNldHBnaWQgKF9fcGlkX3QgX19waWQsIF9fcGlkX3QgX19wZ2lkKSA7CiMgNTYyICIv dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBzZXRwZ3JwICh2b2lkKSA7CgoKCgoK CgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAg ICAgICAgICBQYWdlICAxNDEKCgojIDU4MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVy biBfX3BpZF90IHNldHNpZCAodm9pZCkgOwoKCgpleHRlcm4gX19waWRfdCBnZXRzaWQgKF9fcGlk X3QgX19waWQpIDsKCgoKZXh0ZXJuIF9fdWlkX3QgZ2V0dWlkICh2b2lkKSA7CgoKZXh0ZXJuIF9f dWlkX3QgZ2V0ZXVpZCAodm9pZCkgOwoKCmV4dGVybiBfX2dpZF90IGdldGdpZCAodm9pZCkgOwoK CmV4dGVybiBfX2dpZF90IGdldGVnaWQgKHZvaWQpIDsKCgoKCmV4dGVybiBpbnQgZ2V0Z3JvdXBz IChpbnQgX19zaXplLCBfX2dpZF90IF9fbGlzdFtdKSA7CgoKCmV4dGVybiBpbnQgZ3JvdXBfbWVt YmVyIChfX2dpZF90IF9fZ2lkKSA7CgoKCgoKCmV4dGVybiBpbnQgc2V0dWlkIChfX3VpZF90IF9f dWlkKSA7CgoKCgpleHRlcm4gaW50IHNldHJldWlkIChfX3VpZF90IF9fcnVpZCwgX191aWRfdCBf X2V1aWQpIDsKCgoKCmV4dGVybiBpbnQgc2V0ZXVpZCAoX191aWRfdCBfX3VpZCkgOwoKCgoKCgpl eHRlcm4gaW50IHNldGdpZCAoX19naWRfdCBfX2dpZCkgOwoKCgoKCgoKCgoKCjIwMDEtMDgtMjQg MDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2Ug IDE0MgoKCmV4dGVybiBpbnQgc2V0cmVnaWQgKF9fZ2lkX3QgX19yZ2lkLCBfX2dpZF90IF9fZWdp ZCkgOwoKCgoKZXh0ZXJuIGludCBzZXRlZ2lkIChfX2dpZF90IF9fZ2lkKSA7CgoKCgoKCmV4dGVy biBfX3BpZF90IGZvcmsgKHZvaWQpIDsKCgoKCgoKZXh0ZXJuIF9fcGlkX3QgdmZvcmsgKHZvaWQp IDsKCgoKCgpleHRlcm4gY2hhciAqdHR5bmFtZSAoaW50IF9fZmQpIDsKCgoKZXh0ZXJuIGludCB0 dHluYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSA7CgoKCmV4 dGVybiBpbnQgaXNhdHR5IChpbnQgX19mZCkgOwoKCgoKCmV4dGVybiBpbnQgdHR5c2xvdCAodm9p ZCkgOwoKCgoKZXh0ZXJuIGludCBsaW5rIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25zdCBj aGFyICpfX3RvKSA7CgoKCmV4dGVybiBpbnQgc3ltbGluayAoX19jb25zdCBjaGFyICpfX2Zyb20s IF9fY29uc3QgY2hhciAqX190bykgOwoKCgoKZXh0ZXJuIGludCByZWFkbGluayAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fcGF0aCwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSA7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAg ICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgMTQzCgoKCgpl eHRlcm4gaW50IHVubGluayAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgpleHRlcm4gaW50IHJt ZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgOwoKCgpleHRlcm4gX19waWRfdCB0Y2dldHBncnAg KGludCBfX2ZkKSA7CgoKZXh0ZXJuIGludCB0Y3NldHBncnAgKGludCBfX2ZkLCBfX3BpZF90IF9f cGdycF9pZCkgOwoKCgpleHRlcm4gY2hhciAqZ2V0bG9naW4gKHZvaWQpIDsKCgoKCmV4dGVybiBp bnQgZ2V0bG9naW5fciAoY2hhciAqX19uYW1lLCBzaXplX3QgX19uYW1lX2xlbikgOwoKCgoKZXh0 ZXJuIGludCBzZXRsb2dpbiAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKIyA3MjYgIi91c3IvaW5j bHVkZS91bmlzdGQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMSAzCiMgNDcgIi91 c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwpleHRlcm4gY2hhciAqb3B0YXJnOwojIDYxICIvdXNyL2lu Y2x1ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuIGludCBvcHRpbmQ7CgoKCgpleHRlcm4gaW50IG9wdGVy cjsKCgoKZXh0ZXJuIGludCBvcHRvcHQ7CiMgMTQ1ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMK ZXh0ZXJuIGludCBnZXRvcHQgKGludCBfX2FyZ2MsIGNoYXIgKmNvbnN0ICpfX2FyZ3YsIGNvbnN0 IGNoYXIgKl9fc2hvcnRvcHRzKTsKIyA3MjcgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoK CgoKCgpleHRlcm4gaW50IGdldGhvc3RuYW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikg OwoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkg ICAgICAgICAgICAgICAgICAgUGFnZSAgMTQ0CgoKCgoKZXh0ZXJuIGludCBzZXRob3N0bmFtZSAo X19jb25zdCBjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgOwoKCgpleHRlcm4gaW50IHNldGhv c3RpZCAobG9uZyBpbnQgX19pZCkgOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZG9tYWlubmFtZSAoY2hh ciAqX19uYW1lLCBzaXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBzZXRkb21haW5uYW1lIChfX2Nv bnN0IGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSA7CgoKCgoKZXh0ZXJuIGludCB2aGFuZ3Vw ICh2b2lkKSA7CgoKZXh0ZXJuIGludCByZXZva2UgKF9fY29uc3QgY2hhciAqX19maWxlKSA7CgoK CgoKCgpleHRlcm4gaW50IHByb2ZpbCAodW5zaWduZWQgc2hvcnQgaW50ICpfX3NhbXBsZV9idWZm ZXIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19vZmZzZXQsIHVu c2lnbmVkIGludCBfX3NjYWxlKSA7CgoKCgoKZXh0ZXJuIGludCBhY2N0IChfX2NvbnN0IGNoYXIg Kl9fbmFtZSkgOwoKCgpleHRlcm4gY2hhciAqZ2V0dXNlcnNoZWxsICh2b2lkKSA7CmV4dGVybiB2 b2lkIGVuZHVzZXJzaGVsbCAodm9pZCkgOwpleHRlcm4gdm9pZCBzZXR1c2Vyc2hlbGwgKHZvaWQp IDsKCgoKCgpleHRlcm4gaW50IGRhZW1vbiAoaW50IF9fbm9jaGRpciwgaW50IF9fbm9jbG9zZSkg OwoKCgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5t aSAgICAgICAgICAgICAgICAgICBQYWdlICAxNDUKCgoKZXh0ZXJuIGludCBjaHJvb3QgKF9fY29u c3QgY2hhciAqX19wYXRoKSA7CgoKCmV4dGVybiBjaGFyICpnZXRwYXNzIChfX2NvbnN0IGNoYXIg Kl9fcHJvbXB0KSA7CgoKCgoKZXh0ZXJuIGludCBmc3luYyAoaW50IF9fZmQpIDsKCgoKCgoKZXh0 ZXJuIGxvbmcgaW50IGdldGhvc3RpZCAodm9pZCkgOwoKCmV4dGVybiB2b2lkIHN5bmMgKHZvaWQp IDsKCgoKCmV4dGVybiBpbnQgZ2V0cGFnZXNpemUgKHZvaWQpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCgoKCmV4dGVybiBpbnQgdHJ1bmNhdGUgKF9fY29uc3QgY2hhciAqX19maWxlLCBf X29mZl90IF9fbGVuZ3RoKSA7CiMgODM2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJu IGludCB0cnVuY2F0ZTY0IChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19vZmY2NF90IF9fbGVuZ3Ro KSA7CgoKCgpleHRlcm4gaW50IGZ0cnVuY2F0ZSAoaW50IF9fZmQsIF9fb2ZmX3QgX19sZW5ndGgp IDsKIyA4NTEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGZ0cnVuY2F0ZTY0 IChpbnQgX19mZCwgX19vZmY2NF90IF9fbGVuZ3RoKSA7CgoKCgoKZXh0ZXJuIGludCBnZXRkdGFi bGVzaXplICh2b2lkKSA7CiMgODY2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGlu dCBicmsgKHZvaWQgKl9fYWRkcikgOwoKCgoKCmV4dGVybiB2b2lkICpzYnJrIChpbnRwdHJfdCBf X2RlbHRhKSA7CiMgODg3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKCgoKCgoKCjIwMDEtMDgt MjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBh Z2UgIDE0NgoKCmV4dGVybiBsb25nIGludCBzeXNjYWxsIChsb25nIGludCBfX3N5c25vLCAuLi4p IDsKIyA5MDcgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGxvY2tmIChpbnQg X19mZCwgaW50IF9fY21kLCBfX29mZl90IF9fbGVuKSA7CiMgOTE3ICIvdXNyL2luY2x1ZGUvdW5p c3RkLmgiIDMKZXh0ZXJuIGludCBsb2NrZjY0IChpbnQgX19mZCwgaW50IF9fY21kLCBfX29mZjY0 X3QgX19sZW4pIDsKIyA5MzggIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGZk YXRhc3luYyAoaW50IF9fZmlsZGVzKSA7CgoKCgoKCgpleHRlcm4gY2hhciAqY3J5cHQgKF9fY29u c3QgY2hhciAqX19rZXksIF9fY29uc3QgY2hhciAqX19zYWx0KSA7CgoKCmV4dGVybiB2b2lkIGVu Y3J5cHQgKGNoYXIgKl9fYmxvY2ssIGludCBfX2VkZmxhZykgOwoKCgoKCgpleHRlcm4gdm9pZCBz d2FiIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19mcm9tLCB2b2lkICpfX3Jlc3RyaWN0IF9f dG8sCiAgICAgICAgICAgICAgICAgIHNzaXplX3QgX19uKSA7CgoKCgoKCgpleHRlcm4gY2hhciAq Y3Rlcm1pZCAoY2hhciAqX19zKSA7CiMgOTgzICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0 ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgOwojIDIwICIvdXNyL2xvY2Fs L3N3YXJtL2luY2x1ZGUvbWlzYy5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMg MjggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg MSAzCiMgMjkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwojIDM4ICIvdXNyL2luY2x1ZGUvdGlt ZS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMC4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAy IDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDQzICIvdXNyL2luY2x1 ZGUvdGltZS5oIiAyIDMKIyA1NiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwojIDEgIi91c3IvaW5j bHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDU3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgoK CgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAg ICAgICAgICAgICBQYWdlICAxNDcKCgoKdHlwZWRlZiBfX2Nsb2NrX3QgY2xvY2tfdDsKCgoKCgoK CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS90 aW1lLmgiIDIgMwoKCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwojIDc5ICIvdXNyL2luY2x1ZGUv dGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgODAgIi91c3Iv aW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwojIDkx ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIg MSAzCiMgOTIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX190aW1lcl90IHRp bWVyX3Q7CiMgMTA2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0aW1lc3BlYwogIHsK ICAgIGxvbmcgaW50IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKCgoKCgoKCnN0 cnVjdCB0bQp7CiAgaW50IHRtX3NlYzsKICBpbnQgdG1fbWluOwogIGludCB0bV9ob3VyOwogIGlu dCB0bV9tZGF5OwogIGludCB0bV9tb247CiAgaW50IHRtX3llYXI7CiAgaW50IHRtX3dkYXk7CiAg aW50IHRtX3lkYXk7CiAgaW50IHRtX2lzZHN0OwoKCiAgbG9uZyBpbnQgdG1fZ210b2ZmOwogIF9f Y29uc3QgY2hhciAqdG1fem9uZTsKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAg ICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgMTQ4CgoKCgp9OwoKCgoK c3RydWN0IGl0aW1lcnNwZWMKICB7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAg ICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7CiAgfTsKCgpzdHJ1Y3Qgc2lnZXZlbnQ7CiMgMTYz ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBjbG9ja190IGNsb2NrICh2b2lkKSA7CgoK ZXh0ZXJuIHRpbWVfdCB0aW1lICh0aW1lX3QgKl9fdGltZXIpIDsKCgpleHRlcm4gZG91YmxlIGRp ZmZ0aW1lICh0aW1lX3QgX190aW1lMSwgdGltZV90IF9fdGltZTApCiAgICAgICAgICAgICBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIHRpbWVfdCBta3RpbWUgKHN0cnVjdCB0 bSAqX190cCkgOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgKGNoYXIgKl9fcmVzdHJpY3Qg X19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg c3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIDsKCgoKCmV4dGVybiBjaGFyICpzdHJwdGltZSAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIHN0cnVjdCB0bSAqX190cCkKICAgICAgICAgICAg OwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIp IDsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1l cikgOwoKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29u Lm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE0OQoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGlt ZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIDsKCgoKZXh0ZXJuIHN0cnVj dCB0bSAqbG9jYWx0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkg OwoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWUgKF9fY29uc3Qgc3RydWN0IHRtICpfX3RwKSA7CgoK ZXh0ZXJuIGNoYXIgKmN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgOwoKCgoKCgpleHRl cm4gY2hhciAqYXNjdGltZV9yIChfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAog ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKZXh0ZXJu IGNoYXIgKmN0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAg ICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCgpleHRlcm4gY2hh ciAqX190em5hbWVbMl07CmV4dGVybiBpbnQgX19kYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IF9f dGltZXpvbmU7CgoKCgpleHRlcm4gY2hhciAqdHpuYW1lWzJdOwoKCgpleHRlcm4gdm9pZCB0enNl dCAodm9pZCkgOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgdGltZXpv bmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25zdCB0aW1lX3QgKl9fd2hlbikgOwojIDI3 MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gdGltZV90IHRpbWVnbSAoc3RydWN0IHRt ICpfX3RwKSA7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNv bi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAxNTAKCgoKCmV4dGVybiB0aW1lX3QgdGltZWxv Y2FsIChzdHJ1Y3QgdG0gKl9fdHApIDsKCgpleHRlcm4gaW50IGR5c2l6ZSAoaW50IF9feWVhcikg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgbmFub3NsZWVwIChf X2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXF1ZXN0ZWRfdGltZSwKICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW1haW5pbmcpIDsKCgoKZXh0ZXJuIGludCBjbG9j a19nZXRyZXMgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzKSA7 CgoKZXh0ZXJuIGludCBjbG9ja19nZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0 IHRpbWVzcGVjICpfX3RwKSA7CgoKZXh0ZXJuIGludCBjbG9ja19zZXR0aW1lIChjbG9ja2lkX3Qg X19jbG9ja19pZCwgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fdHApCiAgICAgICAgICAgIDsK CgoKZXh0ZXJuIGludCBjbG9ja19uYW5vc2xlZXAgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBpbnQg X19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVz cGVjICpfX3JlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAq X19yZW0pIDsKCgpleHRlcm4gaW50IGNsb2NrX2dldGNwdWNsb2NraWQgKHBpZF90IF9fcGlkLCBj bG9ja2lkX3QgKl9fY2xvY2tfaWQpIDsKCgoKCmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChjbG9j a2lkX3QgX19jbG9ja19pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdldmVu dCAqX19yZXN0cmljdCBfX2V2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgKl9f cmVzdHJpY3QgX190aW1lcmlkKSA7CgoKZXh0ZXJuIGludCB0aW1lcl9kZWxldGUgKHRpbWVyX3Qg X190aW1lcmlkKSA7CgoKZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lICh0aW1lcl90IF9fdGltZXJp ZCwgaW50IF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qg aXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9fb3ZhbHVlKSA7CgoKZXh0ZXJuIGludCB0 aW1lcl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgc3RydWN0IGl0aW1lcnNwZWMgKl9fdmFs dWUpCiAgICAgICAgICAgIDsKCgpleHRlcm4gaW50IHRpbWVyX2dldG92ZXJydW4gKHRpbWVyX3Qg X190aW1lcmlkKSA7CiMgMzQyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgoKCgoyMDAxLTA4 LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQ YWdlICAxNTEKCgpleHRlcm4gaW50IGdldGRhdGVfZXJyOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0g KmdldGRhdGUgKF9fY29uc3QgY2hhciAqX19zdHJpbmcpIDsKIyAzNTcgIi91c3IvaW5jbHVkZS90 aW1lLmgiIDMKZXh0ZXJuIGludCBnZXRkYXRlX3IgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X3N0cmluZywKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3Jl c2J1ZnApIDsKIyAyMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL21pc2MuaCIgMgojIDEgIi91 c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9z eXMvdGltZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjUg Ii91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg MSAzCiMgMjcgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvdGltZS5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgNjQgIi91c3IvaW5jbHVkZS9iaXRzL3Rp bWUuaCIgMiAzCgoKCnN0cnVjdCB0aW1ldmFsCiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAg X19zdXNlY29uZHNfdCB0dl91c2VjOwogIH07CiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5o IiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMjUgIi91c3IvaW5j bHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg MjYgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvc3lz L3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAy MyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWlj X3Q7CgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5t aSAgICAgICAgICAgICAgICAgICBQYWdlICAxNTIKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1 bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25n IGludCkpKV07CiAgfSBfX3NpZ3NldF90OwojIDM1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5o IiAyIDMKCgoKdHlwZWRlZiBfX3NpZ3NldF90IHNpZ3NldF90OwoKCgoKIyAxICIvdXNyL2luY2x1 ZGUvdGltZS5oIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgNDYgIi91c3IvaW5jbHVkZS9zeXMvc2Vs ZWN0LmgiIDIgMwoKCgp0eXBlZGVmIGxvbmcgaW50IF9fZmRfbWFzazsKCgoKCgoKCnR5cGVkZWYg c3RydWN0CiAgewoKCgogICAgX19mZF9tYXNrIGZkc19iaXRzWzEwMjQgLyAoOCAqIHNpemVvZiAo X19mZF9tYXNrKSldOwoKCgoKCiAgfSBmZF9zZXQ7CgoKCgoKCnR5cGVkZWYgX19mZF9tYXNrIGZk X21hc2s7CiMgOTYgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuIGludCBzZWxl Y3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAg ICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAgICAg IGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgIHN0cnVj dCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgOwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAx OjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAx NTMKCgoKCgpleHRlcm4gaW50IHBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmlj dCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3Jp dGVmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRz LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBf X3RpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmlj dCBfX3NpZ21hc2spIDsKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMwoKCnR5cGVk ZWYgX19zdXNlY29uZHNfdCBzdXNlY29uZHNfdDsKIyA1NiAiL3Vzci9pbmNsdWRlL3N5cy90aW1l LmgiIDMKc3RydWN0IHRpbWV6b25lCiAgewogICAgaW50IHR6X21pbnV0ZXN3ZXN0OwogICAgaW50 IHR6X2RzdHRpbWU7CiAgfTsKCnR5cGVkZWYgc3RydWN0IHRpbWV6b25lICpfX3Jlc3RyaWN0IF9f dGltZXpvbmVfcHRyX3Q7CiMgNzIgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzCmV4dGVybiBp bnQgZ2V0dGltZW9mZGF5IChzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBfX3R2LAogICAgICAg ICAgICAgICAgICAgICAgICAgX190aW1lem9uZV9wdHJfdCBfX3R6KSA7CgoKCgpleHRlcm4gaW50 IHNldHRpbWVvZmRheSAoX19jb25zdCBzdHJ1Y3QgdGltZXZhbCAqX190diwKICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWV6b25lICpfX3R6KSA7CgoKCgoKZXh0ZXJu IGludCBhZGp0aW1lIChfX2NvbnN0IHN0cnVjdCB0aW1ldmFsICpfX2RlbHRhLAogICAgICAgICAg ICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX29sZGRlbHRhKSA7CgoKCgplbnVtIF9faXRpbWVy X3doaWNoCiAgewoKICAgIElUSU1FUl9SRUFMID0gMCwKCgogICAgSVRJTUVSX1ZJUlRVQUwgPSAx LAoKCgogICAgSVRJTUVSX1BST0YgPSAyCgogIH07CgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAxNTQK CgpzdHJ1Y3QgaXRpbWVydmFsCiAgewoKICAgIHN0cnVjdCB0aW1ldmFsIGl0X2ludGVydmFsOwoK ICAgIHN0cnVjdCB0aW1ldmFsIGl0X3ZhbHVlOwogIH07CgoKdHlwZWRlZiBlbnVtIF9faXRpbWVy X3doaWNoIF9faXRpbWVyX3doaWNoX3Q7CgoKCgoKCmV4dGVybiBpbnQgZ2V0aXRpbWVyIChfX2l0 aW1lcl93aGljaF90IF9fd2hpY2gsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVy dmFsICpfX3ZhbHVlKSA7CgoKCgpleHRlcm4gaW50IHNldGl0aW1lciAoX19pdGltZXJfd2hpY2hf dCBfX3doaWNoLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgaXRpbWVydmFs ICpfX3Jlc3RyaWN0IF9fbmV3LAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnZh bCAqX19yZXN0cmljdCBfX29sZCkgOwoKCgpleHRlcm4gaW50IHV0aW1lcyAoX19jb25zdCBjaGFy ICpfX2ZpbGUsIF9fY29uc3Qgc3RydWN0IHRpbWV2YWwgX190dnBbMl0pCiAgICAgICAgICAgIDsK IyAyMiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL21pc2MuaCIgMgojIDEgIi91c3IvaW5jbHVk ZS9lcnJuby5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAyIDMKCgoK CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRl L2JpdHMvZXJybm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIiAxIDMKCgoK IyAxICIvdXNyL2luY2x1ZGUvYXNtL2Vycm5vLmgiIDEgMwojIDUgIi91c3IvaW5jbHVkZS9saW51 eC9lcnJuby5oIiAyIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMiAzCiMgMzYg Ii91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMKZXh0ZXJuIGludCBlcnJubzsKCgpleHRlcm4g aW50ICpfX2Vycm5vX2xvY2F0aW9uICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CiMgMzcgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAyIDMKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEg ICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE1NQoK CiMgNTUgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCmV4dGVybiBjaGFyICpwcm9ncmFtX2ludm9j YXRpb25fbmFtZSwgKnByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lOwojIDY5ICIvdXNyL2lu Y2x1ZGUvZXJybm8uaCIgMwp0eXBlZGVmIGludCBlcnJvcl90OwojIDIzICIvdXNyL2xvY2FsL3N3 YXJtL2luY2x1ZGUvbWlzYy5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMwojIDI2 ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAx IDMKIyAyNyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz L3R5cGVzLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCiMgNDAgIi91c3Iv aW5jbHVkZS9jdHlwZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyA0MSAi L3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMwoKCgoKCgplbnVtCnsKICBfSVN1cHBlciA9ICgoMCkg PCA4ID8gKCgxIDw8ICgwKSkgPDwgOCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIg PSAoKDEpIDwgOCA/ICgoMSA8PCAoMSkpIDw8IDgpIDogKCgxIDw8ICgxKSkgPj4gOCkpLAogIF9J U2FscGhhID0gKCgyKSA8IDggPyAoKDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikpID4+IDgp KSwKICBfSVNkaWdpdCA9ICgoMykgPCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMp KSA+PiA4KSksCiAgX0lTeGRpZ2l0ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQpKSA8PCA4KSA6ICgo MSA8PCAoNCkpID4+IDgpKSwKICBfSVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwg OCkgOiAoKDEgPDwgKDUpKSA+PiA4KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwgOCA/ICgoMSA8PCAo NikpIDw8IDgpIDogKCgxIDw8ICg2KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8IDggPyAo KDEgPDwgKDcpKSA8PCA4KSA6ICgoMSA8PCAoNykpID4+IDgpKSwKICBfSVNibGFuayA9ICgoOCkg PCA4ID8gKCgxIDw8ICg4KSkgPDwgOCkgOiAoKDEgPDwgKDgpKSA+PiA4KSksCiAgX0lTY250cmwg PSAoKDkpIDwgOCA/ICgoMSA8PCAoOSkpIDw8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9J U3B1bmN0ID0gKCgxMCkgPCA4ID8gKCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+ IDgpKSwKICBfSVNhbG51bSA9ICgoMTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgoMSA8 PCAoMTEpKSA+PiA4KSkKfTsKIyA3NSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIF9f Y29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7CmV4dGVybiBfX2NvbnN0IF9faW50 MzJfdCAqX19jdHlwZV90b2xvd2VyOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVf dG91cHBlcjsKIyA5MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIGludCBpc2FsbnVt IChpbnQpIDsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIDsKZXh0ZXJuIGludCBpc2NudHJsIChp bnQpIDsKZXh0ZXJuIGludCBpc2RpZ2l0IChpbnQpIDsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQp IDsKZXh0ZXJuIGludCBpc2dyYXBoIChpbnQpIDsKZXh0ZXJuIGludCBpc3ByaW50IChpbnQpIDsK ZXh0ZXJuIGludCBpc3B1bmN0IChpbnQpIDsKZXh0ZXJuIGludCBpc3NwYWNlIChpbnQpIDsKZXh0 ZXJuIGludCBpc3VwcGVyIChpbnQpIDsKZXh0ZXJuIGludCBpc3hkaWdpdCAoaW50KSA7CgoKZXh0 ZXJuIGludCBpc2JsYW5rIChpbnQpIDsKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAg ICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgMTU2CgoKCgpleHRl cm4gaW50IHRvbG93ZXIgKGludCBfX2MpIDsKCgpleHRlcm4gaW50IHRvdXBwZXIgKGludCBfX2Mp IDsKCgoKCgoKZXh0ZXJuIGludCBpc2FzY2lpIChpbnQgX19jKSA7CgoKCmV4dGVybiBpbnQgdG9h c2NpaSAoaW50IF9fYykgOwoKCgpleHRlcm4gaW50IF90b3VwcGVyIChpbnQpIDsKZXh0ZXJuIGlu dCBfdG9sb3dlciAoaW50KSA7CiMgMTY4ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4g X19pbmxpbmUgaW50CnRvbG93ZXIgKGludCBfX2MpCnsKICByZXR1cm4gX19jID49IC0xMjggJiYg X19jIDwgMjU2ID8gX19jdHlwZV90b2xvd2VyW19fY10gOiBfX2M7Cn0KCmV4dGVybiBfX2lubGlu ZSBpbnQKdG91cHBlciAoaW50IF9fYykKewogIHJldHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAy NTYgPyBfX2N0eXBlX3RvdXBwZXJbX19jXSA6IF9fYzsKfQojIDIxMSAiL3Vzci9pbmNsdWRlL2N0 eXBlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyMTIgIi91c3IvaW5j bHVkZS9jdHlwZS5oIiAyIDMKIyAyMjQgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBp bnQgX19pc2FsbnVtX2wgKGludCwgX19sb2NhbGVfdCkgOwpleHRlcm4gaW50IF9faXNhbHBoYV9s IChpbnQsIF9fbG9jYWxlX3QpIDsKZXh0ZXJuIGludCBfX2lzY250cmxfbCAoaW50LCBfX2xvY2Fs ZV90KSA7CmV4dGVybiBpbnQgX19pc2RpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgOwpleHRlcm4g aW50IF9faXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIDsKZXh0ZXJuIGludCBfX2lzZ3JhcGhf bCAoaW50LCBfX2xvY2FsZV90KSA7CmV4dGVybiBpbnQgX19pc3ByaW50X2wgKGludCwgX19sb2Nh bGVfdCkgOwpleHRlcm4gaW50IF9faXNwdW5jdF9sIChpbnQsIF9fbG9jYWxlX3QpIDsKZXh0ZXJu IGludCBfX2lzc3BhY2VfbCAoaW50LCBfX2xvY2FsZV90KSA7CmV4dGVybiBpbnQgX19pc3VwcGVy X2wgKGludCwgX19sb2NhbGVfdCkgOwpleHRlcm4gaW50IF9faXN4ZGlnaXRfbCAoaW50LCBfX2xv Y2FsZV90KSA7CgpleHRlcm4gaW50IF9faXNibGFua19sIChpbnQsIF9fbG9jYWxlX3QpIDsKCgoK ZXh0ZXJuIGludCBfX3RvbG93ZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIDsKCgoKCgoK CgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAg ICAgICAgICBQYWdlICAxNTcKCgoKZXh0ZXJuIGludCBfX3RvdXBwZXJfbCAoaW50IF9fYywgX19s b2NhbGVfdCBfX2wpIDsKIyAyNCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL21pc2MuaCIgMgoj IDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zeXMv dHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9p bmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5o IiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIF9fdV9j aGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVf aW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5 cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKdHlw ZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKdHlw ZWRlZiBfX2lubzY0X3QgaW5vNjRfdDsKCgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKIyA2OCAi L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoK dHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKIyAxMDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu aCIgMwp0eXBlZGVmIF9faWRfdCBpZF90OwojIDExMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o IiAzCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7 CgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAg ICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE1OAoKCiMgMTI2 ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAx IDMKIyAxMjcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCiMgMTQwICIvdXNyL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQxICIvdXNyL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0 eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVp bnQ7CiMgMTg0ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50OF90 IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90 IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90 IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90 IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQg aW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVm IHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18p KSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl X18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJp YnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwojIDIwNiAiL3Vzci9pbmNsdWRlL3N5cy90 eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAyMDcgIi91c3IvaW5j bHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAx IDMKIyAyMTAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1 ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMKIyAyMTMgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg MiAzCgoKCgp0eXBlZGVmIF9fYmxrc2l6ZV90IGJsa3NpemVfdDsKCgoKCgoKdHlwZWRlZiBfX2Js a2NudF90IGJsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Jsa2NudF90OwoKCgp0 eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90OwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAg ICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgMTU5CgoK IyAyNTEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxrY250NjRfdCBi bGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBf X2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7CiMgMjUgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9taXNjLmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMSAzCiMgMjYgIi91c3Iv aW5jbHVkZS9zeXMvc3RhdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwoj IDI3ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz L3R5cGVzLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMiAzCgoKCiMgMSAi L3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAy IDMKIyA5OCAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy9zdGF0LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9zdGF0LmgiIDMKc3RydWN0IHN0 YXQKICB7CiAgICBfX2Rldl90IHN0X2RldjsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3BhZDE7 CgogICAgX19pbm9fdCBzdF9pbm87CgoKCiAgICBfX21vZGVfdCBzdF9tb2RlOwogICAgX19ubGlu a190IHN0X25saW5rOwogICAgX191aWRfdCBzdF91aWQ7CiAgICBfX2dpZF90IHN0X2dpZDsKICAg IF9fZGV2X3Qgc3RfcmRldjsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3BhZDI7CgogICAgX19v ZmZfdCBzdF9zaXplOwoKCgogICAgX19ibGtzaXplX3Qgc3RfYmxrc2l6ZTsKCgogICAgX19ibGtj bnRfdCBzdF9ibG9ja3M7CgoKCiAgICBfX3RpbWVfdCBzdF9hdGltZTsKICAgIHVuc2lnbmVkIGxv bmcgaW50IF9fdW51c2VkMTsKICAgIF9fdGltZV90IHN0X210aW1lOwogICAgdW5zaWduZWQgbG9u ZyBpbnQgX191bnVzZWQyOwogICAgX190aW1lX3Qgc3RfY3RpbWU7CiAgICB1bnNpZ25lZCBsb25n IGludCBfX3VudXNlZDM7CgogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQ0OwogICAgdW5z aWduZWQgbG9uZyBpbnQgX191bnVzZWQ1OwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAg ICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgMTYwCgoKCgoKICB9 OwoKCnN0cnVjdCBzdGF0NjQKICB7CiAgICBfX2Rldl90IHN0X2RldjsKICAgIHVuc2lnbmVkIGlu dCBfX3BhZDE7CgogICAgX19pbm9fdCBfX3N0X2lubzsKICAgIF9fbW9kZV90IHN0X21vZGU7CiAg ICBfX25saW5rX3Qgc3Rfbmxpbms7CiAgICBfX3VpZF90IHN0X3VpZDsKICAgIF9fZ2lkX3Qgc3Rf Z2lkOwogICAgX19kZXZfdCBzdF9yZGV2OwogICAgdW5zaWduZWQgaW50IF9fcGFkMjsKICAgIF9f b2ZmNjRfdCBzdF9zaXplOwogICAgX19ibGtzaXplX3Qgc3RfYmxrc2l6ZTsKCiAgICBfX2Jsa2Nu dDY0X3Qgc3RfYmxvY2tzOwogICAgX190aW1lX3Qgc3RfYXRpbWU7CiAgICB1bnNpZ25lZCBsb25n IGludCBfX3VudXNlZDE7CiAgICBfX3RpbWVfdCBzdF9tdGltZTsKICAgIHVuc2lnbmVkIGxvbmcg aW50IF9fdW51c2VkMjsKICAgIF9fdGltZV90IHN0X2N0aW1lOwogICAgdW5zaWduZWQgbG9uZyBp bnQgX191bnVzZWQzOwogICAgX19pbm82NF90IHN0X2lubzsKICB9OwojIDk5ICIvdXNyL2luY2x1 ZGUvc3lzL3N0YXQuaCIgMiAzCiMgMjAwICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwpleHRl cm4gaW50IHN0YXQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGUsCiAgICAgICAgICAg ICAgICAgc3RydWN0IHN0YXQgKl9fcmVzdHJpY3QgX19idWYpIDsKCgoKZXh0ZXJuIGludCBmc3Rh dCAoaW50IF9fZmQsIHN0cnVjdCBzdGF0ICpfX2J1ZikgOwojIDIxOSAiL3Vzci9pbmNsdWRlL3N5 cy9zdGF0LmgiIDMKZXh0ZXJuIGludCBzdGF0NjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2ZpbGUsCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdDY0ICpfX3Jlc3RyaWN0IF9fYnVm KSA7CmV4dGVybiBpbnQgZnN0YXQ2NCAoaW50IF9fZmQsIHN0cnVjdCBzdGF0NjQgKl9fYnVmKSA7 CgoKCgoKCmV4dGVybiBpbnQgbHN0YXQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGUs CiAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3Jlc3RyaWN0IF9fYnVmKSA7CiMgMjQx ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwpleHRlcm4gaW50IGxzdGF0NjQgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQ2 NCAqX19yZXN0cmljdCBfX2J1ZikgOwoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAg ICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgMTYxCgoKCgoKZXh0 ZXJuIGludCBjaG1vZCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fbW9kZV90IF9fbW9kZSkgOwoK CgpleHRlcm4gaW50IGZjaG1vZCAoaW50IF9fZmQsIF9fbW9kZV90IF9fbW9kZSkgOwoKCgoKCmV4 dGVybiBfX21vZGVfdCB1bWFzayAoX19tb2RlX3QgX19tYXNrKSA7CgoKCgpleHRlcm4gX19tb2Rl X3QgZ2V0dW1hc2sgKHZvaWQpIDsKCgoKZXh0ZXJuIGludCBta2RpciAoX19jb25zdCBjaGFyICpf X3BhdGgsIF9fbW9kZV90IF9fbW9kZSkgOwoKCgoKCmV4dGVybiBpbnQgbWtub2QgKF9fY29uc3Qg Y2hhciAqX19wYXRoLCBfX21vZGVfdCBfX21vZGUsIF9fZGV2X3QgX19kZXYpCiAgICAgICAgICAg IDsKCgoKCmV4dGVybiBpbnQgbWtmaWZvIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19tb2RlX3Qg X19tb2RlKSA7CiMgMzA2ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwpleHRlcm4gaW50IF9f ZnhzdGF0IChpbnQgX192ZXIsIGludCBfX2ZpbGRlcywgc3RydWN0IHN0YXQgKl9fc3RhdF9idWYp IDsKZXh0ZXJuIGludCBfX3hzdGF0IChpbnQgX192ZXIsIF9fY29uc3QgY2hhciAqX19maWxlbmFt ZSwKICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCAqX19zdGF0X2J1ZikgOwpleHRlcm4g aW50IF9fbHhzdGF0IChpbnQgX192ZXIsIF9fY29uc3QgY2hhciAqX19maWxlbmFtZSwKICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgKl9fc3RhdF9idWYpIDsKIyAzMzAgIi91c3IvaW5j bHVkZS9zeXMvc3RhdC5oIiAzCmV4dGVybiBpbnQgX19meHN0YXQ2NCAoaW50IF9fdmVyLCBpbnQg X19maWxkZXMsIHN0cnVjdCBzdGF0NjQgKl9fc3RhdF9idWYpCiAgICAgICAgICAgIDsKZXh0ZXJu IGludCBfX3hzdGF0NjQgKGludCBfX3ZlciwgX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lLAogICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQ2NCAqX19zdGF0X2J1ZikgOwpleHRlcm4gaW50 IF9fbHhzdGF0NjQgKGludCBfX3ZlciwgX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lLAogICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0NjQgKl9fc3RhdF9idWYpIDsKCmV4dGVybiBpbnQg X194bWtub2QgKGludCBfX3ZlciwgX19jb25zdCBjaGFyICpfX3BhdGgsIF9fbW9kZV90IF9fbW9k ZSwKICAgICAgICAgICAgICAgICAgICAgX19kZXZfdCAqX19kZXYpIDsKCgoKCmV4dGVybiBfX2lu bGluZV9fIGludCBzdGF0IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwKCgoKCgoKCjIwMDEtMDgtMjQg MDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2Ug IDE2MgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCAqX19zdGF0YnVm KQp7CiAgcmV0dXJuIF9feHN0YXQgKDMsIF9fcGF0aCwgX19zdGF0YnVmKTsKfQoKCmV4dGVybiBf X2lubGluZV9fIGludCBsc3RhdCAoX19jb25zdCBjaGFyICpfX3BhdGgsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgKl9fc3RhdGJ1ZikKewogIHJldHVybiBfX2x4c3Rh dCAoMywgX19wYXRoLCBfX3N0YXRidWYpOwp9CgoKZXh0ZXJuIF9faW5saW5lX18gaW50IGZzdGF0 IChpbnQgX19mZCwgc3RydWN0IHN0YXQgKl9fc3RhdGJ1ZikKewogIHJldHVybiBfX2Z4c3RhdCAo MywgX19mZCwgX19zdGF0YnVmKTsKfQoKCmV4dGVybiBfX2lubGluZV9fIGludCBta25vZCAoX19j b25zdCBjaGFyICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2Rldl90IF9fZGV2KQp7CiAgcmV0dXJuIF9feG1rbm9kICgxLCBfX3BhdGgsIF9f bW9kZSwgJl9fZGV2KTsKfQoKCgoKCmV4dGVybiBfX2lubGluZV9fIGludCBzdGF0NjQgKF9fY29u c3QgY2hhciAqX19wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3Rh dDY0ICpfX3N0YXRidWYpCnsKICByZXR1cm4gX194c3RhdDY0ICgzLCBfX3BhdGgsIF9fc3RhdGJ1 Zik7Cn0KCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgbHN0YXQ2NCAoX19jb25zdCBjaGFyICpfX3Bh dGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdDY0ICpfX3N0YXRi dWYpCnsKICByZXR1cm4gX19seHN0YXQ2NCAoMywgX19wYXRoLCBfX3N0YXRidWYpOwp9CgoKZXh0 ZXJuIF9faW5saW5lX18gaW50IGZzdGF0NjQgKGludCBfX2ZkLCBzdHJ1Y3Qgc3RhdDY0ICpfX3N0 YXRidWYpCnsKICByZXR1cm4gX19meHN0YXQ2NCAoMywgX19mZCwgX19zdGF0YnVmKTsKfQojIDI2 ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvbWlzYy5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL21h dGguaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv ZmVhdHVyZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCgoKCgoKCgoK CjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAg ICAgICAgIFBhZ2UgIDE2MwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDEg MwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L2ZlYXR1cmVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAyIDMK IyAzNCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv bmFuLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgojIDEgIi91c3IvaW5j bHVkZS9iaXRzL21hdGhkZWYuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYu aCIgMwp0eXBlZGVmIGxvbmcgZG91YmxlIGZsb2F0X3Q7Cgp0eXBlZGVmIGxvbmcgZG91YmxlIGRv dWJsZV90OwojIDQxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA2MyAiL3Vzci9pbmNsdWRl L21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAi L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGRvdWJsZSBhY29zIChkb3Vi bGUgX194KSA7IGV4dGVybiBkb3VibGUgX19hY29zIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91 YmxlIGFzaW4gKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2FzaW4gKGRvdWJsZSBfX3gp IDsKCmV4dGVybiBkb3VibGUgYXRhbiAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fYXRh biAoZG91YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91Ymxl IF9feCkgOyBleHRlcm4gZG91YmxlIF9fYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIDsK CgpleHRlcm4gZG91YmxlIGNvcyAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fY29zIChk b3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIHNpbiAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91 YmxlIF9fc2luIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIHRhbiAoZG91YmxlIF9feCkg OyBleHRlcm4gZG91YmxlIF9fdGFuIChkb3VibGUgX194KSA7CgoKCmV4dGVybiB2b2lkIHNpbmNv cyAoZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJsZSAqX19jb3N4KSA7IGV4dGVybiB2 b2lkIF9fc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gp IDsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBjb3NoIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUg X19jb3NoIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIHNpbmggKGRvdWJsZSBfX3gpIDsg ZXh0ZXJuIGRvdWJsZSBfX3NpbmggKGRvdWJsZSBfX3gpIDsKCmV4dGVybiBkb3VibGUgdGFuaCAo ZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fdGFuaCAoZG91YmxlIF9feCkgOwoKCgpleHRl cm4gZG91YmxlIGFjb3NoIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19hY29zaCAoZG91 YmxlIF9feCkgOwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVy c29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE2NAoKCmV4dGVybiBkb3VibGUgYXNpbmgg KGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2FzaW5oIChkb3VibGUgX194KSA7CgpleHRl cm4gZG91YmxlIGF0YW5oIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19hdGFuaCAoZG91 YmxlIF9feCkgOwoKCgoKCmV4dGVybiBkb3VibGUgZXhwIChkb3VibGUgX194KSA7IGV4dGVybiBk b3VibGUgX19leHAgKGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJuIGRvdWJsZSBleHAxMCAoZG91Ymxl IF9feCkgOyBleHRlcm4gZG91YmxlIF9fZXhwMTAgKGRvdWJsZSBfX3gpIDsKCmV4dGVybiBkb3Vi bGUgcG93MTAgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX3BvdzEwIChkb3VibGUgX194 KSA7CgoKCmV4dGVybiBkb3VibGUgZnJleHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkg OyBleHRlcm4gZG91YmxlIF9fZnJleHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgOwoK CmV4dGVybiBkb3VibGUgbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSA7IGV4dGVy biBkb3VibGUgX19sZGV4cCAoZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIDsKCgpleHRlcm4g ZG91YmxlIGxvZyAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fbG9nIChkb3VibGUgX194 KSA7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9f bG9nMTAgKGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gZG91YmxlIG1vZGYgKGRvdWJsZSBfX3gsIGRv dWJsZSAqX19pcHRyKSA7IGV4dGVybiBkb3VibGUgX19tb2RmIChkb3VibGUgX194LCBkb3VibGUg Kl9faXB0cikgOwoKCgpleHRlcm4gZG91YmxlIGV4cG0xIChkb3VibGUgX194KSA7IGV4dGVybiBk b3VibGUgX19leHBtMSAoZG91YmxlIF9feCkgOwoKCmV4dGVybiBkb3VibGUgbG9nMXAgKGRvdWJs ZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2xvZzFwIChkb3VibGUgX194KSA7CgoKZXh0ZXJuIGRv dWJsZSBsb2diIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19sb2diIChkb3VibGUgX194 KSA7CgoKCgpleHRlcm4gZG91YmxlIGV4cDIgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBf X2V4cDIgKGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gZG91YmxlIGxvZzIgKGRvdWJsZSBfX3gpIDsg ZXh0ZXJuIGRvdWJsZSBfX2xvZzIgKGRvdWJsZSBfX3gpIDsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBw b3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGRvdWJsZSBfX3BvdyAoZG91Ymxl IF9feCwgZG91YmxlIF9feSkgOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAg ICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgMTY1CgoKCgpleHRlcm4gZG91 YmxlIHNxcnQgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX3NxcnQgKGRvdWJsZSBfX3gp IDsKCgoKZXh0ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOyBleHRl cm4gZG91YmxlIF9faHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsKCgoKCmV4dGVybiBk b3VibGUgY2JydCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fY2JydCAoZG91YmxlIF9f eCkgOwoKCgoKCgpleHRlcm4gZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJs ZSBfX2NlaWwgKGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gZG91YmxlIGZhYnMgKGRvdWJsZSBfX3gp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2ZhYnMgKGRvdWJs ZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGZsb29y IChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19mbG9vciAoZG91YmxlIF9feCkgOwoKCmV4 dGVybiBkb3VibGUgZm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOyBleHRlcm4gZG91Ymxl IF9fZm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5m IChkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBp bnQgX19maW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlIChkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBpbmZuYW4gKGludCBfX2Vy cm9yKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19pbmZuYW4g KGludCBfX2Vycm9yKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJs ZSBkcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSA7IGV4dGVybiBkb3VibGUgX19kcmVtIChk b3VibGUgX194LCBkb3VibGUgX195KSA7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAg ICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgMTY2CgoKCgpleHRl cm4gZG91YmxlIHNpZ25pZmljYW5kIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19zaWdu aWZpY2FuZCAoZG91YmxlIF9feCkgOwoKCgoKZXh0ZXJuIGRvdWJsZSBjb3B5c2lnbiAoZG91Ymxl IF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91 YmxlIF9fY29weXNpZ24gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCgoKCmV4dGVybiBkb3VibGUgbmFuIChfX2NvbnN0IGNoYXIgKl9fdGFnYikg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmFuIChfX2NvbnN0 IGNoYXIgKl9fdGFnYikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGlu dCBfX2lzbmFuIChkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK CgpleHRlcm4gaW50IGlzbmFuIChkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKCmV4dGVybiBkb3VibGUgajAgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fajAg KGRvdWJsZSkgOwpleHRlcm4gZG91YmxlIGoxIChkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX2ox IChkb3VibGUpIDsKZXh0ZXJuIGRvdWJsZSBqbiAoaW50LCBkb3VibGUpIDsgZXh0ZXJuIGRvdWJs ZSBfX2puIChpbnQsIGRvdWJsZSkgOwpleHRlcm4gZG91YmxlIHkwIChkb3VibGUpIDsgZXh0ZXJu IGRvdWJsZSBfX3kwIChkb3VibGUpIDsKZXh0ZXJuIGRvdWJsZSB5MSAoZG91YmxlKSA7IGV4dGVy biBkb3VibGUgX195MSAoZG91YmxlKSA7CmV4dGVybiBkb3VibGUgeW4gKGludCwgZG91YmxlKSA7 IGV4dGVybiBkb3VibGUgX195biAoaW50LCBkb3VibGUpIDsKCgoKCgpleHRlcm4gZG91YmxlIGVy ZiAoZG91YmxlKSA7IGV4dGVybiBkb3VibGUgX19lcmYgKGRvdWJsZSkgOwpleHRlcm4gZG91Ymxl IGVyZmMgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fZXJmYyAoZG91YmxlKSA7CmV4dGVybiBk b3VibGUgbGdhbW1hIChkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYSAoZG91YmxlKSA7 CgoKCmV4dGVybiBkb3VibGUgdGdhbW1hIChkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX3RnYW1t YSAoZG91YmxlKSA7CgoKCgpleHRlcm4gZG91YmxlIGdhbW1hIChkb3VibGUpIDsgZXh0ZXJuIGRv dWJsZSBfX2dhbW1hIChkb3VibGUpIDsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBsZ2FtbWFfciAoZG91 YmxlLCBpbnQgKl9fc2lnbmdhbXApIDsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYV9yIChkb3VibGUs IGludCAqX19zaWduZ2FtcCkgOwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAg ICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAxNjcKCgoKCgoKZXh0ZXJu IGRvdWJsZSByaW50IChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19yaW50IChkb3VibGUg X194KSA7CgoKZXh0ZXJuIGRvdWJsZSBuZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25leHRhZnRlciAo ZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0 ZXJuIGRvdWJsZSBuZXh0dG93YXJkIChkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25leHR0b3dhcmQgKGRvdWJs ZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpl eHRlcm4gZG91YmxlIHJlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOyBleHRlcm4g ZG91YmxlIF9fcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSA7CgoKCmV4dGVybiBk b3VibGUgc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIDsgZXh0ZXJuIGRvdWJsZSBfX3Nj YWxiIChkb3VibGUgX194LCBkb3VibGUgX19uKSA7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibiAo ZG91YmxlIF9feCwgaW50IF9fbikgOyBleHRlcm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194 LCBpbnQgX19uKSA7CgoKCmV4dGVybiBpbnQgaWxvZ2IgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGlu dCBfX2lsb2diIChkb3VibGUgX194KSA7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibG4gKGRvdWJs ZSBfX3gsIGxvbmcgaW50IF9fbikgOyBleHRlcm4gZG91YmxlIF9fc2NhbGJsbiAoZG91YmxlIF9f eCwgbG9uZyBpbnQgX19uKSA7CgoKCmV4dGVybiBkb3VibGUgbmVhcmJ5aW50IChkb3VibGUgX194 KSA7IGV4dGVybiBkb3VibGUgX19uZWFyYnlpbnQgKGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJuIGRv dWJsZSByb3VuZCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fcm91bmQgKGRvdWJsZSBf X3gpIDsKCgoKZXh0ZXJuIGRvdWJsZSB0cnVuYyAoZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fdHJ1bmMgKGRvdWJsZSBfX3gpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBkb3VibGUgcmVtcXVvIChkb3VibGUgX194 LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSA7IGV4dGVybiBkb3VibGUgX19yZW1xdW8gKGRvdWJs ZSBfX3gsIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIDsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxy aW50IChkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGludCBfX2xyaW50IChkb3VibGUgX194KSA7 CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAg ICAgICAgICAgICAgICBQYWdlICAxNjgKCgpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnQgKGRv dWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnQgKGRvdWJsZSBfX3gpIDsK CgoKZXh0ZXJuIGxvbmcgaW50IGxyb3VuZCAoZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBpbnQg X19scm91bmQgKGRvdWJsZSBfX3gpIDsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZCAoZG91 YmxlIF9feCkgOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmQgKGRvdWJsZSBfX3gpIDsK CgoKZXh0ZXJuIGRvdWJsZSBmZGltIChkb3VibGUgX194LCBkb3VibGUgX195KSA7IGV4dGVybiBk b3VibGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195KSA7CgoKZXh0ZXJuIGRvdWJsZSBm bWF4IChkb3VibGUgX194LCBkb3VibGUgX195KSA7IGV4dGVybiBkb3VibGUgX19mbWF4IChkb3Vi bGUgX194LCBkb3VibGUgX195KSA7CgoKZXh0ZXJuIGRvdWJsZSBmbWluIChkb3VibGUgX194LCBk b3VibGUgX195KSA7IGV4dGVybiBkb3VibGUgX19mbWluIChkb3VibGUgX194LCBkb3VibGUgX195 KSA7CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5IChkb3VibGUgX192YWx1ZSkKICAgICBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXQgKGRvdWJsZSBf X3ZhbHVlKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGRvdWJs ZSBmbWEgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opIDsgZXh0ZXJuIGRvdWJs ZSBfX2ZtYSAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgZG91YmxlIF9feikgOwojIDY0ICIvdXNy L2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA4MiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMv bWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IGFjb3NmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZs b2F0IF9fYWNvc2YgKGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZsb2F0IGFzaW5mIChmbG9hdCBfX3gp IDsgZXh0ZXJuIGZsb2F0IF9fYXNpbmYgKGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZsb2F0IGF0YW5m IChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fYXRhbmYgKGZsb2F0IF9feCkgOwoKZXh0ZXJu IGZsb2F0IGF0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fYXRh bjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgOwoKCmV4dGVybiBmbG9hdCBjb3NmIChmbG9hdCBf X3gpIDsgZXh0ZXJuIGZsb2F0IF9fY29zZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgc2lu ZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3NpbmYgKGZsb2F0IF9feCkgOwoKZXh0ZXJu IGZsb2F0IHRhbmYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX190YW5mIChmbG9hdCBfX3gp IDsKCgoKZXh0ZXJuIHZvaWQgc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9h dCAqX19jb3N4KSA7IGV4dGVybiB2b2lkIF9fc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19z aW54LCBmbG9hdCAqX19jb3N4KSA7CgoKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAg ICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE2OQoKCgpleHRl cm4gZmxvYXQgY29zaGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19jb3NoZiAoZmxvYXQg X194KSA7CgpleHRlcm4gZmxvYXQgc2luaGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19z aW5oZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgdGFuaGYgKGZsb2F0IF9feCkgOyBleHRl cm4gZmxvYXQgX190YW5oZiAoZmxvYXQgX194KSA7CgoKCmV4dGVybiBmbG9hdCBhY29zaGYgKGZs b2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19hY29zaGYgKGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZs b2F0IGFzaW5oZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2FzaW5oZiAoZmxvYXQgX194 KSA7CgpleHRlcm4gZmxvYXQgYXRhbmhmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fYXRh bmhmIChmbG9hdCBfX3gpIDsKCgoKCgpleHRlcm4gZmxvYXQgZXhwZiAoZmxvYXQgX194KSA7IGV4 dGVybiBmbG9hdCBfX2V4cGYgKGZsb2F0IF9feCkgOwoKCgpleHRlcm4gZmxvYXQgZXhwMTBmIChm bG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fZXhwMTBmIChmbG9hdCBfX3gpIDsKCmV4dGVybiBm bG9hdCBwb3cxMGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19wb3cxMGYgKGZsb2F0IF9f eCkgOwoKCgpleHRlcm4gZmxvYXQgZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBvbmVudCkg OyBleHRlcm4gZmxvYXQgX19mcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50KSA7CgoK ZXh0ZXJuIGZsb2F0IGxkZXhwZiAoZmxvYXQgX194LCBpbnQgX19leHBvbmVudCkgOyBleHRlcm4g ZmxvYXQgX19sZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpIDsKCgpleHRlcm4gZmxv YXQgbG9nZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2xvZ2YgKGZsb2F0IF9feCkgOwoK CmV4dGVybiBmbG9hdCBsb2cxMGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19sb2cxMGYg KGZsb2F0IF9feCkgOwoKCmV4dGVybiBmbG9hdCBtb2RmZiAoZmxvYXQgX194LCBmbG9hdCAqX19p cHRyKSA7IGV4dGVybiBmbG9hdCBfX21vZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpIDsK CgoKZXh0ZXJuIGZsb2F0IGV4cG0xZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2V4cG0x ZiAoZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0IGxvZzFwZiAoZmxvYXQgX194KSA7IGV4dGVy biBmbG9hdCBfX2xvZzFwZiAoZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0IGxvZ2JmIChmbG9h dCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fbG9nYmYgKGZsb2F0IF9feCkgOwoKCgoKCgoKCgoKCjIw MDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAg ICAgIFBhZ2UgIDE3MAoKCmV4dGVybiBmbG9hdCBleHAyZiAoZmxvYXQgX194KSA7IGV4dGVybiBm bG9hdCBfX2V4cDJmIChmbG9hdCBfX3gpIDsKCgpleHRlcm4gZmxvYXQgbG9nMmYgKGZsb2F0IF9f eCkgOyBleHRlcm4gZmxvYXQgX19sb2cyZiAoZmxvYXQgX194KSA7CgoKCgoKCmV4dGVybiBmbG9h dCBwb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOyBleHRlcm4gZmxvYXQgX19wb3dmIChmbG9h dCBfX3gsIGZsb2F0IF9feSkgOwoKCmV4dGVybiBmbG9hdCBzcXJ0ZiAoZmxvYXQgX194KSA7IGV4 dGVybiBmbG9hdCBfX3NxcnRmIChmbG9hdCBfX3gpIDsKCgoKZXh0ZXJuIGZsb2F0IGh5cG90ZiAo ZmxvYXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJuIGZsb2F0IF9faHlwb3RmIChmbG9hdCBfX3gs IGZsb2F0IF9feSkgOwoKCgoKZXh0ZXJuIGZsb2F0IGNicnRmIChmbG9hdCBfX3gpIDsgZXh0ZXJu IGZsb2F0IF9fY2JydGYgKGZsb2F0IF9feCkgOwoKCgoKCgpleHRlcm4gZmxvYXQgY2VpbGYgKGZs b2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19jZWlsZiAoZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZs b2F0IGZhYnNmIChmbG9hdCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJu IGZsb2F0IF9fZmFic2YgKGZsb2F0IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK CmV4dGVybiBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19mbG9vcmYg KGZsb2F0IF9feCkgOwoKCmV4dGVybiBmbG9hdCBmbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp IDsgZXh0ZXJuIGZsb2F0IF9fZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7CgoKCgpleHRl cm4gaW50IF9faXNpbmZmIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmZmIChmbG9hdCBfX3ZhbHVlKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVmIChmbG9hdCBfX3Zh bHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToy MSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgMTcx CgoKCgoKCgoKZXh0ZXJuIGZsb2F0IGluZm5hbmYgKGludCBfX2Vycm9yKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2luZm5hbmYgKGludCBfX2Vycm9yKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGRyZW1mIChmbG9hdCBfX3gs IGZsb2F0IF9feSkgOyBleHRlcm4gZmxvYXQgX19kcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp IDsKCgoKZXh0ZXJuIGZsb2F0IHNpZ25pZmljYW5kZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9h dCBfX3NpZ25pZmljYW5kZiAoZmxvYXQgX194KSA7CgoKCgpleHRlcm4gZmxvYXQgY29weXNpZ25m IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl cm4gZmxvYXQgX19jb3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gZmxvYXQgbmFuZiAoX19jb25zdCBjaGFyICpfX3Rh Z2IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmFuZiAoX19j b25zdCBjaGFyICpfX3RhZ2IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVy biBpbnQgX19pc25hbmYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgoKZXh0ZXJuIGludCBpc25hbmYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgajBmIChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX19q MGYgKGZsb2F0KSA7CmV4dGVybiBmbG9hdCBqMWYgKGZsb2F0KSA7IGV4dGVybiBmbG9hdCBfX2ox ZiAoZmxvYXQpIDsKZXh0ZXJuIGZsb2F0IGpuZiAoaW50LCBmbG9hdCkgOyBleHRlcm4gZmxvYXQg X19qbmYgKGludCwgZmxvYXQpIDsKZXh0ZXJuIGZsb2F0IHkwZiAoZmxvYXQpIDsgZXh0ZXJuIGZs b2F0IF9feTBmIChmbG9hdCkgOwpleHRlcm4gZmxvYXQgeTFmIChmbG9hdCkgOyBleHRlcm4gZmxv YXQgX195MWYgKGZsb2F0KSA7CmV4dGVybiBmbG9hdCB5bmYgKGludCwgZmxvYXQpIDsgZXh0ZXJu IGZsb2F0IF9feW5mIChpbnQsIGZsb2F0KSA7CgoKCgoKZXh0ZXJuIGZsb2F0IGVyZmYgKGZsb2F0 KSA7IGV4dGVybiBmbG9hdCBfX2VyZmYgKGZsb2F0KSA7CmV4dGVybiBmbG9hdCBlcmZjZiAoZmxv YXQpIDsgZXh0ZXJuIGZsb2F0IF9fZXJmY2YgKGZsb2F0KSA7CmV4dGVybiBmbG9hdCBsZ2FtbWFm IChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX19sZ2FtbWFmIChmbG9hdCkgOwoKCgpleHRlcm4gZmxv YXQgdGdhbW1hZiAoZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9fdGdhbW1hZiAoZmxvYXQpIDsKCgoK CgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAg ICAgICAgICAgICAgIFBhZ2UgIDE3MgoKCgpleHRlcm4gZmxvYXQgZ2FtbWFmIChmbG9hdCkgOyBl eHRlcm4gZmxvYXQgX19nYW1tYWYgKGZsb2F0KSA7CgoKCgoKCmV4dGVybiBmbG9hdCBsZ2FtbWFm X3IgKGZsb2F0LCBpbnQgKl9fc2lnbmdhbXApIDsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZl9yIChm bG9hdCwgaW50ICpfX3NpZ25nYW1wKSA7CgoKCgoKCmV4dGVybiBmbG9hdCByaW50ZiAoZmxvYXQg X194KSA7IGV4dGVybiBmbG9hdCBfX3JpbnRmIChmbG9hdCBfX3gpIDsKCgpleHRlcm4gZmxvYXQg bmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBmbG9hdCBuZXh0dG93YXJkZiAoZmxv YXQgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0 ZXJuIGZsb2F0IF9fbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBmbG9hdCByZW1haW5kZXJmIChmbG9h dCBfX3gsIGZsb2F0IF9feSkgOyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJmIChmbG9hdCBfX3gs IGZsb2F0IF9feSkgOwoKCgpleHRlcm4gZmxvYXQgc2NhbGJmIChmbG9hdCBfX3gsIGZsb2F0IF9f bikgOyBleHRlcm4gZmxvYXQgX19zY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQgX19uKSA7CgoKCgpl eHRlcm4gZmxvYXQgc2NhbGJuZiAoZmxvYXQgX194LCBpbnQgX19uKSA7IGV4dGVybiBmbG9hdCBf X3NjYWxibmYgKGZsb2F0IF9feCwgaW50IF9fbikgOwoKCgpleHRlcm4gaW50IGlsb2diZiAoZmxv YXQgX194KSA7IGV4dGVybiBpbnQgX19pbG9nYmYgKGZsb2F0IF9feCkgOwoKCgoKZXh0ZXJuIGZs b2F0IHNjYWxibG5mIChmbG9hdCBfX3gsIGxvbmcgaW50IF9fbikgOyBleHRlcm4gZmxvYXQgX19z Y2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIDsKCgoKZXh0ZXJuIGZsb2F0IG5lYXJi eWludGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19uZWFyYnlpbnRmIChmbG9hdCBfX3gp IDsKCgoKZXh0ZXJuIGZsb2F0IHJvdW5kZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3Jv dW5kZiAoZmxvYXQgX194KSA7CgoKCmV4dGVybiBmbG9hdCB0cnVuY2YgKGZsb2F0IF9feCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX190cnVuY2YgKGZsb2F0IF9f eCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEg ICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE3MwoK CgoKCmV4dGVybiBmbG9hdCByZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1 bykgOyBleHRlcm4gZmxvYXQgX19yZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpf X3F1bykgOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnRmIChmbG9hdCBfX3gpIDsgZXh0ZXJu IGxvbmcgaW50IF9fbHJpbnRmIChmbG9hdCBfX3gpIDsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxy aW50ZiAoZmxvYXQgX194KSA7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50ZiAoZmxvYXQg X194KSA7CgoKCmV4dGVybiBsb25nIGludCBscm91bmRmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGxv bmcgaW50IF9fbHJvdW5kZiAoZmxvYXQgX194KSA7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91 bmRmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kZiAoZmxvYXQg X194KSA7CgoKCmV4dGVybiBmbG9hdCBmZGltZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsgZXh0 ZXJuIGZsb2F0IF9fZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7CgoKZXh0ZXJuIGZsb2F0 IGZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOyBleHRlcm4gZmxvYXQgX19mbWF4ZiAoZmxv YXQgX194LCBmbG9hdCBfX3kpIDsKCgpleHRlcm4gZmxvYXQgZm1pbmYgKGZsb2F0IF9feCwgZmxv YXQgX195KSA7IGV4dGVybiBmbG9hdCBfX2ZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOwoK CgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWYgKGZsb2F0IF9fdmFsdWUpCiAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0ZiAoZmxvYXQgX192YWx1 ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBmbG9hdCBmbWFm IChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQgX196KSA7IGV4dGVybiBmbG9hdCBfX2ZtYWYg KGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opIDsKIyA4MyAiL3Vzci9pbmNsdWRlL21h dGguaCIgMiAzCiMgOTkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5o IiAzCmV4dGVybiBsb25nIGRvdWJsZSBhY29zbCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBs b25nIGRvdWJsZSBfX2Fjb3NsIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25nIGRvdWJs ZSBhc2lubCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5sIChs b25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFubCAobG9uZyBkb3VibGUg X194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5sIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4 dGVybiBsb25nIGRvdWJsZSBhdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194 KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRv dWJsZSBfX3gpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUgY29zbCAobG9uZyBkb3VibGUgX194KSA7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2wgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxv bmcgZG91YmxlIHNpbmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19z aW5sIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAg ICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE3NAoKCgpleHRlcm4g bG9uZyBkb3VibGUgdGFubCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBf X3RhbmwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgpleHRlcm4gdm9pZCBzaW5jb3NsIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpIDsgZXh0 ZXJuIHZvaWQgX19zaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3Npbngs IGxvbmcgZG91YmxlICpfX2Nvc3gpIDsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2hsIChs b25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zaGwgKGxvbmcgZG91Ymxl IF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmhsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fc2luaGwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcg ZG91YmxlIHRhbmhsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFu aGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2hsIChsb25n IGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2hsIChsb25nIGRvdWJsZSBf X3gpIDsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2luaGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRl cm4gbG9uZyBkb3VibGUgX19hc2luaGwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcg ZG91YmxlIGF0YW5obCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0 YW5obCAobG9uZyBkb3VibGUgX194KSA7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cGwgKGxv bmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBsIChsb25nIGRvdWJsZSBf X3gpIDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDEwbCAobG9uZyBkb3VibGUgX194KSA7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2V4cDEwbCAobG9uZyBkb3VibGUgX194KSA7CgpleHRlcm4gbG9u ZyBkb3VibGUgcG93MTBsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f cG93MTBsIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZyZXhwbCAo bG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f ZnJleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgOwoKCmV4dGVybiBsb25n IGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIDsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fbGRleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSA7 CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2wgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9u ZyBkb3VibGUgX19sb2dsIChsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUg bG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMTBsIChs b25nIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUgbW9kZmwgKGxvbmcgZG91Ymxl IF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgOyBleHRlcm4gbG9uZyBkb3VibGUgX19tb2RmbCAo bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19pcHRyKSA7CgoKCgoKCgoKCgoyMDAxLTA4 LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQ YWdlICAxNzUKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpIDsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4g bG9uZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nYmwg KGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dibCAobG9uZyBkb3Vi bGUgX194KSA7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwMmwgKGxvbmcgZG91YmxlIF9feCkg OyBleHRlcm4gbG9uZyBkb3VibGUgX19leHAybCAobG9uZyBkb3VibGUgX194KSA7CgoKZXh0ZXJu IGxvbmcgZG91YmxlIGxvZzJsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fbG9nMmwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcG93 bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fcG93bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsKCgpleHRlcm4gbG9u ZyBkb3VibGUgc3FydGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19z cXJ0bCAobG9uZyBkb3VibGUgX194KSA7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBoeXBvdGwgKGxv bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2h5 cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsKCgoKCmV4dGVybiBsb25n IGRvdWJsZSBjYnJ0bCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Ni cnRsIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNlaWxsIChs b25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2VpbGwgKGxvbmcgZG91Ymxl IF9feCkgOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25n IGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBk b3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmxv b3JsIChsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Ztb2Rs IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOwoKCgoKZXh0ZXJuIGludCBfX2lz aW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK CgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAg ICAgICAgICAgICAgIFBhZ2UgIDE3NgoKCgpleHRlcm4gaW50IF9fZmluaXRlbCAobG9uZyBkb3Vi bGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBp c2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK CgpleHRlcm4gaW50IGZpbml0ZWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBpbmZuYW5sIChpbnQgX19l cnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19p bmZuYW5sIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVy biBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195KSA7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9f eCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkg OwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvcHlzaWdubCAobG9uZyBkb3VibGUgX194LCBsb25n IGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5hbmwgKF9fY29u c3QgY2hhciAqX190YWdiKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25n IGRvdWJsZSBfX25hbmwgKF9fY29uc3QgY2hhciAqX190YWdiKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW5sIChsb25nIGRvdWJsZSBfX3ZhbHVlKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW5sIChsb25nIGRv dWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcg ZG91YmxlIGowbCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajBsIChsb25n IGRvdWJsZSkgOwpleHRlcm4gbG9uZyBkb3VibGUgajFsIChsb25nIGRvdWJsZSkgOyBleHRlcm4g bG9uZyBkb3VibGUgX19qMWwgKGxvbmcgZG91YmxlKSA7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwg KGludCwgbG9uZyBkb3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fam5sIChpbnQsIGxvbmcg ZG91YmxlKSA7CmV4dGVybiBsb25nIGRvdWJsZSB5MGwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBs b25nIGRvdWJsZSBfX3kwbCAobG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIHkxbCAo bG9uZyBkb3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feTFsIChsb25nIGRvdWJsZSkgOwpl eHRlcm4gbG9uZyBkb3VibGUgeW5sIChpbnQsIGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRv dWJsZSBfX3lubCAoaW50LCBsb25nIGRvdWJsZSkgOwoKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6 MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE3 NwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXJmbCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fZXJmbCAobG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmNsIChs b25nIGRvdWJsZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9uZyBkb3VibGUpIDsK ZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRv dWJsZSBfX2xnYW1tYWwgKGxvbmcgZG91YmxlKSA7CgoKCmV4dGVybiBsb25nIGRvdWJsZSB0Z2Ft bWFsIChsb25nIGRvdWJsZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX190Z2FtbWFsIChsb25nIGRv dWJsZSkgOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGdhbW1hbCAobG9uZyBkb3VibGUpIDsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fZ2FtbWFsIChsb25nIGRvdWJsZSkgOwoKCgoKCgpleHRlcm4gbG9u ZyBkb3VibGUgbGdhbW1hbF9yIChsb25nIGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSA7IGV4dGVy biBsb25nIGRvdWJsZSBfX2xnYW1tYWxfciAobG9uZyBkb3VibGUsIGludCAqX19zaWduZ2FtcCkg OwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmludGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRl cm4gbG9uZyBkb3VibGUgX19yaW50bCAobG9uZyBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGxvbmcg ZG91YmxlIG5leHRhZnRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25leHRhZnRlcmwg KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgpleHRlcm4gbG9uZyBkb3VibGUgbmV4dHRvd2FyZGwgKGxvbmcgZG91YmxlIF9feCwg bG9uZyBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25n IGRvdWJsZSBfX25leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVtYWlu ZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsKCgoK ZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf X24pIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg ZG91YmxlIF9fbikgOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91Ymxl IF9feCwgaW50IF9fbikgOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYm5sIChsb25nIGRvdWJs ZSBfX3gsIGludCBfX24pIDsKCgoKZXh0ZXJuIGludCBpbG9nYmwgKGxvbmcgZG91YmxlIF9feCkg OyBleHRlcm4gaW50IF9faWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKCmV4dGVybiBsb25n IGRvdWJsZSBzY2FsYmxubCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pIDsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fc2NhbGJsbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSA7 CgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAg ICAgICAgICAgICAgICAgIFBhZ2UgIDE3OAoKCgpleHRlcm4gbG9uZyBkb3VibGUgbmVhcmJ5aW50 bCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX25lYXJieWludGwgKGxv bmcgZG91YmxlIF9feCkgOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgcm91bmRsIChsb25nIGRvdWJs ZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcm91bmRsIChsb25nIGRvdWJsZSBfX3gpIDsK CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRydW5jbCAobG9uZyBkb3VibGUgX194KSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RydW5jbCAobG9uZyBkb3Vi bGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gbG9uZyBkb3Vi bGUgcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGludCAqX19xdW8p IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv dWJsZSBfX3ksIGludCAqX19xdW8pIDsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50bCAobG9u ZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGludCBfX2xyaW50bCAobG9uZyBkb3VibGUgX194 KSA7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRl cm4gbG9uZyBsb25nIGludCBfX2xscmludGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgpleHRlcm4g bG9uZyBpbnQgbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGludCBfX2xy b3VuZGwgKGxvbmcgZG91YmxlIF9feCkgOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kbCAo bG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZGwgKGxvbmcg ZG91YmxlIF9feCkgOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZmRpbWwgKGxvbmcgZG91YmxlIF9f eCwgbG9uZyBkb3VibGUgX195KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZkaW1sIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWF4bCAo bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f Zm1heGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoKZXh0ZXJuIGxvbmcg ZG91YmxlIGZtaW5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOyBleHRlcm4g bG9uZyBkb3VibGUgX19mbWlubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsK CgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlsIChsb25nIGRvdWJsZSBfX3ZhbHVlKQogICAgIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdGwgKGxvbmcg ZG91YmxlIF9fdmFsdWUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRl cm4gbG9uZyBkb3VibGUgZm1hbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxv bmcgZG91YmxlIF9feikgOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWFsIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KSA7CiMgMTAwICIvdXNyL2luY2x1 ZGUvbWF0aC5oIiAyIDMKIyAxMTMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0ZXJuIGludCBz aWduZ2FtOwojIDE1NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwplbnVtCgoKCgoKCgoyMDAxLTA4 LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQ YWdlICAxNzkKCgogIHsKICAgIEZQX05BTiwKCiAgICBGUF9JTkZJTklURSwKCiAgICBGUF9aRVJP LAoKICAgIEZQX1NVQk5PUk1BTCwKCiAgICBGUF9OT1JNQUwKCiAgfTsKIyAyNDAgIi91c3IvaW5j bHVkZS9tYXRoLmgiIDMKdHlwZWRlZiBlbnVtCnsKICBfSUVFRV8gPSAtMSwKICBfU1ZJRF8sCiAg X1hPUEVOXywKICBfUE9TSVhfLAogIF9JU09DXwp9IF9MSUJfVkVSU0lPTl9UWVBFOwoKCgoKZXh0 ZXJuIF9MSUJfVkVSU0lPTl9UWVBFIF9MSUJfVkVSU0lPTjsKIyAyNjUgIi91c3IvaW5jbHVkZS9t YXRoLmgiIDMKc3RydWN0IGV4Y2VwdGlvbgoKICB7CiAgICBpbnQgdHlwZTsKICAgIGNoYXIgKm5h bWU7CiAgICBkb3VibGUgYXJnMTsKICAgIGRvdWJsZSBhcmcyOwogICAgZG91YmxlIHJldHZhbDsK ICB9OwoKCgoKZXh0ZXJuIGludCBtYXRoZXJyIChzdHJ1Y3QgZXhjZXB0aW9uICpfX2V4Yyk7CiMg MzUwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlu bGluZS5oIiAxIDMKIyAxMjcgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRl cm4gX19pbmxpbmUgaW50Cl9fc2lnbmJpdGYgKGZsb2F0IF9feCkKewogIF9fZXh0ZW5zaW9uX18g dW5pb24geyBmbG9hdCBfX2Y7IGludCBfX2k7IH0gX191ID0geyBfX2Y6IF9feCB9OwogIHJldHVy biBfX3UuX19pIDwgMDsKfQpleHRlcm4gX19pbmxpbmUgaW50Cl9fc2lnbmJpdCAoZG91YmxlIF9f eCkKewogIF9fZXh0ZW5zaW9uX18gdW5pb24geyBkb3VibGUgX19kOyBpbnQgX19pWzJdOyB9IF9f dSA9IHsgX19kOiBfX3ggfTsKICByZXR1cm4gX191Ll9faVsxXSA8IDA7Cn0KCgoKCgoKCjIwMDEt MDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAg IFBhZ2UgIDE4MAoKCmV4dGVybiBfX2lubGluZSBpbnQKX19zaWduYml0bCAobG9uZyBkb3VibGUg X194KQp7CiAgX19leHRlbnNpb25fXyB1bmlvbiB7IGxvbmcgZG91YmxlIF9fbDsgaW50IF9faVsz XTsgfSBfX3UgPSB7IF9fbDogX194IH07CiAgcmV0dXJuIChfX3UuX19pWzJdICYgMHg4MDAwKSAh PSAwOwp9CiMgMjkxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9f aW5saW5lIGRvdWJsZSBfX3NnbiAoZG91YmxlKSA7IGV4dGVybiBfX2lubGluZSBkb3VibGUgX19z Z24gKGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAwLjAgOiAoX194ID4gMC4wID8g MS4wIDogLTEuMCk7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IF9fc2duZiAoZmxvYXQpIDsgZXh0 ZXJuIF9faW5saW5lIGZsb2F0IF9fc2duZiAoZmxvYXQgX194KSB7IHJldHVybiBfX3ggPT0gMC4w ID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjApOyB9IGV4dGVybiBfX2lubGluZSBsb25n IGRvdWJsZSBfX3NnbmwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJs ZSBfX3NnbmwgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChf X3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfQojIDQyNiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlu bGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBkb3VibGUgYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJs ZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9f ICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3Qo MSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGF0YW4yZiAoZmxv YXQgX195LCBmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20g X192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIg KF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcg ZG91YmxlIGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9 dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9f dmFsdWU7IH0KZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9fYXRhbjJsIChsb25nIGRvdWJs ZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBf X2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCks ICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfQoKCmV4dGVybiBfX2lubGlu ZSBkb3VibGUgZm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgeyByZWdpc3RlciBsb25nIGRv dWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJ JSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gp LCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5s aW5lIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyByZWdpc3RlciBsb25nIGRv dWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJ JSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gp LCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5s aW5lIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglm cHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9f dmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFs dWU7IH0KIyA0NDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19p bmxpbmUgZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0 OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9f eCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IHNxcnRmIChmbG9h dCBfX3gpIHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZz cXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBl eHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgc3FydGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdp c3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNxcnQiIDog Ij10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9CmV4dGVybiBf X2lubGluZSBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIg bG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIg KF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfQoKCmV4dGVybiBfX2lu bGluZSBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnMgKF9f eCk7IH0KZXh0ZXJuIF9faW5saW5lIGZsb2F0IGZhYnNmIChmbG9hdCBfX3gpIHsgcmV0dXJuIF9f YnVpbHRpbl9mYWJzZiAoX194KTsgfQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgZmFic2wg KGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsIChfX3gpOyB9CmV4dGVy biBfX2lubGluZSBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJu IF9fYnVpbHRpbl9mYWJzbCAoX194KTsgfQojIDQ2NyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlu bGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBkb3VibGUgYXRhbiAoZG91YmxlIF9feCkgeyByZWdp c3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZDE7IGZwYXRhbiIg OiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0 OyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBhdGFuZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGZs b2F0IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQxOyBmcGF0YW4iIDogIj10IiAo X19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRl cm4gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3Rl ciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFu IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1 bHQ7IH0KCmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBfX3NnbjFsIChsb25nIGRvdWJsZSkg OyBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ24xbCAobG9uZyBkb3VibGUgX194KSB7 IF9fZXh0ZW5zaW9uX18gdW5pb24geyBsb25nIGRvdWJsZSBfX3hsZDsgdW5zaWduZWQgaW50IF9f eGlbM107IH0gX19uID0geyBfX3hsZDogX194IH07IF9fbi5fX3hpWzJdID0gKF9fbi5fX3hpWzJd ICYgMHg4MDAwKSB8IDB4M2ZmZjsgX19uLl9feGlbMV0gPSAweDgwMDAwMDAwOyBfX24uX194aVsw XSA9IDA7IHJldHVybiBfX24uX194bGQ7IH0KIyA0OTMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhp bmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlIGZsb29yIChkb3VibGUgX194KSB7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50 IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9s YXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYz ZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0 bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIg KF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0 dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGZsb29yZiAoZmxvYXQgX194KSB7 IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQg aW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9f dm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAw eGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9f Y3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAi MCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsg cmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGZsb29ybCAobG9u ZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUg dW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9f Y3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3 dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cg JTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10 IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDog OiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1MDQgIi91c3IvaW5jbHVkZS9iaXRz L21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gp IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9y dCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20g X192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAm IDB4ZjNmZikgfCAweDA4MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAo X19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6 ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykp OyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgY2VpbGYgKGZsb2F0IF9f eCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNo b3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2Fz bSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3 ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0i IChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUp IDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3 KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBjZWlsbCAo bG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRp bGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50 IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBf X2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxk Y3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDog Ij10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAi IDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1MjIgIi91c3IvaW5jbHVkZS9i aXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlCmxkZXhwIChkb3VibGUg X194LCBpbnQgX195KQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192 b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKChs b25nIGRvdWJsZSkgX195KSk7IHJldHVybiBfX3ZhbHVlOwp9CiMgNTQwICIvdXNyL2luY2x1ZGUv Yml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBsb2cxcCAoZG91Ymxl IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAoX194KSA+ PSAxLjAgLSAwLjUgKiAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxvZ2wgKDEu MCArIF9feCk7IGVsc2UgX19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4Y2hcblx0 IiAiZnlsMnhwMSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1 cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gpIHsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0g MC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gp OyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4 cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFs dWU7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGxvZzFwbCAobG9uZyBkb3VibGUgX194 KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IGlmIChfX2ZhYnNsIChfX3gpID49IDEu MCAtIDAuNSAqIDEuNDE0MjEzNTYyMzczMDk1MDQ4ODBMKSBfX3ZhbHVlID0gbG9nbCAoMS4wICsg X194KTsgZWxzZSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsbjJcblx0IiAiZnhjaFxuXHQiICJm eWwyeHAxIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBf X3ZhbHVlOyB9CiMgNTU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJu IF9faW5saW5lIGRvdWJsZSBhc2luaCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJs ZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3Fy dGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9IGV4 dGVybiBfX2lubGluZSBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRv dWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9f c3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9 IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhc2luaGwgKGxvbmcgZG91YmxlIF9feCkgeyBy ZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAo X195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9f c2duMWwgKF9feCkpOyB9CgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGFjb3NoIChkb3VibGUg X194KSB7IHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAo X194ICsgMS4wKSk7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KSB7 IHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAoX194ICsg MS4wKSk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGFjb3NobCAobG9uZyBkb3VibGUg X194KSB7IHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAo X194ICsgMS4wKSk7IH0KCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGF0YW5oIChkb3VibGUgX194 KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAtMC41 ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gpOyB9 IGV4dGVybiBfX2lubGluZSBmbG9hdCBhdGFuaGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25n IGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kg KyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfSBleHRlcm4gX19pbmxpbmUg bG9uZyBkb3VibGUgYXRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIC0wLjUgKiBsb2cxcGwgKC0oX195ICsgX195 KSAvICgxLjAgKyBfX3kpKSAqIF9fc2duMWwgKF9feCk7IH0KCgoKCmV4dGVybiBfX2lubGluZSBk b3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHsgcmV0dXJuIF9fc3FydGwgKF9f eCAqIF9feCArIF9feSAqIF9feSk7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGh5cG90ZiAoZmxv YXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9feSAqIF9f eSk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGh5cG90bCAobG9uZyBkb3VibGUgX194 LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9feSAqIF9f eSk7IH0KCmV4dGVybiBfX2lubGluZSBkb3VibGUgbG9nYiAoZG91YmxlIF9feCkgeyByZWdpc3Rl ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2p1bms7IF9fYXNt IF9fdm9sYXRpbGVfXyAoImZ4dHJhY3Rcblx0IiA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFs dWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0 IGxvZ2JmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIg OiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Zh bHVlOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBsb2dibCAobG9uZyBkb3VibGUgX194 KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f anVuazsgX19hc20gX192b2xhdGlsZV9fICgiZnh0cmFjdFxuXHQiIDogIj10IiAoX19qdW5rKSwg Ij11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfQoKCgoKCgoKMjAw MS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAg ICAgUGFnZSAgMTgxCgoKIyA1ODQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpl eHRlcm4gX19pbmxpbmUgZmxvYXQKbGRleHBmIChmbG9hdCBfX3gsIGludCBfX3kpCnsKICByZWdp c3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDog Ij10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0 dXJuIF9fdmFsdWU7Cn0KCmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZQpsZGV4cGwgKGxvbmcg ZG91YmxlIF9feCwgaW50IF9feSkKewogIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9f YXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwg InUiICgobG9uZyBkb3VibGUpIF9feSkpOyByZXR1cm4gX192YWx1ZTsKfQojIDYwOCAiL3Vzci9p bmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBsb25nIGludApscmlu dGYgKGZsb2F0IF9feCkKewogIGxvbmcgaW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGls ZV9fICgiZmlzdHBsICUwIiA6ICI9bSIgKF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7 IHJldHVybiBfX2xyaW50cmVzOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludApscmludCAoZG91 YmxlIF9feCkKewogIGxvbmcgaW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgi ZmlzdHBsICUwIiA6ICI9bSIgKF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVy biBfX2xyaW50cmVzOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludApscmludGwgKGxvbmcgZG91 YmxlIF9feCkKewogIGxvbmcgaW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgi ZmlzdHBsICUwIiA6ICI9bSIgKF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVy biBfX2xyaW50cmVzOwp9CiMgNjMxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMK ZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKbGxyaW50ZiAoZmxvYXQgX194KQp7CiAgbG9u ZyBsb25nIGludCBfX2xscmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGxsICUw IiA6ICI9bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19sbHJp bnRyZXM7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKbGxyaW50IChkb3VibGUgX194 KQp7CiAgbG9uZyBsb25nIGludCBfX2xscmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJm aXN0cGxsICUwIiA6ICI9bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1 cm4gX19sbHJpbnRyZXM7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKbGxyaW50bCAo bG9uZyBkb3VibGUgX194KQp7CiAgbG9uZyBsb25nIGludCBfX2xscmludHJlczsgX19hc21fXyBf X3ZvbGF0aWxlX18gKCJmaXN0cGxsICUwIiA6ICI9bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194 KSA6ICJzdCIpOyByZXR1cm4gX19sbHJpbnRyZXM7Cn0KCgoKCgoKCmV4dGVybiBfX2lubGluZSBk b3VibGUgZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgeyByZWdpc3RlciBkb3VibGUgX192 YWx1ZTsgcmVnaXN0ZXIgaW50IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglm cHJlbTFcblx0IiAiZnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9f dmFsdWUpLCAiPSZhIiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2Mi KTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGRyZW1mIChmbG9hdCBf X3gsIGZsb2F0IF9feSkgeyByZWdpc3RlciBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgaW50IF9f Y2xvYmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbTFcblx0IiAiZnN0c3cJJSVh eFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZhIiAoX19jbG9i YmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0g ZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg ZG91YmxlIF9feSkgeyByZWdpc3RlciBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgaW50IF9fY2xv YmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbTFcblx0IiAiZnN0c3cJJSVheFxu XHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZhIiAoX19jbG9iYmVy ZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA2 NjYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgaW50 Cl9fZmluaXRlIChkb3VibGUgX194KQp7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAg ICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAxODIKCgogIHJldHVy biAoX19leHRlbnNpb25fXwogICAgICAgICAgKCgoKCh1bmlvbiB7IGRvdWJsZSBfX2Q7IGludCBf X2lbMl07IH0pIHtfX2Q6IF9feH0pLl9faVsxXQogICAgICAgICAgICAgfCAweDgwMGZmZmZmdSkg KyAxKSA+PiAzMSkpOwp9CiMgMzUxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyAyNyAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL21pc2MuaCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9vYmpjL29iamMuaCIgMQojIDI4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvbWlzYy5o IiAyCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjAuMS9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNy L2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9z eXNsaW1pdHMuaCIgMSAzCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDEyNSAiL3Vzci9s b2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvbGlt aXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1 ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91 c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMTQ0ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEgMwojIDEyNiAiL3Vzci9pbmNs dWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGlt LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9saW51eC9saW1pdHMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2Fs X2xpbS5oIiAyIDMKIyAxMjcgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMiAzCiMg MTQ1ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz L3Bvc2l4Ml9saW0uaCIgMSAzCiMgMTQ5ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoj IDEgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRl L2JpdHMveG9wZW5fbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIg MSAzCiMgMzUgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMKIyAxMzYgIi91c3Iv aW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd29yZHNp emUuaCIgMSAzCiMgMTM3ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMiAzCiMgMTUz ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDEyNiAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDgg Ii91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNs dWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDMwICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvbWlzYy5oIiAyCiMgNDQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9taXNjLmgiCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAyNSAiL3Vzci9pbmNs dWRlL3N0ZGxpYi5oIiAzCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAg IFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAxODMKCgojIDEgIi91c3IvaW5jbHVk ZS9mZWF0dXJlcy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoK CiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4x L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoj IDQyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93YWl0 ZmxhZ3MuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2JpdHMvd2Fp dHN0YXR1cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyA2NCAiL3Vzci9p bmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAyIDMKCnVuaW9uIHdhaXQKICB7CiAgICBpbnQgd19z dGF0dXM7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3Rlcm1z aWc6NzsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X2NvcmVkdW1wOjE7CiAgICAgICAgdW5zaWdu ZWQgaW50IF9fd19yZXRjb2RlOjg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgoKICAg ICAgfSBfX3dhaXRfdGVybWluYXRlZDsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2ln bmVkIGludCBfX3dfc3RvcHZhbDo4OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHNpZzo4 OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKICAgICAgfSBfX3dhaXRfc3RvcHBlZDsK ICB9OwojIDQ0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDY4ICIvdXNyL2luY2x1ZGUv c3RkbGliLmgiIDMKdHlwZWRlZiB1bmlvbgogIHsKICAgIHVuaW9uIHdhaXQgKl9fdXB0cjsKCgoK CgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAg ICAgICAgICAgIFBhZ2UgIDE4NAoKCiAgICBpbnQgKl9faXB0cjsKICB9IF9fV0FJVF9TVEFUVVMg X19hdHRyaWJ1dGVfXyAoKF9fdHJhbnNwYXJlbnRfdW5pb25fXykpOwojIDk0ICIvdXNyL2luY2x1 ZGUvc3RkbGliLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCBy ZW07CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90Owog ICAgbG9uZyBpbnQgcmVtOwogIH0gbGRpdl90OwoKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBz dHJ1Y3QKICB7CiAgICBsb25nIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGxvbmcgaW50IHJlbTsK ICB9IGxsZGl2X3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpemVf dCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSA7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAo X19jb25zdCBjaGFyICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJu IGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50 IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCgpleHRlcm4gZG91YmxlIHN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyKSA7CgoKCmV4dGVybiBmbG9hdCBzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy KSA7CgpleHRlcm4gbG9uZyBkb3VibGUgc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyKSA7CgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVy c29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE4NQoKCgpleHRlcm4gbG9uZyBpbnQgc3Ry dG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKZXh0ZXJuIHVu c2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwgaW50IF9fYmFzZSkKICAgICAgICAgICAgOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBs b25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50 IF9fYmFzZSkgOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBz dHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9f YmFzZSkKICAgICAgICAgICAgOwoKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcg aW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNl KSA7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxs IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Up CiAgICAgICAgICAgIDsKIyAyMTEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3Iv aW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDIxMiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMK CgoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3Qg X19sb2MpIDsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfbCAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSA7CgpfX2V4dGVuc2lv bl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSA7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25l ZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgICAgICAgICA7CgoKCgoK CgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAg ICAgICAgICBQYWdlICAxODYKCgoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9sIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKQogICAgICAgICAgICA7CgpleHRl cm4gZmxvYXQgX19zdHJ0b2ZfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2Fs ZV90IF9fbG9jKSA7CgpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2wgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19sb2NhbGVfdCBfX2xvYykgOwoKCgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFs IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAg ICAgICAgIDsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICAgICAgICAgOwpleHRlcm4gbG9u ZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IF9fZ3JvdXApIDsKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9u ZyBpbnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu IGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFy ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkK ICAgICAgICAgICAgOwojIDI5NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBfX2lu bGluZSBkb3VibGUKc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0cikKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAg ICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE4NwoKCnsKICByZXR1 cm4gX19zdHJ0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lu bGluZSBsb25nIGludApzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNo YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4g X19zdHJ0b2xfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJu IF9faW5saW5lIHVuc2lnbmVkIGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19i YXNlKQp7CiAgcmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19i YXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBmbG9hdApzdHJ0b2YgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKQp7CiAgcmV0dXJu IF9fc3RydG9mX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19pbmxp bmUgbG9uZyBkb3VibGUKc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpCnsKICByZXR1cm4gX19zdHJ0b2xkX2ludGVybmFs IChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGlu ZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVy biBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19l eHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApzdHJ0b3Vx IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFs IChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJu IF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2Up CnsKICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2Us IDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBp bnQKc3RydG91bGwgKF9fY29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0 b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKCgoKCgoKCjIwMDEt MDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29uLm1pICAgICAgICAgICAgICAgICAg IFBhZ2UgIDE4OAoKCn0KCgpleHRlcm4gX19pbmxpbmUgZG91YmxlCmF0b2YgKF9fY29uc3QgY2hh ciAqX19ucHRyKQp7CiAgcmV0dXJuIHN0cnRvZCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICop MCkpOwp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpCnsK ICByZXR1cm4gKGludCkgc3RydG9sIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSwgMTAp Owp9CmV4dGVybiBfX2lubGluZSBsb25nIGludAphdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikK ewogIHJldHVybiBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7Cn0K CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CmF0b2xsIChfX2Nv bnN0IGNoYXIgKl9fbnB0cikKewogIHJldHVybiBzdHJ0b2xsIChfX25wdHIsIChjaGFyICoqKSAo KHZvaWQgKikwKSwgMTApOwp9CiMgMzg1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJu IGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgOwoKCmV4dGVybiBsb25nIGludCBhNjRsIChfX2Nv bnN0IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKIyAxICIvdXNyL2lu Y2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDM5MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMK CgoKCgoKZXh0ZXJuIGxvbmcgaW50IHJhbmRvbSAodm9pZCkgOwoKCmV4dGVybiB2b2lkIHNyYW5k b20gKHVuc2lnbmVkIGludCBfX3NlZWQpIDsKCgoKCgpleHRlcm4gY2hhciAqaW5pdHN0YXRlICh1 bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgX19zdGF0ZWxlbikgOwoKCgpleHRlcm4gY2hhciAqc2V0c3RhdGUgKGNoYXIg Kl9fc3RhdGVidWYpIDsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAg IFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAxODkKCgoKCgoKCgpzdHJ1Y3QgcmFu ZG9tX2RhdGEKICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGlu dDMyX3QgKnN0YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGlu dCByYW5kX3NlcDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9t X3IgKHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAg ICAgICAgaW50MzJfdCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwoKZXh0ZXJuIGludCBzcmFuZG9t X3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIDsKCmV4 dGVybiBpbnQgaW5pdHN0YXRlX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fcmVzdHJp Y3QgX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4s CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBf X2J1ZikgOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVi dWYsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0 IF9fYnVmKSA7CgoKCgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSA7CgpleHRlcm4gdm9pZCBzcmFu ZCAodW5zaWduZWQgaW50IF9fc2VlZCkgOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQg aW50ICpfX3NlZWQpIDsKCgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgOwpleHRl cm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0 ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVu c2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDgg KHZvaWQpIDsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAgUGVyc29u Lm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE5MAoKCmV4dGVybiBsb25nIGludCBqcmFuZDQ4 ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVybiB2b2lkIHNyYW5kNDgg KGxvbmcgaW50IF9fc2VlZHZhbCkgOwpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDgg KHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pIDsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAo dW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIDsKCgoKCgpzdHJ1Y3QgZHJhbmQ0OF9kYXRh CiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGlu dCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fYzsKICAgIHVuc2lnbmVkIHNo b3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fYTsKICB9OwoKCmV4 dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm ZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7 CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZm ZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsK CgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBf X2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVz dWx0KSA7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVsz XSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3Qg X19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jl c3VsdCkgOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jl c3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJp Y3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBf X3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19y ZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3Ry aWN0IF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZh bCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgICAgICAgIDsKCmV4dGVybiBp bnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10sCiAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSA7CgpleHRlcm4gaW50IGxj b25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCiAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgOwojIDUzNyAiL3Vzci9pbmNsdWRl L3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lkICpyZWFsbG9jICh2b2lkICpfX3B0ciwgc2l6ZV90IF9f c2l6ZSkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkIGZyZWUgKHZv aWQgKl9fcHRyKSA7CgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAg UGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE5MQoKCgpleHRlcm4gdm9pZCBjZnJl ZSAodm9pZCAqX19wdHIpIDsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMwojIDIy ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg MSAzCiMgMjMgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgoKIyAxICIvdXNyL2xvY2FsL2dj YzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRkZWYuaCIg MSAzCiMgMjYgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgoKCgoKCgpleHRlcm4gdm9pZCAq YWxsb2NhIChzaXplX3QgX19zaXplKSA7CiMgNTQ4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIg MwoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgX19hdHRyaWJ1dGVfXyAo KF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBpbnQgcG9zaXhfbWVtYWxpZ24gKHZvaWQgKipfX21l bXB0ciwgc2l6ZV90IF9fYWxpZ25tZW50LCBzaXplX3QgX19zaXplKQogICAgICAgICAgICAgX19h dHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIF9f YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQg KCpfX2Z1bmMpICh2b2lkKSkgOwoKCgoKZXh0ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19mdW5j KSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQogICAgICAgICAgICA7 CgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgoX19u b3JldHVybl9fKSk7CgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgICAg IFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAxOTIKCgoKZXh0ZXJuIHZvaWQgX0V4 aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0 ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgoKZXh0ZXJuIGNoYXIg Kl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgoKCgpleHRlcm4gaW50 IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIDsKCgoKCgpleHRlcm4gaW50IHNldGVudiAoX19jb25z dCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9fcmVwbGFjZSkKICAg ICAgICAgICAgOwoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7 CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIDsKIyA2MjQgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSA7CgoKCgoK CgpleHRlcm4gaW50IG1rc3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKIyA2NDEgIi91c3IvaW5j bHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IG1rc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkg OwojIDY1MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta2R0ZW1wIChj aGFyICpfX3RlbXBsYXRlKSA7CgoKCgpleHRlcm4gaW50IHN5c3RlbSAoX19jb25zdCBjaGFyICpf X2NvbW1hbmQpIDsKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICAgICAg UGVyc29uLm1pICAgICAgICAgICAgICAgICAgIFBhZ2UgIDE5MwoKCgoKCmV4dGVybiBjaGFyICpj YW5vbmljYWxpemVfZmlsZV9uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgOwojIDY3MyAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3Ry aWN0IF9fcmVzb2x2ZWQpIDsKCgoKCgoKdHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90KSAoX19j b25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsKCgp0eXBlZGVmIF9fY29tcGFyX2ZuX3QgY29t cGFyaXNvbl9mbl90OwoKCgoKCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0IHZvaWQgKl9f a2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf X25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJu IHZvaWQgcXNvcnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUs CiAgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIGlu dCBhYnMgKGludCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcg aW50IGxhYnMgKGxvbmcgaW50IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19l eHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBsbGFicyAobG9uZyBsb25nIGludCBfX3gp CiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBk aXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSkKICAgICAgICAgICAgIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBsZGl2IChsb25nIGludCBfX251bWVy LCBsb25nIGludCBfX2Rlbm9tKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gbGxkaXZfdCBsbGRpdiAobG9uZyBsb25nIGludCBf X251bWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgaW50 IF9fZGVub20pCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgNzI5 ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3Zh bHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAg ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAxOTQK CgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQg Kl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBf X3NpZ24pIDsKCgoKCmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp Z2l0LCBjaGFyICpfX2J1ZikgOwoKCgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBf X3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0 IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIDsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChs b25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50 ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIDsKZXh0ZXJuIGNo YXIgKnFnY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVm KSA7CgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwg aW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJp Y3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6 ZV90IF9fbGVuKSA7CmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp Z2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19y ZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAg ICBzaXplX3QgX19sZW4pIDsKCmV4dGVybiBpbnQgcWVjdnRfciAobG9uZyBkb3VibGUgX192YWx1 ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2Rl Y3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9f cmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgOwpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcg ZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9f cmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAg ICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIDsKCgoKCgoKZXh0ZXJu IGludCBtYmxlbiAoX19jb25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50 IG1idG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IHdj dG9tYiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIDsKCgoKZXh0ZXJuIHNpemVfdCBtYnN0 b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsCiAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIDsKCmV4dGVybiBzaXpl X3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAoKCgoKCgoKMjAwMS0wOC0yNCAwMToy MSAgICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgMTk1 CgoKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f cHdjcywgc2l6ZV90IF9fbikKICAgICAgICAgICAgOwoKCgoKCgoKZXh0ZXJuIGludCBycG1hdGNo IChfX2NvbnN0IGNoYXIgKl9fcmVzcG9uc2UpIDsKIyA4MDkgIi91c3IvaW5jbHVkZS9zdGRsaWIu aCIgMwpleHRlcm4gaW50IGdldHN1Ym9wdCAoY2hhciAqKl9fcmVzdHJpY3QgX19vcHRpb25wLAog ICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rva2VucywK ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fdmFsdWVwKSA7CgoKCgoK ZXh0ZXJuIHZvaWQgc2V0a2V5IChfX2NvbnN0IGNoYXIgKl9fa2V5KSA7CgoKCgoKCgpleHRlcm4g aW50IHBvc2l4X29wZW5wdCAoaW50IF9fb2ZsYWcpIDsKCgoKCgoKCmV4dGVybiBpbnQgZ3JhbnRw dCAoaW50IF9fZmQpIDsKCgoKZXh0ZXJuIGludCB1bmxvY2twdCAoaW50IF9fZmQpIDsKCgoKCmV4 dGVybiBjaGFyICpwdHNuYW1lIChpbnQgX19mZCkgOwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVf ciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIDsKCgpleHRlcm4gaW50 IGdldHB0ICh2b2lkKSA7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgICAg ICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgMTk2CgoKCgoKCgpleHRlcm4gaW50 IGdldGxvYWRhdmcgKGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9fbmVsZW0pIDsKIyA0NSAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL21pc2MuaCIgMgojIDU3ICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvbWlzYy5oIgp2b2lkICp4bWFsbG9jIChzaXplX3Qgc2l6ZSk7CnZvaWQgKnhtYWxsb2Nf YXRvbWljIChzaXplX3Qgc2l6ZSk7CnZvaWQgKnhjYWxsb2MgKHNpemVfdCBubWVtYiwgc2l6ZV90 IHNpemUpOwp2b2lkICp4cmVhbGxvYyAodm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSk7CnZvaWQgeGZy ZWUgKHZvaWQgKmJ1Zik7CgoKY2hhciAqZHJvcGRpciAoY2hhciAqcGF0aCk7CgpjaGFyICp4c3Ry ZHVwIChjb25zdCBjaGFyICpzdHJpbmcpOwojIDE0NCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRl L21pc2MuaCIKY29uc3QgY2hhciAqZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwcm9ncmFt X25hbWUpOwoKdm9pZCBkZWJ1Z2Fib3J0IChjb25zdCBjaGFyICpmaWxlbmFtZSwgdW5zaWduZWQg bGluZW5vLCBjb25zdCBjaGFyICpmdW5jdGlvbikgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7 Cgp0eXBlZGVmIGludCAoKnF1aWNrc29ydF9jb21wYXJfZm5fdCkgKGNvbnN0IHZvaWQgKiwgY29u c3Qgdm9pZCAqKTsKCmV4dGVybiB2b2lkIHF1aWNrc29ydCAodm9pZCAqY29uc3QgcGJhc2UsIHNp emVfdCB0b3RhbF9lbGVtcywKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwgcXVp Y2tzb3J0X2NvbXBhcl9mbl90IGNtcCk7CgoKCgoKCnN0YXRpYyBpbmxpbmUgQk9PTAppc0RpZ2l0 IChjaGFyIGNoKQp7CiAgcmV0dXJuIGNoID49ICcwJyAmJiBjaCA8PSAnOSc7Cn0KCnN0YXRpYyBp bmxpbmUgQk9PTAppc1NwYWNlIChjaGFyIGNoKQp7CiAgcmV0dXJuIGNoID09ICcgJyB8fCBjaCA9 PSAnXHQnIHx8IGNoID09ICdcbicgfHwgY2ggPT0gJ1xyJyB8fCBjaCA9PSAnXGYnOwp9CgpzdGF0 aWMgaW5saW5lIEJPT0wKaXNVcHBlciAoY2hhciBjaCkKewogIHJldHVybiBjaCA+PSAnQScgJiYg Y2ggPD0gJ1onOwp9CgpzdGF0aWMgaW5saW5lIEJPT0wKaXNMb3dlciAoY2hhciBjaCkKewogIHJl dHVybiBjaCA+PSAnYScgJiYgY2ggPD0gJ3onOwp9CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAg ICAgICAgICAgICAgICAgIFBlcnNvbi5taSAgICAgICAgICAgICAgICAgICBQYWdlICAxOTcKCgoK c3RhdGljIGlubGluZSBCT09MCmlzQWxwaGEgKGNoYXIgY2gpCnsKICByZXR1cm4gaXNVcHBlciAo Y2gpIHx8IGlzTG93ZXIgKGNoKTsKfQoKc3RhdGljIGlubGluZSBCT09MCmlzQWxudW0gKGNoYXIg Y2gpCnsKICByZXR1cm4gaXNBbHBoYSAoY2gpIHx8IGlzRGlnaXQgKGNoKTsKfQoKc3RhdGljIGlu bGluZSBCT09MCmlzUHVuY3QgKGNoYXIgY2gpCnsKICByZXR1cm4gKCgoY2ggPiAnICcpICYmIChj aCA8ICcwJykpCiAgICAgICAgICB8fCAoKGNoID4gJzknKSAmJiAoY2ggPCAnQScpKQogICAgICAg ICAgfHwgKChjaCA+ICdaJykgJiYgKGNoIDwgJ2EnKSkKICAgICAgICAgIHx8ICgoY2ggPiAneicp ICYmIChjaCA8PSAnficpKSk7Cn0KCnN0YXRpYyBpbmxpbmUgQk9PTAppc1ByaW50IChjaGFyIGNo KQp7CiAgcmV0dXJuIGlzUHVuY3QgKGNoKSB8fCBpc0FsbnVtIChjaCkgfHwgY2ggPT0gJyAnOwp9 CiMgMjkgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9yYW5kb20vcmFuZG9tZGVmcy5oIiAyCiMg NTIgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9yYW5kb20uaCIgMgojIDEyICJQZXJzb24ubSIg MgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIiAxCiMgMTMgIlBl cnNvbi5tIiAyCgpAaW1wbGVtZW50YXRpb24gUGVyc29uCgotIHN0ZXAKewogIHZhbHVlICs9IDE7 CiAgW3NlbGYgbG9va107CiAgcmV0dXJuIHNlbGY7Cn0KCi0gc2V0V29ybGQ6IGwKewogIHdvcmxk ID0gbDsKICByZXR1cm4gc2VsZjsKfQoKLSBzZXRQZXJzb246IG4gVG9waWNfYXJyYXk6IChmbG9h dCAqKXQKewogIGludCBpOwoKICBuYW1lID0gbjsKICB2YWx1ZSA9IDA7CiAgZm9yIChpPSAwO2kg PCAyOyBpKyspCiAgICB0b3BpY3NbaV0gPSB0W2ldOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAg ICAgICAgICAgICAgICAgICBQZXJzb24ubWkgICAgICAgICAgICAgICAgICAgUGFnZSAgMTk4CgoK ICByZXR1cm4gc2VsZjsKfQoKLSBwcmludAp7CiAgKHZvaWQpIGZwcmludGYgKHN0ZG91dCwgIlx0 IFN0ZXAgdmFsdWUgPSAlZFxuIiwgdmFsdWUpOwogICh2b2lkKSBmcHJpbnRmIChzdGRvdXQsICIl cyVmXG4lcyVmXG4iLCAiXHQgICAgICAgICAgICAgIHRvcGljc1tudWxsXSA9ICIsIHRvcGljc1tu dWxsXSwgIlx0ICAgICAgICAgICAgIHRvcGljc1toZWxsb10gPSAiLCB0b3BpY3NbaGVsbG9dKTsK CgoKICByZXR1cm4gc2VsZjsKfQoKLSAoY29uc3QgY2hhciAqKWdldE5hbWUKewogIHJldHVybiBb bmFtZSBnZXRDXTsKfQoKLSBzcGVhazogKHRvcGljX3R5cGUpdG9waWMgVG9QZXJzb246IHBlcnNv bgp7CiAgZmxvYXQgbmV3X3RvcGljX251bTsKCiAgbmV3X3RvcGljX251bSA9IChmbG9hdClbdW5p Zm9ybURibFJhbmQgZ2V0RG91YmxlV2l0aE1pbjogMC4wTCB3aXRoTWF4OiAxLjBMXTsKCiAgaWYg KG5ld190b3BpY19udW0gPCB0b3BpY3NbbnVsbF0pCiAgICAodm9pZClmcHJpbnRmIChzdGRvdXQs ICJQcmVmZXIgdG8gdGFsayBhYm91dCBub3RoaW5nIHdpdGggIik7CiAgZWxzZSBpZiAobmV3X3Rv cGljX251bSA8IHRvcGljc1toZWxsb10pCiAgICAodm9pZClmcHJpbnRmIChzdGRvdXQsICIlcyBz YXlzIEhlbGxvLCAiLCBbc2VsZiBnZXROYW1lXSk7CiAgZWxzZQogICAgewogICAgICAodm9pZCkg ZnByaW50ZihzdGRlcnIsIkV4Y2VwdGlvbiBpbiByYW5kb20gdG9waWMgZHJhdy5cbiIpOwogICAg ICBleGl0KC0xKTsKICAgIH0KCiAgKHZvaWQpZnByaW50ZiAoc3Rkb3V0LCAiIHRvICU1cy5cbiIs IFtwZXJzb24gZ2V0TmFtZV0pOwoKICByZXR1cm4gc2VsZjsKfQoKLSBsb29rCnsKICBpZCB0YXJn ZXQ7CgogIHRhcmdldCA9IFt3b3JsZCBhdE9mZnNldDogW3VuaWZvcm1JbnRSYW5kCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdldEludGVnZXJXaXRoTWluOiAxTAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB3aXRoTWF4OiAoW3dvcmxkIGdldENvdW50XS0xKV1dOwoKICBbc2Vs ZiBzcGVhazogaGVsbG8gVG9QZXJzb246IHRhcmdldF07CiAgcmV0dXJuIHNlbGY7Cn0KQGVuZAoK CgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5t aSAgICAgICAgICAgICAgICBQYWdlICAgIDEKCgojIDYgIlBwbE1vZGVsU3dhcm0ubSIKIyAxICJQ cGxNb2RlbFN3YXJtLmgiIDEKCgoKCgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpl Y3RiYXNlL1N3YXJtLmgiIDEKCgoKCgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpl Y3RiYXNlLmgiIDEKIyAyMCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2UuaCIK IyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiIDEKIyAxOCAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgp0eXBlZGVmIGVudW0ge2ZjYWxsX3R5cGVfdm9pZCA9 IDAsCiAgICAgICAgICAgICAgZmNhbGxfdHlwZV9ib29sZWFuLAogICAgICAgICAgICAgIGZjYWxs X3R5cGVfdWNoYXIsIGZjYWxsX3R5cGVfc2NoYXIsCiAgICAgICAgICAgICAgZmNhbGxfdHlwZV91 c2hvcnQsIGZjYWxsX3R5cGVfc3Nob3J0LAogICAgICAgICAgICAgIGZjYWxsX3R5cGVfdWludCwg ZmNhbGxfdHlwZV9zaW50LAogICAgICAgICAgICAgIGZjYWxsX3R5cGVfdWxvbmcsIGZjYWxsX3R5 cGVfc2xvbmcsCiAgICAgICAgICAgICAgZmNhbGxfdHlwZV91bG9uZ2xvbmcsIGZjYWxsX3R5cGVf c2xvbmdsb25nLAogICAgICAgICAgICAgIGZjYWxsX3R5cGVfZmxvYXQsIGZjYWxsX3R5cGVfZG91 YmxlLCBmY2FsbF90eXBlX2xvbmdfZG91YmxlLAogICAgICAgICAgICAgIGZjYWxsX3R5cGVfb2Jq ZWN0LCBmY2FsbF90eXBlX2NsYXNzLAogICAgICAgICAgICAgIGZjYWxsX3R5cGVfc3RyaW5nLCBm Y2FsbF90eXBlX3NlbGVjdG9yLAogICAgICAgICAgICAgIGZjYWxsX3R5cGVfam9iamVjdCwgZmNh bGxfdHlwZV9qc3RyaW5nLCBmY2FsbF90eXBlX2pzZWxlY3RvciwKICAgICAgICAgICAgICBmY2Fs bF90eXBlX2lpZAogICAgICAgICAgICAgIH0gZmNhbGxfdHlwZV90OwoKIyAxICIvdXNyL2xvY2Fs L3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLmgiIDEKIyAzNCAiL3Vzci9sb2NhbC9zd2FybS9pbmNs dWRlL29iamMvb2JqYy5oIgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcgIi91c3IvbG9jYWwv Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGRlZi5o IiAzCnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKIyAxOTkgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYg dW5zaWduZWQgaW50IHNpemVfdDsKIyAyODcgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgbG9uZyBp bnQgd2NoYXJfdDsKIyAzNSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy5oIiAy CgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgQk9PTDsKIyA1MSAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL29iamMvb2JqYy5oIgp0eXBlZGVmIGNvbnN0IHN0cnVjdCBvYmpjX3NlbGVjdG9y CnsKICB2b2lkICpzZWxfaWQ7CiAgY29uc3QgY2hhciAqc2VsX3R5cGVzOwp9ICpTRUw7CgoKCgoK CgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAg ICAgICAgICAgUGFnZSAgICAyCgoKaW5saW5lIHN0YXRpYyBCT09MCnNlbF9lcSAoU0VMIHMxLCBT RUwgczIpCnsKICBpZiAoczEgPT0gMCB8fCBzMiA9PSAwKQogICAgcmV0dXJuIHMxID09IHMyOwog IGVsc2UKICAgIHJldHVybiBzMS0+c2VsX2lkID09IHMyLT5zZWxfaWQ7Cn0KCgoKCgp0eXBlZGVm IHN0cnVjdCBvYmpjX29iamVjdCB7CiAgc3RydWN0IG9iamNfY2xhc3MqIGNsYXNzX3BvaW50ZXI7 Cn0gKmlkOwoKCgoKCnR5cGVkZWYgaWQgKCpJTVApKGlkLCBTRUwsIC4uLik7CgoKCgoKCnR5cGVk ZWYgY2hhciAqU1RSOwojIDk3ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLmgi CnR5cGVkZWYgc3RydWN0IG9iamNfY2xhc3MgKk1ldGFDbGFzczsKdHlwZWRlZiBzdHJ1Y3Qgb2Jq Y19jbGFzcyAqQ2xhc3M7CnN0cnVjdCBvYmpjX2NsYXNzIHsKICBNZXRhQ2xhc3MgY2xhc3NfcG9p bnRlcjsKCiAgc3RydWN0IG9iamNfY2xhc3MqIHN1cGVyX2NsYXNzOwoKCiAgY29uc3QgY2hhciog bmFtZTsKICBsb25nIHZlcnNpb247CiAgdW5zaWduZWQgbG9uZyBpbmZvOwoKICBsb25nIGluc3Rh bmNlX3NpemU7CgoKCiAgc3RydWN0IG9iamNfaXZhcl9saXN0KiBpdmFyczsKCgoKCgoKICBzdHJ1 Y3Qgb2JqY19tZXRob2RfbGlzdCogbWV0aG9kczsKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAg ICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgICAzCgoK ICBzdHJ1Y3Qgc2FycmF5ICogZHRhYmxlOwoKICBzdHJ1Y3Qgb2JqY19jbGFzcyogc3ViY2xhc3Nf bGlzdDsKICBzdHJ1Y3Qgb2JqY19jbGFzcyogc2libGluZ19jbGFzczsKCiAgc3RydWN0IG9iamNf cHJvdG9jb2xfbGlzdCAqcHJvdG9jb2xzOwogIHZvaWQqIGdjX29iamVjdF90eXBlOwp9OwojIDE0 MSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy5oIgpAY2xhc3MgUHJvdG9jb2w7 CgoKdHlwZWRlZiB2b2lkKiByZXR2YWxfdDsKdHlwZWRlZiB2b2lkKCphcHBseV90KSh2b2lkKTsK dHlwZWRlZiB1bmlvbiB7CiAgY2hhciAqYXJnX3B0cjsKICBjaGFyIGFyZ19yZWdzW3NpemVvZiAo Y2hhciopXTsKfSAqYXJnbGlzdF90OwoKCklNUCBvYmpjX21zZ19sb29rdXAgKGlkIHJlY2VpdmVy LCBTRUwgb3ApOwojIDMzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiIDIKCnR5 cGVkZWYgdW5pb24gewogIGlkIG9iamVjdDsKICBTRUwgc2VsZWN0b3I7CiAgQ2xhc3MgX2NsYXNz OwogIGNvbnN0IGNoYXIgKnN0cmluZzsKICBCT09MIGJvb2xlYW47CiAgY2hhciBzY2hhcjsKICB1 bnNpZ25lZCBjaGFyIHVjaGFyOwogIHNob3J0IHNzaG9ydDsKICB1bnNpZ25lZCBzaG9ydCB1c2hv cnQ7CiAgaW50IHNpbnQ7CiAgdW5zaWduZWQgaW50IHVpbnQ7CiAgbG9uZyBzbG9uZzsKICB1bnNp Z25lZCBsb25nIHVsb25nOwogIGxvbmcgbG9uZyBzbG9uZ2xvbmc7CiAgdW5zaWduZWQgbG9uZyBs b25nIHVsb25nbG9uZzsKICBmbG9hdCBfZmxvYXQ7CiAgZG91YmxlIF9kb3VibGU7CiAgbG9uZyBk b3VibGUgX2xvbmdfZG91YmxlOwogIHZvaWQgKmlpZDsKfSB0eXBlc190OwoKdHlwZWRlZiBzdHJ1 Y3QgewogIGZjYWxsX3R5cGVfdCB0eXBlOwogIHR5cGVzX3QgdmFsOwp9IHZhbF90OwoKCgoKCgoj IDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmovZGVmdHlwZS5oIiAxCgoKCgoKCgoy MDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAg ICAgICBQYWdlICAgIDQKCgojIDIxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL2Rl ZnR5cGUuaCIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9PYmplY3QuaCIgMQoj IDMwICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9PYmplY3QuaCIKIyAxICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLmgiIDEKIyAzMSAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL29iamMvT2JqZWN0LmgiIDIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2Jq Yy90eXBlZHN0cmVhbS5oIiAxCiMgMzAgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL3R5 cGVkc3RyZWFtLmgiCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy5oIiAx CiMgMzEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL3R5cGVkc3RyZWFtLmgiIDIKIyAx ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9oYXNoLmgiIDEKIyAzMSAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL29iamMvaGFzaC5oIgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMiAi L3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvaGFzaC5oIiAyCiMgMSAiL3Vzci9sb2NhbC9z d2FybS9pbmNsdWRlL29iamMvb2JqYy5oIiAxCiMgMzMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9vYmpjL2hhc2guaCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL2V4dGVy bnZhci5oIiAxCiMgMzQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL2hhc2guaCIgMgoj IDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdHJpbmcu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyODMgIi91c3IvaW5jbHVk ZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMKIyAyODQg Ii91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzMTEgIi91c3IvaW5jbHVkZS9mZWF0dXJl cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAzMTIgIi91c3IvaW5j bHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoK CgoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w LjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAz CgoKCmV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p IDsKCgpleHRlcm4gdm9pZCAqbWVtbW92ZSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9f c3JjLCBzaXplX3QgX19uKQogICAgICAgICAgICA7CgoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkg KHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMs CiAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICAgICAgICA7 CgoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0u bWkgICAgICAgICAgICAgICAgUGFnZSAgICA1CgoKZXh0ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAq X19zLCBpbnQgX19jLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qg dm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgICAgICAgICAg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19jb25z dCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgICAgICAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gdm9pZCAqcmF3bWVtY2hyIChfX2NvbnN0IHZv aWQgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZv aWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAg ICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0 cmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X3NyYykKICAgICAgICAgICAgOwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJp Y3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0 cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICAgICAgICAg OwoKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19u KSA7CgoKZXh0ZXJuIGludCBzdHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy ICpfX3MyKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4g aW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXpl X3QgX19uKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu IGludCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAg ICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBzdHJ4 ZnJtIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKCgoKCgojIDEgIi91c3Iv aW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAzCnR5 cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVjdAoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAg ICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgICA2CgoKewoK ICBzdHJ1Y3QgbG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sxM107CgoKICBjb25zdCB1bnNpZ25lZCBz aG9ydCBpbnQgKl9fY3R5cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKICBjb25z dCBpbnQgKl9fY3R5cGVfdG91cHBlcjsKfSAqX19sb2NhbGVfdDsKIyAxMDkgIi91c3IvaW5jbHVk ZS9zdHJpbmcuaCIgMiAzCgoKZXh0ZXJuIGludCBfX3N0cmNvbGxfbCAoX19jb25zdCBjaGFyICpf X3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIF9fbG9jYWxlX3QgX19sKQogICAgICAgICAgICAgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IF9fc3RyeGZybV9sIChjaGFy ICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sKSA7CgoKCgpleHRlcm4gY2hhciAqc3RyZHVwIChf X2NvbnN0IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgoKZXh0 ZXJuIGNoYXIgKnN0cm5kdXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAg ICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDE1NSAiL3Vzci9pbmNs dWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBp bnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJyY2hy IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9f Y29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KQogICAgICAgICAgICAgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3Qg Y2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgICAgICAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19jb25zdCBjaGFyICpf X3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFj aywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2Rl bFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgICAgNwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNh c2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkK ICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gY2hhciAq c3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f ZGVsaW0pCiAgICAgICAgICAgIDsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RydG9rX3IgKGNoYXIgKl9f cmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj dCBfX3NhdmVfcHRyKSA7CgpleHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3Qg X19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSA7CgoKCgoKCmV4dGVybiB2b2lkICpt ZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6ZV90IF9faGF5c3RhY2tsZW4sCiAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19uZWVkbGUsIHNpemVfdCBfX25lZWRs ZWxlbikKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4g dm9pZCAqX19tZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CmV4 dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwoK CgoKZXh0ZXJuIHNpemVfdCBzdHJsZW4gKF9fY29uc3QgY2hhciAqX19zKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RybmxlbiAoX19jb25zdCBjaGFyICpf X3N0cmluZywgc2l6ZV90IF9fbWF4bGVuKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgOwoKCgpl eHRlcm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90 IF9fYnVmbGVuKSA7CgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxN b2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgICAgOAoKCgoKZXh0ZXJuIHZvaWQgX19i emVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSA7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2Nv bnN0IHZvaWQgKl9fc3JjLCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gdm9p ZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGludCBiY21wIChfX2Nv bnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICAgICAg ICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19j b25zdCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4 dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIF9fYXR0cmlidXRl X18gKChjb25zdCkpOwoKCgoKZXh0ZXJuIGludCBmZnNsIChsb25nIGludCBfX2wpIF9fYXR0cmli dXRlX18gKChjb25zdCkpOwoKX19leHRlbnNpb25fXyBleHRlcm4gaW50IGZmc2xsIChsb25nIGxv bmcgaW50IF9fbGwpCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKCmV4 dGVybiBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f czIpCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50 IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6 ZV90IF9fbikKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4 dGVybiBpbnQgX19zdHJjYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgX19zdHJuY2FzZWNtcF9sIChfX2Nv bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgICAgICAgICBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAg ICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgICAgOQoKCgoKZXh0ZXJu IGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAogICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgOwoKCgoKZXh0ZXJuIGlu dCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAg ICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpzdHJz aWduYWwgKGludCBfX3NpZykgOwoKCmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0 cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICAgICAgICAg OwpleHRlcm4gY2hhciAqc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgICAgICAgICA7CgoKCmV4dGVybiBjaGFyICpfX3N0 cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKZXh0ZXJuIGNoYXIg KnN0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGNo YXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIDsKCgpleHRlcm4gdm9pZCAqbWVtZnJvYiAodm9p ZCAqX19zLCBzaXplX3QgX19uKSA7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25z dCBjaGFyICpfX2ZpbGVuYW1lKSA7CiMgMzU2ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcuaCIgMSAzCiMgMzU3ICIvdXNyL2luY2x1ZGUvc3Ry aW5nLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAxIDMKIyA1MiAi L3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5o IiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Zl YXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDM3ICIvdXNy L2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAz CiMgMzggIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgNTMgIi91c3IvaW5jbHVkZS9iaXRz L3N0cmluZzIuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjYg Ii91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAg ICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgICAxMAoKCiMg MSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy90 eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2Jp dHMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVm IHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsK dHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVu c2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxv bmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMK dHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWlu dDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25l ZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9faW50MzJfdDsKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWdu ZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25l ZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7 Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsKdHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7CnR5 cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVmIF9fdV9sb25nIF9faW5vX3Q7CnR5cGVkZWYg X191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25n IGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90Owp0eXBlZGVmIGludCBfX3Bp ZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5cGVkZWYgX191X2xvbmcgX19ybGltX3Q7CnR5 cGVkZWYgX191X3F1YWRfdCBfX3JsaW02NF90Owp0eXBlZGVmIF9fdV9pbnQgX19pZF90OwoKdHlw ZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRfdDsKCgp0eXBlZGVm IGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50 IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9u ZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7Cgp0eXBlZGVm IGxvbmcgaW50IF9fY2xvY2tfdDsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAg ICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgICAxMQoKCgoKdHlwZWRlZiBp bnQgX19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBlZGVmIGlu dCBfX2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgp0 eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2Nu dF90Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9f ZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYg X191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7 CgoKdHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2Zm NjRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBs b25nIGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0 aHJlYWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgi IDMKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1p ICAgICAgICAgICAgICAgIFBhZ2UgICAxMgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQu aCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMKc3RydWN0IF9fc2NoZWRf cGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0eTsKICB9OwojIDI0ICIvdXNyL2luY2x1 ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMiAzCgoKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsK ICBsb25nIGludCBfX3N0YXR1czsKICBpbnQgX19zcGlubG9jazsKCn07CgoKCnR5cGVkZWYgc3Ry dWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBz dHJ1Y3QgX19wdGhyZWFkX2F0dHJfcwp7CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2No ZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBfX2lu aGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9f c3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7 Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRf ZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVh ZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2Nv bmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgoKCgoK MjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAg ICAgICAgUGFnZSAgIDEzCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21fcmVzZXJ2ZWQ7 CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAgaW50IF9fbV9r aW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhyZWFkX211dGV4 X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRocmVhZF9tdXRl eGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBlZGVmIHN0cnVj dCBfcHRocmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fcndfbG9j azsKICBpbnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVyOwogIF9w dGhyZWFkX2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3Jp dGVfd2FpdGluZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7Cn0gcHRocmVh ZF9yd2xvY2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5kOwogIGludCBf X3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHZvbGF0aWxlIGlu dCBwdGhyZWFkX3NwaW5sb2NrX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIHN0cnVjdCBfcHRocmVh ZF9mYXN0bG9jayBfX2JhX2xvY2s7CiAgaW50IF9fYmFfcmVxdWlyZWQ7CiAgaW50IF9fYmFfcHJl c2VudDsKICBfcHRocmVhZF9kZXNjciBfX2JhX3dhaXRpbmc7CgoKCgoKCgoyMDAxLTA4LTI0IDAx OjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAg MTQKCgp9IHB0aHJlYWRfYmFycmllcl90OwoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQgX19wc2hh cmVkOwp9IHB0aHJlYWRfYmFycmllcmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg aW50IHB0aHJlYWRfdDsKIyAxNDQgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwojIDU0 ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDIgMwojIDIxNyAiL3Vzci9pbmNsdWRlL2Jp dHMvc3RyaW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSB2b2lkICpfX21lbXBjcHlfc21hbGwgKHZv aWQgKiwgY2hhciwgY2hhciwgY2hhciwgY2hhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX191aW50MTZfdCwgX191aW50MTZfdCwgX191aW50MzJfdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191aW50MzJfdCwgc2l6ZV90KTsKZXh0ZXJu IF9faW5saW5lIHZvaWQgKgpfX21lbXBjcHlfc21hbGwgKHZvaWQgKl9fZGVzdDEsCiAgICAgICAg ICAgICAgICAgY2hhciBfX3NyYzBfMSwgY2hhciBfX3NyYzJfMSwgY2hhciBfX3NyYzRfMSwgY2hh ciBfX3NyYzZfMSwKICAgICAgICAgICAgICAgICBfX3VpbnQxNl90IF9fc3JjMF8yLCBfX3VpbnQx Nl90IF9fc3JjNF8yLAogICAgICAgICAgICAgICAgIF9fdWludDMyX3QgX19zcmMwXzQsIF9fdWlu dDMyX3QgX19zcmM0XzQsCiAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3JjbGVuKQp7CiAgdW5p b24gewogICAgX191aW50MzJfdCBfX3VpOwogICAgX191aW50MTZfdCBfX3VzaTsKICAgIHVuc2ln bmVkIGNoYXIgX191YzsKICAgIHVuc2lnbmVkIGNoYXIgX19jOwogIH0gKl9fdSA9IF9fZGVzdDE7 CiAgc3dpdGNoICgodW5zaWduZWQgaW50KSBfX3NyY2xlbikKICAgIHsKICAgIGNhc2UgMToKICAg ICAgX191LT5fX2MgPSBfX3NyYzBfMTsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQg KikgX191ICsgMSk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAyOgogICAgICBfX3UtPl9fdXNpID0g X19zcmMwXzI7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOwog ICAgICBicmVhazsKICAgIGNhc2UgMzoKICAgICAgX191LT5fX3VzaSA9IF9fc3JjMF8yOwogICAg ICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAyKTsKICAgICAgX191LT5fX2Mg PSBfX3NyYzJfMTsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMSk7 CiAgICAgIGJyZWFrOwogICAgY2FzZSA0OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAg ICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CiAgICAgIGJyZWFrOwog ICAgY2FzZSA1OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0gX19leHRl bnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CiAgICAgIF9fdS0+X19jID0gX19zcmM0XzE7CiAg ICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDEpOwoKCgoKCgoKMjAwMS0w OC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAg UGFnZSAgIDE1CgoKICAgICAgYnJlYWs7CiAgICBjYXNlIDY6CiAgICAgIF9fdS0+X191aSA9IF9f c3JjMF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKICAg ICAgX191LT5fX3VzaSA9IF9fc3JjNF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9p ZCAqKSBfX3UgKyAyKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDc6CiAgICAgIF9fdS0+X191aSA9 IF9fc3JjMF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsK ICAgICAgX191LT5fX3VzaSA9IF9fc3JjNF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgo dm9pZCAqKSBfX3UgKyAyKTsKICAgICAgX191LT5fX2MgPSBfX3NyYzZfMTsKICAgICAgX191ID0g X19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMSk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA4 OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAo KHZvaWQgKikgX191ICsgNCk7CiAgICAgIF9fdS0+X191aSA9IF9fc3JjNF80OwogICAgICBfX3Ug PSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKICAgICAgYnJlYWs7CiAgICB9CiAg cmV0dXJuICh2b2lkICopIF9fdTsKfQojIDM3MSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5o IiAzCmV4dGVybiB2b2lkICpfX3Jhd21lbWNociAoY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKTsK IyAzOTUgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgY2hh ciAqX19zdHJjcHlfc21hbGwgKGNoYXIgKiwgX191aW50MTZfdCwgX191aW50MTZfdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VpbnQzMl90LCBfX3VpbnQzMl90LCBz aXplX3QpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RyY3B5X3NtYWxsIChjaGFyICpfX2Rl c3QsCiAgICAgICAgICAgICAgICBfX3VpbnQxNl90IF9fc3JjMF8yLCBfX3VpbnQxNl90IF9fc3Jj NF8yLAogICAgICAgICAgICAgICAgX191aW50MzJfdCBfX3NyYzBfNCwgX191aW50MzJfdCBfX3Ny YzRfNCwKICAgICAgICAgICAgICAgIHNpemVfdCBfX3NyY2xlbikKewogIHVuaW9uIHsKICAgIF9f dWludDMyX3QgX191aTsKICAgIF9fdWludDE2X3QgX191c2k7CiAgICB1bnNpZ25lZCBjaGFyIF9f dWM7CiAgfSAqX191ID0gKHZvaWQgKikgX19kZXN0OwogIHN3aXRjaCAoKHVuc2lnbmVkIGludCkg X19zcmNsZW4pCiAgICB7CiAgICBjYXNlIDE6CiAgICAgIF9fdS0+X191YyA9ICdcMCc7CiAgICAg IGJyZWFrOwogICAgY2FzZSAyOgogICAgICBfX3UtPl9fdXNpID0gX19zcmMwXzI7CiAgICAgIGJy ZWFrOwogICAgY2FzZSAzOgogICAgICBfX3UtPl9fdXNpID0gX19zcmMwXzI7CiAgICAgIF9fdSA9 IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOwogICAgICBfX3UtPl9fdWMgPSAnXDAn OwogICAgICBicmVhazsKICAgIGNhc2UgNDoKICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAg ICAgIGJyZWFrOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVs U3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgIDE2CgoKICAgIGNhc2UgNToKICAgICAgX191 LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9f dSArIDQpOwogICAgICBfX3UtPl9fdWMgPSAnXDAnOwogICAgICBicmVhazsKICAgIGNhc2UgNjoK ICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2 b2lkICopIF9fdSArIDQpOwogICAgICBfX3UtPl9fdXNpID0gX19zcmM0XzI7CiAgICAgIGJyZWFr OwogICAgY2FzZSA3OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0gX19l eHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CiAgICAgIF9fdS0+X191c2kgPSBfX3NyYzRf MjsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMik7CiAgICAgIF9f dS0+X191YyA9ICdcMCc7CiAgICAgIGJyZWFrOwogICAgY2FzZSA4OgogICAgICBfX3UtPl9fdWkg PSBfX3NyYzBfNDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7 CiAgICAgIF9fdS0+X191aSA9IF9fc3JjNF80OwogICAgICBicmVhazsKICAgIH0KICByZXR1cm4g X19kZXN0Owp9CiMgNTU0ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9f aW5saW5lIGNoYXIgKl9fc3RwY3B5X3NtYWxsIChjaGFyICosIF9fdWludDE2X3QsIF9fdWludDE2 X3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191aW50MzJfdCwgX191 aW50MzJfdCwgc2l6ZV90KTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cGNweV9zbWFsbCAo Y2hhciAqX19kZXN0LAogICAgICAgICAgICAgICAgX191aW50MTZfdCBfX3NyYzBfMiwgX191aW50 MTZfdCBfX3NyYzRfMiwKICAgICAgICAgICAgICAgIF9fdWludDMyX3QgX19zcmMwXzQsIF9fdWlu dDMyX3QgX19zcmM0XzQsCiAgICAgICAgICAgICAgICBzaXplX3QgX19zcmNsZW4pCnsKICB1bmlv biB7CiAgICB1bnNpZ25lZCBpbnQgX191aTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3VzaTsK ICAgIHVuc2lnbmVkIGNoYXIgX191YzsKICAgIGNoYXIgX19jOwogIH0gKl9fdSA9ICh2b2lkICop IF9fZGVzdDsKICBzd2l0Y2ggKCh1bnNpZ25lZCBpbnQpIF9fc3JjbGVuKQogICAgewogICAgY2Fz ZSAxOgogICAgICBfX3UtPl9fdWMgPSAnXDAnOwogICAgICBicmVhazsKICAgIGNhc2UgMjoKICAg ICAgX191LT5fX3VzaSA9IF9fc3JjMF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9p ZCAqKSBfX3UgKyAxKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDM6CiAgICAgIF9fdS0+X191c2kg PSBfX3NyYzBfMjsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMik7 CiAgICAgIF9fdS0+X191YyA9ICdcMCc7CiAgICAgIGJyZWFrOwogICAgY2FzZSA0OgogICAgICBf X3UtPl9fdWkgPSBfX3NyYzBfNDsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAg ICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgICAxNwoKCiAgICAgIF9fdSA9 IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDMpOwogICAgICBicmVhazsKICAgIGNhc2Ug NToKICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18g KCh2b2lkICopIF9fdSArIDQpOwogICAgICBfX3UtPl9fdWMgPSAnXDAnOwogICAgICBicmVhazsK ICAgIGNhc2UgNjoKICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9IF9fZXh0 ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOwogICAgICBfX3UtPl9fdXNpID0gX19zcmM0XzI7 CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDEpOwogICAgICBicmVh azsKICAgIGNhc2UgNzoKICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9IF9f ZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOwogICAgICBfX3UtPl9fdXNpID0gX19zcmM0 XzI7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOwogICAgICBf X3UtPl9fdWMgPSAnXDAnOwogICAgICBicmVhazsKICAgIGNhc2UgODoKICAgICAgX191LT5fX3Vp ID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQp OwogICAgICBfX3UtPl9fdWkgPSBfX3NyYzRfNDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAo KHZvaWQgKikgX191ICsgMyk7CiAgICAgIGJyZWFrOwogICAgfQogIHJldHVybiAmX191LT5fX2M7 Cn0KIyA4NzMgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUg c2l6ZV90IF9fc3RyY3Nwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19yZWplY3QpOwpl eHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGNo YXIgX19yZWplY3QpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwogIHdoaWxlIChf X3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdCkKICAgICsr X19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9f c3RyY3Nwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19yZWplY3QxLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfX3JlamVjdDIpOwpleHRlcm4gX19pbmxp bmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19yZWplY3Qx LCBjaGFyIF9fcmVqZWN0MikKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CiAgd2hp bGUgKF9fc1tfX3Jlc3VsdF0gIT0gJ1wwJyAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MQog ICAgICAgICAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MikKICAgICsrX19yZXN1bHQ7CiAg cmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3RyY3Nwbl9jMyAo X19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19yZWplY3QxLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciBfX3JlamVjdDIsIGNoYXIgX19yZWplY3QzKTsKZXh0ZXJuIF9f aW5saW5lIHNpemVfdApfX3N0cmNzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fcmVq ZWN0MSwgY2hhciBfX3JlamVjdDIsCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAg ICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAgMTgKCgogICAgICAgICAg ICAgIGNoYXIgX19yZWplY3QzKQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKICB3 aGlsZSAoX19zW19fcmVzdWx0XSAhPSAnXDAnICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3Qx CiAgICAgICAgICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QyICYmIF9fc1tfX3Jlc3VsdF0g IT0gX19yZWplY3QzKQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KIyA5Mjgg Ii91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9f c3Ryc3BuX2MxIChfX2NvbnN0IGNoYXIgKl9fcywgY2hhciBfX2FjY2VwdCk7CmV4dGVybiBfX2lu bGluZSBzaXplX3QKX19zdHJzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fYWNjZXB0 KQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKCiAgd2hpbGUgKF9fc1tfX3Jlc3Vs dF0gPT0gX19hY2NlcHQpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0 ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cnNwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIg X19hY2NlcHQxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fYWNj ZXB0Mik7CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJzcG5fYzIgKF9fY29uc3QgY2hhciAq X19zLCBjaGFyIF9fYWNjZXB0MSwgY2hhciBfX2FjY2VwdDIpCnsKICByZWdpc3RlciBzaXplX3Qg X19yZXN1bHQgPSAwOwoKICB3aGlsZSAoX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDEgfHwgX19z W19fcmVzdWx0XSA9PSBfX2FjY2VwdDIpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3Vs dDsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cnNwbl9jMyAoX19jb25zdCBjaGFyICpf X3MsIGNoYXIgX19hY2NlcHQxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyIF9fYWNjZXB0MiwgY2hhciBfX2FjY2VwdDMpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9f c3Ryc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgY2hhciBfX2FjY2VwdDEsIGNoYXIgX19hY2Nl cHQyLCBjaGFyIF9fYWNjZXB0MykKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7Cgog IHdoaWxlIChfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MSB8fCBfX3NbX19yZXN1bHRdID09IF9f YWNjZXB0MgogICAgICAgICB8fCBfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MykKICAgICsrX19y ZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CiMgOTgzICIvdXNyL2luY2x1ZGUvYml0cy9zdHJp bmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RycGJya19jMiAoX19jb25zdCBjaGFy ICpfX3MsIGludCBfX2FjY2VwdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19hY2NlcHQyKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnBicmtfYzIgKF9f Y29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQxLCBpbnQgX19hY2NlcHQyKQp7CgogIHdoaWxl ICgqX19zICE9ICdcMCcgJiYgKl9fcyAhPSBfX2FjY2VwdDEgJiYgKl9fcyAhPSBfX2FjY2VwdDIp CiAgICArK19fczsKICByZXR1cm4gKl9fcyA9PSAnXDAnID8gKCh2b2lkICopMCkgOiAoY2hhciAq KSAoc2l6ZV90KSBfX3M7Cn0KCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAg UHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAgMTkKCgpleHRlcm4gX19pbmxp bmUgY2hhciAqX19zdHJwYnJrX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2FjY2VwdDIsIGludCBf X2FjY2VwdDMpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RycGJya19jMyAoX19jb25zdCBj aGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIsCiAgICAgICAgICAgICAgaW50 IF9fYWNjZXB0MykKewoKICB3aGlsZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0gX19hY2NlcHQx ICYmICpfX3MgIT0gX19hY2NlcHQyCiAgICAgICAgICYmICpfX3MgIT0gX19hY2NlcHQzKQogICAg KytfX3M7CiAgcmV0dXJuICpfX3MgPT0gJ1wwJyA/ICgodm9pZCAqKTApIDogKGNoYXIgKikgKHNp emVfdCkgX19zOwp9CiMgMTAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVy biBfX2lubGluZSBzaXplX3QKc3RybmxlbiAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90 IF9fbWF4bGVuKQp7CiAgX19jb25zdCBjaGFyICpfX2VuZCA9IChfX2NvbnN0IGNoYXIgKikgbWVt Y2hyIChfX3N0cmluZywgJ1wwJywgX19tYXhsZW4pOwogIHJldHVybiBfX2VuZCA/IChzaXplX3Qp IChfX2VuZCAtIF9fc3RyaW5nKSA6IF9fbWF4bGVuOwp9CiMgMTA0NSAiL3Vzci9pbmNsdWRlL2Jp dHMvc3RyaW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnRva19yXzFjIChjaGFy ICpfX3MsIGNoYXIgX19zZXAsIGNoYXIgKipfX25leHRwKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIg KgpfX3N0cnRva19yXzFjIChjaGFyICpfX3MsIGNoYXIgX19zZXAsIGNoYXIgKipfX25leHRwKQp7 CiAgY2hhciAqX19yZXN1bHQ7CiAgaWYgKF9fcyA9PSAoKHZvaWQgKikwKSkKICAgIF9fcyA9ICpf X25leHRwOwogIHdoaWxlICgqX19zID09IF9fc2VwKQogICAgKytfX3M7CiAgaWYgKCpfX3MgPT0g J1wwJykKICAgIF9fcmVzdWx0ID0gKCh2b2lkICopMCk7CiAgZWxzZQogICAgewogICAgICBfX3Jl c3VsdCA9IF9fczsKICAgICAgd2hpbGUgKCpfX3MgIT0gJ1wwJyAmJiAqX19zICE9IF9fc2VwKQog ICAgICAgICsrX19zOwogICAgICBpZiAoKl9fcyA9PSAnXDAnKQogICAgICAgICpfX25leHRwID0g X19zOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgKl9fcyA9ICdcMCc7CiAgICAgICAg ICAqX19uZXh0cCA9IF9fcyArIDE7CiAgICAgICAgfQogICAgfQogIHJldHVybiBfX3Jlc3VsdDsK fQojIDEwOTUgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUg Y2hhciAqX19zdHJzZXBfMWMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QpOwpleHRlcm4gX19p bmxpbmUgY2hhciAqCl9fc3Ryc2VwXzFjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0KQp7CiAg cmVnaXN0ZXIgY2hhciAqX19yZXR2YWwgPSAqX19zOwogIGlmIChfX3JldHZhbCA9PSAoKHZvaWQg KikwKSkKICAgIHJldHVybiAqX19zID0gKCh2b2lkICopMCk7CiAgaWYgKCpfX3JldHZhbCA9PSBf X3JlamVjdCkKICAgICooKl9fcykrKyA9ICdcMCc7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAg ICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAgMjAKCgog IGVsc2UKICAgIGlmICgoKl9fcyA9IChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRf cCAoX19yZWplY3QpICYmIChfX3JlamVjdCkgPT0gJ1wwJyA/IChjaGFyICopIF9fcmF3bWVtY2hy IChfX3JldHZhbCwgX19yZWplY3QpIDogc3RyY2hyIChfX3JldHZhbCwgX19yZWplY3QpKSkpICE9 ICgodm9pZCAqKTApKQogICAgICAqKCpfX3MpKysgPSAnXDAnOwogICAgZWxzZQogICAgICAqX19z ID0gKCh2b2lkICopMCk7CiAgcmV0dXJuIF9fcmV0dmFsOwp9CgpleHRlcm4gX19pbmxpbmUgY2hh ciAqX19zdHJzZXBfMmMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0 Mik7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJzZXBfMmMgKGNoYXIgKipfX3MsIGNoYXIg X19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MikKewogIHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFsID0g Kl9fczsKICBpZiAoX19yZXR2YWwgPT0gKCh2b2lkICopMCkpCiAgICByZXR1cm4gKl9fcyA9ICgo dm9pZCAqKTApOwogIGlmICgqX19yZXR2YWwgPT0gX19yZWplY3QxIHx8ICpfX3JldHZhbCA9PSBf X3JlamVjdDIpCiAgICAqKCpfX3MpKysgPSAnXDAnOwogIGVsc2UKICAgIHsKICAgICAgcmVnaXN0 ZXIgY2hhciAqX19jcCA9IF9fcmV0dmFsOwogICAgICB3aGlsZSAoKl9fY3AgIT0gJ1wwJyAmJiAq X19jcCAhPSBfX3JlamVjdDEgJiYgKl9fY3AgIT0gX19yZWplY3QyKQogICAgICAgICsrX19jcDsK ICAgICAgaWYgKCpfX2NwICE9ICdcMCcpCiAgICAgICAgewogICAgICAgICAgKl9fcyA9IF9fY3A7 CiAgICAgICAgICAqKCpfX3MpKysgPSAnXDAnOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg ICpfX3MgPSAoKHZvaWQgKikwKTsKICAgIH0KICByZXR1cm4gX19yZXR2YWw7Cn0KCmV4dGVybiBf X2lubGluZSBjaGFyICpfX3N0cnNlcF8zYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNo YXIgX19yZWplY3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19y ZWplY3QzKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnNlcF8zYyAoY2hhciAqKl9fcywg Y2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyLCBjaGFyIF9fcmVqZWN0MykKewogIHJlZ2lz dGVyIGNoYXIgKl9fcmV0dmFsID0gKl9fczsKICBpZiAoX19yZXR2YWwgPT0gKCh2b2lkICopMCkp CiAgICByZXR1cm4gKl9fcyA9ICgodm9pZCAqKTApOwogIGlmICgqX19yZXR2YWwgPT0gX19yZWpl Y3QxIHx8ICpfX3JldHZhbCA9PSBfX3JlamVjdDIKICAgICAgfHwgKl9fcmV0dmFsID09IF9fcmVq ZWN0MykKICAgICooKl9fcykrKyA9ICdcMCc7CiAgZWxzZQogICAgewogICAgICByZWdpc3RlciBj aGFyICpfX2NwID0gX19yZXR2YWw7CiAgICAgIHdoaWxlICgqX19jcCAhPSAnXDAnICYmICpfX2Nw ICE9IF9fcmVqZWN0MSAmJiAqX19jcCAhPSBfX3JlamVjdDIKICAgICAgICAgICAgICYmICpfX2Nw ICE9IF9fcmVqZWN0MykKICAgICAgICArK19fY3A7CiAgICAgIGlmICgqX19jcCAhPSAnXDAnKQog ICAgICAgIHsKICAgICAgICAgICpfX3MgPSBfX2NwOwogICAgICAgICAgKigqX19zKSsrID0gJ1ww JzsKICAgICAgICB9CiAgICAgIGVsc2UKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAg ICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgICAyMQoKCiAgICAgICAg Kl9fcyA9ICgodm9pZCAqKTApOwogICAgfQogIHJldHVybiBfX3JldHZhbDsKfQoKZXh0ZXJuIF9f aW5saW5lIGNoYXIgKl9fc3Ryc2VwX2cgKGNoYXIgKipfX3MsIF9fY29uc3QgY2hhciAqX19yZWpl Y3QpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3Ryc2VwX2cgKGNoYXIgKipfX3MsIF9fY29u c3QgY2hhciAqX19yZWplY3QpCnsKICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAg aWYgKF9fcmV0dmFsID09ICgodm9pZCAqKTApKQogICAgcmV0dXJuICgodm9pZCAqKTApOwogIGlm ICgoKl9fcyA9IF9fZXh0ZW5zaW9uX18gKHsgY2hhciBfX2EwLCBfX2ExLCBfX2EyOyAoX19idWls dGluX2NvbnN0YW50X3AgKF9fcmVqZWN0KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoX19y ZWplY3QpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKF9fcmVqZWN0KSA9PSAxKSA/ICgo X19hMCA9ICgoX19jb25zdCBjaGFyICopIChfX3JlamVjdCkpWzBdLCBfX2EwID09ICdcMCcpID8g KCh2b2lkKSAoX19yZXR2YWwpLCAoKHZvaWQgKikwKSkgOiAoKF9fYTEgPSAoKF9fY29uc3QgY2hh ciAqKSAoX19yZWplY3QpKVsxXSwgX19hMSA9PSAnXDAnKSA/IChfX2V4dGVuc2lvbl9fIChfX2J1 aWx0aW5fY29uc3RhbnRfcCAoX19hMCkgJiYgKF9fYTApID09ICdcMCcgPyAoY2hhciAqKSBfX3Jh d21lbWNociAoX19yZXR2YWwsIF9fYTApIDogc3RyY2hyIChfX3JldHZhbCwgX19hMCkpKSA6ICgo X19hMiA9ICgoX19jb25zdCBjaGFyICopIChfX3JlamVjdCkpWzJdLCBfX2EyID09ICdcMCcpID8g X19zdHJwYnJrX2MyIChfX3JldHZhbCwgX19hMCwgX19hMSkgOiAoKChfX2NvbnN0IGNoYXIgKikg KF9fcmVqZWN0KSlbM10gPT0gJ1wwJyA/IF9fc3RycGJya19jMyAoX19yZXR2YWwsIF9fYTAsIF9f YTEsIF9fYTIpIDogc3RycGJyayAoX19yZXR2YWwsIF9fcmVqZWN0KSkpKSkgOiBzdHJwYnJrIChf X3JldHZhbCwgX19yZWplY3QpKTsgfSkpICE9ICgodm9pZCAqKTApKQogICAgKigqX19zKSsrID0g J1wwJzsKICByZXR1cm4gX19yZXR2YWw7Cn0KIyAxMTg4ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJp bmcyLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1 ZGUvc3RkbGliLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91 c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAz NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyA1MjggIi91c3IvaW5jbHVkZS9zdGRsaWIu aCIgMwpleHRlcm4gdm9pZCAqbWFsbG9jIChzaXplX3QgX19zaXplKSBfX2F0dHJpYnV0ZV9fICgo X19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVf dCBfX3NpemUpCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDEx ODkgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMiAzCgoKCgpleHRlcm4gY2hhciAqX19z dHJkdXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19f KSk7CiMgMTIxMiAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBjaGFyICpf X3N0cm5kdXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgICAgICAg ICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDM2MCAiL3Vzci9pbmNsdWRlL3N0cmlu Zy5oIiAyIDMKIyAzNSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvaGFzaC5oIiAyCiMg NDMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL2hhc2guaCIKdHlwZWRlZiBzdHJ1Y3Qg Y2FjaGVfbm9kZQp7CiAgc3RydWN0IGNhY2hlX25vZGUgKm5leHQ7CgogIGNvbnN0IHZvaWQgKmtl eTsKCgoKICB2b2lkICp2YWx1ZTsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAg ICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgICAyMgoKCn0gKm5vZGVfcHRy OwojIDY0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9oYXNoLmgiCnR5cGVkZWYgdW5z aWduZWQgaW50ICgqaGFzaF9mdW5jX3R5cGUpKHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKIyA3MyAi L3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvaGFzaC5oIgp0eXBlZGVmIGludCAoKmNvbXBh cmVfZnVuY190eXBlKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CiMgODIgIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9vYmpjL2hhc2guaCIKdHlwZWRlZiBzdHJ1Y3QKewoKICBub2RlX3B0 ciAqbm9kZV90YWJsZTsKCgogIHVuc2lnbmVkIGludCBzaXplOwoKCiAgdW5zaWduZWQgaW50IHVz ZWQ7CiAgdW5zaWduZWQgaW50IG1hc2s7CgoKCiAgdW5zaWduZWQgaW50IGxhc3RfYnVja2V0OwoK CgogIGhhc2hfZnVuY190eXBlIGhhc2hfZnVuYzsKCiAgY29tcGFyZV9mdW5jX3R5cGUgY29tcGFy ZV9mdW5jOwp9IGNhY2hlX3Q7Cgp0eXBlZGVmIGNhY2hlX3QgKmNhY2hlX3B0cjsKCgoKZXh0ZXJu IGNhY2hlX3B0ciBtb2R1bGVfaGFzaF90YWJsZSwgY2xhc3NfaGFzaF90YWJsZTsKCgoKY2FjaGVf cHRyIGhhc2hfbmV3ICh1bnNpZ25lZCBpbnQgc2l6ZSwKICAgICAgICAgICAgICAgICAgICBoYXNo X2Z1bmNfdHlwZSBoYXNoX2Z1bmMsCiAgICAgICAgICAgICAgICAgICAgY29tcGFyZV9mdW5jX3R5 cGUgY29tcGFyZV9mdW5jKTsKCgoKdm9pZCBoYXNoX2RlbGV0ZSAoY2FjaGVfcHRyIGNhY2hlKTsK CgoKCgoKdm9pZCBoYXNoX2FkZCAoY2FjaGVfcHRyICpjYWNoZXAsIGNvbnN0IHZvaWQgKmtleSwg dm9pZCAqdmFsdWUpOwoKCgoKdm9pZCBoYXNoX3JlbW92ZSAoY2FjaGVfcHRyIGNhY2hlLCBjb25z dCB2b2lkICprZXkpOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1v ZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgIDIzCgoKIyAxNDIgIi91c3IvbG9jYWwv c3dhcm0vaW5jbHVkZS9vYmpjL2hhc2guaCIKbm9kZV9wdHIgaGFzaF9uZXh0IChjYWNoZV9wdHIg Y2FjaGUsIG5vZGVfcHRyIG5vZGUpOwoKCgp2b2lkICpoYXNoX3ZhbHVlX2Zvcl9rZXkgKGNhY2hl X3B0ciBjYWNoZSwgY29uc3Qgdm9pZCAqa2V5KTsKCgoKQk9PTCBoYXNoX2lzX2tleV9pbl9oYXNo IChjYWNoZV9wdHIgY2FjaGUsIGNvbnN0IHZvaWQgKmtleSk7CiMgMTY0ICIvdXNyL2xvY2FsL3N3 YXJtL2luY2x1ZGUvb2JqYy9oYXNoLmgiCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Cmhhc2hf cHRyIChjYWNoZV9wdHIgY2FjaGUsIGNvbnN0IHZvaWQgKmtleSkKewogIHJldHVybiAoKHNpemVf dClrZXkgLyBzaXplb2YgKHZvaWQgKikpICYgY2FjaGUtPm1hc2s7Cn0KCgoKCgpzdGF0aWMgaW5s aW5lIHVuc2lnbmVkIGludApoYXNoX3N0cmluZyAoY2FjaGVfcHRyIGNhY2hlLCBjb25zdCB2b2lk ICprZXkpCnsKICB1bnNpZ25lZCBpbnQgcmV0ID0gMDsKICB1bnNpZ25lZCBpbnQgY3RyID0gMDsK CgogIHdoaWxlICgqKGNoYXIqKWtleSkgewogICAgcmV0IF49ICooY2hhciopa2V5KysgPDwgY3Ry OwogICAgY3RyID0gKGN0ciArIDEpICUgc2l6ZW9mICh2b2lkICopOwogIH0KCiAgcmV0dXJuIHJl dCAmIGNhY2hlLT5tYXNrOwp9CgoKCnN0YXRpYyBpbmxpbmUgaW50CmNvbXBhcmVfcHRycyAoY29u c3Qgdm9pZCAqazEsIGNvbnN0IHZvaWQgKmsyKQp7CiAgcmV0dXJuICEoazEgLSBrMik7Cn0KCgoK c3RhdGljIGlubGluZSBpbnQKY29tcGFyZV9zdHJpbmdzIChjb25zdCB2b2lkICprMSwgY29uc3Qg dm9pZCAqazIpCnsKICBpZiAoazEgPT0gazIpCiAgICByZXR1cm4gMTsKICBlbHNlIGlmIChrMSA9 PSAwIHx8IGsyID09IDApCiAgICByZXR1cm4gMDsKICBlbHNlCiAgICByZXR1cm4gIV9fZXh0ZW5z aW9uX18gKHsgc2l6ZV90IF9fczFfbGVuLCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9jb25zdGFudF9w IChrMSkgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKGsyKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4g KGsxKSwgX19zMl9sZW4gPSBzdHJsZW4gKGsyKSwgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgo azEpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGsxKSA9PSAxKSB8fCBfX3MxX2xlbiA+ PSA0KSAmJiAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKChrMikgKyAxKSAtIChzaXplX3QpKGNv bnN0IHZvaWQgKikoazIpID09IDEpIHx8IF9fczJfbGVuID49IDQpKSA/IG1lbWNtcCAoKF9fY29u c3QgY2hhciAqKSAoazEpLCAoX19jb25zdCBjaGFyICopIChrMiksIChfX3MxX2xlbiA8IF9fczJf bGVuID8gX19zMV9sZW4gOiBfX3MyX2xlbikgKyAxKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAo azEpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChrMSkgKyAxKSAtIChzaXplX3QpKGNvbnN0 IHZvaWQgKikoazEpID09IDEpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoazEpLCBfX3MxX2xlbiA8 IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wIChrMikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQg KikoKGsyKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShrMikgPT0gMSkgPyAoX19leHRl bnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAoazEpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikoazIpKVswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1 bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChrMSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoazIpKVsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBf X3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChr MSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazIp KVsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazEpKVszXSAtICgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsyKSlbM10pOyB9IH0gX19y ZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19z MiA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazIpOyByZWdp c3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoazEpKVswXSAtIF9fczJbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0 ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoazEpKVsxXSAtIF9fczJbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0 ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoazEpKVsyXSAtIF9fczJbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0 ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKGsxKSlbM10gLSBfX3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogKF9fYnVpbHRp bl9jb25zdGFudF9wIChrMikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGsyKSArIDEpIC0g KHNpemVfdCkoY29uc3Qgdm9pZCAqKShrMikgPT0gMSkgJiYgKF9fczJfbGVuID0gc3RybGVuIChr MiksIF9fczJfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKGsxKSAmJiAoKHNpemVf dCkoY29uc3Qgdm9pZCAqKSgoazEpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGsxKSA9 PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChrMSkpWzBdIC0gKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKShrMikpWzBdKTsgaWYgKF9fczJfbGVu ID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsxKSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopIChrMikpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jl c3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKGsxKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChrMikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBf X3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChr MSkpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazIp KVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNp Z25lZCBjaGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopIChrMSk7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9IF9fczFbMF0gLSAoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChrMikpWzBdOyBpZiAoX19zMl9sZW4gPiAw ICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsxXSAtICgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsyKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAx ICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsyXSAtICgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsyKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAy ICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKF9fczFbM10gLSAoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChrMikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkp IDogc3RyY21wIChrMSwgazIpKSkpOyB9KTsKfQoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAg ICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgIDI0CgoKIyAz MiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvdHlwZWRzdHJlYW0uaCIgMgojIDEgIi91 c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRl L3N0ZGlvLmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1 cmVzLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2Nj My9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGRlZi5oIiAx IDMKIyA0MyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu MC4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgi IDEgMwojIDQ1ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4wLjEvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyA1MyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0 cnVjdCBfSU9fRklMRSBGSUxFOwojIDYzICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9J T19GSUxFIF9fRklMRTsKIyA3MyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saWJp by5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv X0dfY29uZmlnLmgiIDEgMwojIDkgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDEwICIvdXNyL2luY2x1ZGUvX0dfY29uZmln LmgiIDIgMwoKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzEyICIvdXNyL2xvY2FsL2djYzMv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRkZWYuaCIgMwp0 eXBlZGVmIHVuc2lnbmVkIGludCB3aW50X3Q7CiMgMTUgIi91c3IvaW5jbHVkZS9fR19jb25maWcu aCIgMiAzCiMgMjQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xv Y2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRk ZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCiMgMSAiL3Vzci9pbmNs dWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyA2 NyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50 OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAgfSBf X3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIg MwoKdHlwZWRlZiBzdHJ1Y3QKewoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAg IFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgIDI1CgoKICBfX29mZl90IF9f cG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7 CiAgX19vZmY2NF90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7 CiMgNDQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nY29u di5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2djb252LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv ZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCiMgMSAiL3Vz ci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEg Ii91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNs dWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIv dXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgi IDIgMwojIDI5ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvZ2Nj My9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGRlZi5oIiAx IDMKIyAzMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0KewogIF9fR0NPTlZf T0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVN LAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09O Vl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9J TExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsK ICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgw MDAyCn07CgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxT d2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAgMjYKCgpzdHJ1Y3QgX19nY29udl9zdGVwOwpz dHJ1Y3QgX19nY29udl9zdGVwX2RhdGE7CnN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3Q7CnN0 cnVjdCBfX2djb252X3RyYW5zX2RhdGE7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl9mY3QpIChz dHJ1Y3QgX19nY29udl9zdGVwICosIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLCBfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg KiosIHNpemVfdCAqLCBpbnQsIGludCk7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0 KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0 KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5z X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25l ZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoK CnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19jb250ZXh0X2ZjdCkgKHZvaWQgKiwgX19jb25z dCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CgoKdHlwZWRl ZiBpbnQgKCpfX2djb252X3RyYW5zX3F1ZXJ5X2ZjdCkgKF9fY29uc3QgY2hhciAqLCBfX2NvbnN0 IGNoYXIgKioqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19pbml0X2ZjdCkgKHZvaWQgKiosIGNv bnN0IGNoYXIgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQg Kik7CgpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhCnsKCiAgX19nY29udl90cmFuc19mY3QgX190 cmFuc19mY3Q7CiAgX19nY29udl90cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0 OwogIF9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRh OwogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fbmV4dDsKfTsKCgoKc3RydWN0IF9fZ2Nv bnZfc3RlcAp7CiAgc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdCAqX19zaGxpYl9oYW5kbGU7 CiAgX19jb25zdCBjaGFyICpfX21vZG5hbWU7CgogIGludCBfX2NvdW50ZXI7CgoKCgoKCgoKMjAw MS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAg ICAgUGFnZSAgIDI3CgoKICBjaGFyICpfX2Zyb21fbmFtZTsKICBjaGFyICpfX3RvX25hbWU7Cgog IF9fZ2NvbnZfZmN0IF9fZmN0OwogIF9fZ2NvbnZfaW5pdF9mY3QgX19pbml0X2ZjdDsKICBfX2dj b252X2VuZF9mY3QgX19lbmRfZmN0OwoKCgogIGludCBfX21pbl9uZWVkZWRfZnJvbTsKICBpbnQg X19tYXhfbmVlZGVkX2Zyb207CiAgaW50IF9fbWluX25lZWRlZF90bzsKICBpbnQgX19tYXhfbmVl ZGVkX3RvOwoKCiAgaW50IF9fc3RhdGVmdWw7CgogIHZvaWQgKl9fZGF0YTsKfTsKCgoKc3RydWN0 IF9fZ2NvbnZfc3RlcF9kYXRhCnsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZjsKICB1bnNpZ25l ZCBjaGFyICpfX291dGJ1ZmVuZDsKCgoKICBpbnQgX19mbGFnczsKCgoKICBpbnQgX19pbnZvY2F0 aW9uX2NvdW50ZXI7CgoKCiAgaW50IF9faW50ZXJuYWxfdXNlOwoKICBfX21ic3RhdGVfdCAqX19z dGF0ZXA7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKCgoKICBzdHJ1Y3QgX19nY29udl90cmFuc19k YXRhICpfX3RyYW5zOwp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfX2djb252X2luZm8KewogIHNpemVf dCBfX25zdGVwczsKICBzdHJ1Y3QgX19nY29udl9zdGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5zaW9u X18gc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YSBbXTsKfSAqX19nY29udl90OwojIDQ1 ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAg ICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgIDI4CgoK dHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0cnVjdAogIHsK ICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0 YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGludCBfR19p bnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBf R19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVu c2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykp KTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k ZV9fIChfX1NJX18pKSk7CiMgMzEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA1MSAiL3Vz ci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi91c3IvbG9j YWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGFy Zy5oIiAzCnR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgNTIgIi91 c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyAxNTggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0 cnVjdCBfSU9fanVtcF90OyBzdHJ1Y3QgX0lPX0ZJTEU7CiMgMTY4ICIvdXNyL2luY2x1ZGUvbGli aW8uaCIgMwp0eXBlZGVmIHZvaWQgX0lPX2xvY2tfdDsKCgoKCgpzdHJ1Y3QgX0lPX21hcmtlciB7 CiAgc3RydWN0IF9JT19tYXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CgoK CiAgaW50IF9wb3M7CiMgMTkxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp9OwoKCmVudW0gX19j b2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2RlY3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9f Y29kZWN2dF9lcnJvciwKICBfX2NvZGVjdnRfbm9jb252Cn07CiMgMjU5ICIvdXNyL2luY2x1ZGUv bGliaW8uaCIgMwpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9J T19yZWFkX3B0cjsKICBjaGFyKiBfSU9fcmVhZF9lbmQ7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAgMjkK CgogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hhciog X0lPX3dyaXRlX3B0cjsKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwogIGNoYXIqIF9JT19idWZfYmFz ZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpf SU9fYmFja3VwX2Jhc2U7CiAgY2hhciAqX0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtl ciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsK ICBpbnQgX2Jsa3NpemU7CiAgX19vZmZfdCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9y dCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9y dGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190ICpfbG9jazsKIyAzMDMgIi91c3IvaW5jbHVkZS9saWJp by5oIiAzCiAgX19vZmY2NF90IF9vZmZzZXQ7CgoKCgoKICB2b2lkICpfX3BhZDE7CiAgdm9pZCAq X19wYWQyOwoKICBpbnQgX21vZGU7CgogIGNoYXIgX3VudXNlZDJbMTUgKiBzaXplb2YgKGludCkg LSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgX0lP X0ZJTEU7CgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3Bs dXMgX0lPXzJfMV9zdGRpbl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0 ZG91dF87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CiMgMzQy ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4g KHZvaWQgKl9fY29va2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCgoy MDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAg ICAgICBQYWdlICAgMzAKCgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2 b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4g KHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGlu dCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9faW9fcmVhZF9m biBjb29raWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29va2llX3dy aXRlX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1bmN0aW9u X3Q7CnR5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsKCgp0eXBl ZGVmIHN0cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVfZm4gKndyaXRl OwogIF9faW9fc2Vla19mbiAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsKfSBfSU9fY29v a2llX2lvX2Z1bmN0aW9uc190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgY29v a2llX2lvX2Z1bmN0aW9uc190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpleHRlcm4gdm9p ZCBfSU9fY29va2llX2luaXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2ZpbGUsIGludCBf X3JlYWRfd3JpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19jb29raWUs IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19mbnMpOwoKCgoKCgoKZXh0ZXJuIGludCBfX3Vu ZGVyZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxFICopIDsK ZXh0ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIDsKZXh0ZXJuIHdpbnRfdCBf X3d1bmRlcmZsb3cgKF9JT19GSUxFICopIDsKZXh0ZXJuIHdpbnRfdCBfX3d1ZmxvdyAoX0lPX0ZJ TEUgKikgOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChfSU9fRklMRSAqLCB3aW50X3QpIDsK CgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAg ICAgICAgICAgICAgIFBhZ2UgICAzMQoKCiMgNDI0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpl eHRlcm4gaW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkgOwpleHRlcm4gaW50IF9JT19wdXRj IChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgOwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9fRklM RSAqX19mcCkgOwpleHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19GSUxFICpfX2ZwKSA7CgpleHRl cm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpfX2ZwKSA7CgoKCgoKZXh0ZXJuIHZv aWQgX0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikgOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2Zp bGUgKF9JT19GSUxFICopIDsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAq KSA7CiMgNDU0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZnNjYW5m IChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAogICAgICAg ICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSA7CmV4dGVy biBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19y ZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSA7CmV4dGVy biBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxFICosIGludCwgX19zc2l6ZV90KSA7CmV4dGVy biBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkgOwoKZXh0ZXJu IF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkg OwpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGlu dCkgOwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIDsKIyA3 NCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2lu Y2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgp0eXBlZGVmIF9fZ251Y192YV9saXN0IF9fbm90X3ZhX2xp c3RfXzsKIyA4OCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMC4xL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CgoKCgp0 eXBlZGVmIF9HX2Zwb3M2NF90IGZwb3M2NF90OwojIDEzNyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAxMzggIi91c3IvbG9jYWwvZ2NjMy9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoK CgpleHRlcm4gRklMRSAqc3RkaW47CmV4dGVybiBGSUxFICpzdGRvdXQ7CmV4dGVybiBGSUxFICpz dGRlcnI7CiMgMTUyICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNo YXIgKl9fZmlsZW5hbWUpIDsKCmV4dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0IGNoYXIgKl9fb2xk LCBfX2NvbnN0IGNoYXIgKl9fbmV3KSA7CgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAg ICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAgMzIKCgoKZXh0 ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQpIDsKIyAxNjggIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJ TEUgKnRtcGZpbGU2NCAodm9pZCkgOwoKCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcykg OwoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIDsKIyAxODggIi91c3IvbG9j YWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlv LmgiIDMKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29uc3Qg Y2hhciAqX19wZngpCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoK CgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSA7CgpleHRlcm4gaW50IGZmbHVz aCAoRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUg Kl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgOwoKCgoKCmV4dGVy biBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIDsKCmV4dGVy biBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAg ICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwojIDIzMiAiL3Vz ci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUv c3RkaW8uaCIgMwpleHRlcm4gRklMRSAqZm9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19tb2RlcykgOwpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJp Y3QgX19zdHJlYW0pIDsKCgoKCmV4dGVybiBGSUxFICpmZG9wZW4gKGludCBfX2ZkLCBfX2NvbnN0 IGNoYXIgKl9fbW9kZXMpIDsKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAg ICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgICAzMwoKCgoKZXh0ZXJuIEZJ TEUgKmZvcGVuY29va2llICh2b2lkICpfX3Jlc3RyaWN0IF9fbWFnaWNfY29va2llLAogICAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAg ICAgICAgICAgICAgICAgICAgICAgIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5j cykgOwoKCmV4dGVybiBGSUxFICpmbWVtb3BlbiAodm9pZCAqX19zLCBzaXplX3QgX19sZW4sIF9f Y29uc3QgY2hhciAqX19tb2RlcykgOwoKCgoKZXh0ZXJuIEZJTEUgKm9wZW5fbWVtc3RyZWFtIChj aGFyICoqX19yZXN0cmljdCBfX2J1ZmxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9jKSA7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChG SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCmV4 dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0 cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikg OwoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBj aGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3Np emUpIDsKCgpleHRlcm4gdm9pZCBzZXRsaW5lYnVmIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0 ZXJuIGludCBmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4g aW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4 dGVybiBpbnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCgpleHRlcm4gaW50 IHZmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgOwoK ZXh0ZXJuIGludCB2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9f Z251Y192YV9saXN0IF9fYXJnKQogICAgICAgICAgICA7CgpleHRlcm4gaW50IHZzcHJpbnRmIChj aGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAog ICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgOwoKCgoKCgoKCjIwMDEt MDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAg IFBhZ2UgICAzNAoKCgoKZXh0ZXJuIGludCBzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3Ms IHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt YXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpf X3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAg ICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkp OwoKCgoKCmV4dGVybiBpbnQgdmFzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZiwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192 YV9saXN0IF9fYXJnKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9f cHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJp Y3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZm10LCAuLi4pCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w cmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3Qg X19wdHIsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zt dCwgLi4uKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRm X18sIDIsIDMpKSk7CgoKZXh0ZXJuIGludCB2ZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2ZtdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3Qg X19hcmcpCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZf XywgMiwgMCkpKTsKZXh0ZXJuIGludCBkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt YXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgoKCmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpf X3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgc2NhbmYgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgoKCmV4dGVybiBpbnQgdmZzY2FuZiAoRklMRSAqX19y ZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAg ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICAgICAgICAgIF9fYXR0cmlidXRl X18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKZXh0ZXJuIGludCB2c2NhbmYg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcp CiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAxLCAw KSkpOwoKCmV4dGVybiBpbnQgdnNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywK ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9f Z251Y192YV9saXN0IF9fYXJnKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0 X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAg ICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgICAzNQoKCgoKCgpleHRl cm4gaW50IGZnZXRjIChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9f c3RyZWFtKSA7CgoKZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSA7CgoKCgoKCgpleHRlcm4gaW50 IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxv Y2tlZCAodm9pZCkgOwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJl YW0pIDsKCgoKCmV4dGVybiBpbnQgZnB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CmV4 dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IHB1 dGNoYXIgKGludCBfX2MpIDsKCgoKCgoKCmV4dGVybiBpbnQgZnB1dGNfdW5sb2NrZWQgKGludCBf X2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBf X2MsIEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9f YykgOwoKCgoKCmV4dGVybiBpbnQgZ2V0dyAoRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50 IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3RyZWFtKSA7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToy MSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgIDM2 CgoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwg RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICAgICAgICAgOwoKCgpleHRlcm4gY2hhciAq ZmdldHNfdW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCgoKCmV4dGVy biBjaGFyICpnZXRzIChjaGFyICpfX3MpIDsKIyA0MzYgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIF9f c3NpemVfdCBfX2dldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxp bWl0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtKSA7CmV4dGVybiBfX3NzaXplX3QgZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9f bGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3Qg X19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAq X19yZXN0cmljdCBfX3N0cmVhbSkgOwoKCmV4dGVybiBfX3NzaXplX3QgZ2V0bGluZSAoY2hhciAq Kl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 ICpfX3Jlc3RyaWN0IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVz dHJpY3QgX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgICAgICAgIDsKCgoK ZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwoK CgpleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSA7CgoKCmV4dGVybiBpbnQgdW5n ZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2 b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAg ICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgpleHRlcm4gc2l6ZV90 IGZ3cml0ZSAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAog ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIDsK CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkg ICAgICAgICAgICAgICAgUGFnZSAgIDM3CgoKCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQg KHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKZXh0 ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0 ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf X24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZnNlZWsgKEZJ TEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9fd2hlbmNlKSA7CgpleHRlcm4gbG9u ZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSA7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUg Kl9fc3RyZWFtKSA7CiMgNDk5ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvIChGSUxF ICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hlbmNlKSA7CgpleHRlcm4gX19vZmZf dCBmdGVsbG8gKEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklMRSAq X19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgICAgICAg ICA7CgpleHRlcm4gaW50IGZzZXRwb3MgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3NfdCAq X19wb3MpIDsKIyA1MzMgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vla282NCAoRklMRSAq X19zdHJlYW0sIF9fb2ZmNjRfdCBfX29mZiwgaW50IF9fd2hlbmNlKSA7CmV4dGVybiBfX29mZjY0 X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZmdldHBvczY0IChGSUxF ICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zNjRfdCAqX19yZXN0cmljdCBfX3BvcykKICAgICAg ICAgICAgOwpleHRlcm4gaW50IGZzZXRwb3M2NCAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBv czY0X3QgKl9fcG9zKSA7CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyIChGSUxFICpfX3N0cmVhbSkg OwoKZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBmZXJyb3Ig KEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxF ICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7 CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJu IHZvaWQgcGVycm9yIChfX2NvbnN0IGNoYXIgKl9fcykgOwoKCgoKZXh0ZXJuIGludCBzeXNfbmVy cjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBzeXNfZXJybGlzdFtdOwoKCgoKCgoKMjAw MS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAg ICAgUGFnZSAgIDM4CgoKCgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hh ciAqX19jb25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAq X19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChGSUxFICpfX3N0cmVh bSkgOwoKCgoKCgpleHRlcm4gRklMRSAqcG9wZW4gKF9fY29uc3QgY2hhciAqX19jb21tYW5kLCBf X2NvbnN0IGNoYXIgKl9fbW9kZXMpIDsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJl YW0pIDsKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSA7CgoKCgoKZXh0ZXJu IGNoYXIgKmN1c2VyaWQgKGNoYXIgKl9fcykgOwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJu IGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNr LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m b3JtYXQsIC4uLikgOwpleHRlcm4gaW50IG9ic3RhY2tfdnByaW50ZiAoc3RydWN0IG9ic3RhY2sg Kl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg X19nbnVjX3ZhX2xpc3QgX19hcmdzKSA7CgoKCgoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAg ICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgIDM5CgoK ZXh0ZXJuIHZvaWQgZmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gaW50IGZ0 cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAo RklMRSAqX19zdHJlYW0pIDsKIyA2NDAgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy9zdGRpby5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMwpleHRl cm4gX19pbmxpbmUgaW50CnZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwg X19nbnVjX3ZhX2xpc3QgX19hcmcpCnsKICByZXR1cm4gdmZwcmludGYgKHN0ZG91dCwgX19mbXQs IF9fYXJnKTsKfQoKCmV4dGVybiBfX2lubGluZSBpbnQKZ2V0Y2hhciAodm9pZCkKewogIHJldHVy biBfSU9fZ2V0YyAoc3RkaW4pOwp9CgoKCgpleHRlcm4gX19pbmxpbmUgaW50CmdldGNfdW5sb2Nr ZWQgKEZJTEUgKl9fZnApCnsKICByZXR1cm4gKChfX2ZwKS0+X0lPX3JlYWRfcHRyID49IChfX2Zw KS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoX19mcCkgOiAqKHVuc2lnbmVkIGNoYXIgKikgKF9f ZnApLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgpleHRlcm4gX19pbmxpbmUgaW50CmdldGNoYXJfdW5s b2NrZWQgKHZvaWQpCnsKICByZXR1cm4gKChzdGRpbiktPl9JT19yZWFkX3B0ciA+PSAoc3RkaW4p LT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChzdGRpbikgOiAqKHVuc2lnbmVkIGNoYXIgKikgKHN0 ZGluKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKCgpleHRlcm4gX19pbmxpbmUgaW50CnB1dGNoYXIg KGludCBfX2MpCnsKICByZXR1cm4gX0lPX3B1dGMgKF9fYywgc3Rkb3V0KTsKfQoKCgoKZXh0ZXJu IF9faW5saW5lIGludApmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pCnsK ICByZXR1cm4gKCgoX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193 cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoX19zdHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkg OiAodW5zaWduZWQgY2hhcikgKCooX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkp OwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkg ICAgICAgICAgICAgICAgUGFnZSAgIDQwCgoKfQoKCgoKCmV4dGVybiBfX2lubGluZSBpbnQKcHV0 Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gKCgoX19zdHJl YW0pLT5fSU9fd3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVy ZmxvdyAoX19zdHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikg KCooX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKZXh0ZXJuIF9faW5s aW5lIGludApwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKQp7CiAgcmV0dXJuICgoKHN0ZG91dCkt Pl9JT193cml0ZV9wdHIgPj0gKHN0ZG91dCktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAo c3Rkb3V0LCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKHN0ZG91 dCktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgoKCgpleHRlcm4gX19pbmxpbmUgX19z c2l6ZV90CmdldGxpbmUgKGNoYXIgKipfX2xpbmVwdHIsIHNpemVfdCAqX19uLCBGSUxFICpfX3N0 cmVhbSkKewogIHJldHVybiBfX2dldGRlbGltIChfX2xpbmVwdHIsIF9fbiwgJ1xuJywgX19zdHJl YW0pOwp9CgoKCgoKZXh0ZXJuIF9faW5saW5lIGludApmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0 cmVhbSkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MTApICE9IDApOwp9CgoK ZXh0ZXJuIF9faW5saW5lIGludApmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKQp7CiAg cmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgyMCkgIT0gMCk7Cn0KIyA2NDEgIi91c3Iv bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0 ZGlvLmgiIDIgMwojIDMzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy90eXBlZHN0cmVh bS5oIiAyCgp0eXBlZGVmIGludCAoKm9iamNfdHlwZWRfcmVhZF9mdW5jKSh2b2lkKiwgY2hhcios IGludCk7CnR5cGVkZWYgaW50ICgqb2JqY190eXBlZF93cml0ZV9mdW5jKSh2b2lkKiwgY29uc3Qg Y2hhciosIGludCk7CnR5cGVkZWYgaW50ICgqb2JqY190eXBlZF9mbHVzaF9mdW5jKSh2b2lkKik7 CnR5cGVkZWYgaW50ICgqb2JqY190eXBlZF9lb2ZfZnVuYykodm9pZCopOwojIDQ4ICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvb2JqYy90eXBlZHN0cmVhbS5oIgp0eXBlZGVmIHN0cnVjdCBvYmpj X3R5cGVkX3N0cmVhbSB7CiAgdm9pZCogcGh5c2ljYWw7CiAgY2FjaGVfcHRyIG9iamVjdF90YWJs ZTsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1p ICAgICAgICAgICAgICAgIFBhZ2UgICA0MQoKCiAgY2FjaGVfcHRyIHN0cmVhbV90YWJsZTsKICBj YWNoZV9wdHIgY2xhc3NfdGFibGU7CiAgY2FjaGVfcHRyIG9iamVjdF9yZWZzOwogIGludCBtb2Rl OwogIGludCB0eXBlOwogIGludCB2ZXJzaW9uOwogIGludCB3cml0aW5nX3Jvb3RfcDsKICBvYmpj X3R5cGVkX3JlYWRfZnVuYyByZWFkOwogIG9iamNfdHlwZWRfd3JpdGVfZnVuYyB3cml0ZTsKICBv YmpjX3R5cGVkX2VvZl9mdW5jIGVvZjsKICBvYmpjX3R5cGVkX2ZsdXNoX2Z1bmMgZmx1c2g7Cn0g VHlwZWRTdHJlYW07CiMgOTMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL3R5cGVkc3Ry ZWFtLmgiCmludCBvYmpjX3dyaXRlX3R5cGUgKFR5cGVkU3RyZWFtKiBzdHJlYW0sIGNvbnN0IGNo YXIqIHR5cGUsIGNvbnN0IHZvaWQqIGRhdGEpOwppbnQgb2JqY19yZWFkX3R5cGUgKFR5cGVkU3Ry ZWFtKiBzdHJlYW0sIGNvbnN0IGNoYXIqIHR5cGUsIHZvaWQqIGRhdGEpOwoKaW50IG9iamNfd3Jp dGVfdHlwZXMgKFR5cGVkU3RyZWFtKiBzdHJlYW0sIGNvbnN0IGNoYXIqIHR5cGUsIC4uLik7Cmlu dCBvYmpjX3JlYWRfdHlwZXMgKFR5cGVkU3RyZWFtKiBzdHJlYW0sIGNvbnN0IGNoYXIqIHR5cGUs IC4uLik7CgppbnQgb2JqY193cml0ZV9vYmplY3RfcmVmZXJlbmNlIChUeXBlZFN0cmVhbSogc3Ry ZWFtLCBpZCBvYmplY3QpOwppbnQgb2JqY193cml0ZV9yb290X29iamVjdCAoVHlwZWRTdHJlYW0q IHN0cmVhbSwgaWQgb2JqZWN0KTsKCmxvbmcgb2JqY19nZXRfc3RyZWFtX2NsYXNzX3ZlcnNpb24g KFR5cGVkU3RyZWFtKiBzdHJlYW0sIENsYXNzIGNsYXNzKTsKCgoKCgoKaW50IG9iamNfd3JpdGVf YXJyYXkgKFR5cGVkU3RyZWFtKiBzdHJlYW0sIGNvbnN0IGNoYXIqIHR5cGUsCiAgICAgICAgICAg ICAgICAgICAgICBpbnQgY291bnQsIGNvbnN0IHZvaWQqIGRhdGEpOwppbnQgb2JqY19yZWFkX2Fy cmF5IChUeXBlZFN0cmVhbSogc3RyZWFtLCBjb25zdCBjaGFyKiB0eXBlLAogICAgICAgICAgICAg ICAgICAgICBpbnQgY291bnQsIHZvaWQqIGRhdGEpOwoKaW50IG9iamNfd3JpdGVfb2JqZWN0IChU eXBlZFN0cmVhbSogc3RyZWFtLCBpZCBvYmplY3QpOwppbnQgb2JqY19yZWFkX29iamVjdCAoVHlw ZWRTdHJlYW0qIHN0cmVhbSwgaWQqIG9iamVjdCk7CiMgMTI0ICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvb2JqYy90eXBlZHN0cmVhbS5oIgpUeXBlZFN0cmVhbSogb2JqY19vcGVuX3R5cGVkX3N0 cmVhbSAoRklMRSogcGh5c2ljYWwsIGludCBtb2RlKTsKVHlwZWRTdHJlYW0qIG9iamNfb3Blbl90 eXBlZF9zdHJlYW1fZm9yX2ZpbGUgKGNvbnN0IGNoYXIqIGZpbGVfbmFtZSwgaW50IG1vZGUpOwoK dm9pZCBvYmpjX2Nsb3NlX3R5cGVkX3N0cmVhbSAoVHlwZWRTdHJlYW0qIHN0cmVhbSk7CgpCT09M IG9iamNfZW5kX29mX3R5cGVkX3N0cmVhbSAoVHlwZWRTdHJlYW0qIHN0cmVhbSk7CnZvaWQgb2Jq Y19mbHVzaF90eXBlZF9zdHJlYW0gKFR5cGVkU3RyZWFtKiBzdHJlYW0pOwojIDMyICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9PYmplY3QuaCIgMgoKCgoKCkBpbnRlcmZhY2UgT2JqZWN0 CnsKICAgIENsYXNzIGlzYTsKfQoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAg ICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAgNDIKCgorIGluaXRpYWxp emU7Ci0gaW5pdDsKCgorIG5ldzsKKyBhbGxvYzsKLSBmcmVlOwotIGNvcHk7Ci0gc2hhbGxvd0Nv cHk7Ci0gZGVlcGVuOwotIGRlZXBDb3B5OwoKCi0gKENsYXNzKWNsYXNzOwotIChDbGFzcylzdXBl ckNsYXNzOwotIChNZXRhQ2xhc3MpbWV0YUNsYXNzOwotIChjb25zdCBjaGFyICopbmFtZTsKCgot IHNlbGY7Ci0gKHVuc2lnbmVkIGludCloYXNoOwotIChCT09MKWlzRXF1YWw6YW5PYmplY3Q7Ci0g KGludCljb21wYXJlOmFub3RoZXJPYmplY3Q7CgoKLSAoQk9PTClpc01ldGFDbGFzczsKLSAoQk9P TClpc0NsYXNzOwotIChCT09MKWlzSW5zdGFuY2U7CgoKLSAoQk9PTClpc0tpbmRPZjooQ2xhc3Mp YUNsYXNzT2JqZWN0OwotIChCT09MKWlzTWVtYmVyT2Y6KENsYXNzKWFDbGFzc09iamVjdDsKLSAo Qk9PTClpc0tpbmRPZkNsYXNzTmFtZWQ6KGNvbnN0IGNoYXIgKilhQ2xhc3NOYW1lOwotIChCT09M KWlzTWVtYmVyT2ZDbGFzc05hbWVkOihjb25zdCBjaGFyICopYUNsYXNzTmFtZTsKCgorIChCT09M KWluc3RhbmNlc1Jlc3BvbmRUbzooU0VMKWFTZWw7Ci0gKEJPT0wpcmVzcG9uZHNUbzooU0VMKWFT ZWw7CgoKLSAoQk9PTCljb25mb3Jtc1RvOihQcm90b2NvbCopYVByb3RvY29sOwoKCisgKElNUClp bnN0YW5jZU1ldGhvZEZvcjooU0VMKWFTZWw7Ci0gKElNUCltZXRob2RGb3I6KFNFTClhU2VsOwor IChzdHJ1Y3Qgb2JqY19tZXRob2RfZGVzY3JpcHRpb24gKilkZXNjcmlwdGlvbkZvckluc3RhbmNl TWV0aG9kOihTRUwpYVNlbDsKLSAoc3RydWN0IG9iamNfbWV0aG9kX2Rlc2NyaXB0aW9uICopZGVz Y3JpcHRpb25Gb3JNZXRob2Q6KFNFTClhU2VsOwoKCi0gcGVyZm9ybTooU0VMKWFTZWw7Ci0gcGVy Zm9ybTooU0VMKWFTZWwgd2l0aDphbk9iamVjdDsKLSBwZXJmb3JtOihTRUwpYVNlbCB3aXRoOmFu T2JqZWN0MSB3aXRoOmFuT2JqZWN0MjsKCgotIChyZXR2YWxfdClmb3J3YXJkOihTRUwpYVNlbCA6 KGFyZ2xpc3RfdClhcmdGcmFtZTsKLSAocmV0dmFsX3QpcGVyZm9ybXY6KFNFTClhU2VsIDooYXJn bGlzdF90KWFyZ0ZyYW1lOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBw bE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgIDQzCgoKCgorIHBvc2VBczooQ2xh c3MpYUNsYXNzT2JqZWN0OwotIChDbGFzcyl0cmFuc211dGVDbGFzc1RvOihDbGFzcylhQ2xhc3NP YmplY3Q7CgoKLSBzdWJjbGFzc1Jlc3BvbnNpYmlsaXR5OihTRUwpYVNlbDsKLSBub3RJbXBsZW1l bnRlZDooU0VMKWFTZWw7Ci0gc2hvdWxkTm90SW1wbGVtZW50OihTRUwpYVNlbDsKCgotIGRvZXNO b3RSZWNvZ25pemU6KFNFTClhU2VsOwotIGVycm9yOihjb25zdCBjaGFyICopYVN0cmluZywgLi4u OwoKCisgKGludCl2ZXJzaW9uOworIHNldFZlcnNpb246KGludClhVmVyc2lvbjsKKyAoaW50KXN0 cmVhbVZlcnNpb246IChUeXBlZFN0cmVhbSopYVN0cmVhbTsKCi0gcmVhZDogKFR5cGVkU3RyZWFt KilhU3RyZWFtOwotIHdyaXRlOiAoVHlwZWRTdHJlYW0qKWFTdHJlYW07Ci0gYXdha2U7CgpAZW5k CiMgMjIgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmovZGVmdHlwZS5oIiAyCgoKCgoK CkBwcm90b2NvbCBDUkVBVEFCTEUKQGVuZAoKCkBwcm90b2NvbCBSRVRVUk5BQkxFCkBlbmQKIyA0 NiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9kZWZ0eXBlLmgiCnR5cGVkZWYgdm9p ZCAoKm5vdGlmeV90KSggaWQgb2JqZWN0LCBpZCByZWFsbG9jQWRkcmVzcywgdm9pZCAqYXJnICk7 CgoKCgoKCnR5cGVkZWYgdm9pZCAqcmVmX3Q7CgoKCgp0eXBlZGVmIHZvaWQgKCpmdW5jX3QpKCB2 b2lkICk7CgoKCgp0eXBlZGVmIGlkICgqZml4dXBSb3V0aW5lX3QpKCB2b2lkICpmaXh1cENvbnRl eHQsIGlkIGZpeHVwT2JqZWN0ICk7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAg ICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAgNDQKCgp0eXBlZGVmIHZv aWQgKCpmaXh1cF90KSggZml4dXBSb3V0aW5lX3QgZml4dXBSb3V0aW5lLCB2b2lkICpmaXh1cENv bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgZml4dXBBcmd1bWVudCApOwojIDY3 ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiIDIKIyAxICIvdXNyL2xvY2FsL3N3 YXJtL2luY2x1ZGUvZXh0ZXJudmFyLmgiIDEKIyA2OCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRl L2RlZm9iai5oIiAyCiMgNzcgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIKQHBy b3RvY29sIEdldE5hbWUKIyA4OSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgot IF9JX1VzaW5nOwotIChjb25zdCBjaGFyICopZ2V0TmFtZTsKQGVuZAoKQHByb3RvY29sIERlZmlu ZWRPYmplY3QgPEdldE5hbWU+CiMgMTA4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2Jq LmgiCi0gX0lfVXNpbmc7CiMgMTE3ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgi Ci0gKEJPT0wpcmVzcG9uZHNUbzogKFNFTClhU2VsOwoKKyAoQk9PTCljb25mb3Jtc1RvOiAoUHJv dG9jb2wgKilwcm90b2NvbDsKLSAoQk9PTCljb25mb3Jtc1RvOiAoUHJvdG9jb2wgKilwcm90b2Nv bDsKCgoKLSBnZXRDbGFzczsKCgotIChjb25zdCBjaGFyICopZ2V0VHlwZU5hbWU7CgoKCi0gKHJl Zl90KWFkZFJlZjogKG5vdGlmeV90KW5vdGlmeUZ1bmN0aW9uIHdpdGhBcmd1bWVudDogKHZvaWQg Kilhcmc7CgoKLSAodm9pZClyZW1vdmVSZWY6IChyZWZfdClyZWZWYWw7CgoKLSAoaW50KWNvbXBh cmU6IGFuT2JqZWN0OwoKCi0gcGVyZm9ybTogKFNFTClhU2VsOwoKCi0gcGVyZm9ybTogKFNFTClh U2VsIHdpdGg6IGFuT2JqZWN0MTsKCgotIHBlcmZvcm06IChTRUwpYVNlbCB3aXRoOiBhbk9iamVj dDEgd2l0aDogYW5PYmoyOwoKCi0gcGVyZm9ybTogKFNFTClhU2VsIHdpdGg6IGFuT2JqZWN0MSB3 aXRoOiBhbk9iajIgd2l0aDogYW5PYmozOwoKCgotICh2b2lkKXNldERpc3BsYXlOYW1lOiAoY29u c3QgY2hhciAqKWRpc3BsYXlOYW1lOwoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAg ICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgIDQ1CgoKCi0gKGNv bnN0IGNoYXIgKilnZXREaXNwbGF5TmFtZTsKIyAxNjggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9kZWZvYmouaCIKLSAodm9pZClkZXNjcmliZTogb3V0cHV0Q2hhclN0cmVhbTsKCgoKLSAodm9p ZClkZXNjcmliZUlEOiBvdXRwdXRDaGFyU3RyZWFtOwoKCi0gKHZvaWQpeHByaW50OwoKCi0gKHZv aWQpeHByaW50aWQ7CgoKLSAodm9pZCl4ZnByaW50OwoKCi0gKHZvaWQpeGZwcmludGlkOwoKCi0g Z2V0Wm9uZTsKQGVuZAoKQHByb3RvY29sIEN1c3RvbWl6ZQojIDIyMyAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL2RlZm9iai5oIgotIF9JX0NyZWF0aW5nOwojIDIzOSAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL2RlZm9iai5oIgorIGN1c3RvbWl6ZUJlZ2luOiBhWm9uZTsKCgotIGN1c3RvbWl6 ZUVuZDsKIyAyNjUgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIKLSBjdXN0b21p emVDb3B5OiBhWm9uZTsKQGVuZAoKQHByb3RvY29sIENyZWF0ZSA8RGVmaW5lZE9iamVjdCwgQ3Vz dG9taXplPgojIDMxOSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgotIF9JX0Ny ZWF0aW5nOwojIDMzNSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgorIGNyZWF0 ZTogYVpvbmU7CgoKCgoKCgorIGNyZWF0ZUJlZ2luOiBhWm9uZTsKIyAzNzEgIi91c3IvbG9jYWwv c3dhcm0vaW5jbHVkZS9kZWZvYmouaCIKLSBjcmVhdGVFbmQ7CkBlbmQKCkBwcm90b2NvbCBEcm9w CiMgNDAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCgoKCgoKCgoyMDAxLTA4 LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQ YWdlICAgNDYKCgotIF9JX1VzaW5nOwotICh2b2lkKWRyb3A7CkBlbmQKCkBwcm90b2NvbCBab25l IDxDcmVhdGUsIERyb3AsIENSRUFUQUJMRT4KIyA0NTYgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9kZWZvYmouaCIKLSBfSV9DcmVhdGluZzsKCgoKCgoKCi0gKHZvaWQpc2V0UGFnZVNpemU6IChz aXplX3QpcGFnZVNpemU7CgotIF9JX1VzaW5nOwotIChzaXplX3QpZ2V0UGFnZVNpemU7CgoKCgoK Ci0gYWxsb2NJVmFyczogKENsYXNzKWFDbGFzczsKCgoKCgoKLSBjb3B5SVZhcnM6IGFuT2JqZWN0 OwoKCgoKCgoKLSAodm9pZClmcmVlSVZhcnM6IGFuT2JqZWN0OwojIDQ5OSAiL3Vzci9sb2NhbC9z d2FybS9pbmNsdWRlL2RlZm9iai5oIgotIGFsbG9jSVZhcnNDb21wb25lbnQ6IChDbGFzcylhQ2xh c3M7CgoKCi0gY29weUlWYXJzQ29tcG9uZW50OiBhbk9iamVjdDsKCgotICh2b2lkKWZyZWVJVmFy c0NvbXBvbmVudDogYW5PYmplY3Q7CgoKCgoKCi0gZ2V0Q29tcG9uZW50Wm9uZTsKCgoKCgoKCjIw MDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAg ICAgIFBhZ2UgICA0NwoKCgoKCgoKLSAodm9pZCAqKWFsbG9jOiAoc2l6ZV90KXNpemU7CgoKCgoK Ci0gKHZvaWQpZnJlZTogKHZvaWQgKilhQmxvY2s7CgoKCgotICh2b2lkICopYWxsb2NCbG9jazog KHNpemVfdClzaXplOwoKCgotICh2b2lkKWZyZWVCbG9jazogKHZvaWQgKilhQmxvY2sgYmxvY2tT aXplOiAoc2l6ZV90KXNpemU7CiMgNTQ1ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2Jq LmgiCi0gZ2V0UG9wdWxhdGlvbjsKCgotICh2b2lkKWRlc2NyaWJlRm9yRWFjaDogb3V0cHV0Q2hh clN0cmVhbTsKCgotICh2b2lkKWRlc2NyaWJlRm9yRWFjaElEOiBvdXRwdXRDaGFyU3RyZWFtOwpA ZW5kCgpAcHJvdG9jb2wgRGVmaW5lZENsYXNzIDxEZWZpbmVkT2JqZWN0PgoKCgotIF9JX1VzaW5n OworIGdldFN1cGVyY2xhc3M7CisgKEJPT0wpaXNTdWJjbGFzczogYUNsYXNzOwoKKyAodm9pZClz ZXRUeXBlSW1wbGVtZW50ZWQ6IGFUeXBlOworIGdldFR5cGVJbXBsZW1lbnRlZDsKCisgKElNUCln ZXRNZXRob2RGb3I6IChTRUwpYVNlbDsKQGVuZAoKQHByb3RvY29sIENyZWF0ZWRDbGFzcyA8Q3Jl YXRlLCBEZWZpbmVkQ2xhc3M+CgoKCgotIF9JX0NyZWF0aW5nOwotIHNldE5hbWU6IChjb25zdCBj aGFyICopbmFtZTsKLSBzZXRDbGFzczogYUNsYXNzOwotIHNldFN1cGVyY2xhc3M6IGFDbGFzczsK LSBzZXREZWZpbmluZ0NsYXNzOiBhQ2xhc3M7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAg ICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAgNDgKCgotIGF0 OiAoU0VMKWFTZWwgYWRkTWV0aG9kOiAoSU1QKWFNZXRob2Q7Ci0gbGlzcEluQ3JlYXRlOiBleHBy OwotIGhkZjVJbkNyZWF0ZTogaGRmNU9iajsKLSAodm9pZClsaXNwT3V0U2hhbGxvdzogc3RyZWFt OwotICh2b2lkKWhkZjVPdXRTaGFsbG93OiBoZGY1T2JqOwotICh2b2lkKXVwZGF0ZUFyY2hpdmVy OiBhcmNoaXZlcjsKLSBfSV9Vc2luZzsKLSBnZXREZWZpbmluZ0NsYXNzOwpAZW5kCgpAcHJvdG9j b2wgQmVoYXZpb3JQaGFzZSA8Q3JlYXRlZENsYXNzPgoKCgoKLSBfSV9DcmVhdGluZzsKLSAodm9p ZClzZXROZXh0UGhhc2U6IGFDbGFzczsKCi0gX0lfVXNpbmc7Ci0gZ2V0TmV4dFBoYXNlOwpAZW5k CgpAcHJvdG9jb2wgQ29weQojIDYyMCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5o IgotIF9JX1VzaW5nOwotIGNvcHk6IChpZCA8Wm9uZT4pYVpvbmU7CkBlbmQKCgoKCgpAcHJvdG9j b2wgR2V0T3duZXIKIyA2NDcgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIKLSBf SV9Vc2luZzsKLSBnZXRPd25lcjsKQGVuZAoKQHByb3RvY29sIFNldEluaXRpYWxWYWx1ZQojIDY3 MiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgotIF9JX0NyZWF0aW5nOwoKCgoK CgoKLSAodm9pZClzZXRJbml0aWFsVmFsdWU6IGluaXRpYWxWYWx1ZTsKQGVuZAoKQHByb3RvY29s IFN5bWJvbCA8Q3JlYXRlLCBHZXROYW1lLCBDUkVBVEFCTEU+CiMgNzA2ICIvdXNyL2xvY2FsL3N3 YXJtL2luY2x1ZGUvZGVmb2JqLmgiCi0gX0lfQ3JlYXRpbmc7CgoKCgoKCgoKCjIwMDEtMDgtMjQg MDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2Ug ICA0OQoKCgorIGNyZWF0ZTogKGlkIDxab25lPilhWm9uZSBzZXROYW1lOiAoY29uc3QgY2hhciAq KW5hbWU7CgoKCkBlbmQKCkBwcm90b2NvbCBFdmVudFR5cGUgPFN5bWJvbD4KCgoKCi0gX0lfVXNp bmc7CgotICh2b2lkKXJhaXNlRXZlbnQ7CgoKCi0gKHZvaWQpcmFpc2VFdmVudDogKGNvbnN0IHZv aWQgKilldmVudERhdGEsIC4uLjsKCgoKCgpAZW5kCgoKQHByb3RvY29sIFdhcm5pbmcgPEV2ZW50 VHlwZSwgQ1JFQVRBQkxFPgoKCgoKLSBfSV9Vc2luZzsKCi0gKHZvaWQpc2V0TWVzc2FnZVN0cmlu ZzogKGNvbnN0IGNoYXIgKiltZXNzYWdlU3RyaW5nOwoKCi0gKGNvbnN0IGNoYXIgKilnZXRNZXNz YWdlU3RyaW5nOwoKZXh0ZXJuIGlkIDxXYXJuaW5nPgogIFdhcm5pbmdNZXNzYWdlLAogIFJlc291 cmNlQXZhaWxhYmlsaXR5LAogIExpYnJhcnlVc2FnZSwKICBEZWZhdWx0QXNzdW1lZCwKICBPYnNv bGV0ZUZlYXR1cmUsCiAgT2Jzb2xldGVNZXNzYWdlLAogIFNhdmVXYXJuaW5nOwoKCgoKCkBlbmQK CkBwcm90b2NvbCBFcnJvciA8V2FybmluZywgQ1JFQVRBQkxFPgoKCgoKCgoKCjIwMDEtMDgtMjQg MDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2Ug ICA1MAoKCgoKCmV4dGVybiBpZCA8RXJyb3I+CiAgU291cmNlTWVzc2FnZSwKICBOb3RJbXBsZW1l bnRlZCwKICBTdWJjbGFzc011c3RJbXBsZW1lbnQsCiAgSW52YWxpZENvbWJpbmF0aW9uLAogIElu dmFsaWRPcGVyYXRpb24sCiAgSW52YWxpZEFyZ3VtZW50LAogIENyZWF0ZVN1YmNsYXNzaW5nLAog IENyZWF0ZVVzYWdlLAogIE91dE9mTWVtb3J5LAogIEludmFsaWRBbGxvY1NpemUsCiAgSW50ZXJu YWxFcnJvciwKICBCbG9ja2VkT2JqZWN0QWxsb2MsCiAgQmxvY2tlZE9iamVjdFVzYWdlLAogIFBy b3RvY29sVmlvbGF0aW9uLAogIExvYWRFcnJvciwKICBTYXZlRXJyb3I7CgoKCgoKQGVuZAoKQHBy b3RvY29sIEFyZ3VtZW50cyA8Q3JlYXRlLCBEcm9wLCBDUkVBVEFCTEU+CiMgODc2ICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCi0gX0lfQ3JlYXRpbmc7Ci0gc2V0QXJnYzogKHVu c2lnbmVkKWNvdW50IEFyZ3Y6IChjb25zdCBjaGFyICoqKXRoZUFyZ3Y7Ci0gc2V0QXBwTmFtZTog KGNvbnN0IGNoYXIgKilhcHBOYW1lOwotIHNldEFwcE1vZGVTdHJpbmc6IChjb25zdCBjaGFyICop YXBwTW9kZVN0cmluZzsKLSBzZXRPcHRpb25GdW5jOiAoaW50ICgqKSAoaW50LCBjb25zdCBjaGFy ICopKW9wdGlvbkZ1bmM7Ci0gc2V0QnVnQWRkcmVzczogKGNvbnN0IGNoYXIgKilidWdBZGRyZXNz OwotIHNldFZlcnNpb246IChjb25zdCBjaGFyICopdmVyc2lvbjsKLSBhZGRPcHRpb25zOiAoc3Ry dWN0IGFyZ3Bfb3B0aW9uICopb3B0aW9uczsKIyA5MDMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9kZWZvYmouaCIKLSAodm9pZClhZGRPcHRpb246IChjb25zdCBjaGFyICopbmFtZSBrZXk6IChp bnQpa2V5IGFyZzogKGNvbnN0IGNoYXIgKilhcmcgZmxhZ3M6IChpbnQpZmxhZ3MgZG9jOiAoY29u c3QgY2hhciAqKWRvYyBncm91cDogKGludClncm91cDsKCisgY3JlYXRlQXJnYzogKGludClhcmdj IEFyZ3Y6IChjb25zdCBjaGFyICoqKWFyZ3YgYXBwTmFtZTogKGNvbnN0IGNoYXIgKilhcHBOYW1l IHZlcnNpb246IChjb25zdCBjaGFyICopdmVyc2lvbiBidWdBZGRyZXNzOiAoY29uc3QgY2hhciAq KWJ1Z0FkZHJlc3Mgb3B0aW9uczogKHN0cnVjdCBhcmdwX29wdGlvbiAqKW9wdGlvbnMgb3B0aW9u RnVuYzogKGludCAoKikgKGludCwgY29uc3QgY2hhciAqKSlvcHRpb25GdW5jIGluaGliaXRFeGVj dXRhYmxlU2VhcmNoRmxhZzogKEJPT0wpaW5oaWJpdEV4ZWN1dGFibGVTZWFyY2hGbGFnOwoKCi0g KGludClwYXJzZUtleTogKGludClrZXkgYXJnOiAoY29uc3QgY2hhciAqKWFyZzsKLSBfSV9TZXR0 aW5nOwotIHNldEluaGliaXRBcmNoaXZlckxvYWRGbGFnOiAoQk9PTClpbmhpYml0QXJjaGl2ZXJM b2FkRmxhZzsKLSBzZXRJbmhpYml0RXhlY3V0YWJsZVNlYXJjaEZsYWc6IChCT09MKXRoZUluaGli aXRFeGVjdXRhYmxlU2VhcmNoRmxhZzsKLSBzZXRCYXRjaE1vZGVGbGFnOiAoQk9PTCliYXRjaE1v ZGVGbGFnOwotIHNldFZhcnlTZWVkRmxhZzogKEJPT0wpdmFyeVNlZWRGbGFnOwotIHNldFZlcmJv c2VGbGFnOiAoQk9PTCl2ZXJib3NlRmxhZzsKCgoKLSBzZXREZWZhdWx0QXBwQ29uZmlnUGF0aDog KGNvbnN0IGNoYXIgKilwYXRoOwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAg ICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAgNTEKCgotIHNldERlZmF1 bHRBcHBEYXRhUGF0aDogKGNvbnN0IGNoYXIgKilwYXRoOwotIHNldEZpeGVkU2VlZDogKHVuc2ln bmVkKXNlZWQ7CgoKLSBfSV9Vc2luZzsKLSAoQk9PTClnZXRCYXRjaE1vZGVGbGFnOwotIChCT09M KWdldFZhcnlTZWVkRmxhZzsKLSAoQk9PTClnZXRGaXhlZFNlZWRGbGFnOwotICh1bnNpZ25lZCln ZXRGaXhlZFNlZWQ7Ci0gKEJPT0wpZ2V0VmVyYm9zZUZsYWc7Ci0gKGNvbnN0IGNoYXIgKilnZXRB cHBOYW1lOwotIChjb25zdCBjaGFyICopZ2V0QXBwTW9kZVN0cmluZzsKLSAoaW50KWdldEFyZ2M7 Ci0gKGludClnZXRMYXN0QXJnSW5kZXg7Ci0gKGNvbnN0IGNoYXIgKiopZ2V0QXJndjsKLSAoY29u c3QgY2hhciAqKWdldEV4ZWN1dGFibGVQYXRoOwotIChjb25zdCBjaGFyICopZ2V0U3dhcm1Ib21l OwotIChjb25zdCBjaGFyICopZ2V0Q29uZmlnUGF0aDsKLSAoY29uc3QgY2hhciAqKWdldERhdGFQ YXRoOwoKLSAoY29uc3QgY2hhciAqKWdldEFwcERhdGFQYXRoOwoKCi0gKGNvbnN0IGNoYXIgKiln ZXRBcHBDb25maWdQYXRoOwotIChCT09MKWdldFNob3dDdXJyZW50VGltZUZsYWc7Ci0gKEJPT0wp Z2V0SW5oaWJpdEFyY2hpdmVyTG9hZEZsYWc7CgpAZW5kCgpAcHJvdG9jb2wgQXJjaGl2ZXIgPENy ZWF0ZSwgRHJvcCwgUkVUVVJOQUJMRT4KCgotIF9JX0NyZWF0aW5nOwoKCi0gc2V0SW5oaWJpdExv YWRGbGFnOiAoQk9PTClpbmhpYml0TG9hZEZsYWc7CgoKLSBzZXRQYXRoOiAoY29uc3QgY2hhciAq KXBhdGg7CgoKCi0gc2V0U3lzdGVtQXJjaGl2ZXJGbGFnOiAoQk9PTClzeXN0ZW1BcmNoaXZlckZs YWc7CgoKLSBzZXREZWZhdWx0UGF0aDsKCgotIHNldERlZmF1bHRBcHBQYXRoOwotIF9JX1VzaW5n OwotICh2b2lkKXJlZ2lzdGVyQ2xpZW50OiBjbGllbnQ7Ci0gKHZvaWQpdW5yZWdpc3RlckNsaWVu dDogY2xpZW50OwoKCgotICh2b2lkKXB1dERlZXA6IChjb25zdCBjaGFyICopa2V5IG9iamVjdDog b2JqZWN0OwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dh cm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgIDUyCgoKCgotICh2b2lkKXB1dFNoYWxsb3c6IChj b25zdCBjaGFyICopa2V5IG9iamVjdDogb2JqZWN0OwoKCi0gZ2V0T2JqZWN0OiAoY29uc3QgY2hh ciAqKWtleTsKCgotIGdldFdpdGhab25lOiAoaWQgPFpvbmU+KWFab25lIGtleTogKGNvbnN0IGNo YXIgKilrZXk7CgoKCi0gKHZvaWQpc3luYzsKQGVuZAoKQHByb3RvY29sIExpc3BBcmNoaXZlciA8 QXJjaGl2ZXIsIENSRUFUQUJMRT4KCgoKCgotIF9JX0NyZWF0aW5nOwoKCisgY3JlYXRlOiAoaWQg PFpvbmU+KWFab25lIHNldFBhdGg6IChjb25zdCBjaGFyICopcGF0aDsKCi0gX0lfU2V0dGluZzsK LSBfSV9Vc2luZzsKQGVuZAoKQHByb3RvY29sIEhERjVBcmNoaXZlciA8QXJjaGl2ZXIsIENSRUFU QUJMRT4KCgoKCgotIF9JX0NyZWF0aW5nOwoKCisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNl dFBhdGg6IChjb25zdCBjaGFyICopcGF0aDsKCi0gX0lfU2V0dGluZzsKLSBfSV9Vc2luZzsKQGVu ZAoKQHByb3RvY29sIEhERjUgPENyZWF0ZSwgRHJvcCwgQ1JFQVRBQkxFPgoKCi0gX0lfQ3JlYXRp bmc7Ci0gc2V0V3JpdGVGbGFnOiAoQk9PTCl3cml0ZUZsYWc7Ci0gc2V0RGF0YXNldEZsYWc6IChC T09MKWRhdGFzZXRGbGFnOwotIHNldEV4dGVuc2libGVWZWN0b3JUeXBlOiAoZmNhbGxfdHlwZV90 KXR5cGU7Ci0gc2V0RXh0ZW5zaWJsZURvdWJsZVZlY3RvcjsKLSBzZXRQYXJlbnQ6IHBhcmVudDsK LSBzZXRDb21wb3VuZFR5cGU6IGNvbXBvdW5kVHlwZTsKLSBzZXRDb3VudDogKHVuc2lnbmVkKWNv dW50OwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0u bWkgICAgICAgICAgICAgICAgUGFnZSAgIDUzCgoKLSBfSV9TZXR0aW5nOwoKCgotIHNldE5hbWU6 IChjb25zdCBjaGFyICopbmFtZTsKLSBzZXRCYXNlVHlwZU9iamVjdDogYmFzZVR5cGVPYmplY3Q7 Ci0gX0lfVXNpbmc7Ci0gKHZvaWQpaXRlcmF0ZTogKGludCAoKikgKGlkIDxIREY1PmhkZjVPYmop KWl0ZXJhdGVGdW5jOwotICh2b2lkKWl0ZXJhdGU6IChpbnQgKCopIChpZCA8SERGNT5oZGY1T2Jq KSlpdGVyYXRlRnVuYyBkcm9wOiAoQk9PTClkcm9wRmxhZzsKLSAoQk9PTClnZXREYXRhc2V0Rmxh ZzsKLSAoQk9PTClnZXRXcml0ZUZsYWc7Ci0gKHNpemVfdClnZXREYXRhc2V0UmFuazsKLSAoc2l6 ZV90KWdldERhdGFzZXREaW1lbnNpb246ICh1bnNpZ25lZClkaW1OdW1iZXI7Ci0gKHVuc2lnbmVk KWdldENvdW50OwotIGdldENvbXBvdW5kVHlwZTsKLSBnZXRDbGFzczsKLSAodm9pZClhc3NpZ25J dmFyOiBvYmo7CgotIChCT09MKWNoZWNrTmFtZTogKGNvbnN0IGNoYXIgKiluYW1lOwotIChCT09M KWNoZWNrRGF0YXNldE5hbWU6IChjb25zdCBjaGFyICopZGF0YXNldE5hbWU7CgotICh2b2lkKWxv YWREYXRhc2V0OiAodm9pZCAqKXB0cjsKLSAodm9pZClzdG9yZUFzRGF0YXNldDogKGNvbnN0IGNo YXIgKiluYW1lIHR5cGVOYW1lOiAoY29uc3QgY2hhciAqKXR5cGVOYW1lIHR5cGU6IChmY2FsbF90 eXBlX3QpdHlwZSByYW5rOiAodW5zaWduZWQpcmFuayBkaW1zOiAodW5zaWduZWQgKilkaW1zIHB0 cjogKHZvaWQgKilwdHI7CgotICh2b2lkKWFkZERvdWJsZVRvVmVjdG9yOiAoZG91YmxlKXZhbDsK Ci0gKHZvaWQpc3RvcmVUeXBlTmFtZTogKGNvbnN0IGNoYXIgKil0eXBlTmFtZTsKLSAodm9pZClz dG9yZUNvbXBvbmVudFR5cGVOYW1lOiAoY29uc3QgY2hhciAqKXR5cGVOYW1lOwotICh2b2lkKXNo YWxsb3dMb2FkT2JqZWN0OiBvYmo7Ci0gKHZvaWQpc2hhbGxvd1N0b3JlT2JqZWN0OiBvYmo7Ci0g KHZvaWQpbmFtZVJlY29yZDogKHVuc2lnbmVkKXJlY29yZE51bWJlciBuYW1lOiAoY29uc3QgY2hh ciAqKXJlY29yZE5hbWU7Ci0gKHZvaWQpbnVtYmVyUmVjb3JkOiAodW5zaWduZWQpcmVjb3JkTnVt YmVyOwotICh2b2lkKXNlbGVjdFJlY29yZDogKHVuc2lnbmVkKXJlY29yZE51bWJlcjsKCi0gKGNv bnN0IGNoYXIgKiopcmVhZFJvd05hbWVzOwotICh2b2lkKXdyaXRlUm93TmFtZXM7Ci0gKHZvaWQp d3JpdGVMZXZlbHM7CgotICh2b2lkKXN0b3JlQXR0cmlidXRlOiAoY29uc3QgY2hhciAqKWF0dHJp YnV0ZU5hbWUgdmFsdWU6IChjb25zdCBjaGFyICopdmFsdWVTdHJpbmc7Ci0gKHZvaWQpaXRlcmF0 ZUF0dHJpYnV0ZXM6IChpbnQgKCopIChjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVl KSlpdGVyYXRlRnVuYzsKLSAoY29uc3QgY2hhciAqKWdldEF0dHJpYnV0ZTogKGNvbnN0IGNoYXIg KilhdHRyaWJ1dGVOYW1lOwotICh2b2lkKWZsdXNoOwpAZW5kCgpAcHJvdG9jb2wgSERGNUNvbXBv dW5kVHlwZSA8Q3JlYXRlLCBEcm9wLCBDUkVBVEFCTEU+CgoKLSBfSV9DcmVhdGluZzsKLSBzZXRQ cm90b3R5cGU6IHByb3RvdHlwZTsKLSBfSV9Vc2luZzsKLSBnZXRQcm90b3R5cGU7CkBlbmQKCnR5 cGVkZWYgdm9pZCAqSk9CSkVDVDsKdHlwZWRlZiBjb25zdCB2b2lkICpDT01PQkpFQ1Q7CgoKCgoK CgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAg ICAgICAgICAgUGFnZSAgIDU0CgoKQHByb3RvY29sIEZBcmd1bWVudHMgPENyZWF0ZSwgRHJvcCwg Q1JFQVRBQkxFPgoKCi0gX0lfQ3JlYXRpbmc7Ci0gc2V0TGFuZ3VhZ2U6IChpZCA8U3ltYm9sPils YW5ndWFnZVR5cGU7CgoKLSBzZXRTZWxlY3RvcjogKFNFTClhU2VsOwotIHNldEphdmFTaWduYXR1 cmU6IChjb25zdCBjaGFyICopamF2YVNpZ25hdHVyZTsKKyBjcmVhdGU6IChpZCA8Wm9uZT4pYVpv bmUgc2V0U2VsZWN0b3I6IChTRUwpYVNlbDsKLSBhZGRBcmd1bWVudDogKHR5cGVzX3QgKil2YWx1 ZSBvZlR5cGU6IChmY2FsbF90eXBlX3QpdHlwZTsKLSBhZGRBcmd1bWVudDogKHZvaWQgKil2YWx1 ZSBvZk9iakNUeXBlOiAoY2hhcil0eXBlOwotIGFkZENoYXI6IChjaGFyKXZhbHVlOwotIGFkZEJv b2xlYW46IChCT09MKXZhbHVlOwotIGFkZFVuc2lnbmVkQ2hhcjogKHVuc2lnbmVkIGNoYXIpdmFs dWU7Ci0gYWRkU2hvcnQ6IChzaG9ydCl2YWx1ZTsKLSBhZGRVbnNpZ25lZFNob3J0OiAodW5zaWdu ZWQgc2hvcnQpdmFsdWU7Ci0gYWRkSW50OiAoaW50KXZhbHVlOwotIGFkZFVuc2lnbmVkOiAodW5z aWduZWQpdmFsdWU7Ci0gYWRkTG9uZzogKGxvbmcpdmFsdWU7Ci0gYWRkVW5zaWduZWRMb25nOiAo dW5zaWduZWQgbG9uZyl2YWx1ZTsKLSBhZGRMb25nTG9uZzogKGxvbmcgbG9uZyl2YWx1ZTsKLSBh ZGRVbnNpZ25lZExvbmdMb25nOiAodW5zaWduZWQgbG9uZyBsb25nKXZhbHVlOwotIGFkZEZsb2F0 OiAoZmxvYXQpdmFsdWU7Ci0gYWRkRG91YmxlOiAoZG91YmxlKXZhbHVlOwotIGFkZExvbmdEb3Vi bGU6IChsb25nIGRvdWJsZSl2YWx1ZTsKLSBhZGRTdHJpbmc6IChjb25zdCBjaGFyICopdmFsdWU7 Ci0gYWRkT2JqZWN0OiBvYmo7Ci0gYWRkU2VsZWN0b3I6IChTRUwpYVNlbDsKLSBhZGRKYXZhT2Jq ZWN0OiAoSk9CSkVDVClvYmo7Ci0gc2V0T2JqQ1JldHVyblR5cGU6IChjaGFyKXR5cGU7Ci0gc2V0 UmV0dXJuVHlwZTogKGZjYWxsX3R5cGVfdClyZXRUeXBlOwotIHNldEJvb2xlYW5SZXR1cm5UeXBl OwotIF9JX1VzaW5nOwotICh2YWxfdClnZXRSZXRWYWw7Ci0gKGlkIDxTeW1ib2w+KWdldExhbmd1 YWdlOwotICh2b2lkICopZ2V0UmVzdWx0OwpAZW5kCgp0eXBlZGVmIGVudW0gY2FsbFR5cGVzIHsg Y2NhbGwsIENPTWNhbGwsIEpTY2FsbCwgamF2YWNhbGwsIGphdmFzdGF0aWNjYWxsLCBvYmpjY2Fs bCB9IGNhbGxfdDsKCkBwcm90b2NvbCBGQ2FsbCA8Q3JlYXRlLCBEcm9wLCBDUkVBVEFCTEU+CgoK LSBfSV9DcmVhdGluZzsKKyBjcmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUgdGFyZ2V0OiBvYmoKICAg ICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAoU0VMKXNlbAogICAgICAgICAgICAgICAg ICAgICAgICBhcmd1bWVudHM6IChpZCA8RkFyZ3VtZW50cz4pZmE7CisgY3JlYXRlOiAoaWQgPFpv bmU+KWFab25lIHRhcmdldDogb2JqCiAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kTmFtZTog KGNvbnN0IGNoYXIgKiltZXRob2ROYW1lCiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50 czogKGlkIDxGQXJndW1lbnRzPilmYTsKLSBzZXRBcmd1bWVudHM6IGFyZ3M7Ci0gc2V0RnVuY3Rp b25Qb2ludGVyOiAoZnVuY190KWZuOwotIHNldE1ldGhvZEZyb21TZWxlY3RvcjogKFNFTCltZXRo b2QgaW5PYmplY3Q6IG9iamVjdDsKLSBzZXRNZXRob2RGcm9tTmFtZTogKGNvbnN0IGNoYXIgKilt ZXRob2ROYW1lIGluT2JqZWN0OiBvYmplY3Q7Ci0gc2V0SmF2YU1ldGhvZEZyb21OYW1lOiAoY29u c3QgY2hhciAqKW1ldGhvZE5hbWUgaW5PYmplY3Q6IChKT0JKRUNUKWpPYmo7CgoKCgoKCgoyMDAx LTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAg ICBQYWdlICAgNTUKCgotIHNldEphdmFNZXRob2RGcm9tTmFtZTogKGNvbnN0IGNoYXIgKiltZXRo b2ROYW1lIGluQ2xhc3M6IChjb25zdCBjaGFyICopY2xhc3NOYW1lOwotIF9JX1VzaW5nOwotIChj YWxsX3QpZ2V0Q2FsbFR5cGU7Ci0gZ2V0QXJndW1lbnRzOwotICh2b2lkKXBlcmZvcm1DYWxsOwot ICh2b2lkICopZ2V0UmVzdWx0OwotIChyZXR2YWxfdClnZXRSZXRWYWw6IChyZXR2YWxfdClyZXRW YWwgYnVmOiAodHlwZXNfdCAqKWJ1ZjsKLSAoZnVuY190KWdldEZ1bmN0aW9uUG9pbnRlcjsKZXh0 ZXJuIHZvaWQgZGVmb2JqX2luaXRfamF2YV9jYWxsX3RhYmxlcyAodm9pZCAqam5pRW52KTsKZXh0 ZXJuIHZvaWQgdXBkYXRlVGFyZ2V0IChpZCBjYWxsLCBpZCB0YXJnZXQpOwpAZW5kCgpAcHJvdG9j b2wgU2VyaWFsaXphdGlvbgoKCgotIF9JX0NyZWF0aW5nOwoKCi0gbGlzcEluQ3JlYXRlOiBleHBy OwoKCi0gaGRmNUluQ3JlYXRlOiAoaWQgPEhERjU+KWhkZjVPYmo7CgoKCmV4dGVybiBpZCBsaXNw SW4gKGlkIDxab25lPiBhWm9uZSwgaWQgZXhwcik7CgoKZXh0ZXJuIGlkIGhkZjVJbiAoaWQgPFpv bmU+IGFab25lLCBpZCA8SERGNT4gaGRmNU9iaik7CgotIF9JX1NldHRpbmc7CgoKLSBsaXNwSW46 IGV4cHI7CgoKLSBoZGY1SW46IChpZCA8SERGNT4paGRmNU9iajsKCi0gX0lfVXNpbmc7CgotICh2 b2lkKWxpc3BPdXRTaGFsbG93OiBzdHJlYW07CgoKLSAodm9pZClsaXNwT3V0RGVlcDogc3RyZWFt OwoKCgotICh2b2lkKWxpc3BPdXRWYXJzOiBzdHJlYW0gZGVlcDogKEJPT0wpZGVlcEZsYWc7CgoK LSAodm9pZCloZGY1T3V0U2hhbGxvdzogKGlkIDxIREY1PiloZGY1b2JqOwoKCi0gKHZvaWQpaGRm NU91dERlZXA6IChpZCA8SERGNT4paGRmNW9iajsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAg ICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAgNTYKCgot ICh2b2lkKXVwZGF0ZUFyY2hpdmVyOiBhcmNoaXZlcjsKCgpleHRlcm4gQk9PTCBsaXNwSW5Cb29s ZWFuIChpZCBpbmRleCk7CgoKZXh0ZXJuIGludCBsaXNwSW5JbnRlZ2VyIChpZCBpbmRleCk7CgoK ZXh0ZXJuIGNvbnN0IGNoYXIgKmxpc3BJblN0cmluZyAoaWQgaW5kZXgpOwoKCmV4dGVybiBpZCBs aXNwSW5LZXl3b3JkIChpZCBpbmRleCk7CgpAZW5kCgoKZXh0ZXJuIGlkIDxBcmd1bWVudHM+IGFy Z3VtZW50czsKCgpleHRlcm4gaWQgPEhERjVBcmNoaXZlcj4gaGRmNUFyY2hpdmVyOwoKCmV4dGVy biBpZCA8TGlzcEFyY2hpdmVyPiBsaXNwQXJjaGl2ZXI7CgoKZXh0ZXJuIGlkIDxIREY1QXJjaGl2 ZXI+IGhkZjVBcHBBcmNoaXZlcjsKCgpleHRlcm4gaWQgPExpc3BBcmNoaXZlcj4gbGlzcEFwcEFy Y2hpdmVyOwoKCmV4dGVybiBpZCA8U3ltYm9sPiB0X0J5dGVBcnJheSwgdF9MZWFmT2JqZWN0LCB0 X1BvcHVsYXRpb25PYmplY3Q7CgoKZXh0ZXJuIGlkIDxTeW1ib2w+IExhbmd1YWdlQ09NLCBMYW5n dWFnZUpTLCBMYW5ndWFnZUphdmEsIExhbmd1YWdlT2JqYzsKCgoKCgoKZXh0ZXJuIHZvaWQgX29i al9mb3JtYXRJRFN0cmluZyAoY2hhciAqYnVmZmVyLCBpZCBhbk9iamVjdCk7CgoKCmV4dGVybiBD bGFzcyBvYmpjX2dldF9jbGFzcyAoY29uc3QgY2hhciAqbmFtZSk7CgoKZXh0ZXJuIGlkIGRlZm9i al9sb29rdXBfdHlwZSAoY29uc3QgY2hhciAqbmFtZSk7CgoKCgojIDEgIi91c3IvbG9jYWwvc3dh cm0vaW5jbHVkZS9kZWZvYmovdHlwZXMuaCIgMQpleHRlcm4gdm9pZCAqX2RlZm9ial9bXTsKCgoK CgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAg ICAgICAgICAgIFBhZ2UgICA1NwoKCgpleHRlcm4gaWQgR2V0TmFtZTsKZXh0ZXJuIGlkIERlZmlu ZWRPYmplY3Q7CmV4dGVybiBpZCBDdXN0b21pemU7CmV4dGVybiBpZCBDcmVhdGU7CmV4dGVybiBp ZCBEcm9wOwpleHRlcm4gaWQgWm9uZTsKZXh0ZXJuIGlkIERlZmluZWRDbGFzczsKZXh0ZXJuIGlk IENyZWF0ZWRDbGFzczsKZXh0ZXJuIGlkIEJlaGF2aW9yUGhhc2U7CmV4dGVybiBpZCBDb3B5Owpl eHRlcm4gaWQgR2V0T3duZXI7CmV4dGVybiBpZCBTZXRJbml0aWFsVmFsdWU7CmV4dGVybiBpZCBT eW1ib2w7CmV4dGVybiBpZCBFdmVudFR5cGU7CmV4dGVybiBpZCBXYXJuaW5nOwpleHRlcm4gaWQg RXJyb3I7CmV4dGVybiBpZCBBcmd1bWVudHM7CmV4dGVybiBpZCBBcmNoaXZlcjsKZXh0ZXJuIGlk IExpc3BBcmNoaXZlcjsKZXh0ZXJuIGlkIEhERjVBcmNoaXZlcjsKZXh0ZXJuIGlkIEhERjU7CmV4 dGVybiBpZCBIREY1Q29tcG91bmRUeXBlOwpleHRlcm4gaWQgRkFyZ3VtZW50czsKZXh0ZXJuIGlk IEZDYWxsOwpleHRlcm4gaWQgU2VyaWFsaXphdGlvbjsKIyAxMjU2ICIvdXNyL2xvY2FsL3N3YXJt L2luY2x1ZGUvZGVmb2JqLmgiIDIKCmV4dGVybiB2b2lkIGluaXREZWZvYmogKGlkIDxBcmd1bWVu dHM+IGFyZ3VtZW50cyk7CgoKZXh0ZXJuIHZvaWQgX29ial9pbml0TW9kdWxlICh2b2lkICptb2R1 bGUpOwoKCgoKCmV4dGVybiBpZCBfb2JqX2dsb2JhbFpvbmU7CgoKZXh0ZXJuIGlkIF9vYmpfc2Ny YXRjaFpvbmU7CiMgMTI3OSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgpleHRl cm4gQk9PTCBfb2JqX2RlYnVnOwoKCgpleHRlcm4gRklMRSAqX29ial94ZXJyb3I7CgpleHRlcm4g RklMRSAqX29ial94ZGVidWc7CgoKZXh0ZXJuIHZvaWQgeHNldG5hbWUgKGlkIGFuT2JqZWN0LCBj b25zdCBjaGFyICpuYW1lKTsKCgpleHRlcm4gdm9pZCB4cHJpbnQgKGlkIGFuT2JqZWN0KTsKCgoK CgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAg ICAgICAgICAgICBQYWdlICAgNTgKCgoKZXh0ZXJuIHZvaWQgeHByaW50aWQgKGlkIGFuT2JqZWN0 KTsKCgpleHRlcm4gdm9pZCB4ZnByaW50IChpZCBhbk9iamVjdCk7CgoKZXh0ZXJuIHZvaWQgeGZw cmludGlkIChpZCBhbk9iamVjdCk7CgoKZXh0ZXJuIHZvaWQgeGV4ZWMgKGlkIGFuT2JqZWN0LCBj b25zdCBjaGFyICpuYW1lKTsKCgpleHRlcm4gdm9pZCB4ZmV4ZWMgKGlkIGFuT2JqZWN0LCBjb25z dCBjaGFyICpuYW1lKTsKCgpleHRlcm4gaWQgbmFtZVRvT2JqZWN0IChjb25zdCBjaGFyICpuYW1l KTsKIyAxMzI1ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCmV4dGVybiBjaGFy ICp6c3RyZHVwIChpZCA8Wm9uZT4gYVpvbmUsIGNvbnN0IGNoYXIgKnN0cik7CiMgMjEgIi91c3Iv bG9jYWwvc3dhcm0vaW5jbHVkZS9vYmplY3RiYXNlLmgiIDIKIyAxICIvdXNyL2xvY2FsL3N3YXJt L2luY2x1ZGUvYWN0aXZpdHkuaCIgMQojIDI2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0 aXZpdHkuaCIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIgMQoj IDEyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKIyAxICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiIDEKIyAxMyAiL3Vzci9sb2NhbC9zd2FybS9pbmNs dWRlL2NvbGxlY3Rpb25zLmgiIDIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZXh0ZXJu dmFyLmgiIDEKIyAxNCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiIDIK IyAyNCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCkBwcm90b2NvbCBP ZmZzZXRzCiMgNDIgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgotIF9J X1VzaW5nOwoKLSBhdE9mZnNldDogKHVuc2lnbmVkKW9mZnNldDsKCgoKLSBhdE9mZnNldDogKHVu c2lnbmVkKW9mZnNldCBwdXQ6IGFuT2JqZWN0OwoKCi0gZ2V0Rmlyc3Q7CgoKLSBnZXRMYXN0OwpA ZW5kCgpAcHJvdG9jb2wgRm9yRWFjaAojIDc4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29s bGVjdGlvbnMuaCIKLSBfSV9Vc2luZzsKLSAodm9pZClmb3JFYWNoOiAoU0VMKWFTZWxlY3RvcjsK LSAodm9pZClmb3JFYWNoOiAoU0VMKWFTZWxlY3RvciA6IGFyZzE7Ci0gKHZvaWQpZm9yRWFjaDog KFNFTClhU2VsZWN0b3IgOiBhcmcxIDogYXJnMjsKLSAodm9pZClmb3JFYWNoOiAoU0VMKWFTZWxl Y3RvciA6IGFyZzEgOiBhcmcyIDogYXJnMzsKCi0gKHZvaWQpZGVzY3JpYmVGb3JFYWNoOiBvdXRw dXRDaGFyU3RyZWFtOwotICh2b2lkKWRlc2NyaWJlRm9yRWFjaElEOiBvdXRwdXRDaGFyU3RyZWFt OwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkg ICAgICAgICAgICAgICAgUGFnZSAgIDU5CgoKCkBlbmQKCkBwcm90b2NvbCBGb3JFYWNoS2V5CgoK CgoKLSBfSV9Vc2luZzsKLSAodm9pZClmb3JFYWNoS2V5OiAoU0VMKWFTZWxlY3RvcjsKLSAodm9p ZClmb3JFYWNoS2V5OiAoU0VMKWFTZWxlY3RvciA6IGFyZzE7Ci0gKHZvaWQpZm9yRWFjaEtleTog KFNFTClhU2VsZWN0b3IgOiBhcmcxIDogYXJnMjsKLSAodm9pZClmb3JFYWNoS2V5OiAoU0VMKWFT ZWxlY3RvciA6IGFyZzEgOiBhcmcyIDogYXJnMzsKQGVuZAoKQHByb3RvY29sIEluZGV4IDxEZWZp bmVkT2JqZWN0LCBEcm9wLCBSRVRVUk5BQkxFPgojIDE1NyAiL3Vzci9sb2NhbC9zd2FybS9pbmNs dWRlL2NvbGxlY3Rpb25zLmgiCi0gX0lfVXNpbmc7CgoKLSBnZXRDb2xsZWN0aW9uOwoKCgoKCgot IG5leHQ7CgoKCgotIHByZXY7CgoKCgotIGZpbmROZXh0OiBhbk9iamVjdDsKCgoKCi0gZmluZFBy ZXY6IGFuT2JqZWN0OwojIDE5MSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25z LmgiCi0gZ2V0OwoKCgoKLSBwdXQ6IGFuT2JqZWN0OwojIDIwOSAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL2NvbGxlY3Rpb25zLmgiCi0gcmVtb3ZlOwojIDI1MyAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL2NvbGxlY3Rpb25zLmgiCi0gKGlkIDxTeW1ib2w+KWdldExvYzsKIyAyNjcgIi91c3Iv bG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgoKCgoKCgoKMjAwMS0wOC0yNCAwMToy MSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgIDYw CgoKLSAodm9pZClzZXRMb2M6IChpZCA8U3ltYm9sPilsb2NTeW1ib2w7CiMgMjg4ICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSAoaW50KWdldE9mZnNldDsKCgoKCgoK Ci0gc2V0T2Zmc2V0OiAodW5zaWduZWQpb2Zmc2V0OwojIDMwOCAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL2NvbGxlY3Rpb25zLmgiCi0gKGludCljb21wYXJlOiBhbkluZGV4OwojIDMyMSAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCmV4dGVybiBpZCA8U3ltYm9sPiBT dGFydCwgRW5kLCBCZXR3ZWVuLCBSZW1vdmVkLCBNZW1iZXI7CgoKCgoKCgpleHRlcm4gaWQgPEVy cm9yPiBPZmZzZXRPdXRPZlJhbmdlLCBOb01lbWJlcnMsCiAgQWxyZWFkeUF0RW5kLCBBbHJlYWR5 QXRTdGFydCwgSW52YWxpZEluZGV4TG9jLCBJbnZhbGlkTG9jU3ltYm9sOwoKQGVuZAoKQHByb3Rv Y29sIFBlcm11dGVkSW5kZXggPEluZGV4LCBSRVRVUk5BQkxFPgoKCgoKCi0gX0lfQ3JlYXRpbmc7 Ci0gc2V0Q29sbGVjdGlvbjogYUNvbGxlY3Rpb247Ci0gc2V0VW5pZm9ybVJhbmRvbTogcm5kOwot IF9JX1VzaW5nOwotIHJlc2h1ZmZsZTsKQGVuZDsKCkBwcm90b2NvbCBDb2xsZWN0aW9uIDxDcmVh dGUsIFNldEluaXRpYWxWYWx1ZSwgQ29weSwgRHJvcCwgT2Zmc2V0cywgRm9yRWFjaD4KIyA0MDcg Ii91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgotIF9JX0NyZWF0aW5nOwoK CgoKCgoKLSAodm9pZClzZXRSZXBsYWNlT25seTogKEJPT0wpcmVwbGFjZU9ubHk7CgotICh2b2lk KXNldEluZGV4RnJvbU1lbWJlckxvYzogKGludClieXRlT2Zmc2V0OwoKLSBfSV9Vc2luZzsKCgoK CgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAg ICAgICAgICAgICBQYWdlICAgNjEKCgoKLSBjb3B5OiAoaWQgPFpvbmU+KWFab25lOwoKCi0gKEJP T0wpZ2V0UmVwbGFjZU9ubHk7CgoKCgoKLSAodW5zaWduZWQpZ2V0Q291bnQ7CiMgNDQwICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSAoQk9PTCljb250YWluczogYU1l bWJlcjsKCgoKCgoKLSByZW1vdmU6IGFNZW1iZXI7CiMgNDU2ICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvY29sbGVjdGlvbnMuaCIKLSAodm9pZClyZW1vdmVBbGw7CgoKLSAodm9pZClkZWxldGVB bGw7CgoKLSAoQk9PTClhbGxTYW1lQ2xhc3M7CgoKCgotIChpZCA8SW5kZXg+KWJlZ2luOiAoaWQg PFpvbmU+KWFab25lOwoKLSAoaWQgPFBlcm11dGVkSW5kZXg+KWJlZ2luUGVybXV0ZWQ6IChpZCA8 Wm9uZT4pYVpvbmU7CkBlbmQKCgoKQHByb3RvY29sIERlZmF1bHRNZW1iZXIKIyA0ODggIi91c3Iv bG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgotIF9JX1NldHRpbmc7Ci0gKHZvaWQp c2V0RGVmYXVsdE1lbWJlcjogbWVtYmVyVmFsdWU7CgotIF9JX1VzaW5nOwotIGdldERlZmF1bHRN ZW1iZXI7CkBlbmQKCkBwcm90b2NvbCBNZW1iZXJCbG9jawojIDUzNyAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCi0gX0lfQ3JlYXRpbmc7CisgY3JlYXRlOiAoaWQgPFpv bmU+KWFab25lIHNldE1lbWJlckJsb2NrOiAoaWQgKiltZW1iZXJzIHNldENvdW50OiAodW5zaWdu ZWQpY291bnQ7CgotIF9JX1NldHRpbmc7Ci0gKHZvaWQpc2V0TWVtYmVyQmxvY2s6IChpZCAqKW1l bWJlcnMgc2V0Q291bnQ6ICh1bnNpZ25lZCljb3VudDsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAgNjIK CgotIF9JX1VzaW5nOwotICh2b2lkICopZ2V0TWVtYmVyQmxvY2s7CkBlbmQKCkBwcm90b2NvbCBB cnJheSA8Q29sbGVjdGlvbiwgRGVmYXVsdE1lbWJlciwgTWVtYmVyQmxvY2ssIENSRUFUQUJMRT4K IyA1OTggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgotIF9JX0NyZWF0 aW5nOworIGNyZWF0ZTogKGlkIDxab25lPilhWm9uZSBzZXRDb3VudDogKHVuc2lnbmVkKWNvdW50 OwoKLSBfSV9TZXR0aW5nOwoKCgoKCgoKLSBzZXRDb3VudDogKHVuc2lnbmVkKWNvdW50OwpAZW5k CgpAcHJvdG9jb2wgTGlzdEluZGV4IDxJbmRleCwgUkVUVVJOQUJMRT4KIyA2NDAgIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgotIF9JX1VzaW5nOwoKLSAodm9pZClhZGRB ZnRlcjogYW5PYmplY3Q7CgoKLSAodm9pZClhZGRCZWZvcmU6IGFuT2JqZWN0OwpAZW5kCgoKQHBy b3RvY29sIExpc3QgPENvbGxlY3Rpb24sIENSRUFUQUJMRT4KIyA2NjkgIi91c3IvbG9jYWwvc3dh cm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgotIF9JX1VzaW5nOwoKLSAodm9pZClhZGRGaXJzdDog YW5PYmplY3Q7CgoKLSAodm9pZClhZGRMYXN0OiBhbk9iamVjdDsKCgotIHJlbW92ZUZpcnN0OwoK Ci0gcmVtb3ZlTGFzdDsKCgotIChpZCA8TGlzdEluZGV4PilsaXN0QmVnaW46IChpZCA8Wm9uZT4p YVpvbmU7CkBlbmQKCgoKZXh0ZXJuIGludCBjb21wYXJlSURzIChpZCwgaWQpOwoKCmV4dGVybiBp bnQgY29tcGFyZUludGVnZXJzIChpZCwgaWQpOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAg ICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgIDYzCgoKCgpl eHRlcm4gaW50IGNvbXBhcmVVbnNpZ25lZEludGVnZXJzIChpZCwgaWQpOwoKCmV4dGVybiBpbnQg Y29tcGFyZUNTdHJpbmdzIChpZCwgaWQpOwoKQHByb3RvY29sIENvbXBhcmVGdW5jdGlvbgojIDcy MSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCnR5cGVkZWYgaW50ICgq Y29tcGFyZV90KSAoaWQsIGlkKTsKCi0gX0lfQ3JlYXRpbmc7Ci0gc2V0Q29tcGFyZUZ1bmN0aW9u OiAoY29tcGFyZV90KWFGdW5jdGlvbjsKLSBzZXRDb21wYXJlQ1N0cmluZ3M7Ci0gc2V0Q29tcGFy ZUlEczsKLSBzZXRDb21wYXJlSW50ZWdlcnM7Ci0gc2V0Q29tcGFyZVVuc2lnbmVkSW50ZWdlcnM7 Ci0gX0lfVXNpbmc7Ci0gKGNvbXBhcmVfdClnZXRDb21wYXJlRnVuY3Rpb247CkBlbmQKCkBwcm90 b2NvbCBLZXllZENvbGxlY3Rpb24gPENvbGxlY3Rpb24sIEZvckVhY2hLZXk+CiMgNzUwICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSBfSV9DcmVhdGluZzsKCi0gX0lf VXNpbmc7Ci0gY3JlYXRlSW5kZXg6IChpZCA8Wm9uZT4pYVpvbmUgZnJvbU1lbWJlcjogYW5PYmpl Y3Q7CgoKCgoKCi0gYXQ6IGFLZXk7CgoKCgoKCi0gcmVtb3ZlS2V5OiBhS2V5OwoKCgotIChCT09M KWNvbnRhaW5zS2V5OiBhS2V5OwpAZW5kCgpAcHJvdG9jb2wgS2V5ZWRDb2xsZWN0aW9uSW5kZXgg PEluZGV4PgojIDc4MyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCkBl bmQKCgpAcHJvdG9jb2wgTWVtYmVyU2xvdAojIDgxNCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRl L2NvbGxlY3Rpb25zLmgiCnR5cGVkZWYgc3RydWN0IG1lbWJlckRhdGEgeyB2b2lkICptZW1iZXJE YXRhWzJdOyB9IG1lbWJlcl90OwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAg ICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgICA2NAoKCgoKCgoKCnR5cGVk ZWYgc3RydWN0IHsgdm9pZCAqbWVtYmVyRGF0YVsyXTsgaWQgb3duZXI7IH0gZHVwbWVtYmVyX3Q7 CkBlbmQKCkBwcm90b2NvbCBfU2V0CgoKLSBfSV9Vc2luZzsKCi0gKEJPT0wpYWRkOiBhbk9iamVj dDsKIyA4MzkgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgpAZW5kCgpA cHJvdG9jb2wgU2V0IDxfU2V0LCBLZXllZENvbGxlY3Rpb24sIENSRUFUQUJMRT4KIyA4NTcgIi91 c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgotIF9JX1VzaW5nOwoKCgoKCi0g cmVwbGFjZTogYW5PYmplY3Q7CkBlbmQKCkBwcm90b2NvbCBPcmRlcmVkU2V0IDxfU2V0LCBMaXN0 LCBDUkVBVEFCTEU+CiMgODg2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMu aCIKQGVuZAoKQHByb3RvY29sIE1hcEluZGV4IDxLZXllZENvbGxlY3Rpb25JbmRleCwgUkVUVVJO QUJMRT4KCgoKCi0gX0lfVXNpbmc7CgoKCgotIHNldEtleTogYUtleTsKCgoKCi0gZ2V0S2V5OwoK CgoKCgotICh1bnNpZ25lZCBsb25nKWdldEtleVZhbHVlOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToy MSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgIDY1 CgoKCgotIG5leHQ6IChpZCAqKWtleTsKCgotIHByZXY6IChpZCAqKWtleTsKCgotIGdldDogKGlk ICopa2V5OwpAZW5kCgoKQHByb3RvY29sIE1hcCA8S2V5ZWRDb2xsZWN0aW9uLCBDb21wYXJlRnVu Y3Rpb24sIENSRUFUQUJMRT4KIyA5MzggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0 aW9ucy5oIgotIF9JX1VzaW5nOwoKCgoKLSAoQk9PTClhdDogYUtleSBpbnNlcnQ6IGFuT2JqZWN0 OwoKCgoKLSBhdDogYUtleSByZXBsYWNlOiBhbk9iamVjdDsKCgotIChpZCA8TWFwSW5kZXg+KW1h cEJlZ2luOiAoaWQgPFpvbmU+KWFab25lOwpAZW5kCgoKQHByb3RvY29sIE91dHB1dFN0cmVhbSA8 Q3JlYXRlLCBEcm9wLCBDUkVBVEFCTEU+CiMgOTY0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv Y29sbGVjdGlvbnMuaCIKLSBfSV9DcmVhdGluZzsKKyBjcmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUg c2V0RmlsZVN0cmVhbTogKEZJTEUgKilmaWxlU3RyZWFtOwotIHNldEZpbGVTdHJlYW06IChGSUxF ICopZmlsZVN0cmVhbTsKLSBzZXRFeHByRmxhZzogKEJPT0wpZXhwckZsYWc7Ci0gX0lfVXNpbmc7 Ci0gKEZJTEUgKilnZXRGaWxlU3RyZWFtOwotIGdldEV4cHI7CgoKLSAodm9pZCljYXRDOiAoY29u c3QgY2hhciAqKWNzdHJpbmc7CgoKLSAodm9pZCljYXRCb29sZWFuOiAoQk9PTClib29sOwoKCi0g KHZvaWQpY2F0Q2hhcjogKGNoYXIpY2g7CgoKLSAodm9pZCljYXRGbG9hdDogKGZsb2F0KWZsdDsK CgotICh2b2lkKWNhdERvdWJsZTogKGRvdWJsZSlkYmw7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToy MSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgIDY2 CgoKCi0gKHZvaWQpY2F0TG9uZ0RvdWJsZTogKGxvbmcgZG91YmxlKWRibDsKCgotICh2b2lkKWNh dEludDogKGludClpOwoKCi0gKHZvaWQpY2F0VW5zaWduZWQ6ICh1bnNpZ25lZCl1bjsKCi0gKHZv aWQpY2F0U2hvcnQ6IChzaG9ydClzaHQ7Ci0gKHZvaWQpY2F0VW5zaWduZWRTaG9ydDogKHVuc2ln bmVkIHNob3J0KXVzaHQ7Ci0gKHZvaWQpY2F0TG9uZzogKGxvbmcpbG5nOwotICh2b2lkKWNhdFVu c2lnbmVkTG9uZzogKHVuc2lnbmVkIGxvbmcpdWxuZzsKLSAodm9pZCljYXRMb25nTG9uZzogKGxv bmcgbG9uZylsbmdsbmc7Ci0gKHZvaWQpY2F0VW5zaWduZWRMb25nTG9uZzogKHVuc2lnbmVkIGxv bmcgbG9uZyl1bG5nbG5nOwotICh2b2lkKWNhdFBvaW50ZXI6IChjb25zdCB2b2lkICopcHRyOwot ICh2b2lkKWNhdExpdGVyYWw6IChjb25zdCBjaGFyICopc3RyOwotICh2b2lkKWNhdFN0YXJ0RXhw cjsKLSAodm9pZCljYXRFbmRFeHByOwotICh2b2lkKWNhdEtleXdvcmQ6IChjb25zdCBjaGFyICop a2V5d29yZDsKLSAodm9pZCljYXRTeW1ib2w6IChjb25zdCBjaGFyICopc3ltYm9sOwotICh2b2lk KWNhdFN0cmluZzogKGNvbnN0IGNoYXIgKilzdHI7Ci0gKHZvaWQpY2F0U2VwYXJhdG9yOwotICh2 b2lkKWNhdEFycmF5UmFuazogKHVuc2lnbmVkKXJhbms7Ci0gKHZvaWQpY2F0RW5kQXJyYXk7Ci0g KHZvaWQpY2F0VHlwZTogKGNvbnN0IGNoYXIgKil0eXBlOwotICh2b2lkKWNhdENsYXNzOiAoQ2xh c3MpY2xhc3M7Ci0gKHZvaWQpY2F0U3RhcnRGdW5jdGlvbjogKGNvbnN0IGNoYXIgKilmdW5jdGlv bk5hbWU7Ci0gKHZvaWQpY2F0RW5kRnVuY3Rpb247Ci0gKHZvaWQpY2F0U3RhcnRDb25zOwotICh2 b2lkKWNhdEVuZENvbnM7Ci0gKHZvaWQpY2F0U3RhcnRMaXN0OwotICh2b2lkKWNhdEVuZExpc3Q7 Ci0gKHZvaWQpY2F0U3RhcnRRdW90ZWRMaXN0OwotICh2b2lkKWNhdEVuZFF1b3RlZExpc3Q7Ci0g KHZvaWQpY2F0U3RhcnRQYXJzZTsKLSAodm9pZCljYXRFbmRQYXJzZTsKLSAodm9pZCljYXRTdGFy dE1ha2VJbnN0YW5jZTogKGNvbnN0IGNoYXIgKil0eXBlTmFtZTsKLSAodm9pZCljYXRFbmRNYWtl SW5zdGFuY2U7Ci0gKHZvaWQpY2F0U3RhcnRNYWtlQ2xhc3M6IChjb25zdCBjaGFyICopY2xhc3NO YW1lOwotICh2b2lkKWNhdEVuZE1ha2VDbGFzczsKLSAodm9pZCljYXRVbnNpZ25lZFBhaXI6ICh1 bnNpZ25lZClhIDogKHVuc2lnbmVkKWI7Ci0gKHZvaWQpY2F0TmlsOwpAZW5kCgpAcHJvdG9jb2wg SW5wdXRTdHJlYW0gPENyZWF0ZSwgRHJvcCwgQ1JFQVRBQkxFPgoKCgoKLSBfSV9DcmVhdGluZzsK KyBjcmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUgc2V0RmlsZVN0cmVhbTogKEZJTEUgKilmaWxlOwor IGNyZWF0ZTogKGlkIDxab25lPilhWm9uZSBzZXRFeHByOiBleHByOwotIHNldEV4cHI6IGV4cHI7 Ci0gc2V0RmlsZVN0cmVhbTogKEZJTEUgKilmaWxlU3RyZWFtOwotIF9JX1VzaW5nOwoKCgoKCgoK MjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAg ICAgICAgUGFnZSAgIDY3CgoKLSAoRklMRSAqKWdldEZpbGVTdHJlYW07Ci0gZ2V0RXhwcjsKQGVu ZAoKCmV4dGVybiBpZCA8U3ltYm9sPiBBcmNoaXZlckxpdGVyYWwsIEFyY2hpdmVyUXVvdGUsIEFy Y2hpdmVyRU9MLCBBcmNoaXZlckRvdDsKCkBwcm90b2NvbCBBcmNoaXZlcktleXdvcmQgPENyZWF0 ZSwgRHJvcCwgUkVUVVJOQUJMRT4KCgotIF9JX0NyZWF0aW5nOwotIHNldEtleXdvcmROYW1lOiAo Y29uc3QgY2hhciAqKW5hbWU7Ci0gX0lfVXNpbmc7Ci0gKGNvbnN0IGNoYXIgKilnZXRLZXl3b3Jk TmFtZTsKLSAodm9pZClsaXNwT3V0U2hhbGxvdzogKGlkIDxPdXRwdXRTdHJlYW0+KXN0cmVhbTsK LSAodm9pZClsaXNwT3V0RGVlcDogKGlkIDxPdXRwdXRTdHJlYW0+KXN0cmVhbTsKQGVuZAoKQHBy b3RvY29sIEFyY2hpdmVyQXJyYXkgPENyZWF0ZSwgRHJvcCwgUkVUVVJOQUJMRT4KCgotIF9JX0Ny ZWF0aW5nOwotIHNldEFycmF5OiBhcnJheTsKLSBfSV9Vc2luZzsKLSAodm9pZCAqKWdldERhdGE7 Ci0gKHVuc2lnbmVkKWdldFJhbms7Ci0gKHVuc2lnbmVkICopZ2V0RGltczsKLSAoc2l6ZV90KWdl dEVsZW1lbnRTaXplOwotICh1bnNpZ25lZClnZXRFbGVtZW50Q291bnQ7Ci0gKGZjYWxsX3R5cGVf dClnZXRBcnJheVR5cGU7Ci0gY29udmVydFRvVHlwZTogKGNoYXIpZGVzdFR5cGUgZGVzdDogKHZv aWQgKilwdHI7Ci0gKHZvaWQpbGlzcE91dFNoYWxsb3c6IChpZCA8T3V0cHV0U3RyZWFtPilzdHJl YW07Ci0gKHZvaWQpbGlzcE91dERlZXA6IChpZCA8T3V0cHV0U3RyZWFtPilzdHJlYW07Ci0gKHZv aWQpZHJvcDsKQGVuZAoKQHByb3RvY29sIEFyY2hpdmVyVmFsdWUgPENyZWF0ZSwgRHJvcCwgUkVU VVJOQUJMRT4KCgotIF9JX0NyZWF0aW5nOwotIHNldERvdWJsZTogKGRvdWJsZSl2YWw7Ci0gc2V0 TG9uZ0RvdWJsZTogKGxvbmcgZG91YmxlKXZhbDsKLSBzZXRGbG9hdDogKGZsb2F0KXZhbDsKLSBz ZXRMb25nTG9uZzogKGxvbmcgbG9uZyl2YWw7Ci0gc2V0Q2hhcjogKGNoYXIpdmFsOwotIHNldEJv b2xlYW46IChCT09MKXZhbDsKLSBzZXRDbGFzczogKENsYXNzKWNsYXNzOwotIHNldE5pbDsKLSBf SV9Vc2luZzsKLSAoZmNhbGxfdHlwZV90KWdldFZhbHVlVHlwZTsKLSAoZG91YmxlKWdldERvdWJs ZTsKLSAobG9uZyBkb3VibGUpZ2V0TG9uZ0RvdWJsZTsKLSAoZmxvYXQpZ2V0RmxvYXQ7Ci0gKGxv bmcgbG9uZylnZXRMb25nTG9uZzsKLSAoaW50KWdldEludGVnZXI7Ci0gKHVuc2lnbmVkKWdldFVu c2lnbmVkOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dh cm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgIDY4CgoKLSAoY2hhcilnZXRDaGFyOwotIChCT09M KWdldEJvb2xlYW47Ci0gZ2V0T2JqZWN0OwotIChDbGFzcylnZXRDbGFzczsKLSAodm9pZClsaXNw T3V0U2hhbGxvdzogKGlkIDxPdXRwdXRTdHJlYW0+KXN0cmVhbTsKLSAodm9pZClsaXNwT3V0RGVl cDogKGlkIDxPdXRwdXRTdHJlYW0+KXN0cmVhbTsKLSAodm9pZClkcm9wOwpAZW5kCgpAcHJvdG9j b2wgQXJjaGl2ZXJQYWlyIDxDcmVhdGUsIERyb3AsIFJFVFVSTkFCTEU+CgoKLSBfSV9DcmVhdGlu ZzsKLSBzZXRDYXI6IGNhcjsKLSBzZXRDZHI6IGNkcjsKLSBzZXRDb25zRm9ybWF0RmxhZzogKEJP T0wpdGhlQ29uc0Zvcm1hdEZsYWc7Ci0gX0lfVXNpbmc7Ci0gZ2V0Q2FyOwotIGdldENkcjsKLSAo Qk9PTClnZXRDb25zRm9ybWF0RmxhZzsKLSAodm9pZClsaXNwT3V0U2hhbGxvdzogKGlkIDxPdXRw dXRTdHJlYW0+KXN0cmVhbTsKLSAodm9pZClsaXNwT3V0RGVlcDogKGlkIDxPdXRwdXRTdHJlYW0+ KXN0cmVhbTsKQGVuZAoKQHByb3RvY29sIEFyY2hpdmVyTGlzdCA8TGlzdCwgUkVUVVJOQUJMRT4K CgotIF9JX0NyZWF0aW5nOwotIF9JX1VzaW5nOwotICh2b2lkKWxpc3BPdXRTaGFsbG93OiAoaWQg PE91dHB1dFN0cmVhbT4pc3RyZWFtOwotICh2b2lkKWxpc3BPdXREZWVwOiAoaWQgPE91dHB1dFN0 cmVhbT4pc3RyZWFtOwpAZW5kCgpAcHJvdG9jb2wgQXJjaGl2ZXJRdW90ZWQgPFJFVFVSTkFCTEU+ CgoKLSBfSV9DcmVhdGluZzsKLSBzZXRRdW90ZWRPYmplY3Q6IHZhbHVlOwotIF9JX1VzaW5nOwot IGdldFF1b3RlZE9iamVjdDsKLSAodm9pZClsaXNwT3V0RGVlcDogKGlkIDxPdXRwdXRTdHJlYW0+ KXN0cmVhbTsKQGVuZAoKCgpAcHJvdG9jb2wgU3RyaW5nIDxDcmVhdGUsIERyb3AsIENvcHksIENS RUFUQUJMRT4KIyAxMTU1ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIK LSBfSV9DcmVhdGluZzsKKyBjcmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUgc2V0QzogKGNvbnN0IGNo YXIgKiljc3RyaW5nOwoKLSBfSV9TZXR0aW5nOwotICh2b2lkKXNldEM6IChjb25zdCBjaGFyICop Y3N0cmluZzsKCi0gX0lfVXNpbmc7Ci0gKGNvbnN0IGNoYXIgKilnZXRDOwotICh2b2lkKWNhdEM6 IChjb25zdCBjaGFyICopY3N0cmluZzsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAg ICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgICA2OQoKCi0gKHVuc2ln bmVkKWdldENvdW50OwpAZW5kCgpAcHJvdG9jb2wgTGlzdFNodWZmbGVyIDxDcmVhdGUsIERyb3As IENSRUFUQUJMRT4KIyAxMTc2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMu aCIKLSBfSV9DcmVhdGluZzsKCgotIHNldFVuaWZvcm1SYW5kb206IGRpc3Q7CgoKCisgY3JlYXRl OiAoaWQgPFpvbmU+KWFab25lIHNldFVuaWZvcm1SYW5kb206IGRpc3Q7CgotIF9JX1VzaW5nOwoK LSBzaHVmZmxlV2hvbGVMaXN0OiBsaXN0OwoKCgotIHNodWZmbGVQYXJ0aWFsTGlzdDogbGlzdCBO dW06ICh1bnNpZ25lZCludW07CkBlbmQKCkBwcm90b2NvbCBQZXJtdXRhdGlvbkl0ZW0gPENyZWF0 ZSwgUkVUVVJOQUJMRT4KCgoKLSBfSV9DcmVhdGluZzsKLSBzZXRJdGVtOiBpdGVtOwotIHNldFBv c2l0aW9uOiAodW5zaWduZWQpcG9zaXRpb247Ci0gX0lfVXNpbmc7Ci0gZ2V0SXRlbTsKLSAodW5z aWduZWQpZ2V0UG9zaXRpb247CkBlbmQKCkBwcm90b2NvbCBQZXJtdXRhdGlvbiA8Q29sbGVjdGlv biwgQ3JlYXRlLCBBcnJheSwgQ1JFQVRBQkxFPgoKCgoKCgoKLSBfSV9DcmVhdGluZzsKLSBzZXRD b2xsZWN0aW9uOiAoaWQgPENvbGxlY3Rpb24+KWNvbGxlY3Rpb247Ci0gc2V0TGFzdFBlcm11dGF0 aW9uOiAoaWQgPFBlcm11dGF0aW9uPilwZXJtdXRhdGlvbjsKLSBzZXRVbmlmb3JtUmFuZG9tOiBy bmQ7CkBlbmQKCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zL3R5cGVz LmgiIDEKZXh0ZXJuIHZvaWQgKl9jb2xsZWN0aW9uc19bXTsKCmV4dGVybiBpZCBPZmZzZXRzOwpl eHRlcm4gaWQgRm9yRWFjaDsKZXh0ZXJuIGlkIEZvckVhY2hLZXk7CmV4dGVybiBpZCBJbmRleDsK CgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAg ICAgICAgICAgICAgIFBhZ2UgICA3MAoKCmV4dGVybiBpZCBQZXJtdXRlZEluZGV4OwpleHRlcm4g aWQgQ29sbGVjdGlvbjsKZXh0ZXJuIGlkIERlZmF1bHRNZW1iZXI7CmV4dGVybiBpZCBNZW1iZXJC bG9jazsKZXh0ZXJuIGlkIEFycmF5OwpleHRlcm4gaWQgTGlzdEluZGV4OwpleHRlcm4gaWQgTGlz dDsKZXh0ZXJuIGlkIENvbXBhcmVGdW5jdGlvbjsKZXh0ZXJuIGlkIEtleWVkQ29sbGVjdGlvbjsK ZXh0ZXJuIGlkIEtleWVkQ29sbGVjdGlvbkluZGV4OwpleHRlcm4gaWQgTWVtYmVyU2xvdDsKZXh0 ZXJuIGlkIF9TZXQ7CmV4dGVybiBpZCBTZXQ7CmV4dGVybiBpZCBPcmRlcmVkU2V0OwpleHRlcm4g aWQgTWFwSW5kZXg7CmV4dGVybiBpZCBNYXA7CmV4dGVybiBpZCBPdXRwdXRTdHJlYW07CmV4dGVy biBpZCBJbnB1dFN0cmVhbTsKZXh0ZXJuIGlkIEFyY2hpdmVyS2V5d29yZDsKZXh0ZXJuIGlkIEFy Y2hpdmVyQXJyYXk7CmV4dGVybiBpZCBBcmNoaXZlclZhbHVlOwpleHRlcm4gaWQgQXJjaGl2ZXJQ YWlyOwpleHRlcm4gaWQgQXJjaGl2ZXJMaXN0OwpleHRlcm4gaWQgQXJjaGl2ZXJRdW90ZWQ7CmV4 dGVybiBpZCBTdHJpbmc7CmV4dGVybiBpZCBMaXN0U2h1ZmZsZXI7CmV4dGVybiBpZCBQZXJtdXRh dGlvbkl0ZW07CmV4dGVybiBpZCBQZXJtdXRhdGlvbjsKIyAxMjIxICIvdXNyL2xvY2FsL3N3YXJt L2luY2x1ZGUvY29sbGVjdGlvbnMuaCIgMgojIDI3ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv YWN0aXZpdHkuaCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9leHRlcm52YXIuaCIg MQojIDI4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIgMgoKQHByb3RvY29s IERlZmF1bHRPcmRlcgojIDc1ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIK LSBfSV9DcmVhdGluZzsKLSBfSV9TZXR0aW5nOwotIHNldERlZmF1bHRPcmRlcjogKGlkIDxTeW1i b2w+KWFTeW1ib2w7Ci0gX0lfVXNpbmc7Ci0gKGlkIDxTeW1ib2w+KWdldERlZmF1bHRPcmRlcjsK QGVuZAoKCkBwcm90b2NvbCBBY3Rpdml0eSA8RGVmaW5lZE9iamVjdCwgRHJvcCwgUkVUVVJOQUJM RT4KIyAxMjYgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgotIF9JX1VzaW5n OwoKCgoKCi0gKGlkIDxTeW1ib2w+KXJ1bjsKCgoKLSAodm9pZClzdG9wOwoKCgoKCgoKMjAwMS0w OC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAg UGFnZSAgIDcxCgoKCgoKCgoKCi0gKHZvaWQpdGVybWluYXRlOwoKCgoKLSAoaWQgPFN5bWJvbD4p bmV4dEFjdGlvbjsKCgotIChpZCA8U3ltYm9sPilzdGVwQWN0aW9uOwoKCgoKLSAoaWQgPFN5bWJv bD4pZ2V0U3RhdHVzOwojIDE2NyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5Lmgi Ci0gKGlkIDxTeW1ib2w+KWdldEhvbGRUeXBlOwoKCi0gZ2V0QWN0aW9uOwoKCi0gZ2V0QWN0aW9u VHlwZTsKCgotICh2b2lkKXNldE93bmVyQWN0aXZpdHk6IG93bmVyQWN0aXZpdHk7CgoKLSBnZXRP d25lckFjdGl2aXR5OwoKCi0gZ2V0U3ViYWN0aXZpdGllczsKCgotIGdldENvbnRyb2xsaW5nQWN0 aXZpdHk7CgoKLSBnZXRUb3BMZXZlbEFjdGl2aXR5OwoKCi0gZ2V0U3dhcm1BY3Rpdml0eTsKCgot IGdldFNjaGVkdWxlQWN0aXZpdHk7CgoKLSBzZXRTZXJpYWxNb2RlOiAoQk9PTClzZXJpYWxNb2Rl OwoKCi0gKEJPT0wpZ2V0U2VyaWFsTW9kZTsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAg ICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgICA3MgoKCgoKLSAo aWQgPEFjdGl2aXR5PilnZXRDdXJyZW50U3ViYWN0aXZpdHk7CkBlbmQKCgpleHRlcm4gaWQgPFN5 bWJvbD4gSW5pdGlhbGl6ZWQsIFJ1bm5pbmcsIEhvbGRpbmcsIFJlbGVhc2VkLCBTdG9wcGVkLAog IFRlcm1pbmF0ZWQsIENvbXBsZXRlZDsKCkBwcm90b2NvbCBBY3Rpb24gPENyZWF0ZSwgRHJvcCwg R2V0T3duZXI+CiMgMjQyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBf SV9Vc2luZzsKLSAodm9pZClfcGVyZm9ybUFjdGlvbl86IChpZCA8QWN0aXZpdHk+KWFjdGl2aXR5 OwpAZW5kCgpAcHJvdG9jb2wgQWN0aW9uQXJncwoKCgoKCgoKLSBfSV9DcmVhdGluZzsKLSAodm9p ZClzZXRBcmcxOiBhcmcxOwotICh2b2lkKXNldEFyZzI6IGFyZzI7Ci0gKHZvaWQpc2V0QXJnMzog YXJnMzsKLSBfSV9Vc2luZzsKLSAodW5zaWduZWQpZ2V0TkFyZ3M7Ci0gZ2V0QXJnMTsKLSBnZXRB cmcyOwotIGdldEFyZzM7CkBlbmQKCkBwcm90b2NvbCBGQWN0aW9uIDxBY3Rpb24sIFJFVFVSTkFC TEU+CgoKLSBfSV9DcmVhdGluZzsKLSBzZXRDYWxsOiBmY2FsbDsKLSBfSV9TZXR0aW5nOwotIHNl dEF1dG9Ecm9wOiAoQk9PTClhdXRvRHJvcDsKLSBfSV9Vc2luZzsKQGVuZAoKQHByb3RvY29sIEFj dGlvblRhcmdldAoKCi0gX0lfQ3JlYXRpbmc7Ci0gKHZvaWQpc2V0VGFyZ2V0OiB0YXJnZXQ7Ci0g X0lfVXNpbmc7Ci0gZ2V0VGFyZ2V0OwpAZW5kCgpAcHJvdG9jb2wgQWN0aW9uU2VsZWN0b3IKCgoK CgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAg ICAgICAgICAgICAgUGFnZSAgIDczCgoKLSBfSV9TZXR0aW5nOwotICh2b2lkKXNldE1lc3NhZ2VT ZWxlY3RvcjogKFNFTClhU2VsOwotIF9JX1VzaW5nOwotIChTRUwpZ2V0TWVzc2FnZVNlbGVjdG9y OwpAZW5kCgpAcHJvdG9jb2wgQWN0aW9uVG8gPEFjdGlvbiwgQWN0aW9uVGFyZ2V0LCBBY3Rpb25T ZWxlY3RvciwgQWN0aW9uQXJncywgUkVUVVJOQUJMRT4KCgpAZW5kCgpAcHJvdG9jb2wgQWN0aW9u Rm9yRWFjaCA8QWN0aW9uVG8sIERlZmF1bHRPcmRlciwgUkVUVVJOQUJMRT4KCgpAZW5kCgpAcHJv dG9jb2wgQWN0aW9uRm9yRWFjaEhvbW9nZW5lb3VzIDxBY3Rpb24sIEFjdGlvblRhcmdldCwgQWN0 aW9uU2VsZWN0b3IsIERlZmF1bHRPcmRlciwgUkVUVVJOQUJMRT4KCgpAZW5kCgpAcHJvdG9jb2wg RkFjdGlvbkZvckVhY2ggPEZBY3Rpb24sIEFjdGlvblRhcmdldCwgRGVmYXVsdE9yZGVyPgoKCkBl bmQKCkBwcm90b2NvbCBGQWN0aW9uRm9yRWFjaEhldGVyb2dlbmVvdXMgPEZBY3Rpb25Gb3JFYWNo LCBSRVRVUk5BQkxFPgoKCkBlbmQKCkBwcm90b2NvbCBGQWN0aW9uRm9yRWFjaEhvbW9nZW5lb3Vz IDxGQWN0aW9uRm9yRWFjaCwgUkVUVVJOQUJMRT4KCgoKCgpAZW5kCgpAcHJvdG9jb2wgQWN0aW9u Q2FsbCA8QWN0aW9uLCBBY3Rpb25BcmdzLCBSRVRVUk5BQkxFPgoKCi0gX0lfQ3JlYXRpbmc7Ci0g KHZvaWQpc2V0RnVuY3Rpb25Qb2ludGVyOiAoZnVuY190KWZwdHI7Ci0gX0lfVXNpbmc7Ci0gKGZ1 bmNfdClnZXRGdW5jdGlvblBvaW50ZXI7CkBlbmQKCkBwcm90b2NvbCBBY3Rpb25DaGFuZ2VkIDxB Y3Rpb24sIFJFVFVSTkFCTEU+CgoKQGVuZAoKQHByb3RvY29sIEZBY3Rpb25DcmVhdGluZwoKCgoK CgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAg ICAgICAgICAgICBQYWdlICAgNzQKCgotIF9JX1VzaW5nOwotIChpZCA8RkFjdGlvbj4pY3JlYXRl RkFjdGlvbjogKGlkIDxGQ2FsbD4pY2FsbDsKQGVuZAoKQHByb3RvY29sIEFjdGlvbkNyZWF0aW5n Q2FsbAoKCgoKCgoKLSBfSV9Vc2luZzsKLSAoaWQgPEFjdGlvbkNhbGw+KWNyZWF0ZUFjdGlvbkNh bGw6IChmdW5jX3QpZnB0cjsKLSAoaWQgPEFjdGlvbkNhbGw+KWNyZWF0ZUFjdGlvbkNhbGw6IChm dW5jX3QpZnB0ciA6IGFyZzE7Ci0gKGlkIDxBY3Rpb25DYWxsPiljcmVhdGVBY3Rpb25DYWxsOiAo ZnVuY190KWZwdHIgOiBhcmcxIDogYXJnMjsKLSAoaWQgPEFjdGlvbkNhbGw+KWNyZWF0ZUFjdGlv bkNhbGw6IChmdW5jX3QpZnB0ciA6IGFyZzEgOiBhcmcyIDogYXJnMzsKQGVuZAoKQHByb3RvY29s IEFjdGlvbkNyZWF0aW5nVG8KIyAzODQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0 eS5oIgotIF9JX1VzaW5nOwotIChpZCA8QWN0aW9uVG8+KWNyZWF0ZUFjdGlvblRvOiB0YXJnZXQg bWVzc2FnZTogKFNFTClhU2VsOwotIChpZCA8QWN0aW9uVG8+KWNyZWF0ZUFjdGlvblRvOiB0YXJn ZXQgbWVzc2FnZTogKFNFTClhU2VsIDogYXJnMTsKLSAoaWQgPEFjdGlvblRvPiljcmVhdGVBY3Rp b25UbzogdGFyZ2V0IG1lc3NhZ2U6IChTRUwpYVNlbCA6IGFyZzEgOiBhcmcyOwotIChpZCA8QWN0 aW9uVG8+KWNyZWF0ZUFjdGlvblRvOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsIDogYXJnMSA6 IGFyZzIgOiBhcmczOwpAZW5kCgpAcHJvdG9jb2wgQWN0aW9uQ3JlYXRpbmdGb3JFYWNoCiMgNDAy ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9Vc2luZzsKLSAoaWQg PEFjdGlvbkZvckVhY2hIb21vZ2VuZW91cz4pY3JlYXRlQWN0aW9uRm9yRWFjaEhvbW9nZW5lb3Vz OiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsOwoKLSAoaWQgPEFjdGlvbkZvckVhY2g+KWNyZWF0 ZUFjdGlvbkZvckVhY2g6IHRhcmdldCBtZXNzYWdlOiAoU0VMKWFTZWw7Ci0gKGlkIDxBY3Rpb25G b3JFYWNoPiljcmVhdGVBY3Rpb25Gb3JFYWNoOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsIDog YXJnMTsKLSAoaWQgPEFjdGlvbkZvckVhY2g+KWNyZWF0ZUFjdGlvbkZvckVhY2g6IHRhcmdldCBt ZXNzYWdlOiAoU0VMKWFTZWwgOiBhcmcxIDogYXJnMjsKLSAoaWQgPEFjdGlvbkZvckVhY2g+KWNy ZWF0ZUFjdGlvbkZvckVhY2g6IHRhcmdldCBtZXNzYWdlOiAoU0VMKWFTZWwgOiBhcmcxIDogYXJn MiA6IGFyZzM7CkBlbmQKCkBwcm90b2NvbCBGQWN0aW9uQ3JlYXRpbmdGb3JFYWNoSGV0ZXJvZ2Vu ZW91cwoKCgoKCi0gX0lfVXNpbmc7Ci0gKGlkIDxGQWN0aW9uRm9yRWFjaEhldGVyb2dlbmVvdXM+ KWNyZWF0ZUZBY3Rpb25Gb3JFYWNoSGV0ZXJvZ2VuZW91czogdGFyZ2V0IGNhbGw6IChpZCA8RkNh bGw+KWNhbGw7CkBlbmQKCkBwcm90b2NvbCBGQWN0aW9uQ3JlYXRpbmdGb3JFYWNoSG9tb2dlbmVv dXMKCgoKCgotIF9JX1VzaW5nOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAg IFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgIDc1CgoKLSAoaWQgPEZBY3Rp b25Gb3JFYWNoSG9tb2dlbmVvdXM+KWNyZWF0ZUZBY3Rpb25Gb3JFYWNoSG9tb2dlbmVvdXM6IHRh cmdldCBjYWxsOiAoaWQgPEZDYWxsPiljYWxsOwpAZW5kCgpAcHJvdG9jb2wgQWN0aW9uQ3JlYXRp bmcgPEZBY3Rpb25DcmVhdGluZywgQWN0aW9uQ3JlYXRpbmdDYWxsLCBBY3Rpb25DcmVhdGluZ1Rv LCBBY3Rpb25DcmVhdGluZ0ZvckVhY2gsIEZBY3Rpb25DcmVhdGluZ0ZvckVhY2hIZXRlcm9nZW5l b3VzLCBGQWN0aW9uQ3JlYXRpbmdGb3JFYWNoSG9tb2dlbmVvdXM+CiMgNDYyICIvdXNyL2xvY2Fs L3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9Vc2luZzsKCgoKCi0gY3JlYXRlQWN0aW9u OiBhbkFjdGlvblR5cGU7CgpAZW5kCgoKZXh0ZXJuIGlkIDxTeW1ib2w+IENvbmN1cnJlbnQsIFNl cXVlbnRpYWwsIFJhbmRvbWl6ZWQ7CiMgNDkzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0 aXZpdHkuaCIKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHRpbWV2YWxfdDsKCgoKQHByb3RvY29sIEFj dGl2aXR5SW5kZXggPEluZGV4LCBSRVRVUk5BQkxFPgoKCi0gX0lfVXNpbmc7Ci0gKGlkIDxTeW1i b2w+KWdldEhvbGRUeXBlOwotIChpZCA8QWN0aW9uPiluZXh0QWN0aW9uOiAoaWQgKilzdGF0dXM7 CkBlbmQKCgpleHRlcm4gaWQgPFN5bWJvbD4gSG9sZFN0YXJ0LCBIb2xkRW5kOwoKQHByb3RvY29s IEFjdGlvblR5cGUKIyA1MzEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgot IF9JX1VzaW5nOwojIDU1MSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiCi0g KGlkIDxBY3Rpdml0eT4pYWN0aXZhdGVJbjogc3dhcm1Db250ZXh0OwpAZW5kCgpAcHJvdG9jb2wg U3luY2hyb25pemF0aW9uVHlwZQojIDU2OSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2 aXR5LmgiCi0gX0lfQ3JlYXRpbmc7Ci0gKHZvaWQpc2V0U3luY2hyb25pemF0aW9uVHlwZTogYVNj aGVkdWxlVHlwZTsKCi0gX0lfVXNpbmc7Ci0gZ2V0U3luY2hyb25pemF0aW9uVHlwZTsKQGVuZAoK QHByb3RvY29sIEF1dG9Ecm9wCiMgNTk2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZp dHkuaCIKLSBfSV9DcmVhdGluZzsKLSBzZXRBdXRvRHJvcDogKEJPT0wpYXV0b0Ryb3A7Ci0gX0lf VXNpbmc7Ci0gKEJPT0wpZ2V0QXV0b0Ryb3A7CkBlbmQKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAgNzYK CgpAcHJvdG9jb2wgQ29tcG91bmRBY3Rpb24gPEFjdGlvblR5cGUsIENvbGxlY3Rpb24sIEF1dG9E cm9wLCBEZWZhdWx0T3JkZXI+CiMgNjEzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZp dHkuaCIKQGVuZAoKQHByb3RvY29sIEFjdGlvbkdyb3VwIDxDb21wb3VuZEFjdGlvbiwgQWN0aW9u Q3JlYXRpbmcsIERlZmF1bHRPcmRlciwgQ1JFQVRBQkxFPgojIDYzNCAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL2FjdGl2aXR5LmgiCkBlbmQKCkBwcm90b2NvbCBBY3Rpb25Db25jdXJyZW50IDxB Y3Rpb24sIFJFVFVSTkFCTEU+Ci0gX0lfVXNpbmc7CgoKLSAoaWQgPEFjdGlvbkdyb3VwPilnZXRD b25jdXJyZW50R3JvdXA7CkBlbmQKCkBwcm90b2NvbCBSZWxhdGl2ZVRpbWUKCgoKCgoKLSBfSV9T ZXR0aW5nOwotIHNldFJlbGF0aXZlVGltZTogKEJPT0wpcmVsYXRpdmVUaW1lOwotIF9JX1VzaW5n OwotIChCT09MKWdldFJlbGF0aXZlVGltZTsKQGVuZAoKQHByb3RvY29sIFJlcGVhdEludGVydmFs CiMgNjcxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9TZXR0aW5n OwotIHNldFJlcGVhdEludGVydmFsOiAodGltZXZhbF90KXJlcGVhdEludGVydmFsOwotIF9JX1Vz aW5nOwotICh0aW1ldmFsX3QpZ2V0UmVwZWF0SW50ZXJ2YWw7CkBlbmQKCkBwcm90b2NvbCBDb25j dXJyZW50R3JvdXBUeXBlCiMgNzA2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHku aCIKLSBfSV9TZXR0aW5nOwotICh2b2lkKXNldENvbmN1cnJlbnRHcm91cFR5cGU6IGdyb3VwVHlw ZTsKLSBfSV9Vc2luZzsKLSBnZXRDb25jdXJyZW50R3JvdXBUeXBlOwpAZW5kCgpAcHJvdG9jb2wg U2luZ2xldG9uR3JvdXBzCiMgNzI4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHku aCIKLSBfSV9TZXR0aW5nOwotICh2b2lkKXNldFNpbmdsZXRvbkdyb3VwczogKEJPT0wpc2luZ2xl dG9uR3JvdXBzOwotIF9JX1VzaW5nOwotIChCT09MKWdldFNpbmdsZXRvbkdyb3VwczsKQGVuZAoK QHByb3RvY29sIFNjaGVkdWxlIDxNYXAsIENvbXBvdW5kQWN0aW9uLCBBY3Rpb25DcmVhdGluZywg UmVsYXRpdmVUaW1lLCBSZXBlYXRJbnRlcnZhbCwgQ29uY3VycmVudEdyb3VwVHlwZSwgU2luZ2xl dG9uR3JvdXBzLCBDUkVBVEFCTEU+CiMgNzYzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0 aXZpdHkuaCIKLSBfSV9DcmVhdGluZzsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAg ICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAgNzcKCgorIGNyZWF0 ZTogKGlkIDxab25lPilhWm9uZSBzZXRSZXBlYXRJbnRlcnZhbDogKHRpbWV2YWxfdClycHRJbnRl cnZhbDsKCgorIGNyZWF0ZTogKGlkIDxab25lPilhWm9uZSBzZXRBdXRvRHJvcDogKEJPT0wpYXV0 b0Ryb3A7CgoKCi0gc2V0S2VlcEVtcHR5RmxhZzogKEJPT0wpa2VlcEVtcHR5RmxhZzsKLSBfSV9V c2luZzsKLSBhdDogKHRpbWV2YWxfdCl0VmFsIGNyZWF0ZUFjdGlvbjogYW5BY3Rpb25UeXBlOwoK LSAoaWQgPEZBY3Rpb24+KWF0OiAodGltZXZhbF90KXRWYWwgY3JlYXRlRkFjdGlvbjogKGlkIDxG Q2FsbD4pY2FsbDsKLSAoaWQgPEFjdGlvbkNhbGw+KWF0OiAodGltZXZhbF90KXRWYWwgY3JlYXRl QWN0aW9uQ2FsbDogKGZ1bmNfdClmcHRyOwotIChpZCA8QWN0aW9uQ2FsbD4pYXQ6ICh0aW1ldmFs X3QpdFZhbCBjcmVhdGVBY3Rpb25DYWxsOiAoZnVuY190KWZwdHI6YXJnMTsKLSAoaWQgPEFjdGlv bkNhbGw+KWF0OiAodGltZXZhbF90KXRWYWwgY3JlYXRlQWN0aW9uQ2FsbDogKGZ1bmNfdClmcHRy OmFyZzE6YXJnMjsKLSAoaWQgPEFjdGlvbkNhbGw+KWF0OiAodGltZXZhbF90KXRWYWwgY3JlYXRl QWN0aW9uQ2FsbDogKGZ1bmNfdClmcHRyOmFyZzE6YXJnMjphcmczOwoKLSAoaWQgPEFjdGlvblRv PilhdDogKHRpbWV2YWxfdCl0VmFsIGNyZWF0ZUFjdGlvblRvOiB0YXJnZXQgbWVzc2FnZTogKFNF TClhU2VsOwotIChpZCA8QWN0aW9uVG8+KWF0OiAodGltZXZhbF90KXRWYWwgY3JlYXRlQWN0aW9u VG86IHRhcmdldCBtZXNzYWdlOiAoU0VMKWFTZWw6YXJnMTsKLSAoaWQgPEFjdGlvblRvPilhdDog KHRpbWV2YWxfdCl0VmFsIGNyZWF0ZUFjdGlvblRvOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2Vs OmFyZzE6YXJnMjsKLSAoaWQgPEFjdGlvblRvPilhdDogKHRpbWV2YWxfdCl0VmFsIGNyZWF0ZUFj dGlvblRvOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsOmFyZzE6YXJnMjphcmczOwoKLSAoaWQg PEFjdGlvbkZvckVhY2hIb21vZ2VuZW91cz4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVBY3Rp b25Gb3JFYWNoSG9tb2dlbmVvdXM6IHRhcmdldCBtZXNzYWdlOiAoU0VMKWFTZWw7CgotIChpZCA8 QWN0aW9uRm9yRWFjaD4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVBY3Rpb25Gb3JFYWNoOiB0 YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsOwotIChpZCA8QWN0aW9uRm9yRWFjaD4pYXQ6ICh0aW1l dmFsX3QpdFZhbCBjcmVhdGVBY3Rpb25Gb3JFYWNoOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2Vs OmFyZzE7Ci0gKGlkIDxBY3Rpb25Gb3JFYWNoPilhdDogKHRpbWV2YWxfdCl0VmFsIGNyZWF0ZUFj dGlvbkZvckVhY2g6IHRhcmdldCBtZXNzYWdlOiAoU0VMKWFTZWw6YXJnMTphcmcyOwotIChpZCA8 QWN0aW9uRm9yRWFjaD4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVBY3Rpb25Gb3JFYWNoOiB0 YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsOmFyZzE6YXJnMjphcmczOwoKLSAoaWQgPEZBY3Rpb25G b3JFYWNoSGV0ZXJvZ2VuZW91cz4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVGQWN0aW9uRm9y RWFjaEhldGVyb2dlbmVvdXM6IHRhcmdldCBjYWxsOiAoaWQgPEZDYWxsPiljYWxsOwotIChpZCA8 RkFjdGlvbkZvckVhY2hIb21vZ2VuZW91cz4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVGQWN0 aW9uRm9yRWFjaEhvbW9nZW5lb3VzOiB0YXJnZXQgY2FsbDogKGlkIDxGQ2FsbD4pY2FsbDsKCgoK LSByZW1vdmU6IGFuQWN0aW9uOwoKCi0gKGlkIDxBY3Rpb25Hcm91cD4paW5zZXJ0R3JvdXA6ICh0 aW1ldmFsX3QpdFZhbDsKQGVuZAoKQHByb3RvY29sIFNjaGVkdWxlQWN0aXZpdHkgPEFjdGl2aXR5 LCBSRVRVUk5BQkxFPgoKCi0gX0lfQ3JlYXRpbmc7Ci0gX0lfVXNpbmc7CgotICh0aW1ldmFsX3Qp Z2V0Q3VycmVudFRpbWU7CgoKLSBzdGVwVW50aWw6ICh0aW1ldmFsX3QpdFZhbDsKQGVuZAoKQHBy b3RvY29sIFN3YXJtQWN0aXZpdHkgPFNjaGVkdWxlQWN0aXZpdHksIFJFVFVSTkFCTEU+CgoKCgoK CgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAg ICAgICAgICAgICBQYWdlICAgNzgKCgotIF9JX1VzaW5nOwoKLSBnZXRTd2FybTsKCi0gKGlkIDxT Y2hlZHVsZT4pZ2V0U3luY2hyb25pemF0aW9uU2NoZWR1bGU7CkBlbmQKCkBwcm90b2NvbCBGb3JF YWNoQWN0aXZpdHkgPEFjdGl2aXR5LCBSRVRVUk5BQkxFPgoKCgotIF9JX1VzaW5nOwotIGdldEN1 cnJlbnRNZW1iZXI7CkBlbmQKCkBwcm90b2NvbCBTd2FybVByb2Nlc3MgPEFjdGlvblR5cGUsIFpv bmUsIFN5bmNocm9uaXphdGlvblR5cGU+CiMgODUwICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv YWN0aXZpdHkuaCIKLSBfSV9DcmVhdGluZzsKCgoKCgoKCi0gc2V0SW50ZXJuYWxab25lVHlwZTog YVpvbmVUeXBlOwoKLSBfSV9Vc2luZzsKCgoKCgotIGdldEludGVybmFsWm9uZTsKCgoKCgotIChp ZCA8U3dhcm1BY3Rpdml0eT4pZ2V0QWN0aXZpdHk7CkBlbmQKIyA5MjQgIi91c3IvbG9jYWwvc3dh cm0vaW5jbHVkZS9hY3Rpdml0eS5oIgpAcHJvdG9jb2wgR2V0U3ViYWN0aXZpdHlBY3Rpb24KCgoK LSBfSV9Vc2luZzsKLSBfZ2V0U3ViYWN0aXZpdHlBY3Rpb25fOwpAZW5kCgoKCgoKZXh0ZXJuIGlk IF9hY3Rpdml0eV9jdXJyZW50OwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAg ICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgICA3OQoKCgoKZXh0ZXJuIGlk IF9hY3Rpdml0eV9jb250ZXh0X2Vycm9yIChjb25zdCBjaGFyICptYWNyb05hbWUpOwoKCkBwcm90 b2NvbCBDb25jdXJyZW50R3JvdXAgPEFjdGlvbkdyb3VwLCBSRVRVUk5BQkxFPgoKCi0gX0lfVXNp bmc7Ci0gKHZvaWQpX3NldEFjdGlvbkNvbmN1cnJlbnRfOiBhY3Rpb247Ci0gX2dldEVtcHR5QWN0 aW9uQ29uY3VycmVudF87CkBlbmQKCkBwcm90b2NvbCBDb25jdXJyZW50U2NoZWR1bGUgPENvbmN1 cnJlbnRHcm91cCwgU2NoZWR1bGUsIENSRUFUQUJMRT4KCgpAZW5kCgpAcHJvdG9jb2wgQWN0aXZh dGlvbk9yZGVyIDxBY3Rpb25Hcm91cCwgUkVUVVJOQUJMRT4KCgotIF9JX1VzaW5nOwoKLSAodm9p ZClhZGRMYXN0OiBtZXJnZUFjdGlvbjsKCgoKLSByZW1vdmU6IG1lcmdlQWN0aW9uOwoKQGVuZAoK CmV4dGVybiBpZCA8RXJyb3I+IEludmFsaWRTd2FybVpvbmU7CgoKCmV4dGVybiBpZCBfYWN0aXZp dHlfem9uZTsKIyA5ODUgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgpleHRl cm4gQk9PTCAoKl9hY3Rpdml0eV90cmFjZSkgKGlkKTsKIyA5OTggIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9hY3Rpdml0eS5oIgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0 eS90eXBlcy5oIiAxCmV4dGVybiB2b2lkICpfYWN0aXZpdHlfW107CgpleHRlcm4gaWQgRGVmYXVs dE9yZGVyOwpleHRlcm4gaWQgQWN0aXZpdHk7CmV4dGVybiBpZCBBY3Rpb247CmV4dGVybiBpZCBB Y3Rpb25BcmdzOwpleHRlcm4gaWQgRkFjdGlvbjsKZXh0ZXJuIGlkIEFjdGlvblRhcmdldDsKZXh0 ZXJuIGlkIEFjdGlvblNlbGVjdG9yOwpleHRlcm4gaWQgQWN0aW9uVG87CmV4dGVybiBpZCBBY3Rp b25Gb3JFYWNoOwpleHRlcm4gaWQgQWN0aW9uRm9yRWFjaEhvbW9nZW5lb3VzOwpleHRlcm4gaWQg RkFjdGlvbkZvckVhY2g7CmV4dGVybiBpZCBGQWN0aW9uRm9yRWFjaEhldGVyb2dlbmVvdXM7CmV4 dGVybiBpZCBGQWN0aW9uRm9yRWFjaEhvbW9nZW5lb3VzOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToy MSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgIDgw CgoKZXh0ZXJuIGlkIEFjdGlvbkNhbGw7CmV4dGVybiBpZCBBY3Rpb25DaGFuZ2VkOwpleHRlcm4g aWQgRkFjdGlvbkNyZWF0aW5nOwpleHRlcm4gaWQgQWN0aW9uQ3JlYXRpbmdDYWxsOwpleHRlcm4g aWQgQWN0aW9uQ3JlYXRpbmdUbzsKZXh0ZXJuIGlkIEFjdGlvbkNyZWF0aW5nRm9yRWFjaDsKZXh0 ZXJuIGlkIEZBY3Rpb25DcmVhdGluZ0ZvckVhY2hIZXRlcm9nZW5lb3VzOwpleHRlcm4gaWQgRkFj dGlvbkNyZWF0aW5nRm9yRWFjaEhvbW9nZW5lb3VzOwpleHRlcm4gaWQgQWN0aW9uQ3JlYXRpbmc7 CmV4dGVybiBpZCBBY3Rpdml0eUluZGV4OwpleHRlcm4gaWQgQWN0aW9uVHlwZTsKZXh0ZXJuIGlk IFN5bmNocm9uaXphdGlvblR5cGU7CmV4dGVybiBpZCBBdXRvRHJvcDsKZXh0ZXJuIGlkIENvbXBv dW5kQWN0aW9uOwpleHRlcm4gaWQgQWN0aW9uR3JvdXA7CmV4dGVybiBpZCBBY3Rpb25Db25jdXJy ZW50OwpleHRlcm4gaWQgUmVsYXRpdmVUaW1lOwpleHRlcm4gaWQgUmVwZWF0SW50ZXJ2YWw7CmV4 dGVybiBpZCBDb25jdXJyZW50R3JvdXBUeXBlOwpleHRlcm4gaWQgU2luZ2xldG9uR3JvdXBzOwpl eHRlcm4gaWQgU2NoZWR1bGU7CmV4dGVybiBpZCBTY2hlZHVsZUFjdGl2aXR5OwpleHRlcm4gaWQg U3dhcm1BY3Rpdml0eTsKZXh0ZXJuIGlkIEZvckVhY2hBY3Rpdml0eTsKZXh0ZXJuIGlkIFN3YXJt UHJvY2VzczsKZXh0ZXJuIGlkIEdldFN1YmFjdGl2aXR5QWN0aW9uOwpleHRlcm4gaWQgQ29uY3Vy cmVudEdyb3VwOwpleHRlcm4gaWQgQ29uY3VycmVudFNjaGVkdWxlOwpleHRlcm4gaWQgQWN0aXZh dGlvbk9yZGVyOwojIDk5OSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiIDIK IyAyMiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2UuaCIgMgojIDEgIi91c3Iv bG9jYWwvc3dhcm0vaW5jbHVkZS9leHRlcm52YXIuaCIgMQojIDIzICIvdXNyL2xvY2FsL3N3YXJt L2luY2x1ZGUvb2JqZWN0YmFzZS5oIiAyCgpAcHJvdG9jb2wgU3dhcm1PYmplY3QgPENyZWF0ZSwg RHJvcCwgQ1JFQVRBQkxFPgojIDM5ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFz ZS5oIgotIF9JX1VzaW5nOwoKCgotIGdldFByb2JlTWFwOwoKCgotIGdldENvbXBsZXRlUHJvYmVN YXA7CgoKCi0gZ2V0UHJvYmVGb3JWYXJpYWJsZTogKGNvbnN0IGNoYXIgKilhVmFyaWFibGU7CgoK Ci0gZ2V0UHJvYmVGb3JNZXNzYWdlOiAoY29uc3QgY2hhciAqKWFNZXNzYWdlOwpAZW5kCgpAcHJv dG9jb2wgUHJvYmVDb25maWcKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQ cGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgICA4MQoKCgoKCgoKLSBfSV9Vc2lu ZzsKLSBzZXRPYmplY3RUb05vdGlmeTogYW5PYmplY3Q7Ci0gZ2V0T2JqZWN0VG9Ob3RpZnk7CkBl bmQKCkBwcm90b2NvbCBQcm9iZSA8U3dhcm1PYmplY3QsIFByb2JlQ29uZmlnPgojIDgxICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFzZS5oIgotIF9JX0NyZWF0aW5nOwoKCi0gc2V0 UHJvYmVkQ2xhc3M6IChDbGFzcyljbGFzczsKCi0gc2V0UHJvYmVkT2JqZWN0OiBvYmplY3Q7Ci0g X0lfU2V0dGluZzsKCgoKLSBzZXRTYWZldHk7CgoKCgotIHVuc2V0U2FmZXR5OwoKLSBfSV9Vc2lu ZzsKCgoKCgotIGNsb25lOiAoaWQgPFpvbmU+KWFab25lOwoKCgotIChDbGFzcylnZXRQcm9iZWRD bGFzczsKCgoKCi0gKGNvbnN0IGNoYXIgKilnZXRQcm9iZWRUeXBlOwpAZW5kCgpAcHJvdG9jb2wg VmFyUHJvYmUgPFByb2JlLCBDUkVBVEFCTEU+CgoKCgoKCi0gX0lfQ3JlYXRpbmc7CgoKCgoKCgoK MjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAg ICAgICAgUGFnZSAgIDgyCgoKCgoKLSBzZXRQcm9iZWRWYXJpYWJsZTogKGNvbnN0IGNoYXIgKilh VmFyaWFibGU7CgotIF9JX1NldHRpbmc7CgoKCgoKCgotIHNldE5vbkludGVyYWN0aXZlOwoKCgoK CgotIHNldFN0cmluZ1JldHVyblR5cGU6IHJldHVyblR5cGU7CgoKCi0gc2V0RmxvYXRGb3JtYXQ6 IChjb25zdCBjaGFyICopZm9ybWF0OwoKLSBfSV9Vc2luZzsKCgotIChjb25zdCBjaGFyICopZ2V0 UHJvYmVkVmFyaWFibGU7CgoKCi0gKEJPT0wpZ2V0SW50ZXJhY3RpdmVGbGFnOwoKCi0gKHZvaWQg Kilwcm9iZVJhdzogYW5PYmplY3Q7CgoKCi0gKHZvaWQgKilwcm9iZUFzUG9pbnRlcjogYW5PYmpl Y3Q7CgoKLSBwcm9iZU9iamVjdDogYW5PYmplY3Q7CgoKCi0gKGludClwcm9iZUFzSW50OiBhbk9i amVjdDsKCgoKLSAoZG91YmxlKXByb2JlQXNEb3VibGU6IGFuT2JqZWN0OwoKCgotIChjb25zdCBj aGFyICopcHJvYmVBc1N0cmluZzogYW5PYmplY3QgQnVmZmVyOiAoY2hhciAqKWJ1ZmZlcjsKCgoK CgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAg ICAgICAgICAgIFBhZ2UgICA4MwoKCgoKCi0gKGlkIDxTdHJpbmc+KXByb2JlQXNTdHJpbmc6IGFu T2JqZWN0OwoKCgoKCgotIChjb25zdCBjaGFyICopcHJvYmVBc1N0cmluZzogYW5PYmplY3QKICAg ICAgICAgICAgICAgICAgICAgICBCdWZmZXI6IChjaGFyICopYnVmCiAgICAgICAgICAgIHdpdGhG dWxsUHJlY2lzaW9uOiAoQk9PTClwcmVjaXNpb247CgoKLSAodW5zaWduZWQpZ2V0UmFuazsKCgot IChjb25zdCBjaGFyICopZ2V0QmFzZVR5cGU7CgoKCi0gKHVuc2lnbmVkICopZ2V0RGltczsKCgoK LSBpdGVyYXRlQXNEb3VibGU6IGFuT2JqZWN0IHVzaW5nOiAodm9pZCAoKikgKHVuc2lnbmVkIHJh bmssIHVuc2lnbmVkICp2ZWMsIGRvdWJsZSB2YWwpKWZ1bmM7CgoKCi0gaXRlcmF0ZUFzSW50ZWdl cjogYW5PYmplY3QgdXNpbmc6ICh2b2lkICgqKSAodW5zaWduZWQgcmFuaywgdW5zaWduZWQgKnZl YywgaW50IHZhbCkpZnVuYzsKCgoKLSAodm9pZClzZXREYXRhOiBhbk9iamVjdCBUbzogKHZvaWQg KiluZXdWYWx1ZTsKCgoKCgoKCi0gKEJPT0wpc2V0RGF0YTogYW5PYmplY3QgVG9TdHJpbmc6IChj b25zdCBjaGFyICopczsKCgoKLSAodm9pZClzZXREYXRhOiBhbk9iamVjdCBUb0RvdWJsZTogKGRv dWJsZSl2YWw7CgpleHRlcm4gaWQgPFN5bWJvbD4gRGVmYXVsdFN0cmluZywgQ2hhclN0cmluZywg SW50U3RyaW5nOwpAZW5kCgpAcHJvdG9jb2wgTWVzc2FnZVByb2JlIDxQcm9iZSwgQ1JFQVRBQkxF PgoKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJt Lm1pICAgICAgICAgICAgICAgIFBhZ2UgICA4NAoKCgoKCi0gX0lfQ3JlYXRpbmc7CgoKLSBzZXRQ cm9iZWRTZWxlY3RvcjogKFNFTClhU2VsOwoKCgoKCi0gc2V0UHJvYmVkTWV0aG9kTmFtZTogKGNv bnN0IGNoYXIgKiltZXRob2ROYW1lOwoKCisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNldFBy b2JlZFNlbGVjdG9yOiAoU0VMKWFTZWw7CgotIF9JX1NldHRpbmc7CgoKCgotIHNldEhpZGVSZXN1 bHQ6IChCT09MKXZhbDsKCi0gX0lfVXNpbmc7CgoKLSAoQk9PTClpc1Jlc3VsdElkOwoKCgotIChC T09MKWlzQXJndW1lbnRJZDogKHVuc2lnbmVkKXdoaWNoOwoKCgotIChjb25zdCBjaGFyICopZ2V0 UHJvYmVkTWVzc2FnZTsKCi0gKHVuc2lnbmVkKWdldEFyZ0NvdW50OwoKCi0gKHZhbF90KWdldEFy ZzogKHVuc2lnbmVkKXdoaWNoOwoKCgotIChjb25zdCBjaGFyICopZ2V0QXJnTmFtZTogKHVuc2ln bmVkKXdoaWNoOwoKCi0gKEJPT0wpZ2V0SGlkZVJlc3VsdDsKCgoKLSBzZXRBcmc6ICh1bnNpZ25l ZCl3aGljaCBUb1N0cmluZzogKGNvbnN0IGNoYXIgKil3aGF0OwoKCgoKCgoKCgoKCjIwMDEtMDgt MjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBh Z2UgICA4NQoKCgotIHNldEFyZzogKHVuc2lnbmVkKXdoaWNoIFRvVW5zaWduZWQ6ICh1bnNpZ25l ZCl4OwoKCgotICh2YWxfdClkeW5hbWljQ2FsbE9uOiB0YXJnZXQ7CgoKCgotIChkb3VibGUpZG91 YmxlRHluYW1pY0NhbGxPbjogdGFyZ2V0OwoKCgoKLSAobG9uZylsb25nRHluYW1pY0NhbGxPbjog dGFyZ2V0OwoKCgoKLSAoY29uc3QgY2hhciAqKXN0cmluZ0R5bmFtaWNDYWxsT246IHRhcmdldDsK CgoKCi0gb2JqZWN0RHluYW1pY0NhbGxPbjogdGFyZ2V0OwpAZW5kCgpAcHJvdG9jb2wgUHJvYmVN YXAgPFN3YXJtT2JqZWN0LCBQcm9iZUNvbmZpZywgQ1JFQVRBQkxFPgojIDMzMSAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2UuaCIKLSBfSV9DcmVhdGluZzsKCgoKLSBzZXRQcm9i ZWRDbGFzczogKENsYXNzKWNsYXNzOwoKLSBzZXRQcm9iZWRPYmplY3Q6IG9iamVjdDsKLSBfSV9V c2luZzsKCi0gKHVuc2lnbmVkKWdldENvdW50OwoKCgotIChDbGFzcylnZXRQcm9iZWRDbGFzczsK CgoKCi0gYWRkUHJvYmU6IChpZCA8UHJvYmU+KWFQcm9iZTsKCgoKCi0gYWRkUHJvYmVNYXA6IGFQ cm9iZU1hcDsKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVs U3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgIDg2CgoKCgoKLSBkcm9wUHJvYmVGb3JWYXJp YWJsZTogKGNvbnN0IGNoYXIgKilhVmFyaWFibGU7CgoKCgotIGRyb3BQcm9iZUZvck1lc3NhZ2U6 IChjb25zdCBjaGFyICopYU1lc3NhZ2U7CgoKCgoKLSBkcm9wUHJvYmVNYXA6IGFQcm9iZU1hcDsK CgoKLSAoaWQgPEluZGV4PiliZWdpbjogKGlkIDxab25lPilhWm9uZTsKCgoKCgoKLSBjbG9uZTog KGlkIDxab25lPilhWm9uZTsKCkBlbmQKCkBwcm90b2NvbCBTd2FybSA8U3dhcm1Qcm9jZXNzLCBD UkVBVEFCTEU+CgoKCgoKLSBfSV9Vc2luZzsKCgotIGJ1aWxkT2JqZWN0czsKCgotIGJ1aWxkQWN0 aW9uczsKIyA0MDggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmplY3RiYXNlLmgiCi0gKGlk IDxBY3Rpdml0eT4pYWN0aXZhdGVJbjogc3dhcm1Db250ZXh0OwoKCgotIChpZCA8UHJvYmVNYXA+ KWdldFByb2JlTWFwOwoKCi0gKGlkIDxQcm9iZU1hcD4pZ2V0Q29tcGxldGVQcm9iZU1hcDsKCgot IChpZCA8VmFyUHJvYmU+KWdldFByb2JlRm9yVmFyaWFibGU6IChjb25zdCBjaGFyICopYVZhcmlh YmxlOwpAZW5kCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVs U3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgIDg3CgoKQHByb3RvY29sIERlZmF1bHRQcm9i ZU1hcCA8UHJvYmVNYXAsIENSRUFUQUJMRT4KCgoKCgoKCkBlbmQKCkBwcm90b2NvbCBDdXN0b21Q cm9iZU1hcCA8UHJvYmVNYXAsIENSRUFUQUJMRT4KIyA0NDMgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9vYmplY3RiYXNlLmgiCi0gX0lfQ3JlYXRpbmc7CgoKCgoKKyBjcmVhdGU6IChpZCA8Wm9u ZT4pYVpvbmUgZm9yQ2xhc3M6IChDbGFzcylhQ2xhc3Mgd2l0aElkZW50aWZpZXJzOiAoY29uc3Qg Y2hhciAqKXZhcnMsIC4uLjsKLSBfSV9TZXR0aW5nOwoKCi0gYWRkUHJvYmVzRm9yQ2xhc3M6IChD bGFzcykgYUNsYXNzCiAgICB3aXRoSWRlbnRpZmllcnM6IChjb25zdCBjaGFyICopdmFycywgLi4u OwotIF9JX1VzaW5nOwpAZW5kCgpAcHJvdG9jb2wgRW1wdHlQcm9iZU1hcCA8Q3VzdG9tUHJvYmVN YXAsIENSRUFUQUJMRT4KCgoKCi0gX0lfQ3JlYXRpbmc7CgorIGNyZWF0ZTogKGlkIDxab25lPilh Wm9uZSBmb3JDbGFzczogKENsYXNzKWFDbGFzczsKQGVuZAoKQHByb3RvY29sIENvbXBsZXRlUHJv YmVNYXAgPFByb2JlTWFwLCBDUkVBVEFCTEU+CgoKCgoKCgpAZW5kCgpAcHJvdG9jb2wgQ29tcGxl dGVWYXJNYXAgPFByb2JlTWFwLCBDUkVBVEFCTEU+CgoKCgoKQGVuZAoKQHByb3RvY29sIFByb2Jl TGlicmFyeSA8Q3JlYXRlLCBEcm9wLCBQcm9iZUNvbmZpZywgQ1JFQVRBQkxFPgoKCgoKCgoKMjAw MS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAg ICAgUGFnZSAgIDg4CgoKIyA0OTggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmplY3RiYXNl LmgiCi0gX0lfVXNpbmc7CiMgNTA3ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFz ZS5oIgotIHNldERpc3BsYXlQcmVjaXNpb246ICh1bnNpZ25lZCluU2lnRGlzcGxheTsKCgoKLSAo dW5zaWduZWQpZ2V0RGlzcGxheVByZWNpc2lvbjsKCgoKCgoKCi0gc2V0U2F2ZWRQcmVjaXNpb246 ICh1bnNpZ25lZCluU2lnU2F2ZWQ7CgoKCi0gKHVuc2lnbmVkKWdldFNhdmVkUHJlY2lzaW9uOwoK CgotIChCT09MKWlzUHJvYmVNYXBEZWZpbmVkRm9yOiAoQ2xhc3MpYUNsYXNzOwotIChCT09MKWlz UHJvYmVNYXBEZWZpbmVkRm9yT2JqZWN0OiBhbk9iamVjdDsKCgoKCgoKLSAoaWQgPFByb2JlTWFw PilnZXRQcm9iZU1hcEZvcjogKENsYXNzKWFDbGFzczsKLSAoaWQgPFByb2JlTWFwPilnZXRQcm9i ZU1hcEZvck9iamVjdDogYW5PYmplY3Q7CgoKCgoKLSAoaWQgPFByb2JlTWFwPilnZXRDb21wbGV0 ZVByb2JlTWFwRm9yOiAoQ2xhc3MpYUNsYXNzOwotIChpZCA8UHJvYmVNYXA+KWdldENvbXBsZXRl UHJvYmVNYXBGb3JPYmplY3Q6IGFuT2JqZWN0OwoKCgoKLSAoaWQgPFByb2JlTWFwPilnZXRDb21w bGV0ZVZhck1hcEZvcjogKENsYXNzKWFDbGFzczsKLSAoaWQgPFByb2JlTWFwPilnZXRDb21wbGV0 ZVZhck1hcEZvck9iamVjdDogYW5PYmplY3Q7CgoKCgoKCi0gKGlkIDxWYXJQcm9iZT4pZ2V0UHJv YmVGb3JWYXJpYWJsZTogKGNvbnN0IGNoYXIgKilhVmFyIGluQ2xhc3M6IChDbGFzcylhQ2xhc3M7 Ci0gKGlkIDxWYXJQcm9iZT4pZ2V0UHJvYmVGb3JWYXJpYWJsZTogKGNvbnN0IGNoYXIgKilhVmFy IGluT2JqZWN0OiBhbk9iamVjdDsKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAg ICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgIDg5CgoKCgoKCi0gKGlk IDxNZXNzYWdlUHJvYmU+KWdldFByb2JlRm9yTWVzc2FnZTogKGNvbnN0IGNoYXIgKilhTWVzc2Fn ZSBpbkNsYXNzOiAoQ2xhc3MpYUNsYXNzOwotIChpZCA8TWVzc2FnZVByb2JlPilnZXRQcm9iZUZv ck1lc3NhZ2U6IChjb25zdCBjaGFyICopYU1lc3NhZ2UgaW5PYmplY3Q6IGFuT2JqZWN0OwoKCgoK LSBzZXRQcm9iZU1hcDogKGlkIDxQcm9iZU1hcD4pYU1hcCBGb3I6IChDbGFzcylhQ2xhc3M7Ci0g c2V0UHJvYmVNYXA6IChpZCA8UHJvYmVNYXA+KWFNYXAgRm9yT2JqZWN0OiBhbk9iamVjdDsKCkBl bmQKCgpleHRlcm4gaWQgPFByb2JlTGlicmFyeT4gcHJvYmVMaWJyYXJ5OwoKQHByb3RvY29sIEFj dGl2aXR5Q29udHJvbCA8U3dhcm1PYmplY3QsIENSRUFUQUJMRT4KIyA1OTIgIi91c3IvbG9jYWwv c3dhcm0vaW5jbHVkZS9vYmplY3RiYXNlLmgiCi0gX0lfQ3JlYXRpbmc7CgotIF9JX1VzaW5nOwoK CgoKCi0gKHZvaWQpYXR0YWNoVG9BY3Rpdml0eTogKGlkIDxTY2hlZHVsZUFjdGl2aXR5PilhbkFj dGl2aXR5OwoKCgoKCgoKLSAoaWQgPFN5bWJvbD4pcnVuQWN0aXZpdHk7CgoKCgoKCi0gKGlkIDxT eW1ib2w+KXN0b3BBY3Rpdml0eTsKCgoKCgoKCi0gKGlkIDxTeW1ib2w+KW5leHRBY3Rpb247CgoK Ci0gKGlkIDxTeW1ib2w+KXN0ZXBBY3Rpb247CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAg ICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAgOTAKCgoKCgoK Ci0gKGlkIDxTeW1ib2w+KXN0ZXBVbnRpbDogKHRpbWV2YWxfdClzdG9wVGltZTsKCgoKCgotICh2 b2lkKXVwZGF0ZVN0YXRlVmFyOwoKCi0gKGlkIDxTeW1ib2w+KWdldFN0YXR1czsKCgotICh2b2lk KXRlcm1pbmF0ZTsKCgotIChpZCA8U2NoZWR1bGVBY3Rpdml0eT4pZ2V0QWN0aXZpdHk7CkBlbmQK CkBjbGFzcyBQcm9iZTsKQGNsYXNzIFZhclByb2JlOwpAY2xhc3MgTWVzc2FnZVByb2JlOwpAY2xh c3MgUHJvYmVNYXA7CkBjbGFzcyBEZWZhdWx0UHJvYmVNYXA7CkBjbGFzcyBDdXN0b21Qcm9iZU1h cDsKQGNsYXNzIEVtcHR5UHJvYmVNYXA7CkBjbGFzcyBDb21wbGV0ZVByb2JlTWFwOwpAY2xhc3Mg Q29tcGxldGVWYXJNYXA7CkBjbGFzcyBQcm9iZUxpYnJhcnk7CkBjbGFzcyBBY3Rpdml0eUNvbnRy b2w7CkBjbGFzcyBTd2FybTsKQGNsYXNzIFN3YXJtT2JqZWN0OwoKCmV4dGVybiBjb25zdCBjaGFy ICpzd2FybV92ZXJzaW9uOwojIDcgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmplY3RiYXNl L1N3YXJtLmgiIDIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkvU3dhcm1Q cm9jZXNzLmgiIDEKIyAxMiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5L1N3YXJt UHJvY2Vzcy5oIgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS9YQWN0aXZp dHkuaCIgMQojIDEyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkvWEFjdGl2aXR5 LmgiCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9DcmVhdGUuaCIgMQojIDEy ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0NyZWF0ZS5oIgojIDEgIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9kZWZvYmovQ3VzdG9taXplLmgiIDEKIyAxMiAiL3Vzci9sb2NhbC9z d2FybS9pbmNsdWRlL2RlZm9iai9DdXN0b21pemUuaCIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvZGVmb2JqL0RlZkNsYXNzLmgiIDEKIyAxMiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRl L2RlZm9iai9EZWZDbGFzcy5oIgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL09i amVjdC5oIiAxCiMgMTMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmovRGVmQ2xhc3Mu aCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMtYXBpLmgiIDEKIyAz NCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy1hcGkuaCIKIyAxICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLmgiIDEKIyAzNSAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL29iamMvb2JqYy1hcGkuaCIgMgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAg ICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgIDkxCgoKIyAxICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9oYXNoLmgiIDEKIyAzNiAiL3Vzci9sb2NhbC9z d2FybS9pbmNsdWRlL29iamMvb2JqYy1hcGkuaCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9vYmpjL3Roci5oIiAxCiMgNDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL3Ro ci5oIgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMuaCIgMQojIDQyICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy90aHIuaCIgMgojIDEgIi91c3IvbG9jYWwvc3dh cm0vaW5jbHVkZS9vYmpjL2V4dGVybnZhci5oIiAxCiMgNDMgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9vYmpjL3Roci5oIiAyCgoKCgpleHRlcm4gaW50IF9fb2JqY190aHJlYWRfZXhpdF9zdGF0 dXM7CiMgNTkgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL3Roci5oIgp0eXBlZGVmIHZv aWQgKiBvYmpjX3RocmVhZF90OwoKCnN0cnVjdCBvYmpjX211dGV4CnsKICB2b2xhdGlsZSBvYmpj X3RocmVhZF90IG93bmVyOwogIHZvbGF0aWxlIGludCBkZXB0aDsKICB2b2lkICogYmFja2VuZDsK fTsKdHlwZWRlZiBzdHJ1Y3Qgb2JqY19tdXRleCAqb2JqY19tdXRleF90OwoKCnN0cnVjdCBvYmpj X2NvbmRpdGlvbgp7CiAgdm9pZCAqIGJhY2tlbmQ7Cn07CnR5cGVkZWYgc3RydWN0IG9iamNfY29u ZGl0aW9uICpvYmpjX2NvbmRpdGlvbl90OwoKCm9iamNfbXV0ZXhfdCBvYmpjX211dGV4X2FsbG9j YXRlKHZvaWQpOwppbnQgb2JqY19tdXRleF9kZWFsbG9jYXRlKG9iamNfbXV0ZXhfdCBtdXRleCk7 CmludCBvYmpjX211dGV4X2xvY2sob2JqY19tdXRleF90IG11dGV4KTsKaW50IG9iamNfbXV0ZXhf dW5sb2NrKG9iamNfbXV0ZXhfdCBtdXRleCk7CmludCBvYmpjX211dGV4X3RyeWxvY2sob2JqY19t dXRleF90IG11dGV4KTsKCgpvYmpjX2NvbmRpdGlvbl90IG9iamNfY29uZGl0aW9uX2FsbG9jYXRl KHZvaWQpOwppbnQgb2JqY19jb25kaXRpb25fZGVhbGxvY2F0ZShvYmpjX2NvbmRpdGlvbl90IGNv bmRpdGlvbik7CmludCBvYmpjX2NvbmRpdGlvbl93YWl0KG9iamNfY29uZGl0aW9uX3QgY29uZGl0 aW9uLCBvYmpjX211dGV4X3QgbXV0ZXgpOwppbnQgb2JqY19jb25kaXRpb25fc2lnbmFsKG9iamNf Y29uZGl0aW9uX3QgY29uZGl0aW9uKTsKaW50IG9iamNfY29uZGl0aW9uX2Jyb2FkY2FzdChvYmpj X2NvbmRpdGlvbl90IGNvbmRpdGlvbik7CgoKb2JqY190aHJlYWRfdCBvYmpjX3RocmVhZF9kZXRh Y2goU0VMIHNlbGVjdG9yLCBpZCBvYmplY3QsIGlkIGFyZ3VtZW50KTsKdm9pZCBvYmpjX3RocmVh ZF95aWVsZCh2b2lkKTsKaW50IG9iamNfdGhyZWFkX2V4aXQodm9pZCk7CmludCBvYmpjX3RocmVh ZF9zZXRfcHJpb3JpdHkoaW50IHByaW9yaXR5KTsKaW50IG9iamNfdGhyZWFkX2dldF9wcmlvcml0 eSh2b2lkKTsKdm9pZCAqIG9iamNfdGhyZWFkX2dldF9kYXRhKHZvaWQpOwppbnQgb2JqY190aHJl YWRfc2V0X2RhdGEodm9pZCAqdmFsdWUpOwpvYmpjX3RocmVhZF90IG9iamNfdGhyZWFkX2lkKHZv aWQpOwojIDExMyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvdGhyLmgiCgoKCgoKCgoy MDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAg ICAgICBQYWdlICAgOTIKCgp0eXBlZGVmIHZvaWQgKCpvYmpjX3RocmVhZF9jYWxsYmFjaykoKTsK b2JqY190aHJlYWRfY2FsbGJhY2sgb2JqY19zZXRfdGhyZWFkX2NhbGxiYWNrKG9iamNfdGhyZWFk X2NhbGxiYWNrIGZ1bmMpOwoKCmludCBfX29iamNfaW5pdF90aHJlYWRfc3lzdGVtKHZvaWQpOwpp bnQgX19vYmpjX2ZpbmlfdGhyZWFkX3N5c3RlbSh2b2lkKTsKCgppbnQgX19vYmpjX211dGV4X2Fs bG9jYXRlKG9iamNfbXV0ZXhfdCBtdXRleCk7CmludCBfX29iamNfbXV0ZXhfZGVhbGxvY2F0ZShv YmpjX211dGV4X3QgbXV0ZXgpOwppbnQgX19vYmpjX211dGV4X2xvY2sob2JqY19tdXRleF90IG11 dGV4KTsKaW50IF9fb2JqY19tdXRleF90cnlsb2NrKG9iamNfbXV0ZXhfdCBtdXRleCk7CmludCBf X29iamNfbXV0ZXhfdW5sb2NrKG9iamNfbXV0ZXhfdCBtdXRleCk7CgoKaW50IF9fb2JqY19jb25k aXRpb25fYWxsb2NhdGUob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24pOwppbnQgX19vYmpjX2Nv bmRpdGlvbl9kZWFsbG9jYXRlKG9iamNfY29uZGl0aW9uX3QgY29uZGl0aW9uKTsKaW50IF9fb2Jq Y19jb25kaXRpb25fd2FpdChvYmpjX2NvbmRpdGlvbl90IGNvbmRpdGlvbiwgb2JqY19tdXRleF90 IG11dGV4KTsKaW50IF9fb2JqY19jb25kaXRpb25fYnJvYWRjYXN0KG9iamNfY29uZGl0aW9uX3Qg Y29uZGl0aW9uKTsKaW50IF9fb2JqY19jb25kaXRpb25fc2lnbmFsKG9iamNfY29uZGl0aW9uX3Qg Y29uZGl0aW9uKTsKCgpvYmpjX3RocmVhZF90IF9fb2JqY190aHJlYWRfZGV0YWNoKHZvaWQgKCpm dW5jKSh2b2lkICphcmcpLCB2b2lkICphcmcpOwppbnQgX19vYmpjX3RocmVhZF9zZXRfcHJpb3Jp dHkoaW50IHByaW9yaXR5KTsKaW50IF9fb2JqY190aHJlYWRfZ2V0X3ByaW9yaXR5KHZvaWQpOwp2 b2lkIF9fb2JqY190aHJlYWRfeWllbGQodm9pZCk7CmludCBfX29iamNfdGhyZWFkX2V4aXQodm9p ZCk7Cm9iamNfdGhyZWFkX3QgX19vYmpjX3RocmVhZF9pZCh2b2lkKTsKaW50IF9fb2JqY190aHJl YWRfc2V0X2RhdGEodm9pZCAqdmFsdWUpOwp2b2lkICogX19vYmpjX3RocmVhZF9nZXRfZGF0YSh2 b2lkKTsKIyAzNyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy1hcGkuaCIgMgoj IDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9p bmNsdWRlL3N0ZGlvLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9v YmpjLWFwaS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDExMCAiL3Vzci9sb2NhbC9nY2Mz L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkYXJnLmgiIDMK dHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OwojIDM5ICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvb2JqYy9vYmpjLWFwaS5oIiAyCgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9v YmpjL2V4dGVybnZhci5oIiAxCiMgNDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29i amMtYXBpLmgiIDIKIyA1MCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy1hcGku aCIKc3RydWN0IG9iamNfbWV0aG9kX2Rlc2NyaXB0aW9uCnsKICAgIFNFTCBuYW1lOwogICAgY2hh ciAqdHlwZXM7Cn07CiMgMTA2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLWFw aS5oIgpleHRlcm4gdm9pZCBvYmpjX2Vycm9yIChpZCBvYmplY3QsIGludCBjb2RlLCBjb25zdCBj aGFyKiBmbXQsIC4uLik7CmV4dGVybiB2b2lkIG9iamNfdmVycm9yIChpZCBvYmplY3QsIGludCBj b2RlLCBjb25zdCBjaGFyKiBmbXQsIHZhX2xpc3QgYXApOwp0eXBlZGVmIEJPT0wgKCpvYmpjX2Vy cm9yX2hhbmRsZXIpIChpZCwgaW50IGNvZGUsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCk7 Cm9iamNfZXJyb3JfaGFuZGxlciBvYmpjX3NldF9lcnJvcl9oYW5kbGVyIChvYmpjX2Vycm9yX2hh bmRsZXIgZnVuYyk7CiMgMTQ3ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLWFw aS5oIgpzdHJ1Y3Qgb2JqY19zdGF0aWNfaW5zdGFuY2VzCnsKICBjaGFyICpjbGFzc19uYW1lOwog IGlkIGluc3RhbmNlc1swXTsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQ cGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgICA5MwoKCn07CiMgMTYyICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLWFwaS5oIgp0eXBlZGVmIHN0cnVjdCBvYmpj X3N5bXRhYiB7CiAgdW5zaWduZWQgbG9uZyBzZWxfcmVmX2NudDsKICBTRUwgcmVmczsKICB1bnNp Z25lZCBzaG9ydCBjbHNfZGVmX2NudDsKCiAgdW5zaWduZWQgc2hvcnQgY2F0X2RlZl9jbnQ7CgoK CiAgdm9pZCAqZGVmc1sxXTsKCgoKCgp9IFN5bXRhYiwgKlN5bXRhYl90OwojIDE4OSAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy1hcGkuaCIKdHlwZWRlZiBzdHJ1Y3Qgb2JqY19t b2R1bGUgewogIHVuc2lnbmVkIGxvbmcgdmVyc2lvbjsKICB1bnNpZ25lZCBsb25nIHNpemU7CiAg Y29uc3QgY2hhciogbmFtZTsKCgoKICBTeW10YWJfdCBzeW10YWI7CgoKCgoKfSBNb2R1bGUsICpN b2R1bGVfdDsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3Qgb2JqY19pdmFyKiBJdmFyX3Q7CnR5cGVkZWYg c3RydWN0IG9iamNfaXZhcl9saXN0IHsKICBpbnQgaXZhcl9jb3VudDsKCgoKCiAgc3RydWN0IG9i amNfaXZhciB7CiAgICBjb25zdCBjaGFyKiBpdmFyX25hbWU7CgoKICAgIGNvbnN0IGNoYXIqIGl2 YXJfdHlwZTsKCgogICAgaW50IGl2YXJfb2Zmc2V0OwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAgOTQK CgoKICB9IGl2YXJfbGlzdFsxXTsKCn0gSXZhckxpc3QsICpJdmFyTGlzdF90OwojIDI0MCAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy1hcGkuaCIKc3RydWN0IG9iamNfbWV0aG9k IHsKICBTRUwgbWV0aG9kX25hbWU7CgoKCgoKICBjb25zdCBjaGFyKiBtZXRob2RfdHlwZXM7CgoK ICBJTVAgbWV0aG9kX2ltcDsKCn07Cgp0eXBlZGVmIHN0cnVjdCBvYmpjX21ldGhvZCBNZXRob2Q7 Cgp0eXBlZGVmIE1ldGhvZCogTWV0aG9kX3Q7CnR5cGVkZWYgc3RydWN0IG9iamNfbWV0aG9kX2xp c3QgewogIHN0cnVjdCBvYmpjX21ldGhvZF9saXN0KiBtZXRob2RfbmV4dDsKCgogIGludCBtZXRo b2RfY291bnQ7CgogIHN0cnVjdCBvYmpjX21ldGhvZCBtZXRob2RfbGlzdFsxXTsKCn0gTWV0aG9k TGlzdCwgKk1ldGhvZExpc3RfdDsKCnN0cnVjdCBvYmpjX3Byb3RvY29sX2xpc3QgewogIHN0cnVj dCBvYmpjX3Byb3RvY29sX2xpc3QgKm5leHQ7CiAgaW50IGNvdW50OwogIFByb3RvY29sICpsaXN0 WzFdOwp9OwojIDMyNCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy1hcGkuaCIK dHlwZWRlZiBzdHJ1Y3Qgb2JqY19jYXRlZ29yeSB7CiAgY29uc3QgY2hhciogY2F0ZWdvcnlfbmFt ZTsKCgogIGNvbnN0IGNoYXIqIGNsYXNzX25hbWU7CgogIE1ldGhvZExpc3RfdCBpbnN0YW5jZV9t ZXRob2RzOwoKCgogIE1ldGhvZExpc3RfdCBjbGFzc19tZXRob2RzOwoKCgogIHN0cnVjdCBvYmpj X3Byb3RvY29sX2xpc3QgKnByb3RvY29sczsKCn0gQ2F0ZWdvcnksICpDYXRlZ29yeV90OwoKCgoK CgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAg ICAgICAgICAgIFBhZ2UgICA5NQoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3Qgb2JqY19zdXBlciB7CiAg aWQgc2VsZjsKCiAgQ2xhc3MgY2xhc3M7Cn0gU3VwZXIsICpTdXBlcl90OwoKSU1QIG9iamNfbXNn X2xvb2t1cF9zdXBlcihTdXBlcl90IHN1cGVyLCBTRUwgc2VsKTsKCgpyZXR2YWxfdCBvYmpjX21z Z19zZW5kdihpZCwgU0VMLCBhcmdsaXN0X3QpOwojIDM2NyAiL3Vzci9sb2NhbC9zd2FybS9pbmNs dWRlL29iamMvb2JqYy1hcGkuaCIKZXh0ZXJuIENsYXNzICgqX29iamNfbG9va3VwX2NsYXNzKSAo Y29uc3QgY2hhciAqbmFtZSk7CgoKCgoKCgpleHRlcm4gdm9pZCAoKl9vYmpjX2xvYWRfY2FsbGJh Y2spIChDbGFzcyBjbGFzcywgQ2F0ZWdvcnkqIGNhdGVnb3J5KTsKCgoKCmV4dGVybiBpZCAoKl9v YmpjX29iamVjdF9hbGxvYykgKENsYXNzIGNsYXNzKTsKZXh0ZXJuIGlkICgqX29iamNfb2JqZWN0 X2NvcHkpIChpZCBvYmplY3QpOwpleHRlcm4gaWQgKCpfb2JqY19vYmplY3RfZGlzcG9zZSkgKGlk IG9iamVjdCk7CgoKCgoKCgp2b2lkICpvYmpjX21hbGxvYyAoc2l6ZV90IHNpemUpOwoKdm9pZCAq b2JqY19hdG9taWNfbWFsbG9jIChzaXplX3Qgc2l6ZSk7Cgp2b2lkICpvYmpjX3ZhbGxvYyAoc2l6 ZV90IHNpemUpOwoKdm9pZCAqb2JqY19yZWFsbG9jICh2b2lkICptZW0sIHNpemVfdCBzaXplKTsK CnZvaWQgKm9iamNfY2FsbG9jIChzaXplX3QgbmVsZW0sIHNpemVfdCBzaXplKTsKCnZvaWQgb2Jq Y19mcmVlICh2b2lkICptZW0pOwojIDQxMiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMv b2JqYy1hcGkuaCIKZXh0ZXJuIHZvaWQgKigqX29iamNfbWFsbG9jKSAoc2l6ZV90KTsKZXh0ZXJu IHZvaWQgKigqX29iamNfYXRvbWljX21hbGxvYykgKHNpemVfdCk7CmV4dGVybiB2b2lkICooKl9v YmpjX3ZhbGxvYykgKHNpemVfdCk7CmV4dGVybiB2b2lkICooKl9vYmpjX3JlYWxsb2MpICh2b2lk ICosIHNpemVfdCk7CmV4dGVybiB2b2lkICooKl9vYmpjX2NhbGxvYykgKHNpemVfdCwgc2l6ZV90 KTsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1p ICAgICAgICAgICAgICAgIFBhZ2UgICA5NgoKCmV4dGVybiB2b2lkICgqX29iamNfZnJlZSkgKHZv aWQgKik7CgpNZXRob2RfdCBjbGFzc19nZXRfY2xhc3NfbWV0aG9kIChNZXRhQ2xhc3MgY2xhc3Ms IFNFTCBhU2VsKTsKCk1ldGhvZF90IGNsYXNzX2dldF9pbnN0YW5jZV9tZXRob2QgKENsYXNzIGNs YXNzLCBTRUwgYVNlbCk7CgpDbGFzcyBjbGFzc19wb3NlX2FzIChDbGFzcyBpbXBvc3RvciwgQ2xh c3Mgc3VwZXJjbGFzcyk7CgpDbGFzcyBvYmpjX2dldF9jbGFzcyAoY29uc3QgY2hhciAqbmFtZSk7 CgpDbGFzcyBvYmpjX2xvb2t1cF9jbGFzcyAoY29uc3QgY2hhciAqbmFtZSk7CgpDbGFzcyBvYmpj X25leHRfY2xhc3MgKHZvaWQgKiplbnVtX3N0YXRlKTsKCmNvbnN0IGNoYXIgKnNlbF9nZXRfbmFt ZSAoU0VMIHNlbGVjdG9yKTsKCmNvbnN0IGNoYXIgKnNlbF9nZXRfdHlwZSAoU0VMIHNlbGVjdG9y KTsKClNFTCBzZWxfZ2V0X3VpZCAoY29uc3QgY2hhciAqbmFtZSk7CgpTRUwgc2VsX2dldF9hbnlf dWlkIChjb25zdCBjaGFyICpuYW1lKTsKClNFTCBzZWxfZ2V0X2FueV90eXBlZF91aWQgKGNvbnN0 IGNoYXIgKm5hbWUpOwoKU0VMIHNlbF9nZXRfdHlwZWRfdWlkIChjb25zdCBjaGFyICpuYW1lLCBj b25zdCBjaGFyKik7CgpTRUwgc2VsX3JlZ2lzdGVyX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpOwoK U0VMIHNlbF9yZWdpc3Rlcl90eXBlZF9uYW1lIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFy KnR5cGUpOwoKCkJPT0wgc2VsX2lzX21hcHBlZCAoU0VMIGFTZWwpOwoKZXh0ZXJuIGlkIGNsYXNz X2NyZWF0ZV9pbnN0YW5jZSAoQ2xhc3MgY2xhc3MpOwoKc3RhdGljIGlubGluZSBjb25zdCBjaGFy ICoKY2xhc3NfZ2V0X2NsYXNzX25hbWUgKENsYXNzIGNsYXNzKQp7CiAgcmV0dXJuICgoY2xhc3Mp JiYoKCgoY2xhc3MpLT5pbmZvKSAmIDB4MUwpID09IDB4MUwpKT9jbGFzcy0+bmFtZTooKGNsYXNz PT0oQ2xhc3MpMCk/Ik5pbCI6MCk7Cn0KCnN0YXRpYyBpbmxpbmUgbG9uZwpjbGFzc19nZXRfaW5z dGFuY2Vfc2l6ZSAoQ2xhc3MgY2xhc3MpCnsKICByZXR1cm4gKChjbGFzcykmJigoKChjbGFzcykt PmluZm8pICYgMHgxTCkgPT0gMHgxTCkpID8gY2xhc3MtPmluc3RhbmNlX3NpemUgOiAwOwp9Cgpz dGF0aWMgaW5saW5lIE1ldGFDbGFzcwpjbGFzc19nZXRfbWV0YV9jbGFzcyAoQ2xhc3MgY2xhc3Mp CnsKICByZXR1cm4gKChjbGFzcykmJigoKChjbGFzcyktPmluZm8pICYgMHgxTCkgPT0gMHgxTCkp ID8gY2xhc3MtPmNsYXNzX3BvaW50ZXIgOiAoQ2xhc3MpMDsKfQoKc3RhdGljIGlubGluZSBDbGFz cwpjbGFzc19nZXRfc3VwZXJfY2xhc3MgKENsYXNzIGNsYXNzKQp7CgoKCgoKCgoyMDAxLTA4LTI0 IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdl ICAgOTcKCgogIHJldHVybiAoKGNsYXNzKSYmKCgoKGNsYXNzKS0+aW5mbykgJiAweDFMKSA9PSAw eDFMKSkgPyBjbGFzcy0+c3VwZXJfY2xhc3MgOiAoQ2xhc3MpMDsKfQoKc3RhdGljIGlubGluZSBp bnQKY2xhc3NfZ2V0X3ZlcnNpb24gKENsYXNzIGNsYXNzKQp7CiAgcmV0dXJuICgoY2xhc3MpJiYo KCgoY2xhc3MpLT5pbmZvKSAmIDB4MUwpID09IDB4MUwpKSA/IGNsYXNzLT52ZXJzaW9uIDogLTE7 Cn0KCnN0YXRpYyBpbmxpbmUgQk9PTApjbGFzc19pc19jbGFzcyAoQ2xhc3MgY2xhc3MpCnsKICBy ZXR1cm4gKChjbGFzcykmJigoKChjbGFzcyktPmluZm8pICYgMHgxTCkgPT0gMHgxTCkpOwp9Cgpz dGF0aWMgaW5saW5lIEJPT0wKY2xhc3NfaXNfbWV0YV9jbGFzcyAoQ2xhc3MgY2xhc3MpCnsKICBy ZXR1cm4gKChjbGFzcykmJigoKChjbGFzcyktPmluZm8pICYgMHgyTCkgPT0gMHgyTCkpOwp9CgoK c3RhdGljIGlubGluZSB2b2lkCmNsYXNzX3NldF92ZXJzaW9uIChDbGFzcyBjbGFzcywgbG9uZyB2 ZXJzaW9uKQp7CiAgaWYgKCgoY2xhc3MpJiYoKCgoY2xhc3MpLT5pbmZvKSAmIDB4MUwpID09IDB4 MUwpKSkKICAgIGNsYXNzLT52ZXJzaW9uID0gdmVyc2lvbjsKfQoKc3RhdGljIGlubGluZSB2b2lk ICoKY2xhc3NfZ2V0X2djX29iamVjdF90eXBlIChDbGFzcyBjbGFzcykKewogIHJldHVybiAoKGNs YXNzKSYmKCgoKGNsYXNzKS0+aW5mbykgJiAweDFMKSA9PSAweDFMKSkgPyBjbGFzcy0+Z2Nfb2Jq ZWN0X3R5cGUgOiAoKHZvaWQgKikwKTsKfQoKCmV4dGVybiB2b2lkIGNsYXNzX2l2YXJfc2V0X2dj aW52aXNpYmxlIChDbGFzcyBjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIqIGl2YXJuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQk9PTCBnY0ludmlzaWJsZSk7CgpzdGF0aWMgaW5saW5lIElNUAptZXRob2Rf Z2V0X2ltcCAoTWV0aG9kX3QgbWV0aG9kKQp7CiAgcmV0dXJuIChtZXRob2QgIT0gKE1ldGhvZF90 KTApID8gbWV0aG9kLT5tZXRob2RfaW1wIDogKElNUCkgMDsKfQoKSU1QIGdldF9pbXAgKENsYXNz IGNsYXNzLCBTRUwgc2VsKTsKCgoKCgoKCmlkIG9iamVjdF9jb3B5IChpZCBvYmplY3QpOwoKCgoK CgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAg ICAgICAgICAgIFBhZ2UgICA5OAoKCmlkIG9iamVjdF9kaXNwb3NlIChpZCBvYmplY3QpOwoKc3Rh dGljIGlubGluZSBDbGFzcwpvYmplY3RfZ2V0X2NsYXNzIChpZCBvYmplY3QpCnsKICByZXR1cm4g KChvYmplY3QgIT0gKGlkKTApCiAgICAgICAgICA/ICgoKG9iamVjdC0+Y2xhc3NfcG9pbnRlcikm JigoKChvYmplY3QtPmNsYXNzX3BvaW50ZXIpLT5pbmZvKSAmIDB4MUwpID09IDB4MUwpKQogICAg ICAgICAgICAgPyBvYmplY3QtPmNsYXNzX3BvaW50ZXIKICAgICAgICAgICAgIDogKCgob2JqZWN0 LT5jbGFzc19wb2ludGVyKSYmKCgoKG9iamVjdC0+Y2xhc3NfcG9pbnRlciktPmluZm8pICYgMHgy TCkgPT0gMHgyTCkpCiAgICAgICAgICAgICAgICA/IChDbGFzcykgb2JqZWN0CiAgICAgICAgICAg ICAgICA6IChDbGFzcykwKSkKICAgICAgICAgIDogKENsYXNzKTApOwp9CgpzdGF0aWMgaW5saW5l IGNvbnN0IGNoYXIgKgpvYmplY3RfZ2V0X2NsYXNzX25hbWUgKGlkIG9iamVjdCkKewogIHJldHVy biAoKG9iamVjdCE9KGlkKTApID8gKCgob2JqZWN0LT5jbGFzc19wb2ludGVyKSYmKCgoKG9iamVj dC0+Y2xhc3NfcG9pbnRlciktPmluZm8pICYgMHgxTCkgPT0gMHgxTCkpCiAgICAgICAgICAgICAg ICAgICAgICAgICA/IG9iamVjdC0+Y2xhc3NfcG9pbnRlci0+bmFtZQogICAgICAgICAgICAgICAg ICAgICAgICAgOiAoKENsYXNzKSBvYmplY3QpLT5uYW1lKQogICAgICAgICAgICAgICAgICAgICAg IDoiTmlsIik7Cn0KCnN0YXRpYyBpbmxpbmUgTWV0YUNsYXNzCm9iamVjdF9nZXRfbWV0YV9jbGFz cyhpZCBvYmplY3QpCnsKICByZXR1cm4gKChvYmplY3QhPShpZCkwKSA/ICgoKG9iamVjdC0+Y2xh c3NfcG9pbnRlcikmJigoKChvYmplY3QtPmNsYXNzX3BvaW50ZXIpLT5pbmZvKSAmIDB4MUwpID09 IDB4MUwpKQogICAgICAgICAgICAgICAgICAgICAgICAgICA/IG9iamVjdC0+Y2xhc3NfcG9pbnRl ci0+Y2xhc3NfcG9pbnRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICgoKG9iamVjdC0+ Y2xhc3NfcG9pbnRlcikmJigoKChvYmplY3QtPmNsYXNzX3BvaW50ZXIpLT5pbmZvKSAmIDB4Mkwp ID09IDB4MkwpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG9iamVjdC0+Y2xhc3Nf cG9pbnRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6KENsYXNzKTApKQogICAgICAg ICAgOiAoQ2xhc3MpMCk7Cn0KCnN0YXRpYyBpbmxpbmUgQ2xhc3MKb2JqZWN0X2dldF9zdXBlcl9j bGFzcyAoaWQgb2JqZWN0KQp7CiAgcmV0dXJuICgob2JqZWN0IT0oaWQpMCkgPyAoKChvYmplY3Qt PmNsYXNzX3BvaW50ZXIpJiYoKCgob2JqZWN0LT5jbGFzc19wb2ludGVyKS0+aW5mbykgJiAweDFM KSA9PSAweDFMKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBvYmplY3QtPmNsYXNzX3Bv aW50ZXItPnN1cGVyX2NsYXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKCgob2JqZWN0 LT5jbGFzc19wb2ludGVyKSYmKCgoKG9iamVjdC0+Y2xhc3NfcG9pbnRlciktPmluZm8pICYgMHgy TCkgPT0gMHgyTCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgID8oKENsYXNzKSBvYmplY3Qp LT5zdXBlcl9jbGFzcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChDbGFzcykwKSkK ICAgICAgICAgIDogKENsYXNzKTApOwp9CgpzdGF0aWMgaW5saW5lIEJPT0wKb2JqZWN0X2lzX2Ns YXNzIChpZCBvYmplY3QpCnsKICByZXR1cm4gKCgoQ2xhc3MpIG9iamVjdCkmJigoKCgoQ2xhc3Mp IG9iamVjdCktPmluZm8pICYgMHgxTCkgPT0gMHgxTCkpOwp9CgpzdGF0aWMgaW5saW5lIEJPT0wK b2JqZWN0X2lzX2luc3RhbmNlKGlkIG9iamVjdCkKewogIHJldHVybiAob2JqZWN0ICE9IChpZCkw KSAmJiAoKG9iamVjdC0+Y2xhc3NfcG9pbnRlcikmJigoKChvYmplY3QtPmNsYXNzX3BvaW50ZXIp LT5pbmZvKSAmIDB4MUwpID09IDB4MUwpKTsKfQoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAg ICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgIDk5CgoKCnN0 YXRpYyBpbmxpbmUgQk9PTApvYmplY3RfaXNfbWV0YV9jbGFzcyAoaWQgb2JqZWN0KQp7CiAgcmV0 dXJuICgoKENsYXNzKSBvYmplY3QpJiYoKCgoKENsYXNzKSBvYmplY3QpLT5pbmZvKSAmIDB4Mkwp ID09IDB4MkwpKTsKfQoKc3RydWN0IHNhcnJheSogb2JqY19nZXRfdW5pbnN0YWxsZWRfZHRhYmxl ICh2b2lkKTsKIyAxNCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9EZWZDbGFzcy5o IiAyCgoKCgp0eXBlZGVmIHN0cnVjdCBjbGFzc0RhdGEgKmNsYXNzRGF0YV90Owp0eXBlZGVmIHN0 cnVjdCBtZXRob2REZWZzICptZXRob2REZWZzX3Q7CgoKCgpAaW50ZXJmYWNlIENsYXNzX3M6IE9i amVjdAp7CkBwdWJsaWMKICBDbGFzc19zICpzdXBlcmNsYXNzOwogIGNvbnN0IGNoYXIgKm5hbWU7 CiAgbG9uZyB2ZXJzaW9uOwogIHVuc2lnbmVkIGxvbmcgaW5mbzsKICBsb25nIGluc3RhbmNlU2l6 ZTsKICB2b2lkICppdmFyTGlzdDsKICB2b2lkICptZXRob2RMaXN0OwogIHN0cnVjdCBzYXJyYXkg KmR0YWJsZTsKfQoKCkBlbmQKCgoKCmV4dGVybiBjbGFzc0RhdGFfdCBfb2JqX2dldENsYXNzRGF0 YSAoQ2xhc3NfcyAqY2xhc3MpOwoKCgoKdm9pZCBfb2JqX2luaXRNZXRob2RJbnRlcmZhY2VzIChD bGFzc19zICpjbGFzcyk7CgoKCgoKCgpAaW50ZXJmYWNlIENyZWF0ZWRDbGFzc19zOiBDbGFzc19z CnsKQHB1YmxpYwogIENsYXNzX3MgKmRlZmluaW5nQ2xhc3M7CiAgaWQgbWV0YW9iamVjdHM7CgoK CgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAg ICAgICAgICAgICBQYWdlICAxMDAKCgp9CgorIGNyZWF0ZUJlZ2luOiBhWm9uZTsKLSBzZXROYW1l OiAoY29uc3QgY2hhciAqKWNsYXNzTmFtZTsKLSBzZXRDbGFzczogYUNsYXNzOwotIHNldFN1cGVy Y2xhc3M6IGFDbGFzczsKLSBzZXREZWZpbmluZ0NsYXNzOiBhQ2xhc3M7Ci0gYXQ6IChTRUwpYVNl bCBhZGRNZXRob2Q6IChJTVApYU1ldGhvZDsKLSBsaXNwSW5DcmVhdGU6IGV4cHI7Ci0gaGRmNUlu Q3JlYXRlOiBleHByOwotIGNyZWF0ZUVuZDsKLSAodm9pZCloZGY1T3V0U2hhbGxvdzogc3RyZWFt OwotICh2b2lkKWxpc3BPdXRTaGFsbG93OiBzdHJlYW07CkBlbmQKCkBpbnRlcmZhY2UgQmVoYXZp b3JQaGFzZV9zOiBDcmVhdGVkQ2xhc3Nfcwp7CkBwdWJsaWMKICBDbGFzc19zICpuZXh0UGhhc2U7 CiAgaWQgZmlsbGVyOwogIGlkIG1vcmVmaWxsZXI7Cn0KCi0gKHZvaWQpc2V0TmV4dFBoYXNlOiBh QmVoYXZpb3JQaGFzZTsKQGVuZAoKCgoKCgoKc3RydWN0IGNsYXNzRGF0YSB7CiAgaWQgKmNsYXNz SUQ7CiAgaWQgb3duZXI7CiAgaWQgdHlwZUltcGxlbWVudGVkOwogIEJlaGF2aW9yUGhhc2VfcyAq aW5pdGlhbFBoYXNlOwogIGlkIG1ldGFvYmplY3RzOwp9OwoKCgoKc3RydWN0IG1ldGhvZERlZnMg ewogIG1ldGhvZERlZnNfdCBuZXh0OwogIGlkIGludGVyZmFjZUlEOwogIE1ldGhvZF90IGZpcnN0 RW50cnk7CiAgaW50IGNvdW50Owp9OwojIDEzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVm b2JqL0N1c3RvbWl6ZS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9E ZWZPYmplY3QuaCIgMQojIDEzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0RlZk9i amVjdC5oIgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIgMQojIDE0ICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0RlZk9iamVjdC5oIiAyCgojIDEgIi91c3Iv bG9jYWwvc3dhcm0vaW5jbHVkZS9zd2FybWNvbmZpZy5oIiAxCgoKCgoKCgoyMDAxLTA4LTI0IDAx OjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAx MDEKCgojIDE2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0RlZk9iamVjdC5oIiAy CgpAY2xhc3MgT2JqZWN0RW50cnk7CgoKQGludGVyZmFjZSBPYmplY3RfczogT2JqZWN0IDxEZWZp bmVkQ2xhc3MsIFNlcmlhbGl6YXRpb24sIEdldE5hbWU+CnsKQHB1YmxpYwoKCiAgdW5zaWduZWQg emJpdHM7CiAgT2JqZWN0RW50cnkgKmZvcmVpZ25FbnRyeTsKfQojIDQxICIvdXNyL2xvY2FsL3N3 YXJtL2luY2x1ZGUvZGVmb2JqL0RlZk9iamVjdC5oIgotIChjb25zdCBjaGFyICopZ2V0TmFtZTsK KyAoQk9PTClyZXNwb25kc1RvOiAoU0VMKWFTZWw7Ci0gKEJPT0wpcmVzcG9uZHNUbzogKFNFTClh U2VsOworIChCT09MKWNvbmZvcm1zVG86IChQcm90b2NvbCAqKWFQcm90b2NvbDsKKyBnZXRDbGFz czsKLSBnZXRDbGFzczsKLSBnZXRab25lOwotICh2b2lkKWRyb3BBbGxvY2F0aW9uczogKEJPT0wp Y29tcG9uZW50QWxsb2M7Ci0gKHZvaWQpZHJvcDsKLSAocmVmX3QpYWRkUmVmOiAobm90aWZ5X3Qp bm90aWZ5RnVuY3Rpb24gd2l0aEFyZ3VtZW50OiAodm9pZCAqKWFyZzs7Ci0gKHZvaWQpcmVtb3Zl UmVmOiAocmVmX3QpcmVmVmFsOworIGdldFN1cGVyY2xhc3M7CisgKEJPT0wpaXNTdWJjbGFzczog YUNsYXNzOworICh2b2lkKXNldFR5cGVJbXBsZW1lbnRlZDogYVR5cGU7CisgZ2V0VHlwZUltcGxl bWVudGVkOworIGdldE93bmVyOworIChJTVApZ2V0TWV0aG9kRm9yOiAoU0VMKWFTZWw7CisgZ2V0 RGVmaW5pbmdDbGFzczsKKyBnZXROZXh0UGhhc2U7Cisgc2VsZjsKLSBnZXRUeXBlOwotIChpbnQp Y29tcGFyZTogYW5PYmplY3Q7Ci0gcGVyZm9ybTogKFNFTClhU2VsOwotIHBlcmZvcm06IChTRUwp YVNlbCB3aXRoOiBhbk9iamVjdDE7Ci0gcGVyZm9ybTogKFNFTClhU2VsIHdpdGg6IGFuT2JqZWN0 MSB3aXRoOiBhbk9iamVjdDI7Ci0gcGVyZm9ybTogKFNFTClhU2VsIHdpdGg6IGFuT2JqZWN0MSB3 aXRoOiBhbk9iamVjdDIgd2l0aDogYW5PYmplY3QzOwotICh2b2lkKXNldERpc3BsYXlOYW1lOiAo Y29uc3QgY2hhciAqKWFOYW1lOwotIChjb25zdCBjaGFyICopZ2V0RGlzcGxheU5hbWU7Ci0gKGNv bnN0IGNoYXIgKilnZXRPYmplY3ROYW1lOwotIChjb25zdCBjaGFyICopZ2V0VHlwZU5hbWU7Ci0g KHZvaWQpZGVzY3JpYmU6IG91dHB1dENoYXJTdHJlYW07Ci0gKHZvaWQpZGVzY3JpYmVJRDogb3V0 cHV0Q2hhclN0cmVhbTsKLSAodm9pZCl4cHJpbnQ7Ci0gKHZvaWQpeHByaW50aWQ7Ci0gKHZvaWQp eGZwcmludDsKLSAodm9pZCl4ZnByaW50aWQ7Ci0gbGlzcEluQ3JlYXRlOiBleHByOwotIGxpc3BJ bjogZXhwcjsKLSBoZGY1SW5DcmVhdGU6IGV4cHI7Ci0gaGRmNUluOiBleHByOwotICh2b2lkKWxp c3BPdXRWYXJzOiBzdHJlYW0gZGVlcDogKEJPT0wpZGVlcEZsYWc7Ci0gKHZvaWQpbGlzcE91dERl ZXA6IHN0cmVhbTsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2Rl bFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgIDEwMgoKCi0gKHZvaWQpbGlzcE91dFNoYWxs b3c6IHN0cmVhbTsKLSAodm9pZCloZGY1T3V0RGVlcDogaGRmNW9iajsKLSAodm9pZCloZGY1T3V0 U2hhbGxvdzogaGRmNW9iajsKLSAodm9pZCl1cGRhdGVBcmNoaXZlcjogYXJjaGl2ZXI7CkBlbmQK CmV4dGVybiBpZCBsaXNwSW4gKGlkIGFab25lLCBpZCBleHByKTsKCmV4dGVybiBCT09MIGxpc3BJ bkJvb2xlYW4gKGlkIGluZGV4KTsKZXh0ZXJuIGludCBsaXNwSW5JbnRlZ2VyIChpZCBpbmRleCk7 CmV4dGVybiBjb25zdCBjaGFyICpsaXNwSW5TdHJpbmcgKGlkIGluZGV4KTsKZXh0ZXJuIGlkIGxp c3BJbktleXdvcmQgKGlkIGluZGV4KTsKIyAxMjEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9k ZWZvYmovRGVmT2JqZWN0LmgiCmV4dGVybiBJTVAgZ2V0X2ltcCAoQ2xhc3MgY2xhc3MsIFNFTCBz ZWwpOwoKCgoKZXh0ZXJuIEJPT0wgcmVzcG9uZHNUbyAoaWQgYW5PYmplY3QsIFNFTCBhU2VsKTsK CgoKCgpleHRlcm4gSU1QIGdldE1ldGhvZEZvciAoaWQgYW5PYmplY3QsIFNFTCBhU2VsKTsKIyAx NTQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmovRGVmT2JqZWN0LmgiCnR5cGVkZWYg c3RydWN0IG1hcGFsbG9jICptYXBhbGxvY190OwoKc3RydWN0IG1hcGFsbG9jIHsKICB2b2lkICgq bWFwcGluZ0Z1bmN0aW9uKSAobWFwYWxsb2NfdCBtYXBhbGxvYywgQk9PTCBvYmplY3RBbGxvY2F0 aW9uKTsKICB2b2lkICphbGxvYzsKICBpZCA8U3ltYm9sPiBkZXNjcmlwdG9yOwogIGlkIHpvbmU7 CiAgc2l6ZV90IHNpemU7Cn07CiMgMTQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmov Q3VzdG9taXplLmgiIDIKIyAyNCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9DdXN0 b21pemUuaCIKZXh0ZXJuIGlkIENyZWF0aW5nLCBTZXR0aW5nLCBVc2luZywgQ3JlYXRpbmdPbmx5 LCBVc2luZ09ubHk7CgoKCgpAaW50ZXJmYWNlIEN1c3RvbWl6ZV9zOiBPYmplY3RfcwoKKyBjdXN0 b21pemVCZWdpbjogYVpvbmU7Ci0gY3VzdG9taXplRW5kOwotIGN1c3RvbWl6ZUNvcHk6IGFab25l OworIGN1c3RvbWl6ZUJlZ2luRW5kOiBhWm9uZTsKLSBfc2V0Q3JlYXRlQnlfOiAoQ2xhc3Mpc3Vi Y2xhc3MgbWVzc2FnZTogKFNFTCltZXNzYWdlU2VsZWN0b3IgdG86IGFuT2JqZWN0OwotICh2b2lk KV9zZXRDcmVhdGVCeUNvcHlfOwotICh2b2lkKV9zZXRDcmVhdGVCeU1lc3NhZ2VfOiAoU0VMKW1l c3NhZ2VTZWxlY3RvciB0bzogYW5PYmplY3Q7Ci0gKHZvaWQpX3NldENyZWF0ZUJ5TWVzc2FnZV86 IChTRUwpbWVzc2FnZVNlbGVjdG9yIHRvQ29weTogYW5PYmplY3Q7Ci0gKHZvaWQpX3NldFJlY3Vz dG9taXplXzogYW5PYmplY3Q7CisgKHZvaWQpc2V0VHlwZUltcGxlbWVudGVkOiBhVHlwZTsKQGVu ZAojIDU2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0N1c3RvbWl6ZS5oIgoKCgoK CgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAg ICAgICAgICAgUGFnZSAgMTAzCgoKZXh0ZXJuIGlubGluZSBCT09MCl9vYmpfY3VzdG9taXplIChp ZCBhbk9iamVjdCkKewogIHJldHVybiAoKCooQ2xhc3MgKikoYW5PYmplY3QpKS0+aW5mbyAmIDB4 MjAwKSAhPSAwOwp9CiMgODIgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmovQ3VzdG9t aXplLmgiCkBpbnRlcmZhY2UgQ3JlYXRlQnlfYzogT2JqZWN0X3MKewpAcHVibGljCiAgaWQgaW1w bGVtZW50ZWRUeXBlOwogIGlkIGNyZWF0ZVJlY2VpdmVyOwogIFNFTCBjcmVhdGVNZXNzYWdlOwog IElNUCBjcmVhdGVNZXRob2Q7CiAgaWQgcmVjdXN0b21pemU7Cn0KCi0gY3JlYXRlQmVnaW46IGFa b25lOwotIGN1c3RvbWl6ZUJlZ2luOiBhWm9uZTsKLSAodm9pZCltYXBBbGxvY2F0aW9uczogKG1h cGFsbG9jX3QpbWFwYWxsb2M7CkBlbmQKCkBpbnRlcmZhY2UgQ3JlYXRlX2J5Y29weTogQ3JlYXRl QnlfYwoKLSBjcmVhdGU6IGFab25lOwpAZW5kCgpAaW50ZXJmYWNlIENyZWF0ZV9ieXNlbmQ6IENy ZWF0ZUJ5X2MKCi0gY3JlYXRlOiBhWm9uZTsKQGVuZAoKQGludGVyZmFjZSBDcmVhdGVfYnlib3Ro OiBDcmVhdGVCeV9jCgotIGNyZWF0ZTogYVpvbmU7CkBlbmQKCgoKCmV4dGVybiBpbmxpbmUgQ2xh c3MKZ2V0TmV4dFBoYXNlIChpZCBhQ2xhc3MpCnsKICByZXR1cm4gKENsYXNzKSAoKEJlaGF2aW9y UGhhc2VfcyAqKSBhQ2xhc3MpLT5uZXh0UGhhc2U7Cn0KCgoKCmV4dGVybiBpbmxpbmUgdm9pZApz ZXROZXh0UGhhc2UgKGlkIGFuT2JqZWN0KQp7CiAgKihDbGFzcyAqKSBhbk9iamVjdCA9IChDbGFz cykgKCooQmVoYXZpb3JQaGFzZV9zICoqKSBhbk9iamVjdCktPm5leHRQaGFzZTsKfQojIDEzICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0NyZWF0ZS5oIiAyCgoKCgoKCgoKCjIwMDEt MDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAg IFBhZ2UgIDEwNAoKCgoKQGludGVyZmFjZSBDcmVhdGVEcm9wX3M6IEN1c3RvbWl6ZV9zCgorIGNy ZWF0ZTogYVpvbmU7CisgY3JlYXRlQmVnaW46IGFab25lOwotIGNyZWF0ZUVuZDsKQGVuZAoKQGlu dGVyZmFjZSBDcmVhdGVEcm9wOiBDcmVhdGVEcm9wX3MKCi0gY3JlYXRlRW5kOwpAZW5kCiMgMTMg Ii91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS9YQWN0aXZpdHkuaCIgMgojIDEgIi91 c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIiAxCiMgMTQgIi91c3IvbG9jYWwvc3dh cm0vaW5jbHVkZS9hY3Rpdml0eS9YQWN0aXZpdHkuaCIgMgoKCgoKQGludGVyZmFjZSBBY3Rpdml0 eV9jOiBPYmplY3RfcyA8QWN0aXZpdHk+CnsKQHB1YmxpYwogIEFjdGl2aXR5X2MgKm93bmVyQWN0 aXZpdHk7CiAgaWQgPEFjdGlvbj4gdG9wTGV2ZWxBY3Rpb247CiAgaWQgPFN5bWJvbD4gc3RhdHVz OwogIG1lbWJlcl90IGFjdGl2aXR5UmVmczsKCiAgQWN0aXZpdHlfYyAqcmVnaXN0ZXJlZE93bmVy QWN0aXZpdHk7CiAgaWQgYWN0aXZpdHlTZXQ7CiAgbWVtYmVyX3QgYWN0aXZpdHlTZXRSZWZzOwoK ICBpZCA8QWN0aXZpdHlJbmRleD4gY3VycmVudEluZGV4OwoKICBBY3Rpdml0eV9jICpjdXJyZW50 U3ViYWN0aXZpdHk7CiAgQk9PTCAoKmJyZWFrRnVuY3Rpb24pIChpZCk7CiAgQk9PTCBrZWVwRW1w dHlGbGFnOwp9CgotIChpZCA8U3ltYm9sPilydW47Ci0gKGlkIDxTeW1ib2w+KV9ydW5fOwotICh2 b2lkKXRlcm1pbmF0ZTsKLSAodm9pZClzdG9wOwotIChpZCA8U3ltYm9sPiluZXh0QWN0aW9uOwot IChpZCA8U3ltYm9sPilzdGVwQWN0aW9uOwotIChpZCA8U3ltYm9sPilnZXRTdGF0dXM7Ci0gKGlk IDxTeW1ib2w+KWdldEhvbGRUeXBlOwotIGdldEFjdGlvblR5cGU7Ci0gKGlkIDxBY3Rpb24+KWdl dEFjdGlvbjsKLSBfZ2V0U3ViYWN0aXZpdHlBY3Rpb25fOwotICh2b2lkKXNldE93bmVyQWN0aXZp dHk6IChpZCA8U3dhcm1BY3Rpdml0eT4pYVN3YXJtQWN0aXZpdHk7Ci0gKGlkIDxBY3Rpdml0eT4p Z2V0T3duZXJBY3Rpdml0eTsKLSAoaWQgPEFjdGl2aXR5PilnZXRDb250cm9sbGluZ0FjdGl2aXR5 OwotIChpZCA8QWN0aXZpdHk+KWdldFRvcExldmVsQWN0aXZpdHk7Ci0gKGlkIDxTd2FybUFjdGl2 aXR5PilnZXRTd2FybUFjdGl2aXR5OwotIChpZCA8U2NoZWR1bGVBY3Rpdml0eT4pZ2V0U2NoZWR1 bGVBY3Rpdml0eTsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2Rl bFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgIDEwNQoKCi0gZ2V0U3ViYWN0aXZpdGllczsK LSAodm9pZClzZXRTZXJpYWxNb2RlOiAoQk9PTClzZXJpYWxNb2RlOwotIChCT09MKWdldFNlcmlh bE1vZGU7Ci0gc2V0S2VlcEVtcHR5RmxhZzogKEJPT0wpa2VlcEVtcHR5RmxhZzsKLSAoaWQgPEFj dGl2aXR5PilnZXRDdXJyZW50U3ViYWN0aXZpdHk7Ci0gKHZvaWQpbWFwQWxsb2NhdGlvbnM6ICht YXBhbGxvY190KW1hcGFsbG9jOwotICh2b2lkKWRyb3A7Ci0gKHZvaWQpZGVzY3JpYmU6IG91dHB1 dENoYXJTdHJlYW07CkBlbmQKIyAxMyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5 L1N3YXJtUHJvY2Vzcy5oIiAyCgpAY2xhc3MgU3dhcm1BY3Rpdml0eV9jLCBTY2hlZHVsZUFjdGl2 aXR5X2M7CgpAaW50ZXJmYWNlIENTd2FybVByb2Nlc3M6IENyZWF0ZURyb3BfcyA8U3dhcm1Qcm9j ZXNzPgp7CkBwdWJsaWMKICBpZCBpbnRlcm5hbFpvbmU7CiAgaWQgc3luY1R5cGU7CiAgU3dhcm1B Y3Rpdml0eV9jICphY3Rpdml0eTsKfQoKLSAoc2l6ZV90KWdldFBhZ2VTaXplOwotIGFsbG9jSVZh cnM6IGFDbGFzczsKLSBjb3B5SVZhcnM6IGFuT2JqZWN0OwotICh2b2lkKWZyZWVJVmFyczogYW5P YmplY3Q7Ci0gYWxsb2NJVmFyc0NvbXBvbmVudDogYUNsYXNzOwotIGNvcHlJVmFyc0NvbXBvbmVu dDogYW5PYmplY3Q7Ci0gKHZvaWQpZnJlZUlWYXJzQ29tcG9uZW50OiBhbk9iamVjdDsKLSBnZXRD b21wb25lbnRab25lOwotICh2b2lkICopYWxsb2M6IChzaXplX3Qpc2l6ZTsKLSAodm9pZClmcmVl OiAodm9pZCAqKSBhQmxvY2s7Ci0gKHZvaWQgKilhbGxvY0Jsb2NrOiAoc2l6ZV90KXNpemU7Ci0g KHZvaWQpZnJlZUJsb2NrOiAodm9pZCAqKWFCbG9jayBibG9ja1NpemU6IChzaXplX3Qpc2l6ZTsK LSBnZXRQb3B1bGF0aW9uOwotICh2b2lkKSBkZXNjcmliZUZvckVhY2hJRDogKGlkKSBvdXRwdXRD aGFyU3RyZWFtOwotICh2b2lkKSBkZXNjcmliZUZvckVhY2g6IChpZCkgb3V0cHV0Q2hhclN0cmVh bTsKLSAoQk9PTClnZXRTdGFja2VkU3Viem9uZXM7Ci0gZ2V0UmVjbGFpbVBvbGljeTsKCgorIGNy ZWF0ZUJlZ2luOiBhWm9uZTsKLSAodm9pZClzZXRTeW5jaHJvbml6YXRpb25UeXBlOiBhU2NoZWR1 bGVUeXBlOwotICh2b2lkKXNldEludGVybmFsWm9uZVR5cGU6IGludGVybmFsWm9uZVR5cGU7Ci0g KHZvaWQpc2V0SW50ZXJuYWxUaW1lTXVsdGlwbGllcjogKHRpbWV2YWxfdClpbnRlcm5hbFRpbWVN dWx0aXBsaWVyOwotICh2b2lkKXNldFBhZ2VTaXplOiAoc2l6ZV90KXBhZ2VTaXplOwotIGNyZWF0 ZUVuZDsKLSAodGltZXZhbF90KWdldEludGVybmFsVGltZU11bHRpcGxpZXI7Ci0gZ2V0SW50ZXJu YWxab25lOwotIChpZCA8U3dhcm1BY3Rpdml0eT4pZ2V0QWN0aXZpdHk7Ci0gKGlkIDxTd2FybUFj dGl2aXR5PilnZXRTd2FybUFjdGl2aXR5OwotIGdldFN5bmNocm9uaXphdGlvblR5cGU7Ci0gYWN0 aXZhdGU7Ci0gYWN0aXZhdGU6IGFuQWN0aW9uVHlwZTsKLSBhdDogKHRpbWV2YWxfdCl0VmFsIGFj dGl2YXRlOiBhbkFjdGlvblR5cGU7Ci0gYXQ6IChpbnQpdGltZWJhc2UgOiAodGltZXZhbF90KXRW YWwgYWN0aXZhdGU6IGFuQWN0aW9uVHlwZTsKLSAoaWQgPEFjdGl2aXR5PilhY3RpdmF0ZUluOiBz d2FybUNvbnRleHQ7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9k ZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAxMDYKCgotICh2b2lkKW1hcEFsbG9jYXRp b25zOiAobWFwYWxsb2NfdCltYXBhbGxvYzsKLSAodm9pZClfcGVyZm9ybVBsYW5fOwpAZW5kCiMg OCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2UvU3dhcm0uaCIgMgoKQGludGVy ZmFjZSBTd2FybTogQ1N3YXJtUHJvY2VzcyA8U3dhcm0+CnsKfQoKCi0gYnVpbGRPYmplY3RzOwot IGJ1aWxkQWN0aW9uczsKLSBhY3RpdmF0ZUluOiBzd2FybUNvbnRleHQ7CgoKCi0gZ2V0UHJvYmVN YXA7Ci0gZ2V0Q29tcGxldGVQcm9iZU1hcDsKLSBnZXRQcm9iZUZvclZhcmlhYmxlOiAoY29uc3Qg Y2hhciAqKWFWYXJpYWJsZTsKCkBlbmQKIyA3ICJQcGxNb2RlbFN3YXJtLmgiIDIKIyAxICJDb3Vu dGVyLmgiIDEKCgoKCgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmplY3RiYXNlL1N3 YXJtT2JqZWN0LmgiIDEKIyA5ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFzZS9T d2FybU9iamVjdC5oIgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmovQ3JlYXRl LmgiIDEKIyAxMCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2UvU3dhcm1PYmpl Y3QuaCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmplY3RiYXNlLmgiIDEKIyAx MSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2UvU3dhcm1PYmplY3QuaCIgMgoK QGludGVyZmFjZSBTd2FybU9iamVjdDogQ3JlYXRlRHJvcCA8U3dhcm1PYmplY3Q+CnsKfQoKLSBn ZXRQcm9iZU1hcDsKLSBnZXRDb21wbGV0ZVByb2JlTWFwOwotIGdldFByb2JlRm9yVmFyaWFibGU6 IChjb25zdCBjaGFyICopYVZhcmlhYmxlOwotIGdldFByb2JlRm9yTWVzc2FnZTogKGNvbnN0IGNo YXIgKilhTWVzc2FnZTsKLSAodm9pZClldmVudE9jY3VycmVkT246IGFuT2JqZWN0CiAgICAgICAg ICAgICAgICAgICAgdmlhOiBhUHJvYmUKICAgICAgICAgIHdpdGhQcm9iZVR5cGU6IChjb25zdCBj aGFyICopYVByb2JlVHlwZQogICAgICAgICAgICAgICAgICAgICBvbjogKGNvbnN0IGNoYXIgKilw cm9iZWRFbGVtZW50CiAgICAgICAgICAgICAgICAgb2ZUeXBlOiAoY2hhcilkYXRhVHlwZQogICAg ICAgICAgICAgICB3aXRoRGF0YTogKHZvaWQgKilkYXRhOwpAZW5kCiMgNyAiQ291bnRlci5oIiAy CgoKCkBpbnRlcmZhY2UgQ291bnRlcjogU3dhcm1PYmplY3QKewoKCgoKCgoKMjAwMS0wOC0yNCAw MToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAg MTA3CgoKICBpbnQgdmFsdWU7CiAgaW50IGluY3I7Cn0KCi0gc3RlcDsKLSBzZXRJbmNyOiAoaW50 KSBuOwotIHByaW50OwoKQGVuZAojIDggIlBwbE1vZGVsU3dhcm0uaCIgMgojIDEgIlBlcnNvbi5o IiAxCiMgOSAiUGVyc29uLmgiCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamVjdGJh c2UvU3dhcm1PYmplY3QuaCIgMQojIDEwICJQZXJzb24uaCIgMgoKCnR5cGVkZWYgZW51bSB7CiAg bnVsbCA9IDAsCiAgaGVsbG8gPSAxLAp9IHRvcGljX3R5cGU7CgoKCgpAaW50ZXJmYWNlIFBlcnNv bjogU3dhcm1PYmplY3QKewogIGlkIHdvcmxkOwogIGZsb2F0IHRvcGljc1syXTsKICBpbnQgdmFs dWU7CiAgaWQgbmFtZTsKfQoKCi0gc3RlcDsKCgotIHNldFdvcmxkOiBsOwoKCi0gc2V0UGVyc29u OiBuIFRvcGljX2FycmF5OiAoZmxvYXQgKil0OwoKCi0gKGNvbnN0IGNoYXIgKilnZXROYW1lOwoK Ci0gcHJpbnQ7CgoKLSBzcGVhazogKHRvcGljX3R5cGUpIHRvcGljIFRvUGVyc29uOiAoaWQpdGFy Z2V0OwoKCi0gbG9vazsKCkBlbmQKIyA5ICJQcGxNb2RlbFN3YXJtLmgiIDIKCgoKCgoKCgoyMDAx LTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAg ICBQYWdlICAxMDgKCgpAaW50ZXJmYWNlIFBwbE1vZGVsU3dhcm06IFN3YXJtCnsKCiAgaW50IGlu Y3JlbWVudDsKCgoKICBpbnQgbnVtUHBsOwoKICBpZCBwcGxMaXN0OwoKICBpZCBtb2RlbEFjdGlv bnM7CiAgaWQgbW9kZWxTY2hlZHVsZTsKCgogIENvdW50ZXIgKmNvdW50ZXI7Cn0KCgotIChDb3Vu dGVyICopZ2V0Q291bnRlcjsKCisgY3JlYXRlQmVnaW46IGFab25lOwotIGNyZWF0ZUVuZDsKLSBi dWlsZE9iamVjdHM7Ci0gYnVpbGRBY3Rpb25zOwotIGFjdGl2YXRlSW46IChpZCkgc3dhcm1Db250 ZXh0OwoKQGVuZAojIDcgIlBwbE1vZGVsU3dhcm0ubSIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9yYW5kb20uaCIgMQojIDI0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvcmFuZG9t LmgiCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2UuaCIgMQojIDI1ICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvcmFuZG9tLmgiIDIKCgpAcHJvdG9jb2wgSW50ZXJuYWxT dGF0ZQojIDQwICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvcmFuZG9tLmgiCi0gX0lfVXNpbmc7 CgotICh1bnNpZ25lZClnZXRTdGF0ZVNpemU7Ci0gKHZvaWQpcHV0U3RhdGVJbnRvOiAodm9pZCAq KWJ1ZmZlcjsKLSAodm9pZClzZXRTdGF0ZUZyb206ICh2b2lkICopYnVmZmVyOwotICh1bnNpZ25l ZClnZXRNYWdpYzsKQGVuZAoKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvcmFuZG9tL2dl bmVyYXRvcnMuaCIgMQojIDI4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvcmFuZG9tL2dlbmVy YXRvcnMuaCIKQHByb3RvY29sIENvbW1vbkdlbmVyYXRvcgoKLSBfSV9DcmVhdGluZzsKKyBjcmVh dGVXaXRoRGVmYXVsdHM6IChpZCA8Wm9uZT4pYVpvbmU7CgotIF9JX1NldHRpbmc7CgoKLSBzZXRT dGF0ZUZyb21TZWVkOiAodW5zaWduZWQpc2VlZDsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAg ICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgIDEwOQoKCgoK Ci0gc2V0U3RhdGVGcm9tU2VlZHM6ICh1bnNpZ25lZCAqKXNlZWRzOwoKCgotIHNldEFudGl0aGV0 aWM6IChCT09MKSBhbnRpVDsKCi0gX0lfVXNpbmc7CgotIChCT09MKWdldEFudGl0aGV0aWM7CgoK Ci0gKHVuc2lnbmVkKWdldE1heFNlZWRWYWx1ZTsKCgoKLSAodW5zaWduZWQgKilnZXRNYXhTZWVk VmFsdWVzOwoKCgotICh1bnNpZ25lZClnZXRJbml0aWFsU2VlZDsKCgoKLSAodW5zaWduZWQgKiln ZXRJbml0aWFsU2VlZHM7CgoKCi0gKHVuc2lnbmVkKWxlbmd0aE9mU2VlZFZlY3RvcjsKCgoKLSBy ZXNldDsKCgoKLSAodW5zaWduZWQpZ2V0VW5zaWduZWRNYXg7CkBlbmQKCkBwcm90b2NvbCBTaW1w bGVHZW5lcmF0b3IKCi0gX0lfQ3JlYXRpbmc7CisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNl dFN0YXRlRnJvbVNlZWQ6ICh1bnNpZ25lZClzZWVkOwoKKyBjcmVhdGU6IChpZCA8Wm9uZT4pYVpv bmUgc2V0U3RhdGVGcm9tU2VlZHM6ICh1bnNpZ25lZCAqKXNlZWRzOwoKLSBfSV9Vc2luZzsKCgot ICh1bnNpZ25lZClnZXRVbnNpZ25lZFNhbXBsZTsKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEg ICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgIDExMAoK CgotIChmbG9hdClnZXRGbG9hdFNhbXBsZTsKCgoKCi0gKGRvdWJsZSlnZXRUaGluRG91YmxlU2Ft cGxlOwoKCgoKLSAoZG91YmxlKWdldERvdWJsZVNhbXBsZTsKCgoKCgotIChsb25nIGRvdWJsZSln ZXRMb25nRG91YmxlU2FtcGxlOwoKCi0gKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpZ2V0Q3VycmVu dENvdW50OwpAZW5kCgpAcHJvdG9jb2wgU3BsaXRHZW5lcmF0b3IKCi0gX0lfQ3JlYXRpbmc7Cisg Y3JlYXRlIDogKGlkIDxab25lPilhWm9uZQogICAgICAgICAgICAgIHNldEE6ICh1bnNpZ25lZClB CiAgICAgICAgICAgICAgc2V0VjogKHVuc2lnbmVkKXYKICAgICAgICAgICAgICBzZXRXOiAodW5z aWduZWQpdwogIHNldFN0YXRlRnJvbVNlZWQ6ICh1bnNpZ25lZClzZWVkOwoKKyBjcmVhdGUgOiAo aWQgPFpvbmU+KWFab25lCiAgICAgICAgICAgICAgc2V0QTogKHVuc2lnbmVkKUEKICAgICAgICAg ICAgICBzZXRWOiAodW5zaWduZWQpdgogICAgICAgICAgICAgIHNldFc6ICh1bnNpZ25lZCl3CiBz ZXRTdGF0ZUZyb21TZWVkczogKHVuc2lnbmVkICopc2VlZHM7CgotIF9JX1NldHRpbmc7CgoKLSBp bml0R2VuZXJhdG9yOiAodW5zaWduZWQpdkdlbjsKCgoKLSBpbml0QWxsOwoKLSBfSV9Vc2luZzsK CgoKCi0gKHVuc2lnbmVkKWdldE51bUdlbmVyYXRvcnM7CgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAx OjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAx MTEKCgotICh1bnNpZ25lZClnZXROdW1TZWdtZW50czsKCgoKLSAodW5zaWduZWQpZ2V0U2VnbWVu dExlbmd0aDsKCgoKLSByZXN0YXJ0R2VuZXJhdG9yOiAodW5zaWduZWQpdkdlbjsKCgoKLSBhZHZh bmNlR2VuZXJhdG9yOiAodW5zaWduZWQpdkdlbjsKCgoKLSBqdW1wR2VuZXJhdG9yOiAodW5zaWdu ZWQpdkdlbiB0b1NlZ21lbnQ6ICh1bnNpZ25lZCBsb25nIGxvbmcgaW50KXNlZzsKCgoKLSByZXN0 YXJ0QWxsOwoKCgotIGFkdmFuY2VBbGw7CgoKCi0ganVtcEFsbFRvU2VnbWVudDogKHVuc2lnbmVk IGxvbmcgbG9uZyBpbnQpc2VnOwoKCgoKLSAodW5zaWduZWQpZ2V0VW5zaWduZWRTYW1wbGU6ICh1 bnNpZ25lZCl2R2VuOwoKCgoKCi0gKGZsb2F0KWdldEZsb2F0U2FtcGxlOiAodW5zaWduZWQpdkdl bjsKCgoKCgotIChkb3VibGUpZ2V0VGhpbkRvdWJsZVNhbXBsZTogKHVuc2lnbmVkKXZHZW47CgoK CgoKLSAoZG91YmxlKWdldERvdWJsZVNhbXBsZTogKHVuc2lnbmVkKXZHZW47CgoKCgoKCgoKCgoK MjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAg ICAgICAgUGFnZSAgMTEyCgoKCgotIChsb25nIGRvdWJsZSlnZXRMb25nRG91YmxlU2FtcGxlOiAo dW5zaWduZWQpdkdlbjsKCgoKLSAodW5zaWduZWQgbG9uZyBsb25nIGludClnZXRDdXJyZW50U2Vn bWVudDogKHVuc2lnbmVkKXZHZW47CgoKCi0gKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpZ2V0Q3Vy cmVudENvdW50OiAodW5zaWduZWQpdkdlbjsKQGVuZAojIDIyOCAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL3JhbmRvbS9nZW5lcmF0b3JzLmgiCkBwcm90b2NvbCBCYXNpY1JhbmRvbUdlbmVyYXRv ciA8U3dhcm1PYmplY3QsIEludGVybmFsU3RhdGUsIENvbW1vbkdlbmVyYXRvcj4KCgoKQGVuZAoK QHByb3RvY29sIFNpbXBsZVJhbmRvbUdlbmVyYXRvciA8QmFzaWNSYW5kb21HZW5lcmF0b3IsIFNp bXBsZUdlbmVyYXRvcj4KCgoKCkBlbmQKCkBwcm90b2NvbCBTcGxpdFJhbmRvbUdlbmVyYXRvciA8 QmFzaWNSYW5kb21HZW5lcmF0b3IsIFNwbGl0R2VuZXJhdG9yPgoKCgoKCgpAZW5kCiMgMjU5ICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvcmFuZG9tL2dlbmVyYXRvcnMuaCIKQHByb3RvY29sIExD R2dlbiA8U2ltcGxlUmFuZG9tR2VuZXJhdG9yPgojIDI2OSAiL3Vzci9sb2NhbC9zd2FybS9pbmNs dWRlL3JhbmRvbS9nZW5lcmF0b3JzLmgiCkBlbmQKCkBwcm90b2NvbCBMQ0cxZ2VuIDxMQ0dnZW4s IENSRUFUQUJMRT4KCgoKCkBlbmQKCkBwcm90b2NvbCBMQ0cyZ2VuIDxMQ0dnZW4sIENSRUFUQUJM RT4KCgoKCkBlbmQKCkBwcm90b2NvbCBMQ0czZ2VuIDxMQ0dnZW4sIENSRUFUQUJMRT4KCgoKCgoK CgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAg ICAgICAgICAgUGFnZSAgMTEzCgoKCgpAZW5kCiMgMzAzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1 ZGUvcmFuZG9tL2dlbmVyYXRvcnMuaCIKQHByb3RvY29sIFBNTUxDR2dlbiA8U2ltcGxlUmFuZG9t R2VuZXJhdG9yPgoKCgpAZW5kCgpAcHJvdG9jb2wgUE1NTENHMWdlbiA8UE1NTENHZ2VuLCBDUkVB VEFCTEU+CgoKCgpAZW5kCgpAcHJvdG9jb2wgUE1NTENHMmdlbiA8UE1NTENHZ2VuLCBDUkVBVEFC TEU+CgoKCgpAZW5kCgpAcHJvdG9jb2wgUE1NTENHM2dlbiA8UE1NTENHZ2VuLCBDUkVBVEFCTEU+ CgoKCgpAZW5kCgpAcHJvdG9jb2wgUE1NTENHNGdlbiA8UE1NTENHZ2VuLCBDUkVBVEFCTEU+CgoK CgoKQGVuZAoKQHByb3RvY29sIFBNTUxDRzVnZW4gPFBNTUxDR2dlbiwgQ1JFQVRBQkxFPgoKCgoK CkBlbmQKCkBwcm90b2NvbCBQTU1MQ0c2Z2VuIDxQTU1MQ0dnZW4sIENSRUFUQUJMRT4KCgoKCgpA ZW5kCgpAcHJvdG9jb2wgUE1NTENHN2dlbiA8UE1NTENHZ2VuLCBDUkVBVEFCTEU+CgoKCgoKCgoy MDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAg ICAgICBQYWdlICAxMTQKCgoKCgoKCkBlbmQKCkBwcm90b2NvbCBQTU1MQ0c4Z2VuIDxQTU1MQ0dn ZW4sIENSRUFUQUJMRT4KCgoKCgpAZW5kCgpAcHJvdG9jb2wgUE1NTENHOWdlbiA8UE1NTENHZ2Vu LCBDUkVBVEFCTEU+CgoKCgoKQGVuZAoKCgpAcHJvdG9jb2wgQUNHZ2VuIDxTaW1wbGVSYW5kb21H ZW5lcmF0b3IsIENSRUFUQUJMRT4KIyAzOTEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9yYW5k b20vZ2VuZXJhdG9ycy5oIgpAZW5kCgpAcHJvdG9jb2wgU0NHZ2VuIDxTaW1wbGVSYW5kb21HZW5l cmF0b3IsIENSRUFUQUJMRT4KIyA0MDQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9yYW5kb20v Z2VuZXJhdG9ycy5oIgpAZW5kCgoKCkBwcm90b2NvbCBTV0JnZW4gPFNpbXBsZVJhbmRvbUdlbmVy YXRvcj4KCgoKCgoKCkBlbmQKCkBwcm90b2NvbCBTV0IxZ2VuIDxTV0JnZW4sIENSRUFUQUJMRT4K CgoKCkBlbmQKCkBwcm90b2NvbCBTV0IyZ2VuIDxTV0JnZW4sIENSRUFUQUJMRT4KCgoKCgoKCgoK CjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAg ICAgICAgIFBhZ2UgIDExNQoKCgpAZW5kCgpAcHJvdG9jb2wgU1dCM2dlbiA8U1dCZ2VuLCBDUkVB VEFCTEU+CgoKCgpAZW5kCgoKQHByb3RvY29sIFBTV0JnZW4gPFNpbXBsZVJhbmRvbUdlbmVyYXRv ciwgQ1JFQVRBQkxFPgoKCgoKQGVuZAoKCgpAcHJvdG9jb2wgTVdDQWdlbiA8U2ltcGxlUmFuZG9t R2VuZXJhdG9yLCBDUkVBVEFCTEU+CgoKCgpAZW5kCgpAcHJvdG9jb2wgTVdDQmdlbiA8U2ltcGxl UmFuZG9tR2VuZXJhdG9yLCBDUkVBVEFCTEU+CgoKCgoKQGVuZAoKCkBwcm90b2NvbCBSV0MyZ2Vu IDxTaW1wbGVSYW5kb21HZW5lcmF0b3IsIENSRUFUQUJMRT4KCgoKQGVuZAoKCkBwcm90b2NvbCBS V0M4Z2VuIDxTaW1wbGVSYW5kb21HZW5lcmF0b3IsIENSRUFUQUJMRT4KCgoKCkBlbmQKCgpAcHJv dG9jb2wgVEdGU1JnZW4gPFNpbXBsZVJhbmRvbUdlbmVyYXRvcj4KCgoKCgoKCgoKCgoyMDAxLTA4 LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQ YWdlICAxMTYKCgpAZW5kCgpAcHJvdG9jb2wgVFQ0MDNnZW4gPFRHRlNSZ2VuLCBDUkVBVEFCTEU+ CgoKCkBlbmQKCkBwcm90b2NvbCBUVDc3NWdlbiA8VEdGU1JnZW4sIENSRUFUQUJMRT4KCgoKQGVu ZAoKQHByb3RvY29sIFRUODAwZ2VuIDxUR0ZTUmdlbiwgQ1JFQVRBQkxFPgoKCgpAZW5kCgoKQHBy b3RvY29sIE1UMTk5MzdnZW4gPFNpbXBsZVJhbmRvbUdlbmVyYXRvciwgQ1JFQVRBQkxFPgoKCgpA ZW5kCgoKQHByb3RvY29sIE1SR2dlbiA8U2ltcGxlUmFuZG9tR2VuZXJhdG9yPgoKCgoKCgoKQGVu ZAoKQHByb3RvY29sIE1SRzVnZW4gPE1SR2dlbiwgQ1JFQVRBQkxFPgoKCgoKQGVuZAoKQHByb3Rv Y29sIE1SRzZnZW4gPE1SR2dlbiwgQ1JFQVRBQkxFPgoKCgoKQGVuZAoKQHByb3RvY29sIE1SRzdn ZW4gPE1SR2dlbiwgQ1JFQVRBQkxFPgoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAg ICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgMTE3CgoKCkBlbmQK CgpAcHJvdG9jb2wgQzJUQVVTZ2VuIDxTaW1wbGVSYW5kb21HZW5lcmF0b3I+CgoKCgpAZW5kCgpA cHJvdG9jb2wgQzJUQVVTMWdlbiA8QzJUQVVTZ2VuLCBDUkVBVEFCTEU+CgoKCgoKCkBlbmQKCkBw cm90b2NvbCBDMlRBVVMyZ2VuIDxDMlRBVVNnZW4sIENSRUFUQUJMRT4KCgoKCgoKQGVuZAoKQHBy b3RvY29sIEMyVEFVUzNnZW4gPEMyVEFVU2dlbiwgQ1JFQVRBQkxFPgoKCgoKCgpAZW5kCgoKQHBy b3RvY29sIEMyTVJHM2dlbiA8U2ltcGxlUmFuZG9tR2VuZXJhdG9yLCBDUkVBVEFCTEU+CgoKCgoK CgpAZW5kCgoKQHByb3RvY29sIEMzTVdDZ2VuIDxTaW1wbGVSYW5kb21HZW5lcmF0b3IsIENSRUFU QUJMRT4KCgoKCkBlbmQKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxN b2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgIDExOAoKCiMgNjE0ICIvdXNyL2xvY2Fs L3N3YXJtL2luY2x1ZGUvcmFuZG9tL2dlbmVyYXRvcnMuaCIKQHByb3RvY29sIEMyTENHWGdlbiA8 U3BsaXRSYW5kb21HZW5lcmF0b3IsIENSRUFUQUJMRT4KIyA2MjQgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9yYW5kb20vZ2VuZXJhdG9ycy5oIgpAZW5kCgoKQHByb3RvY29sIEM0TENHWGdlbiA8 U3BsaXRSYW5kb21HZW5lcmF0b3IsIENSRUFUQUJMRT4KCgoKCgpAZW5kCiMgNjUyICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvcmFuZG9tL2dlbmVyYXRvcnMuaCIKQGNsYXNzIExDRzFnZW47CkBj bGFzcyBMQ0cyZ2VuOwpAY2xhc3MgTENHM2dlbjsKQGNsYXNzIFBNTUxDRzFnZW47CkBjbGFzcyBQ TU1MQ0cyZ2VuOwpAY2xhc3MgUE1NTENHM2dlbjsKQGNsYXNzIFBNTUxDRzRnZW47CkBjbGFzcyBQ TU1MQ0c1Z2VuOwpAY2xhc3MgUE1NTENHNmdlbjsKQGNsYXNzIFBNTUxDRzdnZW47CkBjbGFzcyBQ TU1MQ0c4Z2VuOwpAY2xhc3MgUE1NTENHOWdlbjsKCgoKQGNsYXNzIEFDR2dlbjsKQGNsYXNzIFND R2dlbjsKQGNsYXNzIFNXQjFnZW47CkBjbGFzcyBTV0IyZ2VuOwpAY2xhc3MgU1dCM2dlbjsKQGNs YXNzIFBTV0JnZW47CkBjbGFzcyBUVDQwM2dlbjsKQGNsYXNzIFRUNzc1Z2VuOwpAY2xhc3MgVFQ4 MDBnZW47CkBjbGFzcyBNVDE5OTM3Z2VuOwpAY2xhc3MgTVJHNWdlbjsKQGNsYXNzIE1SRzZnZW47 CkBjbGFzcyBNUkc3Z2VuOwpAY2xhc3MgTVdDQWdlbjsKQGNsYXNzIE1XQ0JnZW47CkBjbGFzcyBS V0MyZ2VuOwpAY2xhc3MgUldDOGdlbjsKCgoKQGNsYXNzIEMyVEFVUzFnZW47CkBjbGFzcyBDMlRB VVMyZ2VuOwpAY2xhc3MgQzJUQVVTM2dlbjsKCgoKQGNsYXNzIEMyTVJHM2dlbjsKCgoKCgoKCjIw MDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAg ICAgIFBhZ2UgIDExOQoKCkBjbGFzcyBDM01XQ2dlbjsKIyA3MDggIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9yYW5kb20vZ2VuZXJhdG9ycy5oIgpAY2xhc3MgQzJMQ0dYZ2VuOwpAY2xhc3MgQzRM Q0dYZ2VuOwojIDQ5ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvcmFuZG9tLmgiIDIKIyAxICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvcmFuZG9tL2Rpc3RyaWJ1dGlvbnMuaCIgMQojIDI1ICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvcmFuZG9tL2Rpc3RyaWJ1dGlvbnMuaCIKQHByb3RvY29s IFByb2JhYmlsaXR5RGlzdHJpYnV0aW9uIDxTd2FybU9iamVjdCwgSW50ZXJuYWxTdGF0ZT4KCgoK CgoKLSBfSV9DcmVhdGluZzsKCgorIGNyZWF0ZVdpdGhEZWZhdWx0czogKGlkIDxab25lPilhWm9u ZTsKCgorIGNyZWF0ZSA6IChpZCA8Wm9uZT4pYVpvbmUKICBzZXRHZW5lcmF0b3I6IChpZCA8U2lt cGxlUmFuZG9tR2VuZXJhdG9yPilzaW1wbGVHZW5lcmF0b3I7CgoKKyBjcmVhdGUgOiAoaWQgPFpv bmU+KWFab25lCiAgICAgICAgIHNldEdlbmVyYXRvcjogKGlkIDxTcGxpdFJhbmRvbUdlbmVyYXRv cj4pc3BsaXRHZW5lcmF0b3IKICBzZXRWaXJ0dWFsR2VuZXJhdG9yOiAodW5zaWduZWQpIHZHZW47 CgotIF9JX1NldHRpbmc7CgotIHNldEdlbmVyYXRvcjogKGlkIDxTaW1wbGVSYW5kb21HZW5lcmF0 b3I+KXNpbXBsZUdlbmVyYXRvcjsKCgotIHNldEdlbmVyYXRvciA6IChpZCA8U3BsaXRSYW5kb21H ZW5lcmF0b3I+KXNwbGl0R2VuZXJhdG9yCiAgc2V0VmlydHVhbEdlbmVyYXRvcjogKHVuc2lnbmVk KXZHZW47CgoKLSByZXNldDsKCi0gX0lfVXNpbmc7CgotIChpZCA8QmFzaWNSYW5kb21HZW5lcmF0 b3I+KSBnZXRHZW5lcmF0b3I7CgoKLSAodW5zaWduZWQpZ2V0VmlydHVhbEdlbmVyYXRvcjsKCgot IChCT09MKWdldE9wdGlvbnNJbml0aWFsaXplZDsKCgotICh1bnNpZ25lZCBsb25nIGxvbmcgaW50 KWdldEN1cnJlbnRDb3VudDsKQGVuZAoKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAg ICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgIDEyMAoKCgpAcHJv dG9jb2wgQm9vbGVhbkRpc3RyaWJ1dGlvbiA8UHJvYmFiaWxpdHlEaXN0cmlidXRpb24+CgoKCgot IF9JX1VzaW5nOwoKLSAoQk9PTClnZXRCb29sZWFuU2FtcGxlOwotIChpbnQpZ2V0SW50ZWdlclNh bXBsZTsKQGVuZAoKQHByb3RvY29sIEludGVnZXJEaXN0cmlidXRpb24gPFByb2JhYmlsaXR5RGlz dHJpYnV0aW9uPgoKCgoKLSBfSV9Vc2luZzsKCi0gKGludClnZXRJbnRlZ2VyU2FtcGxlOwpAZW5k CgpAcHJvdG9jb2wgVW5zaWduZWREaXN0cmlidXRpb24gPFByb2JhYmlsaXR5RGlzdHJpYnV0aW9u PgoKCgoKCi0gX0lfVXNpbmc7CgotICh1bnNpZ25lZClnZXRVbnNpZ25lZFNhbXBsZTsKQGVuZAoK QHByb3RvY29sIERvdWJsZURpc3RyaWJ1dGlvbiA8UHJvYmFiaWxpdHlEaXN0cmlidXRpb24+CgoK CgoKLSBfSV9Vc2luZzsKCgotIChkb3VibGUpZ2V0RG91YmxlU2FtcGxlOwpAZW5kCgoKCgoKCkBw cm90b2NvbCBSYW5kb21CaXREaXN0IDxCb29sZWFuRGlzdHJpYnV0aW9uLCBDUkVBVEFCTEU+CgoK CgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1p ICAgICAgICAgICAgICAgIFBhZ2UgIDEyMQoKCi0gX0lfVXNpbmc7CgotIChCT09MKWdldENvaW5U b3NzOwpAZW5kCgpAcHJvdG9jb2wgQmVybm91bGxpRGlzdCA8Qm9vbGVhbkRpc3RyaWJ1dGlvbiwg Q1JFQVRBQkxFPgoKCgotIF9JX0NyZWF0aW5nOwoKKyBjcmVhdGUgOiAoaWQgPFpvbmU+KWFab25l CiAgICBzZXRHZW5lcmF0b3I6IChpZCA8U2ltcGxlUmFuZG9tR2VuZXJhdG9yPilzaW1wbGVHZW5l cmF0b3IKICBzZXRQcm9iYWJpbGl0eTogKGRvdWJsZSlwOwoKCisgY3JlYXRlIDogKGlkIDxab25l PilhWm9uZQogICAgICAgICBzZXRHZW5lcmF0b3I6IChpZCA8U3BsaXRSYW5kb21HZW5lcmF0b3I+ KXNwbGl0R2VuZXJhdG9yCiAgc2V0VmlydHVhbEdlbmVyYXRvcjogKHVuc2lnbmVkKXZHZW4KICAg ICAgIHNldFByb2JhYmlsaXR5OiAoZG91YmxlKXA7CgotIF9JX1NldHRpbmc7CgotIHNldFByb2Jh YmlsaXR5OiAoZG91YmxlKXA7CgotIF9JX1VzaW5nOwoKLSAoZG91YmxlKWdldFByb2JhYmlsaXR5 OwoKCi0gKEJPT0wpZ2V0U2FtcGxlV2l0aFByb2JhYmlsaXR5OiAoZG91YmxlKXA7CkBlbmQKCgpA cHJvdG9jb2wgVW5pZm9ybUludGVnZXJEaXN0IDxJbnRlZ2VyRGlzdHJpYnV0aW9uLCBDUkVBVEFC TEU+CgoKCgoKLSBfSV9DcmVhdGluZzsKCisgY3JlYXRlIDogKGlkIDxab25lPilhWm9uZQogIHNl dEdlbmVyYXRvcjogKGlkIDxTaW1wbGVSYW5kb21HZW5lcmF0b3I+KXNpbXBsZUdlbmVyYXRvcgog c2V0SW50ZWdlck1pbjogKGludCltaW5WYWx1ZQogICAgICAgIHNldE1heDogKGludCltYXhWYWx1 ZTsKCgorIGNyZWF0ZSA6IChpZCA8Wm9uZT4pYVpvbmUKICAgICAgIHNldEdlbmVyYXRvcjogKGlk IDxTcGxpdFJhbmRvbUdlbmVyYXRvcj4pc3BsaXRHZW5lcmF0b3IKc2V0VmlydHVhbEdlbmVyYXRv cjogKHVuc2lnbmVkKSB2R2VuCiAgICAgIHNldEludGVnZXJNaW46IChpbnQpbWluVmFsdWUKICAg ICAgICAgICAgIHNldE1heDogKGludCltYXhWYWx1ZTsKCi0gX0lfU2V0dGluZzsKCgoKCgoKCgoy MDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAg ICAgICBQYWdlICAxMjIKCgoKLSBzZXRJbnRlZ2VyTWluOiAoaW50KW1pblZhbHVlIHNldE1heDog KGludCltYXhWYWx1ZTsKCi0gX0lfVXNpbmc7CgotIChpbnQpZ2V0SW50ZWdlck1pbjsKCgotIChp bnQpZ2V0SW50ZWdlck1heDsKCgoKLSAoaW50KWdldEludGVnZXJXaXRoTWluOiAoaW50KW1pblZh bHVlIHdpdGhNYXg6IChpbnQpbWF4VmFsdWU7CkBlbmQKCkBwcm90b2NvbCBVbmlmb3JtVW5zaWdu ZWREaXN0IDxVbnNpZ25lZERpc3RyaWJ1dGlvbiwgQ1JFQVRBQkxFPgoKCgoKCi0gX0lfQ3JlYXRp bmc7CgorIGNyZWF0ZSA6IChpZCA8Wm9uZT4pYVpvbmUKICAgIHNldEdlbmVyYXRvcjogKGlkIDxT aW1wbGVSYW5kb21HZW5lcmF0b3I+KXNpbXBsZUdlbmVyYXRvcgogIHNldFVuc2lnbmVkTWluOiAo dW5zaWduZWQpbWluVmFsdWUKICAgICAgICAgIHNldE1heDogKHVuc2lnbmVkKW1heFZhbHVlOwoK CisgY3JlYXRlIDogKGlkIDxab25lPilhWm9uZQogICAgICAgICBzZXRHZW5lcmF0b3I6IChpZCA8 U3BsaXRSYW5kb21HZW5lcmF0b3I+KXNwbGl0R2VuZXJhdG9yCiAgc2V0VmlydHVhbEdlbmVyYXRv cjogKHVuc2lnbmVkKXZHZW4KICAgICAgIHNldFVuc2lnbmVkTWluOiAodW5zaWduZWQpbWluVmFs dWUKICAgICAgICAgICAgICAgc2V0TWF4OiAodW5zaWduZWQpbWF4VmFsdWU7CgotIF9JX1NldHRp bmc7CgoKLSBzZXRVbnNpZ25lZE1pbjogKHVuc2lnbmVkKW1pblZhbHVlCiAgICAgICAgICBzZXRN YXg6ICh1bnNpZ25lZCltYXhWYWx1ZTsKCi0gX0lfVXNpbmc7CgotICh1bnNpZ25lZClnZXRVbnNp Z25lZE1pbjsKCgotICh1bnNpZ25lZClnZXRVbnNpZ25lZE1heDsKCgoKLSAodW5zaWduZWQpZ2V0 VW5zaWduZWRXaXRoTWluOiAodW5zaWduZWQpbWluVmFsCiAgICAgICAgICAgICAgICAgICAgICAg d2l0aE1heDogKHVuc2lnbmVkKW1heFZhbDsKQGVuZAoKQHByb3RvY29sIFVuaWZvcm1Eb3VibGVE aXN0IDxEb3VibGVEaXN0cmlidXRpb24sIENSRUFUQUJMRT4KCgoKCgoKCgoyMDAxLTA4LTI0IDAx OjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAx MjMKCgoKCgoKCgotIF9JX0NyZWF0aW5nOwoKKyBjcmVhdGUgOiAoaWQgPFpvbmU+KWFab25lCiAg ICBzZXRHZW5lcmF0b3I6IChpZCA8U2ltcGxlUmFuZG9tR2VuZXJhdG9yPilzaW1wbGVHZW5lcmF0 b3IKICAgIHNldERvdWJsZU1pbjogKGRvdWJsZSltaW5WYWx1ZQogICAgICAgICAgc2V0TWF4OiAo ZG91YmxlKW1heFZhbHVlOwoKCisgY3JlYXRlIDogKGlkIDxab25lPilhWm9uZQogICAgICAgICBz ZXRHZW5lcmF0b3I6IChpZCA8U3BsaXRSYW5kb21HZW5lcmF0b3I+KXNwbGl0R2VuZXJhdG9yCiAg c2V0VmlydHVhbEdlbmVyYXRvcjogKHVuc2lnbmVkKXZHZW4KICAgICAgICAgc2V0RG91YmxlTWlu OiAoZG91YmxlKW1pblZhbHVlCiAgICAgICAgICAgICAgIHNldE1heDogKGRvdWJsZSltYXhWYWx1 ZTsKCi0gX0lfU2V0dGluZzsKCgotIHNldERvdWJsZU1pbjogKGRvdWJsZSltaW5WYWx1ZSBzZXRN YXg6IChkb3VibGUpbWF4VmFsdWU7CgotIF9JX1VzaW5nOwoKCi0gKGRvdWJsZSlnZXREb3VibGVN aW47CgoKCi0gKGRvdWJsZSlnZXREb3VibGVNYXg7CgoKCi0gKGRvdWJsZSlnZXREb3VibGVXaXRo TWluOiAoZG91YmxlKW1pblZhbHVlIHdpdGhNYXg6IChkb3VibGUpbWF4VmFsdWU7CkBlbmQKCkBw cm90b2NvbCBOb3JtYWwgPERvdWJsZURpc3RyaWJ1dGlvbj4KCi0gX0lfQ3JlYXRpbmc7CgoKKyBj cmVhdGUgOiAoaWQgPFpvbmU+KWFab25lCiAgICBzZXRHZW5lcmF0b3I6IChpZCA8U2ltcGxlUmFu ZG9tR2VuZXJhdG9yPilzaW1wbGVHZW5lcmF0b3IKICAgICAgICAgc2V0TWVhbjogKGRvdWJsZSlt ZWFuCiAgICAgc2V0VmFyaWFuY2U6IChkb3VibGUpdmFyaWFuY2U7CgoKCisgY3JlYXRlIDogKGlk IDxab25lPilhWm9uZQogICAgc2V0R2VuZXJhdG9yOiAoaWQgPFNpbXBsZVJhbmRvbUdlbmVyYXRv cj4pc2ltcGxlR2VuZXJhdG9yCiAgICAgICAgIHNldE1lYW46IChkb3VibGUpbWVhbgogICAgICAg c2V0U3RkRGV2OiAoZG91YmxlKXNkZXY7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAg ICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgMTI0CgoKCgorIGNy ZWF0ZSA6IChpZCA8Wm9uZT4pYVpvbmUKICAgICAgICAgc2V0R2VuZXJhdG9yOiAoaWQgPFNwbGl0 UmFuZG9tR2VuZXJhdG9yPilzcGxpdEdlbmVyYXRvcgogIHNldFZpcnR1YWxHZW5lcmF0b3I6ICh1 bnNpZ25lZCl2R2VuCiAgICAgICAgICAgICAgc2V0TWVhbjogKGRvdWJsZSltZWFuCiAgICAgICAg ICBzZXRWYXJpYW5jZTogKGRvdWJsZSl2YXJpYW5jZTsKCgoKKyBjcmVhdGUgOiAoaWQgPFpvbmU+ KWFab25lCiAgICAgICAgIHNldEdlbmVyYXRvcjogKGlkIDxTcGxpdFJhbmRvbUdlbmVyYXRvcj4p c3BsaXRHZW5lcmF0b3IKICBzZXRWaXJ0dWFsR2VuZXJhdG9yOiAodW5zaWduZWQpdkdlbgogICAg ICAgICAgICAgIHNldE1lYW46IChkb3VibGUpbWVhbgogICAgICAgICAgICBzZXRTdGREZXY6IChk b3VibGUpc2RldjsKCi0gX0lfU2V0dGluZzsKCgotIHNldE1lYW46IChkb3VibGUpbWVhbiBzZXRW YXJpYW5jZTogKGRvdWJsZSl2YXJpYW5jZTsKCgoKLSBzZXRNZWFuOiAoZG91YmxlKW1lYW4gc2V0 U3RkRGV2OiAoZG91YmxlKXNkZXY7CgotIF9JX1VzaW5nOwoKLSAoZG91YmxlKWdldE1lYW47CgoK LSAoZG91YmxlKWdldFZhcmlhbmNlOwoKCi0gKGRvdWJsZSlnZXRTdGREZXY7CgoKCi0gKGRvdWJs ZSlnZXRTYW1wbGVXaXRoTWVhbjogKGRvdWJsZSltZWFuCiAgICAgICAgICAgICAgIHdpdGhWYXJp YW5jZTogKGRvdWJsZSl2YXJpYW5jZTsKCgoKLSAoZG91YmxlKWdldFNhbXBsZVdpdGhNZWFuOiAo ZG91YmxlKW1lYW4KICAgICAgICAgICAgICAgICB3aXRoU3RkRGV2OiAoZG91YmxlKXNkZXY7CkBl bmQKCkBwcm90b2NvbCBOb3JtYWxEaXN0IDxOb3JtYWwsIENSRUFUQUJMRT4KCgoKQGVuZAoKQHBy b3RvY29sIExvZ05vcm1hbERpc3QgPE5vcm1hbCwgQ1JFQVRBQkxFPgoKCgoKCgoKCgoKMjAwMS0w OC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAg UGFnZSAgMTI1CgoKQGVuZAoKQHByb3RvY29sIEV4cG9uZW50aWFsRGlzdCA8RG91YmxlRGlzdHJp YnV0aW9uLCBDUkVBVEFCTEU+CgoKCi0gX0lfQ3JlYXRpbmc7CgorIGNyZWF0ZSA6IChpZCA8Wm9u ZT4pYVpvbmUKICBzZXRHZW5lcmF0b3I6IChpZCA8U2ltcGxlUmFuZG9tR2VuZXJhdG9yPilzaW1w bGVHZW5lcmF0b3IKICAgICAgIHNldE1lYW46IChkb3VibGUpbWVhbjsKCgorIGNyZWF0ZSA6IChp ZCA8Wm9uZT4pYVpvbmUKICAgICAgICAgc2V0R2VuZXJhdG9yOiAoaWQgPFNwbGl0UmFuZG9tR2Vu ZXJhdG9yPilzcGxpdEdlbmVyYXRvcgogIHNldFZpcnR1YWxHZW5lcmF0b3I6ICh1bnNpZ25lZCl2 R2VuCiAgICAgICAgICAgICAgc2V0TWVhbjogKGRvdWJsZSltZWFuOwoKCi0gX0lfU2V0dGluZzsK Ci0gc2V0TWVhbjogKGRvdWJsZSltZWFuOwoKLSBfSV9Vc2luZzsKCi0gKGRvdWJsZSlnZXRNZWFu OwoKCgotIChkb3VibGUpZ2V0U2FtcGxlV2l0aE1lYW46IChkb3VibGUpbWVhbjsKQGVuZAoKQHBy b3RvY29sIEdhbW1hRGlzdCA8RG91YmxlRGlzdHJpYnV0aW9uLCBDUkVBVEFCTEU+CgoKCi0gX0lf Q3JlYXRpbmc7CgorIGNyZWF0ZSA6IChpZCA8Wm9uZT4pYVpvbmUKIHNldEdlbmVyYXRvcjogKGlk IDxTaW1wbGVSYW5kb21HZW5lcmF0b3I+KXNpbXBsZUdlbmVyYXRvcgogICAgIHNldEFscGhhOiAo ZG91YmxlKWFscGhhCiAgICAgIHNldEJldGE6IChkb3VibGUpYmV0YTsKCgorIGNyZWF0ZSA6IChp ZCA8Wm9uZT4pYVpvbmUKICAgICAgICAgc2V0R2VuZXJhdG9yOiAoaWQgPFNwbGl0UmFuZG9tR2Vu ZXJhdG9yPilzcGxpdEdlbmVyYXRvcgogIHNldFZpcnR1YWxHZW5lcmF0b3I6ICh1bnNpZ25lZCl2 R2VuCiAgICAgICAgICAgICBzZXRBbHBoYTogKGRvdWJsZSlhbHBoYQogICAgICAgICAgICAgIHNl dEJldGE6IChkb3VibGUpYmV0YTsKCi0gX0lfU2V0dGluZzsKCgotIHNldEFscGhhOiAoZG91Ymxl KWFscGhhIHNldEJldGE6IChkb3VibGUpYmV0YTsKCi0gX0lfVXNpbmc7CgoKCgoKCgoyMDAxLTA4 LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQ YWdlICAxMjYKCgoKLSAoZG91YmxlKWdldEFscGhhOwoKCi0gKGRvdWJsZSlnZXRCZXRhOwoKCgot IChkb3VibGUpZ2V0U2FtcGxlV2l0aEFscGhhOiAoZG91YmxlKWFscGhhCiAgICAgICAgICAgICAg ICAgICAgd2l0aEJldGE6IChkb3VibGUpYmV0YTsKQGVuZAoKQHByb3RvY29sIFBvaXNzb25EaXN0 IDxVbnNpZ25lZERpc3RyaWJ1dGlvbiwgQ1JFQVRBQkxFPgoKCgoKLSBfSV9DcmVhdGluZzsKCisg Y3JlYXRlIDogKGlkIDxab25lPilhWm9uZQogc2V0R2VuZXJhdG9yOiAoaWQgPFNpbXBsZVJhbmRv bUdlbmVyYXRvcj4pZ2VuZXJhdG9yOwoKCgorIGNyZWF0ZSA6IChpZCA8Wm9uZT4pYVpvbmUKIHNl dEdlbmVyYXRvcjogKGlkIDxTaW1wbGVSYW5kb21HZW5lcmF0b3I+KWdlbmVyYXRvcgogc2V0T2Nj dXJSYXRlOiAoZG91YmxlKSBhbk9jY3VyUmF0ZQogIHNldEludGVydmFsOiAoZG91YmxlKSBhbklu dGVydmFsOwoKCgorIGNyZWF0ZSA6IChpZCA8Wm9uZT4pYVpvbmUKICAgICAgICAgc2V0R2VuZXJh dG9yOiAoaWQgPFNwbGl0UmFuZG9tR2VuZXJhdG9yPilnZW5lcmF0b3IKICBzZXRWaXJ0dWFsR2Vu ZXJhdG9yOiAodW5zaWduZWQpdkdlbjsKCgoKKyBjcmVhdGUgOiAoaWQgPFpvbmU+KWFab25lCiAg ICAgICAgIHNldEdlbmVyYXRvcjogKGlkIDxTcGxpdFJhbmRvbUdlbmVyYXRvcj4pZ2VuZXJhdG9y CiAgc2V0VmlydHVhbEdlbmVyYXRvcjogKHVuc2lnbmVkKXZHZW4KICAgICAgICAgc2V0T2NjdXJS YXRlOiAoZG91YmxlKSBhbk9jY3VyUmF0ZQogICAgICAgICAgc2V0SW50ZXJ2YWw6IChkb3VibGUp IGFuSW50ZXJ2YWw7CgotIF9JX1NldHRpbmc7CgoKCi0gc2V0SW50ZXJ2YWw6IChkb3VibGUpIGFu SW50ZXJ2YWw7CgoKCi0gc2V0T2NjdXJSYXRlOiAoZG91YmxlKSBhbk9jY3VyUmF0ZTsKCgoKLSBz ZXRPY2N1clJhdGU6IChkb3VibGUpIGFuT2NjdXJSYXRlCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAxMjcK CgogICBzZXRJbnRlcnZhbDogKGRvdWJsZSkgYW5JbnRlcnZhbDsKCi0gX0lfVXNpbmc7CgoKLSAo ZG91YmxlKSBnZXRPY2N1clJhdGU7CgoKLSAoZG91YmxlKSBnZXRJbnRlcnZhbDsKCgoKCi0gKHVu c2lnbmVkKSBnZXRVbnNpZ25lZFNhbXBsZTsKCgoKCi0gKHVuc2lnbmVkKSBnZXRVbnNpZ25lZFNh bXBsZVdpdGhJbnRlcnZhbDogKGRvdWJsZSkgYW5JbnRlcnZhbDsKCgoKCgotICh1bnNpZ25lZCkg Z2V0VW5zaWduZWRTYW1wbGVXaXRoT2NjdXJSYXRlOiAoZG91YmxlKSBhbk9jY3VyUmF0ZQogICAg ICAgICAgICAgICAgICAgICAgICAgd2l0aEludGVydmFsOiAoZG91YmxlKSBhbkludGVydmFsOwoK QGVuZAoKCgoKCkBjbGFzcyBSYW5kb21CaXREaXN0OwpAY2xhc3MgQmVybm91bGxpRGlzdDsKCgpA Y2xhc3MgVW5pZm9ybUludGVnZXJEaXN0OwoKCkBjbGFzcyBVbmlmb3JtVW5zaWduZWREaXN0OwoK CkBjbGFzcyBVbmlmb3JtRG91YmxlRGlzdDsKQGNsYXNzIE5vcm1hbERpc3Q7CkBjbGFzcyBMb2dO b3JtYWxEaXN0OwpAY2xhc3MgRXhwb25lbnRpYWxEaXN0OwpAY2xhc3MgR2FtbWFEaXN0OwpAY2xh c3MgUG9pc3NvbkRpc3Q7CiMgNTAgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9yYW5kb20uaCIg MgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9yYW5kb20vcmFuZG9tdmFycy5oIiAxCiMg MjIgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9yYW5kb20vcmFuZG9tdmFycy5oIgojIDEgIi91 c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9leHRlcm52YXIuaCIgMQojIDIzICIvdXNyL2xvY2FsL3N3 YXJtL2luY2x1ZGUvcmFuZG9tL3JhbmRvbXZhcnMuaCIgMgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAx OjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAx MjgKCgoKZXh0ZXJuIGlkIDxNVDE5OTM3Z2VuPiByYW5kb21HZW5lcmF0b3I7CgoKZXh0ZXJuIGlk IDxVbmlmb3JtSW50ZWdlckRpc3Q+IHVuaWZvcm1JbnRSYW5kOwpleHRlcm4gaWQgPFVuaWZvcm1V bnNpZ25lZERpc3Q+IHVuaWZvcm1VbnNSYW5kOwpleHRlcm4gaWQgPFVuaWZvcm1Eb3VibGVEaXN0 PiB1bmlmb3JtRGJsUmFuZDsKCgoKCmV4dGVybiBCT09MIF91c2VGaXhlZFNlZWQ7CmV4dGVybiB1 bnNpZ25lZCBpbnQgX2ZpcnN0U2VlZDsKCgoKCgoKCmV4dGVybiB2b2lkIGluaXRSYW5kb20gKGlk IGFyZ3VtZW50cyk7CmV4dGVybiB1bnNpZ25lZCBpbnQgdGVtcHVzRnVnaXQgKHZvaWQpOwpleHRl cm4gdW5zaWduZWQgaW50IG5leHRTZWVkICh2b2lkKTsKIyA1MSAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL3JhbmRvbS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3JhbmRvbS9y YW5kb21kZWZzLmgiIDEKIyAyOCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3JhbmRvbS9yYW5k b21kZWZzLmgiCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL21pc2MuaCIgMQojIDkgIi91 c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9taXNjLmgiCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNs dWRlL3N3YXJtY29uZmlnLmgiIDEKIyAxMCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL21pc2Mu aCIgMgoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4wLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTIgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9taXNjLmgiIDIKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAxNiAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL21pc2MuaCIgMgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyAxNyAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL21pc2MuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAz CiMgMTggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9taXNjLmgiIDIKCiMgMSAiL3Vzci9pbmNs dWRlL3VuaXN0ZC5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIg MwojIDE3NSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv cG9zaXhfb3B0LmgiIDEgMwojIDE3NiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgoKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy9lbnZpcm9ubWVudHMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVk ZS9iaXRzL2Vudmlyb25tZW50cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd29yZHNpemUu aCIgMSAzCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2Fy bS5taSAgICAgICAgICAgICAgICBQYWdlICAxMjkKCgojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9l bnZpcm9ubWVudHMuaCIgMiAzCiMgMTgwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwojIDE5 MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMu aCIgMSAzCiMgMTkxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCnR5cGVkZWYgX19zc2l6 ZV90IHNzaXplX3Q7CgoKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjAwICIvdXNyL2luY2x1 ZGUvdW5pc3RkLmgiIDIgMwoKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYg X191aWRfdCB1aWRfdDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoKCgoKCnR5cGVkZWYg X19vZmY2NF90IG9mZjY0X3Q7CgoKCgp0eXBlZGVmIF9fdXNlY29uZHNfdCB1c2Vjb25kc190OwoK CgoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKCgp0eXBlZGVmIF9faW50cHRyX3QgaW50cHRy X3Q7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5t aSAgICAgICAgICAgICAgICBQYWdlICAxMzAKCgoKCgoKCgp0eXBlZGVmIF9fc29ja2xlbl90IHNv Y2tsZW5fdDsKIyAyNjAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGFjY2Vz cyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUpIDsKCgoKCmV4dGVybiBpbnQgZXVp ZGFjY2VzcyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUpIDsKIyAyOTAgIi91c3Iv aW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19vZmZfdCBsc2VlayAoaW50IF9fZmQsIF9fb2Zm X3QgX19vZmZzZXQsIGludCBfX3doZW5jZSkgOwojIDMwMiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5o IiAzCmV4dGVybiBfX29mZjY0X3QgbHNlZWs2NCAoaW50IF9fZmQsIF9fb2ZmNjRfdCBfX29mZnNl dCwgaW50IF9fd2hlbmNlKSA7CgoKCmV4dGVybiBpbnQgY2xvc2UgKGludCBfX2ZkKSA7CgoKCmV4 dGVybiBzc2l6ZV90IHJlYWQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVz KSA7CgoKZXh0ZXJuIHNzaXplX3Qgd3JpdGUgKGludCBfX2ZkLCBfX2NvbnN0IHZvaWQgKl9fYnVm LCBzaXplX3QgX19uKSA7CgoKCmV4dGVybiBzc2l6ZV90IHByZWFkIChpbnQgX19mZCwgdm9pZCAq X19idWYsIHNpemVfdCBfX25ieXRlcywgX19vZmZfdCBfX29mZnNldCkKICAgICAgICAgICAgOwpl eHRlcm4gc3NpemVfdCBwd3JpdGUgKGludCBfX2ZkLCBfX2NvbnN0IHZvaWQgKl9fYnVmLCBzaXpl X3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmX3QgX19vZmZzZXQpIDsKIyAzNDAg Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gc3NpemVfdCBwcmVhZDY0IChpbnQgX19m ZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAg X19vZmY2NF90IF9fb2Zmc2V0KSA7CgoKZXh0ZXJuIHNzaXplX3QgcHdyaXRlNjQgKGludCBfX2Zk LCBfX2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAg ICAgX19vZmY2NF90IF9fb2Zmc2V0KSA7CgoKCgoKCgpleHRlcm4gaW50IHBpcGUgKGludCBfX3Bp cGVkZXNbMl0pIDsKIyAzNjIgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gdW5zaWdu ZWQgaW50IGFsYXJtICh1bnNpZ25lZCBpbnQgX19zZWNvbmRzKSA7CiMgMzcxICIvdXNyL2luY2x1 ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIHVuc2lnbmVkIGludCBzbGVlcCAodW5zaWduZWQgaW50IF9f c2Vjb25kcykgOwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2Rl bFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgIDEzMQoKCgoKCgoKZXh0ZXJuIF9fdXNlY29u ZHNfdCB1YWxhcm0gKF9fdXNlY29uZHNfdCBfX3ZhbHVlLCBfX3VzZWNvbmRzX3QgX19pbnRlcnZh bCkKICAgICAgICAgICAgOwoKCgpleHRlcm4gaW50IHVzbGVlcCAoX191c2Vjb25kc190IF9fdXNl Y29uZHMpIDsKCgoKCgpleHRlcm4gaW50IHBhdXNlICh2b2lkKSA7CgoKCmV4dGVybiBpbnQgY2hv d24gKF9fY29uc3QgY2hhciAqX19maWxlLCBfX3VpZF90IF9fb3duZXIsIF9fZ2lkX3QgX19ncm91 cCkKICAgICAgICAgICAgOwoKCgpleHRlcm4gaW50IGZjaG93biAoaW50IF9fZmQsIF9fdWlkX3Qg X19vd25lciwgX19naWRfdCBfX2dyb3VwKSA7CgoKCgpleHRlcm4gaW50IGxjaG93biAoX19jb25z dCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKQogICAgICAg ICAgICA7CgoKCgpleHRlcm4gaW50IGNoZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgOwoKCgpl eHRlcm4gaW50IGZjaGRpciAoaW50IF9fZmQpIDsKIyA0MjMgIi91c3IvaW5jbHVkZS91bmlzdGQu aCIgMwpleHRlcm4gY2hhciAqZ2V0Y3dkIChjaGFyICpfX2J1Ziwgc2l6ZV90IF9fc2l6ZSkgOwoK CgoKCmV4dGVybiBjaGFyICpnZXRfY3VycmVudF9kaXJfbmFtZSAodm9pZCkgOwoKCgoKCgpleHRl cm4gY2hhciAqZ2V0d2QgKGNoYXIgKl9fYnVmKSA7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAg ICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAxMzIKCgoK CgoKZXh0ZXJuIGludCBkdXAgKGludCBfX2ZkKSA7CgoKZXh0ZXJuIGludCBkdXAyIChpbnQgX19m ZCwgaW50IF9fZmQyKSA7CgoKZXh0ZXJuIGNoYXIgKipfX2Vudmlyb247CgpleHRlcm4gY2hhciAq KmVudmlyb247CgoKCgoKZXh0ZXJuIGludCBleGVjdmUgKF9fY29uc3QgY2hhciAqX19wYXRoLCBj aGFyICpfX2NvbnN0IF9fYXJndltdLAogICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCBf X2VudnBbXSkgOwoKCgoKZXh0ZXJuIGludCBmZXhlY3ZlIChpbnQgX19mZCwgY2hhciAqX19jb25z dCBfX2FyZ3ZbXSwgY2hhciAqX19jb25zdCBfX2VudnBbXSkKICAgICAgICAgICAgOwoKCgoKZXh0 ZXJuIGludCBleGVjdiAoX19jb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKl9fY29uc3QgX19hcmd2 W10pIDsKCgoKZXh0ZXJuIGludCBleGVjbGUgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0 IGNoYXIgKl9fYXJnLCAuLi4pIDsKCgoKZXh0ZXJuIGludCBleGVjbCAoX19jb25zdCBjaGFyICpf X3BhdGgsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikgOwoKCgpleHRlcm4gaW50IGV4ZWN2cCAo X19jb25zdCBjaGFyICpfX2ZpbGUsIGNoYXIgKl9fY29uc3QgX19hcmd2W10pIDsKCgoKCmV4dGVy biBpbnQgZXhlY2xwIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19jb25zdCBjaGFyICpfX2FyZywg Li4uKSA7CgoKCgpleHRlcm4gaW50IG5pY2UgKGludCBfX2luYykgOwoKCgoKCgoKCgoKMjAwMS0w OC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAg UGFnZSAgMTMzCgoKCmV4dGVybiB2b2lkIF9leGl0IChpbnQgX19zdGF0dXMpIF9fYXR0cmlidXRl X18gKChfX25vcmV0dXJuX18pKTsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2NvbmZuYW1l LmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9jb25mbmFtZS5oIiAzCmVudW0KICB7CiAg ICBfUENfTElOS19NQVgsCgogICAgX1BDX01BWF9DQU5PTiwKCiAgICBfUENfTUFYX0lOUFVULAoK ICAgIF9QQ19OQU1FX01BWCwKCiAgICBfUENfUEFUSF9NQVgsCgogICAgX1BDX1BJUEVfQlVGLAoK ICAgIF9QQ19DSE9XTl9SRVNUUklDVEVELAoKICAgIF9QQ19OT19UUlVOQywKCiAgICBfUENfVkRJ U0FCTEUsCgogICAgX1BDX1NZTkNfSU8sCgogICAgX1BDX0FTWU5DX0lPLAoKICAgIF9QQ19QUklP X0lPLAoKICAgIF9QQ19TT0NLX01BWEJVRiwKCiAgICBfUENfRklMRVNJWkVCSVRTLAoKICAgIF9Q Q19SRUNfSU5DUl9YRkVSX1NJWkUsCgogICAgX1BDX1JFQ19NQVhfWEZFUl9TSVpFLAoKICAgIF9Q Q19SRUNfTUlOX1hGRVJfU0laRSwKCiAgICBfUENfUkVDX1hGRVJfQUxJR04KCiAgfTsKCgplbnVt CiAgewogICAgX1NDX0FSR19NQVgsCgogICAgX1NDX0NISUxEX01BWCwKCgoKCgoKCgoyMDAxLTA4 LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQ YWdlICAxMzQKCgogICAgX1NDX0NMS19UQ0ssCgogICAgX1NDX05HUk9VUFNfTUFYLAoKICAgIF9T Q19PUEVOX01BWCwKCiAgICBfU0NfU1RSRUFNX01BWCwKCiAgICBfU0NfVFpOQU1FX01BWCwKCiAg ICBfU0NfSk9CX0NPTlRST0wsCgogICAgX1NDX1NBVkVEX0lEUywKCiAgICBfU0NfUkVBTFRJTUVf U0lHTkFMUywKCiAgICBfU0NfUFJJT1JJVFlfU0NIRURVTElORywKCiAgICBfU0NfVElNRVJTLAoK ICAgIF9TQ19BU1lOQ0hST05PVVNfSU8sCgogICAgX1NDX1BSSU9SSVRJWkVEX0lPLAoKICAgIF9T Q19TWU5DSFJPTklaRURfSU8sCgogICAgX1NDX0ZTWU5DLAoKICAgIF9TQ19NQVBQRURfRklMRVMs CgogICAgX1NDX01FTUxPQ0ssCgogICAgX1NDX01FTUxPQ0tfUkFOR0UsCgogICAgX1NDX01FTU9S WV9QUk9URUNUSU9OLAoKICAgIF9TQ19NRVNTQUdFX1BBU1NJTkcsCgogICAgX1NDX1NFTUFQSE9S RVMsCgogICAgX1NDX1NIQVJFRF9NRU1PUllfT0JKRUNUUywKCiAgICBfU0NfQUlPX0xJU1RJT19N QVgsCgogICAgX1NDX0FJT19NQVgsCgogICAgX1NDX0FJT19QUklPX0RFTFRBX01BWCwKCiAgICBf U0NfREVMQVlUSU1FUl9NQVgsCgogICAgX1NDX01RX09QRU5fTUFYLAoKICAgIF9TQ19NUV9QUklP X01BWCwKCiAgICBfU0NfVkVSU0lPTiwKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAg ICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAxMzUKCgogICAgX1ND X1BBR0VTSVpFLAoKCiAgICBfU0NfUlRTSUdfTUFYLAoKICAgIF9TQ19TRU1fTlNFTVNfTUFYLAoK ICAgIF9TQ19TRU1fVkFMVUVfTUFYLAoKICAgIF9TQ19TSUdRVUVVRV9NQVgsCgogICAgX1NDX1RJ TUVSX01BWCwKCgoKCiAgICBfU0NfQkNfQkFTRV9NQVgsCgogICAgX1NDX0JDX0RJTV9NQVgsCgog ICAgX1NDX0JDX1NDQUxFX01BWCwKCiAgICBfU0NfQkNfU1RSSU5HX01BWCwKCiAgICBfU0NfQ09M TF9XRUlHSFRTX01BWCwKCiAgICBfU0NfRVFVSVZfQ0xBU1NfTUFYLAoKICAgIF9TQ19FWFBSX05F U1RfTUFYLAoKICAgIF9TQ19MSU5FX01BWCwKCiAgICBfU0NfUkVfRFVQX01BWCwKCiAgICBfU0Nf Q0hBUkNMQVNTX05BTUVfTUFYLAoKCiAgICBfU0NfMl9WRVJTSU9OLAoKICAgIF9TQ18yX0NfQklO RCwKCiAgICBfU0NfMl9DX0RFViwKCiAgICBfU0NfMl9GT1JUX0RFViwKCiAgICBfU0NfMl9GT1JU X1JVTiwKCiAgICBfU0NfMl9TV19ERVYsCgogICAgX1NDXzJfTE9DQUxFREVGLAoKCiAgICBfU0Nf UElJLAoKICAgIF9TQ19QSUlfWFRJLAoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAg ICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgIDEzNgoKCiAgICBfU0Nf UElJX1NPQ0tFVCwKCiAgICBfU0NfUElJX0lOVEVSTkVULAoKICAgIF9TQ19QSUlfT1NJLAoKICAg IF9TQ19QT0xMLAoKICAgIF9TQ19TRUxFQ1QsCgogICAgX1NDX1VJT19NQVhJT1YsCgogICAgX1ND X0lPVl9NQVggPSBfU0NfVUlPX01BWElPViwKCiAgICBfU0NfUElJX0lOVEVSTkVUX1NUUkVBTSwK CiAgICBfU0NfUElJX0lOVEVSTkVUX0RHUkFNLAoKICAgIF9TQ19QSUlfT1NJX0NPVFMsCgogICAg X1NDX1BJSV9PU0lfQ0xUUywKCiAgICBfU0NfUElJX09TSV9NLAoKICAgIF9TQ19UX0lPVl9NQVgs CgoKCiAgICBfU0NfVEhSRUFEUywKCiAgICBfU0NfVEhSRUFEX1NBRkVfRlVOQ1RJT05TLAoKICAg IF9TQ19HRVRHUl9SX1NJWkVfTUFYLAoKICAgIF9TQ19HRVRQV19SX1NJWkVfTUFYLAoKICAgIF9T Q19MT0dJTl9OQU1FX01BWCwKCiAgICBfU0NfVFRZX05BTUVfTUFYLAoKICAgIF9TQ19USFJFQURf REVTVFJVQ1RPUl9JVEVSQVRJT05TLAoKICAgIF9TQ19USFJFQURfS0VZU19NQVgsCgogICAgX1ND X1RIUkVBRF9TVEFDS19NSU4sCgogICAgX1NDX1RIUkVBRF9USFJFQURTX01BWCwKCiAgICBfU0Nf VEhSRUFEX0FUVFJfU1RBQ0tBRERSLAoKICAgIF9TQ19USFJFQURfQVRUUl9TVEFDS1NJWkUsCgog ICAgX1NDX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HLAoKICAgIF9TQ19USFJFQURfUFJJT19J TkhFUklULAoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3 YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgIDEzNwoKCiAgICBfU0NfVEhSRUFEX1BSSU9fUFJP VEVDVCwKCiAgICBfU0NfVEhSRUFEX1BST0NFU1NfU0hBUkVELAoKCiAgICBfU0NfTlBST0NFU1NP UlNfQ09ORiwKCiAgICBfU0NfTlBST0NFU1NPUlNfT05MTiwKCiAgICBfU0NfUEhZU19QQUdFUywK CiAgICBfU0NfQVZQSFlTX1BBR0VTLAoKICAgIF9TQ19BVEVYSVRfTUFYLAoKICAgIF9TQ19QQVNT X01BWCwKCgogICAgX1NDX1hPUEVOX1ZFUlNJT04sCgogICAgX1NDX1hPUEVOX1hDVV9WRVJTSU9O LAoKICAgIF9TQ19YT1BFTl9VTklYLAoKICAgIF9TQ19YT1BFTl9DUllQVCwKCiAgICBfU0NfWE9Q RU5fRU5IX0kxOE4sCgogICAgX1NDX1hPUEVOX1NITSwKCgogICAgX1NDXzJfQ0hBUl9URVJNLAoK ICAgIF9TQ18yX0NfVkVSU0lPTiwKCiAgICBfU0NfMl9VUEUsCgoKICAgIF9TQ19YT1BFTl9YUEcy LAoKICAgIF9TQ19YT1BFTl9YUEczLAoKICAgIF9TQ19YT1BFTl9YUEc0LAoKCiAgICBfU0NfQ0hB Ul9CSVQsCgogICAgX1NDX0NIQVJfTUFYLAoKICAgIF9TQ19DSEFSX01JTiwKCiAgICBfU0NfSU5U X01BWCwKCiAgICBfU0NfSU5UX01JTiwKCiAgICBfU0NfTE9OR19CSVQsCgoKCgoKCgoyMDAxLTA4 LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQ YWdlICAxMzgKCgoKICAgIF9TQ19XT1JEX0JJVCwKCiAgICBfU0NfTUJfTEVOX01BWCwKCiAgICBf U0NfTlpFUk8sCgogICAgX1NDX1NTSVpFX01BWCwKCiAgICBfU0NfU0NIQVJfTUFYLAoKICAgIF9T Q19TQ0hBUl9NSU4sCgogICAgX1NDX1NIUlRfTUFYLAoKICAgIF9TQ19TSFJUX01JTiwKCiAgICBf U0NfVUNIQVJfTUFYLAoKICAgIF9TQ19VSU5UX01BWCwKCiAgICBfU0NfVUxPTkdfTUFYLAoKICAg IF9TQ19VU0hSVF9NQVgsCgoKICAgIF9TQ19OTF9BUkdNQVgsCgogICAgX1NDX05MX0xBTkdNQVgs CgogICAgX1NDX05MX01TR01BWCwKCiAgICBfU0NfTkxfTk1BWCwKCiAgICBfU0NfTkxfU0VUTUFY LAoKICAgIF9TQ19OTF9URVhUTUFYLAoKCiAgICBfU0NfWEJTNV9JTFAzMl9PRkYzMiwKCiAgICBf U0NfWEJTNV9JTFAzMl9PRkZCSUcsCgogICAgX1NDX1hCUzVfTFA2NF9PRkY2NCwKCiAgICBfU0Nf WEJTNV9MUEJJR19PRkZCSUcsCgoKICAgIF9TQ19YT1BFTl9MRUdBQ1ksCgogICAgX1NDX1hPUEVO X1JFQUxUSU1FLAoKICAgIF9TQ19YT1BFTl9SRUFMVElNRV9USFJFQURTLAoKCiAgICBfU0NfQURW SVNPUllfSU5GTywKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2Rl bFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgIDEzOQoKCgogICAgX1NDX0JBUlJJRVJTLAoK ICAgIF9TQ19CQVNFLAoKICAgIF9TQ19DX0xBTkdfU1VQUE9SVCwKCiAgICBfU0NfQ19MQU5HX1NV UFBPUlRfUiwKCiAgICBfU0NfQ0xPQ0tfU0VMRUNUSU9OLAoKICAgIF9TQ19DUFVUSU1FLAoKICAg IF9TQ19USFJFQURfQ1BVVElNRSwKCiAgICBfU0NfREVWSUNFX0lPLAoKICAgIF9TQ19ERVZJQ0Vf U1BFQ0lGSUMsCgogICAgX1NDX0RFVklDRV9TUEVDSUZJQ19SLAoKICAgIF9TQ19GRF9NR01ULAoK ICAgIF9TQ19GSUZPLAoKICAgIF9TQ19QSVBFLAoKICAgIF9TQ19GSUxFX0FUVFJJQlVURVMsCgog ICAgX1NDX0ZJTEVfTE9DS0lORywKCiAgICBfU0NfRklMRV9TWVNURU0sCgogICAgX1NDX01PTk9U T05JQ19DTE9DSywKCiAgICBfU0NfTVVMVElQTEVfUFJPQ0VTUywKCiAgICBfU0NfU0lOR0xFX1BS T0NFU1MsCgogICAgX1NDX05FVFdPUktJTkcsCgogICAgX1NDX1JFQURFUl9XUklURVJfTE9DS1Ms CgogICAgX1NDX1NQSU5fTE9DS1MsCgogICAgX1NDX1JFR0VYUCwKCiAgICBfU0NfUkVHRVhfVkVS U0lPTiwKCiAgICBfU0NfU0hFTEwsCgogICAgX1NDX1NJR05BTFMsCgogICAgX1NDX1NQQVdOLAoK ICAgIF9TQ19TUE9SQURJQ19TRVJWRVIsCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAg ICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAxNDAKCgoKICAgIF9T Q19USFJFQURfU1BPUkFESUNfU0VSVkVSLAoKICAgIF9TQ19TWVNURU1fREFUQUJBU0UsCgogICAg X1NDX1NZU1RFTV9EQVRBQkFTRV9SLAoKICAgIF9TQ19USU1FT1VUUywKCiAgICBfU0NfVFlQRURf TUVNT1JZX09CSkVDVFMsCgogICAgX1NDX1VTRVJfR1JPVVBTLAoKICAgIF9TQ19VU0VSX0dST1VQ U19SLAoKICAgIF9TQ18yX1BCUywKCiAgICBfU0NfMl9QQlNfQUNDT1VOVElORywKCiAgICBfU0Nf Ml9QQlNfTE9DQVRFLAoKICAgIF9TQ18yX1BCU19NRVNTQUdFLAoKICAgIF9TQ18yX1BCU19UUkFD SywKCiAgICBfU0NfU1lNTE9PUCwKCiAgICBfU0NfU1RSRUFNUywKCiAgICBfU0NfMl9QQlNfQ0hF Q0tQT0lOVAoKICB9OwoKCgoKCmVudW0KICB7CiAgICBfQ1NfUEFUSAoKCgoKICAgICwKICAgIF9D U19MRlNfQ0ZMQUdTID0gMTAwMCwKCiAgICBfQ1NfTEZTX0xERkxBR1MsCgogICAgX0NTX0xGU19M SUJTLAoKICAgIF9DU19MRlNfTElOVEZMQUdTLAoKICAgIF9DU19MRlM2NF9DRkxBR1MsCgogICAg X0NTX0xGUzY0X0xERkxBR1MsCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAg UHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAxNDEKCgoKICAgIF9DU19MRlM2 NF9MSUJTLAoKICAgIF9DU19MRlM2NF9MSU5URkxBR1MKCgoKCiAgICAsCiAgICBfQ1NfWEJTNV9J TFAzMl9PRkYzMl9DRkxBR1MgPSAxMTAwLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xERkxB R1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTElCUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9P RkYzMl9MSU5URkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0NGTEFHUywKCiAgICBf Q1NfWEJTNV9JTFAzMl9PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdf TElCUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1 X0xQNjRfT0ZGNjRfQ0ZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTERGTEFHUywKCiAg ICBfQ1NfWEJTNV9MUDY0X09GRjY0X0xJQlMsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9MSU5U RkxBR1MsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfWEJTNV9M UEJJR19PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElCUywKCiAg ICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElOVEZMQUdTCgoKICB9OwojIDUwMSAiL3Vzci9pbmNs dWRlL3VuaXN0ZC5oIiAyIDMKCgpleHRlcm4gbG9uZyBpbnQgcGF0aGNvbmYgKF9fY29uc3QgY2hh ciAqX19wYXRoLCBpbnQgX19uYW1lKSA7CgoKZXh0ZXJuIGxvbmcgaW50IGZwYXRoY29uZiAoaW50 IF9fZmQsIGludCBfX25hbWUpIDsKCgpleHRlcm4gbG9uZyBpbnQgc3lzY29uZiAoaW50IF9fbmFt ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToy MSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgMTQy CgoKZXh0ZXJuIHNpemVfdCBjb25mc3RyIChpbnQgX19uYW1lLCBjaGFyICpfX2J1Ziwgc2l6ZV90 IF9fbGVuKSA7CgoKCgpleHRlcm4gX19waWRfdCBnZXRwaWQgKHZvaWQpIDsKCgpleHRlcm4gX19w aWRfdCBnZXRwcGlkICh2b2lkKSA7CgoKCgpleHRlcm4gX19waWRfdCBnZXRwZ3JwICh2b2lkKSA7 CiMgNTM2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9fcGlkX3QgX19nZXRwZ2lk IChfX3BpZF90IF9fcGlkKSA7CgpleHRlcm4gX19waWRfdCBnZXRwZ2lkIChfX3BpZF90IF9fcGlk KSA7CgoKCgoKCmV4dGVybiBpbnQgc2V0cGdpZCAoX19waWRfdCBfX3BpZCwgX19waWRfdCBfX3Bn aWQpIDsKIyA1NjIgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHNldHBncnAg KHZvaWQpIDsKIyA1ODAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19waWRfdCBz ZXRzaWQgKHZvaWQpIDsKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0c2lkIChfX3BpZF90IF9fcGlkKSA7 CgoKCmV4dGVybiBfX3VpZF90IGdldHVpZCAodm9pZCkgOwoKCmV4dGVybiBfX3VpZF90IGdldGV1 aWQgKHZvaWQpIDsKCgpleHRlcm4gX19naWRfdCBnZXRnaWQgKHZvaWQpIDsKCgpleHRlcm4gX19n aWRfdCBnZXRlZ2lkICh2b2lkKSA7CgoKCgpleHRlcm4gaW50IGdldGdyb3VwcyAoaW50IF9fc2l6 ZSwgX19naWRfdCBfX2xpc3RbXSkgOwoKCgpleHRlcm4gaW50IGdyb3VwX21lbWJlciAoX19naWRf dCBfX2dpZCkgOwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2Rl bFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgIDE0MwoKCgoKCgoKZXh0ZXJuIGludCBzZXR1 aWQgKF9fdWlkX3QgX191aWQpIDsKCgoKCmV4dGVybiBpbnQgc2V0cmV1aWQgKF9fdWlkX3QgX19y dWlkLCBfX3VpZF90IF9fZXVpZCkgOwoKCgoKZXh0ZXJuIGludCBzZXRldWlkIChfX3VpZF90IF9f dWlkKSA7CgoKCgoKCmV4dGVybiBpbnQgc2V0Z2lkIChfX2dpZF90IF9fZ2lkKSA7CgoKCgpleHRl cm4gaW50IHNldHJlZ2lkIChfX2dpZF90IF9fcmdpZCwgX19naWRfdCBfX2VnaWQpIDsKCgoKCmV4 dGVybiBpbnQgc2V0ZWdpZCAoX19naWRfdCBfX2dpZCkgOwoKCgoKCgpleHRlcm4gX19waWRfdCBm b3JrICh2b2lkKSA7CgoKCgoKCmV4dGVybiBfX3BpZF90IHZmb3JrICh2b2lkKSA7CgoKCgoKZXh0 ZXJuIGNoYXIgKnR0eW5hbWUgKGludCBfX2ZkKSA7CgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAxNDQK CgpleHRlcm4gaW50IHR0eW5hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19i dWZsZW4pIDsKCgoKZXh0ZXJuIGludCBpc2F0dHkgKGludCBfX2ZkKSA7CgoKCgoKZXh0ZXJuIGlu dCB0dHlzbG90ICh2b2lkKSA7CgoKCgpleHRlcm4gaW50IGxpbmsgKF9fY29uc3QgY2hhciAqX19m cm9tLCBfX2NvbnN0IGNoYXIgKl9fdG8pIDsKCgoKZXh0ZXJuIGludCBzeW1saW5rIChfX2NvbnN0 IGNoYXIgKl9fZnJvbSwgX19jb25zdCBjaGFyICpfX3RvKSA7CgoKCgpleHRlcm4gaW50IHJlYWRs aW5rIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXRoLCBjaGFyICpfX3Jlc3RyaWN0IF9f YnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIDsKCgoKZXh0ZXJuIGludCB1 bmxpbmsgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKZXh0ZXJuIGludCBybWRpciAoX19jb25z dCBjaGFyICpfX3BhdGgpIDsKCgoKZXh0ZXJuIF9fcGlkX3QgdGNnZXRwZ3JwIChpbnQgX19mZCkg OwoKCmV4dGVybiBpbnQgdGNzZXRwZ3JwIChpbnQgX19mZCwgX19waWRfdCBfX3BncnBfaWQpIDsK CgoKZXh0ZXJuIGNoYXIgKmdldGxvZ2luICh2b2lkKSA7CgoKCgpleHRlcm4gaW50IGdldGxvZ2lu X3IgKGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbmFtZV9sZW4pIDsKCgoKCmV4dGVybiBpbnQgc2V0 bG9naW4gKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CiMgNzI2ICIvdXNyL2luY2x1ZGUvdW5pc3Rk LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDEgMwoKCgoKCgoKMjAwMS0wOC0yNCAw MToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAg MTQ1CgoKIyA0NyAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiBjaGFyICpvcHRhcmc7 CiMgNjEgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwpleHRlcm4gaW50IG9wdGluZDsKCgoKCmV4 dGVybiBpbnQgb3B0ZXJyOwoKCgpleHRlcm4gaW50IG9wdG9wdDsKIyAxNDUgIi91c3IvaW5jbHVk ZS9nZXRvcHQuaCIgMwpleHRlcm4gaW50IGdldG9wdCAoaW50IF9fYXJnYywgY2hhciAqY29uc3Qg Kl9fYXJndiwgY29uc3QgY2hhciAqX19zaG9ydG9wdHMpOwojIDcyNyAiL3Vzci9pbmNsdWRlL3Vu aXN0ZC5oIiAyIDMKCgoKCgoKCmV4dGVybiBpbnQgZ2V0aG9zdG5hbWUgKGNoYXIgKl9fbmFtZSwg c2l6ZV90IF9fbGVuKSA7CgoKCgoKCmV4dGVybiBpbnQgc2V0aG9zdG5hbWUgKF9fY29uc3QgY2hh ciAqX19uYW1lLCBzaXplX3QgX19sZW4pIDsKCgoKZXh0ZXJuIGludCBzZXRob3N0aWQgKGxvbmcg aW50IF9faWQpIDsKCgoKCgpleHRlcm4gaW50IGdldGRvbWFpbm5hbWUgKGNoYXIgKl9fbmFtZSwg c2l6ZV90IF9fbGVuKSA7CmV4dGVybiBpbnQgc2V0ZG9tYWlubmFtZSAoX19jb25zdCBjaGFyICpf X25hbWUsIHNpemVfdCBfX2xlbikgOwoKCgoKCmV4dGVybiBpbnQgdmhhbmd1cCAodm9pZCkgOwoK CmV4dGVybiBpbnQgcmV2b2tlIChfX2NvbnN0IGNoYXIgKl9fZmlsZSkgOwoKCgoKCgoKCgoKCgoy MDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAg ICAgICBQYWdlICAxNDYKCgoKCmV4dGVybiBpbnQgcHJvZmlsICh1bnNpZ25lZCBzaG9ydCBpbnQg Kl9fc2FtcGxlX2J1ZmZlciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX29mZnNldCwgdW5zaWduZWQgaW50IF9fc2NhbGUpIDsKCgoKCgpleHRlcm4gaW50IGFjY3Qg KF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKCmV4dGVybiBjaGFyICpnZXR1c2Vyc2hlbGwgKHZv aWQpIDsKZXh0ZXJuIHZvaWQgZW5kdXNlcnNoZWxsICh2b2lkKSA7CmV4dGVybiB2b2lkIHNldHVz ZXJzaGVsbCAodm9pZCkgOwoKCgoKCmV4dGVybiBpbnQgZGFlbW9uIChpbnQgX19ub2NoZGlyLCBp bnQgX19ub2Nsb3NlKSA7CgoKCgoKCmV4dGVybiBpbnQgY2hyb290IChfX2NvbnN0IGNoYXIgKl9f cGF0aCkgOwoKCgpleHRlcm4gY2hhciAqZ2V0cGFzcyAoX19jb25zdCBjaGFyICpfX3Byb21wdCkg OwoKCgoKCmV4dGVybiBpbnQgZnN5bmMgKGludCBfX2ZkKSA7CgoKCgoKCmV4dGVybiBsb25nIGlu dCBnZXRob3N0aWQgKHZvaWQpIDsKCgpleHRlcm4gdm9pZCBzeW5jICh2b2lkKSA7CgoKCgpleHRl cm4gaW50IGdldHBhZ2VzaXplICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK CgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAg ICAgICAgICAgICAgIFBhZ2UgIDE0NwoKCgoKZXh0ZXJuIGludCB0cnVuY2F0ZSAoX19jb25zdCBj aGFyICpfX2ZpbGUsIF9fb2ZmX3QgX19sZW5ndGgpIDsKIyA4MzYgIi91c3IvaW5jbHVkZS91bmlz dGQuaCIgMwpleHRlcm4gaW50IHRydW5jYXRlNjQgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX29m ZjY0X3QgX19sZW5ndGgpIDsKCgoKCmV4dGVybiBpbnQgZnRydW5jYXRlIChpbnQgX19mZCwgX19v ZmZfdCBfX2xlbmd0aCkgOwojIDg1MSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBp bnQgZnRydW5jYXRlNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19sZW5ndGgpIDsKCgoKCgpleHRl cm4gaW50IGdldGR0YWJsZXNpemUgKHZvaWQpIDsKIyA4NjYgIi91c3IvaW5jbHVkZS91bmlzdGQu aCIgMwpleHRlcm4gaW50IGJyayAodm9pZCAqX19hZGRyKSA7CgoKCgoKZXh0ZXJuIHZvaWQgKnNi cmsgKGludHB0cl90IF9fZGVsdGEpIDsKIyA4ODcgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpl eHRlcm4gbG9uZyBpbnQgc3lzY2FsbCAobG9uZyBpbnQgX19zeXNubywgLi4uKSA7CiMgOTA3ICIv dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBsb2NrZiAoaW50IF9fZmQsIGludCBf X2NtZCwgX19vZmZfdCBfX2xlbikgOwojIDkxNyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4 dGVybiBpbnQgbG9ja2Y2NCAoaW50IF9fZmQsIGludCBfX2NtZCwgX19vZmY2NF90IF9fbGVuKSA7 CiMgOTM4ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBmZGF0YXN5bmMgKGlu dCBfX2ZpbGRlcykgOwoKCgoKCgoKZXh0ZXJuIGNoYXIgKmNyeXB0IChfX2NvbnN0IGNoYXIgKl9f a2V5LCBfX2NvbnN0IGNoYXIgKl9fc2FsdCkgOwoKCgpleHRlcm4gdm9pZCBlbmNyeXB0IChjaGFy ICpfX2Jsb2NrLCBpbnQgX19lZGZsYWcpIDsKCgoKCgoKZXh0ZXJuIHZvaWQgc3dhYiAoX19jb25z dCB2b2lkICpfX3Jlc3RyaWN0IF9fZnJvbSwgdm9pZCAqX19yZXN0cmljdCBfX3RvLAogICAgICAg ICAgICAgICAgICBzc2l6ZV90IF9fbikgOwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAg ICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAxNDgKCgoKCgoK CmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIDsKIyA5ODMgIi91c3IvaW5jbHVkZS91 bmlzdGQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAo dm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3BhcmVudCkgKHZvaWQp LAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSA7CiMg MjAgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9taXNjLmgiIDIKIyAxICIvdXNyL2luY2x1ZGUv dGltZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9mZWF0dXJlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCiMgMzggIi91 c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzkgIi91c3IvaW5j bHVkZS90aW1lLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMg NDMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwojIDU2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgNTcgIi91c3IvaW5jbHVkZS90 aW1lLmgiIDIgMwoKCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CgoKCgoKCgojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMK Cgp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsKIyA3OSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDgwICIvdXNyL2luY2x1ZGUvdGlt ZS5oIiAyIDMKCgp0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2NraWRfdDsKIyA5MSAiL3Vzci9pbmNs dWRlL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDkyICIv dXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgp0eXBlZGVmIF9fdGltZXJfdCB0aW1lcl90OwojIDEw NiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CgoKCgoKCgoyMDAx LTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAg ICBQYWdlICAxNDkKCgogICAgbG9uZyBpbnQgdHZfc2VjOwogICAgbG9uZyBpbnQgdHZfbnNlYzsK ICB9OwoKCgoKCgoKc3RydWN0IHRtCnsKICBpbnQgdG1fc2VjOwogIGludCB0bV9taW47CiAgaW50 IHRtX2hvdXI7CiAgaW50IHRtX21kYXk7CiAgaW50IHRtX21vbjsKICBpbnQgdG1feWVhcjsKICBp bnQgdG1fd2RheTsKICBpbnQgdG1feWRheTsKICBpbnQgdG1faXNkc3Q7CgoKICBsb25nIGludCB0 bV9nbXRvZmY7CiAgX19jb25zdCBjaGFyICp0bV96b25lOwoKCgoKfTsKCgoKCnN0cnVjdCBpdGlt ZXJzcGVjCiAgewogICAgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOwogICAgc3RydWN0IHRp bWVzcGVjIGl0X3ZhbHVlOwogIH07CgoKc3RydWN0IHNpZ2V2ZW50OwojIDE2MyAiL3Vzci9pbmNs dWRlL3RpbWUuaCIgMwpleHRlcm4gY2xvY2tfdCBjbG9jayAodm9pZCkgOwoKCmV4dGVybiB0aW1l X3QgdGltZSAodGltZV90ICpfX3RpbWVyKSA7CgoKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGlt ZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUwKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCmV4dGVybiB0aW1lX3QgbWt0aW1lIChzdHJ1Y3QgdG0gKl9fdHApIDsK CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkg ICAgICAgICAgICAgICAgUGFnZSAgMTUwCgoKCgoKZXh0ZXJuIHNpemVfdCBzdHJmdGltZSAoY2hh ciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUsCiAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgOwoKCgoKZXh0ZXJuIGNo YXIgKnN0cnB0aW1lIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgc3RydWN0IHRtICpfX3Rw KQogICAgICAgICAgICA7CgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lIChfX2NvbnN0IHRp bWVfdCAqX190aW1lcikgOwoKCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWUgKF9fY29uc3Qg dGltZV90ICpfX3RpbWVyKSA7CgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAoX19jb25z dCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSA7CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2Fs dGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIDsKCgoKCmV4dGVy biBjaGFyICphc2N0aW1lIChfX2NvbnN0IHN0cnVjdCB0bSAqX190cCkgOwoKCmV4dGVybiBjaGFy ICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIDsKCgoKCgoKZXh0ZXJuIGNoYXIgKmFz Y3RpbWVfciAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCwKICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgOwoKCmV4dGVybiBjaGFyICpjdGlt ZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAg ICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgOwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAxNTEK CgoKCmV4dGVybiBjaGFyICpfX3R6bmFtZVsyXTsKZXh0ZXJuIGludCBfX2RheWxpZ2h0OwpleHRl cm4gbG9uZyBpbnQgX190aW1lem9uZTsKCgoKCmV4dGVybiBjaGFyICp0em5hbWVbMl07CgoKCmV4 dGVybiB2b2lkIHR6c2V0ICh2b2lkKSA7CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBs b25nIGludCB0aW1lem9uZTsKCgoKCgpleHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRpbWVfdCAq X193aGVuKSA7CiMgMjcxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiB0aW1lX3QgdGlt ZWdtIChzdHJ1Y3QgdG0gKl9fdHApIDsKCgpleHRlcm4gdGltZV90IHRpbWVsb2NhbCAoc3RydWN0 IHRtICpfX3RwKSA7CgoKZXh0ZXJuIGludCBkeXNpemUgKGludCBfX3llYXIpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IG5hbm9zbGVlcCAoX19jb25zdCBzdHJ1 Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSA7CgoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0cmVzIChj bG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3JlcykgOwoKCmV4dGVybiBp bnQgY2xvY2tfZ2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAq X190cCkgOwoKCmV4dGVybiBpbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQs IF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RwKQogICAgICAgICAgICA7CgoKCmV4dGVybiBp bnQgY2xvY2tfbmFub3NsZWVwIChjbG9ja2lkX3QgX19jbG9ja19pZCwgaW50IF9fZmxhZ3MsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXEs CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAg ICAgICAgICAgICAgICBQYWdlICAxNTIKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHRpbWVzcGVjICpfX3JlbSkgOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0Y3B1Y2xvY2tpZCAo cGlkX3QgX19waWQsIGNsb2NraWRfdCAqX19jbG9ja19pZCkgOwoKCgoKZXh0ZXJuIGludCB0aW1l cl9jcmVhdGUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3RyaWN0IF9fZXZwLAogICAgICAgICAgICAgICAgICAgICAg ICAgdGltZXJfdCAqX19yZXN0cmljdCBfX3RpbWVyaWQpIDsKCgpleHRlcm4gaW50IHRpbWVyX2Rl bGV0ZSAodGltZXJfdCBfX3RpbWVyaWQpIDsKCgpleHRlcm4gaW50IHRpbWVyX3NldHRpbWUgKHRp bWVyX3QgX190aW1lcmlkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9fdmFsdWUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX19vdmFsdWUpIDsK CgpleHRlcm4gaW50IHRpbWVyX2dldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBzdHJ1Y3QgaXRp bWVyc3BlYyAqX192YWx1ZSkKICAgICAgICAgICAgOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0b3Zl cnJ1biAodGltZXJfdCBfX3RpbWVyaWQpIDsKIyAzNDIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK ZXh0ZXJuIGludCBnZXRkYXRlX2VycjsKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnZXRkYXRlIChf X2NvbnN0IGNoYXIgKl9fc3RyaW5nKSA7CiMgMzU3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4 dGVybiBpbnQgZ2V0ZGF0ZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zdHJpbmcsCiAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX19yZXNidWZwKSA7CiMg MjEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9taXNjLmgiIDIKIyAxICIvdXNyL2luY2x1ZGUv c3lzL3RpbWUuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIg MiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1 ZGUvc3lzL3RpbWUuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDI3ICIv dXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUu aCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL3R5cGVzLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDIgMwoK CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkg ICAgICAgICAgICAgICAgUGFnZSAgMTUzCgoKc3RydWN0IHRpbWV2YWwKICB7CiAgICBfX3RpbWVf dCB0dl9zZWM7CiAgICBfX3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsKIyAyOSAiL3Vzci9pbmNs dWRlL3N5cy90aW1lLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMK IyAyNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0 dXJlcy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAxICIv dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxl Y3QuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMzIgIi91 c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2ln c2V0LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVmIGlu dCBfX3NpZ19hdG9taWNfdDsKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9u ZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwog IH0gX19zaWdzZXRfdDsKIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCnR5 cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg MSAzCiMgNDQgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy90aW1lLmgiIDEgMwojIDQ2ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMK CgoKdHlwZWRlZiBsb25nIGludCBfX2ZkX21hc2s7CgoKCgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAx OjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAx NTQKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAv ICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRl ZiBfX2ZkX21hc2sgZmRfbWFzazsKIyA5NiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwpl eHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZk cywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAg ICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAg ICAgICAgICAgc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSA7CgoKCgoKZXh0 ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRz LAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAg ICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAg ICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QgX190aW1lb3V0LAog ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19zaWdtYXNr KSA7CiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMKCgp0eXBlZGVmIF9fc3VzZWNv bmRzX3Qgc3VzZWNvbmRzX3Q7CiMgNTYgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzCnN0cnVj dCB0aW1lem9uZQogIHsKICAgIGludCB0el9taW51dGVzd2VzdDsKICAgIGludCB0el9kc3R0aW1l OwogIH07Cgp0eXBlZGVmIHN0cnVjdCB0aW1lem9uZSAqX19yZXN0cmljdCBfX3RpbWV6b25lX3B0 cl90OwojIDcyICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldHRpbWVv ZmRheSAoc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190diwKICAgICAgICAgICAgICAgICAg ICAgICAgIF9fdGltZXpvbmVfcHRyX3QgX190eikgOwoKCgoKZXh0ZXJuIGludCBzZXR0aW1lb2Zk YXkgKF9fY29uc3Qgc3RydWN0IHRpbWV2YWwgKl9fdHYsCiAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IHN0cnVjdCB0aW1lem9uZSAqX190eikgOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToy MSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgMTU1 CgoKCgoKCgpleHRlcm4gaW50IGFkanRpbWUgKF9fY29uc3Qgc3RydWN0IHRpbWV2YWwgKl9fZGVs dGEsCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKl9fb2xkZGVsdGEpIDsKCgoK CmVudW0gX19pdGltZXJfd2hpY2gKICB7CgogICAgSVRJTUVSX1JFQUwgPSAwLAoKCiAgICBJVElN RVJfVklSVFVBTCA9IDEsCgoKCiAgICBJVElNRVJfUFJPRiA9IDIKCiAgfTsKCgoKc3RydWN0IGl0 aW1lcnZhbAogIHsKCiAgICBzdHJ1Y3QgdGltZXZhbCBpdF9pbnRlcnZhbDsKCiAgICBzdHJ1Y3Qg dGltZXZhbCBpdF92YWx1ZTsKICB9OwoKCnR5cGVkZWYgZW51bSBfX2l0aW1lcl93aGljaCBfX2l0 aW1lcl93aGljaF90OwoKCgoKCgpleHRlcm4gaW50IGdldGl0aW1lciAoX19pdGltZXJfd2hpY2hf dCBfX3doaWNoLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnZhbCAqX192YWx1 ZSkgOwoKCgoKZXh0ZXJuIGludCBzZXRpdGltZXIgKF9faXRpbWVyX3doaWNoX3QgX193aGljaCwK ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IGl0aW1lcnZhbCAqX19yZXN0cmlj dCBfX25ldywKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpdGltZXJ2YWwgKl9fcmVzdHJp Y3QgX19vbGQpIDsKCgoKZXh0ZXJuIGludCB1dGltZXMgKF9fY29uc3QgY2hhciAqX19maWxlLCBf X2NvbnN0IHN0cnVjdCB0aW1ldmFsIF9fdHZwWzJdKQoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAg ICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgMTU2CgoK ICAgICAgICAgICAgOwojIDIyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvbWlzYy5oIiAyCiMg MSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIg MwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2Vy cm5vLmgiIDIgMwoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDEgMwojIDI1 ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vy cm5vLmgiIDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vZXJybm8uaCIgMSAzCiMgNSAiL3Vz ci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDIgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJu by5oIiAyIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwpleHRlcm4gaW50IGVy cm5vOwoKCmV4dGVybiBpbnQgKl9fZXJybm9fbG9jYXRpb24gKHZvaWQpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKIyAzNyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMwojIDU1ICIvdXNy L2luY2x1ZGUvZXJybm8uaCIgMwpleHRlcm4gY2hhciAqcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUs ICpwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsKIyA2OSAiL3Vzci9pbmNsdWRlL2Vycm5v LmgiIDMKdHlwZWRlZiBpbnQgZXJyb3JfdDsKIyAyMyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRl L21pc2MuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMKIyAyNiAiL3Vzci9pbmNs dWRlL2N0eXBlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91 c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAx IDMKIyAyOCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMwojIDQwICIvdXNyL2luY2x1ZGUvY3R5 cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgNDEgIi91c3IvaW5jbHVk ZS9jdHlwZS5oIiAyIDMKCgoKCgoKZW51bQp7CiAgX0lTdXBwZXIgPSAoKDApIDwgOCA/ICgoMSA8 PCAoMCkpIDw8IDgpIDogKCgxIDw8ICgwKSkgPj4gOCkpLAogIF9JU2xvd2VyID0gKCgxKSA8IDgg PyAoKDEgPDwgKDEpKSA8PCA4KSA6ICgoMSA8PCAoMSkpID4+IDgpKSwKICBfSVNhbHBoYSA9ICgo MikgPCA4ID8gKCgxIDw8ICgyKSkgPDwgOCkgOiAoKDEgPDwgKDIpKSA+PiA4KSksCiAgX0lTZGln aXQgPSAoKDMpIDwgOCA/ICgoMSA8PCAoMykpIDw8IDgpIDogKCgxIDw8ICgzKSkgPj4gOCkpLAog IF9JU3hkaWdpdCA9ICgoNCkgPCA4ID8gKCgxIDw8ICg0KSkgPDwgOCkgOiAoKDEgPDwgKDQpKSA+ PiA4KSksCiAgX0lTc3BhY2UgPSAoKDUpIDwgOCA/ICgoMSA8PCAoNSkpIDw8IDgpIDogKCgxIDw8 ICg1KSkgPj4gOCkpLAogIF9JU3ByaW50ID0gKCg2KSA8IDggPyAoKDEgPDwgKDYpKSA8PCA4KSA6 ICgoMSA8PCAoNikpID4+IDgpKSwKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAg ICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgIDE1NwoKCiAgX0lTZ3JhcGgg PSAoKDcpIDwgOCA/ICgoMSA8PCAoNykpIDw8IDgpIDogKCgxIDw8ICg3KSkgPj4gOCkpLAogIF9J U2JsYW5rID0gKCg4KSA8IDggPyAoKDEgPDwgKDgpKSA8PCA4KSA6ICgoMSA8PCAoOCkpID4+IDgp KSwKICBfSVNjbnRybCA9ICgoOSkgPCA4ID8gKCgxIDw8ICg5KSkgPDwgOCkgOiAoKDEgPDwgKDkp KSA+PiA4KSksCiAgX0lTcHVuY3QgPSAoKDEwKSA8IDggPyAoKDEgPDwgKDEwKSkgPDwgOCkgOiAo KDEgPDwgKDEwKSkgPj4gOCkpLAogIF9JU2FsbnVtID0gKCgxMSkgPCA4ID8gKCgxIDw8ICgxMSkp IDw8IDgpIDogKCgxIDw8ICgxMSkpID4+IDgpKQp9OwojIDc1ICIvdXNyL2luY2x1ZGUvY3R5cGUu aCIgMwpleHRlcm4gX19jb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKZXh0ZXJu IF9fY29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3RvbG93ZXI7CmV4dGVybiBfX2NvbnN0IF9faW50 MzJfdCAqX19jdHlwZV90b3VwcGVyOwojIDkxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRl cm4gaW50IGlzYWxudW0gKGludCkgOwpleHRlcm4gaW50IGlzYWxwaGEgKGludCkgOwpleHRlcm4g aW50IGlzY250cmwgKGludCkgOwpleHRlcm4gaW50IGlzZGlnaXQgKGludCkgOwpleHRlcm4gaW50 IGlzbG93ZXIgKGludCkgOwpleHRlcm4gaW50IGlzZ3JhcGggKGludCkgOwpleHRlcm4gaW50IGlz cHJpbnQgKGludCkgOwpleHRlcm4gaW50IGlzcHVuY3QgKGludCkgOwpleHRlcm4gaW50IGlzc3Bh Y2UgKGludCkgOwpleHRlcm4gaW50IGlzdXBwZXIgKGludCkgOwpleHRlcm4gaW50IGlzeGRpZ2l0 IChpbnQpIDsKCgpleHRlcm4gaW50IGlzYmxhbmsgKGludCkgOwoKCgoKZXh0ZXJuIGludCB0b2xv d2VyIChpbnQgX19jKSA7CgoKZXh0ZXJuIGludCB0b3VwcGVyIChpbnQgX19jKSA7CgoKCgoKCmV4 dGVybiBpbnQgaXNhc2NpaSAoaW50IF9fYykgOwoKCgpleHRlcm4gaW50IHRvYXNjaWkgKGludCBf X2MpIDsKCgoKZXh0ZXJuIGludCBfdG91cHBlciAoaW50KSA7CmV4dGVybiBpbnQgX3RvbG93ZXIg KGludCkgOwojIDE2OCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIF9faW5saW5lIGlu dAp0b2xvd2VyIChpbnQgX19jKQp7CiAgcmV0dXJuIF9fYyA+PSAtMTI4ICYmIF9fYyA8IDI1NiA/ IF9fY3R5cGVfdG9sb3dlcltfX2NdIDogX19jOwp9CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAg ICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgMTU4CgoK ZXh0ZXJuIF9faW5saW5lIGludAp0b3VwcGVyIChpbnQgX19jKQp7CiAgcmV0dXJuIF9fYyA+PSAt MTI4ICYmIF9fYyA8IDI1NiA/IF9fY3R5cGVfdG91cHBlcltfX2NdIDogX19jOwp9CiMgMjExICIv dXNyL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwoj IDIxMiAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMwojIDIyNCAiL3Vzci9pbmNsdWRlL2N0eXBl LmgiIDMKZXh0ZXJuIGludCBfX2lzYWxudW1fbCAoaW50LCBfX2xvY2FsZV90KSA7CmV4dGVybiBp bnQgX19pc2FscGhhX2wgKGludCwgX19sb2NhbGVfdCkgOwpleHRlcm4gaW50IF9faXNjbnRybF9s IChpbnQsIF9fbG9jYWxlX3QpIDsKZXh0ZXJuIGludCBfX2lzZGlnaXRfbCAoaW50LCBfX2xvY2Fs ZV90KSA7CmV4dGVybiBpbnQgX19pc2xvd2VyX2wgKGludCwgX19sb2NhbGVfdCkgOwpleHRlcm4g aW50IF9faXNncmFwaF9sIChpbnQsIF9fbG9jYWxlX3QpIDsKZXh0ZXJuIGludCBfX2lzcHJpbnRf bCAoaW50LCBfX2xvY2FsZV90KSA7CmV4dGVybiBpbnQgX19pc3B1bmN0X2wgKGludCwgX19sb2Nh bGVfdCkgOwpleHRlcm4gaW50IF9faXNzcGFjZV9sIChpbnQsIF9fbG9jYWxlX3QpIDsKZXh0ZXJu IGludCBfX2lzdXBwZXJfbCAoaW50LCBfX2xvY2FsZV90KSA7CmV4dGVybiBpbnQgX19pc3hkaWdp dF9sIChpbnQsIF9fbG9jYWxlX3QpIDsKCmV4dGVybiBpbnQgX19pc2JsYW5rX2wgKGludCwgX19s b2NhbGVfdCkgOwoKCgpleHRlcm4gaW50IF9fdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90 IF9fbCkgOwoKCmV4dGVybiBpbnQgX190b3VwcGVyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19s KSA7CiMgMjQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9taXNjLmgiIDIKIyAxICIvdXNyL2lu Y2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9zeXMv dHlwZXMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMzEg Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7 CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2ludDsKdHlwZWRl ZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBlZGVmIF9fdV9x dWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCnR5cGVkZWYgX19sb2Zm X3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCgoKMjAwMS0wOC0yNCAw MToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAg MTU5CgoKCgoKCgp0eXBlZGVmIF9faW5vNjRfdCBpbm82NF90OwoKCgoKdHlwZWRlZiBfX2Rldl90 IGRldl90OwojIDY4ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX21vZGVf dCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwojIDEwMSAiL3Vzci9pbmNs dWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19pZF90IGlkX3Q7CiMgMTExICIvdXNyL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2Nh ZGRyX3QgY2FkZHJfdDsKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwojIDEyNiAiL3Vzci9pbmNs dWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMTI3ICIv dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwojIDE0MCAiL3Vzci9pbmNsdWRlL3N5cy90eXBl cy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMC4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE0MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBl cy5oIiAyIDMKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNp Z25lZCBzaG9ydCBpbnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OwojIDE4NCAi L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0 ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0 ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0 ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0 ZV9fICgoX19tb2RlX18gKF9fRElfXykpKTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDhf dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBp bnQgdV9pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVm IHVuc2lnbmVkIGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18p KSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl X18gKF9fRElfXykpKTsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAoKF9f bW9kZV9fIChfX3dvcmRfXykpKTsKIyAyMDYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgMjA3ICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDIgMwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2Rl bFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgIDE2MAoKCgojIDEgIi91c3IvaW5jbHVkZS9z eXMvc2VsZWN0LmgiIDEgMwojIDIxMCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoj IDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwojIDIxMyAiL3Vzci9pbmNsdWRl L3N5cy90eXBlcy5oIiAyIDMKCgoKCnR5cGVkZWYgX19ibGtzaXplX3QgYmxrc2l6ZV90OwoKCgoK Cgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2Jsa2NudF90IGZz YmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250X3Q7CiMgMjUxICIvdXNy L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250NjRfdDsK dHlwZWRlZiBfX2ZzYmxrY250NjRfdCBmc2Jsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2ZpbGNudDY0 X3QgZnNmaWxjbnQ2NF90OwojIDI1ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvbWlzYy5oIiAy CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lz L3N0YXQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9p bmNsdWRlL3N5cy9zdGF0LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAx IDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVk ZS90aW1lLmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMiAzCiMgOTggIi91 c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RhdC5oIiAx IDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvc3RhdC5oIiAzCnN0cnVjdCBzdGF0CiAgewogICAg X19kZXZfdCBzdF9kZXY7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19wYWQxOwoKICAgIF9faW5v X3Qgc3RfaW5vOwoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1v ZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgMTYxCgoKICAgIF9fbW9kZV90IHN0X21v ZGU7CiAgICBfX25saW5rX3Qgc3Rfbmxpbms7CiAgICBfX3VpZF90IHN0X3VpZDsKICAgIF9fZ2lk X3Qgc3RfZ2lkOwogICAgX19kZXZfdCBzdF9yZGV2OwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9f cGFkMjsKCiAgICBfX29mZl90IHN0X3NpemU7CgoKCiAgICBfX2Jsa3NpemVfdCBzdF9ibGtzaXpl OwoKCiAgICBfX2Jsa2NudF90IHN0X2Jsb2NrczsKCgoKICAgIF9fdGltZV90IHN0X2F0aW1lOwog ICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQxOwogICAgX190aW1lX3Qgc3RfbXRpbWU7CiAg ICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDI7CiAgICBfX3RpbWVfdCBzdF9jdGltZTsKICAg IHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMzsKCiAgICB1bnNpZ25lZCBsb25nIGludCBfX3Vu dXNlZDQ7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDU7CgoKCiAgfTsKCgpzdHJ1Y3Qg c3RhdDY0CiAgewogICAgX19kZXZfdCBzdF9kZXY7CiAgICB1bnNpZ25lZCBpbnQgX19wYWQxOwoK ICAgIF9faW5vX3QgX19zdF9pbm87CiAgICBfX21vZGVfdCBzdF9tb2RlOwogICAgX19ubGlua190 IHN0X25saW5rOwogICAgX191aWRfdCBzdF91aWQ7CiAgICBfX2dpZF90IHN0X2dpZDsKICAgIF9f ZGV2X3Qgc3RfcmRldjsKICAgIHVuc2lnbmVkIGludCBfX3BhZDI7CiAgICBfX29mZjY0X3Qgc3Rf c2l6ZTsKICAgIF9fYmxrc2l6ZV90IHN0X2Jsa3NpemU7CgogICAgX19ibGtjbnQ2NF90IHN0X2Js b2NrczsKICAgIF9fdGltZV90IHN0X2F0aW1lOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVz ZWQxOwogICAgX190aW1lX3Qgc3RfbXRpbWU7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNl ZDI7CiAgICBfX3RpbWVfdCBzdF9jdGltZTsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2Vk MzsKICAgIF9faW5vNjRfdCBzdF9pbm87CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAg ICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAxNjIKCgogIH07CiMg OTkgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAyIDMKIyAyMDAgIi91c3IvaW5jbHVkZS9zeXMv c3RhdC5oIiAzCmV4dGVybiBpbnQgc3RhdCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmls ZSwKICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCAqX19yZXN0cmljdCBfX2J1ZikgOwoKCgpl eHRlcm4gaW50IGZzdGF0IChpbnQgX19mZCwgc3RydWN0IHN0YXQgKl9fYnVmKSA7CiMgMjE5ICIv dXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwpleHRlcm4gaW50IHN0YXQ2NCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZmlsZSwKICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0NjQgKl9f cmVzdHJpY3QgX19idWYpIDsKZXh0ZXJuIGludCBmc3RhdDY0IChpbnQgX19mZCwgc3RydWN0IHN0 YXQ2NCAqX19idWYpIDsKCgoKCgoKZXh0ZXJuIGludCBsc3RhdCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZmlsZSwKICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgKl9fcmVzdHJpY3Qg X19idWYpIDsKIyAyNDEgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAzCmV4dGVybiBpbnQgbHN0 YXQ2NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZSwKICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3Qgc3RhdDY0ICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCgoKCmV4dGVybiBpbnQgY2ht b2QgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX21vZGVfdCBfX21vZGUpIDsKCgoKZXh0ZXJuIGlu dCBmY2htb2QgKGludCBfX2ZkLCBfX21vZGVfdCBfX21vZGUpIDsKCgoKCgpleHRlcm4gX19tb2Rl X3QgdW1hc2sgKF9fbW9kZV90IF9fbWFzaykgOwoKCgoKZXh0ZXJuIF9fbW9kZV90IGdldHVtYXNr ICh2b2lkKSA7CgoKCmV4dGVybiBpbnQgbWtkaXIgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX21v ZGVfdCBfX21vZGUpIDsKCgoKCgpleHRlcm4gaW50IG1rbm9kIChfX2NvbnN0IGNoYXIgKl9fcGF0 aCwgX19tb2RlX3QgX19tb2RlLCBfX2Rldl90IF9fZGV2KQoKCgoKCgoKMjAwMS0wOC0yNCAwMToy MSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgMTYz CgoKICAgICAgICAgICAgOwoKCgoKZXh0ZXJuIGludCBta2ZpZm8gKF9fY29uc3QgY2hhciAqX19w YXRoLCBfX21vZGVfdCBfX21vZGUpIDsKIyAzMDYgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAz CmV4dGVybiBpbnQgX19meHN0YXQgKGludCBfX3ZlciwgaW50IF9fZmlsZGVzLCBzdHJ1Y3Qgc3Rh dCAqX19zdGF0X2J1ZikgOwpleHRlcm4gaW50IF9feHN0YXQgKGludCBfX3ZlciwgX19jb25zdCBj aGFyICpfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3N0YXRf YnVmKSA7CmV4dGVybiBpbnQgX19seHN0YXQgKGludCBfX3ZlciwgX19jb25zdCBjaGFyICpfX2Zp bGVuYW1lLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCAqX19zdGF0X2J1ZikgOwoj IDMzMCAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMKZXh0ZXJuIGludCBfX2Z4c3RhdDY0IChp bnQgX192ZXIsIGludCBfX2ZpbGRlcywgc3RydWN0IHN0YXQ2NCAqX19zdGF0X2J1ZikKICAgICAg ICAgICAgOwpleHRlcm4gaW50IF9feHN0YXQ2NCAoaW50IF9fdmVyLCBfX2NvbnN0IGNoYXIgKl9f ZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdDY0ICpfX3N0YXRfYnVm KSA7CmV4dGVybiBpbnQgX19seHN0YXQ2NCAoaW50IF9fdmVyLCBfX2NvbnN0IGNoYXIgKl9fZmls ZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQ2NCAqX19zdGF0X2J1Zikg OwoKZXh0ZXJuIGludCBfX3hta25vZCAoaW50IF9fdmVyLCBfX2NvbnN0IGNoYXIgKl9fcGF0aCwg X19tb2RlX3QgX19tb2RlLAogICAgICAgICAgICAgICAgICAgICBfX2Rldl90ICpfX2RldikgOwoK CgoKZXh0ZXJuIF9faW5saW5lX18gaW50IHN0YXQgKF9fY29uc3QgY2hhciAqX19wYXRoLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgKl9fc3RhdGJ1ZikKewogIHJldHVy biBfX3hzdGF0ICgzLCBfX3BhdGgsIF9fc3RhdGJ1Zik7Cn0KCgpleHRlcm4gX19pbmxpbmVfXyBp bnQgbHN0YXQgKF9fY29uc3QgY2hhciAqX19wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBzdGF0ICpfX3N0YXRidWYpCnsKICByZXR1cm4gX19seHN0YXQgKDMsIF9fcGF0 aCwgX19zdGF0YnVmKTsKfQoKCmV4dGVybiBfX2lubGluZV9fIGludCBmc3RhdCAoaW50IF9fZmQs IHN0cnVjdCBzdGF0ICpfX3N0YXRidWYpCnsKICByZXR1cm4gX19meHN0YXQgKDMsIF9fZmQsIF9f c3RhdGJ1Zik7Cn0KCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgbWtub2QgKF9fY29uc3QgY2hhciAq X19wYXRoLCBfX21vZGVfdCBfX21vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19k ZXZfdCBfX2RldikKewogIHJldHVybiBfX3hta25vZCAoMSwgX19wYXRoLCBfX21vZGUsICZfX2Rl dik7Cn0KCgoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVs U3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgMTY0CgoKZXh0ZXJuIF9faW5saW5lX18gaW50 IHN0YXQ2NCAoX19jb25zdCBjaGFyICpfX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBzdGF0NjQgKl9fc3RhdGJ1ZikKewogIHJldHVybiBfX3hzdGF0NjQgKDMsIF9f cGF0aCwgX19zdGF0YnVmKTsKfQoKCmV4dGVybiBfX2lubGluZV9fIGludCBsc3RhdDY0IChfX2Nv bnN0IGNoYXIgKl9fcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz dGF0NjQgKl9fc3RhdGJ1ZikKewogIHJldHVybiBfX2x4c3RhdDY0ICgzLCBfX3BhdGgsIF9fc3Rh dGJ1Zik7Cn0KCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgZnN0YXQ2NCAoaW50IF9fZmQsIHN0cnVj dCBzdGF0NjQgKl9fc3RhdGJ1ZikKewogIHJldHVybiBfX2Z4c3RhdDY0ICgzLCBfX2ZkLCBfX3N0 YXRidWYpOwp9CiMgMjYgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9taXNjLmgiIDIKIyAxICIv dXNyL2luY2x1ZGUvbWF0aC5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL21hdGguaCIg MiAzCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAxIDMKIyAyNSAiL3Vz ci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o IiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMiAzCiMgMzQgIi91c3Iv aW5jbHVkZS9tYXRoLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL25hbi5oIiAxIDMK IyAzOCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9t YXRoZGVmLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDMKdHlwZWRl ZiBsb25nIGRvdWJsZSBmbG9hdF90OwoKdHlwZWRlZiBsb25nIGRvdWJsZSBkb3VibGVfdDsKIyA0 MSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgNjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVk ZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUgYWNvcyAoZG91YmxlIF9feCkgOyBl eHRlcm4gZG91YmxlIF9fYWNvcyAoZG91YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJsZSBhc2luIChk b3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19hc2luIChkb3VibGUgX194KSA7CgpleHRlcm4g ZG91YmxlIGF0YW4gKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4gKGRvdWJsZSBf X3gpIDsKCmV4dGVybiBkb3VibGUgYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIDsgZXh0 ZXJuIGRvdWJsZSBfX2F0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194KSA7CgoKCgoKCgoyMDAx LTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAg ICBQYWdlICAxNjUKCgoKCmV4dGVybiBkb3VibGUgY29zIChkb3VibGUgX194KSA7IGV4dGVybiBk b3VibGUgX19jb3MgKGRvdWJsZSBfX3gpIDsKCmV4dGVybiBkb3VibGUgc2luIChkb3VibGUgX194 KSA7IGV4dGVybiBkb3VibGUgX19zaW4gKGRvdWJsZSBfX3gpIDsKCmV4dGVybiBkb3VibGUgdGFu IChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX190YW4gKGRvdWJsZSBfX3gpIDsKCgoKZXh0 ZXJuIHZvaWQgc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nv c3gpIDsgZXh0ZXJuIHZvaWQgX19zaW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBk b3VibGUgKl9fY29zeCkgOwoKCgoKCgpleHRlcm4gZG91YmxlIGNvc2ggKGRvdWJsZSBfX3gpIDsg ZXh0ZXJuIGRvdWJsZSBfX2Nvc2ggKGRvdWJsZSBfX3gpIDsKCmV4dGVybiBkb3VibGUgc2luaCAo ZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fc2luaCAoZG91YmxlIF9feCkgOwoKZXh0ZXJu IGRvdWJsZSB0YW5oIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX190YW5oIChkb3VibGUg X194KSA7CgoKCmV4dGVybiBkb3VibGUgYWNvc2ggKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJs ZSBfX2Fjb3NoIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIGFzaW5oIChkb3VibGUgX194 KSA7IGV4dGVybiBkb3VibGUgX19hc2luaCAoZG91YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJsZSBh dGFuaCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fYXRhbmggKGRvdWJsZSBfX3gpIDsK CgoKCgpleHRlcm4gZG91YmxlIGV4cCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fZXhw IChkb3VibGUgX194KSA7CgoKCmV4dGVybiBkb3VibGUgZXhwMTAgKGRvdWJsZSBfX3gpIDsgZXh0 ZXJuIGRvdWJsZSBfX2V4cDEwIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIHBvdzEwIChk b3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19wb3cxMCAoZG91YmxlIF9feCkgOwoKCgpleHRl cm4gZG91YmxlIGZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIDsgZXh0ZXJuIGRv dWJsZSBfX2ZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIDsKCgpleHRlcm4gZG91 YmxlIGxkZXhwIChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgOyBleHRlcm4gZG91YmxlIF9f bGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSA7CgoKZXh0ZXJuIGRvdWJsZSBsb2cg KGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2xvZyAoZG91YmxlIF9feCkgOwoKCmV4dGVy biBkb3VibGUgbG9nMTAgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2xvZzEwIChkb3Vi bGUgX194KSA7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVs U3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgMTY2CgoKCmV4dGVybiBkb3VibGUgbW9kZiAo ZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpIDsgZXh0ZXJuIGRvdWJsZSBfX21vZGYgKGRvdWJs ZSBfX3gsIGRvdWJsZSAqX19pcHRyKSA7CgoKCmV4dGVybiBkb3VibGUgZXhwbTEgKGRvdWJsZSBf X3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2V4cG0xIChkb3VibGUgX194KSA7CgoKZXh0ZXJuIGRvdWJs ZSBsb2cxcCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fbG9nMXAgKGRvdWJsZSBfX3gp IDsKCgpleHRlcm4gZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2xv Z2IgKGRvdWJsZSBfX3gpIDsKCgoKCmV4dGVybiBkb3VibGUgZXhwMiAoZG91YmxlIF9feCkgOyBl eHRlcm4gZG91YmxlIF9fZXhwMiAoZG91YmxlIF9feCkgOwoKCmV4dGVybiBkb3VibGUgbG9nMiAo ZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fbG9nMiAoZG91YmxlIF9feCkgOwoKCgoKCgpl eHRlcm4gZG91YmxlIHBvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOyBleHRlcm4gZG91Ymxl IF9fcG93IChkb3VibGUgX194LCBkb3VibGUgX195KSA7CgoKZXh0ZXJuIGRvdWJsZSBzcXJ0IChk b3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19zcXJ0IChkb3VibGUgX194KSA7CgoKCmV4dGVy biBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGRvdWJsZSBf X2h5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KSA7CgoKCgpleHRlcm4gZG91YmxlIGNicnQg KGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2NicnQgKGRvdWJsZSBfX3gpIDsKCgoKCgoK ZXh0ZXJuIGRvdWJsZSBjZWlsIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19jZWlsIChk b3VibGUgX194KSA7CgoKZXh0ZXJuIGRvdWJsZSBmYWJzIChkb3VibGUgX194KSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19mYWJzIChkb3VibGUgX194KSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBmbG9vciAoZG91YmxlIF9f eCkgOyBleHRlcm4gZG91YmxlIF9fZmxvb3IgKGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gZG91Ymxl IGZtb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKGRv dWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAg ICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAxNjcKCgoKCgpleHRl cm4gaW50IF9faXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZSAoZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGUgKGRvdWJsZSBfX3Zh bHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGlu Zm5hbiAoaW50IF9fZXJyb3IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRv dWJsZSBfX2luZm5hbiAoaW50IF9fZXJyb3IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK CgpleHRlcm4gZG91YmxlIGRyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGRv dWJsZSBfX2RyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsKCgoKZXh0ZXJuIGRvdWJsZSBz aWduaWZpY2FuZCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fc2lnbmlmaWNhbmQgKGRv dWJsZSBfX3gpIDsKCgoKCmV4dGVybiBkb3VibGUgY29weXNpZ24gKGRvdWJsZSBfX3gsIGRvdWJs ZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2NvcHlz aWduIChkb3VibGUgX194LCBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKCgpleHRlcm4gZG91YmxlIG5hbiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25hbiAoX19jb25zdCBjaGFyICpfX3Rh Z2IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19pc25hbiAo ZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGlu dCBpc25hbiAoZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl eHRlcm4gZG91YmxlIGowIChkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX2owIChkb3VibGUpIDsK ZXh0ZXJuIGRvdWJsZSBqMSAoZG91YmxlKSA7IGV4dGVybiBkb3VibGUgX19qMSAoZG91YmxlKSA7 CmV4dGVybiBkb3VibGUgam4gKGludCwgZG91YmxlKSA7IGV4dGVybiBkb3VibGUgX19qbiAoaW50 LCBkb3VibGUpIDsKZXh0ZXJuIGRvdWJsZSB5MCAoZG91YmxlKSA7IGV4dGVybiBkb3VibGUgX195 MCAoZG91YmxlKSA7CmV4dGVybiBkb3VibGUgeTEgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9f eTEgKGRvdWJsZSkgOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1v ZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgMTY4CgoKZXh0ZXJuIGRvdWJsZSB5biAo aW50LCBkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX3luIChpbnQsIGRvdWJsZSkgOwoKCgoKCmV4 dGVybiBkb3VibGUgZXJmIChkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX2VyZiAoZG91YmxlKSA7 CmV4dGVybiBkb3VibGUgZXJmYyAoZG91YmxlKSA7IGV4dGVybiBkb3VibGUgX19lcmZjIChkb3Vi bGUpIDsKZXh0ZXJuIGRvdWJsZSBsZ2FtbWEgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fbGdh bW1hIChkb3VibGUpIDsKCgoKZXh0ZXJuIGRvdWJsZSB0Z2FtbWEgKGRvdWJsZSkgOyBleHRlcm4g ZG91YmxlIF9fdGdhbW1hIChkb3VibGUpIDsKCgoKCmV4dGVybiBkb3VibGUgZ2FtbWEgKGRvdWJs ZSkgOyBleHRlcm4gZG91YmxlIF9fZ2FtbWEgKGRvdWJsZSkgOwoKCgoKCgpleHRlcm4gZG91Ymxl IGxnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgOyBleHRlcm4gZG91YmxlIF9fbGdh bW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSA7CgoKCgoKCmV4dGVybiBkb3VibGUgcmlu dCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fcmludCAoZG91YmxlIF9feCkgOwoKCmV4 dGVybiBkb3VibGUgbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKGRvdWJsZSBfX3gs IGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBkb3VibGUg bmV4dHRvd2FyZCAoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uZXh0dG93YXJkIChkb3VibGUgX194LCBsb25n IGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGRvdWJs ZSByZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGRvdWJsZSBfX3Jl bWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOwoKCgpleHRlcm4gZG91YmxlIHNjYWxi IChkb3VibGUgX194LCBkb3VibGUgX19uKSA7IGV4dGVybiBkb3VibGUgX19zY2FsYiAoZG91Ymxl IF9feCwgZG91YmxlIF9fbikgOwoKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSBfX3gs IGludCBfX24pIDsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxibiAoZG91YmxlIF9feCwgaW50IF9fbikg OwoKCgpleHRlcm4gaW50IGlsb2diIChkb3VibGUgX194KSA7IGV4dGVybiBpbnQgX19pbG9nYiAo ZG91YmxlIF9feCkgOwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBs TW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAxNjkKCgoKCmV4dGVybiBkb3VibGUg c2NhbGJsbiAoZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSA7IGV4dGVybiBkb3VibGUgX19zY2Fs YmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIDsKCgoKZXh0ZXJuIGRvdWJsZSBuZWFyYnlp bnQgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX25lYXJieWludCAoZG91YmxlIF9feCkg OwoKCgpleHRlcm4gZG91YmxlIHJvdW5kIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19y b3VuZCAoZG91YmxlIF9feCkgOwoKCgpleHRlcm4gZG91YmxlIHRydW5jIChkb3VibGUgX194KSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX190cnVuYyAoZG91Ymxl IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJsZSByZW1x dW8gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIDsgZXh0ZXJuIGRvdWJsZSBf X3JlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykgOwoKCgoKCgpleHRl cm4gbG9uZyBpbnQgbHJpbnQgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnQg KGRvdWJsZSBfX3gpIDsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50IChkb3VibGUgX194KSA7 IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50IChkb3VibGUgX194KSA7CgoKCmV4dGVybiBs b25nIGludCBscm91bmQgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kIChk b3VibGUgX194KSA7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmQgKGRvdWJsZSBfX3gpIDsg ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kIChkb3VibGUgX194KSA7CgoKCmV4dGVybiBk b3VibGUgZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOyBleHRlcm4gZG91YmxlIF9fZmRp bSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOwoKCmV4dGVybiBkb3VibGUgZm1heCAoZG91Ymxl IF9feCwgZG91YmxlIF9feSkgOyBleHRlcm4gZG91YmxlIF9fZm1heCAoZG91YmxlIF9feCwgZG91 YmxlIF9feSkgOwoKCmV4dGVybiBkb3VibGUgZm1pbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg OyBleHRlcm4gZG91YmxlIF9fZm1pbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOwoKCgpleHRl cm4gaW50IF9fZnBjbGFzc2lmeSAoZG91YmxlIF9fdmFsdWUpCiAgICAgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0IChkb3VibGUgX192YWx1ZSkKICAg ICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBkb3VibGUgZm1hIChkb3Vi bGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196KSA7IGV4dGVybiBkb3VibGUgX19mbWEgKGRv dWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opIDsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6 MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgIDE3 MAoKCiMgNjQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDgyICIvdXNyL2luY2x1ZGUvbWF0 aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNy L2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZmxvYXQgYWNvc2YgKGZsb2F0IF9f eCkgOyBleHRlcm4gZmxvYXQgX19hY29zZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgYXNp bmYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19hc2luZiAoZmxvYXQgX194KSA7CgpleHRl cm4gZmxvYXQgYXRhbmYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19hdGFuZiAoZmxvYXQg X194KSA7CgpleHRlcm4gZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgOyBleHRl cm4gZmxvYXQgX19hdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0 IGNvc2YgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19jb3NmIChmbG9hdCBfX3gpIDsKCmV4 dGVybiBmbG9hdCBzaW5mIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fc2luZiAoZmxvYXQg X194KSA7CgpleHRlcm4gZmxvYXQgdGFuZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3Rh bmYgKGZsb2F0IF9feCkgOwoKCgpleHRlcm4gdm9pZCBzaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0 ICpfX3NpbngsIGZsb2F0ICpfX2Nvc3gpIDsgZXh0ZXJuIHZvaWQgX19zaW5jb3NmIChmbG9hdCBf X3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0ICpfX2Nvc3gpIDsKCgoKCgoKZXh0ZXJuIGZsb2F0IGNv c2hmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fY29zaGYgKGZsb2F0IF9feCkgOwoKZXh0 ZXJuIGZsb2F0IHNpbmhmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fc2luaGYgKGZsb2F0 IF9feCkgOwoKZXh0ZXJuIGZsb2F0IHRhbmhmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9f dGFuaGYgKGZsb2F0IF9feCkgOwoKCgpleHRlcm4gZmxvYXQgYWNvc2hmIChmbG9hdCBfX3gpIDsg ZXh0ZXJuIGZsb2F0IF9fYWNvc2hmIChmbG9hdCBfX3gpIDsKCmV4dGVybiBmbG9hdCBhc2luaGYg KGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19hc2luaGYgKGZsb2F0IF9feCkgOwoKZXh0ZXJu IGZsb2F0IGF0YW5oZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2F0YW5oZiAoZmxvYXQg X194KSA7CgoKCgoKZXh0ZXJuIGZsb2F0IGV4cGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQg X19leHBmIChmbG9hdCBfX3gpIDsKCgoKZXh0ZXJuIGZsb2F0IGV4cDEwZiAoZmxvYXQgX194KSA7 IGV4dGVybiBmbG9hdCBfX2V4cDEwZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgcG93MTBm IChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fcG93MTBmIChmbG9hdCBfX3gpIDsKCgoKCgoK CgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAg ICAgICAgICAgIFBhZ2UgIDE3MQoKCmV4dGVybiBmbG9hdCBmcmV4cGYgKGZsb2F0IF9feCwgaW50 ICpfX2V4cG9uZW50KSA7IGV4dGVybiBmbG9hdCBfX2ZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9f ZXhwb25lbnQpIDsKCgpleHRlcm4gZmxvYXQgbGRleHBmIChmbG9hdCBfX3gsIGludCBfX2V4cG9u ZW50KSA7IGV4dGVybiBmbG9hdCBfX2xkZXhwZiAoZmxvYXQgX194LCBpbnQgX19leHBvbmVudCkg OwoKCmV4dGVybiBmbG9hdCBsb2dmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fbG9nZiAo ZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0IGxvZzEwZiAoZmxvYXQgX194KSA7IGV4dGVybiBm bG9hdCBfX2xvZzEwZiAoZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0IG1vZGZmIChmbG9hdCBf X3gsIGZsb2F0ICpfX2lwdHIpIDsgZXh0ZXJuIGZsb2F0IF9fbW9kZmYgKGZsb2F0IF9feCwgZmxv YXQgKl9faXB0cikgOwoKCgpleHRlcm4gZmxvYXQgZXhwbTFmIChmbG9hdCBfX3gpIDsgZXh0ZXJu IGZsb2F0IF9fZXhwbTFmIChmbG9hdCBfX3gpIDsKCgpleHRlcm4gZmxvYXQgbG9nMXBmIChmbG9h dCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fbG9nMXBmIChmbG9hdCBfX3gpIDsKCgpleHRlcm4gZmxv YXQgbG9nYmYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19sb2diZiAoZmxvYXQgX194KSA7 CgoKCgpleHRlcm4gZmxvYXQgZXhwMmYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19leHAy ZiAoZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0IGxvZzJmIChmbG9hdCBfX3gpIDsgZXh0ZXJu IGZsb2F0IF9fbG9nMmYgKGZsb2F0IF9feCkgOwoKCgoKCgpleHRlcm4gZmxvYXQgcG93ZiAoZmxv YXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJuIGZsb2F0IF9fcG93ZiAoZmxvYXQgX194LCBmbG9h dCBfX3kpIDsKCgpleHRlcm4gZmxvYXQgc3FydGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQg X19zcXJ0ZiAoZmxvYXQgX194KSA7CgoKCmV4dGVybiBmbG9hdCBoeXBvdGYgKGZsb2F0IF9feCwg ZmxvYXQgX195KSA7IGV4dGVybiBmbG9hdCBfX2h5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp IDsKCgoKCmV4dGVybiBmbG9hdCBjYnJ0ZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2Ni cnRmIChmbG9hdCBfX3gpIDsKCgoKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAg ICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgIDE3MgoKCmV4dGVybiBm bG9hdCBjZWlsZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2NlaWxmIChmbG9hdCBfX3gp IDsKCgpleHRlcm4gZmxvYXQgZmFic2YgKGZsb2F0IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOyBleHRlcm4gZmxvYXQgX19mYWJzZiAoZmxvYXQgX194KSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGZsb29yZiAoZmxvYXQgX194KSA7IGV4dGVybiBm bG9hdCBfX2Zsb29yZiAoZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0IGZtb2RmIChmbG9hdCBf X3gsIGZsb2F0IF9feSkgOyBleHRlcm4gZmxvYXQgX19mbW9kZiAoZmxvYXQgX194LCBmbG9hdCBf X3kpIDsKCgoKCmV4dGVybiBpbnQgX19pc2luZmYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlZiAoZmxvYXQgX192YWx1ZSkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZmYgKGZsb2F0 IF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0 ZWYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKCmV4 dGVybiBmbG9hdCBpbmZuYW5mIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOyBleHRlcm4gZmxvYXQgX19pbmZuYW5mIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp IDsgZXh0ZXJuIGZsb2F0IF9fZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7CgoKCmV4dGVy biBmbG9hdCBzaWduaWZpY2FuZGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19zaWduaWZp Y2FuZGYgKGZsb2F0IF9feCkgOwoKCgoKZXh0ZXJuIGZsb2F0IGNvcHlzaWduZiAoZmxvYXQgX194 LCBmbG9hdCBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9f Y29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKCgoKZXh0ZXJuIGZsb2F0IG5hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25hbmYgKF9fY29uc3QgY2hhciAq X190YWdiKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNu YW5mIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCgoy MDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAg ICAgICBQYWdlICAxNzMKCgoKCgpleHRlcm4gaW50IGlzbmFuZiAoZmxvYXQgX192YWx1ZSkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBqMGYgKGZsb2F0KSA7IGV4 dGVybiBmbG9hdCBfX2owZiAoZmxvYXQpIDsKZXh0ZXJuIGZsb2F0IGoxZiAoZmxvYXQpIDsgZXh0 ZXJuIGZsb2F0IF9fajFmIChmbG9hdCkgOwpleHRlcm4gZmxvYXQgam5mIChpbnQsIGZsb2F0KSA7 IGV4dGVybiBmbG9hdCBfX2puZiAoaW50LCBmbG9hdCkgOwpleHRlcm4gZmxvYXQgeTBmIChmbG9h dCkgOyBleHRlcm4gZmxvYXQgX195MGYgKGZsb2F0KSA7CmV4dGVybiBmbG9hdCB5MWYgKGZsb2F0 KSA7IGV4dGVybiBmbG9hdCBfX3kxZiAoZmxvYXQpIDsKZXh0ZXJuIGZsb2F0IHluZiAoaW50LCBm bG9hdCkgOyBleHRlcm4gZmxvYXQgX195bmYgKGludCwgZmxvYXQpIDsKCgoKCgpleHRlcm4gZmxv YXQgZXJmZiAoZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9fZXJmZiAoZmxvYXQpIDsKZXh0ZXJuIGZs b2F0IGVyZmNmIChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX19lcmZjZiAoZmxvYXQpIDsKZXh0ZXJu IGZsb2F0IGxnYW1tYWYgKGZsb2F0KSA7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWYgKGZsb2F0KSA7 CgoKCmV4dGVybiBmbG9hdCB0Z2FtbWFmIChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX190Z2FtbWFm IChmbG9hdCkgOwoKCgoKZXh0ZXJuIGZsb2F0IGdhbW1hZiAoZmxvYXQpIDsgZXh0ZXJuIGZsb2F0 IF9fZ2FtbWFmIChmbG9hdCkgOwoKCgoKCgpleHRlcm4gZmxvYXQgbGdhbW1hZl9yIChmbG9hdCwg aW50ICpfX3NpZ25nYW1wKSA7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWZfciAoZmxvYXQsIGludCAq X19zaWduZ2FtcCkgOwoKCgoKCgpleHRlcm4gZmxvYXQgcmludGYgKGZsb2F0IF9feCkgOyBleHRl cm4gZmxvYXQgX19yaW50ZiAoZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0IG5leHRhZnRlcmYg KGZsb2F0IF9feCwgZmxvYXQgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVy biBmbG9hdCBfX25leHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgpleHRlcm4gZmxvYXQgbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9u ZyBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBf X25leHR0b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQgcmVtYWluZGVyZiAoZmxvYXQgX194LCBmbG9h dCBfX3kpIDsgZXh0ZXJuIGZsb2F0IF9fcmVtYWluZGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp IDsKCgoKZXh0ZXJuIGZsb2F0IHNjYWxiZiAoZmxvYXQgX194LCBmbG9hdCBfX24pIDsgZXh0ZXJu IGZsb2F0IF9fc2NhbGJmIChmbG9hdCBfX3gsIGZsb2F0IF9fbikgOwoKCgoKCgoKMjAwMS0wOC0y NCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFn ZSAgMTc0CgoKCgoKCmV4dGVybiBmbG9hdCBzY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pIDsg ZXh0ZXJuIGZsb2F0IF9fc2NhbGJuZiAoZmxvYXQgX194LCBpbnQgX19uKSA7CgoKCmV4dGVybiBp bnQgaWxvZ2JmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGludCBfX2lsb2diZiAoZmxvYXQgX194KSA7 CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSA7IGV4 dGVybiBmbG9hdCBfX3NjYWxibG5mIChmbG9hdCBfX3gsIGxvbmcgaW50IF9fbikgOwoKCgpleHRl cm4gZmxvYXQgbmVhcmJ5aW50ZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX25lYXJieWlu dGYgKGZsb2F0IF9feCkgOwoKCgpleHRlcm4gZmxvYXQgcm91bmRmIChmbG9hdCBfX3gpIDsgZXh0 ZXJuIGZsb2F0IF9fcm91bmRmIChmbG9hdCBfX3gpIDsKCgoKZXh0ZXJuIGZsb2F0IHRydW5jZiAo ZmxvYXQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX3Ry dW5jZiAoZmxvYXQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4g ZmxvYXQgcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIDsgZXh0ZXJu IGZsb2F0IF9fcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIDsKCgoK CgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50ZiAoZmxvYXQgX194KSA7IGV4dGVybiBsb25nIGludCBf X2xyaW50ZiAoZmxvYXQgX194KSA7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludGYgKGZsb2F0 IF9feCkgOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludGYgKGZsb2F0IF9feCkgOwoKCgpl eHRlcm4gbG9uZyBpbnQgbHJvdW5kZiAoZmxvYXQgX194KSA7IGV4dGVybiBsb25nIGludCBfX2xy b3VuZGYgKGZsb2F0IF9feCkgOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kZiAoZmxvYXQg X194KSA7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZGYgKGZsb2F0IF9feCkgOwoKCgpl eHRlcm4gZmxvYXQgZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7IGV4dGVybiBmbG9hdCBf X2ZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOwoKCmV4dGVybiBmbG9hdCBmbWF4ZiAoZmxv YXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJuIGZsb2F0IF9fZm1heGYgKGZsb2F0IF9feCwgZmxv YXQgX195KSA7CgoKZXh0ZXJuIGZsb2F0IGZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOyBl eHRlcm4gZmxvYXQgX19mbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsKCgoKCgoKCgoKMjAw MS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAg ICAgUGFnZSAgMTc1CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5ZiAoZmxvYXQgX192YWx1ZSkK ICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRm IChmbG9hdCBfX3ZhbHVlKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0 ZXJuIGZsb2F0IGZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opIDsgZXh0ZXJu IGZsb2F0IF9fZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikgOwojIDgzICIv dXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA5OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2Jp dHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NsIChsb25nIGRvdWJsZSBf X3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2wgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0 ZXJuIGxvbmcgZG91YmxlIGFzaW5sIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fYXNpbmwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5s IChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmwgKGxvbmcgZG91 YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBs b25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbjJsIChsb25nIGRvdWJs ZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3NsIChsb25n IGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zbCAobG9uZyBkb3VibGUgX194 KSA7CgpleHRlcm4gbG9uZyBkb3VibGUgc2lubCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBs b25nIGRvdWJsZSBfX3NpbmwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91Ymxl IHRhbmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5sIChsb25n IGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJuIHZvaWQgc2luY29zbCAobG9uZyBkb3VibGUgX194LCBs b25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSA7IGV4dGVybiB2b2lkIF9f c2luY29zbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJs ZSAqX19jb3N4KSA7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3NobCAobG9uZyBkb3VibGUg X194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2hsIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4 dGVybiBsb25nIGRvdWJsZSBzaW5obCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRv dWJsZSBfX3NpbmhsIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5o bCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RhbmhsIChsb25nIGRv dWJsZSBfX3gpIDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NobCAobG9uZyBkb3VibGUgX194 KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NobCAobG9uZyBkb3VibGUgX194KSA7CgpleHRl cm4gbG9uZyBkb3VibGUgYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFu aGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFuaGwgKGxvbmcg ZG91YmxlIF9feCkgOwoKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQ cGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgIDE3NgoKCgpleHRlcm4gbG9uZyBk b3VibGUgZXhwbCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cGwg KGxvbmcgZG91YmxlIF9feCkgOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwMTBsIChsb25nIGRv dWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMTBsIChsb25nIGRvdWJsZSBfX3gp IDsKCmV4dGVybiBsb25nIGRvdWJsZSBwb3cxMGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4g bG9uZyBkb3VibGUgX19wb3cxMGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgpleHRlcm4gbG9uZyBk b3VibGUgZnJleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgOyBleHRlcm4g bG9uZyBkb3VibGUgX19mcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSA7 CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBv bmVudCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50 IF9fZXhwb25lbnQpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nbCAobG9uZyBkb3VibGUgX194 KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2wgKGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVy biBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19sb2cxMGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25nIGRvdWJsZSBtb2Rm bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19pcHRyKSA7IGV4dGVybiBsb25nIGRv dWJsZSBfX21vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIDsKCgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGV4cG0xbCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25n IGRvdWJsZSBfX2V4cG0xbCAobG9uZyBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl IGxvZzFwbCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzFwbCAo bG9uZyBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJs ZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgOwoK CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDJsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fZXhwMmwgKGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25nIGRvdWJs ZSBsb2cybCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzJsIChs b25nIGRvdWJsZSBfX3gpIDsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvd2wgKGxvbmcgZG91 YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wgKGxv bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNx cnRsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcg ZG91YmxlIF9feCkgOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19oeXBvdGwgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAg ICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAxNzcKCgoK CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNicnRsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fY2JydGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgoKCgpleHRlcm4gbG9uZyBk b3VibGUgY2VpbGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19jZWls bCAobG9uZyBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZhYnNsIChsb25nIGRv dWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fZmFic2wgKGxvbmcgZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK CmV4dGVybiBsb25nIGRvdWJsZSBmbG9vcmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9u ZyBkb3VibGUgX19mbG9vcmwgKGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25nIGRvdWJs ZSBmbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoKCgpl eHRlcm4gaW50IF9faXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWwgKGxvbmcgZG91YmxlIF9fdmFsdWUp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmZsIChsb25n IGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGlu dCBmaW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgaW5mbmFubCAoaW50IF9fZXJyb3IpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9faW5mbmFubCAoaW50 IF9fZXJyb3IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3Vi bGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7IGV4dGVybiBsb25n IGRvdWJsZSBfX2RyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOwoKCgpl eHRlcm4gbG9uZyBkb3VibGUgc2lnbmlmaWNhbmRsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fc2lnbmlmaWNhbmRsIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKCgoKCgoK CgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAg ICAgICAgICBQYWdlICAxNzgKCgpleHRlcm4gbG9uZyBkb3VibGUgY29weXNpZ25sIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19jb3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi bGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gbG9uZyBkb3Vi bGUgbmFubCAoX19jb25zdCBjaGFyICpfX3RhZ2IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmFubCAoX19jb25zdCBjaGFyICpfX3RhZ2IpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19pc25hbmwgKGxvbmcgZG91 YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBp c25hbmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK CgpleHRlcm4gbG9uZyBkb3VibGUgajBsIChsb25nIGRvdWJsZSkgOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19qMGwgKGxvbmcgZG91YmxlKSA7CmV4dGVybiBsb25nIGRvdWJsZSBqMWwgKGxvbmcgZG91 YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2oxbCAobG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxv bmcgZG91YmxlIGpubCAoaW50LCBsb25nIGRvdWJsZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19q bmwgKGludCwgbG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIHkwbCAobG9uZyBkb3Vi bGUpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feTBsIChsb25nIGRvdWJsZSkgOwpleHRlcm4gbG9u ZyBkb3VibGUgeTFsIChsb25nIGRvdWJsZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX195MWwgKGxv bmcgZG91YmxlKSA7CmV4dGVybiBsb25nIGRvdWJsZSB5bmwgKGludCwgbG9uZyBkb3VibGUpIDsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9feW5sIChpbnQsIGxvbmcgZG91YmxlKSA7CgoKCgoKZXh0ZXJu IGxvbmcgZG91YmxlIGVyZmwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Vy ZmwgKGxvbmcgZG91YmxlKSA7CmV4dGVybiBsb25nIGRvdWJsZSBlcmZjbCAobG9uZyBkb3VibGUp IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXJmY2wgKGxvbmcgZG91YmxlKSA7CmV4dGVybiBsb25n IGRvdWJsZSBsZ2FtbWFsIChsb25nIGRvdWJsZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2Ft bWFsIChsb25nIGRvdWJsZSkgOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgdGdhbW1hbCAobG9uZyBk b3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGdhbW1hbCAobG9uZyBkb3VibGUpIDsKCgoK CmV4dGVybiBsb25nIGRvdWJsZSBnYW1tYWwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRv dWJsZSBfX2dhbW1hbCAobG9uZyBkb3VibGUpIDsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxn YW1tYWxfciAobG9uZyBkb3VibGUsIGludCAqX19zaWduZ2FtcCkgOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19sZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIDsKCgoKCgoKZXh0 ZXJuIGxvbmcgZG91YmxlIHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fcmludGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAxNzkK CgpleHRlcm4gbG9uZyBkb3VibGUgbmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv dWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fbmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0dG93YXJkbCAobG9u ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dHRvd2FyZGwgKGxvbmcgZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBsb25n IGRvdWJsZSByZW1haW5kZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOyBl eHRlcm4gbG9uZyBkb3VibGUgX19yZW1haW5kZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91 YmxlIF9feSkgOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJsIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlIF9fbikgOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYmwgKGxvbmcgZG91 YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKSA7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJu bCAobG9uZyBkb3VibGUgX194LCBpbnQgX19uKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxi bmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikgOwoKCgpleHRlcm4gaW50IGlsb2dibCAobG9u ZyBkb3VibGUgX194KSA7IGV4dGVybiBpbnQgX19pbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgOwoK CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibG5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgaW50 IF9fbikgOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYmxubCAobG9uZyBkb3VibGUgX194LCBs b25nIGludCBfX24pIDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5lYXJieWludGwgKGxvbmcgZG91 YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZWFyYnlpbnRsIChsb25nIGRvdWJsZSBf X3gpIDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJvdW5kbCAobG9uZyBkb3VibGUgX194KSA7IGV4 dGVybiBsb25nIGRvdWJsZSBfX3JvdW5kbCAobG9uZyBkb3VibGUgX194KSA7CgoKCmV4dGVybiBs b25nIGRvdWJsZSB0cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX190cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJlbXF1b2wg KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKSA7IGV4dGVybiBs b25nIGRvdWJsZSBfX3JlbXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBp bnQgKl9fcXVvKSA7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludGwgKGxvbmcgZG91YmxlIF9f eCkgOyBleHRlcm4gbG9uZyBpbnQgX19scmludGwgKGxvbmcgZG91YmxlIF9feCkgOwpleHRlcm4g bG9uZyBsb25nIGludCBsbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgbG9u ZyBpbnQgX19sbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJuIGxvbmcgaW50IGxy b3VuZGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBpbnQgX19scm91bmRsIChsb25n IGRvdWJsZSBfX3gpIDsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZGwgKGxvbmcgZG91Ymxl IF9feCkgOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmRsIChsb25nIGRvdWJsZSBfX3gp IDsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5t aSAgICAgICAgICAgICAgICBQYWdlICAxODAKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBmZGltbCAo bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f ZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoKZXh0ZXJuIGxvbmcg ZG91YmxlIGZtYXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOyBleHRlcm4g bG9uZyBkb3VibGUgX19mbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsK CgpleHRlcm4gbG9uZyBkb3VibGUgZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtaW5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg ZG91YmxlIF9feSkgOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWwgKGxvbmcgZG91YmxlIF9f dmFsdWUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19z aWduYml0bCAobG9uZyBkb3VibGUgX192YWx1ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWFsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg ZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtYWwg KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3opIDsKIyAx MDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDExMyAiL3Vzci9pbmNsdWRlL21hdGguaCIg MwpleHRlcm4gaW50IHNpZ25nYW07CiMgMTU0ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmVudW0K ICB7CiAgICBGUF9OQU4sCgogICAgRlBfSU5GSU5JVEUsCgogICAgRlBfWkVSTywKCiAgICBGUF9T VUJOT1JNQUwsCgogICAgRlBfTk9STUFMCgogIH07CiMgMjQwICIvdXNyL2luY2x1ZGUvbWF0aC5o IiAzCnR5cGVkZWYgZW51bQp7CiAgX0lFRUVfID0gLTEsCiAgX1NWSURfLAogIF9YT1BFTl8sCiAg X1BPU0lYXywKICBfSVNPQ18KfSBfTElCX1ZFUlNJT05fVFlQRTsKCgoKCmV4dGVybiBfTElCX1ZF UlNJT05fVFlQRSBfTElCX1ZFUlNJT047CiMgMjY1ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCnN0 cnVjdCBleGNlcHRpb24KCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBs TW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAxODEKCgogIHsKICAgIGludCB0eXBl OwogICAgY2hhciAqbmFtZTsKICAgIGRvdWJsZSBhcmcxOwogICAgZG91YmxlIGFyZzI7CiAgICBk b3VibGUgcmV0dmFsOwogIH07CgoKCgpleHRlcm4gaW50IG1hdGhlcnIgKHN0cnVjdCBleGNlcHRp b24gKl9fZXhjKTsKIyAzNTAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy9tYXRoaW5saW5lLmgiIDEgMwojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlu bGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBpbnQKX19zaWduYml0ZiAoZmxvYXQgX194KQp7CiAg X19leHRlbnNpb25fXyB1bmlvbiB7IGZsb2F0IF9fZjsgaW50IF9faTsgfSBfX3UgPSB7IF9fZjog X194IH07CiAgcmV0dXJuIF9fdS5fX2kgPCAwOwp9CmV4dGVybiBfX2lubGluZSBpbnQKX19zaWdu Yml0IChkb3VibGUgX194KQp7CiAgX19leHRlbnNpb25fXyB1bmlvbiB7IGRvdWJsZSBfX2Q7IGlu dCBfX2lbMl07IH0gX191ID0geyBfX2Q6IF9feCB9OwogIHJldHVybiBfX3UuX19pWzFdIDwgMDsK fQpleHRlcm4gX19pbmxpbmUgaW50Cl9fc2lnbmJpdGwgKGxvbmcgZG91YmxlIF9feCkKewogIF9f ZXh0ZW5zaW9uX18gdW5pb24geyBsb25nIGRvdWJsZSBfX2w7IGludCBfX2lbM107IH0gX191ID0g eyBfX2w6IF9feCB9OwogIHJldHVybiAoX191Ll9faVsyXSAmIDB4ODAwMCkgIT0gMDsKfQojIDI5 MSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBkb3Vi bGUgX19zZ24gKGRvdWJsZSkgOyBleHRlcm4gX19pbmxpbmUgZG91YmxlIF9fc2duIChkb3VibGUg X194KSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjAp OyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBfX3NnbmYgKGZsb2F0KSA7IGV4dGVybiBfX2lubGlu ZSBmbG9hdCBfX3NnbmYgKGZsb2F0IF9feCkgeyByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChf X3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19z Z25sIChsb25nIGRvdWJsZSkgOyBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ25sIChs b25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAwLjAgOiAoX194ID4gMC4wID8g MS4wIDogLTEuMCk7IH0KIyA0MjYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpl eHRlcm4gX19pbmxpbmUgZG91YmxlIGF0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194KSB7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIg OiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVy biBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBhdGFuMmYgKGZsb2F0IF9feSwgZmxv YXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVf XyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0 KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFu MmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91 YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVl KSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9CmV4 dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBfX2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25n IGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xh dGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkg OiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGZt b2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1 ZTsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW1cblx0IiAiZm5zdHN3CSUlYXhcblx0IiAi c2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kp IDogImF4IiwgImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBm bW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1 ZTsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW1cblx0IiAiZm5zdHN3CSUlYXhcblx0IiAi c2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kp IDogImF4IiwgImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRv dWJsZSBmbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmVnaXN0ZXIg bG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW1cblx0IiAi Zm5zdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIw IiAoX194KSwgInUiIChfX3kpIDogImF4IiwgImNjIik7IHJldHVybiBfX3ZhbHVlOyB9CiMgNDQx ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJs ZSBzcXJ0IChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192 b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJu IF9fcmVzdWx0OyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBzcXJ0ZiAoZmxvYXQgX194KSB7IHJl Z2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQi IChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gZXh0ZXJuIF9faW5s aW5lIGxvbmcgZG91YmxlIHNxcnRsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBk b3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVz dWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfQpleHRlcm4gX19pbmxpbmUgbG9u ZyBkb3VibGUgX19zcXJ0bCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3VsdCkg OiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KCgpleHRlcm4gX19pbmxpbmUgZG91Ymxl IGZhYnMgKGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzIChfX3gpOyB9CmV4dGVy biBfX2lubGluZSBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSB7IHJldHVybiBfX2J1aWx0aW5fZmFi c2YgKF9feCk7IH0KZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGZhYnNsIChsb25nIGRvdWJs ZSBfX3gpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbCAoX194KTsgfQpleHRlcm4gX19pbmxpbmUg bG9uZyBkb3VibGUgX19mYWJzbCAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiBfX2J1aWx0aW5f ZmFic2wgKF9feCk7IH0KIyA0NjcgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpl eHRlcm4gX19pbmxpbmUgZG91YmxlIGF0YW4gKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgZG91Ymxl IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQxOyBmcGF0YW4iIDogIj10IiAoX19y ZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4g X19pbmxpbmUgZmxvYXQgYXRhbmYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3Vs dDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6 ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gZXh0ZXJuIF9faW5saW5l IGxvbmcgZG91YmxlIGF0YW5sIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChf X3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9CgpleHRl cm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ24xbCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIF9f aW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxvbmcgZG91YmxlIF9feCkgeyBfX2V4dGVuc2lv bl9fIHVuaW9uIHsgbG9uZyBkb3VibGUgX194bGQ7IHVuc2lnbmVkIGludCBfX3hpWzNdOyB9IF9f biA9IHsgX194bGQ6IF9feCB9OyBfX24uX194aVsyXSA9IChfX24uX194aVsyXSAmIDB4ODAwMCkg fCAweDNmZmY7IF9fbi5fX3hpWzFdID0gMHg4MDAwMDAwMDsgX19uLl9feGlbMF0gPSAwOyByZXR1 cm4gX19uLl9feGxkOyB9CiMgNDkzICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMK ZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBmbG9vciAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25n IGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3Zv bGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5z dGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDQw MDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNt IF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19h c20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVl OyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBs b25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBf X3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgi Zm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4 MDQwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9f YXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsg X19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3Zh bHVlOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBmbG9vcmwgKGxvbmcgZG91YmxlIF9f eCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNo b3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2Fz bSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3 ICYgMHhmM2ZmKSB8IDB4MDQwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0i IChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUp IDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3 KSk7IHJldHVybiBfX3ZhbHVlOyB9CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAg ICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAxODIKCgojIDUwNCAiL3Vz ci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBkb3VibGUgY2Vp bCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxl IHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBf X2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19j d3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3 ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9 dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6 IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBj ZWlsZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRp bGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50 IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBf X2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxk Y3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDog Ij10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAi IDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcg ZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192 YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNp Z25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAi PW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4MDA7IF9fYXNtIF9f dm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxl ICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRp bGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfQojIDUyMiAi L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBkb3VibGUK bGRleHAgKGRvdWJsZSBfX3gsIGludCBfX3kpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Zh bHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIg KF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0KIyA1NDAg Ii91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91Ymxl IGxvZzFwIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IGlmIChf X2ZhYnNsIChfX3gpID49IDEuMCAtIDAuNSAqIDEuNDE0MjEzNTYyMzczMDk1MDQ4ODBMKSBfX3Zh bHVlID0gbG9nbCAoMS4wICsgX194KTsgZWxzZSBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsbjJc blx0IiAiZnhjaFxuXHQiICJmeWwyeHAxIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpIDog InN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBsb2cxcGYg KGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAo X194KSA+PSAxLjAgLSAwLjUgKiAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxv Z2wgKDEuMCArIF9feCk7IGVsc2UgX19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4 Y2hcblx0IiAiZnlsMnhwMSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIp OyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nMXBsIChs b25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFi c2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUg PSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQi ICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3Qo MSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1NTQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxp bmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlIGFzaW5oIChkb3VibGUgX194KSB7IHJlZ2lz dGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAobG9nMXBsIChfX3kg KiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195ICsgMS4wKSArIDEuMCkgKyBfX3kpICogX19zZ24x bCAoX194KSk7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGFzaW5oZiAoZmxvYXQgX194KSB7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAobG9nMXBsIChf X3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195ICsgMS4wKSArIDEuMCkgKyBfX3kpICogX19z Z24xbCAoX194KSk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGFzaW5obCAobG9uZyBk b3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJl dHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195ICsgMS4wKSArIDEu MCkgKyBfX3kpICogX19zZ24xbCAoX194KSk7IH0KCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUg YWNvc2ggKGRvdWJsZSBfX3gpIHsgcmV0dXJuIGxvZ2wgKF9feCArIF9fc3FydGwgKF9feCAtIDEu MCkgKiBfX3NxcnRsIChfX3ggKyAxLjApKTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgYWNvc2hm IChmbG9hdCBfX3gpIHsgcmV0dXJuIGxvZ2wgKF9feCArIF9fc3FydGwgKF9feCAtIDEuMCkgKiBf X3NxcnRsIChfX3ggKyAxLjApKTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgYWNvc2hs IChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIGxvZ2wgKF9feCArIF9fc3FydGwgKF9feCAtIDEu MCkgKiBfX3NxcnRsIChfX3ggKyAxLjApKTsgfQoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgYXRh bmggKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194 KTsgcmV0dXJuIC0wLjUgKiBsb2cxcGwgKC0oX195ICsgX195KSAvICgxLjAgKyBfX3kpKSAqIF9f c2duMWwgKF9feCk7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGF0YW5oZiAoZmxvYXQgX194KSB7 IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAtMC41ICog bG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gpOyB9IGV4 dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdp c3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFw bCAoLShfX3kgKyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfQoKCgoKZXh0 ZXJuIF9faW5saW5lIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgeyByZXR1 cm4gX19zcXJ0bCAoX194ICogX194ICsgX195ICogX195KTsgfSBleHRlcm4gX19pbmxpbmUgZmxv YXQgaHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyByZXR1cm4gX19zcXJ0bCAoX194ICog X194ICsgX195ICogX195KTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgaHlwb3RsIChs b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgeyByZXR1cm4gX19zcXJ0bCAoX194ICog X194ICsgX195ICogX195KTsgfQoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBsb2diIChkb3VibGUg X194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fanVuazsgX19hc20gX192b2xhdGlsZV9fICgiZnh0cmFjdFxuXHQiIDogIj10IiAoX19qdW5r KSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4g X19pbmxpbmUgZmxvYXQgbG9nYmYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBf X3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2p1bms7IF9fYXNtIF9fdm9sYXRpbGVfXyAo ImZ4dHJhY3Rcblx0IiA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gp KTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGxvZ2JsIChs b25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIg bG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAi PXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVl OyB9CiMgNTg0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5s aW5lIGZsb2F0CmxkZXhwZiAoZmxvYXQgX194LCBpbnQgX195KQp7CiAgcmVnaXN0ZXIgbG9uZyBk b3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFs dWUpIDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195KSk7IHJldHVybiBfX3ZhbHVl Owp9CgpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUKbGRleHBsIChsb25nIGRvdWJsZSBfX3gs IGludCBfX3kpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0 aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoKGxvbmcg ZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0KIyA2MDggIi91c3IvaW5jbHVkZS9iaXRz L21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKbHJpbnRmIChmbG9hdCBf X3gpCnsKICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3Rw bCAlMCIgOiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19s cmludHJlczsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKbHJpbnQgKGRvdWJsZSBfX3gpCnsK ICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbCAlMCIg OiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19scmludHJl czsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpCnsK ICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbCAlMCIg OiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19scmludHJl czsKfQojIDYzMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCgoKCgoKCgoyMDAx LTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAg ICBQYWdlICAxODMKCgpleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJpbnRmIChmbG9h dCBfX3gpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVf XyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7 IHJldHVybiBfX2xscmludHJlczsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJp bnQgKGRvdWJsZSBfX3gpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2FzbV9fIF9f dm9sYXRpbGVfXyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQiIChfX3gp IDogInN0Iik7IHJldHVybiBfX2xscmludHJlczsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBsb25n IGludApsbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50 cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRy ZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBfX2xscmludHJlczsKfQoKCgoKCgoKZXh0 ZXJuIF9faW5saW5lIGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB7IHJlZ2lz dGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBpbnQgX19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9s YXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJmc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJ MWIiIDogIj10IiAoX192YWx1ZSksICI9JmEiIChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9feCksICJ1 IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQg ZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyBy ZWdpc3RlciBpbnQgX19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxu XHQiICJmc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSks ICI9JmEiIChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1 cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91 YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdp c3RlciBpbnQgX19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQi ICJmc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSksICI9 JmEiIChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4g X192YWx1ZTsgfQojIDY2NiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVy biBfX2lubGluZSBpbnQKX19maW5pdGUgKGRvdWJsZSBfX3gpCnsKICByZXR1cm4gKF9fZXh0ZW5z aW9uX18KICAgICAgICAgICgoKCgodW5pb24geyBkb3VibGUgX19kOyBpbnQgX19pWzJdOyB9KSB7 X19kOiBfX3h9KS5fX2lbMV0KICAgICAgICAgICAgIHwgMHg4MDBmZmZmZnUpICsgMSkgPj4gMzEp KTsKfQojIDM1MSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgMjcgIi91c3IvbG9jYWwvc3dh cm0vaW5jbHVkZS9taXNjLmgiIDIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9v YmpjLmgiIDEKIyAyOCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL21pc2MuaCIgMgoKIyAxICIv dXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVk ZS9saW1pdHMuaCIgMSAzCiMgMTEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2Mz L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3lzbGltaXRzLmgi IDEgMwoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjAuMS9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMjUgIi91c3IvbG9jYWwvZ2NjMy9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL2xpbWl0cy5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2xpbWl0cy5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUv bGltaXRzLmgiIDIgMwojIDE0NCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bv c2l4MV9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAz NiAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMKCgoKCgoKCjIwMDEtMDgtMjQgMDE6 MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgIDE4 NAoKCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2xpbWl0cy5oIiAxIDMKIyAzNyAiL3Vzci9pbmNs dWRlL2JpdHMvbG9jYWxfbGltLmgiIDIgMwojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgx X2xpbS5oIiAyIDMKIyAxNDUgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAxIDMKIyAxNDkgIi91c3IvaW5jbHVkZS9saW1p dHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDEgMwojIDM0 ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz L3N0ZGlvX2xpbS5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIg MwojIDEzNiAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAxMzcgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xp bS5oIiAyIDMKIyAxNTMgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMTI2ICIvdXNyL2xv Y2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9saW1p dHMuaCIgMiAzCiMgOCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzMuMC4xL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMwojIDEyICIvdXNyL2xvY2FsL2djYzMv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9saW1pdHMuaCIgMiAz CiMgMzAgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9taXNjLmgiIDIKIyA0NCAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL21pc2MuaCIKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMwoj IDI1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu aCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoKCgojIDEgIi91c3Iv bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0 ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyA0MiAiL3Vzci9p bmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdGZsYWdzLmgiIDEg MwojIDQzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz L3dhaXRzdGF0dXMuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMuaCIg MwojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgNjQgIi91c3IvaW5jbHVkZS9iaXRz L3dhaXRzdGF0dXMuaCIgMiAzCgp1bmlvbiB3YWl0CiAgewogICAgaW50IHdfc3RhdHVzOwogICAg c3RydWN0CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd190ZXJtc2lnOjc7CiAgICAg ICAgdW5zaWduZWQgaW50IF9fd19jb3JlZHVtcDoxOwogICAgICAgIHVuc2lnbmVkIGludCBfX3df cmV0Y29kZTo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6 MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgIDE4 NQoKCgoKCgoKCgogICAgICB9IF9fd2FpdF90ZXJtaW5hdGVkOwogICAgc3RydWN0CiAgICAgIHsK CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19zdG9wdmFsOjg7CiAgICAgICAgdW5zaWduZWQgaW50 IF9fd19zdG9wc2lnOjg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgogICAgICB9IF9f d2FpdF9zdG9wcGVkOwogIH07CiMgNDQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgNjgg Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwp0eXBlZGVmIHVuaW9uCiAgewogICAgdW5pb24gd2Fp dCAqX191cHRyOwogICAgaW50ICpfX2lwdHI7CiAgfSBfX1dBSVRfU1RBVFVTIF9fYXR0cmlidXRl X18gKChfX3RyYW5zcGFyZW50X3VuaW9uX18pKTsKIyA5NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o IiAzCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CiAgICBpbnQgcmVtOwogIH0gZGl2 X3Q7CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgaW50 IHJlbTsKICB9IGxkaXZfdDsKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc3RydWN0CiAgewog ICAgbG9uZyBsb25nIGludCBxdW90OwogICAgbG9uZyBsb25nIGludCByZW07CiAgfSBsbGRpdl90 OwojIDEzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3QgX19jdHlwZV9n ZXRfbWJfY3VyX21heCAodm9pZCkgOwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAg ICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgIDE4NgoKCgoKZXh0ZXJu IGRvdWJsZSBhdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgpleHRlcm4gaW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBsb25nIGludCBhdG9sIChfX2NvbnN0IGNoYXIgKl9f bnB0cikgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJu IGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAgICAgICAgICAg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIpIDsKCgoKZXh0ZXJuIGZsb2F0IHN0cnRvZiAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIpIDsKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xkIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIpIDsKCgoKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIDsKCmV4dGVybiB1bnNpZ25lZCBsb25n IGludCBzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf X2Jhc2UpCiAgICAgICAgICAgIDsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGlu dCBzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIDsK Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAg ICAgICAgIDsKCgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xs IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKX19leHRl bnNpb25fXwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dh cm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgMTg3CgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u ZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwgaW50IF9fYmFzZSkKICAgICAgICAgICAgOwojIDIxMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMjEyICIvdXNyL2luY2x1ZGUv c3RkbGliLmgiIDIgMwoKCgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfbCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19sb2NhbGVfdCBfX2xvYykgOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91 bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2Mp IDsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2wgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIDsKCl9fZXh0ZW5zaW9uX18K ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9sIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAg ICAgICAgIDsKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICAgICAgICAgOwoKZXh0ZXJuIGZsb2F0IF9f c3RydG9mX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykg OwoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3Qg X19sb2MpIDsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgICAgICAgICA7CmV4 dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgICAgICAgIDsKZXh0ZXJuIGxvbmcgZG91YmxlIF9f c3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSA7 CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAg UHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAxODgKCgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCmV4dGVy biB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgoKX19leHRl bnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsKCgoKX19leHRl bnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFs IChfX2NvbnN0IGNoYXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2Us IGludCBfX2dyb3VwKQogICAgICAgICAgICA7CiMgMjk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi IDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQpzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKQp7CiAgcmV0dXJuIF9fc3RydG9k X2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBp bnQKc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG9sX2lu dGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CmV4dGVybiBfX2lubGluZSB1 bnNpZ25lZCBsb25nIGludApzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy LCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkKewogIHJl dHVybiBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0K CgpleHRlcm4gX19pbmxpbmUgZmxvYXQKc3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikKewogIHJldHVybiBfX3N0cnRvZl9p bnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91 YmxlCnN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jl c3RyaWN0IF9fZW5kcHRyKQp7CiAgcmV0dXJuIF9fc3RydG9sZF9pbnRlcm5hbCAoX19ucHRyLCBf X2VuZHB0ciwgMCk7Cn0KCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBw bE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgMTg5CgoKCl9fZXh0ZW5zaW9uX18g ZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICBpbnQgX19i YXNlKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19i YXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGxv bmcgaW50CnN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3Ry dG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgoKX19leHRl bnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApzdHJ0b2xsIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg ICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19l bmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWdu ZWQgbG9uZyBsb25nIGludApzdHJ0b3VsbCAoX19jb25zdCBjaGFyICogX19yZXN0cmljdCBfX25w dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgaW50IF9fYmFzZSkKewog IHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDAp Owp9CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQphdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikK ewogIHJldHVybiBzdHJ0b2QgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApKTsKfQpleHRl cm4gX19pbmxpbmUgaW50CmF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7CiAgcmV0dXJuIChp bnQpIHN0cnRvbCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCksIDEwKTsKfQpleHRlcm4g X19pbmxpbmUgbG9uZyBpbnQKYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpCnsKICByZXR1cm4g c3RydG9sIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSwgMTApOwp9CgoKX19leHRlbnNp b25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludAphdG9sbCAoX19jb25zdCBjaGFyICpf X25wdHIpCnsKICByZXR1cm4gc3RydG9sbCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCks IDEwKTsKfQojIDM4NSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpsNjRh IChsb25nIGludCBfX24pIDsKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAg IFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgMTkwCgoKZXh0ZXJuIGxvbmcg aW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19zKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMzkyICIvdXNyL2luY2x1ZGUv c3RkbGliLmgiIDIgMwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgcmFuZG9tICh2b2lkKSA7CgoKZXh0 ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgOwoKCgoKCmV4dGVybiBjaGFy ICppbml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSA7CgoKCmV4dGVybiBjaGFyICpz ZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAg ewogICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0 ZTsKICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7 CiAgICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3Qg cmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMy X3QgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25l ZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSA7CgpleHRlcm4gaW50IGlu aXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVi dWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIDsKCmV4 dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgOwoK CgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAg ICAgICAgICAgICAgIFBhZ2UgIDE5MQoKCgoKCgpleHRlcm4gaW50IHJhbmQgKHZvaWQpIDsKCmV4 dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSA7CgoKCmV4dGVybiBpbnQgcmFu ZF9yICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4 ICh2b2lkKSA7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1 YmlbM10pIDsKCgpleHRlcm4gbG9uZyBpbnQgbHJhbmQ0OCAodm9pZCkgOwpleHRlcm4gbG9uZyBp bnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIDsKCgpleHRlcm4gbG9u ZyBpbnQgbXJhbmQ0OCAodm9pZCkgOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAodW5zaWduZWQg c2hvcnQgaW50IF9feHN1YmlbM10pIDsKCgpleHRlcm4gdm9pZCBzcmFuZDQ4IChsb25nIGludCBf X3NlZWR2YWwpIDsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBz aG9ydCBpbnQgX19zZWVkMTZ2WzNdKSA7CmV4dGVybiB2b2lkIGxjb25nNDggKHVuc2lnbmVkIHNo b3J0IGludCBfX3BhcmFtWzddKSA7CgoKCgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVu c2lnbmVkIHNob3J0IGludCBfX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19vbGRfeFsz XTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2M7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19p bml0OwogICAgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2E7CiAgfTsKCgpleHRlcm4gaW50IGRy YW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAg ICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwpleHRlcm4gaW50 IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAg ICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGlu dCBscmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCgoK CgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAg ICAgICAgICAgICBQYWdlICAxOTIKCgogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9f cmVzdHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0 IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0 YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpf X3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFu ZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25n IGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWdu ZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJh bmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9u ZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCgpleHRlcm4gaW50IHNyYW5kNDhfciAobG9u ZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICAgICAg ICAgOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlsz XSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIDsK CmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSA7CiMgNTM3 ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9f cHRyLCBzaXplX3QgX19zaXplKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJu IHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIDsKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9f cHRyKSA7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMKIyAyMiAiL3Vzci9pbmNs dWRlL2FsbG9jYS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIv dXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI2ICIv dXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoKCgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9jYSAoc2l6 ZV90IF9fc2l6ZSkgOwojIDU0OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCmV4dGVy biB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19f KSk7CgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgICBQcGxNb2RlbFN3YXJt Lm1pICAgICAgICAgICAgICAgIFBhZ2UgIDE5MwoKCgoKZXh0ZXJuIGludCBwb3NpeF9tZW1hbGln biAodm9pZCAqKl9fbWVtcHRyLCBzaXplX3QgX19hbGlnbm1lbnQsIHNpemVfdCBfX3NpemUpCiAg ICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgpleHRlcm4gdm9pZCBh Ym9ydCAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50 IGF0ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSA7CgoKCgpleHRlcm4gaW50IG9uX2V4aXQg KHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAqX19hcmcp CiAgICAgICAgICAgIDsKCgoKCgpleHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMpIF9fYXR0 cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2b2lkIF9FeGl0IChpbnQgX19z dGF0dXMpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiBjaGFyICpn ZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKCmV4dGVybiBjaGFyICpfX3NlY3VyZV9n ZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKCgoKZXh0ZXJuIGludCBwdXRlbnYgKGNo YXIgKl9fc3RyaW5nKSA7CgoKCgoKZXh0ZXJuIGludCBzZXRlbnYgKF9fY29uc3QgY2hhciAqX19u YW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX3JlcGxhY2UpCiAgICAgICAgICAgIDsK CgpleHRlcm4gaW50IHVuc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCgoKCgoKCgoy MDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAg ICAgICBQYWdlICAxOTQKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgOwojIDYyNCAi L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVt cGxhdGUpIDsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgOwoj IDY0MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgbWtzdGVtcDY0IChjaGFy ICpfX3RlbXBsYXRlKSA7CiMgNjUxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNo YXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKCgoKCmV4dGVybiBpbnQgc3lzdGVtIChf X2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgOwoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2FsaXpl X2ZpbGVfbmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKIyA2NzMgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX3Jlc29s dmVkKSA7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAq LCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRlZiBfX2NvbXBhcl9mbl90IGNvbXBhcmlzb25fZm5f dDsKCgoKCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tleSwgX19jb25z dCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6 ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0 ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAg ICAgICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAxOTUK CgoKCgpleHRlcm4gaW50IGFicyAoaW50IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwpleHRlcm4gbG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGxsYWJzIChsb25n IGxvbmcgaW50IF9feCkKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK CgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGludCBfX2Rlbm9tKQogICAgICAg ICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90IGxkaXYgKGxv bmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAgICAgICAgICBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsbGRpdl90IGxsZGl2IChs b25nIGxvbmcgaW50IF9fbnVtZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxvbmcgbG9uZyBpbnQgX19kZW5vbSkKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKIyA3MjkgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqZWN2 dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQs CiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CgoKCgpleHRlcm4g Y2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0 IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CgoK CgpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAq X19idWYpIDsKCgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50 IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBp bnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3VibGUg X192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj dCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CmV4dGVybiBjaGFyICpxZ2N2dCAo bG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgOwoKCgoKZXh0 ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0 cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwg Y2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikg OwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpf X3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19z aWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f bGVuKSA7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgIFBwbE1vZGVsU3dh cm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgMTk2CgoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25n IGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpf X3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAg ICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7CmV4dGVybiBpbnQg cWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAg ICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAog ICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikg OwoKCgoKCgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikg OwoKCmV4dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgOwoK CmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgOwoKCgpleHRl cm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikg OwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVf dCBfX24pCiAgICAgICAgICAgIDsKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBj aGFyICpfX3Jlc3BvbnNlKSA7CiMgODA5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJu IGludCBnZXRzdWJvcHQgKGNoYXIgKipfX3Jlc3RyaWN0IF9fb3B0aW9ucCwKICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKl9fY29uc3QgKl9fcmVzdHJpY3QgX190b2tlbnMsCiAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3ZhbHVlcCkgOwoKCgoKCmV4dGVybiB2b2lk IHNldGtleSAoX19jb25zdCBjaGFyICpfX2tleSkgOwoKCgoKCgoKZXh0ZXJuIGludCBwb3NpeF9v cGVucHQgKGludCBfX29mbGFnKSA7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAg ICAgIFBwbE1vZGVsU3dhcm0ubWkgICAgICAgICAgICAgICAgUGFnZSAgMTk3CgoKCgoKCgoKZXh0 ZXJuIGludCBncmFudHB0IChpbnQgX19mZCkgOwoKCgpleHRlcm4gaW50IHVubG9ja3B0IChpbnQg X19mZCkgOwoKCgoKZXh0ZXJuIGNoYXIgKnB0c25hbWUgKGludCBfX2ZkKSA7CgoKCgoKCmV4dGVy biBpbnQgcHRzbmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxlbikg OwoKCmV4dGVybiBpbnQgZ2V0cHQgKHZvaWQpIDsKCgoKCgoKZXh0ZXJuIGludCBnZXRsb2FkYXZn IChkb3VibGUgX19sb2FkYXZnW10sIGludCBfX25lbGVtKSA7CiMgNDUgIi91c3IvbG9jYWwvc3dh cm0vaW5jbHVkZS9taXNjLmgiIDIKIyA1NyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL21pc2Mu aCIKdm9pZCAqeG1hbGxvYyAoc2l6ZV90IHNpemUpOwp2b2lkICp4bWFsbG9jX2F0b21pYyAoc2l6 ZV90IHNpemUpOwp2b2lkICp4Y2FsbG9jIChzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplKTsKdm9p ZCAqeHJlYWxsb2MgKHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpOwp2b2lkIHhmcmVlICh2b2lkICpi dWYpOwoKCmNoYXIgKmRyb3BkaXIgKGNoYXIgKnBhdGgpOwoKY2hhciAqeHN0cmR1cCAoY29uc3Qg Y2hhciAqc3RyaW5nKTsKIyAxNDQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9taXNjLmgiCmNv bnN0IGNoYXIgKmZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcHJvZ3JhbV9uYW1lKTsKCnZv aWQgZGVidWdhYm9ydCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIHVuc2lnbmVkIGxpbmVubywgY29u c3QgY2hhciAqZnVuY3Rpb24pIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwoKdHlwZWRlZiBp bnQgKCpxdWlja3NvcnRfY29tcGFyX2ZuX3QpIChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7 CgpleHRlcm4gdm9pZCBxdWlja3NvcnQgKHZvaWQgKmNvbnN0IHBiYXNlLCBzaXplX3QgdG90YWxf ZWxlbXMsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIHF1aWNrc29ydF9jb21w YXJfZm5fdCBjbXApOwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBs TW9kZWxTd2FybS5taSAgICAgICAgICAgICAgICBQYWdlICAxOTgKCgoKCgoKc3RhdGljIGlubGlu ZSBCT09MCmlzRGlnaXQgKGNoYXIgY2gpCnsKICByZXR1cm4gY2ggPj0gJzAnICYmIGNoIDw9ICc5 JzsKfQoKc3RhdGljIGlubGluZSBCT09MCmlzU3BhY2UgKGNoYXIgY2gpCnsKICByZXR1cm4gY2gg PT0gJyAnIHx8IGNoID09ICdcdCcgfHwgY2ggPT0gJ1xuJyB8fCBjaCA9PSAnXHInIHx8IGNoID09 ICdcZic7Cn0KCnN0YXRpYyBpbmxpbmUgQk9PTAppc1VwcGVyIChjaGFyIGNoKQp7CiAgcmV0dXJu IGNoID49ICdBJyAmJiBjaCA8PSAnWic7Cn0KCnN0YXRpYyBpbmxpbmUgQk9PTAppc0xvd2VyIChj aGFyIGNoKQp7CiAgcmV0dXJuIGNoID49ICdhJyAmJiBjaCA8PSAneic7Cn0KCnN0YXRpYyBpbmxp bmUgQk9PTAppc0FscGhhIChjaGFyIGNoKQp7CiAgcmV0dXJuIGlzVXBwZXIgKGNoKSB8fCBpc0xv d2VyIChjaCk7Cn0KCnN0YXRpYyBpbmxpbmUgQk9PTAppc0FsbnVtIChjaGFyIGNoKQp7CiAgcmV0 dXJuIGlzQWxwaGEgKGNoKSB8fCBpc0RpZ2l0IChjaCk7Cn0KCnN0YXRpYyBpbmxpbmUgQk9PTApp c1B1bmN0IChjaGFyIGNoKQp7CiAgcmV0dXJuICgoKGNoID4gJyAnKSAmJiAoY2ggPCAnMCcpKQog ICAgICAgICAgfHwgKChjaCA+ICc5JykgJiYgKGNoIDwgJ0EnKSkKICAgICAgICAgIHx8ICgoY2gg PiAnWicpICYmIChjaCA8ICdhJykpCiAgICAgICAgICB8fCAoKGNoID4gJ3onKSAmJiAoY2ggPD0g J34nKSkpOwp9CgpzdGF0aWMgaW5saW5lIEJPT0wKaXNQcmludCAoY2hhciBjaCkKewogIHJldHVy biBpc1B1bmN0IChjaCkgfHwgaXNBbG51bSAoY2gpIHx8IGNoID09ICcgJzsKfQojIDI5ICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvcmFuZG9tL3JhbmRvbWRlZnMuaCIgMgojIDUyICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvcmFuZG9tLmgiIDIKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAg ICAgICAgICAgICBQcGxNb2RlbFN3YXJtLm1pICAgICAgICAgICAgICAgIFBhZ2UgIDE5OQoKCiMg OCAiUHBsTW9kZWxTd2FybS5tIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamVj dGJhc2UuaCIgMQojIDkgIlBwbE1vZGVsU3dhcm0ubSIgMgoKCgpAaW1wbGVtZW50YXRpb24gUHBs TW9kZWxTd2FybQoKLSAoQ291bnRlciAqKWdldENvdW50ZXIKewogIHJldHVybiBjb3VudGVyOwp9 CgorIGNyZWF0ZUJlZ2luOiBhWm9uZQp7CiAgUHBsTW9kZWxTd2FybSAqb2JqOwogIGlkIDxQcm9i ZU1hcD4gcHJvYmVNYXA7CgogIG9iaiA9IFtzdXBlciBjcmVhdGVCZWdpbjogYVpvbmVdOwoKCiAg b2JqLT5pbmNyZW1lbnQgPSAxOwoKCiAgb2JqLT5udW1QcGwgPSAxMDsKCiAgcHJvYmVNYXAgPSBb RW1wdHlQcm9iZU1hcCBjcmVhdGVCZWdpbjogYVpvbmVdOwogIFtwcm9iZU1hcCBzZXRQcm9iZWRD bGFzczogW3NlbGYgY2xhc3NdXTsKICBwcm9iZU1hcCA9IFtwcm9iZU1hcCBjcmVhdGVFbmRdOwoK CiAgW3Byb2JlTWFwIGFkZFByb2JlOiBbcHJvYmVMaWJyYXJ5IGdldFByb2JlRm9yVmFyaWFibGU6 ICJpbmNyZW1lbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ2xhc3M6 IFtzZWxmIGNsYXNzXV1dOwoKICBbcHJvYmVNYXAgYWRkUHJvYmU6IFtwcm9iZUxpYnJhcnkgZ2V0 UHJvYmVGb3JWYXJpYWJsZTogIm51bVBwbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW5DbGFzczogW3NlbGYgY2xhc3NdXV07CgoKICBbcHJvYmVMaWJyYXJ5IHNldFByb2Jl TWFwOiBwcm9iZU1hcCBGb3I6IFtzZWxmIGNsYXNzXV07CgogIHJldHVybiBvYmo7Cn0KCgotIGNy ZWF0ZUVuZAp7CiAgcmV0dXJuIFtzdXBlciBjcmVhdGVFbmRdOwp9CgotIGJ1aWxkT2JqZWN0cwp7 CiAgaW50IGluY2ksIGluY2o7CgogIFtzdXBlciBidWlsZE9iamVjdHNdOwoKCgoKCgoKCgoyMDAx LTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAgICAg ICBQYWdlICAyMDAKCgoKICBjb3VudGVyID0gW0NvdW50ZXIgY3JlYXRlOiBbc2VsZiBnZXRab25l XV07CiAgW2NvdW50ZXIgc2V0SW5jcjogaW5jcmVtZW50XTsKCgogIHBwbExpc3QgPSBbTGlzdCBj cmVhdGU6IFtzZWxmIGdldFpvbmVdXTsKCgogIGZvciAoaW5jaSA9IDA7IGluY2kgPCBudW1QcGw7 IGluY2krKyl7CiAgICBQZXJzb24gKiBwZXJzb247CiAgICBpZCBuYW1lOwogICAgZmxvYXQgdG9w aWNzWzJdOwogICAgaW50IG5hbWVzaXplOwogICAgY2hhciB0ZW1wX2NoYXJbMl07CiMgODcgIlBw bE1vZGVsU3dhcm0ubSIKICAgIHBlcnNvbiA9IFtQZXJzb24gY3JlYXRlQmVnaW46IFtzZWxmIGdl dFpvbmVdXTsKCgogICAgbmFtZXNpemUgPSBbdW5pZm9ybUludFJhbmQgZ2V0SW50ZWdlcldpdGhN aW46IDJMIHdpdGhNYXg6IDRMXTsKCgogICAgdGVtcF9jaGFyWzBdID0gW3VuaWZvcm1JbnRSYW5k IGdldEludGVnZXJXaXRoTWluOiAnQScgd2l0aE1heDonWiddOwogICAgdGVtcF9jaGFyWzFdID0g J1wwJzsKICAgIG5hbWUgPSBbU3RyaW5nIGNyZWF0ZUJlZ2luOiBbcGVyc29uIGdldFpvbmVdIF07 CiAgICBbbmFtZSBzZXRDOiAoY2hhciAqKSAmdGVtcF9jaGFyXTsKICAgIG5hbWUgPSBbbmFtZSBj cmVhdGVFbmRdOwoKCiAgICBmb3IgKGluY2ogPSAxOyBpbmNqIDw9IG5hbWVzaXplOyBpbmNqKysp IHsKICAgICAgdGVtcF9jaGFyWzBdID0gW3VuaWZvcm1JbnRSYW5kIGdldEludGVnZXJXaXRoTWlu OidhJyB3aXRoTWF4Oid6J107CiAgICAgIFtuYW1lIGNhdEM6IChjaGFyICopICZ0ZW1wX2NoYXJd OwogICAgfQoKCiAgICB0b3BpY3NbbnVsbF0gPSAwLjA7CgogICAgdG9waWNzW2hlbGxvXSA9IDEu MDsKCiAgICBbcGVyc29uIHNldFBlcnNvbjogbmFtZSBUb3BpY19hcnJheTogdG9waWNzXTsKCiAg ICBbcGVyc29uIHNldFdvcmxkOiBwcGxMaXN0XTsKCgogICAgcGVyc29uID0gW3BlcnNvbiBjcmVh dGVFbmRdOwoKCiAgICBbcHBsTGlzdCBhZGRMYXN0OiBwZXJzb25dOwoKICB9CiAgcmV0dXJuIHNl bGY7Cn0KCi0gYnVpbGRBY3Rpb25zCnsKICBbc3VwZXIgYnVpbGRBY3Rpb25zXTsKCgoKCgoKCgoy MDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICAgUHBsTW9kZWxTd2FybS5taSAgICAgICAgICAg ICAgICBQYWdlICAyMDEKCgoKICBtb2RlbEFjdGlvbnMgPSBbQWN0aW9uR3JvdXAgY3JlYXRlOiBb c2VsZiBnZXRab25lXV07CgoKICBbbW9kZWxBY3Rpb25zIGNyZWF0ZUFjdGlvblRvOiBjb3VudGVy IG1lc3NhZ2U6IEBzZWxlY3RvciAoc3RlcCldOwoKCiAgW21vZGVsQWN0aW9ucyBjcmVhdGVBY3Rp b25Gb3JFYWNoOiBwcGxMaXN0IG1lc3NhZ2U6IEBzZWxlY3RvciAoc3RlcCldOwoKCiAgbW9kZWxT Y2hlZHVsZSA9IFtTY2hlZHVsZSBjcmVhdGVCZWdpbjogW3NlbGYgZ2V0Wm9uZV1dOwoKICBbbW9k ZWxTY2hlZHVsZSBzZXRSZXBlYXRJbnRlcnZhbDogMV07CgogIG1vZGVsU2NoZWR1bGUgPSBbbW9k ZWxTY2hlZHVsZSBjcmVhdGVFbmRdOwoKCgogIFttb2RlbFNjaGVkdWxlIGF0OiAwIGNyZWF0ZUFj dGlvbjogbW9kZWxBY3Rpb25zXTsKCiAgcmV0dXJuIHNlbGY7Cn0KCi0gYWN0aXZhdGVJbjogc3dh cm1Db250ZXh0CnsKCiAgW3N1cGVyIGFjdGl2YXRlSW46IHN3YXJtQ29udGV4dF07CgogIFttb2Rl bFNjaGVkdWxlIGFjdGl2YXRlSW46IHNlbGZdOwoKICByZXR1cm4gW3NlbGYgZ2V0U3dhcm1BY3Rp dml0eV07Cn0KCkBlbmQKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAx OjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAg IDEKCgojIDYgIlBwbE9ic2VydmVyU3dhcm0ubSIKIyAxICJQcGxPYnNlcnZlclN3YXJtLmgiIDEK CgoKCgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmplY3RiYXNlLmgiIDEKIyAyMCAi L3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2UuaCIKIyAxICIvdXNyL2xvY2FsL3N3 YXJtL2luY2x1ZGUvZGVmb2JqLmgiIDEKIyAxOCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2Rl Zm9iai5oIgp0eXBlZGVmIGVudW0ge2ZjYWxsX3R5cGVfdm9pZCA9IDAsCiAgICAgICAgICAgICAg ZmNhbGxfdHlwZV9ib29sZWFuLAogICAgICAgICAgICAgIGZjYWxsX3R5cGVfdWNoYXIsIGZjYWxs X3R5cGVfc2NoYXIsCiAgICAgICAgICAgICAgZmNhbGxfdHlwZV91c2hvcnQsIGZjYWxsX3R5cGVf c3Nob3J0LAogICAgICAgICAgICAgIGZjYWxsX3R5cGVfdWludCwgZmNhbGxfdHlwZV9zaW50LAog ICAgICAgICAgICAgIGZjYWxsX3R5cGVfdWxvbmcsIGZjYWxsX3R5cGVfc2xvbmcsCiAgICAgICAg ICAgICAgZmNhbGxfdHlwZV91bG9uZ2xvbmcsIGZjYWxsX3R5cGVfc2xvbmdsb25nLAogICAgICAg ICAgICAgIGZjYWxsX3R5cGVfZmxvYXQsIGZjYWxsX3R5cGVfZG91YmxlLCBmY2FsbF90eXBlX2xv bmdfZG91YmxlLAogICAgICAgICAgICAgIGZjYWxsX3R5cGVfb2JqZWN0LCBmY2FsbF90eXBlX2Ns YXNzLAogICAgICAgICAgICAgIGZjYWxsX3R5cGVfc3RyaW5nLCBmY2FsbF90eXBlX3NlbGVjdG9y LAogICAgICAgICAgICAgIGZjYWxsX3R5cGVfam9iamVjdCwgZmNhbGxfdHlwZV9qc3RyaW5nLCBm Y2FsbF90eXBlX2pzZWxlY3RvciwKICAgICAgICAgICAgICBmY2FsbF90eXBlX2lpZAogICAgICAg ICAgICAgIH0gZmNhbGxfdHlwZV90OwoKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2Jq Yy9vYmpjLmgiIDEKIyAzNCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy5oIgoj IDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9p bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgaW50IHB0 cmRpZmZfdDsKIyAxOTkgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVf dDsKIyAyODcgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjAuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgbG9uZyBpbnQgd2NoYXJfdDsKIyAzNSAi L3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy5oIiAyCgoKCgoKCgp0eXBlZGVmIHVu c2lnbmVkIGNoYXIgQk9PTDsKIyA1MSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2Jq Yy5oIgp0eXBlZGVmIGNvbnN0IHN0cnVjdCBvYmpjX3NlbGVjdG9yCnsKICB2b2lkICpzZWxfaWQ7 CiAgY29uc3QgY2hhciAqc2VsX3R5cGVzOwp9ICpTRUw7CgppbmxpbmUgc3RhdGljIEJPT0wKc2Vs X2VxIChTRUwgczEsIFNFTCBzMikKewogIGlmIChzMSA9PSAwIHx8IHMyID09IDApCiAgICByZXR1 cm4gczEgPT0gczI7CiAgZWxzZQoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAg UHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgICAyCgoKICAgIHJldHVybiBz MS0+c2VsX2lkID09IHMyLT5zZWxfaWQ7Cn0KCgoKCgp0eXBlZGVmIHN0cnVjdCBvYmpjX29iamVj dCB7CiAgc3RydWN0IG9iamNfY2xhc3MqIGNsYXNzX3BvaW50ZXI7Cn0gKmlkOwoKCgoKCnR5cGVk ZWYgaWQgKCpJTVApKGlkLCBTRUwsIC4uLik7CgoKCgoKCnR5cGVkZWYgY2hhciAqU1RSOwojIDk3 ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLmgiCnR5cGVkZWYgc3RydWN0IG9i amNfY2xhc3MgKk1ldGFDbGFzczsKdHlwZWRlZiBzdHJ1Y3Qgb2JqY19jbGFzcyAqQ2xhc3M7CnN0 cnVjdCBvYmpjX2NsYXNzIHsKICBNZXRhQ2xhc3MgY2xhc3NfcG9pbnRlcjsKCiAgc3RydWN0IG9i amNfY2xhc3MqIHN1cGVyX2NsYXNzOwoKCiAgY29uc3QgY2hhciogbmFtZTsKICBsb25nIHZlcnNp b247CiAgdW5zaWduZWQgbG9uZyBpbmZvOwoKICBsb25nIGluc3RhbmNlX3NpemU7CgoKCiAgc3Ry dWN0IG9iamNfaXZhcl9saXN0KiBpdmFyczsKCgoKCgoKICBzdHJ1Y3Qgb2JqY19tZXRob2RfbGlz dCogbWV0aG9kczsKCgogIHN0cnVjdCBzYXJyYXkgKiBkdGFibGU7CgogIHN0cnVjdCBvYmpjX2Ns YXNzKiBzdWJjbGFzc19saXN0OwogIHN0cnVjdCBvYmpjX2NsYXNzKiBzaWJsaW5nX2NsYXNzOwoK ICBzdHJ1Y3Qgb2JqY19wcm90b2NvbF9saXN0ICpwcm90b2NvbHM7CgoKCgoKCgoyMDAxLTA4LTI0 IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdl ICAgIDMKCgogIHZvaWQqIGdjX29iamVjdF90eXBlOwp9OwojIDE0MSAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL29iamMvb2JqYy5oIgpAY2xhc3MgUHJvdG9jb2w7CgoKdHlwZWRlZiB2b2lkKiBy ZXR2YWxfdDsKdHlwZWRlZiB2b2lkKCphcHBseV90KSh2b2lkKTsKdHlwZWRlZiB1bmlvbiB7CiAg Y2hhciAqYXJnX3B0cjsKICBjaGFyIGFyZ19yZWdzW3NpemVvZiAoY2hhciopXTsKfSAqYXJnbGlz dF90OwoKCklNUCBvYmpjX21zZ19sb29rdXAgKGlkIHJlY2VpdmVyLCBTRUwgb3ApOwojIDMzICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiIDIKCnR5cGVkZWYgdW5pb24gewogIGlk IG9iamVjdDsKICBTRUwgc2VsZWN0b3I7CiAgQ2xhc3MgX2NsYXNzOwogIGNvbnN0IGNoYXIgKnN0 cmluZzsKICBCT09MIGJvb2xlYW47CiAgY2hhciBzY2hhcjsKICB1bnNpZ25lZCBjaGFyIHVjaGFy OwogIHNob3J0IHNzaG9ydDsKICB1bnNpZ25lZCBzaG9ydCB1c2hvcnQ7CiAgaW50IHNpbnQ7CiAg dW5zaWduZWQgaW50IHVpbnQ7CiAgbG9uZyBzbG9uZzsKICB1bnNpZ25lZCBsb25nIHVsb25nOwog IGxvbmcgbG9uZyBzbG9uZ2xvbmc7CiAgdW5zaWduZWQgbG9uZyBsb25nIHVsb25nbG9uZzsKICBm bG9hdCBfZmxvYXQ7CiAgZG91YmxlIF9kb3VibGU7CiAgbG9uZyBkb3VibGUgX2xvbmdfZG91Ymxl OwogIHZvaWQgKmlpZDsKfSB0eXBlc190OwoKdHlwZWRlZiBzdHJ1Y3QgewogIGZjYWxsX3R5cGVf dCB0eXBlOwogIHR5cGVzX3QgdmFsOwp9IHZhbF90OwoKCgoKCgojIDEgIi91c3IvbG9jYWwvc3dh cm0vaW5jbHVkZS9kZWZvYmovZGVmdHlwZS5oIiAxCiMgMjEgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9kZWZvYmovZGVmdHlwZS5oIgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpj L09iamVjdC5oIiAxCiMgMzAgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL09iamVjdC5o IgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMuaCIgMQojIDMxICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9PYmplY3QuaCIgMgojIDEgIi91c3IvbG9jYWwvc3dh cm0vaW5jbHVkZS9vYmpjL3R5cGVkc3RyZWFtLmgiIDEKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEg ICAgICAgICAgICAgIFBwbE9ic2VydmVyU3dhcm0ubWkgICAgICAgICAgICAgIFBhZ2UgICAgNAoK CiMgMzAgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL3R5cGVkc3RyZWFtLmgiCiMgMSAi L3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy5oIiAxCiMgMzEgIi91c3IvbG9jYWwv c3dhcm0vaW5jbHVkZS9vYmpjL3R5cGVkc3RyZWFtLmgiIDIKIyAxICIvdXNyL2xvY2FsL3N3YXJt L2luY2x1ZGUvb2JqYy9oYXNoLmgiIDEKIyAzMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29i amMvaGFzaC5oIgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMiAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL29iamMvaGFzaC5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMv b2JqYy5oIiAxCiMgMzMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL2hhc2guaCIgMgoj IDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL2V4dGVybnZhci5oIiAxCiMgMzQgIi91 c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL2hhc2guaCIgMgojIDEgIi91c3IvaW5jbHVkZS9z dHJpbmcuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwojIDEgIi91c3IvaW5j bHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyODMgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMKIyAyODQgIi91c3IvaW5jbHVkZS9mZWF0 dXJlcy5oIiAyIDMKIyAzMTEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAzMTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAy IDMKIyAyNyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKCgoKIyAxICIvdXNyL2xvY2Fs L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRkZWYu aCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCmV4dGVybiB2b2lkICpt ZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gdm9pZCAq bWVtbW92ZSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQog ICAgICAgICAgICA7CgoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9fcmVzdHJpY3Qg X19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICAgICAgICA7CgoKCgpleHRlcm4gdm9pZCAq bWVtc2V0ICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IG1l bWNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24p CiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgoKCgoyMDAxLTA4 LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQ YWdlICAgIDUKCgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBf X2MsIHNpemVfdCBfX24pCiAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgoKCgpleHRlcm4gdm9pZCAqcmF3bWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYykg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbXJjaHIgKF9fY29u c3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICAgICAgICAgIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hhciAqX19yZXN0 cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICAgICAgICAg OwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19u KSA7CgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICAgICAgICAgOwoKZXh0ZXJuIGNoYXIgKnN0 cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGludCBz dHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgICAgICAg ICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9fY29u c3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgICAgICAg ICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2Nv bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICAgICAgICAgIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFyICpfX3Jlc3Ry aWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19zcmMsIHNpemVfdCBfX24pIDsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgi IDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAzCnR5cGVkZWYgc3RydWN0IF9fbG9j YWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVzWzEzXTsKCgogIGNv bnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToy MSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgICA2 CgoKICBjb25zdCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG91 cHBlcjsKfSAqX19sb2NhbGVfdDsKIyAxMDkgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoK ZXh0ZXJuIGludCBfX3N0cmNvbGxfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg Kl9fczIsIF9fbG9jYWxlX3QgX19sKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgpleHRlcm4gc2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3Qg Y2hhciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9j YWxlX3QgX19sKSA7CgoKCgpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykg X19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cm5kdXAg KF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgICAgICAgICBfX2F0dHJp YnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDE1NSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4 dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9f cywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAq c3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBf X2NvbnN0IGNoYXIgKl9fcmVqZWN0KQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0 IGNoYXIgKl9fYWNjZXB0KQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAq X19hY2NlcHQpCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVy biBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpf X25lZWRsZSkKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRl cm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNo YXIgKl9fbmVlZGxlKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK CgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9ic2VydmVyU3dhcm0ubWkg ICAgICAgICAgICAgIFBhZ2UgICAgNwoKCgpleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jl c3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgICAgICAg IDsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSA7Cgpl eHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX3NhdmVfcHRyKSA7CgoKCgoKCmV4dGVybiB2b2lkICptZW1tZW0gKF9fY29uc3Qgdm9p ZCAqX19oYXlzdGFjaywgc2l6ZV90IF9faGF5c3RhY2tsZW4sCiAgICAgICAgICAgICAgICAgICAg IF9fY29uc3Qgdm9pZCAqX19uZWVkbGUsIHNpemVfdCBfX25lZWRsZWxlbikKICAgICAgICAgICAg IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gdm9pZCAqX19tZW1wY3B5ICh2 b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2 b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CmV4dGVybiB2b2lkICptZW1wY3B5 ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg dm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwoKCgoKZXh0ZXJuIHNpemVfdCBz dHJsZW4gKF9fY29uc3QgY2hhciAqX19zKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoK CmV4dGVybiBzaXplX3Qgc3RybmxlbiAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9f bWF4bGVuKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRl cm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgOwoKCgpleHRlcm4gY2hhciAqc3RyZXJy b3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSA7CgoKCgpl eHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIDsKCgoKCgoKCgoKCjIw MDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9ic2VydmVyU3dhcm0ubWkgICAgICAgICAg ICAgIFBhZ2UgICAgOAoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKl9fc3JjLCB2 b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19z LCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGludCBiY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9f Y29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGlu dCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXgg KF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CgoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoKCgoK ZXh0ZXJuIGludCBmZnNsIChsb25nIGludCBfX2wpIF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoK X19leHRlbnNpb25fXyBleHRlcm4gaW50IGZmc2xsIChsb25nIGxvbmcgaW50IF9fbGwpCiAgICAg ICAgICAgICBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKCmV4dGVybiBpbnQgc3RyY2FzZWNt cCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgICAgICAgICBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2Nv bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICAgICAg ICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBpbnQgX19zdHJjYXNl Y21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCmV4dGVybiBpbnQgX19zdHJuY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f Y29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24s IF9fbG9jYWxlX3QgX19sb2MpCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCgoKCgpleHRlcm4gY2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmljdCBfX3N0cmluZ3As CiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSA7 CgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9ic2VydmVyU3dhcm0u bWkgICAgICAgICAgICAgIFBhZ2UgICAgOQoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2Nv bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICAgICAgICAgIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpzdHJzaWduYWwgKGludCBfX3NpZykg OwoKCmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICAgICAgICAgOwpleHRlcm4gY2hhciAqc3Rw Y3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f c3JjKQogICAgICAgICAgICA7CgoKCmV4dGVybiBjaGFyICpfX3N0cG5jcHkgKGNoYXIgKl9fcmVz dHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKl9f cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAq X19zdHJpbmcpIDsKCgpleHRlcm4gdm9pZCAqbWVtZnJvYiAodm9pZCAqX19zLCBzaXplX3QgX19u KSA7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1l KSA7CiMgMzU2ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy9zdHJpbmcuaCIgMSAzCiMgMzU3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCiMgMSAi L3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAxIDMKIyA1MiAiL3Vzci9pbmNsdWRlL2JpdHMv c3RyaW5nMi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAyMiAiL3Vzci9p bmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIz ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDM3ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVk ZS9lbmRpYW4uaCIgMiAzCiMgNTMgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMiAzCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9iaXRz L3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3Iv aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMwICIv dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAg ICAgICAgICAgIFBwbE9ic2VydmVyU3dhcm0ubWkgICAgICAgICAgICAgIFBhZ2UgICAxMAoKCgoK dHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9f dV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBs b25nIF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBp bnQgX191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFk X3Q7CiMgNDkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzaWduZWQgY2hh ciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWdu ZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50 MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9faW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg X191aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBf X2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9f dWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFk X3QgX19kZXZfdDsKdHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dp ZF90Owp0eXBlZGVmIF9fdV9sb25nIF9faW5vX3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsK dHlwZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBl ZGVmIF9fcXVhZF90IF9fbG9mZl90Owp0eXBlZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBf X3NzaXplX3Q7CnR5cGVkZWYgX191X2xvbmcgX19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBf X3JsaW02NF90Owp0eXBlZGVmIF9fdV9pbnQgX19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAg ICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRfdDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5 cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVm IHVuc2lnbmVkIGludCBfX3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNf dDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tf dDsKCgp0eXBlZGVmIGludCBfX2Nsb2NraWRfdDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoK CgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAg ICAgICAgICAgICBQYWdlICAgMTEKCgoKCgoKCgp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVk ZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9f Ymxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVmIF9fcXVh ZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRl ZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNu dF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVh ZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxv bmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxh cl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19z b2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMK IyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpz dHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CgoK CgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAg ICAgICAgICAgICBQYWdlICAgMTIKCgojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlw ZXMuaCIgMiAzCgoKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1 czsKICBpbnQgX19zcGlubG9jazsKCn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2Ny X3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0 dHJfcwp7CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0 IF9fc2NoZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQg X19zY29wZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2 b2lkICpfX3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7 CgoKCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7 CiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVk ZWYgc3RydWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50 IF9fbV9yZXNlcnZlZDsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9i c2VydmVyU3dhcm0ubWkgICAgICAgICAgICAgIFBhZ2UgICAxMwoKCiAgaW50IF9fbV9jb3VudDsK ICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAgaW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRo cmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhyZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3Ry dWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRocmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRl ZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2tf dAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fcndfbG9jazsKICBpbnQgX19yd19yZWFk ZXJzOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVyOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndf cmVhZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVfd2FpdGluZzsKICBpbnQg X19yd19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2tfdDsKCgoKdHlw ZWRlZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5kOwogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVh ZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHZvbGF0aWxlIGludCBwdGhyZWFkX3NwaW5sb2Nr X3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2JhX2xv Y2s7CiAgaW50IF9fYmFfcmVxdWlyZWQ7CiAgaW50IF9fYmFfcHJlc2VudDsKICBfcHRocmVhZF9k ZXNjciBfX2JhX3dhaXRpbmc7Cn0gcHRocmVhZF9iYXJyaWVyX3Q7CgoKdHlwZWRlZiBzdHJ1Y3Qg ewogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9iYXJyaWVyYXR0cl90OwoKCgoKCgoKMjAwMS0w OC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAg UGFnZSAgIDE0CgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKIyAx NDQgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwojIDU0ICIvdXNyL2luY2x1ZGUvYml0 cy9zdHJpbmcyLmgiIDIgMwojIDIxNyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4 dGVybiBfX2lubGluZSB2b2lkICpfX21lbXBjcHlfc21hbGwgKHZvaWQgKiwgY2hhciwgY2hhciwg Y2hhciwgY2hhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191aW50 MTZfdCwgX191aW50MTZfdCwgX191aW50MzJfdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX191aW50MzJfdCwgc2l6ZV90KTsKZXh0ZXJuIF9faW5saW5lIHZvaWQgKgpf X21lbXBjcHlfc21hbGwgKHZvaWQgKl9fZGVzdDEsCiAgICAgICAgICAgICAgICAgY2hhciBfX3Ny YzBfMSwgY2hhciBfX3NyYzJfMSwgY2hhciBfX3NyYzRfMSwgY2hhciBfX3NyYzZfMSwKICAgICAg ICAgICAgICAgICBfX3VpbnQxNl90IF9fc3JjMF8yLCBfX3VpbnQxNl90IF9fc3JjNF8yLAogICAg ICAgICAgICAgICAgIF9fdWludDMyX3QgX19zcmMwXzQsIF9fdWludDMyX3QgX19zcmM0XzQsCiAg ICAgICAgICAgICAgICAgc2l6ZV90IF9fc3JjbGVuKQp7CiAgdW5pb24gewogICAgX191aW50MzJf dCBfX3VpOwogICAgX191aW50MTZfdCBfX3VzaTsKICAgIHVuc2lnbmVkIGNoYXIgX191YzsKICAg IHVuc2lnbmVkIGNoYXIgX19jOwogIH0gKl9fdSA9IF9fZGVzdDE7CiAgc3dpdGNoICgodW5zaWdu ZWQgaW50KSBfX3NyY2xlbikKICAgIHsKICAgIGNhc2UgMToKICAgICAgX191LT5fX2MgPSBfX3Ny YzBfMTsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMSk7CiAgICAg IGJyZWFrOwogICAgY2FzZSAyOgogICAgICBfX3UtPl9fdXNpID0gX19zcmMwXzI7CiAgICAgIF9f dSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOwogICAgICBicmVhazsKICAgIGNh c2UgMzoKICAgICAgX191LT5fX3VzaSA9IF9fc3JjMF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lv bl9fICgodm9pZCAqKSBfX3UgKyAyKTsKICAgICAgX191LT5fX2MgPSBfX3NyYzJfMTsKICAgICAg X191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMSk7CiAgICAgIGJyZWFrOwogICAg Y2FzZSA0OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0gX19leHRlbnNp b25fXyAoKHZvaWQgKikgX191ICsgNCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA1OgogICAgICBf X3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikg X191ICsgNCk7CiAgICAgIF9fdS0+X19jID0gX19zcmM0XzE7CiAgICAgIF9fdSA9IF9fZXh0ZW5z aW9uX18gKCh2b2lkICopIF9fdSArIDEpOwogICAgICBicmVhazsKICAgIGNhc2UgNjoKICAgICAg X191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICop IF9fdSArIDQpOwogICAgICBfX3UtPl9fdXNpID0gX19zcmM0XzI7CiAgICAgIF9fdSA9IF9fZXh0 ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAg ICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDE1CgoKICAg ICAgYnJlYWs7CiAgICBjYXNlIDc6CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAgICBf X3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX3VzaSA9 IF9fc3JjNF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAyKTsK ICAgICAgX191LT5fX2MgPSBfX3NyYzZfMTsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZv aWQgKikgX191ICsgMSk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA4OgogICAgICBfX3UtPl9fdWkg PSBfX3NyYzBfNDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7 CiAgICAgIF9fdS0+X191aSA9IF9fc3JjNF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgo dm9pZCAqKSBfX3UgKyA0KTsKICAgICAgYnJlYWs7CiAgICB9CiAgcmV0dXJuICh2b2lkICopIF9f dTsKfQojIDM3MSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiB2b2lkICpf X3Jhd21lbWNociAoY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKTsKIyAzOTUgIi91c3IvaW5jbHVk ZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJjcHlfc21hbGwg KGNoYXIgKiwgX191aW50MTZfdCwgX191aW50MTZfdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX3VpbnQzMl90LCBfX3VpbnQzMl90LCBzaXplX3QpOwpleHRlcm4gX19p bmxpbmUgY2hhciAqCl9fc3RyY3B5X3NtYWxsIChjaGFyICpfX2Rlc3QsCiAgICAgICAgICAgICAg ICBfX3VpbnQxNl90IF9fc3JjMF8yLCBfX3VpbnQxNl90IF9fc3JjNF8yLAogICAgICAgICAgICAg ICAgX191aW50MzJfdCBfX3NyYzBfNCwgX191aW50MzJfdCBfX3NyYzRfNCwKICAgICAgICAgICAg ICAgIHNpemVfdCBfX3NyY2xlbikKewogIHVuaW9uIHsKICAgIF9fdWludDMyX3QgX191aTsKICAg IF9fdWludDE2X3QgX191c2k7CiAgICB1bnNpZ25lZCBjaGFyIF9fdWM7CiAgfSAqX191ID0gKHZv aWQgKikgX19kZXN0OwogIHN3aXRjaCAoKHVuc2lnbmVkIGludCkgX19zcmNsZW4pCiAgICB7CiAg ICBjYXNlIDE6CiAgICAgIF9fdS0+X191YyA9ICdcMCc7CiAgICAgIGJyZWFrOwogICAgY2FzZSAy OgogICAgICBfX3UtPl9fdXNpID0gX19zcmMwXzI7CiAgICAgIGJyZWFrOwogICAgY2FzZSAzOgog ICAgICBfX3UtPl9fdXNpID0gX19zcmMwXzI7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2 b2lkICopIF9fdSArIDIpOwogICAgICBfX3UtPl9fdWMgPSAnXDAnOwogICAgICBicmVhazsKICAg IGNhc2UgNDoKICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIGJyZWFrOwogICAgY2Fz ZSA1OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0gX19leHRlbnNpb25f XyAoKHZvaWQgKikgX191ICsgNCk7CiAgICAgIF9fdS0+X191YyA9ICdcMCc7CiAgICAgIGJyZWFr OwogICAgY2FzZSA2OgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2Jz ZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDE2CgoKICAgICAgX191LT5fX3VpID0g X19zcmMwXzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOwog ICAgICBfX3UtPl9fdXNpID0gX19zcmM0XzI7CiAgICAgIGJyZWFrOwogICAgY2FzZSA3OgogICAg ICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQg KikgX191ICsgNCk7CiAgICAgIF9fdS0+X191c2kgPSBfX3NyYzRfMjsKICAgICAgX191ID0gX19l eHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMik7CiAgICAgIF9fdS0+X191YyA9ICdcMCc7CiAg ICAgIGJyZWFrOwogICAgY2FzZSA4OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAg X191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CiAgICAgIF9fdS0+X191aSA9 IF9fc3JjNF80OwogICAgICBicmVhazsKICAgIH0KICByZXR1cm4gX19kZXN0Owp9CiMgNTU0ICIv dXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3Rw Y3B5X3NtYWxsIChjaGFyICosIF9fdWludDE2X3QsIF9fdWludDE2X3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX191aW50MzJfdCwgX191aW50MzJfdCwgc2l6ZV90KTsK ZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cGNweV9zbWFsbCAoY2hhciAqX19kZXN0LAogICAg ICAgICAgICAgICAgX191aW50MTZfdCBfX3NyYzBfMiwgX191aW50MTZfdCBfX3NyYzRfMiwKICAg ICAgICAgICAgICAgIF9fdWludDMyX3QgX19zcmMwXzQsIF9fdWludDMyX3QgX19zcmM0XzQsCiAg ICAgICAgICAgICAgICBzaXplX3QgX19zcmNsZW4pCnsKICB1bmlvbiB7CiAgICB1bnNpZ25lZCBp bnQgX191aTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3VzaTsKICAgIHVuc2lnbmVkIGNoYXIg X191YzsKICAgIGNoYXIgX19jOwogIH0gKl9fdSA9ICh2b2lkICopIF9fZGVzdDsKICBzd2l0Y2gg KCh1bnNpZ25lZCBpbnQpIF9fc3JjbGVuKQogICAgewogICAgY2FzZSAxOgogICAgICBfX3UtPl9f dWMgPSAnXDAnOwogICAgICBicmVhazsKICAgIGNhc2UgMjoKICAgICAgX191LT5fX3VzaSA9IF9f c3JjMF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAxKTsKICAg ICAgYnJlYWs7CiAgICBjYXNlIDM6CiAgICAgIF9fdS0+X191c2kgPSBfX3NyYzBfMjsKICAgICAg X191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMik7CiAgICAgIF9fdS0+X191YyA9 ICdcMCc7CiAgICAgIGJyZWFrOwogICAgY2FzZSA0OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBf NDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMyk7CiAgICAgIGJy ZWFrOwogICAgY2FzZSA1OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0g X19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7CiAgICAgIF9fdS0+X191YyA9ICdcMCc7 CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1p ICAgICAgICAgICAgICBQYWdlICAgMTcKCgogICAgICBicmVhazsKICAgIGNhc2UgNjoKICAgICAg X191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICop IF9fdSArIDQpOwogICAgICBfX3UtPl9fdXNpID0gX19zcmM0XzI7CiAgICAgIF9fdSA9IF9fZXh0 ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDEpOwogICAgICBicmVhazsKICAgIGNhc2UgNzoKICAg ICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lk ICopIF9fdSArIDQpOwogICAgICBfX3UtPl9fdXNpID0gX19zcmM0XzI7CiAgICAgIF9fdSA9IF9f ZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOwogICAgICBfX3UtPl9fdWMgPSAnXDAnOwog ICAgICBicmVhazsKICAgIGNhc2UgODoKICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAg IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOwogICAgICBfX3UtPl9fdWkg PSBfX3NyYzRfNDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMyk7 CiAgICAgIGJyZWFrOwogICAgfQogIHJldHVybiAmX191LT5fX2M7Cn0KIyA4NzMgIi91c3IvaW5j bHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3RyY3Nwbl9j MSAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19yZWplY3QpOwpleHRlcm4gX19pbmxpbmUgc2l6 ZV90Cl9fc3RyY3Nwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19yZWplY3QpCnsKICBy ZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdc MCcgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdCkKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJu IF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3RyY3Nwbl9jMiAoX19jb25z dCBjaGFyICpfX3MsIGNoYXIgX19yZWplY3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciBfX3JlamVjdDIpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nw bl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MikK ewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0g IT0gJ1wwJyAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MQogICAgICAgICAmJiBfX3NbX19y ZXN1bHRdICE9IF9fcmVqZWN0MikKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9 CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3RyY3Nwbl9jMyAoX19jb25zdCBjaGFyICpfX3Ms IGNoYXIgX19yZWplY3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciBfX3JlamVjdDIsIGNoYXIgX19yZWplY3QzKTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0 cmNzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVj dDIsCiAgICAgICAgICAgICAgY2hhciBfX3JlamVjdDMpCnsKICByZWdpc3RlciBzaXplX3QgX19y ZXN1bHQgPSAwOwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19fcmVzdWx0 XSAhPSBfX3JlamVjdDEKICAgICAgICAgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDIgJiYg X19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDMpCiAgICArK19fcmVzdWx0OwoKCgoKCgoKMjAwMS0w OC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAg UGFnZSAgIDE4CgoKICByZXR1cm4gX19yZXN1bHQ7Cn0KIyA5MjggIi91c3IvaW5jbHVkZS9iaXRz L3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ryc3BuX2MxIChfX2NvbnN0 IGNoYXIgKl9fcywgY2hhciBfX2FjY2VwdCk7CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJz cG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fYWNjZXB0KQp7CiAgcmVnaXN0ZXIgc2l6 ZV90IF9fcmVzdWx0ID0gMDsKCiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQpCiAg ICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVf dCBfX3N0cnNwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19hY2NlcHQxLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fYWNjZXB0Mik7CmV4dGVybiBfX2lu bGluZSBzaXplX3QKX19zdHJzcG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fYWNjZXB0 MSwgY2hhciBfX2FjY2VwdDIpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwoKICB3 aGlsZSAoX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDEgfHwgX19zW19fcmVzdWx0XSA9PSBfX2Fj Y2VwdDIpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5s aW5lIHNpemVfdCBfX3N0cnNwbl9jMyAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19hY2NlcHQx LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fYWNjZXB0MiwgY2hh ciBfX2FjY2VwdDMpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3Ryc3BuX2MzIChfX2NvbnN0 IGNoYXIgKl9fcywgY2hhciBfX2FjY2VwdDEsIGNoYXIgX19hY2NlcHQyLCBjaGFyIF9fYWNjZXB0 MykKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CgogIHdoaWxlIChfX3NbX19yZXN1 bHRdID09IF9fYWNjZXB0MSB8fCBfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MgogICAgICAgICB8 fCBfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MykKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9f cmVzdWx0Owp9CiMgOTgzICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9f aW5saW5lIGNoYXIgKl9fc3RycGJya19jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2Vw dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19hY2NlcHQyKTsK ZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnBicmtfYzIgKF9fY29uc3QgY2hhciAqX19zLCBp bnQgX19hY2NlcHQxLCBpbnQgX19hY2NlcHQyKQp7CgogIHdoaWxlICgqX19zICE9ICdcMCcgJiYg Kl9fcyAhPSBfX2FjY2VwdDEgJiYgKl9fcyAhPSBfX2FjY2VwdDIpCiAgICArK19fczsKICByZXR1 cm4gKl9fcyA9PSAnXDAnID8gKCh2b2lkICopMCkgOiAoY2hhciAqKSAoc2l6ZV90KSBfX3M7Cn0K CmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnBicmtfYzMgKF9fY29uc3QgY2hhciAqX19zLCBp bnQgX19hY2NlcHQxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f YWNjZXB0MiwgaW50IF9fYWNjZXB0Myk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJwYnJr X2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwgaW50IF9fYWNjZXB0MiwKICAg ICAgICAgICAgICBpbnQgX19hY2NlcHQzKQp7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAg ICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAgMTkKCgoKICB3 aGlsZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0gX19hY2NlcHQxICYmICpfX3MgIT0gX19hY2Nl cHQyCiAgICAgICAgICYmICpfX3MgIT0gX19hY2NlcHQzKQogICAgKytfX3M7CiAgcmV0dXJuICpf X3MgPT0gJ1wwJyA/ICgodm9pZCAqKTApIDogKGNoYXIgKikgKHNpemVfdCkgX19zOwp9CiMgMTAy NiAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBzaXplX3QK c3RybmxlbiAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbWF4bGVuKQp7CiAgX19j b25zdCBjaGFyICpfX2VuZCA9IChfX2NvbnN0IGNoYXIgKikgbWVtY2hyIChfX3N0cmluZywgJ1ww JywgX19tYXhsZW4pOwogIHJldHVybiBfX2VuZCA/IChzaXplX3QpIChfX2VuZCAtIF9fc3RyaW5n KSA6IF9fbWF4bGVuOwp9CiMgMTA0NSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4 dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnRva19yXzFjIChjaGFyICpfX3MsIGNoYXIgX19zZXAs IGNoYXIgKipfX25leHRwKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnRva19yXzFjIChj aGFyICpfX3MsIGNoYXIgX19zZXAsIGNoYXIgKipfX25leHRwKQp7CiAgY2hhciAqX19yZXN1bHQ7 CiAgaWYgKF9fcyA9PSAoKHZvaWQgKikwKSkKICAgIF9fcyA9ICpfX25leHRwOwogIHdoaWxlICgq X19zID09IF9fc2VwKQogICAgKytfX3M7CiAgaWYgKCpfX3MgPT0gJ1wwJykKICAgIF9fcmVzdWx0 ID0gKCh2b2lkICopMCk7CiAgZWxzZQogICAgewogICAgICBfX3Jlc3VsdCA9IF9fczsKICAgICAg d2hpbGUgKCpfX3MgIT0gJ1wwJyAmJiAqX19zICE9IF9fc2VwKQogICAgICAgICsrX19zOwogICAg ICBpZiAoKl9fcyA9PSAnXDAnKQogICAgICAgICpfX25leHRwID0gX19zOwogICAgICBlbHNlCiAg ICAgICAgewogICAgICAgICAgKl9fcyA9ICdcMCc7CiAgICAgICAgICAqX19uZXh0cCA9IF9fcyAr IDE7CiAgICAgICAgfQogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQojIDEwOTUgIi91c3IvaW5j bHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfMWMg KGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3Ry c2VwXzFjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0KQp7CiAgcmVnaXN0ZXIgY2hhciAqX19y ZXR2YWwgPSAqX19zOwogIGlmIChfX3JldHZhbCA9PSAoKHZvaWQgKikwKSkKICAgIHJldHVybiAq X19zID0gKCh2b2lkICopMCk7CiAgaWYgKCpfX3JldHZhbCA9PSBfX3JlamVjdCkKICAgICooKl9f cykrKyA9ICdcMCc7CiAgZWxzZQogICAgaWYgKCgqX19zID0gKF9fZXh0ZW5zaW9uX18gKF9fYnVp bHRpbl9jb25zdGFudF9wIChfX3JlamVjdCkgJiYgKF9fcmVqZWN0KSA9PSAnXDAnID8gKGNoYXIg KikgX19yYXdtZW1jaHIgKF9fcmV0dmFsLCBfX3JlamVjdCkgOiBzdHJjaHIgKF9fcmV0dmFsLCBf X3JlamVjdCkpKSkgIT0gKCh2b2lkICopMCkpCiAgICAgICooKl9fcykrKyA9ICdcMCc7CiAgICBl bHNlCiAgICAgICpfX3MgPSAoKHZvaWQgKikwKTsKICByZXR1cm4gX19yZXR2YWw7CgoKCgoKCgoy MDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAg ICAgICBQYWdlICAgMjAKCgp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfMmMgKGNo YXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0Mik7CmV4dGVybiBfX2lubGlu ZSBjaGFyICoKX19zdHJzZXBfMmMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9f cmVqZWN0MikKewogIHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFsID0gKl9fczsKICBpZiAoX19yZXR2 YWwgPT0gKCh2b2lkICopMCkpCiAgICByZXR1cm4gKl9fcyA9ICgodm9pZCAqKTApOwogIGlmICgq X19yZXR2YWwgPT0gX19yZWplY3QxIHx8ICpfX3JldHZhbCA9PSBfX3JlamVjdDIpCiAgICAqKCpf X3MpKysgPSAnXDAnOwogIGVsc2UKICAgIHsKICAgICAgcmVnaXN0ZXIgY2hhciAqX19jcCA9IF9f cmV0dmFsOwogICAgICB3aGlsZSAoKl9fY3AgIT0gJ1wwJyAmJiAqX19jcCAhPSBfX3JlamVjdDEg JiYgKl9fY3AgIT0gX19yZWplY3QyKQogICAgICAgICsrX19jcDsKICAgICAgaWYgKCpfX2NwICE9 ICdcMCcpCiAgICAgICAgewogICAgICAgICAgKl9fcyA9IF9fY3A7CiAgICAgICAgICAqKCpfX3Mp KysgPSAnXDAnOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgICpfX3MgPSAoKHZvaWQgKikw KTsKICAgIH0KICByZXR1cm4gX19yZXR2YWw7Cn0KCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0 cnNlcF8zYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19yZWplY3QzKTsKZXh0ZXJuIF9f aW5saW5lIGNoYXIgKgpfX3N0cnNlcF8zYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNo YXIgX19yZWplY3QyLCBjaGFyIF9fcmVqZWN0MykKewogIHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFs ID0gKl9fczsKICBpZiAoX19yZXR2YWwgPT0gKCh2b2lkICopMCkpCiAgICByZXR1cm4gKl9fcyA9 ICgodm9pZCAqKTApOwogIGlmICgqX19yZXR2YWwgPT0gX19yZWplY3QxIHx8ICpfX3JldHZhbCA9 PSBfX3JlamVjdDIKICAgICAgfHwgKl9fcmV0dmFsID09IF9fcmVqZWN0MykKICAgICooKl9fcykr KyA9ICdcMCc7CiAgZWxzZQogICAgewogICAgICByZWdpc3RlciBjaGFyICpfX2NwID0gX19yZXR2 YWw7CiAgICAgIHdoaWxlICgqX19jcCAhPSAnXDAnICYmICpfX2NwICE9IF9fcmVqZWN0MSAmJiAq X19jcCAhPSBfX3JlamVjdDIKICAgICAgICAgICAgICYmICpfX2NwICE9IF9fcmVqZWN0MykKICAg ICAgICArK19fY3A7CiAgICAgIGlmICgqX19jcCAhPSAnXDAnKQogICAgICAgIHsKICAgICAgICAg ICpfX3MgPSBfX2NwOwogICAgICAgICAgKigqX19zKSsrID0gJ1wwJzsKICAgICAgICB9CiAgICAg IGVsc2UKICAgICAgICAqX19zID0gKCh2b2lkICopMCk7CiAgICB9CiAgcmV0dXJuIF9fcmV0dmFs Owp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfZyAoY2hhciAqKl9fcywgX19jb25z dCBjaGFyICpfX3JlamVjdCk7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQ cGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAgMjEKCgpleHRlcm4gX19pbmxp bmUgY2hhciAqCl9fc3Ryc2VwX2cgKGNoYXIgKipfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3Qp CnsKICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsID09ICgo dm9pZCAqKTApKQogICAgcmV0dXJuICgodm9pZCAqKTApOwogIGlmICgoKl9fcyA9IF9fZXh0ZW5z aW9uX18gKHsgY2hhciBfX2EwLCBfX2ExLCBfX2EyOyAoX19idWlsdGluX2NvbnN0YW50X3AgKF9f cmVqZWN0KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoX19yZWplY3QpICsgMSkgLSAoc2l6 ZV90KShjb25zdCB2b2lkICopKF9fcmVqZWN0KSA9PSAxKSA/ICgoX19hMCA9ICgoX19jb25zdCBj aGFyICopIChfX3JlamVjdCkpWzBdLCBfX2EwID09ICdcMCcpID8gKCh2b2lkKSAoX19yZXR2YWwp LCAoKHZvaWQgKikwKSkgOiAoKF9fYTEgPSAoKF9fY29uc3QgY2hhciAqKSAoX19yZWplY3QpKVsx XSwgX19hMSA9PSAnXDAnKSA/IChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAo X19hMCkgJiYgKF9fYTApID09ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNociAoX19yZXR2YWws IF9fYTApIDogc3RyY2hyIChfX3JldHZhbCwgX19hMCkpKSA6ICgoX19hMiA9ICgoX19jb25zdCBj aGFyICopIChfX3JlamVjdCkpWzJdLCBfX2EyID09ICdcMCcpID8gX19zdHJwYnJrX2MyIChfX3Jl dHZhbCwgX19hMCwgX19hMSkgOiAoKChfX2NvbnN0IGNoYXIgKikgKF9fcmVqZWN0KSlbM10gPT0g J1wwJyA/IF9fc3RycGJya19jMyAoX19yZXR2YWwsIF9fYTAsIF9fYTEsIF9fYTIpIDogc3RycGJy ayAoX19yZXR2YWwsIF9fcmVqZWN0KSkpKSkgOiBzdHJwYnJrIChfX3JldHZhbCwgX19yZWplY3Qp KTsgfSkpICE9ICgodm9pZCAqKTApKQogICAgKigqX19zKSsrID0gJ1wwJzsKICByZXR1cm4gX19y ZXR2YWw7Cn0KIyAxMTg4ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdGRsaWIu aCIgMiAzCgoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0 ZGxpYi5oIiAyIDMKIyA1MjggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCAq bWFsbG9jIChzaXplX3QgX19zaXplKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0 ZXJuIHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpCiAgICAgICAg ICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDExODkgIi91c3IvaW5jbHVkZS9i aXRzL3N0cmluZzIuaCIgMiAzCgoKCgpleHRlcm4gY2hhciAqX19zdHJkdXAgKF9fY29uc3QgY2hh ciAqX19zdHJpbmcpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgMTIxMiAiL3Vzci9p bmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBjaGFyICpfX3N0cm5kdXAgKF9fY29uc3Qg Y2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgo X19tYWxsb2NfXykpOwojIDM2MCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKIyAzNSAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvaGFzaC5oIiAyCiMgNDMgIi91c3IvbG9jYWwvc3dh cm0vaW5jbHVkZS9vYmpjL2hhc2guaCIKdHlwZWRlZiBzdHJ1Y3QgY2FjaGVfbm9kZQp7CiAgc3Ry dWN0IGNhY2hlX25vZGUgKm5leHQ7CgogIGNvbnN0IHZvaWQgKmtleTsKCgoKICB2b2lkICp2YWx1 ZTsKfSAqbm9kZV9wdHI7CiMgNjQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL2hhc2gu aCIKdHlwZWRlZiB1bnNpZ25lZCBpbnQgKCpoYXNoX2Z1bmNfdHlwZSkodm9pZCAqLCBjb25zdCB2 b2lkICopOwojIDczICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9oYXNoLmgiCnR5cGVk ZWYgaW50ICgqY29tcGFyZV9mdW5jX3R5cGUpKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsK IyA4MiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvaGFzaC5oIgoKCgoKCgoKMjAwMS0w OC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAg UGFnZSAgIDIyCgoKdHlwZWRlZiBzdHJ1Y3QKewoKICBub2RlX3B0ciAqbm9kZV90YWJsZTsKCgog IHVuc2lnbmVkIGludCBzaXplOwoKCiAgdW5zaWduZWQgaW50IHVzZWQ7CiAgdW5zaWduZWQgaW50 IG1hc2s7CgoKCiAgdW5zaWduZWQgaW50IGxhc3RfYnVja2V0OwoKCgogIGhhc2hfZnVuY190eXBl IGhhc2hfZnVuYzsKCiAgY29tcGFyZV9mdW5jX3R5cGUgY29tcGFyZV9mdW5jOwp9IGNhY2hlX3Q7 Cgp0eXBlZGVmIGNhY2hlX3QgKmNhY2hlX3B0cjsKCgoKZXh0ZXJuIGNhY2hlX3B0ciBtb2R1bGVf aGFzaF90YWJsZSwgY2xhc3NfaGFzaF90YWJsZTsKCgoKY2FjaGVfcHRyIGhhc2hfbmV3ICh1bnNp Z25lZCBpbnQgc2l6ZSwKICAgICAgICAgICAgICAgICAgICBoYXNoX2Z1bmNfdHlwZSBoYXNoX2Z1 bmMsCiAgICAgICAgICAgICAgICAgICAgY29tcGFyZV9mdW5jX3R5cGUgY29tcGFyZV9mdW5jKTsK CgoKdm9pZCBoYXNoX2RlbGV0ZSAoY2FjaGVfcHRyIGNhY2hlKTsKCgoKCgoKdm9pZCBoYXNoX2Fk ZCAoY2FjaGVfcHRyICpjYWNoZXAsIGNvbnN0IHZvaWQgKmtleSwgdm9pZCAqdmFsdWUpOwoKCgoK dm9pZCBoYXNoX3JlbW92ZSAoY2FjaGVfcHRyIGNhY2hlLCBjb25zdCB2b2lkICprZXkpOwojIDE0 MiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvaGFzaC5oIgpub2RlX3B0ciBoYXNoX25l eHQgKGNhY2hlX3B0ciBjYWNoZSwgbm9kZV9wdHIgbm9kZSk7CgoKCnZvaWQgKmhhc2hfdmFsdWVf Zm9yX2tleSAoY2FjaGVfcHRyIGNhY2hlLCBjb25zdCB2b2lkICprZXkpOwoKCgoKCgoKMjAwMS0w OC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAg UGFnZSAgIDIzCgoKCgoKQk9PTCBoYXNoX2lzX2tleV9pbl9oYXNoIChjYWNoZV9wdHIgY2FjaGUs IGNvbnN0IHZvaWQgKmtleSk7CiMgMTY0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9o YXNoLmgiCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Cmhhc2hfcHRyIChjYWNoZV9wdHIgY2Fj aGUsIGNvbnN0IHZvaWQgKmtleSkKewogIHJldHVybiAoKHNpemVfdClrZXkgLyBzaXplb2YgKHZv aWQgKikpICYgY2FjaGUtPm1hc2s7Cn0KCgoKCgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludApo YXNoX3N0cmluZyAoY2FjaGVfcHRyIGNhY2hlLCBjb25zdCB2b2lkICprZXkpCnsKICB1bnNpZ25l ZCBpbnQgcmV0ID0gMDsKICB1bnNpZ25lZCBpbnQgY3RyID0gMDsKCgogIHdoaWxlICgqKGNoYXIq KWtleSkgewogICAgcmV0IF49ICooY2hhciopa2V5KysgPDwgY3RyOwogICAgY3RyID0gKGN0ciAr IDEpICUgc2l6ZW9mICh2b2lkICopOwogIH0KCiAgcmV0dXJuIHJldCAmIGNhY2hlLT5tYXNrOwp9 CgoKCnN0YXRpYyBpbmxpbmUgaW50CmNvbXBhcmVfcHRycyAoY29uc3Qgdm9pZCAqazEsIGNvbnN0 IHZvaWQgKmsyKQp7CiAgcmV0dXJuICEoazEgLSBrMik7Cn0KCgoKc3RhdGljIGlubGluZSBpbnQK Y29tcGFyZV9zdHJpbmdzIChjb25zdCB2b2lkICprMSwgY29uc3Qgdm9pZCAqazIpCnsKICBpZiAo azEgPT0gazIpCiAgICByZXR1cm4gMTsKICBlbHNlIGlmIChrMSA9PSAwIHx8IGsyID09IDApCiAg ICByZXR1cm4gMDsKICBlbHNlCiAgICByZXR1cm4gIV9fZXh0ZW5zaW9uX18gKHsgc2l6ZV90IF9f czFfbGVuLCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9jb25zdGFudF9wIChrMSkgJiYgX19idWlsdGlu X2NvbnN0YW50X3AgKGsyKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKGsxKSwgX19zMl9sZW4gPSBz dHJsZW4gKGsyKSwgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoazEpICsgMSkgLSAoc2l6ZV90 KShjb25zdCB2b2lkICopKGsxKSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90 KShjb25zdCB2b2lkICopKChrMikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoazIpID09 IDEpIHx8IF9fczJfbGVuID49IDQpKSA/IG1lbWNtcCAoKF9fY29uc3QgY2hhciAqKSAoazEpLCAo X19jb25zdCBjaGFyICopIChrMiksIChfX3MxX2xlbiA8IF9fczJfbGVuID8gX19zMV9sZW4gOiBf X3MyX2xlbikgKyAxKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoazEpICYmICgoc2l6ZV90KShj b25zdCB2b2lkICopKChrMSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoazEpID09IDEp ICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoazEpLCBfX3MxX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9j b25zdGFudF9wIChrMikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGsyKSArIDEpIC0gKHNp emVfdCkoY29uc3Qgdm9pZCAqKShrMikgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3Rl ciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoazEpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikoazIpKVswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3Vs dCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChrMSkpWzFd IC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazIpKVsxXSk7 IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChrMSkpWzJdIC0gKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazIpKVsyXSk7IGlmIChfX3MxX2xl biA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAoazEpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKGsyKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4 dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMiA9IChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazIpOyByZWdpc3RlciBpbnQgX19yZXN1bHQg PSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazEpKVswXSAt IF9fczJbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQg PSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazEpKVsxXSAt IF9fczJbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQg PSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazEpKVsyXSAt IF9fczJbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0g KCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsxKSlbM10gLSBf X3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wIChrMikg JiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGsyKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9p ZCAqKShrMikgPT0gMSkgJiYgKF9fczJfbGVuID0gc3RybGVuIChrMiksIF9fczJfbGVuIDwgNCkg PyAoX19idWlsdGluX2NvbnN0YW50X3AgKGsxKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgo azEpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGsxKSA9PSAxKSA/IChfX2V4dGVuc2lv bl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopIChrMSkpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKShrMikpWzBdKTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9 PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKGsxKSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopIChrMikpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVz dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGsxKSlb Ml0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChrMikpWzJd KTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChrMSkpWzNdIC0gKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoazIpKVszXSk7IH0gfSBfX3Jlc3Vs dDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MxID0g KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChrMSk7IHJlZ2lzdGVy IGludCBfX3Jlc3VsdCA9IF9fczFbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopIChrMikpWzBdOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDAp IHsgX19yZXN1bHQgPSAoX19zMVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKGsyKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDAp IHsgX19yZXN1bHQgPSAoX19zMVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKGsyKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDAp IF9fcmVzdWx0ID0gKF9fczFbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChrMikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogc3RyY21wIChrMSwgazIp KSkpOyB9KTsKfQojIDMyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy90eXBlZHN0cmVh bS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMC4xL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMzYgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKCgoKCjIw MDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9ic2VydmVyU3dhcm0ubWkgICAgICAgICAg ICAgIFBhZ2UgICAyNAoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0MyAiL3Vzci9sb2Nh bC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkaW8u aCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDQ1ICIvdXNyL2xv Y2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRp by5oIiAyIDMKIyA1MyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzMuMC4xL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxF OwojIDYzICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w LjEvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9fRklMRTsKIyA3 MyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2lu Y2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAxIDMKIyAzMCAiL3Vz ci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwoj IDkgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5 cGVzLmgiIDEgMwojIDEwICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKCgoKIyAxICIv dXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVk ZS9zdGRkZWYuaCIgMSAzCiMgMzEyICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGlu dCB3aW50X3Q7CiMgMTUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCiMgMjQgIi91c3Iv aW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0 OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1s aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91 c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIg MSAzCiMgNTEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyA2NyAiL3Vzci9pbmNsdWRlL3dj aGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50OwogIHVuaW9uCiAgewogICAg d2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAgfSBfX3ZhbHVlOwp9IF9fbWJzdGF0 ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKdHlwZWRlZiBzdHJ1Y3QK ewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7CnR5 cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAgMjUK CgogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMgNDQgIi91c3IvaW5jbHVk ZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMKIyAyNiAiL3Vz ci9pbmNsdWRlL2djb252LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg MjcgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgi IDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK IyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93 Y2hhci5oIiAxIDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDI5ICIvdXNyL2lu Y2x1ZGUvZ2NvbnYuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMSAiL3Vzci9pbmNs dWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZf Tk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZ X0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAog IF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1Is CiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1Qg PSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBf X2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9h ZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKCgoKCgoKMjAwMS0wOC0y NCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFn ZSAgIDI2CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVw ICosIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIHNpemVfdCAqLCBpbnQs IGludCk7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAoc3RydWN0IF9fZ2NvbnZf c3RlcCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0IF9fZ2NvbnZf c3RlcCAqKTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2ZjdCkgKHN0cnVjdCBfX2dj b252X3N0ZXAgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfX2dj b252X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19n Y29udl90cmFuc19jb250ZXh0X2ZjdCkgKHZvaWQgKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICos CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3Ry YW5zX3F1ZXJ5X2ZjdCkgKF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNoYXIgKioqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50 ICgqX19nY29udl90cmFuc19pbml0X2ZjdCkgKHZvaWQgKiosIGNvbnN0IGNoYXIgKik7CnR5cGVk ZWYgdm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7CgpzdHJ1Y3QgX19nY29u dl90cmFuc19kYXRhCnsKCiAgX19nY29udl90cmFuc19mY3QgX190cmFuc19mY3Q7CiAgX19nY29u dl90cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0OwogIF9fZ2NvbnZfdHJhbnNf ZW5kX2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRhOwogIHN0cnVjdCBfX2djb252 X3RyYW5zX2RhdGEgKl9fbmV4dDsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcAp7CiAgc3RydWN0 IF9fZ2NvbnZfbG9hZGVkX29iamVjdCAqX19zaGxpYl9oYW5kbGU7CiAgX19jb25zdCBjaGFyICpf X21vZG5hbWU7CgogIGludCBfX2NvdW50ZXI7CgogIGNoYXIgKl9fZnJvbV9uYW1lOwogIGNoYXIg Kl9fdG9fbmFtZTsKCiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9pbml0X2ZjdCBfX2lu aXRfZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCgoKCgoyMDAxLTA4LTI0IDAx OjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAg MjcKCgoKCgogIGludCBfX21pbl9uZWVkZWRfZnJvbTsKICBpbnQgX19tYXhfbmVlZGVkX2Zyb207 CiAgaW50IF9fbWluX25lZWRlZF90bzsKICBpbnQgX19tYXhfbmVlZGVkX3RvOwoKCiAgaW50IF9f c3RhdGVmdWw7CgogIHZvaWQgKl9fZGF0YTsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRh CnsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZjsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZmVu ZDsKCgoKICBpbnQgX19mbGFnczsKCgoKICBpbnQgX19pbnZvY2F0aW9uX2NvdW50ZXI7CgoKCiAg aW50IF9faW50ZXJuYWxfdXNlOwoKICBfX21ic3RhdGVfdCAqX19zdGF0ZXA7CiAgX19tYnN0YXRl X3QgX19zdGF0ZTsKCgoKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX3RyYW5zOwp9OwoK Cgp0eXBlZGVmIHN0cnVjdCBfX2djb252X2luZm8KewogIHNpemVfdCBfX25zdGVwczsKICBzdHJ1 Y3QgX19nY29udl9zdGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5zaW9uX18gc3RydWN0IF9fZ2NvbnZf c3RlcF9kYXRhIF9fZGF0YSBbXTsKfSAqX19nY29udl90OwojIDQ1ICIvdXNyL2luY2x1ZGUvX0df Y29uZmlnLmgiIDIgMwp0eXBlZGVmIHVuaW9uCnsKICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7 CiAgc3RydWN0CiAgewogICAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwoKCgoKCgoKMjAwMS0w OC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAg UGFnZSAgIDI4CgoKICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2Nv bWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmli dXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50 MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CiMg MzEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA1MSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi IDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w LjEvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYgX19i dWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgNTIgIi91c3IvaW5jbHVkZS9saWJpby5o IiAyIDMKIyAxNTggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fanVtcF90OyBz dHJ1Y3QgX0lPX0ZJTEU7CiMgMTY4ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIHZv aWQgX0lPX2xvY2tfdDsKCgoKCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJr ZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CgoKCiAgaW50IF9wb3M7CiMgMTkx ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAg X19jb2RlY3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBf X2NvZGVjdnRfbm9jb252Cn07CiMgMjU5ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3Qg X0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9JT19yZWFkX3B0cjsKICBjaGFy KiBfSU9fcmVhZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVf YmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9JT193cml0ZV9lbmQ7CiAgY2hh ciogX0lPX2J1Zl9iYXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoKCgoKCgoKMjAwMS0wOC0yNCAw MToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAg IDI5CgoKCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7CiAg Y2hhciAqX0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0 cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7CiAg X19vZmZfdCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBz aWduZWQgY2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9f bG9ja190ICpfbG9jazsKIyAzMDMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiAgX19vZmY2NF90 IF9vZmZzZXQ7CgoKCgoKICB2b2lkICpfX3BhZDE7CiAgdm9pZCAqX19wYWQyOwoKICBpbnQgX21v ZGU7CgogIGNoYXIgX3VudXNlZDJbMTUgKiBzaXplb2YgKGludCkgLSAyICogc2l6ZW9mICh2b2lk ICopXTsKCn07CgoKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgX0lPX0ZJTEU7CgoKc3RydWN0IF9J T19GSUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRpbl87 CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVybiBzdHJ1 Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CiMgMzQyICIvdXNyL2luY2x1ZGUvbGli aW8uaCIgMwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29va2llLCBj aGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAx OjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAg MzAKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19j b25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBf X29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2 b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9faW9fcmVhZF9mbiBjb29raWVfcmVhZF9mdW5j dGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29va2llX3dyaXRlX2Z1bmN0aW9uX3Q7CnR5 cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19j bG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19p b19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVfZm4gKndyaXRlOwogIF9faW9fc2Vla19mbiAq c2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsKfSBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190 Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgY29va2llX2lvX2Z1bmN0aW9uc190 OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpleHRlcm4gdm9pZCBfSU9fY29va2llX2luaXQg KHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2ZpbGUsIGludCBfX3JlYWRfd3JpdGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19jb29raWUsIF9JT19jb29raWVfaW9fZnVu Y3Rpb25zX3QgX19mbnMpOwoKCgoKCgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUg KikgOwpleHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxFICopIDsKZXh0ZXJuIGludCBfX292ZXJm bG93IChfSU9fRklMRSAqLCBpbnQpIDsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cgKF9JT19G SUxFICopIDsKZXh0ZXJuIHdpbnRfdCBfX3d1ZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gd2lu dF90IF9fd292ZXJmbG93IChfSU9fRklMRSAqLCB3aW50X3QpIDsKIyA0MjQgIi91c3IvaW5jbHVk ZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX2dldGMgKF9JT19GSUxFICpfX2ZwKSA7CmV4dGVy biBpbnQgX0lPX3B1dGMgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSA7CmV4dGVybiBpbnQgX0lP X2Zlb2YgKF9JT19GSUxFICpfX2ZwKSA7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUg Kl9fZnApIDsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZl clN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAgMzEKCgpleHRlcm4gaW50IF9JT19wZWVrY19s b2NrZWQgKF9JT19GSUxFICpfX2ZwKSA7CgoKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAo X0lPX0ZJTEUgKikgOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICopIDsK ZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSA7CiMgNDU0ICIvdXNyL2lu Y2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAqIF9fcmVz dHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICBf X2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSA7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRm IChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKICAgICAgICAg ICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSA7CmV4dGVybiBfX3NzaXplX3QgX0lPX3Bh ZG4gKF9JT19GSUxFICosIGludCwgX19zc2l6ZV90KSA7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRu IChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkgOwoKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vl a29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgOwpleHRlcm4gX19vZmY2NF90 IF9JT19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgOwoKZXh0ZXJuIHZvaWQg X0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIDsKIyA3NCAiL3Vzci9sb2NhbC9nY2Mz L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkaW8uaCIgMiAz CgoKCgp0eXBlZGVmIF9fZ251Y192YV9saXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA4OCAiL3Vzci9s b2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3Rk aW8uaCIgMwp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CgoKCgp0eXBlZGVmIF9HX2Zwb3M2NF90 IGZwb3M2NF90OwojIDEzNyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0 ZGlvX2xpbS5oIiAxIDMKIyAxMzggIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gRklMRSAqc3Rk aW47CmV4dGVybiBGSUxFICpzdGRvdXQ7CmV4dGVybiBGSUxFICpzdGRlcnI7CiMgMTUyICIvdXNy L2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9z dGRpby5oIiAzCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIDsK CmV4dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9f bmV3KSA7CgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgOwojIDE2OCAiL3Vzci9sb2Nh bC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkaW8u aCIgMwpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSA7CgoKCgoKCgoKCjIwMDEtMDgtMjQg MDE6MjEgICAgICAgICAgICAgIFBwbE9ic2VydmVyU3dhcm0ubWkgICAgICAgICAgICAgIFBhZ2Ug ICAzMgoKCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcykgOwoKCgoKZXh0ZXJuIGNoYXIg KnRtcG5hbV9yIChjaGFyICpfX3MpIDsKIyAxODggIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIg KnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29uc3QgY2hhciAqX19wZngpCiAgICAg ICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0ZXJuIGludCBmY2xv c2UgKEZJTEUgKl9fc3RyZWFtKSA7CgpleHRlcm4gaW50IGZmbHVzaCAoRklMRSAqX19zdHJlYW0p IDsKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpl eHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgOwoKCgoKCmV4dGVybiBGSUxFICpmb3BlbiAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIDsKCmV4dGVybiBGSUxFICpmcmVvcGVuIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAg RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwojIDIzMiAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4g RklMRSAqZm9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgOwpleHRl cm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwK ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMs CiAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCgoK CmV4dGVybiBGSUxFICpmZG9wZW4gKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIDsK CgoKCgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19j b29raWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlv bnNfdCBfX2lvX2Z1bmNzKSA7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAg UHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDMzCgoKCmV4dGVybiBGSUxF ICpmbWVtb3BlbiAodm9pZCAqX19zLCBzaXplX3QgX19sZW4sIF9fY29uc3QgY2hhciAqX19tb2Rl cykgOwoKCgoKZXh0ZXJuIEZJTEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19yZXN0cmljdCBf X2J1ZmxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3Qg X19zaXplbG9jKSA7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAo RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAg ICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgOwoKCgoKZXh0ZXJuIHZvaWQg c2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9f YnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIDsKCgpleHRlcm4gdm9p ZCBzZXRsaW5lYnVmIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmcHJpbnRmIChG SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHByaW50ZiAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgc3ByaW50ZiAo Y2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCgpleHRlcm4gaW50IHZmcHJpbnRmIChGSUxFICpf X3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAg ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgOwoKZXh0ZXJuIGludCB2cHJpbnRm IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJn KQogICAgICAgICAgICA7CgpleHRlcm4gaW50IHZzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9f cywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAg ICBfX2dudWNfdmFfbGlzdCBfX2FyZykgOwoKCgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpf X3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICAgICAgICAgIF9fYXR0cmli dXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwoKCgoKCgoKCjIwMDEtMDgt MjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9ic2VydmVyU3dhcm0ubWkgICAgICAgICAgICAgIFBh Z2UgICAzNAoKCmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6 ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICAgICAgICAgIF9fYXR0cmli dXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwoKCgoKCmV4dGVybiBpbnQg dmFzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZiwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAg ICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7 CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAg ICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsK ZXh0ZXJuIGludCBhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgICAgICAg ICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKZXh0 ZXJuIGludCB2ZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zt dCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgICAgICAg ICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJu IGludCBkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAu Li4pCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywg MiwgMykpKTsKCgoKCmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt LAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAu Li4pIDsKCmV4dGVybiBpbnQgc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h dCwgLi4uKSA7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f cywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwg Li4uKSA7CgoKCmV4dGVybiBpbnQgdmZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBfX2dudWNf dmFfbGlzdCBfX2FyZykKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf X3NjYW5mX18sIDIsIDApKSk7CgoKZXh0ZXJuIGludCB2c2NhbmYgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgICAgICAgICBfX2F0 dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAxLCAwKSkpOwoKCmV4dGVybiBpbnQg dnNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJn KQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwg MCkpKTsKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQg Z2V0YyAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAg ICAgIFBwbE9ic2VydmVyU3dhcm0ubWkgICAgICAgICAgICAgIFBhZ2UgICAzNQoKCgoKZXh0ZXJu IGludCBnZXRjaGFyICh2b2lkKSA7CgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJ TEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgOwoKCgoK ZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBp bnQgZnB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgcHV0YyAoaW50 IF9fYywgRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2MpIDsK CgoKCgoKCmV4dGVybiBpbnQgZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFt KSA7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFt KSA7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgOwoKCgoKCmV4dGVybiBp bnQgZ2V0dyAoRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJ TEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3Qg X19zLCBpbnQgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgICAgICAgICA7CgoK CgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAg ICAgICAgICAgICAgUGFnZSAgIDM2CgoKCgpleHRlcm4gY2hhciAqZmdldHNfdW5sb2NrZWQgKGNo YXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCgoKCmV4dGVybiBjaGFyICpnZXRzIChjaGFy ICpfX3MpIDsKIyA0MzYgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIF9fc3NpemVfdCBfX2dldGRlbGlt IChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CmV4dGVybiBf X3NzaXplX3QgZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0 ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVh bSkgOwoKCmV4dGVybiBfX3NzaXplX3QgZ2V0bGluZSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5l cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsK CgoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUg Kl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgICAgICAgIDsKCgoKZXh0ZXJuIGludCBmcHV0c191 bmxvY2tlZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwoKCgpleHRlcm4gaW50IHB1dHMg KF9fY29uc3QgY2hhciAqX19zKSA7CgoKCmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxF ICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICpfX3Jlc3RyaWN0IF9f cHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxF ICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgpleHRlcm4gc2l6ZV90IGZ3cml0ZSAoX19jb25zdCB2 b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIDsKCgoKZXh0ZXJuIHNpemVfdCBm cmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBf X3N0cmVhbSkgOwpleHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpf X3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwoKCgoKCgoKCjIw MDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9ic2VydmVyU3dhcm0ubWkgICAgICAgICAg ICAgIFBhZ2UgICAzNwoKCgoKCmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25n IGludCBfX29mZiwgaW50IF9fd2hlbmNlKSA7CgpleHRlcm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUg Kl9fc3RyZWFtKSA7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSA7CiMgNDk5 ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5j bHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvIChGSUxFICpfX3N0cmVhbSwgX19vZmZf dCBfX29mZiwgaW50IF9fd2hlbmNlKSA7CgpleHRlcm4gX19vZmZfdCBmdGVsbG8gKEZJTEUgKl9f c3RyZWFtKSA7CgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVh bSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgICAgICAgICA7CgpleHRlcm4gaW50IGZz ZXRwb3MgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3NfdCAqX19wb3MpIDsKIyA1MzMgIi91 c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRl L3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vla282NCAoRklMRSAqX19zdHJlYW0sIF9fb2ZmNjRf dCBfX29mZiwgaW50IF9fd2hlbmNlKSA7CmV4dGVybiBfX29mZjY0X3QgZnRlbGxvNjQgKEZJTEUg Kl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZmdldHBvczY0IChGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry ZWFtLCBmcG9zNjRfdCAqX19yZXN0cmljdCBfX3BvcykKICAgICAgICAgICAgOwpleHRlcm4gaW50 IGZzZXRwb3M2NCAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSA7CgoK CmV4dGVybiB2b2lkIGNsZWFyZXJyIChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBmZW9m IChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSA7 CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwpleHRl cm4gaW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZmVycm9y X3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIHZvaWQgcGVycm9yIChfX2Nv bnN0IGNoYXIgKl9fcykgOwoKCgoKZXh0ZXJuIGludCBzeXNfbmVycjsKZXh0ZXJuIF9fY29uc3Qg Y2hhciAqX19jb25zdCBzeXNfZXJybGlzdFtdOwoKCmV4dGVybiBpbnQgX3N5c19uZXJyOwpleHRl cm4gX19jb25zdCBjaGFyICpfX2NvbnN0IF9zeXNfZXJybGlzdFtdOwoKCgoKCgoKCgoyMDAxLTA4 LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQ YWdlICAgMzgKCgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4 dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKCgpleHRlcm4g RklMRSAqcG9wZW4gKF9fY29uc3QgY2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNoYXIgKl9fbW9k ZXMpIDsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgpleHRlcm4g Y2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmN1c2VyaWQgKGNo YXIgKl9fcykgOwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50 ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwpleHRl cm4gaW50IG9ic3RhY2tfdnByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0 YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19h cmdzKSA7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSA7CgoK CmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKCgoKCjIwMDEt MDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9ic2VydmVyU3dhcm0ubWkgICAgICAgICAgICAg IFBhZ2UgICAzOQoKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIDsK IyA2NDAgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAu MS9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAxIDMK IyAzOSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMwpleHRlcm4gX19pbmxpbmUgaW50CnZw cmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgX19nbnVjX3ZhX2xpc3QgX19h cmcpCnsKICByZXR1cm4gdmZwcmludGYgKHN0ZG91dCwgX19mbXQsIF9fYXJnKTsKfQoKCmV4dGVy biBfX2lubGluZSBpbnQKZ2V0Y2hhciAodm9pZCkKewogIHJldHVybiBfSU9fZ2V0YyAoc3RkaW4p Owp9CgoKCgpleHRlcm4gX19pbmxpbmUgaW50CmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fZnApCnsK ICByZXR1cm4gKChfX2ZwKS0+X0lPX3JlYWRfcHRyID49IChfX2ZwKS0+X0lPX3JlYWRfZW5kID8g X191ZmxvdyAoX19mcCkgOiAqKHVuc2lnbmVkIGNoYXIgKikgKF9fZnApLT5fSU9fcmVhZF9wdHIr Kyk7Cn0KCgpleHRlcm4gX19pbmxpbmUgaW50CmdldGNoYXJfdW5sb2NrZWQgKHZvaWQpCnsKICBy ZXR1cm4gKChzdGRpbiktPl9JT19yZWFkX3B0ciA+PSAoc3RkaW4pLT5fSU9fcmVhZF9lbmQgPyBf X3VmbG93IChzdGRpbikgOiAqKHVuc2lnbmVkIGNoYXIgKikgKHN0ZGluKS0+X0lPX3JlYWRfcHRy KyspOwp9CgoKCgpleHRlcm4gX19pbmxpbmUgaW50CnB1dGNoYXIgKGludCBfX2MpCnsKICByZXR1 cm4gX0lPX3B1dGMgKF9fYywgc3Rkb3V0KTsKfQoKCgoKZXh0ZXJuIF9faW5saW5lIGludApmcHV0 Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gKCgoX19zdHJl YW0pLT5fSU9fd3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVy ZmxvdyAoX19zdHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikg KCooX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKCgoKCgoKCgoKCjIw MDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9ic2VydmVyU3dhcm0ubWkgICAgICAgICAg ICAgIFBhZ2UgICA0MAoKCmV4dGVybiBfX2lubGluZSBpbnQKcHV0Y191bmxvY2tlZCAoaW50IF9f YywgRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRy ID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoX19zdHJlYW0sICh1 bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooX19zdHJlYW0pLT5fSU9f d3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKZXh0ZXJuIF9faW5saW5lIGludApwdXRjaGFyX3Vu bG9ja2VkIChpbnQgX19jKQp7CiAgcmV0dXJuICgoKHN0ZG91dCktPl9JT193cml0ZV9wdHIgPj0g KHN0ZG91dCktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoc3Rkb3V0LCAodW5zaWduZWQg Y2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKHN0ZG91dCktPl9JT193cml0ZV9wdHIr KyA9IChfX2MpKSk7Cn0KCgoKCgpleHRlcm4gX19pbmxpbmUgX19zc2l6ZV90CmdldGxpbmUgKGNo YXIgKipfX2xpbmVwdHIsIHNpemVfdCAqX19uLCBGSUxFICpfX3N0cmVhbSkKewogIHJldHVybiBf X2dldGRlbGltIChfX2xpbmVwdHIsIF9fbiwgJ1xuJywgX19zdHJlYW0pOwp9CgoKCgoKZXh0ZXJu IF9faW5saW5lIGludApmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkKewogIHJldHVybiAo KChfX3N0cmVhbSktPl9mbGFncyAmIDB4MTApICE9IDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGlu dApmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFt KS0+X2ZsYWdzICYgMHgyMCkgIT0gMCk7Cn0KIyA2NDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDMzICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy90eXBlZHN0cmVhbS5oIiAyCgp0eXBlZGVmIGlu dCAoKm9iamNfdHlwZWRfcmVhZF9mdW5jKSh2b2lkKiwgY2hhciosIGludCk7CnR5cGVkZWYgaW50 ICgqb2JqY190eXBlZF93cml0ZV9mdW5jKSh2b2lkKiwgY29uc3QgY2hhciosIGludCk7CnR5cGVk ZWYgaW50ICgqb2JqY190eXBlZF9mbHVzaF9mdW5jKSh2b2lkKik7CnR5cGVkZWYgaW50ICgqb2Jq Y190eXBlZF9lb2ZfZnVuYykodm9pZCopOwojIDQ4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv b2JqYy90eXBlZHN0cmVhbS5oIgp0eXBlZGVmIHN0cnVjdCBvYmpjX3R5cGVkX3N0cmVhbSB7CiAg dm9pZCogcGh5c2ljYWw7CiAgY2FjaGVfcHRyIG9iamVjdF90YWJsZTsKICBjYWNoZV9wdHIgc3Ry ZWFtX3RhYmxlOwogIGNhY2hlX3B0ciBjbGFzc190YWJsZTsKICBjYWNoZV9wdHIgb2JqZWN0X3Jl ZnM7CiAgaW50IG1vZGU7CiAgaW50IHR5cGU7CiAgaW50IHZlcnNpb247CgoKCgoKCgoyMDAxLTA4 LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQ YWdlICAgNDEKCgogIGludCB3cml0aW5nX3Jvb3RfcDsKICBvYmpjX3R5cGVkX3JlYWRfZnVuYyBy ZWFkOwogIG9iamNfdHlwZWRfd3JpdGVfZnVuYyB3cml0ZTsKICBvYmpjX3R5cGVkX2VvZl9mdW5j IGVvZjsKICBvYmpjX3R5cGVkX2ZsdXNoX2Z1bmMgZmx1c2g7Cn0gVHlwZWRTdHJlYW07CiMgOTMg Ii91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL3R5cGVkc3RyZWFtLmgiCmludCBvYmpjX3dy aXRlX3R5cGUgKFR5cGVkU3RyZWFtKiBzdHJlYW0sIGNvbnN0IGNoYXIqIHR5cGUsIGNvbnN0IHZv aWQqIGRhdGEpOwppbnQgb2JqY19yZWFkX3R5cGUgKFR5cGVkU3RyZWFtKiBzdHJlYW0sIGNvbnN0 IGNoYXIqIHR5cGUsIHZvaWQqIGRhdGEpOwoKaW50IG9iamNfd3JpdGVfdHlwZXMgKFR5cGVkU3Ry ZWFtKiBzdHJlYW0sIGNvbnN0IGNoYXIqIHR5cGUsIC4uLik7CmludCBvYmpjX3JlYWRfdHlwZXMg KFR5cGVkU3RyZWFtKiBzdHJlYW0sIGNvbnN0IGNoYXIqIHR5cGUsIC4uLik7CgppbnQgb2JqY193 cml0ZV9vYmplY3RfcmVmZXJlbmNlIChUeXBlZFN0cmVhbSogc3RyZWFtLCBpZCBvYmplY3QpOwpp bnQgb2JqY193cml0ZV9yb290X29iamVjdCAoVHlwZWRTdHJlYW0qIHN0cmVhbSwgaWQgb2JqZWN0 KTsKCmxvbmcgb2JqY19nZXRfc3RyZWFtX2NsYXNzX3ZlcnNpb24gKFR5cGVkU3RyZWFtKiBzdHJl YW0sIENsYXNzIGNsYXNzKTsKCgoKCgoKaW50IG9iamNfd3JpdGVfYXJyYXkgKFR5cGVkU3RyZWFt KiBzdHJlYW0sIGNvbnN0IGNoYXIqIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgY291 bnQsIGNvbnN0IHZvaWQqIGRhdGEpOwppbnQgb2JqY19yZWFkX2FycmF5IChUeXBlZFN0cmVhbSog c3RyZWFtLCBjb25zdCBjaGFyKiB0eXBlLAogICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQs IHZvaWQqIGRhdGEpOwoKaW50IG9iamNfd3JpdGVfb2JqZWN0IChUeXBlZFN0cmVhbSogc3RyZWFt LCBpZCBvYmplY3QpOwppbnQgb2JqY19yZWFkX29iamVjdCAoVHlwZWRTdHJlYW0qIHN0cmVhbSwg aWQqIG9iamVjdCk7CiMgMTI0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy90eXBlZHN0 cmVhbS5oIgpUeXBlZFN0cmVhbSogb2JqY19vcGVuX3R5cGVkX3N0cmVhbSAoRklMRSogcGh5c2lj YWwsIGludCBtb2RlKTsKVHlwZWRTdHJlYW0qIG9iamNfb3Blbl90eXBlZF9zdHJlYW1fZm9yX2Zp bGUgKGNvbnN0IGNoYXIqIGZpbGVfbmFtZSwgaW50IG1vZGUpOwoKdm9pZCBvYmpjX2Nsb3NlX3R5 cGVkX3N0cmVhbSAoVHlwZWRTdHJlYW0qIHN0cmVhbSk7CgpCT09MIG9iamNfZW5kX29mX3R5cGVk X3N0cmVhbSAoVHlwZWRTdHJlYW0qIHN0cmVhbSk7CnZvaWQgb2JqY19mbHVzaF90eXBlZF9zdHJl YW0gKFR5cGVkU3RyZWFtKiBzdHJlYW0pOwojIDMyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv b2JqYy9PYmplY3QuaCIgMgoKCgoKCkBpbnRlcmZhY2UgT2JqZWN0CnsKICAgIENsYXNzIGlzYTsK fQoKCisgaW5pdGlhbGl6ZTsKLSBpbml0OwoKCisgbmV3OworIGFsbG9jOwoKCgoKCgoKMjAwMS0w OC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAg UGFnZSAgIDQyCgoKLSBmcmVlOwotIGNvcHk7Ci0gc2hhbGxvd0NvcHk7Ci0gZGVlcGVuOwotIGRl ZXBDb3B5OwoKCi0gKENsYXNzKWNsYXNzOwotIChDbGFzcylzdXBlckNsYXNzOwotIChNZXRhQ2xh c3MpbWV0YUNsYXNzOwotIChjb25zdCBjaGFyICopbmFtZTsKCgotIHNlbGY7Ci0gKHVuc2lnbmVk IGludCloYXNoOwotIChCT09MKWlzRXF1YWw6YW5PYmplY3Q7Ci0gKGludCljb21wYXJlOmFub3Ro ZXJPYmplY3Q7CgoKLSAoQk9PTClpc01ldGFDbGFzczsKLSAoQk9PTClpc0NsYXNzOwotIChCT09M KWlzSW5zdGFuY2U7CgoKLSAoQk9PTClpc0tpbmRPZjooQ2xhc3MpYUNsYXNzT2JqZWN0OwotIChC T09MKWlzTWVtYmVyT2Y6KENsYXNzKWFDbGFzc09iamVjdDsKLSAoQk9PTClpc0tpbmRPZkNsYXNz TmFtZWQ6KGNvbnN0IGNoYXIgKilhQ2xhc3NOYW1lOwotIChCT09MKWlzTWVtYmVyT2ZDbGFzc05h bWVkOihjb25zdCBjaGFyICopYUNsYXNzTmFtZTsKCgorIChCT09MKWluc3RhbmNlc1Jlc3BvbmRU bzooU0VMKWFTZWw7Ci0gKEJPT0wpcmVzcG9uZHNUbzooU0VMKWFTZWw7CgoKLSAoQk9PTCljb25m b3Jtc1RvOihQcm90b2NvbCopYVByb3RvY29sOwoKCisgKElNUClpbnN0YW5jZU1ldGhvZEZvcjoo U0VMKWFTZWw7Ci0gKElNUCltZXRob2RGb3I6KFNFTClhU2VsOworIChzdHJ1Y3Qgb2JqY19tZXRo b2RfZGVzY3JpcHRpb24gKilkZXNjcmlwdGlvbkZvckluc3RhbmNlTWV0aG9kOihTRUwpYVNlbDsK LSAoc3RydWN0IG9iamNfbWV0aG9kX2Rlc2NyaXB0aW9uICopZGVzY3JpcHRpb25Gb3JNZXRob2Q6 KFNFTClhU2VsOwoKCi0gcGVyZm9ybTooU0VMKWFTZWw7Ci0gcGVyZm9ybTooU0VMKWFTZWwgd2l0 aDphbk9iamVjdDsKLSBwZXJmb3JtOihTRUwpYVNlbCB3aXRoOmFuT2JqZWN0MSB3aXRoOmFuT2Jq ZWN0MjsKCgotIChyZXR2YWxfdClmb3J3YXJkOihTRUwpYVNlbCA6KGFyZ2xpc3RfdClhcmdGcmFt ZTsKLSAocmV0dmFsX3QpcGVyZm9ybXY6KFNFTClhU2VsIDooYXJnbGlzdF90KWFyZ0ZyYW1lOwoK CisgcG9zZUFzOihDbGFzcylhQ2xhc3NPYmplY3Q7Ci0gKENsYXNzKXRyYW5zbXV0ZUNsYXNzVG86 KENsYXNzKWFDbGFzc09iamVjdDsKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAg ICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDQzCgoKLSBzdWJjbGFz c1Jlc3BvbnNpYmlsaXR5OihTRUwpYVNlbDsKLSBub3RJbXBsZW1lbnRlZDooU0VMKWFTZWw7Ci0g c2hvdWxkTm90SW1wbGVtZW50OihTRUwpYVNlbDsKCgotIGRvZXNOb3RSZWNvZ25pemU6KFNFTClh U2VsOwotIGVycm9yOihjb25zdCBjaGFyICopYVN0cmluZywgLi4uOwoKCisgKGludCl2ZXJzaW9u OworIHNldFZlcnNpb246KGludClhVmVyc2lvbjsKKyAoaW50KXN0cmVhbVZlcnNpb246IChUeXBl ZFN0cmVhbSopYVN0cmVhbTsKCi0gcmVhZDogKFR5cGVkU3RyZWFtKilhU3RyZWFtOwotIHdyaXRl OiAoVHlwZWRTdHJlYW0qKWFTdHJlYW07Ci0gYXdha2U7CgpAZW5kCiMgMjIgIi91c3IvbG9jYWwv c3dhcm0vaW5jbHVkZS9kZWZvYmovZGVmdHlwZS5oIiAyCgoKCgoKCkBwcm90b2NvbCBDUkVBVEFC TEUKQGVuZAoKCkBwcm90b2NvbCBSRVRVUk5BQkxFCkBlbmQKIyA0NiAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL2RlZm9iai9kZWZ0eXBlLmgiCnR5cGVkZWYgdm9pZCAoKm5vdGlmeV90KSggaWQg b2JqZWN0LCBpZCByZWFsbG9jQWRkcmVzcywgdm9pZCAqYXJnICk7CgoKCgoKCnR5cGVkZWYgdm9p ZCAqcmVmX3Q7CgoKCgp0eXBlZGVmIHZvaWQgKCpmdW5jX3QpKCB2b2lkICk7CgoKCgp0eXBlZGVm IGlkICgqZml4dXBSb3V0aW5lX3QpKCB2b2lkICpmaXh1cENvbnRleHQsIGlkIGZpeHVwT2JqZWN0 ICk7CnR5cGVkZWYgdm9pZCAoKmZpeHVwX3QpKCBmaXh1cFJvdXRpbmVfdCBmaXh1cFJvdXRpbmUs IHZvaWQgKmZpeHVwQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBpZCBmaXh1cEFy Z3VtZW50ICk7CiMgNjcgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIgMgojIDEg Ii91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9leHRlcm52YXIuaCIgMQojIDY4ICIvdXNyL2xvY2Fs L3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiIDIKIyA3NyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRl L2RlZm9iai5oIgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2 ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDQ0CgoKQHByb3RvY29sIEdldE5hbWUKIyA4 OSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgotIF9JX1VzaW5nOwotIChjb25z dCBjaGFyICopZ2V0TmFtZTsKQGVuZAoKQHByb3RvY29sIERlZmluZWRPYmplY3QgPEdldE5hbWU+ CiMgMTA4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCi0gX0lfVXNpbmc7CiMg MTE3ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCi0gKEJPT0wpcmVzcG9uZHNU bzogKFNFTClhU2VsOwoKKyAoQk9PTCljb25mb3Jtc1RvOiAoUHJvdG9jb2wgKilwcm90b2NvbDsK LSAoQk9PTCljb25mb3Jtc1RvOiAoUHJvdG9jb2wgKilwcm90b2NvbDsKCgoKLSBnZXRDbGFzczsK CgotIChjb25zdCBjaGFyICopZ2V0VHlwZU5hbWU7CgoKCi0gKHJlZl90KWFkZFJlZjogKG5vdGlm eV90KW5vdGlmeUZ1bmN0aW9uIHdpdGhBcmd1bWVudDogKHZvaWQgKilhcmc7CgoKLSAodm9pZCly ZW1vdmVSZWY6IChyZWZfdClyZWZWYWw7CgoKLSAoaW50KWNvbXBhcmU6IGFuT2JqZWN0OwoKCi0g cGVyZm9ybTogKFNFTClhU2VsOwoKCi0gcGVyZm9ybTogKFNFTClhU2VsIHdpdGg6IGFuT2JqZWN0 MTsKCgotIHBlcmZvcm06IChTRUwpYVNlbCB3aXRoOiBhbk9iamVjdDEgd2l0aDogYW5PYmoyOwoK Ci0gcGVyZm9ybTogKFNFTClhU2VsIHdpdGg6IGFuT2JqZWN0MSB3aXRoOiBhbk9iajIgd2l0aDog YW5PYmozOwoKCgotICh2b2lkKXNldERpc3BsYXlOYW1lOiAoY29uc3QgY2hhciAqKWRpc3BsYXlO YW1lOwoKCgoKLSAoY29uc3QgY2hhciAqKWdldERpc3BsYXlOYW1lOwojIDE2OCAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgotICh2b2lkKWRlc2NyaWJlOiBvdXRwdXRDaGFyU3Ry ZWFtOwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3 YXJtLm1pICAgICAgICAgICAgICBQYWdlICAgNDUKCgoKLSAodm9pZClkZXNjcmliZUlEOiBvdXRw dXRDaGFyU3RyZWFtOwoKCi0gKHZvaWQpeHByaW50OwoKCi0gKHZvaWQpeHByaW50aWQ7CgoKLSAo dm9pZCl4ZnByaW50OwoKCi0gKHZvaWQpeGZwcmludGlkOwoKCi0gZ2V0Wm9uZTsKQGVuZAoKQHBy b3RvY29sIEN1c3RvbWl6ZQojIDIyMyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5o IgotIF9JX0NyZWF0aW5nOwojIDIzOSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5o IgorIGN1c3RvbWl6ZUJlZ2luOiBhWm9uZTsKCgotIGN1c3RvbWl6ZUVuZDsKIyAyNjUgIi91c3Iv bG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIKLSBjdXN0b21pemVDb3B5OiBhWm9uZTsKQGVu ZAoKQHByb3RvY29sIENyZWF0ZSA8RGVmaW5lZE9iamVjdCwgQ3VzdG9taXplPgojIDMxOSAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgotIF9JX0NyZWF0aW5nOwojIDMzNSAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgorIGNyZWF0ZTogYVpvbmU7CgoKCgoKCgor IGNyZWF0ZUJlZ2luOiBhWm9uZTsKIyAzNzEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZv YmouaCIKLSBjcmVhdGVFbmQ7CkBlbmQKCkBwcm90b2NvbCBEcm9wCiMgNDAxICIvdXNyL2xvY2Fs L3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCi0gX0lfVXNpbmc7Ci0gKHZvaWQpZHJvcDsKQGVuZAoK QHByb3RvY29sIFpvbmUgPENyZWF0ZSwgRHJvcCwgQ1JFQVRBQkxFPgojIDQ1NiAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAg ICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDQ2CgoKLSBfSV9D cmVhdGluZzsKCgoKCgoKCi0gKHZvaWQpc2V0UGFnZVNpemU6IChzaXplX3QpcGFnZVNpemU7Cgot IF9JX1VzaW5nOwotIChzaXplX3QpZ2V0UGFnZVNpemU7CgoKCgoKCi0gYWxsb2NJVmFyczogKENs YXNzKWFDbGFzczsKCgoKCgoKLSBjb3B5SVZhcnM6IGFuT2JqZWN0OwoKCgoKCgoKLSAodm9pZClm cmVlSVZhcnM6IGFuT2JqZWN0OwojIDQ5OSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9i ai5oIgotIGFsbG9jSVZhcnNDb21wb25lbnQ6IChDbGFzcylhQ2xhc3M7CgoKCi0gY29weUlWYXJz Q29tcG9uZW50OiBhbk9iamVjdDsKCgotICh2b2lkKWZyZWVJVmFyc0NvbXBvbmVudDogYW5PYmpl Y3Q7CgoKCgoKCi0gZ2V0Q29tcG9uZW50Wm9uZTsKCgoKCgotICh2b2lkICopYWxsb2M6IChzaXpl X3Qpc2l6ZTsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9ic2VydmVy U3dhcm0ubWkgICAgICAgICAgICAgIFBhZ2UgICA0NwoKCgoKCgoKCi0gKHZvaWQpZnJlZTogKHZv aWQgKilhQmxvY2s7CgoKCgotICh2b2lkICopYWxsb2NCbG9jazogKHNpemVfdClzaXplOwoKCgot ICh2b2lkKWZyZWVCbG9jazogKHZvaWQgKilhQmxvY2sgYmxvY2tTaXplOiAoc2l6ZV90KXNpemU7 CiMgNTQ1ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCi0gZ2V0UG9wdWxhdGlv bjsKCgotICh2b2lkKWRlc2NyaWJlRm9yRWFjaDogb3V0cHV0Q2hhclN0cmVhbTsKCgotICh2b2lk KWRlc2NyaWJlRm9yRWFjaElEOiBvdXRwdXRDaGFyU3RyZWFtOwpAZW5kCgpAcHJvdG9jb2wgRGVm aW5lZENsYXNzIDxEZWZpbmVkT2JqZWN0PgoKCgotIF9JX1VzaW5nOworIGdldFN1cGVyY2xhc3M7 CisgKEJPT0wpaXNTdWJjbGFzczogYUNsYXNzOwoKKyAodm9pZClzZXRUeXBlSW1wbGVtZW50ZWQ6 IGFUeXBlOworIGdldFR5cGVJbXBsZW1lbnRlZDsKCisgKElNUClnZXRNZXRob2RGb3I6IChTRUwp YVNlbDsKQGVuZAoKQHByb3RvY29sIENyZWF0ZWRDbGFzcyA8Q3JlYXRlLCBEZWZpbmVkQ2xhc3M+ CgoKCgotIF9JX0NyZWF0aW5nOwotIHNldE5hbWU6IChjb25zdCBjaGFyICopbmFtZTsKLSBzZXRD bGFzczogYUNsYXNzOwotIHNldFN1cGVyY2xhc3M6IGFDbGFzczsKLSBzZXREZWZpbmluZ0NsYXNz OiBhQ2xhc3M7Ci0gYXQ6IChTRUwpYVNlbCBhZGRNZXRob2Q6IChJTVApYU1ldGhvZDsKLSBsaXNw SW5DcmVhdGU6IGV4cHI7Ci0gaGRmNUluQ3JlYXRlOiBoZGY1T2JqOwotICh2b2lkKWxpc3BPdXRT aGFsbG93OiBzdHJlYW07Ci0gKHZvaWQpaGRmNU91dFNoYWxsb3c6IGhkZjVPYmo7Ci0gKHZvaWQp dXBkYXRlQXJjaGl2ZXI6IGFyY2hpdmVyOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAg ICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDQ4CgoKLSBfSV9V c2luZzsKLSBnZXREZWZpbmluZ0NsYXNzOwpAZW5kCgpAcHJvdG9jb2wgQmVoYXZpb3JQaGFzZSA8 Q3JlYXRlZENsYXNzPgoKCgoKLSBfSV9DcmVhdGluZzsKLSAodm9pZClzZXROZXh0UGhhc2U6IGFD bGFzczsKCi0gX0lfVXNpbmc7Ci0gZ2V0TmV4dFBoYXNlOwpAZW5kCgpAcHJvdG9jb2wgQ29weQoj IDYyMCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgotIF9JX1VzaW5nOwotIGNv cHk6IChpZCA8Wm9uZT4pYVpvbmU7CkBlbmQKCgoKCgpAcHJvdG9jb2wgR2V0T3duZXIKIyA2NDcg Ii91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIKLSBfSV9Vc2luZzsKLSBnZXRPd25l cjsKQGVuZAoKQHByb3RvY29sIFNldEluaXRpYWxWYWx1ZQojIDY3MiAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL2RlZm9iai5oIgotIF9JX0NyZWF0aW5nOwoKCgoKCgoKLSAodm9pZClzZXRJbml0 aWFsVmFsdWU6IGluaXRpYWxWYWx1ZTsKQGVuZAoKQHByb3RvY29sIFN5bWJvbCA8Q3JlYXRlLCBH ZXROYW1lLCBDUkVBVEFCTEU+CiMgNzA2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2Jq LmgiCi0gX0lfQ3JlYXRpbmc7CgoKCisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNldE5hbWU6 IChjb25zdCBjaGFyICopbmFtZTsKCgoKQGVuZAoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAg ICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDQ5CgoKCkBw cm90b2NvbCBFdmVudFR5cGUgPFN5bWJvbD4KCgoKCi0gX0lfVXNpbmc7CgotICh2b2lkKXJhaXNl RXZlbnQ7CgoKCi0gKHZvaWQpcmFpc2VFdmVudDogKGNvbnN0IHZvaWQgKilldmVudERhdGEsIC4u LjsKCgoKCgpAZW5kCgoKQHByb3RvY29sIFdhcm5pbmcgPEV2ZW50VHlwZSwgQ1JFQVRBQkxFPgoK CgoKLSBfSV9Vc2luZzsKCi0gKHZvaWQpc2V0TWVzc2FnZVN0cmluZzogKGNvbnN0IGNoYXIgKilt ZXNzYWdlU3RyaW5nOwoKCi0gKGNvbnN0IGNoYXIgKilnZXRNZXNzYWdlU3RyaW5nOwoKZXh0ZXJu IGlkIDxXYXJuaW5nPgogIFdhcm5pbmdNZXNzYWdlLAogIFJlc291cmNlQXZhaWxhYmlsaXR5LAog IExpYnJhcnlVc2FnZSwKICBEZWZhdWx0QXNzdW1lZCwKICBPYnNvbGV0ZUZlYXR1cmUsCiAgT2Jz b2xldGVNZXNzYWdlLAogIFNhdmVXYXJuaW5nOwoKCgoKCkBlbmQKCkBwcm90b2NvbCBFcnJvciA8 V2FybmluZywgQ1JFQVRBQkxFPgoKCgoKZXh0ZXJuIGlkIDxFcnJvcj4KICBTb3VyY2VNZXNzYWdl LAogIE5vdEltcGxlbWVudGVkLAoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAg UHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDUwCgoKICBTdWJjbGFzc011 c3RJbXBsZW1lbnQsCiAgSW52YWxpZENvbWJpbmF0aW9uLAogIEludmFsaWRPcGVyYXRpb24sCiAg SW52YWxpZEFyZ3VtZW50LAogIENyZWF0ZVN1YmNsYXNzaW5nLAogIENyZWF0ZVVzYWdlLAogIE91 dE9mTWVtb3J5LAogIEludmFsaWRBbGxvY1NpemUsCiAgSW50ZXJuYWxFcnJvciwKICBCbG9ja2Vk T2JqZWN0QWxsb2MsCiAgQmxvY2tlZE9iamVjdFVzYWdlLAogIFByb3RvY29sVmlvbGF0aW9uLAog IExvYWRFcnJvciwKICBTYXZlRXJyb3I7CgoKCgoKQGVuZAoKQHByb3RvY29sIEFyZ3VtZW50cyA8 Q3JlYXRlLCBEcm9wLCBDUkVBVEFCTEU+CiMgODc2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv ZGVmb2JqLmgiCi0gX0lfQ3JlYXRpbmc7Ci0gc2V0QXJnYzogKHVuc2lnbmVkKWNvdW50IEFyZ3Y6 IChjb25zdCBjaGFyICoqKXRoZUFyZ3Y7Ci0gc2V0QXBwTmFtZTogKGNvbnN0IGNoYXIgKilhcHBO YW1lOwotIHNldEFwcE1vZGVTdHJpbmc6IChjb25zdCBjaGFyICopYXBwTW9kZVN0cmluZzsKLSBz ZXRPcHRpb25GdW5jOiAoaW50ICgqKSAoaW50LCBjb25zdCBjaGFyICopKW9wdGlvbkZ1bmM7Ci0g c2V0QnVnQWRkcmVzczogKGNvbnN0IGNoYXIgKilidWdBZGRyZXNzOwotIHNldFZlcnNpb246IChj b25zdCBjaGFyICopdmVyc2lvbjsKLSBhZGRPcHRpb25zOiAoc3RydWN0IGFyZ3Bfb3B0aW9uICop b3B0aW9uczsKIyA5MDMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmouaCIKLSAodm9p ZClhZGRPcHRpb246IChjb25zdCBjaGFyICopbmFtZSBrZXk6IChpbnQpa2V5IGFyZzogKGNvbnN0 IGNoYXIgKilhcmcgZmxhZ3M6IChpbnQpZmxhZ3MgZG9jOiAoY29uc3QgY2hhciAqKWRvYyBncm91 cDogKGludClncm91cDsKCisgY3JlYXRlQXJnYzogKGludClhcmdjIEFyZ3Y6IChjb25zdCBjaGFy ICoqKWFyZ3YgYXBwTmFtZTogKGNvbnN0IGNoYXIgKilhcHBOYW1lIHZlcnNpb246IChjb25zdCBj aGFyICopdmVyc2lvbiBidWdBZGRyZXNzOiAoY29uc3QgY2hhciAqKWJ1Z0FkZHJlc3Mgb3B0aW9u czogKHN0cnVjdCBhcmdwX29wdGlvbiAqKW9wdGlvbnMgb3B0aW9uRnVuYzogKGludCAoKikgKGlu dCwgY29uc3QgY2hhciAqKSlvcHRpb25GdW5jIGluaGliaXRFeGVjdXRhYmxlU2VhcmNoRmxhZzog KEJPT0wpaW5oaWJpdEV4ZWN1dGFibGVTZWFyY2hGbGFnOwoKCi0gKGludClwYXJzZUtleTogKGlu dClrZXkgYXJnOiAoY29uc3QgY2hhciAqKWFyZzsKLSBfSV9TZXR0aW5nOwotIHNldEluaGliaXRB cmNoaXZlckxvYWRGbGFnOiAoQk9PTClpbmhpYml0QXJjaGl2ZXJMb2FkRmxhZzsKLSBzZXRJbmhp Yml0RXhlY3V0YWJsZVNlYXJjaEZsYWc6IChCT09MKXRoZUluaGliaXRFeGVjdXRhYmxlU2VhcmNo RmxhZzsKLSBzZXRCYXRjaE1vZGVGbGFnOiAoQk9PTCliYXRjaE1vZGVGbGFnOwotIHNldFZhcnlT ZWVkRmxhZzogKEJPT0wpdmFyeVNlZWRGbGFnOwotIHNldFZlcmJvc2VGbGFnOiAoQk9PTCl2ZXJi b3NlRmxhZzsKCgoKLSBzZXREZWZhdWx0QXBwQ29uZmlnUGF0aDogKGNvbnN0IGNoYXIgKilwYXRo OwoKCi0gc2V0RGVmYXVsdEFwcERhdGFQYXRoOiAoY29uc3QgY2hhciAqKXBhdGg7Ci0gc2V0Rml4 ZWRTZWVkOiAodW5zaWduZWQpc2VlZDsKCgotIF9JX1VzaW5nOwotIChCT09MKWdldEJhdGNoTW9k ZUZsYWc7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3 YXJtLm1pICAgICAgICAgICAgICBQYWdlICAgNTEKCgotIChCT09MKWdldFZhcnlTZWVkRmxhZzsK LSAoQk9PTClnZXRGaXhlZFNlZWRGbGFnOwotICh1bnNpZ25lZClnZXRGaXhlZFNlZWQ7Ci0gKEJP T0wpZ2V0VmVyYm9zZUZsYWc7Ci0gKGNvbnN0IGNoYXIgKilnZXRBcHBOYW1lOwotIChjb25zdCBj aGFyICopZ2V0QXBwTW9kZVN0cmluZzsKLSAoaW50KWdldEFyZ2M7Ci0gKGludClnZXRMYXN0QXJn SW5kZXg7Ci0gKGNvbnN0IGNoYXIgKiopZ2V0QXJndjsKLSAoY29uc3QgY2hhciAqKWdldEV4ZWN1 dGFibGVQYXRoOwotIChjb25zdCBjaGFyICopZ2V0U3dhcm1Ib21lOwotIChjb25zdCBjaGFyICop Z2V0Q29uZmlnUGF0aDsKLSAoY29uc3QgY2hhciAqKWdldERhdGFQYXRoOwoKLSAoY29uc3QgY2hh ciAqKWdldEFwcERhdGFQYXRoOwoKCi0gKGNvbnN0IGNoYXIgKilnZXRBcHBDb25maWdQYXRoOwot IChCT09MKWdldFNob3dDdXJyZW50VGltZUZsYWc7Ci0gKEJPT0wpZ2V0SW5oaWJpdEFyY2hpdmVy TG9hZEZsYWc7CgpAZW5kCgpAcHJvdG9jb2wgQXJjaGl2ZXIgPENyZWF0ZSwgRHJvcCwgUkVUVVJO QUJMRT4KCgotIF9JX0NyZWF0aW5nOwoKCi0gc2V0SW5oaWJpdExvYWRGbGFnOiAoQk9PTClpbmhp Yml0TG9hZEZsYWc7CgoKLSBzZXRQYXRoOiAoY29uc3QgY2hhciAqKXBhdGg7CgoKCi0gc2V0U3lz dGVtQXJjaGl2ZXJGbGFnOiAoQk9PTClzeXN0ZW1BcmNoaXZlckZsYWc7CgoKLSBzZXREZWZhdWx0 UGF0aDsKCgotIHNldERlZmF1bHRBcHBQYXRoOwotIF9JX1VzaW5nOwotICh2b2lkKXJlZ2lzdGVy Q2xpZW50OiBjbGllbnQ7Ci0gKHZvaWQpdW5yZWdpc3RlckNsaWVudDogY2xpZW50OwoKCgotICh2 b2lkKXB1dERlZXA6IChjb25zdCBjaGFyICopa2V5IG9iamVjdDogb2JqZWN0OwoKCi0gKHZvaWQp cHV0U2hhbGxvdzogKGNvbnN0IGNoYXIgKilrZXkgb2JqZWN0OiBvYmplY3Q7CgoKLSBnZXRPYmpl Y3Q6IChjb25zdCBjaGFyICopa2V5OwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAg ICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDUyCgoKCgotIGdldFdp dGhab25lOiAoaWQgPFpvbmU+KWFab25lIGtleTogKGNvbnN0IGNoYXIgKilrZXk7CgoKCi0gKHZv aWQpc3luYzsKQGVuZAoKQHByb3RvY29sIExpc3BBcmNoaXZlciA8QXJjaGl2ZXIsIENSRUFUQUJM RT4KCgoKCgotIF9JX0NyZWF0aW5nOwoKCisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNldFBh dGg6IChjb25zdCBjaGFyICopcGF0aDsKCi0gX0lfU2V0dGluZzsKLSBfSV9Vc2luZzsKQGVuZAoK QHByb3RvY29sIEhERjVBcmNoaXZlciA8QXJjaGl2ZXIsIENSRUFUQUJMRT4KCgoKCgotIF9JX0Ny ZWF0aW5nOwoKCisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNldFBhdGg6IChjb25zdCBjaGFy ICopcGF0aDsKCi0gX0lfU2V0dGluZzsKLSBfSV9Vc2luZzsKQGVuZAoKQHByb3RvY29sIEhERjUg PENyZWF0ZSwgRHJvcCwgQ1JFQVRBQkxFPgoKCi0gX0lfQ3JlYXRpbmc7Ci0gc2V0V3JpdGVGbGFn OiAoQk9PTCl3cml0ZUZsYWc7Ci0gc2V0RGF0YXNldEZsYWc6IChCT09MKWRhdGFzZXRGbGFnOwot IHNldEV4dGVuc2libGVWZWN0b3JUeXBlOiAoZmNhbGxfdHlwZV90KXR5cGU7Ci0gc2V0RXh0ZW5z aWJsZURvdWJsZVZlY3RvcjsKLSBzZXRQYXJlbnQ6IHBhcmVudDsKLSBzZXRDb21wb3VuZFR5cGU6 IGNvbXBvdW5kVHlwZTsKLSBzZXRDb3VudDogKHVuc2lnbmVkKWNvdW50OwotIF9JX1NldHRpbmc7 CgoKCi0gc2V0TmFtZTogKGNvbnN0IGNoYXIgKiluYW1lOwotIHNldEJhc2VUeXBlT2JqZWN0OiBi YXNlVHlwZU9iamVjdDsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9i c2VydmVyU3dhcm0ubWkgICAgICAgICAgICAgIFBhZ2UgICA1MwoKCi0gX0lfVXNpbmc7Ci0gKHZv aWQpaXRlcmF0ZTogKGludCAoKikgKGlkIDxIREY1PmhkZjVPYmopKWl0ZXJhdGVGdW5jOwotICh2 b2lkKWl0ZXJhdGU6IChpbnQgKCopIChpZCA8SERGNT5oZGY1T2JqKSlpdGVyYXRlRnVuYyBkcm9w OiAoQk9PTClkcm9wRmxhZzsKLSAoQk9PTClnZXREYXRhc2V0RmxhZzsKLSAoQk9PTClnZXRXcml0 ZUZsYWc7Ci0gKHNpemVfdClnZXREYXRhc2V0UmFuazsKLSAoc2l6ZV90KWdldERhdGFzZXREaW1l bnNpb246ICh1bnNpZ25lZClkaW1OdW1iZXI7Ci0gKHVuc2lnbmVkKWdldENvdW50OwotIGdldENv bXBvdW5kVHlwZTsKLSBnZXRDbGFzczsKLSAodm9pZClhc3NpZ25JdmFyOiBvYmo7CgotIChCT09M KWNoZWNrTmFtZTogKGNvbnN0IGNoYXIgKiluYW1lOwotIChCT09MKWNoZWNrRGF0YXNldE5hbWU6 IChjb25zdCBjaGFyICopZGF0YXNldE5hbWU7CgotICh2b2lkKWxvYWREYXRhc2V0OiAodm9pZCAq KXB0cjsKLSAodm9pZClzdG9yZUFzRGF0YXNldDogKGNvbnN0IGNoYXIgKiluYW1lIHR5cGVOYW1l OiAoY29uc3QgY2hhciAqKXR5cGVOYW1lIHR5cGU6IChmY2FsbF90eXBlX3QpdHlwZSByYW5rOiAo dW5zaWduZWQpcmFuayBkaW1zOiAodW5zaWduZWQgKilkaW1zIHB0cjogKHZvaWQgKilwdHI7Cgot ICh2b2lkKWFkZERvdWJsZVRvVmVjdG9yOiAoZG91YmxlKXZhbDsKCi0gKHZvaWQpc3RvcmVUeXBl TmFtZTogKGNvbnN0IGNoYXIgKil0eXBlTmFtZTsKLSAodm9pZClzdG9yZUNvbXBvbmVudFR5cGVO YW1lOiAoY29uc3QgY2hhciAqKXR5cGVOYW1lOwotICh2b2lkKXNoYWxsb3dMb2FkT2JqZWN0OiBv Ymo7Ci0gKHZvaWQpc2hhbGxvd1N0b3JlT2JqZWN0OiBvYmo7Ci0gKHZvaWQpbmFtZVJlY29yZDog KHVuc2lnbmVkKXJlY29yZE51bWJlciBuYW1lOiAoY29uc3QgY2hhciAqKXJlY29yZE5hbWU7Ci0g KHZvaWQpbnVtYmVyUmVjb3JkOiAodW5zaWduZWQpcmVjb3JkTnVtYmVyOwotICh2b2lkKXNlbGVj dFJlY29yZDogKHVuc2lnbmVkKXJlY29yZE51bWJlcjsKCi0gKGNvbnN0IGNoYXIgKiopcmVhZFJv d05hbWVzOwotICh2b2lkKXdyaXRlUm93TmFtZXM7Ci0gKHZvaWQpd3JpdGVMZXZlbHM7CgotICh2 b2lkKXN0b3JlQXR0cmlidXRlOiAoY29uc3QgY2hhciAqKWF0dHJpYnV0ZU5hbWUgdmFsdWU6IChj b25zdCBjaGFyICopdmFsdWVTdHJpbmc7Ci0gKHZvaWQpaXRlcmF0ZUF0dHJpYnV0ZXM6IChpbnQg KCopIChjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKSlpdGVyYXRlRnVuYzsKLSAo Y29uc3QgY2hhciAqKWdldEF0dHJpYnV0ZTogKGNvbnN0IGNoYXIgKilhdHRyaWJ1dGVOYW1lOwot ICh2b2lkKWZsdXNoOwpAZW5kCgpAcHJvdG9jb2wgSERGNUNvbXBvdW5kVHlwZSA8Q3JlYXRlLCBE cm9wLCBDUkVBVEFCTEU+CgoKLSBfSV9DcmVhdGluZzsKLSBzZXRQcm90b3R5cGU6IHByb3RvdHlw ZTsKLSBfSV9Vc2luZzsKLSBnZXRQcm90b3R5cGU7CkBlbmQKCnR5cGVkZWYgdm9pZCAqSk9CSkVD VDsKdHlwZWRlZiBjb25zdCB2b2lkICpDT01PQkpFQ1Q7CgpAcHJvdG9jb2wgRkFyZ3VtZW50cyA8 Q3JlYXRlLCBEcm9wLCBDUkVBVEFCTEU+CgoKLSBfSV9DcmVhdGluZzsKLSBzZXRMYW5ndWFnZTog KGlkIDxTeW1ib2w+KWxhbmd1YWdlVHlwZTsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAg ICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAgNTQKCgoKLSBz ZXRTZWxlY3RvcjogKFNFTClhU2VsOwotIHNldEphdmFTaWduYXR1cmU6IChjb25zdCBjaGFyICop amF2YVNpZ25hdHVyZTsKKyBjcmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUgc2V0U2VsZWN0b3I6IChT RUwpYVNlbDsKLSBhZGRBcmd1bWVudDogKHR5cGVzX3QgKil2YWx1ZSBvZlR5cGU6IChmY2FsbF90 eXBlX3QpdHlwZTsKLSBhZGRBcmd1bWVudDogKHZvaWQgKil2YWx1ZSBvZk9iakNUeXBlOiAoY2hh cil0eXBlOwotIGFkZENoYXI6IChjaGFyKXZhbHVlOwotIGFkZEJvb2xlYW46IChCT09MKXZhbHVl OwotIGFkZFVuc2lnbmVkQ2hhcjogKHVuc2lnbmVkIGNoYXIpdmFsdWU7Ci0gYWRkU2hvcnQ6IChz aG9ydCl2YWx1ZTsKLSBhZGRVbnNpZ25lZFNob3J0OiAodW5zaWduZWQgc2hvcnQpdmFsdWU7Ci0g YWRkSW50OiAoaW50KXZhbHVlOwotIGFkZFVuc2lnbmVkOiAodW5zaWduZWQpdmFsdWU7Ci0gYWRk TG9uZzogKGxvbmcpdmFsdWU7Ci0gYWRkVW5zaWduZWRMb25nOiAodW5zaWduZWQgbG9uZyl2YWx1 ZTsKLSBhZGRMb25nTG9uZzogKGxvbmcgbG9uZyl2YWx1ZTsKLSBhZGRVbnNpZ25lZExvbmdMb25n OiAodW5zaWduZWQgbG9uZyBsb25nKXZhbHVlOwotIGFkZEZsb2F0OiAoZmxvYXQpdmFsdWU7Ci0g YWRkRG91YmxlOiAoZG91YmxlKXZhbHVlOwotIGFkZExvbmdEb3VibGU6IChsb25nIGRvdWJsZSl2 YWx1ZTsKLSBhZGRTdHJpbmc6IChjb25zdCBjaGFyICopdmFsdWU7Ci0gYWRkT2JqZWN0OiBvYmo7 Ci0gYWRkU2VsZWN0b3I6IChTRUwpYVNlbDsKLSBhZGRKYXZhT2JqZWN0OiAoSk9CSkVDVClvYmo7 Ci0gc2V0T2JqQ1JldHVyblR5cGU6IChjaGFyKXR5cGU7Ci0gc2V0UmV0dXJuVHlwZTogKGZjYWxs X3R5cGVfdClyZXRUeXBlOwotIHNldEJvb2xlYW5SZXR1cm5UeXBlOwotIF9JX1VzaW5nOwotICh2 YWxfdClnZXRSZXRWYWw7Ci0gKGlkIDxTeW1ib2w+KWdldExhbmd1YWdlOwotICh2b2lkICopZ2V0 UmVzdWx0OwpAZW5kCgp0eXBlZGVmIGVudW0gY2FsbFR5cGVzIHsgY2NhbGwsIENPTWNhbGwsIEpT Y2FsbCwgamF2YWNhbGwsIGphdmFzdGF0aWNjYWxsLCBvYmpjY2FsbCB9IGNhbGxfdDsKCkBwcm90 b2NvbCBGQ2FsbCA8Q3JlYXRlLCBEcm9wLCBDUkVBVEFCTEU+CgoKLSBfSV9DcmVhdGluZzsKKyBj cmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUgdGFyZ2V0OiBvYmoKICAgICAgICAgICAgICAgICAgICAg ICAgIHNlbGVjdG9yOiAoU0VMKXNlbAogICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHM6 IChpZCA8RkFyZ3VtZW50cz4pZmE7CisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHRhcmdldDog b2JqCiAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kTmFtZTogKGNvbnN0IGNoYXIgKiltZXRo b2ROYW1lCiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50czogKGlkIDxGQXJndW1lbnRz PilmYTsKLSBzZXRBcmd1bWVudHM6IGFyZ3M7Ci0gc2V0RnVuY3Rpb25Qb2ludGVyOiAoZnVuY190 KWZuOwotIHNldE1ldGhvZEZyb21TZWxlY3RvcjogKFNFTCltZXRob2QgaW5PYmplY3Q6IG9iamVj dDsKLSBzZXRNZXRob2RGcm9tTmFtZTogKGNvbnN0IGNoYXIgKiltZXRob2ROYW1lIGluT2JqZWN0 OiBvYmplY3Q7Ci0gc2V0SmF2YU1ldGhvZEZyb21OYW1lOiAoY29uc3QgY2hhciAqKW1ldGhvZE5h bWUgaW5PYmplY3Q6IChKT0JKRUNUKWpPYmo7Ci0gc2V0SmF2YU1ldGhvZEZyb21OYW1lOiAoY29u c3QgY2hhciAqKW1ldGhvZE5hbWUgaW5DbGFzczogKGNvbnN0IGNoYXIgKiljbGFzc05hbWU7Ci0g X0lfVXNpbmc7Ci0gKGNhbGxfdClnZXRDYWxsVHlwZTsKLSBnZXRBcmd1bWVudHM7Ci0gKHZvaWQp cGVyZm9ybUNhbGw7Ci0gKHZvaWQgKilnZXRSZXN1bHQ7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAgNTUK CgotIChyZXR2YWxfdClnZXRSZXRWYWw6IChyZXR2YWxfdClyZXRWYWwgYnVmOiAodHlwZXNfdCAq KWJ1ZjsKLSAoZnVuY190KWdldEZ1bmN0aW9uUG9pbnRlcjsKZXh0ZXJuIHZvaWQgZGVmb2JqX2lu aXRfamF2YV9jYWxsX3RhYmxlcyAodm9pZCAqam5pRW52KTsKZXh0ZXJuIHZvaWQgdXBkYXRlVGFy Z2V0IChpZCBjYWxsLCBpZCB0YXJnZXQpOwpAZW5kCgpAcHJvdG9jb2wgU2VyaWFsaXphdGlvbgoK CgotIF9JX0NyZWF0aW5nOwoKCi0gbGlzcEluQ3JlYXRlOiBleHByOwoKCi0gaGRmNUluQ3JlYXRl OiAoaWQgPEhERjU+KWhkZjVPYmo7CgoKCmV4dGVybiBpZCBsaXNwSW4gKGlkIDxab25lPiBhWm9u ZSwgaWQgZXhwcik7CgoKZXh0ZXJuIGlkIGhkZjVJbiAoaWQgPFpvbmU+IGFab25lLCBpZCA8SERG NT4gaGRmNU9iaik7CgotIF9JX1NldHRpbmc7CgoKLSBsaXNwSW46IGV4cHI7CgoKLSBoZGY1SW46 IChpZCA8SERGNT4paGRmNU9iajsKCi0gX0lfVXNpbmc7CgotICh2b2lkKWxpc3BPdXRTaGFsbG93 OiBzdHJlYW07CgoKLSAodm9pZClsaXNwT3V0RGVlcDogc3RyZWFtOwoKCgotICh2b2lkKWxpc3BP dXRWYXJzOiBzdHJlYW0gZGVlcDogKEJPT0wpZGVlcEZsYWc7CgoKLSAodm9pZCloZGY1T3V0U2hh bGxvdzogKGlkIDxIREY1PiloZGY1b2JqOwoKCi0gKHZvaWQpaGRmNU91dERlZXA6IChpZCA8SERG NT4paGRmNW9iajsKCi0gKHZvaWQpdXBkYXRlQXJjaGl2ZXI6IGFyY2hpdmVyOwoKCmV4dGVybiBC T09MIGxpc3BJbkJvb2xlYW4gKGlkIGluZGV4KTsKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAg ICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDU2CgoK ZXh0ZXJuIGludCBsaXNwSW5JbnRlZ2VyIChpZCBpbmRleCk7CgoKZXh0ZXJuIGNvbnN0IGNoYXIg Kmxpc3BJblN0cmluZyAoaWQgaW5kZXgpOwoKCmV4dGVybiBpZCBsaXNwSW5LZXl3b3JkIChpZCBp bmRleCk7CgpAZW5kCgoKZXh0ZXJuIGlkIDxBcmd1bWVudHM+IGFyZ3VtZW50czsKCgpleHRlcm4g aWQgPEhERjVBcmNoaXZlcj4gaGRmNUFyY2hpdmVyOwoKCmV4dGVybiBpZCA8TGlzcEFyY2hpdmVy PiBsaXNwQXJjaGl2ZXI7CgoKZXh0ZXJuIGlkIDxIREY1QXJjaGl2ZXI+IGhkZjVBcHBBcmNoaXZl cjsKCgpleHRlcm4gaWQgPExpc3BBcmNoaXZlcj4gbGlzcEFwcEFyY2hpdmVyOwoKCmV4dGVybiBp ZCA8U3ltYm9sPiB0X0J5dGVBcnJheSwgdF9MZWFmT2JqZWN0LCB0X1BvcHVsYXRpb25PYmplY3Q7 CgoKZXh0ZXJuIGlkIDxTeW1ib2w+IExhbmd1YWdlQ09NLCBMYW5ndWFnZUpTLCBMYW5ndWFnZUph dmEsIExhbmd1YWdlT2JqYzsKCgoKCgoKZXh0ZXJuIHZvaWQgX29ial9mb3JtYXRJRFN0cmluZyAo Y2hhciAqYnVmZmVyLCBpZCBhbk9iamVjdCk7CgoKCmV4dGVybiBDbGFzcyBvYmpjX2dldF9jbGFz cyAoY29uc3QgY2hhciAqbmFtZSk7CgoKZXh0ZXJuIGlkIGRlZm9ial9sb29rdXBfdHlwZSAoY29u c3QgY2hhciAqbmFtZSk7CgoKCgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmov dHlwZXMuaCIgMQpleHRlcm4gdm9pZCAqX2RlZm9ial9bXTsKCmV4dGVybiBpZCBHZXROYW1lOwpl eHRlcm4gaWQgRGVmaW5lZE9iamVjdDsKZXh0ZXJuIGlkIEN1c3RvbWl6ZTsKZXh0ZXJuIGlkIENy ZWF0ZTsKZXh0ZXJuIGlkIERyb3A7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAg ICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAgNTcKCgpleHRlcm4gaWQg Wm9uZTsKZXh0ZXJuIGlkIERlZmluZWRDbGFzczsKZXh0ZXJuIGlkIENyZWF0ZWRDbGFzczsKZXh0 ZXJuIGlkIEJlaGF2aW9yUGhhc2U7CmV4dGVybiBpZCBDb3B5OwpleHRlcm4gaWQgR2V0T3duZXI7 CmV4dGVybiBpZCBTZXRJbml0aWFsVmFsdWU7CmV4dGVybiBpZCBTeW1ib2w7CmV4dGVybiBpZCBF dmVudFR5cGU7CmV4dGVybiBpZCBXYXJuaW5nOwpleHRlcm4gaWQgRXJyb3I7CmV4dGVybiBpZCBB cmd1bWVudHM7CmV4dGVybiBpZCBBcmNoaXZlcjsKZXh0ZXJuIGlkIExpc3BBcmNoaXZlcjsKZXh0 ZXJuIGlkIEhERjVBcmNoaXZlcjsKZXh0ZXJuIGlkIEhERjU7CmV4dGVybiBpZCBIREY1Q29tcG91 bmRUeXBlOwpleHRlcm4gaWQgRkFyZ3VtZW50czsKZXh0ZXJuIGlkIEZDYWxsOwpleHRlcm4gaWQg U2VyaWFsaXphdGlvbjsKIyAxMjU2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgi IDIKCmV4dGVybiB2b2lkIGluaXREZWZvYmogKGlkIDxBcmd1bWVudHM+IGFyZ3VtZW50cyk7CgoK ZXh0ZXJuIHZvaWQgX29ial9pbml0TW9kdWxlICh2b2lkICptb2R1bGUpOwoKCgoKCmV4dGVybiBp ZCBfb2JqX2dsb2JhbFpvbmU7CgoKZXh0ZXJuIGlkIF9vYmpfc2NyYXRjaFpvbmU7CiMgMTI3OSAi L3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai5oIgpleHRlcm4gQk9PTCBfb2JqX2RlYnVn OwoKCgpleHRlcm4gRklMRSAqX29ial94ZXJyb3I7CgpleHRlcm4gRklMRSAqX29ial94ZGVidWc7 CgoKZXh0ZXJuIHZvaWQgeHNldG5hbWUgKGlkIGFuT2JqZWN0LCBjb25zdCBjaGFyICpuYW1lKTsK CgpleHRlcm4gdm9pZCB4cHJpbnQgKGlkIGFuT2JqZWN0KTsKCgpleHRlcm4gdm9pZCB4cHJpbnRp ZCAoaWQgYW5PYmplY3QpOwoKCmV4dGVybiB2b2lkIHhmcHJpbnQgKGlkIGFuT2JqZWN0KTsKCgoK CgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAg ICAgICAgICAgICBQYWdlICAgNTgKCgoKZXh0ZXJuIHZvaWQgeGZwcmludGlkIChpZCBhbk9iamVj dCk7CgoKZXh0ZXJuIHZvaWQgeGV4ZWMgKGlkIGFuT2JqZWN0LCBjb25zdCBjaGFyICpuYW1lKTsK CgpleHRlcm4gdm9pZCB4ZmV4ZWMgKGlkIGFuT2JqZWN0LCBjb25zdCBjaGFyICpuYW1lKTsKCgpl eHRlcm4gaWQgbmFtZVRvT2JqZWN0IChjb25zdCBjaGFyICpuYW1lKTsKIyAxMzI1ICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqLmgiCmV4dGVybiBjaGFyICp6c3RyZHVwIChpZCA8Wm9u ZT4gYVpvbmUsIGNvbnN0IGNoYXIgKnN0cik7CiMgMjEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9vYmplY3RiYXNlLmgiIDIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHku aCIgMQojIDI2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKIyAxICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIgMQojIDEyICIvdXNyL2xvY2FsL3N3 YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv ZGVmb2JqLmgiIDEKIyAxMyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgi IDIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZXh0ZXJudmFyLmgiIDEKIyAxNCAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiIDIKIyAyNCAiL3Vzci9sb2NhbC9z d2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCkBwcm90b2NvbCBPZmZzZXRzCiMgNDIgIi91c3Iv bG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgotIF9JX1VzaW5nOwoKLSBhdE9mZnNl dDogKHVuc2lnbmVkKW9mZnNldDsKCgoKLSBhdE9mZnNldDogKHVuc2lnbmVkKW9mZnNldCBwdXQ6 IGFuT2JqZWN0OwoKCi0gZ2V0Rmlyc3Q7CgoKLSBnZXRMYXN0OwpAZW5kCgpAcHJvdG9jb2wgRm9y RWFjaAojIDc4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSBfSV9V c2luZzsKLSAodm9pZClmb3JFYWNoOiAoU0VMKWFTZWxlY3RvcjsKLSAodm9pZClmb3JFYWNoOiAo U0VMKWFTZWxlY3RvciA6IGFyZzE7Ci0gKHZvaWQpZm9yRWFjaDogKFNFTClhU2VsZWN0b3IgOiBh cmcxIDogYXJnMjsKLSAodm9pZClmb3JFYWNoOiAoU0VMKWFTZWxlY3RvciA6IGFyZzEgOiBhcmcy IDogYXJnMzsKCi0gKHZvaWQpZGVzY3JpYmVGb3JFYWNoOiBvdXRwdXRDaGFyU3RyZWFtOwotICh2 b2lkKWRlc2NyaWJlRm9yRWFjaElEOiBvdXRwdXRDaGFyU3RyZWFtOwoKQGVuZAoKQHByb3RvY29s IEZvckVhY2hLZXkKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2Jz ZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDU5CgoKCgoKLSBfSV9Vc2luZzsKLSAo dm9pZClmb3JFYWNoS2V5OiAoU0VMKWFTZWxlY3RvcjsKLSAodm9pZClmb3JFYWNoS2V5OiAoU0VM KWFTZWxlY3RvciA6IGFyZzE7Ci0gKHZvaWQpZm9yRWFjaEtleTogKFNFTClhU2VsZWN0b3IgOiBh cmcxIDogYXJnMjsKLSAodm9pZClmb3JFYWNoS2V5OiAoU0VMKWFTZWxlY3RvciA6IGFyZzEgOiBh cmcyIDogYXJnMzsKQGVuZAoKQHByb3RvY29sIEluZGV4IDxEZWZpbmVkT2JqZWN0LCBEcm9wLCBS RVRVUk5BQkxFPgojIDE1NyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgi Ci0gX0lfVXNpbmc7CgoKLSBnZXRDb2xsZWN0aW9uOwoKCgoKCgotIG5leHQ7CgoKCgotIHByZXY7 CgoKCgotIGZpbmROZXh0OiBhbk9iamVjdDsKCgoKCi0gZmluZFByZXY6IGFuT2JqZWN0OwojIDE5 MSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCi0gZ2V0OwoKCgoKLSBw dXQ6IGFuT2JqZWN0OwojIDIwOSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25z LmgiCi0gcmVtb3ZlOwojIDI1MyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25z LmgiCi0gKGlkIDxTeW1ib2w+KWdldExvYzsKIyAyNjcgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9jb2xsZWN0aW9ucy5oIgotICh2b2lkKXNldExvYzogKGlkIDxTeW1ib2w+KWxvY1N5bWJvbDsK IyAyODggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgotIChpbnQpZ2V0 T2Zmc2V0OwoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2 ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDYwCgoKCgoKCi0gc2V0T2Zmc2V0OiAodW5z aWduZWQpb2Zmc2V0OwojIDMwOCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25z LmgiCi0gKGludCljb21wYXJlOiBhbkluZGV4OwojIDMyMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNs dWRlL2NvbGxlY3Rpb25zLmgiCmV4dGVybiBpZCA8U3ltYm9sPiBTdGFydCwgRW5kLCBCZXR3ZWVu LCBSZW1vdmVkLCBNZW1iZXI7CgoKCgoKCgpleHRlcm4gaWQgPEVycm9yPiBPZmZzZXRPdXRPZlJh bmdlLCBOb01lbWJlcnMsCiAgQWxyZWFkeUF0RW5kLCBBbHJlYWR5QXRTdGFydCwgSW52YWxpZElu ZGV4TG9jLCBJbnZhbGlkTG9jU3ltYm9sOwoKQGVuZAoKQHByb3RvY29sIFBlcm11dGVkSW5kZXgg PEluZGV4LCBSRVRVUk5BQkxFPgoKCgoKCi0gX0lfQ3JlYXRpbmc7Ci0gc2V0Q29sbGVjdGlvbjog YUNvbGxlY3Rpb247Ci0gc2V0VW5pZm9ybVJhbmRvbTogcm5kOwotIF9JX1VzaW5nOwotIHJlc2h1 ZmZsZTsKQGVuZDsKCkBwcm90b2NvbCBDb2xsZWN0aW9uIDxDcmVhdGUsIFNldEluaXRpYWxWYWx1 ZSwgQ29weSwgRHJvcCwgT2Zmc2V0cywgRm9yRWFjaD4KIyA0MDcgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9jb2xsZWN0aW9ucy5oIgotIF9JX0NyZWF0aW5nOwoKCgoKCgoKLSAodm9pZClzZXRS ZXBsYWNlT25seTogKEJPT0wpcmVwbGFjZU9ubHk7CgotICh2b2lkKXNldEluZGV4RnJvbU1lbWJl ckxvYzogKGludClieXRlT2Zmc2V0OwoKLSBfSV9Vc2luZzsKCgotIGNvcHk6IChpZCA8Wm9uZT4p YVpvbmU7CgoKLSAoQk9PTClnZXRSZXBsYWNlT25seTsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAgNjEK CgoKCgoKLSAodW5zaWduZWQpZ2V0Q291bnQ7CiMgNDQwICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1 ZGUvY29sbGVjdGlvbnMuaCIKLSAoQk9PTCljb250YWluczogYU1lbWJlcjsKCgoKCgoKLSByZW1v dmU6IGFNZW1iZXI7CiMgNDU2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMu aCIKLSAodm9pZClyZW1vdmVBbGw7CgoKLSAodm9pZClkZWxldGVBbGw7CgoKLSAoQk9PTClhbGxT YW1lQ2xhc3M7CgoKCgotIChpZCA8SW5kZXg+KWJlZ2luOiAoaWQgPFpvbmU+KWFab25lOwoKLSAo aWQgPFBlcm11dGVkSW5kZXg+KWJlZ2luUGVybXV0ZWQ6IChpZCA8Wm9uZT4pYVpvbmU7CkBlbmQK CgoKQHByb3RvY29sIERlZmF1bHRNZW1iZXIKIyA0ODggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9jb2xsZWN0aW9ucy5oIgotIF9JX1NldHRpbmc7Ci0gKHZvaWQpc2V0RGVmYXVsdE1lbWJlcjog bWVtYmVyVmFsdWU7CgotIF9JX1VzaW5nOwotIGdldERlZmF1bHRNZW1iZXI7CkBlbmQKCkBwcm90 b2NvbCBNZW1iZXJCbG9jawojIDUzNyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rp b25zLmgiCi0gX0lfQ3JlYXRpbmc7CisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNldE1lbWJl ckJsb2NrOiAoaWQgKiltZW1iZXJzIHNldENvdW50OiAodW5zaWduZWQpY291bnQ7CgotIF9JX1Nl dHRpbmc7Ci0gKHZvaWQpc2V0TWVtYmVyQmxvY2s6IChpZCAqKW1lbWJlcnMgc2V0Q291bnQ6ICh1 bnNpZ25lZCljb3VudDsKCi0gX0lfVXNpbmc7Ci0gKHZvaWQgKilnZXRNZW1iZXJCbG9jazsKQGVu ZAoKQHByb3RvY29sIEFycmF5IDxDb2xsZWN0aW9uLCBEZWZhdWx0TWVtYmVyLCBNZW1iZXJCbG9j aywgQ1JFQVRBQkxFPgojIDU5OCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25z LmgiCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJt Lm1pICAgICAgICAgICAgICBQYWdlICAgNjIKCgotIF9JX0NyZWF0aW5nOworIGNyZWF0ZTogKGlk IDxab25lPilhWm9uZSBzZXRDb3VudDogKHVuc2lnbmVkKWNvdW50OwoKLSBfSV9TZXR0aW5nOwoK CgoKCgoKLSBzZXRDb3VudDogKHVuc2lnbmVkKWNvdW50OwpAZW5kCgpAcHJvdG9jb2wgTGlzdElu ZGV4IDxJbmRleCwgUkVUVVJOQUJMRT4KIyA2NDAgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9j b2xsZWN0aW9ucy5oIgotIF9JX1VzaW5nOwoKLSAodm9pZClhZGRBZnRlcjogYW5PYmplY3Q7CgoK LSAodm9pZClhZGRCZWZvcmU6IGFuT2JqZWN0OwpAZW5kCgoKQHByb3RvY29sIExpc3QgPENvbGxl Y3Rpb24sIENSRUFUQUJMRT4KIyA2NjkgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0 aW9ucy5oIgotIF9JX1VzaW5nOwoKLSAodm9pZClhZGRGaXJzdDogYW5PYmplY3Q7CgoKLSAodm9p ZClhZGRMYXN0OiBhbk9iamVjdDsKCgotIHJlbW92ZUZpcnN0OwoKCi0gcmVtb3ZlTGFzdDsKCgot IChpZCA8TGlzdEluZGV4PilsaXN0QmVnaW46IChpZCA8Wm9uZT4pYVpvbmU7CkBlbmQKCgoKZXh0 ZXJuIGludCBjb21wYXJlSURzIChpZCwgaWQpOwoKCmV4dGVybiBpbnQgY29tcGFyZUludGVnZXJz IChpZCwgaWQpOwoKCmV4dGVybiBpbnQgY29tcGFyZVVuc2lnbmVkSW50ZWdlcnMgKGlkLCBpZCk7 CgoKZXh0ZXJuIGludCBjb21wYXJlQ1N0cmluZ3MgKGlkLCBpZCk7CgoKCgoKCgoyMDAxLTA4LTI0 IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdl ICAgNjMKCgoKQHByb3RvY29sIENvbXBhcmVGdW5jdGlvbgojIDcyMSAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCnR5cGVkZWYgaW50ICgqY29tcGFyZV90KSAoaWQsIGlk KTsKCi0gX0lfQ3JlYXRpbmc7Ci0gc2V0Q29tcGFyZUZ1bmN0aW9uOiAoY29tcGFyZV90KWFGdW5j dGlvbjsKLSBzZXRDb21wYXJlQ1N0cmluZ3M7Ci0gc2V0Q29tcGFyZUlEczsKLSBzZXRDb21wYXJl SW50ZWdlcnM7Ci0gc2V0Q29tcGFyZVVuc2lnbmVkSW50ZWdlcnM7Ci0gX0lfVXNpbmc7Ci0gKGNv bXBhcmVfdClnZXRDb21wYXJlRnVuY3Rpb247CkBlbmQKCkBwcm90b2NvbCBLZXllZENvbGxlY3Rp b24gPENvbGxlY3Rpb24sIEZvckVhY2hLZXk+CiMgNzUwICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1 ZGUvY29sbGVjdGlvbnMuaCIKLSBfSV9DcmVhdGluZzsKCi0gX0lfVXNpbmc7Ci0gY3JlYXRlSW5k ZXg6IChpZCA8Wm9uZT4pYVpvbmUgZnJvbU1lbWJlcjogYW5PYmplY3Q7CgoKCgoKCi0gYXQ6IGFL ZXk7CgoKCgoKCi0gcmVtb3ZlS2V5OiBhS2V5OwoKCgotIChCT09MKWNvbnRhaW5zS2V5OiBhS2V5 OwpAZW5kCgpAcHJvdG9jb2wgS2V5ZWRDb2xsZWN0aW9uSW5kZXggPEluZGV4PgojIDc4MyAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCkBlbmQKCgpAcHJvdG9jb2wgTWVt YmVyU2xvdAojIDgxNCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zLmgiCnR5 cGVkZWYgc3RydWN0IG1lbWJlckRhdGEgeyB2b2lkICptZW1iZXJEYXRhWzJdOyB9IG1lbWJlcl90 OwoKCgoKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9ic2VydmVy U3dhcm0ubWkgICAgICAgICAgICAgIFBhZ2UgICA2NAoKCnR5cGVkZWYgc3RydWN0IHsgdm9pZCAq bWVtYmVyRGF0YVsyXTsgaWQgb3duZXI7IH0gZHVwbWVtYmVyX3Q7CkBlbmQKCkBwcm90b2NvbCBf U2V0CgoKLSBfSV9Vc2luZzsKCi0gKEJPT0wpYWRkOiBhbk9iamVjdDsKIyA4MzkgIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgpAZW5kCgpAcHJvdG9jb2wgU2V0IDxfU2V0 LCBLZXllZENvbGxlY3Rpb24sIENSRUFUQUJMRT4KIyA4NTcgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9jb2xsZWN0aW9ucy5oIgotIF9JX1VzaW5nOwoKCgoKCi0gcmVwbGFjZTogYW5PYmplY3Q7 CkBlbmQKCkBwcm90b2NvbCBPcmRlcmVkU2V0IDxfU2V0LCBMaXN0LCBDUkVBVEFCTEU+CiMgODg2 ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKQGVuZAoKQHByb3RvY29s IE1hcEluZGV4IDxLZXllZENvbGxlY3Rpb25JbmRleCwgUkVUVVJOQUJMRT4KCgoKCi0gX0lfVXNp bmc7CgoKCgotIHNldEtleTogYUtleTsKCgoKCi0gZ2V0S2V5OwoKCgoKCgotICh1bnNpZ25lZCBs b25nKWdldEtleVZhbHVlOwoKCi0gbmV4dDogKGlkICopa2V5OwoKCi0gcHJldjogKGlkICopa2V5 OwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5t aSAgICAgICAgICAgICAgUGFnZSAgIDY1CgoKCgotIGdldDogKGlkICopa2V5OwpAZW5kCgoKQHBy b3RvY29sIE1hcCA8S2V5ZWRDb2xsZWN0aW9uLCBDb21wYXJlRnVuY3Rpb24sIENSRUFUQUJMRT4K IyA5MzggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9jb2xsZWN0aW9ucy5oIgotIF9JX1VzaW5n OwoKCgoKLSAoQk9PTClhdDogYUtleSBpbnNlcnQ6IGFuT2JqZWN0OwoKCgoKLSBhdDogYUtleSBy ZXBsYWNlOiBhbk9iamVjdDsKCgotIChpZCA8TWFwSW5kZXg+KW1hcEJlZ2luOiAoaWQgPFpvbmU+ KWFab25lOwpAZW5kCgoKQHByb3RvY29sIE91dHB1dFN0cmVhbSA8Q3JlYXRlLCBEcm9wLCBDUkVB VEFCTEU+CiMgOTY0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSBf SV9DcmVhdGluZzsKKyBjcmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUgc2V0RmlsZVN0cmVhbTogKEZJ TEUgKilmaWxlU3RyZWFtOwotIHNldEZpbGVTdHJlYW06IChGSUxFICopZmlsZVN0cmVhbTsKLSBz ZXRFeHByRmxhZzogKEJPT0wpZXhwckZsYWc7Ci0gX0lfVXNpbmc7Ci0gKEZJTEUgKilnZXRGaWxl U3RyZWFtOwotIGdldEV4cHI7CgoKLSAodm9pZCljYXRDOiAoY29uc3QgY2hhciAqKWNzdHJpbmc7 CgoKLSAodm9pZCljYXRCb29sZWFuOiAoQk9PTClib29sOwoKCi0gKHZvaWQpY2F0Q2hhcjogKGNo YXIpY2g7CgoKLSAodm9pZCljYXRGbG9hdDogKGZsb2F0KWZsdDsKCgotICh2b2lkKWNhdERvdWJs ZTogKGRvdWJsZSlkYmw7CgoKLSAodm9pZCljYXRMb25nRG91YmxlOiAobG9uZyBkb3VibGUpZGJs OwoKCi0gKHZvaWQpY2F0SW50OiAoaW50KWk7CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAg ICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDY2CgoKCi0g KHZvaWQpY2F0VW5zaWduZWQ6ICh1bnNpZ25lZCl1bjsKCi0gKHZvaWQpY2F0U2hvcnQ6IChzaG9y dClzaHQ7Ci0gKHZvaWQpY2F0VW5zaWduZWRTaG9ydDogKHVuc2lnbmVkIHNob3J0KXVzaHQ7Ci0g KHZvaWQpY2F0TG9uZzogKGxvbmcpbG5nOwotICh2b2lkKWNhdFVuc2lnbmVkTG9uZzogKHVuc2ln bmVkIGxvbmcpdWxuZzsKLSAodm9pZCljYXRMb25nTG9uZzogKGxvbmcgbG9uZylsbmdsbmc7Ci0g KHZvaWQpY2F0VW5zaWduZWRMb25nTG9uZzogKHVuc2lnbmVkIGxvbmcgbG9uZyl1bG5nbG5nOwot ICh2b2lkKWNhdFBvaW50ZXI6IChjb25zdCB2b2lkICopcHRyOwotICh2b2lkKWNhdExpdGVyYWw6 IChjb25zdCBjaGFyICopc3RyOwotICh2b2lkKWNhdFN0YXJ0RXhwcjsKLSAodm9pZCljYXRFbmRF eHByOwotICh2b2lkKWNhdEtleXdvcmQ6IChjb25zdCBjaGFyICopa2V5d29yZDsKLSAodm9pZClj YXRTeW1ib2w6IChjb25zdCBjaGFyICopc3ltYm9sOwotICh2b2lkKWNhdFN0cmluZzogKGNvbnN0 IGNoYXIgKilzdHI7Ci0gKHZvaWQpY2F0U2VwYXJhdG9yOwotICh2b2lkKWNhdEFycmF5UmFuazog KHVuc2lnbmVkKXJhbms7Ci0gKHZvaWQpY2F0RW5kQXJyYXk7Ci0gKHZvaWQpY2F0VHlwZTogKGNv bnN0IGNoYXIgKil0eXBlOwotICh2b2lkKWNhdENsYXNzOiAoQ2xhc3MpY2xhc3M7Ci0gKHZvaWQp Y2F0U3RhcnRGdW5jdGlvbjogKGNvbnN0IGNoYXIgKilmdW5jdGlvbk5hbWU7Ci0gKHZvaWQpY2F0 RW5kRnVuY3Rpb247Ci0gKHZvaWQpY2F0U3RhcnRDb25zOwotICh2b2lkKWNhdEVuZENvbnM7Ci0g KHZvaWQpY2F0U3RhcnRMaXN0OwotICh2b2lkKWNhdEVuZExpc3Q7Ci0gKHZvaWQpY2F0U3RhcnRR dW90ZWRMaXN0OwotICh2b2lkKWNhdEVuZFF1b3RlZExpc3Q7Ci0gKHZvaWQpY2F0U3RhcnRQYXJz ZTsKLSAodm9pZCljYXRFbmRQYXJzZTsKLSAodm9pZCljYXRTdGFydE1ha2VJbnN0YW5jZTogKGNv bnN0IGNoYXIgKil0eXBlTmFtZTsKLSAodm9pZCljYXRFbmRNYWtlSW5zdGFuY2U7Ci0gKHZvaWQp Y2F0U3RhcnRNYWtlQ2xhc3M6IChjb25zdCBjaGFyICopY2xhc3NOYW1lOwotICh2b2lkKWNhdEVu ZE1ha2VDbGFzczsKLSAodm9pZCljYXRVbnNpZ25lZFBhaXI6ICh1bnNpZ25lZClhIDogKHVuc2ln bmVkKWI7Ci0gKHZvaWQpY2F0TmlsOwpAZW5kCgpAcHJvdG9jb2wgSW5wdXRTdHJlYW0gPENyZWF0 ZSwgRHJvcCwgQ1JFQVRBQkxFPgoKCgoKLSBfSV9DcmVhdGluZzsKKyBjcmVhdGU6IChpZCA8Wm9u ZT4pYVpvbmUgc2V0RmlsZVN0cmVhbTogKEZJTEUgKilmaWxlOworIGNyZWF0ZTogKGlkIDxab25l PilhWm9uZSBzZXRFeHByOiBleHByOwotIHNldEV4cHI6IGV4cHI7Ci0gc2V0RmlsZVN0cmVhbTog KEZJTEUgKilmaWxlU3RyZWFtOwotIF9JX1VzaW5nOwotIChGSUxFICopZ2V0RmlsZVN0cmVhbTsK LSBnZXRFeHByOwpAZW5kCgoKZXh0ZXJuIGlkIDxTeW1ib2w+IEFyY2hpdmVyTGl0ZXJhbCwgQXJj aGl2ZXJRdW90ZSwgQXJjaGl2ZXJFT0wsIEFyY2hpdmVyRG90OwoKCgoKCgoKMjAwMS0wOC0yNCAw MToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAg IDY3CgoKCkBwcm90b2NvbCBBcmNoaXZlcktleXdvcmQgPENyZWF0ZSwgRHJvcCwgUkVUVVJOQUJM RT4KCgotIF9JX0NyZWF0aW5nOwotIHNldEtleXdvcmROYW1lOiAoY29uc3QgY2hhciAqKW5hbWU7 Ci0gX0lfVXNpbmc7Ci0gKGNvbnN0IGNoYXIgKilnZXRLZXl3b3JkTmFtZTsKLSAodm9pZClsaXNw T3V0U2hhbGxvdzogKGlkIDxPdXRwdXRTdHJlYW0+KXN0cmVhbTsKLSAodm9pZClsaXNwT3V0RGVl cDogKGlkIDxPdXRwdXRTdHJlYW0+KXN0cmVhbTsKQGVuZAoKQHByb3RvY29sIEFyY2hpdmVyQXJy YXkgPENyZWF0ZSwgRHJvcCwgUkVUVVJOQUJMRT4KCgotIF9JX0NyZWF0aW5nOwotIHNldEFycmF5 OiBhcnJheTsKLSBfSV9Vc2luZzsKLSAodm9pZCAqKWdldERhdGE7Ci0gKHVuc2lnbmVkKWdldFJh bms7Ci0gKHVuc2lnbmVkICopZ2V0RGltczsKLSAoc2l6ZV90KWdldEVsZW1lbnRTaXplOwotICh1 bnNpZ25lZClnZXRFbGVtZW50Q291bnQ7Ci0gKGZjYWxsX3R5cGVfdClnZXRBcnJheVR5cGU7Ci0g Y29udmVydFRvVHlwZTogKGNoYXIpZGVzdFR5cGUgZGVzdDogKHZvaWQgKilwdHI7Ci0gKHZvaWQp bGlzcE91dFNoYWxsb3c6IChpZCA8T3V0cHV0U3RyZWFtPilzdHJlYW07Ci0gKHZvaWQpbGlzcE91 dERlZXA6IChpZCA8T3V0cHV0U3RyZWFtPilzdHJlYW07Ci0gKHZvaWQpZHJvcDsKQGVuZAoKQHBy b3RvY29sIEFyY2hpdmVyVmFsdWUgPENyZWF0ZSwgRHJvcCwgUkVUVVJOQUJMRT4KCgotIF9JX0Ny ZWF0aW5nOwotIHNldERvdWJsZTogKGRvdWJsZSl2YWw7Ci0gc2V0TG9uZ0RvdWJsZTogKGxvbmcg ZG91YmxlKXZhbDsKLSBzZXRGbG9hdDogKGZsb2F0KXZhbDsKLSBzZXRMb25nTG9uZzogKGxvbmcg bG9uZyl2YWw7Ci0gc2V0Q2hhcjogKGNoYXIpdmFsOwotIHNldEJvb2xlYW46IChCT09MKXZhbDsK LSBzZXRDbGFzczogKENsYXNzKWNsYXNzOwotIHNldE5pbDsKLSBfSV9Vc2luZzsKLSAoZmNhbGxf dHlwZV90KWdldFZhbHVlVHlwZTsKLSAoZG91YmxlKWdldERvdWJsZTsKLSAobG9uZyBkb3VibGUp Z2V0TG9uZ0RvdWJsZTsKLSAoZmxvYXQpZ2V0RmxvYXQ7Ci0gKGxvbmcgbG9uZylnZXRMb25nTG9u ZzsKLSAoaW50KWdldEludGVnZXI7Ci0gKHVuc2lnbmVkKWdldFVuc2lnbmVkOwotIChjaGFyKWdl dENoYXI7Ci0gKEJPT0wpZ2V0Qm9vbGVhbjsKLSBnZXRPYmplY3Q7Ci0gKENsYXNzKWdldENsYXNz OwotICh2b2lkKWxpc3BPdXRTaGFsbG93OiAoaWQgPE91dHB1dFN0cmVhbT4pc3RyZWFtOwotICh2 b2lkKWxpc3BPdXREZWVwOiAoaWQgPE91dHB1dFN0cmVhbT4pc3RyZWFtOwoKCgoKCgoKMjAwMS0w OC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAg UGFnZSAgIDY4CgoKLSAodm9pZClkcm9wOwpAZW5kCgpAcHJvdG9jb2wgQXJjaGl2ZXJQYWlyIDxD cmVhdGUsIERyb3AsIFJFVFVSTkFCTEU+CgoKLSBfSV9DcmVhdGluZzsKLSBzZXRDYXI6IGNhcjsK LSBzZXRDZHI6IGNkcjsKLSBzZXRDb25zRm9ybWF0RmxhZzogKEJPT0wpdGhlQ29uc0Zvcm1hdEZs YWc7Ci0gX0lfVXNpbmc7Ci0gZ2V0Q2FyOwotIGdldENkcjsKLSAoQk9PTClnZXRDb25zRm9ybWF0 RmxhZzsKLSAodm9pZClsaXNwT3V0U2hhbGxvdzogKGlkIDxPdXRwdXRTdHJlYW0+KXN0cmVhbTsK LSAodm9pZClsaXNwT3V0RGVlcDogKGlkIDxPdXRwdXRTdHJlYW0+KXN0cmVhbTsKQGVuZAoKQHBy b3RvY29sIEFyY2hpdmVyTGlzdCA8TGlzdCwgUkVUVVJOQUJMRT4KCgotIF9JX0NyZWF0aW5nOwot IF9JX1VzaW5nOwotICh2b2lkKWxpc3BPdXRTaGFsbG93OiAoaWQgPE91dHB1dFN0cmVhbT4pc3Ry ZWFtOwotICh2b2lkKWxpc3BPdXREZWVwOiAoaWQgPE91dHB1dFN0cmVhbT4pc3RyZWFtOwpAZW5k CgpAcHJvdG9jb2wgQXJjaGl2ZXJRdW90ZWQgPFJFVFVSTkFCTEU+CgoKLSBfSV9DcmVhdGluZzsK LSBzZXRRdW90ZWRPYmplY3Q6IHZhbHVlOwotIF9JX1VzaW5nOwotIGdldFF1b3RlZE9iamVjdDsK LSAodm9pZClsaXNwT3V0RGVlcDogKGlkIDxPdXRwdXRTdHJlYW0+KXN0cmVhbTsKQGVuZAoKCgpA cHJvdG9jb2wgU3RyaW5nIDxDcmVhdGUsIERyb3AsIENvcHksIENSRUFUQUJMRT4KIyAxMTU1ICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlvbnMuaCIKLSBfSV9DcmVhdGluZzsKKyBj cmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUgc2V0QzogKGNvbnN0IGNoYXIgKiljc3RyaW5nOwoKLSBf SV9TZXR0aW5nOwotICh2b2lkKXNldEM6IChjb25zdCBjaGFyICopY3N0cmluZzsKCi0gX0lfVXNp bmc7Ci0gKGNvbnN0IGNoYXIgKilnZXRDOwotICh2b2lkKWNhdEM6IChjb25zdCBjaGFyICopY3N0 cmluZzsKLSAodW5zaWduZWQpZ2V0Q291bnQ7CkBlbmQKCkBwcm90b2NvbCBMaXN0U2h1ZmZsZXIg PENyZWF0ZSwgRHJvcCwgQ1JFQVRBQkxFPgojIDExNzYgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9jb2xsZWN0aW9ucy5oIgotIF9JX0NyZWF0aW5nOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAg ICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDY5CgoK CgotIHNldFVuaWZvcm1SYW5kb206IGRpc3Q7CgoKCisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25l IHNldFVuaWZvcm1SYW5kb206IGRpc3Q7CgotIF9JX1VzaW5nOwoKLSBzaHVmZmxlV2hvbGVMaXN0 OiBsaXN0OwoKCgotIHNodWZmbGVQYXJ0aWFsTGlzdDogbGlzdCBOdW06ICh1bnNpZ25lZCludW07 CkBlbmQKCkBwcm90b2NvbCBQZXJtdXRhdGlvbkl0ZW0gPENyZWF0ZSwgUkVUVVJOQUJMRT4KCgoK LSBfSV9DcmVhdGluZzsKLSBzZXRJdGVtOiBpdGVtOwotIHNldFBvc2l0aW9uOiAodW5zaWduZWQp cG9zaXRpb247Ci0gX0lfVXNpbmc7Ci0gZ2V0SXRlbTsKLSAodW5zaWduZWQpZ2V0UG9zaXRpb247 CkBlbmQKCkBwcm90b2NvbCBQZXJtdXRhdGlvbiA8Q29sbGVjdGlvbiwgQ3JlYXRlLCBBcnJheSwg Q1JFQVRBQkxFPgoKCgoKCgoKLSBfSV9DcmVhdGluZzsKLSBzZXRDb2xsZWN0aW9uOiAoaWQgPENv bGxlY3Rpb24+KWNvbGxlY3Rpb247Ci0gc2V0TGFzdFBlcm11dGF0aW9uOiAoaWQgPFBlcm11dGF0 aW9uPilwZXJtdXRhdGlvbjsKLSBzZXRVbmlmb3JtUmFuZG9tOiBybmQ7CkBlbmQKCiMgMSAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL2NvbGxlY3Rpb25zL3R5cGVzLmgiIDEKZXh0ZXJuIHZvaWQg Kl9jb2xsZWN0aW9uc19bXTsKCmV4dGVybiBpZCBPZmZzZXRzOwpleHRlcm4gaWQgRm9yRWFjaDsK ZXh0ZXJuIGlkIEZvckVhY2hLZXk7CmV4dGVybiBpZCBJbmRleDsKZXh0ZXJuIGlkIFBlcm11dGVk SW5kZXg7CmV4dGVybiBpZCBDb2xsZWN0aW9uOwpleHRlcm4gaWQgRGVmYXVsdE1lbWJlcjsKZXh0 ZXJuIGlkIE1lbWJlckJsb2NrOwpleHRlcm4gaWQgQXJyYXk7CmV4dGVybiBpZCBMaXN0SW5kZXg7 CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1p ICAgICAgICAgICAgICBQYWdlICAgNzAKCgpleHRlcm4gaWQgTGlzdDsKZXh0ZXJuIGlkIENvbXBh cmVGdW5jdGlvbjsKZXh0ZXJuIGlkIEtleWVkQ29sbGVjdGlvbjsKZXh0ZXJuIGlkIEtleWVkQ29s bGVjdGlvbkluZGV4OwpleHRlcm4gaWQgTWVtYmVyU2xvdDsKZXh0ZXJuIGlkIF9TZXQ7CmV4dGVy biBpZCBTZXQ7CmV4dGVybiBpZCBPcmRlcmVkU2V0OwpleHRlcm4gaWQgTWFwSW5kZXg7CmV4dGVy biBpZCBNYXA7CmV4dGVybiBpZCBPdXRwdXRTdHJlYW07CmV4dGVybiBpZCBJbnB1dFN0cmVhbTsK ZXh0ZXJuIGlkIEFyY2hpdmVyS2V5d29yZDsKZXh0ZXJuIGlkIEFyY2hpdmVyQXJyYXk7CmV4dGVy biBpZCBBcmNoaXZlclZhbHVlOwpleHRlcm4gaWQgQXJjaGl2ZXJQYWlyOwpleHRlcm4gaWQgQXJj aGl2ZXJMaXN0OwpleHRlcm4gaWQgQXJjaGl2ZXJRdW90ZWQ7CmV4dGVybiBpZCBTdHJpbmc7CmV4 dGVybiBpZCBMaXN0U2h1ZmZsZXI7CmV4dGVybiBpZCBQZXJtdXRhdGlvbkl0ZW07CmV4dGVybiBp ZCBQZXJtdXRhdGlvbjsKIyAxMjIxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvY29sbGVjdGlv bnMuaCIgMgojIDI3ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIgMgojIDEg Ii91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9leHRlcm52YXIuaCIgMQojIDI4ICIvdXNyL2xvY2Fs L3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIgMgoKQHByb3RvY29sIERlZmF1bHRPcmRlcgojIDc1 ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9DcmVhdGluZzsKLSBf SV9TZXR0aW5nOwotIHNldERlZmF1bHRPcmRlcjogKGlkIDxTeW1ib2w+KWFTeW1ib2w7Ci0gX0lf VXNpbmc7Ci0gKGlkIDxTeW1ib2w+KWdldERlZmF1bHRPcmRlcjsKQGVuZAoKCkBwcm90b2NvbCBB Y3Rpdml0eSA8RGVmaW5lZE9iamVjdCwgRHJvcCwgUkVUVVJOQUJMRT4KIyAxMjYgIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgotIF9JX1VzaW5nOwoKCgoKCi0gKGlkIDxTeW1i b2w+KXJ1bjsKCgoKLSAodm9pZClzdG9wOwoKCgoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAg ICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDcxCgoK Ci0gKHZvaWQpdGVybWluYXRlOwoKCgoKLSAoaWQgPFN5bWJvbD4pbmV4dEFjdGlvbjsKCgotIChp ZCA8U3ltYm9sPilzdGVwQWN0aW9uOwoKCgoKLSAoaWQgPFN5bWJvbD4pZ2V0U3RhdHVzOwojIDE2 NyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiCi0gKGlkIDxTeW1ib2w+KWdl dEhvbGRUeXBlOwoKCi0gZ2V0QWN0aW9uOwoKCi0gZ2V0QWN0aW9uVHlwZTsKCgotICh2b2lkKXNl dE93bmVyQWN0aXZpdHk6IG93bmVyQWN0aXZpdHk7CgoKLSBnZXRPd25lckFjdGl2aXR5OwoKCi0g Z2V0U3ViYWN0aXZpdGllczsKCgotIGdldENvbnRyb2xsaW5nQWN0aXZpdHk7CgoKLSBnZXRUb3BM ZXZlbEFjdGl2aXR5OwoKCi0gZ2V0U3dhcm1BY3Rpdml0eTsKCgotIGdldFNjaGVkdWxlQWN0aXZp dHk7CgoKLSBzZXRTZXJpYWxNb2RlOiAoQk9PTClzZXJpYWxNb2RlOwoKCi0gKEJPT0wpZ2V0U2Vy aWFsTW9kZTsKCgotIChpZCA8QWN0aXZpdHk+KWdldEN1cnJlbnRTdWJhY3Rpdml0eTsKQGVuZAoK CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1p ICAgICAgICAgICAgICBQYWdlICAgNzIKCgpleHRlcm4gaWQgPFN5bWJvbD4gSW5pdGlhbGl6ZWQs IFJ1bm5pbmcsIEhvbGRpbmcsIFJlbGVhc2VkLCBTdG9wcGVkLAogIFRlcm1pbmF0ZWQsIENvbXBs ZXRlZDsKCkBwcm90b2NvbCBBY3Rpb24gPENyZWF0ZSwgRHJvcCwgR2V0T3duZXI+CiMgMjQyICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9Vc2luZzsKLSAodm9pZClf cGVyZm9ybUFjdGlvbl86IChpZCA8QWN0aXZpdHk+KWFjdGl2aXR5OwpAZW5kCgpAcHJvdG9jb2wg QWN0aW9uQXJncwoKCgoKCgoKLSBfSV9DcmVhdGluZzsKLSAodm9pZClzZXRBcmcxOiBhcmcxOwot ICh2b2lkKXNldEFyZzI6IGFyZzI7Ci0gKHZvaWQpc2V0QXJnMzogYXJnMzsKLSBfSV9Vc2luZzsK LSAodW5zaWduZWQpZ2V0TkFyZ3M7Ci0gZ2V0QXJnMTsKLSBnZXRBcmcyOwotIGdldEFyZzM7CkBl bmQKCkBwcm90b2NvbCBGQWN0aW9uIDxBY3Rpb24sIFJFVFVSTkFCTEU+CgoKLSBfSV9DcmVhdGlu ZzsKLSBzZXRDYWxsOiBmY2FsbDsKLSBfSV9TZXR0aW5nOwotIHNldEF1dG9Ecm9wOiAoQk9PTClh dXRvRHJvcDsKLSBfSV9Vc2luZzsKQGVuZAoKQHByb3RvY29sIEFjdGlvblRhcmdldAoKCi0gX0lf Q3JlYXRpbmc7Ci0gKHZvaWQpc2V0VGFyZ2V0OiB0YXJnZXQ7Ci0gX0lfVXNpbmc7Ci0gZ2V0VGFy Z2V0OwpAZW5kCgpAcHJvdG9jb2wgQWN0aW9uU2VsZWN0b3IKCgotIF9JX1NldHRpbmc7Ci0gKHZv aWQpc2V0TWVzc2FnZVNlbGVjdG9yOiAoU0VMKWFTZWw7Ci0gX0lfVXNpbmc7Ci0gKFNFTClnZXRN ZXNzYWdlU2VsZWN0b3I7CkBlbmQKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAg ICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAgNzMKCgpAcHJvdG9jb2wg QWN0aW9uVG8gPEFjdGlvbiwgQWN0aW9uVGFyZ2V0LCBBY3Rpb25TZWxlY3RvciwgQWN0aW9uQXJn cywgUkVUVVJOQUJMRT4KCgpAZW5kCgpAcHJvdG9jb2wgQWN0aW9uRm9yRWFjaCA8QWN0aW9uVG8s IERlZmF1bHRPcmRlciwgUkVUVVJOQUJMRT4KCgpAZW5kCgpAcHJvdG9jb2wgQWN0aW9uRm9yRWFj aEhvbW9nZW5lb3VzIDxBY3Rpb24sIEFjdGlvblRhcmdldCwgQWN0aW9uU2VsZWN0b3IsIERlZmF1 bHRPcmRlciwgUkVUVVJOQUJMRT4KCgpAZW5kCgpAcHJvdG9jb2wgRkFjdGlvbkZvckVhY2ggPEZB Y3Rpb24sIEFjdGlvblRhcmdldCwgRGVmYXVsdE9yZGVyPgoKCkBlbmQKCkBwcm90b2NvbCBGQWN0 aW9uRm9yRWFjaEhldGVyb2dlbmVvdXMgPEZBY3Rpb25Gb3JFYWNoLCBSRVRVUk5BQkxFPgoKCkBl bmQKCkBwcm90b2NvbCBGQWN0aW9uRm9yRWFjaEhvbW9nZW5lb3VzIDxGQWN0aW9uRm9yRWFjaCwg UkVUVVJOQUJMRT4KCgoKCgpAZW5kCgpAcHJvdG9jb2wgQWN0aW9uQ2FsbCA8QWN0aW9uLCBBY3Rp b25BcmdzLCBSRVRVUk5BQkxFPgoKCi0gX0lfQ3JlYXRpbmc7Ci0gKHZvaWQpc2V0RnVuY3Rpb25Q b2ludGVyOiAoZnVuY190KWZwdHI7Ci0gX0lfVXNpbmc7Ci0gKGZ1bmNfdClnZXRGdW5jdGlvblBv aW50ZXI7CkBlbmQKCkBwcm90b2NvbCBBY3Rpb25DaGFuZ2VkIDxBY3Rpb24sIFJFVFVSTkFCTEU+ CgoKQGVuZAoKQHByb3RvY29sIEZBY3Rpb25DcmVhdGluZwoKCi0gX0lfVXNpbmc7Ci0gKGlkIDxG QWN0aW9uPiljcmVhdGVGQWN0aW9uOiAoaWQgPEZDYWxsPiljYWxsOwpAZW5kCgpAcHJvdG9jb2wg QWN0aW9uQ3JlYXRpbmdDYWxsCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAg UHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDc0CgoKCgoKCgoKLSBfSV9V c2luZzsKLSAoaWQgPEFjdGlvbkNhbGw+KWNyZWF0ZUFjdGlvbkNhbGw6IChmdW5jX3QpZnB0cjsK LSAoaWQgPEFjdGlvbkNhbGw+KWNyZWF0ZUFjdGlvbkNhbGw6IChmdW5jX3QpZnB0ciA6IGFyZzE7 Ci0gKGlkIDxBY3Rpb25DYWxsPiljcmVhdGVBY3Rpb25DYWxsOiAoZnVuY190KWZwdHIgOiBhcmcx IDogYXJnMjsKLSAoaWQgPEFjdGlvbkNhbGw+KWNyZWF0ZUFjdGlvbkNhbGw6IChmdW5jX3QpZnB0 ciA6IGFyZzEgOiBhcmcyIDogYXJnMzsKQGVuZAoKQHByb3RvY29sIEFjdGlvbkNyZWF0aW5nVG8K IyAzODQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgotIF9JX1VzaW5nOwot IChpZCA8QWN0aW9uVG8+KWNyZWF0ZUFjdGlvblRvOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2Vs OwotIChpZCA8QWN0aW9uVG8+KWNyZWF0ZUFjdGlvblRvOiB0YXJnZXQgbWVzc2FnZTogKFNFTClh U2VsIDogYXJnMTsKLSAoaWQgPEFjdGlvblRvPiljcmVhdGVBY3Rpb25UbzogdGFyZ2V0IG1lc3Nh Z2U6IChTRUwpYVNlbCA6IGFyZzEgOiBhcmcyOwotIChpZCA8QWN0aW9uVG8+KWNyZWF0ZUFjdGlv blRvOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsIDogYXJnMSA6IGFyZzIgOiBhcmczOwpAZW5k CgpAcHJvdG9jb2wgQWN0aW9uQ3JlYXRpbmdGb3JFYWNoCiMgNDAyICIvdXNyL2xvY2FsL3N3YXJt L2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9Vc2luZzsKLSAoaWQgPEFjdGlvbkZvckVhY2hIb21v Z2VuZW91cz4pY3JlYXRlQWN0aW9uRm9yRWFjaEhvbW9nZW5lb3VzOiB0YXJnZXQgbWVzc2FnZTog KFNFTClhU2VsOwoKLSAoaWQgPEFjdGlvbkZvckVhY2g+KWNyZWF0ZUFjdGlvbkZvckVhY2g6IHRh cmdldCBtZXNzYWdlOiAoU0VMKWFTZWw7Ci0gKGlkIDxBY3Rpb25Gb3JFYWNoPiljcmVhdGVBY3Rp b25Gb3JFYWNoOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsIDogYXJnMTsKLSAoaWQgPEFjdGlv bkZvckVhY2g+KWNyZWF0ZUFjdGlvbkZvckVhY2g6IHRhcmdldCBtZXNzYWdlOiAoU0VMKWFTZWwg OiBhcmcxIDogYXJnMjsKLSAoaWQgPEFjdGlvbkZvckVhY2g+KWNyZWF0ZUFjdGlvbkZvckVhY2g6 IHRhcmdldCBtZXNzYWdlOiAoU0VMKWFTZWwgOiBhcmcxIDogYXJnMiA6IGFyZzM7CkBlbmQKCkBw cm90b2NvbCBGQWN0aW9uQ3JlYXRpbmdGb3JFYWNoSGV0ZXJvZ2VuZW91cwoKCgoKCi0gX0lfVXNp bmc7Ci0gKGlkIDxGQWN0aW9uRm9yRWFjaEhldGVyb2dlbmVvdXM+KWNyZWF0ZUZBY3Rpb25Gb3JF YWNoSGV0ZXJvZ2VuZW91czogdGFyZ2V0IGNhbGw6IChpZCA8RkNhbGw+KWNhbGw7CkBlbmQKCkBw cm90b2NvbCBGQWN0aW9uQ3JlYXRpbmdGb3JFYWNoSG9tb2dlbmVvdXMKCgoKCgotIF9JX1VzaW5n OwotIChpZCA8RkFjdGlvbkZvckVhY2hIb21vZ2VuZW91cz4pY3JlYXRlRkFjdGlvbkZvckVhY2hI b21vZ2VuZW91czogdGFyZ2V0IGNhbGw6IChpZCA8RkNhbGw+KWNhbGw7CkBlbmQKCkBwcm90b2Nv bCBBY3Rpb25DcmVhdGluZyA8RkFjdGlvbkNyZWF0aW5nLCBBY3Rpb25DcmVhdGluZ0NhbGwsIEFj dGlvbkNyZWF0aW5nVG8sIEFjdGlvbkNyZWF0aW5nRm9yRWFjaCwgRkFjdGlvbkNyZWF0aW5nRm9y RWFjaEhldGVyb2dlbmVvdXMsIEZBY3Rpb25DcmVhdGluZ0ZvckVhY2hIb21vZ2VuZW91cz4KIyA0 NjIgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgotIF9JX1VzaW5nOwoKCgoK CgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAg ICAgICAgICAgUGFnZSAgIDc1CgoKCgoKCi0gY3JlYXRlQWN0aW9uOiBhbkFjdGlvblR5cGU7CgpA ZW5kCgoKZXh0ZXJuIGlkIDxTeW1ib2w+IENvbmN1cnJlbnQsIFNlcXVlbnRpYWwsIFJhbmRvbWl6 ZWQ7CiMgNDkzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKdHlwZWRlZiB1 bnNpZ25lZCBsb25nIHRpbWV2YWxfdDsKCgoKQHByb3RvY29sIEFjdGl2aXR5SW5kZXggPEluZGV4 LCBSRVRVUk5BQkxFPgoKCi0gX0lfVXNpbmc7Ci0gKGlkIDxTeW1ib2w+KWdldEhvbGRUeXBlOwot IChpZCA8QWN0aW9uPiluZXh0QWN0aW9uOiAoaWQgKilzdGF0dXM7CkBlbmQKCgpleHRlcm4gaWQg PFN5bWJvbD4gSG9sZFN0YXJ0LCBIb2xkRW5kOwoKQHByb3RvY29sIEFjdGlvblR5cGUKIyA1MzEg Ii91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgotIF9JX1VzaW5nOwojIDU1MSAi L3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiCi0gKGlkIDxBY3Rpdml0eT4pYWN0 aXZhdGVJbjogc3dhcm1Db250ZXh0OwpAZW5kCgpAcHJvdG9jb2wgU3luY2hyb25pemF0aW9uVHlw ZQojIDU2OSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiCi0gX0lfQ3JlYXRp bmc7Ci0gKHZvaWQpc2V0U3luY2hyb25pemF0aW9uVHlwZTogYVNjaGVkdWxlVHlwZTsKCi0gX0lf VXNpbmc7Ci0gZ2V0U3luY2hyb25pemF0aW9uVHlwZTsKQGVuZAoKQHByb3RvY29sIEF1dG9Ecm9w CiMgNTk2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9DcmVhdGlu ZzsKLSBzZXRBdXRvRHJvcDogKEJPT0wpYXV0b0Ryb3A7Ci0gX0lfVXNpbmc7Ci0gKEJPT0wpZ2V0 QXV0b0Ryb3A7CkBlbmQKCkBwcm90b2NvbCBDb21wb3VuZEFjdGlvbiA8QWN0aW9uVHlwZSwgQ29s bGVjdGlvbiwgQXV0b0Ryb3AsIERlZmF1bHRPcmRlcj4KIyA2MTMgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9hY3Rpdml0eS5oIgpAZW5kCgpAcHJvdG9jb2wgQWN0aW9uR3JvdXAgPENvbXBvdW5k QWN0aW9uLCBBY3Rpb25DcmVhdGluZywgRGVmYXVsdE9yZGVyLCBDUkVBVEFCTEU+CiMgNjM0ICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKCgoKCgoKCjIwMDEtMDgtMjQgMDE6 MjEgICAgICAgICAgICAgIFBwbE9ic2VydmVyU3dhcm0ubWkgICAgICAgICAgICAgIFBhZ2UgICA3 NgoKCkBlbmQKCkBwcm90b2NvbCBBY3Rpb25Db25jdXJyZW50IDxBY3Rpb24sIFJFVFVSTkFCTEU+ Ci0gX0lfVXNpbmc7CgoKLSAoaWQgPEFjdGlvbkdyb3VwPilnZXRDb25jdXJyZW50R3JvdXA7CkBl bmQKCkBwcm90b2NvbCBSZWxhdGl2ZVRpbWUKCgoKCgoKLSBfSV9TZXR0aW5nOwotIHNldFJlbGF0 aXZlVGltZTogKEJPT0wpcmVsYXRpdmVUaW1lOwotIF9JX1VzaW5nOwotIChCT09MKWdldFJlbGF0 aXZlVGltZTsKQGVuZAoKQHByb3RvY29sIFJlcGVhdEludGVydmFsCiMgNjcxICIvdXNyL2xvY2Fs L3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9TZXR0aW5nOwotIHNldFJlcGVhdEludGVy dmFsOiAodGltZXZhbF90KXJlcGVhdEludGVydmFsOwotIF9JX1VzaW5nOwotICh0aW1ldmFsX3Qp Z2V0UmVwZWF0SW50ZXJ2YWw7CkBlbmQKCkBwcm90b2NvbCBDb25jdXJyZW50R3JvdXBUeXBlCiMg NzA2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9TZXR0aW5nOwot ICh2b2lkKXNldENvbmN1cnJlbnRHcm91cFR5cGU6IGdyb3VwVHlwZTsKLSBfSV9Vc2luZzsKLSBn ZXRDb25jdXJyZW50R3JvdXBUeXBlOwpAZW5kCgpAcHJvdG9jb2wgU2luZ2xldG9uR3JvdXBzCiMg NzI4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9TZXR0aW5nOwot ICh2b2lkKXNldFNpbmdsZXRvbkdyb3VwczogKEJPT0wpc2luZ2xldG9uR3JvdXBzOwotIF9JX1Vz aW5nOwotIChCT09MKWdldFNpbmdsZXRvbkdyb3VwczsKQGVuZAoKQHByb3RvY29sIFNjaGVkdWxl IDxNYXAsIENvbXBvdW5kQWN0aW9uLCBBY3Rpb25DcmVhdGluZywgUmVsYXRpdmVUaW1lLCBSZXBl YXRJbnRlcnZhbCwgQ29uY3VycmVudEdyb3VwVHlwZSwgU2luZ2xldG9uR3JvdXBzLCBDUkVBVEFC TEU+CiMgNzYzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9DcmVh dGluZzsKCisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNldFJlcGVhdEludGVydmFsOiAodGlt ZXZhbF90KXJwdEludGVydmFsOwoKCisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNldEF1dG9E cm9wOiAoQk9PTClhdXRvRHJvcDsKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAg ICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDc3CgoKCi0gc2V0S2Vl cEVtcHR5RmxhZzogKEJPT0wpa2VlcEVtcHR5RmxhZzsKLSBfSV9Vc2luZzsKLSBhdDogKHRpbWV2 YWxfdCl0VmFsIGNyZWF0ZUFjdGlvbjogYW5BY3Rpb25UeXBlOwoKLSAoaWQgPEZBY3Rpb24+KWF0 OiAodGltZXZhbF90KXRWYWwgY3JlYXRlRkFjdGlvbjogKGlkIDxGQ2FsbD4pY2FsbDsKLSAoaWQg PEFjdGlvbkNhbGw+KWF0OiAodGltZXZhbF90KXRWYWwgY3JlYXRlQWN0aW9uQ2FsbDogKGZ1bmNf dClmcHRyOwotIChpZCA8QWN0aW9uQ2FsbD4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVBY3Rp b25DYWxsOiAoZnVuY190KWZwdHI6YXJnMTsKLSAoaWQgPEFjdGlvbkNhbGw+KWF0OiAodGltZXZh bF90KXRWYWwgY3JlYXRlQWN0aW9uQ2FsbDogKGZ1bmNfdClmcHRyOmFyZzE6YXJnMjsKLSAoaWQg PEFjdGlvbkNhbGw+KWF0OiAodGltZXZhbF90KXRWYWwgY3JlYXRlQWN0aW9uQ2FsbDogKGZ1bmNf dClmcHRyOmFyZzE6YXJnMjphcmczOwoKLSAoaWQgPEFjdGlvblRvPilhdDogKHRpbWV2YWxfdCl0 VmFsIGNyZWF0ZUFjdGlvblRvOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsOwotIChpZCA8QWN0 aW9uVG8+KWF0OiAodGltZXZhbF90KXRWYWwgY3JlYXRlQWN0aW9uVG86IHRhcmdldCBtZXNzYWdl OiAoU0VMKWFTZWw6YXJnMTsKLSAoaWQgPEFjdGlvblRvPilhdDogKHRpbWV2YWxfdCl0VmFsIGNy ZWF0ZUFjdGlvblRvOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsOmFyZzE6YXJnMjsKLSAoaWQg PEFjdGlvblRvPilhdDogKHRpbWV2YWxfdCl0VmFsIGNyZWF0ZUFjdGlvblRvOiB0YXJnZXQgbWVz c2FnZTogKFNFTClhU2VsOmFyZzE6YXJnMjphcmczOwoKLSAoaWQgPEFjdGlvbkZvckVhY2hIb21v Z2VuZW91cz4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVBY3Rpb25Gb3JFYWNoSG9tb2dlbmVv dXM6IHRhcmdldCBtZXNzYWdlOiAoU0VMKWFTZWw7CgotIChpZCA8QWN0aW9uRm9yRWFjaD4pYXQ6 ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVBY3Rpb25Gb3JFYWNoOiB0YXJnZXQgbWVzc2FnZTogKFNF TClhU2VsOwotIChpZCA8QWN0aW9uRm9yRWFjaD4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVB Y3Rpb25Gb3JFYWNoOiB0YXJnZXQgbWVzc2FnZTogKFNFTClhU2VsOmFyZzE7Ci0gKGlkIDxBY3Rp b25Gb3JFYWNoPilhdDogKHRpbWV2YWxfdCl0VmFsIGNyZWF0ZUFjdGlvbkZvckVhY2g6IHRhcmdl dCBtZXNzYWdlOiAoU0VMKWFTZWw6YXJnMTphcmcyOwotIChpZCA8QWN0aW9uRm9yRWFjaD4pYXQ6 ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVBY3Rpb25Gb3JFYWNoOiB0YXJnZXQgbWVzc2FnZTogKFNF TClhU2VsOmFyZzE6YXJnMjphcmczOwoKLSAoaWQgPEZBY3Rpb25Gb3JFYWNoSGV0ZXJvZ2VuZW91 cz4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVGQWN0aW9uRm9yRWFjaEhldGVyb2dlbmVvdXM6 IHRhcmdldCBjYWxsOiAoaWQgPEZDYWxsPiljYWxsOwotIChpZCA8RkFjdGlvbkZvckVhY2hIb21v Z2VuZW91cz4pYXQ6ICh0aW1ldmFsX3QpdFZhbCBjcmVhdGVGQWN0aW9uRm9yRWFjaEhvbW9nZW5l b3VzOiB0YXJnZXQgY2FsbDogKGlkIDxGQ2FsbD4pY2FsbDsKCgoKLSByZW1vdmU6IGFuQWN0aW9u OwoKCi0gKGlkIDxBY3Rpb25Hcm91cD4paW5zZXJ0R3JvdXA6ICh0aW1ldmFsX3QpdFZhbDsKQGVu ZAoKQHByb3RvY29sIFNjaGVkdWxlQWN0aXZpdHkgPEFjdGl2aXR5LCBSRVRVUk5BQkxFPgoKCi0g X0lfQ3JlYXRpbmc7Ci0gX0lfVXNpbmc7CgotICh0aW1ldmFsX3QpZ2V0Q3VycmVudFRpbWU7CgoK LSBzdGVwVW50aWw6ICh0aW1ldmFsX3QpdFZhbDsKQGVuZAoKQHByb3RvY29sIFN3YXJtQWN0aXZp dHkgPFNjaGVkdWxlQWN0aXZpdHksIFJFVFVSTkFCTEU+CgoKCi0gX0lfVXNpbmc7CgotIGdldFN3 YXJtOwoKLSAoaWQgPFNjaGVkdWxlPilnZXRTeW5jaHJvbml6YXRpb25TY2hlZHVsZTsKQGVuZAoK CgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAg ICAgICAgICAgICAgUGFnZSAgIDc4CgoKCkBwcm90b2NvbCBGb3JFYWNoQWN0aXZpdHkgPEFjdGl2 aXR5LCBSRVRVUk5BQkxFPgoKCgotIF9JX1VzaW5nOwotIGdldEN1cnJlbnRNZW1iZXI7CkBlbmQK CkBwcm90b2NvbCBTd2FybVByb2Nlc3MgPEFjdGlvblR5cGUsIFpvbmUsIFN5bmNocm9uaXphdGlv blR5cGU+CiMgODUwICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIKLSBfSV9D cmVhdGluZzsKCgoKCgoKCi0gc2V0SW50ZXJuYWxab25lVHlwZTogYVpvbmVUeXBlOwoKLSBfSV9V c2luZzsKCgoKCgotIGdldEludGVybmFsWm9uZTsKCgoKCgotIChpZCA8U3dhcm1BY3Rpdml0eT4p Z2V0QWN0aXZpdHk7CkBlbmQKIyA5MjQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0 eS5oIgpAcHJvdG9jb2wgR2V0U3ViYWN0aXZpdHlBY3Rpb24KCgoKLSBfSV9Vc2luZzsKLSBfZ2V0 U3ViYWN0aXZpdHlBY3Rpb25fOwpAZW5kCgoKCgoKZXh0ZXJuIGlkIF9hY3Rpdml0eV9jdXJyZW50 OwoKCgpleHRlcm4gaWQgX2FjdGl2aXR5X2NvbnRleHRfZXJyb3IgKGNvbnN0IGNoYXIgKm1hY3Jv TmFtZSk7CgoKQHByb3RvY29sIENvbmN1cnJlbnRHcm91cCA8QWN0aW9uR3JvdXAsIFJFVFVSTkFC TEU+CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJt Lm1pICAgICAgICAgICAgICBQYWdlICAgNzkKCgoKCi0gX0lfVXNpbmc7Ci0gKHZvaWQpX3NldEFj dGlvbkNvbmN1cnJlbnRfOiBhY3Rpb247Ci0gX2dldEVtcHR5QWN0aW9uQ29uY3VycmVudF87CkBl bmQKCkBwcm90b2NvbCBDb25jdXJyZW50U2NoZWR1bGUgPENvbmN1cnJlbnRHcm91cCwgU2NoZWR1 bGUsIENSRUFUQUJMRT4KCgpAZW5kCgpAcHJvdG9jb2wgQWN0aXZhdGlvbk9yZGVyIDxBY3Rpb25H cm91cCwgUkVUVVJOQUJMRT4KCgotIF9JX1VzaW5nOwoKLSAodm9pZClhZGRMYXN0OiBtZXJnZUFj dGlvbjsKCgoKLSByZW1vdmU6IG1lcmdlQWN0aW9uOwoKQGVuZAoKCmV4dGVybiBpZCA8RXJyb3I+ IEludmFsaWRTd2FybVpvbmU7CgoKCmV4dGVybiBpZCBfYWN0aXZpdHlfem9uZTsKIyA5ODUgIi91 c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5oIgpleHRlcm4gQk9PTCAoKl9hY3Rpdml0 eV90cmFjZSkgKGlkKTsKIyA5OTggIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS5o IgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9hY3Rpdml0eS90eXBlcy5oIiAxCmV4dGVy biB2b2lkICpfYWN0aXZpdHlfW107CgpleHRlcm4gaWQgRGVmYXVsdE9yZGVyOwpleHRlcm4gaWQg QWN0aXZpdHk7CmV4dGVybiBpZCBBY3Rpb247CmV4dGVybiBpZCBBY3Rpb25BcmdzOwpleHRlcm4g aWQgRkFjdGlvbjsKZXh0ZXJuIGlkIEFjdGlvblRhcmdldDsKZXh0ZXJuIGlkIEFjdGlvblNlbGVj dG9yOwpleHRlcm4gaWQgQWN0aW9uVG87CmV4dGVybiBpZCBBY3Rpb25Gb3JFYWNoOwpleHRlcm4g aWQgQWN0aW9uRm9yRWFjaEhvbW9nZW5lb3VzOwpleHRlcm4gaWQgRkFjdGlvbkZvckVhY2g7CmV4 dGVybiBpZCBGQWN0aW9uRm9yRWFjaEhldGVyb2dlbmVvdXM7CmV4dGVybiBpZCBGQWN0aW9uRm9y RWFjaEhvbW9nZW5lb3VzOwpleHRlcm4gaWQgQWN0aW9uQ2FsbDsKZXh0ZXJuIGlkIEFjdGlvbkNo YW5nZWQ7CmV4dGVybiBpZCBGQWN0aW9uQ3JlYXRpbmc7CmV4dGVybiBpZCBBY3Rpb25DcmVhdGlu Z0NhbGw7CmV4dGVybiBpZCBBY3Rpb25DcmVhdGluZ1RvOwpleHRlcm4gaWQgQWN0aW9uQ3JlYXRp bmdGb3JFYWNoOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2 ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDgwCgoKZXh0ZXJuIGlkIEZBY3Rpb25DcmVh dGluZ0ZvckVhY2hIZXRlcm9nZW5lb3VzOwpleHRlcm4gaWQgRkFjdGlvbkNyZWF0aW5nRm9yRWFj aEhvbW9nZW5lb3VzOwpleHRlcm4gaWQgQWN0aW9uQ3JlYXRpbmc7CmV4dGVybiBpZCBBY3Rpdml0 eUluZGV4OwpleHRlcm4gaWQgQWN0aW9uVHlwZTsKZXh0ZXJuIGlkIFN5bmNocm9uaXphdGlvblR5 cGU7CmV4dGVybiBpZCBBdXRvRHJvcDsKZXh0ZXJuIGlkIENvbXBvdW5kQWN0aW9uOwpleHRlcm4g aWQgQWN0aW9uR3JvdXA7CmV4dGVybiBpZCBBY3Rpb25Db25jdXJyZW50OwpleHRlcm4gaWQgUmVs YXRpdmVUaW1lOwpleHRlcm4gaWQgUmVwZWF0SW50ZXJ2YWw7CmV4dGVybiBpZCBDb25jdXJyZW50 R3JvdXBUeXBlOwpleHRlcm4gaWQgU2luZ2xldG9uR3JvdXBzOwpleHRlcm4gaWQgU2NoZWR1bGU7 CmV4dGVybiBpZCBTY2hlZHVsZUFjdGl2aXR5OwpleHRlcm4gaWQgU3dhcm1BY3Rpdml0eTsKZXh0 ZXJuIGlkIEZvckVhY2hBY3Rpdml0eTsKZXh0ZXJuIGlkIFN3YXJtUHJvY2VzczsKZXh0ZXJuIGlk IEdldFN1YmFjdGl2aXR5QWN0aW9uOwpleHRlcm4gaWQgQ29uY3VycmVudEdyb3VwOwpleHRlcm4g aWQgQ29uY3VycmVudFNjaGVkdWxlOwpleHRlcm4gaWQgQWN0aXZhdGlvbk9yZGVyOwojIDk5OSAi L3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5LmgiIDIKIyAyMiAiL3Vzci9sb2NhbC9z d2FybS9pbmNsdWRlL29iamVjdGJhc2UuaCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVk ZS9leHRlcm52YXIuaCIgMQojIDIzICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFz ZS5oIiAyCgpAcHJvdG9jb2wgU3dhcm1PYmplY3QgPENyZWF0ZSwgRHJvcCwgQ1JFQVRBQkxFPgoj IDM5ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFzZS5oIgotIF9JX1VzaW5nOwoK CgotIGdldFByb2JlTWFwOwoKCgotIGdldENvbXBsZXRlUHJvYmVNYXA7CgoKCi0gZ2V0UHJvYmVG b3JWYXJpYWJsZTogKGNvbnN0IGNoYXIgKilhVmFyaWFibGU7CgoKCi0gZ2V0UHJvYmVGb3JNZXNz YWdlOiAoY29uc3QgY2hhciAqKWFNZXNzYWdlOwpAZW5kCgpAcHJvdG9jb2wgUHJvYmVDb25maWcK CgoKCgotIF9JX1VzaW5nOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgUHBs T2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDgxCgoKLSBzZXRPYmplY3RUb05v dGlmeTogYW5PYmplY3Q7Ci0gZ2V0T2JqZWN0VG9Ob3RpZnk7CkBlbmQKCkBwcm90b2NvbCBQcm9i ZSA8U3dhcm1PYmplY3QsIFByb2JlQ29uZmlnPgojIDgxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1 ZGUvb2JqZWN0YmFzZS5oIgotIF9JX0NyZWF0aW5nOwoKCi0gc2V0UHJvYmVkQ2xhc3M6IChDbGFz cyljbGFzczsKCi0gc2V0UHJvYmVkT2JqZWN0OiBvYmplY3Q7Ci0gX0lfU2V0dGluZzsKCgoKLSBz ZXRTYWZldHk7CgoKCgotIHVuc2V0U2FmZXR5OwoKLSBfSV9Vc2luZzsKCgoKCgotIGNsb25lOiAo aWQgPFpvbmU+KWFab25lOwoKCgotIChDbGFzcylnZXRQcm9iZWRDbGFzczsKCgoKCi0gKGNvbnN0 IGNoYXIgKilnZXRQcm9iZWRUeXBlOwpAZW5kCgpAcHJvdG9jb2wgVmFyUHJvYmUgPFByb2JlLCBD UkVBVEFCTEU+CgoKCgoKCi0gX0lfQ3JlYXRpbmc7CgoKCgotIHNldFByb2JlZFZhcmlhYmxlOiAo Y29uc3QgY2hhciAqKWFWYXJpYWJsZTsKCi0gX0lfU2V0dGluZzsKCgoKCgoKCjIwMDEtMDgtMjQg MDE6MjEgICAgICAgICAgICAgIFBwbE9ic2VydmVyU3dhcm0ubWkgICAgICAgICAgICAgIFBhZ2Ug ICA4MgoKCgoKCgoKCgotIHNldE5vbkludGVyYWN0aXZlOwoKCgoKCgotIHNldFN0cmluZ1JldHVy blR5cGU6IHJldHVyblR5cGU7CgoKCi0gc2V0RmxvYXRGb3JtYXQ6IChjb25zdCBjaGFyICopZm9y bWF0OwoKLSBfSV9Vc2luZzsKCgotIChjb25zdCBjaGFyICopZ2V0UHJvYmVkVmFyaWFibGU7CgoK Ci0gKEJPT0wpZ2V0SW50ZXJhY3RpdmVGbGFnOwoKCi0gKHZvaWQgKilwcm9iZVJhdzogYW5PYmpl Y3Q7CgoKCi0gKHZvaWQgKilwcm9iZUFzUG9pbnRlcjogYW5PYmplY3Q7CgoKLSBwcm9iZU9iamVj dDogYW5PYmplY3Q7CgoKCi0gKGludClwcm9iZUFzSW50OiBhbk9iamVjdDsKCgoKLSAoZG91Ymxl KXByb2JlQXNEb3VibGU6IGFuT2JqZWN0OwoKCgotIChjb25zdCBjaGFyICopcHJvYmVBc1N0cmlu ZzogYW5PYmplY3QgQnVmZmVyOiAoY2hhciAqKWJ1ZmZlcjsKCgoKLSAoaWQgPFN0cmluZz4pcHJv YmVBc1N0cmluZzogYW5PYmplY3Q7CgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAg ICAgIFBwbE9ic2VydmVyU3dhcm0ubWkgICAgICAgICAgICAgIFBhZ2UgICA4MwoKCgoKCgotIChj b25zdCBjaGFyICopcHJvYmVBc1N0cmluZzogYW5PYmplY3QKICAgICAgICAgICAgICAgICAgICAg ICBCdWZmZXI6IChjaGFyICopYnVmCiAgICAgICAgICAgIHdpdGhGdWxsUHJlY2lzaW9uOiAoQk9P TClwcmVjaXNpb247CgoKLSAodW5zaWduZWQpZ2V0UmFuazsKCgotIChjb25zdCBjaGFyICopZ2V0 QmFzZVR5cGU7CgoKCi0gKHVuc2lnbmVkICopZ2V0RGltczsKCgoKLSBpdGVyYXRlQXNEb3VibGU6 IGFuT2JqZWN0IHVzaW5nOiAodm9pZCAoKikgKHVuc2lnbmVkIHJhbmssIHVuc2lnbmVkICp2ZWMs IGRvdWJsZSB2YWwpKWZ1bmM7CgoKCi0gaXRlcmF0ZUFzSW50ZWdlcjogYW5PYmplY3QgdXNpbmc6 ICh2b2lkICgqKSAodW5zaWduZWQgcmFuaywgdW5zaWduZWQgKnZlYywgaW50IHZhbCkpZnVuYzsK CgoKLSAodm9pZClzZXREYXRhOiBhbk9iamVjdCBUbzogKHZvaWQgKiluZXdWYWx1ZTsKCgoKCgoK Ci0gKEJPT0wpc2V0RGF0YTogYW5PYmplY3QgVG9TdHJpbmc6IChjb25zdCBjaGFyICopczsKCgoK LSAodm9pZClzZXREYXRhOiBhbk9iamVjdCBUb0RvdWJsZTogKGRvdWJsZSl2YWw7CgpleHRlcm4g aWQgPFN5bWJvbD4gRGVmYXVsdFN0cmluZywgQ2hhclN0cmluZywgSW50U3RyaW5nOwpAZW5kCgpA cHJvdG9jb2wgTWVzc2FnZVByb2JlIDxQcm9iZSwgQ1JFQVRBQkxFPgoKCgoKCgoKLSBfSV9DcmVh dGluZzsKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJT d2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDg0CgoKLSBzZXRQcm9iZWRTZWxlY3RvcjogKFNF TClhU2VsOwoKCgoKCi0gc2V0UHJvYmVkTWV0aG9kTmFtZTogKGNvbnN0IGNoYXIgKiltZXRob2RO YW1lOwoKCisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNldFByb2JlZFNlbGVjdG9yOiAoU0VM KWFTZWw7CgotIF9JX1NldHRpbmc7CgoKCgotIHNldEhpZGVSZXN1bHQ6IChCT09MKXZhbDsKCi0g X0lfVXNpbmc7CgoKLSAoQk9PTClpc1Jlc3VsdElkOwoKCgotIChCT09MKWlzQXJndW1lbnRJZDog KHVuc2lnbmVkKXdoaWNoOwoKCgotIChjb25zdCBjaGFyICopZ2V0UHJvYmVkTWVzc2FnZTsKCi0g KHVuc2lnbmVkKWdldEFyZ0NvdW50OwoKCi0gKHZhbF90KWdldEFyZzogKHVuc2lnbmVkKXdoaWNo OwoKCgotIChjb25zdCBjaGFyICopZ2V0QXJnTmFtZTogKHVuc2lnbmVkKXdoaWNoOwoKCi0gKEJP T0wpZ2V0SGlkZVJlc3VsdDsKCgoKLSBzZXRBcmc6ICh1bnNpZ25lZCl3aGljaCBUb1N0cmluZzog KGNvbnN0IGNoYXIgKil3aGF0OwoKCgoKCi0gc2V0QXJnOiAodW5zaWduZWQpd2hpY2ggVG9VbnNp Z25lZDogKHVuc2lnbmVkKXg7CgoKCi0gKHZhbF90KWR5bmFtaWNDYWxsT246IHRhcmdldDsKCgoK CgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9ic2VydmVyU3dhcm0ubWkgICAg ICAgICAgICAgIFBhZ2UgICA4NQoKCgoKCgotIChkb3VibGUpZG91YmxlRHluYW1pY0NhbGxPbjog dGFyZ2V0OwoKCgoKLSAobG9uZylsb25nRHluYW1pY0NhbGxPbjogdGFyZ2V0OwoKCgoKLSAoY29u c3QgY2hhciAqKXN0cmluZ0R5bmFtaWNDYWxsT246IHRhcmdldDsKCgoKCi0gb2JqZWN0RHluYW1p Y0NhbGxPbjogdGFyZ2V0OwpAZW5kCgpAcHJvdG9jb2wgUHJvYmVNYXAgPFN3YXJtT2JqZWN0LCBQ cm9iZUNvbmZpZywgQ1JFQVRBQkxFPgojIDMzMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29i amVjdGJhc2UuaCIKLSBfSV9DcmVhdGluZzsKCgoKLSBzZXRQcm9iZWRDbGFzczogKENsYXNzKWNs YXNzOwoKLSBzZXRQcm9iZWRPYmplY3Q6IG9iamVjdDsKLSBfSV9Vc2luZzsKCi0gKHVuc2lnbmVk KWdldENvdW50OwoKCgotIChDbGFzcylnZXRQcm9iZWRDbGFzczsKCgoKCi0gYWRkUHJvYmU6IChp ZCA8UHJvYmU+KWFQcm9iZTsKCgoKCi0gYWRkUHJvYmVNYXA6IGFQcm9iZU1hcDsKCgoKCgotIGRy b3BQcm9iZUZvclZhcmlhYmxlOiAoY29uc3QgY2hhciAqKWFWYXJpYWJsZTsKCgoKCgoKCgoKMjAw MS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAg ICAgUGFnZSAgIDg2CgoKCgotIGRyb3BQcm9iZUZvck1lc3NhZ2U6IChjb25zdCBjaGFyICopYU1l c3NhZ2U7CgoKCgoKLSBkcm9wUHJvYmVNYXA6IGFQcm9iZU1hcDsKCgoKLSAoaWQgPEluZGV4Pili ZWdpbjogKGlkIDxab25lPilhWm9uZTsKCgoKCgoKLSBjbG9uZTogKGlkIDxab25lPilhWm9uZTsK CkBlbmQKCkBwcm90b2NvbCBTd2FybSA8U3dhcm1Qcm9jZXNzLCBDUkVBVEFCTEU+CgoKCgoKLSBf SV9Vc2luZzsKCgotIGJ1aWxkT2JqZWN0czsKCgotIGJ1aWxkQWN0aW9uczsKIyA0MDggIi91c3Iv bG9jYWwvc3dhcm0vaW5jbHVkZS9vYmplY3RiYXNlLmgiCi0gKGlkIDxBY3Rpdml0eT4pYWN0aXZh dGVJbjogc3dhcm1Db250ZXh0OwoKCgotIChpZCA8UHJvYmVNYXA+KWdldFByb2JlTWFwOwoKCi0g KGlkIDxQcm9iZU1hcD4pZ2V0Q29tcGxldGVQcm9iZU1hcDsKCgotIChpZCA8VmFyUHJvYmU+KWdl dFByb2JlRm9yVmFyaWFibGU6IChjb25zdCBjaGFyICopYVZhcmlhYmxlOwpAZW5kCgpAcHJvdG9j b2wgRGVmYXVsdFByb2JlTWFwIDxQcm9iZU1hcCwgQ1JFQVRBQkxFPgoKCgoKCgoKCgoKCgoyMDAx LTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAg ICBQYWdlICAgODcKCgoKCkBlbmQKCkBwcm90b2NvbCBDdXN0b21Qcm9iZU1hcCA8UHJvYmVNYXAs IENSRUFUQUJMRT4KIyA0NDMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmplY3RiYXNlLmgi Ci0gX0lfQ3JlYXRpbmc7CgoKCgoKKyBjcmVhdGU6IChpZCA8Wm9uZT4pYVpvbmUgZm9yQ2xhc3M6 IChDbGFzcylhQ2xhc3Mgd2l0aElkZW50aWZpZXJzOiAoY29uc3QgY2hhciAqKXZhcnMsIC4uLjsK LSBfSV9TZXR0aW5nOwoKCi0gYWRkUHJvYmVzRm9yQ2xhc3M6IChDbGFzcykgYUNsYXNzCiAgICB3 aXRoSWRlbnRpZmllcnM6IChjb25zdCBjaGFyICopdmFycywgLi4uOwotIF9JX1VzaW5nOwpAZW5k CgpAcHJvdG9jb2wgRW1wdHlQcm9iZU1hcCA8Q3VzdG9tUHJvYmVNYXAsIENSRUFUQUJMRT4KCgoK Ci0gX0lfQ3JlYXRpbmc7CgorIGNyZWF0ZTogKGlkIDxab25lPilhWm9uZSBmb3JDbGFzczogKENs YXNzKWFDbGFzczsKQGVuZAoKQHByb3RvY29sIENvbXBsZXRlUHJvYmVNYXAgPFByb2JlTWFwLCBD UkVBVEFCTEU+CgoKCgoKCgpAZW5kCgpAcHJvdG9jb2wgQ29tcGxldGVWYXJNYXAgPFByb2JlTWFw LCBDUkVBVEFCTEU+CgoKCgoKQGVuZAoKQHByb3RvY29sIFByb2JlTGlicmFyeSA8Q3JlYXRlLCBE cm9wLCBQcm9iZUNvbmZpZywgQ1JFQVRBQkxFPgojIDQ5OCAiL3Vzci9sb2NhbC9zd2FybS9pbmNs dWRlL29iamVjdGJhc2UuaCIKLSBfSV9Vc2luZzsKIyA1MDcgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9vYmplY3RiYXNlLmgiCi0gc2V0RGlzcGxheVByZWNpc2lvbjogKHVuc2lnbmVkKW5TaWdE aXNwbGF5OwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZl clN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAgODgKCgoKLSAodW5zaWduZWQpZ2V0RGlzcGxh eVByZWNpc2lvbjsKCgoKCgoKCi0gc2V0U2F2ZWRQcmVjaXNpb246ICh1bnNpZ25lZCluU2lnU2F2 ZWQ7CgoKCi0gKHVuc2lnbmVkKWdldFNhdmVkUHJlY2lzaW9uOwoKCgotIChCT09MKWlzUHJvYmVN YXBEZWZpbmVkRm9yOiAoQ2xhc3MpYUNsYXNzOwotIChCT09MKWlzUHJvYmVNYXBEZWZpbmVkRm9y T2JqZWN0OiBhbk9iamVjdDsKCgoKCgoKLSAoaWQgPFByb2JlTWFwPilnZXRQcm9iZU1hcEZvcjog KENsYXNzKWFDbGFzczsKLSAoaWQgPFByb2JlTWFwPilnZXRQcm9iZU1hcEZvck9iamVjdDogYW5P YmplY3Q7CgoKCgoKLSAoaWQgPFByb2JlTWFwPilnZXRDb21wbGV0ZVByb2JlTWFwRm9yOiAoQ2xh c3MpYUNsYXNzOwotIChpZCA8UHJvYmVNYXA+KWdldENvbXBsZXRlUHJvYmVNYXBGb3JPYmplY3Q6 IGFuT2JqZWN0OwoKCgoKLSAoaWQgPFByb2JlTWFwPilnZXRDb21wbGV0ZVZhck1hcEZvcjogKENs YXNzKWFDbGFzczsKLSAoaWQgPFByb2JlTWFwPilnZXRDb21wbGV0ZVZhck1hcEZvck9iamVjdDog YW5PYmplY3Q7CgoKCgoKCi0gKGlkIDxWYXJQcm9iZT4pZ2V0UHJvYmVGb3JWYXJpYWJsZTogKGNv bnN0IGNoYXIgKilhVmFyIGluQ2xhc3M6IChDbGFzcylhQ2xhc3M7Ci0gKGlkIDxWYXJQcm9iZT4p Z2V0UHJvYmVGb3JWYXJpYWJsZTogKGNvbnN0IGNoYXIgKilhVmFyIGluT2JqZWN0OiBhbk9iamVj dDsKCgoKCgoKLSAoaWQgPE1lc3NhZ2VQcm9iZT4pZ2V0UHJvYmVGb3JNZXNzYWdlOiAoY29uc3Qg Y2hhciAqKWFNZXNzYWdlIGluQ2xhc3M6IChDbGFzcylhQ2xhc3M7Ci0gKGlkIDxNZXNzYWdlUHJv YmU+KWdldFByb2JlRm9yTWVzc2FnZTogKGNvbnN0IGNoYXIgKilhTWVzc2FnZSBpbk9iamVjdDog YW5PYmplY3Q7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZl clN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAgODkKCgoKCgoKLSBzZXRQcm9iZU1hcDogKGlk IDxQcm9iZU1hcD4pYU1hcCBGb3I6IChDbGFzcylhQ2xhc3M7Ci0gc2V0UHJvYmVNYXA6IChpZCA8 UHJvYmVNYXA+KWFNYXAgRm9yT2JqZWN0OiBhbk9iamVjdDsKCkBlbmQKCgpleHRlcm4gaWQgPFBy b2JlTGlicmFyeT4gcHJvYmVMaWJyYXJ5OwoKQHByb3RvY29sIEFjdGl2aXR5Q29udHJvbCA8U3dh cm1PYmplY3QsIENSRUFUQUJMRT4KIyA1OTIgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpl Y3RiYXNlLmgiCi0gX0lfQ3JlYXRpbmc7CgotIF9JX1VzaW5nOwoKCgoKCi0gKHZvaWQpYXR0YWNo VG9BY3Rpdml0eTogKGlkIDxTY2hlZHVsZUFjdGl2aXR5PilhbkFjdGl2aXR5OwoKCgoKCgoKLSAo aWQgPFN5bWJvbD4pcnVuQWN0aXZpdHk7CgoKCgoKCi0gKGlkIDxTeW1ib2w+KXN0b3BBY3Rpdml0 eTsKCgoKCgoKCi0gKGlkIDxTeW1ib2w+KW5leHRBY3Rpb247CgoKCi0gKGlkIDxTeW1ib2w+KXN0 ZXBBY3Rpb247CgoKCgoKLSAoaWQgPFN5bWJvbD4pc3RlcFVudGlsOiAodGltZXZhbF90KXN0b3BU aW1lOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2Fy bS5taSAgICAgICAgICAgICAgUGFnZSAgIDkwCgoKCgoKCgotICh2b2lkKXVwZGF0ZVN0YXRlVmFy OwoKCi0gKGlkIDxTeW1ib2w+KWdldFN0YXR1czsKCgotICh2b2lkKXRlcm1pbmF0ZTsKCgotIChp ZCA8U2NoZWR1bGVBY3Rpdml0eT4pZ2V0QWN0aXZpdHk7CkBlbmQKCkBjbGFzcyBQcm9iZTsKQGNs YXNzIFZhclByb2JlOwpAY2xhc3MgTWVzc2FnZVByb2JlOwpAY2xhc3MgUHJvYmVNYXA7CkBjbGFz cyBEZWZhdWx0UHJvYmVNYXA7CkBjbGFzcyBDdXN0b21Qcm9iZU1hcDsKQGNsYXNzIEVtcHR5UHJv YmVNYXA7CkBjbGFzcyBDb21wbGV0ZVByb2JlTWFwOwpAY2xhc3MgQ29tcGxldGVWYXJNYXA7CkBj bGFzcyBQcm9iZUxpYnJhcnk7CkBjbGFzcyBBY3Rpdml0eUNvbnRyb2w7CkBjbGFzcyBTd2FybTsK QGNsYXNzIFN3YXJtT2JqZWN0OwoKCmV4dGVybiBjb25zdCBjaGFyICpzd2FybV92ZXJzaW9uOwoj IDcgIlBwbE9ic2VydmVyU3dhcm0uaCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9z aW10b29sc2d1aS9HVUlTd2FybS5oIiAxCgoKCgoKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1 ZGUvc2ltdG9vbHNndWkuaCIgMQoKCgoKCgoKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv b2JqZWN0YmFzZS5oIiAxCiMgOSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3NpbXRvb2xzZ3Vp LmgiIDIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkuaCIgMQojIDEwICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvc2ltdG9vbHNndWkuaCIgMgojIDEgIi91c3IvbG9jYWwv c3dhcm0vaW5jbHVkZS9ndWkuaCIgMQoKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAg ICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDkxCgoKCgojIDEg Ii91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmplY3RiYXNlLmgiIDEKIyA3ICIvdXNyL2xvY2Fs L3N3YXJtL2luY2x1ZGUvZ3VpLmgiIDIKIyAzMCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2d1 aS5oIgpAcHJvdG9jb2wgV2lkZ2V0IDxDcmVhdGUsIERyb3A+CiMgMzkgIi91c3IvbG9jYWwvc3dh cm0vaW5jbHVkZS9ndWkuaCIKLSBfSV9DcmVhdGluZzsKCgoKCisgY3JlYXRlUGFyZW50OiBwYXJl bnQ7CgoKLSBzZXRQYXJlbnQ6IHBhcmVudDsKCgotIChjb25zdCBjaGFyICopbWFrZVdpZGdldE5h bWVGb3I6IHdpZGdldDsKCgotIHNldFdpZGdldE5hbWVGcm9tUGFyZW50OiAoaWQgPFdpZGdldD4p cGFyZW50OwoKCi0gc2V0V2lkZ2V0TmFtZUZyb21QYXJlbnROYW1lOiAoY29uc3QgY2hhciAqKXBh cmVudFdpZGdldE5hbWU7Ci0gX0lfVXNpbmc7CgoKCi0gKHZvaWQpcGFjazsKCi0gKHZvaWQpcGFj a0ZpbGw7Ci0gKHZvaWQpcGFja0JlZm9yZUFuZEZpbGxMZWZ0OiB3aWRnZXQgZXhwYW5kOiAoQk9P TClleHBhbmRGbGFnOwotICh2b2lkKXBhY2tGaWxsTGVmdDogKEJPT0wpZXhwYW5kRmxhZzsKLSAo dm9pZClwYWNrVG9SaWdodCA6IHdpZGdldDsKLSAodm9pZClwYWNrRm9yZ2V0QW5kRXhwYW5kOwoK Ci0gKHZvaWQpc2V0QWN0aXZlRmxhZzogKEJPT0wpYWN0aXZlRmxhZzsKCgotIHNldFdpZHRoOiAo dW5zaWduZWQpd2lkdGg7CgoKLSBzZXRIZWlnaHQ6ICh1bnNpZ25lZCloZWlnaHQ7CgoKLSBzZXRX aWR0aDogKHVuc2lnbmVkKXdpZHRoIEhlaWdodDogKHVuc2lnbmVkKWhlaWdodDsKCgotIHNldFg6 IChpbnQpeCBZOiAoaW50KXk7CgoKLSAodm9pZClzZXRXaW5kb3dUaXRsZTogKGNvbnN0IGNoYXIg Kil0aXRsZTsKCgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2 ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDkyCgoKLSBnZXRQYXJlbnQ7CgoKLSBnZXRU b3BMZXZlbDsKCgotIChjb25zdCBjaGFyICopZ2V0V2lkZ2V0TmFtZTsKCgotICh1bnNpZ25lZCln ZXRIZWlnaHQ7CgoKLSAodW5zaWduZWQpZ2V0V2lkdGg7CgoKLSAoaW50KWdldFg7CgoKLSAoaW50 KWdldFk7CgotIChjb25zdCBjaGFyICopZ2V0V2luZG93R2VvbWV0cnk7Ci0gKHZvaWQpc2V0V2lu ZG93R2VvbWV0cnk6IChjb25zdCBjaGFyICopczsKCgotICh2b2lkKWVuYWJsZURlc3Ryb3lOb3Rp ZmljYXRpb246IG5vdGlmaWNhdGlvblRhcmdldAogICAgICAgICAgICAgICBub3RpZmljYXRpb25N ZXRob2Q6IChTRUwpZGVzdHJveU5vdGlmaWNhdGlvbk1ldGhvZDsKCgotICh2b2lkKWRpc2FibGVE ZXN0cm95Tm90aWZpY2F0aW9uOwoKLSAoQk9PTClnZXREZXN0cm95ZWRGbGFnOwpAZW5kCgoKQHBy b3RvY29sIFdpbmRvd0dlb21ldHJ5UmVjb3JkIDxTZXJpYWxpemF0aW9uLCBDcmVhdGUsIERyb3A+ CgoKCgotIF9JX1VzaW5nOwoKLSBzZXRYOiAoaW50KXggWTogKGludCl5OwoKCi0gc2V0V2lkdGg6 ICh1bnNpZ25lZCl3IEhlaWdodDogKHVuc2lnbmVkKWg7CgoKLSAoQk9PTClnZXRTaXplRmxhZzsK CgotIChCT09MKWdldFBvc2l0aW9uRmxhZzsKCgotICh1bnNpZ25lZClnZXRXaWR0aDsKCgoKCgoK CgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAg ICAgICAgICAgUGFnZSAgIDkzCgoKLSAodW5zaWduZWQpZ2V0SGVpZ2h0OwoKCi0gKGludClnZXRY OwoKCi0gKGludClnZXRZOwpAZW5kCgpAcHJvdG9jb2wgQXJjaGl2ZWRHZW9tZXRyeVdpZGdldCA8 V2lkZ2V0PgoKCgoKCi0gX0lfQ3JlYXRpbmc7CisgY3JlYXRlOiAoaWQgPFpvbmU+KWFab25lIHNl dFdpbmRvd0dlb21ldHJ5UmVjb3JkTmFtZTogKGNvbnN0IGNoYXIgKiluYW1lOwoKCi0gc2V0V2lu ZG93R2VvbWV0cnlSZWNvcmROYW1lOiAoY29uc3QgY2hhciAqKXJlY29yZE5hbWU7CgoKLSBzZXRT YXZlU2l6ZUZsYWc6IChCT09MKXNhdmVTaXplRmxhZzsKCi0gbG9hZFdpbmRvd0dlb21ldHJ5UmVj b3JkOwotIHJlZ2lzdGVyQW5kTG9hZDsKLSB1cGRhdGVTaXplOwotIF9JX1VzaW5nOwotICh2b2lk KXVwZGF0ZUFyY2hpdmVyOiBhcmNoaXZlcjsKQGVuZAoKQHByb3RvY29sIEZyYW1lIDxBcmNoaXZl ZEdlb21ldHJ5V2lkZ2V0LCBDUkVBVEFCTEU+CgoKCgoKCgotIF9JX0NyZWF0aW5nOwoKLSBzZXRC b3JkZXJXaWR0aDogKGludCl3aWR0aDsKCgotIHNldFJlbGllZkZsYWc6IChCT09MKXJlbGllZkZs YWc7Ci0gX0lfVXNpbmc7CgotICh2b2lkKXdpdGhkcmF3OwoKCi0gKHZvaWQpZGVpY29uaWZ5OwpA ZW5kCgpAcHJvdG9jb2wgQ2FudmFzIDxBcmNoaXZlZEdlb21ldHJ5V2lkZ2V0LCBDUkVBVEFCTEU+ CgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9ic2VydmVyU3dhcm0u bWkgICAgICAgICAgICAgIFBhZ2UgICA5NAoKCgotIF9JX0NyZWF0aW5nOwotIF9JX1VzaW5nOwoK LSBhZGRXaWRnZXQ6IHdpZGdldCBYOiAoaW50KXggWTogKGludCl5IGNlbnRlckZsYWc6IChCT09M KWNlbnRlckZsYWc7CgoKLSByZW1vdmVXaWRnZXQ6IHdpZGdldDsKCgotIGNoZWNrR2VvbWV0cnk6 IGZyYW1lOwpAZW5kCgpAcHJvdG9jb2wgUHJvYmVDYW52YXMgPENhbnZhcywgQ1JFQVRBQkxFPgoK CgoKLSBfSV9DcmVhdGluZzsKCi0gc2V0SG9yaXpvbnRhbFNjcm9sbGJhckZsYWc6IChCT09MKWhv cml6b250YWxTY3JvbGJhckZsYWc7CkBlbmQKCkBwcm90b2NvbCBHcmFwaEVsZW1lbnQgPENyZWF0 ZSwgRHJvcCwgQ1JFQVRBQkxFPgoKCgoKLSBfSV9DcmVhdGluZzsKLSBzZXRPd25lckdyYXBoOiBv d25lckdyYXBoOwoKKyBjcmVhdGVPd25lckdyYXBoOiBvd25lckdyYXBoOwotIF9JX1VzaW5nOwoK LSAodm9pZClzZXRMYWJlbDogKGNvbnN0IGNoYXIgKilsYWJlbDsKCgotICh2b2lkKXNldENvbG9y OiAoY29uc3QgY2hhciAqKWNvbG9yTmFtZTsKCgotICh2b2lkKXNldERhc2hlczogKGludClkYXNo ZXNWYWw7CgoKLSAodm9pZClzZXRTeW1ib2w6IChjb25zdCBjaGFyICopc3ltYm9sOwoKCi0gKHZv aWQpc2V0U3ltYm9sU2l6ZTogKHVuc2lnbmVkKXNpemU7CgoKLSAodm9pZClhZGRYOiAoZG91Ymxl KXggWTogKGRvdWJsZSl5OwoKCi0gKHZvaWQpcmVzZXREYXRhOwoKCi0gc2V0V2lkdGg6ICh1bnNp Z25lZCl3OwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJT d2FybS5taSAgICAgICAgICAgICAgUGFnZSAgIDk1CgoKQGVuZAoKQHByb3RvY29sIEdyYXBoIDxB cmNoaXZlZEdlb21ldHJ5V2lkZ2V0LCBDUkVBVEFCTEU+CiMgMjY3ICIvdXNyL2xvY2FsL3N3YXJt L2luY2x1ZGUvZ3VpLmgiCi0gX0lfQ3JlYXRpbmc7Ci0gX0lfVXNpbmc7CgotIHNldFRpdGxlOiAo Y29uc3QgY2hhciAqKXRpdGxlOwoKLSBzZXRBeGlzTGFiZWxzWDogKGNvbnN0IGNoYXIgKil4bCBZ OiAoY29uc3QgY2hhciAqKXlsOwoKLSAoaWQgPEdyYXBoRWxlbWVudD4pY3JlYXRlRWxlbWVudDsK Ci0gKHZvaWQpc2V0U2NhbGVNb2RlWDogKEJPT0wpeHMgWTogKEJPT0wpeXM7CgotICh2b2lkKXNl dFJhbmdlc1hNaW46IChkb3VibGUpbWlueCBNYXg6KGRvdWJsZSltYXh4OwoKLSAodm9pZClzZXRS YW5nZXNZTWluOiAoZG91YmxlKW1pbnkgTWF4Oihkb3VibGUpbWF4eTsKCi0gKHZvaWQpc2V0UmFu Z2VzWE1pbjogKGRvdWJsZSltaW54IE1heDooZG91YmxlKW1heHggWU1pbjogKGRvdWJsZSltaW55 IE1heDogKGRvdWJsZSltYXh5OwpAZW5kCgoKQHByb3RvY29sIEhpc3RvZ3JhbSA8QXJjaGl2ZWRH ZW9tZXRyeVdpZGdldCwgQ1JFQVRBQkxFPgoKCgoKCgoKLSBfSV9DcmVhdGluZzsKCi0gc2V0Qmlu Q291bnQ6ICh1bnNpZ25lZCluOwotIF9JX1VzaW5nOwoKCi0gKHZvaWQpc2V0Q29sb3JzOiAoY29u c3QgY2hhciAqIGNvbnN0ICopYyBjb3VudDogKHVuc2lnbmVkKWNvdW50OwoKCgotICh2b2lkKXNl dExhYmVsczogKGNvbnN0IGNoYXIgKiBjb25zdCAqKWwgY291bnQ6ICh1bnNpZ25lZCljb3VudDsK CgotIHNldFRpdGxlOiAoY29uc3QgY2hhciAqKXRpdGxlOwoKCi0gKHZvaWQpc2V0QmFyV2lkdGg6 IChkb3VibGUpc3RlcDsKCgoKLSAodm9pZClzZXRYYXhpc01pbjogKGRvdWJsZSltaW4gbWF4OiAo ZG91YmxlKW1heCBzdGVwOiAoZG91YmxlKXN0ZXA7CgoKLSAodm9pZClzZXRYYXhpc01pbjogKGRv dWJsZSltaW4gbWF4OiAoZG91YmxlKW1heCBzdGVwOiAoZG91YmxlKXN0ZXAgcHJlY2lzaW9uOiAo dW5zaWduZWQpcHJlY2lzaW9uOwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAg IFBwbE9ic2VydmVyU3dhcm0ubWkgICAgICAgICAgICAgIFBhZ2UgICA5NgoKCgotIHNldEF4aXNM YWJlbHNYOiAoY29uc3QgY2hhciAqKXhsIFk6IChjb25zdCBjaGFyICopeWw7CgoKLSAodm9pZClz ZXRBY3RpdmVPdXRsaWVyVGV4dDogKHVuc2lnbmVkKW91dGxpZXJzIGNvdW50OiAodW5zaWduZWQp Y291bnQ7CgoKLSAodm9pZCloaWRlTGVnZW5kOwoKCi0gKHZvaWQpZHJhd0hpc3RvZ3JhbVdpdGhJ bnQ6IChpbnQgKilwb2ludHM7CgoKLSAodm9pZClkcmF3SGlzdG9ncmFtV2l0aERvdWJsZTogKGRv dWJsZSAqKXBvaW50czsKCgotICh2b2lkKWRyYXdIaXN0b2dyYW1XaXRoSW50OiAoaW50ICopcG9p bnRzIGF0TG9jYXRpb25zOiAoZG91YmxlICopbG9jYXRpb25zOwoKCi0gKHZvaWQpZHJhd0hpc3Rv Z3JhbVdpdGhEb3VibGU6IChkb3VibGUgKilwb2ludHMgYXRMb2NhdGlvbnM6IChkb3VibGUgKils b2NhdGlvbnM7CgotICh2b2lkKXNldHVwWm9vbVN0YWNrOwotICh2b2lkKXNldHVwQWN0aXZlT3V0 bGllck1hcmtlcjsKLSAodm9pZClzZXR1cEFjdGl2ZUl0ZW1JbmZvOwpAZW5kCgpAcHJvdG9jb2wg TGFiZWwgPFdpZGdldCwgQ1JFQVRBQkxFPgoKCgotIF9JX0NyZWF0aW5nOwotIF9JX1VzaW5nOwoK LSBzZXRUZXh0OiAoY29uc3QgY2hhciAqKXRleHQ7CkBlbmQKCkBwcm90b2NvbCBDbGFzc0Rpc3Bs YXlMYWJlbCA8TGFiZWwsIENSRUFUQUJMRT4KCgoKLSBfSV9DcmVhdGluZzsKLSBfSV9Vc2luZzsK QGVuZAoKQHByb3RvY29sIFZhclByb2JlTGFiZWwgPExhYmVsLCBDUkVBVEFCTEU+CgoKCi0gX0lf Q3JlYXRpbmc7CkBlbmQKCkBwcm90b2NvbCBDb21wbGV0ZVByb2JlRGlzcGxheUxhYmVsIDxMYWJl bCwgQ1JFQVRBQkxFPgoKCgoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBw bE9ic2VydmVyU3dhcm0ubWkgICAgICAgICAgICAgIFBhZ2UgICA5NwoKCgotIF9JX0NyZWF0aW5n OwoKLSBzZXRUYXJnZXRXaWRnZXQ6IHRhcmdldFdpZGdldDsKCgotIHNldFByb2JlZE9iamVjdDog cHJvYmVkT2JqZWN0OwotIF9JX1VzaW5nOwpAZW5kCgpAcHJvdG9jb2wgQnV0dG9uIDxXaWRnZXQs IENSRUFUQUJMRT4KCgoKLSBfSV9DcmVhdGluZzsKLSBfSV9Vc2luZzsKCi0gc2V0VGV4dDogKGNv bnN0IGNoYXIgKil0ZXh0OwoKCi0gKHZvaWQpc2V0QnV0dG9uVGFyZ2V0OiB0YXJnZXQgbWV0aG9k OiAoU0VMKW1ldGhvZDsKQGVuZAoKQHByb3RvY29sIENsYXNzRGlzcGxheUhpZGVCdXR0b24gPEJ1 dHRvbiwgQ1JFQVRBQkxFPgoKCgoKLSBfSV9DcmVhdGluZzsKLSBzZXRTdWJXaWRnZXQ6IHN1Yldp ZGdldDsKLSBzZXRVc2VyOiB1c2VyOwotIHNldE93bmVyOiBvd25lcjsKLSBfSV9Vc2luZzsKQGVu ZAoKQHByb3RvY29sIFNpbXBsZVByb2JlRGlzcGxheUhpZGVCdXR0b24gPEJ1dHRvbiwgQ1JFQVRB QkxFPgoKCgotIF9JX0NyZWF0aW5nOwoKLSBzZXRQcm9iZURpc3BsYXk6IHByb2JlRGlzcGxheTsK QGVuZAoKQHByb3RvY29sIFN1cGVyQnV0dG9uIDxCdXR0b24sIENSRUFUQUJMRT4KCgoKLSBfSV9D cmVhdGluZzsKLSBzZXRTdXBlcldpZGdldDogKGlkIDxXaWRnZXQ+KXN1cGVyV2lkZ2V0OwotIHNl dE93bmVyOiAoaWQgPFdpZGdldD4pb3duZXI7Ci0gc2V0VXNlcjogdXNlcjsKLSBfSV9Vc2luZzsK QGVuZAoKQHByb3RvY29sIElucHV0V2lkZ2V0IDxXaWRnZXQ+CgoKCgoKCgoyMDAxLTA4LTI0IDAx OjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAg OTgKCgoKCgoKLSBfSV9DcmVhdGluZzsKLSBfSV9Vc2luZzsKCi0gKGNvbnN0IGNoYXIgKilnZXRW YWx1ZTsKCgoKLSAodm9pZClzZXRWYWx1ZTogKGNvbnN0IGNoYXIgKil2OwoKCi0gKHZvaWQpbGlu a1ZhcmlhYmxlSW50OiAoaW50ICopcDsKCgotICh2b2lkKWxpbmtWYXJpYWJsZURvdWJsZTogKGRv dWJsZSAqKXA7CgoKLSAodm9pZClsaW5rVmFyaWFibGVCb29sZWFuOiAodW5zaWduZWQgKilwOwpA ZW5kCgpAcHJvdG9jb2wgRW50cnkgPElucHV0V2lkZ2V0LCBDUkVBVEFCTEU+CgoKCi0gX0lfQ3Jl YXRpbmc7Ci0gX0lfVXNpbmc7CgotIHNldEhlaWdodDogKHVuc2lnbmVkKWg7CkBlbmQKCkBwcm90 b2NvbCBNZXNzYWdlUHJvYmVFbnRyeSA8RW50cnksIENSRUFUQUJMRT4KCgoKLSBfSV9DcmVhdGlu ZzsKCi0gc2V0SWRGbGFnOiAoQk9PTClpZEZsYWc7CgoKLSBzZXRBcmc6IChpbnQpYXJnOwotIF9J X1VzaW5nOwpAZW5kCgpAcHJvdG9jb2wgVmFyUHJvYmVFbnRyeSA8RW50cnksIENSRUFUQUJMRT4K CgoKLSBfSV9DcmVhdGluZzsKCi0gc2V0SW50ZXJhY3RpdmVGbGFnOiAoQk9PTClpbnRlcmFjdGl2 ZUZsYWc7CgoKLSBzZXRPd25lcjogb3duZXI7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAg ICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAgOTkKCgoKCi0g c2V0VmFyUHJvYmU6IHZhclByb2JlOwotIF9JX1VzaW5nOwotIGdldFZhclByb2JlOwpAZW5kCgpA cHJvdG9jb2wgQnV0dG9uUGFuZWwgPEZyYW1lLCBDUkVBVEFCTEU+CgoKCi0gX0lfQ3JlYXRpbmc7 Ci0gX0lfVXNpbmc7CgotICh2b2lkKXNldEJ1dHRvblRhcmdldDogdGFyZ2V0OwoKCi0gKHZvaWQp YWRkQnV0dG9uTmFtZTogKGNvbnN0IGNoYXIgKiluYW1lIHRhcmdldDogdGFyZ2V0IG1ldGhvZDog KFNFTClzZWw7CgoKLSAodm9pZClhZGRCdXR0b25OYW1lOiAoY29uc3QgY2hhciAqKW5hbWUgbWV0 aG9kOiAoU0VMKXNlbDsKQGVuZAoKQHByb3RvY29sIEZvcm0gPFdpZGdldCwgQ1JFQVRBQkxFPgoK CgotIF9JX0NyZWF0aW5nOwotIF9JX1VzaW5nOwoKLSAodm9pZClzZXRFbnRyeVdpZHRoOiAodW5z aWduZWQpZXc7CgoKLSAodm9pZClhZGRMaW5lTmFtZTogKGNvbnN0IGNoYXIgKiluIEJvb2xlYW46 ICh1bnNpZ25lZCAqKXA7CgoKLSAodm9pZClhZGRMaW5lTmFtZTogKGNvbnN0IGNoYXIgKiluIElu dDogKGludCAqKXA7CgoKLSAodm9pZClhZGRMaW5lTmFtZTogKGNvbnN0IGNoYXIgKiluIERvdWJs ZTogKGRvdWJsZSAqKXA7CkBlbmQKCkBwcm90b2NvbCBDaGVja0J1dHRvbiA8SW5wdXRXaWRnZXQs IENSRUFUQUJMRT4KCgoKLSBfSV9DcmVhdGluZzsKLSBfSV9Vc2luZzsKCi0gKEJPT0wpZ2V0Qm9v bFZhbHVlOwoKCi0gc2V0Qm9vbFZhbHVlOiAoQk9PTCl2OwpAZW5kCgp0eXBlZGVmIHVuc2lnbmVk IGNoYXIgQ29sb3I7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNl cnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAxMDAKCgp0eXBlZGVmIHVuc2lnbmVkIGxv bmcgUGl4ZWxWYWx1ZTsKCkBwcm90b2NvbCBDb2xvcm1hcCA8Q3JlYXRlLCBDUkVBVEFCTEU+CgoK CgoKLSBfSV9DcmVhdGluZzsKLSBfSV9Vc2luZzsKCi0gKFBpeGVsVmFsdWUgKiltYXA7CgoKLSAo UGl4ZWxWYWx1ZSlibGFjazsKCgotIChQaXhlbFZhbHVlKXdoaXRlOwoKCgotIChCT09MKXNldENv bG9yOiAoQ29sb3IpYyBUb1JlZDogKGRvdWJsZSlyIEdyZWVuOiAoZG91YmxlKWcgQmx1ZTogKGRv dWJsZSliOwoKCi0gKEJPT0wpc2V0Q29sb3I6IChDb2xvciljIFRvTmFtZTogKGNvbnN0IGNoYXIg Kiljb2xvck5hbWU7CgoKLSAoQk9PTClzZXRDb2xvcjogKENvbG9yKWMgVG9HcmV5OiAoZG91Ymxl KWc7CgoKLSAodm9pZCl1bnNldENvbG9yOiAoQ29sb3IpYzsKQGVuZAoKQGNsYXNzIFJhc3RlcjsK CkBwcm90b2NvbCBEcmF3ZXIKCgoKCi0gX0lfVXNpbmc7Ci0gKHZvaWQpZHJhd1g6IChpbnQpeCBZ OiAoaW50KXk7CkBlbmQKCkBwcm90b2NvbCBSYXN0ZXIgPEFyY2hpdmVkR2VvbWV0cnlXaWRnZXQs IENSRUFUQUJMRT4KCgoKCgoKCi0gX0lfQ3JlYXRpbmc7Ci0gX0lfVXNpbmc7CgotIHNldENvbG9y bWFwOiAoaWQgPENvbG9ybWFwPiljOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAg ICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgMTAxCgoKCgotICh2b2lk KWRyYXdQb2ludFg6IChpbnQpeCBZOiAoaW50KXkgQ29sb3I6IChDb2xvciljOwoKCi0gKHZvaWQp ZHJhd1NlbGY7CgoKLSAodm9pZClzZXRCdXR0b246IChpbnQpbiBDbGllbnQ6IGMgTWVzc2FnZTog KFNFTClzZWw7CgoKLSAodm9pZClmaWxsUmVjdGFuZ2xlWDA6IChpbnQpeDAgWTA6IChpbnQpeTAg WDE6IChpbnQpeDEgWTE6IChpbnQpeTEgQ29sb3I6IChDb2xvciljb2xvcjsKCgotICh2b2lkKWVs bGlwc2VYMDogKGludCl4MCBZMDogKGludCl5MCBYMTogKGludCl4MSBZMTogKGludCl5MQogICAg ICAgICAgICBXaWR0aDogKHVuc2lnbmVkKXBlbldpZHRoIENvbG9yOiAoQ29sb3IpYzsKCgotICh2 b2lkKWxpbmVYMDogKGludCl4MCBZMDogKGludCl5MCBYMTogKGludCl4MSBZMTogKGludCl5MQog ICAgICAgICBXaWR0aDogKHVuc2lnbmVkKXBlbldpZHRoIENvbG9yOiAoQ29sb3IpYzsKCgotICh2 b2lkKXJlY3RhbmdsZVgwOiAoaW50KXgwIFkwOiAoaW50KXkwIFgxOiAoaW50KXgxIFkxOiAoaW50 KXkxCiAgICAgICAgICAgICAgV2lkdGg6ICh1bnNpZ25lZClwZW5XaWR0aCBDb2xvcjogKENvbG9y KWM7CgoKLSAodm9pZClkcmF3OiAoaWQgPERyYXdlcj4pZHJhd2VyIFg6IChpbnQpeCBZOiAoaW50 KXk7CgoKLSAodm9pZCllcmFzZTsKQGVuZAoKQHByb3RvY29sIFpvb21SYXN0ZXIgPFJhc3Rlciwg Q1JFQVRBQkxFPgoKCgoKLSBfSV9DcmVhdGluZzsKLSBfSV9Vc2luZzsKCi0gKHZvaWQpaW5jcmVh c2Vab29tOwoKCi0gKHZvaWQpZGVjcmVhc2Vab29tOwoKCi0gKHVuc2lnbmVkKWdldFpvb21GYWN0 b3I7CgoKLSBzZXRab29tRmFjdG9yOiAodW5zaWduZWQpejsKCgotICh2b2lkKWhhbmRsZUNvbmZp Z3VyZVdpZHRoOiAodW5zaWduZWQpbmV3V2lkdGggSGVpZ2h0OiAodW5zaWduZWQpbmV3SGVpZ2h0 OwpAZW5kCgpAcHJvdG9jb2wgUGl4bWFwIDxEcmF3ZXIsIENyZWF0ZSwgRHJvcCwgQ1JFQVRBQkxF PgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5t aSAgICAgICAgICAgICAgUGFnZSAgMTAyCgoKCgoKCi0gX0lfQ3JlYXRpbmc7CgotIHNldEZpbGU6 IChjb25zdCBjaGFyICopZmlsZW5hbWU7CgoKLSBzZXREaXJlY3Rvcnk6IChjb25zdCBjaGFyICop cGF0aDsKCgotIHNldFdpZGdldDogKGlkIDxXaWRnZXQ+KXdpZGdldDsKCgoKLSBzZXREZWNvcmF0 aW9uc0ZsYWc6IChCT09MKWRlY29yYXRpb25zRmxhZzsKLSBfSV9Vc2luZzsKCgotICh2b2lkKXNl dFJhc3RlcjogKGlkIDxSYXN0ZXI+KXJhc3RlcjsKCgotICh1bnNpZ25lZClnZXRXaWR0aDsKCgot ICh1bnNpZ25lZClnZXRIZWlnaHQ7CgoKLSAodm9pZClzYXZlOiAoY29uc3QgY2hhciAqKWZpbGVu YW1lOwpAZW5kCgpAcHJvdG9jb2wgQ2FudmFzQWJzdHJhY3RJdGVtIDxDcmVhdGUsIERyb3A+CgoK Ci0gX0lfQ3JlYXRpbmc7CgotICh2b2lkKWNyZWF0ZUl0ZW07CgoKLSAodm9pZCljcmVhdGVCaW5k aW5nczsKCgotIHNldENhbnZhczogKGlkIDxDYW52YXM+KWNhbnZhczsKLSBfSV9Vc2luZzsKCi0g KHZvaWQpc2V0VGFyZ2V0SWQ6IHRhcmdldDsKCgotICh2b2lkKXNldENsaWNrU2VsOiAoU0VMKXNl bDsKCgotICh2b2lkKXNldE1vdmVTZWw6IChTRUwpc2VsOwoKCgoKCgoKCgoyMDAxLTA4LTI0IDAx OjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAx MDMKCgotICh2b2lkKXNldFBvc3RNb3ZlU2VsOiAoU0VMKXNlbDsKCgotICh2b2lkKWNsaWNrZWQ7 CgoKLSAodm9pZClpbml0aWF0ZU1vdmVYOiAobG9uZylkZWx0YVggWTogKGxvbmcpZGVsdGFZOwoK Ci0gKGlkIDxDYW52YXM+KWdldENhbnZhczsKQGVuZAoKQHByb3RvY29sIENhbnZhc0l0ZW0gPENh bnZhc0Fic3RyYWN0SXRlbSwgQ1JFQVRBQkxFPgoKCgotIF9JX0NyZWF0aW5nOwotIF9JX1VzaW5n OwpAZW5kCgpAcHJvdG9jb2wgQ29tcG9zaXRlSXRlbSA8Q2FudmFzQWJzdHJhY3RJdGVtPgoKCgoK LSBfSV9DcmVhdGluZzsKLSBfSV9Vc2luZzsKCi0gKHZvaWQpbW92ZVg6IChsb25nKWRlbHRhWCBZ OiAobG9uZylkZWx0YVk7CkBlbmQKCkBwcm90b2NvbCBOb2RlSXRlbSA8Q29tcG9zaXRlSXRlbSwg Q1JFQVRBQkxFPgoKCgoKLSBfSV9DcmVhdGluZzsKCi0gc2V0U3RyaW5nOiAoY29uc3QgY2hhciAq KWxhYmVsOwoKCi0gc2V0Rm9udDogKGNvbnN0IGNoYXIgKilmb250OwoKCi0gc2V0WDogKGludCl4 IFk6IChpbnQpeTsKLSBfSV9Vc2luZzsKCi0gKHZvaWQpcmVzZXRTdHJpbmc6IChjb25zdCBjaGFy ICopc3RyaW5nOwoKCi0gKGludClnZXRYOwoKCi0gKGludClnZXRZOwoKCgoKCgoKCgoyMDAxLTA4 LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQ YWdlICAxMDQKCgotICh2b2lkKXNldENvbG9yOiAoY29uc3QgY2hhciAqKWFDb2xvcjsKCgotICh2 b2lkKXNldEJvcmRlckNvbG9yOiAoY29uc3QgY2hhciAqKWFDb2xvcjsKCgotICh2b2lkKXNldEJv cmRlcldpZHRoOiAoaW50KWFWYWw7CgoKLSAodm9pZCljcmVhdGVUZXh0OwoKCi0gKHZvaWQpY3Jl YXRlUGFkZGVkVGV4dDsKQGVuZAoKQHByb3RvY29sIExpbmtJdGVtIDxDb21wb3NpdGVJdGVtLCBD UkVBVEFCTEU+CgoKCi0gX0lfQ3JlYXRpbmc7CgotIHNldEZyb206IChpZCA8Tm9kZUl0ZW0+KWZy b207CgoKLSBzZXRUbzogKGlkIDxOb2RlSXRlbT4pdG87CgoKLSBzZXREaXJlY3RlZEZsYWc6IChC T09MKWRpcmVjdGVkRmxhZzsKLSBfSV9Vc2luZzsKCi0gKHZvaWQpc2V0Q29sb3I6IChjb25zdCBj aGFyICopYUNvbG9yOwoKCi0gKHZvaWQpdXBkYXRlOwpAZW5kCgpAcHJvdG9jb2wgU2NoZWR1bGVJ dGVtIDxDb21wb3NpdGVJdGVtLCBDUkVBVEFCTEU+CgoKCi0gX0lfQ3JlYXRpbmc7CgotIHNldFNj aGVkdWxlOiBzY2hlZHVsZTsKCgotIHNldFN0ZXA6ICh1bnNpZ25lZClzdGVwOwoKCi0gc2V0WDog KGludCl4IFk6IChpbnQpeTsKLSBfSV9Vc2luZzsKCi0gKHZvaWQpdXBkYXRlOwoKCi0gKHZvaWQp YXQ6ICh0aW1ldmFsX3QpdHZhbCBvd25lcjogb3duZXIgd2lkZ2V0OiB3aWRnZXQgeDogKGludClz b3VyY2VYIHk6IChpbnQpc291cmNlWTsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAg ICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAxMDUKCgoKLSAodm9p ZCl0cmlnZ2VyOiB3aWRnZXQgWDogKGludCl4IFk6IChpbnQpeTsKQGVuZAoKQHByb3RvY29sIE92 YWxOb2RlSXRlbSA8Tm9kZUl0ZW0sIENSRUFUQUJMRT4KCgoKLSBfSV9DcmVhdGluZzsKQGVuZAoK QHByb3RvY29sIFJlY3RhbmdsZU5vZGVJdGVtIDxOb2RlSXRlbSwgQ1JFQVRBQkxFPgoKCgotIF9J X0NyZWF0aW5nOwpAZW5kCgpAcHJvdG9jb2wgVGV4dEl0ZW0gPENhbnZhc0l0ZW0sIENSRUFUQUJM RT4KCgoKLSBfSV9DcmVhdGluZzsKCi0gc2V0WDogKGludCl4IFk6IChpbnQpeTsKCgotIHNldFRl eHQ6IChjb25zdCBjaGFyICopdGV4dDsKCgotIHNldEZvbnQ6IChjb25zdCBjaGFyICopZm9udDsK CgotIHNldENlbnRlckZsYWc6IChCT09MKWNlbnRlckZsYWc7Ci0gX0lfVXNpbmc7CkBlbmQKCkBw cm90b2NvbCBDaXJjbGUgPENhbnZhc0l0ZW0sIENSRUFUQUJMRT4KCgoKLSBfSV9DcmVhdGluZzsK Ci0gc2V0WDogKGludCl4IFk6IChpbnQpeTsKCgotIHNldFJhZGl1czogKHVuc2lnbmVkKXI7Ci0g X0lfVXNpbmc7CkBlbmQKCkBwcm90b2NvbCBSZWN0YW5nbGUgPENhbnZhc0l0ZW0sIENSRUFUQUJM RT4KCgoKLSBfSV9DcmVhdGluZzsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAg ICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAxMDYKCgotIHNldFRYOiAo aW50KXR4IFRZOiAoaW50KXR5IExYOiAoaW50KWx4IExZOiAoaW50KWx5OwpAZW5kCgpAcHJvdG9j b2wgTGluZSA8Q2FudmFzSXRlbSwgQ1JFQVRBQkxFPgoKCgotIF9JX0NyZWF0aW5nOwoKLSBzZXRU WDogKGludCl0eCBUWTogKGludCl0eSBMWDogKGludClseCBMWTogKGludClseTsKQGVuZAojIDkx NSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2d1aS5oIgojIDEgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS90a29iamMvY29tbW9uLmgiIDEKCgoKCgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5j bHVkZS9vYmpjL29iamMuaCIgMQojIDcgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS90a29iamMv Y29tbW9uLmgiIDIKCnZvaWQgdGtvYmpjX2RyYWdBbmREcm9wIChpZCBzb3VyY2UsIGlkIG9iamVj dCk7CnZvaWQgdGtvYmpjX2RyYWdBbmREcm9wQXJnIChpZCBzb3VyY2UsIGlkIG9iamVjdCwgaW50 IGFyZyk7CnZvaWQgdGtvYmpjX2RyYWdBbmREcm9wVGFyZ2V0IChpZCB0YXJnZXQsIGlkIG9iamVj dCk7CgppbnQgdGtvYmpjX2RvT25lRXZlbnRTeW5jICh2b2lkKTsKaW50IHRrb2JqY19kb09uZUV2 ZW50QXN5bmMgKHZvaWQpOwoKdm9pZCB0a29iamNfYmluZEJ1dHRvbjNUb1NwYXduIChpZCB3aWRn ZXQsIGlkIHNlbGYsIGludCBmb2N1c0ZsYWcpOwp2b2lkIHRrb2JqY19iaW5kQnV0dG9uM1RvQXJn U3Bhd24gKGlkIHdpZGdldCwgaWQgc2VsZiwgaW50IHdoaWNoKTsKCnZvaWQgdGtvYmpjX3JpbmdC ZWxsICh2b2lkKTsKCmlkIHRrb2JqY19kcmFnX2FuZF9kcm9wX29iamVjdCAodm9pZCk7Cgp2b2lk IHRrb2JqY19jb25maWd1cmVTcGVjaWFsQml0bWFwIChpZCB3aWRnZXQpOwoKdm9pZCB0a29iamNf dXBkYXRlICh2b2lkKTsKdm9pZCB0a29iamNfcmVsZWFzZUFuZFVwZGF0ZSAodm9pZCk7CnZvaWQg dGtvYmpjX3VwZGF0ZUlkbGVUYXNrcyAoaW50IGhvbGQpOwoKY29uc3QgY2hhciAqdGtvYmpjX2R5 bmFtaWNFdmFsIChjb25zdCBjaGFyICpjbWQpOwoKdm9pZCB0a29iamNfZm9jdXMgKGlkIHdpZGdl dCk7Cgp2b2lkIHRrb2JqY19tYWtlRnJhbWUgKGlkIHdpZGdldCk7CnZvaWQgdGtvYmpjX3BhY2sg KGlkIHdpZGdldCk7Cgpjb25zdCBjaGFyICp0a29iamNfY3JlYXRlVGV4dCAoaWQgYVpvbmUsIGlk IHdpZGdldCwgaW50IHgsIGludCB5LCBjb25zdCBjaGFyICp0ZXh0LCBjb25zdCBjaGFyICpmb250 LCBCT09MIGNlbnRlckZsYWcpOwojIDkxNiAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2d1aS5o IiAyCmV4dGVybiB2b2lkIGluaXRUa09iamMgKGlkIGFyZ3VtZW50cyk7CiMgOTM3ICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvZ3VpLmgiCkBjbGFzcyBCdXR0b247CkBjbGFzcyBCdXR0b25QYW5l bDsKQGNsYXNzIENoZWNrQnV0dG9uOwpAY2xhc3MgQ2xhc3NEaXNwbGF5SGlkZUJ1dHRvbjsKCgoK CgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9ic2VydmVyU3dhcm0ubWkgICAg ICAgICAgICAgIFBhZ2UgIDEwNwoKCkBjbGFzcyBDbGFzc0Rpc3BsYXlMYWJlbDsKQGNsYXNzIENs YXNzRGlzcGxheVdpZGdldDsKQGNsYXNzIENvbXBsZXRlUHJvYmVEaXNwbGF5TGFiZWw7CkBjbGFz cyBGb3JtOwpAY2xhc3MgRnJhbWU7CkBjbGFzcyBMYWJlbDsKQGNsYXNzIE1lc3NhZ2VQcm9iZUVu dHJ5OwpAY2xhc3MgUHJvYmVDYW52YXM7CkBjbGFzcyBTaW1wbGVQcm9iZURpc3BsYXlIaWRlQnV0 dG9uOwpAY2xhc3MgU3VwZXJCdXR0b247CkBjbGFzcyBWYXJQcm9iZUVudHJ5OwpAY2xhc3MgVmFy UHJvYmVMYWJlbDsKQGNsYXNzIFdpZGdldDsKCkBjbGFzcyBDb2xvcm1hcDsKQGNsYXNzIEVudHJ5 OwpAY2xhc3MgR3JhcGg7CkBjbGFzcyBDYW52YXM7CkBjbGFzcyBDYW52YXNJdGVtOwpAY2xhc3Mg SGlzdG9ncmFtOwpAY2xhc3MgTGlua0l0ZW07CkBjbGFzcyBPdmFsTm9kZUl0ZW07CkBjbGFzcyBQ aXhtYXA7CkBjbGFzcyBSZWN0YW5nbGVOb2RlSXRlbTsKQGNsYXNzIFJhc3RlcjsKQGNsYXNzIFpv b21SYXN0ZXI7CgpAY2xhc3MgQ2lyY2xlOwpAY2xhc3MgTGluZTsKQGNsYXNzIE5vZGVJdGVtOwpA Y2xhc3MgUmVjdGFuZ2xlOwpAY2xhc3MgU2NoZWR1bGVJdGVtOwpAY2xhc3MgVGV4dEl0ZW07CiMg MTEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9zaW10b29sc2d1aS5oIiAyCiMgMSAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL2V4dGVybnZhci5oIiAxCiMgMTIgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9zaW10b29sc2d1aS5oIiAyCgpAcHJvdG9jb2wgV2luZG93R2VvbWV0cnlSZWNvcmRO YW1lCgoKCgoKLSBfSV9DcmVhdGluZzsKCgoKLSBzZXRXaW5kb3dHZW9tZXRyeVJlY29yZE5hbWU6 IChjb25zdCBjaGFyICopd2luZG93R2VvbWV0cnlSZWNvcmROYW1lOwoKLSBzZXRTYXZlU2l6ZUZs YWc6IChCT09MKXNhdmVTaXplRmxhZzsKCgoKCgpAZW5kCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAxMDgK CgoKQHByb3RvY29sIENvbXBvc2l0ZVdpbmRvd0dlb21ldHJ5UmVjb3JkTmFtZSA8V2luZG93R2Vv bWV0cnlSZWNvcmROYW1lPgoKCgoKLSBfSV9DcmVhdGluZzsKCi0gc2V0V2luZG93R2VvbWV0cnlS ZWNvcmROYW1lRm9yQ29tcG9uZW50OiAoY29uc3QgY2hhciAqKWNvbXBvbmVudE5hbWUKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXQ6IHdpZGdldDsKCgoKCgoKCkBlbmQK CgpAcHJvdG9jb2wgQ29udHJvbFBhbmVsIDxTd2FybU9iamVjdCwgUkVUVVJOQUJMRT4KCgoKCgot IF9JX0NyZWF0aW5nOwoKLSBfSV9Vc2luZzsKCgoKLSAoaWQgPFN5bWJvbD4pZ2V0U3RhdGU7Cgot IHNldFN0YXRlOiAoaWQgPFN5bWJvbD4pczsKCi0gc3RhcnRJbkFjdGl2aXR5OiAoaWQgPFN3YXJt QWN0aXZpdHk+KWFjdGl2aXR5SUQ7CgoKLSBzZXRTdGF0ZVJ1bm5pbmc7CgoKCgoKLSBzZXRTdGF0 ZVN0b3BwZWQ7CgoKLSBzZXRTdGF0ZVN0ZXBwaW5nOwoKCi0gc2V0U3RhdGVRdWl0OwoKCi0gc2V0 U3RhdGVOZXh0VGltZTsKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxP YnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAxMDkKCgoKLSBzZXRTdGF0ZVNhdmU7 CgpAZW5kCgpAcHJvdG9jb2wgQWN0aW9uQ2FjaGUgPENvbXBvc2l0ZVdpbmRvd0dlb21ldHJ5UmVj b3JkTmFtZSwgU3dhcm1PYmplY3QsIFJFVFVSTkFCTEU+CgoKCgoKLSBfSV9DcmVhdGluZzsKLSBz ZXRDb250cm9sUGFuZWw6IChpZCA8Q29udHJvbFBhbmVsPiljcDsKLSBjcmVhdGVQcm9jQ3RybDsK Ci0gX0lfVXNpbmc7Ci0gc2V0U2NoZWR1bGVDb250ZXh0OiAoaWQgPFN3YXJtPiljb250ZXh0Owot IGluc2VydEFjdGlvbjogYWN0aW9uSG9sZGVyOwotIGRlbGl2ZXJBY3Rpb25zOwotIHNlbmRBY3Rp b25PZlR5cGU6IChpZCA8U3ltYm9sPil0eXBlIHRvRXhlY3V0ZTogKGNvbnN0IGNoYXIgKiljbWQ7 Ci0gc2VuZFN0YXJ0QWN0aW9uOwotIHNlbmRTdG9wQWN0aW9uOwotIHNlbmRTdGVwQWN0aW9uOwot IHNlbmROZXh0QWN0aW9uOwotIHNlbmRRdWl0QWN0aW9uOwotIHZlcmlmeUFjdGlvbnM7CgotIGdl dFBhbmVsOwoKCgoKCgotIGRvVGtFdmVudHM7Ci0gd2FpdEZvckNvbnRyb2xFdmVudDsKQGVuZAoK CmV4dGVybiBpZCA8U3ltYm9sPiBDb250cm9sLCBQcm9iaW5nLCBTcGF0aWFsOwoKCmV4dGVybiBp ZCA8U3ltYm9sPiBJbnZhbGlkQWN0aW9uVHlwZSwgQWN0aW9uVHlwZU5vdEltcGxlbWVudGVkOwoK CkBwcm90b2NvbCBDb21tb25Qcm9iZURpc3BsYXkgPFN3YXJtT2JqZWN0LCBXaW5kb3dHZW9tZXRy eVJlY29yZE5hbWU+CgoKCi0gX0lfVXNpbmc7CgoKCgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIx ICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAxMTAK CgoKLSAodm9pZCl1cGRhdGU7CgotIChCT09MKWdldE1hcmtlZEZvckRyb3BGbGFnOwotIGdldFRv cExldmVsOwpAZW5kCgpAcHJvdG9jb2wgU2luZ2xlUHJvYmVEaXNwbGF5IDxDb21tb25Qcm9iZURp c3BsYXk+CgoKCi0gX0lfQ3JlYXRpbmc7CgotIHNldFByb2JlZE9iamVjdDogYW5PYmplY3Q7Cgot IF9JX1VzaW5nOwoKLSBnZXRQcm9iZWRPYmplY3Q7CkBlbmQKCkBwcm90b2NvbCBTaW1wbGVQcm9i ZURpc3BsYXkgPFNpbmdsZVByb2JlRGlzcGxheSwgUkVUVVJOQUJMRT4KCgoKLSBfSV9DcmVhdGlu ZzsKCi0gc2V0UHJvYmVNYXA6IChpZCA8UHJvYmVNYXA+KXByb2JlTWFwOwotIF9JX1VzaW5nOwpA ZW5kCgpAcHJvdG9jb2wgUHJvYmVEaXNwbGF5IDxTaW5nbGVQcm9iZURpc3BsYXksIENSRUFUQUJM RT4KCgoKCgotIF9JX0NyZWF0aW5nOwoKCgoKCi0gc2V0UHJvYmVNYXA6IChpZCA8UHJvYmVNYXA+ KXByb2JlTWFwOwoKLSBfSV9Vc2luZzsKQGVuZAoKQHByb3RvY29sIENvbXBsZXRlUHJvYmVEaXNw bGF5IDxTaW5nbGVQcm9iZURpc3BsYXksIFJFVFVSTkFCTEU+CgoKCgoKQGVuZAoKQHByb3RvY29s IE11bHRpVmFyUHJvYmVEaXNwbGF5IDxDb21tb25Qcm9iZURpc3BsYXksIENSRUFUQUJMRT4KCgoK CgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9ic2VydmVyU3dhcm0ubWkgICAg ICAgICAgICAgIFBhZ2UgIDExMQoKCgoKCgoKLSBfSV9DcmVhdGluZzsKCi0gc2V0T2JqZWN0TGlz dDogKGlkIDxMaXN0PilvYmplY3RMaXN0OwoKCi0gc2V0UHJvYmVNYXA6IChpZCA8UHJvYmVNYXA+ KXByb2JlTWFwOwoKCi0gc2V0T2JqZWN0TmFtZVNlbGVjdG9yOiAoU0VMKW9iamVjdE5hbWVTZWxl Y3RvcjsKCi0gX0lfVXNpbmc7CkBlbmQKCgpAcHJvdG9jb2wgUHJvYmVEaXNwbGF5TWFuYWdlciA8 U3dhcm1PYmplY3QsIENSRUFUQUJMRT4KCgoKCgotIF9JX1VzaW5nOwotIChCT09MKWdldERyb3BJ bW1lZGlhdGVseUZsYWc7CgotIChpZCA8UHJvYmVEaXNwbGF5PiljcmVhdGVQcm9iZURpc3BsYXlG b3I6IGFuT2JqZWN0OwoKLSAoaWQgPFByb2JlRGlzcGxheT4pY3JlYXRlQXJjaGl2ZWRQcm9iZURp c3BsYXlGb3I6IGFuT2JqZWN0IHZhcmlhYmxlTmFtZTogKGNvbnN0IGNoYXIgKil2YXJpYWJsZU5h bWU7CgotIChpZCA8UHJvYmVEaXNwbGF5PiljcmVhdGVEZWZhdWx0UHJvYmVEaXNwbGF5Rm9yOiBh bk9iamVjdDsKCi0gKGlkIDxQcm9iZURpc3BsYXk+KWNyZWF0ZUFyY2hpdmVkRGVmYXVsdFByb2Jl RGlzcGxheUZvcjogYW5PYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdmFyaWFibGVOYW1lOiAoY29uc3QgY2hhciAqKXZhcmlhYmxlTmFtZTsKCi0gKGlk IDxDb21wbGV0ZVByb2JlRGlzcGxheT4pY3JlYXRlQ29tcGxldGVQcm9iZURpc3BsYXlGb3I6IGFu T2JqZWN0OwoKLSAoaWQgPENvbXBsZXRlUHJvYmVEaXNwbGF5PiljcmVhdGVBcmNoaXZlZENvbXBs ZXRlUHJvYmVEaXNwbGF5Rm9yOiBhbk9iamVjdCB2YXJpYWJsZU5hbWU6IChjb25zdCBjaGFyICop dmFyaWFibGVOYW1lOwoKCi0gYWRkUHJvYmVEaXNwbGF5OiAoaWQgPENvbW1vblByb2JlRGlzcGxh eT4pcHJvYmVEaXNwbGF5OwoKCi0gcmVtb3ZlUHJvYmVEaXNwbGF5OiAoaWQgPENvbW1vblByb2Jl RGlzcGxheT4pcHJvYmVEaXNwbGF5OwoKCi0gZHJvcFByb2JlRGlzcGxheXNGb3I6IGFuT2JqZWN0 OwoKCgotICh2b2lkKXVwZGF0ZTsKCi0gc2V0RHJvcEltbWVkaWF0ZWx5RmxhZzogKEJPT0wpZHJv cEltbWVkaWF0ZUZsYWc7CiMgMjc0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvc2ltdG9vbHNn dWkuaCIKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9ic2VydmVyU3dh cm0ubWkgICAgICAgICAgICAgIFBhZ2UgIDExMgoKCmV4dGVybiBpZCA8UHJvYmVEaXNwbGF5PiBf Y3JlYXRlUHJvYmVEaXNwbGF5IChpZCBvYmopOwpleHRlcm4gaWQgPENvbXBsZXRlUHJvYmVEaXNw bGF5PiBfY3JlYXRlQ29tcGxldGVQcm9iZURpc3BsYXkgKGlkIG9iaik7CgpleHRlcm4gaWQgPFBy b2JlRGlzcGxheT4gY3JlYXRlQXJjaGl2ZWRQcm9iZURpc3BsYXlOYW1lZCAoaWQgb2JqLCBjb25z dCBjaGFyICpuYW1lKTsKZXh0ZXJuIGlkIDxDb21wbGV0ZVByb2JlRGlzcGxheT4gY3JlYXRlQXJj aGl2ZWRDb21wbGV0ZVByb2JlRGlzcGxheU5hbWVkIChpZCBvYmosIGNvbnN0IGNoYXIgKm5hbWUp OwoKZXh0ZXJuIGNvbnN0IGNoYXIgKmJ1aWxkV2luZG93R2VvbWV0cnlSZWNvcmROYW1lIChjb25z dCBjaGFyICpiYXNlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICpjb21wb25lbnROYW1lKTsKQGVuZAoKQHByb3RvY29sIEdV SUNvbXBvc2l0ZSA8Q29tcG9zaXRlV2luZG93R2VvbWV0cnlSZWNvcmROYW1lPgoKCgotIF9JX1Vz aW5nOwotICh2b2lkKWVuYWJsZURlc3Ryb3lOb3RpZmljYXRpb246IG5vdGlmaWNhdGlvblRhcmdl dAogICAgICAgICAgICAgICBub3RpZmljYXRpb25NZXRob2Q6IChTRUwpbm90aWZpY2F0aW9uTWV0 aG9kOwotICh2b2lkKWRpc2FibGVEZXN0cm95Tm90aWZpY2F0aW9uOwpAZW5kCgpAcHJvdG9jb2wg R1VJU3dhcm0gPFN3YXJtLCBXaW5kb3dHZW9tZXRyeVJlY29yZE5hbWUsIENSRUFUQUJMRT4KIyAz MTQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9zaW10b29sc2d1aS5oIgotIF9JX1VzaW5nOwoK CgoKLSBnbzsKCi0gKGlkIDxBY3Rpb25DYWNoZT4pZ2V0QWN0aW9uQ2FjaGU7Ci0gKGlkIDxDb250 cm9sUGFuZWw+KWdldENvbnRyb2xQYW5lbDsKQGVuZAoKQHByb3RvY29sIE1lc3NhZ2VQcm9iZVdp ZGdldCA8Q1JFQVRBQkxFPgoKCgotIF9JX0NyZWF0aW5nOwotIHNldFBhcmVudDogKGlkIDxGcmFt ZT4pcGFyZW50OwotIHNldE9iamVjdDogb2JqZWN0OwotIHNldFByb2JlOiAoaWQgPFByb2JlPilw cm9iZTsKCi0gX0lfVXNpbmc7Ci0gKHZvaWQpcGFjazsKQGVuZAoKQHByb3RvY29sIE11bHRpVmFy UHJvYmVXaWRnZXQgPFN3YXJtT2JqZWN0LCBDUkVBVEFCTEU+CgoKCi0gX0lfQ3JlYXRpbmc7Ci0g c2V0UGFyZW50OiAoaWQgPEZyYW1lPilwYXJlbnQ7CgoKLSBzZXRGaWVsZExhYmVsaW5nRmxhZzog KEJPT0wpbGFiZWxpbmdGbGFnOwoKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAg IFBwbE9ic2VydmVyU3dhcm0ubWkgICAgICAgICAgICAgIFBhZ2UgIDExMwoKCi0gc2V0T2JqZWN0 TmFtZVNlbGVjdG9yOiAoU0VMKW9iamVjdE5hbWVTZWxlY3RvcjsKCi0gc2V0T2JqZWN0TGlzdDog KGlkIDxMaXN0PilvYmplY3RMaXN0OwoKLSBzZXRQcm9iZU1hcDogKGlkIDxQcm9iZU1hcD4pcHJv YmVNYXA7CgotIF9JX1VzaW5nOwotICh2b2lkKXVwZGF0ZTsKLSAodm9pZClwYWNrOwpAZW5kCgoK ZXh0ZXJuIGlkIDxQcm9iZURpc3BsYXlNYW5hZ2VyPiBwcm9iZURpc3BsYXlNYW5hZ2VyOwoKCmV4 dGVybiBpZCA8U3ltYm9sPiBDb250cm9sU3RhdGVSdW5uaW5nLCBDb250cm9sU3RhdGVTdG9wcGVk LAogIENvbnRyb2xTdGF0ZVN0ZXBwaW5nLCBDb250cm9sU3RhdGVOZXh0VGltZSwgQ29udHJvbFN0 YXRlUXVpdDsKCgpleHRlcm4gdm9pZCBpbml0U2ltdG9vbHNHVUkgKHZvaWQpOwoKQGNsYXNzIENv bnRyb2xQYW5lbDsKQGNsYXNzIEFjdGlvbkNhY2hlOwpAY2xhc3MgUHJvYmVEaXNwbGF5OwpAY2xh c3MgU2luZ2xlUHJvYmVEaXNwbGF5OwpAY2xhc3MgU2ltcGxlUHJvYmVEaXNwbGF5OwpAY2xhc3Mg Q29tcGxldGVQcm9iZURpc3BsYXk7CkBjbGFzcyBHVUlDb21wb3NpdGU7CkBjbGFzcyBNdWx0aVZh clByb2JlRGlzcGxheTsKQGNsYXNzIFByb2JlRGlzcGxheU1hbmFnZXI7CkBjbGFzcyBHVUlTd2Fy bTsKQGNsYXNzIE1lc3NhZ2VQcm9iZVdpZGdldDsKQGNsYXNzIE11bHRpVmFyUHJvYmVXaWRnZXQ7 CiMgNyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL3NpbXRvb2xzZ3VpL0dVSVN3YXJtLmgiIDIK IyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFzZS9Td2FybS5oIiAxCgoKCgoK IyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFzZS5oIiAxCiMgNyAiL3Vzci9s b2NhbC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2UvU3dhcm0uaCIgMgojIDEgIi91c3IvbG9jYWwv c3dhcm0vaW5jbHVkZS9hY3Rpdml0eS9Td2FybVByb2Nlc3MuaCIgMQojIDEyICIvdXNyL2xvY2Fs L3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkvU3dhcm1Qcm9jZXNzLmgiCiMgMSAiL3Vzci9sb2NhbC9z d2FybS9pbmNsdWRlL2FjdGl2aXR5L1hBY3Rpdml0eS5oIiAxCiMgMTIgIi91c3IvbG9jYWwvc3dh cm0vaW5jbHVkZS9hY3Rpdml0eS9YQWN0aXZpdHkuaCIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2lu Y2x1ZGUvZGVmb2JqL0NyZWF0ZS5oIiAxCiMgMTIgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9k ZWZvYmovQ3JlYXRlLmgiCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9DdXN0 b21pemUuaCIgMQojIDEyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0N1c3RvbWl6 ZS5oIgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmovRGVmQ2xhc3MuaCIgMQoj IDEyICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0RlZkNsYXNzLmgiCiMgMSAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvT2JqZWN0LmgiIDEKIyAxMyAiL3Vzci9sb2NhbC9z d2FybS9pbmNsdWRlL2RlZm9iai9EZWZDbGFzcy5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL29iamMvb2JqYy1hcGkuaCIgMQojIDM0ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv b2JqYy9vYmpjLWFwaS5oIgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgUHBs T2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgMTE0CgoKIyAxICIvdXNyL2xvY2Fs L3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLmgiIDEKIyAzNSAiL3Vzci9sb2NhbC9zd2FybS9pbmNs dWRlL29iamMvb2JqYy1hcGkuaCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpj L2hhc2guaCIgMQojIDM2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLWFwaS5o IiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvdGhyLmgiIDEKIyA0MSAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvdGhyLmgiCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL29iamMvb2JqYy5oIiAxCiMgNDIgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpj L3Roci5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvZXh0ZXJudmFyLmgi IDEKIyA0MyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvdGhyLmgiIDIKCgoKCmV4dGVy biBpbnQgX19vYmpjX3RocmVhZF9leGl0X3N0YXR1czsKIyA1OSAiL3Vzci9sb2NhbC9zd2FybS9p bmNsdWRlL29iamMvdGhyLmgiCnR5cGVkZWYgdm9pZCAqIG9iamNfdGhyZWFkX3Q7CgoKc3RydWN0 IG9iamNfbXV0ZXgKewogIHZvbGF0aWxlIG9iamNfdGhyZWFkX3Qgb3duZXI7CiAgdm9sYXRpbGUg aW50IGRlcHRoOwogIHZvaWQgKiBiYWNrZW5kOwp9Owp0eXBlZGVmIHN0cnVjdCBvYmpjX211dGV4 ICpvYmpjX211dGV4X3Q7CgoKc3RydWN0IG9iamNfY29uZGl0aW9uCnsKICB2b2lkICogYmFja2Vu ZDsKfTsKdHlwZWRlZiBzdHJ1Y3Qgb2JqY19jb25kaXRpb24gKm9iamNfY29uZGl0aW9uX3Q7CgoK b2JqY19tdXRleF90IG9iamNfbXV0ZXhfYWxsb2NhdGUodm9pZCk7CmludCBvYmpjX211dGV4X2Rl YWxsb2NhdGUob2JqY19tdXRleF90IG11dGV4KTsKaW50IG9iamNfbXV0ZXhfbG9jayhvYmpjX211 dGV4X3QgbXV0ZXgpOwppbnQgb2JqY19tdXRleF91bmxvY2sob2JqY19tdXRleF90IG11dGV4KTsK aW50IG9iamNfbXV0ZXhfdHJ5bG9jayhvYmpjX211dGV4X3QgbXV0ZXgpOwoKCm9iamNfY29uZGl0 aW9uX3Qgb2JqY19jb25kaXRpb25fYWxsb2NhdGUodm9pZCk7CmludCBvYmpjX2NvbmRpdGlvbl9k ZWFsbG9jYXRlKG9iamNfY29uZGl0aW9uX3QgY29uZGl0aW9uKTsKaW50IG9iamNfY29uZGl0aW9u X3dhaXQob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24sIG9iamNfbXV0ZXhfdCBtdXRleCk7Cmlu dCBvYmpjX2NvbmRpdGlvbl9zaWduYWwob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24pOwppbnQg b2JqY19jb25kaXRpb25fYnJvYWRjYXN0KG9iamNfY29uZGl0aW9uX3QgY29uZGl0aW9uKTsKCgpv YmpjX3RocmVhZF90IG9iamNfdGhyZWFkX2RldGFjaChTRUwgc2VsZWN0b3IsIGlkIG9iamVjdCwg aWQgYXJndW1lbnQpOwp2b2lkIG9iamNfdGhyZWFkX3lpZWxkKHZvaWQpOwppbnQgb2JqY190aHJl YWRfZXhpdCh2b2lkKTsKaW50IG9iamNfdGhyZWFkX3NldF9wcmlvcml0eShpbnQgcHJpb3JpdHkp OwppbnQgb2JqY190aHJlYWRfZ2V0X3ByaW9yaXR5KHZvaWQpOwp2b2lkICogb2JqY190aHJlYWRf Z2V0X2RhdGEodm9pZCk7CmludCBvYmpjX3RocmVhZF9zZXRfZGF0YSh2b2lkICp2YWx1ZSk7CgoK CgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAg ICAgICAgICAgICBQYWdlICAxMTUKCgpvYmpjX3RocmVhZF90IG9iamNfdGhyZWFkX2lkKHZvaWQp OwojIDExMyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvdGhyLmgiCnR5cGVkZWYgdm9p ZCAoKm9iamNfdGhyZWFkX2NhbGxiYWNrKSgpOwpvYmpjX3RocmVhZF9jYWxsYmFjayBvYmpjX3Nl dF90aHJlYWRfY2FsbGJhY2sob2JqY190aHJlYWRfY2FsbGJhY2sgZnVuYyk7CgoKaW50IF9fb2Jq Y19pbml0X3RocmVhZF9zeXN0ZW0odm9pZCk7CmludCBfX29iamNfZmluaV90aHJlYWRfc3lzdGVt KHZvaWQpOwoKCmludCBfX29iamNfbXV0ZXhfYWxsb2NhdGUob2JqY19tdXRleF90IG11dGV4KTsK aW50IF9fb2JqY19tdXRleF9kZWFsbG9jYXRlKG9iamNfbXV0ZXhfdCBtdXRleCk7CmludCBfX29i amNfbXV0ZXhfbG9jayhvYmpjX211dGV4X3QgbXV0ZXgpOwppbnQgX19vYmpjX211dGV4X3RyeWxv Y2sob2JqY19tdXRleF90IG11dGV4KTsKaW50IF9fb2JqY19tdXRleF91bmxvY2sob2JqY19tdXRl eF90IG11dGV4KTsKCgppbnQgX19vYmpjX2NvbmRpdGlvbl9hbGxvY2F0ZShvYmpjX2NvbmRpdGlv bl90IGNvbmRpdGlvbik7CmludCBfX29iamNfY29uZGl0aW9uX2RlYWxsb2NhdGUob2JqY19jb25k aXRpb25fdCBjb25kaXRpb24pOwppbnQgX19vYmpjX2NvbmRpdGlvbl93YWl0KG9iamNfY29uZGl0 aW9uX3QgY29uZGl0aW9uLCBvYmpjX211dGV4X3QgbXV0ZXgpOwppbnQgX19vYmpjX2NvbmRpdGlv bl9icm9hZGNhc3Qob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24pOwppbnQgX19vYmpjX2NvbmRp dGlvbl9zaWduYWwob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24pOwoKCm9iamNfdGhyZWFkX3Qg X19vYmpjX3RocmVhZF9kZXRhY2godm9pZCAoKmZ1bmMpKHZvaWQgKmFyZyksIHZvaWQgKmFyZyk7 CmludCBfX29iamNfdGhyZWFkX3NldF9wcmlvcml0eShpbnQgcHJpb3JpdHkpOwppbnQgX19vYmpj X3RocmVhZF9nZXRfcHJpb3JpdHkodm9pZCk7CnZvaWQgX19vYmpjX3RocmVhZF95aWVsZCh2b2lk KTsKaW50IF9fb2JqY190aHJlYWRfZXhpdCh2b2lkKTsKb2JqY190aHJlYWRfdCBfX29iamNfdGhy ZWFkX2lkKHZvaWQpOwppbnQgX19vYmpjX3RocmVhZF9zZXRfZGF0YSh2b2lkICp2YWx1ZSk7CnZv aWQgKiBfX29iamNfdGhyZWFkX2dldF9kYXRhKHZvaWQpOwojIDM3ICIvdXNyL2xvY2FsL3N3YXJt L2luY2x1ZGUvb2JqYy9vYmpjLWFwaS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMzggIi91 c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMtYXBpLmgiIDIKIyAxICIvdXNyL2xvY2Fs L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRhcmcu aCIgMSAzCiMgMTEwICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4wLjEvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xp c3Q7CiMgMzkgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMtYXBpLmgiIDIKCiMg MSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvZXh0ZXJudmFyLmgiIDEKIyA0MSAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamMvb2JqYy1hcGkuaCIgMgojIDUwICIvdXNyL2xvY2Fs L3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLWFwaS5oIgpzdHJ1Y3Qgb2JqY19tZXRob2RfZGVzY3Jp cHRpb24KewogICAgU0VMIG5hbWU7CiAgICBjaGFyICp0eXBlczsKfTsKIyAxMDYgIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMtYXBpLmgiCmV4dGVybiB2b2lkIG9iamNfZXJyb3Ig KGlkIG9iamVjdCwgaW50IGNvZGUsIGNvbnN0IGNoYXIqIGZtdCwgLi4uKTsKZXh0ZXJuIHZvaWQg b2JqY192ZXJyb3IgKGlkIG9iamVjdCwgaW50IGNvZGUsIGNvbnN0IGNoYXIqIGZtdCwgdmFfbGlz dCBhcCk7CnR5cGVkZWYgQk9PTCAoKm9iamNfZXJyb3JfaGFuZGxlcikgKGlkLCBpbnQgY29kZSwg Y29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKTsKb2JqY19lcnJvcl9oYW5kbGVyIG9iamNfc2V0 X2Vycm9yX2hhbmRsZXIgKG9iamNfZXJyb3JfaGFuZGxlciBmdW5jKTsKIyAxNDcgIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9vYmpjL29iamMtYXBpLmgiCnN0cnVjdCBvYmpjX3N0YXRpY19pbnN0 YW5jZXMKewoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJT d2FybS5taSAgICAgICAgICAgICAgUGFnZSAgMTE2CgoKICBjaGFyICpjbGFzc19uYW1lOwogIGlk IGluc3RhbmNlc1swXTsKfTsKIyAxNjIgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmpjL29i amMtYXBpLmgiCnR5cGVkZWYgc3RydWN0IG9iamNfc3ltdGFiIHsKICB1bnNpZ25lZCBsb25nIHNl bF9yZWZfY250OwogIFNFTCByZWZzOwogIHVuc2lnbmVkIHNob3J0IGNsc19kZWZfY250OwoKICB1 bnNpZ25lZCBzaG9ydCBjYXRfZGVmX2NudDsKCgoKICB2b2lkICpkZWZzWzFdOwoKCgoKCn0gU3lt dGFiLCAqU3ltdGFiX3Q7CiMgMTg5ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpj LWFwaS5oIgp0eXBlZGVmIHN0cnVjdCBvYmpjX21vZHVsZSB7CiAgdW5zaWduZWQgbG9uZyB2ZXJz aW9uOwogIHVuc2lnbmVkIGxvbmcgc2l6ZTsKICBjb25zdCBjaGFyKiBuYW1lOwoKCgogIFN5bXRh Yl90IHN5bXRhYjsKCgoKCgp9IE1vZHVsZSwgKk1vZHVsZV90OwoKCgoKCgp0eXBlZGVmIHN0cnVj dCBvYmpjX2l2YXIqIEl2YXJfdDsKdHlwZWRlZiBzdHJ1Y3Qgb2JqY19pdmFyX2xpc3QgewogIGlu dCBpdmFyX2NvdW50OwoKCgoKICBzdHJ1Y3Qgb2JqY19pdmFyIHsKICAgIGNvbnN0IGNoYXIqIGl2 YXJfbmFtZTsKCgogICAgY29uc3QgY2hhciogaXZhcl90eXBlOwoKCiAgICBpbnQgaXZhcl9vZmZz ZXQ7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJt Lm1pICAgICAgICAgICAgICBQYWdlICAxMTcKCgoKCgogIH0gaXZhcl9saXN0WzFdOwoKfSBJdmFy TGlzdCwgKkl2YXJMaXN0X3Q7CiMgMjQwICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9v YmpjLWFwaS5oIgpzdHJ1Y3Qgb2JqY19tZXRob2QgewogIFNFTCBtZXRob2RfbmFtZTsKCgoKCgog IGNvbnN0IGNoYXIqIG1ldGhvZF90eXBlczsKCgogIElNUCBtZXRob2RfaW1wOwoKfTsKCnR5cGVk ZWYgc3RydWN0IG9iamNfbWV0aG9kIE1ldGhvZDsKCnR5cGVkZWYgTWV0aG9kKiBNZXRob2RfdDsK dHlwZWRlZiBzdHJ1Y3Qgb2JqY19tZXRob2RfbGlzdCB7CiAgc3RydWN0IG9iamNfbWV0aG9kX2xp c3QqIG1ldGhvZF9uZXh0OwoKCiAgaW50IG1ldGhvZF9jb3VudDsKCiAgc3RydWN0IG9iamNfbWV0 aG9kIG1ldGhvZF9saXN0WzFdOwoKfSBNZXRob2RMaXN0LCAqTWV0aG9kTGlzdF90OwoKc3RydWN0 IG9iamNfcHJvdG9jb2xfbGlzdCB7CiAgc3RydWN0IG9iamNfcHJvdG9jb2xfbGlzdCAqbmV4dDsK ICBpbnQgY291bnQ7CiAgUHJvdG9jb2wgKmxpc3RbMV07Cn07CiMgMzI0ICIvdXNyL2xvY2FsL3N3 YXJtL2luY2x1ZGUvb2JqYy9vYmpjLWFwaS5oIgp0eXBlZGVmIHN0cnVjdCBvYmpjX2NhdGVnb3J5 IHsKICBjb25zdCBjaGFyKiBjYXRlZ29yeV9uYW1lOwoKCiAgY29uc3QgY2hhciogY2xhc3NfbmFt ZTsKCiAgTWV0aG9kTGlzdF90IGluc3RhbmNlX21ldGhvZHM7CgoKCiAgTWV0aG9kTGlzdF90IGNs YXNzX21ldGhvZHM7CgoKCiAgc3RydWN0IG9iamNfcHJvdG9jb2xfbGlzdCAqcHJvdG9jb2xzOwoK CgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9ic2VydmVyU3dhcm0ubWkg ICAgICAgICAgICAgIFBhZ2UgIDExOAoKCn0gQ2F0ZWdvcnksICpDYXRlZ29yeV90OwoKCgoKCgp0 eXBlZGVmIHN0cnVjdCBvYmpjX3N1cGVyIHsKICBpZCBzZWxmOwoKICBDbGFzcyBjbGFzczsKfSBT dXBlciwgKlN1cGVyX3Q7CgpJTVAgb2JqY19tc2dfbG9va3VwX3N1cGVyKFN1cGVyX3Qgc3VwZXIs IFNFTCBzZWwpOwoKCnJldHZhbF90IG9iamNfbXNnX3NlbmR2KGlkLCBTRUwsIGFyZ2xpc3RfdCk7 CiMgMzY3ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLWFwaS5oIgpleHRlcm4g Q2xhc3MgKCpfb2JqY19sb29rdXBfY2xhc3MpIChjb25zdCBjaGFyICpuYW1lKTsKCgoKCgoKCmV4 dGVybiB2b2lkICgqX29iamNfbG9hZF9jYWxsYmFjaykgKENsYXNzIGNsYXNzLCBDYXRlZ29yeSog Y2F0ZWdvcnkpOwoKCgoKZXh0ZXJuIGlkICgqX29iamNfb2JqZWN0X2FsbG9jKSAoQ2xhc3MgY2xh c3MpOwpleHRlcm4gaWQgKCpfb2JqY19vYmplY3RfY29weSkgKGlkIG9iamVjdCk7CmV4dGVybiBp ZCAoKl9vYmpjX29iamVjdF9kaXNwb3NlKSAoaWQgb2JqZWN0KTsKCgoKCgoKCnZvaWQgKm9iamNf bWFsbG9jIChzaXplX3Qgc2l6ZSk7Cgp2b2lkICpvYmpjX2F0b21pY19tYWxsb2MgKHNpemVfdCBz aXplKTsKCnZvaWQgKm9iamNfdmFsbG9jIChzaXplX3Qgc2l6ZSk7Cgp2b2lkICpvYmpjX3JlYWxs b2MgKHZvaWQgKm1lbSwgc2l6ZV90IHNpemUpOwoKdm9pZCAqb2JqY19jYWxsb2MgKHNpemVfdCBu ZWxlbSwgc2l6ZV90IHNpemUpOwoKdm9pZCBvYmpjX2ZyZWUgKHZvaWQgKm1lbSk7CiMgNDEyICIv dXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqYy9vYmpjLWFwaS5oIgpleHRlcm4gdm9pZCAqKCpf b2JqY19tYWxsb2MpIChzaXplX3QpOwpleHRlcm4gdm9pZCAqKCpfb2JqY19hdG9taWNfbWFsbG9j KSAoc2l6ZV90KTsKZXh0ZXJuIHZvaWQgKigqX29iamNfdmFsbG9jKSAoc2l6ZV90KTsKCgoKCgoK CjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9ic2VydmVyU3dhcm0ubWkgICAgICAg ICAgICAgIFBhZ2UgIDExOQoKCmV4dGVybiB2b2lkICooKl9vYmpjX3JlYWxsb2MpICh2b2lkICos IHNpemVfdCk7CmV4dGVybiB2b2lkICooKl9vYmpjX2NhbGxvYykgKHNpemVfdCwgc2l6ZV90KTsK ZXh0ZXJuIHZvaWQgKCpfb2JqY19mcmVlKSAodm9pZCAqKTsKCk1ldGhvZF90IGNsYXNzX2dldF9j bGFzc19tZXRob2QgKE1ldGFDbGFzcyBjbGFzcywgU0VMIGFTZWwpOwoKTWV0aG9kX3QgY2xhc3Nf Z2V0X2luc3RhbmNlX21ldGhvZCAoQ2xhc3MgY2xhc3MsIFNFTCBhU2VsKTsKCkNsYXNzIGNsYXNz X3Bvc2VfYXMgKENsYXNzIGltcG9zdG9yLCBDbGFzcyBzdXBlcmNsYXNzKTsKCkNsYXNzIG9iamNf Z2V0X2NsYXNzIChjb25zdCBjaGFyICpuYW1lKTsKCkNsYXNzIG9iamNfbG9va3VwX2NsYXNzIChj b25zdCBjaGFyICpuYW1lKTsKCkNsYXNzIG9iamNfbmV4dF9jbGFzcyAodm9pZCAqKmVudW1fc3Rh dGUpOwoKY29uc3QgY2hhciAqc2VsX2dldF9uYW1lIChTRUwgc2VsZWN0b3IpOwoKY29uc3QgY2hh ciAqc2VsX2dldF90eXBlIChTRUwgc2VsZWN0b3IpOwoKU0VMIHNlbF9nZXRfdWlkIChjb25zdCBj aGFyICpuYW1lKTsKClNFTCBzZWxfZ2V0X2FueV91aWQgKGNvbnN0IGNoYXIgKm5hbWUpOwoKU0VM IHNlbF9nZXRfYW55X3R5cGVkX3VpZCAoY29uc3QgY2hhciAqbmFtZSk7CgpTRUwgc2VsX2dldF90 eXBlZF91aWQgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIqKTsKClNFTCBzZWxfcmVnaXN0 ZXJfbmFtZSAoY29uc3QgY2hhciAqbmFtZSk7CgpTRUwgc2VsX3JlZ2lzdGVyX3R5cGVkX25hbWUg KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIqdHlwZSk7CgoKQk9PTCBzZWxfaXNfbWFwcGVk IChTRUwgYVNlbCk7CgpleHRlcm4gaWQgY2xhc3NfY3JlYXRlX2luc3RhbmNlIChDbGFzcyBjbGFz cyk7CgpzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgpjbGFzc19nZXRfY2xhc3NfbmFtZSAoQ2xh c3MgY2xhc3MpCnsKICByZXR1cm4gKChjbGFzcykmJigoKChjbGFzcyktPmluZm8pICYgMHgxTCkg PT0gMHgxTCkpP2NsYXNzLT5uYW1lOigoY2xhc3M9PShDbGFzcykwKT8iTmlsIjowKTsKfQoKc3Rh dGljIGlubGluZSBsb25nCmNsYXNzX2dldF9pbnN0YW5jZV9zaXplIChDbGFzcyBjbGFzcykKewog IHJldHVybiAoKGNsYXNzKSYmKCgoKGNsYXNzKS0+aW5mbykgJiAweDFMKSA9PSAweDFMKSkgPyBj bGFzcy0+aW5zdGFuY2Vfc2l6ZSA6IDA7Cn0KCnN0YXRpYyBpbmxpbmUgTWV0YUNsYXNzCmNsYXNz X2dldF9tZXRhX2NsYXNzIChDbGFzcyBjbGFzcykKewogIHJldHVybiAoKGNsYXNzKSYmKCgoKGNs YXNzKS0+aW5mbykgJiAweDFMKSA9PSAweDFMKSkgPyBjbGFzcy0+Y2xhc3NfcG9pbnRlciA6IChD bGFzcykwOwp9CgpzdGF0aWMgaW5saW5lIENsYXNzCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAg ICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAxMjAKCgpj bGFzc19nZXRfc3VwZXJfY2xhc3MgKENsYXNzIGNsYXNzKQp7CiAgcmV0dXJuICgoY2xhc3MpJiYo KCgoY2xhc3MpLT5pbmZvKSAmIDB4MUwpID09IDB4MUwpKSA/IGNsYXNzLT5zdXBlcl9jbGFzcyA6 IChDbGFzcykwOwp9CgpzdGF0aWMgaW5saW5lIGludApjbGFzc19nZXRfdmVyc2lvbiAoQ2xhc3Mg Y2xhc3MpCnsKICByZXR1cm4gKChjbGFzcykmJigoKChjbGFzcyktPmluZm8pICYgMHgxTCkgPT0g MHgxTCkpID8gY2xhc3MtPnZlcnNpb24gOiAtMTsKfQoKc3RhdGljIGlubGluZSBCT09MCmNsYXNz X2lzX2NsYXNzIChDbGFzcyBjbGFzcykKewogIHJldHVybiAoKGNsYXNzKSYmKCgoKGNsYXNzKS0+ aW5mbykgJiAweDFMKSA9PSAweDFMKSk7Cn0KCnN0YXRpYyBpbmxpbmUgQk9PTApjbGFzc19pc19t ZXRhX2NsYXNzIChDbGFzcyBjbGFzcykKewogIHJldHVybiAoKGNsYXNzKSYmKCgoKGNsYXNzKS0+ aW5mbykgJiAweDJMKSA9PSAweDJMKSk7Cn0KCgpzdGF0aWMgaW5saW5lIHZvaWQKY2xhc3Nfc2V0 X3ZlcnNpb24gKENsYXNzIGNsYXNzLCBsb25nIHZlcnNpb24pCnsKICBpZiAoKChjbGFzcykmJigo KChjbGFzcyktPmluZm8pICYgMHgxTCkgPT0gMHgxTCkpKQogICAgY2xhc3MtPnZlcnNpb24gPSB2 ZXJzaW9uOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgKgpjbGFzc19nZXRfZ2Nfb2JqZWN0X3R5cGUg KENsYXNzIGNsYXNzKQp7CiAgcmV0dXJuICgoY2xhc3MpJiYoKCgoY2xhc3MpLT5pbmZvKSAmIDB4 MUwpID09IDB4MUwpKSA/IGNsYXNzLT5nY19vYmplY3RfdHlwZSA6ICgodm9pZCAqKTApOwp9CgoK ZXh0ZXJuIHZvaWQgY2xhc3NfaXZhcl9zZXRfZ2NpbnZpc2libGUgKENsYXNzIGNsYXNzLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaXZhcm5hbWUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MIGdjSW52aXNpYmxl KTsKCnN0YXRpYyBpbmxpbmUgSU1QCm1ldGhvZF9nZXRfaW1wIChNZXRob2RfdCBtZXRob2QpCnsK ICByZXR1cm4gKG1ldGhvZCAhPSAoTWV0aG9kX3QpMCkgPyBtZXRob2QtPm1ldGhvZF9pbXAgOiAo SU1QKSAwOwp9CgpJTVAgZ2V0X2ltcCAoQ2xhc3MgY2xhc3MsIFNFTCBzZWwpOwoKCgoKCgoKCgoK CgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9ic2VydmVyU3dhcm0ubWkgICAg ICAgICAgICAgIFBhZ2UgIDEyMQoKCmlkIG9iamVjdF9jb3B5IChpZCBvYmplY3QpOwoKaWQgb2Jq ZWN0X2Rpc3Bvc2UgKGlkIG9iamVjdCk7CgpzdGF0aWMgaW5saW5lIENsYXNzCm9iamVjdF9nZXRf Y2xhc3MgKGlkIG9iamVjdCkKewogIHJldHVybiAoKG9iamVjdCAhPSAoaWQpMCkKICAgICAgICAg ID8gKCgob2JqZWN0LT5jbGFzc19wb2ludGVyKSYmKCgoKG9iamVjdC0+Y2xhc3NfcG9pbnRlcikt PmluZm8pICYgMHgxTCkgPT0gMHgxTCkpCiAgICAgICAgICAgICA/IG9iamVjdC0+Y2xhc3NfcG9p bnRlcgogICAgICAgICAgICAgOiAoKChvYmplY3QtPmNsYXNzX3BvaW50ZXIpJiYoKCgob2JqZWN0 LT5jbGFzc19wb2ludGVyKS0+aW5mbykgJiAweDJMKSA9PSAweDJMKSkKICAgICAgICAgICAgICAg ID8gKENsYXNzKSBvYmplY3QKICAgICAgICAgICAgICAgIDogKENsYXNzKTApKQogICAgICAgICAg OiAoQ2xhc3MpMCk7Cn0KCnN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCm9iamVjdF9nZXRfY2xh c3NfbmFtZSAoaWQgb2JqZWN0KQp7CiAgcmV0dXJuICgob2JqZWN0IT0oaWQpMCkgPyAoKChvYmpl Y3QtPmNsYXNzX3BvaW50ZXIpJiYoKCgob2JqZWN0LT5jbGFzc19wb2ludGVyKS0+aW5mbykgJiAw eDFMKSA9PSAweDFMKSkKICAgICAgICAgICAgICAgICAgICAgICAgID8gb2JqZWN0LT5jbGFzc19w b2ludGVyLT5uYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICA6ICgoQ2xhc3MpIG9iamVjdCkt Pm5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgOiJOaWwiKTsKfQoKc3RhdGljIGlubGluZSBN ZXRhQ2xhc3MKb2JqZWN0X2dldF9tZXRhX2NsYXNzKGlkIG9iamVjdCkKewogIHJldHVybiAoKG9i amVjdCE9KGlkKTApID8gKCgob2JqZWN0LT5jbGFzc19wb2ludGVyKSYmKCgoKG9iamVjdC0+Y2xh c3NfcG9pbnRlciktPmluZm8pICYgMHgxTCkgPT0gMHgxTCkpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgID8gb2JqZWN0LT5jbGFzc19wb2ludGVyLT5jbGFzc19wb2ludGVyCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIDogKCgob2JqZWN0LT5jbGFzc19wb2ludGVyKSYmKCgoKG9iamVjdC0+ Y2xhc3NfcG9pbnRlciktPmluZm8pICYgMHgyTCkgPT0gMHgyTCkpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgID8gb2JqZWN0LT5jbGFzc19wb2ludGVyCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDooQ2xhc3MpMCkpCiAgICAgICAgICA6IChDbGFzcykwKTsKfQoKc3RhdGljIGlu bGluZSBDbGFzcwpvYmplY3RfZ2V0X3N1cGVyX2NsYXNzIChpZCBvYmplY3QpCnsKICByZXR1cm4g KChvYmplY3QhPShpZCkwKSA/ICgoKG9iamVjdC0+Y2xhc3NfcG9pbnRlcikmJigoKChvYmplY3Qt PmNsYXNzX3BvaW50ZXIpLT5pbmZvKSAmIDB4MUwpID09IDB4MUwpKQogICAgICAgICAgICAgICAg ICAgICAgICAgICA/IG9iamVjdC0+Y2xhc3NfcG9pbnRlci0+c3VwZXJfY2xhc3MKICAgICAgICAg ICAgICAgICAgICAgICAgICAgOiAoKChvYmplY3QtPmNsYXNzX3BvaW50ZXIpJiYoKCgob2JqZWN0 LT5jbGFzc19wb2ludGVyKS0+aW5mbykgJiAweDJMKSA9PSAweDJMKSkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgPygoQ2xhc3MpIG9iamVjdCktPnN1cGVyX2NsYXNzCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDogKENsYXNzKTApKQogICAgICAgICAgOiAoQ2xhc3MpMCk7Cn0KCnN0 YXRpYyBpbmxpbmUgQk9PTApvYmplY3RfaXNfY2xhc3MgKGlkIG9iamVjdCkKewogIHJldHVybiAo KChDbGFzcykgb2JqZWN0KSYmKCgoKChDbGFzcykgb2JqZWN0KS0+aW5mbykgJiAweDFMKSA9PSAw eDFMKSk7Cn0KCnN0YXRpYyBpbmxpbmUgQk9PTApvYmplY3RfaXNfaW5zdGFuY2UoaWQgb2JqZWN0 KQp7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJt Lm1pICAgICAgICAgICAgICBQYWdlICAxMjIKCgogIHJldHVybiAob2JqZWN0ICE9IChpZCkwKSAm JiAoKG9iamVjdC0+Y2xhc3NfcG9pbnRlcikmJigoKChvYmplY3QtPmNsYXNzX3BvaW50ZXIpLT5p bmZvKSAmIDB4MUwpID09IDB4MUwpKTsKfQoKc3RhdGljIGlubGluZSBCT09MCm9iamVjdF9pc19t ZXRhX2NsYXNzIChpZCBvYmplY3QpCnsKICByZXR1cm4gKCgoQ2xhc3MpIG9iamVjdCkmJigoKCgo Q2xhc3MpIG9iamVjdCktPmluZm8pICYgMHgyTCkgPT0gMHgyTCkpOwp9CgpzdHJ1Y3Qgc2FycmF5 KiBvYmpjX2dldF91bmluc3RhbGxlZF9kdGFibGUgKHZvaWQpOwojIDE0ICIvdXNyL2xvY2FsL3N3 YXJtL2luY2x1ZGUvZGVmb2JqL0RlZkNsYXNzLmgiIDIKCgoKCnR5cGVkZWYgc3RydWN0IGNsYXNz RGF0YSAqY2xhc3NEYXRhX3Q7CnR5cGVkZWYgc3RydWN0IG1ldGhvZERlZnMgKm1ldGhvZERlZnNf dDsKCgoKCkBpbnRlcmZhY2UgQ2xhc3NfczogT2JqZWN0CnsKQHB1YmxpYwogIENsYXNzX3MgKnN1 cGVyY2xhc3M7CiAgY29uc3QgY2hhciAqbmFtZTsKICBsb25nIHZlcnNpb247CiAgdW5zaWduZWQg bG9uZyBpbmZvOwogIGxvbmcgaW5zdGFuY2VTaXplOwogIHZvaWQgKml2YXJMaXN0OwogIHZvaWQg Km1ldGhvZExpc3Q7CiAgc3RydWN0IHNhcnJheSAqZHRhYmxlOwp9CgoKQGVuZAoKCgoKZXh0ZXJu IGNsYXNzRGF0YV90IF9vYmpfZ2V0Q2xhc3NEYXRhIChDbGFzc19zICpjbGFzcyk7CgoKCgp2b2lk IF9vYmpfaW5pdE1ldGhvZEludGVyZmFjZXMgKENsYXNzX3MgKmNsYXNzKTsKCgoKCgoKCkBpbnRl cmZhY2UgQ3JlYXRlZENsYXNzX3M6IENsYXNzX3MKewpAcHVibGljCgoKCgoKCgoyMDAxLTA4LTI0 IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdl ICAxMjMKCgogIENsYXNzX3MgKmRlZmluaW5nQ2xhc3M7CiAgaWQgbWV0YW9iamVjdHM7Cn0KCisg Y3JlYXRlQmVnaW46IGFab25lOwotIHNldE5hbWU6IChjb25zdCBjaGFyICopY2xhc3NOYW1lOwot IHNldENsYXNzOiBhQ2xhc3M7Ci0gc2V0U3VwZXJjbGFzczogYUNsYXNzOwotIHNldERlZmluaW5n Q2xhc3M6IGFDbGFzczsKLSBhdDogKFNFTClhU2VsIGFkZE1ldGhvZDogKElNUClhTWV0aG9kOwot IGxpc3BJbkNyZWF0ZTogZXhwcjsKLSBoZGY1SW5DcmVhdGU6IGV4cHI7Ci0gY3JlYXRlRW5kOwot ICh2b2lkKWhkZjVPdXRTaGFsbG93OiBzdHJlYW07Ci0gKHZvaWQpbGlzcE91dFNoYWxsb3c6IHN0 cmVhbTsKQGVuZAoKQGludGVyZmFjZSBCZWhhdmlvclBoYXNlX3M6IENyZWF0ZWRDbGFzc19zCnsK QHB1YmxpYwogIENsYXNzX3MgKm5leHRQaGFzZTsKICBpZCBmaWxsZXI7CiAgaWQgbW9yZWZpbGxl cjsKfQoKLSAodm9pZClzZXROZXh0UGhhc2U6IGFCZWhhdmlvclBoYXNlOwpAZW5kCgoKCgoKCgpz dHJ1Y3QgY2xhc3NEYXRhIHsKICBpZCAqY2xhc3NJRDsKICBpZCBvd25lcjsKICBpZCB0eXBlSW1w bGVtZW50ZWQ7CiAgQmVoYXZpb3JQaGFzZV9zICppbml0aWFsUGhhc2U7CiAgaWQgbWV0YW9iamVj dHM7Cn07CgoKCgpzdHJ1Y3QgbWV0aG9kRGVmcyB7CiAgbWV0aG9kRGVmc190IG5leHQ7CiAgaWQg aW50ZXJmYWNlSUQ7CiAgTWV0aG9kX3QgZmlyc3RFbnRyeTsKICBpbnQgY291bnQ7Cn07CiMgMTMg Ii91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmovQ3VzdG9taXplLmgiIDIKIyAxICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0RlZk9iamVjdC5oIiAxCiMgMTMgIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9kZWZvYmovRGVmT2JqZWN0LmgiCiMgMSAiL3Vzci9sb2NhbC9zd2Fy bS9pbmNsdWRlL2RlZm9iai5oIiAxCiMgMTQgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZv YmovRGVmT2JqZWN0LmgiIDIKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBw bE9ic2VydmVyU3dhcm0ubWkgICAgICAgICAgICAgIFBhZ2UgIDEyNAoKCgojIDEgIi91c3IvbG9j YWwvc3dhcm0vaW5jbHVkZS9zd2FybWNvbmZpZy5oIiAxCiMgMTYgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9kZWZvYmovRGVmT2JqZWN0LmgiIDIKCkBjbGFzcyBPYmplY3RFbnRyeTsKCgpAaW50 ZXJmYWNlIE9iamVjdF9zOiBPYmplY3QgPERlZmluZWRDbGFzcywgU2VyaWFsaXphdGlvbiwgR2V0 TmFtZT4KewpAcHVibGljCgoKICB1bnNpZ25lZCB6Yml0czsKICBPYmplY3RFbnRyeSAqZm9yZWln bkVudHJ5Owp9CiMgNDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmovRGVmT2JqZWN0 LmgiCi0gKGNvbnN0IGNoYXIgKilnZXROYW1lOworIChCT09MKXJlc3BvbmRzVG86IChTRUwpYVNl bDsKLSAoQk9PTClyZXNwb25kc1RvOiAoU0VMKWFTZWw7CisgKEJPT0wpY29uZm9ybXNUbzogKFBy b3RvY29sICopYVByb3RvY29sOworIGdldENsYXNzOwotIGdldENsYXNzOwotIGdldFpvbmU7Ci0g KHZvaWQpZHJvcEFsbG9jYXRpb25zOiAoQk9PTCljb21wb25lbnRBbGxvYzsKLSAodm9pZClkcm9w OwotIChyZWZfdClhZGRSZWY6IChub3RpZnlfdClub3RpZnlGdW5jdGlvbiB3aXRoQXJndW1lbnQ6 ICh2b2lkICopYXJnOzsKLSAodm9pZClyZW1vdmVSZWY6IChyZWZfdClyZWZWYWw7CisgZ2V0U3Vw ZXJjbGFzczsKKyAoQk9PTClpc1N1YmNsYXNzOiBhQ2xhc3M7CisgKHZvaWQpc2V0VHlwZUltcGxl bWVudGVkOiBhVHlwZTsKKyBnZXRUeXBlSW1wbGVtZW50ZWQ7CisgZ2V0T3duZXI7CisgKElNUCln ZXRNZXRob2RGb3I6IChTRUwpYVNlbDsKKyBnZXREZWZpbmluZ0NsYXNzOworIGdldE5leHRQaGFz ZTsKKyBzZWxmOwotIGdldFR5cGU7Ci0gKGludCljb21wYXJlOiBhbk9iamVjdDsKLSBwZXJmb3Jt OiAoU0VMKWFTZWw7Ci0gcGVyZm9ybTogKFNFTClhU2VsIHdpdGg6IGFuT2JqZWN0MTsKLSBwZXJm b3JtOiAoU0VMKWFTZWwgd2l0aDogYW5PYmplY3QxIHdpdGg6IGFuT2JqZWN0MjsKLSBwZXJmb3Jt OiAoU0VMKWFTZWwgd2l0aDogYW5PYmplY3QxIHdpdGg6IGFuT2JqZWN0MiB3aXRoOiBhbk9iamVj dDM7Ci0gKHZvaWQpc2V0RGlzcGxheU5hbWU6IChjb25zdCBjaGFyICopYU5hbWU7Ci0gKGNvbnN0 IGNoYXIgKilnZXREaXNwbGF5TmFtZTsKLSAoY29uc3QgY2hhciAqKWdldE9iamVjdE5hbWU7Ci0g KGNvbnN0IGNoYXIgKilnZXRUeXBlTmFtZTsKLSAodm9pZClkZXNjcmliZTogb3V0cHV0Q2hhclN0 cmVhbTsKLSAodm9pZClkZXNjcmliZUlEOiBvdXRwdXRDaGFyU3RyZWFtOwotICh2b2lkKXhwcmlu dDsKLSAodm9pZCl4cHJpbnRpZDsKLSAodm9pZCl4ZnByaW50OwotICh2b2lkKXhmcHJpbnRpZDsK LSBsaXNwSW5DcmVhdGU6IGV4cHI7Ci0gbGlzcEluOiBleHByOwotIGhkZjVJbkNyZWF0ZTogZXhw cjsKLSBoZGY1SW46IGV4cHI7CgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQ cGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAxMjUKCgotICh2b2lkKWxpc3BP dXRWYXJzOiBzdHJlYW0gZGVlcDogKEJPT0wpZGVlcEZsYWc7Ci0gKHZvaWQpbGlzcE91dERlZXA6 IHN0cmVhbTsKLSAodm9pZClsaXNwT3V0U2hhbGxvdzogc3RyZWFtOwotICh2b2lkKWhkZjVPdXRE ZWVwOiBoZGY1b2JqOwotICh2b2lkKWhkZjVPdXRTaGFsbG93OiBoZGY1b2JqOwotICh2b2lkKXVw ZGF0ZUFyY2hpdmVyOiBhcmNoaXZlcjsKQGVuZAoKZXh0ZXJuIGlkIGxpc3BJbiAoaWQgYVpvbmUs IGlkIGV4cHIpOwoKZXh0ZXJuIEJPT0wgbGlzcEluQm9vbGVhbiAoaWQgaW5kZXgpOwpleHRlcm4g aW50IGxpc3BJbkludGVnZXIgKGlkIGluZGV4KTsKZXh0ZXJuIGNvbnN0IGNoYXIgKmxpc3BJblN0 cmluZyAoaWQgaW5kZXgpOwpleHRlcm4gaWQgbGlzcEluS2V5d29yZCAoaWQgaW5kZXgpOwojIDEy MSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9EZWZPYmplY3QuaCIKZXh0ZXJuIElN UCBnZXRfaW1wIChDbGFzcyBjbGFzcywgU0VMIHNlbCk7CgoKCgpleHRlcm4gQk9PTCByZXNwb25k c1RvIChpZCBhbk9iamVjdCwgU0VMIGFTZWwpOwoKCgoKCmV4dGVybiBJTVAgZ2V0TWV0aG9kRm9y IChpZCBhbk9iamVjdCwgU0VMIGFTZWwpOwojIDE1NCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRl L2RlZm9iai9EZWZPYmplY3QuaCIKdHlwZWRlZiBzdHJ1Y3QgbWFwYWxsb2MgKm1hcGFsbG9jX3Q7 CgpzdHJ1Y3QgbWFwYWxsb2MgewogIHZvaWQgKCptYXBwaW5nRnVuY3Rpb24pIChtYXBhbGxvY190 IG1hcGFsbG9jLCBCT09MIG9iamVjdEFsbG9jYXRpb24pOwogIHZvaWQgKmFsbG9jOwogIGlkIDxT eW1ib2w+IGRlc2NyaXB0b3I7CiAgaWQgem9uZTsKICBzaXplX3Qgc2l6ZTsKfTsKIyAxNCAiL3Vz ci9sb2NhbC9zd2FybS9pbmNsdWRlL2RlZm9iai9DdXN0b21pemUuaCIgMgojIDI0ICIvdXNyL2xv Y2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0N1c3RvbWl6ZS5oIgpleHRlcm4gaWQgQ3JlYXRpbmcs IFNldHRpbmcsIFVzaW5nLCBDcmVhdGluZ09ubHksIFVzaW5nT25seTsKCgoKCkBpbnRlcmZhY2Ug Q3VzdG9taXplX3M6IE9iamVjdF9zCgorIGN1c3RvbWl6ZUJlZ2luOiBhWm9uZTsKLSBjdXN0b21p emVFbmQ7Ci0gY3VzdG9taXplQ29weTogYVpvbmU7CisgY3VzdG9taXplQmVnaW5FbmQ6IGFab25l OwotIF9zZXRDcmVhdGVCeV86IChDbGFzcylzdWJjbGFzcyBtZXNzYWdlOiAoU0VMKW1lc3NhZ2VT ZWxlY3RvciB0bzogYW5PYmplY3Q7Ci0gKHZvaWQpX3NldENyZWF0ZUJ5Q29weV87Ci0gKHZvaWQp X3NldENyZWF0ZUJ5TWVzc2FnZV86IChTRUwpbWVzc2FnZVNlbGVjdG9yIHRvOiBhbk9iamVjdDsK LSAodm9pZClfc2V0Q3JlYXRlQnlNZXNzYWdlXzogKFNFTCltZXNzYWdlU2VsZWN0b3IgdG9Db3B5 OiBhbk9iamVjdDsKLSAodm9pZClfc2V0UmVjdXN0b21pemVfOiBhbk9iamVjdDsKKyAodm9pZClz ZXRUeXBlSW1wbGVtZW50ZWQ6IGFUeXBlOwoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAg ICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgMTI2CgoKQGVuZAoj IDU2ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvZGVmb2JqL0N1c3RvbWl6ZS5oIgpleHRlcm4g aW5saW5lIEJPT0wKX29ial9jdXN0b21pemUgKGlkIGFuT2JqZWN0KQp7CiAgcmV0dXJuICgoKihD bGFzcyAqKShhbk9iamVjdCkpLT5pbmZvICYgMHgyMDApICE9IDA7Cn0KIyA4MiAiL3Vzci9sb2Nh bC9zd2FybS9pbmNsdWRlL2RlZm9iai9DdXN0b21pemUuaCIKQGludGVyZmFjZSBDcmVhdGVCeV9j OiBPYmplY3Rfcwp7CkBwdWJsaWMKICBpZCBpbXBsZW1lbnRlZFR5cGU7CiAgaWQgY3JlYXRlUmVj ZWl2ZXI7CiAgU0VMIGNyZWF0ZU1lc3NhZ2U7CiAgSU1QIGNyZWF0ZU1ldGhvZDsKICBpZCByZWN1 c3RvbWl6ZTsKfQoKLSBjcmVhdGVCZWdpbjogYVpvbmU7Ci0gY3VzdG9taXplQmVnaW46IGFab25l OwotICh2b2lkKW1hcEFsbG9jYXRpb25zOiAobWFwYWxsb2NfdCltYXBhbGxvYzsKQGVuZAoKQGlu dGVyZmFjZSBDcmVhdGVfYnljb3B5OiBDcmVhdGVCeV9jCgotIGNyZWF0ZTogYVpvbmU7CkBlbmQK CkBpbnRlcmZhY2UgQ3JlYXRlX2J5c2VuZDogQ3JlYXRlQnlfYwoKLSBjcmVhdGU6IGFab25lOwpA ZW5kCgpAaW50ZXJmYWNlIENyZWF0ZV9ieWJvdGg6IENyZWF0ZUJ5X2MKCi0gY3JlYXRlOiBhWm9u ZTsKQGVuZAoKCgoKZXh0ZXJuIGlubGluZSBDbGFzcwpnZXROZXh0UGhhc2UgKGlkIGFDbGFzcykK ewogIHJldHVybiAoQ2xhc3MpICgoQmVoYXZpb3JQaGFzZV9zICopIGFDbGFzcyktPm5leHRQaGFz ZTsKfQoKCgoKZXh0ZXJuIGlubGluZSB2b2lkCnNldE5leHRQaGFzZSAoaWQgYW5PYmplY3QpCnsK ICAqKENsYXNzICopIGFuT2JqZWN0ID0gKENsYXNzKSAoKihCZWhhdmlvclBoYXNlX3MgKiopIGFu T2JqZWN0KS0+bmV4dFBoYXNlOwp9CiMgMTMgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZv YmovQ3JlYXRlLmgiIDIKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9i c2VydmVyU3dhcm0ubWkgICAgICAgICAgICAgIFBhZ2UgIDEyNwoKCgoKCgpAaW50ZXJmYWNlIENy ZWF0ZURyb3BfczogQ3VzdG9taXplX3MKCisgY3JlYXRlOiBhWm9uZTsKKyBjcmVhdGVCZWdpbjog YVpvbmU7Ci0gY3JlYXRlRW5kOwpAZW5kCgpAaW50ZXJmYWNlIENyZWF0ZURyb3A6IENyZWF0ZURy b3BfcwoKLSBjcmVhdGVFbmQ7CkBlbmQKIyAxMyAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2Fj dGl2aXR5L1hBY3Rpdml0eS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2 aXR5LmgiIDEKIyAxNCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL2FjdGl2aXR5L1hBY3Rpdml0 eS5oIiAyCgoKCgpAaW50ZXJmYWNlIEFjdGl2aXR5X2M6IE9iamVjdF9zIDxBY3Rpdml0eT4KewpA cHVibGljCiAgQWN0aXZpdHlfYyAqb3duZXJBY3Rpdml0eTsKICBpZCA8QWN0aW9uPiB0b3BMZXZl bEFjdGlvbjsKICBpZCA8U3ltYm9sPiBzdGF0dXM7CiAgbWVtYmVyX3QgYWN0aXZpdHlSZWZzOwoK ICBBY3Rpdml0eV9jICpyZWdpc3RlcmVkT3duZXJBY3Rpdml0eTsKICBpZCBhY3Rpdml0eVNldDsK ICBtZW1iZXJfdCBhY3Rpdml0eVNldFJlZnM7CgogIGlkIDxBY3Rpdml0eUluZGV4PiBjdXJyZW50 SW5kZXg7CgogIEFjdGl2aXR5X2MgKmN1cnJlbnRTdWJhY3Rpdml0eTsKICBCT09MICgqYnJlYWtG dW5jdGlvbikgKGlkKTsKICBCT09MIGtlZXBFbXB0eUZsYWc7Cn0KCi0gKGlkIDxTeW1ib2w+KXJ1 bjsKLSAoaWQgPFN5bWJvbD4pX3J1bl87Ci0gKHZvaWQpdGVybWluYXRlOwotICh2b2lkKXN0b3A7 Ci0gKGlkIDxTeW1ib2w+KW5leHRBY3Rpb247Ci0gKGlkIDxTeW1ib2w+KXN0ZXBBY3Rpb247Ci0g KGlkIDxTeW1ib2w+KWdldFN0YXR1czsKLSAoaWQgPFN5bWJvbD4pZ2V0SG9sZFR5cGU7Ci0gZ2V0 QWN0aW9uVHlwZTsKLSAoaWQgPEFjdGlvbj4pZ2V0QWN0aW9uOwotIF9nZXRTdWJhY3Rpdml0eUFj dGlvbl87Ci0gKHZvaWQpc2V0T3duZXJBY3Rpdml0eTogKGlkIDxTd2FybUFjdGl2aXR5PilhU3dh cm1BY3Rpdml0eTsKLSAoaWQgPEFjdGl2aXR5PilnZXRPd25lckFjdGl2aXR5OwotIChpZCA8QWN0 aXZpdHk+KWdldENvbnRyb2xsaW5nQWN0aXZpdHk7Ci0gKGlkIDxBY3Rpdml0eT4pZ2V0VG9wTGV2 ZWxBY3Rpdml0eTsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9ic2Vy dmVyU3dhcm0ubWkgICAgICAgICAgICAgIFBhZ2UgIDEyOAoKCi0gKGlkIDxTd2FybUFjdGl2aXR5 PilnZXRTd2FybUFjdGl2aXR5OwotIChpZCA8U2NoZWR1bGVBY3Rpdml0eT4pZ2V0U2NoZWR1bGVB Y3Rpdml0eTsKLSBnZXRTdWJhY3Rpdml0aWVzOwotICh2b2lkKXNldFNlcmlhbE1vZGU6IChCT09M KXNlcmlhbE1vZGU7Ci0gKEJPT0wpZ2V0U2VyaWFsTW9kZTsKLSBzZXRLZWVwRW1wdHlGbGFnOiAo Qk9PTClrZWVwRW1wdHlGbGFnOwotIChpZCA8QWN0aXZpdHk+KWdldEN1cnJlbnRTdWJhY3Rpdml0 eTsKLSAodm9pZCltYXBBbGxvY2F0aW9uczogKG1hcGFsbG9jX3QpbWFwYWxsb2M7Ci0gKHZvaWQp ZHJvcDsKLSAodm9pZClkZXNjcmliZTogb3V0cHV0Q2hhclN0cmVhbTsKQGVuZAojIDEzICIvdXNy L2xvY2FsL3N3YXJtL2luY2x1ZGUvYWN0aXZpdHkvU3dhcm1Qcm9jZXNzLmgiIDIKCkBjbGFzcyBT d2FybUFjdGl2aXR5X2MsIFNjaGVkdWxlQWN0aXZpdHlfYzsKCkBpbnRlcmZhY2UgQ1N3YXJtUHJv Y2VzczogQ3JlYXRlRHJvcF9zIDxTd2FybVByb2Nlc3M+CnsKQHB1YmxpYwogIGlkIGludGVybmFs Wm9uZTsKICBpZCBzeW5jVHlwZTsKICBTd2FybUFjdGl2aXR5X2MgKmFjdGl2aXR5Owp9CgotIChz aXplX3QpZ2V0UGFnZVNpemU7Ci0gYWxsb2NJVmFyczogYUNsYXNzOwotIGNvcHlJVmFyczogYW5P YmplY3Q7Ci0gKHZvaWQpZnJlZUlWYXJzOiBhbk9iamVjdDsKLSBhbGxvY0lWYXJzQ29tcG9uZW50 OiBhQ2xhc3M7Ci0gY29weUlWYXJzQ29tcG9uZW50OiBhbk9iamVjdDsKLSAodm9pZClmcmVlSVZh cnNDb21wb25lbnQ6IGFuT2JqZWN0OwotIGdldENvbXBvbmVudFpvbmU7Ci0gKHZvaWQgKilhbGxv YzogKHNpemVfdClzaXplOwotICh2b2lkKWZyZWU6ICh2b2lkICopIGFCbG9jazsKLSAodm9pZCAq KWFsbG9jQmxvY2s6IChzaXplX3Qpc2l6ZTsKLSAodm9pZClmcmVlQmxvY2s6ICh2b2lkICopYUJs b2NrIGJsb2NrU2l6ZTogKHNpemVfdClzaXplOwotIGdldFBvcHVsYXRpb247Ci0gKHZvaWQpIGRl c2NyaWJlRm9yRWFjaElEOiAoaWQpIG91dHB1dENoYXJTdHJlYW07Ci0gKHZvaWQpIGRlc2NyaWJl Rm9yRWFjaDogKGlkKSBvdXRwdXRDaGFyU3RyZWFtOwotIChCT09MKWdldFN0YWNrZWRTdWJ6b25l czsKLSBnZXRSZWNsYWltUG9saWN5OwoKCisgY3JlYXRlQmVnaW46IGFab25lOwotICh2b2lkKXNl dFN5bmNocm9uaXphdGlvblR5cGU6IGFTY2hlZHVsZVR5cGU7Ci0gKHZvaWQpc2V0SW50ZXJuYWxa b25lVHlwZTogaW50ZXJuYWxab25lVHlwZTsKLSAodm9pZClzZXRJbnRlcm5hbFRpbWVNdWx0aXBs aWVyOiAodGltZXZhbF90KWludGVybmFsVGltZU11bHRpcGxpZXI7Ci0gKHZvaWQpc2V0UGFnZVNp emU6IChzaXplX3QpcGFnZVNpemU7Ci0gY3JlYXRlRW5kOwotICh0aW1ldmFsX3QpZ2V0SW50ZXJu YWxUaW1lTXVsdGlwbGllcjsKLSBnZXRJbnRlcm5hbFpvbmU7Ci0gKGlkIDxTd2FybUFjdGl2aXR5 PilnZXRBY3Rpdml0eTsKLSAoaWQgPFN3YXJtQWN0aXZpdHk+KWdldFN3YXJtQWN0aXZpdHk7Ci0g Z2V0U3luY2hyb25pemF0aW9uVHlwZTsKLSBhY3RpdmF0ZTsKLSBhY3RpdmF0ZTogYW5BY3Rpb25U eXBlOwotIGF0OiAodGltZXZhbF90KXRWYWwgYWN0aXZhdGU6IGFuQWN0aW9uVHlwZTsKCgoKCgoK CjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBwbE9ic2VydmVyU3dhcm0ubWkgICAgICAg ICAgICAgIFBhZ2UgIDEyOQoKCi0gYXQ6IChpbnQpdGltZWJhc2UgOiAodGltZXZhbF90KXRWYWwg YWN0aXZhdGU6IGFuQWN0aW9uVHlwZTsKLSAoaWQgPEFjdGl2aXR5PilhY3RpdmF0ZUluOiBzd2Fy bUNvbnRleHQ7Ci0gKHZvaWQpbWFwQWxsb2NhdGlvbnM6IChtYXBhbGxvY190KW1hcGFsbG9jOwot ICh2b2lkKV9wZXJmb3JtUGxhbl87CkBlbmQKIyA4ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUv b2JqZWN0YmFzZS9Td2FybS5oIiAyCgpAaW50ZXJmYWNlIFN3YXJtOiBDU3dhcm1Qcm9jZXNzIDxT d2FybT4Kewp9CgoKLSBidWlsZE9iamVjdHM7Ci0gYnVpbGRBY3Rpb25zOwotIGFjdGl2YXRlSW46 IHN3YXJtQ29udGV4dDsKCgoKLSBnZXRQcm9iZU1hcDsKLSBnZXRDb21wbGV0ZVByb2JlTWFwOwot IGdldFByb2JlRm9yVmFyaWFibGU6IChjb25zdCBjaGFyICopYVZhcmlhYmxlOwoKQGVuZAojIDgg Ii91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9zaW10b29sc2d1aS9HVUlTd2FybS5oIiAyCgoKCgoK CgpAaW50ZXJmYWNlIEdVSVN3YXJtOiBTd2FybSA8R1VJU3dhcm0+CnsKICBpZCA8Q29udHJvbFBh bmVsPiBjb250cm9sUGFuZWw7CiAgaWQgPEFjdGlvbkNhY2hlPiBhY3Rpb25DYWNoZTsKICBjb25z dCBjaGFyICpiYXNlV2luZG93R2VvbWV0cnlSZWNvcmROYW1lOwogIEJPT0wgc2F2ZVNpemVGbGFn Owp9CgotIHNldFdpbmRvd0dlb21ldHJ5UmVjb3JkTmFtZTogKGNvbnN0IGNoYXIgKil3aW5kb3dH ZW9tZXRyeVJlY29yZE5hbWU7Ci0gc2V0U2F2ZVNpemVGbGFnOiAoQk9PTClzYXZlU2l6ZUZsYWc7 Ci0gc2V0V2luZG93R2VvbWV0cnlSZWNvcmROYW1lRm9yQ29tcG9uZW50OiAoY29uc3QgY2hhciAq KWNvbXBvbmVudE5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXQ6 IGFXaWRnZXQ7Ci0gKGlkIDxBY3Rpb25DYWNoZT4pZ2V0QWN0aW9uQ2FjaGU7Ci0gKGlkIDxDb250 cm9sUGFuZWw+KWdldENvbnRyb2xQYW5lbDsKLSBidWlsZE9iamVjdHM7Ci0gZ287Ci0gKHZvaWQp ZHJvcDsKQGVuZAojIDggIlBwbE9ic2VydmVyU3dhcm0uaCIgMgojIDEgIlBwbE1vZGVsU3dhcm0u aCIgMQoKCgoKCgoKCgoKCgoyMDAxLTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZl clN3YXJtLm1pICAgICAgICAgICAgICBQYWdlICAxMzAKCgojIDEgIi91c3IvbG9jYWwvc3dhcm0v aW5jbHVkZS9vYmplY3RiYXNlL1N3YXJtLmgiIDEKIyA3ICJQcGxNb2RlbFN3YXJtLmgiIDIKIyAx ICJDb3VudGVyLmgiIDEKCgoKCgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmplY3Ri YXNlL1N3YXJtT2JqZWN0LmgiIDEKIyA5ICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0 YmFzZS9Td2FybU9iamVjdC5oIgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9kZWZvYmov Q3JlYXRlLmgiIDEKIyAxMCAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2UvU3dh cm1PYmplY3QuaCIgMgojIDEgIi91c3IvbG9jYWwvc3dhcm0vaW5jbHVkZS9vYmplY3RiYXNlLmgi IDEKIyAxMSAiL3Vzci9sb2NhbC9zd2FybS9pbmNsdWRlL29iamVjdGJhc2UvU3dhcm1PYmplY3Qu aCIgMgoKQGludGVyZmFjZSBTd2FybU9iamVjdDogQ3JlYXRlRHJvcCA8U3dhcm1PYmplY3Q+CnsK fQoKLSBnZXRQcm9iZU1hcDsKLSBnZXRDb21wbGV0ZVByb2JlTWFwOwotIGdldFByb2JlRm9yVmFy aWFibGU6IChjb25zdCBjaGFyICopYVZhcmlhYmxlOwotIGdldFByb2JlRm9yTWVzc2FnZTogKGNv bnN0IGNoYXIgKilhTWVzc2FnZTsKLSAodm9pZClldmVudE9jY3VycmVkT246IGFuT2JqZWN0CiAg ICAgICAgICAgICAgICAgICAgdmlhOiBhUHJvYmUKICAgICAgICAgIHdpdGhQcm9iZVR5cGU6IChj b25zdCBjaGFyICopYVByb2JlVHlwZQogICAgICAgICAgICAgICAgICAgICBvbjogKGNvbnN0IGNo YXIgKilwcm9iZWRFbGVtZW50CiAgICAgICAgICAgICAgICAgb2ZUeXBlOiAoY2hhcilkYXRhVHlw ZQogICAgICAgICAgICAgICB3aXRoRGF0YTogKHZvaWQgKilkYXRhOwpAZW5kCiMgNyAiQ291bnRl ci5oIiAyCgoKCkBpbnRlcmZhY2UgQ291bnRlcjogU3dhcm1PYmplY3QKewogIGludCB2YWx1ZTsK ICBpbnQgaW5jcjsKfQoKLSBzdGVwOwotIHNldEluY3I6IChpbnQpIG47Ci0gcHJpbnQ7CgpAZW5k CiMgOCAiUHBsTW9kZWxTd2FybS5oIiAyCiMgMSAiUGVyc29uLmgiIDEKIyA5ICJQZXJzb24uaCIK IyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvb2JqZWN0YmFzZS9Td2FybU9iamVjdC5oIiAx CiMgMTAgIlBlcnNvbi5oIiAyCgoKdHlwZWRlZiBlbnVtIHsKICBudWxsID0gMCwKICBoZWxsbyA9 IDEsCn0gdG9waWNfdHlwZTsKCgoKCgoKCjIwMDEtMDgtMjQgMDE6MjEgICAgICAgICAgICAgIFBw bE9ic2VydmVyU3dhcm0ubWkgICAgICAgICAgICAgIFBhZ2UgIDEzMQoKCgoKCgpAaW50ZXJmYWNl IFBlcnNvbjogU3dhcm1PYmplY3QKewogIGlkIHdvcmxkOwogIGZsb2F0IHRvcGljc1syXTsKICBp bnQgdmFsdWU7CiAgaWQgbmFtZTsKfQoKCi0gc3RlcDsKCgotIHNldFdvcmxkOiBsOwoKCi0gc2V0 UGVyc29uOiBuIFRvcGljX2FycmF5OiAoZmxvYXQgKil0OwoKCi0gKGNvbnN0IGNoYXIgKilnZXRO YW1lOwoKCi0gcHJpbnQ7CgoKLSBzcGVhazogKHRvcGljX3R5cGUpIHRvcGljIFRvUGVyc29uOiAo aWQpdGFyZ2V0OwoKCi0gbG9vazsKCkBlbmQKIyA5ICJQcGxNb2RlbFN3YXJtLmgiIDIKCkBpbnRl cmZhY2UgUHBsTW9kZWxTd2FybTogU3dhcm0KewoKICBpbnQgaW5jcmVtZW50OwoKCgogIGludCBu dW1QcGw7CgogIGlkIHBwbExpc3Q7CgogIGlkIG1vZGVsQWN0aW9uczsKICBpZCBtb2RlbFNjaGVk dWxlOwoKCiAgQ291bnRlciAqY291bnRlcjsKfQoKCi0gKENvdW50ZXIgKilnZXRDb3VudGVyOwoK CgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2JzZXJ2ZXJTd2FybS5taSAg ICAgICAgICAgICAgUGFnZSAgMTMyCgoKCisgY3JlYXRlQmVnaW46IGFab25lOwotIGNyZWF0ZUVu ZDsKLSBidWlsZE9iamVjdHM7Ci0gYnVpbGRBY3Rpb25zOwotIGFjdGl2YXRlSW46IChpZCkgc3dh cm1Db250ZXh0OwoKQGVuZAojIDkgIlBwbE9ic2VydmVyU3dhcm0uaCIgMgoKCkBpbnRlcmZhY2Ug UHBsT2JzZXJ2ZXJTd2FybTogR1VJU3dhcm0KewogIGludCBkaXNwbGF5RnJlcXVlbmN5OwoKICBp ZCBkaXNwbGF5QWN0aW9uczsKICBpZCBkaXNwbGF5U2NoZWR1bGU7CgoKICBQcGxNb2RlbFN3YXJt KiBwcGxNb2RlbFN3YXJtOwoKICBDb3VudGVyKiBvYnNlcnZlZENvdW50ZXI7Cn0KCisgY3JlYXRl QmVnaW46IGFab25lOwotIGNyZWF0ZUVuZDsKLSBidWlsZE9iamVjdHM7Ci0gYnVpbGRBY3Rpb25z OwotIGFjdGl2YXRlSW46IHN3YXJtQ29udGV4dDsKCkBlbmQKIyA3ICJQcGxPYnNlcnZlclN3YXJt Lm0iIDIKIyAxICIvdXNyL2xvY2FsL3N3YXJtL2luY2x1ZGUvc2ltdG9vbHNndWkuaCIgMQojIDgg IlBwbE9ic2VydmVyU3dhcm0ubSIgMgoKCkBpbXBsZW1lbnRhdGlvbiBQcGxPYnNlcnZlclN3YXJt CgorIGNyZWF0ZUJlZ2luOiBhWm9uZQp7CiAgUHBsT2JzZXJ2ZXJTd2FybSAqIG9iajsKICBpZCA8 UHJvYmVNYXA+IHByb2JlTWFwOwoKICBvYmogPSBbc3VwZXIgY3JlYXRlQmVnaW46IGFab25lXTsK CgogIG9iai0+ZGlzcGxheUZyZXF1ZW5jeSA9IDE7CgogIHByb2JlTWFwID0gW0VtcHR5UHJvYmVN YXAgY3JlYXRlQmVnaW46IGFab25lXTsKICBbcHJvYmVNYXAgc2V0UHJvYmVkQ2xhc3M6IFtzZWxm IGNsYXNzXV07CiAgcHJvYmVNYXAgPSBbcHJvYmVNYXAgY3JlYXRlRW5kXTsKCgogIFtwcm9iZU1h cCBhZGRQcm9iZTogW3Byb2JlTGlicmFyeSBnZXRQcm9iZUZvclZhcmlhYmxlOiAiZGlzcGxheUZy ZXF1ZW5jeSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5DbGFzczogW3Nl bGYgY2xhc3NdXV07CgoKCgoKCgoKMjAwMS0wOC0yNCAwMToyMSAgICAgICAgICAgICAgUHBsT2Jz ZXJ2ZXJTd2FybS5taSAgICAgICAgICAgICAgUGFnZSAgMTMzCgoKICBbcHJvYmVMaWJyYXJ5IHNl dFByb2JlTWFwOiBwcm9iZU1hcCBGb3I6IFtzZWxmIGNsYXNzXV07CgogIHJldHVybiBvYmo7Cn0K CgotIGNyZWF0ZUVuZAp7CiAgcmV0dXJuIFtzdXBlciBjcmVhdGVFbmRdOwp9CgotIGJ1aWxkT2Jq ZWN0cwp7CiAgaWQgbW9kZWxab25lOwoKICBbc3VwZXIgYnVpbGRPYmplY3RzXTsKCgogIG1vZGVs Wm9uZSA9IFtab25lIGNyZWF0ZTogW3NlbGYgZ2V0Wm9uZV1dOwoKICBwcGxNb2RlbFN3YXJtID0g W1BwbE1vZGVsU3dhcm0gY3JlYXRlOiBtb2RlbFpvbmVdOwoKCiAgX2NyZWF0ZVByb2JlRGlzcGxh eShwcGxNb2RlbFN3YXJtKTsKCiAgX2NyZWF0ZVByb2JlRGlzcGxheShzZWxmKTsKCgogIFthY3Rp b25DYWNoZSB3YWl0Rm9yQ29udHJvbEV2ZW50XTsKCiAgaWYgKFtjb250cm9sUGFuZWwgZ2V0U3Rh dGVdID09IENvbnRyb2xTdGF0ZVF1aXQpCiAgICByZXR1cm4gc2VsZjsKCgogIFtwcGxNb2RlbFN3 YXJtIGJ1aWxkT2JqZWN0c107CgoKICBvYnNlcnZlZENvdW50ZXIgPSBbcHBsTW9kZWxTd2FybSBn ZXRDb3VudGVyXTsKCiAgcmV0dXJuIHNlbGY7Cn0KCi0gYnVpbGRBY3Rpb25zCnsKCiAgW3N1cGVy IGJ1aWxkQWN0aW9uc107CgoKICBbcHBsTW9kZWxTd2FybSBidWlsZEFjdGlvbnNdOwoKCiAgZGlz cGxheUFjdGlvbnMgPSBbQWN0aW9uR3JvdXAgY3JlYXRlOiBbc2VsZiBnZXRab25lXV07CgogIFtk aXNwbGF5QWN0aW9ucyBjcmVhdGVBY3Rpb25Ubzogb2JzZXJ2ZWRDb3VudGVyIG1lc3NhZ2U6IEBz ZWxlY3RvciAocHJpbnQpXTsKCiAgW2Rpc3BsYXlBY3Rpb25zIGNyZWF0ZUFjdGlvblRvOiBwcm9i ZURpc3BsYXlNYW5hZ2VyIG1lc3NhZ2U6IEBzZWxlY3RvciAodXBkYXRlKV07CgoKCgoKCgoyMDAx LTA4LTI0IDAxOjIxICAgICAgICAgICAgICBQcGxPYnNlcnZlclN3YXJtLm1pICAgICAgICAgICAg ICBQYWdlICAxMzQKCgoKICBbZGlzcGxheUFjdGlvbnMgY3JlYXRlQWN0aW9uVG86IGFjdGlvbkNh Y2hlIG1lc3NhZ2U6IEBzZWxlY3RvciAoZG9Ua0V2ZW50cyldOwoKCiAgZGlzcGxheVNjaGVkdWxl ID0gW1NjaGVkdWxlIGNyZWF0ZUJlZ2luOiBbc2VsZiBnZXRab25lXV07CiAgW2Rpc3BsYXlTY2hl ZHVsZSBzZXRSZXBlYXRJbnRlcnZhbDogZGlzcGxheUZyZXF1ZW5jeV07CiAgZGlzcGxheVNjaGVk dWxlID0gW2Rpc3BsYXlTY2hlZHVsZSBjcmVhdGVFbmRdOwogIFtkaXNwbGF5U2NoZWR1bGUgYXQ6 IDAgY3JlYXRlQWN0aW9uOiBkaXNwbGF5QWN0aW9uc107CgogIHJldHVybiBzZWxmOwp9CgotIGFj dGl2YXRlSW46IHN3YXJtQ29udGV4dAp7CgogIFtzdXBlciBhY3RpdmF0ZUluOiBzd2FybUNvbnRl eHRdOwoKCiAgW3BwbE1vZGVsU3dhcm0gYWN0aXZhdGVJbjogc2VsZl07CgogIFtkaXNwbGF5U2No ZWR1bGUgYWN0aXZhdGVJbjogc2VsZl07CgogIHJldHVybiBbc2VsZiBnZXRTd2FybUFjdGl2aXR5 XTsKfQoKQGVuZAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg==