From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-0.2 required=5.0 tests=ALL_TRUSTED, DKIM_ADSP_NXDOMAIN autolearn=no autolearn_force=no version=3.4.4 Received: (qmail 23580 invoked from network); 23 Jan 2022 21:38:23 -0000 Received: from localhost (HELO inbox.vuxu.org) (::1) by localhost with ESMTPUTF8; 23 Jan 2022 21:38:23 -0000 Content-Type: multipart/mixed; boundary="===============5253650492069075903==" MIME-Version: 1.0 Subject: =?utf8?q?=5BPR_PATCH=5D_gitg=3A_update_to_41=2C_libgit2-glib=3A_update_to_1=2E0=2E0=2E1=2E?= To: ml@inbox.vuxu.org From: paper42 Reply-to: ml@inbox.vuxu.org Message-ID: Date: Sun, 23 Jan 2022 22:38:23 +0100 List-Id: GitHub notification mails are now in MIME to allow UTF8. --===============5253650492069075903== Content-Type: text/plain; charset="utf8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 VGhlcmUgaXMgYSBuZXcgcHVsbCByZXF1ZXN0IGJ5IHBhcGVyNDIgYWdhaW5zdCBtYXN0ZXIgb24g dGhlIHZvaWQtcGFja2FnZXMgcmVwb3NpdG9yeQoKaHR0cHM6Ly9naXRodWIuY29tL3BhcGVyNDIv dm9pZC1wYWNrYWdlcyBnaXRnLTQxCmh0dHBzOi8vZ2l0aHViLmNvbS92b2lkLWxpbnV4L3ZvaWQt cGFja2FnZXMvcHVsbC8zNTIxMQoKZ2l0ZzogdXBkYXRlIHRvIDQxLCBsaWJnaXQyLWdsaWI6IHVw ZGF0ZSB0byAxLjAuMC4xLgo8IS0tIFVuY29tbWVudCByZWxldmFudCBzZWN0aW9ucyBhbmQgZGVs ZXRlIG9wdGlvbnMgd2hpY2ggYXJlIG5vdCBhcHBsaWNhYmxlIC0tPg0KDQojIyMjIFRlc3Rpbmcg dGhlIGNoYW5nZXMNCi0gSSB0ZXN0ZWQgdGhlIGNoYW5nZXMgaW4gdGhpcyBQUjogKipicmllZmx5 KioNCg0KPCEtLQ0KIyMjIyBOZXcgcGFja2FnZQ0KLSBUaGlzIG5ldyBwYWNrYWdlIGNvbmZvcm1z IHRvIHRoZSBbcXVhbGl0eSByZXF1aXJlbWVudHNdKGh0dHBzOi8vZ2l0aHViLmNvbS92b2lkLWxp bnV4L3ZvaWQtcGFja2FnZXMvYmxvYi9tYXN0ZXIvTWFudWFsLm1kI3F1YWxpdHktcmVxdWlyZW1l bnRzKTogKipZRVMqKnwqKk5PKioNCi0tPg0KDQo8IS0tIE5vdGU6IElmIHRoZSBidWlsZCBpcyBs aWtlbHkgdG8gdGFrZSBtb3JlIHRoYW4gMiBob3VycywgcGxlYXNlIFtza2lwIENJXShodHRwczov L2dpdGh1Yi5jb20vdm9pZC1saW51eC92b2lkLXBhY2thZ2VzL2Jsb2IvbWFzdGVyL0NPTlRSSUJV VElORy5tZCNjb250aW51b3VzLWludGVncmF0aW9uKQ0KYW5kIHRlc3QgYXQgbGVhc3Qgb25lIG5h dGl2ZSBidWlsZCBhbmQsIGlmIHN1cHBvcnRlZCwgYXQgbGVhc3Qgb25lIGNyb3NzIGJ1aWxkLg0K SWdub3JlIHRoaXMgc2VjdGlvbiBpZiB0aGlzIFBSIGlzIG5vdCBza2lwcGluZyBDSS4NCi0tPg0K PCEtLSANCiMjIyMgTG9jYWwgYnVpbGQgdGVzdGluZw0KLSBJIGJ1aWx0IHRoaXMgUFIgbG9jYWxs eSBmb3IgbXkgbmF0aXZlIGFyY2hpdGVjdHVyZSwgKEFSQ0gtTElCQykNCi0gSSBidWlsdCB0aGlz IFBSIGxvY2FsbHkgZm9yIHRoZXNlIGFyY2hpdGVjdHVyZXMgKGlmIHN1cHBvcnRlZC4gbWFyayBj cm9zc2J1aWxkcyk6DQogIC0gYWFyY2g2NC1tdXNsDQogIC0gYXJtdjdsDQogIC0gYXJtdjZsLW11 c2wNCi0tPg0KCgpBIHBhdGNoIGZpbGUgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vdm9pZC1saW51 eC92b2lkLXBhY2thZ2VzL3B1bGwvMzUyMTEucGF0Y2ggaXMgYXR0YWNoZWQ= --===============5253650492069075903== Content-Type: text/x-diff MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="github-pr-gitg-41-35211.patch" RnJvbSAxYzdlOWYzZDE3MzNkMDY5MjlhNTc0YTc1NDNkZGY5OWE3NTQ1NTAwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWNoYWwgVmFzaWxlayA8bWljaGFsQHZhc2lsZWsuY3o+CkRh dGU6IFN1biwgMjMgSmFuIDIwMjIgMjI6MzQ6MzQgKzAxMDAKU3ViamVjdDogW1BBVENIIDEvMl0g bGliZ2l0Mi1nbGliOiB1cGRhdGUgdG8gMS4wLjAuMS4KCi0tLQogc3JjcGtncy9saWJnaXQyLWds aWIvcGF0Y2hlcy9tZXNvbi12YXBpLWxpbmsucGF0Y2ggfCAxMSAtLS0tLS0tLS0tLQogc3JjcGtn cy9saWJnaXQyLWdsaWIvdGVtcGxhdGUgICAgICAgICAgICAgICAgICAgICAgfCAxMSArKysrKyst LS0tLQogMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQog ZGVsZXRlIG1vZGUgMTAwNjQ0IHNyY3BrZ3MvbGliZ2l0Mi1nbGliL3BhdGNoZXMvbWVzb24tdmFw aS1saW5rLnBhdGNoCgpkaWZmIC0tZ2l0IGEvc3JjcGtncy9saWJnaXQyLWdsaWIvcGF0Y2hlcy9t ZXNvbi12YXBpLWxpbmsucGF0Y2ggYi9zcmNwa2dzL2xpYmdpdDItZ2xpYi9wYXRjaGVzL21lc29u LXZhcGktbGluay5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M5MDIyMmFh YzM2Li4wMDAwMDAwMDAwMDAKLS0tIGEvc3JjcGtncy9saWJnaXQyLWdsaWIvcGF0Y2hlcy9tZXNv bi12YXBpLWxpbmsucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi0tLS0gYS9t ZXNvbl92YXBpX2xpbmsucHkJMjAyMC0wOC0yMiAxNDozNjozOC41MDkxMjM5ODQgKzA3MDAKLSsr KyBiL21lc29uX3ZhcGlfbGluay5weQkyMDIwLTA4LTIyIDE0OjM3OjA1LjE5OTAyMTY1MyArMDcw MAotQEAgLTQsNyArNCw3IEBACi0gaW1wb3J0IHN1YnByb2Nlc3MKLSBpbXBvcnQgc3lzCi0gCi0t dmFwaWRpciA9IG9zLnBhdGguam9pbihvcy5lbnZpcm9uWydNRVNPTl9JTlNUQUxMX0RFU1RESVJf UFJFRklYJ10sIHN5cy5hcmd2WzFdLCAndmFsYScsICd2YXBpJykKLSt2YXBpZGlyID0gb3MucGF0 aC5qb2luKG9zLmVudmlyb25bJ0RFU1RESVInXSArIHN5cy5hcmd2WzFdLCAndmFsYScsICd2YXBp JykKLSAKLSAjIEZJWE1FOiBtZXNvbiB3aWxsIG5vdCB0cmFjayB0aGUgY3JlYXRpb24gb2YgdGhl c2UgZmlsZXMKLSAjICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vbWVzb25idWlsZC9tZXNvbi9i bG9iL21hc3Rlci9tZXNvbmJ1aWxkL3NjcmlwdHMvdW5pbnN0YWxsLnB5I0wzOQpkaWZmIC0tZ2l0 IGEvc3JjcGtncy9saWJnaXQyLWdsaWIvdGVtcGxhdGUgYi9zcmNwa2dzL2xpYmdpdDItZ2xpYi90 ZW1wbGF0ZQppbmRleCBiYWY3ZjQ0MGEyNDYuLmI2YjJlMWNmY2NiMyAxMDA2NDQKLS0tIGEvc3Jj cGtncy9saWJnaXQyLWdsaWIvdGVtcGxhdGUKKysrIGIvc3JjcGtncy9saWJnaXQyLWdsaWIvdGVt cGxhdGUKQEAgLTEsNyArMSw3IEBACiAjIFRlbXBsYXRlIGZpbGUgZm9yICdsaWJnaXQyLWdsaWIn CiBwa2duYW1lPWxpYmdpdDItZ2xpYgotdmVyc2lvbj0wLjk5LjAuMQotcmV2aXNpb249MwordmVy c2lvbj0xLjAuMC4xCityZXZpc2lvbj0xCiBidWlsZF9zdHlsZT1tZXNvbgogYnVpbGRfaGVscGVy PSJnaXIiCiBjb25maWd1cmVfYXJncz0iLURpbnRyb3NwZWN0aW9uPSQodm9wdF9pZiBnaXIgdHJ1 ZSBmYWxzZSkKQEAgLTExLDkgKzExLDEwIEBAIG1ha2VkZXBlbmRzPSJsaWJnbGliLWRldmVsIGxp YmdpdDItZGV2ZWwgcHl0aG9uLWdvYmplY3QtZGV2ZWwiCiBzaG9ydF9kZXNjPSJHbGliIHdyYXBw ZXIgbGlicmFyeSBhcm91bmQgbGliZ2l0MiIKIG1haW50YWluZXI9Ik9ycGhhbmVkIDxvcnBoYW5A dm9pZGxpbnV4Lm9yZz4iCiBsaWNlbnNlPSJMR1BMLTIuMS1vci1sYXRlciIKLWhvbWVwYWdlPSJo dHRwczovL2dpdGh1Yi5jb20vR05PTUUvbGliZ2l0Mi1nbGliIgotZGlzdGZpbGVzPSIke2hvbWVw YWdlfS9hcmNoaXZlL3Yke3ZlcnNpb259LnRhci5neiIKLWNoZWNrc3VtPTIyZGNjYzdhYTlmZjZm MjllZGY1MDM1MmIxN2Q1OGMzZjkyODliYTFjZmE3OTUyZjcwZDdmZWI0ODY3NmYxMGMKK2hvbWVw YWdlPSJodHRwczovL3dpa2kuZ25vbWUub3JnL1Byb2plY3RzL0xpYmdpdDItZ2xpYiIKK2NoYW5n ZWxvZz0iaHR0cHM6Ly9naXRsYWIuZ25vbWUub3JnL0dOT01FL2xpYmdpdDItZ2xpYi8tL3Jhdy9t YXN0ZXIvTkVXUyIKK2Rpc3RmaWxlcz0iJHtHTk9NRV9TSVRFfS8ke3BrZ25hbWV9LyR7dmVyc2lv biUuKi4qfS8ke3BrZ25hbWV9LSR7dmVyc2lvbn0udGFyLnh6IgorY2hlY2tzdW09NDYwYTVkNjkz Njk1MGNhMDhkMmQ4NTE4YmZjOTBjMTJiYjE4N2NmNmU2NzRkZTcxNWY3MDU1ZmM1ODEwMmI1Nwog CiBidWlsZF9vcHRpb25zPSJnaXIiCiBidWlsZF9vcHRpb25zX2RlZmF1bHQ9ImdpciIKCkZyb20g MTNiZGZkNmJiZWJkNTM2MTc5NTA1MWIzNjBhMzc2ZWNkYTM4MWVlNiBNb24gU2VwIDE3IDAwOjAw OjAwIDIwMDEKRnJvbTogTWljaGFsIFZhc2lsZWsgPG1pY2hhbEB2YXNpbGVrLmN6PgpEYXRlOiBT dW4sIDIzIEphbiAyMDIyIDIyOjM0OjM2ICswMTAwClN1YmplY3Q6IFtQQVRDSCAyLzJdIGdpdGc6 IHVwZGF0ZSB0byA0MS4KCi0tLQogLi4uMDAwMS1tZXNvbi1maXgtYnVpbGQtd2l0aC1tZXNvbi0w LjYxLnBhdGNoIHwgICAzMyArCiBzcmNwa2dzL2dpdGcvcGF0Y2hlcy92YWxhLnBhdGNoICAgICAg ICAgICAgICAgfCAgIDI5IC0KIHNyY3BrZ3MvZ2l0Zy9wYXRjaGVzL3ZhcGkucGF0Y2ggICAgICAg ICAgICAgICB8IDg1OTQgLS0tLS0tLS0tLS0tLS0tLS0KIHNyY3BrZ3MvZ2l0Zy90ZW1wbGF0ZSAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTcgKy0KIDQgZmlsZXMgY2hhbmdlZCwgNDIgaW5z ZXJ0aW9ucygrKSwgODYzMSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmNwa2dz L2dpdGcvcGF0Y2hlcy8wMDAxLW1lc29uLWZpeC1idWlsZC13aXRoLW1lc29uLTAuNjEucGF0Y2gK IGRlbGV0ZSBtb2RlIDEwMDY0NCBzcmNwa2dzL2dpdGcvcGF0Y2hlcy92YWxhLnBhdGNoCiBkZWxl dGUgbW9kZSAxMDA2NDQgc3JjcGtncy9naXRnL3BhdGNoZXMvdmFwaS5wYXRjaAoKZGlmZiAtLWdp dCBhL3NyY3BrZ3MvZ2l0Zy9wYXRjaGVzLzAwMDEtbWVzb24tZml4LWJ1aWxkLXdpdGgtbWVzb24t MC42MS5wYXRjaCBiL3NyY3BrZ3MvZ2l0Zy9wYXRjaGVzLzAwMDEtbWVzb24tZml4LWJ1aWxkLXdp dGgtbWVzb24tMC42MS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLjMzMGQ0NWZjNWFkOAotLS0gL2Rldi9udWxsCisrKyBiL3NyY3BrZ3MvZ2l0Zy9wYXRjaGVz LzAwMDEtbWVzb24tZml4LWJ1aWxkLXdpdGgtbWVzb24tMC42MS5wYXRjaApAQCAtMCwwICsxLDMz IEBACitGcm9tIGM4MWUxNTc5YWZlN2YyMjEzNzFiNjg2NmMyNWYzODhmNDg3NDc3MjggTW9uIFNl cCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWNoYWwgVmFzaWxlayA8bWljaGFsQHZhc2lsZWsu Y3o+CitEYXRlOiBTdW4sIDIzIEphbiAyMDIyIDE0OjU0OjMxICswMTAwCitTdWJqZWN0OiBbUEFU Q0hdIG1lc29uOiBmaXggYnVpbGQgd2l0aCBtZXNvbiAwLjYxCisKK2kxOG4ubWVyZ2VfZmlsZSBk b2Vzbid0IGFjY2VwdCBwb3NpdGlvbmFsIGFyZ3VtZW50cworLS0tCisgZGF0YS9tZXNvbi5idWls ZCB8IDIgLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBh L2RhdGEvbWVzb24uYnVpbGQgYi9kYXRhL21lc29uLmJ1aWxkCitpbmRleCBhOGI5MGZkMS4uMjQx MzUzMWQgMTAwNjQ0CistLS0gYS9kYXRhL21lc29uLmJ1aWxkCisrKysgYi9kYXRhL21lc29uLmJ1 aWxkCitAQCAtNiw3ICs2LDYgQEAgZGVza3RvcF9jb25maWcgPSBjb25maWd1cmF0aW9uX2RhdGEo KQorIGRlc2t0b3BfY29uZmlnLnNldCgnaWNvbicsIGFwcGxpY2F0aW9uX2lkKQorIGRlc2t0b3Bf Y29uZmlnLnNldCgnYmluYXJ5JywgZ2l0Z19uYW1lKQorIGkxOG4ubWVyZ2VfZmlsZSgKKy0gIGRl c2t0b3AsCisgICB0eXBlOiAnZGVza3RvcCcsCisgICBpbnB1dDogY29uZmlndXJlX2ZpbGUoCisg ICAgIGlucHV0OiBkZXNrdG9wICsgJy5pbi5pbicsCitAQCAtNDIsNyArNDEsNiBAQCBhcHBkYXRh X2NvbmZpZyA9IGNvbmZpZ3VyYXRpb25fZGF0YSgpCisgYXBwZGF0YV9jb25maWcuc2V0KCdhcHAt aWQnLCBhcHBsaWNhdGlvbl9pZCkKKyBhcHBkYXRhX2NvbmZpZy5zZXQoJ2dldHRleHQnLCBnaXRn X25hbWUpCisgaTE4bi5tZXJnZV9maWxlKAorLSAgYXBwZGF0YSwKKyAgIHR5cGU6ICd4bWwnLAor ICAgaW5wdXQ6IGNvbmZpZ3VyZV9maWxlKAorICAgICBpbnB1dDogYXBwZGF0YSArICcuaW4uaW4n LAorLS0gCisyLjM0LjEKKwpkaWZmIC0tZ2l0IGEvc3JjcGtncy9naXRnL3BhdGNoZXMvdmFsYS5w YXRjaCBiL3NyY3BrZ3MvZ2l0Zy9wYXRjaGVzL3ZhbGEucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IGJkMGY1MWViMjM5Yy4uMDAwMDAwMDAwMDAwCi0tLSBhL3NyY3BrZ3MvZ2l0 Zy9wYXRjaGVzL3ZhbGEucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0tLS0g YS9saWJnaXRnL2dpdGctZGlmZi12aWV3LWZpbGUtc2VsZWN0YWJsZS52YWxhCTIwMTktMDctMjUg MTM6MTM6MDEuMDAwMDAwMDAwICswMjAwCi0rKysgYi9saWJnaXRnL2dpdGctZGlmZi12aWV3LWZp bGUtc2VsZWN0YWJsZS52YWxhCTIwMjAtMDktMDYgMTQ6MzY6MjYuMzc0OTY1MjIwICswMjAwCi1A QCAtNTQsNyArNTQsNyBAQAotIAotIAkJYnVmZmVyLmdldF9zdGFydF9pdGVyKG91dCBpdGVyKTsK LSAKLS0JCXdoaWxlIChidWZmZXIuZm9yd2FyZF9pdGVyX3RvX3NvdXJjZV9tYXJrKHJlZiBpdGVy LCBkX3NlbGVjdGlvbl9jYXRlZ29yeSkpCi0rCQl3aGlsZSAoYnVmZmVyLmZvcndhcmRfaXRlcl90 b19zb3VyY2VfbWFyayhpdGVyLCBkX3NlbGVjdGlvbl9jYXRlZ29yeSkpCi0gCQl7Ci0gCQkJcmV0 ICs9IGl0ZXIuZ2V0X2xpbmUoKTsKLSAJCX0KLUBAIC0zMjEsNyArMzIxLDcgQEAKLSAKLSAJCXZh ciBidWZmZXIgPSBzb3VyY2Vfdmlldy5idWZmZXIgYXMgR3RrLlNvdXJjZUJ1ZmZlcjsKLSAKLS0J CWlmICghYnVmZmVyLmZvcndhcmRfaXRlcl90b19zb3VyY2VfbWFyayhyZWYgaXRlciwgImhlYWRl ciIpKQotKwkJaWYgKCFidWZmZXIuZm9yd2FyZF9pdGVyX3RvX3NvdXJjZV9tYXJrKGl0ZXIsICJo ZWFkZXIiKSkKLSAJCXsKLSAJCQlpdGVyLmZvcndhcmRfdG9fZW5kKCk7Ci0gCQl9Ci1AQCAtNDkz LDcgKzQ5Myw3IEBACi0gCQl9Ci0gCQllbHNlCi0gCQl7Ci0tCQkJc29tZXRoaW5nX3NlbGVjdGVk ID0gKGJ1ZmZlciBhcyBHdGsuU291cmNlQnVmZmVyKS5mb3J3YXJkX2l0ZXJfdG9fc291cmNlX21h cmsocmVmIGl0ZXIsIGRfc2VsZWN0aW9uX2NhdGVnb3J5KTsKLSsJCQlzb21ldGhpbmdfc2VsZWN0 ZWQgPSAoYnVmZmVyIGFzIEd0ay5Tb3VyY2VCdWZmZXIpLmZvcndhcmRfaXRlcl90b19zb3VyY2Vf bWFyayhpdGVyLCBkX3NlbGVjdGlvbl9jYXRlZ29yeSk7Ci0gCQl9Ci0gCi0gCQlpZiAoc29tZXRo aW5nX3NlbGVjdGVkICE9IGhhc19zZWxlY3Rpb24pCmRpZmYgLS1naXQgYS9zcmNwa2dzL2dpdGcv cGF0Y2hlcy92YXBpLnBhdGNoIGIvc3JjcGtncy9naXRnL3BhdGNoZXMvdmFwaS5wYXRjaApkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA3YjhjMDk5NjdiLi4wMDAwMDAwMDAwMDAKLS0t IGEvc3JjcGtncy9naXRnL3BhdGNoZXMvdmFwaS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDg1 OTQgKzAsMCBAQAotRnJvbSBmZTRhOGJmMjA1YmM0YTFmMjc1M2NjZjgzZjA5NDZkNWVmNTUyMDJl IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQWxiZXJ0byBGYW5qdWwgPGFsYmVydG9m YW5qdWxAZ21haWwuY29tPgotRGF0ZTogV2VkLCA3IEF1ZyAyMDE5IDAwOjQxOjU2ICswMjAwCi1T dWJqZWN0OiBbUEFUQ0hdIHZhbGE6IFJlbW92ZSBvYnNvbGV0ZSB2YXBpIGZpbGVzCi0KLS0tLQot IHZhcGkvZ2lvLXdpbmRvd3MtMi4wLnZhcGkgICB8ICAgMjEgLQotIHZhcGkvZ2xpYi0yLjAudmFw aSAgICAgICAgICB8IDYxNzMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSB2 YXBpL2d0a3NvdXJjZXZpZXctMy4wLmRlcHMgfCAgICA3IC0KLSB2YXBpL2d0a3NvdXJjZXZpZXct My4wLnZhcGkgfCAgOTM3IC0tLS0tLQotIHZhcGkvbGlic291cC0yLjQuZGVwcyAgICAgICB8ICAg IDEgLQotIHZhcGkvbGlic291cC0yLjQudmFwaSAgICAgICB8IDEzOTYgLS0tLS0tLS0KLSA2IGZp bGVzIGNoYW5nZWQsIDg1MzUgZGVsZXRpb25zKC0pCi0gZGVsZXRlIG1vZGUgMTAwNjQ0IHZhcGkv Z2lvLXdpbmRvd3MtMi4wLnZhcGkKLSBkZWxldGUgbW9kZSAxMDA2NDQgdmFwaS9nbGliLTIuMC52 YXBpCi0gZGVsZXRlIG1vZGUgMTAwNjQ0IHZhcGkvZ3Rrc291cmNldmlldy0zLjAuZGVwcwotIGRl bGV0ZSBtb2RlIDEwMDY0NCB2YXBpL2d0a3NvdXJjZXZpZXctMy4wLnZhcGkKLSBkZWxldGUgbW9k ZSAxMDA2NDQgdmFwaS9saWJzb3VwLTIuNC5kZXBzCi0gZGVsZXRlIG1vZGUgMTAwNjQ0IHZhcGkv bGlic291cC0yLjQudmFwaQotCi1kaWZmIC0tZ2l0IGEvdmFwaS9naW8td2luZG93cy0yLjAudmFw aSBiL3ZhcGkvZ2lvLXdpbmRvd3MtMi4wLnZhcGkKLWRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAot aW5kZXggMzljOWRhMjguLjAwMDAwMDAwCi0tLS0gYS92YXBpL2dpby13aW5kb3dzLTIuMC52YXBp Ci0rKysgL2Rldi9udWxsCi1AQCAtMSwyMSArMCwwIEBACi0tW0NDb2RlIChjcHJlZml4ID0gIkci LCBsb3dlcl9jYXNlX2NwcmVmaXggPSAiZ18iKV0KLS1uYW1lc3BhY2UgR0xpYiB7Ci0tCVtDQ29k ZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJnaW8vZ3dpbjMyaW5wdXRzdHJlYW0uaCIpXQotLQlwdWJs aWMgY2xhc3MgV2luMzJJbnB1dFN0cmVhbSA6IEdMaWIuSW5wdXRTdHJlYW0gewotLQkJW0NDb2Rl IChoYXNfY29uc3RydWN0X2Z1bmN0aW9uID0gZmFsc2UsIHR5cGUgPSAiR0lucHV0U3RyZWFtKiIp XQotLQkJcHVibGljIFdpbjMySW5wdXRTdHJlYW0gKGludCBoYW5kbGUsIGJvb2wgY2xvc2VfZmQp OwotLQkJcHVibGljIGJvb2wgZ2V0X2Nsb3NlX2hhbmRsZSAoKTsKLS0JCXB1YmxpYyB2b2lkIHNl dF9jbG9zZV9oYW5kbGUgKGJvb2wgY2xvc2VfZmQpOwotLQkJcHVibGljIGJvb2wgY2xvc2VfaGFu ZGxlIHsgZ2V0OyBzZXQ7IH0KLS0JCXB1YmxpYyBpbnQgaGFuZGxlIHsgZ2V0OyBjb25zdHJ1Y3Q7 IH0KLS0JfQotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAiZ2lvL2d3aW4zMm91dHB1dHN0 cmVhbS5oIildCi0tCXB1YmxpYyBjbGFzcyBXaW4zMk91dHB1dFN0cmVhbSA6IEdMaWIuT3V0cHV0 U3RyZWFtIHsKLS0JCVtDQ29kZSAoaGFzX2NvbnN0cnVjdF9mdW5jdGlvbiA9IGZhbHNlLCB0eXBl ID0gIkdPdXRwdXRTdHJlYW0qIildCi0tCQlwdWJsaWMgV2luMzJPdXRwdXRTdHJlYW0gKGludCBo YW5kbGUsIGJvb2wgY2xvc2VfZmQpOwotLQkJcHVibGljIGJvb2wgZ2V0X2Nsb3NlX2hhbmRsZSAo KTsKLS0JCXB1YmxpYyB2b2lkIHNldF9jbG9zZV9oYW5kbGUgKGJvb2wgY2xvc2VfZmQpOwotLQkJ cHVibGljIGJvb2wgY2xvc2VfaGFuZGxlIHsgZ2V0OyBzZXQ7IH0KLS0JCXB1YmxpYyBpbnQgaGFu ZGxlIHsgZ2V0OyBjb25zdHJ1Y3Q7IH0KLS0JfQotLX0KLWRpZmYgLS1naXQgYS92YXBpL2dsaWIt Mi4wLnZhcGkgYi92YXBpL2dsaWItMi4wLnZhcGkKLWRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAot aW5kZXggMzdkZTk1OTIuLjAwMDAwMDAwCi0tLS0gYS92YXBpL2dsaWItMi4wLnZhcGkKLSsrKyAv ZGV2L251bGwKLUBAIC0xLDYxNzMgKzAsMCBAQAotLS8qIGdsaWItMi4wLnZhbGEKLS0gKgotLSAq IENvcHlyaWdodCAoQykgMjAwNi0yMDE0ICBKw7xyZyBCaWxsZXRlcgotLSAqIENvcHlyaWdodCAo QykgMjAwNi0yMDA4ICBSYWZmYWVsZSBTYW5kcmluaQotLSAqIENvcHlyaWdodCAoQykgMjAwNyAg TWF0aGlhcyBIYXNzZWxtYW5uCi0tICoKLS0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0tICogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotLSAqIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotLSAqIHZl cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgotLSAqCi0tICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0tICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLS0gKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotLSAqIExl c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0tICoKLS0gKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCi0tICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSAgVVNBCi0tICoKLS0g KiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiB5b3UgdXNlIGlubGluZSBmdW5jdGlvbnMgZnJv bSB0aGlzIGZpbGUsIHRoaXMKLS0gKiBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUg cmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQotLSAqIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0tICoKLS0gKiBBdXRob3I6Ci0tICogCUrDvHJnIEJp bGxldGVyIDxqQGJpdHJvbi5jaD4KLS0gKglSYWZmYWVsZSBTYW5kcmluaSA8cmFzYUBnbXguY2g+ Ci0tICoJTWF0aGlhcyBIYXNzZWxtYW5uIDxtYXRoaWFzLmhhc3NlbG1hbm5AZ214LmRlPgotLSAq LwotLQotLS8vRklYTUU6IFRoaXMgZmlsZSBpcyBhZGRlZCB0byBpbmNsdWRlIGZpeGVzIGluIGds aWItMi4wLnZhcGkgdGhhdCBzaG91bGQgYmUgcmVsZWFzZWQgb24gdmFsYSAwLjQzLjMuIFJlbW92 ZSB0aGVuLgotLQotLVtTaW1wbGVUeXBlXQotLVtHSVIgKG5hbWUgPSAiZ2Jvb2xlYW4iKV0KLS1b Q0NvZGUgKGNuYW1lID0gImdib29sZWFuIiwgY2hlYWRlcl9maWxlbmFtZSA9ICJnbGliLmgiLCB0 eXBlX2lkID0gIkdfVFlQRV9CT09MRUFOIiwgbWFyc2hhbGxlcl90eXBlX25hbWUgPSAiQk9PTEVB TiIsIGdldF92YWx1ZV9mdW5jdGlvbiA9ICJnX3ZhbHVlX2dldF9ib29sZWFuIiwgc2V0X3ZhbHVl X2Z1bmN0aW9uID0gImdfdmFsdWVfc2V0X2Jvb2xlYW4iLCBkZWZhdWx0X3ZhbHVlID0gIkZBTFNF IiwgdHlwZV9zaWduYXR1cmUgPSAiYiIpXQotLVtCb29sZWFuVHlwZV0KLS1wdWJsaWMgc3RydWN0 IGJvb2wgewotLQlwdWJsaWMgc3RyaW5nIHRvX3N0cmluZyAoKSB7Ci0tCQlpZiAodGhpcykgewot LQkJCXJldHVybiAidHJ1ZSI7Ci0tCQl9IGVsc2UgewotLQkJCXJldHVybiAiZmFsc2UiOwotLQkJ fQotLQl9Ci0tCi0tCXB1YmxpYyBzdGF0aWMgYm9vbCBwYXJzZSAoc3RyaW5nIHN0cikgewotLQkJ aWYgKHN0ciA9PSAidHJ1ZSIpIHsKLS0JCQlyZXR1cm4gdHJ1ZTsKLS0JCX0gZWxzZSB7Ci0tCQkJ cmV0dXJuIGZhbHNlOwotLQkJfQotLQl9Ci0tCXB1YmxpYyBzdGF0aWMgYm9vbCB0cnlfcGFyc2Ug KHN0cmluZyBzdHIsIG91dCBib29sIHJlc3VsdCA9IG51bGwpIHsKLS0JCWlmIChzdHIgPT0gInRy dWUiKSB7Ci0tCQkJcmVzdWx0ID0gdHJ1ZTsKLS0JCQlyZXR1cm4gdHJ1ZTsKLS0JCX0gZWxzZSBp ZiAoc3RyID09ICJmYWxzZSIpIHsKLS0JCQlyZXN1bHQgPSBmYWxzZTsKLS0JCQlyZXR1cm4gdHJ1 ZTsKLS0JCX0gZWxzZSB7Ci0tCQkJcmVzdWx0ID0gZmFsc2U7Ci0tCQkJcmV0dXJuIGZhbHNlOwot LQkJfQotLQl9Ci0tfQotLQotLVtTaW1wbGVUeXBlXQotLVtHSVIgKG5hbWUgPSAiZ2ludDgiKV0K LS1bQ0NvZGUgKGNuYW1lID0gImdjaGFyIiwgY3ByZWZpeCA9ICJnX2FzY2lpXyIsIGNoZWFkZXJf ZmlsZW5hbWUgPSAiZ2xpYi5oIiwgdHlwZV9pZCA9ICJHX1RZUEVfQ0hBUiIsIG1hcnNoYWxsZXJf dHlwZV9uYW1lID0gIkNIQVIiLCBnZXRfdmFsdWVfZnVuY3Rpb24gPSAiZ192YWx1ZV9nZXRfc2No YXIiLCBzZXRfdmFsdWVfZnVuY3Rpb24gPSAiZ192YWx1ZV9zZXRfc2NoYXIiLCBkZWZhdWx0X3Zh bHVlID0gIlwnXFwwXCciLCB0eXBlX3NpZ25hdHVyZSA9ICJ5IildCi0tW0ludGVnZXJUeXBlIChy YW5rID0gMiwgbWluID0gMCwgbWF4ID0gMTI3KV0KLS1wdWJsaWMgc3RydWN0IGNoYXIgewotLQlb Q0NvZGUgKGNuYW1lID0gImdfc3RyZHVwX3ByaW50ZiIsIGluc3RhbmNlX3BvcyA9IC0xKV0KLS0J cHVibGljIHN0cmluZyB0b19zdHJpbmcgKHN0cmluZyBmb3JtYXQgPSAiJWMiKTsKLS0JcHVibGlj IGJvb2wgaXNhbG51bSAoKTsKLS0JcHVibGljIGJvb2wgaXNhbHBoYSAoKTsKLS0JcHVibGljIGJv b2wgaXNjbnRybCAoKTsKLS0JcHVibGljIGJvb2wgaXNkaWdpdCAoKTsKLS0JcHVibGljIGJvb2wg aXNncmFwaCAoKTsKLS0JcHVibGljIGJvb2wgaXNsb3dlciAoKTsKLS0JcHVibGljIGJvb2wgaXNw cmludCAoKTsKLS0JcHVibGljIGJvb2wgaXNwdW5jdCAoKTsKLS0JcHVibGljIGJvb2wgaXNzcGFj ZSAoKTsKLS0JcHVibGljIGJvb2wgaXN1cHBlciAoKTsKLS0JcHVibGljIGJvb2wgaXN4ZGlnaXQg KCk7Ci0tCXB1YmxpYyBpbnQgZGlnaXRfdmFsdWUgKCk7Ci0tCXB1YmxpYyBpbnQgeGRpZ2l0X3Zh bHVlICgpOwotLQlwdWJsaWMgY2hhciB0b2xvd2VyICgpOwotLQlwdWJsaWMgY2hhciB0b3VwcGVy ICgpOwotLQotLQlbQ0NvZGUgKGNuYW1lID0gIk1JTiIpXQotLQlwdWJsaWMgc3RhdGljIGNoYXIg bWluIChjaGFyIGEsIGNoYXIgYik7Ci0tCVtDQ29kZSAoY25hbWUgPSAiTUFYIildCi0tCXB1Ymxp YyBzdGF0aWMgY2hhciBtYXggKGNoYXIgYSwgY2hhciBiKTsKLS0JW0NDb2RlIChjbmFtZSA9ICJD TEFNUCIpXQotLQlwdWJsaWMgY2hhciBjbGFtcCAoY2hhciBsb3csIGNoYXIgaGlnaCk7Ci0tfQot LQotLVtTaW1wbGVUeXBlXQotLVtHSVIgKG5hbWUgPSAiZ3VpbnQ4IildCi0tW0NDb2RlIChjbmFt ZSA9ICJndWNoYXIiLCBjaGVhZGVyX2ZpbGVuYW1lID0gImdsaWIuaCIsIHR5cGVfaWQgPSAiR19U WVBFX1VDSEFSIiwgbWFyc2hhbGxlcl90eXBlX25hbWUgPSAiVUNIQVIiLCBnZXRfdmFsdWVfZnVu Y3Rpb24gPSAiZ192YWx1ZV9nZXRfdWNoYXIiLCBzZXRfdmFsdWVfZnVuY3Rpb24gPSAiZ192YWx1 ZV9zZXRfdWNoYXIiLCBkZWZhdWx0X3ZhbHVlID0gIlwnXFwwXCciLCB0eXBlX3NpZ25hdHVyZSA9 ICJ5IildCi0tW0ludGVnZXJUeXBlIChyYW5rID0gMywgbWluID0gMCwgbWF4ID0gMjU1KV0KLS1w dWJsaWMgc3RydWN0IHVjaGFyIHsKLS0JW0NDb2RlIChjbmFtZSA9ICJnX3N0cmR1cF9wcmludGYi LCBpbnN0YW5jZV9wb3MgPSAtMSldCi0tCXB1YmxpYyBzdHJpbmcgdG9fc3RyaW5nIChzdHJpbmcg Zm9ybWF0ID0gIiVoaHUiKTsKLS0KLS0JW0NDb2RlIChjbmFtZSA9ICJNSU4iKV0KLS0JcHVibGlj IHN0YXRpYyB1Y2hhciBtaW4gKHVjaGFyIGEsIHVjaGFyIGIpOwotLQlbQ0NvZGUgKGNuYW1lID0g Ik1BWCIpXQotLQlwdWJsaWMgc3RhdGljIHVjaGFyIG1heCAodWNoYXIgYSwgdWNoYXIgYik7Ci0t CVtDQ29kZSAoY25hbWUgPSAiQ0xBTVAiKV0KLS0JcHVibGljIHVjaGFyIGNsYW1wICh1Y2hhciBs b3csIHVjaGFyIGhpZ2gpOwotLX0KLS0KLS1bU2ltcGxlVHlwZV0KLS1bR0lSIChuYW1lID0gImdp bnQiKV0KLS1bQ0NvZGUgKGNuYW1lID0gImdpbnQiLCBjaGVhZGVyX2ZpbGVuYW1lID0gImdsaWIu aCIsIHR5cGVfaWQgPSAiR19UWVBFX0lOVCIsIG1hcnNoYWxsZXJfdHlwZV9uYW1lID0gIklOVCIs IGdldF92YWx1ZV9mdW5jdGlvbiA9ICJnX3ZhbHVlX2dldF9pbnQiLCBzZXRfdmFsdWVfZnVuY3Rp b24gPSAiZ192YWx1ZV9zZXRfaW50IiwgZGVmYXVsdF92YWx1ZSA9ICIwIiwgZGVmYXVsdF92YWx1 ZV9vbl9lcnJvciA9ICItMSIsIHR5cGVfc2lnbmF0dXJlID0gImkiKV0KLS1bSW50ZWdlclR5cGUg KHJhbmsgPSA2KV0KLS1wdWJsaWMgc3RydWN0IGludCB7Ci0tCVtDQ29kZSAoY25hbWUgPSAiR19N SU5JTlQiKV0KLS0JcHVibGljIGNvbnN0IGludCBNSU47Ci0tCVtDQ29kZSAoY25hbWUgPSAiR19N QVhJTlQiKV0KLS0JcHVibGljIGNvbnN0IGludCBNQVg7Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAi Z19zdHJkdXBfcHJpbnRmIiwgaW5zdGFuY2VfcG9zID0gLTEpXQotLQlwdWJsaWMgc3RyaW5nIHRv X3N0cmluZyAoc3RyaW5nIGZvcm1hdCA9ICIlaSIpOwotLQotLQlbQ0NvZGUgKGNuYW1lID0gIk1J TiIpXQotLQlwdWJsaWMgc3RhdGljIGludCBtaW4gKGludCBhLCBpbnQgYik7Ci0tCVtDQ29kZSAo Y25hbWUgPSAiTUFYIildCi0tCXB1YmxpYyBzdGF0aWMgaW50IG1heCAoaW50IGEsIGludCBiKTsK LS0JW0NDb2RlIChjbmFtZSA9ICJDTEFNUCIpXQotLQlwdWJsaWMgaW50IGNsYW1wIChpbnQgbG93 LCBpbnQgaGlnaCk7Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiR0lOVF9UT19QT0lOVEVSIildCi0t CXB1YmxpYyB2b2lkKiB0b19wb2ludGVyICgpOwotLQlbQ0NvZGUgKGNuYW1lID0gIkdQT0lOVEVS X1RPX0lOVCIpXQotLQlwdWJsaWMgc3RhdGljIGludCBmcm9tX3BvaW50ZXIgKHZvaWQqIHApOwot LQotLQlbQ0NvZGUgKGNuYW1lID0gImFicyIsIGNoZWFkZXJfZmlsZW5hbWUgPSAic3RkbGliLmgi KV0KLS0JcHVibGljIGludCBhYnMgKCk7Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiR0lOVF9UT19C RSIpXQotLQlwdWJsaWMgaW50IHRvX2JpZ19lbmRpYW4gKCk7Ci0tCVtDQ29kZSAoY25hbWUgPSAi R0lOVF9UT19MRSIpXQotLQlwdWJsaWMgaW50IHRvX2xpdHRsZV9lbmRpYW4gKCk7Ci0tCi0tCVtD Q29kZSAoY25hbWUgPSAiR0lOVF9GUk9NX0JFIildCi0tCXB1YmxpYyBzdGF0aWMgaW50IGZyb21f YmlnX2VuZGlhbiAoaW50IHZhbCk7Ci0tCVtDQ29kZSAoY25hbWUgPSAiR0lOVF9GUk9NX0xFIild Ci0tCXB1YmxpYyBzdGF0aWMgaW50IGZyb21fbGl0dGxlX2VuZGlhbiAoaW50IHZhbCk7Ci0tCi0t CVtDQ29kZSAoY25hbWUgPSAiYXRvaSIsIGNoZWFkZXJfZmlsZW5hbWUgPSAic3RkbGliLmgiKV0K LS0JcHVibGljIHN0YXRpYyBpbnQgcGFyc2UgKHN0cmluZyBzdHIpOwotLX0KLS0KLS1bU2ltcGxl VHlwZV0KLS1bR0lSIChuYW1lID0gImd1aW50IildCi0tW0NDb2RlIChjbmFtZSA9ICJndWludCIs IGNoZWFkZXJfZmlsZW5hbWUgPSAiZ2xpYi5oIiwgdHlwZV9pZCA9ICJHX1RZUEVfVUlOVCIsIG1h cnNoYWxsZXJfdHlwZV9uYW1lID0gIlVJTlQiLCBnZXRfdmFsdWVfZnVuY3Rpb24gPSAiZ192YWx1 ZV9nZXRfdWludCIsIHNldF92YWx1ZV9mdW5jdGlvbiA9ICJnX3ZhbHVlX3NldF91aW50IiwgZGVm YXVsdF92YWx1ZSA9ICIwVSIsIHR5cGVfc2lnbmF0dXJlID0gInUiKV0KLS1bSW50ZWdlclR5cGUg KHJhbmsgPSA3KV0KLS1wdWJsaWMgc3RydWN0IHVpbnQgewotLQlbQ0NvZGUgKGNuYW1lID0gIjAi KV0KLS0JcHVibGljIGNvbnN0IHVpbnQgTUlOOwotLQlbQ0NvZGUgKGNuYW1lID0gIkdfTUFYVUlO VCIpXQotLQlwdWJsaWMgY29uc3QgdWludCBNQVg7Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiZ19z dHJkdXBfcHJpbnRmIiwgaW5zdGFuY2VfcG9zID0gLTEpXQotLQlwdWJsaWMgc3RyaW5nIHRvX3N0 cmluZyAoc3RyaW5nIGZvcm1hdCA9ICIldSIpOwotLQotLQlbQ0NvZGUgKGNuYW1lID0gIk1JTiIp XQotLQlwdWJsaWMgc3RhdGljIHVpbnQgbWluICh1aW50IGEsIHVpbnQgYik7Ci0tCVtDQ29kZSAo Y25hbWUgPSAiTUFYIildCi0tCXB1YmxpYyBzdGF0aWMgdWludCBtYXggKHVpbnQgYSwgdWludCBi KTsKLS0JW0NDb2RlIChjbmFtZSA9ICJDTEFNUCIpXQotLQlwdWJsaWMgdWludCBjbGFtcCAodWlu dCBsb3csIHVpbnQgaGlnaCk7Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiR1VJTlRfVE9fUE9JTlRF UiIpXQotLQlwdWJsaWMgdm9pZCogdG9fcG9pbnRlciAoKTsKLS0JW0NDb2RlIChjbmFtZSA9ICJH UE9JTlRFUl9UT19VSU5UIildCi0tCXB1YmxpYyBzdGF0aWMgdWludCBmcm9tX3BvaW50ZXIgKHZv aWQqIHApOwotLQotLQlbQ0NvZGUgKGNuYW1lID0gIkdVSU5UX1RPX0JFIildCi0tCXB1YmxpYyB1 aW50IHRvX2JpZ19lbmRpYW4gKCk7Ci0tCVtDQ29kZSAoY25hbWUgPSAiR1VJTlRfVE9fTEUiKV0K LS0JcHVibGljIHVpbnQgdG9fbGl0dGxlX2VuZGlhbiAoKTsKLS0KLS0JW0NDb2RlIChjbmFtZSA9 ICJHVUlOVF9GUk9NX0JFIildCi0tCXB1YmxpYyBzdGF0aWMgdWludCBmcm9tX2JpZ19lbmRpYW4g KHVpbnQgdmFsKTsKLS0JW0NDb2RlIChjbmFtZSA9ICJHVUlOVF9GUk9NX0xFIildCi0tCXB1Ymxp YyBzdGF0aWMgdWludCBmcm9tX2xpdHRsZV9lbmRpYW4gKHVpbnQgdmFsKTsKLS19Ci0tCi0tW1Np bXBsZVR5cGVdCi0tW0dJUiAobmFtZSA9ICJnc2hvcnQiKV0KLS1bQ0NvZGUgKGNuYW1lID0gImdz aG9ydCIsIGNoZWFkZXJfZmlsZW5hbWUgPSAiZ2xpYi5oIiwgdHlwZV9pZCA9ICJHX1RZUEVfSU5U IiwgbWFyc2hhbGxlcl90eXBlX25hbWUgPSAiSU5UIiwgZ2V0X3ZhbHVlX2Z1bmN0aW9uID0gImdf dmFsdWVfZ2V0X2ludCIsIHNldF92YWx1ZV9mdW5jdGlvbiA9ICJnX3ZhbHVlX3NldF9pbnQiLCBk ZWZhdWx0X3ZhbHVlID0gIjAiLCBkZWZhdWx0X3ZhbHVlX29uX2Vycm9yID0gIi0xIiwgdHlwZV9z aWduYXR1cmUgPSAibiIpXQotLVtJbnRlZ2VyVHlwZSAocmFuayA9IDQsIG1pbiA9IC0zMjc2OCwg bWF4ID0gMzI3NjcpXQotLXB1YmxpYyBzdHJ1Y3Qgc2hvcnQgewotLQlbQ0NvZGUgKGNuYW1lID0g IkdfTUlOU0hPUlQiKV0KLS0JcHVibGljIGNvbnN0IHNob3J0IE1JTjsKLS0JW0NDb2RlIChjbmFt ZSA9ICJHX01BWFNIT1JUIildCi0tCXB1YmxpYyBjb25zdCBzaG9ydCBNQVg7Ci0tCi0tCVtDQ29k ZSAoY25hbWUgPSAiZ19zdHJkdXBfcHJpbnRmIiwgaW5zdGFuY2VfcG9zID0gLTEpXQotLQlwdWJs aWMgc3RyaW5nIHRvX3N0cmluZyAoc3RyaW5nIGZvcm1hdCA9ICIlaGkiKTsKLS0KLS0JW0NDb2Rl IChjbmFtZSA9ICJNSU4iKV0KLS0JcHVibGljIHN0YXRpYyBzaG9ydCBtaW4gKHNob3J0IGEsIHNo b3J0IGIpOwotLQlbQ0NvZGUgKGNuYW1lID0gIk1BWCIpXQotLQlwdWJsaWMgc3RhdGljIHNob3J0 IG1heCAoc2hvcnQgYSwgc2hvcnQgYik7Ci0tCVtDQ29kZSAoY25hbWUgPSAiQ0xBTVAiKV0KLS0J cHVibGljIHNob3J0IGNsYW1wIChzaG9ydCBsb3csIHNob3J0IGhpZ2gpOwotLQlbQ0NvZGUgKGNu YW1lID0gImFicyIsIGNoZWFkZXJfZmlsZW5hbWUgPSAic3RkbGliLmgiKV0KLS0JcHVibGljIHNo b3J0IGFicyAoKTsKLS19Ci0tCi0tW1NpbXBsZVR5cGVdCi0tW0dJUiAobmFtZSA9ICJndXNob3J0 IildCi0tW0NDb2RlIChjbmFtZSA9ICJndXNob3J0IiwgY2hlYWRlcl9maWxlbmFtZSA9ICJnbGli LmgiLCB0eXBlX2lkID0gIkdfVFlQRV9VSU5UIiwgbWFyc2hhbGxlcl90eXBlX25hbWUgPSAiVUlO VCIsIGdldF92YWx1ZV9mdW5jdGlvbiA9ICJnX3ZhbHVlX2dldF91aW50Iiwgc2V0X3ZhbHVlX2Z1 bmN0aW9uID0gImdfdmFsdWVfc2V0X3VpbnQiLCBkZWZhdWx0X3ZhbHVlID0gIjBVIiwgdHlwZV9z aWduYXR1cmUgPSAicSIpXQotLVtJbnRlZ2VyVHlwZSAocmFuayA9IDUsIG1pbiA9IDAsIG1heCA9 IDY1NTM1KV0KLS1wdWJsaWMgc3RydWN0IHVzaG9ydCB7Ci0tCVtDQ29kZSAoY25hbWUgPSAiMFUi KV0KLS0JcHVibGljIGNvbnN0IHVzaG9ydCBNSU47Ci0tCVtDQ29kZSAoY25hbWUgPSAiR19NQVhV U0hPUlQiKV0KLS0JcHVibGljIGNvbnN0IHVzaG9ydCBNQVg7Ci0tCi0tCVtDQ29kZSAoY25hbWUg PSAiZ19zdHJkdXBfcHJpbnRmIiwgaW5zdGFuY2VfcG9zID0gLTEpXQotLQlwdWJsaWMgc3RyaW5n IHRvX3N0cmluZyAoc3RyaW5nIGZvcm1hdCA9ICIlaHUiKTsKLS0KLS0JW0NDb2RlIChjbmFtZSA9 ICJNSU4iKV0KLS0JcHVibGljIHN0YXRpYyB1c2hvcnQgbWluICh1c2hvcnQgYSwgdXNob3J0IGIp OwotLQlbQ0NvZGUgKGNuYW1lID0gIk1BWCIpXQotLQlwdWJsaWMgc3RhdGljIHVzaG9ydCBtYXgg KHVzaG9ydCBhLCB1c2hvcnQgYik7Ci0tCVtDQ29kZSAoY25hbWUgPSAiQ0xBTVAiKV0KLS0JcHVi bGljIHVzaG9ydCBjbGFtcCAodXNob3J0IGxvdywgdXNob3J0IGhpZ2gpOwotLX0KLS0KLS1bU2lt cGxlVHlwZV0KLS1bR0lSIChuYW1lID0gImdsb25nIildCi0tW0NDb2RlIChjbmFtZSA9ICJnbG9u ZyIsIGNoZWFkZXJfZmlsZW5hbWUgPSAiZ2xpYi5oIiwgdHlwZV9pZCA9ICJHX1RZUEVfTE9ORyIs IG1hcnNoYWxsZXJfdHlwZV9uYW1lID0gIkxPTkciLCBnZXRfdmFsdWVfZnVuY3Rpb24gPSAiZ192 YWx1ZV9nZXRfbG9uZyIsIHNldF92YWx1ZV9mdW5jdGlvbiA9ICJnX3ZhbHVlX3NldF9sb25nIiwg ZGVmYXVsdF92YWx1ZSA9ICIwTCIsIGRlZmF1bHRfdmFsdWVfb25fZXJyb3IgPSAiLTFMIildCi0t W0ludGVnZXJUeXBlIChyYW5rID0gOCldCi0tcHVibGljIHN0cnVjdCBsb25nIHsKLS0JW0NDb2Rl IChjbmFtZSA9ICJHX01JTkxPTkciKV0KLS0JcHVibGljIGNvbnN0IGxvbmcgTUlOOwotLQlbQ0Nv ZGUgKGNuYW1lID0gIkdfTUFYTE9ORyIpXQotLQlwdWJsaWMgY29uc3QgbG9uZyBNQVg7Ci0tCi0t CVtDQ29kZSAoY25hbWUgPSAiZ19zdHJkdXBfcHJpbnRmIiwgaW5zdGFuY2VfcG9zID0gLTEpXQot LQlwdWJsaWMgc3RyaW5nIHRvX3N0cmluZyAoc3RyaW5nIGZvcm1hdCA9ICIlbGkiKTsKLS0KLS0J W0NDb2RlIChjbmFtZSA9ICJNSU4iKV0KLS0JcHVibGljIHN0YXRpYyBsb25nIG1pbiAobG9uZyBh LCBsb25nIGIpOwotLQlbQ0NvZGUgKGNuYW1lID0gIk1BWCIpXQotLQlwdWJsaWMgc3RhdGljIGxv bmcgbWF4IChsb25nIGEsIGxvbmcgYik7Ci0tCVtDQ29kZSAoY25hbWUgPSAiQ0xBTVAiKV0KLS0J cHVibGljIGxvbmcgY2xhbXAgKGxvbmcgbG93LCBsb25nIGhpZ2gpOwotLQlbQ0NvZGUgKGNuYW1l ID0gImxhYnMiLCBjaGVhZGVyX2ZpbGVuYW1lID0gInN0ZGxpYi5oIildCi0tCXB1YmxpYyBsb25n IGFicyAoKTsKLS0KLS0JW0NDb2RlIChjbmFtZSA9ICJHTE9OR19UT19CRSIpXQotLQlwdWJsaWMg bG9uZyB0b19iaWdfZW5kaWFuICgpOwotLQlbQ0NvZGUgKGNuYW1lID0gIkdMT05HX1RPX0xFIild Ci0tCXB1YmxpYyBsb25nIHRvX2xpdHRsZV9lbmRpYW4gKCk7Ci0tCi0tCVtDQ29kZSAoY25hbWUg PSAiR0xPTkdfRlJPTV9CRSIpXQotLQlwdWJsaWMgc3RhdGljIGxvbmcgZnJvbV9iaWdfZW5kaWFu IChsb25nIHZhbCk7Ci0tCVtDQ29kZSAoY25hbWUgPSAiR0xPTkdfRlJPTV9MRSIpXQotLQlwdWJs aWMgc3RhdGljIGxvbmcgZnJvbV9saXR0bGVfZW5kaWFuIChsb25nIHZhbCk7Ci0tCi0tCVtDQ29k ZSAoY25hbWUgPSAic3RydG9sIiwgY2hlYWRlcl9maWxlbmFtZSA9ICJzdGRsaWIuaCIpXQotLQlz dGF0aWMgbG9uZyBzdHJ0b2wgKHN0cmluZyBucHRyLCBvdXQgY2hhciogZW5kcHRyLCB1aW50IF9i YXNlKTsKLS0KLS0JcHVibGljIHN0YXRpYyBsb25nIHBhcnNlIChzdHJpbmcgc3RyKSB7Ci0tCQly ZXR1cm4gc3RydG9sIChzdHIsIG51bGwsIDApOwotLQl9Ci0tCi0tCXB1YmxpYyBzdGF0aWMgYm9v bCB0cnlfcGFyc2UgKHN0cmluZyBzdHIsIG91dCBsb25nIHJlc3VsdCA9IG51bGwsIG91dCB1bm93 bmVkIHN0cmluZyB1bnBhcnNlZCA9IG51bGwpIHsKLS0JCWNoYXIqIGVuZHB0cjsKLS0JCXJlc3Vs dCA9IHN0cnRvbCAoc3RyLCBvdXQgZW5kcHRyLCAwKTsKLS0JCWlmIChlbmRwdHIgPT0gKGNoYXIq KSBzdHIgKyBzdHIubGVuZ3RoKSB7Ci0tCQkJdW5wYXJzZWQgPSAiIjsKLS0JCQlyZXR1cm4gdHJ1 ZTsKLS0JCX0gZWxzZSB7Ci0tCQkJdW5wYXJzZWQgPSAoc3RyaW5nKSBlbmRwdHI7Ci0tCQkJcmV0 dXJuIGZhbHNlOwotLQkJfQotLQl9Ci0tfQotLQotLVtTaW1wbGVUeXBlXQotLVtHSVIgKG5hbWUg PSAiZ3Vsb25nIildCi0tW0NDb2RlIChjbmFtZSA9ICJndWxvbmciLCBjaGVhZGVyX2ZpbGVuYW1l ID0gImdsaWIuaCIsIHR5cGVfaWQgPSAiR19UWVBFX1VMT05HIiwgbWFyc2hhbGxlcl90eXBlX25h bWUgPSAiVUxPTkciLCBnZXRfdmFsdWVfZnVuY3Rpb24gPSAiZ192YWx1ZV9nZXRfdWxvbmciLCBz ZXRfdmFsdWVfZnVuY3Rpb24gPSAiZ192YWx1ZV9zZXRfdWxvbmciLCBkZWZhdWx0X3ZhbHVlID0g IjBVTCIpXQotLVtJbnRlZ2VyVHlwZSAocmFuayA9IDkpXQotLXB1YmxpYyBzdHJ1Y3QgdWxvbmcg ewotLQlbQ0NvZGUgKGNuYW1lID0gIjBVTCIpXQotLQlwdWJsaWMgY29uc3QgdWxvbmcgTUlOOwot LQlbQ0NvZGUgKGNuYW1lID0gIkdfTUFYVUxPTkciKV0KLS0JcHVibGljIGNvbnN0IHVsb25nIE1B WDsKLS0KLS0JW0NDb2RlIChjbmFtZSA9ICJnX3N0cmR1cF9wcmludGYiLCBpbnN0YW5jZV9wb3Mg PSAtMSldCi0tCXB1YmxpYyBzdHJpbmcgdG9fc3RyaW5nIChzdHJpbmcgZm9ybWF0ID0gIiVsdSIp OwotLQotLQlbQ0NvZGUgKGNuYW1lID0gIk1JTiIpXQotLQlwdWJsaWMgc3RhdGljIHVsb25nIG1p biAodWxvbmcgYSwgdWxvbmcgYik7Ci0tCVtDQ29kZSAoY25hbWUgPSAiTUFYIildCi0tCXB1Ymxp YyBzdGF0aWMgdWxvbmcgbWF4ICh1bG9uZyBhLCB1bG9uZyBiKTsKLS0JW0NDb2RlIChjbmFtZSA9 ICJDTEFNUCIpXQotLQlwdWJsaWMgdWxvbmcgY2xhbXAgKHVsb25nIGxvdywgdWxvbmcgaGlnaCk7 Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiR1VMT05HX1RPX0JFIildCi0tCXB1YmxpYyB1bG9uZyB0 b19iaWdfZW5kaWFuICgpOwotLQlbQ0NvZGUgKGNuYW1lID0gIkdVTE9OR19UT19MRSIpXQotLQlw dWJsaWMgdWxvbmcgdG9fbGl0dGxlX2VuZGlhbiAoKTsKLS0KLS0JW0NDb2RlIChjbmFtZSA9ICJH VUxPTkdfRlJPTV9CRSIpXQotLQlwdWJsaWMgc3RhdGljIHVsb25nIGZyb21fYmlnX2VuZGlhbiAo dWxvbmcgdmFsKTsKLS0JW0NDb2RlIChjbmFtZSA9ICJHVUxPTkdfRlJPTV9MRSIpXQotLQlwdWJs aWMgc3RhdGljIHVsb25nIGZyb21fbGl0dGxlX2VuZGlhbiAodWxvbmcgdmFsKTsKLS0KLS0JW0ND b2RlIChjbmFtZSA9ICJzdHJ0b3VsIiwgY2hlYWRlcl9maWxlbmFtZSA9ICJzdGRsaWIuaCIpXQot LQlzdGF0aWMgdWxvbmcgc3RydG91bCAoc3RyaW5nIG5wdHIsIG91dCBjaGFyKiBlbmRwdHIsIHVp bnQgX2Jhc2UpOwotLQotLQlwdWJsaWMgc3RhdGljIHVsb25nIHBhcnNlIChzdHJpbmcgc3RyKSB7 Ci0tCQlyZXR1cm4gc3RydG91bCAoc3RyLCBudWxsLCAwKTsKLS0JfQotLQotLQlwdWJsaWMgc3Rh dGljIGJvb2wgdHJ5X3BhcnNlIChzdHJpbmcgc3RyLCBvdXQgdWxvbmcgcmVzdWx0ID0gbnVsbCwg b3V0IHVub3duZWQgc3RyaW5nIHVucGFyc2VkID0gbnVsbCkgewotLQkJY2hhciogZW5kcHRyOwot LQkJcmVzdWx0ID0gc3RydG91bCAoc3RyLCBvdXQgZW5kcHRyLCAwKTsKLS0JCWlmIChlbmRwdHIg PT0gKGNoYXIqKSBzdHIgKyBzdHIubGVuZ3RoKSB7Ci0tCQkJdW5wYXJzZWQgPSAiIjsKLS0JCQly ZXR1cm4gdHJ1ZTsKLS0JCX0gZWxzZSB7Ci0tCQkJdW5wYXJzZWQgPSAoc3RyaW5nKSBlbmRwdHI7 Ci0tCQkJcmV0dXJuIGZhbHNlOwotLQkJfQotLQl9Ci0tfQotLQotLVtTaW1wbGVUeXBlXQotLVtH SVIgKG5hbWUgPSAiZ3Vsb25nIildCi0tW0NDb2RlIChjbmFtZSA9ICJnc2l6ZSIsIGNoZWFkZXJf ZmlsZW5hbWUgPSAiZ2xpYi5oIiwgdHlwZV9pZCA9ICJHX1RZUEVfVUxPTkciLCBtYXJzaGFsbGVy X3R5cGVfbmFtZSA9ICJVTE9ORyIsIGdldF92YWx1ZV9mdW5jdGlvbiA9ICJnX3ZhbHVlX2dldF91 bG9uZyIsIHNldF92YWx1ZV9mdW5jdGlvbiA9ICJnX3ZhbHVlX3NldF91bG9uZyIsIGRlZmF1bHRf dmFsdWUgPSAiMFVMIildCi0tW0ludGVnZXJUeXBlIChyYW5rID0gOSldCi0tcHVibGljIHN0cnVj dCBzaXplX3QgewotLQlbQ0NvZGUgKGNuYW1lID0gIjBVTCIpXQotLQlwdWJsaWMgY29uc3QgdWxv bmcgTUlOOwotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi40IildCi0tCVtDQ29kZSAoY25hbWUgPSAi R19NQVhTSVpFIildCi0tCXB1YmxpYyBjb25zdCB1bG9uZyBNQVg7Ci0tCi0tCVtWZXJzaW9uIChz aW5jZSA9ICIyLjYiKV0KLS0JW0NDb2RlIChjbmFtZSA9ICJHX0dTSVpFX0ZPUk1BVCIpXQotLQlw dWJsaWMgY29uc3Qgc3RyaW5nIEZPUk1BVDsKLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuNiIpXQot LQlbQ0NvZGUgKGNuYW1lID0gIkdfR1NJWkVfTU9ESUZJRVIiKV0KLS0JcHVibGljIGNvbnN0IHN0 cmluZyBGT1JNQVRfTU9ESUZJRVI7Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiZ19zdHJkdXBfcHJp bnRmIiwgaW5zdGFuY2VfcG9zID0gLTEpXQotLQlwdWJsaWMgc3RyaW5nIHRvX3N0cmluZyAoc3Ry aW5nIGZvcm1hdCA9ICIlIiArIEZPUk1BVCk7Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiR1NJWkVf VE9fUE9JTlRFUiIpXQotLQlwdWJsaWMgdm9pZCogdG9fcG9pbnRlciAoKTsKLS0JW0NDb2RlIChj bmFtZSA9ICJHUE9JTlRFUl9UT19TSVpFIildCi0tCXB1YmxpYyBzdGF0aWMgc2l6ZV90IGZyb21f cG9pbnRlciAodm9pZCogcCk7Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiTUlOIildCi0tCXB1Ymxp YyBzdGF0aWMgc2l6ZV90IG1pbiAoc2l6ZV90IGEsIHNpemVfdCBiKTsKLS0JW0NDb2RlIChjbmFt ZSA9ICJNQVgiKV0KLS0JcHVibGljIHN0YXRpYyBzaXplX3QgbWF4IChzaXplX3QgYSwgc2l6ZV90 IGIpOwotLQlbQ0NvZGUgKGNuYW1lID0gIkNMQU1QIildCi0tCXB1YmxpYyBzaXplX3QgY2xhbXAg KHNpemVfdCBsb3csIHNpemVfdCBoaWdoKTsKLS19Ci0tCi0tW1NpbXBsZVR5cGVdCi0tW0dJUiAo bmFtZSA9ICJnbG9uZyIpXQotLVtDQ29kZSAoY25hbWUgPSAiZ3NzaXplIiwgY2hlYWRlcl9maWxl bmFtZSA9ICJnbGliLmgiLCB0eXBlX2lkID0gIkdfVFlQRV9MT05HIiwgbWFyc2hhbGxlcl90eXBl X25hbWUgPSAiTE9ORyIsIGdldF92YWx1ZV9mdW5jdGlvbiA9ICJnX3ZhbHVlX2dldF9sb25nIiwg c2V0X3ZhbHVlX2Z1bmN0aW9uID0gImdfdmFsdWVfc2V0X2xvbmciLCBkZWZhdWx0X3ZhbHVlID0g IjBMIiwgZGVmYXVsdF92YWx1ZV9vbl9lcnJvciA9ICItMUwiKV0KLS1bSW50ZWdlclR5cGUgKHJh bmsgPSA4KV0KLS1wdWJsaWMgc3RydWN0IHNzaXplX3QgewotLQlbVmVyc2lvbiAoc2luY2UgPSAi Mi4xNCIpXQotLQlbQ0NvZGUgKGNuYW1lID0gIkdfTUlOU1NJWkUiKV0KLS0JcHVibGljIGNvbnN0 IGxvbmcgTUlOOwotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xNCIpXQotLQlbQ0NvZGUgKGNuYW1l ID0gIkdfTUFYU1NJWkUiKV0KLS0JcHVibGljIGNvbnN0IGxvbmcgTUFYOwotLQotLQlbVmVyc2lv biAoc2luY2UgPSAiMi42IildCi0tCVtDQ29kZSAoY25hbWUgPSAiR19HU1NJWkVfRk9STUFUIild Ci0tCXB1YmxpYyBjb25zdCBzdHJpbmcgRk9STUFUOwotLQlbQ0NvZGUgKGNuYW1lID0gIkdfR1NJ WkVfTU9ESUZJRVIiKV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBGT1JNQVRfTU9ESUZJRVI7Ci0t Ci0tCVtDQ29kZSAoY25hbWUgPSAiZ19zdHJkdXBfcHJpbnRmIiwgaW5zdGFuY2VfcG9zID0gLTEp XQotLQlwdWJsaWMgc3RyaW5nIHRvX3N0cmluZyAoc3RyaW5nIGZvcm1hdCA9ICIlIiArIEZPUk1B VCk7Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiTUlOIildCi0tCXB1YmxpYyBzdGF0aWMgc3NpemVf dCBtaW4gKHNzaXplX3QgYSwgc3NpemVfdCBiKTsKLS0JW0NDb2RlIChjbmFtZSA9ICJNQVgiKV0K LS0JcHVibGljIHN0YXRpYyBzc2l6ZV90IG1heCAoc3NpemVfdCBhLCBzc2l6ZV90IGIpOwotLQlb Q0NvZGUgKGNuYW1lID0gIkNMQU1QIildCi0tCXB1YmxpYyBzc2l6ZV90IGNsYW1wIChzc2l6ZV90 IGxvdywgc3NpemVfdCBoaWdoKTsKLS19Ci0tCi0tW1NpbXBsZVR5cGVdCi0tW0dJUiAobmFtZSA9 ICJndWxvbmciKV0KLS1bQ0NvZGUgKGNuYW1lID0gImd1aW50cHRyIiwgY2hlYWRlcl9maWxlbmFt ZSA9ICJnbGliLmgiLCB0eXBlX2lkID0gIkdfVFlQRV9VTE9ORyIsIG1hcnNoYWxsZXJfdHlwZV9u YW1lID0gIlVMT05HIiwgZ2V0X3ZhbHVlX2Z1bmN0aW9uID0gImdfdmFsdWVfZ2V0X3Vsb25nIiwg c2V0X3ZhbHVlX2Z1bmN0aW9uID0gImdfdmFsdWVfc2V0X3Vsb25nIiwgZGVmYXVsdF92YWx1ZSA9 ICIwVUwiKV0KLS1bSW50ZWdlclR5cGUgKHJhbmsgPSA5KV0KLS1wdWJsaWMgc3RydWN0IHVpbnRw dHIgewotLQlbQ0NvZGUgKGNuYW1lID0gIjBVTCIpXQotLQlwdWJsaWMgY29uc3QgdWxvbmcgTUlO OwotLQlbQ0NvZGUgKGNuYW1lID0gIkdfTUFYU0laRSIpXQotLQlwdWJsaWMgY29uc3QgdWxvbmcg TUFYOwotLQotLQlbQ0NvZGUgKGNuYW1lID0gIkdfR1VJTlRQVFJfRk9STUFUIildCi0tCXB1Ymxp YyBjb25zdCBzdHJpbmcgRk9STUFUOwotLQlbQ0NvZGUgKGNuYW1lID0gIkdfR0lOVFBUUl9NT0RJ RklFUiIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5nIEZPUk1BVF9NT0RJRklFUjsKLS0KLS0JW0ND b2RlIChjbmFtZSA9ICJnX3N0cmR1cF9wcmludGYiLCBpbnN0YW5jZV9wb3MgPSAtMSldCi0tCXB1 YmxpYyBzdHJpbmcgdG9fc3RyaW5nIChzdHJpbmcgZm9ybWF0ID0gIiUiICsgRk9STUFUKTsKLS0K LS0JW0NDb2RlIChjbmFtZSA9ICJHU0laRV9UT19QT0lOVEVSIildCi0tCXB1YmxpYyB2b2lkKiB0 b19wb2ludGVyICgpOwotLQlbQ0NvZGUgKGNuYW1lID0gIkdQT0lOVEVSX1RPX1NJWkUiKV0KLS0J cHVibGljIHN0YXRpYyB1aW50cHRyIGZyb21fcG9pbnRlciAodm9pZCogcCk7Ci0tCi0tCVtDQ29k ZSAoY25hbWUgPSAiTUlOIildCi0tCXB1YmxpYyBzdGF0aWMgdWludHB0ciBtaW4gKHVpbnRwdHIg YSwgdWludHB0ciBiKTsKLS0JW0NDb2RlIChjbmFtZSA9ICJNQVgiKV0KLS0JcHVibGljIHN0YXRp YyB1aW50cHRyIG1heCAodWludHB0ciBhLCB1aW50cHRyIGIpOwotLQlbQ0NvZGUgKGNuYW1lID0g IkNMQU1QIildCi0tCXB1YmxpYyB1aW50cHRyIGNsYW1wICh1aW50cHRyIGxvdywgdWludHB0ciBo aWdoKTsKLS19Ci0tCi0tW1NpbXBsZVR5cGVdCi0tW0dJUiAobmFtZSA9ICJnbG9uZyIpXQotLVtD Q29kZSAoY25hbWUgPSAiZ2ludHB0ciIsIGNoZWFkZXJfZmlsZW5hbWUgPSAiZ2xpYi5oIiwgdHlw ZV9pZCA9ICJHX1RZUEVfTE9ORyIsIG1hcnNoYWxsZXJfdHlwZV9uYW1lID0gIkxPTkciLCBnZXRf dmFsdWVfZnVuY3Rpb24gPSAiZ192YWx1ZV9nZXRfbG9uZyIsIHNldF92YWx1ZV9mdW5jdGlvbiA9 ICJnX3ZhbHVlX3NldF9sb25nIiwgZGVmYXVsdF92YWx1ZSA9ICIwTCIpXQotLVtJbnRlZ2VyVHlw ZSAocmFuayA9IDgpXQotLXB1YmxpYyBzdHJ1Y3QgaW50cHRyIHsKLS0JW0NDb2RlIChjbmFtZSA9 ICJHX01JTlNTSVpFIildCi0tCXB1YmxpYyBjb25zdCBsb25nIE1JTjsKLS0JW0NDb2RlIChjbmFt ZSA9ICJHX01BWFNTSVpFIildCi0tCXB1YmxpYyBjb25zdCBsb25nIE1BWDsKLS0KLS0JW0NDb2Rl IChjbmFtZSA9ICJHX0dJTlRQVFJfRk9STUFUIildCi0tCXB1YmxpYyBjb25zdCBzdHJpbmcgRk9S TUFUOwotLQlbQ0NvZGUgKGNuYW1lID0gIkdfR0lOVFBUUl9NT0RJRklFUiIpXQotLQlwdWJsaWMg Y29uc3Qgc3RyaW5nIEZPUk1BVF9NT0RJRklFUjsKLS0KLS0JW0NDb2RlIChjbmFtZSA9ICJnX3N0 cmR1cF9wcmludGYiLCBpbnN0YW5jZV9wb3MgPSAtMSldCi0tCXB1YmxpYyBzdHJpbmcgdG9fc3Ry aW5nIChzdHJpbmcgZm9ybWF0ID0gIiUiICsgRk9STUFUKTsKLS0KLS0JW0NDb2RlIChjbmFtZSA9 ICJNSU4iKV0KLS0JcHVibGljIHN0YXRpYyBpbnRwdHIgbWluIChpbnRwdHIgYSwgaW50cHRyIGIp OwotLQlbQ0NvZGUgKGNuYW1lID0gIk1BWCIpXQotLQlwdWJsaWMgc3RhdGljIGludHB0ciBtYXgg KGludHB0ciBhLCBpbnRwdHIgYik7Ci0tCVtDQ29kZSAoY25hbWUgPSAiQ0xBTVAiKV0KLS0JcHVi bGljIGludHB0ciBjbGFtcCAoaW50cHRyIGxvdywgaW50cHRyIGhpZ2gpOwotLX0KLS0KLS1bU2lt cGxlVHlwZV0KLS1bR0lSIChuYW1lID0gImdpbnQ4IildCi0tW0NDb2RlIChjbmFtZSA9ICJnaW50 OCIsIGNoZWFkZXJfZmlsZW5hbWUgPSAiZ2xpYi5oIiwgdHlwZV9pZCA9ICJHX1RZUEVfQ0hBUiIs IG1hcnNoYWxsZXJfdHlwZV9uYW1lID0gIkNIQVIiLCBnZXRfdmFsdWVfZnVuY3Rpb24gPSAiZ192 YWx1ZV9nZXRfY2hhciIsIHNldF92YWx1ZV9mdW5jdGlvbiA9ICJnX3ZhbHVlX3NldF9jaGFyIiwg ZGVmYXVsdF92YWx1ZSA9ICIwIiwgZGVmYXVsdF92YWx1ZV9vbl9lcnJvciA9ICItMSIsIHR5cGVf c2lnbmF0dXJlID0gInkiKV0KLS1bSW50ZWdlclR5cGUgKHJhbmsgPSAxLCBtaW4gPSAtMTI4LCBt YXggPSAxMjcpXQotLXB1YmxpYyBzdHJ1Y3QgaW50OCB7Ci0tCVtWZXJzaW9uIChzaW5jZSA9ICIy LjQiKV0KLS0JW0NDb2RlIChjbmFtZSA9ICJHX01JTklOVDgiKV0KLS0JcHVibGljIGNvbnN0IGlu dDggTUlOOwotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi40IildCi0tCVtDQ29kZSAoY25hbWUgPSAi R19NQVhJTlQ4IildCi0tCXB1YmxpYyBjb25zdCBpbnQ4IE1BWDsKLS0KLS0JW0NDb2RlIChjbmFt ZSA9ICJnX3N0cmR1cF9wcmludGYiLCBpbnN0YW5jZV9wb3MgPSAtMSldCi0tCXB1YmxpYyBzdHJp bmcgdG9fc3RyaW5nIChzdHJpbmcgZm9ybWF0ID0gIiVoaGkiKTsKLS0KLS0JW0NDb2RlIChjbmFt ZSA9ICJNSU4iKV0KLS0JcHVibGljIHN0YXRpYyBpbnQ4IG1pbiAoaW50OCBhLCBpbnQ4IGIpOwot LQlbQ0NvZGUgKGNuYW1lID0gIk1BWCIpXQotLQlwdWJsaWMgc3RhdGljIGludDggbWF4IChpbnQ4 IGEsIGludDggYik7Ci0tCVtDQ29kZSAoY25hbWUgPSAiQ0xBTVAiKV0KLS0JcHVibGljIGludDgg Y2xhbXAgKGludDggbG93LCBpbnQ4IGhpZ2gpOwotLX0KLS0KLS1bU2ltcGxlVHlwZV0KLS1bR0lS IChuYW1lID0gImd1aW50OCIpXQotLVtDQ29kZSAoY25hbWUgPSAiZ3VpbnQ4IiwgY2hlYWRlcl9m aWxlbmFtZSA9ICJnbGliLmgiLCB0eXBlX2lkID0gIkdfVFlQRV9VQ0hBUiIsIG1hcnNoYWxsZXJf dHlwZV9uYW1lID0gIlVDSEFSIiwgZ2V0X3ZhbHVlX2Z1bmN0aW9uID0gImdfdmFsdWVfZ2V0X3Vj aGFyIiwgc2V0X3ZhbHVlX2Z1bmN0aW9uID0gImdfdmFsdWVfc2V0X3VjaGFyIiwgZGVmYXVsdF92 YWx1ZSA9ICIwVSIsIHR5cGVfc2lnbmF0dXJlID0gInkiKV0KLS1bSW50ZWdlclR5cGUgKHJhbmsg PSAzLCBtaW4gPSAwLCBtYXggPSAyNTUpXQotLXB1YmxpYyBzdHJ1Y3QgdWludDggewotLQlbQ0Nv ZGUgKGNuYW1lID0gIjBVIildCi0tCXB1YmxpYyBjb25zdCB1aW50OCBNSU47Ci0tCVtWZXJzaW9u IChzaW5jZSA9ICIyLjQiKV0KLS0JW0NDb2RlIChjbmFtZSA9ICJHX01BWFVJTlQ4IildCi0tCXB1 YmxpYyBjb25zdCB1aW50OCBNQVg7Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiZ19zdHJkdXBfcHJp bnRmIiwgaW5zdGFuY2VfcG9zID0gLTEpXQotLQlwdWJsaWMgc3RyaW5nIHRvX3N0cmluZyAoc3Ry aW5nIGZvcm1hdCA9ICIlaGh1Iik7Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiTUlOIildCi0tCXB1 YmxpYyBzdGF0aWMgdWludDggbWluICh1aW50OCBhLCB1aW50OCBiKTsKLS0JW0NDb2RlIChjbmFt ZSA9ICJNQVgiKV0KLS0JcHVibGljIHN0YXRpYyB1aW50OCBtYXggKHVpbnQ4IGEsIHVpbnQ4IGIp OwotLQlbQ0NvZGUgKGNuYW1lID0gIkNMQU1QIildCi0tCXB1YmxpYyB1aW50OCBjbGFtcCAodWlu dDggbG93LCB1aW50OCBoaWdoKTsKLS19Ci0tCi0tW1NpbXBsZVR5cGVdCi0tW0dJUiAobmFtZSA9 ICJnaW50MTYiKV0KLS1bQ0NvZGUgKGNuYW1lID0gImdpbnQxNiIsIGNoZWFkZXJfZmlsZW5hbWUg PSAiZ2xpYi5oIiwgdHlwZV9pZCA9ICJHX1RZUEVfSU5UIiwgbWFyc2hhbGxlcl90eXBlX25hbWUg PSAiSU5UIiwgZ2V0X3ZhbHVlX2Z1bmN0aW9uID0gImdfdmFsdWVfZ2V0X2ludCIsIHNldF92YWx1 ZV9mdW5jdGlvbiA9ICJnX3ZhbHVlX3NldF9pbnQiLCBkZWZhdWx0X3ZhbHVlID0gIjAiLCBkZWZh dWx0X3ZhbHVlX29uX2Vycm9yID0gIi0xIiwgdHlwZV9zaWduYXR1cmUgPSAibiIpXQotLVtJbnRl Z2VyVHlwZSAocmFuayA9IDQsIG1pbiA9IC0zMjc2OCwgbWF4ID0gMzI3NjcpXQotLXB1YmxpYyBz dHJ1Y3QgaW50MTYgewotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi40IildCi0tCVtDQ29kZSAoY25h bWUgPSAiR19NSU5JTlQxNiIpXQotLQlwdWJsaWMgY29uc3QgaW50MTYgTUlOOwotLQlbVmVyc2lv biAoc2luY2UgPSAiMi40IildCi0tCVtDQ29kZSAoY25hbWUgPSAiR19NQVhJTlQxNiIpXQotLQlw dWJsaWMgY29uc3QgaW50MTYgTUFYOwotLQotLQlbQ0NvZGUgKGNuYW1lID0gIkdfR0lOVDE2X0ZP Uk1BVCIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5nIEZPUk1BVDsKLS0JW1ZlcnNpb24gKHNpbmNl ID0gIjIuNCIpXQotLQlbQ0NvZGUgKGNuYW1lID0gIkdfR0lOVDE2X01PRElGSUVSIildCi0tCXB1 YmxpYyBjb25zdCBzdHJpbmcgRk9STUFUX01PRElGSUVSOwotLQotLQlbQ0NvZGUgKGNuYW1lID0g Imdfc3RyZHVwX3ByaW50ZiIsIGluc3RhbmNlX3BvcyA9IC0xKV0KLS0JcHVibGljIHN0cmluZyB0 b19zdHJpbmcgKHN0cmluZyBmb3JtYXQgPSAiJSIgKyBGT1JNQVQpOwotLQotLQlbQ0NvZGUgKGNu YW1lID0gIk1JTiIpXQotLQlwdWJsaWMgc3RhdGljIGludDE2IG1pbiAoaW50MTYgYSwgaW50MTYg Yik7Ci0tCVtDQ29kZSAoY25hbWUgPSAiTUFYIildCi0tCXB1YmxpYyBzdGF0aWMgaW50MTYgbWF4 IChpbnQxNiBhLCBpbnQxNiBiKTsKLS0JW0NDb2RlIChjbmFtZSA9ICJDTEFNUCIpXQotLQlwdWJs aWMgaW50MTYgY2xhbXAgKGludDE2IGxvdywgaW50MTYgaGlnaCk7Ci0tCi0tCVtDQ29kZSAoY25h bWUgPSAiR0lOVDE2X1RPX0JFIildCi0tCXB1YmxpYyBpbnQxNiB0b19iaWdfZW5kaWFuICgpOwot LQlbQ0NvZGUgKGNuYW1lID0gIkdJTlQxNl9UT19MRSIpXQotLQlwdWJsaWMgaW50MTYgdG9fbGl0 dGxlX2VuZGlhbiAoKTsKLS0KLS0JW0NDb2RlIChjbmFtZSA9ICJHSU5UMTZfRlJPTV9CRSIpXQot LQlwdWJsaWMgc3RhdGljIGludDE2IGZyb21fYmlnX2VuZGlhbiAoaW50MTYgdmFsKTsKLS0JW0ND b2RlIChjbmFtZSA9ICJHSU5UMTZfRlJPTV9MRSIpXQotLQlwdWJsaWMgc3RhdGljIGludDE2IGZy b21fbGl0dGxlX2VuZGlhbiAoaW50MTYgdmFsKTsKLS19Ci0tCi0tW1NpbXBsZVR5cGVdCi0tW0dJ UiAobmFtZSA9ICJndWludDE2IildCi0tW0NDb2RlIChjbmFtZSA9ICJndWludDE2IiwgY2hlYWRl cl9maWxlbmFtZSA9ICJnbGliLmgiLCB0eXBlX2lkID0gIkdfVFlQRV9VSU5UIiwgbWFyc2hhbGxl cl90eXBlX25hbWUgPSAiVUlOVCIsIGdldF92YWx1ZV9mdW5jdGlvbiA9ICJnX3ZhbHVlX2dldF91 aW50Iiwgc2V0X3ZhbHVlX2Z1bmN0aW9uID0gImdfdmFsdWVfc2V0X3VpbnQiLCBkZWZhdWx0X3Zh bHVlID0gIjBVIiwgdHlwZV9zaWduYXR1cmUgPSAicSIpXQotLVtJbnRlZ2VyVHlwZSAocmFuayA9 IDUsIG1pbiA9IDAsIG1heCA9IDY1NTM1KV0KLS1wdWJsaWMgc3RydWN0IHVpbnQxNiB7Ci0tCVtD Q29kZSAoY25hbWUgPSAiMFUiKV0KLS0JcHVibGljIGNvbnN0IHVpbnQxNiBNSU47Ci0tCVtWZXJz aW9uIChzaW5jZSA9ICIyLjQiKV0KLS0JW0NDb2RlIChjbmFtZSA9ICJHX01BWFVJTlQxNiIpXQot LQlwdWJsaWMgY29uc3QgdWludDE2IE1BWDsKLS0KLS0JW0NDb2RlIChjbmFtZSA9ICJHX0dVSU5U MTZfRk9STUFUIildCi0tCXB1YmxpYyBjb25zdCBzdHJpbmcgRk9STUFUOwotLQlbQ0NvZGUgKGNu YW1lID0gIkdfR0lOVDE2X01PRElGSUVSIildCi0tCXB1YmxpYyBjb25zdCBzdHJpbmcgRk9STUFU X01PRElGSUVSOwotLQotLQlbQ0NvZGUgKGNuYW1lID0gImdfc3RyZHVwX3ByaW50ZiIsIGluc3Rh bmNlX3BvcyA9IC0xKV0KLS0JcHVibGljIHN0cmluZyB0b19zdHJpbmcgKHN0cmluZyBmb3JtYXQg PSAiJWh1Iik7Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiTUlOIildCi0tCXB1YmxpYyBzdGF0aWMg dWludDE2IG1pbiAodWludDE2IGEsIHVpbnQxNiBiKTsKLS0JW0NDb2RlIChjbmFtZSA9ICJNQVgi KV0KLS0JcHVibGljIHN0YXRpYyB1aW50MTYgbWF4ICh1aW50MTYgYSwgdWludDE2IGIpOwotLQlb Q0NvZGUgKGNuYW1lID0gIkNMQU1QIildCi0tCXB1YmxpYyB1aW50MTYgY2xhbXAgKHVpbnQxNiBs b3csIHVpbnQxNiBoaWdoKTsKLS0KLS0JW0NDb2RlIChjbmFtZSA9ICJHVUlOVDE2X1RPX0JFIild Ci0tCXB1YmxpYyB1aW50MTYgdG9fYmlnX2VuZGlhbiAoKTsKLS0JW0NDb2RlIChjbmFtZSA9ICJH VUlOVDE2X1RPX0xFIildCi0tCXB1YmxpYyB1aW50MTYgdG9fbGl0dGxlX2VuZGlhbiAoKTsKLS0K LS0JW0NDb2RlIChjbmFtZSA9ICJHVUlOVDE2X0ZST01fQkUiKV0KLS0JcHVibGljIHN0YXRpYyB1 aW50MTYgZnJvbV9iaWdfZW5kaWFuICh1aW50MTYgdmFsKTsKLS0JW0NDb2RlIChjbmFtZSA9ICJH VUlOVDE2X0ZST01fTEUiKV0KLS0JcHVibGljIHN0YXRpYyB1aW50MTYgZnJvbV9saXR0bGVfZW5k aWFuICh1aW50MTYgdmFsKTsKLS0KLS0JW0NDb2RlIChjbmFtZSA9ICJnX2h0b25zIildCi0tCXB1 YmxpYyBzdGF0aWMgdWludDE2IHRvX25ldHdvcmsgKHVpbnQxNiB2YWwpOwotLQlbQ0NvZGUgKGNu YW1lID0gImdfbnRvaHMiKV0KLS0JcHVibGljIHN0YXRpYyB1aW50MTYgZnJvbV9uZXR3b3JrICh1 aW50MTYgdmFsKTsKLS0KLS0JW0NDb2RlIChjbmFtZSA9ICJHVUlOVDE2X1NXQVBfQkVfUERQIild Ci0tCXB1YmxpYyB1aW50MTYgc3dhcF9iaWdfZW5kaWFuX3BkcCAoKTsKLS0JW0NDb2RlIChjbmFt ZSA9ICJHVUlOVDE2X1NXQVBfTEVfQkUiKV0KLS0JcHVibGljIHVpbnQxNiBzd2FwX2xpdHRsZV9l bmRpYW5fYmlnX2VuZGlhbiAoKTsKLS0JW0NDb2RlIChjbmFtZSA9ICJHVUlOVDE2X1NXQVBfTEVf UERQIildCi0tCXB1YmxpYyB1aW50MTYgc3dhcF9saXR0bGVfZW5kaWFuX3BkcCAoKTsKLS19Ci0t Ci0tW1NpbXBsZVR5cGVdCi0tW0dJUiAobmFtZSA9ICJnaW50MzIiKV0KLS1bQ0NvZGUgKGNuYW1l ID0gImdpbnQzMiIsIGNoZWFkZXJfZmlsZW5hbWUgPSAiZ2xpYi5oIiwgdHlwZV9pZCA9ICJHX1RZ UEVfSU5UIiwgbWFyc2hhbGxlcl90eXBlX25hbWUgPSAiSU5UIiwgZ2V0X3ZhbHVlX2Z1bmN0aW9u ID0gImdfdmFsdWVfZ2V0X2ludCIsIHNldF92YWx1ZV9mdW5jdGlvbiA9ICJnX3ZhbHVlX3NldF9p bnQiLCBkZWZhdWx0X3ZhbHVlID0gIjAiLCBkZWZhdWx0X3ZhbHVlX29uX2Vycm9yID0gIi0xIiwg dHlwZV9zaWduYXR1cmUgPSAiaSIpXQotLVtJbnRlZ2VyVHlwZSAocmFuayA9IDYpXQotLXB1Ymxp YyBzdHJ1Y3QgaW50MzIgewotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi40IildCi0tCVtDQ29kZSAo Y25hbWUgPSAiR19NSU5JTlQzMiIpXQotLQlwdWJsaWMgY29uc3QgaW50MzIgTUlOOwotLQlbVmVy c2lvbiAoc2luY2UgPSAiMi40IildCi0tCVtDQ29kZSAoY25hbWUgPSAiR19NQVhJTlQzMiIpXQot LQlwdWJsaWMgY29uc3QgaW50MzIgTUFYOwotLQotLQlbQ0NvZGUgKGNuYW1lID0gIkdfR0lOVDMy X0ZPUk1BVCIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5nIEZPUk1BVDsKLS0JW1ZlcnNpb24gKHNp bmNlID0gIjIuNCIpXQotLQlbQ0NvZGUgKGNuYW1lID0gIkdfR0lOVDMyX01PRElGSUVSIildCi0t CXB1YmxpYyBjb25zdCBzdHJpbmcgRk9STUFUX01PRElGSUVSOwotLQotLQlbQ0NvZGUgKGNuYW1l ID0gImdfc3RyZHVwX3ByaW50ZiIsIGluc3RhbmNlX3BvcyA9IC0xKV0KLS0JcHVibGljIHN0cmlu ZyB0b19zdHJpbmcgKHN0cmluZyBmb3JtYXQgPSAiJWkiKTsKLS0KLS0JW0NDb2RlIChjbmFtZSA9 ICJNSU4iKV0KLS0JcHVibGljIHN0YXRpYyBpbnQzMiBtaW4gKGludDMyIGEsIGludDMyIGIpOwot LQlbQ0NvZGUgKGNuYW1lID0gIk1BWCIpXQotLQlwdWJsaWMgc3RhdGljIGludDMyIG1heCAoaW50 MzIgYSwgaW50MzIgYik7Ci0tCVtDQ29kZSAoY25hbWUgPSAiQ0xBTVAiKV0KLS0JcHVibGljIGlu dDMyIGNsYW1wIChpbnQzMiBsb3csIGludDMyIGhpZ2gpOwotLQotLQlbQ0NvZGUgKGNuYW1lID0g IkdJTlQzMl9UT19CRSIpXQotLQlwdWJsaWMgaW50MzIgdG9fYmlnX2VuZGlhbiAoKTsKLS0JW0ND b2RlIChjbmFtZSA9ICJHSU5UMzJfVE9fTEUiKV0KLS0JcHVibGljIGludDMyIHRvX2xpdHRsZV9l bmRpYW4gKCk7Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiR0lOVDMyX0ZST01fQkUiKV0KLS0JcHVi bGljIHN0YXRpYyBpbnQzMiBmcm9tX2JpZ19lbmRpYW4gKGludDMyIHZhbCk7Ci0tCVtDQ29kZSAo Y25hbWUgPSAiR0lOVDMyX0ZST01fTEUiKV0KLS0JcHVibGljIHN0YXRpYyBpbnQzMiBmcm9tX2xp dHRsZV9lbmRpYW4gKGludDMyIHZhbCk7Ci0tfQotLQotLVtTaW1wbGVUeXBlXQotLVtHSVIgKG5h bWUgPSAiZ3VpbnQzMiIpXQotLVtDQ29kZSAoY25hbWUgPSAiZ3VpbnQzMiIsIGNoZWFkZXJfZmls ZW5hbWUgPSAiZ2xpYi5oIiwgdHlwZV9pZCA9ICJHX1RZUEVfVUlOVCIsIG1hcnNoYWxsZXJfdHlw ZV9uYW1lID0gIlVJTlQiLCBnZXRfdmFsdWVfZnVuY3Rpb24gPSAiZ192YWx1ZV9nZXRfdWludCIs IHNldF92YWx1ZV9mdW5jdGlvbiA9ICJnX3ZhbHVlX3NldF91aW50IiwgZGVmYXVsdF92YWx1ZSA9 ICIwVSIsIHR5cGVfc2lnbmF0dXJlID0gInUiKV0KLS1bSW50ZWdlclR5cGUgKHJhbmsgPSA3KV0K LS1wdWJsaWMgc3RydWN0IHVpbnQzMiB7Ci0tCVtDQ29kZSAoY25hbWUgPSAiMFUiKV0KLS0JcHVi bGljIGNvbnN0IHVpbnQzMiBNSU47Ci0tCVtWZXJzaW9uIChzaW5jZSA9ICIyLjQiKV0KLS0JW0ND b2RlIChjbmFtZSA9ICJHX01BWFVJTlQzMiIpXQotLQlwdWJsaWMgY29uc3QgdWludDMyIE1BWDsK LS0KLS0JW0NDb2RlIChjbmFtZSA9ICJHX0dVSU5UMzJfRk9STUFUIildCi0tCXB1YmxpYyBjb25z dCBzdHJpbmcgRk9STUFUOwotLQlbQ0NvZGUgKGNuYW1lID0gIkdfR0lOVDMyX01PRElGSUVSIild Ci0tCXB1YmxpYyBjb25zdCBzdHJpbmcgRk9STUFUX01PRElGSUVSOwotLQotLQlbQ0NvZGUgKGNu YW1lID0gImdfc3RyZHVwX3ByaW50ZiIsIGluc3RhbmNlX3BvcyA9IC0xKV0KLS0JcHVibGljIHN0 cmluZyB0b19zdHJpbmcgKHN0cmluZyBmb3JtYXQgPSAiJXUiKTsKLS0KLS0JW0NDb2RlIChjbmFt ZSA9ICJNSU4iKV0KLS0JcHVibGljIHN0YXRpYyB1aW50MzIgbWluICh1aW50MzIgYSwgdWludDMy IGIpOwotLQlbQ0NvZGUgKGNuYW1lID0gIk1BWCIpXQotLQlwdWJsaWMgc3RhdGljIHVpbnQzMiBt YXggKHVpbnQzMiBhLCB1aW50MzIgYik7Ci0tCVtDQ29kZSAoY25hbWUgPSAiQ0xBTVAiKV0KLS0J cHVibGljIHVpbnQzMiBjbGFtcCAodWludDMyIGxvdywgdWludDMyIGhpZ2gpOwotLQotLQlbQ0Nv ZGUgKGNuYW1lID0gIkdVSU5UMzJfVE9fQkUiKV0KLS0JcHVibGljIHVpbnQzMiB0b19iaWdfZW5k aWFuICgpOwotLQlbQ0NvZGUgKGNuYW1lID0gIkdVSU5UMzJfVE9fTEUiKV0KLS0JcHVibGljIHVp bnQzMiB0b19saXR0bGVfZW5kaWFuICgpOwotLQotLQlbQ0NvZGUgKGNuYW1lID0gIkdVSU5UMzJf RlJPTV9CRSIpXQotLQlwdWJsaWMgc3RhdGljIHVpbnQzMiBmcm9tX2JpZ19lbmRpYW4gKHVpbnQz MiB2YWwpOwotLQlbQ0NvZGUgKGNuYW1lID0gIkdVSU5UMzJfRlJPTV9MRSIpXQotLQlwdWJsaWMg c3RhdGljIHVpbnQzMiBmcm9tX2xpdHRsZV9lbmRpYW4gKHVpbnQzMiB2YWwpOwotLQotLQlbQ0Nv ZGUgKGNuYW1lID0gImdfaHRvbmwiKV0KLS0JcHVibGljIHN0YXRpYyB1aW50MzIgdG9fbmV0d29y ayAodWludDMyIHZhbCk7Ci0tCVtDQ29kZSAoY25hbWUgPSAiZ19udG9obCIpXQotLQlwdWJsaWMg c3RhdGljIHVpbnQzMiBmcm9tX25ldHdvcmsgKHVpbnQzMiB2YWwpOwotLQotLQlbQ0NvZGUgKGNu YW1lID0gIkdVSU5UMzJfU1dBUF9CRV9QRFAiKV0KLS0JcHVibGljIHVpbnQzMiBzd2FwX2JpZ19l bmRpYW5fcGRwICgpOwotLQlbQ0NvZGUgKGNuYW1lID0gIkdVSU5UMzJfU1dBUF9MRV9CRSIpXQot LQlwdWJsaWMgdWludDMyIHN3YXBfbGl0dGxlX2VuZGlhbl9iaWdfZW5kaWFuICgpOwotLQlbQ0Nv ZGUgKGNuYW1lID0gIkdVSU5UMzJfU1dBUF9MRV9QRFAiKV0KLS0JcHVibGljIHVpbnQzMiBzd2Fw X2xpdHRsZV9lbmRpYW5fcGRwICgpOwotLX0KLS0KLS1bU2ltcGxlVHlwZV0KLS1bR0lSIChuYW1l ID0gImdpbnQ2NCIpXQotLVtDQ29kZSAoY25hbWUgPSAiZ2ludDY0IiwgY2hlYWRlcl9maWxlbmFt ZSA9ICJnbGliLmgiLCB0eXBlX2lkID0gIkdfVFlQRV9JTlQ2NCIsIG1hcnNoYWxsZXJfdHlwZV9u YW1lID0gIklOVDY0IiwgZ2V0X3ZhbHVlX2Z1bmN0aW9uID0gImdfdmFsdWVfZ2V0X2ludDY0Iiwg c2V0X3ZhbHVlX2Z1bmN0aW9uID0gImdfdmFsdWVfc2V0X2ludDY0IiwgZGVmYXVsdF92YWx1ZSA9 ICIwTEwiLCBkZWZhdWx0X3ZhbHVlX29uX2Vycm9yID0gIi0xTEwiLCB0eXBlX3NpZ25hdHVyZSA9 ICJ4IildCi0tW0ludGVnZXJUeXBlIChyYW5rID0gMTApXQotLXB1YmxpYyBzdHJ1Y3QgaW50NjQg ewotLQlbQ0NvZGUgKGNuYW1lID0gIkdfTUlOSU5UNjQiKV0KLS0JcHVibGljIGNvbnN0IGludDY0 IE1JTjsKLS0JW0NDb2RlIChjbmFtZSA9ICJHX01BWElOVDY0IildCi0tCXB1YmxpYyBjb25zdCBp bnQ2NCBNQVg7Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiR19HSU5UNjRfRk9STUFUIildCi0tCXB1 YmxpYyBjb25zdCBzdHJpbmcgRk9STUFUOwotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi40IildCi0t CVtDQ29kZSAoY25hbWUgPSAiR19HSU5UNjRfTU9ESUZJRVIiKV0KLS0JcHVibGljIGNvbnN0IHN0 cmluZyBGT1JNQVRfTU9ESUZJRVI7Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiZ19zdHJkdXBfcHJp bnRmIiwgaW5zdGFuY2VfcG9zID0gLTEpXQotLQlwdWJsaWMgc3RyaW5nIHRvX3N0cmluZyAoc3Ry aW5nIGZvcm1hdCA9ICIlIiArIEZPUk1BVCk7Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiTUlOIild Ci0tCXB1YmxpYyBzdGF0aWMgaW50NjQgbWluIChpbnQ2NCBhLCBpbnQ2NCBiKTsKLS0JW0NDb2Rl IChjbmFtZSA9ICJNQVgiKV0KLS0JcHVibGljIHN0YXRpYyBpbnQ2NCBtYXggKGludDY0IGEsIGlu dDY0IGIpOwotLQlbQ0NvZGUgKGNuYW1lID0gIkNMQU1QIildCi0tCXB1YmxpYyBpbnQ2NCBjbGFt cCAoaW50NjQgbG93LCBpbnQ2NCBoaWdoKTsKLS0JW0NDb2RlIChjbmFtZSA9ICJsbGFicyIsIGNo ZWFkZXJfZmlsZW5hbWUgPSAic3RkbGliLmgiKV0KLS0JcHVibGljIGludDY0IGFicyAoKTsKLS0K LS0JW0NDb2RlIChjbmFtZSA9ICJHSU5UNjRfVE9fQkUiKV0KLS0JcHVibGljIGludDY0IHRvX2Jp Z19lbmRpYW4gKCk7Ci0tCVtDQ29kZSAoY25hbWUgPSAiR0lOVDY0X1RPX0xFIildCi0tCXB1Ymxp YyBpbnQ2NCB0b19saXR0bGVfZW5kaWFuICgpOwotLQotLQlbQ0NvZGUgKGNuYW1lID0gIkdJTlQ2 NF9GUk9NX0JFIildCi0tCXB1YmxpYyBzdGF0aWMgaW50NjQgZnJvbV9iaWdfZW5kaWFuIChpbnQ2 NCB2YWwpOwotLQlbQ0NvZGUgKGNuYW1lID0gIkdJTlQ2NF9GUk9NX0xFIildCi0tCXB1YmxpYyBz dGF0aWMgaW50NjQgZnJvbV9saXR0bGVfZW5kaWFuIChpbnQ2NCB2YWwpOwotLQotLQlbQ0NvZGUg KGNuYW1lID0gIkdVSU5UNjRfU1dBUF9MRV9CRSIpXQotLQlwdWJsaWMgdWludDY0IHN3YXBfbGl0 dGxlX2VuZGlhbl9iaWdfZW5kaWFuICgpOwotLQotLQlbQ0NvZGUgKGNuYW1lID0gImdfYXNjaWlf c3RydG9sbCIpXQotLQlzdGF0aWMgaW50NjQgYXNjaWlfc3RydG9sbCAoc3RyaW5nIG5wdHIsIG91 dCBjaGFyKiBlbmRwdHIsIHVpbnQgX2Jhc2UpOwotLQotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi4x MiIpXQotLQlwdWJsaWMgc3RhdGljIGludDY0IHBhcnNlIChzdHJpbmcgc3RyKSB7Ci0tCQlyZXR1 cm4gYXNjaWlfc3RydG9sbCAoc3RyLCBudWxsLCAwKTsKLS0JfQotLQotLQlbVmVyc2lvbiAoc2lu Y2UgPSAiMi4xMiIpXQotLQlwdWJsaWMgc3RhdGljIGJvb2wgdHJ5X3BhcnNlIChzdHJpbmcgc3Ry LCBvdXQgaW50NjQgcmVzdWx0ID0gbnVsbCwgb3V0IHVub3duZWQgc3RyaW5nIHVucGFyc2VkID0g bnVsbCkgewotLQkJY2hhciogZW5kcHRyOwotLQkJcmVzdWx0ID0gYXNjaWlfc3RydG9sbCAoc3Ry LCBvdXQgZW5kcHRyLCAwKTsKLS0JCWlmIChlbmRwdHIgPT0gKGNoYXIqKSBzdHIgKyBzdHIubGVu Z3RoKSB7Ci0tCQkJdW5wYXJzZWQgPSAiIjsKLS0JCQlyZXR1cm4gdHJ1ZTsKLS0JCX0gZWxzZSB7 Ci0tCQkJdW5wYXJzZWQgPSAoc3RyaW5nKSBlbmRwdHI7Ci0tCQkJcmV0dXJuIGZhbHNlOwotLQkJ fQotLQl9Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiZ19hc2NpaV9zdHJpbmdfdG9fc2lnbmVkIild Ci0tCVtWZXJzaW9uIChzaW5jZSA9ICIyLjU0IildCi0tCXB1YmxpYyBzdGF0aWMgYm9vbCBmcm9t X3N0cmluZyAoc3RyaW5nIHN0ciwgW0NDb2RlIChwb3MgPSA1LjEpXSBvdXQgaW50NjQgb3V0X251 bSA9IG51bGwsIHVpbnQgQGJhc2UgPSAxMFUsIGludDY0IG1pbiA9IGludDY0Lk1JTiwgaW50NjQg bWF4ID0gaW50NjQuTUFYKSB0aHJvd3MgR0xpYi5OdW1iZXJQYXJzZXJFcnJvcjsKLS19Ci0tCi0t W1NpbXBsZVR5cGVdCi0tW0dJUiAobmFtZSA9ICJndWludDY0IildCi0tW0NDb2RlIChjbmFtZSA9 ICJndWludDY0IiwgY2hlYWRlcl9maWxlbmFtZSA9ICJnbGliLmgiLCB0eXBlX2lkID0gIkdfVFlQ RV9VSU5UNjQiLCBtYXJzaGFsbGVyX3R5cGVfbmFtZSA9ICJVSU5UNjQiLCBnZXRfdmFsdWVfZnVu Y3Rpb24gPSAiZ192YWx1ZV9nZXRfdWludDY0Iiwgc2V0X3ZhbHVlX2Z1bmN0aW9uID0gImdfdmFs dWVfc2V0X3VpbnQ2NCIsIGRlZmF1bHRfdmFsdWUgPSAiMFVMTCIsIHR5cGVfc2lnbmF0dXJlID0g InQiKV0KLS1bSW50ZWdlclR5cGUgKHJhbmsgPSAxMSldCi0tcHVibGljIHN0cnVjdCB1aW50NjQg ewotLQlbQ0NvZGUgKGNuYW1lID0gIjBVTEwiKV0KLS0JcHVibGljIGNvbnN0IHVpbnQ2NCBNSU47 Ci0tCVtDQ29kZSAoY25hbWUgPSAiR19NQVhVSU5UNjQiKV0KLS0JcHVibGljIGNvbnN0IHVpbnQ2 NCBNQVg7Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiR19HVUlOVDY0X0ZPUk1BVCIpXQotLQlwdWJs aWMgY29uc3Qgc3RyaW5nIEZPUk1BVDsKLS0JW0NDb2RlIChjbmFtZSA9ICJHX0dJTlQ2NF9NT0RJ RklFUiIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5nIEZPUk1BVF9NT0RJRklFUjsKLS0KLS0JW0ND b2RlIChjbmFtZSA9ICJnX3N0cmR1cF9wcmludGYiLCBpbnN0YW5jZV9wb3MgPSAtMSldCi0tCXB1 YmxpYyBzdHJpbmcgdG9fc3RyaW5nIChzdHJpbmcgZm9ybWF0ID0gIiUiICsgRk9STUFUKTsKLS0K LS0JW0NDb2RlIChjbmFtZSA9ICJNSU4iKV0KLS0JcHVibGljIHN0YXRpYyB1aW50NjQgbWluICh1 aW50NjQgYSwgdWludDY0IGIpOwotLQlbQ0NvZGUgKGNuYW1lID0gIk1BWCIpXQotLQlwdWJsaWMg c3RhdGljIHVpbnQ2NCBtYXggKHVpbnQ2NCBhLCB1aW50NjQgYik7Ci0tCVtDQ29kZSAoY25hbWUg PSAiQ0xBTVAiKV0KLS0JcHVibGljIHVpbnQ2NCBjbGFtcCAodWludDY0IGxvdywgdWludDY0IGhp Z2gpOwotLQotLQlbQ0NvZGUgKGNuYW1lID0gIkdVSU5UNjRfVE9fQkUiKV0KLS0JcHVibGljIHVp bnQ2NCB0b19iaWdfZW5kaWFuICgpOwotLQlbQ0NvZGUgKGNuYW1lID0gIkdVSU5UNjRfVE9fTEUi KV0KLS0JcHVibGljIHVpbnQ2NCB0b19saXR0bGVfZW5kaWFuICgpOwotLQotLQlbQ0NvZGUgKGNu YW1lID0gIkdVSU5UNjRfRlJPTV9CRSIpXQotLQlwdWJsaWMgc3RhdGljIHVpbnQ2NCBmcm9tX2Jp Z19lbmRpYW4gKHVpbnQ2NCB2YWwpOwotLQlbQ0NvZGUgKGNuYW1lID0gIkdVSU5UNjRfRlJPTV9M RSIpXQotLQlwdWJsaWMgc3RhdGljIHVpbnQ2NCBmcm9tX2xpdHRsZV9lbmRpYW4gKHVpbnQ2NCB2 YWwpOwotLQotLQlbQ0NvZGUgKGNuYW1lID0gImdfYXNjaWlfc3RydG91bGwiKV0KLS0Jc3RhdGlj IHVpbnQ2NCBhc2NpaV9zdHJ0b3VsbCAoc3RyaW5nIG5wdHIsIG91dCBjaGFyKiBlbmRwdHIsIHVp bnQgX2Jhc2UpOwotLQotLQlwdWJsaWMgc3RhdGljIHVpbnQ2NCBwYXJzZSAoc3RyaW5nIHN0cikg ewotLQkJcmV0dXJuIGFzY2lpX3N0cnRvdWxsIChzdHIsIG51bGwsIDApOwotLQl9Ci0tCi0tCXB1 YmxpYyBzdGF0aWMgYm9vbCB0cnlfcGFyc2UgKHN0cmluZyBzdHIsIG91dCB1aW50NjQgcmVzdWx0 ID0gbnVsbCwgb3V0IHVub3duZWQgc3RyaW5nIHVucGFyc2VkID0gbnVsbCkgewotLQkJY2hhciog ZW5kcHRyOwotLQkJcmVzdWx0ID0gYXNjaWlfc3RydG91bGwgKHN0ciwgb3V0IGVuZHB0ciwgMCk7 Ci0tCQlpZiAoZW5kcHRyID09IChjaGFyKikgc3RyICsgc3RyLmxlbmd0aCkgewotLQkJCXVucGFy c2VkID0gIiI7Ci0tCQkJcmV0dXJuIHRydWU7Ci0tCQl9IGVsc2UgewotLQkJCXVucGFyc2VkID0g KHN0cmluZykgZW5kcHRyOwotLQkJCXJldHVybiBmYWxzZTsKLS0JCX0KLS0JfQotLQotLQlbQ0Nv ZGUgKGNuYW1lID0gImdfYXNjaWlfc3RyaW5nX3RvX3Vuc2lnbmVkIildCi0tCVtWZXJzaW9uIChz aW5jZSA9ICIyLjU0IildCi0tCXB1YmxpYyBzdGF0aWMgYm9vbCBmcm9tX3N0cmluZyAoc3RyaW5n IHN0ciwgW0NDb2RlIChwb3MgPSA1LjEpXSBvdXQgdWludDY0IG91dF9udW0gPSBudWxsLCB1aW50 IEBiYXNlID0gMTBVLCB1aW50NjQgbWluID0gdWludDY0Lk1JTiwgdWludDY0IG1heCA9IHVpbnQ2 NC5NQVgpIHRocm93cyBHTGliLk51bWJlclBhcnNlckVycm9yOwotLX0KLS0KLS1bU2ltcGxlVHlw ZV0KLS1bR0lSIChuYW1lID0gImdmbG9hdCIpXQotLVtDQ29kZSAoY25hbWUgPSAiZ2Zsb2F0Iiwg Y2hlYWRlcl9maWxlbmFtZSA9ICJnbGliLmgsZmxvYXQuaCxtYXRoLmgiLCB0eXBlX2lkID0gIkdf VFlQRV9GTE9BVCIsIG1hcnNoYWxsZXJfdHlwZV9uYW1lID0gIkZMT0FUIiwgZ2V0X3ZhbHVlX2Z1 bmN0aW9uID0gImdfdmFsdWVfZ2V0X2Zsb2F0Iiwgc2V0X3ZhbHVlX2Z1bmN0aW9uID0gImdfdmFs dWVfc2V0X2Zsb2F0IiwgZGVmYXVsdF92YWx1ZSA9ICIwLjBGIiwgZGVmYXVsdF92YWx1ZV9vbl9l cnJvciA9ICItMS4wRiIpXQotLVtGbG9hdGluZ1R5cGUgKHJhbmsgPSAxKV0KLS1wdWJsaWMgc3Ry dWN0IGZsb2F0IHsKLS0JW0NDb2RlIChjbmFtZSA9ICJGTFRfUk9VTkRTIildCi0tCXB1YmxpYyBj b25zdCBpbnQgUk9VTkRTOwotLQlbQ0NvZGUgKGNuYW1lID0gIkZMVF9SQURJWCIpXQotLQlwdWJs aWMgY29uc3QgaW50IFJBRElYOwotLQlbQ0NvZGUgKGNuYW1lID0gIkZMVF9NQU5UX0RJRyIpXQot LQlwdWJsaWMgY29uc3QgaW50IE1BTlRfRElHOwotLQlbQ0NvZGUgKGNuYW1lID0gIkZMVF9ESUci KV0KLS0JcHVibGljIGNvbnN0IGludCBESUc7Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiRkxUX01J Tl9FWFAiKV0KLS0JcHVibGljIGNvbnN0IGludCBNSU5fRVhQOwotLQlbQ0NvZGUgKGNuYW1lID0g IkZMVF9NQVhfRVhQIildCi0tCXB1YmxpYyBjb25zdCBpbnQgTUFYX0VYUDsKLS0KLS0JW0NDb2Rl IChjbmFtZSA9ICJGTFRfTUlOXzEwX0VYUCIpXQotLQlwdWJsaWMgY29uc3QgaW50IE1JTl8xMF9F WFA7Ci0tCVtDQ29kZSAoY25hbWUgPSAiRkxUX01BWF8xMF9FWFAiKV0KLS0JcHVibGljIGNvbnN0 IGludCBNQVhfMTBfRVhQOwotLQotLQlbQ0NvZGUgKGNuYW1lID0gIkZMVF9FUFNJTE9OIildCi0t CXB1YmxpYyBjb25zdCBmbG9hdCBFUFNJTE9OOwotLQlbQ0NvZGUgKGNuYW1lID0gIkZMVF9NSU4i KV0KLS0JcHVibGljIGNvbnN0IGZsb2F0IE1JTjsKLS0JW0NDb2RlIChjbmFtZSA9ICJGTFRfTUFY IildCi0tCXB1YmxpYyBjb25zdCBmbG9hdCBNQVg7Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiTkFO IildCi0tCXB1YmxpYyBjb25zdCBmbG9hdCBOQU47Ci0tCVtDQ29kZSAoY25hbWUgPSAiSU5GSU5J VFkiKV0KLS0JcHVibGljIGNvbnN0IGZsb2F0IElORklOSVRZOwotLQotLQlbQ0NvZGUgKGNuYW1l ID0gImlzbmFuIildCi0tCXB1YmxpYyBib29sIGlzX25hbiAoKTsKLS0JW0NDb2RlIChjbmFtZSA9 ICJpc2Zpbml0ZSIpXQotLQlwdWJsaWMgYm9vbCBpc19maW5pdGUgKCk7Ci0tCVtDQ29kZSAoY25h bWUgPSAiaXNub3JtYWwiKV0KLS0JcHVibGljIGJvb2wgaXNfbm9ybWFsICgpOwotLQlbQ0NvZGUg KGNuYW1lID0gImlzaW5mIildCi0tCXB1YmxpYyBpbnQgaXNfaW5maW5pdHkgKCk7Ci0tCi0tCVtD Q29kZSAoY25hbWUgPSAiZ19zdHJkdXBfcHJpbnRmIiwgaW5zdGFuY2VfcG9zID0gLTEpXQotLQlw dWJsaWMgc3RyaW5nIHRvX3N0cmluZyAoc3RyaW5nIGZvcm1hdCA9ICIlZyIpOwotLQotLQlbQ0Nv ZGUgKGNuYW1lID0gIk1JTiIpXQotLQlwdWJsaWMgc3RhdGljIGZsb2F0IG1pbiAoZmxvYXQgYSwg ZmxvYXQgYik7Ci0tCVtDQ29kZSAoY25hbWUgPSAiTUFYIildCi0tCXB1YmxpYyBzdGF0aWMgZmxv YXQgbWF4IChmbG9hdCBhLCBmbG9hdCBiKTsKLS0JW0NDb2RlIChjbmFtZSA9ICJDTEFNUCIpXQot LQlwdWJsaWMgZmxvYXQgY2xhbXAgKGZsb2F0IGxvdywgZmxvYXQgaGlnaCk7Ci0tCVtDQ29kZSAo Y25hbWUgPSAiZmFic2YiKV0KLS0JcHVibGljIGZsb2F0IGFicyAoKTsKLS0KLS0JW0NDb2RlIChj bmFtZSA9ICJzdHJ0b2YiLCBjaGVhZGVyX2ZpbGVuYW1lID0gInN0ZGxpYi5oIildCi0tCXN0YXRp YyBmbG9hdCBzdHJ0b2YgKHN0cmluZyBucHRyLCBvdXQgY2hhciogZW5kcHRyKTsKLS0KLS0JcHVi bGljIHN0YXRpYyBmbG9hdCBwYXJzZSAoc3RyaW5nIHN0cikgewotLQkJcmV0dXJuIHN0cnRvZiAo c3RyLCBudWxsKTsKLS0JfQotLQotLQlwdWJsaWMgc3RhdGljIGJvb2wgdHJ5X3BhcnNlIChzdHJp bmcgc3RyLCBvdXQgZmxvYXQgcmVzdWx0ID0gbnVsbCwgb3V0IHVub3duZWQgc3RyaW5nIHVucGFy c2VkID0gbnVsbCkgewotLQkJY2hhciogZW5kcHRyOwotLQkJcmVzdWx0ID0gc3RydG9mIChzdHIs IG91dCBlbmRwdHIpOwotLQkJaWYgKGVuZHB0ciA9PSAoY2hhciopIHN0ciArIHN0ci5sZW5ndGgp IHsKLS0JCQl1bnBhcnNlZCA9ICIiOwotLQkJCXJldHVybiB0cnVlOwotLQkJfSBlbHNlIHsKLS0J CQl1bnBhcnNlZCA9IChzdHJpbmcpIGVuZHB0cjsKLS0JCQlyZXR1cm4gZmFsc2U7Ci0tCQl9Ci0t CX0KLS19Ci0tCi0tW1NpbXBsZVR5cGVdCi0tW0dJUiAobmFtZSA9ICJnZG91YmxlIildCi0tW0ND b2RlIChjbmFtZSA9ICJnZG91YmxlIiwgY2hlYWRlcl9maWxlbmFtZSA9ICJnbGliLmgsZmxvYXQu aCxtYXRoLmgiLCB0eXBlX2lkID0gIkdfVFlQRV9ET1VCTEUiLCBtYXJzaGFsbGVyX3R5cGVfbmFt ZSA9ICJET1VCTEUiLCBnZXRfdmFsdWVfZnVuY3Rpb24gPSAiZ192YWx1ZV9nZXRfZG91YmxlIiwg c2V0X3ZhbHVlX2Z1bmN0aW9uID0gImdfdmFsdWVfc2V0X2RvdWJsZSIsIGRlZmF1bHRfdmFsdWUg PSAiMC4wIiwgZGVmYXVsdF92YWx1ZV9vbl9lcnJvciA9ICItMS4wIiwgdHlwZV9zaWduYXR1cmUg PSAiZCIpXQotLVtGbG9hdGluZ1R5cGUgKHJhbmsgPSAyKV0KLS1wdWJsaWMgc3RydWN0IGRvdWJs ZSB7Ci0tCVtDQ29kZSAoY25hbWUgPSAiREJMX01BTlRfRElHIildCi0tCXB1YmxpYyBjb25zdCBp bnQgTUFOVF9ESUc7Ci0tCVtDQ29kZSAoY25hbWUgPSAiREJMX0RJRyIpXQotLQlwdWJsaWMgY29u c3QgaW50IERJRzsKLS0KLS0JW0NDb2RlIChjbmFtZSA9ICJEQkxfTUlOX0VYUCIpXQotLQlwdWJs aWMgY29uc3QgaW50IE1JTl9FWFA7Ci0tCVtDQ29kZSAoY25hbWUgPSAiREJMX01BWF9FWFAiKV0K LS0JcHVibGljIGNvbnN0IGludCBNQVhfRVhQOwotLQotLQlbQ0NvZGUgKGNuYW1lID0gIkRCTF9N SU5fMTBfRVhQIildCi0tCXB1YmxpYyBjb25zdCBpbnQgTUlOXzEwX0VYUDsKLS0JW0NDb2RlIChj bmFtZSA9ICJEQkxfTUFYXzEwX0VYUCIpXQotLQlwdWJsaWMgY29uc3QgaW50IE1BWF8xMF9FWFA7 Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiREJMX0VQU0lMT04iKV0KLS0JcHVibGljIGNvbnN0IGRv dWJsZSBFUFNJTE9OOwotLQlbQ0NvZGUgKGNuYW1lID0gIkRCTF9NSU4iKV0KLS0JcHVibGljIGNv bnN0IGRvdWJsZSBNSU47Ci0tCVtDQ29kZSAoY25hbWUgPSAiREJMX01BWCIpXQotLQlwdWJsaWMg Y29uc3QgZG91YmxlIE1BWDsKLS0KLS0JW0NDb2RlIChjbmFtZSA9ICIoKGRvdWJsZSkgTkFOKSIp XQotLQlwdWJsaWMgY29uc3QgZG91YmxlIE5BTjsKLS0JW0NDb2RlIChjbmFtZSA9ICIoKGRvdWJs ZSkgSU5GSU5JVFkpIildCi0tCXB1YmxpYyBjb25zdCBkb3VibGUgSU5GSU5JVFk7Ci0tCi0tCVtD Q29kZSAoY25hbWUgPSAiaXNuYW4iKV0KLS0JcHVibGljIGJvb2wgaXNfbmFuICgpOwotLQlbQ0Nv ZGUgKGNuYW1lID0gImlzZmluaXRlIildCi0tCXB1YmxpYyBib29sIGlzX2Zpbml0ZSAoKTsKLS0J W0NDb2RlIChjbmFtZSA9ICJpc25vcm1hbCIpXQotLQlwdWJsaWMgYm9vbCBpc19ub3JtYWwgKCk7 Ci0tCVtDQ29kZSAoY25hbWUgPSAiaXNpbmYiKV0KLS0JcHVibGljIGludCBpc19pbmZpbml0eSAo KTsKLS0KLS0JW0NDb2RlIChjbmFtZSA9ICJNSU4iKV0KLS0JcHVibGljIHN0YXRpYyBkb3VibGUg bWluIChkb3VibGUgYSwgZG91YmxlIGIpOwotLQlbQ0NvZGUgKGNuYW1lID0gIk1BWCIpXQotLQlw dWJsaWMgc3RhdGljIGRvdWJsZSBtYXggKGRvdWJsZSBhLCBkb3VibGUgYik7Ci0tCVtDQ29kZSAo Y25hbWUgPSAiQ0xBTVAiKV0KLS0JcHVibGljIGRvdWJsZSBjbGFtcCAoZG91YmxlIGxvdywgZG91 YmxlIGhpZ2gpOwotLQlbQ0NvZGUgKGNuYW1lID0gImZhYnMiKV0KLS0JcHVibGljIGRvdWJsZSBh YnMgKCk7Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiR19BU0NJSV9EVE9TVFJfQlVGX1NJWkUiKV0K LS0JcHVibGljIGNvbnN0IGludCBEVE9TVFJfQlVGX1NJWkU7Ci0tCVtDQ29kZSAoY25hbWUgPSAi Z19hc2NpaV9kdG9zdHIiLCBpbnN0YW5jZV9wb3MgPSAtMSldCi0tCXB1YmxpYyB1bm93bmVkIHN0 cmluZyB0b19zdHIgKGNoYXJbXSBidWZmZXIpOwotLQlbQ0NvZGUgKGNuYW1lID0gImdfYXNjaWlf Zm9ybWF0ZCIsIGluc3RhbmNlX3BvcyA9IC0xKV0KLS0JcHVibGljIHVub3duZWQgc3RyaW5nIGZv cm1hdCAoY2hhcltdIGJ1ZmZlciwgc3RyaW5nIGZvcm1hdCA9ICIlZyIpOwotLQotLQlwdWJsaWMg c3RyaW5nIHRvX3N0cmluZyAoKSB7Ci0tCQlyZXR1cm4gdGhpcy50b19zdHIobmV3IGNoYXJbRFRP U1RSX0JVRl9TSVpFXSk7Ci0tCX0KLS0KLS0JW0NDb2RlIChjbmFtZSA9ICJnX2FzY2lpX3N0cnRv ZCIpXQotLQlzdGF0aWMgZG91YmxlIGFzY2lpX3N0cnRvZCAoc3RyaW5nIG5wdHIsIG91dCBjaGFy KiBlbmRwdHIpOwotLQotLQlwdWJsaWMgc3RhdGljIGRvdWJsZSBwYXJzZSAoc3RyaW5nIHN0cikg ewotLQkJcmV0dXJuIGFzY2lpX3N0cnRvZCAoc3RyLCBudWxsKTsKLS0JfQotLQotLQlwdWJsaWMg c3RhdGljIGJvb2wgdHJ5X3BhcnNlIChzdHJpbmcgc3RyLCBvdXQgZG91YmxlIHJlc3VsdCA9IG51 bGwsIG91dCB1bm93bmVkIHN0cmluZyB1bnBhcnNlZCA9IG51bGwpIHsKLS0JCWNoYXIqIGVuZHB0 cjsKLS0JCXJlc3VsdCA9IGFzY2lpX3N0cnRvZCAoc3RyLCBvdXQgZW5kcHRyKTsKLS0JCWlmIChl bmRwdHIgPT0gKGNoYXIqKSBzdHIgKyBzdHIubGVuZ3RoKSB7Ci0tCQkJdW5wYXJzZWQgPSAiIjsK LS0JCQlyZXR1cm4gdHJ1ZTsKLS0JCX0gZWxzZSB7Ci0tCQkJdW5wYXJzZWQgPSAoc3RyaW5nKSBl bmRwdHI7Ci0tCQkJcmV0dXJuIGZhbHNlOwotLQkJfQotLQl9Ci0tfQotLQotLVtHSVIgKG5hbWUg PSAiZ2xvbmciKV0KLS1bQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAidGltZS5oIiwgaGFzX3R5 cGVfaWQgPSBmYWxzZSwgZGVmYXVsdF92YWx1ZSA9ICIwIildCi0tW0ludGVnZXJUeXBlIChyYW5r ID0gOCldCi0tcHVibGljIHN0cnVjdCB0aW1lX3QgewotLQlbQ0NvZGUgKGNuYW1lID0gInRpbWUi KV0KLS0JcHVibGljIHRpbWVfdCAob3V0IHRpbWVfdCByZXN1bHQgPSBudWxsKTsKLS19Ci0tCi0t W1NpbXBsZVR5cGVdCi0tW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lPSJzdGRhcmcuaCIsIGNwcmVm aXg9InZhXyIsIGhhc190eXBlX2lkID0gZmFsc2UsIGRlc3Ryb3lfZnVuY3Rpb24gPSAidmFfZW5k IiwgbHZhbHVlX2FjY2VzcyA9IGZhbHNlKV0KLS1wdWJsaWMgc3RydWN0IHZhX2xpc3QgewotLQlb Q0NvZGUgKGNuYW1lID0gInZhX3N0YXJ0IildCi0tCXB1YmxpYyB2YV9saXN0ICgpOwotLQlbQ0Nv ZGUgKGNuYW1lID0gInZhX2NvcHkiKV0KLS0JcHVibGljIHZhX2xpc3QuY29weSAodmFfbGlzdCBz cmMpOwotLQlbQ0NvZGUgKGdlbmVyaWNfdHlwZV9wb3MgPSAxLjEsIHNpbXBsZV9nZW5lcmljcyA9 IHRydWUpXQotLQlwdWJsaWMgdW5vd25lZCBHIGFyZzxHPiAoKTsKLS19Ci0tCi0tW1NpbXBsZVR5 cGVdCi0tW0dJUiAobmFtZSA9ICJndW5pY2hhciIpXQotLVtDQ29kZSAoY25hbWUgPSAiZ3VuaWNo YXIiLCBjcHJlZml4ID0gImdfdW5pY2hhcl8iLCBjaGVhZGVyX2ZpbGVuYW1lID0gImdsaWIuaCIs IHR5cGVfaWQgPSAiR19UWVBFX1VJTlQiLCBtYXJzaGFsbGVyX3R5cGVfbmFtZSA9ICJVSU5UIiwg Z2V0X3ZhbHVlX2Z1bmN0aW9uID0gImdfdmFsdWVfZ2V0X3VpbnQiLCBzZXRfdmFsdWVfZnVuY3Rp b24gPSAiZ192YWx1ZV9zZXRfdWludCIsIGRlZmF1bHRfdmFsdWUgPSAiMFUiLCB0eXBlX3NpZ25h dHVyZSA9ICJ1IildCi0tW0ludGVnZXJUeXBlIChyYW5rID0gNyldCi0tcHVibGljIHN0cnVjdCB1 bmljaGFyIHsKLS0JcHVibGljIGJvb2wgdmFsaWRhdGUgKCk7Ci0tCXB1YmxpYyBib29sIGlzYWxu dW0gKCk7Ci0tCXB1YmxpYyBib29sIGlzYWxwaGEgKCk7Ci0tCXB1YmxpYyBib29sIGlzY250cmwg KCk7Ci0tCXB1YmxpYyBib29sIGlzZGlnaXQgKCk7Ci0tCXB1YmxpYyBib29sIGlzZ3JhcGggKCk7 Ci0tCXB1YmxpYyBib29sIGlzbG93ZXIgKCk7Ci0tCVtWZXJzaW9uIChzaW5jZSA9ICIyLjE0Iild Ci0tCXB1YmxpYyBib29sIGlzbWFyayAoKTsKLS0JcHVibGljIGJvb2wgaXNwcmludCAoKTsKLS0J cHVibGljIGJvb2wgaXNwdW5jdCAoKTsKLS0JcHVibGljIGJvb2wgaXNzcGFjZSAoKTsKLS0JcHVi bGljIGJvb2wgaXN1cHBlciAoKTsKLS0JcHVibGljIGJvb2wgaXN4ZGlnaXQgKCk7Ci0tCXB1Ymxp YyBib29sIGlzdGl0bGUgKCk7Ci0tCXB1YmxpYyBib29sIGlzZGVmaW5lZCAoKTsKLS0JcHVibGlj IGJvb2wgaXN3aWRlICgpOwotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xMiIpXQotLQlwdWJsaWMg Ym9vbCBpc3dpZGVfY2prICgpOwotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xNCIpXQotLQlwdWJs aWMgYm9vbCBpc3plcm93aWR0aCAoKTsKLS0JcHVibGljIHVuaWNoYXIgdG91cHBlciAoKTsKLS0J cHVibGljIHVuaWNoYXIgdG9sb3dlciAoKTsKLS0JcHVibGljIHVuaWNoYXIgdG90aXRsZSAoKTsK LS0JcHVibGljIGludCBkaWdpdF92YWx1ZSAoKTsKLS0JcHVibGljIGludCB4ZGlnaXRfdmFsdWUg KCk7Ci0tCXB1YmxpYyBHTGliLlVuaWNvZGVUeXBlIHR5cGUgKCk7Ci0tCXB1YmxpYyBHTGliLlVu aWNvZGVCcmVha1R5cGUgYnJlYWtfdHlwZSAoKTsKLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuMTQi KV0KLS0JcHVibGljIEdMaWIuVW5pY29kZVNjcmlwdCBnZXRfc2NyaXB0KCk7Ci0tCi0tCXB1Ymxp YyBpbnQgdG9fdXRmOCAoc3RyaW5nPyBvdXRidWYpOwotLQotLQlwdWJsaWMgc3RyaW5nIHRvX3N0 cmluZyAoKSB7Ci0tCQlzdHJpbmcgc3RyID0gKHN0cmluZykgbmV3IGNoYXJbN107Ci0tCQl0aGlz LnRvX3V0ZjggKHN0cik7Ci0tCQlyZXR1cm4gc3RyOwotLQl9Ci0tCi0tCVtWZXJzaW9uIChzaW5j ZSA9ICIyLjMwIildCi0tCXB1YmxpYyBib29sIGNvbXBvc2UgKHVuaWNoYXIgYiwgb3V0IHVuaWNo YXIgY2gpOwotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi4zMCIpXQotLQlwdWJsaWMgYm9vbCBkZWNv bXBvc2UgKG91dCB1bmljaGFyIGEsIG91dCB1bmljaGFyIGIpOwotLQlbVmVyc2lvbiAoc2luY2Ug PSAiMi4zMCIpXQotLQlwdWJsaWMgc2l6ZV90IGZ1bGx5X2RlY29tcG9zZSAoYm9vbCBjb21wYXQs IHVuaWNoYXJbXSByZXN1bHQpOwotLQotLQlbQ0NvZGUgKGNuYW1lID0gIk1JTiIpXQotLQlwdWJs aWMgc3RhdGljIHVuaWNoYXIgbWluICh1bmljaGFyIGEsIHVuaWNoYXIgYik7Ci0tCVtDQ29kZSAo Y25hbWUgPSAiTUFYIildCi0tCXB1YmxpYyBzdGF0aWMgdW5pY2hhciBtYXggKHVuaWNoYXIgYSwg dW5pY2hhciBiKTsKLS0JW0NDb2RlIChjbmFtZSA9ICJDTEFNUCIpXQotLQlwdWJsaWMgdW5pY2hh ciBjbGFtcCAodW5pY2hhciBsb3csIHVuaWNoYXIgaGlnaCk7Ci0tCi0tCVtDQ29kZSAoY25hbWUg PSAiR19VTklDSEFSX01BWF9ERUNPTVBPU0lUSU9OX0xFTkdUSCIpXQotLQlwdWJsaWMgY29uc3Qg aW50IE1BWF9ERUNPTVBPU0lUSU9OX0xFTkdUSDsKLS0KLS0JW0NDb2RlIChjbmFtZSA9ICJHX0dV SU5UMzJfRk9STUFUIildCi0tCXB1YmxpYyBjb25zdCBzdHJpbmcgRk9STUFUOwotLQlbQ0NvZGUg KGNuYW1lID0gIkdfR0lOVDMyX01PRElGSUVSIildCi0tCXB1YmxpYyBjb25zdCBzdHJpbmcgRk9S TUFUX01PRElGSUVSOwotLX0KLS0KLS1bU2ltcGxlVHlwZV0KLS1bR0lSIChuYW1lID0gImd1aW50 MTYiKV0KLS1bQ0NvZGUgKGNuYW1lID0gImd1bmljaGFyMiIsIGNoZWFkZXJfZmlsZW5hbWUgPSAi Z2xpYi5oIiwgZGVmYXVsdF92YWx1ZSA9ICIwVSIsIHR5cGVfc2lnbmF0dXJlID0gInEiLCBoYXNf dHlwZV9pZCA9IGZhbHNlKV0KLS1bSW50ZWdlclR5cGUgKHJhbmsgPSA1KV0KLS1wdWJsaWMgc3Ry dWN0IHVuaWNoYXIyIHsKLS0JW0NDb2RlIChjbmFtZSA9ICJHX0dVSU5UMTZfRk9STUFUIildCi0t CXB1YmxpYyBjb25zdCBzdHJpbmcgRk9STUFUOwotLQlbQ0NvZGUgKGNuYW1lID0gIkdfR0lOVDE2 X01PRElGSUVSIildCi0tCXB1YmxpYyBjb25zdCBzdHJpbmcgRk9STUFUX01PRElGSUVSOwotLX0K LS0KLS1bQ29tcGFjdF0KLS1bSW1tdXRhYmxlXQotLVtHSVIgKG5hbWUgPSAidXRmOCIpXQotLVtD Q29kZSAoY25hbWUgPSAiZ2NoYXIiLCBjb25zdF9jbmFtZSA9ICJjb25zdCBnY2hhciIsIGNvcHlf ZnVuY3Rpb24gPSAiZ19zdHJkdXAiLCBmcmVlX2Z1bmN0aW9uID0gImdfZnJlZSIsIGNoZWFkZXJf ZmlsZW5hbWUgPSAic3RkbGliLmgsc3RyaW5nLmgsZ2xpYi5oIiwgdHlwZV9pZCA9ICJHX1RZUEVf U1RSSU5HIiwgbWFyc2hhbGxlcl90eXBlX25hbWUgPSAiU1RSSU5HIiwgcGFyYW1fc3BlY19mdW5j dGlvbiA9ICJnX3BhcmFtX3NwZWNfc3RyaW5nIiwgZ2V0X3ZhbHVlX2Z1bmN0aW9uID0gImdfdmFs dWVfZ2V0X3N0cmluZyIsIHNldF92YWx1ZV9mdW5jdGlvbiA9ICJnX3ZhbHVlX3NldF9zdHJpbmci LCB0YWtlX3ZhbHVlX2Z1bmN0aW9uID0gImdfdmFsdWVfdGFrZV9zdHJpbmciLCB0eXBlX3NpZ25h dHVyZSA9ICJzIildCi0tcHVibGljIGNsYXNzIHN0cmluZyB7Ci0tCVtWZXJzaW9uIChyZXBsYWNl bWVudCA9ICJzdHJpbmcuaW5kZXhfb2YiKV0KLS0JW0NDb2RlIChjbmFtZSA9ICJzdHJzdHIiKV0K LS0JcHVibGljIHVub3duZWQgc3RyaW5nPyBzdHIgKHN0cmluZyBuZWVkbGUpOwotLQlbVmVyc2lv biAocmVwbGFjZW1lbnQgPSAic3RyaW5nLmxhc3RfaW5kZXhfb2YiKV0KLS0JW0NDb2RlIChjbmFt ZSA9ICJnX3N0cnJzdHIiKV0KLS0JcHVibGljIHVub3duZWQgc3RyaW5nPyByc3RyIChzdHJpbmcg bmVlZGxlKTsKLS0JW0NDb2RlIChjbmFtZSA9ICJnX3N0cnJzdHJfbGVuIildCi0tCXB1YmxpYyB1 bm93bmVkIHN0cmluZz8gcnN0cl9sZW4gKHNzaXplX3QgaGF5c3RhY2tfbGVuLCBzdHJpbmcgbmVl ZGxlKTsKLS0KLS0JW0NDb2RlIChjbmFtZSA9ICJzdHJzdHIiKV0KLS0Jc3RhdGljIGNoYXIqIHN0 cnN0ciAoY2hhciogaGF5c3RhY2ssIGNoYXIqIG5lZWRsZSk7Ci0tCVtDQ29kZSAoY25hbWUgPSAi Z19zdHJyc3RyIildCi0tCXN0YXRpYyBjaGFyKiBzdHJyc3RyIChjaGFyKiBoYXlzdGFjaywgY2hh ciogbmVlZGxlKTsKLS0JW0NDb2RlIChjbmFtZSA9ICJnX3V0Zjhfc3RyY2hyIildCi0tCXN0YXRp YyBjaGFyKiB1dGY4X3N0cmNociAoY2hhciogc3RyLCBzc2l6ZV90IGxlbiwgdW5pY2hhciBjKTsK LS0JW0NDb2RlIChjbmFtZSA9ICJnX3V0Zjhfc3RycmNociIpXQotLQlzdGF0aWMgY2hhciogdXRm OF9zdHJyY2hyIChjaGFyKiBzdHIsIHNzaXplX3QgbGVuLCB1bmljaGFyIGMpOwotLQotLQlwdWJs aWMgaW50IGluZGV4X29mIChzdHJpbmcgbmVlZGxlLCBpbnQgc3RhcnRfaW5kZXggPSAwKSB7Ci0t CQljaGFyKiByZXN1bHQgPSBzdHJzdHIgKChjaGFyKikgdGhpcyArIHN0YXJ0X2luZGV4LCAoY2hh ciopIG5lZWRsZSk7Ci0tCi0tCQlpZiAocmVzdWx0ICE9IG51bGwpIHsKLS0JCQlyZXR1cm4gKGlu dCkgKHJlc3VsdCAtIChjaGFyKikgdGhpcyk7Ci0tCQl9IGVsc2UgewotLQkJCXJldHVybiAtMTsK LS0JCX0KLS0JfQotLQotLQlwdWJsaWMgaW50IGxhc3RfaW5kZXhfb2YgKHN0cmluZyBuZWVkbGUs IGludCBzdGFydF9pbmRleCA9IDApIHsKLS0JCWNoYXIqIHJlc3VsdCA9IHN0cnJzdHIgKChjaGFy KikgdGhpcyArIHN0YXJ0X2luZGV4LCAoY2hhciopIG5lZWRsZSk7Ci0tCi0tCQlpZiAocmVzdWx0 ICE9IG51bGwpIHsKLS0JCQlyZXR1cm4gKGludCkgKHJlc3VsdCAtIChjaGFyKikgdGhpcyk7Ci0t CQl9IGVsc2UgewotLQkJCXJldHVybiAtMTsKLS0JCX0KLS0JfQotLQotLQlwdWJsaWMgaW50IGlu ZGV4X29mX2NoYXIgKHVuaWNoYXIgYywgaW50IHN0YXJ0X2luZGV4ID0gMCkgewotLQkJY2hhciog cmVzdWx0ID0gdXRmOF9zdHJjaHIgKChjaGFyKikgdGhpcyArIHN0YXJ0X2luZGV4LCAtMSwgYyk7 Ci0tCi0tCQlpZiAocmVzdWx0ICE9IG51bGwpIHsKLS0JCQlyZXR1cm4gKGludCkgKHJlc3VsdCAt IChjaGFyKikgdGhpcyk7Ci0tCQl9IGVsc2UgewotLQkJCXJldHVybiAtMTsKLS0JCX0KLS0JfQot LQotLQlwdWJsaWMgaW50IGxhc3RfaW5kZXhfb2ZfY2hhciAodW5pY2hhciBjLCBpbnQgc3RhcnRf aW5kZXggPSAwKSB7Ci0tCQljaGFyKiByZXN1bHQgPSB1dGY4X3N0cnJjaHIgKChjaGFyKikgdGhp cyArIHN0YXJ0X2luZGV4LCAtMSwgYyk7Ci0tCi0tCQlpZiAocmVzdWx0ICE9IG51bGwpIHsKLS0J CQlyZXR1cm4gKGludCkgKHJlc3VsdCAtIChjaGFyKikgdGhpcyk7Ci0tCQl9IGVsc2UgewotLQkJ CXJldHVybiAtMTsKLS0JCX0KLS0JfQotLQotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi4yIildCi0t CVtDQ29kZSAoY25hbWUgPSAiZ19zdHJfaGFzX3ByZWZpeCIpXQotLQlwdWJsaWMgYm9vbCBoYXNf cHJlZml4IChzdHJpbmcgcHJlZml4KTsKLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuMiIpXQotLQlb Q0NvZGUgKGNuYW1lID0gImdfc3RyX2hhc19zdWZmaXgiKV0KLS0JcHVibGljIGJvb2wgaGFzX3N1 ZmZpeCAoc3RyaW5nIHN1ZmZpeCk7Ci0tCVtDQ29kZSAoY25hbWUgPSAiZ19zdHJkdXBfcHJpbnRm IiksIFByaW50ZkZvcm1hdF0KLS0JcHVibGljIHN0cmluZyBwcmludGYgKC4uLik7Ci0tCVtDQ29k ZSAoY25hbWUgPSAiZ19zdHJkdXBfdnByaW50ZiIpXQotLQlwdWJsaWMgc3RyaW5nIHZwcmludGYg KHZhX2xpc3QgYXJncyk7Ci0tCVtDQ29kZSAoY25hbWUgPSAic3NjYW5mIiwgY2hlYWRlcl9maWxl bmFtZSA9ICJzdGRpby5oIiksIFNjYW5mRm9ybWF0XQotLQlwdWJsaWMgaW50IHNjYW5mIChzdHJp bmcgZm9ybWF0LCAuLi4pOwotLQlbQ0NvZGUgKGNuYW1lID0gImdfc3RyY29uY2F0IildCi0tCXB1 YmxpYyBzdHJpbmcgY29uY2F0IChzdHJpbmcgc3RyaW5nMiwgLi4uKTsKLS0JW0NDb2RlIChjbmFt ZSA9ICJnX3N0cmVzY2FwZSIpXQotLQlwdWJsaWMgc3RyaW5nIGVzY2FwZSAoc3RyaW5nPyBleGNl cHRpb25zID0gbnVsbCk7Ci0tCVtDQ29kZSAoY25hbWUgPSAiZ19zdHJjb21wcmVzcyIpXQotLQlw dWJsaWMgc3RyaW5nIGNvbXByZXNzICgpOwotLQlbQ0NvZGUgKGNuYW1lID0gImdfc3Ryc3BsaXQi LCBhcnJheV9sZW5ndGggPSBmYWxzZSwgYXJyYXlfbnVsbF90ZXJtaW5hdGVkID0gdHJ1ZSldCi0t CXB1YmxpYyBzdHJpbmdbXSBzcGxpdCAoc3RyaW5nIGRlbGltaXRlciwgaW50IG1heF90b2tlbnMg PSAwKTsKLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuNCIpXQotLQlbQ0NvZGUgKGNuYW1lID0gImdf c3Ryc3BsaXRfc2V0IiwgYXJyYXlfbGVuZ3RoID0gZmFsc2UsIGFycmF5X251bGxfdGVybWluYXRl ZCA9IHRydWUpXQotLQlwdWJsaWMgc3RyaW5nW10gc3BsaXRfc2V0IChzdHJpbmcgZGVsaW1pdGVy cywgaW50IG1heF90b2tlbnMgPSAwKTsKLS0JW0NDb2RlIChjbmFtZSA9ICJnX3N0cGNweSIpXQot LQlwcml2YXRlIHN0YXRpYyB2b2lkKiBjb3B5X3RvX2J1ZmZlciAodm9pZCogZGVzdCwgc3RyaW5n IHNyYyk7Ci0tCVtDQ29kZSAoY25hbWUgPSAiX3ZhbGFfZ19zdHJqb2ludiIpXQotLQlwdWJsaWMg c3RhdGljIHN0cmluZyBqb2ludiAoc3RyaW5nPyBzZXBhcmF0b3IsIHN0cmluZz9bXT8gc3RyX2Fy cmF5KSB7Ci0tCQlpZiAoc2VwYXJhdG9yID09IG51bGwpIHsKLS0JCQlzZXBhcmF0b3IgPSAiIjsK LS0JCX0KLS0JCWlmIChzdHJfYXJyYXkgIT0gbnVsbCAmJiAoc3RyX2FycmF5Lmxlbmd0aCA+IDAg fHwgKHN0cl9hcnJheS5sZW5ndGggPT0gLTEgJiYgc3RyX2FycmF5WzBdICE9IG51bGwpKSkgewot LQkJCWludCBpOwotLQkJCXNpemVfdCBsZW4gPSAxOwotLQkJCWZvciAoaSA9IDAgOyAoc3RyX2Fy cmF5Lmxlbmd0aCAhPSAtMSAmJiBpIDwgc3RyX2FycmF5Lmxlbmd0aCkgfHwgKHN0cl9hcnJheS5s ZW5ndGggPT0gLTEgJiYgc3RyX2FycmF5W2ldICE9IG51bGwpIDsgaSsrKSB7Ci0tCQkJCWxlbiAr PSAoc3RyX2FycmF5W2ldICE9IG51bGwpID8gKCghKSBzdHJfYXJyYXlbaV0pLmxlbmd0aCA6IDA7 Ci0tCQkJfQotLQkJCWlmIChpID09IDApIHsKLS0JCQkJcmV0dXJuICIiOwotLQkJCX0KLS0JCQlz dHJfYXJyYXkubGVuZ3RoID0gaTsKLS0JCQlsZW4gKz0gKCghKSBzZXBhcmF0b3IpLmxlbmd0aCAq IChpIC0gMSk7Ci0tCi0tCQkJc3RyaW5nKiByZXMgPSBHTGliLm1hbGxvYyAobGVuKTsKLS0JCQl2 b2lkKiBwdHIgPSBzdHJpbmcuY29weV90b19idWZmZXIgKCh2b2lkKikgcmVzLCAoISkgc3RyX2Fy cmF5WzBdKTsKLS0JCQlmb3IgKGkgPSAxIDsgaSA8IHN0cl9hcnJheS5sZW5ndGggOyBpKyspIHsK LS0JCQkJcHRyID0gc3RyaW5nLmNvcHlfdG9fYnVmZmVyIChwdHIsICghKSBzZXBhcmF0b3IpOwot LQkJCQlwdHIgPSBzdHJpbmcuY29weV90b19idWZmZXIgKHB0ciwgKHN0cl9hcnJheVtpXSAhPSBu dWxsKSA/ICgoISkgc3RyX2FycmF5W2ldKSA6ICIiKTsKLS0JCQl9Ci0tCi0tCQkJcmV0dXJuIChv d25lZCkgcmVzOwotLQkJfSBlbHNlIHsKLS0JCQlyZXR1cm4gIiI7Ci0tCQl9Ci0tCX0KLS0JW0ND b2RlIChjbmFtZSA9ICJnX3N0cmpvaW4iKV0KLS0JcHVibGljIHN0YXRpYyBzdHJpbmcgam9pbiAo c3RyaW5nIHNlcGFyYXRvciwgLi4uKTsKLS0JW0NDb2RlIChjbmFtZSA9ICJnX3N0cm5maWxsIild Ci0tCXB1YmxpYyBzdGF0aWMgc3RyaW5nIG5maWxsIChzaXplX3QgbGVuZ3RoLCBjaGFyIGZpbGxf Y2hhcik7Ci0tCi0tCXB1YmxpYyBjaGFyIGdldCAobG9uZyBpbmRleCkgewotLQkJcmV0dXJuICgo Y2hhciopIHRoaXMpW2luZGV4XTsKLS0JfQotLQotLQkvLyBjaGVja3Mgd2hldGhlciB2YWxpZCBz dHJpbmcgY2hhcmFjdGVyIHN0YXJ0cyBhdCBzcGVjaWZpZWQgaW5kZXgKLS0JLy8gZW1iZWRkZWQg TlVMcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgc3RyaW5nIGNsYXNzCi0tCXB1YmxpYyBib29s IHZhbGlkX2NoYXIgKGludCBpbmRleCkgewotLQkJdWludDggYyA9ICgodWludDgqKSB0aGlzKVtp bmRleF07Ci0tCQlpZiAoYyA9PSAweDAwIHx8IChjID49IDB4ODAgJiYgYyA8IDB4YzIpIHx8IGMg Pj0gMHhmNSkgewotLQkJCXJldHVybiBmYWxzZTsKLS0JCX0gZWxzZSB7Ci0tCQkJcmV0dXJuIHRy dWU7Ci0tCQl9Ci0tCX0KLS0KLS0JW0NDb2RlIChjbmFtZSA9ICJnX3V0ZjhfbmV4dF9jaGFyIild Ci0tCXB1YmxpYyB1bm93bmVkIHN0cmluZyBuZXh0X2NoYXIgKCk7Ci0tCVtDQ29kZSAoY25hbWUg PSAiZ191dGY4X25leHRfY2hhciIpXQotLQlzdGF0aWMgY2hhciogdXRmOF9uZXh0X2NoYXIgKGNo YXIqIHN0cik7Ci0tCXB1YmxpYyBib29sIGdldF9uZXh0X2NoYXIgKHJlZiBpbnQgaW5kZXgsIG91 dCB1bmljaGFyIGMpIHsKLS0JCWMgPSB1dGY4X2dldF9jaGFyICgoY2hhciopIHRoaXMgKyBpbmRl eCk7Ci0tCQlpZiAoYyAhPSAwKSB7Ci0tCQkJaW5kZXggPSAoaW50KSAodXRmOF9uZXh0X2NoYXIg KChjaGFyKikgdGhpcyArIGluZGV4KSAtIChjaGFyKikgdGhpcyk7Ci0tCQkJcmV0dXJuIHRydWU7 Ci0tCQl9IGVsc2UgewotLQkJCXJldHVybiBmYWxzZTsKLS0JCX0KLS0JfQotLQlbQ0NvZGUgKGNu YW1lID0gImdfdXRmOF9nZXRfY2hhciIpXQotLQlzdGF0aWMgdW5pY2hhciB1dGY4X2dldF9jaGFy IChjaGFyKiBzdHIpOwotLQlwdWJsaWMgdW5pY2hhciBnZXRfY2hhciAobG9uZyBpbmRleCA9IDAp IHsKLS0JCXJldHVybiB1dGY4X2dldF9jaGFyICgoY2hhciopIHRoaXMgKyBpbmRleCk7Ci0tCX0K LS0JW0NDb2RlIChjbmFtZSA9ICJnX3V0ZjhfZ2V0X2NoYXJfdmFsaWRhdGVkIildCi0tCXB1Ymxp YyB1bmljaGFyIGdldF9jaGFyX3ZhbGlkYXRlZCAoc3NpemVfdCBtYXhfbGVuID0gLTEpOwotLQot LQlbVmVyc2lvbiAocmVwbGFjZW1lbnQgPSAic3RyaW5nLmluZGV4X29mX250aF9jaGFyIildCi0t CVtDQ29kZSAoY25hbWUgPSAiZ191dGY4X29mZnNldF90b19wb2ludGVyIildCi0tCXB1YmxpYyB1 bm93bmVkIHN0cmluZyB1dGY4X29mZnNldCAobG9uZyBvZmZzZXQpOwotLQlwdWJsaWMgdW5vd25l ZCBzdHJpbmcgb2Zmc2V0IChsb25nIG9mZnNldCkgewotLQkJcmV0dXJuIChzdHJpbmcpICgoY2hh ciopIHRoaXMgKyBvZmZzZXQpOwotLQl9Ci0tCVtWZXJzaW9uIChyZXBsYWNlbWVudCA9ICJzdHJp bmcuY2hhcl9jb3VudCIpXQotLQlwdWJsaWMgbG9uZyBwb2ludGVyX3RvX29mZnNldCAoc3RyaW5n IHBvcykgewotLQkJcmV0dXJuIChsb25nKSAoKGNoYXIqKSBwb3MgLSAoY2hhciopIHRoaXMpOwot LQl9Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiZ191dGY4X29mZnNldF90b19wb2ludGVyIildCi0t CWNoYXIqIHV0Zjhfb2Zmc2V0X3RvX3BvaW50ZXIgKGxvbmcgb2Zmc2V0KTsKLS0KLS0JcHVibGlj IGludCBpbmRleF9vZl9udGhfY2hhciAobG9uZyBjKSB7Ci0tCQlyZXR1cm4gKGludCkgKHRoaXMu dXRmOF9vZmZzZXRfdG9fcG9pbnRlciAoYykgLSAoY2hhciopIHRoaXMpOwotLQl9Ci0tCi0tCVtD Q29kZSAoY25hbWUgPSAiZ191dGY4X3ByZXZfY2hhciIpXQotLQlwdWJsaWMgdW5vd25lZCBzdHJp bmcgcHJldl9jaGFyICgpOwotLQlbQ0NvZGUgKGNuYW1lID0gImdfdXRmOF9wcmV2X2NoYXIiKV0K LS0Jc3RhdGljIGNoYXIqIHV0ZjhfcHJldl9jaGFyIChjaGFyKiBzdHIpOwotLQlwdWJsaWMgYm9v bCBnZXRfcHJldl9jaGFyIChyZWYgaW50IGluZGV4LCBvdXQgdW5pY2hhciBjKSB7Ci0tCQlpZiAo MCA8IGluZGV4KSB7Ci0tCQkJaW5kZXggPSAoaW50KSAodXRmOF9wcmV2X2NoYXIgKChjaGFyKikg dGhpcyArIGluZGV4KSAtIChjaGFyKikgdGhpcyk7Ci0tCQkJYyA9IHV0ZjhfZ2V0X2NoYXIgKChj aGFyKikgdGhpcyArIGluZGV4KTsKLS0JCQlyZXR1cm4gdHJ1ZTsKLS0JCX0gZWxzZSB7Ci0tCQkJ YyA9IDA7Ci0tCQkJcmV0dXJuIGZhbHNlOwotLQkJfQotLQl9Ci0tCi0tCVtWZXJzaW9uIChyZXBs YWNlbWVudCA9ICJzdHJpbmcubGVuZ3RoIildCi0tCVtDQ29kZSAoY25hbWUgPSAic3RybGVuIild Ci0tCXB1YmxpYyBsb25nIGxlbiAoKTsKLS0JW1ZlcnNpb24gKHJlcGxhY2VtZW50ID0gInN0cmlu Zy5pbmRleF9vZl9jaGFyIildCi0tCVtDQ29kZSAoY25hbWUgPSAiZ191dGY4X3N0cmNociIpXQot LQlwdWJsaWMgdW5vd25lZCBzdHJpbmcgY2hyIChzc2l6ZV90IGxlbiwgdW5pY2hhciBjKTsKLS0J W1ZlcnNpb24gKHJlcGxhY2VtZW50ID0gInN0cmluZy5sYXN0X2luZGV4X29mX2NoYXIiKV0KLS0J W0NDb2RlIChjbmFtZSA9ICJnX3V0Zjhfc3RycmNociIpXQotLQlwdWJsaWMgdW5vd25lZCBzdHJp bmcgcmNociAoc3NpemVfdCBsZW4sIHVuaWNoYXIgYyk7Ci0tCVtWZXJzaW9uIChzaW5jZSA9ICIy LjIiKV0KLS0JW0NDb2RlIChjbmFtZSA9ICJnX3V0Zjhfc3RycmV2ZXJzZSIpXQotLQlwdWJsaWMg c3RyaW5nIHJldmVyc2UgKHNzaXplX3QgbGVuID0gLTEpOwotLQlbQ0NvZGUgKGNuYW1lID0gImdf dXRmOF92YWxpZGF0ZSIpXQotLQlwdWJsaWMgYm9vbCB2YWxpZGF0ZSAoc3NpemVfdCBtYXhfbGVu ID0gLTEsIG91dCBjaGFyKiBlbmQgPSBudWxsKTsKLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuNTIi KV0KLS0JW0NDb2RlIChjbmFtZSA9ICJnX3V0ZjhfbWFrZV92YWxpZCIpXQotLQlwdWJsaWMgc3Ry aW5nIG1ha2VfdmFsaWQgKHNzaXplX3QgbGVuID0gLTEpOwotLQlbQ0NvZGUgKGNuYW1lID0gImdf dXRmOF9ub3JtYWxpemUiKV0KLS0JcHVibGljIHN0cmluZyBub3JtYWxpemUgKHNzaXplX3QgbGVu ID0gLTEsIEdMaWIuTm9ybWFsaXplTW9kZSBtb2RlID0gR0xpYi5Ob3JtYWxpemVNb2RlLkRFRkFV TFQpOwotLQotLQlbQ0NvZGUgKGNuYW1lID0gImdfdXRmOF9zdHJ1cCIpXQotLQlwdWJsaWMgc3Ry aW5nIHVwIChzc2l6ZV90IGxlbiA9IC0xKTsKLS0JW0NDb2RlIChjbmFtZSA9ICJnX3V0Zjhfc3Ry ZG93biIpXQotLQlwdWJsaWMgc3RyaW5nIGRvd24gKHNzaXplX3QgbGVuID0gLTEpOwotLQlbQ0Nv ZGUgKGNuYW1lID0gImdfdXRmOF9jYXNlZm9sZCIpXQotLQlwdWJsaWMgc3RyaW5nIGNhc2Vmb2xk IChzc2l6ZV90IGxlbiA9IC0xKTsKLS0JW0NDb2RlIChjbmFtZSA9ICJnX3V0ZjhfY29sbGF0ZSIp XQotLQlwdWJsaWMgaW50IGNvbGxhdGUgKHN0cmluZyBzdHIyKTsKLS0JW0NDb2RlIChjbmFtZSA9 ICJnX3V0ZjhfY29sbGF0ZV9rZXkiKV0KLS0JcHVibGljIHN0cmluZyBjb2xsYXRlX2tleSAoc3Np emVfdCBsZW4gPSAtMSk7Ci0tCVtWZXJzaW9uIChzaW5jZSA9ICIyLjgiKV0KLS0JW0NDb2RlIChj bmFtZSA9ICJnX3V0ZjhfY29sbGF0ZV9rZXlfZm9yX2ZpbGVuYW1lIildCi0tCXB1YmxpYyBzdHJp bmcgY29sbGF0ZV9rZXlfZm9yX2ZpbGVuYW1lIChzc2l6ZV90IGxlbiA9IC0xKTsKLS0KLS0JW0ND b2RlIChjbmFtZSA9ICJnX2xvY2FsZV90b191dGY4IildCi0tCXB1YmxpYyBzdHJpbmcgbG9jYWxl X3RvX3V0ZjggKHNzaXplX3QgbGVuLCBvdXQgc2l6ZV90IGJ5dGVzX3JlYWQsIG91dCBzaXplX3Qg Ynl0ZXNfd3JpdHRlbiwgb3V0IEdMaWIuRXJyb3IgZXJyb3IgPSBudWxsKTsKLS0KLS0JW0NDb2Rl IChjbmFtZSA9ICJnX3N0cmNob21wIildCi0tCXB1YmxpYyB1bm93bmVkIHN0cmluZyBfY2hvbXAo KTsKLS0JcHVibGljIHN0cmluZyBjaG9tcCAoKSB7Ci0tCQlzdHJpbmcgcmVzdWx0ID0gdGhpcy5k dXAgKCk7Ci0tCQlyZXN1bHQuX2Nob21wICgpOwotLQkJcmV0dXJuIHJlc3VsdDsKLS0JfQotLQot LQlbQ0NvZGUgKGNuYW1lID0gImdfc3RyY2h1ZyIpXQotLQlwdWJsaWMgdW5vd25lZCBzdHJpbmcg X2NodWcoKTsKLS0JcHVibGljIHN0cmluZyBjaHVnICgpIHsKLS0JCXN0cmluZyByZXN1bHQgPSB0 aGlzLmR1cCAoKTsKLS0JCXJlc3VsdC5fY2h1ZyAoKTsKLS0JCXJldHVybiByZXN1bHQ7Ci0tCX0K LS0KLS0JW0NDb2RlIChjbmFtZSA9ICJnX3N0cnN0cmlwIildCi0tCXB1YmxpYyB1bm93bmVkIHN0 cmluZyBfc3RyaXAgKCk7Ci0tCXB1YmxpYyBzdHJpbmcgc3RyaXAgKCkgewotLQkJc3RyaW5nIHJl c3VsdCA9IHRoaXMuZHVwICgpOwotLQkJcmVzdWx0Ll9zdHJpcCAoKTsKLS0JCXJldHVybiByZXN1 bHQ7Ci0tCX0KLS0KLS0JW0NDb2RlIChjbmFtZSA9ICJnX3N0cmRlbGltaXQiKV0KLS0JcHVibGlj IHVub3duZWQgc3RyaW5nIF9kZWxpbWl0IChzdHJpbmcgZGVsaW1pdGVycywgY2hhciBuZXdfZGVs aW1pdGVyKTsKLS0JcHVibGljIHN0cmluZyBkZWxpbWl0IChzdHJpbmcgZGVsaW1pdGVycywgY2hh ciBuZXdfZGVsaW1pdGVyKSB7Ci0tCQlzdHJpbmcgcmVzdWx0ID0gdGhpcy5kdXAgKCk7Ci0tCQly ZXN1bHQuX2RlbGltaXQgKGRlbGltaXRlcnMsIG5ld19kZWxpbWl0ZXIpOwotLQkJcmV0dXJuIHJl c3VsdDsKLS0JfQotLQotLQlbQ0NvZGUgKGNuYW1lID0gImdfc3RyX2hhc2giKV0KLS0JcHVibGlj IHVpbnQgaGFzaCAoKTsKLS0KLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuNDAiKV0KLS0JW0NDb2Rl IChjbmFtZSA9ICJnX3N0cl9pc19hc2NpaSIpXQotLQlwdWJsaWMgYm9vbCBpc19hc2NpaSAoKTsK LS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuNDAiKV0KLS0JW0NDb2RlIChpbnN0YW5jZV9wb3MgPSAi MS41IiwgY25hbWUgPSAiZ19zdHJfbWF0Y2hfc3RyaW5nIildCi0tCXB1YmxpYyBib29sIG1hdGNo X3N0cmluZyAoc3RyaW5nIHNlYXJjaF90ZXJtLCBib29sIGFjY2VwdF9hbHRlcm5hdGVzKTsKLS0J W1ZlcnNpb24gKHNpbmNlID0gIjIuNDAiKV0KLS0JW0NDb2RlIChjbmFtZSA9ICJnX3N0cl90b19h c2NpaSIpXQotLQlwdWJsaWMgc3RyaW5nIHRvX2FzY2lpIChzdHJpbmc/IGZyb21fbG9jYWxlID0g bnVsbCk7Ci0tCVtWZXJzaW9uIChyZXBsYWNlbWVudCA9ICJpbnQucGFyc2UiKV0KLS0JW0NDb2Rl IChjbmFtZSA9ICJhdG9pIildCi0tCXB1YmxpYyBpbnQgdG9faW50ICgpOwotLQlbVmVyc2lvbiAo cmVwbGFjZW1lbnQgPSAibG9uZy5wYXJzZSIpXQotLQlbQ0NvZGUgKGNuYW1lID0gInN0cnRvbCIp XQotLQlwdWJsaWMgbG9uZyB0b19sb25nIChvdXQgdW5vd25lZCBzdHJpbmcgZW5kcHRyID0gbnVs bCwgaW50IF9iYXNlID0gMCk7Ci0tCVtWZXJzaW9uIChyZXBsYWNlbWVudCA9ICJkb3VibGUucGFy c2UiKV0KLS0JW0NDb2RlIChjbmFtZSA9ICJnX2FzY2lpX3N0cnRvZCIpXQotLQlwdWJsaWMgZG91 YmxlIHRvX2RvdWJsZSAob3V0IHVub3duZWQgc3RyaW5nIGVuZHB0ciA9IG51bGwpOwotLQlbVmVy c2lvbiAocmVwbGFjZW1lbnQgPSAidWxvbmcucGFyc2UiKV0KLS0JW0NDb2RlIChjbmFtZSA9ICJz dHJ0b3VsIildCi0tCXB1YmxpYyB1bG9uZyB0b191bG9uZyAob3V0IHVub3duZWQgc3RyaW5nIGVu ZHB0ciA9IG51bGwsIGludCBfYmFzZSA9IDApOwotLQlbVmVyc2lvbiAocmVwbGFjZW1lbnQgPSAi aW50NjQucGFyc2UiKV0KLS0JW0NDb2RlIChjbmFtZSA9ICJnX2FzY2lpX3N0cnRvbGwiKV0KLS0J cHVibGljIGludDY0IHRvX2ludDY0IChvdXQgdW5vd25lZCBzdHJpbmcgZW5kcHRyID0gbnVsbCwg aW50IF9iYXNlID0gMCk7Ci0tCVtWZXJzaW9uIChyZXBsYWNlbWVudCA9ICJ1aW50NjQucGFyc2Ui LCBzaW5jZSA9ICIyLjIiKV0KLS0JW0NDb2RlIChjbmFtZSA9ICJnX2FzY2lpX3N0cnRvdWxsIild Ci0tCXB1YmxpYyB1aW50NjQgdG9fdWludDY0IChvdXQgdW5vd25lZCBzdHJpbmcgZW5kcHRyID0g bnVsbCwgaW50IF9iYXNlID0gMCk7Ci0tCVtDQ29kZSAoY25hbWUgPSAiZ19zdHJfdG9rZW5pemVf YW5kX2ZvbGQiLCBhcnJheV9sZW5ndGggPSBmYWxzZSwgYXJyYXlfbnVsbF90ZXJtaW5hdGVkID0g dHJ1ZSldCi0tCVtWZXJzaW9uIChzaW5jZSA9ICIyLjQwIildCi0tCXB1YmxpYyBzdHJpbmdbXSB0 b2tlbml6ZV9hbmRfZm9sZCAoc3RyaW5nIHRyYW5zaXRfbG9jYWxlLCBbQ0NvZGUgKGFycmF5X2xl bmd0aCA9IGZhbHNlLCBhcnJheV9udWxsX3Rlcm1pbmF0ZWQgPSB0cnVlKV0gb3V0IHN0cmluZ1td IGFzY2lpX2FsdGVybmF0ZXMpOwotLQotLQlbVmVyc2lvbiAocmVwbGFjZW1lbnQgPSAiYm9vbC5w YXJzZSIpXQotLQlwdWJsaWMgYm9vbCB0b19ib29sICgpIHsKLS0JCWlmICh0aGlzID09ICJ0cnVl IikgewotLQkJCXJldHVybiB0cnVlOwotLQkJfSBlbHNlIHsKLS0JCQlyZXR1cm4gZmFsc2U7Ci0t CQl9Ci0tCX0KLS0KLS0JW1ZlcnNpb24gKHJlcGxhY2VtZW50ID0gInN0cmluZy5sZW5ndGgiKV0K LS0JW0NDb2RlIChjbmFtZSA9ICJzdHJsZW4iKV0KLS0JcHVibGljIHNpemVfdCBzaXplICgpOwot LQotLQlbQ0NvZGUgKGNuYW1lID0gImdfYXNjaWlfc3RyY2FzZWNtcCIpXQotLQlwdWJsaWMgaW50 IGFzY2lpX2Nhc2VjbXAgKHN0cmluZyBzMik7Ci0tCVtDQ29kZSAoY25hbWUgPSAiZ19hc2NpaV9z dHJuY2FzZWNtcCIpXQotLQlwdWJsaWMgaW50IGFzY2lpX25jYXNlY21wIChzdHJpbmcgczIsIHNp emVfdCBuKTsKLS0JW0NDb2RlIChjbmFtZSA9ICJnX2FzY2lpX3N0cnVwIildCi0tCXB1YmxpYyBz dHJpbmcgYXNjaWlfdXAgKHNzaXplX3QgbGVuID0gLTEpOwotLQlbQ0NvZGUgKGNuYW1lID0gImdf YXNjaWlfc3RyZG93biIpXQotLQlwdWJsaWMgc3RyaW5nIGFzY2lpX2Rvd24gKHNzaXplX3QgbGVu ID0gLTEpOwotLQotLQlbQ0NvZGUgKGNuYW1lID0gImdfdXRmOF9za2lwIildCi0tCXB1YmxpYyBz dGF0aWMgY2hhciBza2lwWzI1Nl07Ci0tCi0tCS8qIG1vZGlmaWVzIHN0cmluZyBpbiBwbGFjZSAq LwotLQlbQ0NvZGUgKGNuYW1lID0gImdfc3RyY2Fub24iKV0KLS0JcHVibGljIHZvaWQgY2Fub24g KHN0cmluZyB2YWxpZF9jaGFycywgY2hhciBzdWJzdGl0dXRvcik7Ci0tCi0tCVtDQ29kZSAoY25h bWUgPSAiZ19zdHJkdXAiKV0KLS0JcHVibGljIHN0cmluZyBkdXAgKCk7Ci0tCVtWZXJzaW9uIChy ZXBsYWNlbWVudCA9ICJzdHJpbmcuc3Vic3RyaW5nIildCi0tCVtDQ29kZSAoY25hbWUgPSAiZ19z dHJuZHVwIildCi0tCXB1YmxpYyBzdHJpbmcgbmR1cCAoc2l6ZV90IG4pOwotLQotLQlbQ0NvZGUg KGNuYW1lID0gIm1lbWNociIpXQotLQlzdGF0aWMgY2hhciogbWVtY2hyIChjaGFyKiBzLCBpbnQg Yywgc2l6ZV90IG4pOwotLQotLQkvLyBzdHJubGVuIGlzIG5vdCBhdmFpbGFibGUgb24gYWxsIHN5 c3RlbXMKLS0Jc3RhdGljIGxvbmcgc3RybmxlbiAoY2hhciogc3RyLCBsb25nIG1heGxlbikgewot LQkJY2hhciogZW5kID0gbWVtY2hyIChzdHIsIDAsIG1heGxlbik7Ci0tCQlpZiAoZW5kID09IG51 bGwpIHsKLS0JCQlyZXR1cm4gbWF4bGVuOwotLQkJfSBlbHNlIHsKLS0JCQlyZXR1cm4gKGxvbmcp IChlbmQgLSBzdHIpOwotLQkJfQotLQl9Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiZ19zdHJuZHVw IildCi0tCXN0YXRpYyBzdHJpbmcgc3RybmR1cCAoY2hhciogc3RyLCBzaXplX3Qgbik7Ci0tCi0t CXB1YmxpYyBzdHJpbmcgc3Vic3RyaW5nIChsb25nIG9mZnNldCwgbG9uZyBsZW4gPSAtMSkgewot LQkJbG9uZyBzdHJpbmdfbGVuZ3RoOwotLQkJaWYgKG9mZnNldCA+PSAwICYmIGxlbiA+PSAwKSB7 Ci0tCQkJLy8gYXZvaWQgc2Nhbm5pbmcgd2hvbGUgc3RyaW5nCi0tCQkJc3RyaW5nX2xlbmd0aCA9 IHN0cm5sZW4gKChjaGFyKikgdGhpcywgb2Zmc2V0ICsgbGVuKTsKLS0JCX0gZWxzZSB7Ci0tCQkJ c3RyaW5nX2xlbmd0aCA9IHRoaXMubGVuZ3RoOwotLQkJfQotLQotLQkJaWYgKG9mZnNldCA8IDAp IHsKLS0JCQlvZmZzZXQgPSBzdHJpbmdfbGVuZ3RoICsgb2Zmc2V0OwotLQkJCUdMaWIucmV0dXJu X3ZhbF9pZl9mYWlsIChvZmZzZXQgPj0gMCwgbnVsbCk7Ci0tCQl9IGVsc2UgewotLQkJCUdMaWIu cmV0dXJuX3ZhbF9pZl9mYWlsIChvZmZzZXQgPD0gc3RyaW5nX2xlbmd0aCwgbnVsbCk7Ci0tCQl9 Ci0tCQlpZiAobGVuIDwgMCkgewotLQkJCWxlbiA9IHN0cmluZ19sZW5ndGggLSBvZmZzZXQ7Ci0t CQl9Ci0tCQlHTGliLnJldHVybl92YWxfaWZfZmFpbCAob2Zmc2V0ICsgbGVuIDw9IHN0cmluZ19s ZW5ndGgsIG51bGwpOwotLQkJcmV0dXJuIHN0cm5kdXAgKChjaGFyKikgdGhpcyArIG9mZnNldCwg bGVuKTsKLS0JfQotLQotLQlwdWJsaWMgc3RyaW5nIHNsaWNlIChsb25nIHN0YXJ0LCBsb25nIGVu ZCkgewotLQkJbG9uZyBzdHJpbmdfbGVuZ3RoID0gdGhpcy5sZW5ndGg7Ci0tCQlpZiAoc3RhcnQg PCAwKSB7Ci0tCQkJc3RhcnQgPSBzdHJpbmdfbGVuZ3RoICsgc3RhcnQ7Ci0tCQl9Ci0tCQlpZiAo ZW5kIDwgMCkgewotLQkJCWVuZCA9IHN0cmluZ19sZW5ndGggKyBlbmQ7Ci0tCQl9Ci0tCQlHTGli LnJldHVybl92YWxfaWZfZmFpbCAoc3RhcnQgPj0gMCAmJiBzdGFydCA8PSBzdHJpbmdfbGVuZ3Ro LCBudWxsKTsKLS0JCUdMaWIucmV0dXJuX3ZhbF9pZl9mYWlsIChlbmQgPj0gMCAmJiBlbmQgPD0g c3RyaW5nX2xlbmd0aCwgbnVsbCk7Ci0tCQlHTGliLnJldHVybl92YWxfaWZfZmFpbCAoc3RhcnQg PD0gZW5kLCBudWxsKTsKLS0JCXJldHVybiBzdHJuZHVwICgoY2hhciopIHRoaXMgKyBzdGFydCwg ZW5kIC0gc3RhcnQpOwotLQl9Ci0tCi0tCXB1YmxpYyBzdHJpbmcgc3BsaWNlIChsb25nIHN0YXJ0 LCBsb25nIGVuZCwgc3RyaW5nPyBzdHIgPSBudWxsKSB7Ci0tCQlsb25nIHN0cmluZ19sZW5ndGgg PSB0aGlzLmxlbmd0aDsKLS0JCWlmIChzdGFydCA8IDApIHsKLS0JCQlzdGFydCA9IHN0cmluZ19s ZW5ndGggKyBzdGFydDsKLS0JCX0KLS0JCWlmIChlbmQgPCAwKSB7Ci0tCQkJZW5kID0gc3RyaW5n X2xlbmd0aCArIGVuZDsKLS0JCX0KLS0JCUdMaWIucmV0dXJuX3ZhbF9pZl9mYWlsIChzdGFydCA+ PSAwICYmIHN0YXJ0IDw9IHN0cmluZ19sZW5ndGgsIG51bGwpOwotLQkJR0xpYi5yZXR1cm5fdmFs X2lmX2ZhaWwgKGVuZCA+PSAwICYmIGVuZCA8PSBzdHJpbmdfbGVuZ3RoLCBudWxsKTsKLS0JCUdM aWIucmV0dXJuX3ZhbF9pZl9mYWlsIChzdGFydCA8PSBlbmQsIG51bGwpOwotLQotLQkJc2l6ZV90 IHN0cl9zaXplOwotLQkJaWYgKHN0ciA9PSBudWxsKSB7Ci0tCQkJc3RyX3NpemUgPSAwOwotLQkJ fSBlbHNlIHsKLS0JCQlzdHJfc2l6ZSA9ICgoISkoc3RyKSkubGVuZ3RoOwotLQkJfQotLQotLQkJ c3RyaW5nKiByZXN1bHQgPSBHTGliLm1hbGxvYzAgKHN0cmluZ19sZW5ndGggLSAoZW5kIC0gc3Rh cnQpICsgc3RyX3NpemUgKyAxKTsKLS0KLS0JCWNoYXIqIGRlc3QgPSAoY2hhciopIHJlc3VsdDsK LS0KLS0JCUdMaWIuTWVtb3J5LmNvcHkgKGRlc3QsIHRoaXMsIHN0YXJ0KTsKLS0JCWRlc3QgKz0g c3RhcnQ7Ci0tCi0tCQlHTGliLk1lbW9yeS5jb3B5IChkZXN0LCBzdHIsIHN0cl9zaXplKTsKLS0J CWRlc3QgKz0gc3RyX3NpemU7Ci0tCi0tCQlHTGliLk1lbW9yeS5jb3B5IChkZXN0LCAoY2hhciop IHRoaXMgKyBlbmQsIHN0cmluZ19sZW5ndGggLSBlbmQpOwotLQotLQkJcmV0dXJuIChvd25lZCkg cmVzdWx0OwotLQl9Ci0tCi0tCXB1YmxpYyBib29sIGNvbnRhaW5zIChzdHJpbmcgbmVlZGxlKSB7 Ci0tCQlyZXR1cm4gc3Ryc3RyICgoY2hhciopIHRoaXMsIChjaGFyKikgbmVlZGxlKSAhPSBudWxs OwotLQl9Ci0tCi0tCXB1YmxpYyBzdHJpbmcgcmVwbGFjZSAoc3RyaW5nIG9sZCwgc3RyaW5nIHJl cGxhY2VtZW50KSB7Ci0tCQlpZiAoKigoY2hhciopIHRoaXMpID09ICdcMCcgfHwgKigoY2hhciop IG9sZCkgPT0gJ1wwJyB8fCBvbGQgPT0gcmVwbGFjZW1lbnQpCi0tCQkJcmV0dXJuIHRoaXM7Ci0t Ci0tCQl0cnkgewotLQkJCXZhciByZWdleCA9IG5ldyBHTGliLlJlZ2V4IChHTGliLlJlZ2V4LmVz Y2FwZV9zdHJpbmcgKG9sZCkpOwotLQkJCXJldHVybiByZWdleC5yZXBsYWNlX2xpdGVyYWwgKHRo aXMsIC0xLCAwLCByZXBsYWNlbWVudCk7Ci0tCQl9IGNhdGNoIChHTGliLlJlZ2V4RXJyb3IgZSkg ewotLQkJCUdMaWIuYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotLQkJfQotLQl9Ci0tCi0tCVtDQ29k ZSAoY25hbWUgPSAiZ191dGY4X3N0cmxlbiIpXQotLQlwdWJsaWMgaW50IGNoYXJfY291bnQgKHNz aXplX3QgbWF4ID0gLTEpOwotLQotLQlwdWJsaWMgaW50IGxlbmd0aCB7Ci0tCQlbQ0NvZGUgKGNu YW1lID0gInN0cmxlbiIpXQotLQkJZ2V0OwotLQl9Ci0tCi0tCXB1YmxpYyB1aW50OFtdIGRhdGEg ewotLQkJZ2V0IHsKLS0JCQl1bm93bmVkIHVpbnQ4W10gcmVzID0gKHVpbnQ4W10pIHRoaXM7Ci0t CQkJcmVzLmxlbmd0aCA9IChpbnQpIHRoaXMubGVuZ3RoOwotLQkJCXJldHVybiByZXM7Ci0tCQl9 Ci0tCX0KLS0KLS0JcHVibGljIGNoYXJbXSB0b191dGY4ICgpIHsKLS0JCXZhciBzdHJpbmdfbGVu Z3RoID0gdGhpcy5sZW5ndGg7Ci0tCQljaGFyW10gcmVzdWx0ID0gbmV3IGNoYXJbc3RyaW5nX2xl bmd0aCArIDFdOwotLQkJcmVzdWx0Lmxlbmd0aC0tOwotLQkJR0xpYi5NZW1vcnkuY29weSAocmVz dWx0LCB0aGlzLCBzdHJpbmdfbGVuZ3RoKTsKLS0JCXJldHVybiByZXN1bHQ7Ci0tCX0KLS0KLS0J cHVibGljIHVub3duZWQgc3RyaW5nIHRvX3N0cmluZyAoKSB7Ci0tCQlyZXR1cm4gdGhpczsKLS0J fQotLQotLQlbQ0NvZGUgKGNuYW1lID0gImdfdXRmOF90b191dGYxNiIpXQotLQlwdWJsaWMgc3Ry aW5nMTYgdG9fdXRmMTYgKGxvbmcgbGVuID0gLTEsIG91dCBsb25nIGl0ZW1zX3JlYWQgPSBudWxs LCBvdXQgbG9uZyBpdGVtc193cml0dGVuID0gbnVsbCkgdGhyb3dzIEdMaWIuQ29udmVydEVycm9y OwotLQlbQ0NvZGUgKGNuYW1lID0gImdfdXRmOF90b191Y3M0IildCi0tCXB1YmxpYyBzdHJpbmcz MiB0b191dGYzMiAobG9uZyBsZW4gPSAtMSwgb3V0IGxvbmcgaXRlbXNfcmVhZCA9IG51bGwsIG91 dCBsb25nIGl0ZW1zX3dyaXR0ZW4gPSBudWxsKSB0aHJvd3MgR0xpYi5Db252ZXJ0RXJyb3I7Ci0t CVtDQ29kZSAoY25hbWUgPSAiZ191dGY4X3RvX3VjczRfZmFzdCIpXQotLQlwdWJsaWMgc3RyaW5n MzIgdG9fdXRmMzJfZmFzdCAobG9uZyBsZW4gPSAtMSwgb3V0IGxvbmcgaXRlbXNfd3JpdHRlbiA9 IG51bGwpOwotLQotLX0KLS0KLS1bQ29tcGFjdF0KLS1bSW1tdXRhYmxlXQotLVtHSVIgKG5hbWUg PSAiZ3VuaWNoYXIiKV0KLS1bQ0NvZGUgKGNuYW1lID0gImd1bmljaGFyIiwgY29uc3RfY25hbWUg PSAiY29uc3QgZ3VuaWNoYXIiLCBmcmVlX2Z1bmN0aW9uID0gImdfZnJlZSIsIGNoZWFkZXJfZmls ZW5hbWUgPSAiZ2xpYi5oIildCi0tcHVibGljIGNsYXNzIHN0cmluZzMyIHsKLS0JW0NDb2RlIChj bmFtZSA9ICJnX3VjczRfdG9fdXRmMTYiKV0KLS0JcHVibGljIHN0cmluZzE2IHRvX3V0ZjE2IChs b25nIGxlbiA9IC0xLCBvdXQgbG9uZyBpdGVtc19yZWFkID0gbnVsbCwgb3V0IGxvbmcgaXRlbXNf d3JpdHRlbiA9IG51bGwpIHRocm93cyBHTGliLkNvbnZlcnRFcnJvcjsKLS0JW0NDb2RlIChjbmFt ZSA9ICJnX3VjczRfdG9fdXRmOCIpXQotLQlwdWJsaWMgc3RyaW5nIHRvX3V0ZjggKGxvbmcgbGVu ID0gLTEsIG91dCBsb25nIGl0ZW1zX3JlYWQgPSBudWxsLCBvdXQgbG9uZyBpdGVtc193cml0dGVu ID0gbnVsbCkgdGhyb3dzIEdMaWIuQ29udmVydEVycm9yOwotLQotLQlwdWJsaWMgc3RyaW5nPyB0 b19zdHJpbmcgKCkgewotLQkJdHJ5IHsKLS0JCQlyZXR1cm4gdGhpcy50b191dGY4ICgpOwotLQkJ fSBjYXRjaCAoR0xpYi5Db252ZXJ0RXJyb3IgZSkgewotLQkJCXJldHVybiBudWxsOwotLQkJfQot LQl9Ci0tfQotLQotLVtDb21wYWN0XQotLVtJbW11dGFibGVdCi0tW0dJUiAobmFtZSA9ICJndWlu dDE2IildCi0tW0NDb2RlIChjbmFtZSA9ICJndW5pY2hhcjIiLCBjb25zdF9jbmFtZSA9ICJjb25z dCBndW5pY2hhcjIiLCBmcmVlX2Z1bmN0aW9uID0gImdfZnJlZSIsIGNoZWFkZXJfZmlsZW5hbWUg PSAiZ2xpYi5oIildCi0tcHVibGljIGNsYXNzIHN0cmluZzE2IHsKLS0JW0NDb2RlIChjbmFtZSA9 ICJnX3V0ZjE2X3RvX3VjczQiKV0KLS0JcHVibGljIHN0cmluZzMyIHRvX3V0ZjMyIChsb25nIGxl biA9IC0xLCBvdXQgbG9uZyBpdGVtc19yZWFkID0gbnVsbCwgb3V0IGxvbmcgaXRlbXNfd3JpdHRl biA9IG51bGwpIHRocm93cyBHTGliLkNvbnZlcnRFcnJvcjsKLS0JW0NDb2RlIChjbmFtZSA9ICJn X3V0ZjE2X3RvX3V0ZjgiKV0KLS0JcHVibGljIHN0cmluZyB0b191dGY4IChsb25nIGxlbiA9IC0x LCBvdXQgbG9uZyBpdGVtc19yZWFkID0gbnVsbCwgb3V0IGxvbmcgaXRlbXNfd3JpdHRlbiA9IG51 bGwpIHRocm93cyBHTGliLkNvbnZlcnRFcnJvcjsKLS0KLS0JcHVibGljIHN0cmluZz8gdG9fc3Ry aW5nICgpIHsKLS0JCXRyeSB7Ci0tCQkJcmV0dXJuIHRoaXMudG9fdXRmOCAoKTsKLS0JCX0gY2F0 Y2ggKEdMaWIuQ29udmVydEVycm9yIGUpIHsKLS0JCQlyZXR1cm4gbnVsbDsKLS0JCX0KLS0JfQot LX0KLS0KLS1bQ0NvZGUgKGNwcmVmaXggPSAiRyIsIGxvd2VyX2Nhc2VfY3ByZWZpeCA9ICJnXyIs IGNoZWFkZXJfZmlsZW5hbWUgPSAiZ2xpYi5oIiwgZ2lyX25hbWVzcGFjZSA9ICJHTGliIiwgZ2ly X3ZlcnNpb24gPSAiMi4wIildCi0tbmFtZXNwYWNlIEdMaWIgewotLQlbUG9pbnRlclR5cGVdCi0t CVtHSVIgKGZ1bGxuYW1lID0gImdwb2ludGVyIildCi0tCVtDQ29kZSAoY25hbWUgPSAiZ3BvaW50 ZXIiLCBjb25zdF9jbmFtZSA9ICJnY29uc3Rwb2ludGVyIiwgY2hlYWRlcl9maWxlbmFtZSA9ICJn bGliLmgiKV0KLS0JcHVibGljIHN0cnVjdCBwb2ludGVyIHsKLS0JfQotLQotLQlbQ0NvZGUgKGxv d2VyX2Nhc2VfY3ByZWZpeCA9ICIiLCBjaGVhZGVyX2ZpbGVuYW1lID0gIm1hdGguaCIpXQotLQlu YW1lc3BhY2UgTWF0aCB7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gIkdfRSIpXQotLQkJcHVibGljIGNv bnN0IGRvdWJsZSBFOwotLQotLQkJW0NDb2RlIChjbmFtZSA9ICJHX1BJIildCi0tCQlwdWJsaWMg Y29uc3QgZG91YmxlIFBJOwotLQotLQkJW0NDb2RlIChjbmFtZSA9ICJHX0xOMiIpXQotLQkJcHVi bGljIGNvbnN0IGRvdWJsZSBMTjI7Ci0tCi0tCQlbQ0NvZGUgKGNuYW1lID0gIkdfTE4xMCIpXQot LQkJcHVibGljIGNvbnN0IGRvdWJsZSBMTjEwOwotLQotLQkJW0NDb2RlIChjbmFtZSA9ICJHX1BJ XzIiKV0KLS0JCXB1YmxpYyBjb25zdCBkb3VibGUgUElfMjsKLS0KLS0JCVtDQ29kZSAoY25hbWUg PSAiR19QSV80IildCi0tCQlwdWJsaWMgY29uc3QgZG91YmxlIFBJXzQ7Ci0tCi0tCQlbQ0NvZGUg KGNuYW1lID0gIkdfU1FSVDIiKV0KLS0JCXB1YmxpYyBjb25zdCBkb3VibGUgU1FSVDI7Ci0tCi0t CQlbQ0NvZGUgKGNuYW1lID0gIkdfTE9HXzJfQkFTRV8xMCIpXQotLQkJcHVibGljIGNvbnN0IGRv dWJsZSBMT0dfMl9CQVNFXzEwOwotLQotLQkJLyogZ2VuZXJhdGVkIGZyb20gPGJpdHMvbWF0aGNh bGxzLmg+IG9mIGdsaWJjICovCi0tCQlwdWJsaWMgc3RhdGljIGRvdWJsZSBhY29zIChkb3VibGUg eCk7Ci0tCQlwdWJsaWMgc3RhdGljIGZsb2F0IGFjb3NmIChmbG9hdCB4KTsKLS0JCXB1YmxpYyBz dGF0aWMgZG91YmxlIGFzaW4gKGRvdWJsZSB4KTsKLS0JCXB1YmxpYyBzdGF0aWMgZmxvYXQgYXNp bmYgKGZsb2F0IHgpOwotLQkJcHVibGljIHN0YXRpYyBkb3VibGUgYXRhbiAoZG91YmxlIHgpOwot LQkJcHVibGljIHN0YXRpYyBmbG9hdCBhdGFuZiAoZmxvYXQgeCk7Ci0tCQlwdWJsaWMgc3RhdGlj IGRvdWJsZSBhdGFuMiAoZG91YmxlIHksIGRvdWJsZSB4KTsKLS0JCXB1YmxpYyBzdGF0aWMgZmxv YXQgYXRhbjJmIChmbG9hdCB5LCBmbG9hdCB4KTsKLS0JCXB1YmxpYyBzdGF0aWMgZG91YmxlIGNv cyAoZG91YmxlIHgpOwotLQkJcHVibGljIHN0YXRpYyBmbG9hdCBjb3NmIChmbG9hdCB4KTsKLS0J CXB1YmxpYyBzdGF0aWMgZG91YmxlIHNpbiAoZG91YmxlIHgpOwotLQkJcHVibGljIHN0YXRpYyBm bG9hdCBzaW5mIChmbG9hdCB4KTsKLS0JCXB1YmxpYyBzdGF0aWMgZG91YmxlIHRhbiAoZG91Ymxl IHgpOwotLQkJcHVibGljIHN0YXRpYyBmbG9hdCB0YW5mIChmbG9hdCB4KTsKLS0JCXB1YmxpYyBz dGF0aWMgZG91YmxlIGNvc2ggKGRvdWJsZSB4KTsKLS0JCXB1YmxpYyBzdGF0aWMgZmxvYXQgY29z aGYgKGZsb2F0IHgpOwotLQkJcHVibGljIHN0YXRpYyBkb3VibGUgc2luaCAoZG91YmxlIHgpOwot LQkJcHVibGljIHN0YXRpYyBmbG9hdCBzaW5oZiAoZmxvYXQgeCk7Ci0tCQlwdWJsaWMgc3RhdGlj IGRvdWJsZSB0YW5oIChkb3VibGUgeCk7Ci0tCQlwdWJsaWMgc3RhdGljIGZsb2F0IHRhbmhmIChm bG9hdCB4KTsKLS0JCXB1YmxpYyBzdGF0aWMgdm9pZCBzaW5jb3MgKGRvdWJsZSB4LCBvdXQgZG91 YmxlIHNpbngsIG91dCBkb3VibGUgY29zeCk7Ci0tCQlwdWJsaWMgc3RhdGljIHZvaWQgc2luY29z ZiAoZmxvYXQgeCwgb3V0IGZsb2F0IHNpbngsIG91dCBmbG9hdCBjb3N4KTsKLS0JCXB1YmxpYyBz dGF0aWMgZG91YmxlIGFjb3NoIChkb3VibGUgeCk7Ci0tCQlwdWJsaWMgc3RhdGljIGZsb2F0IGFj b3NoZiAoZmxvYXQgeCk7Ci0tCQlwdWJsaWMgc3RhdGljIGRvdWJsZSBhc2luaCAoZG91YmxlIHgp OwotLQkJcHVibGljIHN0YXRpYyBmbG9hdCBhc2luaGYgKGZsb2F0IHgpOwotLQkJcHVibGljIHN0 YXRpYyBkb3VibGUgYXRhbmggKGRvdWJsZSB4KTsKLS0JCXB1YmxpYyBzdGF0aWMgZmxvYXQgYXRh bmhmIChmbG9hdCB4KTsKLS0JCXB1YmxpYyBzdGF0aWMgZG91YmxlIGV4cCAoZG91YmxlIHgpOwot LQkJcHVibGljIHN0YXRpYyBmbG9hdCBleHBmIChmbG9hdCB4KTsKLS0JCXB1YmxpYyBzdGF0aWMg ZG91YmxlIGZyZXhwIChkb3VibGUgeCwgb3V0IGludCBleHBvbmVudCk7Ci0tCQlwdWJsaWMgc3Rh dGljIGZsb2F0IGZyZXhwZiAoZmxvYXQgeCwgb3V0IGludCBleHBvbmVudCk7Ci0tCQlwdWJsaWMg c3RhdGljIGRvdWJsZSBsZGV4cCAoZG91YmxlIHgsIGludCBleHBvbmVudCk7Ci0tCQlwdWJsaWMg c3RhdGljIGZsb2F0IGxkZXhwZiAoZmxvYXQgeCwgaW50IGV4cG9uZW50KTsKLS0JCXB1YmxpYyBz dGF0aWMgZG91YmxlIGxvZyAoZG91YmxlIHgpOwotLQkJcHVibGljIHN0YXRpYyBmbG9hdCBsb2dm IChmbG9hdCB4KTsKLS0JCXB1YmxpYyBzdGF0aWMgZG91YmxlIGxvZzEwIChkb3VibGUgeCk7Ci0t CQlwdWJsaWMgc3RhdGljIGZsb2F0IGxvZzEwZiAoZmxvYXQgeCk7Ci0tCQlwdWJsaWMgc3RhdGlj IGRvdWJsZSBtb2RmIChkb3VibGUgeCwgb3V0IGRvdWJsZSBpcHRyKTsKLS0JCXB1YmxpYyBzdGF0 aWMgZmxvYXQgbW9kZmYgKGZsb2F0IHgsIG91dCBmbG9hdCBpcHRyKTsKLS0JCVtDQ29kZSAoZmVh dHVyZV90ZXN0X21hY3JvID0gIl9HTlVfU09VUkNFIildCi0tCQlwdWJsaWMgc3RhdGljIGRvdWJs ZSBleHAxMCAoZG91YmxlIHgpOwotLQkJW0NDb2RlIChmZWF0dXJlX3Rlc3RfbWFjcm8gPSAiX0dO VV9TT1VSQ0UiKV0KLS0JCXB1YmxpYyBzdGF0aWMgZmxvYXQgZXhwMTBmIChmbG9hdCB4KTsKLS0J CVtDQ29kZSAoZmVhdHVyZV90ZXN0X21hY3JvID0gIl9HTlVfU09VUkNFIildCi0tCQlwdWJsaWMg c3RhdGljIGRvdWJsZSBwb3cxMCAoZG91YmxlIHgpOwotLQkJW0NDb2RlIChmZWF0dXJlX3Rlc3Rf bWFjcm8gPSAiX0dOVV9TT1VSQ0UiKV0KLS0JCXB1YmxpYyBzdGF0aWMgZmxvYXQgcG93MTBmIChm bG9hdCB4KTsKLS0JCXB1YmxpYyBzdGF0aWMgZG91YmxlIGV4cG0xIChkb3VibGUgeCk7Ci0tCQlw dWJsaWMgc3RhdGljIGZsb2F0IGV4cG0xZiAoZmxvYXQgeCk7Ci0tCQlwdWJsaWMgc3RhdGljIGRv dWJsZSBsb2cxcCAoZG91YmxlIHgpOwotLQkJcHVibGljIHN0YXRpYyBmbG9hdCBsb2cxcGYgKGZs b2F0IHgpOwotLQkJcHVibGljIHN0YXRpYyBkb3VibGUgbG9nYiAoZG91YmxlIHgpOwotLQkJcHVi bGljIHN0YXRpYyBmbG9hdCBsb2diZiAoZmxvYXQgeCk7Ci0tCQlwdWJsaWMgc3RhdGljIGRvdWJs ZSBleHAyIChkb3VibGUgeCk7Ci0tCQlwdWJsaWMgc3RhdGljIGZsb2F0IGV4cDJmIChmbG9hdCB4 KTsKLS0JCXB1YmxpYyBzdGF0aWMgZG91YmxlIGxvZzIgKGRvdWJsZSB4KTsKLS0JCXB1YmxpYyBz dGF0aWMgZmxvYXQgbG9nMmYgKGZsb2F0IHgpOwotLQkJcHVibGljIHN0YXRpYyBkb3VibGUgcG93 IChkb3VibGUgeCwgZG91YmxlIHkpOwotLQkJcHVibGljIHN0YXRpYyBmbG9hdCBwb3dmIChmbG9h dCB4LCBmbG9hdCB5KTsKLS0JCXB1YmxpYyBzdGF0aWMgZG91YmxlIHNxcnQgKGRvdWJsZSB4KTsK LS0JCXB1YmxpYyBzdGF0aWMgZmxvYXQgc3FydGYgKGZsb2F0IHgpOwotLQkJcHVibGljIHN0YXRp YyBkb3VibGUgaHlwb3QgKGRvdWJsZSB4LCBkb3VibGUgeSk7Ci0tCQlwdWJsaWMgc3RhdGljIGZs b2F0IGh5cG90ZiAoZmxvYXQgeCwgZmxvYXQgeSk7Ci0tCQlwdWJsaWMgc3RhdGljIGRvdWJsZSBj YnJ0IChkb3VibGUgeCk7Ci0tCQlwdWJsaWMgc3RhdGljIGZsb2F0IGNicnRmIChmbG9hdCB4KTsK LS0JCXB1YmxpYyBzdGF0aWMgZG91YmxlIGNlaWwgKGRvdWJsZSB4KTsKLS0JCXB1YmxpYyBzdGF0 aWMgZmxvYXQgY2VpbGYgKGZsb2F0IHgpOwotLQkJcHVibGljIHN0YXRpYyBkb3VibGUgZmFicyAo ZG91YmxlIHgpOwotLQkJcHVibGljIHN0YXRpYyBmbG9hdCBmYWJzZiAoZmxvYXQgeCk7Ci0tCQlw dWJsaWMgc3RhdGljIGRvdWJsZSBmbG9vciAoZG91YmxlIHgpOwotLQkJcHVibGljIHN0YXRpYyBm bG9hdCBmbG9vcmYgKGZsb2F0IHgpOwotLQkJcHVibGljIHN0YXRpYyBkb3VibGUgZm1vZCAoZG91 YmxlIHgsIGRvdWJsZSB5KTsKLS0JCXB1YmxpYyBzdGF0aWMgZmxvYXQgZm1vZGYgKGZsb2F0IHgs IGZsb2F0IHkpOwotLQkJcHVibGljIHN0YXRpYyBpbnQgaXNpbmYgKGRvdWJsZSB2YWx1ZSk7Ci0t CQlwdWJsaWMgc3RhdGljIGludCBpc2luZmYgKGZsb2F0IHZhbHVlKTsKLS0JCXB1YmxpYyBzdGF0 aWMgaW50IGZpbml0ZSAoZG91YmxlIHZhbHVlKTsKLS0JCXB1YmxpYyBzdGF0aWMgaW50IGZpbml0 ZWYgKGZsb2F0IHZhbHVlKTsKLS0JCXB1YmxpYyBzdGF0aWMgZG91YmxlIGRyZW0gKGRvdWJsZSB4 LCBkb3VibGUgeSk7Ci0tCQlwdWJsaWMgc3RhdGljIGZsb2F0IGRyZW1mIChmbG9hdCB4LCBmbG9h dCB5KTsKLS0JCXB1YmxpYyBzdGF0aWMgZG91YmxlIHNpZ25pZmljYW5kIChkb3VibGUgeCk7Ci0t CQlwdWJsaWMgc3RhdGljIGZsb2F0IHNpZ25pZmljYW5kZiAoZmxvYXQgeCk7Ci0tCQlwdWJsaWMg c3RhdGljIGRvdWJsZSBjb3B5c2lnbiAoZG91YmxlIHgsIGRvdWJsZSB5KTsKLS0JCXB1YmxpYyBz dGF0aWMgZmxvYXQgY29weXNpZ25mIChmbG9hdCB4LCBmbG9hdCB5KTsKLS0JCXB1YmxpYyBzdGF0 aWMgZG91YmxlIG5hbiAoc3RyaW5nIHRhZ2IpOwotLQkJcHVibGljIHN0YXRpYyBmbG9hdCBuYW5m IChzdHJpbmcgdGFnYik7Ci0tCQlwdWJsaWMgc3RhdGljIGludCBpc25hbiAoZG91YmxlIHZhbHVl KTsKLS0JCXB1YmxpYyBzdGF0aWMgaW50IGlzbmFuZiAoZmxvYXQgdmFsdWUpOwotLQkJcHVibGlj IHN0YXRpYyBkb3VibGUgajAgKGRvdWJsZSB4MCk7Ci0tCQlwdWJsaWMgc3RhdGljIGZsb2F0IGow ZiAoZmxvYXQgeDApOwotLQkJcHVibGljIHN0YXRpYyBkb3VibGUgajEgKGRvdWJsZSB4MCk7Ci0t CQlwdWJsaWMgc3RhdGljIGZsb2F0IGoxZiAoZmxvYXQgeDApOwotLQkJcHVibGljIHN0YXRpYyBk b3VibGUgam4gKGludCB4MCwgZG91YmxlIHgxKTsKLS0JCXB1YmxpYyBzdGF0aWMgZmxvYXQgam5m IChpbnQgeDAsIGZsb2F0IHgxKTsKLS0JCXB1YmxpYyBzdGF0aWMgZG91YmxlIHkwIChkb3VibGUg eDApOwotLQkJcHVibGljIHN0YXRpYyBmbG9hdCB5MGYgKGZsb2F0IHgwKTsKLS0JCXB1YmxpYyBz dGF0aWMgZG91YmxlIHkxIChkb3VibGUgeDApOwotLQkJcHVibGljIHN0YXRpYyBmbG9hdCB5MWYg KGZsb2F0IHgwKTsKLS0JCXB1YmxpYyBzdGF0aWMgZG91YmxlIHluIChpbnQgeDAsIGRvdWJsZSB4 MSk7Ci0tCQlwdWJsaWMgc3RhdGljIGZsb2F0IHluZiAoaW50IHgwLCBmbG9hdCB4MSk7Ci0tCQlw dWJsaWMgc3RhdGljIGRvdWJsZSBlcmYgKGRvdWJsZSB4MCk7Ci0tCQlwdWJsaWMgc3RhdGljIGZs b2F0IGVyZmYgKGZsb2F0IHgwKTsKLS0JCXB1YmxpYyBzdGF0aWMgZG91YmxlIGVyZmMgKGRvdWJs ZSB4MCk7Ci0tCQlwdWJsaWMgc3RhdGljIGZsb2F0IGVyZmNmIChmbG9hdCB4MCk7Ci0tCQlwdWJs aWMgc3RhdGljIGRvdWJsZSBsZ2FtbWEgKGRvdWJsZSB4MCk7Ci0tCQlwdWJsaWMgc3RhdGljIGZs b2F0IGxnYW1tYWYgKGZsb2F0IHgwKTsKLS0JCXB1YmxpYyBzdGF0aWMgZG91YmxlIHRnYW1tYSAo ZG91YmxlIHgwKTsKLS0JCXB1YmxpYyBzdGF0aWMgZmxvYXQgdGdhbW1hZiAoZmxvYXQgeDApOwot LQkJcHVibGljIHN0YXRpYyBkb3VibGUgZ2FtbWEgKGRvdWJsZSB4MCk7Ci0tCQlwdWJsaWMgc3Rh dGljIGZsb2F0IGdhbW1hZiAoZmxvYXQgeDApOwotLQkJcHVibGljIHN0YXRpYyBkb3VibGUgbGdh bW1hX3IgKGRvdWJsZSB4MCwgb3V0IGludCBzaWduZ2FtcCk7Ci0tCQlwdWJsaWMgc3RhdGljIGZs b2F0IGxnYW1tYV9yZiAoZmxvYXQgeDAsIG91dCBpbnQgc2lnbmdhbXApOwotLQkJcHVibGljIHN0 YXRpYyBkb3VibGUgcmludCAoZG91YmxlIHgpOwotLQkJcHVibGljIHN0YXRpYyBmbG9hdCByaW50 ZiAoZmxvYXQgeCk7Ci0tCQlwdWJsaWMgc3RhdGljIGRvdWJsZSBuZXh0YWZ0ZXIgKGRvdWJsZSB4 LCBkb3VibGUgeSk7Ci0tCQlwdWJsaWMgc3RhdGljIGZsb2F0IG5leHRhZnRlcmYgKGZsb2F0IHgs IGZsb2F0IHkpOwotLQkJcHVibGljIHN0YXRpYyBkb3VibGUgbmV4dHRvd2FyZCAoZG91YmxlIHgs IGRvdWJsZSB5KTsKLS0JCXB1YmxpYyBzdGF0aWMgZmxvYXQgbmV4dHRvd2FyZGYgKGZsb2F0IHgs IGRvdWJsZSB5KTsKLS0JCXB1YmxpYyBzdGF0aWMgZG91YmxlIHJlbWFpbmRlciAoZG91YmxlIHgs IGRvdWJsZSB5KTsKLS0JCXB1YmxpYyBzdGF0aWMgZmxvYXQgcmVtYWluZGVyZiAoZmxvYXQgeCwg ZmxvYXQgeSk7Ci0tCQlwdWJsaWMgc3RhdGljIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSB4LCBpbnQg bik7Ci0tCQlwdWJsaWMgc3RhdGljIGZsb2F0IHNjYWxibmYgKGZsb2F0IHgsIGludCBuKTsKLS0J CXB1YmxpYyBzdGF0aWMgaW50IGlsb2diIChkb3VibGUgeCk7Ci0tCQlwdWJsaWMgc3RhdGljIGlu dCBpbG9nYmYgKGZsb2F0IHgpOwotLQkJcHVibGljIHN0YXRpYyBkb3VibGUgc2NhbGJsbiAoZG91 YmxlIHgsIGxvbmcgbik7Ci0tCQlwdWJsaWMgc3RhdGljIGZsb2F0IHNjYWxibG5mIChmbG9hdCB4 LCBsb25nIG4pOwotLQkJcHVibGljIHN0YXRpYyBkb3VibGUgbmVhcmJ5aW50IChkb3VibGUgeCk7 Ci0tCQlwdWJsaWMgc3RhdGljIGZsb2F0IG5lYXJieWludGYgKGZsb2F0IHgpOwotLQkJcHVibGlj IHN0YXRpYyBkb3VibGUgcm91bmQgKGRvdWJsZSB4KTsKLS0JCXB1YmxpYyBzdGF0aWMgZmxvYXQg cm91bmRmIChmbG9hdCB4KTsKLS0JCXB1YmxpYyBzdGF0aWMgZG91YmxlIHRydW5jIChkb3VibGUg eCk7Ci0tCQlwdWJsaWMgc3RhdGljIGZsb2F0IHRydW5jZiAoZmxvYXQgeCk7Ci0tCQlwdWJsaWMg c3RhdGljIGRvdWJsZSByZW1xdW8gKGRvdWJsZSB4LCBkb3VibGUgeSwgb3V0IGludCBxdW8pOwot LQkJcHVibGljIHN0YXRpYyBmbG9hdCByZW1xdW9mIChmbG9hdCB4LCBmbG9hdCB5LCBvdXQgaW50 IHF1byk7Ci0tCQlwdWJsaWMgc3RhdGljIGxvbmcgbHJpbnQgKGRvdWJsZSB4KTsKLS0JCXB1Ymxp YyBzdGF0aWMgbG9uZyBscmludGYgKGZsb2F0IHgpOwotLQkJcHVibGljIHN0YXRpYyBpbnQ2NCBs bHJpbnQgKGRvdWJsZSB4KTsKLS0JCXB1YmxpYyBzdGF0aWMgaW50NjQgbGxyaW50ZiAoZmxvYXQg eCk7Ci0tCQlwdWJsaWMgc3RhdGljIGxvbmcgbHJvdW5kIChkb3VibGUgeCk7Ci0tCQlwdWJsaWMg c3RhdGljIGxvbmcgbHJvdW5kZiAoZmxvYXQgeCk7Ci0tCQlwdWJsaWMgc3RhdGljIGludDY0IGxs cm91bmQgKGRvdWJsZSB4KTsKLS0JCXB1YmxpYyBzdGF0aWMgaW50NjQgbGxyb3VuZGYgKGZsb2F0 IHgpOwotLQkJcHVibGljIHN0YXRpYyBkb3VibGUgZmRpbSAoZG91YmxlIHgsIGRvdWJsZSB5KTsK LS0JCXB1YmxpYyBzdGF0aWMgZmxvYXQgZmRpbWYgKGZsb2F0IHgsIGZsb2F0IHkpOwotLQkJcHVi bGljIHN0YXRpYyBkb3VibGUgZm1heCAoZG91YmxlIHgsIGRvdWJsZSB5KTsKLS0JCXB1YmxpYyBz dGF0aWMgZmxvYXQgZm1heGYgKGZsb2F0IHgsIGZsb2F0IHkpOwotLQkJcHVibGljIHN0YXRpYyBk b3VibGUgZm1pbiAoZG91YmxlIHgsIGRvdWJsZSB5KTsKLS0JCXB1YmxpYyBzdGF0aWMgZmxvYXQg Zm1pbmYgKGZsb2F0IHgsIGZsb2F0IHkpOwotLQkJcHVibGljIHN0YXRpYyBkb3VibGUgZm1hIChk b3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KTsKLS0JCXB1YmxpYyBzdGF0aWMgZmxvYXQgZm1h ZiAoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeik7Ci0tCQlwdWJsaWMgc3RhdGljIGRvdWJsZSBz Y2FsYiAoZG91YmxlIHgsIGRvdWJsZSBuKTsKLS0JCXB1YmxpYyBzdGF0aWMgZmxvYXQgc2NhbGJm IChmbG9hdCB4LCBmbG9hdCBuKTsKLS0JfQotLQotLQkvKiBCeXRlIG9yZGVyICovCi0tCVtDQ29k ZSAoY3ByZWZpeCA9ICJHXyIsIGNuYW1lID0gImludCIsIGhhc190eXBlX2lkID0gZmFsc2UpXQot LQlwdWJsaWMgZW51bSBCeXRlT3JkZXIgewotLQkJW0NDb2RlIChjbmFtZSA9ICJHX0JZVEVfT1JE RVIiKV0KLS0JCUhPU1QsCi0tCQlMSVRUTEVfRU5ESUFOLAotLQkJQklHX0VORElBTiwKLS0JCVBE UF9FTkRJQU4KLS0JfQotLQotLQlwdWJsaWMgY29uc3QgQnl0ZU9yZGVyIEJZVEVfT1JERVI7Ci0t Ci0tCS8qIEF0b21pYyBPcGVyYXRpb25zICovCi0tCi0tCVtWZXJzaW9uIChzaW5jZSA9ICIyLjQi KV0KLS0JbmFtZXNwYWNlIEF0b21pY0ludCB7Ci0tCQlwdWJsaWMgc3RhdGljIGludCBnZXQgKFtD Q29kZSAodHlwZSA9ICJ2b2xhdGlsZSBnaW50ICoiKV0gcmVmIGludCBhdG9taWMpOwotLQkJcHVi bGljIHN0YXRpYyB2b2lkIHNldCAoW0NDb2RlICh0eXBlID0gInZvbGF0aWxlIGdpbnQgKiIpXSBy ZWYgaW50IGF0b21pYywgaW50IG5ld3ZhbCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4zMCIp XQotLQkJcHVibGljIHN0YXRpYyBpbnQgYWRkIChbQ0NvZGUgKHR5cGUgPSAidm9sYXRpbGUgZ2lu dCAqIildIHJlZiBpbnQgYXRvbWljLCBpbnQgdmFsKTsKLS0JCVtWZXJzaW9uIChkZXByZWNhdGVk X3NpbmNlID0gIjIuMzAiLCByZXBsYWNlbWVudCA9ICJhZGQiKV0KLS0JCXB1YmxpYyBzdGF0aWMg aW50IGV4Y2hhbmdlX2FuZF9hZGQgKFtDQ29kZSAodHlwZSA9ICJ2b2xhdGlsZSBnaW50ICoiKV0g cmVmIGludCBhdG9taWMsIGludCB2YWwpOwotLQkJcHVibGljIHN0YXRpYyBib29sIGNvbXBhcmVf YW5kX2V4Y2hhbmdlIChbQ0NvZGUgKHR5cGUgPSAidm9sYXRpbGUgZ2ludCAqIildIHJlZiBpbnQg YXRvbWljLCBpbnQgb2xkdmFsLCBpbnQgbmV3dmFsKTsKLS0JCXB1YmxpYyBzdGF0aWMgdm9pZCBp bmMgKFtDQ29kZSAodHlwZSA9ICJ2b2xhdGlsZSBnaW50ICoiKV0gcmVmIGludCBhdG9taWMpOwot LQkJcHVibGljIHN0YXRpYyBib29sIGRlY19hbmRfdGVzdCAoW0NDb2RlICh0eXBlID0gInZvbGF0 aWxlIGdpbnQgKiIpXSByZWYgaW50IGF0b21pYyk7Ci0tCX0KLS0KLS0JW1ZlcnNpb24gKHNpbmNl ID0gIjIuNCIpXQotLQluYW1lc3BhY2UgQXRvbWljUG9pbnRlciB7Ci0tCQlwdWJsaWMgc3RhdGlj IHZvaWQqIGdldCAoW0NDb2RlICh0eXBlID0gInZvbGF0aWxlIGdwb2ludGVyICoiKV0gdm9pZCoq IGF0b21pYyk7Ci0tCQlwdWJsaWMgc3RhdGljIHZvaWQgc2V0IChbQ0NvZGUgKHR5cGUgPSAidm9s YXRpbGUgZ3BvaW50ZXIgKiIpXSB2b2lkKiogYXRvbWljLCB2b2lkKiBuZXd2YWwpOwotLQkJcHVi bGljIHN0YXRpYyBib29sIGNvbXBhcmVfYW5kX2V4Y2hhbmdlIChbQ0NvZGUgKHR5cGUgPSAidm9s YXRpbGUgZ3BvaW50ZXIgKiIpXSB2b2lkKiogYXRvbWljLCB2b2lkKiBvbGR2YWwsIHZvaWQqIG5l d3ZhbCk7Ci0tCX0KLS0KLS0JLyogVGhlIE1haW4gRXZlbnQgTG9vcCAqLwotLQotLQlbQ29tcGFj dF0KLS0JW0NDb2RlIChyZWZfZnVuY3Rpb24gPSAiZ19tYWluX2xvb3BfcmVmIiwgdW5yZWZfZnVu Y3Rpb24gPSAiZ19tYWluX2xvb3BfdW5yZWYiKV0KLS0JcHVibGljIGNsYXNzIE1haW5Mb29wIHsK LS0JCXB1YmxpYyBNYWluTG9vcCAoTWFpbkNvbnRleHQ/IGNvbnRleHQgPSBudWxsLCBib29sIGlz X3J1bm5pbmcgPSBmYWxzZSk7Ci0tCQlwdWJsaWMgdm9pZCBydW4gKCk7Ci0tCQlwdWJsaWMgdm9p ZCBxdWl0ICgpOwotLQkJcHVibGljIGJvb2wgaXNfcnVubmluZyAoKTsKLS0JCXB1YmxpYyB1bm93 bmVkIE1haW5Db250ZXh0IGdldF9jb250ZXh0ICgpOwotLQl9Ci0tCi0tCW5hbWVzcGFjZSBQcmlv cml0eSB7Ci0tCQlwdWJsaWMgY29uc3QgaW50IEhJR0g7Ci0tCQlwdWJsaWMgY29uc3QgaW50IERF RkFVTFQ7Ci0tCQlwdWJsaWMgY29uc3QgaW50IEhJR0hfSURMRTsKLS0JCXB1YmxpYyBjb25zdCBp bnQgREVGQVVMVF9JRExFOwotLQkJcHVibGljIGNvbnN0IGludCBMT1c7Ci0tCX0KLS0KLS0JW0Nv bXBhY3RdCi0tCVtDQ29kZSAocmVmX2Z1bmN0aW9uID0gImdfbWFpbl9jb250ZXh0X3JlZiIsIHVu cmVmX2Z1bmN0aW9uID0gImdfbWFpbl9jb250ZXh0X3VucmVmIildCi0tCXB1YmxpYyBjbGFzcyBN YWluQ29udGV4dCB7Ci0tCQlwdWJsaWMgTWFpbkNvbnRleHQgKCk7Ci0tCQlwdWJsaWMgc3RhdGlj IHVub3duZWQgTWFpbkNvbnRleHQgQGRlZmF1bHQgKCk7Ci0tCQlwdWJsaWMgYm9vbCBpdGVyYXRp b24gKGJvb2wgbWF5X2Jsb2NrKTsKLS0JCXB1YmxpYyBib29sIHBlbmRpbmcgKCk7Ci0tCQlwdWJs aWMgdW5vd25lZCBTb3VyY2UgZmluZF9zb3VyY2VfYnlfaWQgKHVpbnQgc291cmNlX2lkKTsKLS0J CXB1YmxpYyB1bm93bmVkIFNvdXJjZSBmaW5kX3NvdXJjZV9ieV91c2VyX2RhdGEgKHZvaWQqIHVz ZXJfZGF0YSk7Ci0tCQlwdWJsaWMgdW5vd25lZCBTb3VyY2UgZmluZF9zb3VyY2VfYnlfZnVuY3Nf dXNlcl9kYXRhIChTb3VyY2VGdW5jcyBmdW5jcywgdm9pZCogdXNlcl9kYXRhKTsKLS0JCXB1Ymxp YyB2b2lkIHdha2V1cCAoKTsKLS0JCXB1YmxpYyBib29sIGFjcXVpcmUgKCk7Ci0tCQlwdWJsaWMg dm9pZCByZWxlYXNlICgpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMTAiKV0KLS0JCXB1Ymxp YyBib29sIGlzX293bmVyICgpOwotLQkJcHVibGljIGJvb2wgd2FpdCAoQ29uZCBjb25kLCBNdXRl eCBtdXRleCk7Ci0tCQlwdWJsaWMgYm9vbCBwcmVwYXJlIChvdXQgaW50IHByaW9yaXR5KTsKLS0J CXB1YmxpYyBpbnQgcXVlcnkgKGludCBtYXhfcHJpb3JpdHksIG91dCBpbnQgdGltZW91dF8sIFBv bGxGRFtdIGZkcyk7Ci0tCQlwdWJsaWMgYm9vbCBjaGVjayAoaW50IG1heF9wcmlvcml0eSwgUG9s bEZEW10gZmRzKTsKLS0JCXB1YmxpYyB2b2lkIGRpc3BhdGNoICgpOwotLQkJcHVibGljIHZvaWQg c2V0X3BvbGxfZnVuYyAoUG9sbEZ1bmMgZnVuYyk7Ci0tCQlwdWJsaWMgUG9sbEZ1bmMgZ2V0X3Bv bGxfZnVuYyAoKTsKLS0JCXB1YmxpYyB2b2lkIGFkZF9wb2xsIChyZWYgUG9sbEZEIGZkLCBpbnQg cHJpb3JpdHkpOwotLQkJcHVibGljIHZvaWQgcmVtb3ZlX3BvbGwgKHJlZiBQb2xsRkQgZmQpOwot LQkJcHVibGljIGludCBkZXB0aCAoKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjEyIildCi0t CQlbQ0NvZGUgKGNuYW1lID0gImdfbWFpbl9jdXJyZW50X3NvdXJjZSIpXQotLQkJcHVibGljIHN0 YXRpYyB1bm93bmVkIFNvdXJjZSBjdXJyZW50X3NvdXJjZSAoKTsKLS0JCVtWZXJzaW9uIChzaW5j ZSA9ICIyLjIyIildCi0tCQlwdWJsaWMgc3RhdGljIHVub3duZWQgTWFpbkNvbnRleHQ/IGdldF90 aHJlYWRfZGVmYXVsdCAoKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjMyIildCi0tCQlwdWJs aWMgc3RhdGljIE1haW5Db250ZXh0IHJlZl90aHJlYWRfZGVmYXVsdCAoKTsKLS0JCVtWZXJzaW9u IChzaW5jZSA9ICIyLjIyIildCi0tCQlwdWJsaWMgdm9pZCBwdXNoX3RocmVhZF9kZWZhdWx0ICgp OwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMjIiKV0KLS0JCXB1YmxpYyB2b2lkIHBvcF90aHJl YWRfZGVmYXVsdCAoKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjI4IildCi0tCQlbQ0NvZGUg KGNuYW1lID0gImdfbWFpbl9jb250ZXh0X2ludm9rZV9mdWxsIildCi0tCQlwdWJsaWMgdm9pZCBp bnZva2UgKG93bmVkIFNvdXJjZUZ1bmMgZnVuY3Rpb24sIFtDQ29kZSAocG9zID0gMC4xKV0gaW50 IHByaW9yaXR5ID0gUHJpb3JpdHkuREVGQVVMVCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4y OCIpXQotLQkJcHVibGljIHZvaWQgaW52b2tlX2Z1bGwgKGludCBwcmlvcml0eSwgb3duZWQgU291 cmNlRnVuYyBmdW5jdGlvbik7Ci0tCX0KLS0KLS0JW0NDb2RlIChoYXNfdGFyZ2V0ID0gZmFsc2Up XQotLQlwdWJsaWMgZGVsZWdhdGUgaW50IFBvbGxGdW5jIChQb2xsRkRbXSB1ZmRzLCBpbnQgdGlt ZW91dF8pOwotLQotLQlbQ0NvZGUgKGNuYW1lID0gIkdTb3VyY2UiKV0KLS0JcHVibGljIGNsYXNz IFRpbWVvdXRTb3VyY2UgOiBTb3VyY2UgewotLQkJcHVibGljIFRpbWVvdXRTb3VyY2UgKHVpbnQg aW50ZXJ2YWwpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMTQiKV0KLS0JCXB1YmxpYyBUaW1l b3V0U291cmNlLnNlY29uZHMgKHVpbnQgaW50ZXJ2YWwpOwotLQl9Ci0tCi0tCW5hbWVzcGFjZSBU aW1lb3V0IHsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZ190aW1lb3V0X2FkZF9mdWxsIildCi0tCQlw dWJsaWMgc3RhdGljIHVpbnQgYWRkICh1aW50IGludGVydmFsLCBvd25lZCBTb3VyY2VGdW5jIGZ1 bmN0aW9uLCBbQ0NvZGUgKHBvcyA9IDAuMSldIGludCBwcmlvcml0eSA9IFByaW9yaXR5LkRFRkFV TFQpOwotLQkJcHVibGljIHN0YXRpYyB1aW50IGFkZF9mdWxsIChpbnQgcHJpb3JpdHksIHVpbnQg aW50ZXJ2YWwsIG93bmVkIFNvdXJjZUZ1bmMgZnVuY3Rpb24pOwotLQkJW1ZlcnNpb24gKHNpbmNl ID0gIjIuMTQiKV0KLS0JCVtDQ29kZSAoY25hbWUgPSAiZ190aW1lb3V0X2FkZF9zZWNvbmRzX2Z1 bGwiKV0KLS0JCXB1YmxpYyBzdGF0aWMgdWludCBhZGRfc2Vjb25kcyAodWludCBpbnRlcnZhbCwg b3duZWQgU291cmNlRnVuYyBmdW5jdGlvbiwgW0NDb2RlIChwb3MgPSAwLjEpXSBpbnQgcHJpb3Jp dHkgPSBQcmlvcml0eS5ERUZBVUxUKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjE0IildCi0t CQlwdWJsaWMgc3RhdGljIHVpbnQgYWRkX3NlY29uZHNfZnVsbCAoaW50IHByaW9yaXR5LCB1aW50 IGludGVydmFsLCBvd25lZCBTb3VyY2VGdW5jIGZ1bmN0aW9uKTsKLS0JfQotLQotLQlbQ0NvZGUg KGNuYW1lID0gIkdTb3VyY2UiKV0KLS0JcHVibGljIGNsYXNzIElkbGVTb3VyY2UgOiBTb3VyY2Ug ewotLQkJcHVibGljIElkbGVTb3VyY2UgKCk7Ci0tCX0KLS0KLS0JbmFtZXNwYWNlIElkbGUgewot LQkJW0NDb2RlIChjbmFtZSA9ICJnX2lkbGVfYWRkX2Z1bGwiKV0KLS0JCXB1YmxpYyBzdGF0aWMg dWludCBhZGQgKG93bmVkIFNvdXJjZUZ1bmMgZnVuY3Rpb24sIFtDQ29kZSAocG9zID0gMC4xKV0g aW50IHByaW9yaXR5ID0gUHJpb3JpdHkuREVGQVVMVF9JRExFKTsKLS0JCXB1YmxpYyBzdGF0aWMg dWludCBhZGRfZnVsbCAoaW50IHByaW9yaXR5LCBvd25lZCBTb3VyY2VGdW5jIGZ1bmN0aW9uKTsK LS0JCXB1YmxpYyBzdGF0aWMgYm9vbCByZW1vdmVfYnlfZGF0YSAodm9pZCogZGF0YSk7Ci0tCX0K LS0KLS0JW0NDb2RlICh0eXBlX2lkID0gIkdfVFlQRV9JTlQiLCBtYXJzaGFsbGVyX3R5cGVfbmFt ZSA9ICJJTlQiLCBnZXRfdmFsdWVfZnVuY3Rpb24gPSAiZ192YWx1ZV9nZXRfaW50Iiwgc2V0X3Zh bHVlX2Z1bmN0aW9uID0gImdfdmFsdWVfc2V0X2ludCIsIGRlZmF1bHRfdmFsdWUgPSAiMCIpXQot LQlbSW50ZWdlclR5cGUgKHJhbmsgPSA2KV0KLS0JcHVibGljIHN0cnVjdCBQaWQgOiBpbnQgewot LQkJW0NDb2RlIChjbmFtZSA9ICJHX1BJRF9GT1JNQVQiKV0KLS0JCVtWZXJzaW9uIChzaW5jZSA9 ICIyLjUwIildCi0tCQlwdWJsaWMgY29uc3Qgc3RyaW5nIEZPUk1BVDsKLS0JfQotLQotLQlwdWJs aWMgZGVsZWdhdGUgdm9pZCBDaGlsZFdhdGNoRnVuYyAoUGlkIHBpZCwgaW50IHN0YXR1cyk7Ci0t Ci0tCVtDQ29kZSAoY25hbWUgPSAiR1NvdXJjZSIpXQotLQlwdWJsaWMgY2xhc3MgQ2hpbGRXYXRj aFNvdXJjZSA6IFNvdXJjZSB7Ci0tCQlwdWJsaWMgQ2hpbGRXYXRjaFNvdXJjZSAoUGlkIHBpZCk7 Ci0tCX0KLS0KLS0JbmFtZXNwYWNlIENoaWxkV2F0Y2ggewotLQkJW1ZlcnNpb24gKHNpbmNlID0g IjIuNCIpXQotLQkJW0NDb2RlIChjbmFtZSA9ICJnX2NoaWxkX3dhdGNoX2FkZF9mdWxsIildCi0t CQlwdWJsaWMgc3RhdGljIHVpbnQgYWRkIChQaWQgcGlkLCBvd25lZCBDaGlsZFdhdGNoRnVuYyBm dW5jdGlvbiwgW0NDb2RlIChwb3MgPSAwLjEpXSBpbnQgcHJpb3JpdHkgPSBQcmlvcml0eS5ERUZB VUxUX0lETEUpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuNCIpXQotLQkJcHVibGljIHN0YXRp YyB1aW50IGFkZF9mdWxsIChpbnQgcHJpb3JpdHksIFBpZCBwaWQsIG93bmVkIENoaWxkV2F0Y2hG dW5jIGZ1bmN0aW9uKTsKLS0JfQotLQotLQlwdWJsaWMgc3RydWN0IFBvbGxGRCB7Ci0tCQlwdWJs aWMgaW50IGZkOwotLQkJcHVibGljIElPQ29uZGl0aW9uIGV2ZW50czsKLS0JCXB1YmxpYyBJT0Nv bmRpdGlvbiByZXZlbnRzOwotLQl9Ci0tCi0tCVtDb21wYWN0XQotLQlbQ0NvZGUgKHJlZl9mdW5j dGlvbiA9ICJnX3NvdXJjZV9yZWYiLCB1bnJlZl9mdW5jdGlvbiA9ICJnX3NvdXJjZV91bnJlZiIp XQotLQlwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU291cmNlIHsKLS0JCXByb3RlY3RlZCBTb3VyY2Ug KCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xMiIpXQotLQkJcHVibGljIHZvaWQgc2V0X2Z1 bmNzIChTb3VyY2VGdW5jcyBmdW5jcyk7Ci0tCQlwdWJsaWMgdWludCBhdHRhY2ggKE1haW5Db250 ZXh0PyBjb250ZXh0ID0gbnVsbCk7Ci0tCQlwdWJsaWMgdm9pZCBkZXN0cm95ICgpOwotLQkJW1Zl cnNpb24gKHNpbmNlID0gIjIuMTIiKV0KLS0JCXB1YmxpYyBib29sIGlzX2Rlc3Ryb3llZCAoKTsK LS0JCXB1YmxpYyB2b2lkIHNldF9wcmlvcml0eSAoaW50IHByaW9yaXR5KTsKLS0JCXB1YmxpYyBp bnQgZ2V0X3ByaW9yaXR5ICgpOwotLQkJcHVibGljIHZvaWQgc2V0X2Nhbl9yZWN1cnNlIChib29s IGNhbl9yZWN1cnNlKTsKLS0JCXB1YmxpYyBib29sIGdldF9jYW5fcmVjdXJzZSAoKTsKLS0JCXB1 YmxpYyB1aW50IGdldF9pZCAoKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjI2IildCi0tCQlw dWJsaWMgdW5vd25lZCBzdHJpbmc/IGdldF9uYW1lICgpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0g IjIuMjYiKV0KLS0JCXB1YmxpYyB2b2lkIHNldF9uYW1lIChzdHJpbmc/IG5hbWUpOwotLQkJW1Zl cnNpb24gKHNpbmNlID0gIjIuMjYiKV0KLS0JCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRfbmFtZV9i eV9pZCAodWludCB0YWcsIHN0cmluZz8gbmFtZSk7Ci0tCQlwdWJsaWMgdW5vd25lZCBNYWluQ29u dGV4dCBnZXRfY29udGV4dCAoKTsKLS0JCXB1YmxpYyB2b2lkIHNldF9jYWxsYmFjayAob3duZWQg U291cmNlRnVuYyBmdW5jKTsKLS0JCXB1YmxpYyB2b2lkIHNldF9jYWxsYmFja19pbmRpcmVjdCAo dm9pZCogY2FsbGJhY2tfZGF0YSwgU291cmNlQ2FsbGJhY2tGdW5jcyBjYWxsYmFja19mdW5jcyk7 Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4zNiIpXQotLQkJcHVibGljIHZvaWQqIGFkZF91bml4 X2ZkIChpbnQgZmQsIElPQ29uZGl0aW9uIGV2ZW50cyk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAi Mi4zNiIpXQotLQkJcHVibGljIHZvaWQgcmVtb3ZlX3VuaXhfZmQgKHZvaWQqIHRhZyk7Ci0tCQlb VmVyc2lvbiAoc2luY2UgPSAiMi4zNiIpXQotLQkJcHVibGljIHZvaWQgbW9kaWZ5X3VuaXhfZmQg KHZvaWQqIHRhZywgSU9Db25kaXRpb24gbmV3X2V2ZW50cyk7Ci0tCQlbVmVyc2lvbiAoc2luY2Ug PSAiMi4zNiIpXQotLQkJcHVibGljIElPQ29uZGl0aW9uIHF1ZXJ5X3VuaXhfZmQgKHZvaWQqIHRh Zyk7Ci0tCQlwdWJsaWMgdm9pZCBhZGRfcG9sbCAocmVmIFBvbGxGRCBmZCk7Ci0tCQlwdWJsaWMg dm9pZCByZW1vdmVfcG9sbCAocmVmIFBvbGxGRCBmZCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAi Mi4yOCIpXQotLQkJcHVibGljIHZvaWQgYWRkX2NoaWxkX3NvdXJjZSAoU291cmNlIGNoaWxkX3Nv dXJjZSk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4yOCIpXQotLQkJcHVibGljIHZvaWQgcmVt b3ZlX2NoaWxkX3NvdXJjZSAoU291cmNlIGNoaWxkX3NvdXJjZSk7Ci0tCQlbVmVyc2lvbiAoc2lu Y2UgPSAiMi4yOCIpXQotLQkJcHVibGljIGludDY0IGdldF90aW1lICgpOwotLQkJW1ZlcnNpb24g KGRlcHJlY2F0ZWRfc2luY2UgPSAiMi4yOCIsIHJlcGxhY2VtZW50ID0gImdldF90aW1lIildCi0t CQlwdWJsaWMgdm9pZCBnZXRfY3VycmVudF90aW1lIChvdXQgVGltZVZhbCB0aW1ldmFsKTsKLS0J CVtWZXJzaW9uIChzaW5jZSA9ICIyLjM2IildCi0tCQlwdWJsaWMgdm9pZCBzZXRfcmVhZHlfdGlt ZSAoaW50NjQgcmVhZHlfdGltZSk7Ci0tCQlwdWJsaWMgaW50NjQgZ2V0X3JlYWR5X3RpbWUgKCk7 Ci0tCQlwdWJsaWMgc3RhdGljIGJvb2wgcmVtb3ZlICh1aW50IGlkKTsKLS0JCXB1YmxpYyBzdGF0 aWMgYm9vbCByZW1vdmVfYnlfZnVuY3NfdXNlcl9kYXRhICh2b2lkKiB1c2VyX2RhdGEpOwotLQkJ cHVibGljIHN0YXRpYyBib29sIHJlbW92ZV9ieV91c2VyX2RhdGEgKHZvaWQqIHVzZXJfZGF0YSk7 Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4zMiIpXQotLQkJW0NDb2RlIChjbmFtZSA9ICJHX1NP VVJDRV9DT05USU5VRSIpXQotLQkJcHVibGljIGNvbnN0IGJvb2wgQ09OVElOVUU7Ci0tCQlbVmVy c2lvbiAoc2luY2UgPSAiMi4zMiIpXQotLQkJW0NDb2RlIChjbmFtZSA9ICJHX1NPVVJDRV9SRU1P VkUiKV0KLS0JCXB1YmxpYyBjb25zdCBib29sIFJFTU9WRTsKLS0KLS0JCXByb3RlY3RlZCBhYnN0 cmFjdCBib29sIHByZXBhcmUgKG91dCBpbnQgdGltZW91dF8pOwotLQkJcHJvdGVjdGVkIGFic3Ry YWN0IGJvb2wgY2hlY2sgKCk7Ci0tCQlwcm90ZWN0ZWQgYWJzdHJhY3QgYm9vbCBkaXNwYXRjaCAo U291cmNlRnVuYz8gX2NhbGxiYWNrKTsKLS0JfQotLQotLQlbQ0NvZGUgKGhhc190YXJnZXQgPSBm YWxzZSldCi0tCXB1YmxpYyBkZWxlZ2F0ZSB2b2lkIFNvdXJjZUR1bW15TWFyc2hhbCAoKTsKLS0K LS0JW0NDb2RlIChoYXNfdGFyZ2V0ID0gZmFsc2UpXQotLQlwdWJsaWMgZGVsZWdhdGUgYm9vbCBT b3VyY2VQcmVwYXJlRnVuYyAoU291cmNlIHNvdXJjZSwgb3V0IGludCB0aW1lb3V0Xyk7Ci0tCVtD Q29kZSAoaGFzX3RhcmdldCA9IGZhbHNlKV0KLS0JcHVibGljIGRlbGVnYXRlIGJvb2wgU291cmNl Q2hlY2tGdW5jIChTb3VyY2Ugc291cmNlKTsKLS0JW0NDb2RlIChoYXNfdGFyZ2V0ID0gZmFsc2Up XQotLQlwdWJsaWMgZGVsZWdhdGUgYm9vbCBTb3VyY2VEaXNwYXRjaEZ1bmMgKFNvdXJjZSBzb3Vy Y2UsIFNvdXJjZUZ1bmM/IF9jYWxsYmFjayk7Ci0tCVtDQ29kZSAoaGFzX3RhcmdldCA9IGZhbHNl KV0KLS0JcHVibGljIGRlbGVnYXRlIHZvaWQgU291cmNlRmluYWxpemVGdW5jIChTb3VyY2Ugc291 cmNlKTsKLS0KLS0JcHVibGljIHN0cnVjdCBTb3VyY2VGdW5jcyB7Ci0tCQlwdWJsaWMgU291cmNl UHJlcGFyZUZ1bmMgcHJlcGFyZTsKLS0JCXB1YmxpYyBTb3VyY2VDaGVja0Z1bmMgY2hlY2s7Ci0t CQlwdWJsaWMgU291cmNlRGlzcGF0Y2hGdW5jIGRpc3BhdGNoOwotLQkJcHVibGljIFNvdXJjZUZp bmFsaXplRnVuYyBmaW5hbGl6ZTsKLS0JfQotLQotLQlbQ0NvZGUgKGhhc190YXJnZXQgPSBmYWxz ZSldCi0tCXB1YmxpYyBkZWxlZ2F0ZSB2b2lkIFNvdXJjZUNhbGxiYWNrUmVmRnVuYyAodm9pZCog Y2JfZGF0YSk7Ci0tCVtDQ29kZSAoaGFzX3RhcmdldCA9IGZhbHNlKV0KLS0JcHVibGljIGRlbGVn YXRlIHZvaWQgU291cmNlQ2FsbGJhY2tVbnJlZkZ1bmMgKHZvaWQqIGNiX2RhdGEpOwotLQlbQ0Nv ZGUgKGhhc190YXJnZXQgPSBmYWxzZSldCi0tCXB1YmxpYyBkZWxlZ2F0ZSB2b2lkIFNvdXJjZUNh bGxiYWNrR2V0RnVuYyAodm9pZCogY2JfZGF0YSwgU291cmNlIHNvdXJjZSwgU291cmNlRnVuYyBm dW5jKTsKLS0KLS0JW0NvbXBhY3RdCi0tCXB1YmxpYyBjbGFzcyBTb3VyY2VDYWxsYmFja0Z1bmNz IHsKLS0JCXB1YmxpYyBTb3VyY2VDYWxsYmFja1JlZkZ1bmMgQHJlZjsKLS0JCXB1YmxpYyBTb3Vy Y2VDYWxsYmFja1VucmVmRnVuYyB1bnJlZjsKLS0JCXB1YmxpYyBTb3VyY2VDYWxsYmFja0dldEZ1 bmMgQGdldDsKLS0JfQotLQotLQlwdWJsaWMgZGVsZWdhdGUgYm9vbCBTb3VyY2VGdW5jICgpOwot LQotLQlwdWJsaWMgZXJyb3Jkb21haW4gVGhyZWFkRXJyb3IgewotLQkJQUdBSU47Ci0tCQlwdWJs aWMgc3RhdGljIEdMaWIuUXVhcmsgcXVhcmsgKCk7Ci0tCX0KLS0KLS0JLyogVGhyZWFkIHN1cHBv cnQgKi8KLS0KLS0JW0NDb2RlIChzY29wZSA9ICJhc3luYyIpXQotLQlwdWJsaWMgZGVsZWdhdGUg RyBUaHJlYWRGdW5jPEc+ICgpOwotLQlwdWJsaWMgZGVsZWdhdGUgdm9pZCBGdW5jPEc+IChHIGRh dGEpOwotLQotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi4zNiIpXQotLQlwdWJsaWMgdWludCBnZXRf bnVtX3Byb2Nlc3NvcnMgKCk7Ci0tCi0tCVtDQ29kZSAoaGFzX3R5cGVfaWQgPSBmYWxzZSldCi0t CXB1YmxpYyBlbnVtIFRocmVhZFByaW9yaXR5IHsKLS0JCUxPVywKLS0JCU5PUk1BTCwKLS0JCUhJ R0gsCi0tCQlVUkdFTlQKLS0JfQotLQotLQlbQ29tcGFjdF0KLS0JW1ZlcnNpb24gKHNpbmNlID0g IjIuMzIiKV0KLS0JW0NDb2RlIChyZWZfZnVuY3Rpb24gPSAiZ190aHJlYWRfcmVmIiwgdW5yZWZf ZnVuY3Rpb24gPSAiZ190aHJlYWRfdW5yZWYiKV0KLS0JcHVibGljIGNsYXNzIFRocmVhZDxUPiB7 Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4zMiIpXQotLQkJcHVibGljIFRocmVhZCAoc3RyaW5n PyBuYW1lLCBvd25lZCBUaHJlYWRGdW5jPFQ+IGZ1bmMpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0g IjIuMzIiKV0KLS0JCVtDQ29kZSAoY25hbWUgPSAiZ190aHJlYWRfdHJ5X25ldyIpXQotLQkJcHVi bGljIFRocmVhZC50cnkgKHN0cmluZz8gbmFtZSwgb3duZWQgVGhyZWFkRnVuYzxUPiBmdW5jKSB0 aHJvd3MgR0xpYi5FcnJvcjsKLS0JCXB1YmxpYyBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQgKCk7Ci0t CQlbVmVyc2lvbiAoZGVwcmVjYXRlZF9zaW5jZSA9ICIyLjMyIiwgcmVwbGFjZW1lbnQgPSAibmV3 IFRocmVhZDxUPiAoKSIpXQotLQkJW0NDb2RlIChzaW1wbGVfZ2VuZXJpY3MgPSB0cnVlKV0KLS0J CXB1YmxpYyBzdGF0aWMgdW5vd25lZCBUaHJlYWQ8VD4gY3JlYXRlPFQ+IChvd25lZCBUaHJlYWRG dW5jPFQ+IGZ1bmMsIGJvb2wgam9pbmFibGUpIHRocm93cyBUaHJlYWRFcnJvcjsKLS0JCVtWZXJz aW9uIChkZXByZWNhdGVkX3NpbmNlID0gIjIuMzIiLCByZXBsYWNlbWVudCA9ICJuZXcgVGhyZWFk PFQ+ICgpIildCi0tCQlbQ0NvZGUgKHNpbXBsZV9nZW5lcmljcyA9IHRydWUpXQotLQkJcHVibGlj IHN0YXRpYyB1bm93bmVkIFRocmVhZDxUPiBjcmVhdGVfZnVsbDxUPiAob3duZWQgVGhyZWFkRnVu YzxUPiBmdW5jLCB1bG9uZyBzdGFja19zaXplLCBib29sIGpvaW5hYmxlLCBib29sIGJvdW5kLCBU aHJlYWRQcmlvcml0eSBwcmlvcml0eSkgdGhyb3dzIFRocmVhZEVycm9yOwotLQkJW0NDb2RlIChz aW1wbGVfZ2VuZXJpY3MgPSB0cnVlKV0KLS0JCXB1YmxpYyBzdGF0aWMgdW5vd25lZCBUaHJlYWQ8 VD4gc2VsZjxUPiAoKTsKLS0JCVtEZXN0cm95c0luc3RhbmNlXQotLQkJcHVibGljIFQgam9pbiAo KTsKLS0JCVtWZXJzaW9uIChkZXByZWNhdGVkX3NpbmNlID0gIjIuMzIiKV0KLS0JCXB1YmxpYyB2 b2lkIHNldF9wcmlvcml0eSAoVGhyZWFkUHJpb3JpdHkgcHJpb3JpdHkpOwotLQkJcHVibGljIHN0 YXRpYyB2b2lkIHlpZWxkICgpOwotLQkJcHVibGljIHN0YXRpYyB2b2lkIGV4aXQgKFQgcmV0dmFs KTsKLS0JCVtWZXJzaW9uIChkZXByZWNhdGVkX3NpbmNlID0gIjIuMzIiLCBzaW5jZSA9ICIyLjEw IildCi0tCQlwdWJsaWMgc3RhdGljIHZvaWQgQGZvcmVhY2ggKEZ1bmM8VGhyZWFkPiB0aHJlYWRf ZnVuYyk7Ci0tCi0tCQlbQ0NvZGUgKGNuYW1lID0gImdfdXNsZWVwIildCi0tCQlwdWJsaWMgc3Rh dGljIHZvaWQgdXNsZWVwICh1bG9uZyBtaWNyb3NlY29uZHMpOwotLQl9Ci0tCi0tCVtWZXJzaW9u IChzaW5jZSA9ICIyLjMyIildCi0tCVtDQ29kZSAoZGVzdHJveV9mdW5jdGlvbiA9ICJnX211dGV4 X2NsZWFyIiwgbHZhbHVlX2FjY2VzcyA9IGZhbHNlKV0KLS0JcHVibGljIHN0cnVjdCBNdXRleCB7 Ci0tCQlwdWJsaWMgTXV0ZXggKCk7Ci0tCQlwdWJsaWMgdm9pZCBAbG9jayAoKTsKLS0JCXB1Ymxp YyBib29sIHRyeWxvY2sgKCk7Ci0tCQlwdWJsaWMgdm9pZCB1bmxvY2sgKCk7Ci0tCX0KLS0KLS0J W1ZlcnNpb24gKHNpbmNlID0gIjIuNDQiKV0KLS0JW0NDb2RlIChkZXN0cm95X2Z1bmN0aW9uID0g ImdfbXV0ZXhfbG9ja2VyX2ZyZWUiKV0KLS0JcHVibGljIHN0cnVjdCBNdXRleExvY2tlciB7Ci0t CQlwdWJsaWMgTXV0ZXhMb2NrZXIgKE11dGV4IG11dGV4KTsKLS0JCXB1YmxpYyB2b2lkIGZyZWUg KCk7Ci0tCX0KLS0KLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuMzIiKV0KLS0JW0NDb2RlIChkZXN0 cm95X2Z1bmN0aW9uID0gImdfcmVjX211dGV4X2NsZWFyIildCi0tCXB1YmxpYyBzdHJ1Y3QgUmVj TXV0ZXggewotLQkJcHVibGljIFJlY011dGV4ICgpOwotLQkJcHVibGljIHZvaWQgbG9jayAoKTsK LS0JCXB1YmxpYyBib29sIHRyeWxvY2sgKCk7Ci0tCQlwdWJsaWMgdm9pZCB1bmxvY2sgKCk7Ci0t CX0KLS0KLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuMzIiKV0KLS0JW0NDb2RlIChkZXN0cm95X2Z1 bmN0aW9uID0gImdfcndfbG9ja19jbGVhciIpXQotLQlwdWJsaWMgc3RydWN0IFJXTG9jayB7Ci0t CQlwdWJsaWMgUldMb2NrICgpOwotLQkJcHVibGljIHZvaWQgd3JpdGVyX2xvY2sgKCk7Ci0tCQlw dWJsaWMgYm9vbCB3cml0ZXJfdHJ5bG9jayAoKTsKLS0JCXB1YmxpYyB2b2lkIHdyaXRlcl91bmxv Y2sgKCk7Ci0tCQlwdWJsaWMgdm9pZCByZWFkZXJfbG9jayAoKTsKLS0JCXB1YmxpYyBib29sIHJl YWRlcl90cnlsb2NrICgpOwotLQkJcHVibGljIHZvaWQgcmVhZGVyX3VubG9jayAoKTsKLS0JfQot LQotLQlbVmVyc2lvbiAoZGVwcmVjYXRlZF9zaW5jZSA9ICIyLjMyIiwgcmVwbGFjZW1lbnQgPSAi TXV0ZXgiKV0KLS0JW0NDb2RlIChkZXN0cm95X2Z1bmN0aW9uID0gImdfc3RhdGljX211dGV4X2Zy ZWUiLCBkZWZhdWx0X3ZhbHVlID0gIkdfU1RBVElDX01VVEVYX0lOSVQiKV0KLS0JcHVibGljIHN0 cnVjdCBTdGF0aWNNdXRleCB7Ci0tCQlwdWJsaWMgU3RhdGljTXV0ZXggKCk7Ci0tCQlwdWJsaWMg dm9pZCBsb2NrICgpOwotLQkJcHVibGljIGJvb2wgdHJ5bG9jayAoKTsKLS0JCXB1YmxpYyB2b2lk IHVubG9jayAoKTsKLS0JCXB1YmxpYyB2b2lkIGxvY2tfZnVsbCAoKTsKLS0JfQotLQotLQlbVmVy c2lvbiAoZGVwcmVjYXRlZF9zaW5jZSA9ICIyLjMyIiwgcmVwbGFjZW1lbnQgPSAiUmVjTXV0ZXgi KV0KLS0JW0NDb2RlIChkZXN0cm95X2Z1bmN0aW9uID0gImdfc3RhdGljX3JlY19tdXRleF9mcmVl IiwgZGVmYXVsdF92YWx1ZSA9ICJHX1NUQVRJQ19SRUNfTVVURVhfSU5JVCIpXQotLQlwdWJsaWMg c3RydWN0IFN0YXRpY1JlY011dGV4IHsKLS0JCXB1YmxpYyBTdGF0aWNSZWNNdXRleCAoKTsKLS0J CXB1YmxpYyB2b2lkIGxvY2sgKCk7Ci0tCQlwdWJsaWMgYm9vbCB0cnlsb2NrICgpOwotLQkJcHVi bGljIHZvaWQgdW5sb2NrICgpOwotLQkJcHVibGljIHZvaWQgbG9ja19mdWxsICgpOwotLQl9Ci0t Ci0tCVtWZXJzaW9uIChkZXByZWNhdGVkX3NpbmNlID0gIjIuMzIiLCByZXBsYWNlbWVudCA9ICJS V0xvY2siKV0KLS0JW0NDb2RlIChkZXN0cm95X2Z1bmN0aW9uID0gImdfc3RhdGljX3J3X2xvY2tf ZnJlZSIsIGRlZmF1bHRfdmFsdWUgPSAiR19TVEFUSUNfUldfTE9DS19JTklUIildCi0tCXB1Ymxp YyBzdHJ1Y3QgU3RhdGljUldMb2NrIHsKLS0JCXB1YmxpYyBTdGF0aWNSV0xvY2sgKCk7Ci0tCQlw dWJsaWMgdm9pZCByZWFkZXJfbG9jayAoKTsKLS0JCXB1YmxpYyBib29sIHJlYWRlcl90cnlsb2Nr ICgpOwotLQkJcHVibGljIHZvaWQgcmVhZGVyX3VubG9jayAoKTsKLS0JCXB1YmxpYyB2b2lkIHdy aXRlcl9sb2NrICgpOwotLQkJcHVibGljIGJvb2wgd3JpdGVyX3RyeWxvY2sgKCk7Ci0tCQlwdWJs aWMgdm9pZCB3cml0ZXJfdW5sb2NrICgpOwotLQl9Ci0tCi0tCVtDb21wYWN0XQotLQlbQ0NvZGUg KHJlZl9mdW5jdGlvbiA9ICIiLCB1bnJlZl9mdW5jdGlvbiA9ICIiKV0KLS0JcHVibGljIGNsYXNz IFByaXZhdGUgewotLQkJcHVibGljIFByaXZhdGUgKERlc3Ryb3lOb3RpZnk/IGRlc3Ryb3lfZnVu YyA9IG51bGwpOwotLQkJcHVibGljIHZvaWQqIGdldCAoKTsKLS0JCXB1YmxpYyB2b2lkIHNldCAo dm9pZCogZGF0YSk7Ci0tCQlwdWJsaWMgdm9pZCByZXBsYWNlICh2b2lkKiBkYXRhKTsKLS0JfQot LQotLQlbQ0NvZGUgKGRlc3Ryb3lfZnVuY3Rpb24gPSAiZ19zdGF0aWNfcHJpdmF0ZV9mcmVlIiwg ZGVmYXVsdF92YWx1ZSA9ICJHX1NUQVRJQ19QUklWQVRFX0lOSVQiKV0KLS0JW1ZlcnNpb24gKGRl cHJlY2F0ZWRfc2luY2UgPSAiMi4zMiIpXQotLQlwdWJsaWMgc3RydWN0IFN0YXRpY1ByaXZhdGUg ewotLQkJcHVibGljIFN0YXRpY1ByaXZhdGUgKCk7Ci0tCQlwdWJsaWMgdm9pZCogZ2V0ICgpOwot LQkJcHVibGljIHZvaWQgc2V0ICh2b2lkKiBkYXRhLCBEZXN0cm95Tm90aWZ5PyBkZXN0cm95X2Z1 bmMpOwotLQl9Ci0tCi0tCVtWZXJzaW9uIChzaW5jZSA9ICIyLjMyIildCi0tCVtDQ29kZSAoZGVz dHJveV9mdW5jdGlvbiA9ICJnX2NvbmRfY2xlYXIiLCBsdmFsdWVfYWNjZXNzID0gZmFsc2UpXQot LQlwdWJsaWMgc3RydWN0IENvbmQgewotLQkJcHVibGljIENvbmQgKCk7Ci0tCQlwdWJsaWMgdm9p ZCBAc2lnbmFsICgpOwotLQkJcHVibGljIHZvaWQgYnJvYWRjYXN0ICgpOwotLQkJcHVibGljIHZv aWQgd2FpdCAoTXV0ZXggbXV0ZXgpOwotLQkJW1ZlcnNpb24gKGRlcHJlY2F0ZWRfc2luY2UgPSAi Mi4zMiIsIHJlcGxhY2VtZW50ID0gIndhaXRfdW50aWwiKV0KLS0JCXB1YmxpYyBib29sIHRpbWVk X3dhaXQgKE11dGV4IG11dGV4LCBUaW1lVmFsIGFic190aW1lKTsKLS0JCVtWZXJzaW9uIChzaW5j ZSA9ICIyLjMyIildCi0tCQlwdWJsaWMgYm9vbCB3YWl0X3VudGlsIChNdXRleCBtdXRleCwgaW50 NjQgZW5kX3RpbWUpOwotLQl9Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiR1RocmVhZEZ1bmMiKV0K LS0JcHVibGljIGRlbGVnYXRlIEcgT25jZUZ1bmM8Rz4gKCk7Ci0tCi0tCVtWZXJzaW9uIChzaW5j ZSA9ICIyLjQiKV0KLS0JW0NDb2RlIChkZWZhdWx0X3ZhbHVlID0gIkdfT05DRV9JTklUIildCi0t CXB1YmxpYyBzdHJ1Y3QgT25jZTxHPiB7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImdfb25jZSIpXQot LQkJcHVibGljIHVub3duZWQgRyBvbmNlIChPbmNlRnVuYzxHPiBmdW5jdGlvbik7Ci0tCQlbVmVy c2lvbiAoc2luY2UgPSAiMi4xNCIpXQotLQkJcHVibGljIHN0YXRpYyBib29sIGluaXRfZW50ZXIg KFtDQ29kZSAodHlwZT0idm9sYXRpbGUgZ3NpemUgKiIpXSBzaXplX3QgKnZhbHVlKTsKLS0JCVtW ZXJzaW9uIChzaW5jZSA9ICIyLjE0IildCi0tCQlwdWJsaWMgc3RhdGljIHZvaWQgaW5pdF9sZWF2 ZSAoW0NDb2RlICh0eXBlPSJ2b2xhdGlsZSBnc2l6ZSAqIildIHNpemVfdCAqdmFsdWUsIHNpemVf dCBzZXRfdmFsdWUpOwotLQkJcHVibGljIE9uY2VTdGF0dXMgc3RhdHVzOwotLQl9Ci0tCi0tCVtD Q29kZSAoY3ByZWZpeCA9ICJHX09OQ0VfU1RBVFVTXyIsIGhhc190eXBlX2lkID0gZmFsc2UpXQot LQlwdWJsaWMgZW51bSBPbmNlU3RhdHVzIHsKLS0JCU5PVENBTExFRCwKLS0JCVBST0dSRVNTLAot LQkJUkVBRFkKLS0JfQotLQotLQkvKiBUaHJlYWQgUG9vbHMgKi8KLS0KLS0JW0NDb2RlIChjbmFt ZSA9ICJHRnVuYyIpXQotLQlwdWJsaWMgZGVsZWdhdGUgdm9pZCBUaHJlYWRQb29sRnVuYzxHPiAo b3duZWQgRyBkYXRhKTsKLS0KLS0JW0NvbXBhY3RdCi0tCVtDQ29kZSAoZnJlZV9mdW5jdGlvbiA9 ICJnX3RocmVhZF9wb29sX2ZyZWUiKV0KLS0JcHVibGljIGNsYXNzIFRocmVhZFBvb2w8VD4gewot LQkJW1ZlcnNpb24gKGRlcHJlY2F0ZWRfc2luY2UgPSAidmFsYS0wLjE4IiwgcmVwbGFjZW1lbnQg PSAiVGhyZWFkUG9vbC53aXRoX293bmVkX2RhdGEiKV0KLS0JCXB1YmxpYyBUaHJlYWRQb29sIChG dW5jPFQ+IGZ1bmMsIGludCBtYXhfdGhyZWFkcywgYm9vbCBleGNsdXNpdmUpIHRocm93cyBUaHJl YWRFcnJvcjsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZ190aHJlYWRfcG9vbF9uZXciKV0KLS0JCXB1 YmxpYyBUaHJlYWRQb29sLndpdGhfb3duZWRfZGF0YSAoVGhyZWFkUG9vbEZ1bmM8VD4gZnVuYywg aW50IG1heF90aHJlYWRzLCBib29sIGV4Y2x1c2l2ZSkgdGhyb3dzIFRocmVhZEVycm9yOwotLQkJ W1ZlcnNpb24gKGRlcHJlY2F0ZWRfc2luY2UgPSAidmFsYS0wLjE4IiwgcmVwbGFjZW1lbnQgPSAi YWRkIildCi0tCQlwdWJsaWMgdm9pZCBwdXNoIChUIGRhdGEpIHRocm93cyBUaHJlYWRFcnJvcjsK LS0JCVtDQ29kZSAoY25hbWUgPSAiZ190aHJlYWRfcG9vbF9wdXNoIildCi0tCQlwdWJsaWMgdm9p ZCBhZGQgKG93bmVkIFQgZGF0YSkgdGhyb3dzIFRocmVhZEVycm9yOwotLQkJcHVibGljIHZvaWQg c2V0X21heF90aHJlYWRzIChpbnQgbWF4X3RocmVhZHMpIHRocm93cyBUaHJlYWRFcnJvcjsKLS0J CXB1YmxpYyBpbnQgZ2V0X21heF90aHJlYWRzICgpOwotLQkJcHVibGljIHVpbnQgZ2V0X251bV90 aHJlYWRzICgpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuNDYiKV0KLS0JCXB1YmxpYyBib29s IG1vdmVfdG9fZnJvbnQgKFQgZGF0YSk7Ci0tCQlwdWJsaWMgdWludCB1bnByb2Nlc3NlZCAoKTsK LS0JCVtDQ29kZSAoY25hbWUgPSAiZ190aHJlYWRfcG9vbF9mcmVlIildCi0tCQl2b2lkIF9mcmVl IChib29sIGltbWVkaWF0ZSwgYm9vbCB3YWl0KTsKLS0JCVtDQ29kZSAoY25hbWUgPSAidmFsYV9f Z190aHJlYWRfcG9vbF9mcmVlX3dyYXBwZXIiKV0KLS0JCXB1YmxpYyBzdGF0aWMgdm9pZCBmcmVl IChvd25lZCBUaHJlYWRQb29sPyBwb29sLCBib29sIGltbWVkaWF0ZSwgYm9vbCB3YWl0KSB7Ci0t CQkJVGhyZWFkUG9vbCogcHRyID0gKG93bmVkKSBwb29sOwotLQkJCWlmIChwdHIgIT0gbnVsbCkg ewotLQkJCQkoKFRocmVhZFBvb2wpcHRyKS5fZnJlZSAoaW1tZWRpYXRlLCB3YWl0KTsKLS0JCQl9 Ci0tCQl9Ci0tCQlwdWJsaWMgc3RhdGljIHZvaWQgc2V0X21heF91bnVzZWRfdGhyZWFkcyAoaW50 IG1heF90aHJlYWRzKTsKLS0JCXB1YmxpYyBzdGF0aWMgaW50IGdldF9tYXhfdW51c2VkX3RocmVh ZHMgKCk7Ci0tCQlwdWJsaWMgc3RhdGljIHVpbnQgZ2V0X251bV91bnVzZWRfdGhyZWFkcyAoKTsK LS0JCXB1YmxpYyBzdGF0aWMgdm9pZCBzdG9wX3VudXNlZF90aHJlYWRzICgpOwotLQkJW1ZlcnNp b24gKHNpbmNlID0gIjIuMTAiKV0KLS0JCXB1YmxpYyB2b2lkIHNldF9zb3J0X2Z1bmN0aW9uIChD b21wYXJlRGF0YUZ1bmM8VD4gZnVuYyk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xMCIpXQot LQkJcHVibGljIHN0YXRpYyB2b2lkIHNldF9tYXhfaWRsZV90aW1lICh1aW50IGludGVydmFsKTsK LS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjEwIildCi0tCQlwdWJsaWMgc3RhdGljIHVpbnQgZ2V0 X21heF9pZGxlX3RpbWUgKCk7Ci0tCX0KLS0KLS0JLyogQXN5bmNocm9ub3VzIFF1ZXVlcyAqLwot LQotLQlbQ29tcGFjdF0KLS0JW0NDb2RlIChyZWZfZnVuY3Rpb24gPSAiZ19hc3luY19xdWV1ZV9y ZWYiLCB1bnJlZl9mdW5jdGlvbiA9ICJnX2FzeW5jX3F1ZXVlX3VucmVmIildCi0tCXB1YmxpYyBj bGFzcyBBc3luY1F1ZXVlPEc+IHsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjE2IildCi0tCQlb Q0NvZGUgKGNuYW1lID0gImdfYXN5bmNfcXVldWVfbmV3X2Z1bGwiLCBzaW1wbGVfZ2VuZXJpY3Mg PSB0cnVlKV0KLS0JCXB1YmxpYyBBc3luY1F1ZXVlICgpOwotLQkJcHVibGljIHZvaWQgcHVzaCAo b3duZWQgRyBkYXRhKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjEwIildCi0tCQlwdWJsaWMg dm9pZCBwdXNoX3NvcnRlZCAob3duZWQgRyBkYXRhLCBDb21wYXJlRGF0YUZ1bmM8Rz4gZnVuYyk7 Ci0tCQlwdWJsaWMgRyBwb3AgKCk7Ci0tCQlwdWJsaWMgRz8gdHJ5X3BvcCAoKTsKLS0JCXB1Ymxp YyBHPyB0aW1lZF9wb3AgKHJlZiBUaW1lVmFsIGVuZF90aW1lKTsKLS0JCXB1YmxpYyBpbnQgbGVu Z3RoICgpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMTAiKV0KLS0JCXB1YmxpYyB2b2lkIHNv cnQgKENvbXBhcmVEYXRhRnVuYzxHPiBmdW5jKTsKLS0JCXB1YmxpYyB2b2lkIEBsb2NrICgpOwot LQkJcHVibGljIHZvaWQgdW5sb2NrICgpOwotLQkJcHVibGljIHZvaWQgcmVmX3VubG9ja2VkICgp OwotLQkJcHVibGljIHZvaWQgdW5yZWZfYW5kX3VubG9jayAoKTsKLS0JCVtWZXJzaW9uIChzaW5j ZSA9ICIyLjQ2IildCi0tCQlwdWJsaWMgdm9pZCBwdXNoX2Zyb250IChvd25lZCBHIGRhdGEpOwot LQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuNDYiKV0KLS0JCXB1YmxpYyB2b2lkIHB1c2hfZnJvbnRf dW5sb2NrZWQgKG93bmVkIEcgZGF0YSk7Ci0tCQlwdWJsaWMgdm9pZCBwdXNoX3VubG9ja2VkIChv d25lZCBHIGRhdGEpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMTAiKV0KLS0JCXB1YmxpYyB2 b2lkIHB1c2hfc29ydGVkX3VubG9ja2VkIChvd25lZCBHIGRhdGEsIENvbXBhcmVEYXRhRnVuYzxH PiBmdW5jKTsKLS0JCXB1YmxpYyBHIHBvcF91bmxvY2tlZCAoKTsKLS0JCVtWZXJzaW9uIChzaW5j ZSA9ICIyLjQ2IildCi0tCQlwdWJsaWMgYm9vbCByZW1vdmUgKEcgZGF0YSk7Ci0tCQlbVmVyc2lv biAoc2luY2UgPSAiMi40NiIpXQotLQkJcHVibGljIGJvb2wgcmVtb3ZlX3VubG9ja2VkIChHIGRh dGEpOwotLQkJcHVibGljIEc/IHRyeV9wb3BfdW5sb2NrZWQgKCk7Ci0tCQlwdWJsaWMgRz8gdGlt ZWRfcG9wX3VubG9ja2VkIChyZWYgVGltZVZhbCBlbmRfdGltZSk7Ci0tCQlwdWJsaWMgRz8gdGlt ZW91dF9wb3AgKHVpbnQ2NCB0aW1lb3V0KTsKLS0JCXB1YmxpYyBHPyB0aW1lb3V0X3BvcF91bmxv Y2tlZCAodWludDY0IHRpbWVvdXQpOwotLQkJcHVibGljIGludCBsZW5ndGhfdW5sb2NrZWQgKCk7 Ci0tCQlwdWJsaWMgdm9pZCBzb3J0X3VubG9ja2VkIChDb21wYXJlRGF0YUZ1bmM8Rz4gZnVuYyk7 Ci0tCX0KLS0KLS0JLyogTWVtb3J5IEFsbG9jYXRpb24gKi8KLS0KLS0JcHVibGljIHN0YXRpYyB2 b2lkKiBtYWxsb2MgKHNpemVfdCBuX2J5dGVzKTsKLS0JcHVibGljIHN0YXRpYyB2b2lkKiBtYWxs b2MwIChzaXplX3Qgbl9ieXRlcyk7Ci0tCXB1YmxpYyBzdGF0aWMgdm9pZCogcmVhbGxvYyAodm9p ZCogbWVtLCBzaXplX3Qgbl9ieXRlcyk7Ci0tCi0tCXB1YmxpYyBzdGF0aWMgdm9pZCogdHJ5X21h bGxvYyAoc2l6ZV90IG5fYnl0ZXMpOwotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi44IildCi0tCXB1 YmxpYyBzdGF0aWMgdm9pZCogdHJ5X21hbGxvYzAgKHNpemVfdCBuX2J5dGVzKTsKLS0JcHVibGlj IHN0YXRpYyB2b2lkKiB0cnlfcmVhbGxvYyAodm9pZCogbWVtLCBzaXplX3Qgbl9ieXRlcyk7Ci0t Ci0tCXB1YmxpYyBzdGF0aWMgdm9pZCBmcmVlICh2b2lkKiBtZW0pOwotLQotLQlwdWJsaWMgY2xh c3MgTWVtVlRhYmxlIHsKLS0JfQotLQotLQlbQ0NvZGUgKGNuYW1lID0gImdsaWJfbWVtX3Byb2Zp bGVyX3RhYmxlIildCi0tCXB1YmxpYyBzdGF0aWMgTWVtVlRhYmxlIG1lbV9wcm9maWxlcl90YWJs ZTsKLS0KLS0JcHVibGljIHN0YXRpYyB2b2lkIG1lbV9zZXRfdnRhYmxlIChNZW1WVGFibGUgdnRh YmxlKTsKLS0JcHVibGljIHN0YXRpYyB2b2lkIG1lbV9wcm9maWxlICgpOwotLQotLQlbQ0NvZGUg KGNoZWFkZXJfZmlsZW5hbWUgPSAic3RyaW5nLmgiKV0KLS0JbmFtZXNwYWNlIE1lbW9yeSB7Ci0t CQlbQ0NvZGUgKGNuYW1lID0gIm1lbWNtcCIpXQotLQkJcHVibGljIHN0YXRpYyBpbnQgY21wICh2 b2lkKiBzMSwgdm9pZCogczIsIHNpemVfdCBuKTsKLS0JCVtDQ29kZSAoY25hbWUgPSAibWVtY3B5 IildCi0tCQlwdWJsaWMgc3RhdGljIHZvaWQqIGNvcHkgKHZvaWQqIGRlc3QsIHZvaWQqIHNyYywg c2l6ZV90IG4pOwotLQkJW0NDb2RlIChjbmFtZSA9ICJtZW1zZXQiKV0KLS0JCXB1YmxpYyBzdGF0 aWMgdm9pZCogc2V0ICh2b2lkKiBkZXN0LCBpbnQgc3JjLCBzaXplX3Qgbik7Ci0tCQlbQ0NvZGUg KGNuYW1lID0gImdfbWVtbW92ZSIpXQotLQkJcHVibGljIHN0YXRpYyB2b2lkKiBtb3ZlICh2b2lk KiBkZXN0LCB2b2lkKiBzcmMsIHNpemVfdCBuKTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZ19tZW1k dXAiKV0KLS0JCXB1YmxpYyBzdGF0aWMgdm9pZCogZHVwICh2b2lkKiBtZW0sIHVpbnQgbik7Ci0t CX0KLS0KLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuMTAiKV0KLS0JbmFtZXNwYWNlIFNsaWNlIHsK LS0JCXB1YmxpYyBzdGF0aWMgdm9pZCogYWxsb2MgKHNpemVfdCBibG9ja19zaXplKTsKLS0JCXB1 YmxpYyBzdGF0aWMgdm9pZCogYWxsb2MwIChzaXplX3QgYmxvY2tfc2l6ZSk7Ci0tCQlbVmVyc2lv biAoc2luY2UgPSAiMi4xNCIpXQotLQkJcHVibGljIHN0YXRpYyB2b2lkKiBjb3B5IChzaXplX3Qg YmxvY2tfc2l6ZSwgdm9pZCogbWVtX2Jsb2NrKTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZ19zbGlj ZV9mcmVlMSIpXQotLQkJcHVibGljIHN0YXRpYyB2b2lkIGZyZWUgKHNpemVfdCBibG9ja19zaXpl LCB2b2lkKiBtZW1fYmxvY2spOwotLQkJcHVibGljIHN0YXRpYyB2b2lkIGZyZWVfY2hhaW5fd2l0 aF9vZmZzZXQgKHNpemVfdCBibG9ja19zaXplLCB2b2lkICptZW1fY2hhaW4sIHNpemVfdCBuZXh0 X29mZnNldCk7Ci0tCQlwdWJsaWMgc3RhdGljIGludDY0IGdldF9jb25maWcgKFNsaWNlQ29uZmln IGNrZXkpOwotLQkJW0NDb2RlIChhcnJheV9sZW5ndGhfY25hbWUgPSAibl92YWx1ZXMiLCBhcnJh eV9sZW5ndGhfdHlwZSA9ICJndWludCIpXQotLQkJcHVibGljIHN0YXRpYyBpbnQ2NFtdIGdldF9j b25maWdfc3RhdGUgKFNsaWNlQ29uZmlnIGNrZXksIGludDY0IGFkZHJlc3MpOwotLQkJcHVibGlj IHN0YXRpYyB2b2lkIHNldF9jb25maWcgKFNsaWNlQ29uZmlnIGNrZXksIGludDY0IHZhbHVlKTsK LS0JfQotLQotLQlbQ0NvZGUgKGNwcmVmaXggPSAiR19TTElDRV9DT05GSUdfIiwgaGFzX3R5cGVf aWQgPSBmYWxzZSldCi0tCXB1YmxpYyBlbnVtIFNsaWNlQ29uZmlnIHsKLS0JCUFMV0FZU19NQUxM T0MsCi0tCQlCWVBBU1NfTUFHQVpJTkVTLAotLQkJV09SS0lOR19TRVRfTVNFQ1MsCi0tCQlDT0xP Ul9JTkNSRU1FTlQsCi0tCQlDSFVOS19TSVpFUywKLS0JCUNPTlRFTlRJT05fQ09VTlRFUgotLQl9 Ci0tCi0tCS8qIElPIENoYW5uZWxzICovCi0tCi0tCVtDb21wYWN0XQotLQlbQ0NvZGUgKHJlZl9m dW5jdGlvbiA9ICJnX2lvX2NoYW5uZWxfcmVmIiwgdW5yZWZfZnVuY3Rpb24gPSAiZ19pb19jaGFu bmVsX3VucmVmIildCi0tCXB1YmxpYyBjbGFzcyBJT0NoYW5uZWwgewotLQkJW0NDb2RlIChjbmFt ZSA9ICJnX2lvX2NoYW5uZWxfdW5peF9uZXciKV0KLS0JCXB1YmxpYyBJT0NoYW5uZWwudW5peF9u ZXcgKGludCBmZCk7Ci0tCQlwdWJsaWMgaW50IHVuaXhfZ2V0X2ZkICgpOwotLQkJW0NDb2RlIChj bmFtZSA9ICJnX2lvX2NoYW5uZWxfd2luMzJfbmV3X2ZkIildCi0tCQlwdWJsaWMgSU9DaGFubmVs LndpbjMyX25ld19mZCAoaW50IGZkKTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZ19pb19jaGFubmVs X3dpbjMyX25ld19zb2NrZXQiKV0KLS0JCXB1YmxpYyBJT0NoYW5uZWwud2luMzJfc29ja2V0IChp bnQgc29ja2V0KTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZ19pb19jaGFubmVsX3dpbjMyX25ld19t ZXNzYWdlcyIpXQotLQkJcHVibGljIElPQ2hhbm5lbC53aW4zMl9tZXNzYWdlcyAoc2l6ZV90IGh3 bmQpOwotLQkJcHVibGljIHZvaWQgaW5pdCAoKTsKLS0JCXB1YmxpYyBJT0NoYW5uZWwuZmlsZSAo c3RyaW5nIGZpbGVuYW1lLCBzdHJpbmcgbW9kZSkgdGhyb3dzIEZpbGVFcnJvcjsKLS0JCXB1Ymxp YyBJT1N0YXR1cyByZWFkX2NoYXJzIChjaGFyW10gYnVmLCBvdXQgc2l6ZV90IGJ5dGVzX3JlYWQp IHRocm93cyBDb252ZXJ0RXJyb3IsIElPQ2hhbm5lbEVycm9yOwotLQkJcHVibGljIElPU3RhdHVz IHJlYWRfdW5pY2hhciAob3V0IHVuaWNoYXIgdGhlY2hhcikgdGhyb3dzIENvbnZlcnRFcnJvciwg SU9DaGFubmVsRXJyb3I7Ci0tCQlwdWJsaWMgSU9TdGF0dXMgcmVhZF9saW5lIChvdXQgc3RyaW5n IHN0cl9yZXR1cm4sIG91dCBzaXplX3QgbGVuZ3RoLCBvdXQgc2l6ZV90IHRlcm1pbmF0b3JfcG9z KSB0aHJvd3MgQ29udmVydEVycm9yLCBJT0NoYW5uZWxFcnJvcjsKLS0JCXB1YmxpYyBJT1N0YXR1 cyByZWFkX2xpbmVfc3RyaW5nIChTdHJpbmdCdWlsZGVyIGJ1ZmZlciwgb3V0IHNpemVfdCB0ZXJt aW5hdG9yX3BvcykgdGhyb3dzIENvbnZlcnRFcnJvciwgSU9DaGFubmVsRXJyb3I7Ci0tCQlwdWJs aWMgSU9TdGF0dXMgcmVhZF90b19lbmQgKG91dCBzdHJpbmcgc3RyX3JldHVybiwgb3V0IHNpemVf dCBsZW5ndGgpIHRocm93cyBDb252ZXJ0RXJyb3IsIElPQ2hhbm5lbEVycm9yOwotLQkJcHVibGlj IElPU3RhdHVzIHdyaXRlX2NoYXJzIChjaGFyW10gYnVmLCBvdXQgc2l6ZV90IGJ5dGVzX3dyaXR0 ZW4pIHRocm93cyBDb252ZXJ0RXJyb3IsIElPQ2hhbm5lbEVycm9yOwotLQkJcHVibGljIElPU3Rh dHVzIHdyaXRlX3VuaWNoYXIgKHVuaWNoYXIgdGhlY2hhcikgdGhyb3dzIENvbnZlcnRFcnJvciwg SU9DaGFubmVsRXJyb3I7Ci0tCQlwdWJsaWMgSU9TdGF0dXMgZmx1c2ggKCkgdGhyb3dzIElPQ2hh bm5lbEVycm9yOwotLQkJcHVibGljIElPU3RhdHVzIHNlZWtfcG9zaXRpb24gKGludDY0IG9mZnNl dCwgU2Vla1R5cGUgdHlwZSkgdGhyb3dzIElPQ2hhbm5lbEVycm9yOwotLQkJcHVibGljIElPU3Rh dHVzIHNodXRkb3duIChib29sIGZsdXNoKSB0aHJvd3MgSU9DaGFubmVsRXJyb3I7Ci0tCQlbQ0Nv ZGUgKGNuYW1lID0gImdfaW9fY3JlYXRlX3dhdGNoIildCi0tCQlwdWJsaWMgSU9Tb3VyY2UgY3Jl YXRlX3dhdGNoIChJT0NvbmRpdGlvbiBjb25kaXRpb24pOwotLQkJW0NDb2RlIChjbmFtZSA9ICJn X2lvX2FkZF93YXRjaCIpXQotLQkJcHVibGljIHVpbnQgYWRkX3dhdGNoIChJT0NvbmRpdGlvbiBj b25kaXRpb24sIElPRnVuYyBmdW5jKTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZ19pb19hZGRfd2F0 Y2hfZnVsbCIpXQotLQkJcHVibGljIHVpbnQgYWRkX3dhdGNoX2Z1bGwgKGludCBwcmlvcml0eSwg SU9Db25kaXRpb24gY29uZGl0aW9uLCBvd25lZCBJT0Z1bmMgZnVuYyk7Ci0tCQlwdWJsaWMgc2l6 ZV90IGdldF9idWZmZXJfc2l6ZSAoKTsKLS0JCXB1YmxpYyB2b2lkIHNldF9idWZmZXJfc2l6ZSAo c2l6ZV90IHNpemUpOwotLQkJcHVibGljIElPQ29uZGl0aW9uIGdldF9idWZmZXJfY29uZGl0aW9u ICgpOwotLQkJcHVibGljIElPRmxhZ3MgZ2V0X2ZsYWdzICgpOwotLQkJcHVibGljIElPU3RhdHVz IHNldF9mbGFncyAoSU9GbGFncyBmbGFncykgdGhyb3dzIElPQ2hhbm5lbEVycm9yOwotLQkJcHVi bGljIHVub3duZWQgc3RyaW5nIGdldF9saW5lX3Rlcm0gKG91dCBpbnQgbGVuZ3RoKTsKLS0JCXB1 YmxpYyB2b2lkIHNldF9saW5lX3Rlcm0gKHN0cmluZyBsaW5lX3Rlcm0sIGludCBsZW5ndGgpOwot LQkJcHVibGljIGJvb2wgZ2V0X2J1ZmZlcmVkICgpOwotLQkJcHVibGljIHZvaWQgc2V0X2J1ZmZl cmVkIChib29sIGJ1ZmZlcmVkKTsKLS0JCXB1YmxpYyB1bm93bmVkIHN0cmluZyBnZXRfZW5jb2Rp bmcgKCk7Ci0tCQlwdWJsaWMgSU9TdGF0dXMgc2V0X2VuY29kaW5nIChzdHJpbmc/IGVuY29kaW5n KSB0aHJvd3MgSU9DaGFubmVsRXJyb3I7Ci0tCQlwdWJsaWMgYm9vbCBnZXRfY2xvc2Vfb25fdW5y ZWYgKCk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfY2xvc2Vfb25fdW5yZWYgKGJvb2wgZG9fY2xvc2Up OwotLQl9Ci0tCi0tCVtDb21wYWN0XQotLQlbQ0NvZGUgKGNuYW1lID0gIkdTb3VyY2UiKV0KLS0J cHVibGljIGNsYXNzIElPU291cmNlIDogU291cmNlIHsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZ19p b19jcmVhdGVfd2F0Y2giKV0KLS0JCXB1YmxpYyBJT1NvdXJjZSAoSU9DaGFubmVsIGNoYW5uZWws IElPQ29uZGl0aW9uIGNvbmRpdGlvbik7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImdfc291cmNlX3Nl dF9jYWxsYmFjayIpXQotLQkJcHVibGljIHZvaWQgc2V0X2NhbGxiYWNrIChbQ0NvZGUgKHR5cGUg PSAiR1NvdXJjZUZ1bmMiKV0gb3duZWQgSU9GdW5jIGZ1bmMpOwotLQl9Ci0tCi0tCVtDQ29kZSAo Y3ByZWZpeCA9ICJHX1NFRUtfIiwgaGFzX3R5cGVfaWQgPSBmYWxzZSldCi0tCXB1YmxpYyBlbnVt IFNlZWtUeXBlIHsKLS0JCUNVUiwKLS0JCVNFVCwKLS0JCUVORAotLQl9Ci0tCi0tCVtDQ29kZSAo aGFzX3R5cGVfaWQgPSBmYWxzZSldCi0tCXB1YmxpYyBlbnVtIElPU3RhdHVzIHsKLS0JCUVSUk9S LAotLQkJTk9STUFMLAotLQkJRU9GLAotLQkJQUdBSU4KLS0JfQotLQotLQlwdWJsaWMgZXJyb3Jk b21haW4gSU9DaGFubmVsRXJyb3IgewotLQkJRkJJRywKLS0JCUlOVkFMLAotLQkJSU8sCi0tCQlJ U0RJUiwKLS0JCU5PU1BDLAotLQkJTlhJTywKLS0JCU9WRVJGTE9XLAotLQkJUElQRSwKLS0JCUZB SUxFRDsKLS0JCXB1YmxpYyBzdGF0aWMgR0xpYi5RdWFyayBxdWFyayAoKTsKLS0JfQotLQotLQlb RmxhZ3NdCi0tCVtDQ29kZSAoY3ByZWZpeCA9ICJHX0lPXyIpXQotLQlwdWJsaWMgZW51bSBJT0Nv bmRpdGlvbiB7Ci0tCQlJTiwKLS0JCU9VVCwKLS0JCVBSSSwKLS0JCUVSUiwKLS0JCUhVUCwKLS0J CU5WQUwKLS0JfQotLQotLQlwdWJsaWMgZGVsZWdhdGUgYm9vbCBJT0Z1bmMgKElPQ2hhbm5lbCBz b3VyY2UsIElPQ29uZGl0aW9uIGNvbmRpdGlvbik7Ci0tCi0tCVtDQ29kZSAoY3ByZWZpeCA9ICJH X0lPX0ZMQUdfIiwgaGFzX3R5cGVfaWQgPSBmYWxzZSldCi0tCVtGbGFnc10KLS0JcHVibGljIGVu dW0gSU9GbGFncyB7Ci0tCQlBUFBFTkQsCi0tCQlOT05CTE9DSywKLS0JCUlTX1JFQURBQkxFLAot LQkJSVNfV1JJVEFCTEUsCi0tCQlJU19XUklURUFCTEUsCi0tCQlJU19TRUVLQUJMRSwKLS0JCU1B U0ssCi0tCQlHRVRfTUFTSywKLS0JCVNFVF9NQVNLCi0tCX0KLS0KLS0JLyogRXJyb3IgUmVwb3J0 aW5nICovCi0tCi0tCVtDb21wYWN0XQotLQlbRXJyb3JCYXNlXQotLQlbQ0NvZGUgKGNvcHlfZnVu Y3Rpb24gPSAiZ19lcnJvcl9jb3B5IiwgZnJlZV9mdW5jdGlvbiA9ICJnX2Vycm9yX2ZyZWUiKV0K LS0JcHVibGljIGNsYXNzIEVycm9yIHsKLS0JCVtQcmludGZGb3JtYXRdCi0tCQlwdWJsaWMgRXJy b3IgKFF1YXJrIGRvbWFpbiwgaW50IGNvZGUsIHN0cmluZyBmb3JtYXQsIC4uLik7Ci0tCQlwdWJs aWMgRXJyb3IubGl0ZXJhbCAoUXVhcmsgZG9tYWluLCBpbnQgY29kZSwgc3RyaW5nIG1lc3NhZ2Up OwotLQkJW1ByaW50ZkZvcm1hdF0KLS0JCXB1YmxpYyBFcnJvci52YWxpc3QgKFF1YXJrIGRvbWFp biwgaW50IGNvZGUsIHN0cmluZyBmb3JtYXQsIHZhX2xpc3QgYXJncyk7Ci0tCQlwdWJsaWMgRXJy b3IgY29weSAoKTsKLS0JCXB1YmxpYyBib29sIG1hdGNoZXMgKFF1YXJrIGRvbWFpbiwgaW50IGNv ZGUpOwotLQkJW0NDb2RlIChjbmFtZSA9ICJnX3ByZWZpeF9lcnJvciIpXQotLQkJcHVibGljIHN0 YXRpYyB2b2lkIHByZWZpeCAob3V0IEVycm9yPyBkZXN0LCBzdHJpbmcgZm9ybWF0LCAuLi4pOwot LQkJW0NDb2RlIChjbmFtZSA9ICJnX3Byb3BhZ2F0ZV9lcnJvciIpXQotLQkJcHVibGljIHN0YXRp YyB2b2lkIHByb3BhZ2F0ZSAob3V0IEVycm9yPyBkZXN0LCBvd25lZCBFcnJvciBzcmMpOwotLQkJ W0NDb2RlIChjbmFtZSA9ICJnX3Byb3BhZ2F0ZV9wcmVmaXhlZF9lcnJvciIpXQotLQkJcHVibGlj IHN0YXRpYyB2b2lkIHByb3BhZ2F0ZV9wcmVmaXhlZCAob3V0IEVycm9yPyBkZXN0LCBvd25lZCBF cnJvciBzcmMsIHN0cmluZyBmb3JtYXQsIC4uLik7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImdfc2V0 X2Vycm9yIildCi0tCQlwdWJsaWMgc3RhdGljIHZvaWQgQHNldCAob3V0IEVycm9yPyBkZXN0LCBR dWFyayBkb21haW4sIGludCBjb2RlLCBzdHJpbmcgZm9ybWF0LCAuLi4pOwotLQkJW0NDb2RlIChj bmFtZSA9ICJnX3NldF9lcnJvcl9saXRlcmFsIildCi0tCQlwdWJsaWMgc3RhdGljIHZvaWQgc2V0 X2xpdGVyYWwgKG91dCBFcnJvcj8gZGVzdCwgUXVhcmsgZG9tYWluLCBpbnQgY29kZSwgc3RyaW5n IG1lc3NhZ2UpOwotLQotLQkJcHVibGljIFF1YXJrIGRvbWFpbjsKLS0JCXB1YmxpYyBpbnQgY29k ZTsKLS0JCXB1YmxpYyBzdHJpbmcgbWVzc2FnZTsKLS0JfQotLQotLQkvKiBNZXNzYWdlIE91dHB1 dCBhbmQgRGVidWdnaW5nIEZ1bmN0aW9ucyAqLwotLQotLQlbUHJpbnRmRm9ybWF0XQotLQlwdWJs aWMgc3RhdGljIHZvaWQgcHJpbnQgKHN0cmluZyBmb3JtYXQsIC4uLik7Ci0tCXB1YmxpYyBzdGF0 aWMgdm9pZCBzZXRfcHJpbnRfaGFuZGxlciAoUHJpbnRGdW5jIGZ1bmMpOwotLQlbQ0NvZGUgKGhh c190YXJnZXQgPSBmYWxzZSldCi0tCXB1YmxpYyBkZWxlZ2F0ZSB2b2lkIFByaW50RnVuYyAoc3Ry aW5nIHRleHQpOwotLQlbUHJpbnRmRm9ybWF0XQotLQlwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRl cnIgKHN0cmluZyBmb3JtYXQsIC4uLik7Ci0tCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRfcHJpbnRl cnJfaGFuZGxlciAoUHJpbnRGdW5jIGZ1bmMpOwotLQotLQlwdWJsaWMgc3RhdGljIHZvaWQgcmV0 dXJuX2lmX2ZhaWwgKGJvb2wgZXhwcik7Ci0tCVtDQ29kZSAoc2VudGluZWwgPSAiIildCi0tCXB1 YmxpYyBzdGF0aWMgdm9pZCByZXR1cm5fdmFsX2lmX2ZhaWwgKGJvb2wgZXhwciwgLi4uKTsKLS0J W05vUmV0dXJuXQotLQlwdWJsaWMgc3RhdGljIHZvaWQgcmV0dXJuX2lmX3JlYWNoZWQgKCk7Ci0t CVtOb1JldHVybl0KLS0JW0NDb2RlIChzZW50aW5lbCA9ICIiKV0KLS0JcHVibGljIHN0YXRpYyB2 b2lkIHJldHVybl92YWxfaWZfcmVhY2hlZCAoLi4uKTsKLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIu MTYiKV0KLS0JcHVibGljIHN0YXRpYyB2b2lkIHdhcm5faWZfZmFpbCAoYm9vbCBleHByKTsKLS0J W1ZlcnNpb24gKHNpbmNlID0gIjIuMTYiKV0KLS0JcHVibGljIHN0YXRpYyB2b2lkIHdhcm5faWZf cmVhY2hlZCAoKTsKLS0KLS0JW0Fzc2VydF0KLS0JcHVibGljIHN0YXRpYyB2b2lkIGFzc2VydCAo Ym9vbCBleHByKTsKLS0JW0Fzc2VydF0KLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuNDYiKV0KLS0J cHVibGljIHN0YXRpYyB2b2lkIGFzc2VydF9jbXBtZW0gKHVpbnQ4W10gbTEsIHVpbnQ4W10gbTIp OwotLQlbQXNzZXJ0XQotLQlwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0X2Vycm9yIChFcnJvcj8g ZXJyb3IsIFF1YXJrIGVycm9yX2RvbWFpbiwgaW50IGVycm9yX2NvZGUpOwotLQlbQXNzZXJ0XQot LQlbVmVyc2lvbiAoc2luY2UgPSAiMi4zOCIpXQotLQlwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0 X2ZhbHNlIChib29sIGV4cHIpOwotLQlbQXNzZXJ0XQotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi4z OCIpXQotLQlwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0X3RydWUgKGJvb2wgZXhwcik7Ci0tCVtB c3NlcnRdCi0tCVtWZXJzaW9uIChzaW5jZSA9ICIyLjM4IildCi0tCXB1YmxpYyBzdGF0aWMgdm9p ZCBhc3NlcnRfbnVsbCAodm9pZCogZXhwcik7Ci0tCVtBc3NlcnRdCi0tCXB1YmxpYyBzdGF0aWMg dm9pZCBhc3NlcnRfbm9fZXJyb3IgKEVycm9yPyBlcnJvcik7Ci0tCVtBc3NlcnRdCi0tCVtWZXJz aW9uIChzaW5jZSA9ICIyLjQwIildCi0tCXB1YmxpYyBzdGF0aWMgdm9pZCBhc3NlcnRfbm9ubnVs bCAodm9pZCogZXhwcik7Ci0tCVtOb1JldHVybl0KLS0JcHVibGljIHN0YXRpYyB2b2lkIGFzc2Vy dF9ub3RfcmVhY2hlZCAoKTsKLS0KLS0JcHVibGljIHN0YXRpYyB2b2lkIG9uX2Vycm9yX3F1ZXJ5 IChzdHJpbmc/IHByZ19uYW1lID0gbnVsbCk7Ci0tCXB1YmxpYyBzdGF0aWMgdm9pZCBvbl9lcnJv cl9zdGFja190cmFjZSAoc3RyaW5nPyBwcmdfbmFtZSA9IG51bGwpOwotLQlbQ0NvZGUgKGNuYW1l ID0gIkdfQlJFQUtQT0lOVCIpXQotLQlwdWJsaWMgc3RhdGljIHZvaWQgYnJlYWtwb2ludCAoKTsK LS0KLS0JLyogTWVzc2FnZSBMb2dnaW5nICovCi0tCi0tCVtDQ29kZSAoY3ByZWZpeCA9ICJHX0xP R18iLCBoYXNfdHlwZV9pZCA9IGZhbHNlKV0KLS0JW0ZsYWdzXQotLQlwdWJsaWMgZW51bSBMb2dM ZXZlbEZsYWdzIHsKLS0JCS8qIGxvZyBmbGFncyAqLwotLQkJRkxBR19SRUNVUlNJT04sCi0tCQlG TEFHX0ZBVEFMLAotLQotLQkJLyogR0xpYiBsb2cgbGV2ZWxzICovCi0tCQlMRVZFTF9FUlJPUiwK LS0JCUxFVkVMX0NSSVRJQ0FMLAotLQkJTEVWRUxfV0FSTklORywKLS0JCUxFVkVMX01FU1NBR0Us Ci0tCQlMRVZFTF9JTkZPLAotLQkJTEVWRUxfREVCVUcsCi0tCi0tCQlMRVZFTF9NQVNLCi0tCX0K LS0KLS0JW0NDb2RlIChjcHJlZml4ID0gIkdfTE9HX1dSSVRFUl8iLCBoYXNfdHlwZV9pZCA9IGZh bHNlKV0KLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuNTAiKV0KLS0JcHVibGljIGVudW0gTG9nV3Jp dGVyT3V0cHV0IHsKLS0JCUhBTkRMRUQsCi0tCQlVTkhBTkRMRUQKLS0JfQotLQotLQlbQ0NvZGUg KGhhc190eXBlX2lkID0gZmFsc2UsIHNpbXBsZV9nZW5lcmljcyA9IHRydWUpXQotLQlbVmVyc2lv biAoc2luY2UgPSAiMi41MCIpXQotLQlwdWJsaWMgc3RydWN0IExvZ0ZpZWxkPFQ+IHsKLS0JCXB1 YmxpYyB1bm93bmVkIHN0cmluZyBrZXk7Ci0tCQlwdWJsaWMgdW5vd25lZCBUIEB2YWx1ZTsKLS0J CXB1YmxpYyBzc2l6ZV90IGxlbmd0aDsKLS0JfQotLQotLQlwdWJsaWMgdm9pZCBsb2d2IChzdHJp bmc/IGxvZ19kb21haW4sIExvZ0xldmVsRmxhZ3MgbG9nX2xldmVsLCBzdHJpbmcgZm9ybWF0LCB2 YV9saXN0IGFyZ3MpOwotLQlbRGlhZ25vc3RpY3NdCi0tCVtQcmludGZGb3JtYXRdCi0tCXB1Ymxp YyB2b2lkIGxvZyAoc3RyaW5nPyBsb2dfZG9tYWluLCBMb2dMZXZlbEZsYWdzIGxvZ19sZXZlbCwg c3RyaW5nIGZvcm1hdCwgLi4uKTsKLS0KLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuNTAiKV0KLS0J cHVibGljIHZvaWQgbG9nX3N0cnVjdHVyZWQgKHN0cmluZz8gbG9nX2RvbWFpbiwgTG9nTGV2ZWxG bGFncyBsb2dfbGV2ZWxzLCAuLi4pOwotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi41MCIpXQotLQlw dWJsaWMgdm9pZCBsb2dfc3RydWN0dXJlZF9hcnJheSAoTG9nTGV2ZWxGbGFncyBsb2dfbGV2ZWxz LCBMb2dGaWVsZFtdIGZpZWxkcyk7Ci0tCi0tCVtWZXJzaW9uIChzaW5jZSA9ICIyLjUwIildCi0t CXB1YmxpYyB2b2lkIGxvZ192YXJpYW50IChzdHJpbmc/IGxvZ19kb21haW4sIExvZ0xldmVsRmxh Z3MgbG9nX2xldmVscywgR0xpYi5WYXJpYW50IGZpZWxkcyk7Ci0tCi0tCVtEaWFnbm9zdGljc10K LS0JW1ByaW50ZkZvcm1hdF0KLS0JcHVibGljIHZvaWQgbWVzc2FnZSAoc3RyaW5nIGZvcm1hdCwg Li4uKTsKLS0JW0RpYWdub3N0aWNzXQotLQlbUHJpbnRmRm9ybWF0XQotLQlwdWJsaWMgdm9pZCB3 YXJuaW5nIChzdHJpbmcgZm9ybWF0LCAuLi4pOwotLQlbRGlhZ25vc3RpY3NdCi0tCVtQcmludGZG b3JtYXRdCi0tCXB1YmxpYyB2b2lkIGNyaXRpY2FsIChzdHJpbmcgZm9ybWF0LCAuLi4pOwotLQlb RGlhZ25vc3RpY3NdCi0tCVtQcmludGZGb3JtYXRdCi0tCVtOb1JldHVybl0KLS0JcHVibGljIHZv aWQgZXJyb3IgKHN0cmluZyBmb3JtYXQsIC4uLik7Ci0tCVtEaWFnbm9zdGljc10KLS0JW1ByaW50 ZkZvcm1hdF0KLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuNiIpXQotLQlwdWJsaWMgdm9pZCBkZWJ1 ZyAoc3RyaW5nIGZvcm1hdCwgLi4uKTsKLS0JW0RpYWdub3N0aWNzXQotLQlbUHJpbnRmRm9ybWF0 XQotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi40MCIpXQotLQlwdWJsaWMgdm9pZCBpbmZvIChzdHJp bmcgZm9ybWF0LCAuLi4pOwotLQlbQ0NvZGUgKGNuYW1lID0gIkdfREVCVUdfSEVSRSIpXQotLQlb VmVyc2lvbiAoc2luY2UgPSAiMi41MCIpXQotLQlwdWJsaWMgdm9pZCBkZWJ1Z19oZXJlICgpOwot LQotLQlwdWJsaWMgZGVsZWdhdGUgdm9pZCBMb2dGdW5jIChzdHJpbmc/IGxvZ19kb21haW4sIExv Z0xldmVsRmxhZ3MgbG9nX2xldmVscywgc3RyaW5nIG1lc3NhZ2UpOwotLQlbVmVyc2lvbiAoc2lu Y2UgPSAiMi41MCIpXQotLQlwdWJsaWMgZGVsZWdhdGUgTG9nV3JpdGVyT3V0cHV0IExvZ1dyaXRl ckZ1bmMgKExvZ0xldmVsRmxhZ3MgbG9nX2xldmVsLCBMb2dGaWVsZFtdIGZpZWxkcyk7Ci0tCi0t CW5hbWVzcGFjZSBMb2cgewotLQkJcHVibGljIHN0YXRpYyB1aW50IHNldF9oYW5kbGVyIChzdHJp bmc/IGxvZ19kb21haW4sIExvZ0xldmVsRmxhZ3MgbG9nX2xldmVscywgTG9nRnVuYyBsb2dfZnVu Yyk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi40NiIpXQotLQkJcHVibGljIHN0YXRpYyB2b2lk IHNldF9oYW5kbGVyX2Z1bGwgKHN0cmluZz8gbG9nX2RvbWFpbiwgTG9nTGV2ZWxGbGFncyBsb2df bGV2ZWxzLCBvd25lZCBMb2dGdW5jIGxvZ19mdW5jKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIy LjYiKV0KLS0JCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRfZGVmYXVsdF9oYW5kbGVyIChMb2dGdW5j IGxvZ19mdW5jKTsKLS0JCVtDQ29kZSAoZGVsZWdhdGVfdGFyZ2V0ID0gZmFsc2UpXQotLQkJcHVi bGljIHN0YXRpYyBHTGliLkxvZ0Z1bmMgZGVmYXVsdF9oYW5kbGVyOwotLQkJcHVibGljIHN0YXRp YyBMb2dMZXZlbEZsYWdzIHNldF9mYXRhbF9tYXNrIChzdHJpbmcgbG9nX2RvbWFpbiwgTG9nTGV2 ZWxGbGFncyBsb2dfbGV2ZWxzKTsKLS0JCXB1YmxpYyBzdGF0aWMgTG9nTGV2ZWxGbGFncyBzZXRf YWx3YXlzX2ZhdGFsIChMb2dMZXZlbEZsYWdzIGxvZ19sZXZlbHMpOwotLQkJcHVibGljIHN0YXRp YyB2b2lkIHJlbW92ZV9oYW5kbGVyIChzdHJpbmc/IGxvZ19kb21haW4sIHVpbnQgaGFuZGxlcl9p ZCk7Ci0tCi0tCQlwdWJsaWMgY29uc3Qgc3RyaW5nIEZJTEU7Ci0tCQlwdWJsaWMgY29uc3QgaW50 IExJTkU7Ci0tCQlwdWJsaWMgY29uc3Qgc3RyaW5nIE1FVEhPRDsKLS0KLS0JCVtWZXJzaW9uIChz aW5jZSA9ICIyLjUwIildCi0tCQlwdWJsaWMgc3RhdGljIHZvaWQgc2V0X3dyaXRlcl9mdW5jIChv d25lZCBMb2dXcml0ZXJGdW5jIGZ1bmMpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuNTAiKV0K LS0JCXB1YmxpYyBzdGF0aWMgYm9vbCB3cml0ZXJfc3VwcG9ydHNfY29sb3IgKGludCBvdXRwdXRf ZmQpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuNTAiKV0KLS0JCXB1YmxpYyBzdGF0aWMgYm9v bCB3cml0ZXJfaXNfam91cm5hbGQgKGludCBvdXRwdXRfZmQpOwotLQkJW1ZlcnNpb24gKHNpbmNl ID0gIjIuNTAiKV0KLS0JCXB1YmxpYyBzdGF0aWMgc3RyaW5nIHdyaXRlcl9mb3JtYXRfZmllbGRz IChMb2dMZXZlbEZsYWdzIGxvZ19sZXZlbHMsIExvZ0ZpZWxkW10gZmllbGRzLCBib29sIHVzZV9j b2xvcik7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi41MCIpXQotLQkJcHVibGljIHN0YXRpYyBM b2dXcml0ZXJPdXRwdXQgd3JpdGVyX2pvdXJuYWxkIChMb2dMZXZlbEZsYWdzIGxvZ19sZXZlbHMs IExvZ0ZpZWxkW10gZmllbGRzLCB2b2lkKiB1c2VyX2RhdGEpOwotLQkJW1ZlcnNpb24gKHNpbmNl ID0gIjIuNTAiKV0KLS0JCXB1YmxpYyBzdGF0aWMgTG9nV3JpdGVyT3V0cHV0IHdyaXRlcl9zdGFu ZGFyZF9zdHJlYW1zIChMb2dMZXZlbEZsYWdzIGxvZ19sZXZlbHMsIExvZ0ZpZWxkW10gZmllbGRz LCB2b2lkKiB1c2VyX2RhdGEpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuNTAiKV0KLS0JCXB1 YmxpYyBzdGF0aWMgTG9nV3JpdGVyT3V0cHV0IHdyaXRlcl9kZWZhdWx0IChMb2dMZXZlbEZsYWdz IGxvZ19sZXZlbHMsIExvZ0ZpZWxkW10gZmllbGRzLCB2b2lkKiB1c2VyX2RhdGEpOwotLQl9Ci0t Ci0tCVtDQ29kZSAoaGFzX3R5cGVfaWQgPSBmYWxzZSldCi0tCXB1YmxpYyBzdHJ1Y3QgRGVidWdL ZXkgewotLQkJdW5vd25lZCBzdHJpbmcga2V5OwotLQkJdWludCB2YWx1ZTsKLS0JfQotLQotLQlw dWJsaWMgdWludCBwYXJzZV9kZWJ1Z19zdHJpbmcgKHN0cmluZz8gZGVidWdfc3RyaW5nLCBEZWJ1 Z0tleVtdIGtleXMpOwotLQotLQkvKiBTdHJpbmcgVXRpbGl0eSBGdW5jdGlvbnMgKi8KLS0KLS0J cHVibGljIHN0cmluZyBzdHJkdXAgKHN0cmluZyBzdHIpOwotLQlbQ0NvZGUgKGFycmF5X2xlbmd0 aCA9IGZhbHNlLCBhcnJheV9udWxsX3Rlcm1pbmF0ZWQgPSB0cnVlKV0KLS0JcHVibGljIHN0cmlu Z1tdIHN0cmR1cHYgKFtDQ29kZSAoYXJyYXlfbGVuZ3RoID0gZmFsc2UsIGFycmF5X251bGxfdGVy bWluYXRlZCA9IHRydWUpXSBzdHJpbmdbXSBzdHJfYXJyYXkpOwotLQotLQlwdWJsaWMgdm9pZCBz dHJmcmVldiAoc3RyaW5nKiogc3RyX2FycmF5KTsKLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuNiIp XQotLQlwdWJsaWMgdWludCBzdHJ2X2xlbmd0aCAoW0NDb2RlIChhcnJheV9sZW5ndGggPSBmYWxz ZSwgYXJyYXlfbnVsbF90ZXJtaW5hdGVkID0gdHJ1ZSldIHN0cmluZ1tdIHN0cl9hcnJheSk7Ci0t CVtWZXJzaW9uIChzaW5jZSA9ICIyLjQ0IildCi0tCXB1YmxpYyBib29sIHN0cnZfY29udGFpbnMg KFtDQ29kZSAoYXJyYXlfbGVuZ3RoID0gZmFsc2UsIGFycmF5X251bGxfdGVybWluYXRlZCA9IHRy dWUpXSBzdHJpbmdbXSBzdHJfYXJyYXksIHN0cmluZyBzdHIpOwotLQotLQlbQ0NvZGUgKGNuYW1l ID0gImVycm5vIiwgY2hlYWRlcl9maWxlbmFtZSA9ICJlcnJuby5oIildCi0tCXB1YmxpYyBpbnQg ZXJybm87Ci0tCXB1YmxpYyB1bm93bmVkIHN0cmluZyBzdHJlcnJvciAoaW50IGVycm51bSk7Ci0t Ci0tCS8qIENoYXJhY3RlciBTZXQgQ29udmVyc2lvbnMgKi8KLS0KLS0JcHVibGljIHN0YXRpYyBz dHJpbmcgY29udmVydCAoc3RyaW5nIHN0ciwgc3NpemVfdCBsZW4sIHN0cmluZyB0b19jb2Rlc2V0 LCBzdHJpbmcgZnJvbV9jb2Rlc2V0LCBvdXQgc2l6ZV90IGJ5dGVzX3JlYWQgPSBudWxsLCBvdXQg c2l6ZV90IGJ5dGVzX3dyaXR0ZW4gPSBudWxsKSB0aHJvd3MgQ29udmVydEVycm9yOwotLQlwdWJs aWMgc3RhdGljIHN0cmluZyBjb252ZXJ0X3dpdGhfZmFsbGJhY2sgKHN0cmluZyBzdHIsIHNzaXpl X3QgbGVuLCBzdHJpbmcgdG9fY29kZXNldCwgc3RyaW5nIGZyb21fY29kZXNldCwgc3RyaW5nPyBm YWxsYmFjayA9IG51bGwsIG91dCBzaXplX3QgYnl0ZXNfcmVhZCA9IG51bGwsIG91dCBzaXplX3Qg Ynl0ZXNfd3JpdHRlbiA9IG51bGwpIHRocm93cyBDb252ZXJ0RXJyb3I7Ci0tCXB1YmxpYyBzdGF0 aWMgc3RyaW5nIGNvbnZlcnRfd2l0aF9pY29udiAoc3RyaW5nIHN0ciwgc3NpemVfdCBsZW4sIElD b252IGNvbnZlcnRlciwgb3V0IHNpemVfdCBieXRlc19yZWFkID0gbnVsbCwgb3V0IHNpemVfdCBi eXRlc193cml0dGVuID0gbnVsbCkgdGhyb3dzIENvbnZlcnRFcnJvcjsKLS0JcHVibGljIHN0YXRp YyBib29sIGdldF9jaGFyc2V0IChvdXQgdW5vd25lZCBzdHJpbmcgY2hhcnNldCk7Ci0tCXB1Ymxp YyBzdGF0aWMgYm9vbCBnZXRfZmlsZW5hbWVfY2hhcnNldHMgKFtDQ29kZSAoYXJyYXlfbGVuZ3Ro ID0gZmFsc2UsIGFycmF5X251bGxfdGVybWluYXRlZCA9IHRydWUpXSBvdXQgdW5vd25lZCBzdHJp bmdbXSBjaGFyc2V0cyk7Ci0tCi0tCVtTaW1wbGVUeXBlXQotLQlwdWJsaWMgc3RydWN0IElDb252 IHsKLS0JCXB1YmxpYyBzdGF0aWMgSUNvbnYgb3BlbiAoc3RyaW5nIHRvX2NvZGVzZXQsIHN0cmlu ZyBmcm9tX2NvZGVzZXQpOwotLQkJW0NDb2RlIChjbmFtZSA9ICJnX2ljb252IildCi0tCQlwdWJs aWMgc2l6ZV90IGljb252IChbQ0NvZGUgKGFycmF5X2xlbmd0aCA9IGZhbHNlKV0gcmVmIGNoYXJb XSBpbmJ1ZiwgcmVmIHNpemVfdCBpbmJ5dGVzX2xlZnQsIFtDQ29kZSAoYXJyYXlfbGVuZ3RoID0g ZmFsc2UpXSByZWYgY2hhcltdIG91dGJ1ZiwgcmVmIHNpemVfdCBvdXRieXRlc19sZWZ0KTsKLS0J CXB1YmxpYyBpbnQgY2xvc2UgKCk7Ci0tCX0KLS0KLS0JbmFtZXNwYWNlIEZpbGVuYW1lIHsKLS0J CXB1YmxpYyBzdGF0aWMgc3RyaW5nIHRvX3V0ZjggKHN0cmluZyBvcHN5c3N0cmluZywgc3NpemVf dCBsZW4sIG91dCBzaXplX3QgYnl0ZXNfcmVhZCwgb3V0IHNpemVfdCBieXRlc193cml0dGVuKSB0 aHJvd3MgQ29udmVydEVycm9yOwotLQkJcHVibGljIHN0YXRpYyBzdHJpbmcgZnJvbV91dGY4IChz dHJpbmcgdXRmOHN0cmluZywgc3NpemVfdCBsZW4sIG91dCBzaXplX3QgYnl0ZXNfcmVhZCwgb3V0 IHNpemVfdCBieXRlc193cml0dGVuKSB0aHJvd3MgQ29udmVydEVycm9yOwotLQkJcHVibGljIHN0 YXRpYyBzdHJpbmcgZnJvbV91cmkgKHN0cmluZyB1cmksIG91dCBzdHJpbmcgaG9zdG5hbWUgPSBu dWxsKSB0aHJvd3MgQ29udmVydEVycm9yOwotLQkJcHVibGljIHN0YXRpYyBzdHJpbmcgdG9fdXJp IChzdHJpbmcgZmlsZW5hbWUsIHN0cmluZz8gaG9zdG5hbWUgPSBudWxsKSB0aHJvd3MgQ29udmVy dEVycm9yOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuNiIpXQotLQkJcHVibGljIHN0YXRpYyBz dHJpbmcgZGlzcGxheV9uYW1lIChzdHJpbmcgZmlsZW5hbWUpOwotLQkJW1ZlcnNpb24gKHNpbmNl ID0gIjIuNiIpXQotLQkJcHVibGljIHN0YXRpYyBzdHJpbmcgZGlzcGxheV9iYXNlbmFtZSAoc3Ry aW5nIGZpbGVuYW1lKTsKLS0JCVtWZXJzaW9uIChjbmFtZSA9ICJnX2Nhbm9uaWNhbGl6ZV9maWxl bmFtZSIsIHNpbmNlID0gIjIuNTgiKV0KLS0JCXB1YmxpYyBzdGF0aWMgc3RyaW5nIGNhbm9uaWNh bGl6ZSAoc3RyaW5nIGZpbGVuYW1lLCBzdHJpbmc/IHJlbGF0aXZlX3RvID0gbnVsbCk7Ci0tCX0K LS0KLS0JcHVibGljIGVycm9yZG9tYWluIENvbnZlcnRFcnJvciB7Ci0tCQlOT19DT05WRVJTSU9O LAotLQkJSUxMRUdBTF9TRVFVRU5DRSwKLS0JCUZBSUxFRCwKLS0JCVBBUlRJQUxfSU5QVVQsCi0t CQlCQURfVVJJLAotLQkJTk9UX0FCU09MVVRFX1BBVEg7Ci0tCQlwdWJsaWMgc3RhdGljIEdMaWIu UXVhcmsgcXVhcmsgKCk7Ci0tCX0KLS0KLS0JLyogQmFzZTY0IEVuY29kaW5nICovCi0tCi0tCVtW ZXJzaW9uIChzaW5jZSA9ICIyLjEyIildCi0tCW5hbWVzcGFjZSBCYXNlNjQgewotLQkJcHVibGlj IHN0YXRpYyBzaXplX3QgZW5jb2RlX3N0ZXAgKHVjaGFyW10gX2luLCBib29sIGJyZWFrX2xpbmVz LCBjaGFyKiBfb3V0LCByZWYgaW50IHN0YXRlLCByZWYgaW50IHNhdmUpOwotLQkJcHVibGljIHN0 YXRpYyBzaXplX3QgZW5jb2RlX2Nsb3NlIChib29sIGJyZWFrX2xpbmVzLCBjaGFyKiBfb3V0LCBy ZWYgaW50IHN0YXRlLCByZWYgaW50IHNhdmUpOwotLQkJcHVibGljIHN0YXRpYyBzdHJpbmcgZW5j b2RlICh1Y2hhcltdIGRhdGEpOwotLQkJcHVibGljIHN0YXRpYyBzaXplX3QgZGVjb2RlX3N0ZXAg KGNoYXJbXSBfaW4sIHVjaGFyKiBfb3V0LCByZWYgaW50IHN0YXRlLCByZWYgdWludCBzYXZlKTsK LS0JCVtDQ29kZSAoYXJyYXlfbGVuZ3RoX3R5cGUgPSAic2l6ZV90IildCi0tCQlwdWJsaWMgc3Rh dGljIHVjaGFyW10gZGVjb2RlIChzdHJpbmcgdGV4dCk7Ci0tCX0KLS0KLS0JLyogRGF0YSBDaGVj a3N1bXMgKi8KLS0KLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuMTYiKV0KLS0JW0NDb2RlIChjcHJl Zml4ID0gIkdfQ0hFQ0tTVU1fIiwgaGFzX3R5cGVfaWQgPSBmYWxzZSldCi0tCXB1YmxpYyBlbnVt IENoZWNrc3VtVHlwZSB7Ci0tCQlNRDUsCi0tCQlTSEExLAotLQkJU0hBMjU2LAotLQkJW1ZlcnNp b24gKHNpbmNlID0gIjIuNTIiKV0KLS0JCVNIQTM4NCwKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIy LjM2IildCi0tCQlTSEE1MTI7Ci0tCi0tCQlwdWJsaWMgc3NpemVfdCBnZXRfbGVuZ3RoICgpOwot LQl9Ci0tCi0tCVtDb21wYWN0XQotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xNiIpXQotLQlbQ0Nv ZGUgKGZyZWVfZnVuY3Rpb24gPSAiZ19jaGVja3N1bV9mcmVlIildCi0tCXB1YmxpYyBjbGFzcyBD aGVja3N1bSB7Ci0tCQlwdWJsaWMgQ2hlY2tzdW0gKENoZWNrc3VtVHlwZSBjaGVja3N1bV90eXBl KTsKLS0JCXB1YmxpYyBDaGVja3N1bSBjb3B5ICgpOwotLQkJcHVibGljIHZvaWQgdXBkYXRlIChb Q0NvZGUgKGFycmF5X2xlbmd0aCA9IGZhbHNlKV0gdWNoYXJbXSBkYXRhLCBzaXplX3QgbGVuZ3Ro KTsKLS0JCXB1YmxpYyB1bm93bmVkIHN0cmluZyBnZXRfc3RyaW5nICgpOwotLQkJcHVibGljIHZv aWQgZ2V0X2RpZ2VzdCAoW0NDb2RlIChhcnJheV9sZW5ndGggPSBmYWxzZSldIHVpbnQ4W10gYnVm ZmVyLCByZWYgc2l6ZV90IGRpZ2VzdF9sZW4pOwotLQkJW0NDb2RlIChjbmFtZSA9ICJnX2NvbXB1 dGVfY2hlY2tzdW1fZm9yX2RhdGEiKV0KLS0JCXB1YmxpYyBzdGF0aWMgc3RyaW5nIGNvbXB1dGVf Zm9yX2RhdGEgKENoZWNrc3VtVHlwZSBjaGVja3N1bV90eXBlLCB1Y2hhcltdIGRhdGEpOwotLQkJ W0NDb2RlIChjbmFtZSA9ICJnX2NvbXB1dGVfY2hlY2tzdW1fZm9yX3N0cmluZyIpXQotLQkJcHVi bGljIHN0YXRpYyBzdHJpbmcgY29tcHV0ZV9mb3Jfc3RyaW5nIChDaGVja3N1bVR5cGUgY2hlY2tz dW1fdHlwZSwgc3RyaW5nIHN0ciwgc2l6ZV90IGxlbmd0aCA9IC0xKTsKLS0JCVtWZXJzaW9uIChz aW5jZSA9ICIyLjM0IildCi0tCQlbQ0NvZGUgKGNuYW1lID0gImdfY29tcHV0ZV9jaGVja3N1bV9m b3JfYnl0ZXMiKV0KLS0JCXB1YmxpYyBzdGF0aWMgc3RyaW5nIGNvbXB1dGVfZm9yX2J5dGVzIChD aGVja3N1bVR5cGUgY2hlY2tzdW1fdHlwZSwgQnl0ZXMgZGF0YSk7Ci0tCX0KLS0KLS0JLyogU2Vj dXJlIEhNQUMgRGlnZXN0cyAqLwotLQotLQlbQ29tcGFjdF0KLS0JW1ZlcnNpb24gKHNpbmNlID0g IjIuMzAiKV0KLS0JW0NDb2RlIChyZWZfZnVuY3Rpb24gPSAiZ19obWFjX3JlZiIsIHVucmVmX2Z1 bmN0aW9uID0gImdfaG1hY191bnJlZiIpXQotLQlwdWJsaWMgY2xhc3MgSG1hYyB7Ci0tCQlwdWJs aWMgSG1hYyAoQ2hlY2tzdW1UeXBlIGRpZ2VzdF90eXBlLCBbQ0NvZGUgKGFycmF5X2xlbmd0aF90 eXBlID0gImdzaXplIildIHVpbnQ4W10ga2V5KTsKLS0JCXB1YmxpYyBIbWFjIGNvcHkgKCk7Ci0t CQlwdWJsaWMgdm9pZCB1cGRhdGUgKFtDQ29kZSAoYXJyYXlfbGVuZ3RoX3R5cGUgPSAiZ3NzaXpl IildIHVpbnQ4W10gZGF0YSk7Ci0tCQlwdWJsaWMgdW5vd25lZCBzdHJpbmcgZ2V0X3N0cmluZyAo KTsKLS0JCXB1YmxpYyB2b2lkIGdldF9kaWdlc3QgKFtDQ29kZSAoYXJyYXlfbGVuZ3RoID0gZmFs c2UpXSB1aW50OFtdIGJ1ZmZlciwgcmVmIHNpemVfdCBkaWdlc3RfbGVuKTsKLS0JCVtWZXJzaW9u IChzaW5jZSA9ICIyLjMwIildCi0tCQlbQ0NvZGUgKGNuYW1lID0gImdfY29tcHV0ZV9obWFjX2Zv cl9kYXRhIildCi0tCQlwdWJsaWMgc3RhdGljIHN0cmluZyBjb21wdXRlX2Zvcl9kYXRhIChDaGVj a3N1bVR5cGUgY2hlY2tzdW1fdHlwZSwgdWludDhbXSBrZXksIHVpbnQ4W10gZGF0YSk7Ci0tCQlb VmVyc2lvbiAoc2luY2UgPSAiMi4zMCIpXQotLQkJW0NDb2RlIChjbmFtZSA9ICJnX2NvbXB1dGVf aG1hY19mb3Jfc3RyaW5nIildCi0tCQlwdWJsaWMgc3RhdGljIHN0cmluZyBjb21wdXRlX2Zvcl9z dHJpbmcgKENoZWNrc3VtVHlwZSBjaGVja3N1bV90eXBlLCB1aW50OFtdIGtleSwgc3RyaW5nIHN0 ciwgc2l6ZV90IGxlbmd0aCA9IC0xKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjUwIildCi0t CQlbQ0NvZGUgKGNuYW1lID0gImdfY29tcHV0ZV9obWFjX2Zvcl9ieXRlcyIpXQotLQkJcHVibGlj IHN0YXRpYyBzdHJpbmcgY29tcHV0ZV9obWFjX2Zvcl9ieXRlcyAoQ2hlY2tzdW1UeXBlIGNoZWNr c3VtX3R5cGUsIEJ5dGVzIGtleSwgQnl0ZXMgZGF0YSk7Ci0tCX0KLS0KLS0JLyogRGF0ZSBhbmQg VGltZSBGdW5jdGlvbnMgKi8KLS0KLS0JW0NDb2RlIChoYXNfdHlwZV9pZCA9IGZhbHNlKV0KLS0J cHVibGljIHN0cnVjdCBUaW1lVmFsIHsKLS0JCXB1YmxpYyBsb25nIHR2X3NlYzsKLS0JCXB1Ymxp YyBsb25nIHR2X3VzZWM7Ci0tCi0tCQlbQ0NvZGUgKGNuYW1lID0gImdfZ2V0X2N1cnJlbnRfdGlt ZSIpXQotLQkJcHVibGljIFRpbWVWYWwgKCk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImdfZ2V0X2N1 cnJlbnRfdGltZSIpXQotLQkJcHVibGljIHZvaWQgZ2V0X2N1cnJlbnRfdGltZSAoKTsKLS0JCXB1 YmxpYyB2b2lkIGFkZCAobG9uZyBtaWNyb3NlY29uZHMpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0g IjIuMTIiKV0KLS0JCVtDQ29kZSAoaW5zdGFuY2VfcG9zID0gLTEpXQotLQkJcHVibGljIGJvb2wg ZnJvbV9pc284NjAxIChzdHJpbmcgaXNvX2RhdGUpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIu MTIiKV0KLS0JCXB1YmxpYyBzdHJpbmcgdG9faXNvODYwMSAoKTsKLS0JfQotLQotLQlbVmVyc2lv biAoc2luY2UgPSAiMi4yOCIpXQotLQlwdWJsaWMgc3RhdGljIGludDY0IGdldF9tb25vdG9uaWNf dGltZSAoKTsKLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuMjgiKV0KLS0JcHVibGljIHN0YXRpYyBp bnQ2NCBnZXRfcmVhbF90aW1lICgpOwotLQotLQlwdWJsaWMgc3RydWN0IERhdGVEYXkgOiB1Y2hh ciB7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gIkdfREFURV9CQURfREFZIildCi0tCQlwdWJsaWMgc3Rh dGljIERhdGVEYXkgQkFEX0RBWTsKLS0KLS0JCVtDQ29kZSAoY25hbWUgPSAiZ19kYXRlX3ZhbGlk X2RheSIpXQotLQkJcHVibGljIGJvb2wgdmFsaWQgKCk7Ci0tCX0KLS0KLS0JW0NDb2RlIChjcHJl Zml4ID0gIkdfREFURV8iLCBoYXNfdHlwZV9pZCA9IGZhbHNlKV0KLS0JcHVibGljIGVudW0gRGF0 ZU1vbnRoIHsKLS0JCUJBRF9NT05USCwKLS0JCUpBTlVBUlksCi0tCQlGRUJSVUFSWSwKLS0JCU1B UkNILAotLQkJQVBSSUwsCi0tCQlNQVksCi0tCQlKVU5FLAotLQkJSlVMWSwKLS0JCUFVR1VTVCwK LS0JCVNFUFRFTUJFUiwKLS0JCU9DVE9CRVIsCi0tCQlOT1ZFTUJFUiwKLS0JCURFQ0VNQkVSOwot LQotLQkJW0NDb2RlIChjbmFtZSA9ICJnX2RhdGVfZ2V0X2RheXNfaW5fbW9udGgiKV0KLS0JCXB1 YmxpYyB1Y2hhciBnZXRfZGF5c19pbl9tb250aCAoRGF0ZVllYXIgeWVhcik7Ci0tCQlbQ0NvZGUg KGNuYW1lID0gImdfZGF0ZV92YWxpZF9tb250aCIpXQotLQkJcHVibGljIGJvb2wgdmFsaWQgKCk7 Ci0tCX0KLS0KLS0JcHVibGljIHN0cnVjdCBEYXRlWWVhciA6IHVzaG9ydCB7Ci0tCQlbQ0NvZGUg KGNuYW1lID0gIkdfREFURV9CQURfWUVBUiIpXQotLQkJcHVibGljIHN0YXRpYyBEYXRlRGF5IEJB RF9ZRUFSOwotLQotLQkJW0NDb2RlIChjbmFtZSA9ICJnX2RhdGVfaXNfbGVhcF95ZWFyIildCi0t CQlwdWJsaWMgYm9vbCBpc19sZWFwX3llYXIgKCk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImdfZGF0 ZV9nZXRfbW9uZGF5X3dlZWtzX2luX3llYXIiKV0KLS0JCXB1YmxpYyB1Y2hhciBnZXRfbW9uZGF5 X3dlZWtzX2luX3llYXIgKCk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImdfZGF0ZV9nZXRfc3VuZGF5 X3dlZWtzX2luX3llYXIiKV0KLS0JCXB1YmxpYyB1Y2hhciBnZXRfc3VuZGF5X3dlZWtzX2luX3ll YXIgKCk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImdfZGF0ZV92YWxpZF95ZWFyIildCi0tCQlwdWJs aWMgYm9vbCB2YWxpZCAoKTsKLS0JfQotLQotLQlbQ0NvZGUgKGNwcmVmaXggPSAiR19EQVRFXyIs IGhhc190eXBlX2lkID0gZmFsc2UpXQotLQlwdWJsaWMgZW51bSBEYXRlV2Vla2RheSB7Ci0tCQlC QURfV0VFS0RBWSwKLS0JCU1PTkRBWSwKLS0JCVRVRVNEQVksCi0tCQlXRURORVNEQVksCi0tCQlU SFVSU0RBWSwKLS0JCUZSSURBWSwKLS0JCVNBVFVSREFZLAotLQkJU1VOREFZOwotLQotLQkJW0ND b2RlIChjbmFtZSA9ICJnX2RhdGVfdmFsaWRfd2Vla2RheSIpXQotLQkJcHVibGljIGJvb2wgdmFs aWQgKCk7Ci0tCX0KLS0KLS0JW0NDb2RlIChjcHJlZml4ID0gIkdfREFURV8iLCBoYXNfdHlwZV9p ZCA9IGZhbHNlKV0KLS0JcHVibGljIGVudW0gRGF0ZURNWSB7Ci0tCQlEQVksCi0tCQlNT05USCwK LS0JCVlFQVIKLS0JfQotLQotLQlbQ0NvZGUgKHR5cGVfaWQgPSAiR19UWVBFX0RBVEUiKV0KLS0J cHVibGljIHN0cnVjdCBEYXRlIHsKLS0JCXB1YmxpYyB2b2lkIGNsZWFyICh1aW50IG5fZGF0ZXMg PSAxKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjU2IildCi0tCQlwdWJsaWMgRGF0ZSBjb3B5 ICgpOwotLQkJcHVibGljIHZvaWQgc2V0X2RheSAoRGF0ZURheSBkYXkpOwotLQkJcHVibGljIHZv aWQgc2V0X21vbnRoIChEYXRlTW9udGggbW9udGgpOwotLQkJcHVibGljIHZvaWQgc2V0X3llYXIg KERhdGVZZWFyIHllYXIpOwotLQkJcHVibGljIHZvaWQgc2V0X2RteSAoRGF0ZURheSBkYXksIGlu dCBtb250aCwgRGF0ZVllYXIgeSk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfanVsaWFuICh1aW50IGp1 bGlhbl9kYXkpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMTAiKV0KLS0JCXB1YmxpYyB2b2lk IHNldF90aW1lX3QgKHRpbWVfdCB0aW1ldCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xMCIp XQotLQkJcHVibGljIHZvaWQgc2V0X3RpbWVfdmFsIChUaW1lVmFsIHRpbWV2YWwpOwotLQkJcHVi bGljIHZvaWQgc2V0X3BhcnNlIChzdHJpbmcgc3RyKTsKLS0JCXB1YmxpYyB2b2lkIGFkZF9kYXlz ICh1aW50IG5fZGF5cyk7Ci0tCQlwdWJsaWMgdm9pZCBzdWJ0cmFjdF9kYXlzICh1aW50IG5fZGF5 cyk7Ci0tCQlwdWJsaWMgdm9pZCBhZGRfbW9udGhzICh1aW50IG5fbW9udGhzKTsKLS0JCXB1Ymxp YyB2b2lkIHN1YnRyYWN0X21vbnRocyAodWludCBuX21vbnRocyk7Ci0tCQlwdWJsaWMgdm9pZCBh ZGRfeWVhcnMgKHVpbnQgbl95ZWFycyk7Ci0tCQlwdWJsaWMgdm9pZCBzdWJ0cmFjdF95ZWFycyAo dWludCBuX3llYXJzKTsKLS0JCXB1YmxpYyBpbnQgZGF5c19iZXR3ZWVuIChEYXRlIGRhdGUyKTsK LS0JCXB1YmxpYyBpbnQgY29tcGFyZSAoRGF0ZSByaHMpOwotLQkJcHVibGljIHZvaWQgY2xhbXAg KERhdGUgbWluX2RhdGUsIERhdGUgbWF4X2RhdGUpOwotLQkJcHVibGljIHZvaWQgb3JkZXIgKERh dGUgZGF0ZTIpOwotLQkJcHVibGljIERhdGVEYXkgZ2V0X2RheSAoKTsKLS0JCXB1YmxpYyBEYXRl TW9udGggZ2V0X21vbnRoICgpOwotLQkJcHVibGljIERhdGVZZWFyIGdldF95ZWFyICgpOwotLQkJ cHVibGljIHVpbnQgZ2V0X2p1bGlhbiAoKTsKLS0JCXB1YmxpYyBEYXRlV2Vla2RheSBnZXRfd2Vl a2RheSAoKTsKLS0JCXB1YmxpYyB1aW50IGdldF9kYXlfb2ZfeWVhciAoKTsKLS0JCXB1YmxpYyBi b29sIGlzX2ZpcnN0X29mX21vbnRoICgpOwotLQkJcHVibGljIGJvb2wgaXNfbGFzdF9vZl9tb250 aCAoKTsKLS0JCXB1YmxpYyB1aW50IGdldF9tb25kYXlfd2Vla19vZl95ZWFyICgpOwotLQkJcHVi bGljIHVpbnQgZ2V0X3N1bmRheV93ZWVrX29mX3llYXIgKCk7Ci0tCQlbVmVyc2lvbiAoc2luY2Ug PSAiMi42IildCi0tCQlwdWJsaWMgdWludCBnZXRfaXNvODYwMV93ZWVrX29mX3llYXIgKCk7Ci0t CQlbQ0NvZGUgKGluc3RhbmNlX3BvcyA9IC0xKV0KLS0JCXB1YmxpYyBzaXplX3Qgc3RyZnRpbWUg KGNoYXJbXSBzLCBzdHJpbmcgZm9ybWF0KTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZ19kYXRlX3Rv X3N0cnVjdF90bSIpXQotLQkJcHVibGljIHZvaWQgdG9fdGltZSAob3V0IFRpbWUgdG0pOwotLQkJ cHVibGljIGJvb2wgdmFsaWQgKCk7Ci0tCQlwdWJsaWMgc3RhdGljIHVjaGFyIGdldF9kYXlzX2lu X21vbnRoIChEYXRlTW9udGggbW9udGgsIERhdGVZZWFyIHllYXIpOwotLQkJcHVibGljIHN0YXRp YyBib29sIHZhbGlkX2RheSAoRGF0ZURheSBkYXkpOwotLQkJcHVibGljIHN0YXRpYyBib29sIHZh bGlkX2RteSAoRGF0ZURheSBkYXksIERhdGVNb250aCBtb250aCwgRGF0ZVllYXIgeWVhcik7Ci0t CQlwdWJsaWMgc3RhdGljIGJvb2wgdmFsaWRfanVsaWFuICh1aW50IGp1bGlhbl9kYXRlKTsKLS0J CXB1YmxpYyBzdGF0aWMgYm9vbCB2YWxpZF93ZWVrZGF5IChEYXRlV2Vla2RheSB3ZWVrZGF5KTsK LS0JfQotLQotLQlbQ0NvZGUgKGNuYW1lID0gInN0cnVjdCB0bSIsIGNoZWFkZXJfZmlsZW5hbWUg PSAidGltZS5oIiwgaGFzX3R5cGVfaWQgPSBmYWxzZSldCi0tCXB1YmxpYyBzdHJ1Y3QgVGltZSB7 Ci0tCQlbQ0NvZGUgKGNuYW1lID0gInRtX3NlYyIpXQotLQkJcHVibGljIGludCBzZWNvbmQ7Ci0t CQlbQ0NvZGUgKGNuYW1lID0gInRtX21pbiIpXQotLQkJcHVibGljIGludCBtaW51dGU7Ci0tCQlb Q0NvZGUgKGNuYW1lID0gInRtX2hvdXIiKV0KLS0JCXB1YmxpYyBpbnQgaG91cjsKLS0JCVtDQ29k ZSAoY25hbWUgPSAidG1fbWRheSIpXQotLQkJcHVibGljIGludCBkYXk7Ci0tCQlbQ0NvZGUgKGNu YW1lID0gInRtX21vbiIpXQotLQkJcHVibGljIGludCBtb250aDsKLS0JCVtDQ29kZSAoY25hbWUg PSAidG1feWVhciIpXQotLQkJcHVibGljIGludCB5ZWFyOwotLQkJW0NDb2RlIChjbmFtZSA9ICJ0 bV93ZGF5IildCi0tCQlwdWJsaWMgaW50IHdlZWtkYXk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gInRt X3lkYXkiKV0KLS0JCXB1YmxpYyBpbnQgZGF5X29mX3llYXI7Ci0tCQlbQ0NvZGUgKGNuYW1lID0g InRtX2lzZHN0IildCi0tCQlwdWJsaWMgaW50IGlzZHN0OwotLQotLQkJW0NDb2RlIChjbmFtZSA9 ICJnbXRpbWVfciIsIGZlYXR1cmVfdGVzdF9tYWNybyA9ICJfWE9QRU5fU09VUkNFIildCi0tCQlz dGF0aWMgdm9pZCBnbXRpbWVfciAocmVmIHRpbWVfdCB0aW1lLCBvdXQgVGltZSByZXN1bHQpOwot LQkJW0NDb2RlIChjbmFtZSA9ICJsb2NhbHRpbWVfciIsIGZlYXR1cmVfdGVzdF9tYWNybyA9ICJf WE9QRU5fU09VUkNFIildCi0tCQlzdGF0aWMgdm9pZCBsb2NhbHRpbWVfciAocmVmIHRpbWVfdCB0 aW1lLCBvdXQgVGltZSByZXN1bHQpOwotLQotLQkJcHVibGljIHN0YXRpYyBUaW1lIGdtICh0aW1l X3QgdGltZSkgewotLQkJCVRpbWUgcmVzdWx0OwotLQkJCWdtdGltZV9yIChyZWYgdGltZSwgb3V0 IHJlc3VsdCk7Ci0tCQkJcmV0dXJuIHJlc3VsdDsKLS0JCX0KLS0JCXB1YmxpYyBzdGF0aWMgVGlt ZSBsb2NhbCAodGltZV90IHRpbWUpIHsKLS0JCQlUaW1lIHJlc3VsdDsKLS0JCQlsb2NhbHRpbWVf ciAocmVmIHRpbWUsIG91dCByZXN1bHQpOwotLQkJCXJldHVybiByZXN1bHQ7Ci0tCQl9Ci0tCi0t CQlwdWJsaWMgc3RyaW5nIHRvX3N0cmluZyAoKSB7Ci0tCQkJcmV0dXJuICIlMDRkLSUwMmQtJTAy ZCAlMDJkOiUwMmQ6JTAyZCIucHJpbnRmICh5ZWFyICsgMTkwMCwgbW9udGggKyAxLCBkYXksIGhv dXIsIG1pbnV0ZSwgc2Vjb25kKTsKLS0JCX0KLS0KLS0JCXB1YmxpYyBzdHJpbmcgZm9ybWF0IChz dHJpbmcgZm9ybWF0KSB7Ci0tCQkJdmFyIGJ1ZmZlciA9IG5ldyBjaGFyWzY0XTsKLS0JCQl0aGlz LnN0cmZ0aW1lIChidWZmZXIsIGZvcm1hdCk7Ci0tCQkJcmV0dXJuIChzdHJpbmcpIGJ1ZmZlcjsK LS0JCX0KLS0KLS0JCVtDQ29kZSAoY25hbWUgPSAibWt0aW1lIildCi0tCQlwdWJsaWMgdGltZV90 IG1rdGltZSAoKTsKLS0KLS0JCVtDQ29kZSAoY25hbWUgPSAic3RyZnRpbWUiLCBpbnN0YW5jZV9w b3MgPSAtMSldCi0tCQlwdWJsaWMgc2l6ZV90IHN0cmZ0aW1lIChjaGFyW10gcywgc3RyaW5nIGZv cm1hdCk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gInN0cnB0aW1lIiwgaW5zdGFuY2VfcG9zID0gLTEs IGZlYXR1cmVfdGVzdF9tYWNybyA9ICJfWE9QRU5fU09VUkNFIildCi0tCQlwdWJsaWMgdW5vd25l ZCBzdHJpbmc/IHN0cnB0aW1lIChzdHJpbmcgYnVmLCBzdHJpbmcgZm9ybWF0KTsKLS0JfQotLQot LQlbU2ltcGxlVHlwZV0KLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuMjYiKV0KLS0JW0NDb2RlIChj aGVhZGVyX2ZpbGVuYW1lID0gImdsaWIuaCIsIHR5cGVfaWQgPSAiR19UWVBFX0lOVDY0IiwgbWFy c2hhbGxlcl90eXBlX25hbWUgPSAiSU5UNjQiLCBnZXRfdmFsdWVfZnVuY3Rpb24gPSAiZ192YWx1 ZV9nZXRfaW50NjQiLCBzZXRfdmFsdWVfZnVuY3Rpb24gPSAiZ192YWx1ZV9zZXRfaW50NjQiLCBk ZWZhdWx0X3ZhbHVlID0gIjBMTCIsIHR5cGVfc2lnbmF0dXJlID0gIngiKV0KLS0JW0ludGVnZXJU eXBlIChyYW5rID0gMTApXQotLQlwdWJsaWMgc3RydWN0IFRpbWVTcGFuIDogaW50NjQgewotLQkJ cHVibGljIGNvbnN0IFRpbWVTcGFuIERBWTsKLS0JCXB1YmxpYyBjb25zdCBUaW1lU3BhbiBIT1VS OwotLQkJcHVibGljIGNvbnN0IFRpbWVTcGFuIE1JTlVURTsKLS0JCXB1YmxpYyBjb25zdCBUaW1l U3BhbiBTRUNPTkQ7Ci0tCQlwdWJsaWMgY29uc3QgVGltZVNwYW4gTUlMTElTRUNPTkQ7Ci0tCX0K LS0KLS0JW0NvbXBhY3RdCi0tCVtWZXJzaW9uIChzaW5jZSA9ICIyLjI2IildCi0tCVtDQ29kZSAo cmVmX2Z1bmN0aW9uID0gImdfZGF0ZV90aW1lX3JlZiIsIHVucmVmX2Z1bmN0aW9uID0gImdfZGF0 ZV90aW1lX3VucmVmIiwgdHlwZV9pZCA9ICJHX1RZUEVfREFURV9USU1FIildCi0tCXB1YmxpYyBj bGFzcyBEYXRlVGltZSB7Ci0tCQlwdWJsaWMgRGF0ZVRpbWUubm93IChUaW1lWm9uZSB0eiA9IG5l dyBUaW1lWm9uZS5sb2NhbCAoKSk7Ci0tCQlwdWJsaWMgRGF0ZVRpbWUubm93X2xvY2FsICgpOwot LQkJcHVibGljIERhdGVUaW1lLm5vd191dGMgKCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi41 NiIpXQotLQkJcHVibGljIERhdGVUaW1lLmZyb21faXNvODYwMSAoc3RyaW5nIHRleHQsIFRpbWVa b25lIGRlZmF1bHRfdHopOwotLQkJcHVibGljIERhdGVUaW1lLmZyb21fdW5peF9sb2NhbCAoaW50 NjQgdCk7Ci0tCQlwdWJsaWMgRGF0ZVRpbWUuZnJvbV91bml4X3V0YyAoaW50NjQgdCk7Ci0tCQlw dWJsaWMgRGF0ZVRpbWUuZnJvbV90aW1ldmFsX2xvY2FsIChUaW1lVmFsIHR2KTsKLS0JCXB1Ymxp YyBEYXRlVGltZS5mcm9tX3RpbWV2YWxfdXRjIChUaW1lVmFsIHR2KTsKLS0JCXB1YmxpYyBEYXRl VGltZSAoVGltZVpvbmUgdHosIGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXksIGludCBob3Vy LCBpbnQgbWludXRlLCBkb3VibGUgc2Vjb25kcyk7Ci0tCQlwdWJsaWMgRGF0ZVRpbWUubG9jYWwg KGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXksIGludCBob3VyLCBpbnQgbWludXRlLCBkb3Vi bGUgc2Vjb25kcyk7Ci0tCQlwdWJsaWMgRGF0ZVRpbWUudXRjIChpbnQgeWVhciwgaW50IG1vbnRo LCBpbnQgZGF5LCBpbnQgaG91ciwgaW50IG1pbnV0ZSwgZG91YmxlIHNlY29uZHMpOwotLQkJcHVi bGljIERhdGVUaW1lIGFkZCAoVGltZVNwYW4gdGltZXNwYW4pOwotLQkJcHVibGljIERhdGVUaW1l IGFkZF95ZWFycyAoaW50IHllYXJzKTsKLS0JCXB1YmxpYyBEYXRlVGltZSBhZGRfbW9udGhzIChp bnQgbW9udGhzKTsKLS0JCXB1YmxpYyBEYXRlVGltZSBhZGRfd2Vla3MgKGludCB3ZWVrcyk7Ci0t CQlwdWJsaWMgRGF0ZVRpbWUgYWRkX2RheXMgKGludCBkYXlzKTsKLS0JCXB1YmxpYyBEYXRlVGlt ZSBhZGRfaG91cnMgKGludCBob3Vycyk7Ci0tCQlwdWJsaWMgRGF0ZVRpbWUgYWRkX21pbnV0ZXMg KGludCBtaW51dGVzKTsKLS0JCXB1YmxpYyBEYXRlVGltZSBhZGRfc2Vjb25kcyAoZG91YmxlIHNl Y29uZHMpOwotLQkJcHVibGljIERhdGVUaW1lIGFkZF9mdWxsIChpbnQgeWVhcnMsIGludCBtb250 aHMsIGludCBkYXlzLCBpbnQgaG91cnMgPSAwLCBpbnQgbWludXRlcyA9IDAsIGRvdWJsZSBzZWNv bmRzID0gMCk7Ci0tCQlwdWJsaWMgaW50IGNvbXBhcmUgKERhdGVUaW1lIGR0KTsKLS0JCXB1Ymxp YyBUaW1lU3BhbiBkaWZmZXJlbmNlIChEYXRlVGltZSBiZWdpbik7Ci0tCQlwdWJsaWMgdWludCBo YXNoICgpOwotLQkJcHVibGljIGJvb2wgZXF1YWwgKERhdGVUaW1lIGR0KTsKLS0JCXB1YmxpYyB2 b2lkIGdldF95bWQgKG91dCBpbnQgeWVhciwgb3V0IGludCBtb250aCwgb3V0IGludCBkYXkpOwot LQkJcHVibGljIGludCBnZXRfeWVhciAoKTsKLS0JCXB1YmxpYyBpbnQgZ2V0X21vbnRoICgpOwot LQkJcHVibGljIGludCBnZXRfZGF5X29mX21vbnRoICgpOwotLQkJcHVibGljIGludCBnZXRfd2Vl a19udW1iZXJpbmdfeWVhciAoKTsKLS0JCXB1YmxpYyBpbnQgZ2V0X3dlZWtfb2ZfeWVhciAoKTsK LS0JCXB1YmxpYyBpbnQgZ2V0X2RheV9vZl93ZWVrICgpOwotLQkJcHVibGljIGludCBnZXRfZGF5 X29mX3llYXIgKCk7Ci0tCQlwdWJsaWMgaW50IGdldF9ob3VyICgpOwotLQkJcHVibGljIGludCBn ZXRfbWludXRlICgpOwotLQkJcHVibGljIGludCBnZXRfc2Vjb25kICgpOwotLQkJcHVibGljIGlu dCBnZXRfbWljcm9zZWNvbmQgKCk7Ci0tCQlwdWJsaWMgZG91YmxlIGdldF9zZWNvbmRzICgpOwot LQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuNTgiKV0KLS0JCXB1YmxpYyB1bm93bmVkIFRpbWVab25l IGdldF90aW1lem9uZSAoKTsKLS0JCXB1YmxpYyBpbnQ2NCB0b191bml4ICgpOwotLQkJcHVibGlj IGJvb2wgdG9fdGltZXZhbCAob3V0IFRpbWVWYWwgdHYpOwotLQkJcHVibGljIFRpbWVTcGFuIGdl dF91dGNfb2Zmc2V0ICgpOwotLQkJcHVibGljIHVub3duZWQgc3RyaW5nIGdldF90aW1lem9uZV9h YmJyZXZpYXRpb24gKCk7Ci0tCQlwdWJsaWMgYm9vbCBpc19kYXlsaWdodF9zYXZpbmdzICgpOwot LQkJcHVibGljIERhdGVUaW1lIHRvX3RpbWV6b25lIChUaW1lWm9uZSB0eik7Ci0tCQlwdWJsaWMg RGF0ZVRpbWUgdG9fbG9jYWwgKCk7Ci0tCQlwdWJsaWMgRGF0ZVRpbWUgdG9fdXRjICgpOwotLQkJ cHVibGljIHN0cmluZyBmb3JtYXQgKHN0cmluZyBmb3JtYXQpOwotLQkJcHVibGljIHN0cmluZyB0 b19zdHJpbmcgKCkgewotLQkJCXJldHVybiB0aGlzLmZvcm1hdCAoIiVGVCVIOiVNOiVTJXoiKTsK LS0JCX0KLS0JfQotLQotLQlwdWJsaWMgZW51bSBUaW1lVHlwZSB7Ci0tCQlTVEFOREFSRCwKLS0J CURBWUxJR0hULAotLQkJVU5JVkVSU0FMCi0tCX0KLS0KLS0JW0NvbXBhY3RdCi0tCVtWZXJzaW9u IChzaW5jZSA9ICIyLjI2IildCi0tCVtDQ29kZSAocmVmX2Z1bmN0aW9uID0gImdfdGltZV96b25l X3JlZiIsIHVucmVmX2Z1bmN0aW9uID0gImdfdGltZV96b25lX3VucmVmIildCi0tCXB1YmxpYyBj bGFzcyBUaW1lWm9uZSB7Ci0tCQlwdWJsaWMgVGltZVpvbmUgKHN0cmluZyBpZGVudGlmaWVyKTsK LS0JCXB1YmxpYyBUaW1lWm9uZS51dGMgKCk7Ci0tCQlwdWJsaWMgVGltZVpvbmUubG9jYWwgKCk7 Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi41OCIpXQotLQkJcHVibGljIFRpbWVab25lLm9mZnNl dCAoaW50MzIgc2Vjb25kcyk7Ci0tCQlwdWJsaWMgaW50IGZpbmRfaW50ZXJ2YWwgKFRpbWVUeXBl IHR5cGUsIGludDY0IHRpbWUpOwotLQkJcHVibGljIGludCBhZGp1c3RfdGltZSAoVGltZVR5cGUg dHlwZSwgcmVmIGludDY0IHRpbWUpOwotLQkJcHVibGljIHVub3duZWQgc3RyaW5nIGdldF9hYmJy ZXZpYXRpb24gKGludCBpbnRlcnZhbCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi41OCIpXQot LQkJcHVibGljIHVub3duZWQgc3RyaW5nIGdldF9pZGVudGlmaWVyICgpOwotLQkJcHVibGljIGlu dDMyIGdldF9vZmZzZXQgKGludCBpbnRlcnZhbCk7Ci0tCQlwdWJsaWMgYm9vbCBpc19kc3QgKGlu dCBpbnRlcnZhbCk7Ci0tCX0KLS0KLS0JLyogUmFuZG9tIE51bWJlcnMgKi8KLS0KLS0JW0NvbXBh Y3RdCi0tCVtDQ29kZSAoY29weV9mdW5jdGlvbiA9ICJnX3JhbmRfY29weSIsIGZyZWVfZnVuY3Rp b24gPSAiZ19yYW5kX2ZyZWUiKV0KLS0JcHVibGljIGNsYXNzIFJhbmQgewotLQkJcHVibGljIFJh bmQud2l0aF9zZWVkICh1aW50MzIgc2VlZCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi40Iild Ci0tCQlwdWJsaWMgUmFuZC53aXRoX3NlZWRfYXJyYXkgKFtDQ29kZSAoYXJyYXlfbGVuZ3RoID0g ZmFsc2UpXSB1aW50MzJbXSBzZWVkLCB1aW50IHNlZWRfbGVuZ3RoKTsKLS0JCXB1YmxpYyBSYW5k ICgpOwotLQkJcHVibGljIHZvaWQgc2V0X3NlZWQgKHVpbnQzMiBzZWVkKTsKLS0JCVtWZXJzaW9u IChzaW5jZSA9ICIyLjQiKV0KLS0JCXB1YmxpYyB2b2lkIHNldF9zZWVkX2FycmF5IChbQ0NvZGUg KGFycmF5X2xlbmd0aCA9IGZhbHNlKV0gdWludDMyW10gc2VlZCwgdWludCBzZWVkX2xlbmd0aCk7 Ci0tCQlwdWJsaWMgYm9vbCBib29sZWFuICgpOwotLQkJW0NDb2RlIChjbmFtZSA9ICJnX3JhbmRf aW50IildCi0tCQlwdWJsaWMgdWludDMyIG5leHRfaW50ICgpOwotLQkJcHVibGljIGludDMyIGlu dF9yYW5nZSAoaW50MzIgYmVnaW4sIGludDMyIGVuZCk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImdf cmFuZF9kb3VibGUiKV0KLS0JCXB1YmxpYyBkb3VibGUgbmV4dF9kb3VibGUgKCk7Ci0tCQlwdWJs aWMgZG91YmxlIGRvdWJsZV9yYW5nZSAoZG91YmxlIGJlZ2luLCBkb3VibGUgZW5kKTsKLS0JfQot LQotLQluYW1lc3BhY2UgUmFuZG9tIHsKLS0JCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRfc2VlZCAo dWludDMyIHNlZWQpOwotLQkJcHVibGljIHN0YXRpYyBib29sIGJvb2xlYW4gKCk7Ci0tCQlbQ0Nv ZGUgKGNuYW1lID0gImdfcmFuZG9tX2ludCIpXQotLQkJcHVibGljIHN0YXRpYyB1aW50MzIgbmV4 dF9pbnQgKCk7Ci0tCQlwdWJsaWMgc3RhdGljIGludDMyIGludF9yYW5nZSAoaW50MzIgYmVnaW4s IGludDMyIGVuZCk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImdfcmFuZG9tX2RvdWJsZSIpXQotLQkJ cHVibGljIHN0YXRpYyBkb3VibGUgbmV4dF9kb3VibGUgKCk7Ci0tCQlwdWJsaWMgc3RhdGljIGRv dWJsZSBkb3VibGVfcmFuZ2UgKGRvdWJsZSBiZWdpbiwgZG91YmxlIGVuZCk7Ci0tCX0KLS0KLS0J bmFtZXNwYWNlIFV1aWQgewotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuNTIiKV0KLS0JCXB1Ymxp YyBzdGF0aWMgYm9vbCBzdHJpbmdfaXNfdmFsaWQgKHN0cmluZyBzdHIpOwotLQkJW1ZlcnNpb24g KHNpbmNlID0gIjIuNTIiKV0KLS0JCXB1YmxpYyBzdGF0aWMgc3RyaW5nIHN0cmluZ19yYW5kb20g KCk7Ci0tCX0KLS0KLS0JLyogTWlzY2VsbGFuZW91cyBVdGlsaXR5IEZ1bmN0aW9ucyAqLwotLQot LQluYW1lc3BhY2UgRW52aXJvbm1lbnQgewotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMiIpXQot LQkJW0NDb2RlIChjbmFtZSA9ICJnX2dldF9hcHBsaWNhdGlvbl9uYW1lIildCi0tCQlwdWJsaWMg c3RhdGljIHVub3duZWQgc3RyaW5nPyBnZXRfYXBwbGljYXRpb25fbmFtZSAoKTsKLS0JCVtWZXJz aW9uIChzaW5jZSA9ICIyLjIiKV0KLS0JCVtDQ29kZSAoY25hbWUgPSAiZ19zZXRfYXBwbGljYXRp b25fbmFtZSIpXQotLQkJcHVibGljIHN0YXRpYyB2b2lkIHNldF9hcHBsaWNhdGlvbl9uYW1lIChz dHJpbmcgYXBwbGljYXRpb25fbmFtZSk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImdfZ2V0X3ByZ25h bWUiKV0KLS0JCXB1YmxpYyBzdGF0aWMgdW5vd25lZCBzdHJpbmcgZ2V0X3ByZ25hbWUgKCk7Ci0t CQlbQ0NvZGUgKGNuYW1lID0gImdfc2V0X3ByZ25hbWUiKV0KLS0JCXB1YmxpYyBzdGF0aWMgdm9p ZCBzZXRfcHJnbmFtZSAoc3RyaW5nIGFwcGxpY2F0aW9uX25hbWUpOwotLQkJW0NDb2RlIChjbmFt ZSA9ICJnX2dldGVudiIpXQotLQkJcHVibGljIHN0YXRpYyB1bm93bmVkIHN0cmluZz8gZ2V0X3Zh cmlhYmxlIChzdHJpbmcgdmFyaWFibGUpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuNCIpXQot LQkJW0NDb2RlIChjbmFtZSA9ICJnX3NldGVudiIpXQotLQkJcHVibGljIHN0YXRpYyBib29sIHNl dF92YXJpYWJsZSAoc3RyaW5nIHZhcmlhYmxlLCBzdHJpbmcgdmFsdWUsIGJvb2wgb3ZlcndyaXRl KTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjQiKV0KLS0JCVtDQ29kZSAoY25hbWUgPSAiZ191 bnNldGVudiIpXQotLQkJcHVibGljIHN0YXRpYyB2b2lkIHVuc2V0X3ZhcmlhYmxlIChzdHJpbmcg dmFyaWFibGUpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuOCIpXQotLQkJW0NDb2RlIChjbmFt ZSA9ICJnX2xpc3RlbnYiLCBhcnJheV9sZW5ndGggPSBmYWxzZSwgYXJyYXlfbnVsbF90ZXJtaW5h dGVkID0gdHJ1ZSldCi0tCQlwdWJsaWMgc3RhdGljIHN0cmluZ1tdIGxpc3RfdmFyaWFibGVzICgp OwotLQkJW0NDb2RlIChjbmFtZSA9ICJnX2dldF91c2VyX25hbWUiKV0KLS0JCXB1YmxpYyBzdGF0 aWMgdW5vd25lZCBzdHJpbmcgZ2V0X3VzZXJfbmFtZSAoKTsKLS0JCVtDQ29kZSAoY25hbWUgPSAi Z19nZXRfcmVhbF9uYW1lIildCi0tCQlwdWJsaWMgc3RhdGljIHVub3duZWQgc3RyaW5nIGdldF9y ZWFsX25hbWUgKCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi42IildCi0tCQlbQ0NvZGUgKGNu YW1lID0gImdfZ2V0X3VzZXJfY2FjaGVfZGlyIildCi0tCQlwdWJsaWMgc3RhdGljIHVub3duZWQg c3RyaW5nIGdldF91c2VyX2NhY2hlX2RpciAoKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjYi KV0KLS0JCVtDQ29kZSAoY25hbWUgPSAiZ19nZXRfdXNlcl9kYXRhX2RpciIpXQotLQkJcHVibGlj IHN0YXRpYyB1bm93bmVkIHN0cmluZyBnZXRfdXNlcl9kYXRhX2RpciAoKTsKLS0JCVtWZXJzaW9u IChzaW5jZSA9ICIyLjYiKV0KLS0JCVtDQ29kZSAoY25hbWUgPSAiZ19nZXRfdXNlcl9jb25maWdf ZGlyIildCi0tCQlwdWJsaWMgc3RhdGljIHVub3duZWQgc3RyaW5nIGdldF91c2VyX2NvbmZpZ19k aXIgKCk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImdfZ2V0X3VzZXJfcnVudGltZV9kaXIiKV0KLS0J CXB1YmxpYyBzdGF0aWMgdW5vd25lZCBzdHJpbmcgZ2V0X3VzZXJfcnVudGltZV9kaXIgKCk7Ci0t CQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xNCIpXQotLQkJW0NDb2RlIChjbmFtZSA9ICJnX2dldF91 c2VyX3NwZWNpYWxfZGlyIildCi0tCQlwdWJsaWMgc3RhdGljIHVub3duZWQgc3RyaW5nIGdldF91 c2VyX3NwZWNpYWxfZGlyIChVc2VyRGlyZWN0b3J5IGRpcmVjdG9yeSk7Ci0tCQlbVmVyc2lvbiAo c2luY2UgPSAiMi42IildCi0tCQlbQ0NvZGUgKGNuYW1lID0gImdfZ2V0X3N5c3RlbV9kYXRhX2Rp cnMiLCBhcnJheV9sZW5ndGggPSBmYWxzZSwgYXJyYXlfbnVsbF90ZXJtaW5hdGVkID0gdHJ1ZSld Ci0tCQlwdWJsaWMgc3RhdGljIHVub3duZWQgc3RyaW5nW10gZ2V0X3N5c3RlbV9kYXRhX2RpcnMg KCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi42IildCi0tCQlbQ0NvZGUgKGNuYW1lID0gImdf Z2V0X3N5c3RlbV9jb25maWdfZGlycyIsIGFycmF5X2xlbmd0aCA9IGZhbHNlLCBhcnJheV9udWxs X3Rlcm1pbmF0ZWQgPSB0cnVlKV0KLS0JCXB1YmxpYyBzdGF0aWMgdW5vd25lZCBzdHJpbmdbXSBn ZXRfc3lzdGVtX2NvbmZpZ19kaXJzICgpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuOCIpXQot LQkJW0NDb2RlIChjbmFtZSA9ICJnX2dldF9ob3N0X25hbWUiKV0KLS0JCXB1YmxpYyBzdGF0aWMg dW5vd25lZCBzdHJpbmcgZ2V0X2hvc3RfbmFtZSAoKTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZ19n ZXRfaG9tZV9kaXIiKV0KLS0JCXB1YmxpYyBzdGF0aWMgdW5vd25lZCBzdHJpbmcgZ2V0X2hvbWVf ZGlyICgpOwotLQkJW0NDb2RlIChjbmFtZSA9ICJnX2dldF90bXBfZGlyIildCi0tCQlwdWJsaWMg c3RhdGljIHVub3duZWQgc3RyaW5nIGdldF90bXBfZGlyICgpOwotLQkJW0NDb2RlIChjbmFtZSA9 ICJnX2dldF9jdXJyZW50X2RpciIpXQotLQkJcHVibGljIHN0YXRpYyBzdHJpbmcgZ2V0X2N1cnJl bnRfZGlyICgpOwotLQkJW0NDb2RlIChjbmFtZSA9ICJnX2ZpbmRfcHJvZ3JhbV9pbl9wYXRoIild Ci0tCQlwdWJsaWMgc3RhdGljIHN0cmluZz8gZmluZF9wcm9ncmFtX2luX3BhdGggKHN0cmluZyBw cm9ncmFtKTsKLS0JCVtWZXJzaW9uIChkZXByZWNhdGVkX3NpbmNlID0gIjIuMzIiKV0KLS0JCVtD Q29kZSAoY25hbWUgPSAiZ19hdGV4aXQiKV0KLS0JCXB1YmxpYyBzdGF0aWMgdm9pZCBhdGV4aXQg KFZvaWRGdW5jIGZ1bmMpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuOCIpXQotLQkJW0NDb2Rl IChjbmFtZSA9ICJnX2NoZGlyIildCi0tCQlwdWJsaWMgc3RhdGljIGludCBzZXRfY3VycmVudF9k aXIgKHN0cmluZyBwYXRoKTsKLS0JfQotLQotLQluYW1lc3BhY2UgRW52aXJvbiB7Ci0tCQlbVmVy c2lvbiAoc2luY2UgPSAiMi4yOCIpXQotLQkJW0NDb2RlIChjbmFtZSA9ICJnX2dldF9lbnZpcm9u IiwgYXJyYXlfbGVuZ3RoID0gZmFsc2UsIGFycmF5X251bGxfdGVybWluYXRlZCA9IHRydWUpXQot LQkJcHVibGljIHN0YXRpYyBzdHJpbmdbXSBnZXQgKCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAi Mi4zMiIpXQotLQkJW0NDb2RlIChjbmFtZSA9ICJnX2Vudmlyb25fZ2V0ZW52IildCi0tCQlwdWJs aWMgc3RhdGljIHVub3duZWQgc3RyaW5nPyBnZXRfdmFyaWFibGUgKFtDQ29kZSAoYXJyYXlfbGVu Z3RoID0gZmFsc2UsIGFycmF5X251bGxfdGVybWluYXRlZCA9IHRydWUpXSBzdHJpbmdbXT8gZW52 cCwgc3RyaW5nIHZhcmlhYmxlKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjMyIildCi0tCQlb Q0NvZGUgKGNuYW1lID0gImdfZW52aXJvbl9zZXRlbnYiLCBhcnJheV9sZW5ndGggPSBmYWxzZSwg YXJyYXlfbnVsbF90ZXJtaW5hdGVkID0gdHJ1ZSldCi0tCQlwdWJsaWMgc3RhdGljIHN0cmluZ1td IHNldF92YXJpYWJsZSAoW0NDb2RlIChhcnJheV9sZW5ndGggPSBmYWxzZSwgYXJyYXlfbnVsbF90 ZXJtaW5hdGVkID0gdHJ1ZSldIG93bmVkIHN0cmluZ1tdPyBlbnZwLCBzdHJpbmcgdmFyaWFibGUs IHN0cmluZyB2YWx1ZSwgYm9vbCBvdmVyd3JpdGUgPSB0cnVlKTsKLS0JCVtWZXJzaW9uIChzaW5j ZSA9ICIyLjMyIildCi0tCQlbQ0NvZGUgKGNuYW1lID0gImdfZW52aXJvbl91bnNldGVudiIsIGFy cmF5X2xlbmd0aCA9IGZhbHNlLCBhcnJheV9udWxsX3Rlcm1pbmF0ZWQgPSB0cnVlKV0KLS0JCXB1 YmxpYyBzdGF0aWMgc3RyaW5nW10gdW5zZXRfdmFyaWFibGUgKFtDQ29kZSAoYXJyYXlfbGVuZ3Ro ID0gZmFsc2UsIGFycmF5X251bGxfdGVybWluYXRlZCA9IHRydWUpXSBvd25lZCBzdHJpbmdbXT8g ZW52cCwgc3RyaW5nIHZhcmlhYmxlKTsKLS0JfQotLQotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi4x NCIpXQotLQlbQ0NvZGUgKGhhc190eXBlX2lkID0gZmFsc2UpXQotLQlwdWJsaWMgZW51bSBVc2Vy RGlyZWN0b3J5IHsKLS0JCURFU0tUT1AsCi0tCQlET0NVTUVOVFMsCi0tCQlET1dOTE9BRCwKLS0J CU1VU0lDLAotLQkJUElDVFVSRVMsCi0tCQlQVUJMSUNfU0hBUkUsCi0tCQlURU1QTEFURVMsCi0t CQlWSURFT1MsCi0tCQlbQ0NvZGUgKGNuYW1lID0gIkdfVVNFUl9OX0RJUkVDVE9SSUVTIildCi0t CQlOX0RJUkVDVE9SSUVTCi0tCX0KLS0KLS0JbmFtZXNwYWNlIEhvc3RuYW1lIHsKLS0JCXB1Ymxp YyBzdGF0aWMgYm9vbCBpc19ub25fYXNjaWkgKHN0cmluZyBob3N0bmFtZSk7Ci0tCQlwdWJsaWMg c3RhdGljIGJvb2wgaXNfYXNjaWlfZW5jb2RlZCAoc3RyaW5nIGhvc3RuYW1lKTsKLS0JCXB1Ymxp YyBzdGF0aWMgYm9vbCBpc19pcF9hZGRyZXNzIChzdHJpbmcgaG9zdG5hbWUpOwotLQkJcHVibGlj IHN0YXRpYyBzdHJpbmcgdG9fYXNjaWkgKHN0cmluZyBob3N0bmFtZSk7Ci0tCQlwdWJsaWMgc3Rh dGljIHN0cmluZyB0b191bmljb2RlIChzdHJpbmcgaG9zdG5hbWUpOwotLQl9Ci0tCi0tCW5hbWVz cGFjZSBQYXRoIHsKLS0JCXB1YmxpYyBzdGF0aWMgYm9vbCBpc19hYnNvbHV0ZSAoc3RyaW5nIGZp bGVfbmFtZSk7Ci0tCQlwdWJsaWMgc3RhdGljIHVub3duZWQgc3RyaW5nIHNraXBfcm9vdCAoc3Ry aW5nIGZpbGVfbmFtZSk7Ci0tCQlwdWJsaWMgc3RhdGljIHN0cmluZyBnZXRfYmFzZW5hbWUgKHN0 cmluZyBmaWxlX25hbWUpOwotLQkJcHVibGljIHN0YXRpYyBzdHJpbmcgZ2V0X2Rpcm5hbWUgKHN0 cmluZyBmaWxlX25hbWUpOwotLQkJW0NDb2RlIChjbmFtZSA9ICJnX2J1aWxkX2ZpbGVuYW1lIild Ci0tCQlwdWJsaWMgc3RhdGljIHN0cmluZyBidWlsZF9maWxlbmFtZSAoc3RyaW5nIGZpcnN0X2Vs ZW1lbnQsIC4uLik7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi41NiIpXQotLQkJW0NDb2RlIChj bmFtZSA9ICJnX2J1aWxkX2ZpbGVuYW1lX3ZhbGlzdCIpXQotLQkJcHVibGljIHN0YXRpYyBzdHJp bmcgYnVpbGRfZmlsZW5hbWVfdmFsaXN0IChzdHJpbmcgZmlyc3RfZWxlbWVudCwgdmFfbGlzdCBh cmdzKTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZ19idWlsZF9wYXRoIildCi0tCQlwdWJsaWMgc3Rh dGljIHN0cmluZyBidWlsZF9wYXRoIChzdHJpbmcgc2VwYXJhdG9yLCBzdHJpbmcgZmlyc3RfZWxl bWVudCwgLi4uKTsKLS0KLS0JCVtDQ29kZSAoY25hbWUgPSAiR19ESVJfU0VQQVJBVE9SIildCi0t CQlwdWJsaWMgY29uc3QgY2hhciBESVJfU0VQQVJBVE9SOwotLQkJW0NDb2RlIChjbmFtZSA9ICJH X0RJUl9TRVBBUkFUT1JfUyIpXQotLQkJcHVibGljIGNvbnN0IHN0cmluZyBESVJfU0VQQVJBVE9S X1M7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi42IildCi0tCQlbQ0NvZGUgKGNuYW1lID0gIkdf SVNfRElSX1NFUEFSQVRPUiIpXQotLQkJcHVibGljIHN0YXRpYyBib29sIGlzX2Rpcl9zZXBhcmF0 b3IgKHVuaWNoYXIgYyk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gIkdfU0VBUkNIUEFUSF9TRVBBUkFU T1IiKV0KLS0JCXB1YmxpYyBjb25zdCBjaGFyIFNFQVJDSFBBVEhfU0VQQVJBVE9SOwotLQkJW0ND b2RlIChjbmFtZSA9ICJHX1NFQVJDSFBBVEhfU0VQQVJBVE9SX1MiKV0KLS0JCXB1YmxpYyBjb25z dCBzdHJpbmcgU0VBUkNIUEFUSF9TRVBBUkFUT1JfUzsKLS0JfQotLQotLQluYW1lc3BhY2UgQml0 IHsKLS0JCXB1YmxpYyBzdGF0aWMgaW50IG50aF9sc2YgKHVsb25nIG1hc2ssIGludCBudGhfYml0 KTsKLS0JCXB1YmxpYyBzdGF0aWMgaW50IG50aF9tc2YgKHVsb25nIG1hc2ssIGludCBudGhfYml0 KTsKLS0JCXB1YmxpYyBzdGF0aWMgdWludCBzdG9yYWdlICh1bG9uZyBudW1iZXIpOwotLQl9Ci0t Ci0tCW5hbWVzcGFjZSBTcGFjZWRQcmltZXMgewotLQkJcHVibGljIHN0YXRpYyB1aW50IGNsb3Nl c3QgKHVpbnQgbnVtKTsKLS0JfQotLQotLQlbQ0NvZGUgKGhhc190YXJnZXQgPSBmYWxzZSldCi0t CXB1YmxpYyBkZWxlZ2F0ZSB2b2lkIEZyZWVGdW5jICh2b2lkKiBkYXRhKTsKLS0JW0NDb2RlICho YXNfdGFyZ2V0ID0gZmFsc2UpXQotLQlwdWJsaWMgZGVsZWdhdGUgdm9pZCBWb2lkRnVuYyAoKTsK LS0KLS0JW1ZlcnNpb24gKGRlcHJlY2F0ZWRfc2luY2UgPSAiMi4zMCIsIHJlcGxhY2VtZW50ID0g ImZvcm1hdF9zaXplIiwgc2luY2UgPSAiMi4xNiIpXQotLQlwdWJsaWMgc3RyaW5nIGZvcm1hdF9z aXplX2Zvcl9kaXNwbGF5IChpbnQ2NCBzaXplKTsKLS0KLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIu MzAiKV0KLS0JW0NDb2RlIChjbmFtZSA9ICJnX2Zvcm1hdF9zaXplX2Z1bGwiKV0KLS0JcHVibGlj IHN0cmluZyBmb3JtYXRfc2l6ZSAodWludDY0IHNpemUsIEZvcm1hdFNpemVGbGFncyBmbGFncyA9 IEZvcm1hdFNpemVGbGFncy5ERUZBVUxUKTsKLS0KLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuMzAi KV0KLS0JW0NDb2RlIChjcHJlZml4ID0gIkdfRk9STUFUX1NJWkVfIiwgaGFzX3R5cGVfaWQgPSBm YWxzZSldCi0tCVtGbGFnc10KLS0JcHVibGljIGVudW0gRm9ybWF0U2l6ZUZsYWdzIHsKLS0JCURF RkFVTFQsCi0tCQlMT05HX0ZPUk1BVCwKLS0JCUlFQ19VTklUUwotLQl9Ci0tCi0tCS8qIExleGlj YWwgU2Nhbm5lciAqLwotLQlbQ0NvZGUgKGhhc190YXJnZXQgPSBmYWxzZSldCi0tCXB1YmxpYyBk ZWxlZ2F0ZSB2b2lkIFNjYW5uZXJNc2dGdW5jIChTY2FubmVyIHNjYW5uZXIsIHN0cmluZyBtZXNz YWdlLCBib29sIGVycm9yKTsKLS0KLS0JW0NvbXBhY3RdCi0tCVtDQ29kZSAoZnJlZV9mdW5jdGlv biA9ICJnX3NjYW5uZXJfZGVzdHJveSIpXQotLQlwdWJsaWMgY2xhc3MgU2Nhbm5lciB7Ci0tCQlw dWJsaWMgdW5vd25lZCBzdHJpbmcgaW5wdXRfbmFtZTsKLS0JCXB1YmxpYyBUb2tlblR5cGUgdG9r ZW47Ci0tCQlwdWJsaWMgVG9rZW5WYWx1ZSB2YWx1ZTsKLS0JCXB1YmxpYyB1aW50IGxpbmU7Ci0t CQlwdWJsaWMgdWludCBwb3NpdGlvbjsKLS0JCXB1YmxpYyBUb2tlblR5cGUgbmV4dF90b2tlbjsK LS0JCXB1YmxpYyBUb2tlblZhbHVlIG5leHRfdmFsdWU7Ci0tCQlwdWJsaWMgdWludCBuZXh0X2xp bmU7Ci0tCQlwdWJsaWMgdWludCBuZXh0X3Bvc2l0aW9uOwotLQkJcHVibGljIFNjYW5uZXJNc2dG dW5jIG1zZ19oYW5kbGVyOwotLQkJcHVibGljIFNjYW5uZXJDb25maWc/IGNvbmZpZzsKLS0JCXB1 YmxpYyBTY2FubmVyIChTY2FubmVyQ29uZmlnPyBjb25maWdfdGVtcGwpOwotLQkJcHVibGljIHZv aWQgaW5wdXRfZmlsZSAoaW50IGlucHV0X2ZkKTsKLS0JCXB1YmxpYyB2b2lkIHN5bmNfZmlsZV9v ZmZzZXQgKCk7Ci0tCQlwdWJsaWMgdm9pZCBpbnB1dF90ZXh0IChzdHJpbmcgdGV4dCwgdWludCB0 ZXh0X2xlbik7Ci0tCQlwdWJsaWMgVG9rZW5UeXBlIHBlZWtfbmV4dF90b2tlbiAoKTsKLS0JCXB1 YmxpYyBUb2tlblR5cGUgZ2V0X25leHRfdG9rZW4gKCk7Ci0tCQlwdWJsaWMgYm9vbCBlb2YgKCk7 Ci0tCQlwdWJsaWMgaW50IGN1cl9saW5lICgpOwotLQkJcHVibGljIGludCBjdXJfcG9zaXRpb24g KCk7Ci0tCQlwdWJsaWMgVG9rZW5UeXBlIGN1cl90b2tlbiAoKTsKLS0JCXB1YmxpYyBUb2tlblZh bHVlIGN1cl92YWx1ZSAoKTsKLS0JCXB1YmxpYyB1aW50IHNldF9zY29wZSAodWludCBzY29wZV9p ZCk7Ci0tCQlwdWJsaWMgdm9pZCBzY29wZV9hZGRfc3ltYm9sICh1aW50IHNjb3BlX2lkLCBzdHJp bmcgc3ltYm9sLCB2b2lkKiB2YWx1ZSk7Ci0tCQlwdWJsaWMgdm9pZCBzY29wZV9mb3JlYWNoX3N5 bWJvbCAodWludCBzY29wZV9pZCwgSEZ1bmM8c3RyaW5nLCB2b2lkKj4gZnVuYyk7Ci0tCQlwdWJs aWMgdm9pZCogc2NvcGVfbG9va3VwX3N5bWJvbCAodWludCBzY29wZV9pZCwgc3RyaW5nIHN5bWJv bCk7Ci0tCQlwdWJsaWMgdm9pZCBzY29wZV9yZW1vdmVfc3ltYm9sICh1aW50IHNjb3BlX2lkLCBz dHJpbmcgc3ltYm9sKTsKLS0JCXB1YmxpYyB2b2lkKiBsb29rdXBfc3ltYm9sIChzdHJpbmcgc3lt Ym9sKTsKLS0JCVtQcmludGZGb3JtYXRdCi0tCQlwdWJsaWMgdm9pZCB3YXJuIChzdHJpbmcgZm9y bWF0LCAuLi4pOwotLQkJW1ByaW50ZkZvcm1hdF0KLS0JCXB1YmxpYyB2b2lkIGVycm9yIChzdHJp bmcgZm9ybWF0LCAuLi4pOwotLQkJcHVibGljIHZvaWQgdW5leHBfdG9rZW4gKFRva2VuVHlwZSBl eHBlY3RlZF90b2tlbiwgc3RyaW5nPyBpZGVudGlmaWVyX3NwZWMsIHN0cmluZz8gc3ltYm9sX3Nw ZWMsIHN0cmluZz8gc3ltYm9sX25hbWUsIHN0cmluZz8gbWVzc2FnZSwgYm9vbCBpc19lcnJvcik7 Ci0tCX0KLS0KLS0JcHVibGljIHN0cnVjdCBTY2FubmVyQ29uZmlnIHsKLS0JCXB1YmxpYyBzdHJp bmcqIGNzZXRfc2tpcF9jaGFyYWN0ZXJzOwotLQkJcHVibGljIHN0cmluZyogY3NldF9pZGVudGlm aWVyX2ZpcnN0OwotLQkJcHVibGljIHN0cmluZyogY3NldF9pZGVudGlmaWVyX250aDsKLS0JCXB1 YmxpYyBzdHJpbmcqIGNwYWlyX2NvbW1lbnRfc2luZ2xlOwotLQkJcHVibGljIGJvb2wgY2FzZV9z ZW5zaXRpdmU7Ci0tCQlwdWJsaWMgYm9vbCBza2lwX2NvbW1lbnRfbXVsdGk7Ci0tCQlwdWJsaWMg Ym9vbCBza2lwX2NvbW1lbnRfc2luZ2xlOwotLQkJcHVibGljIGJvb2wgc2Nhbl9jb21tZW50X211 bHRpOwotLQkJcHVibGljIGJvb2wgc2Nhbl9pZGVudGlmaWVyOwotLQkJcHVibGljIGJvb2wgc2Nh bl9pZGVudGlmaWVyXzFjaGFyOwotLQkJcHVibGljIGJvb2wgc2Nhbl9pZGVudGlmaWVyX05VTEw7 Ci0tCQlwdWJsaWMgYm9vbCBzY2FuX3N5bWJvbHM7Ci0tCQlwdWJsaWMgYm9vbCBzY2FuX2JpbmFy eTsKLS0JCXB1YmxpYyBib29sIHNjYW5fb2N0YWw7Ci0tCQlwdWJsaWMgYm9vbCBzY2FuX2Zsb2F0 OwotLQkJcHVibGljIGJvb2wgc2Nhbl9oZXg7Ci0tCQlwdWJsaWMgYm9vbCBzY2FuX2hleF9kb2xs YXI7Ci0tCQlwdWJsaWMgYm9vbCBzY2FuX3N0cmluZ19zcTsKLS0JCXB1YmxpYyBib29sIHNjYW5f c3RyaW5nX2RxOwotLQkJcHVibGljIGJvb2wgbnVtYmVyc18yX2ludDsKLS0JCXB1YmxpYyBib29s IGludF8yX2Zsb2F0OwotLQkJcHVibGljIGJvb2wgaWRlbnRpZmllcl8yX3N0cmluZzsKLS0JCXB1 YmxpYyBib29sIGNoYXJfMl90b2tlbjsKLS0JCXB1YmxpYyBib29sIHN5bWJvbF8yX3Rva2VuOwot LQkJcHVibGljIGJvb2wgc2NvcGVfMF9mYWxsYmFjazsKLS0JCXB1YmxpYyBib29sIHN0b3JlX2lu dDY0OwotLQl9Ci0tCi0tCVtDQ29kZSAobG93ZXJfY2FzZV9jcHJlZml4PSJHX0NTRVRfIildCi0t CW5hbWVzcGFjZSBDaGFyYWN0ZXJTZXQgewotLQkJcHVibGljIGNvbnN0IHN0cmluZyBBXzJfWjsK LS0JCXB1YmxpYyBjb25zdCBzdHJpbmcgYV8yX3o7Ci0tCQlwdWJsaWMgY29uc3Qgc3RyaW5nIERJ R0lUUzsKLS0JCXB1YmxpYyBjb25zdCBzdHJpbmcgTEFUSU5DOwotLQkJcHVibGljIGNvbnN0IHN0 cmluZyBMQVRJTlM7Ci0tCX0KLS0KLS0JW0NDb2RlIChjcHJlZml4ID0gIkdfVE9LRU5fIiwgaGFz X3R5cGVfaWQgPSBmYWxzZSldCi0tCXB1YmxpYyBlbnVtIFRva2VuVHlwZSB7Ci0tCQlFT0YsCi0t CQlMRUZUX1BBUkVOLAotLQkJUklHSFRfUEFSRU4sCi0tCQlMRUZUX0NVUkxZLAotLQkJUklHSFRf Q1VSTFksCi0tCQlMRUZUX0JSQUNFLAotLQkJUklHSFRfQlJBQ0UsCi0tCQlFUVVBTF9TSUdOLAot LQkJQ09NTUEsCi0tCQlOT05FLAotLQkJRVJST1IsCi0tCQlDSEFSLAotLQkJQklOQVJZLAotLQkJ T0NUQUwsCi0tCQlJTlQsCi0tCQlIRVgsCi0tCQlGTE9BVCwKLS0JCVNUUklORywKLS0JCVNZTUJP TCwKLS0JCUlERU5USUZJRVIsCi0tCQlJREVOVElGSUVSX05VTEwsCi0tCQlDT01NRU5UX1NJTkdM RSwKLS0JCUNPTU1FTlRfTVVMVEksCi0tCQlMQVNUCi0tCX0KLS0KLS0JW1NpbXBsZVR5cGVdCi0t CXB1YmxpYyBzdHJ1Y3QgVG9rZW5WYWx1ZSB7Ci0tCQlbQ0NvZGUgKGNuYW1lPSJ2X3N5bWJvbCIp XQotLQkJcHVibGljIHZvaWQqIHN5bWJvbDsKLS0JCVtDQ29kZSAoY25hbWU9InZfaWRlbnRpZmll ciIpXQotLQkJcHVibGljIHVub3duZWQgc3RyaW5nIGlkZW50aWZpZXI7Ci0tCQlbQ0NvZGUgKGNu YW1lPSJ2X2JpbmFyeSIpXQotLQkJcHVibGljIHVsb25nIGJpbmFyeTsKLS0JCVtDQ29kZSAoY25h bWU9InZfb2N0YWwiKV0KLS0JCXB1YmxpYyB1bG9uZyBvY3RhbDsKLS0JCVtDQ29kZSAoY25hbWU9 InZfaW50IildCi0tCQlwdWJsaWMgdWxvbmcgaW50OwotLQkJW0NDb2RlIChjbmFtZT0idl9pbnQ2 NCIpXQotLQkJcHVibGljIHVsb25nIGludDY0OwotLQkJW0NDb2RlIChjbmFtZT0idl9mbG9hdCIp XQotLQkJcHVibGljIGRvdWJsZSBmbG9hdDsKLS0JCVtDQ29kZSAoY25hbWU9InZfaGV4IildCi0t CQlwdWJsaWMgdWxvbmcgaGV4OwotLQkJW0NDb2RlIChjbmFtZT0idl9zdHJpbmciKV0KLS0JCXB1 YmxpYyB1bm93bmVkIHN0cmluZyBzdHJpbmc7Ci0tCQlbQ0NvZGUgKGNuYW1lPSJ2X2NvbW1lbnQi KV0KLS0JCXB1YmxpYyB1bm93bmVkIHN0cmluZyBjb21tZW50OwotLQkJW0NDb2RlIChjbmFtZT0i dl9jaGFyIildCi0tCQlwdWJsaWMgdWNoYXIgY2hhcjsKLS0JCVtDQ29kZSAoY25hbWU9InZfZXJy b3IiKV0KLS0JCXB1YmxpYyB1aW50IGVycm9yOwotLQl9Ci0tCi0tCVtDQ29kZSAoY3ByZWZpeCA9 ICJHX0VSUl8iLCBoYXNfdHlwZV9pZCA9IGZhbHNlKV0KLS0JcHVibGljIGVudW0gRXJyb3JUeXBl IHsKLS0JCVVOS05PV04sCi0tCQlVTkVYUF9FT0YsCi0tCQlVTkVYUF9FT0ZfSU5fU1RSSU5HLAot LQkJVU5FWFBfRU9GX0lOX0NPTU1FTlQsCi0tCQlOT05fRElHSVRfSU5fQ09OU1QsCi0tCQlESUdJ VF9SQURJWCwKLS0JCUZMT0FUX1JBRElYLAotLQkJRkxPQVRfTUFMRk9STUVECi0tCX0KLS0KLS0J LyogQXV0b21hdGljIFN0cmluZyBDb21wbGV0aW9uICovCi0tCi0tCVtWZXJzaW9uIChkZXByZWNh dGVkX3NpbmNlID0gIjIuMjYiKV0KLS0JW0NvbXBhY3RdCi0tCVtDQ29kZSAoZnJlZV9mdW5jdGlv biA9ICJnX2NvbXBsZXRpb25fZnJlZSIpXQotLQlwdWJsaWMgY2xhc3MgQ29tcGxldGlvbiB7Ci0t CQlwdWJsaWMgQ29tcGxldGlvbiAoQ29tcGxldGlvbkZ1bmM/IGZ1bmMgPSBudWxsKTsKLS0JCXB1 YmxpYyBMaXN0PHZvaWQqPiBpdGVtczsKLS0JCXB1YmxpYyBDb21wbGV0aW9uRnVuYyBmdW5jOwot LQkJcHVibGljIHN0cmluZyBwcmVmaXg7Ci0tCQlwdWJsaWMgTGlzdDx2b2lkKj4gY2FjaGU7Ci0t CQlwdWJsaWMgQ29tcGxldGlvblN0cm5jbXBGdW5jIHN0cm5jbXBfZnVuYzsKLS0JCXB1YmxpYyB2 b2lkIGFkZF9pdGVtcyAoTGlzdDx2b2lkKj4gaXRlbXMpOwotLQkJcHVibGljIHZvaWQgcmVtb3Zl X2l0ZW1zIChMaXN0PHZvaWQqPiBpdGVtcyk7Ci0tCQlwdWJsaWMgdm9pZCBjbGVhcl9pdGVtcyAo KTsKLS0JCXB1YmxpYyB1bm93bmVkIExpc3Q8dm9pZCo+IGNvbXBsZXRlIChzdHJpbmcgcHJlZml4 LCBvdXQgc3RyaW5nPyBuZXdfcHJlZml4ID0gbnVsbCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAi Mi40IildCi0tCQlwdWJsaWMgdW5vd25lZCBMaXN0PHZvaWQqPiBjb21wbGV0ZV91dGY4IChzdHJp bmcgcHJlZml4LCBvdXQgc3RyaW5nPyBuZXdfcHJlZml4ID0gbnVsbCk7Ci0tCX0KLS0KLS0JW0ND b2RlIChoYXNfdGFyZ2V0ID0gZmFsc2UpXQotLQlwdWJsaWMgZGVsZWdhdGUgc3RyaW5nIENvbXBs ZXRpb25GdW5jICh2b2lkKiBpdGVtKTsKLS0JW0NDb2RlIChoYXNfdGFyZ2V0ID0gZmFsc2UpXQot LQlwdWJsaWMgZGVsZWdhdGUgaW50IENvbXBsZXRpb25TdHJuY21wRnVuYyAoc3RyaW5nIHMxLCBz dHJpbmcgczIsIHNpemVfdCBuKTsKLS0KLS0JLyogVGltZXJzICovCi0tCi0tCVtDb21wYWN0XQot LQlbQ0NvZGUgKGZyZWVfZnVuY3Rpb24gPSAiZ190aW1lcl9kZXN0cm95IildCi0tCXB1YmxpYyBj bGFzcyBUaW1lciB7Ci0tCQlwdWJsaWMgVGltZXIgKCk7Ci0tCQlwdWJsaWMgdm9pZCBzdGFydCAo KTsKLS0JCXB1YmxpYyB2b2lkIHN0b3AgKCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi40Iild Ci0tCQlwdWJsaWMgdm9pZCBAY29udGludWUgKCk7Ci0tCQlwdWJsaWMgZG91YmxlIGVsYXBzZWQg KG91dCB1bG9uZyBtaWNyb3NlY29uZHMgPSBudWxsKTsKLS0JCXB1YmxpYyB2b2lkIHJlc2V0ICgp OwotLQl9Ci0tCi0tCS8qIFNwYXduaW5nIFByb2Nlc3NlcyAqLwotLQotLQlwdWJsaWMgZXJyb3Jk b21haW4gU3Bhd25FcnJvciB7Ci0tCQlGT1JLLAotLQkJUkVBRCwKLS0JCUNIRElSLAotLQkJQUND RVMsCi0tCQlQRVJNLAotLQkJVE9PX0JJRywKLS0JCU5PRVhFQywKLS0JCU5BTUVUT09MT05HLAot LQkJTk9FTlQsCi0tCQlOT01FTSwKLS0JCU5PVERJUiwKLS0JCUxPT1AsCi0tCQlUWFRCVVNZLAot LQkJSU8sCi0tCQlORklMRSwKLS0JCU1GSUxFLAotLQkJSU5WQUwsCi0tCQlJU0RJUiwKLS0JCUxJ QkJBRCwKLS0JCUZBSUxFRDsKLS0JCXB1YmxpYyBzdGF0aWMgR0xpYi5RdWFyayBxdWFyayAoKTsK LS0JfQotLQotLQlbQ0NvZGUgKGNwcmVmaXggPSAiR19TUEFXTl8iLCBoYXNfdHlwZV9pZCA9IGZh bHNlKV0KLS0JW0ZsYWdzXQotLQlwdWJsaWMgZW51bSBTcGF3bkZsYWdzIHsKLS0JCUxFQVZFX0RF U0NSSVBUT1JTX09QRU4sCi0tCQlET19OT1RfUkVBUF9DSElMRCwKLS0JCVNFQVJDSF9QQVRILAot LQkJU1RET1VUX1RPX0RFVl9OVUxMLAotLQkJU1RERVJSX1RPX0RFVl9OVUxMLAotLQkJQ0hJTERf SU5IRVJJVFNfU1RESU4sCi0tCQlGSUxFX0FORF9BUkdWX1pFUk8sCi0tCQlTRUFSQ0hfUEFUSF9G Uk9NX0VOVlAKLS0JfQotLQotLQlwdWJsaWMgZGVsZWdhdGUgdm9pZCBTcGF3bkNoaWxkU2V0dXBG dW5jICgpOwotLQlbQ0NvZGUgKGhhc190YXJnZXQgPSBmYWxzZSwgY2hlYWRlcl9maWxlbmFtZSA9 ICJzaWduYWwuaCIpXQotLQlwdWJsaWMgZGVsZWdhdGUgdm9pZCBTaWduYWxIYW5kbGVyRnVuYyAo aW50IHNpZ251bSk7Ci0tCi0tCXB1YmxpYyB1bm93bmVkIHN0cmluZyBzdHJzaWduYWwgKGludCBz aWdudW0pOwotLQotLQlbQ0NvZGUgKGxvd2VyX2Nhc2VfY3ByZWZpeCA9ICJnXyIpXQotLQluYW1l c3BhY2UgUHJvY2VzcyB7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi41OCIpXQotLQkJcHVibGlj IHN0YXRpYyBib29sIHNwYXduX2FzeW5jX3dpdGhfZmRzIChzdHJpbmc/IHdvcmtpbmdfZGlyZWN0 b3J5LCBbQ0NvZGUgKGFycmF5X2xlbmd0aCA9IGZhbHNlLCBhcnJheV9udWxsX3Rlcm1pbmF0ZWQg PSB0cnVlKV0gc3RyaW5nW10gYXJndiwgW0NDb2RlIChhcnJheV9sZW5ndGggPSBmYWxzZSwgYXJy YXlfbnVsbF90ZXJtaW5hdGVkID0gdHJ1ZSldIHN0cmluZ1tdPyBlbnZwLCBTcGF3bkZsYWdzIF9m bGFncywgU3Bhd25DaGlsZFNldHVwRnVuYz8gY2hpbGRfc2V0dXAsIG91dCBQaWQgY2hpbGRfcGlk ID0gbnVsbCwgaW50IHN0ZGluX2ZkID0gLTEsIGludCBzdGRvdXRfZmQgPSAtMSwgaW50IHN0ZGVy cl9mZCA9IC0xKSB0aHJvd3MgU3Bhd25FcnJvcjsKLS0JCXB1YmxpYyBzdGF0aWMgYm9vbCBzcGF3 bl9hc3luY193aXRoX3BpcGVzIChzdHJpbmc/IHdvcmtpbmdfZGlyZWN0b3J5LCBbQ0NvZGUgKGFy cmF5X2xlbmd0aCA9IGZhbHNlLCBhcnJheV9udWxsX3Rlcm1pbmF0ZWQgPSB0cnVlKV0gc3RyaW5n W10gYXJndiwgW0NDb2RlIChhcnJheV9sZW5ndGggPSBmYWxzZSwgYXJyYXlfbnVsbF90ZXJtaW5h dGVkID0gdHJ1ZSldIHN0cmluZ1tdPyBlbnZwLCBTcGF3bkZsYWdzIF9mbGFncywgU3Bhd25DaGls ZFNldHVwRnVuYz8gY2hpbGRfc2V0dXAsIG91dCBQaWQgY2hpbGRfcGlkLCBvdXQgaW50IHN0YW5k YXJkX2lucHV0ID0gbnVsbCwgb3V0IGludCBzdGFuZGFyZF9vdXRwdXQgPSBudWxsLCBvdXQgaW50 IHN0YW5kYXJkX2Vycm9yID0gbnVsbCkgdGhyb3dzIFNwYXduRXJyb3I7Ci0tCQlwdWJsaWMgc3Rh dGljIGJvb2wgc3Bhd25fYXN5bmMgKHN0cmluZz8gd29ya2luZ19kaXJlY3RvcnksIFtDQ29kZSAo YXJyYXlfbGVuZ3RoID0gZmFsc2UsIGFycmF5X251bGxfdGVybWluYXRlZCA9IHRydWUpXSBzdHJp bmdbXSBhcmd2LCBbQ0NvZGUgKGFycmF5X2xlbmd0aCA9IGZhbHNlLCBhcnJheV9udWxsX3Rlcm1p bmF0ZWQgPSB0cnVlKV0gc3RyaW5nW10/IGVudnAsIFNwYXduRmxhZ3MgX2ZsYWdzLCBTcGF3bkNo aWxkU2V0dXBGdW5jPyBjaGlsZF9zZXR1cCwgb3V0IFBpZCBjaGlsZF9waWQpIHRocm93cyBTcGF3 bkVycm9yOwotLQkJcHVibGljIHN0YXRpYyBib29sIHNwYXduX3N5bmMgKHN0cmluZz8gd29ya2lu Z19kaXJlY3RvcnksIFtDQ29kZSAoYXJyYXlfbGVuZ3RoID0gZmFsc2UsIGFycmF5X251bGxfdGVy bWluYXRlZCA9IHRydWUpXSBzdHJpbmdbXSBhcmd2LCBbQ0NvZGUgKGFycmF5X2xlbmd0aCA9IGZh bHNlLCBhcnJheV9udWxsX3Rlcm1pbmF0ZWQgPSB0cnVlKV0gc3RyaW5nW10/IGVudnAsIFNwYXdu RmxhZ3MgX2ZsYWdzLCBTcGF3bkNoaWxkU2V0dXBGdW5jPyBjaGlsZF9zZXR1cCwgb3V0IHN0cmlu ZyBzdGFuZGFyZF9vdXRwdXQgPSBudWxsLCBvdXQgc3RyaW5nIHN0YW5kYXJkX2Vycm9yID0gbnVs bCwgb3V0IGludCBleGl0X3N0YXR1cyA9IG51bGwpIHRocm93cyBTcGF3bkVycm9yOwotLQkJcHVi bGljIHN0YXRpYyBib29sIHNwYXduX2NvbW1hbmRfbGluZV9hc3luYyAoc3RyaW5nIGNvbW1hbmRf bGluZSkgdGhyb3dzIFNwYXduRXJyb3I7Ci0tCQlwdWJsaWMgc3RhdGljIGJvb2wgc3Bhd25fY29t bWFuZF9saW5lX3N5bmMgKHN0cmluZyBjb21tYW5kX2xpbmUsIG91dCBzdHJpbmcgc3RhbmRhcmRf b3V0cHV0ID0gbnVsbCwgb3V0IHN0cmluZyBzdGFuZGFyZF9lcnJvciA9IG51bGwsIG91dCBpbnQg ZXhpdF9zdGF0dXMgPSBudWxsKSB0aHJvd3MgU3Bhd25FcnJvcjsKLS0JCVtDQ29kZSAoY25hbWUg PSAiZ19zcGF3bl9jbG9zZV9waWQiKV0KLS0JCXB1YmxpYyBzdGF0aWMgdm9pZCBjbG9zZV9waWQg KFBpZCBwaWQpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMzQiKV0KLS0JCVtDQ29kZSAoY25h bWUgPSAiZ19zcGF3bl9jaGVja19leGl0X3N0YXR1cyIpXQotLQkJcHVibGljIHN0YXRpYyBib29s IGNoZWNrX2V4aXRfc3RhdHVzIChpbnQgZXhpdF9zdGF0dXMpIHRocm93cyBHTGliLkVycm9yOwot LQotLQkJLyogdGhlc2UgbWFjcm9zIGFyZSByZXF1aXJlZCB0byBleGFtaW5lIHRoZSBleGl0IHN0 YXR1cyBvZiBhIHByb2Nlc3MgKi8KLS0JCVtDQ29kZSAoY25hbWUgPSAiV0lGRVhJVEVEIiwgY2hl YWRlcl9maWxlbmFtZSA9ICJzeXMvd2FpdC5oIildCi0tCQlwdWJsaWMgc3RhdGljIGJvb2wgaWZf ZXhpdGVkIChpbnQgc3RhdHVzKTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiV0VYSVRTVEFUVVMiLCBj aGVhZGVyX2ZpbGVuYW1lID0gInN5cy93YWl0LmgiKV0KLS0JCXB1YmxpYyBzdGF0aWMgaW50IGV4 aXRfc3RhdHVzIChpbnQgc3RhdHVzKTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiV0lGU0lHTkFMRUQi LCBjaGVhZGVyX2ZpbGVuYW1lID0gInN5cy93YWl0LmgiKV0KLS0JCXB1YmxpYyBzdGF0aWMgYm9v bCBpZl9zaWduYWxlZCAoaW50IHN0YXR1cyk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gIldURVJNU0lH IiwgY2hlYWRlcl9maWxlbmFtZSA9ICJzeXMvd2FpdC5oIildCi0tCQlwdWJsaWMgc3RhdGljIFBy b2Nlc3NTaWduYWwgdGVybV9zaWcgKGludCBzdGF0dXMpOwotLQkJW0NDb2RlIChjbmFtZSA9ICJX Q09SRURVTVAiLCBjaGVhZGVyX2ZpbGVuYW1lID0gInN5cy93YWl0LmgiKV0KLS0JCXB1YmxpYyBz dGF0aWMgYm9vbCBjb3JlX2R1bXAgKGludCBzdGF0dXMpOwotLQkJW0NDb2RlIChjbmFtZSA9ICJX SUZTVE9QUEVEIiwgY2hlYWRlcl9maWxlbmFtZSA9ICJzeXMvd2FpdC5oIildCi0tCQlwdWJsaWMg c3RhdGljIGJvb2wgaWZfc3RvcHBlZCAoaW50IHN0YXR1cyk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0g IldTVE9QU0lHIiwgY2hlYWRlcl9maWxlbmFtZSA9ICJzeXMvd2FpdC5oIildCi0tCQlwdWJsaWMg c3RhdGljIFByb2Nlc3NTaWduYWwgc3RvcF9zaWcgKGludCBzdGF0dXMpOwotLQkJW0NDb2RlIChj bmFtZSA9ICJXSUZDT05USU5VRUQiLCBjaGVhZGVyX2ZpbGVuYW1lID0gInN5cy93YWl0LmgiKV0K LS0JCXB1YmxpYyBzdGF0aWMgYm9vbCBpZl9jb250aW51ZWQgKGludCBzdGF0dXMpOwotLQotLQkJ W05vUmV0dXJuXQotLQkJW0NDb2RlIChjbmFtZSA9ICJhYm9ydCIsIGNoZWFkZXJfZmlsZW5hbWUg PSAic3RkbGliLmgiKV0KLS0JCXB1YmxpYyB2b2lkIGFib3J0ICgpOwotLQkJW05vUmV0dXJuXQot LQkJW0NDb2RlIChjbmFtZSA9ICJleGl0IiwgY2hlYWRlcl9maWxlbmFtZSA9ICJzdGRsaWIuaCIp XQotLQkJcHVibGljIHZvaWQgZXhpdCAoaW50IHN0YXR1cyk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0g InJhaXNlIiwgY2hlYWRlcl9maWxlbmFtZSA9ICJzaWduYWwuaCIpXQotLQkJcHVibGljIGludCBy YWlzZSAoUHJvY2Vzc1NpZ25hbCBzaWcpOwotLQkJW0NDb2RlIChjbmFtZSA9ICJzaWduYWwiLCBj aGVhZGVyX2ZpbGVuYW1lID0gInNpZ25hbC5oIildCi0tCQlwdWJsaWMgU2lnbmFsSGFuZGxlckZ1 bmMgQHNpZ25hbCAoUHJvY2Vzc1NpZ25hbCBzaWdudW0sIFNpZ25hbEhhbmRsZXJGdW5jIGhhbmRs ZXIpOwotLQl9Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiaW50IiwgaGFzX3R5cGVfaWQgPSBmYWxz ZSwgY2hlYWRlcl9maWxlbmFtZSA9ICJzaWduYWwuaCIsIGNwcmVmaXggPSAiU0lHIildCi0tCXB1 YmxpYyBlbnVtIFByb2Nlc3NTaWduYWwgewotLQkJSFVQLAotLQkJSU5ULAotLQkJUVVJVCwKLS0J CUlMTCwKLS0JCVRSQVAsCi0tCQlBQlJULAotLQkJQlVTLAotLQkJRlBFLAotLQkJS0lMTCwKLS0J CVNFR1YsCi0tCQlQSVBFLAotLQkJQUxSTSwKLS0JCVRFUk0sCi0tCQlVU1IxLAotLQkJVVNSMiwK LS0JCUNITEQsCi0tCQlDT05ULAotLQkJU1RPUCwKLS0JCVRTVFAsCi0tCQlUVElOLAotLQkJVFRP VQotLQl9Ci0tCi0tCi0tCS8qIEZpbGUgVXRpbGl0aWVzICovCi0tCi0tCXB1YmxpYyBlcnJvcmRv bWFpbiBGaWxlRXJyb3IgewotLQkJRVhJU1QsCi0tCQlJU0RJUiwKLS0JCUFDQ0VTLAotLQkJTkFN RVRPT0xPTkcsCi0tCQlOT0VOVCwKLS0JCU5PVERJUiwKLS0JCU5YSU8sCi0tCQlOT0RFViwKLS0J CVJPRlMsCi0tCQlUWFRCU1ksCi0tCQlGQVVMVCwKLS0JCUxPT1AsCi0tCQlOT1NQQywKLS0JCU5P TUVNLAotLQkJTUZJTEUsCi0tCQlORklMRSwKLS0JCUJBREYsCi0tCQlJTlZBTCwKLS0JCVBJUEUs Ci0tCQlBR0FJTiwKLS0JCUlOVFIsCi0tCQlJTywKLS0JCVBFUk0sCi0tCQlOT1NZUywKLS0JCUZB SUxFRDsKLS0JCXB1YmxpYyBzdGF0aWMgR0xpYi5RdWFyayBxdWFyayAoKTsKLS0JfQotLQotLQlb Q0NvZGUgKGhhc190eXBlX2lkID0gZmFsc2UpXQotLQlbRmxhZ3NdCi0tCXB1YmxpYyBlbnVtIEZp bGVUZXN0IHsKLS0JCUlTX1JFR1VMQVIsCi0tCQlJU19TWU1MSU5LLAotLQkJSVNfRElSLAotLQkJ SVNfRVhFQ1VUQUJMRSwKLS0JCUVYSVNUUwotLQl9Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiaW50 IiwgY3ByZWZpeCA9ICJTRUVLXyIsIGhhc190eXBlX2lkID0gZmFsc2UpXQotLQlwdWJsaWMgZW51 bSBGaWxlU2VlayB7Ci0tCQlTRVQsCi0tCQlDVVIsCi0tCQlFTkQKLS0JfQotLQotLQlbQ29tcGFj dF0KLS0JW0NDb2RlIChjbmFtZSA9ICJGSUxFIiwgZnJlZV9mdW5jdGlvbiA9ICJmY2xvc2UiLCBj aGVhZGVyX2ZpbGVuYW1lID0gInN0ZGlvLmgiKV0KLS0JcHVibGljIGNsYXNzIEZpbGVTdHJlYW0g ewotLQkJW0NDb2RlIChjbmFtZSA9ICJFT0YiLCBjaGVhZGVyX2ZpbGVuYW1lID0gInN0ZGlvLmgi KV0KLS0JCXB1YmxpYyBjb25zdCBpbnQgRU9GOwotLQotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIu NiIpXQotLQkJW0NDb2RlIChjbmFtZSA9ICJnX2ZvcGVuIiwgY2hlYWRlcl9maWxlbmFtZSA9ICJn bGliL2dzdGRpby5oIildCi0tCQlwdWJsaWMgc3RhdGljIEZpbGVTdHJlYW0/IG9wZW4gKHN0cmlu ZyBwYXRoLCBzdHJpbmcgbW9kZSk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImZkb3BlbiIpXQotLQkJ cHVibGljIHN0YXRpYyBGaWxlU3RyZWFtPyBmZG9wZW4gKGludCBmaWxkZXMsIHN0cmluZyBtb2Rl KTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZnByaW50ZiIpXQotLQkJW1ByaW50ZkZvcm1hdCAoKV0K LS0JCXB1YmxpYyB2b2lkIHByaW50ZiAoc3RyaW5nIGZvcm1hdCwgLi4uKTsKLS0JCVtDQ29kZSAo Y25hbWUgPSAidmZwcmludGYiKV0KLS0JCXB1YmxpYyB2b2lkIHZwcmludGYgKHN0cmluZyBmb3Jt YXQsIHZhX2xpc3QgYXJncyk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImZwdXRjIiwgaW5zdGFuY2Vf cG9zID0gLTEpXQotLQkJcHVibGljIHZvaWQgcHV0YyAoY2hhciBjKTsKLS0JCVtDQ29kZSAoY25h bWUgPSAiZnB1dHMiLCBpbnN0YW5jZV9wb3MgPSAtMSldCi0tCQlwdWJsaWMgdm9pZCBwdXRzIChz dHJpbmcgcyk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImZnZXRjIildCi0tCQlwdWJsaWMgaW50IGdl dGMgKCk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gInVuZ2V0YyIsIGluc3RhbmNlX3BvcyA9IC0xKV0K LS0JCXB1YmxpYyBpbnQgdW5nZXRjIChpbnQgYyk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImZnZXRz IiwgaW5zdGFuY2VfcG9zID0gLTEpXQotLQkJcHVibGljIHVub3duZWQgc3RyaW5nPyBnZXRzIChj aGFyW10gcyk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImZlb2YiKV0KLS0JCXB1YmxpYyBib29sIGVv ZiAoKTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZnNjYW5mIiksIFNjYW5mRm9ybWF0XQotLQkJcHVi bGljIGludCBzY2FuZiAoc3RyaW5nIGZvcm1hdCwgLi4uKTsKLS0JCVtDQ29kZSAoY25hbWUgPSAi ZmZsdXNoIildCi0tCQlwdWJsaWMgaW50IGZsdXNoICgpOwotLQkJW0NDb2RlIChjbmFtZSA9ICJm c2VlayIpXQotLQkJcHVibGljIGludCBzZWVrIChsb25nIG9mZnNldCwgRmlsZVNlZWsgd2hlbmNl KTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZnRlbGwiKV0KLS0JCXB1YmxpYyBsb25nIHRlbGwgKCk7 Ci0tCQlbQ0NvZGUgKGNuYW1lID0gInJld2luZCIpXQotLQkJcHVibGljIHZvaWQgcmV3aW5kICgp OwotLQkJW0NDb2RlIChjbmFtZSA9ICJmaWxlbm8iKV0KLS0JCXB1YmxpYyBpbnQgZmlsZW5vICgp OwotLQkJW0NDb2RlIChjbmFtZSA9ICJmZXJyb3IiKV0KLS0JCXB1YmxpYyBpbnQgZXJyb3IgKCk7 Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImNsZWFyZXJyIildCi0tCQlwdWJsaWMgdm9pZCBjbGVhcmVy ciAoKTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZnJlYWQiLCBpbnN0YW5jZV9wb3MgPSAtMSldCi0t CQlwdWJsaWMgc2l6ZV90IHJlYWQgKFtDQ29kZSAoYXJyYXlfbGVuZ3RoX3BvcyA9IDIuMSldIHVp bnQ4W10gYnVmLCBzaXplX3Qgc2l6ZSA9IDEpOwotLQkJW0NDb2RlIChjbmFtZSA9ICJmd3JpdGUi LCBpbnN0YW5jZV9wb3MgPSAtMSldCi0tCQlwdWJsaWMgc2l6ZV90IHdyaXRlIChbQ0NvZGUgKGFy cmF5X2xlbmd0aF9wb3MgPSAyLjEpXSB1aW50OFtdIGJ1Ziwgc2l6ZV90IHNpemUgPSAxKTsKLS0K LS0JCXB1YmxpYyBzdHJpbmc/IHJlYWRfbGluZSAoKSB7Ci0tCQkJaW50IGM7Ci0tCQkJU3RyaW5n QnVpbGRlcj8gcmV0ID0gbnVsbDsKLS0JCQl3aGlsZSAoKGMgPSBnZXRjICgpKSAhPSBFT0YpIHsK LS0JCQkJaWYgKHJldCA9PSBudWxsKSB7Ci0tCQkJCQlyZXQgPSBuZXcgU3RyaW5nQnVpbGRlciAo KTsKLS0JCQkJfQotLQkJCQlpZiAoYyA9PSAnXG4nKSB7Ci0tCQkJCQlicmVhazsKLS0JCQkJfQot LQkJCQkoKCEpKHJldCkpLmFwcGVuZF9jICgoY2hhcikgYyk7Ci0tCQkJfQotLQkJCWlmIChyZXQg PT0gbnVsbCkgewotLQkJCQlyZXR1cm4gbnVsbDsKLS0JCQl9IGVsc2UgewotLQkJCQlyZXR1cm4g KCghKShyZXQpKS5zdHI7Ci0tCQkJfQotLQkJfQotLQl9Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAi c3RydWN0IHV0aW1idWYiLCBjaGVhZGVyX2ZpbGVuYW1lID0gInN5cy90eXBlcy5oLHV0aW1lLmgi KV0KLS0JcHVibGljIHN0cnVjdCBVVGltQnVmIHsKLS0JCXRpbWVfdCBhY3RpbWU7ICAgICAgIC8q IGFjY2VzcyB0aW1lICovCi0tCQl0aW1lX3QgbW9kdGltZTsgICAgICAvKiBtb2RpZmljYXRpb24g dGltZSAqLwotLQl9Ci0tCi0tCVtDQ29kZSAobG93ZXJfY2FzZV9jcHJlZml4ID0gImdfZmlsZV8i LCBjaGVhZGVyX2ZpbGVuYW1lID0gImdsaWIvZ3N0ZGlvLmgiKV0KLS0JbmFtZXNwYWNlIEZpbGVV dGlscyB7Ci0tCQlwdWJsaWMgc3RhdGljIGJvb2wgZ2V0X2NvbnRlbnRzIChzdHJpbmcgZmlsZW5h bWUsIG91dCBzdHJpbmcgY29udGVudHMsIG91dCBzaXplX3QgbGVuZ3RoID0gbnVsbCkgdGhyb3dz IEZpbGVFcnJvcjsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjgiKV0KLS0JCXB1YmxpYyBzdGF0 aWMgYm9vbCBzZXRfY29udGVudHMgKHN0cmluZyBmaWxlbmFtZSwgc3RyaW5nIGNvbnRlbnRzLCBz c2l6ZV90IGxlbmd0aCA9IC0xKSB0aHJvd3MgRmlsZUVycm9yOwotLQkJW0NDb2RlIChjbmFtZSA9 ICJnX2ZpbGVfZ2V0X2NvbnRlbnRzIildCi0tCQlwdWJsaWMgc3RhdGljIGJvb2wgZ2V0X2RhdGEg KHN0cmluZyBmaWxlbmFtZSwgW0NDb2RlICh0eXBlID0gImdjaGFyKioiLCBhcnJheV9sZW5ndGhf dHlwZSA9ICJzaXplX3QiKV0gb3V0IHVpbnQ4W10gY29udGVudHMpIHRocm93cyBGaWxlRXJyb3I7 Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImdfZmlsZV9zZXRfY29udGVudHMiKV0KLS0JCXB1YmxpYyBz dGF0aWMgYm9vbCBzZXRfZGF0YSAoc3RyaW5nIGZpbGVuYW1lLCBbQ0NvZGUgKHR5cGUgPSAiY29u c3QgY2hhcioiLCBhcnJheV9sZW5ndGhfdHlwZSA9ICJzaXplX3QiKV0gdWludDhbXSBjb250ZW50 cykgdGhyb3dzIEZpbGVFcnJvcjsKLS0JCXB1YmxpYyBzdGF0aWMgYm9vbCB0ZXN0IChzdHJpbmcg ZmlsZW5hbWUsIEZpbGVUZXN0IHRlc3QpOwotLQkJcHVibGljIHN0YXRpYyBpbnQgb3Blbl90bXAg KHN0cmluZyB0bXBsLCBvdXQgc3RyaW5nIG5hbWVfdXNlZCkgdGhyb3dzIEZpbGVFcnJvcjsKLS0J CVtWZXJzaW9uIChzaW5jZSA9ICIyLjQiKV0KLS0JCXB1YmxpYyBzdGF0aWMgc3RyaW5nIHJlYWRf bGluayAoc3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgRmlsZUVycm9yOwotLQkJcHVibGljIHN0YXRp YyBpbnQgZXJyb3JfZnJvbV9lcnJubyAoaW50IGVycl9ubyk7Ci0tCi0tCQlbQ0NvZGUgKGNuYW1l ID0gImdfbWtzdGVtcCIpXQotLQkJcHVibGljIHN0YXRpYyBpbnQgbWtzdGVtcCAoc3RyaW5nIHRt cGwpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuNiIpXQotLQkJW0NDb2RlIChjbmFtZSA9ICJn X3JlbmFtZSIpXQotLQkJcHVibGljIHN0YXRpYyBpbnQgcmVuYW1lIChzdHJpbmcgb2xkZmlsZW5h bWUsIHN0cmluZyBuZXdmaWxlbmFtZSk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi42IildCi0t CQlbQ0NvZGUgKGNuYW1lID0gImdfcmVtb3ZlIildCi0tCQlwdWJsaWMgc3RhdGljIGludCByZW1v dmUgKHN0cmluZyBmaWxlbmFtZSk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImdfdW5saW5rIildCi0t CQlwdWJsaWMgc3RhdGljIGludCB1bmxpbmsgKHN0cmluZyBmaWxlbmFtZSk7Ci0tCQlbVmVyc2lv biAoc2luY2UgPSAiMi44IildCi0tCQlbQ0NvZGUgKGNuYW1lID0gImdfY2htb2QiKV0KLS0JCXB1 YmxpYyBzdGF0aWMgaW50IGNobW9kIChzdHJpbmcgZmlsZW5hbWUsIGludCBtb2RlKTsKLS0JCVtW ZXJzaW9uIChzaW5jZSA9ICIyLjE4IildCi0tCQlbQ0NvZGUgKGNuYW1lID0gImdfdXRpbWUiKV0K LS0JCXB1YmxpYyBzdGF0aWMgaW50IHV0aW1lIChzdHJpbmcgZmlsZW5hbWUsIFVUaW1CdWY/IHRp bWVzID0gbnVsbCk7Ci0tCi0tCQlbQ0NvZGUgKGNuYW1lID0gInN5bWxpbmsiLCBjaGVhZGVyX2Zp bGVuYW1lID0gInVuaXN0ZC5oIildCi0tCQlwdWJsaWMgc3RhdGljIGludCBzeW1saW5rIChzdHJp bmcgb2xkcGF0aCwgc3RyaW5nIG5ld3BhdGgpOwotLQotLQkJW0NDb2RlIChjbmFtZSA9ICJjbG9z ZSIsIGNoZWFkZXJfZmlsZW5hbWUgPSAidW5pc3RkLmgiKV0KLS0JCXB1YmxpYyBzdGF0aWMgaW50 IGNsb3NlIChpbnQgZmQpOwotLQotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMzYiKV0KLS0JCVtD Q29kZSAoY25hbWUgPSAiZ19jbG9zZSIpXQotLQkJcHVibGljIHN0YXRpYyBib29sIGNsb3NlX2No ZWNrZWQgKGludCBmZCkgdGhyb3dzIEZpbGVFcnJvcjsKLS0JfQotLQotLQlbQ0NvZGUgKGNuYW1l ID0gInN0cnVjdCBzdGF0IiwgY2hlYWRlcl9maWxlbmFtZSA9ICJzeXMvc3RhdC5oLGdsaWIvZ3N0 ZGlvLmgiKV0KLS0JcHVibGljIHN0cnVjdCBTdGF0IHsKLS0JCXB1YmxpYyB0aW1lX3Qgc3RfYXRp bWU7Ci0tCQlwdWJsaWMgdGltZV90IHN0X210aW1lOwotLQkJcHVibGljIHRpbWVfdCBzdF9jdGlt ZTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZ19zdGF0IiwgaW5zdGFuY2VfcG9zID0gLTEpXQotLQkJ cHVibGljIFN0YXQgKHN0cmluZyBmaWxlbmFtZSk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi42 IildCi0tCQlbQ0NvZGUgKGNuYW1lID0gImdfbHN0YXQiLCBpbnN0YW5jZV9wb3MgPSAtMSldCi0t CQlwdWJsaWMgU3RhdC5sIChzdHJpbmcgZmlsZW5hbWUpOwotLQl9Ci0tCi0tCVtDb21wYWN0XQot LQlbQ0NvZGUgKGZyZWVfZnVuY3Rpb24gPSAiZ19kaXJfY2xvc2UiKV0KLS0JcHVibGljIGNsYXNz IERpciB7Ci0tCQlwdWJsaWMgc3RhdGljIERpciBvcGVuIChzdHJpbmcgZmlsZW5hbWUsIHVpbnQg X2ZsYWdzID0gMCkgdGhyb3dzIEZpbGVFcnJvcjsKLS0JCXB1YmxpYyB1bm93bmVkIHN0cmluZz8g cmVhZF9uYW1lICgpOwotLQkJcHVibGljIHZvaWQgcmV3aW5kICgpOwotLQl9Ci0tCi0tCVtDQ29k ZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJnbGliL2dzdGRpby5oIildCi0tCW5hbWVzcGFjZSBEaXJV dGlscyB7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi42IildCi0tCQlbQ0NvZGUgKGNuYW1lID0g ImdfbWtkaXIiKV0KLS0JCXB1YmxpYyBzdGF0aWMgaW50IGNyZWF0ZSAoc3RyaW5nIHBhdGhuYW1l LCBpbnQgbW9kZSk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi44IildCi0tCQlbQ0NvZGUgKGNu YW1lID0gImdfbWtkaXJfd2l0aF9wYXJlbnRzIildCi0tCQlwdWJsaWMgc3RhdGljIGludCBjcmVh dGVfd2l0aF9wYXJlbnRzIChzdHJpbmcgcGF0aG5hbWUsIGludCBtb2RlKTsKLS0JCVtWZXJzaW9u IChzaW5jZSA9ICIyLjMwIildCi0tCQlbQ0NvZGUgKGNuYW1lID0gIm1rZHRlbXAiKV0KLS0JCXB1 YmxpYyBzdGF0aWMgc3RyaW5nIG1rZHRlbXAgKG93bmVkIHN0cmluZyB0ZW1wbGF0ZSk7Ci0tCQlb VmVyc2lvbiAoc2luY2UgPSAiMi4zMCIpXQotLQkJW0NDb2RlIChjbmFtZSA9ICJnX2Rpcl9tYWtl X3RtcCIpXQotLQkJcHVibGljIHN0YXRpYyBzdHJpbmcgbWFrZV90bXAgKHN0cmluZyB0bXBsKSB0 aHJvd3MgRmlsZUVycm9yOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuNiIpXQotLQkJW0NDb2Rl IChjbmFtZSA9ICJnX3JtZGlyIildCi0tCQlwdWJsaWMgc3RhdGljIGludCByZW1vdmUgKHN0cmlu ZyBmaWxlbmFtZSk7Ci0tCX0KLS0KLS0JW0NvbXBhY3RdCi0tCVtWZXJzaW9uIChzaW5jZSA9ICIy LjIyIildCi0tCVtDQ29kZSAocmVmX2Z1bmN0aW9uID0gImdfbWFwcGVkX2ZpbGVfcmVmIiwgdW5y ZWZfZnVuY3Rpb24gPSAiZ19tYXBwZWRfZmlsZV91bnJlZiIpXQotLQlwdWJsaWMgY2xhc3MgTWFw cGVkRmlsZSB7Ci0tCQlwdWJsaWMgTWFwcGVkRmlsZSAoc3RyaW5nIGZpbGVuYW1lLCBib29sIHdy aXRhYmxlKSB0aHJvd3MgRmlsZUVycm9yOwotLQkJcHVibGljIHNpemVfdCBnZXRfbGVuZ3RoICgp OwotLQkJcHVibGljIHVub3duZWQgY2hhciogZ2V0X2NvbnRlbnRzICgpOwotLQkJW1ZlcnNpb24g KHNpbmNlID0gIjIuMzQiKV0KLS0JCXB1YmxpYyBCeXRlcyBnZXRfYnl0ZXMgKCk7Ci0tCX0KLS0K LS0JW0NDb2RlIChjbmFtZSA9ICJzdGRpbiIsIGNoZWFkZXJfZmlsZW5hbWUgPSAic3RkaW8uaCIp XQotLQlwdWJsaWMgc3RhdGljIEZpbGVTdHJlYW0gc3RkaW47Ci0tCi0tCVtDQ29kZSAoY25hbWUg PSAic3Rkb3V0IiwgY2hlYWRlcl9maWxlbmFtZSA9ICJzdGRpby5oIildCi0tCXB1YmxpYyBzdGF0 aWMgRmlsZVN0cmVhbSBzdGRvdXQ7Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAic3RkZXJyIiwgY2hl YWRlcl9maWxlbmFtZSA9ICJzdGRpby5oIildCi0tCXB1YmxpYyBzdGF0aWMgRmlsZVN0cmVhbSBz dGRlcnI7Ci0tCi0tCS8qIFVSSSBGdW5jdGlvbnMgKi8KLS0KLS0JbmFtZXNwYWNlIFVyaSB7Ci0t CQlwdWJsaWMgY29uc3Qgc3RyaW5nIFJFU0VSVkVEX0NIQVJTX0FMTE9XRURfSU5fUEFUSDsKLS0J CXB1YmxpYyBjb25zdCBzdHJpbmcgUkVTRVJWRURfQ0hBUlNfQUxMT1dFRF9JTl9QQVRIX0VMRU1F TlQ7Ci0tCQlwdWJsaWMgY29uc3Qgc3RyaW5nIFJFU0VSVkVEX0NIQVJTX0FMTE9XRURfSU5fVVNF UklORk87Ci0tCQlwdWJsaWMgY29uc3Qgc3RyaW5nIFJFU0VSVkVEX0NIQVJTX0dFTkVSSUNfREVM SU1JVEVSUzsKLS0JCXB1YmxpYyBjb25zdCBzdHJpbmcgUkVTRVJWRURfQ0hBUlNfU1VCQ09NUE9O RU5UX0RFTElNSVRFUlM7Ci0tCi0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xNiIpXQotLQkJcHVi bGljIHN0YXRpYyBzdHJpbmc/IHBhcnNlX3NjaGVtZSAoc3RyaW5nIHVyaSk7Ci0tCQlbVmVyc2lv biAoc2luY2UgPSAiMi4xNiIpXQotLQkJcHVibGljIHN0YXRpYyBzdHJpbmcgZXNjYXBlX3N0cmlu ZyAoc3RyaW5nIHVuZXNjYXBlZCwgc3RyaW5nPyByZXNlcnZlZF9jaGFyc19hbGxvd2VkID0gbnVs bCwgYm9vbCBhbGxvd191dGY4ID0gdHJ1ZSk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xNiIp XQotLQkJcHVibGljIHN0YXRpYyBzdHJpbmc/IHVuZXNjYXBlX3N0cmluZyAoc3RyaW5nIGVzY2Fw ZWRfc3RyaW5nLCBzdHJpbmc/IGlsbGVnYWxfY2hhcmFjdGVycyA9IG51bGwpOwotLQkJW1ZlcnNp b24gKHNpbmNlID0gIjIuMTYiKV0KLS0JCXB1YmxpYyBzdGF0aWMgc3RyaW5nPyB1bmVzY2FwZV9z ZWdtZW50IChzdHJpbmc/IGVzY2FwZWRfc3RyaW5nLCBzdHJpbmc/IGVzY2FwZWRfc3RyaW5nX2Vu ZCwgc3RyaW5nPyBpbGxlZ2FsX2NoYXJhY3RlcnMgPSBudWxsKTsKLS0JCVtWZXJzaW9uIChzaW5j ZSA9ICIyLjYiKV0KLS0JCVtDQ29kZSAoYXJyYXlfbGVuZ3RoID0gZmFsc2UsIGFycmF5X251bGxf dGVybWluYXRlZCA9IHRydWUpXQotLQkJcHVibGljIHN0YXRpYyBzdHJpbmdbXSBsaXN0X2V4dHJh Y3RfdXJpcyAoc3RyaW5nIHVyaV9saXN0KTsKLS0JfQotLQotLQkvKiBTaGVsbC1yZWxhdGVkIFV0 aWxpdGllcyAqLwotLQotLQlwdWJsaWMgZXJyb3Jkb21haW4gU2hlbGxFcnJvciB7Ci0tCQlCQURf UVVPVElORywKLS0JCUVNUFRZX1NUUklORywKLS0JCUZBSUxFRDsKLS0JCXB1YmxpYyBzdGF0aWMg R0xpYi5RdWFyayBxdWFyayAoKTsKLS0JfQotLQotLQluYW1lc3BhY2UgU2hlbGwgewotLQkJcHVi bGljIHN0YXRpYyBib29sIHBhcnNlX2FyZ3YgKHN0cmluZyBjb21tYW5kX2xpbmUsIFtDQ29kZSAo YXJyYXlfbGVuZ3RoX3BvcyA9IDEuOSldIG91dCBzdHJpbmdbXSBhcmd2cCkgdGhyb3dzIFNoZWxs RXJyb3I7Ci0tCQlwdWJsaWMgc3RhdGljIHN0cmluZyBxdW90ZSAoc3RyaW5nIHVucXVvdGVkX3N0 cmluZyk7Ci0tCQlwdWJsaWMgc3RhdGljIHN0cmluZyB1bnF1b3RlIChzdHJpbmcgcXVvdGVkX3N0 cmluZykgdGhyb3dzIFNoZWxsRXJyb3I7Ci0tCX0KLS0KLS0JLyogQ29tbWFuZGxpbmUgb3B0aW9u IHBhcnNlciAqLwotLQotLQlwdWJsaWMgZXJyb3Jkb21haW4gT3B0aW9uRXJyb3IgewotLQkJVU5L Tk9XTl9PUFRJT04sCi0tCQlCQURfVkFMVUUsCi0tCQlGQUlMRUQ7Ci0tCQlwdWJsaWMgc3RhdGlj IEdMaWIuUXVhcmsgcXVhcmsgKCk7Ci0tCX0KLS0KLS0JW0NvbXBhY3RdCi0tCVtWZXJzaW9uIChz aW5jZSA9ICIyLjYiKV0KLS0JW0NDb2RlIChmcmVlX2Z1bmN0aW9uID0gImdfb3B0aW9uX2NvbnRl eHRfZnJlZSIpXQotLQlwdWJsaWMgY2xhc3MgT3B0aW9uQ29udGV4dCB7Ci0tCQlwdWJsaWMgT3B0 aW9uQ29udGV4dCAoc3RyaW5nPyBwYXJhbWV0ZXJfc3RyaW5nID0gbnVsbCk7Ci0tCQlbVmVyc2lv biAoc2luY2UgPSAiMi4xMiIpXQotLQkJcHVibGljIHZvaWQgc2V0X3N1bW1hcnkgKHN0cmluZyBz dW1tYXJ5KTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjEyIildCi0tCQlwdWJsaWMgdW5vd25l ZCBzdHJpbmcgZ2V0X3N1bW1hcnkgKCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xMiIpXQot LQkJcHVibGljIHZvaWQgc2V0X2Rlc2NyaXB0aW9uIChzdHJpbmcgZGVzY3JpcHRpb24pOwotLQkJ W1ZlcnNpb24gKHNpbmNlID0gIjIuMTIiKV0KLS0JCXB1YmxpYyB1bm93bmVkIHN0cmluZyBnZXRf ZGVzY3JpcHRpb24gKCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xMiIpXQotLQkJcHVibGlj IHZvaWQgc2V0X3RyYW5zbGF0ZV9mdW5jIChUcmFuc2xhdGVGdW5jIGZ1bmMsIERlc3Ryb3lOb3Rp Znk/IGRlc3Ryb3lfbm90aWZ5KTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjEyIildCi0tCQlw dWJsaWMgdm9pZCBzZXRfdHJhbnNsYXRpb25fZG9tYWluIChzdHJpbmcgZG9tYWluKTsKLS0JCXB1 YmxpYyBib29sIHBhcnNlIChbQ0NvZGUgKGFycmF5X2xlbmd0aF9wb3MgPSAwLjkpXSByZWYgdW5v d25lZCBzdHJpbmdbXSBhcmd2KSB0aHJvd3MgT3B0aW9uRXJyb3I7Ci0tCQlbVmVyc2lvbiAoc2lu Y2UgPSAiMi40MCIpXQotLQkJcHVibGljIGJvb2wgcGFyc2Vfc3RydiAoW0NDb2RlIChhcnJheV9s ZW5ndGggPSBmYWxzZSwgYXJyYXlfbnVsbF90ZXJtaW5hdGVkID0gdHJ1ZSldIHJlZiBzdHJpbmdb XSBhcmd2KSB0aHJvd3MgT3B0aW9uRXJyb3I7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfaGVscF9lbmFi bGVkIChib29sIGhlbHBfZW5hYmxlZCk7Ci0tCQlwdWJsaWMgYm9vbCBnZXRfaGVscF9lbmFibGVk ICgpOwotLQkJcHVibGljIHZvaWQgc2V0X2lnbm9yZV91bmtub3duX29wdGlvbnMgKGJvb2wgaWdu b3JlX3Vua25vd24pOwotLQkJcHVibGljIGJvb2wgZ2V0X2lnbm9yZV91bmtub3duX29wdGlvbnMg KCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xNCIpXQotLQkJcHVibGljIHN0cmluZyBnZXRf aGVscCAoYm9vbCBtYWluX2hlbHAsIE9wdGlvbkdyb3VwPyBncm91cCk7Ci0tCQlwdWJsaWMgdm9p ZCBhZGRfbWFpbl9lbnRyaWVzIChbQ0NvZGUgKGFycmF5X2xlbmd0aCA9IGZhbHNlLCBhcnJheV9u dWxsX3Rlcm1pbmF0ZWQgPSB0cnVlKV0gT3B0aW9uRW50cnlbXSBlbnRyaWVzLCBzdHJpbmc/IHRy YW5zbGF0aW9uX2RvbWFpbik7Ci0tCQlwdWJsaWMgdm9pZCBhZGRfZ3JvdXAgKG93bmVkIE9wdGlv bkdyb3VwIGdyb3VwKTsKLS0JCXB1YmxpYyB2b2lkIHNldF9tYWluX2dyb3VwIChvd25lZCBPcHRp b25Hcm91cCBncm91cCk7Ci0tCQlwdWJsaWMgdW5vd25lZCBPcHRpb25Hcm91cCBnZXRfbWFpbl9n cm91cCAoKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjQ0IildCi0tCQlwdWJsaWMgdm9pZCBz ZXRfc3RyaWN0X3Bvc2l4IChib29sIHN0cmljdF9wb3NpeCk7Ci0tCQlbVmVyc2lvbiAoc2luY2Ug PSAiMi40NCIpXQotLQkJcHVibGljIGJvb2wgZ2V0X3N0cmljdF9wb3NpeCAoKTsKLS0JfQotLQot LQlwdWJsaWMgZGVsZWdhdGUgdW5vd25lZCBzdHJpbmcgVHJhbnNsYXRlRnVuYyAoc3RyaW5nIHN0 cik7Ci0tCi0tCXB1YmxpYyBjb25zdCBzdHJpbmcgT1BUSU9OX1JFTUFJTklORzsKLS0KLS0JW0ND b2RlIChoYXNfdHlwZV9pZCA9IGZhbHNlKV0KLS0JcHVibGljIGVudW0gT3B0aW9uQXJnIHsKLS0J CU5PTkUsCi0tCQlTVFJJTkcsCi0tCQlJTlQsCi0tCQlDQUxMQkFDSywKLS0JCUZJTEVOQU1FLAot LQkJU1RSSU5HX0FSUkFZLAotLQkJRklMRU5BTUVfQVJSQVksCi0tCQlET1VCTEUsCi0tCQlJTlQ2 NAotLQl9Ci0tCi0tCVtGbGFnc10KLS0JW0NDb2RlIChjcHJlZml4ID0gIkdfT1BUSU9OX0ZMQUdf IiwgaGFzX3R5cGVfaWQgPSBmYWxzZSldCi0tCXB1YmxpYyBlbnVtIE9wdGlvbkZsYWdzIHsKLS0J CVtWZXJzaW9uIChzaW5jZSA9ICIyLjQyIildCi0tCQlOT05FLAotLQkJSElEREVOLAotLQkJSU5f TUFJTiwKLS0JCVJFVkVSU0UsCi0tCQlOT19BUkcsCi0tCQlGSUxFTkFNRSwKLS0JCU9QVElPTkFM X0FSRywKLS0JCU5PQUxJQVMKLS0JfQotLQotLQlwdWJsaWMgc3RydWN0IE9wdGlvbkVudHJ5IHsK LS0JCXB1YmxpYyB1bm93bmVkIHN0cmluZyBsb25nX25hbWU7Ci0tCQlwdWJsaWMgY2hhciBzaG9y dF9uYW1lOwotLQkJcHVibGljIGludCBmbGFnczsKLS0KLS0JCXB1YmxpYyBPcHRpb25BcmcgYXJn OwotLQkJcHVibGljIHZvaWQqIGFyZ19kYXRhOwotLQotLQkJcHVibGljIHVub3duZWQgc3RyaW5n IGRlc2NyaXB0aW9uOwotLQkJcHVibGljIHVub3duZWQgc3RyaW5nPyBhcmdfZGVzY3JpcHRpb247 Ci0tCX0KLS0KLS0JW0NvbXBhY3RdCi0tI2lmIEdMSUJfMl80NAotLQlbVmVyc2lvbiAoc2luY2Ug PSAiMi40NCIpXQotLQlbQ0NvZGUgKHJlZl9mdW5jdGlvbiA9ICJnX29wdGlvbl9ncm91cF9yZWYi LCB1bnJlZl9mdW5jdGlvbiA9ICJnX29wdGlvbl9ncm91cF91bnJlZiIsIHR5cGVfaWQgPSAiR19U WVBFX09QVElPTl9HUk9VUCIpXQotLSNlbHNlCi0tCVtWZXJzaW9uIChzaW5jZSA9ICIyLjYiKV0K LS0JW0NDb2RlIChmcmVlX2Z1bmN0aW9uID0gImdfb3B0aW9uX2dyb3VwX2ZyZWUiKV0KLS0jZW5k aWYKLS0JcHVibGljIGNsYXNzIE9wdGlvbkdyb3VwIHsKLS0JCXB1YmxpYyBPcHRpb25Hcm91cCAo c3RyaW5nIG5hbWUsIHN0cmluZyBkZXNjcmlwdGlvbiwgc3RyaW5nIGhlbHBfZGVzY3JpcHRpb24s IHZvaWQqIHVzZXJfZGF0YSA9IG51bGwsIERlc3Ryb3lOb3RpZnk/IGRlc3Ryb3kgPSBudWxsKTsK LS0JCXB1YmxpYyB2b2lkIGFkZF9lbnRyaWVzIChbQ0NvZGUgKGFycmF5X2xlbmd0aCA9IGZhbHNl LCBhcnJheV9udWxsX3Rlcm1pbmF0ZWQgPSB0cnVlKV0gT3B0aW9uRW50cnlbXSBlbnRyaWVzKTsK LS0JCXB1YmxpYyB2b2lkIHNldF9wYXJzZV9ob29rcyAoT3B0aW9uUGFyc2VGdW5jPyBwcmVfcGFy c2VfZnVuYywgT3B0aW9uUGFyc2VGdW5jPyBwb3N0X3BhcnNlX2hvb2spOwotLQkJcHVibGljIHZv aWQgc2V0X2Vycm9yX2hvb2sgKE9wdGlvbkVycm9yRnVuYz8gZXJyb3JfZnVuYyk7Ci0tCQlwdWJs aWMgdm9pZCBzZXRfdHJhbnNsYXRlX2Z1bmMgKG93bmVkIFRyYW5zbGF0ZUZ1bmM/IGZ1bmMpOwot LQkJcHVibGljIHZvaWQgc2V0X3RyYW5zbGF0aW9uX2RvbWFpbiAoc3RyaW5nIGRvbWFpbik7Ci0t CX0KLS0KLS0JW0NDb2RlIChoYXNfdGFyZ2V0ID0gZmFsc2UpXQotLQlwdWJsaWMgZGVsZWdhdGUg Ym9vbCBPcHRpb25QYXJzZUZ1bmMgKE9wdGlvbkNvbnRleHQgY29udGV4dCwgT3B0aW9uR3JvdXAg Z3JvdXAsIHZvaWQqIGRhdGEpIHRocm93cyBPcHRpb25FcnJvcjsKLS0JW0NDb2RlIChoYXNfdGFy Z2V0ID0gZmFsc2UpXQotLQlwdWJsaWMgZGVsZWdhdGUgdm9pZCBPcHRpb25FcnJvckZ1bmMgKE9w dGlvbkNvbnRleHQgY29udGV4dCwgT3B0aW9uR3JvdXAgZ3JvdXAsIHZvaWQqIGRhdGEsIHJlZiBF cnJvciBlcnJvcik7Ci0tCVtDQ29kZSAoaGFzX3RhcmdldCA9IGZhbHNlKV0KLS0JcHVibGljIGRl bGVnYXRlIGJvb2wgT3B0aW9uQXJnRnVuYyAoc3RyaW5nIG9wdGlvbl9uYW1lLCBzdHJpbmcgdmFs LCB2b2lkKiBkYXRhKSB0aHJvd3MgT3B0aW9uRXJyb3I7Ci0tCi0tCS8qIFBlcmwtY29tcGF0aWJs ZSByZWd1bGFyIGV4cHJlc3Npb25zICovCi0tCi0tCVtWZXJzaW9uIChzaW5jZSA9ICIyLjE0Iild Ci0tCXB1YmxpYyBlcnJvcmRvbWFpbiBSZWdleEVycm9yIHsKLS0JCUNPTVBJTEUsCi0tCQlPUFRJ TUlaRSwKLS0JCVJFUExBQ0UsCi0tCQlNQVRDSCwKLS0JCUlOVEVSTkFMLAotLQkJU1RSQVlfQkFD S1NMQVNILAotLQkJTUlTU0lOR19DT05UUk9MX0NIQVIsCi0tCQlVTlJFQ09HTklaRURfRVNDQVBF LAotLQkJUVVBTlRJRklFUlNfT1VUX09GX09SREVSLAotLQkJUVVBTlRJRklFUl9UT09fQklHLAot LQkJVU5URVJNSU5BVEVEX0NIQVJBQ1RFUl9DTEFTUywKLS0JCUlOVkFMSURfRVNDQVBFX0lOX0NI QVJBQ1RFUl9DTEFTUywKLS0JCVJBTkdFX09VVF9PRl9PUkRFUiwKLS0JCU5PVEhJTkdfVE9fUkVQ RUFULAotLQkJVU5SRUNPR05JWkVEX0NIQVJBQ1RFUiwKLS0JCVBPU0lYX05BTUVEX0NMQVNTX09V VFNJREVfQ0xBU1MsCi0tCQlVTk1BVENIRURfUEFSRU5USEVTSVMsCi0tCQlJTkVYSVNURU5UX1NV QlBBVFRFUk5fUkVGRVJFTkNFLAotLQkJVU5URVJNSU5BVEVEX0NPTU1FTlQsCi0tCQlFWFBSRVNT SU9OX1RPT19MQVJHRSwKLS0JCU1FTU9SWV9FUlJPUiwKLS0JCVZBUklBQkxFX0xFTkdUSF9MT09L QkVISU5ELAotLQkJTUFMRk9STUVEX0NPTkRJVElPTiwKLS0JCVRPT19NQU5ZX0NPTkRJVElPTkFM X0JSQU5DSEVTLAotLQkJQVNTRVJUSU9OX0VYUEVDVEVELAotLQkJVU5LTk9XTl9QT1NJWF9DTEFT U19OQU1FLAotLQkJUE9TSVhfQ09MTEFUSU5HX0VMRU1FTlRTX05PVF9TVVBQT1JURUQsCi0tCQlI RVhfQ09ERV9UT09fTEFSR0UsCi0tCQlJTlZBTElEX0NPTkRJVElPTiwKLS0JCVNJTkdMRV9CWVRF X01BVENIX0lOX0xPT0tCRUhJTkQsCi0tCQlJTkZJTklURV9MT09QLAotLQkJTUlTU0lOR19TVUJQ QVRURVJOX05BTUVfVEVSTUlOQVRPUiwKLS0JCURVUExJQ0FURV9TVUJQQVRURVJOX05BTUUsCi0t CQlNQUxGT1JNRURfUFJPUEVSVFksCi0tCQlVTktOT1dOX1BST1BFUlRZLAotLQkJU1VCUEFUVEVS Tl9OQU1FX1RPT19MT05HLAotLQkJVE9PX01BTllfU1VCUEFUVEVSTlMsCi0tCQlJTlZBTElEX09D VEFMX1ZBTFVFLAotLQkJVE9PX01BTllfQlJBTkNIRVNfSU5fREVGSU5FLAotLQkJREVGSU5FX1JF UEVUSU9OLAotLQkJSU5DT05TSVNURU5UX05FV0xJTkVfT1BUSU9OUywKLS0JCU1JU1NJTkdfQkFD S19SRUZFUkVOQ0UsCi0tCQlJTlZBTElEX1JFTEFUSVZFX1JFRkVSRU5DRSwKLS0JCUJBQ0tUUkFD S0lOR19DT05UUk9MX1ZFUkJfQVJHVU1FTlRfRk9SQklEREVOLAotLQkJVU5LTk9XTl9CQUNLVFJB Q0tJTkdfQ09OVFJPTF9WRVJCLAotLQkJTlVNQkVSX1RPT19CSUcsCi0tCQlNSVNTSU5HX1NVQlBB VFRFUk5fTkFNRSwKLS0JCU1JU1NJTkdfRElHSVQsCi0tCQlJTlZBTElEX0RBVEFfQ0hBUkFDVEVS LAotLQkJRVhUUkFfU1VCUEFUVEVSTl9OQU1FLAotLQkJQkFDS1RSQUNLSU5HX0NPTlRST0xfVkVS Ql9BUkdVTUVOVF9SRVFVSVJFRCwKLS0JCUlOVkFMSURfQ09OVFJPTF9DSEFSLAotLQkJTUlTU0lO R19OQU1FLAotLQkJTk9UX1NVUFBPUlRFRF9JTl9DTEFTUywKLS0JCVRPT19NQU5ZX0ZPUldBUkRf UkVGRVJFTkNFUywKLS0JCU5BTUVfVE9PX0xPTkcsCi0tCQlDSEFSQUNURVJfVkFMVUVfVE9PX0xB UkdFOwotLQkJcHVibGljIHN0YXRpYyBHTGliLlF1YXJrIHF1YXJrICgpOwotLQl9Ci0tCi0tCVtW ZXJzaW9uIChzaW5jZSA9ICIyLjE0IildCi0tCVtDQ29kZSAoY3ByZWZpeCA9ICJHX1JFR0VYXyIs IGhhc190eXBlX2lkID0gZmFsc2UpXQotLQlbRmxhZ3NdCi0tCXB1YmxpYyBlbnVtIFJlZ2V4Q29t cGlsZUZsYWdzIHsKLS0JCUNBU0VMRVNTLAotLQkJTVVMVElMSU5FLAotLQkJRE9UQUxMLAotLQkJ RVhURU5ERUQsCi0tCQlBTkNIT1JFRCwKLS0JCURPTExBUl9FTkRPTkxZLAotLQkJVU5HUkVFRFks Ci0tCQlSQVcsCi0tCQlOT19BVVRPX0NBUFRVUkUsCi0tCQlPUFRJTUlaRSwKLS0JCURVUE5BTUVT LAotLQkJTkVXTElORV9DUiwKLS0JCU5FV0xJTkVfTEYsCi0tCQlORVdMSU5FX0NSTEYsCi0tCQlO RVdMSU5FX0FOWUNSTEYsCi0tCQlCU1JfQU5ZQ1JMRiwKLS0JCUpBVkFTQ1JJUFRfQ09NUEFUCi0t CX0KLS0KLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuMTQiKV0KLS0JW0NDb2RlIChjcHJlZml4ID0g IkdfUkVHRVhfTUFUQ0hfIiwgaGFzX3R5cGVfaWQgPSBmYWxzZSldCi0tCVtGbGFnc10KLS0JcHVi bGljIGVudW0gUmVnZXhNYXRjaEZsYWdzIHsKLS0JCUFOQ0hPUkVELAotLQkJTk9UQk9MLAotLQkJ Tk9URU9MLAotLQkJTk9URU1QVFksCi0tCQlQQVJUSUFMLAotLQkJTkVXTElORV9DUiwKLS0JCU5F V0xJTkVfTEYsCi0tCQlORVdMSU5FX0NSTEYsCi0tCQlORVdMSU5FX0FOWSwKLS0JCU5FV0xJTkVf QU5ZQ1JMRiwKLS0JCUJTUl9BTllDUkxGLAotLQkJQlNSX0FOWSwKLS0JCVBBUlRJQUxfU09GVCwK LS0JCVBBUlRJQUxfSEFSRCwKLS0JCU5PVEVNUFRZX0FUU1RBUlQKLS0JfQotLQotLQlbQ29tcGFj dF0KLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuMTQiKV0KLS0JW0NDb2RlIChyZWZfZnVuY3Rpb24g PSAiZ19yZWdleF9yZWYiLCB1bnJlZl9mdW5jdGlvbiA9ICJnX3JlZ2V4X3VucmVmIiwgdHlwZV9p ZCA9ICJHX1RZUEVfUkVHRVgiKV0KLS0JcHVibGljIGNsYXNzIFJlZ2V4IHsKLS0JCXB1YmxpYyBS ZWdleCAoc3RyaW5nIHBhdHRlcm4sIFJlZ2V4Q29tcGlsZUZsYWdzIGNvbXBpbGVfb3B0aW9ucyA9 IDAsIFJlZ2V4TWF0Y2hGbGFncyBtYXRjaF9vcHRpb25zID0gMCkgdGhyb3dzIFJlZ2V4RXJyb3I7 Ci0tCQlwdWJsaWMgdW5vd25lZCBzdHJpbmcgZ2V0X3BhdHRlcm4gKCk7Ci0tCQlbVmVyc2lvbiAo c2luY2UgPSAiMi4yNiIpXQotLQkJcHVibGljIFJlZ2V4Q29tcGlsZUZsYWdzIGdldF9jb21waWxl X2ZsYWdzICgpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMzQiKV0KLS0JCXB1YmxpYyBib29s IGdldF9oYXNfY3Jfb3JfbGYgKCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4yNiIpXQotLQkJ cHVibGljIFJlZ2V4TWF0Y2hGbGFncyBnZXRfbWF0Y2hfZmxhZ3MgKCk7Ci0tCQlwdWJsaWMgaW50 IGdldF9tYXhfYmFja3JlZiAoKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjM4IildCi0tCQlw dWJsaWMgaW50IGdldF9tYXhfbG9va2JlaGluZCAoKTsKLS0JCXB1YmxpYyBpbnQgZ2V0X2NhcHR1 cmVfY291bnQgKCk7Ci0tCQlwdWJsaWMgaW50IGdldF9zdHJpbmdfbnVtYmVyIChzdHJpbmcgbmFt ZSk7Ci0tCQlwdWJsaWMgc3RhdGljIHN0cmluZyBlc2NhcGVfc3RyaW5nIChzdHJpbmcgc3RyLCBp bnQgbGVuZ3RoID0gLTEpOwotLQkJcHVibGljIHN0YXRpYyBib29sIG1hdGNoX3NpbXBsZSAoc3Ry aW5nIHBhdHRlcm4sIHN0cmluZyBzdHIsIFJlZ2V4Q29tcGlsZUZsYWdzIGNvbXBpbGVfb3B0aW9u cyA9IDAsIFJlZ2V4TWF0Y2hGbGFncyBtYXRjaF9vcHRpb25zID0gMCk7Ci0tCQlwdWJsaWMgYm9v bCBtYXRjaCAoc3RyaW5nIHN0ciwgUmVnZXhNYXRjaEZsYWdzIG1hdGNoX29wdGlvbnMgPSAwLCBv dXQgTWF0Y2hJbmZvIG1hdGNoX2luZm8gPSBudWxsKTsKLS0JCXB1YmxpYyBib29sIG1hdGNoX2Z1 bGwgKHN0cmluZyBzdHIsIHNzaXplX3Qgc3RyaW5nX2xlbiA9IC0xLCBpbnQgc3RhcnRfcG9zaXRp b24gPSAwLCBSZWdleE1hdGNoRmxhZ3MgbWF0Y2hfb3B0aW9ucyA9IDAsIG91dCBNYXRjaEluZm8g bWF0Y2hfaW5mbyA9IG51bGwpIHRocm93cyBSZWdleEVycm9yOwotLQkJcHVibGljIGJvb2wgbWF0 Y2hfYWxsIChzdHJpbmcgc3RyLCBSZWdleE1hdGNoRmxhZ3MgbWF0Y2hfb3B0aW9ucyA9IDAsIG91 dCBNYXRjaEluZm8gbWF0Y2hfaW5mbyA9IG51bGwpOwotLQkJcHVibGljIGJvb2wgbWF0Y2hfYWxs X2Z1bGwgKHN0cmluZyBzdHIsIHNzaXplX3Qgc3RyaW5nX2xlbiA9IC0xLCBpbnQgc3RhcnRfcG9z aXRpb24gPSAwLCBSZWdleE1hdGNoRmxhZ3MgbWF0Y2hfb3B0aW9ucyA9IDAsIG91dCBNYXRjaElu Zm8gbWF0Y2hfaW5mbyA9IG51bGwpIHRocm93cyBSZWdleEVycm9yOwotLQkJW0NDb2RlIChhcnJh eV9sZW5ndGggPSBmYWxzZSwgYXJyYXlfbnVsbF90ZXJtaW5hdGVkID0gdHJ1ZSldCi0tCQlwdWJs aWMgc3RhdGljIHN0cmluZ1tdIHNwbGl0X3NpbXBsZSAoc3RyaW5nIHBhdHRlcm4sIHN0cmluZyBz dHIsIFJlZ2V4Q29tcGlsZUZsYWdzIGNvbXBpbGVfb3B0aW9ucyA9IDAsIFJlZ2V4TWF0Y2hGbGFn cyBtYXRjaF9vcHRpb25zID0gMCk7Ci0tCQlbQ0NvZGUgKGFycmF5X2xlbmd0aCA9IGZhbHNlLCBh cnJheV9udWxsX3Rlcm1pbmF0ZWQgPSB0cnVlKV0KLS0JCXB1YmxpYyBzdHJpbmdbXSBzcGxpdCAo c3RyaW5nIHN0ciwgUmVnZXhNYXRjaEZsYWdzIG1hdGNoX29wdGlvbnMgPSAwKTsKLS0JCVtDQ29k ZSAoYXJyYXlfbGVuZ3RoID0gZmFsc2UsIGFycmF5X251bGxfdGVybWluYXRlZCA9IHRydWUpXQot LQkJcHVibGljIHN0cmluZ1tdIHNwbGl0X2Z1bGwgKHN0cmluZyBzdHIsIHNzaXplX3Qgc3RyaW5n X2xlbiA9IC0xLCBpbnQgc3RhcnRfcG9zaXRpb24gPSAwLCBSZWdleE1hdGNoRmxhZ3MgbWF0Y2hf b3B0aW9ucyA9IDAsIGludCBtYXhfdG9rZW5zID0gMCkgdGhyb3dzIFJlZ2V4RXJyb3I7Ci0tCQlw dWJsaWMgc3RyaW5nIHJlcGxhY2UgKHN0cmluZyBzdHIsIHNzaXplX3Qgc3RyaW5nX2xlbiwgaW50 IHN0YXJ0X3Bvc2l0aW9uLCBzdHJpbmcgcmVwbGFjZW1lbnQsIFJlZ2V4TWF0Y2hGbGFncyBtYXRj aF9vcHRpb25zID0gMCkgdGhyb3dzIFJlZ2V4RXJyb3I7Ci0tCQlwdWJsaWMgc3RyaW5nIHJlcGxh Y2VfbGl0ZXJhbCAoc3RyaW5nIHN0ciwgc3NpemVfdCBzdHJpbmdfbGVuLCBpbnQgc3RhcnRfcG9z aXRpb24sIHN0cmluZyByZXBsYWNlbWVudCwgUmVnZXhNYXRjaEZsYWdzIG1hdGNoX29wdGlvbnMg PSAwKSB0aHJvd3MgUmVnZXhFcnJvcjsKLS0JCXB1YmxpYyBzdHJpbmcgcmVwbGFjZV9ldmFsIChz dHJpbmcgc3RyLCBzc2l6ZV90IHN0cmluZ19sZW4sIGludCBzdGFydF9wb3NpdGlvbiwgUmVnZXhN YXRjaEZsYWdzIG1hdGNoX29wdGlvbnMsIFJlZ2V4RXZhbENhbGxiYWNrIGV2YWwpIHRocm93cyBS ZWdleEVycm9yOwotLQkJcHVibGljIHN0YXRpYyBib29sIGNoZWNrX3JlcGxhY2VtZW50IChzdHJp bmcgcmVwbGFjZW1lbnQsIG91dCBib29sIGhhc19yZWZlcmVuY2VzID0gbnVsbCkgdGhyb3dzIFJl Z2V4RXJyb3I7Ci0tCX0KLS0KLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuMTQiKV0KLS0JcHVibGlj IGRlbGVnYXRlIGJvb2wgUmVnZXhFdmFsQ2FsbGJhY2sgKE1hdGNoSW5mbyBtYXRjaF9pbmZvLCBT dHJpbmdCdWlsZGVyIHJlc3VsdCk7Ci0tCi0tCVtDb21wYWN0XQotLQlbVmVyc2lvbiAoc2luY2Ug PSAiMi4zMCIpXQotLQlbQ0NvZGUgKHJlZl9mdW5jdGlvbiA9ICJnX21hdGNoX2luZm9fcmVmIiwg dW5yZWZfZnVuY3Rpb24gPSAiZ19tYXRjaF9pbmZvX3VucmVmIiwgdHlwZV9pZCA9ICJHX1RZUEVf TUFUQ0hfSU5GTyIpXQotLQlwdWJsaWMgY2xhc3MgTWF0Y2hJbmZvIHsKLS0JCXB1YmxpYyB1bm93 bmVkIFJlZ2V4IGdldF9yZWdleCAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIHN0cmluZyBnZXRfc3Ry aW5nICgpOwotLQkJcHVibGljIGJvb2wgbWF0Y2hlcyAoKTsKLS0JCXB1YmxpYyBib29sIG5leHQg KCkgdGhyb3dzIFJlZ2V4RXJyb3I7Ci0tCQlwdWJsaWMgaW50IGdldF9tYXRjaF9jb3VudCAoKTsK LS0JCXB1YmxpYyBib29sIGlzX3BhcnRpYWxfbWF0Y2ggKCk7Ci0tCQlwdWJsaWMgc3RyaW5nIGV4 cGFuZF9yZWZlcmVuY2VzIChzdHJpbmcgc3RyaW5nX3RvX2V4cGFuZCkgdGhyb3dzIFJlZ2V4RXJy b3I7Ci0tCQlwdWJsaWMgc3RyaW5nPyBmZXRjaCAoaW50IG1hdGNoX251bSk7Ci0tCQlwdWJsaWMg Ym9vbCBmZXRjaF9wb3MgKGludCBtYXRjaF9udW0sIG91dCBpbnQgc3RhcnRfcG9zLCBvdXQgaW50 IGVuZF9wb3MpOwotLQkJcHVibGljIHN0cmluZz8gZmV0Y2hfbmFtZWQgKHN0cmluZyBuYW1lKTsK LS0JCXB1YmxpYyBib29sIGZldGNoX25hbWVkX3BvcyAoc3RyaW5nIG5hbWUsIG91dCBpbnQgc3Rh cnRfcG9zLCBvdXQgaW50IGVuZF9wb3MpOwotLQkJW0NDb2RlIChhcnJheV9sZW5ndGggPSBmYWxz ZSwgYXJyYXlfbnVsbF90ZXJtaW5hdGVkID0gdHJ1ZSldCi0tCQlwdWJsaWMgc3RyaW5nW10gZmV0 Y2hfYWxsICgpOwotLQl9Ci0tCi0tCS8qIFNpbXBsZSBYTUwgU3Vic2V0IFBhcnNlcgotLQkgICBT ZWUgaHR0cDovL2xpdmUuZ25vbWUub3JnL1ZhbGEvTWFya3VwU2FtcGxlIGZvciBhbiBleGFtcGxl ICovCi0tCi0tCXB1YmxpYyBlcnJvcmRvbWFpbiBNYXJrdXBFcnJvciB7Ci0tCQlCQURfVVRGOCwK LS0JCUVNUFRZLAotLQkJUEFSU0UsCi0tCQlVTktOT1dOX0VMRU1FTlQsCi0tCQlVTktOT1dOX0FU VFJJQlVURSwKLS0JCUlOVkFMSURfQ09OVEVOVCwKLS0JCU1JU1NJTkdfQVRUUklCVVRFOwotLQkJ cHVibGljIHN0YXRpYyBHTGliLlF1YXJrIHF1YXJrICgpOwotLQl9Ci0tCi0tCVtDQ29kZSAoY3By ZWZpeCA9ICJHX01BUktVUF8iLCBoYXNfdHlwZV9pZCA9IGZhbHNlKV0KLS0JW0ZsYWdzXQotLQlw dWJsaWMgZW51bSBNYXJrdXBQYXJzZUZsYWdzIHsKLS0JCVRSRUFUX0NEQVRBX0FTX1RFWFQsCi0t CQlQUkVGSVhfRVJST1JfUE9TSVRJT04KLS0JfQotLQotLQlbQ29tcGFjdF0KLS0JW1ZlcnNpb24g KHNpbmNlID0gIjIuMzYiKV0KLS0JW0NDb2RlIChyZWZfZnVuY3Rpb24gPSAiZ19tYXJrdXBfcGFy c2VfY29udGV4dF9yZWYiLCB1bnJlZl9mdW5jdGlvbiA9ICJnX21hcmt1cF9wYXJzZV9jb250ZXh0 X3VucmVmIiwgdHlwZV9pZCA9ICJHX1RZUEVfTUFSS1VQX1BBUlNFX0NPTlRFWFQiKV0KLS0JcHVi bGljIGNsYXNzIE1hcmt1cFBhcnNlQ29udGV4dCB7Ci0tCQlwdWJsaWMgTWFya3VwUGFyc2VDb250 ZXh0IChNYXJrdXBQYXJzZXIgcGFyc2VyLCBNYXJrdXBQYXJzZUZsYWdzIF9mbGFncywgdm9pZCog dXNlcl9kYXRhLCBEZXN0cm95Tm90aWZ5PyB1c2VyX2RhdGFfZG5vdGlmeSk7Ci0tCQlwdWJsaWMg Ym9vbCBwYXJzZSAoc3RyaW5nIHRleHQsIHNzaXplX3QgdGV4dF9sZW4pIHRocm93cyBNYXJrdXBF cnJvcjsKLS0JCXB1YmxpYyBib29sIGVuZF9wYXJzZSAoKSB0aHJvd3MgTWFya3VwRXJyb3I7Ci0t CQlbVmVyc2lvbiAoc2luY2UgPSAiMi4yIildCi0tCQlwdWJsaWMgdW5vd25lZCBzdHJpbmcgZ2V0 X2VsZW1lbnQgKCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xNiIpXQotLQkJcHVibGljIHVu b3duZWQgU0xpc3Q8c3RyaW5nPiBnZXRfZWxlbWVudF9zdGFjayAoKTsKLS0JCXB1YmxpYyB2b2lk IGdldF9wb3NpdGlvbiAob3V0IGludCBsaW5lX251bWJlciwgb3V0IGludCBjaGFyX251bWJlcik7 Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xOCIpXQotLQkJcHVibGljIHZvaWQgcHVzaCAoTWFy a3VwUGFyc2VyIHBhcnNlciwgdm9pZCogdXNlcl9kYXRhKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9 ICIyLjE4IildCi0tCQlwdWJsaWMgdm9pZCogcG9wICgpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0g IjIuMTgiKV0KLS0JCXB1YmxpYyB2b2lkKiBnZXRfdXNlcl9kYXRhICgpOwotLQl9Ci0tCi0tCXB1 YmxpYyBkZWxlZ2F0ZSB2b2lkIE1hcmt1cFBhcnNlclN0YXJ0RWxlbWVudEZ1bmMgKE1hcmt1cFBh cnNlQ29udGV4dCBjb250ZXh0LCBzdHJpbmcgZWxlbWVudF9uYW1lLCBbQ0NvZGUgKGFycmF5X2xl bmd0aCA9IGZhbHNlLCBhcnJheV9udWxsX3Rlcm1pbmF0ZWQgPSB0cnVlKV0gc3RyaW5nW10gYXR0 cmlidXRlX25hbWVzLCBbQ0NvZGUgKGFycmF5X2xlbmd0aCA9IGZhbHNlLCBhcnJheV9udWxsX3Rl cm1pbmF0ZWQgPSB0cnVlKV0gc3RyaW5nW10gYXR0cmlidXRlX3ZhbHVlcykgdGhyb3dzIE1hcmt1 cEVycm9yOwotLQotLQlwdWJsaWMgZGVsZWdhdGUgdm9pZCBNYXJrdXBQYXJzZXJFbmRFbGVtZW50 RnVuYyAoTWFya3VwUGFyc2VDb250ZXh0IGNvbnRleHQsIHN0cmluZyBlbGVtZW50X25hbWUpIHRo cm93cyBNYXJrdXBFcnJvcjsKLS0KLS0JcHVibGljIGRlbGVnYXRlIHZvaWQgTWFya3VwUGFyc2Vy VGV4dEZ1bmMgKE1hcmt1cFBhcnNlQ29udGV4dCBjb250ZXh0LCBzdHJpbmcgdGV4dCwgc2l6ZV90 IHRleHRfbGVuKSB0aHJvd3MgTWFya3VwRXJyb3I7Ci0tCi0tCXB1YmxpYyBkZWxlZ2F0ZSB2b2lk IE1hcmt1cFBhcnNlclBhc3N0aHJvdWdoRnVuYyAoTWFya3VwUGFyc2VDb250ZXh0IGNvbnRleHQs IHN0cmluZyBwYXNzdGhyb3VnaF90ZXh0LCBzaXplX3QgdGV4dF9sZW4pIHRocm93cyBNYXJrdXBF cnJvcjsKLS0KLS0JcHVibGljIGRlbGVnYXRlIHZvaWQgTWFya3VwUGFyc2VyRXJyb3JGdW5jIChN YXJrdXBQYXJzZUNvbnRleHQgY29udGV4dCwgRXJyb3IgZXJyb3IpOwotLQotLQlwdWJsaWMgc3Ry dWN0IE1hcmt1cFBhcnNlciB7Ci0tCQlbQ0NvZGUgKGRlbGVnYXRlX3RhcmdldCA9IGZhbHNlKV0K LS0JCXB1YmxpYyB1bm93bmVkIE1hcmt1cFBhcnNlclN0YXJ0RWxlbWVudEZ1bmMgc3RhcnRfZWxl bWVudDsKLS0JCVtDQ29kZSAoZGVsZWdhdGVfdGFyZ2V0ID0gZmFsc2UpXQotLQkJcHVibGljIHVu b3duZWQgTWFya3VwUGFyc2VyRW5kRWxlbWVudEZ1bmMgZW5kX2VsZW1lbnQ7Ci0tCQlbQ0NvZGUg KGRlbGVnYXRlX3RhcmdldCA9IGZhbHNlKV0KLS0JCXB1YmxpYyB1bm93bmVkIE1hcmt1cFBhcnNl clRleHRGdW5jIHRleHQ7Ci0tCQlbQ0NvZGUgKGRlbGVnYXRlX3RhcmdldCA9IGZhbHNlKV0KLS0J CXB1YmxpYyB1bm93bmVkIE1hcmt1cFBhcnNlclBhc3N0aHJvdWdoRnVuYyBwYXNzdGhyb3VnaDsK LS0JCVtDQ29kZSAoZGVsZWdhdGVfdGFyZ2V0ID0gZmFsc2UpXQotLQkJcHVibGljIHVub3duZWQg TWFya3VwUGFyc2VyRXJyb3JGdW5jIGVycm9yOwotLQl9Ci0tCi0tCW5hbWVzcGFjZSBNYXJrdXAg ewotLQkJW0NDb2RlIChjcHJlZml4ID0gIkdfTUFSS1VQX0NPTExFQ1RfIiwgaGFzX3R5cGVfaWQg PSBmYWxzZSldCi0tCQlwdWJsaWMgZW51bSBDb2xsZWN0VHlwZSB7Ci0tCQkJSU5WQUxJRCwKLS0J CQlTVFJJTkcsCi0tCQkJU1RSRFVQLAotLQkJCUJPT0xFQU4sCi0tCQkJVFJJU1RBVEUsCi0tCQkJ T1BUSU9OQUwKLS0JCX0KLS0KLS0JCXB1YmxpYyBzdGF0aWMgc3RyaW5nIGVzY2FwZV90ZXh0IChz dHJpbmcgdGV4dCwgc3NpemVfdCBsZW5ndGggPSAtMSk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAi Mi40IildCi0tCQlbUHJpbnRmRm9ybWF0XQotLQkJcHVibGljIHN0YXRpYyBzdHJpbmcgcHJpbnRm X2VzY2FwZWQgKHN0cmluZyBmb3JtYXQsIC4uLik7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi40 IildCi0tCQlwdWJsaWMgc3RhdGljIHN0cmluZyB2cHJpbnRmX2VzY2FwZWQgKHN0cmluZyBmb3Jt YXQsIHZhX2xpc3QgYXJncyk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xNiIpXQotLQkJW0ND b2RlIChzZW50aW5lbCA9ICJHX01BUktVUF9DT0xMRUNUX0lOVkFMSUQiKV0KLS0JCXB1YmxpYyBz dGF0aWMgYm9vbCBjb2xsZWN0X2F0dHJpYnV0ZXMgKHN0cmluZyBlbGVtZW50X25hbWUsIFtDQ29k ZSAoYXJyYXlfbGVuZ3RoID0gZmFsc2UsIGFycmF5X251bGxfdGVybWluYXRlZCA9IHRydWUpXSBz dHJpbmdbXSBhdHRyaWJ1dGVfbmFtZXMsIFtDQ29kZSAoYXJyYXlfbGVuZ3RoID0gZmFsc2UsIGFy cmF5X251bGxfdGVybWluYXRlZCA9IHRydWUpXSBzdHJpbmdbXSBhdHRyaWJ1dGVfdmFsdWVzLCAu Li4pIHRocm93cyBNYXJrdXBFcnJvcjsKLS0JfQotLQotLQkvKiBLZXktdmFsdWUgZmlsZSBwYXJz ZXIgKi8KLS0KLS0JcHVibGljIGVycm9yZG9tYWluIEtleUZpbGVFcnJvciB7Ci0tCQlVTktOT1dO X0VOQ09ESU5HLAotLQkJUEFSU0UsCi0tCQlOT1RfRk9VTkQsCi0tCQlLRVlfTk9UX0ZPVU5ELAot LQkJR1JPVVBfTk9UX0ZPVU5ELAotLQkJSU5WQUxJRF9WQUxVRTsKLS0JCXB1YmxpYyBzdGF0aWMg R0xpYi5RdWFyayBxdWFyayAoKTsKLS0JfQotLQotLQlbQ29tcGFjdF0KLS0JW1ZlcnNpb24gKHNp bmNlID0gIjIuMzIiKV0KLS0JW0NDb2RlIChyZWZfZnVuY3Rpb24gPSAiZ19rZXlfZmlsZV9yZWYi LCB1bnJlZl9mdW5jdGlvbiA9ICJnX2tleV9maWxlX3VucmVmIiwgdHlwZV9pZCA9ICJHX1RZUEVf S0VZX0ZJTEUiKV0KLS0JcHVibGljIGNsYXNzIEtleUZpbGUgewotLQkJcHVibGljIEtleUZpbGUg KCk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfbGlzdF9zZXBhcmF0b3IgKGNoYXIgc2VwYXJhdG9yKTsK LS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjUwIildCi0tCQlwdWJsaWMgYm9vbCBsb2FkX2Zyb21f Ynl0ZXMgKEJ5dGVzIGJ5dGVzLCBLZXlGaWxlRmxhZ3MgQGZsYWdzKSB0aHJvd3MgS2V5RmlsZUVy cm9yOwotLQkJcHVibGljIGJvb2wgbG9hZF9mcm9tX2ZpbGUgKHN0cmluZyBmaWxlLCBLZXlGaWxl RmxhZ3MgQGZsYWdzKSB0aHJvd3MgS2V5RmlsZUVycm9yLCBGaWxlRXJyb3I7Ci0tCQlbVmVyc2lv biAoc2luY2UgPSAiMi4xNCIpXQotLQkJcHVibGljIGJvb2wgbG9hZF9mcm9tX2RpcnMgKHN0cmlu ZyBmaWxlLCBbQ0NvZGUgKGFycmF5X2xlbmd0aCA9IGZhbHNlLCBhcnJheV9udWxsX3Rlcm1pbmF0 ZWQgPSB0cnVlKV0gc3RyaW5nW10gc2VhcmNoX2RpcnMsIG91dCBzdHJpbmcgZnVsbF9wYXRoLCBL ZXlGaWxlRmxhZ3MgQGZsYWdzKSB0aHJvd3MgS2V5RmlsZUVycm9yLCBGaWxlRXJyb3I7Ci0tCQlw dWJsaWMgYm9vbCBsb2FkX2Zyb21fZGF0YSAoc3RyaW5nIGRhdGEsIHNpemVfdCBsZW5ndGgsIEtl eUZpbGVGbGFncyBAZmxhZ3MpIHRocm93cyBLZXlGaWxlRXJyb3I7Ci0tCQlwdWJsaWMgYm9vbCBs b2FkX2Zyb21fZGF0YV9kaXJzIChzdHJpbmcgZmlsZSwgb3V0IHN0cmluZyBmdWxsX3BhdGgsIEtl eUZpbGVGbGFncyBAZmxhZ3MpIHRocm93cyBLZXlGaWxlRXJyb3IsIEZpbGVFcnJvcjsKLS0JCS8v IGdfa2V5X2ZpbGVfdG9fZGF0YSBuZXZlciB0aHJvd3MgYW4gZXJyb3IgYWNjb3JkaW5nIHRvIHRo ZSBkb2N1bWVudGF0aW9uCi0tCQlwdWJsaWMgc3RyaW5nIHRvX2RhdGEgKG91dCBzaXplX3QgbGVu Z3RoID0gbnVsbCwgb3V0IEdMaWIuRXJyb3IgZXJyb3IgPSBudWxsKTsKLS0JCXB1YmxpYyBzdHJp bmcgZ2V0X3N0YXJ0X2dyb3VwICgpOwotLQkJW0NDb2RlIChhcnJheV9sZW5ndGhfdHlwZSA9ICJn c2l6ZSIpXQotLQkJcHVibGljIHN0cmluZ1tdIGdldF9ncm91cHMgKCk7Ci0tCQlbQ0NvZGUgKGFy cmF5X2xlbmd0aF90eXBlID0gImdzaXplIildCi0tCQlwdWJsaWMgc3RyaW5nW10gZ2V0X2tleXMg KHN0cmluZyBncm91cF9uYW1lKSB0aHJvd3MgS2V5RmlsZUVycm9yOwotLQkJcHVibGljIGJvb2wg aGFzX2dyb3VwIChzdHJpbmcgZ3JvdXBfbmFtZSk7Ci0tCQlwdWJsaWMgYm9vbCBoYXNfa2V5IChz dHJpbmcgZ3JvdXBfbmFtZSwgc3RyaW5nIGtleSkgdGhyb3dzIEtleUZpbGVFcnJvcjsKLS0JCXB1 YmxpYyBzdHJpbmcgZ2V0X3ZhbHVlIChzdHJpbmcgZ3JvdXBfbmFtZSwgc3RyaW5nIGtleSkgdGhy b3dzIEtleUZpbGVFcnJvcjsKLS0JCXB1YmxpYyBzdHJpbmcgZ2V0X3N0cmluZyAoc3RyaW5nIGdy b3VwX25hbWUsIHN0cmluZyBrZXkpIHRocm93cyBLZXlGaWxlRXJyb3I7Ci0tCQlwdWJsaWMgc3Ry aW5nIGdldF9sb2NhbGVfc3RyaW5nIChzdHJpbmcgZ3JvdXBfbmFtZSwgc3RyaW5nIGtleSwgc3Ry aW5nPyBsb2NhbGUgPSBudWxsKSB0aHJvd3MgS2V5RmlsZUVycm9yOwotLQkJW1ZlcnNpb24gKHNp bmNlID0gIjIuNTYiKV0KLS0JCXB1YmxpYyBzdHJpbmc/IGdldF9sb2NhbGVfZm9yX2tleSAoc3Ry aW5nIGdyb3VwX25hbWUsIHN0cmluZyBrZXksIHN0cmluZz8gbG9jYWxlID0gbnVsbCk7Ci0tCQlw dWJsaWMgYm9vbCBnZXRfYm9vbGVhbiAoc3RyaW5nIGdyb3VwX25hbWUsIHN0cmluZyBrZXkpIHRo cm93cyBLZXlGaWxlRXJyb3I7Ci0tCQlwdWJsaWMgaW50IGdldF9pbnRlZ2VyIChzdHJpbmcgZ3Jv dXBfbmFtZSwgc3RyaW5nIGtleSkgdGhyb3dzIEtleUZpbGVFcnJvcjsKLS0JCVtWZXJzaW9uIChz aW5jZSA9ICIyLjI2IildCi0tCQlwdWJsaWMgaW50NjQgZ2V0X2ludDY0IChzdHJpbmcgZ3JvdXBf bmFtZSwgc3RyaW5nIGtleSkgdGhyb3dzIEtleUZpbGVFcnJvcjsKLS0JCVtWZXJzaW9uIChzaW5j ZSA9ICIyLjI2IildCi0tCQlwdWJsaWMgdWludDY0IGdldF91aW50NjQgKHN0cmluZyBncm91cF9u YW1lLCBzdHJpbmcga2V5KSB0aHJvd3MgS2V5RmlsZUVycm9yOwotLQkJW1ZlcnNpb24gKHNpbmNl ID0gIjIuMTIiKV0KLS0JCXB1YmxpYyBkb3VibGUgZ2V0X2RvdWJsZSAoc3RyaW5nIGdyb3VwX25h bWUsIHN0cmluZyBrZXkpIHRocm93cyBLZXlGaWxlRXJyb3I7Ci0tCQlbQ0NvZGUgKGFycmF5X2xl bmd0aCA9IHRydWUsIGFycmF5X2xlbmd0aF90eXBlID0gImdzaXplIiwgYXJyYXlfbnVsbF90ZXJt aW5hdGVkID0gdHJ1ZSldCi0tCQlwdWJsaWMgc3RyaW5nW10gZ2V0X3N0cmluZ19saXN0IChzdHJp bmcgZ3JvdXBfbmFtZSwgc3RyaW5nIGtleSkgdGhyb3dzIEtleUZpbGVFcnJvcjsKLS0JCVtDQ29k ZSAoYXJyYXlfbGVuZ3RoX3R5cGUgPSAiZ3NpemUiKV0KLS0JCXB1YmxpYyBzdHJpbmdbXSBnZXRf bG9jYWxlX3N0cmluZ19saXN0IChzdHJpbmcgZ3JvdXBfbmFtZSwgc3RyaW5nIGtleSwgc3RyaW5n PyBsb2NhbGUgPSBudWxsKSB0aHJvd3MgS2V5RmlsZUVycm9yOwotLQkJW0NDb2RlIChhcnJheV9s ZW5ndGhfdHlwZSA9ICJnc2l6ZSIpXQotLQkJcHVibGljIGJvb2xbXSBnZXRfYm9vbGVhbl9saXN0 IChzdHJpbmcgZ3JvdXBfbmFtZSwgc3RyaW5nIGtleSkgdGhyb3dzIEtleUZpbGVFcnJvcjsKLS0J CVtDQ29kZSAoYXJyYXlfbGVuZ3RoX3R5cGUgPSAiZ3NpemUiKV0KLS0JCXB1YmxpYyBpbnRbXSBn ZXRfaW50ZWdlcl9saXN0IChzdHJpbmcgZ3JvdXBfbmFtZSwgc3RyaW5nIGtleSkgdGhyb3dzIEtl eUZpbGVFcnJvcjsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjEyIildCi0tCQlbQ0NvZGUgKGFy cmF5X2xlbmd0aF90eXBlID0gImdzaXplIildCi0tCQlwdWJsaWMgZG91YmxlW10gZ2V0X2RvdWJs ZV9saXN0IChzdHJpbmcgZ3JvdXBfbmFtZSwgc3RyaW5nIGtleSkgdGhyb3dzIEtleUZpbGVFcnJv cjsKLS0JCXB1YmxpYyBzdHJpbmcgZ2V0X2NvbW1lbnQgKHN0cmluZz8gZ3JvdXBfbmFtZSwgc3Ry aW5nPyBrZXkpIHRocm93cyBLZXlGaWxlRXJyb3I7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi40 MCIpXQotLQkJcHVibGljIGJvb2wgc2F2ZV90b19maWxlIChzdHJpbmcgZmlsZW5hbWUpIHRocm93 cyBHTGliLkZpbGVFcnJvcjsKLS0JCXB1YmxpYyB2b2lkIHNldF92YWx1ZSAoc3RyaW5nIGdyb3Vw X25hbWUsIHN0cmluZyBrZXksIHN0cmluZyB2YWx1ZSk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfc3Ry aW5nIChzdHJpbmcgZ3JvdXBfbmFtZSwgc3RyaW5nIGtleSwgc3RyaW5nIHN0cik7Ci0tCQlwdWJs aWMgdm9pZCBzZXRfbG9jYWxlX3N0cmluZyAoc3RyaW5nIGdyb3VwX25hbWUsIHN0cmluZyBrZXks IHN0cmluZyBsb2NhbGUsIHN0cmluZyBzdHIpOwotLQkJcHVibGljIHZvaWQgc2V0X2Jvb2xlYW4g KHN0cmluZyBncm91cF9uYW1lLCBzdHJpbmcga2V5LCBib29sIHZhbHVlKTsKLS0JCXB1YmxpYyB2 b2lkIHNldF9pbnRlZ2VyIChzdHJpbmcgZ3JvdXBfbmFtZSwgc3RyaW5nIGtleSwgaW50IHZhbHVl KTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjI2IildCi0tCQlwdWJsaWMgdm9pZCBzZXRfaW50 NjQgKHN0cmluZyBncm91cF9uYW1lLCBzdHJpbmcga2V5LCBpbnQ2NCB2YWx1ZSk7Ci0tCQlbVmVy c2lvbiAoc2luY2UgPSAiMi4yNiIpXQotLQkJcHVibGljIHZvaWQgc2V0X3VpbnQ2NCAoc3RyaW5n IGdyb3VwX25hbWUsIHN0cmluZyBrZXksIHVpbnQ2NCB2YWx1ZSk7Ci0tCQlbVmVyc2lvbiAoc2lu Y2UgPSAiMi4xMiIpXQotLQkJcHVibGljIHZvaWQgc2V0X2RvdWJsZSAoc3RyaW5nIGdyb3VwX25h bWUsIHN0cmluZyBrZXksIGRvdWJsZSB2YWx1ZSk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfc3RyaW5n X2xpc3QgKHN0cmluZyBncm91cF9uYW1lLCBzdHJpbmcga2V5LCBbQ0NvZGUgKHR5cGUgPSAiY29u c3QgZ2NoYXIqIGNvbnN0KiIpXSBzdHJpbmdbXSBsaXN0KTsKLS0JCXB1YmxpYyB2b2lkIHNldF9s b2NhbGVfc3RyaW5nX2xpc3QgKHN0cmluZyBncm91cF9uYW1lLCBzdHJpbmcga2V5LCBzdHJpbmcg bG9jYWxlLCBzdHJpbmdbXSBsaXN0KTsKLS0JCXB1YmxpYyB2b2lkIHNldF9ib29sZWFuX2xpc3Qg KHN0cmluZyBncm91cF9uYW1lLCBzdHJpbmcga2V5LCBib29sW10gbGlzdCk7Ci0tCQlwdWJsaWMg dm9pZCBzZXRfaW50ZWdlcl9saXN0IChzdHJpbmcgZ3JvdXBfbmFtZSwgc3RyaW5nIGtleSwgaW50 W10gbGlzdCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xMiIpXQotLQkJcHVibGljIHZvaWQg c2V0X2RvdWJsZV9saXN0IChzdHJpbmcgZ3JvdXBfbmFtZSwgc3RyaW5nIGtleSwgZG91YmxlW10g bGlzdCk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfY29tbWVudCAoc3RyaW5nPyBncm91cF9uYW1lLCBz dHJpbmc/IGtleSwgc3RyaW5nIGNvbW1lbnQpIHRocm93cyBLZXlGaWxlRXJyb3I7Ci0tCQlwdWJs aWMgdm9pZCByZW1vdmVfZ3JvdXAgKHN0cmluZyBncm91cF9uYW1lKSB0aHJvd3MgS2V5RmlsZUVy cm9yOwotLQkJcHVibGljIHZvaWQgcmVtb3ZlX2tleSAoc3RyaW5nIGdyb3VwX25hbWUsIHN0cmlu ZyBrZXkpIHRocm93cyBLZXlGaWxlRXJyb3I7Ci0tCQlwdWJsaWMgdm9pZCByZW1vdmVfY29tbWVu dCAoc3RyaW5nIGdyb3VwX25hbWUsIHN0cmluZyBrZXkpIHRocm93cyBLZXlGaWxlRXJyb3I7Ci0t CX0KLS0KLS0JW0NDb2RlIChjcHJlZml4ID0gIkdfS0VZX0ZJTEVfIiwgaGFzX3R5cGVfaWQgPSBm YWxzZSldCi0tCVtGbGFnc10KLS0JcHVibGljIGVudW0gS2V5RmlsZUZsYWdzIHsKLS0JCU5PTkUs Ci0tCQlLRUVQX0NPTU1FTlRTLAotLQkJS0VFUF9UUkFOU0xBVElPTlMKLS0JfQotLQotLQlbVmVy c2lvbiAoc2luY2UgPSAiMi4xNCIpXQotLQlbQ0NvZGUgKGNwcmVmaXggPSAiR19LRVlfRklMRV9E RVNLVE9QXyIpXQotLQluYW1lc3BhY2UgS2V5RmlsZURlc2t0b3AgewotLQkJcHVibGljIGNvbnN0 IHN0cmluZyBHUk9VUDsKLS0JCXB1YmxpYyBjb25zdCBzdHJpbmcgS0VZX0FDVElPTlM7Ci0tCQlw dWJsaWMgY29uc3Qgc3RyaW5nIEtFWV9DQVRFR09SSUVTOwotLQkJcHVibGljIGNvbnN0IHN0cmlu ZyBLRVlfQ09NTUVOVDsKLS0JCXB1YmxpYyBjb25zdCBzdHJpbmcgS0VZX0RCVVNfQUNUSVZBVEFC TEU7Ci0tCQlwdWJsaWMgY29uc3Qgc3RyaW5nIEtFWV9FWEVDOwotLQkJcHVibGljIGNvbnN0IHN0 cmluZyBLRVlfRlVMTE5BTUU7Ci0tCQlwdWJsaWMgY29uc3Qgc3RyaW5nIEtFWV9HRU5FUklDX05B TUU7Ci0tCQlwdWJsaWMgY29uc3Qgc3RyaW5nIEtFWV9HRVRURVhUX0RPTUFJTjsKLS0JCXB1Ymxp YyBjb25zdCBzdHJpbmcgS0VZX0hJRERFTjsKLS0JCXB1YmxpYyBjb25zdCBzdHJpbmcgS0VZX0lD T047Ci0tCQlwdWJsaWMgY29uc3Qgc3RyaW5nIEtFWV9LRVlXT1JEUzsKLS0JCXB1YmxpYyBjb25z dCBzdHJpbmcgS0VZX01JTUVfVFlQRTsKLS0JCXB1YmxpYyBjb25zdCBzdHJpbmcgS0VZX05BTUU7 Ci0tCQlwdWJsaWMgY29uc3Qgc3RyaW5nIEtFWV9OT1RfU0hPV19JTjsKLS0JCXB1YmxpYyBjb25z dCBzdHJpbmcgS0VZX05PX0RJU1BMQVk7Ci0tCQlwdWJsaWMgY29uc3Qgc3RyaW5nIEtFWV9PTkxZ X1NIT1dfSU47Ci0tCQlwdWJsaWMgY29uc3Qgc3RyaW5nIEtFWV9QQVRIOwotLQkJcHVibGljIGNv bnN0IHN0cmluZyBLRVlfU1RBUlRVUF9OT1RJRlk7Ci0tCQlwdWJsaWMgY29uc3Qgc3RyaW5nIEtF WV9TVEFSVFVQX1dNX0NMQVNTOwotLQkJcHVibGljIGNvbnN0IHN0cmluZyBLRVlfVEVSTUlOQUw7 Ci0tCQlwdWJsaWMgY29uc3Qgc3RyaW5nIEtFWV9UUllfRVhFQzsKLS0JCXB1YmxpYyBjb25zdCBz dHJpbmcgS0VZX1RZUEU7Ci0tCQlwdWJsaWMgY29uc3Qgc3RyaW5nIEtFWV9VUkw7Ci0tCQlwdWJs aWMgY29uc3Qgc3RyaW5nIEtFWV9WRVJTSU9OOwotLQkJcHVibGljIGNvbnN0IHN0cmluZyBUWVBF X0FQUExJQ0FUSU9OOwotLQkJcHVibGljIGNvbnN0IHN0cmluZyBUWVBFX0RJUkVDVE9SWTsKLS0J CXB1YmxpYyBjb25zdCBzdHJpbmcgVFlQRV9MSU5LOwotLQl9Ci0tCi0tCS8qIEJvb2ttYXJrIGZp bGUgcGFyc2VyICovCi0tCi0tCVtDb21wYWN0XQotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xMiIp XQotLQlbQ0NvZGUgKGZyZWVfZnVuY3Rpb24gPSAiZ19ib29rbWFya19maWxlX2ZyZWUiKV0KLS0J cHVibGljIGNsYXNzIEJvb2ttYXJrRmlsZSB7Ci0tCQlwdWJsaWMgQm9va21hcmtGaWxlICgpOwot LQkJcHVibGljIGJvb2wgbG9hZF9mcm9tX2ZpbGUgKHN0cmluZyBmaWxlKSB0aHJvd3MgQm9va21h cmtGaWxlRXJyb3IsIEZpbGVFcnJvcjsKLS0JCXB1YmxpYyBib29sIGxvYWRfZnJvbV9kYXRhIChz dHJpbmcgZGF0YSwgc2l6ZV90IGxlbmd0aCkgdGhyb3dzIEJvb2ttYXJrRmlsZUVycm9yOwotLQkJ cHVibGljIGJvb2wgbG9hZF9mcm9tX2RhdGFfZGlycyAoc3RyaW5nIGZpbGUsIG91dCBzdHJpbmcg ZnVsbF9wYXRoKSB0aHJvd3MgQm9va21hcmtGaWxlRXJyb3IsIEZpbGVFcnJvcjsKLS0JCXB1Ymxp YyBzdHJpbmcgdG9fZGF0YSAob3V0IHNpemVfdCBsZW5ndGgpIHRocm93cyBCb29rbWFya0ZpbGVF cnJvcjsKLS0JCXB1YmxpYyBib29sIHRvX2ZpbGUgKHN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIEJv b2ttYXJrRmlsZUVycm9yLCBGaWxlRXJyb3I7Ci0tCQlwdWJsaWMgYm9vbCBoYXNfaXRlbSAoc3Ry aW5nIHVyaSk7Ci0tCQlwdWJsaWMgYm9vbCBoYXNfZ3JvdXAgKHN0cmluZyB1cmksIHN0cmluZyBn cm91cCkgdGhyb3dzIEJvb2ttYXJrRmlsZUVycm9yOwotLQkJcHVibGljIGJvb2wgaGFzX2FwcGxp Y2F0aW9uIChzdHJpbmcgdXJpLCBzdHJpbmcgbmFtZSkgdGhyb3dzIEJvb2ttYXJrRmlsZUVycm9y OwotLQkJcHVibGljIGludCBnZXRfc2l6ZSAoKTsKLS0JCVtDQ29kZSAoYXJyYXlfbGVuZ3RoX3R5 cGUgPSAiZ3NpemUiKV0KLS0JCXB1YmxpYyBzdHJpbmdbXSBnZXRfdXJpcyAoKTsKLS0JCXB1Ymxp YyBzdHJpbmcgZ2V0X3RpdGxlIChzdHJpbmcgdXJpKSB0aHJvd3MgQm9va21hcmtGaWxlRXJyb3I7 Ci0tCQlwdWJsaWMgc3RyaW5nIGdldF9kZXNjcmlwdGlvbiAoc3RyaW5nIHVyaSkgdGhyb3dzIEJv b2ttYXJrRmlsZUVycm9yOwotLQkJcHVibGljIHN0cmluZyBnZXRfbWltZV90eXBlIChzdHJpbmcg dXJpKSB0aHJvd3MgQm9va21hcmtGaWxlRXJyb3I7Ci0tCQlwdWJsaWMgYm9vbCBnZXRfaXNfcHJp dmF0ZSAoc3RyaW5nIHVyaSkgdGhyb3dzIEJvb2ttYXJrRmlsZUVycm9yOwotLQkJcHVibGljIGJv b2wgZ2V0X2ljb24gKHN0cmluZyB1cmksIG91dCBzdHJpbmcgaHJlZiwgb3V0IHN0cmluZyBtaW1l X3R5cGUpIHRocm93cyBCb29rbWFya0ZpbGVFcnJvcjsKLS0JCXB1YmxpYyB0aW1lX3QgZ2V0X2Fk ZGVkIChzdHJpbmcgdXJpKSB0aHJvd3MgQm9va21hcmtGaWxlRXJyb3I7Ci0tCQlwdWJsaWMgdGlt ZV90IGdldF9tb2RpZmllZCAoc3RyaW5nIHVyaSkgdGhyb3dzIEJvb2ttYXJrRmlsZUVycm9yOwot LQkJcHVibGljIHRpbWVfdCBnZXRfdmlzaXRlZCAoc3RyaW5nIHVyaSkgdGhyb3dzIEJvb2ttYXJr RmlsZUVycm9yOwotLQkJW0NDb2RlIChhcnJheV9sZW5ndGhfdHlwZSA9ICJnc2l6ZSIpXQotLQkJ cHVibGljIHN0cmluZ1tdIGdldF9ncm91cHMgKHN0cmluZyB1cmkpIHRocm93cyBCb29rbWFya0Zp bGVFcnJvcjsKLS0JCVtDQ29kZSAoYXJyYXlfbGVuZ3RoX3R5cGUgPSAiZ3NpemUiKV0KLS0JCXB1 YmxpYyBzdHJpbmdbXSBnZXRfYXBwbGljYXRpb25zIChzdHJpbmcgdXJpKSB0aHJvd3MgQm9va21h cmtGaWxlRXJyb3I7Ci0tCQlwdWJsaWMgYm9vbCBnZXRfYXBwX2luZm8gKHN0cmluZyB1cmksIHN0 cmluZyBuYW1lLCBvdXQgc3RyaW5nIGV4ZWMsIG91dCB1aW50IGNvdW50LCBvdXQgdGltZV90IHN0 YW1wKSB0aHJvd3MgQm9va21hcmtGaWxlRXJyb3I7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfdGl0bGUg KHN0cmluZyB1cmksIHN0cmluZyB0aXRsZSk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfZGVzY3JpcHRp b24gKHN0cmluZyB1cmksIHN0cmluZyBkZXNjcmlwdGlvbik7Ci0tCQlwdWJsaWMgdm9pZCBzZXRf bWltZV90eXBlIChzdHJpbmcgdXJpLCBzdHJpbmcgbWltZV90eXBlKTsKLS0JCXB1YmxpYyB2b2lk IHNldF9pc19wcml2YXRlIChzdHJpbmcgdXJpLCBib29sIGlzX3ByaXZhdGUpOwotLQkJcHVibGlj IHZvaWQgc2V0X2ljb24gKHN0cmluZyB1cmksIHN0cmluZyBocmVmLCBzdHJpbmcgbWltZV90eXBl KTsKLS0JCXB1YmxpYyB2b2lkIHNldF9hZGRlZCAoc3RyaW5nIHVyaSwgdGltZV90IGFkZGVkKTsK LS0JCXB1YmxpYyB2b2lkIHNldF9ncm91cHMgKHN0cmluZyB1cmksIHN0cmluZ1tdIGdyb3Vwcyk7 Ci0tCQlwdWJsaWMgdm9pZCBzZXRfbW9kaWZpZWQgKHN0cmluZyB1cmksIHRpbWVfdCBtb2RpZmll ZCk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfdmlzaXRlZCAoc3RyaW5nIHVyaSwgdGltZV90IHZpc2l0 ZWQpOwotLQkJcHVibGljIGJvb2wgc2V0X2FwcF9pbmZvIChzdHJpbmcgdXJpLCBzdHJpbmcgbmFt ZSwgc3RyaW5nIGV4ZWMsIGludCBjb3VudCwgdGltZV90IHN0YW1wKSB0aHJvd3MgQm9va21hcmtG aWxlRXJyb3I7Ci0tCQlwdWJsaWMgdm9pZCBhZGRfZ3JvdXAgKHN0cmluZyB1cmksIHN0cmluZyBn cm91cCk7Ci0tCQlwdWJsaWMgdm9pZCBhZGRfYXBwbGljYXRpb24gKHN0cmluZyB1cmksIHN0cmlu ZyBuYW1lLCBzdHJpbmcgZXhlYyk7Ci0tCQlwdWJsaWMgYm9vbCByZW1vdmVfZ3JvdXAgKHN0cmlu ZyB1cmksIHN0cmluZyBncm91cCkgdGhyb3dzIEJvb2ttYXJrRmlsZUVycm9yOwotLQkJcHVibGlj IGJvb2wgcmVtb3ZlX2FwcGxpY2F0aW9uIChzdHJpbmcgdXJpLCBzdHJpbmcgbmFtZSkgdGhyb3dz IEJvb2ttYXJrRmlsZUVycm9yOwotLQkJcHVibGljIGJvb2wgcmVtb3ZlX2l0ZW0gKHN0cmluZyB1 cmkpIHRocm93cyBCb29rbWFya0ZpbGVFcnJvcjsKLS0JCXB1YmxpYyBib29sIG1vdmVfaXRlbSAo c3RyaW5nIG9sZF91cmksIHN0cmluZyBuZXdfdXJpKSB0aHJvd3MgQm9va21hcmtGaWxlRXJyb3I7 Ci0tCX0KLS0KLS0JcHVibGljIGVycm9yZG9tYWluIEJvb2ttYXJrRmlsZUVycm9yIHsKLS0JCUlO VkFMSURfVVJJLAotLQkJSU5WQUxJRF9WQUxVRSwKLS0JCUFQUF9OT1RfUkVHSVNURVJFRCwKLS0J CVVSSV9OT1RfRk9VTkQsCi0tCQlSRUFELAotLQkJVU5LTk9XTl9FTkNPRElORywKLS0JCVdSSVRF LAotLQkJRklMRV9OT1RfRk9VTkQ7Ci0tCQlwdWJsaWMgc3RhdGljIEdMaWIuUXVhcmsgcXVhcmsg KCk7Ci0tCX0KLS0KLS0JLyogVGVzdGluZyAqLwotLQotLQluYW1lc3BhY2UgVGVzdCB7Ci0tCQlb Q0NvZGUgKGNwcmVmaXggPSAiR19URVNUXyIsIGhhc190eXBlX2lkID0gZmFsc2UpXQotLQkJcHVi bGljIGVudW0gRmlsZVR5cGUgewotLQkJCURJU1QsCi0tCQkJQlVJTFQKLS0JCX0KLS0KLS0JCVtQ cmludGZGb3JtYXRdCi0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xNiIpXQotLQkJcHVibGljIHN0 YXRpYyB2b2lkIG1pbmltaXplZF9yZXN1bHQgKGRvdWJsZSBtaW5pbWl6ZWRfcXVhbnRpdHksIHN0 cmluZyBmb3JtYXQsIC4uLik7Ci0tCQlbUHJpbnRmRm9ybWF0XQotLQkJW1ZlcnNpb24gKHNpbmNl ID0gIjIuMTYiKV0KLS0JCXB1YmxpYyBzdGF0aWMgdm9pZCBtYXhpbWl6ZWRfcmVzdWx0IChkb3Vi bGUgbWF4aW1pemVkX3F1YW50aXR5LCBzdHJpbmcgZm9ybWF0LCAuLi4pOwotLQkJW1ZlcnNpb24g KHNpbmNlID0gIjIuMTYiKV0KLS0JCXB1YmxpYyBzdGF0aWMgdm9pZCBpbml0IChbQ0NvZGUgKGFy cmF5X2xlbmd0aF9wb3MgPSAwLjkpXSByZWYgdW5vd25lZCBzdHJpbmdbXSBhcmdzLCAuLi4pOwot LQkJcHVibGljIHN0YXRpYyBib29sIHF1aWNrICgpOwotLQkJcHVibGljIHN0YXRpYyBib29sIHNs b3cgKCk7Ci0tCQlwdWJsaWMgc3RhdGljIGJvb2wgdGhvcm91Z2ggKCk7Ci0tCQlwdWJsaWMgc3Rh dGljIGJvb2wgcGVyZiAoKTsKLS0JCXB1YmxpYyBzdGF0aWMgYm9vbCB2ZXJib3NlICgpOwotLQkJ cHVibGljIHN0YXRpYyBib29sIHF1aWV0ICgpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMTYi KV0KLS0JCXB1YmxpYyBzdGF0aWMgaW50IHJ1biAoKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIy LjE2IildCi0tCQlwdWJsaWMgc3RhdGljIHZvaWQgYWRkIChzdHJpbmcgdGVzdHBhdGgsIHZvaWQq IGZpeHR1cmUsIFtDQ29kZSAoZGVsZWdhdGVfdGFyZ2V0X3BvcyA9IDIuOSldIFRlc3RGaXh0dXJl RnVuYyBmc2V0dXAsIFtDQ29kZSAoZGVsZWdhdGVfdGFyZ2V0X3BvcyA9IDIuOSldIFRlc3RGaXh0 dXJlRnVuYyBmdGVzdCwgW0NDb2RlIChkZWxlZ2F0ZV90YXJnZXRfcG9zID0gMi45KV0gVGVzdEZp eHR1cmVGdW5jIGZ0ZWFyZG93bik7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xNiIpXQotLQkJ cHVibGljIHN0YXRpYyB2b2lkIGFkZF9mdW5jIChzdHJpbmcgdGVzdHBhdGgsIFtDQ29kZSAoc2Nv cGUgPSAiYXN5bmMiKV0gb3duZWQgVGVzdEZ1bmMgdGVzdF9mdW5jdm9pZCk7Ci0tCQlbVmVyc2lv biAoc2luY2UgPSAiMi4xNiIpXQotLQkJcHVibGljIHN0YXRpYyB2b2lkIGFkZF9kYXRhX2Z1bmMg KHN0cmluZyB0ZXN0cGF0aCwgW0NDb2RlIChkZWxlZ2F0ZV90YXJnZXRfcG9zID0gMS45LCBzY29w ZSA9ICJhc3luYyIpXSBvd25lZCBUZXN0RGF0YUZ1bmMgdGVzdF9mdW5jdm9pZCk7Ci0tCQlbVmVy c2lvbiAoc2luY2UgPSAiMi4zNCIpXQotLQkJcHVibGljIHN0YXRpYyB2b2lkIGFkZF9kYXRhX2Z1 bmNfZnVsbCAoc3RyaW5nIHRlc3RwYXRoLCBbQ0NvZGUgKGRlbGVnYXRlX3RhcmdldF9wb3MgPSAx LjkpXSBvd25lZCBUZXN0RGF0YUZ1bmMgdGVzdF9mdW5jKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9 ICIyLjM0IildCi0tCQlwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0X2V4cGVjdGVkX21lc3NhZ2Vz ICgpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMzgiKV0KLS0JCXB1YmxpYyBzdGF0aWMgc3Ry aW5nIGJ1aWxkX2ZpbGVuYW1lIChHTGliLlRlc3QuRmlsZVR5cGUgZmlsZV90eXBlLCBwYXJhbXMg c3RyaW5nW10gcGF0aF9zZWdtZW50cyk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4zNCIpXQot LQkJcHVibGljIHN0YXRpYyB2b2lkIGV4cGVjdF9tZXNzYWdlIChzdHJpbmc/IGxvZ19kb21haW4s IExvZ0xldmVsRmxhZ3MgbG9nX2xldmVsLCBzdHJpbmcgcGF0dGVybik7Ci0tCQlbVmVyc2lvbiAo c2luY2UgPSAiMi4zMCIpXQotLQkJcHVibGljIHN0YXRpYyB2b2lkIGZhaWwgKCk7Ci0tCQlbVmVy c2lvbiAoc2luY2UgPSAiMi4zOCIpXQotLQkJcHVibGljIHN0YXRpYyBib29sIGZhaWxlZCAoKTsK LS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjM4IildCi0tCQlwdWJsaWMgc3RhdGljIHVub3duZWQg c3RyaW5nIGdldF9kaXIgKEdMaWIuVGVzdC5GaWxlVHlwZSBmaWxlX3R5cGUpOwotLQkJW1ZlcnNp b24gKHNpbmNlID0gIjIuMzgiKV0KLS0JCXB1YmxpYyBzdGF0aWMgdW5vd25lZCBzdHJpbmcgZ2V0 X2ZpbGVuYW1lIChHTGliLlRlc3QuRmlsZVR5cGUgZmlsZV90eXBlLCBwYXJhbXMgc3RyaW5nW10g cGF0aF9zZWdtZW50cyk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4zOCIpXQotLQkJcHVibGlj IHN0YXRpYyB2b2lkIGluY29tcGxldGUgKHN0cmluZz8gbXNnID0gbnVsbCk7Ci0tCQlbVmVyc2lv biAoc2luY2UgPSAiMi4zNiIpXQotLQkJcHVibGljIHN0YXRpYyBib29sIGluaXRpYWxpemVkICgp OwotLQkJW1ByaW50ZkZvcm1hdF0KLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjE2IildCi0tCQlw dWJsaWMgc3RhdGljIHZvaWQgbWVzc2FnZSAoc3RyaW5nIGZvcm1hdCwgLi4uKTsKLS0JCVtWZXJz aW9uIChzaW5jZSA9ICIyLjM4IildCi0tCQlwdWJsaWMgc3RhdGljIHZvaWQgc2V0X25vbmZhdGFs X2Fzc2VydGlvbnMgKCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4zOCIpXQotLQkJcHVibGlj IHN0YXRpYyB2b2lkIHNraXAgKHN0cmluZz8gbXNnID0gbnVsbCk7Ci0tCQlbVmVyc2lvbiAoc2lu Y2UgPSAiMi4zOCIpXQotLQkJcHVibGljIHN0YXRpYyBib29sIHN1YnByb2Nlc3MgKCk7Ci0tCQlb VmVyc2lvbiAoc2luY2UgPSAiMi4xNiIpXQotLQkJcHVibGljIHN0YXRpYyB2b2lkIGJ1Z19iYXNl IChzdHJpbmcgdXJpX3BhdHRlcm4pOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMTYiKV0KLS0J CXB1YmxpYyBzdGF0aWMgdm9pZCBidWcgKHN0cmluZyBidWdfdXJpX3NuaXBwZXQpOwotLQkJW1Zl cnNpb24gKHNpbmNlID0gIjIuMTYiKV0KLS0JCXB1YmxpYyBzdGF0aWMgdm9pZCB0aW1lcl9zdGFy dCAoKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjE2IildCi0tCQlwdWJsaWMgc3RhdGljIGRv dWJsZSB0aW1lcl9lbGFwc2VkICgpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMTYiKV0KLS0J CXB1YmxpYyBzdGF0aWMgZG91YmxlIHRpbWVyX2xhc3QgKCk7Ci0tCQlbVmVyc2lvbiAoc2luY2Ug PSAiMi4xNiIsIGRlcHJlY2F0ZWRfc2luY2UgPSAiMi4zOCIsIHJlcGxhY2VtZW50ID0gInRyYXBf c3VicHJvY2VzcyIpXQotLQkJcHVibGljIHN0YXRpYyBib29sIHRyYXBfZm9yayAodWludDY0IHVz ZWNfdGltZW91dCwgVGVzdFRyYXBGbGFncyB0ZXN0X3RyYXBfZmxhZ3MpOwotLQkJW1ZlcnNpb24g KHNpbmNlID0gIjIuMTYiKV0KLS0JCXB1YmxpYyBzdGF0aWMgYm9vbCB0cmFwX2hhc19wYXNzZWQg KCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xNiIpXQotLQkJcHVibGljIHN0YXRpYyBib29s IHRyYXBfcmVhY2hlZF90aW1lb3V0ICgpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMzgiKV0K LS0JCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFwX3N1YnByb2Nlc3MgKHN0cmluZz8gdGVzdF9wYXRo LCB1aW50NjQgdXNlY190aW1lb3V0LCBUZXN0U3VicHJvY2Vzc0ZsYWdzIHRlc3RfZmxhZ3MpOwot LQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMTYiKV0KLS0JCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFw X2Fzc2VydF9wYXNzZWQgKCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xNiIpXQotLQkJcHVi bGljIHN0YXRpYyB2b2lkIHRyYXBfYXNzZXJ0X2ZhaWxlZCAoKTsKLS0JCVtWZXJzaW9uIChzaW5j ZSA9ICIyLjE2IildCi0tCQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhcF9hc3NlcnRfc3Rkb3V0IChz dHJpbmcgc291dHBhdHRlcm4pOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMTYiKV0KLS0JCXB1 YmxpYyBzdGF0aWMgdm9pZCB0cmFwX2Fzc2VydF9zdGRvdXRfdW5tYXRjaGVkIChzdHJpbmcgc291 dHBhdHRlcm4pOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMTYiKV0KLS0JCXB1YmxpYyBzdGF0 aWMgdm9pZCB0cmFwX2Fzc2VydF9zdGRlcnIgKHN0cmluZyBzZXJycGF0dGVybik7Ci0tCQlbVmVy c2lvbiAoc2luY2UgPSAiMi4xNiIpXQotLQkJcHVibGljIHN0YXRpYyB2b2lkIHRyYXBfYXNzZXJ0 X3N0ZGVycl91bm1hdGNoZWQgKHN0cmluZyBzZXJycGF0dGVybik7Ci0tCQlbVmVyc2lvbiAoc2lu Y2UgPSAiMi4xNiIpXQotLQkJcHVibGljIHN0YXRpYyBib29sIHJhbmRfYml0ICgpOwotLQkJW1Zl cnNpb24gKHNpbmNlID0gIjIuMTYiKV0KLS0JCXB1YmxpYyBzdGF0aWMgaW50MzIgcmFuZF9pbnQg KCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xNiIpXQotLQkJcHVibGljIHN0YXRpYyBpbnQz MiByYW5kX2ludF9yYW5nZSAoaW50MzIgYmVnaW4sIGludDMyIGVuZCk7Ci0tCQlbVmVyc2lvbiAo c2luY2UgPSAiMi4xNiIpXQotLQkJcHVibGljIHN0YXRpYyBkb3VibGUgcmFuZF9kb3VibGUgKCk7 Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xNiIpXQotLQkJcHVibGljIHN0YXRpYyBkb3VibGUg cmFuZF9kb3VibGVfcmFuZ2UgKGRvdWJsZSBiZWdpbiwgZG91YmxlIGVuZCk7Ci0tCQlbVmVyc2lv biAoc2luY2UgPSAiMi4yMiIpXQotLQkJcHVibGljIHN0YXRpYyB2b2lkIGxvZ19zZXRfZmF0YWxf aGFuZGxlciAoTG9nRmF0YWxGdW5jIGxvZ19mdW5jKTsKLS0JfQotLQotLQlwdWJsaWMgZGVsZWdh dGUgYm9vbCBMb2dGYXRhbEZ1bmMgKHN0cmluZz8gbG9nX2RvbWFpbiwgTG9nTGV2ZWxGbGFncyBs b2dfbGV2ZWxzLCBzdHJpbmcgbWVzc2FnZSk7Ci0tCi0tCVtDb21wYWN0XQotLQlbQ0NvZGUgKGNu YW1lID0gIkdUZXN0Q2FzZSIsIHJlZl9mdW5jdGlvbiA9ICIiLCB1bnJlZl9mdW5jdGlvbiA9ICIi KV0KLS0JcHVibGljIGNsYXNzIFRlc3RDYXNlIHsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjE2 IildCi0tCQlbQ0NvZGUgKGNuYW1lID0gImdfdGVzdF9jcmVhdGVfY2FzZSIpXQotLQkJcHVibGlj IFRlc3RDYXNlIChzdHJpbmcgdGVzdF9uYW1lLCBbQ0NvZGUgKGRlbGVnYXRlX3RhcmdldF9wb3Mg PSAxLjkpXSBUZXN0Rml4dHVyZUZ1bmMgZGF0YV9zZXR1cCwgW0NDb2RlIChkZWxlZ2F0ZV90YXJn ZXRfcG9zID0gMS45KV0gVGVzdEZpeHR1cmVGdW5jIGRhdGFfZnVuYywgW0NDb2RlIChkZWxlZ2F0 ZV90YXJnZXRfcG9zID0gMS45KV0gVGVzdEZpeHR1cmVGdW5jIGRhdGFfdGVhcmRvd24sIFtDQ29k ZSAocG9zID0gMS44KV0gc2l6ZV90IGRhdGFfc2l6ZSA9IDApOwotLQl9Ci0tCi0tCVtDb21wYWN0 XQotLQlbQ0NvZGUgKGNuYW1lID0gIkdUZXN0U3VpdGUiLCByZWZfZnVuY3Rpb24gPSAiIiwgdW5y ZWZfZnVuY3Rpb24gPSAiIildCi0tCXB1YmxpYyBjbGFzcyBUZXN0U3VpdGUgewotLQkJW1ZlcnNp b24gKHNpbmNlID0gIjIuMTYiKV0KLS0JCVtDQ29kZSAoY25hbWUgPSAiZ190ZXN0X2NyZWF0ZV9z dWl0ZSIpXQotLQkJcHVibGljIFRlc3RTdWl0ZSAoc3RyaW5nIG5hbWUpOwotLQkJW1ZlcnNpb24g KHNpbmNlID0gIjIuMTYiKV0KLS0JCVtDQ29kZSAoY25hbWUgPSAiZ190ZXN0X2dldF9yb290Iild Ci0tCQlwdWJsaWMgc3RhdGljIFRlc3RTdWl0ZSBnZXRfcm9vdCAoKTsKLS0JCVtWZXJzaW9uIChz aW5jZSA9ICIyLjE2IildCi0tCQlbQ0NvZGUgKGNuYW1lID0gImdfdGVzdF9zdWl0ZV9hZGQiKV0K LS0JCXB1YmxpYyB2b2lkIGFkZCAoVGVzdENhc2UgdGVzdF9jYXNlKTsKLS0JCVtWZXJzaW9uIChz aW5jZSA9ICIyLjE2IildCi0tCQlbQ0NvZGUgKGNuYW1lID0gImdfdGVzdF9zdWl0ZV9hZGRfc3Vp dGUiKV0KLS0JCXB1YmxpYyB2b2lkIGFkZF9zdWl0ZSAoVGVzdFN1aXRlIHRlc3Rfc3VpdGUpOwot LQl9Ci0tCi0tCVtWZXJzaW9uIChzaW5jZSA9ICIyLjI2IildCi0tCVtDQ29kZSAoaGFzX3Rhcmdl dCA9IGZhbHNlKV0KLS0JcHVibGljIGRlbGVnYXRlIHZvaWQgVGVzdEZ1bmMgKCk7Ci0tCVtWZXJz aW9uIChzaW5jZSA9ICIyLjI2IildCi0tCXB1YmxpYyBkZWxlZ2F0ZSB2b2lkIFRlc3REYXRhRnVu YyAoKTsKLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuMjYiKV0KLS0JcHVibGljIGRlbGVnYXRlIHZv aWQgVGVzdEZpeHR1cmVGdW5jICh2b2lkKiBmaXh0dXJlKTsKLS0KLS0JW0NDb2RlIChjcHJlZml4 ID0gIkdfVEVTVF9TVUJQUk9DRVNTX0lOSEVSSVRfIiwgaGFzX3R5cGVfaWQgPSBmYWxzZSldCi0t CVtGbGFnc10KLS0JcHVibGljIGVudW0gVGVzdFN1YnByb2Nlc3NGbGFncyB7Ci0tCQlTVERJTiwK LS0JCVNURE9VVCwKLS0JCVNUREVSUgotLQl9Ci0tCi0tCVtGbGFnc10KLS0JW0NDb2RlIChjcHJl Zml4ID0gIkdfVEVTVF9UUkFQXyIsIGhhc190eXBlX2lkID0gZmFsc2UpXQotLQlwdWJsaWMgZW51 bSBUZXN0VHJhcEZsYWdzIHsKLS0JCVNJTEVOQ0VfU1RET1VULAotLQkJU0lMRU5DRV9TVERFUlIs Ci0tCQlJTkhFUklUX1NURElOCi0tCX0KLS0KLS0JLyogRG91Ymx5LUxpbmtlZCBMaXN0cyAqLwot LQotLQlbQ29tcGFjdF0KLS0JW0NDb2RlIChkdXBfZnVuY3Rpb24gPSAiZ19saXN0X2NvcHkiLCBm cmVlX2Z1bmN0aW9uID0gImdfbGlzdF9mcmVlIildCi0tCXB1YmxpYyBjbGFzcyBMaXN0PEc+IHsK LS0JCXB1YmxpYyBMaXN0ICgpOwotLQotLQkJW1JldHVybnNNb2RpZmllZFBvaW50ZXIgKCldCi0t CQlwdWJsaWMgdm9pZCBhcHBlbmQgKG93bmVkIEcgZGF0YSk7Ci0tCQlbUmV0dXJuc01vZGlmaWVk UG9pbnRlciAoKV0KLS0JCXB1YmxpYyB2b2lkIHByZXBlbmQgKG93bmVkIEcgZGF0YSk7Ci0tCQlb UmV0dXJuc01vZGlmaWVkUG9pbnRlciAoKV0KLS0JCXB1YmxpYyB2b2lkIGluc2VydCAob3duZWQg RyBkYXRhLCBpbnQgcG9zaXRpb24pOwotLQkJW1JldHVybnNNb2RpZmllZFBvaW50ZXIgKCldCi0t CQlwdWJsaWMgdm9pZCBpbnNlcnRfYmVmb3JlIChMaXN0PEc+IHNpYmxpbmcsIG93bmVkIEcgZGF0 YSk7Ci0tCQlbUmV0dXJuc01vZGlmaWVkUG9pbnRlciAoKV0KLS0JCXB1YmxpYyB2b2lkIGluc2Vy dF9zb3J0ZWQgKG93bmVkIEcgZGF0YSwgQ29tcGFyZUZ1bmM8Rz4gY29tcGFyZV9mdW5jKTsKLS0J CVtSZXR1cm5zTW9kaWZpZWRQb2ludGVyICgpXQotLQkJcHVibGljIHZvaWQgcmVtb3ZlIChHIGRh dGEpOwotLQkJW1JldHVybnNNb2RpZmllZFBvaW50ZXIgKCldCi0tCQlwdWJsaWMgdm9pZCByZW1v dmVfbGluayAoTGlzdDxHPiBsbGluayk7Ci0tCQlbUmV0dXJuc01vZGlmaWVkUG9pbnRlciAoKV0K LS0JCXB1YmxpYyB2b2lkIGRlbGV0ZV9saW5rIChMaXN0PEc+IGxpbmtfKTsKLS0JCVtSZXR1cm5z TW9kaWZpZWRQb2ludGVyICgpXQotLQkJcHVibGljIHZvaWQgcmVtb3ZlX2FsbCAoRyBkYXRhKTsK LS0KLS0JCXB1YmxpYyB1aW50IGxlbmd0aCAoKTsKLS0JCXB1YmxpYyBMaXN0PHVub3duZWQgRz4g Y29weSAoKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjM0IildCi0tCQlwdWJsaWMgTGlzdDxH PiBjb3B5X2RlZXAgKENvcHlGdW5jPEc+IGZ1bmMpOwotLQkJW1JldHVybnNNb2RpZmllZFBvaW50 ZXIgKCldCi0tCQlwdWJsaWMgdm9pZCByZXZlcnNlICgpOwotLQkJW1JldHVybnNNb2RpZmllZFBv aW50ZXIgKCldCi0tCQlwdWJsaWMgdm9pZCBzb3J0IChDb21wYXJlRnVuYzxHPiBjb21wYXJlX2Z1 bmMpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMTAiKV0KLS0JCVtSZXR1cm5zTW9kaWZpZWRQ b2ludGVyICgpXQotLQkJcHVibGljIHZvaWQgaW5zZXJ0X3NvcnRlZF93aXRoX2RhdGEgKG93bmVk IEcgZGF0YSwgQ29tcGFyZURhdGFGdW5jPEc+IGNvbXBhcmVfZnVuYyk7Ci0tCQlbUmV0dXJuc01v ZGlmaWVkUG9pbnRlciAoKV0KLS0JCXB1YmxpYyB2b2lkIHNvcnRfd2l0aF9kYXRhIChDb21wYXJl RGF0YUZ1bmM8Rz4gY29tcGFyZV9mdW5jKTsKLS0JCVtSZXR1cm5zTW9kaWZpZWRQb2ludGVyICgp XQotLQkJcHVibGljIHZvaWQgY29uY2F0IChvd25lZCBMaXN0PEc+IGxpc3QyKTsKLS0JCXB1Ymxp YyB2b2lkIEBmb3JlYWNoIChGdW5jPEc+IGZ1bmMpOwotLQotLQkJcHVibGljIHVub3duZWQgTGlz dDxHPiBmaXJzdCAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIExpc3Q8Rz4gbGFzdCAoKTsKLS0JCXB1 YmxpYyB1bm93bmVkIExpc3Q8Rz4gbnRoICh1aW50IG4pOwotLQkJcHVibGljIHVub3duZWQgRyBu dGhfZGF0YSAodWludCBuKTsKLS0JCXB1YmxpYyB1bm93bmVkIExpc3Q8Rz4gbnRoX3ByZXYgKHVp bnQgbik7Ci0tCi0tCQlwdWJsaWMgdW5vd25lZCBMaXN0PEc+IGZpbmQgKEcgZGF0YSk7Ci0tCQlw dWJsaWMgdW5vd25lZCBMaXN0PEc+IGZpbmRfY3VzdG9tIChHIGRhdGEsIENvbXBhcmVGdW5jPEc+ IGZ1bmMpOwotLQkJW0NDb2RlIChjbmFtZSA9ICJnX2xpc3RfZmluZF9jdXN0b20iLCBzaW1wbGVf Z2VuZXJpY3MgPSB0cnVlKV0KLS0JCXB1YmxpYyB1bm93bmVkIExpc3Q8Rz4gc2VhcmNoPFQ+IChU IGRhdGEsIFNlYXJjaEZ1bmM8RyxUPiBmdW5jKTsKLS0KLS0JCXB1YmxpYyBpbnQgcG9zaXRpb24g KExpc3Q8Rz4gbGxpbmspOwotLQkJcHVibGljIGludCBpbmRleCAoRyBkYXRhKTsKLS0KLS0JCXB1 YmxpYyBHIGRhdGE7Ci0tCQlwdWJsaWMgTGlzdDxHPiBuZXh0OwotLQkJcHVibGljIHVub3duZWQg TGlzdDxHPiBwcmV2OwotLQl9Ci0tCi0tCS8qIFNpbmdseS1MaW5rZWQgTGlzdHMgKi8KLS0KLS0J W0NvbXBhY3RdCi0tCVtDQ29kZSAoZHVwX2Z1bmN0aW9uID0gImdfc2xpc3RfY29weSIsIGZyZWVf ZnVuY3Rpb24gPSAiZ19zbGlzdF9mcmVlIildCi0tCXB1YmxpYyBjbGFzcyBTTGlzdDxHPiB7Ci0t CQlwdWJsaWMgU0xpc3QgKCk7Ci0tCi0tCQlbUmV0dXJuc01vZGlmaWVkUG9pbnRlciAoKV0KLS0J CXB1YmxpYyB2b2lkIGFwcGVuZCAob3duZWQgRyBkYXRhKTsKLS0JCVtSZXR1cm5zTW9kaWZpZWRQ b2ludGVyICgpXQotLQkJcHVibGljIHZvaWQgcHJlcGVuZCAob3duZWQgRyBkYXRhKTsKLS0JCVtS ZXR1cm5zTW9kaWZpZWRQb2ludGVyICgpXQotLQkJcHVibGljIHZvaWQgaW5zZXJ0IChvd25lZCBH IGRhdGEsIGludCBwb3NpdGlvbik7Ci0tCQlbUmV0dXJuc01vZGlmaWVkUG9pbnRlciAoKV0KLS0J CXB1YmxpYyB2b2lkIGluc2VydF9iZWZvcmUgKFNMaXN0PEc+IHNpYmxpbmcsIG93bmVkIEcgZGF0 YSk7Ci0tCQlbUmV0dXJuc01vZGlmaWVkUG9pbnRlciAoKV0KLS0JCXB1YmxpYyB2b2lkIGluc2Vy dF9zb3J0ZWQgKG93bmVkIEcgZGF0YSwgQ29tcGFyZUZ1bmM8Rz4gY29tcGFyZV9mdW5jKTsKLS0J CVtSZXR1cm5zTW9kaWZpZWRQb2ludGVyICgpXQotLQkJcHVibGljIHZvaWQgcmVtb3ZlIChHIGRh dGEpOwotLQkJW1JldHVybnNNb2RpZmllZFBvaW50ZXIgKCldCi0tCQlwdWJsaWMgdm9pZCByZW1v dmVfbGluayAoU0xpc3Q8Rz4gbGxpbmspOwotLQkJW1JldHVybnNNb2RpZmllZFBvaW50ZXIgKCld Ci0tCQlwdWJsaWMgdm9pZCBkZWxldGVfbGluayAoU0xpc3Q8Rz4gbGlua18pOwotLQkJW1JldHVy bnNNb2RpZmllZFBvaW50ZXIgKCldCi0tCQlwdWJsaWMgdm9pZCByZW1vdmVfYWxsIChHIGRhdGEp OwotLQotLQkJcHVibGljIHVpbnQgbGVuZ3RoICgpOwotLQkJcHVibGljIFNMaXN0PHVub3duZWQg Rz4gY29weSAoKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjM0IildCi0tCQlwdWJsaWMgU0xp c3Q8Rz4gY29weV9kZWVwIChDb3B5RnVuYzxHPiBmdW5jKTsKLS0JCVtSZXR1cm5zTW9kaWZpZWRQ b2ludGVyICgpXQotLQkJcHVibGljIHZvaWQgcmV2ZXJzZSAoKTsKLS0JCVtWZXJzaW9uIChzaW5j ZSA9ICIyLjEwIildCi0tCQlbUmV0dXJuc01vZGlmaWVkUG9pbnRlciAoKV0KLS0JCXB1YmxpYyB2 b2lkIGluc2VydF9zb3J0ZWRfd2l0aF9kYXRhIChvd25lZCBHIGRhdGEsIENvbXBhcmVEYXRhRnVu YzxHPiBjb21wYXJlX2Z1bmMpOwotLQkJW1JldHVybnNNb2RpZmllZFBvaW50ZXIgKCldCi0tCQlw dWJsaWMgdm9pZCBzb3J0IChDb21wYXJlRnVuYzxHPiBjb21wYXJlX2Z1bmMpOwotLQkJW1JldHVy bnNNb2RpZmllZFBvaW50ZXIgKCldCi0tCQlwdWJsaWMgdm9pZCBzb3J0X3dpdGhfZGF0YSAoQ29t cGFyZURhdGFGdW5jPEc+IGNvbXBhcmVfZnVuYyk7Ci0tCQlbUmV0dXJuc01vZGlmaWVkUG9pbnRl ciAoKV0KLS0JCXB1YmxpYyB2b2lkIGNvbmNhdCAob3duZWQgU0xpc3Q8Rz4gbGlzdDIpOwotLQkJ cHVibGljIHZvaWQgQGZvcmVhY2ggKEZ1bmM8Rz4gZnVuYyk7Ci0tCi0tCQlwdWJsaWMgdW5vd25l ZCBTTGlzdDxHPiBsYXN0ICgpOwotLQkJcHVibGljIHVub3duZWQgU0xpc3Q8Rz4gbnRoICh1aW50 IG4pOwotLQkJcHVibGljIHVub3duZWQgRyBudGhfZGF0YSAodWludCBuKTsKLS0KLS0JCXB1Ymxp YyB1bm93bmVkIFNMaXN0PEc+IGZpbmQgKEcgZGF0YSk7Ci0tCQlwdWJsaWMgdW5vd25lZCBTTGlz dDxHPiBmaW5kX2N1c3RvbSAoRyBkYXRhLCBDb21wYXJlRnVuYzxHPiBmdW5jKTsKLS0JCVtDQ29k ZSAoY25hbWUgPSAiZ19zbGlzdF9maW5kX2N1c3RvbSIsIHNpbXBsZV9nZW5lcmljcyA9IHRydWUp XQotLQkJcHVibGljIHVub3duZWQgU0xpc3Q8Rz4gc2VhcmNoPFQ+IChUIGRhdGEsIFNlYXJjaEZ1 bmM8RyxUPiBmdW5jKTsKLS0KLS0JCXB1YmxpYyBpbnQgcG9zaXRpb24gKFNMaXN0PEc+IGxsaW5r KTsKLS0JCXB1YmxpYyBpbnQgaW5kZXggKEcgZGF0YSk7Ci0tCi0tCQlwdWJsaWMgRyBkYXRhOwot LQkJcHVibGljIFNMaXN0PEc+IG5leHQ7Ci0tCX0KLS0KLS0JW0NDb2RlIChoYXNfdGFyZ2V0ID0g ZmFsc2UpXQotLQlwdWJsaWMgZGVsZWdhdGUgaW50IENvbXBhcmVGdW5jPEc+IChHIGEsIEcgYik7 Ci0tCi0tCXB1YmxpYyBkZWxlZ2F0ZSBpbnQgQ29tcGFyZURhdGFGdW5jPEc+IChHIGEsIEcgYik7 Ci0tCi0tCVtWZXJzaW9uIChzaW5jZSA9ICIyLjE2IildCi0tCVtDQ29kZSAoY25hbWUgPSAiKChH Q29tcGFyZUZ1bmMpIGdfc3RyY21wMCkiKV0KLS0JcHVibGljIHN0YXRpYyBHTGliLkNvbXBhcmVG dW5jPHN0cmluZz4gc3RyY21wOwotLQotLQlwdWJsaWMgZGVsZWdhdGUgRyBDb3B5RnVuYzxHPiAo RyBzcmMpOwotLQotLQlbQ0NvZGUgKGNuYW1lID0gIkdDb21wYXJlRnVuYyIsIGhhc190YXJnZXQg PSBmYWxzZSldCi0tCXB1YmxpYyBkZWxlZ2F0ZSBpbnQgU2VhcmNoRnVuYzxHLFQ+IChHIGEsIFQg Yik7Ci0tCi0tCS8qIERvdWJsZS1lbmRlZCBRdWV1ZXMgKi8KLS0KLS0JW0NvbXBhY3RdCi0tCVtD Q29kZSAoZHVwX2Z1bmN0aW9uID0gImdfcXVldWVfY29weSIsIGZyZWVfZnVuY3Rpb24gPSAiZ19x dWV1ZV9mcmVlIildCi0tCXB1YmxpYyBjbGFzcyBRdWV1ZTxHPiB7Ci0tCQlwdWJsaWMgdW5vd25l ZCBMaXN0PEc+IGhlYWQ7Ci0tCQlwdWJsaWMgdW5vd25lZCBMaXN0PEc+IHRhaWw7Ci0tCQlwdWJs aWMgdWludCBsZW5ndGg7Ci0tCi0tCQlwdWJsaWMgUXVldWUgKCk7Ci0tCi0tCQlbVmVyc2lvbiAo c2luY2UgPSAiMi4xNCIpXQotLQkJcHVibGljIHZvaWQgY2xlYXIgKCk7Ci0tCQlwdWJsaWMgYm9v bCBpc19lbXB0eSAoKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjQiKV0KLS0JCXB1YmxpYyB1 aW50IGdldF9sZW5ndGggKCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi40IildCi0tCQlwdWJs aWMgdm9pZCByZXZlcnNlICgpOwotLQkJcHVibGljIFF1ZXVlIGNvcHkgKCk7Ci0tCQlbVmVyc2lv biAoc2luY2UgPSAiMi40IildCi0tCQlwdWJsaWMgdW5vd25lZCBMaXN0PEc+IGZpbmQgKEcgZGF0 YSk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi40IildCi0tCQlwdWJsaWMgdW5vd25lZCBMaXN0 PEc+IGZpbmRfY3VzdG9tIChHIGRhdGEsIENvbXBhcmVGdW5jPEc+IGZ1bmMpOwotLQkJW0NDb2Rl IChjbmFtZSA9ICJnX3F1ZXVlX2ZpbmRfY3VzdG9tIiwgc2ltcGxlX2dlbmVyaWNzID0gdHJ1ZSld Ci0tCQlwdWJsaWMgdW5vd25lZCBMaXN0PEc+IHNlYXJjaDxUPiAoVCBkYXRhLCBTZWFyY2hGdW5j PEcsVD4gZnVuYyk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi40IildCi0tCQlwdWJsaWMgdm9p ZCBzb3J0IChDb21wYXJlRGF0YUZ1bmM8Rz4gY29tcGFyZV9mdW5jKTsKLS0JCXB1YmxpYyB2b2lk IHB1c2hfaGVhZCAob3duZWQgRyBkYXRhKTsKLS0JCXB1YmxpYyB2b2lkIHB1c2hfdGFpbCAob3du ZWQgRyBkYXRhKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjQiKV0KLS0JCXB1YmxpYyB2b2lk IHB1c2hfbnRoIChvd25lZCBHIGRhdGEsIGludCBuKTsKLS0JCXB1YmxpYyBHIHBvcF9oZWFkICgp OwotLQkJcHVibGljIEcgcG9wX3RhaWwgKCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi40Iild Ci0tCQlwdWJsaWMgRyBwb3BfbnRoICh1aW50IG4pOwotLQkJcHVibGljIHVub3duZWQgRyBwZWVr X2hlYWQgKCk7Ci0tCQlwdWJsaWMgdW5vd25lZCBHIHBlZWtfdGFpbCAoKTsKLS0JCVtWZXJzaW9u IChzaW5jZSA9ICIyLjQiKV0KLS0JCXB1YmxpYyB1bm93bmVkIEcgcGVla19udGggKHVpbnQgbik7 Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi40IildCi0tCQlwdWJsaWMgaW50IGluZGV4IChHIGRh dGEpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuNCIpXQotLQkJcHVibGljIGJvb2wgcmVtb3Zl IChHIGRhdGEpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuNCIpXQotLQkJcHVibGljIHVpbnQg cmVtb3ZlX2FsbCAoRyBkYXRhKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjQiKV0KLS0JCXB1 YmxpYyB2b2lkIGRlbGV0ZV9saW5rIChMaXN0PEc+IGxpbmspOwotLQkJW1ZlcnNpb24gKHNpbmNl ID0gIjIuNCIpXQotLQkJcHVibGljIHZvaWQgdW5saW5rIChMaXN0PEc+IGxpbmspOwotLQkJW1Zl cnNpb24gKHNpbmNlID0gIjIuNCIpXQotLQkJcHVibGljIHZvaWQgaW5zZXJ0X2JlZm9yZSAoTGlz dDxHPiBzaWJsaW5nLCBvd25lZCBHIGRhdGEpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuNCIp XQotLQkJcHVibGljIHZvaWQgaW5zZXJ0X2FmdGVyIChMaXN0PEc+IHNpYmxpbmcsIG93bmVkIEcg ZGF0YSk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi40IildCi0tCQlwdWJsaWMgdm9pZCBpbnNl cnRfc29ydGVkIChvd25lZCBHIGRhdGEsIENvbXBhcmVEYXRhRnVuYzxHPiBmdW5jKTsKLS0JfQot LQotLQkvKiBTZXF1ZW5jZXMgKi8KLS0KLS0JW0NvbXBhY3RdCi0tCVtWZXJzaW9uIChzaW5jZSA9 ICIyLjE0IildCi0tCVtDQ29kZSAoZnJlZV9mdW5jdGlvbiA9ICJnX3NlcXVlbmNlX2ZyZWUiKV0K LS0JcHVibGljIGNsYXNzIFNlcXVlbmNlPEc+IHsKLS0JCVtDQ29kZSAoc2ltcGxlX2dlbmVyaWNz ID0gdHJ1ZSldCi0tCQlwdWJsaWMgU2VxdWVuY2UgKCk7Ci0tCQlwdWJsaWMgaW50IGdldF9sZW5n dGggKCk7Ci0tCQlwdWJsaWMgdm9pZCBAZm9yZWFjaCAoRnVuYzxHPiBmdW5jKTsKLS0JCXB1Ymxp YyB2b2lkIHNvcnQgKENvbXBhcmVEYXRhRnVuYzxHPiBjbXBfZnVuYyk7Ci0tCQlwdWJsaWMgdm9p ZCBzb3J0X2l0ZXIgKFNlcXVlbmNlSXRlckNvbXBhcmVGdW5jPEc+IGZ1bmMpOwotLQkJcHVibGlj IFNlcXVlbmNlSXRlcjxHPiBnZXRfYmVnaW5faXRlciAoKTsKLS0JCXB1YmxpYyBTZXF1ZW5jZUl0 ZXI8Rz4gZ2V0X2VuZF9pdGVyICgpOwotLQkJcHVibGljIFNlcXVlbmNlSXRlcjxHPiBnZXRfaXRl cl9hdF9wb3MgKGludCBwb3MpOwotLQkJcHVibGljIFNlcXVlbmNlSXRlcjxHPiBhcHBlbmQgKG93 bmVkIEcgZGF0YSk7Ci0tCQlwdWJsaWMgU2VxdWVuY2VJdGVyPEc+IHByZXBlbmQgKG93bmVkIEcg ZGF0YSk7Ci0tCQlwdWJsaWMgU2VxdWVuY2VJdGVyPEc+IGluc2VydF9zb3J0ZWQgKG93bmVkIEcg ZGF0YSwgQ29tcGFyZURhdGFGdW5jPEc+IGNtcF9mdW5jKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9 ICIyLjQ4IildCi0tCQlwdWJsaWMgYm9vbCBpc19lbXB0eSAoKTsKLS0JCXB1YmxpYyBTZXF1ZW5j ZUl0ZXI8Rz4gaW5zZXJ0X3NvcnRlZF9pdGVyIChvd25lZCBHIGRhdGEsIFNlcXVlbmNlSXRlckNv bXBhcmVGdW5jPEc+IGl0ZXJfY21wKTsKLS0JCXB1YmxpYyBTZXF1ZW5jZUl0ZXI8Rz4gc2VhcmNo IChHIGRhdGEsIENvbXBhcmVEYXRhRnVuYzxHPiBjbXBfZnVuYyk7Ci0tCQlwdWJsaWMgU2VxdWVu Y2VJdGVyPEc+IHNlYXJjaF9pdGVyIChHIGRhdGEsIFNlcXVlbmNlSXRlckNvbXBhcmVGdW5jPEc+ IGl0ZXJfY21wKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjI4IildCi0tCQlwdWJsaWMgU2Vx dWVuY2VJdGVyPEc+IGxvb2t1cCAoRyBkYXRhLCBDb21wYXJlRGF0YUZ1bmM8Rz4gY21wX2Z1bmMp OwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMjgiKV0KLS0JCXB1YmxpYyBTZXF1ZW5jZUl0ZXI8 Rz4gbG9va3VwX2l0ZXIgKEcgZGF0YSwgU2VxdWVuY2VJdGVyQ29tcGFyZUZ1bmM8Rz4gaXRlcl9j bXApOwotLQotLQkJW1ZlcnNpb24gKGRlcHJlY2F0ZWRfc2luY2UgPSAidmFsYS0wLjI2IiwgcmVw bGFjZW1lbnQgPSAiU2VxdWVuY2VJdGVyLmZvcmVhY2hfcmFuZ2UiKV0KLS0JCXB1YmxpYyBzdGF0 aWMgdm9pZCBmb3JlYWNoX3JhbmdlIChTZXF1ZW5jZUl0ZXI8Rz4gYmVnaW4sIFNlcXVlbmNlSXRl cjxHPiBlbmQsIEZ1bmM8Rz4gZnVuYyk7Ci0tCQlbVmVyc2lvbiAoZGVwcmVjYXRlZF9zaW5jZSA9 ICJ2YWxhLTAuMjYiLCByZXBsYWNlbWVudCA9ICJTZXF1ZW5jZUl0ZXIuaW5zZXJ0X2JlZm9yZSIp XQotLQkJcHVibGljIHN0YXRpYyBTZXF1ZW5jZUl0ZXI8Rz4gaW5zZXJ0X2JlZm9yZSAoU2VxdWVu Y2VJdGVyPEc+IGl0ZXIsIG93bmVkIEcgZGF0YSk7Ci0tCQlbVmVyc2lvbiAoZGVwcmVjYXRlZF9z aW5jZSA9ICJ2YWxhLTAuMjYiLCByZXBsYWNlbWVudCA9ICJTZXF1ZW5jZUl0ZXIubW92ZV90byIp XQotLQkJcHVibGljIHN0YXRpYyB2b2lkIG1vdmUgKFNlcXVlbmNlSXRlcjxHPiBzcmMsIFNlcXVl bmNlSXRlcjxHPiBkZXN0KTsKLS0JCVtWZXJzaW9uIChkZXByZWNhdGVkX3NpbmNlID0gInZhbGEt MC4yNiIsIHJlcGxhY2VtZW50ID0gIlNlcXVlbmNlSXRlci5zd2FwIildCi0tCQlwdWJsaWMgc3Rh dGljIHZvaWQgc3dhcCAoU2VxdWVuY2VJdGVyPEc+IHNyYywgU2VxdWVuY2VJdGVyPEc+IGRlc3Qp OwotLQkJW1ZlcnNpb24gKGRlcHJlY2F0ZWRfc2luY2UgPSAidmFsYS0wLjI2IiwgcmVwbGFjZW1l bnQgPSAiU2VxdWVuY2VJdGVyLnNvcnRfY2hhbmdlZCIpXQotLQkJcHVibGljIHN0YXRpYyB2b2lk IHNvcnRfY2hhbmdlZCAoU2VxdWVuY2VJdGVyPEc+IGl0ZXIsIENvbXBhcmVEYXRhRnVuYzxHPiBj bXBfZnVuYyk7Ci0tCQlbVmVyc2lvbiAoZGVwcmVjYXRlZF9zaW5jZSA9ICJ2YWxhLTAuMjYiLCBy ZXBsYWNlbWVudCA9ICJTZXF1ZW5jZUl0ZXIuc29ydF9jaGFuZ2VkX2l0ZXIiKV0KLS0JCXB1Ymxp YyBzdGF0aWMgdm9pZCBzb3J0X2NoYW5nZWRfaXRlciAoU2VxdWVuY2VJdGVyPEc+IGl0ZXIsIFNl cXVlbmNlSXRlckNvbXBhcmVGdW5jPEc+IGl0ZXJfY21wKTsKLS0JCVtWZXJzaW9uIChkZXByZWNh dGVkX3NpbmNlID0gInZhbGEtMC4yNiIsIHJlcGxhY2VtZW50ID0gIlNlcXVlbmNlSXRlci5yZW1v dmUiKV0KLS0JCXB1YmxpYyBzdGF0aWMgdm9pZCByZW1vdmUgKFNlcXVlbmNlSXRlcjxHPiBpdGVy KTsKLS0JCVtWZXJzaW9uIChkZXByZWNhdGVkX3NpbmNlID0gInZhbGEtMC4yNiIsIHJlcGxhY2Vt ZW50ID0gIlNlcXVlbmNlSXRlci5yZW1vdmVfcmFuZ2UiKV0KLS0JCXB1YmxpYyBzdGF0aWMgdm9p ZCByZW1vdmVfcmFuZ2UgKFNlcXVlbmNlSXRlcjxHPiBiZWdpbiwgU2VxdWVuY2VJdGVyPEc+IGVu ZCk7Ci0tCQlbVmVyc2lvbiAoZGVwcmVjYXRlZF9zaW5jZSA9ICJ2YWxhLTAuMjYiLCByZXBsYWNl bWVudCA9ICJTZXF1ZW5jZUl0ZXIubW92ZV9yYW5nZSIpXQotLQkJcHVibGljIHN0YXRpYyB2b2lk IG1vdmVfcmFuZ2UgKFNlcXVlbmNlSXRlcjxHPiBkZXN0LCBTZXF1ZW5jZUl0ZXI8Rz4gYmVnaW4s IFNlcXVlbmNlSXRlcjxHPiBlbmQpOwotLQkJW1ZlcnNpb24gKGRlcHJlY2F0ZWRfc2luY2UgPSAi dmFsYS0wLjI2IiwgcmVwbGFjZW1lbnQgPSAiU2VxdWVuY2VJdGVyLmdldCIpXQotLQkJcHVibGlj IHN0YXRpYyB1bm93bmVkIEcgZ2V0IChTZXF1ZW5jZUl0ZXI8Rz4gaXRlcik7Ci0tCQlbVmVyc2lv biAoZGVwcmVjYXRlZF9zaW5jZSA9ICJ2YWxhLTAuMjYiLCByZXBsYWNlbWVudCA9ICJTZXF1ZW5j ZUl0ZXIuc2V0IildCi0tCQlwdWJsaWMgc3RhdGljIHZvaWQgc2V0IChTZXF1ZW5jZUl0ZXI8Rz4g aXRlciwgb3duZWQgRyBkYXRhKTsKLS0JCVtWZXJzaW9uIChkZXByZWNhdGVkX3NpbmNlID0gInZh bGEtMC4yNiIsIHJlcGxhY2VtZW50ID0gIlNlcXVlbmNlSXRlci5yYW5nZV9nZXRfbWlkcG9pbnQi KV0KLS0JCXB1YmxpYyBzdGF0aWMgU2VxdWVuY2VJdGVyPEc+IHJhbmdlX2dldF9taWRwb2ludCAo U2VxdWVuY2VJdGVyPEc+IGJlZ2luLCBTZXF1ZW5jZUl0ZXI8Rz4gZW5kKTsKLS0JfQotLQotLQlb Q29tcGFjdF0KLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuMTQiKV0KLS0JW0NDb2RlIChyZWZfZnVu Y3Rpb24gPSAiIiwgdW5yZWZfZnVuY3Rpb24gPSAiIildCi0tCXB1YmxpYyBjbGFzcyBTZXF1ZW5j ZUl0ZXI8Rz4gewotLQkJcHVibGljIGJvb2wgaXNfYmVnaW4gKCk7Ci0tCQlwdWJsaWMgYm9vbCBp c19lbmQgKCk7Ci0tCQlwdWJsaWMgU2VxdWVuY2VJdGVyPEc+IG5leHQgKCk7Ci0tCQlwdWJsaWMg U2VxdWVuY2VJdGVyPEc+IHByZXYgKCk7Ci0tCQlwdWJsaWMgaW50IGdldF9wb3NpdGlvbiAoKTsK LS0JCXB1YmxpYyBTZXF1ZW5jZUl0ZXI8Rz4gbW92ZSAoaW50IGRlbHRhKTsKLS0JCXB1YmxpYyB1 bm93bmVkIFNlcXVlbmNlPEc+IGdldF9zZXF1ZW5jZSAoKTsKLS0JCXB1YmxpYyBpbnQgY29tcGFy ZSAoU2VxdWVuY2VJdGVyPEc+IG90aGVyKTsKLS0KLS0JCVtDQ29kZSAoY25hbWUgPSAiZ19zZXF1 ZW5jZV9mb3JlYWNoX3JhbmdlIildCi0tCQlwdWJsaWMgdm9pZCBmb3JlYWNoX3JhbmdlIChTZXF1 ZW5jZUl0ZXI8Rz4gZW5kLCBGdW5jPEc+IGZ1bmMpOwotLQkJW0NDb2RlIChjbmFtZSA9ICJnX3Nl cXVlbmNlX2luc2VydF9iZWZvcmUiKV0KLS0JCXB1YmxpYyBTZXF1ZW5jZUl0ZXI8Rz4gaW5zZXJ0 X2JlZm9yZSAob3duZWQgRyBkYXRhKTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZ19zZXF1ZW5jZV9t b3ZlIildCi0tCQlwdWJsaWMgdm9pZCBtb3ZlX3RvIChTZXF1ZW5jZUl0ZXI8Rz4gZGVzdCk7Ci0t CQlbQ0NvZGUgKGNuYW1lID0gImdfc2VxdWVuY2Vfc3dhcCIpXQotLQkJcHVibGljIHZvaWQgc3dh cCAoU2VxdWVuY2VJdGVyPEc+IGRlc3QpOwotLQkJW0NDb2RlIChjbmFtZSA9ICJnX3NlcXVlbmNl X3NvcnRfY2hhbmdlZCIpXQotLQkJcHVibGljIHZvaWQgc29ydF9jaGFuZ2VkIChDb21wYXJlRGF0 YUZ1bmM8Rz4gY21wX2Z1bmMpOwotLQkJW0NDb2RlIChjbmFtZSA9ICJnX3NlcXVlbmNlX3NvcnRf Y2hhbmdlZF9pdGVyIildCi0tCQlwdWJsaWMgdm9pZCBzb3J0X2NoYW5nZWRfaXRlciAoU2VxdWVu Y2VJdGVyQ29tcGFyZUZ1bmM8Rz4gaXRlcl9jbXApOwotLQkJW0NDb2RlIChjbmFtZSA9ICJnX3Nl cXVlbmNlX3JlbW92ZSIpXQotLQkJcHVibGljIHZvaWQgcmVtb3ZlICgpOwotLQkJW0NDb2RlIChj bmFtZSA9ICJnX3NlcXVlbmNlX3JlbW92ZV9yYW5nZSIpXQotLQkJcHVibGljIHZvaWQgcmVtb3Zl X3JhbmdlIChTZXF1ZW5jZUl0ZXI8Rz4gZW5kKTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZ19zZXF1 ZW5jZV9tb3ZlX3JhbmdlIildCi0tCQlwdWJsaWMgdm9pZCBtb3ZlX3JhbmdlIChTZXF1ZW5jZUl0 ZXI8Rz4gYmVnaW4sIFNlcXVlbmNlSXRlcjxHPiBlbmQpOwotLQkJW0NDb2RlIChjbmFtZSA9ICJn X3NlcXVlbmNlX2dldCIpXQotLQkJcHVibGljIHVub3duZWQgRyBnZXQgKCk7Ci0tCQlbQ0NvZGUg KGNuYW1lID0gImdfc2VxdWVuY2Vfc2V0IildCi0tCQlwdWJsaWMgdm9pZCBzZXQgKG93bmVkIEcg ZGF0YSk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImdfc2VxdWVuY2VfcmFuZ2VfZ2V0X21pZHBvaW50 IildCi0tCQlwdWJsaWMgU2VxdWVuY2VJdGVyPEc+IHJhbmdlX2dldF9taWRwb2ludCAoU2VxdWVu Y2VJdGVyPEc+IGVuZCk7Ci0tCX0KLS0KLS0JcHVibGljIGRlbGVnYXRlIGludCBTZXF1ZW5jZUl0 ZXJDb21wYXJlRnVuYzxHPiAoU2VxdWVuY2VJdGVyPEc+IGEsIFNlcXVlbmNlSXRlcjxHPiBiKTsK LS0KLS0JLyogSGFzaCBUYWJsZXMgKi8KLS0KLS0JW0NvbXBhY3RdCi0tCVtDQ29kZSAocmVmX2Z1 bmN0aW9uID0gImdfaGFzaF90YWJsZV9yZWYiLCB1bnJlZl9mdW5jdGlvbiA9ICJnX2hhc2hfdGFi bGVfdW5yZWYiLCB0eXBlX2lkID0gIkdfVFlQRV9IQVNIX1RBQkxFIiwgdHlwZV9zaWduYXR1cmUg PSAiYXslc30iKV0KLS0JcHVibGljIGNsYXNzIEhhc2hUYWJsZTxLLFY+IHsKLS0JCVtDQ29kZSAo Y25hbWUgPSAiZ19oYXNoX3RhYmxlX25ld19mdWxsIiwgc2ltcGxlX2dlbmVyaWNzID0gdHJ1ZSld Ci0tCQlwdWJsaWMgSGFzaFRhYmxlIChIYXNoRnVuYzxLPj8gaGFzaF9mdW5jLCBFcXVhbEZ1bmM8 Sz4/IGtleV9lcXVhbF9mdW5jKTsKLS0JCXB1YmxpYyBIYXNoVGFibGUuZnVsbCAoSGFzaEZ1bmM8 Sz4/IGhhc2hfZnVuYywgRXF1YWxGdW5jPEs+PyBrZXlfZXF1YWxfZnVuYywgRGVzdHJveU5vdGlm eT8ga2V5X2Rlc3Ryb3lfZnVuYywgRGVzdHJveU5vdGlmeT8gdmFsdWVfZGVzdHJveV9mdW5jKTsK LS0JCXB1YmxpYyB2b2lkIGluc2VydCAob3duZWQgSyBrZXksIG93bmVkIFYgdmFsdWUpOwotLQkJ cHVibGljIHZvaWQgcmVwbGFjZSAob3duZWQgSyBrZXksIG93bmVkIFYgdmFsdWUpOwotLQkJW1Zl cnNpb24gKHNpbmNlID0gIjIuMzIiLCBkZXByZWNhdGVkX3NpbmNlID0gInZhbGEtMC4yNiIsIHJl cGxhY2VtZW50ID0gIkdlbmVyaWNTZXQuYWRkIildCi0tCQlwdWJsaWMgdm9pZCBhZGQgKG93bmVk IEsga2V5KTsKLS0JCXB1YmxpYyB1bm93bmVkIFY/IGxvb2t1cCAoSyBrZXkpOwotLQkJcHVibGlj IGJvb2wgbG9va3VwX2V4dGVuZGVkIChLIGxvb2t1cF9rZXksIG91dCB1bm93bmVkIEsgb3JpZ19r ZXksIG91dCB1bm93bmVkIFYgdmFsdWUpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMzIiKV0K LS0JCXB1YmxpYyBib29sIGNvbnRhaW5zIChLIGtleSk7Ci0tCQlwdWJsaWMgYm9vbCByZW1vdmUg KEsga2V5KTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjEyIildCi0tCQlwdWJsaWMgdm9pZCBy ZW1vdmVfYWxsICgpOwotLQkJcHVibGljIHVpbnQgZm9yZWFjaF9yZW1vdmUgKEhSRnVuYzxLLFY+ IHByZWRpY2F0ZSk7Ci0tCQlwdWJsaWMgdWludCBmb3JlYWNoX3N0ZWFsIChIUkZ1bmM8SyxWPiBw cmVkaWNhdGUpOwotLQkJW0NDb2RlIChjbmFtZSA9ICJnX2hhc2hfdGFibGVfbG9va3VwIildCi0t CQlwdWJsaWMgdW5vd25lZCBWPyBAZ2V0IChLIGtleSk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImdf aGFzaF90YWJsZV9pbnNlcnQiKV0KLS0JCXB1YmxpYyB2b2lkIEBzZXQgKG93bmVkIEsga2V5LCBv d25lZCBWIHZhbHVlKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjE0IildCi0tCQlwdWJsaWMg TGlzdDx1bm93bmVkIEs+IGdldF9rZXlzICgpOwotLSNpZiBWQUxBXzBfMjYKLS0JCVtDQ29kZSAo YXJyYXlfbGVuZ3RoX3R5cGUgPSAiZ3VpbnQiKV0KLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjQw IildCi0tCQlwdWJsaWMgKHVub3duZWQgSylbXSBnZXRfa2V5c19hc19hcnJheSAoKTsKLS0jZW5k aWYKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjE0IildCi0tCQlwdWJsaWMgTGlzdDx1bm93bmVk IFY+IGdldF92YWx1ZXMgKCk7Ci0tCQlwdWJsaWMgdm9pZCBAZm9yZWFjaCAoSEZ1bmM8SyxWPiBm dW5jKTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZ19oYXNoX3RhYmxlX2ZvcmVhY2giKV0KLS0JCXB1 YmxpYyB2b2lkIGZvcl9lYWNoIChIRnVuYzxLLFY+IGZ1bmMpOwotLQkJW1ZlcnNpb24gKHNpbmNl ID0gIjIuNCIpXQotLQkJcHVibGljIHVub3duZWQgVj8gZmluZCAoSFJGdW5jPEssVj4gcHJlZGlj YXRlKTsKLS0JCXB1YmxpYyB1aW50IHNpemUgKCk7Ci0tCQlwdWJsaWMgYm9vbCBzdGVhbCAoSyBr ZXkpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMTIiKV0KLS0JCXB1YmxpYyB2b2lkIHN0ZWFs X2FsbCAoKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjU4IildCi0tCQlwdWJsaWMgYm9vbCBz dGVhbF9leHRlbmRlZCAoSyBsb29rdXBfa2V5LCBvdXQgSyBzdG9sZW5fa2V5LCBvdXQgViBzdG9s ZW5fdmFsdWUpOwotLQkJW0NDb2RlIChjbmFtZSA9ICJfdmFsYV9nX2hhc2hfdGFibGVfdGFrZSIp XQotLQkJcHVibGljIFY/IHRha2UgKEsga2V5LCBvdXQgYm9vbCBleGlzdHMgPSBudWxsKSB7Ci0t CQkJR0xpYi5IYXNoVGFibGU8SyxWPj8gaHQgPSBudWxsOwotLQkJCXZvaWQqKiBodHAgPSAmaHQ7 Ci0tCQkJKmh0cCA9IHRoaXMubG9va3VwIChrZXkpOwotLQkJCWV4aXN0cyA9IHRoaXMuc3RlYWwg KGtleSk7Ci0tCQkJcmV0dXJuIGh0OwotLQkJfQotLQkJcHVibGljIHVpbnQgbGVuZ3RoIHsKLS0J CQlbQ0NvZGUgKGNuYW1lID0gImdfaGFzaF90YWJsZV9zaXplIildCi0tCQkJZ2V0OwotLQkJfQot LQl9Ci0tCi0tCVtWZXJzaW9uIChzaW5jZSA9ICIyLjE2IildCi0tCXB1YmxpYyBzdHJ1Y3QgSGFz aFRhYmxlSXRlcjxLLFY+IHsKLS0JCXB1YmxpYyBIYXNoVGFibGVJdGVyIChHTGliLkhhc2hUYWJs ZTxLLFY+IHRhYmxlKTsKLS0JCXB1YmxpYyBib29sIG5leHQgKFtDQ29kZSAodHlwZSA9ICJncG9p bnRlcioiKV0gb3V0IHVub3duZWQgSyBrZXksIFtDQ29kZSAodHlwZSA9ICJncG9pbnRlcioiKV0g b3V0IHVub3duZWQgViB2YWx1ZSk7Ci0tCQlwdWJsaWMgdm9pZCByZW1vdmUgKCk7Ci0tCQlwdWJs aWMgdm9pZCBzdGVhbCAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIEdMaWIuSGFzaFRhYmxlPEssVj4g Z2V0X2hhc2hfdGFibGUgKCk7Ci0tCX0KLS0KLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuMzIiKV0K LS0JW0NvbXBhY3QsIENDb2RlIChjbmFtZSA9ICJHSGFzaFRhYmxlIiwgbG93ZXJfY2FzZV9jcHJl Zml4ID0gImdfaGFzaF90YWJsZV8iLCByZWZfZnVuY3Rpb24gPSAiZ19oYXNoX3RhYmxlX3JlZiIs IHVucmVmX2Z1bmN0aW9uID0gImdfaGFzaF90YWJsZV91bnJlZiIsIHR5cGVfaWQgPSAiR19UWVBF X0hBU0hfVEFCTEUiLCB0eXBlX3NpZ25hdHVyZSA9ICJheyVzfSIpXQotLQlwdWJsaWMgY2xhc3Mg R2VuZXJpY1NldDxUPiB7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImdfaGFzaF90YWJsZV9uZXdfZnVs bCIsIHNpbXBsZV9nZW5lcmljcyA9IHRydWUpXQotLQkJcHVibGljIEdlbmVyaWNTZXQgKEhhc2hG dW5jPFQ+PyBoYXNoX2Z1bmMsIEVxdWFsRnVuYzxUPj8gZXF1YWxfZnVuYywgR0xpYi5EZXN0cm95 Tm90aWZ5PyBhbHdheXNfcGFzc19udWxsX2hlcmUgPSBudWxsKTsKLS0JCXB1YmxpYyB2b2lkIGFk ZCAob3duZWQgVCB2YWx1ZSk7Ci0tCQlwdWJsaWMgYm9vbCBjb250YWlucyAoVCB2YWx1bGUpOwot LQkJcHVibGljIGJvb2wgcmVtb3ZlIChUIHZhbHVlKTsKLS0JCXB1YmxpYyB2b2lkIHJlbW92ZV9h bGwgKCk7Ci0tCQlwdWJsaWMgR0xpYi5MaXN0PHVub3duZWQgVD4gZ2V0X3ZhbHVlcyAoKTsKLS0J CVtDQ29kZSAoY25hbWUgPSAiZ19oYXNoX3RhYmxlX2l0ZXJfaW5pdCIsIGluc3RhbmNlX3BvcyA9 IC0xKV0KLS0JCXB1YmxpYyBHTGliLkdlbmVyaWNTZXRJdGVyPFQ+IGl0ZXJhdG9yICgpOwotLQkJ W0NDb2RlIChjbmFtZSA9ICJfdmFsYV9nX2hhc2hfc2V0X2ZvcmVhY2giKV0KLS0JCXB1YmxpYyB2 b2lkIEBmb3JlYWNoIChHTGliLkZ1bmM8VD4gZnVuYykgewotLQkJCSgoR0xpYi5IYXNoVGFibGU8 dW5vd25lZCBULFQ+KSB0aGlzKS5mb3JlYWNoICgoaywgdikgPT4gZnVuYyAodikpOwotLQkJfQot LQkJcHVibGljIHVpbnQgbGVuZ3RoIHsKLS0JCQlbQ0NvZGUgKGNuYW1lID0gImdfaGFzaF90YWJs ZV9zaXplIildCi0tCQkJZ2V0OwotLQkJfQotLQl9Ci0tCi0tCVtWZXJzaW9uIChzaW5jZSA9ICIy LjMyIildCi0tCVtDQ29kZSAoY25hbWUgPSAiR0hhc2hUYWJsZUl0ZXIiLCBsb3dlcl9jYXNlX2Nw cmVmaXggPSAiZ19oYXNoX3RhYmxlX2l0ZXJfIildCi0tCXB1YmxpYyBzdHJ1Y3QgR2VuZXJpY1Nl dEl0ZXI8VD4gewotLQkJW0NDb2RlIChjbmFtZSA9ICJfdmFsYV9oYXNoX3NldF9uZXh0X3ZhbHVl IildCi0tCQlwdWJsaWMgdW5vd25lZCBUPyBuZXh0X3ZhbHVlICgpIHsKLS0JCQl2b2lkKiB2aSA9 ICZ0aGlzOwotLQkJCUdMaWIuSGFzaFRhYmxlSXRlcjx1bm93bmVkIFQsVD4qIGh0cCA9IHZpOwot LQkJCXVub3duZWQgVD8gdmFsdWU7Ci0tCQkJcmV0dXJuIGh0cC0+bmV4dCAob3V0IHZhbHVlLCBu dWxsKSA/IHZhbHVlIDogbnVsbDsKLS0JCX0KLS0JCXB1YmxpYyB2b2lkIHJlbW92ZSAoKTsKLS0J fQotLQotLQlbQ0NvZGUgKGhhc190YXJnZXQgPSBmYWxzZSldCi0tCXB1YmxpYyBkZWxlZ2F0ZSB1 aW50IEhhc2hGdW5jPEs+IChLIGtleSk7Ci0tCVtDQ29kZSAoaGFzX3RhcmdldCA9IGZhbHNlKV0K LS0JcHVibGljIGRlbGVnYXRlIGJvb2wgRXF1YWxGdW5jPEc+IChHIGEsIEcgYik7Ci0tCXB1Ymxp YyBkZWxlZ2F0ZSB2b2lkIEhGdW5jPEssVj4gKEsga2V5LCBWIHZhbHVlKTsKLS0JcHVibGljIGRl bGVnYXRlIGJvb2wgSFJGdW5jPEssVj4gKEsga2V5LCBWIHZhbHVlKTsKLS0KLS0JW0NDb2RlICho YXNfdGFyZ2V0ID0gZmFsc2UpXQotLQlwdWJsaWMgZGVsZWdhdGUgdm9pZCBEZXN0cm95Tm90aWZ5 ICh2b2lkKiBkYXRhKTsKLS0KLS0JW0NDb2RlIChjbmFtZSA9ICJnX2RpcmVjdF9oYXNoIildCi0t CXB1YmxpYyBzdGF0aWMgR0xpYi5IYXNoRnVuYzx2b2lkKj4gZGlyZWN0X2hhc2g7Ci0tCVtDQ29k ZSAoY25hbWUgPSAiZ19kaXJlY3RfZXF1YWwiKV0KLS0JcHVibGljIHN0YXRpYyBHTGliLkVxdWFs RnVuYzx2b2lkKj4gZGlyZWN0X2VxdWFsOwotLQlbQ0NvZGUgKGNuYW1lID0gImdfaW50NjRfaGFz aCIpXQotLQlwdWJsaWMgc3RhdGljIEdMaWIuSGFzaEZ1bmM8aW50NjQ/PiBpbnQ2NF9oYXNoOwot LQlbVmVyc2lvbiAoc2luY2UgPSAiMi4yMiIpXQotLQlbQ0NvZGUgKGNuYW1lID0gImdfaW50NjRf ZXF1YWwiKV0KLS0JcHVibGljIHN0YXRpYyBHTGliLkVxdWFsRnVuYzxpbnQ2ND8+IGludDY0X2Vx dWFsOwotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi4yMiIpXQotLQlbQ0NvZGUgKGNuYW1lID0gImdf aW50X2hhc2giKV0KLS0JcHVibGljIHN0YXRpYyBHTGliLkhhc2hGdW5jPGludD8+IGludF9oYXNo OwotLQlbQ0NvZGUgKGNuYW1lID0gImdfaW50X2VxdWFsIildCi0tCXB1YmxpYyBzdGF0aWMgR0xp Yi5FcXVhbEZ1bmM8aW50Pz4gaW50X2VxdWFsOwotLQlbQ0NvZGUgKGNuYW1lID0gImdfc3RyX2hh c2giKV0KLS0JcHVibGljIHN0YXRpYyBHTGliLkhhc2hGdW5jPHN0cmluZz4gc3RyX2hhc2g7Ci0t CVtDQ29kZSAoY25hbWUgPSAiZ19zdHJfZXF1YWwiKV0KLS0JcHVibGljIHN0YXRpYyBHTGliLkVx dWFsRnVuYzxzdHJpbmc+IHN0cl9lcXVhbDsKLS0JW0NDb2RlIChjbmFtZSA9ICJnX2ZyZWUiKV0K LS0JcHVibGljIHN0YXRpYyBHTGliLkRlc3Ryb3lOb3RpZnkgZ19mcmVlOwotLQlbQ0NvZGUgKGNu YW1lID0gImdfbGlzdF9mcmVlIildCi0tCXB1YmxpYyBzdGF0aWMgR0xpYi5EZXN0cm95Tm90aWZ5 IGdfbGlzdF9mcmVlOwotLQlbQ0NvZGUgKGNuYW1lID0gIigoR0Rlc3Ryb3lOb3RpZnkpIGdfdmFy aWFudF91bnJlZikiKV0KLS0JcHVibGljIHN0YXRpYyBHTGliLkRlc3Ryb3lOb3RpZnkgZ192YXJp YW50X3VucmVmOwotLQotLQkvKiBTdHJpbmdzICovCi0tCi0tCVtDb21wYWN0XQotLQlbR0lSIChu YW1lID0gIlN0cmluZyIpXQotLQlbQ0NvZGUgKGNuYW1lID0gIkdTdHJpbmciLCBjcHJlZml4ID0g Imdfc3RyaW5nXyIsIGZyZWVfZnVuY3Rpb24gPSAiZ19zdHJpbmdfZnJlZSIsIHR5cGVfaWQgPSAi R19UWVBFX0dTVFJJTkciKV0KLS0JcHVibGljIGNsYXNzIFN0cmluZ0J1aWxkZXIgewotLQkJcHVi bGljIFN0cmluZ0J1aWxkZXIgKHN0cmluZyBpbml0ID0gIiIpOwotLQkJW0NDb2RlIChjbmFtZSA9 ICJnX3N0cmluZ19zaXplZF9uZXciKV0KLS0JCXB1YmxpYyBTdHJpbmdCdWlsZGVyLnNpemVkIChz aXplX3QgZGZsX3NpemUpOwotLQkJcHVibGljIHVub3duZWQgU3RyaW5nQnVpbGRlciBhc3NpZ24g KHN0cmluZyBydmFsKTsKLS0JCXB1YmxpYyB1bm93bmVkIFN0cmluZ0J1aWxkZXIgYXBwZW5kIChz dHJpbmcgdmFsKTsKLS0JCXB1YmxpYyB1bm93bmVkIFN0cmluZ0J1aWxkZXIgYXBwZW5kX2MgKGNo YXIgYyk7Ci0tCQlwdWJsaWMgdW5vd25lZCBTdHJpbmdCdWlsZGVyIGFwcGVuZF91bmljaGFyICh1 bmljaGFyIHdjKTsKLS0JCXB1YmxpYyB1bm93bmVkIFN0cmluZ0J1aWxkZXIgYXBwZW5kX2xlbiAo c3RyaW5nIHZhbCwgc3NpemVfdCBsZW4pOwotLQkJcHVibGljIHVub3duZWQgU3RyaW5nQnVpbGRl ciBwcmVwZW5kIChzdHJpbmcgdmFsKTsKLS0JCXB1YmxpYyB1bm93bmVkIFN0cmluZ0J1aWxkZXIg cHJlcGVuZF9jIChjaGFyIGMpOwotLQkJcHVibGljIHVub3duZWQgU3RyaW5nQnVpbGRlciBwcmVw ZW5kX3VuaWNoYXIgKHVuaWNoYXIgd2MpOwotLQkJcHVibGljIHVub3duZWQgU3RyaW5nQnVpbGRl ciBwcmVwZW5kX2xlbiAoc3RyaW5nIHZhbCwgc3NpemVfdCBsZW4pOwotLQkJcHVibGljIHVub3du ZWQgU3RyaW5nQnVpbGRlciBpbnNlcnQgKHNzaXplX3QgcG9zLCBzdHJpbmcgdmFsKTsKLS0JCXB1 YmxpYyB1bm93bmVkIFN0cmluZ0J1aWxkZXIgaW5zZXJ0X2xlbiAoc3NpemVfdCBwb3MsIHN0cmlu ZyB2YWwsIHNzaXplX3QgbGVuKTsKLS0JCXB1YmxpYyB1bm93bmVkIFN0cmluZ0J1aWxkZXIgaW5z ZXJ0X3VuaWNoYXIgKHNzaXplX3QgcG9zLCB1bmljaGFyIHdjKTsKLS0JCVtWZXJzaW9uIChzaW5j ZSA9ICIyLjE0IildCi0tCQlwdWJsaWMgdW5vd25lZCBTdHJpbmdCdWlsZGVyIG92ZXJ3cml0ZSAo c2l6ZV90IHBvcywgc3RyaW5nIHZhbCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xNCIpXQot LQkJcHVibGljIHVub3duZWQgU3RyaW5nQnVpbGRlciBvdmVyd3JpdGVfbGVuIChzaXplX3QgcG9z LCBzdHJpbmcgdmFsLCBzc2l6ZV90IGxlbik7Ci0tCQlwdWJsaWMgdW5vd25lZCBTdHJpbmdCdWls ZGVyIGVyYXNlIChzc2l6ZV90IHBvcyA9IDAsIHNzaXplX3QgbGVuID0gLTEpOwotLQkJcHVibGlj IHVub3duZWQgU3RyaW5nQnVpbGRlciB0cnVuY2F0ZSAoc2l6ZV90IGxlbiA9IDApOwotLQotLQkJ W1ByaW50ZkZvcm1hdF0KLS0JCXB1YmxpYyB2b2lkIHByaW50ZiAoc3RyaW5nIGZvcm1hdCwgLi4u KTsKLS0JCVtQcmludGZGb3JtYXRdCi0tCQlwdWJsaWMgdm9pZCBhcHBlbmRfcHJpbnRmIChzdHJp bmcgZm9ybWF0LCAuLi4pOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMTQiKV0KLS0JCXB1Ymxp YyB2b2lkIHZwcmludGYgKHN0cmluZyBmb3JtYXQsIHZhX2xpc3QgYXJncyk7Ci0tCQlbVmVyc2lv biAoc2luY2UgPSAiMi4xNCIpXQotLQkJcHVibGljIHZvaWQgYXBwZW5kX3ZwcmludGYgKHN0cmlu ZyBmb3JtYXQsIHZhX2xpc3QgYXJncyk7Ci0tCi0tCQlwdWJsaWMgc3RyaW5nIHN0cjsKLS0JCXB1 YmxpYyBzc2l6ZV90IGxlbjsKLS0JCXB1YmxpYyBzc2l6ZV90IGFsbG9jYXRlZF9sZW47Ci0tCi0t CQlwdWJsaWMgdWludDhbXSBkYXRhIHsKLS0JCQlnZXQgewotLQkJCQl1bm93bmVkIHVpbnQ4W10g cmVzID0gKHVpbnQ4W10pIHRoaXMuc3RyOwotLQkJCQlyZXMubGVuZ3RoID0gKGludCkgdGhpcy5s ZW47Ci0tCQkJCXJldHVybiByZXM7Ci0tCQkJfQotLQkJfQotLQotLQkJW1ZlcnNpb24gKHNpbmNl ID0gIjIuMzQiKV0KLS0JCXB1YmxpYyBzdGF0aWMgQnl0ZXMgZnJlZV90b19ieXRlcyAob3duZWQg U3RyaW5nQnVpbGRlciBzdHIpOwotLQl9Ci0tCi0tCS8qIFN0cmluZyBDaHVua3MgKi8KLS0KLS0J W0NvbXBhY3RdCi0tCVtDQ29kZSAoZnJlZV9mdW5jdGlvbiA9ICJnX3N0cmluZ19jaHVua19mcmVl IildCi0tCXB1YmxpYyBjbGFzcyBTdHJpbmdDaHVuayB7Ci0tCQlwdWJsaWMgU3RyaW5nQ2h1bmsg KHNpemVfdCBzaXplKTsKLS0JCXB1YmxpYyB1bm93bmVkIHN0cmluZyBpbnNlcnQgKHN0cmluZyBz dHIpOwotLQkJcHVibGljIHVub3duZWQgc3RyaW5nIGluc2VydF9jb25zdCAoc3RyaW5nIHN0cik7 Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi40IildCi0tCQlwdWJsaWMgdW5vd25lZCBzdHJpbmcg aW5zZXJ0X2xlbiAoc3RyaW5nIHN0ciwgc3NpemVfdCBsZW4pOwotLQkJW1ZlcnNpb24gKHNpbmNl ID0gIjIuMTQiKV0KLS0JCXB1YmxpYyB2b2lkIGNsZWFyICgpOwotLQl9Ci0tCi0tCS8qIFBvaW50 ZXIgQXJyYXlzICovCi0tCi0tCVtDb21wYWN0XQotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi4yMiIs IGRlcHJlY2F0ZWRfc2luY2UgPSAidmFsYS0wLjI2IiwgcmVwbGFjZW1lbnQ9IkdlbmVyaWNBcnJh eSIpXQotLQlbQ0NvZGUgKHJlZl9mdW5jdGlvbiA9ICJnX3B0cl9hcnJheV9yZWYiLCB1bnJlZl9m dW5jdGlvbiA9ICJnX3B0cl9hcnJheV91bnJlZiIsIHR5cGVfaWQgPSAiR19UWVBFX1BUUl9BUlJB WSIpXQotLQlwdWJsaWMgY2xhc3MgUHRyQXJyYXkgewotLQkJcHVibGljIFB0ckFycmF5ICgpOwot LQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMjIiKV0KLS0JCXB1YmxpYyBQdHJBcnJheS53aXRoX2Zy ZWVfZnVuYyAoR0xpYi5EZXN0cm95Tm90aWZ5PyBlbGVtZW50X2ZyZWVfZnVuYyk7Ci0tCQlbQ0Nv ZGUgKGNuYW1lID0gImdfcHRyX2FycmF5X3NpemVkX25ldyIpXQotLQkJcHVibGljIFB0ckFycmF5 LnNpemVkICh1aW50IHJlc2VydmVkX3NpemUpOwotLQkJcHVibGljIHZvaWQgYWRkICh2b2lkKiBk YXRhKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjQiKV0KLS0JCXB1YmxpYyB2b2lkIGZvcmVh Y2ggKEdMaWIuRnVuYzx2b2lkKj4gZnVuYyk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImdfcHRyX2Fy cmF5X2luZGV4IildCi0tCQlwdWJsaWMgdm9pZCogaW5kZXgodWludCBpbmRleCk7Ci0tCQlwdWJs aWMgYm9vbCByZW1vdmUgKHZvaWQqIGRhdGEpOwotLQkJcHVibGljIHZvaWQqIHJlbW92ZV9pbmRl eCAodWludCBpbmRleCk7Ci0tCQlwdWJsaWMgYm9vbCByZW1vdmVfZmFzdCAodm9pZCAqZGF0YSk7 Ci0tCQlwdWJsaWMgdm9pZCByZW1vdmVfaW5kZXhfZmFzdCAodWludCBpbmRleCk7Ci0tCQlbVmVy c2lvbiAoc2luY2UgPSAiMi40IildCi0tCQlwdWJsaWMgdm9pZCByZW1vdmVfcmFuZ2UgKHVpbnQg aW5kZXgsIHVpbnQgbGVuZ3RoKTsKLS0JCXB1YmxpYyB2b2lkIHNvcnQgKENvbXBhcmVGdW5jPHZv aWQqKj4gY29tcGFyZV9mdW5jKTsKLS0JCXB1YmxpYyB2b2lkIHNvcnRfd2l0aF9kYXRhIChDb21w YXJlRGF0YUZ1bmM8dm9pZCoqPiBjb21wYXJlX2Z1bmMpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0g IjIuMjIiKV0KLS0JCXB1YmxpYyB2b2lkIHNldF9mcmVlX2Z1bmMgKEdMaWIuRGVzdHJveU5vdGlm eT8gZWxlbWVudF9mcmVlX2Z1bmN0aW9uKTsKLS0JCXB1YmxpYyB2b2lkIHNldF9zaXplIChpbnQg bGVuZ3RoKTsKLS0KLS0JCXB1YmxpYyB1aW50IGxlbjsKLS0JCXB1YmxpYyB2b2lkKiogcGRhdGE7 Ci0tCX0KLS0KLS0JW0NvbXBhY3RdCi0tCVtDQ29kZSAoY25hbWUgPSAiR1B0ckFycmF5IiwgY3By ZWZpeCA9ICJnX3B0cl9hcnJheV8iLCByZWZfZnVuY3Rpb24gPSAiZ19wdHJfYXJyYXlfcmVmIiwg dW5yZWZfZnVuY3Rpb24gPSAiZ19wdHJfYXJyYXlfdW5yZWYiLCB0eXBlX2lkID0gIkdfVFlQRV9Q VFJfQVJSQVkiKV0KLS0JW0dJUiAobmFtZSA9ICJQdHJBcnJheSIpXQotLQlwdWJsaWMgY2xhc3Mg R2VuZXJpY0FycmF5PEc+IHsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjMwIildCi0tCQlbQ0Nv ZGUgKGNuYW1lID0gImdfcHRyX2FycmF5X25ld19mdWxsIiwgc2ltcGxlX2dlbmVyaWNzID0gdHJ1 ZSldCi0tCQlwdWJsaWMgR2VuZXJpY0FycmF5ICh1aW50IHJlc2VydmVkX3NpemUgPSAwKTsKLS0J CXB1YmxpYyB2b2lkIGFkZCAob3duZWQgRyBkYXRhKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIy LjU0IildCi0tCQlwdWJsaWMgYm9vbCBmaW5kIChHIG5lZWRsZSwgb3V0IHVpbnQgaW5kZXggPSBu dWxsKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjU0IildCi0tCQlwdWJsaWMgYm9vbCBmaW5k X3dpdGhfZXF1YWxfZnVuYyAoRyBuZWVkbGUsIEdMaWIuRXF1YWxGdW5jPEc+PyBlcXVhbF9mdW5j LCBvdXQgdWludCBpbmRleCA9IG51bGwpOwotLQkJcHVibGljIHZvaWQgZm9yZWFjaCAoR0xpYi5G dW5jPEc+IGZ1bmMpOwotLQkJW0NDb2RlIChjbmFtZSA9ICJnX3B0cl9hcnJheV9pbmRleCIpXQot LQkJcHVibGljIHVub3duZWQgRyBnZXQgKHVpbnQgaW5kZXgpOwotLQkJW1ZlcnNpb24gKHNpbmNl ID0gIjIuNDAiKV0KLS0JCXB1YmxpYyB2b2lkIGluc2VydCAoaW50IGluZGV4LCBvd25lZCBHIGRh dGEpOwotLQkJcHVibGljIGJvb2wgcmVtb3ZlIChHIGRhdGEpOwotLQkJcHVibGljIHZvaWQgcmVt b3ZlX2luZGV4ICh1aW50IGluZGV4KTsKLS0JCXB1YmxpYyBib29sIHJlbW92ZV9mYXN0IChHIGRh dGEpOwotLQkJcHVibGljIHZvaWQgcmVtb3ZlX2luZGV4X2Zhc3QgKHVpbnQgaW5kZXgpOwotLQkJ cHVibGljIHZvaWQgcmVtb3ZlX3JhbmdlICh1aW50IGluZGV4LCB1aW50IGxlbmd0aCk7Ci0tCQlw dWJsaWMgdm9pZCBzZXQgKHVpbnQgaW5kZXgsIG93bmVkIEcgZGF0YSkgewotLQkJCXRoaXMuYWRk ICgob3duZWQpIGRhdGEpOwotLQkJCXRoaXMucmVtb3ZlX2luZGV4X2Zhc3QgKGluZGV4KTsKLS0J CX0KLS0JCVtDQ29kZSAoY25hbWUgPSAidmFsYV9nX3B0cl9hcnJheV9zb3J0IildCi0tCQlwdWJs aWMgdm9pZCBzb3J0IChHTGliLkNvbXBhcmVGdW5jPEc+IGNvbXBhcmVfZnVuYykgewotLQkJCXRo aXMuX3NvcnRfd2l0aF9kYXRhICgoYSwgYikgPT4gewotLQkJCQlyZXR1cm4gY29tcGFyZV9mdW5j ICgoRyoqKSAoKmEpLCAoRyoqKSAoKmIpKTsKLS0JCQl9KTsKLS0JCX0KLS0JCVtDQ29kZSAoY25h bWUgPSAiZ19wdHJfYXJyYXlfc29ydF93aXRoX2RhdGEiKV0KLS0JCXB1YmxpYyB2b2lkIF9zb3J0 X3dpdGhfZGF0YSAoR0xpYi5Db21wYXJlRGF0YUZ1bmM8RyoqPiBjb21wYXJlX2Z1bmMpOwotLQkJ W0NDb2RlIChjbmFtZSA9ICJ2YWxhX2dfcHRyX2FycmF5X3NvcnRfd2l0aF9kYXRhIildCi0tCQlw dWJsaWMgdm9pZCBzb3J0X3dpdGhfZGF0YSAoR0xpYi5Db21wYXJlRGF0YUZ1bmM8Rz4gY29tcGFy ZV9mdW5jKSB7Ci0tCQkJdGhpcy5fc29ydF93aXRoX2RhdGEgKChhLCBiKSA9PiB7Ci0tCQkJCXJl dHVybiBjb21wYXJlX2Z1bmMgKChHKiopICgqYSksIChHKiopICgqYikpOwotLQkJCX0pOwotLQkJ fQotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuNTgiKV0KLS0JCXB1YmxpYyBHIHN0ZWFsX2luZGV4 ICh1aW50IGluZGV4KTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjU4IildCi0tCQlwdWJsaWMg RyBzdGVhbF9pbmRleF9mYXN0ICh1aW50IGluZGV4KTsKLS0KLS0JCXByaXZhdGUgdm9pZCBzZXRf c2l6ZSAoaW50IGxlbmd0aCk7Ci0tCi0tCQlwdWJsaWMgaW50IGxlbmd0aCB7Ci0tCQkJZ2V0IHsg cmV0dXJuIChpbnQpIHRoaXMubGVuOyB9Ci0tCQkJc2V0IHsgdGhpcy5zZXRfc2l6ZSAodmFsdWUp OyB9Ci0tCQl9Ci0tCi0tCQlbQ0NvZGUgKGNuYW1lID0gInBkYXRhIiwgYXJyYXlfbGVuZ3RoX2Nu YW1lID0gImxlbiIsIGFycmF5X2xlbmd0aF90eXBlID0gImd1aW50IildCi0tCQlwdWJsaWMgR1td IGRhdGE7Ci0tCi0tCQlwcml2YXRlIHVpbnQgbGVuOwotLQl9Ci0tCi0tCVtDb21wYWN0XQotLQlb VmVyc2lvbiAoc2luY2UgPSAiMi4zMiIpXQotLQlbQ0NvZGUgKGNwcmVmaXggPSAiZ19ieXRlc18i LCByZWZfZnVuY3Rpb24gPSAiZ19ieXRlc19yZWYiLCB1bnJlZl9mdW5jdGlvbiA9ICJnX2J5dGVz X3VucmVmIiwgdHlwZV9pZCA9ICJHX1RZUEVfQllURVMiKV0KLS0JcHVibGljIGNsYXNzIEJ5dGVz IHsKLS0JCXB1YmxpYyBCeXRlcyAoW0NDb2RlIChhcnJheV9sZW5ndGhfdHlwZSA9ICJnc2l6ZSIp XSB1aW50OFtdIGRhdGEpOwotLQkJcHVibGljIEJ5dGVzLnRha2UgKFtDQ29kZSAoYXJyYXlfbGVu Z3RoX3R5cGUgPSAiZ3NpemUiKV0gb3duZWQgdWludDhbXSBkYXRhKTsKLS0JCXB1YmxpYyBCeXRl cy5zdGF0aWMgKFtDQ29kZSAoYXJyYXlfbGVuZ3RoX3R5cGUgPSAiZ3NpemUiKV0gdWludDhbXSBk YXRhKTsKLS0JCXB1YmxpYyBCeXRlcy53aXRoX2ZyZWVfZnVuYyAoW0NDb2RlIChhcnJheV9sZW5n dGhfdHlwZSA9ICJnc2l6ZSIpXSBvd25lZCB1aW50OFtdIGRhdGEsIEdMaWIuRGVzdHJveU5vdGlm eT8gZnJlZV9mdW5jLCB2b2lkKiB1c2VyX2RhdGEpOwotLQkJcHVibGljIEJ5dGVzLmZyb21fYnl0 ZXMgKEdMaWIuQnl0ZXMgYnl0ZXMsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpOwotLQot LQkJW0NDb2RlIChjbmFtZSA9ICJnX2J5dGVzX25ld193aXRoX2ZyZWVfZnVuYyIsIHNpbXBsZV9n ZW5lcmljcyA9IHRydWUpXQotLQkJcHVibGljIHN0YXRpYyBCeXRlcyBuZXdfd2l0aF9vd25lcjxU PiAoW0NDb2RlIChhcnJheV9sZW5ndGhfdHlwZSA9ICJnc2l6ZSIpXSB1aW50OFtdIGRhdGEsIFtD Q29kZSAoZGVzdHJveV9ub3RpZnlfcG9zID0gMS45KV0gb3duZWQgVD8gb3duZXIgPSBudWxsKTsK LS0KLS0JCVtDQ29kZSAoYXJyYXlfbGVuZ3RoX3R5cGUgPSAiZ3NpemUiKV0KLS0JCXB1YmxpYyB1 bm93bmVkIHVpbnQ4W10gZ2V0X2RhdGEgKCk7Ci0tCQlwdWJsaWMgc2l6ZV90IGdldF9zaXplICgp OwotLQkJcHVibGljIHVpbnQgaGFzaCAoKTsKLS0JCXB1YmxpYyBpbnQgY29tcGFyZSAoR0xpYi5C eXRlcyBieXRlczIpOwotLQkJW0NDb2RlIChhcnJheV9sZW5ndGhfdHlwZSA9ICJnc2l6ZSIpXQot LQkJcHVibGljIHN0YXRpYyB1aW50OFtdIHVucmVmX3RvX2RhdGEgKG93bmVkIEdMaWIuQnl0ZXMg Ynl0ZXMpOwotLQkJcHVibGljIHN0YXRpYyBHTGliLkJ5dGVBcnJheSB1bnJlZl90b19hcnJheSAo b3duZWQgR0xpYi5CeXRlcyBieXRlcyk7Ci0tCi0tCQlbQ0NvZGUgKGNuYW1lID0gIl92YWxhX2df Ynl0ZXNfZ2V0IildCi0tCQlwdWJsaWMgdWludDggZ2V0IChpbnQgaW5kZXgpIHsKLS0JCQl1bm93 bmVkIHVpbnQ4W10gZGF0YSA9IHRoaXMuZ2V0X2RhdGEgKCk7Ci0tCQkJcmV0dXJuIGRhdGFbaW5k ZXhdOwotLQkJfQotLQotLQkJW0NDb2RlIChjbmFtZSA9ICJfdmFsYV9nX2J5dGVzX3NsaWNlIild Ci0tCQlwdWJsaWMgR0xpYi5CeXRlcyBzbGljZSAoc2l6ZV90IHN0YXJ0LCBzaXplX3QgZW5kKSB7 Ci0tCQkJcmV0dXJuIG5ldyBHTGliLkJ5dGVzLmZyb21fYnl0ZXMgKHRoaXMsIHN0YXJ0LCBlbmQg LSBzdGFydCk7Ci0tCQl9Ci0tCi0tCQlwdWJsaWMgaW50IGxlbmd0aCB7Ci0tCQkJW0NDb2RlIChj bmFtZSA9ICJfdmFsYV9nX2J5dGVzX2dldF9sZW5ndGgiKV0KLS0JCQlnZXQgewotLQkJCQlyZXR1 cm4gKGludCkgdGhpcy5nZXRfc2l6ZSAoKTsKLS0JCQl9Ci0tCQl9Ci0tCX0KLS0KLS0JLyogQnl0 ZSBBcnJheXMgKi8KLS0KLS0JW0NvbXBhY3RdCi0tCVtWZXJzaW9uIChzaW5jZSA9ICIyLjIyIild Ci0tCVtDQ29kZSAoY3ByZWZpeCA9ICJnX2J5dGVfYXJyYXlfIiwgcmVmX2Z1bmN0aW9uID0gImdf Ynl0ZV9hcnJheV9yZWYiLCB1bnJlZl9mdW5jdGlvbiA9ICJnX2J5dGVfYXJyYXlfdW5yZWYiLCB0 eXBlX2lkID0gIkdfVFlQRV9CWVRFX0FSUkFZIildCi0tCXB1YmxpYyBjbGFzcyBCeXRlQXJyYXkg ewotLQkJcHVibGljIEJ5dGVBcnJheSAoKTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZ19ieXRlX2Fy cmF5X3NpemVkX25ldyIpXQotLQkJcHVibGljIEJ5dGVBcnJheS5zaXplZCAodWludCByZXNlcnZl ZF9zaXplKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjMyIildCi0tCQlwdWJsaWMgQnl0ZUFy cmF5LnRha2UgKG93bmVkIHVpbnQ4W10gZGF0YSk7Ci0tCQlwdWJsaWMgdm9pZCBhcHBlbmQgKHVp bnQ4W10gZGF0YSk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4zMiIpXQotLQkJcHVibGljIHN0 YXRpYyBHTGliLkJ5dGVzIGZyZWVfdG9fYnl0ZXMgKG93bmVkIEdMaWIuQnl0ZUFycmF5IGFycmF5 KTsKLS0JCXB1YmxpYyB2b2lkIHByZXBlbmQgKHVpbnQ4W10gZGF0YSk7Ci0tCQlwdWJsaWMgdm9p ZCByZW1vdmVfaW5kZXggKHVpbnQgaW5kZXgpOwotLQkJcHVibGljIHZvaWQgcmVtb3ZlX2luZGV4 X2Zhc3QgKHVpbnQgaW5kZXgpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuNCIpXQotLQkJcHVi bGljIHZvaWQgcmVtb3ZlX3JhbmdlICh1aW50IGluZGV4LCB1aW50IGxlbmd0aCk7Ci0tCQlwdWJs aWMgdm9pZCBzb3J0IChDb21wYXJlRnVuYzxpbnQ4PiBjb21wYXJlX2Z1bmMpOwotLQkJcHVibGlj IHZvaWQgc29ydF93aXRoX2RhdGEgKENvbXBhcmVEYXRhRnVuYzxpbnQ4PiBjb21wYXJlX2Z1bmMp OwotLQkJcHVibGljIHZvaWQgc2V0X3NpemUgKHVpbnQgbGVuZ3RoKTsKLS0KLS0JCXB1YmxpYyB1 aW50IGxlbjsKLS0JCVtDQ29kZSAoYXJyYXlfbGVuZ3RoX2NuYW1lID0gImxlbiIsIGFycmF5X2xl bmd0aF90eXBlID0gImd1aW50IildCi0tCQlwdWJsaWMgdWludDhbXSBkYXRhOwotLQl9Ci0tCi0t CS8qIE4tYXJ5IFRyZWVzICovCi0tCi0tCXB1YmxpYyBkZWxlZ2F0ZSBib29sIE5vZGVUcmF2ZXJz ZUZ1bmMgKE5vZGUgbm9kZSk7Ci0tCXB1YmxpYyBkZWxlZ2F0ZSB2b2lkIE5vZGVGb3JlYWNoRnVu YyAoTm9kZSBub2RlKTsKLS0KLS0JW0NDb2RlIChjcHJlZml4ID0gIkdfVFJBVkVSU0VfIildCi0t CXB1YmxpYyBlbnVtIFRyYXZlcnNlRmxhZ3MgewotLQkJTEVBVkVTLAotLQkJTk9OX0xFQVZFUywK LS0JCUFMTCwKLS0JCU1BU0ssCi0tCQlMRUFGUywKLS0JCU5PTl9MRUFGUwotLQl9Ci0tCi0tCVtD b21wYWN0XQotLQlbQ0NvZGUgKGR1cF9mdW5jdGlvbiA9ICJnX25vZGVfY29weSIsIGZyZWVfZnVu Y3Rpb24gPSAiZ19ub2RlX2Rlc3Ryb3kiKV0KLS0JcHVibGljIGNsYXNzIE5vZGU8Rz4gewotLQkJ cHVibGljIE5vZGUob3duZWQgRz8gZGF0YSA9IG51bGwpOwotLQkJcHVibGljIE5vZGU8dW5vd25l ZCBHPiBjb3B5ICgpOwotLQkJcHVibGljIE5vZGU8Rz4gY29weV9kZWVwIChDb3B5RnVuYzxHPiBj b3B5X2Z1bmMpOwotLQkJcHVibGljIHVub3duZWQgTm9kZTxHPiBpbnNlcnQgKGludCBwb3NpdGlv biwgb3duZWQgTm9kZTxHPiBub2RlKTsKLS0JCXB1YmxpYyB1bm93bmVkIE5vZGU8Rz4gaW5zZXJ0 X2JlZm9yZSAoTm9kZTxHPiBzaWJsaW5nLCBvd25lZCBOb2RlPEc+IG5vZGUpOwotLQkJcHVibGlj IHVub3duZWQgTm9kZTxHPiBpbnNlcnRfYWZ0ZXIgKE5vZGU8Rz4gc2libGluZywgb3duZWQgTm9k ZTxHPiBub2RlKTsKLS0JCXB1YmxpYyB1bm93bmVkIE5vZGU8Rz4gYXBwZW5kIChvd25lZCBOb2Rl PEc+IG5vZGUpOwotLQkJcHVibGljIHVub3duZWQgTm9kZTxHPiBwcmVwZW5kIChvd25lZCBOb2Rl PEc+IG5vZGUpOwotLQkJcHVibGljIHVub3duZWQgTm9kZTxHPiBpbnNlcnRfZGF0YSAoaW50IHBv c2l0aW9uLCBvd25lZCBHIGRhdGEpOwotLQkJcHVibGljIHVub3duZWQgTm9kZTxHPiBpbnNlcnRf ZGF0YV9iZWZvcmUgKE5vZGU8Rz4gc2libGluZywgb3duZWQgRyBkYXRhKTsKLS0JCXB1YmxpYyB1 bm93bmVkIE5vZGU8Rz4gYXBwZW5kX2RhdGEgKG93bmVkIEcgZGF0YSk7Ci0tCQlwdWJsaWMgdW5v d25lZCBOb2RlPEc+IHByZXBlbmRfZGF0YSAob3duZWQgRyBkYXRhKTsKLS0JCXB1YmxpYyB2b2lk IHJldmVyc2VfY2hpbGRyZW4gKCk7Ci0tCQlwdWJsaWMgdm9pZCB0cmF2ZXJzZSAoVHJhdmVyc2VU eXBlIG9yZGVyLCBUcmF2ZXJzZUZsYWdzIGZsYWdzLCBpbnQgbWF4X2RlcHRoLCBOb2RlVHJhdmVy c2VGdW5jIGZ1bmMpOwotLQkJcHVibGljIHZvaWQgY2hpbGRyZW5fZm9yZWFjaCAoVHJhdmVyc2VG bGFncyBmbGFncywgTm9kZUZvcmVhY2hGdW5jIGZ1bmMpOwotLQkJcHVibGljIHVub3duZWQgTm9k ZTxHPiBnZXRfcm9vdCAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIE5vZGU8Rz4gZmluZCAoVHJhdmVy c2VUeXBlIG9yZGVyLCBUcmF2ZXJzZUZsYWdzIGZsYWdzLCBHIGRhdGEpOwotLQkJcHVibGljIHVu b3duZWQgTm9kZTxHPiBmaW5kX2NoaWxkIChUcmF2ZXJzZUZsYWdzIGZsYWdzLCBHIGRhdGEpOwot LQkJcHVibGljIGludCBjaGlsZF9pbmRleCAoRyBkYXRhKTsKLS0JCXB1YmxpYyBpbnQgY2hpbGRf cG9zaXRpb24gKE5vZGU8Rz4gY2hpbGQpOwotLQkJcHVibGljIHVub3duZWQgTm9kZTxHPiBmaXJz dF9jaGlsZCAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIE5vZGU8Rz4gbGFzdF9jaGlsZCAoKTsKLS0J CXB1YmxpYyB1bm93bmVkIE5vZGU8Rz4gbnRoX2NoaWxkICh1aW50IG4pOwotLQkJcHVibGljIHVu b3duZWQgTm9kZTxHPiBmaXJzdF9zaWJsaW5nICgpOwotLQkJcHVibGljIHVub3duZWQgTm9kZTxH PiBuZXh0X3NpYmxpbmcgKCk7Ci0tCQlwdWJsaWMgdW5vd25lZCBOb2RlPEc+IHByZXZfc2libGlu ZyAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIE5vZGU8Rz4gbGFzdF9zaWJsaW5nICgpOwotLQotLQkJ W0NDb2RlIChjbmFtZSA9ICJHX05PREVfSVNfTEVBRiIpXQotLQkJcHVibGljIGJvb2wgaXNfbGVh ZiAoKTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiR19OT0RFX0lTX1JPT1QiKV0KLS0JCXB1YmxpYyBi b29sIGlzX3Jvb3QgKCk7Ci0tCQlwdWJsaWMgYm9vbCBpc19hbmNlc3RvciAoTm9kZTxHPiBkZXNj ZW5kYW50KTsKLS0KLS0JCXB1YmxpYyB1aW50IGRlcHRoICgpOwotLQkJcHVibGljIHVpbnQgbl9u b2RlcyAoVHJhdmVyc2VGbGFncyBmbGFncyk7Ci0tCQlwdWJsaWMgdWludCBuX2NoaWxkcmVuICgp OwotLQkJcHVibGljIHVpbnQgbWF4X2hlaWdodCAoKTsKLS0KLS0JCVtDQ29kZSAoY25hbWUgPSAi Z19ub2RlX3VubGluayIpXQotLQkJcHVibGljIHZvaWQgX3VubGluayAoKTsKLS0JCVtDQ29kZSAo Y25hbWUgPSAiZ19ub2RlX3VubGlua192YWxhIildCi0tCQlwdWJsaWMgTm9kZTxHPiB1bmxpbmsg KCkKLS0JCXsKLS0JCQl2b2lkICpwdHIgPSB0aGlzOwotLQkJCV91bmxpbmsgKCk7Ci0tCQkJcmV0 dXJuIChOb2RlPEc+KSAob3duZWQpIHB0cjsKLS0JCX0KLS0KLS0JCXB1YmxpYyBHIGRhdGE7Ci0t CQlwdWJsaWMgTm9kZSBuZXh0OwotLQkJcHVibGljIE5vZGUgcHJldjsKLS0JCXB1YmxpYyBOb2Rl IHBhcmVudDsKLS0JCXB1YmxpYyBOb2RlIGNoaWxkcmVuOwotLQl9Ci0tCi0tCS8qIFF1YXJrcyAq LwotLQotLQlbQ0NvZGUgKHR5cGVfaWQgPSAiR19UWVBFX1VJTlQiKV0KLS0JcHVibGljIHN0cnVj dCBRdWFyayA6IHVpbnQzMiB7Ci0tCQlwdWJsaWMgc3RhdGljIFF1YXJrIGZyb21fc3RyaW5nIChz dHJpbmcgc3RyKTsKLS0JCXB1YmxpYyBzdGF0aWMgUXVhcmsgdHJ5X3N0cmluZyAoc3RyaW5nIHN0 cik7Ci0tCQlwdWJsaWMgdW5vd25lZCBzdHJpbmcgdG9fc3RyaW5nICgpOwotLQl9Ci0tCi0tCS8q IEtleWVkIERhdGEgTGlzdHMgKi8KLS0KLS0JW0NDb2RlIChjbmFtZSA9ICJHRGF0YSoiKV0KLS0J cHVibGljIHN0cnVjdCBEYXRhbGlzdDxHPiB7Ci0tCQlwdWJsaWMgRGF0YWxpc3QgKCk7Ci0tCQlw dWJsaWMgdm9pZCBjbGVhciAoKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjM0IildCi0tCQlw dWJsaWMgRyBpZF9kdXBfZGF0YSAoUXVhcmsga2V5X2lkLCBEdXBsaWNhdGVGdW5jPEc+IGR1cF9m dW5jKTsKLS0JCXB1YmxpYyB1bm93bmVkIEcgaWRfZ2V0X2RhdGEgKFF1YXJrIGtleV9pZCk7Ci0t CQlwdWJsaWMgdm9pZCBpZF9zZXRfZGF0YSAoUXVhcmsga2V5X2lkLCBvd25lZCBHIGRhdGEpOwot LQkJcHVibGljIHZvaWQgaWRfc2V0X2RhdGFfZnVsbCAoUXVhcmsga2V5X2lkLCBvd25lZCBHIGRh dGEsIERlc3Ryb3lOb3RpZnk/IGRlc3Ryb3lfZnVuYyk7Ci0tCQlwdWJsaWMgdm9pZCBpZF9yZW1v dmVfZGF0YSAoUXVhcmsga2V5X2lkKTsKLS0JCXB1YmxpYyBHIGlkX3JlbW92ZV9ub19ub3RpZnkg KFF1YXJrIGtleV9pZCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4zNCIpXQotLQkJcHVibGlj IGJvb2wgaWRfcmVwbGFjZV9kYXRhIChRdWFyayBrZXlfaWQsIEcgb2xkdmFsLCBvd25lZCBHIG5l d3ZhbCwgR0xpYi5EZXN0cm95Tm90aWZ5PyBkZXN0cm95LCBvdXQgR0xpYi5EZXN0cm95Tm90aWZ5 PyBvbGRfZGVzdHJveSk7Ci0tCQlwdWJsaWMgdm9pZCBAZm9yZWFjaCAoRGF0YUZvcmVhY2hGdW5j PEc+IGZ1bmMpOwotLQkJcHVibGljIHVub3duZWQgRyBnZXRfZGF0YSAoc3RyaW5nIGtleSk7Ci0t CQlwdWJsaWMgdm9pZCBzZXRfZGF0YV9mdWxsIChzdHJpbmcga2V5LCBvd25lZCBHIGRhdGEsIERl c3Ryb3lOb3RpZnk/IGRlc3RyeV9mdW5jKTsKLS0JCXB1YmxpYyBHIHJlbW92ZV9ub19ub3RpZnkg KHN0cmluZyBrZXkpOwotLQkJcHVibGljIHZvaWQgc2V0X2RhdGEgKHN0cmluZyBrZXksIG93bmVk IEcgZGF0YSk7Ci0tCQlwdWJsaWMgdm9pZCByZW1vdmVfZGF0YSAoc3RyaW5nIGtleSk7Ci0tCX0K LS0KLS0JcHVibGljIGRlbGVnYXRlIHZvaWQgRGF0YUZvcmVhY2hGdW5jPEc+IChRdWFyayBrZXlf aWQsIEcgZGF0YSk7Ci0tCXB1YmxpYyBkZWxlZ2F0ZSBHIER1cGxpY2F0ZUZ1bmM8Rz4gKEcgZGF0 YSk7Ci0tCi0tCS8qIEdBcnJheSAqLwotLQotLQlbQ29tcGFjdF0KLS0JW1ZlcnNpb24gKHNpbmNl ID0gIjIuMjIiKV0KLS0JW0NDb2RlIChyZWZfZnVuY3Rpb24gPSAiZ19hcnJheV9yZWYiLCB1bnJl Zl9mdW5jdGlvbiA9ICJnX2FycmF5X3VucmVmIiwgdHlwZV9pZCA9ICJHX1RZUEVfQVJSQVkiKV0K LS0JcHVibGljIGNsYXNzIEFycmF5PEc+IHsKLS0JCVtDQ29kZSAoY25hbWUgPSAibGVuIildCi0t CQlwdWJsaWMgdWludCBsZW5ndGg7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImRhdGEiLCBhcnJheV9s ZW5ndGhfY25hbWUgPSAibGVuIiwgYXJyYXlfbGVuZ3RoX3R5cGUgPSAidWludCIpXQotLQkJcHVi bGljIEdbXSBkYXRhOwotLQotLQkJcHVibGljIEFycmF5IChib29sIHplcm9fdGVybWluYXRlZCA9 IHRydWUsIGJvb2wgY2xlYXIgPSB0cnVlLCB1bG9uZyBlbGVtZW50X3NpemUgPSAwKTsKLS0JCVtD Q29kZSAoY25hbWUgPSAiZ19hcnJheV9zaXplZF9uZXciKV0KLS0JCXB1YmxpYyBBcnJheS5zaXpl ZCAoYm9vbCB6ZXJvX3Rlcm1pbmF0ZWQsIGJvb2wgY2xlYXIsIHVsb25nIGVsZW1lbnRfc2l6ZSwg dWludCByZXNlcnZlZF9zaXplKTsKLS0JCXB1YmxpYyB2b2lkIGFwcGVuZF92YWwgKG93bmVkIEcg dmFsdWUpOwotLQkJcHVibGljIHZvaWQgYXBwZW5kX3ZhbHMgKHZvaWQqIGRhdGEsIHVpbnQgbGVu KTsKLS0JCXB1YmxpYyB2b2lkIHByZXBlbmRfdmFsIChvd25lZCBHIHZhbHVlKTsKLS0JCXB1Ymxp YyB2b2lkIHByZXBlbmRfdmFscyAodm9pZCogZGF0YSwgdWludCBsZW4pOwotLQkJcHVibGljIHZv aWQgaW5zZXJ0X3ZhbCAodWludCBpbmRleCwgb3duZWQgRyB2YWx1ZSk7Ci0tCQlwdWJsaWMgdm9p ZCBpbnNlcnRfdmFscyAodWludCBpbmRleCwgdm9pZCogZGF0YSwgdWludCBsZW4pOwotLQkJW0ND b2RlIChjbmFtZSA9ICJnX2FycmF5X3JlbW92ZV9pbmRleCIpXQotLQkJcHVibGljIHZvaWQgX3Jl bW92ZV9pbmRleCAodWludCBpbmRleCk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImdfYXJyYXlfcmVt b3ZlX2luZGV4X2Zhc3QiKV0KLS0JCXB1YmxpYyB2b2lkIF9yZW1vdmVfaW5kZXhfZmFzdCAodWlu dCBpbmRleCk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImdfYXJyYXlfcmVtb3ZlX3JhbmdlIildCi0t CQlwdWJsaWMgdm9pZCBfcmVtb3ZlX3JhbmdlICh1aW50IGluZGV4LCB1aW50IGxlbmd0aCk7Ci0t CQlbQ0NvZGUgKGNuYW1lID0gInZhbGFfZ19hcnJheV9yZW1vdmVfaW5kZXgiKV0KLS0JCXB1Ymxp YyBHIHJlbW92ZV9pbmRleCAodWludCBpbmRleCkgewotLQkJCWFzc2VydCAobGVuZ3RoID4gaW5k ZXgpOwotLQkJCUcgZyA9IChvd25lZCkgZGF0YVtpbmRleF07Ci0tCQkJX3JlbW92ZV9pbmRleCAo aW5kZXgpOwotLQkJCXJldHVybiBnOwotLQkJfQotLQkJW0NDb2RlIChjbmFtZSA9ICJ2YWxhX2df YXJyYXlfcmVtb3ZlX2luZGV4X2Zhc3QiKV0KLS0JCXB1YmxpYyBHIHJlbW92ZV9pbmRleF9mYXN0 ICh1aW50IGluZGV4KSB7Ci0tCQkJYXNzZXJ0IChsZW5ndGggPiBpbmRleCk7Ci0tCQkJRyBnID0g KG93bmVkKSBkYXRhW2luZGV4XTsKLS0JCQlfcmVtb3ZlX2luZGV4X2Zhc3QgKGluZGV4KTsKLS0J CQlyZXR1cm4gZzsKLS0JCX0KLS0JCVtDQ29kZSAoY25hbWUgPSAidmFsYV9nX2FycmF5X3JlbW92 ZV9yYW5nZSIpXQotLQkJcHVibGljIEdbXSByZW1vdmVfcmFuZ2UgKHVpbnQgaW5kZXgsIHVpbnQg bGVuZ3RoKSB7Ci0tCQkJYXNzZXJ0ICh0aGlzLmxlbmd0aCA+PSBpbmRleCArIGxlbmd0aCk7Ci0t CQkJR1tdIGdhID0gbmV3IEdbbGVuZ3RoXTsKLS0JCQlmb3IgKHVpbnQgaSA9IDA7IGkgPCBsZW5n dGg7IGkrKykgewotLQkJCQlnYVtpXSA9IChvd25lZCkgZGF0YVtpICsgaW5kZXhdOwotLQkJCX0K LS0JCQlfcmVtb3ZlX3JhbmdlIChpbmRleCwgbGVuZ3RoKTsKLS0JCQlyZXR1cm4gZ2E7Ci0tCQl9 Ci0tCQlwdWJsaWMgdm9pZCBzb3J0IChDb21wYXJlRnVuYzxHPiBjb21wYXJlX2Z1bmMpOwotLQkJ cHVibGljIHZvaWQgc29ydF93aXRoX2RhdGEgKENvbXBhcmVEYXRhRnVuYzxHPiBjb21wYXJlX2Z1 bmMpOwotLQkJW0NDb2RlIChnZW5lcmljX3R5cGVfcG9zID0gMC4xKV0KLS0JCXB1YmxpYyB1bm93 bmVkIEcgaW5kZXggKHVpbnQgaW5kZXgpOwotLQkJcHVibGljIHZvaWQgc2V0X3NpemUgKHVpbnQg bGVuZ3RoKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjMyIildCi0tCQlwdWJsaWMgdm9pZCBz ZXRfY2xlYXJfZnVuYyAoR0xpYi5EZXN0cm95Tm90aWZ5IGNsZWFyX2Z1bmMpOwotLQl9Ci0tCi0t CS8qIEdUcmVlICovCi0tCi0tCXB1YmxpYyBkZWxlZ2F0ZSBib29sIFRyYXZlcnNlRnVuYzxLLFY+ IChLIGtleSwgViB2YWx1ZSk7Ci0tCi0tCVtDQ29kZSAoY3ByZWZpeCA9ICJHXyIsIGhhc190eXBl X2lkID0gZmFsc2UpXQotLQlwdWJsaWMgZW51bSBUcmF2ZXJzZVR5cGUgewotLQkJSU5fT1JERVIs Ci0tCQlQUkVfT1JERVIsCi0tCQlQT1NUX09SREVSLAotLQkJTEVWRUxfT1JERVIKLS0JfQotLQot LQlwdWJsaWMgZGVsZWdhdGUgaW50IFRyZWVTZWFyY2hGdW5jPEs+IChLIGtleSk7Ci0tCi0tCVtD b21wYWN0XQotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi4yMiIpXQotLQlbQ0NvZGUgKHJlZl9mdW5j dGlvbiA9ICJnX3RyZWVfcmVmIiwgdW5yZWZfZnVuY3Rpb24gPSAiZ190cmVlX3VucmVmIildCi0t CXB1YmxpYyBjbGFzcyBUcmVlPEssVj4gewotLQkJW0NDb2RlIChjbmFtZSA9ICJnX3RyZWVfbmV3 X2Z1bGwiLCBzaW1wbGVfZ2VuZXJpY3MgPSB0cnVlKV0KLS0JCXB1YmxpYyBUcmVlIChDb21wYXJl RGF0YUZ1bmM8Sz4ga2V5X2NvbXBhcmVfZnVuYyk7Ci0tCQlbVmVyc2lvbiAoZGVwcmVjYXRlZF9z aW5jZSA9ICJ2YWxhLTAuMjAiLCByZXBsYWNlbWVudCA9ICJUcmVlICgpIildCi0tCQlwdWJsaWMg VHJlZS53aXRoX2RhdGEgKENvbXBhcmVEYXRhRnVuYzxLPiBrZXlfY29tcGFyZV9mdW5jKTsKLS0J CXB1YmxpYyBUcmVlLmZ1bGwgKENvbXBhcmVEYXRhRnVuYzxLPiBrZXlfY29tcGFyZV9mdW5jLCBE ZXN0cm95Tm90aWZ5PyBrZXlfZGVzdHJveV9mdW5jLCBEZXN0cm95Tm90aWZ5PyB2YWx1ZV9kZXN0 cm95X2Z1bmMpOwotLQkJcHVibGljIHZvaWQgaW5zZXJ0IChvd25lZCBLIGtleSwgb3duZWQgViB2 YWx1ZSk7Ci0tCQlwdWJsaWMgdm9pZCByZXBsYWNlIChvd25lZCBLIGtleSwgb3duZWQgViB2YWx1 ZSk7Ci0tCQlwdWJsaWMgaW50IG5ub2RlcyAoKTsKLS0JCXB1YmxpYyBpbnQgaGVpZ2h0ICgpOwot LQkJcHVibGljIHVub3duZWQgViBsb29rdXAgKEsga2V5KTsKLS0JCXB1YmxpYyBib29sIGxvb2t1 cF9leHRlbmRlZCAoSyBsb29rdXBfa2V5LCBvdXQgdW5vd25lZCBLIG9yaWdfa2V5LCBvdXQgdW5v d25lZCBWIHZhbHVlKTsKLS0JCXB1YmxpYyB2b2lkIGZvcmVhY2ggKFRyYXZlcnNlRnVuYzxLLFY+ IHRyYXZlcnNlX2Z1bmMpOwotLQkJcHVibGljIHVub3duZWQgViBzZWFyY2ggKFRyZWVTZWFyY2hG dW5jPEs+IHNlYXJjaF9mdW5jKTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZ190cmVlX3NlYXJjaCIp XQotLQkJcHVibGljIHVub3duZWQgViBzZWFyY2hfa2V5IChDb21wYXJlRnVuYzxLPiBzZWFyY2hf ZnVuYywgSyBrZXkpOwotLQkJcHVibGljIGJvb2wgcmVtb3ZlIChLIGtleSk7Ci0tCQlwdWJsaWMg Ym9vbCBzdGVhbCAoSyBrZXkpOwotLQl9Ci0tCi0tCS8qIEludGVybmF0aW9uYWxpemF0aW9uICov Ci0tCi0tCVtWZXJzaW9uIChzaW5jZSA9ICIyLjQiKV0KLS0JW0NDb2RlIChjbmFtZSA9ICJfIiwg Y2hlYWRlcl9maWxlbmFtZSA9ICJnbGliLmgsZ2xpYi9naTE4bi1saWIuaCIpXQotLQlwdWJsaWMg c3RhdGljIHVub3duZWQgc3RyaW5nIF8gKFtGb3JtYXRBcmddIHN0cmluZyBzdHIpOwotLQlbVmVy c2lvbiAoc2luY2UgPSAiMi40IildCi0tCVtDQ29kZSAoY25hbWUgPSAiUV8iLCBjaGVhZGVyX2Zp bGVuYW1lID0gImdsaWIuaCxnbGliL2dpMThuLWxpYi5oIildCi0tCXB1YmxpYyBzdGF0aWMgdW5v d25lZCBzdHJpbmcgUV8gKFtGb3JtYXRBcmddIHN0cmluZyBzdHIpOwotLQlbVmVyc2lvbiAoc2lu Y2UgPSAiMi40IildCi0tCVtDQ29kZSAoY25hbWUgPSAiTl8iLCBjaGVhZGVyX2ZpbGVuYW1lID0g ImdsaWIuaCxnbGliL2dpMThuLWxpYi5oIildCi0tCXB1YmxpYyBzdGF0aWMgdW5vd25lZCBzdHJp bmcgTl8gKFtGb3JtYXRBcmddIHN0cmluZyBzdHIpOwotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi4x NiIpXQotLQlbQ0NvZGUgKGNuYW1lID0gIkNfIiwgY2hlYWRlcl9maWxlbmFtZSA9ICJnbGliLmgs Z2xpYi9naTE4bi1saWIuaCIpXQotLQlwdWJsaWMgc3RhdGljIHVub3duZWQgc3RyaW5nIENfIChz dHJpbmcgY29udGV4dCwgW0Zvcm1hdEFyZ10gc3RyaW5nIHN0cik7Ci0tCVtWZXJzaW9uIChzaW5j ZSA9ICIyLjE4IildCi0tCVtDQ29kZSAoY25hbWUgPSAiTkNfIiwgY2hlYWRlcl9maWxlbmFtZSA9 ICJnbGliLmgsZ2xpYi9naTE4bi1saWIuaCIpXQotLQlwdWJsaWMgc3RhdGljIHVub3duZWQgc3Ry aW5nIE5DXyAoc3RyaW5nIGNvbnRleHQsIFtGb3JtYXRBcmddIHN0cmluZyBzdHIpOwotLQlbQ0Nv ZGUgKGNuYW1lID0gIm5nZXR0ZXh0IiwgY2hlYWRlcl9maWxlbmFtZSA9ICJnbGliLmgsZ2xpYi9n aTE4bi1saWIuaCIpXQotLQlwdWJsaWMgc3RhdGljIHVub3duZWQgc3RyaW5nIG5nZXR0ZXh0IChz dHJpbmcgbXNnaWQsIFtGb3JtYXRBcmddIHN0cmluZyBtc2dpZF9wbHVyYWwsIHVsb25nIG4pOwot LQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xOCIpXQotLQlbQ0NvZGUgKGNuYW1lID0gImdfZGdldHRl eHQiLCBjaGVhZGVyX2ZpbGVuYW1lID0gImdsaWIvZ2kxOG4tbGliLmgiKV0KLS0JcHVibGljIHN0 YXRpYyB1bm93bmVkIHN0cmluZyBkZ2V0dGV4dCAoc3RyaW5nPyBkb21haW4sIFtGb3JtYXRBcmdd IHN0cmluZyBtc2dpZCk7Ci0tCVtWZXJzaW9uIChzaW5jZSA9ICIyLjI2IildCi0tCVtDQ29kZSAo Y25hbWUgPSAiZ19kY2dldHRleHQiLCBjaGVhZGVyX2ZpbGVuYW1lID0gImdsaWIvZ2kxOG4tbGli LmgiKV0KLS0JcHVibGljIHN0YXRpYyB1bm93bmVkIHN0cmluZyBkY2dldHRleHQgKHN0cmluZz8g ZG9tYWluLCBbRm9ybWF0QXJnXSBzdHJpbmcgbXNnaWQsIGludCBjYXRlZ29yeSk7Ci0tCVtWZXJz aW9uIChzaW5jZSA9ICIyLjE4IildCi0tCVtDQ29kZSAoY25hbWUgPSAiZ19kbmdldHRleHQiLCBj aGVhZGVyX2ZpbGVuYW1lID0gImdsaWIvZ2kxOG4tbGliLmgiKV0KLS0JcHVibGljIHN0YXRpYyB1 bm93bmVkIHN0cmluZyBkbmdldHRleHQgKHN0cmluZz8gZG9tYWluLCBzdHJpbmcgbXNnaWQsIFtG b3JtYXRBcmddIHN0cmluZyBtc2dpZF9wbHVyYWwsIHVsb25nIG4pOwotLQlbVmVyc2lvbiAoc2lu Y2UgPSAiMi4xNiIpXQotLQlbQ0NvZGUgKGNuYW1lID0gImdfZHBnZXR0ZXh0IiwgY2hlYWRlcl9m aWxlbmFtZSA9ICJnbGliL2dpMThuLWxpYi5oIildCi0tCXB1YmxpYyBzdGF0aWMgdW5vd25lZCBz dHJpbmcgZHBnZXR0ZXh0IChzdHJpbmc/IGRvbWFpbiwgW0Zvcm1hdEFyZ10gc3RyaW5nIG1zZ2N0 eGlkLCBzaXplX3QgbXNnaWRvZmZzZXQpOwotLQlbVmVyc2lvbiAoc2luY2UgPSAiMi4xOCIpXQot LQlbQ0NvZGUgKGNuYW1lID0gImdfZHBnZXR0ZXh0MiIsIGNoZWFkZXJfZmlsZW5hbWUgPSAiZ2xp Yi9naTE4bi1saWIuaCIpXQotLQlwdWJsaWMgc3RhdGljIHVub3duZWQgc3RyaW5nIGRwZ2V0dGV4 dDIgKHN0cmluZz8gZG9tYWluLCBzdHJpbmcgY29udGV4dCwgW0Zvcm1hdEFyZ10gc3RyaW5nIG1z Z2lkKTsKLS0KLS0JW0NDb2RlIChjbmFtZSA9ICJpbnQiLCBjcHJlZml4ID0gIkxDXyIsIGNoZWFk ZXJfZmlsZW5hbWUgPSAibG9jYWxlLmgiLCBoYXNfdHlwZV9pZCA9IGZhbHNlKV0KLS0JcHVibGlj IGVudW0gTG9jYWxlQ2F0ZWdvcnkgewotLQkJQUxMLAotLQkJQ09MTEFURSwKLS0JCUNUWVBFLAot LQkJTUVTU0FHRVMsCi0tCQlNT05FVEFSWSwKLS0JCU5VTUVSSUMsCi0tCQlUSU1FCi0tCX0KLS0K LS0JbmFtZXNwYWNlIEludGwgewotLQkJW0NDb2RlIChjbmFtZSA9ICJzZXRsb2NhbGUiLCBjaGVh ZGVyX2ZpbGVuYW1lID0gImxvY2FsZS5oIildCi0tCQlwdWJsaWMgc3RhdGljIHVub3duZWQgc3Ry aW5nPyBzZXRsb2NhbGUgKExvY2FsZUNhdGVnb3J5IGNhdGVnb3J5ID0gR0xpYi5Mb2NhbGVDYXRl Z29yeS5BTEwsIHN0cmluZz8gbG9jYWxlID0gIiIpOwotLQkJW0NDb2RlIChjbmFtZSA9ICJiaW5k dGV4dGRvbWFpbiIsIGNoZWFkZXJfZmlsZW5hbWUgPSAiZ2xpYi9naTE4bi1saWIuaCIpXQotLQkJ cHVibGljIHN0YXRpYyB1bm93bmVkIHN0cmluZz8gYmluZHRleHRkb21haW4gKHN0cmluZyBkb21h aW5uYW1lLCBzdHJpbmc/IGRpcm5hbWUpOwotLQkJW0NDb2RlIChjbmFtZSA9ICJ0ZXh0ZG9tYWlu IiwgY2hlYWRlcl9maWxlbmFtZSA9ICJnbGliL2dpMThuLWxpYi5oIildCi0tCQlwdWJsaWMgc3Rh dGljIHVub3duZWQgc3RyaW5nPyB0ZXh0ZG9tYWluIChzdHJpbmc/IGRvbWFpbm5hbWUpOwotLQkJ W0NDb2RlIChjbmFtZSA9ICJiaW5kX3RleHRkb21haW5fY29kZXNldCIsIGNoZWFkZXJfZmlsZW5h bWUgPSAiZ2xpYi9naTE4bi1saWIuaCIpXQotLQkJcHVibGljIHN0YXRpYyB1bm93bmVkIHN0cmlu Zz8gYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKHN0cmluZyBkb21haW5uYW1lLCBzdHJpbmc/IGNv ZGVzZXQpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuNiIpXQotLQkJW0NDb2RlIChjbmFtZSA9 ICJnX2dldF9sYW5ndWFnZV9uYW1lcyIsIGFycmF5X2xlbmd0aCA9IGZhbHNlLCBhcnJheV9udWxs X3Rlcm1pbmF0ZWQgPSB0cnVlKV0KLS0JCXB1YmxpYyBzdGF0aWMgdW5vd25lZCBzdHJpbmdbXSBn ZXRfbGFuZ3VhZ2VfbmFtZXMgKCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi41OCIpXQotLQkJ W0NDb2RlIChjbmFtZSA9ICJnX2dldF9sYW5ndWFnZV9uYW1lc193aXRoX2NhdGVnb3J5IiwgYXJy YXlfbGVuZ3RoID0gZmFsc2UsIGFycmF5X251bGxfdGVybWluYXRlZCA9IHRydWUpXQotLQkJcHVi bGljIHN0YXRpYyB1bm93bmVkIHN0cmluZ1tdIGdldF9sYW5ndWFnZV9uYW1lc193aXRoX2NhdGVn b3J5IChzdHJpbmcgY2F0ZWdvcnlfbmFtZSk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi40Iild Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImdfc3RyaXBfY29udGV4dCIsIGNoZWFkZXJfZmlsZW5hbWUg PSAiZ2xpYi9naTE4bi1saWIuaCIpXQotLQkJcHVibGljIHN0YXRpYyB1bm93bmVkIHN0cmluZyBz dHJpcF9jb250ZXh0IChzdHJpbmcgbXNnaWQsIHN0cmluZyBtc2d2YWwpOwotLQl9Ci0tCi0tCVtD b21wYWN0XQotLQlwdWJsaWMgY2xhc3MgUGF0dGVyblNwZWMgewotLQkJcHVibGljIFBhdHRlcm5T cGVjIChzdHJpbmcgcGF0dGVybik7Ci0tCQlwdWJsaWMgYm9vbCBlcXVhbCAoUGF0dGVyblNwZWMg cHNwZWMpOwotLQkJW0NDb2RlIChjbmFtZSA9ICJnX3BhdHRlcm5fbWF0Y2giKV0KLS0JCXB1Ymxp YyBib29sIG1hdGNoICh1aW50IHN0cmluZ19sZW5ndGgsIHN0cmluZyBzdHIsIHN0cmluZz8gc3Ry X3JldmVyc2VkKTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZ19wYXR0ZXJuX21hdGNoX3N0cmluZyIp XQotLQkJcHVibGljIGJvb2wgbWF0Y2hfc3RyaW5nIChzdHJpbmcgc3RyKTsKLS0JCVtDQ29kZSAo Y25hbWUgPSAiZ19wYXR0ZXJuX21hdGNoX3NpbXBsZSIpXQotLQkJcHVibGljIHN0YXRpYyBib29s IG1hdGNoX3NpbXBsZSAoc3RyaW5nIHBhdHRlcm4sIHN0cmluZyBzdHIpOwotLQl9Ci0tCi0tCVtD Q29kZSAobG93ZXJfY2FzZV9jcHJlZml4ID0gImdsaWJfdmVyc2lvbl8iKV0KLS0JbmFtZXNwYWNl IFZlcnNpb24gewotLQkJW0NDb2RlIChjbmFtZSA9ICJnbGliX21ham9yX3ZlcnNpb24iKV0KLS0J CXB1YmxpYyBjb25zdCB1aW50IG1ham9yOwotLQkJW0NDb2RlIChjbmFtZSA9ICJnbGliX21pbm9y X3ZlcnNpb24iKV0KLS0JCXB1YmxpYyBjb25zdCB1aW50IG1pbm9yOwotLQkJW0NDb2RlIChjbmFt ZSA9ICJnbGliX21pY3JvX3ZlcnNpb24iKV0KLS0JCXB1YmxpYyBjb25zdCB1aW50IG1pY3JvOwot LQkJW0NDb2RlIChjbmFtZSA9ICJnbGliX2NoZWNrX3ZlcnNpb24iKV0KLS0JCXB1YmxpYyBzdGF0 aWMgdW5vd25lZCBzdHJpbmc/IGNoZWNrICh1aW50IHJlcXVpcmVkX21ham9yLCB1aW50IHJlcXVp cmVkX21pbm9yID0gMCwgdWludCByZXF1aXJlZF9taWNybyA9IDApOwotLQotLQkJW0NDb2RlIChj bmFtZSA9ICJHTElCX01BSk9SX1ZFUlNJT04iKV0KLS0JCXB1YmxpYyBjb25zdCB1aW50IE1BSk9S OwotLQkJW0NDb2RlIChjbmFtZSA9ICJHTElCX01JTk9SX1ZFUlNJT04iKV0KLS0JCXB1YmxpYyBj b25zdCB1aW50IE1JTk9SOwotLQkJW0NDb2RlIChjbmFtZSA9ICJHTElCX01JQ1JPX1ZFUlNJT04i KV0KLS0JCXB1YmxpYyBjb25zdCB1aW50IE1JQ1JPOwotLQkJW0NDb2RlIChjbmFtZSA9ICJHTElC X0NIRUNLX1ZFUlNJT04iKV0KLS0JCXB1YmxpYyBzdGF0aWMgYm9vbCBDSEVDSyAodWludCByZXF1 aXJlZF9tYWpvciwgdWludCByZXF1aXJlZF9taW5vciA9IDAsIHVpbnQgcmVxdWlyZWRfbWljcm8g PSAwKTsKLS0KLS0JCVtDQ29kZSAoY25hbWUgPSAiR19FTkNPREVfVkVSU0lPTiIpXQotLQkJcHVi bGljIHN0YXRpYyB1aW50IGVuY29kZSAodWludCBtYWpvciwgdWludCBtaW5vcik7Ci0tCi0tCQlw dWJsaWMgY29uc3QgdWludCBDVVJfU1RBQkxFOwotLQkJcHVibGljIGNvbnN0IHVpbnQgUFJFVl9T VEFCTEU7Ci0tCQlwdWJsaWMgY29uc3QgdWludCBNSU5fUkVRVUlSRUQ7Ci0tCQlwdWJsaWMgY29u c3QgdWludCBNQVhfQUxMT1dFRDsKLS0KLS0JCXB1YmxpYyBjb25zdCB1aW50IEAyXzI2OwotLQkJ cHVibGljIGNvbnN0IHVpbnQgQDJfMjg7Ci0tCQlwdWJsaWMgY29uc3QgdWludCBAMl8zMDsKLS0J CXB1YmxpYyBjb25zdCB1aW50IEAyXzMyOwotLQkJcHVibGljIGNvbnN0IHVpbnQgQDJfMzQ7Ci0t CQlwdWJsaWMgY29uc3QgdWludCBAMl8zNjsKLS0JCXB1YmxpYyBjb25zdCB1aW50IEAyXzM4Owot LQkJcHVibGljIGNvbnN0IHVpbnQgQDJfNDA7Ci0tCQlwdWJsaWMgY29uc3QgdWludCBAMl80MjsK LS0JCXB1YmxpYyBjb25zdCB1aW50IEAyXzQ0OwotLQkJcHVibGljIGNvbnN0IHVpbnQgQDJfNDY7 Ci0tCQlwdWJsaWMgY29uc3QgdWludCBAMl80ODsKLS0JCXB1YmxpYyBjb25zdCB1aW50IEAyXzUw OwotLQkJcHVibGljIGNvbnN0IHVpbnQgQDJfNTI7Ci0tCQlwdWJsaWMgY29uc3QgdWludCBAMl81 NDsKLS0JCXB1YmxpYyBjb25zdCB1aW50IEAyXzU2OwotLQkJcHVibGljIGNvbnN0IHVpbnQgQDJf NTg7Ci0tCi0tCQlbQ0NvZGUgKGNuYW1lID0gImdsaWJfYmluYXJ5X2FnZSIpXQotLQkJcHVibGlj IGNvbnN0IHVpbnQgYmluYXJ5X2FnZTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZ2xpYl9pbnRlcmZh Y2VfYWdlIildCi0tCQlwdWJsaWMgY29uc3QgdWludCBpbnRlcmZhY2VfYWdlOwotLQl9Ci0tCi0t CW5hbWVzcGFjZSBXaW4zMiB7Ci0tCQlwdWJsaWMgZW51bSBPU1R5cGUgewotLQkJCVtDQ29kZSAo Y25hbWUgPSAiR19XSU4zMl9PU19BTlkiKV0KLS0JCQlBTlksCi0tCQkJW0NDb2RlIChjbmFtZSA9 ICJHX1dJTjMyX09TX1dPUktTVEFUSU9OIildCi0tCQkJV09SS1NUQVRJT04sCi0tCQkJW0NDb2Rl IChjbmFtZSA9ICJHX1dJTjMyX09TX1NFUlZFUiIpXQotLQkJCVNFUlZFUiwKLS0JCX0KLS0JCVtW ZXJzaW9uIChzaW5jZSA9ICIyLjQ0IildCi0tCQlwdWJsaWMgYm9vbCBjaGVja193aW5kb3dzX3Zl cnNpb24gKGludCBtYWpvciwgaW50IG1pbm9yLCBpbnQgc3B2ZXIsIEdMaWIuV2luMzIuT1NUeXBl IG9zX3R5cGUpOwotLQotLQkJcHVibGljIHN0cmluZyBlcnJvcl9tZXNzYWdlIChpbnQgZXJyb3Ip OwotLQkJcHVibGljIHN0cmluZyBnZXRsb2NhbGUgKCk7Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAi Mi4xNiIpXQotLQkJcHVibGljIHN0cmluZyBnZXRfcGFja2FnZV9pbnN0YWxsYXRpb25fZGlyZWN0 b3J5X29mX21vZHVsZSAodm9pZCogaG1vZHVsZSk7Ci0tCQlwdWJsaWMgdWludCBnZXRfd2luZG93 c192ZXJzaW9uICgpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuOCIpXQotLQkJcHVibGljIHN0 cmluZyBsb2NhbGVfZmlsZW5hbWVfZnJvbV91dGY4IChzdHJpbmcgdXRmOGZpbGVuYW1lKTsKLS0J CVtDQ29kZSAoY25hbWUgPSAiR19XSU4zMl9IQVZFX1dJREVDSEFSX0FQSSIpXQotLQkJcHVibGlj IGJvb2wgaGF2ZV93aWRlY2hhcl9hcGkgKCk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gIkdfV0lOMzJf SVNfTlRfQkFTRUQiKV0KLS0JCXB1YmxpYyBib29sIGlzX250X2Jhc2VkICgpOwotLQkJW1ZlcnNp b24gKHNpbmNlID0gIjIuNDAiKV0KLS0JCVtDQ29kZSAoYXJyYXlfbGVuZ3RoID0gZmFsc2UsIGFy cmF5X251bGxfdGVybWluYXRlZCA9IHRydWUpXQotLQkJcHVibGljIHN0cmluZ1tdIGdldF9jb21t YW5kX2xpbmUgKCk7Ci0tCX0KLS0KLS0JW0NvbXBhY3RdCi0tCVtJbW11dGFibGVdCi0tCVtWZXJz aW9uIChzaW5jZSA9ICIyLjI0IildCi0tCVtDQ29kZSAoY29weV9mdW5jdGlvbiA9ICJnX3Zhcmlh bnRfdHlwZV9jb3B5IiwgZnJlZV9mdW5jdGlvbiA9ICJnX3ZhcmlhbnRfdHlwZV9mcmVlIiwgdHlw ZV9pZCA9ICJHX1RZUEVfVkFSSUFOVF9UWVBFIildCi0tCXB1YmxpYyBjbGFzcyBWYXJpYW50VHlw ZSB7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gIkdfVkFSSUFOVF9UWVBFX0JPT0xFQU4iKV0KLS0JCXB1 YmxpYyBzdGF0aWMgVmFyaWFudFR5cGUgQk9PTEVBTjsKLS0JCVtDQ29kZSAoY25hbWUgPSAiR19W QVJJQU5UX1RZUEVfQllURSIpXQotLQkJcHVibGljIHN0YXRpYyBWYXJpYW50VHlwZSBCWVRFOwot LQkJW0NDb2RlIChjbmFtZSA9ICJHX1ZBUklBTlRfVFlQRV9JTlQxNiIpXQotLQkJcHVibGljIHN0 YXRpYyBWYXJpYW50VHlwZSBJTlQxNjsKLS0JCVtDQ29kZSAoY25hbWUgPSAiR19WQVJJQU5UX1RZ UEVfVUlOVDE2IildCi0tCQlwdWJsaWMgc3RhdGljIFZhcmlhbnRUeXBlIFVJTlQxNjsKLS0JCVtD Q29kZSAoY25hbWUgPSAiR19WQVJJQU5UX1RZUEVfSU5UMzIiKV0KLS0JCXB1YmxpYyBzdGF0aWMg VmFyaWFudFR5cGUgSU5UMzI7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gIkdfVkFSSUFOVF9UWVBFX1VJ TlQzMiIpXQotLQkJcHVibGljIHN0YXRpYyBWYXJpYW50VHlwZSBVSU5UMzI7Ci0tCQlbQ0NvZGUg KGNuYW1lID0gIkdfVkFSSUFOVF9UWVBFX0lOVDY0IildCi0tCQlwdWJsaWMgc3RhdGljIFZhcmlh bnRUeXBlIElOVDY0OwotLQkJW0NDb2RlIChjbmFtZSA9ICJHX1ZBUklBTlRfVFlQRV9VSU5UNjQi KV0KLS0JCXB1YmxpYyBzdGF0aWMgVmFyaWFudFR5cGUgVUlOVDY0OwotLQkJW0NDb2RlIChjbmFt ZSA9ICJHX1ZBUklBTlRfVFlQRV9IQU5ETEUiKV0KLS0JCXB1YmxpYyBzdGF0aWMgVmFyaWFudFR5 cGUgSEFORExFOwotLQkJW0NDb2RlIChjbmFtZSA9ICJHX1ZBUklBTlRfVFlQRV9ET1VCTEUiKV0K LS0JCXB1YmxpYyBzdGF0aWMgVmFyaWFudFR5cGUgRE9VQkxFOwotLQkJW0NDb2RlIChjbmFtZSA9 ICJHX1ZBUklBTlRfVFlQRV9TVFJJTkciKV0KLS0JCXB1YmxpYyBzdGF0aWMgVmFyaWFudFR5cGUg U1RSSU5HOwotLQkJW0NDb2RlIChjbmFtZSA9ICJHX1ZBUklBTlRfVFlQRV9PQkpFQ1RfUEFUSCIp XQotLQkJcHVibGljIHN0YXRpYyBWYXJpYW50VHlwZSBPQkpFQ1RfUEFUSDsKLS0JCVtDQ29kZSAo Y25hbWUgPSAiR19WQVJJQU5UX1RZUEVfU0lHTkFUVVJFIildCi0tCQlwdWJsaWMgc3RhdGljIFZh cmlhbnRUeXBlIFNJR05BVFVSRTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiR19WQVJJQU5UX1RZUEVf VkFSSUFOVCIpXQotLQkJcHVibGljIHN0YXRpYyBWYXJpYW50VHlwZSBWQVJJQU5UOwotLQkJW0ND b2RlIChjbmFtZSA9ICJHX1ZBUklBTlRfVFlQRV9VTklUIildCi0tCQlwdWJsaWMgc3RhdGljIFZh cmlhbnRUeXBlIFVOSVQ7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gIkdfVkFSSUFOVF9UWVBFX0FOWSIp XQotLQkJcHVibGljIHN0YXRpYyBWYXJpYW50VHlwZSBBTlk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0g IkdfVkFSSUFOVF9UWVBFX0JBU0lDIildCi0tCQlwdWJsaWMgc3RhdGljIFZhcmlhbnRUeXBlIEJB U0lDOwotLQkJW0NDb2RlIChjbmFtZSA9ICJHX1ZBUklBTlRfVFlQRV9NQVlCRSIpXQotLQkJcHVi bGljIHN0YXRpYyBWYXJpYW50VHlwZSBNQVlCRTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiR19WQVJJ QU5UX1RZUEVfQVJSQVkiKV0KLS0JCXB1YmxpYyBzdGF0aWMgVmFyaWFudFR5cGUgQVJSQVk7Ci0t CQlbQ0NvZGUgKGNuYW1lID0gIkdfVkFSSUFOVF9UWVBFX1RVUExFIildCi0tCQlwdWJsaWMgc3Rh dGljIFZhcmlhbnRUeXBlIFRVUExFOwotLQkJW0NDb2RlIChjbmFtZSA9ICJHX1ZBUklBTlRfVFlQ RV9ESUNUX0VOVFJZIildCi0tCQlwdWJsaWMgc3RhdGljIFZhcmlhbnRUeXBlIERJQ1RfRU5UUlk7 Ci0tCQlbQ0NvZGUgKGNuYW1lID0gIkdfVkFSSUFOVF9UWVBFX0RJQ1RJT05BUlkiKV0KLS0JCXB1 YmxpYyBzdGF0aWMgVmFyaWFudFR5cGUgRElDVElPTkFSWTsKLS0JCVtDQ29kZSAoY25hbWUgPSAi R19WQVJJQU5UX1RZUEVfU1RSSU5HX0FSUkFZIildCi0tCQlwdWJsaWMgc3RhdGljIFZhcmlhbnRU eXBlIFNUUklOR19BUlJBWTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiR19WQVJJQU5UX1RZUEVfT0JK RUNUX1BBVEhfQVJSQVkiKV0KLS0JCXB1YmxpYyBzdGF0aWMgVmFyaWFudFR5cGUgT0JKRUNUX1BB VEhfQVJSQVk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gIkdfVkFSSUFOVF9UWVBFX0JZVEVTVFJJTkci KV0KLS0JCXB1YmxpYyBzdGF0aWMgVmFyaWFudFR5cGUgQllURVNUUklORzsKLS0JCVtDQ29kZSAo Y25hbWUgPSAiR19WQVJJQU5UX1RZUEVfQllURVNUUklOR19BUlJBWSIpXQotLQkJcHVibGljIHN0 YXRpYyBWYXJpYW50VHlwZSBCWVRFU1RSSU5HX0FSUkFZOwotLQkJW1ZlcnNpb24gKHNpbmNlID0g IjIuMzAiKV0KLS0JCVtDQ29kZSAoY25hbWUgPSAiR19WQVJJQU5UX1RZUEVfVkFSRElDVCIpXQot LQkJcHVibGljIHN0YXRpYyBWYXJpYW50VHlwZSBWQVJESUNUOwotLQotLQkJcHVibGljIHN0YXRp YyBib29sIHN0cmluZ19pc192YWxpZCAoc3RyaW5nIHR5cGVfc3RyaW5nKTsKLS0JCXB1YmxpYyBz dGF0aWMgYm9vbCBzdHJpbmdfc2NhbiAoc3RyaW5nIHR5cGVfc3RyaW5nLCBjaGFyICpsaW1pdCwg b3V0IGNoYXIqIGVuZHB0cik7Ci0tCi0tCQlwdWJsaWMgVmFyaWFudFR5cGUgKHN0cmluZyB0eXBl X3N0cmluZyk7Ci0tCQlwdWJsaWMgc2l6ZV90IGdldF9zdHJpbmdfbGVuZ3RoICgpOwotLQkJcHVi bGljIGNoYXIqIHBlZWtfc3RyaW5nICgpOwotLQkJcHVibGljIHN0cmluZyBkdXBfc3RyaW5nICgp OwotLQotLQkJcHVibGljIGJvb2wgaXNfZGVmaW5pdGUgKCk7Ci0tCQlwdWJsaWMgYm9vbCBpc19j b250YWluZXIgKCk7Ci0tCQlwdWJsaWMgYm9vbCBpc19iYXNpYyAoKTsKLS0JCXB1YmxpYyBib29s IGlzX21heWJlICgpOwotLQkJcHVibGljIGJvb2wgaXNfYXJyYXkgKCk7Ci0tCQlwdWJsaWMgYm9v bCBpc190dXBsZSAoKTsKLS0JCXB1YmxpYyBib29sIGlzX2RpY3RfZW50cnkgKCk7Ci0tCQlwdWJs aWMgYm9vbCBpc192YXJpYW50ICgpOwotLQotLQkJcHVibGljIHVpbnQgaGFzaCAoKTsKLS0JCXB1 YmxpYyBib29sIGVxdWFsIChWYXJpYW50VHlwZSBvdGhlcik7Ci0tCQlwdWJsaWMgYm9vbCBpc19z dWJ0eXBlX29mIChWYXJpYW50VHlwZSBzdXBlcnR5cGUpOwotLQotLQkJcHVibGljIHVub3duZWQg VmFyaWFudFR5cGUgZWxlbWVudCAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIFZhcmlhbnRUeXBlIGZp cnN0ICgpOwotLQkJcHVibGljIHVub3duZWQgVmFyaWFudFR5cGUgbmV4dCAoKTsKLS0JCXB1Ymxp YyB1bm93bmVkIFZhcmlhbnRUeXBlIG5faXRlbXMgKCk7Ci0tCQlwdWJsaWMgdW5vd25lZCBWYXJp YW50VHlwZSBrZXkgKCk7Ci0tCQlwdWJsaWMgdW5vd25lZCBWYXJpYW50VHlwZSB2YWx1ZSAoKTsK LS0KLS0JCXB1YmxpYyBWYXJpYW50VHlwZS5hcnJheSAoVmFyaWFudFR5cGUgZWxlbWVudCk7Ci0t CQlwdWJsaWMgVmFyaWFudFR5cGUubWF5YmUgKFZhcmlhbnRUeXBlIGVsZW1lbnQpOwotLQkJcHVi bGljIFZhcmlhbnRUeXBlLnR1cGxlIChWYXJpYW50VHlwZVtdIGl0ZW1zKTsKLS0JCXB1YmxpYyBW YXJpYW50VHlwZS5kaWN0X2VudHJ5IChWYXJpYW50VHlwZSBrZXksIFZhcmlhbnRUeXBlIHZhbHVl KTsKLS0JfQotLQotLQlbQ29tcGFjdF0KLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuMjQiKV0KLS0J W0NDb2RlIChyZWZfZnVuY3Rpb24gPSAiZ192YXJpYW50X3JlZiIsIHVucmVmX2Z1bmN0aW9uID0g ImdfdmFyaWFudF91bnJlZiIsIHJlZl9zaW5rX2Z1bmN0aW9uID0gImdfdmFyaWFudF9yZWZfc2lu ayIsIHR5cGVfaWQgPSAiR19UWVBFX1ZBUklBTlQiLCBtYXJzaGFsbGVyX3R5cGVfbmFtZSA9ICJW QVJJQU5UIiwgcGFyYW1fc3BlY19mdW5jdGlvbiA9ICJnX3BhcmFtX3NwZWNfdmFyaWFudCIsIGdl dF92YWx1ZV9mdW5jdGlvbiA9ICJnX3ZhbHVlX2dldF92YXJpYW50Iiwgc2V0X3ZhbHVlX2Z1bmN0 aW9uID0gImdfdmFsdWVfc2V0X3ZhcmlhbnQiLCB0YWtlX3ZhbHVlX2Z1bmN0aW9uID0gImdfdmFs dWVfdGFrZV92YXJpYW50IiwgdHlwZV9zaWduYXR1cmUgPSAidiIpXQotLQlwdWJsaWMgY2xhc3Mg VmFyaWFudCB7Ci0tCQlbQ0NvZGUgKGhhc190eXBlX2lkID0gZmFsc2UpXQotLQkJcHVibGljIGVu dW0gQ2xhc3MgewotLQkJCUJPT0xFQU4sIEJZVEUsIElOVDE2LCBVSU5UMTYsIElOVDMyLCBVSU5U MzIsIElOVDY0LAotLQkJCVVJTlQ2NCwgSEFORExFLCBET1VCTEUsIFNUUklORywgT0JKRUNUX1BB VEgsCi0tCQkJU0lHTkFUVVJFLCBWQVJJQU5ULCBNQVlCRSwgQVJSQVksIFRVUExFLCBESUNUX0VO VFJZCi0tCQl9Ci0tCi0tCQlwdWJsaWMgdW5vd25lZCBWYXJpYW50VHlwZSBnZXRfdHlwZSAoKTsK LS0JCXB1YmxpYyB1bm93bmVkIHN0cmluZyBnZXRfdHlwZV9zdHJpbmcgKCk7Ci0tCQlwdWJsaWMg Ym9vbCBpc19vZl90eXBlIChWYXJpYW50VHlwZSB0eXBlKTsKLS0JCXB1YmxpYyBib29sIGlzX2Nv bnRhaW5lciAoKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjI2IildCi0tCQlwdWJsaWMgYm9v bCBpc19mbG9hdGluZyAoKTsKLS0JCXB1YmxpYyBDbGFzcyBjbGFzc2lmeSAoKTsKLS0JCVtWZXJz aW9uIChzaW5jZSA9ICIyLjI2IildCi0tCQlwdWJsaWMgaW50IGNvbXBhcmUgKFZhcmlhbnQgb3Ro ZXIpOwotLQotLQkJcHVibGljIFZhcmlhbnQuYm9vbGVhbiAoYm9vbCB2YWx1ZSk7Ci0tCQlwdWJs aWMgVmFyaWFudC5ieXRlICh1aW50OCB2YWx1ZSk7Ci0tCQlwdWJsaWMgVmFyaWFudC5pbnQxNiAo aW50MTYgdmFsdWUpOwotLQkJcHVibGljIFZhcmlhbnQudWludDE2ICh1aW50MTYgdmFsdWUpOwot LQkJcHVibGljIFZhcmlhbnQuaW50MzIgKGludDMyIHZhbHVlKTsKLS0JCXB1YmxpYyBWYXJpYW50 LnVpbnQzMiAodWludDMyIHZhbHVlKTsKLS0JCXB1YmxpYyBWYXJpYW50LmludDY0IChpbnQ2NCB2 YWx1ZSk7Ci0tCQlwdWJsaWMgVmFyaWFudC51aW50NjQgKHVpbnQ2NCB2YWx1ZSk7Ci0tCQlwdWJs aWMgVmFyaWFudC5oYW5kbGUgKGludDMyIHZhbHVlKTsKLS0JCXB1YmxpYyBWYXJpYW50LmRvdWJs ZSAoZG91YmxlIHZhbHVlKTsKLS0JCXB1YmxpYyBWYXJpYW50LnN0cmluZyAoc3RyaW5nIHZhbHVl KTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjI2IildCi0tCQlwdWJsaWMgVmFyaWFudC5ieXRl c3RyaW5nIChzdHJpbmcgdmFsdWUpOwotLQkJcHVibGljIFZhcmlhbnQub2JqZWN0X3BhdGggKHN0 cmluZyBvYmplY3RfcGF0aCk7Ci0tCQlwdWJsaWMgc3RhdGljIGJvb2wgaXNfb2JqZWN0X3BhdGgg KHN0cmluZyBvYmplY3RfcGF0aCk7Ci0tCQlwdWJsaWMgVmFyaWFudC5zaWduYXR1cmUgKHN0cmlu ZyBzaWduYXR1cmUpOwotLQkJcHVibGljIHN0YXRpYyBib29sIGlzX3NpZ25hdHVyZSAoc3RyaW5n IHNpZ25hdHVyZSk7Ci0tCi0tCQlwdWJsaWMgYm9vbCBnZXRfYm9vbGVhbiAoKTsKLS0JCXB1Ymxp YyB1aW50OCBnZXRfYnl0ZSAoKTsKLS0JCXB1YmxpYyBpbnQxNiBnZXRfaW50MTYgKCk7Ci0tCQlw dWJsaWMgdWludDE2IGdldF91aW50MTYgKCk7Ci0tCQlwdWJsaWMgaW50MzIgZ2V0X2ludDMyICgp OwotLQkJcHVibGljIHVpbnQzMiBnZXRfdWludDMyICgpOwotLQkJcHVibGljIGludDY0IGdldF9p bnQ2NCAoKTsKLS0JCXB1YmxpYyB1aW50NjQgZ2V0X3VpbnQ2NCAoKTsKLS0JCXB1YmxpYyBpbnQz MiBnZXRfaGFuZGxlICgpOwotLQkJcHVibGljIGRvdWJsZSBnZXRfZG91YmxlICgpOwotLQkJcHVi bGljIHVub3duZWQgc3RyaW5nIGdldF9zdHJpbmcgKG91dCBzaXplX3QgbGVuZ3RoID0gbnVsbCk7 Ci0tCQlwdWJsaWMgc3RyaW5nIGR1cF9zdHJpbmcgKG91dCBzaXplX3QgbGVuZ3RoID0gbnVsbCk7 Ci0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4yNiIpXQotLQkJcHVibGljIHVub3duZWQgc3RyaW5n IGdldF9ieXRlc3RyaW5nICgpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMjYiKV0KLS0JCXB1 YmxpYyBzdHJpbmcgZHVwX2J5dGVzdHJpbmcgKG91dCBzaXplX3QgbGVuZ3RoKTsKLS0KLS0JCXB1 YmxpYyBWYXJpYW50LnN0cnYgKHN0cmluZ1tdIHZhbHVlKTsKLS0JCVtDQ29kZSAoYXJyYXlfbGVu Z3RoX3R5cGUgPSAic2l6ZV90IildCi0tI2lmIFZBTEFfMF8yNgotLQkJcHVibGljICh1bm93bmVk IHN0cmluZylbXSBnZXRfc3RydiAoKTsKLS0jZWxzZQotLQkJcHVibGljIHN0cmluZypbXSBnZXRf c3RydiAoKTsKLS0jZW5kaWYKLS0JCVtDQ29kZSAoYXJyYXlfbGVuZ3RoX3R5cGUgPSAic2l6ZV90 IildCi0tCQlwdWJsaWMgc3RyaW5nW10gZHVwX3N0cnYgKCk7Ci0tCi0tCQlbVmVyc2lvbiAoc2lu Y2UgPSAiMi4yNiIpXQotLQkJcHVibGljIFZhcmlhbnQuYnl0ZXN0cmluZ19hcnJheSAoc3RyaW5n W10gdmFsdWUpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMjYiKV0KLS0JCVtDQ29kZSAoYXJy YXlfbGVuZ3RoX3R5cGUgPSAic2l6ZV90IildCi0tI2lmIFZBTEFfMF8yNgotLQkJcHVibGljICh1 bm93bmVkIHN0cmluZylbXSBnZXRfYnl0ZXN0cmluZ19hcnJheSAoKTsKLS0jZWxzZQotLQkJcHVi bGljIHN0cmluZypbXSBnZXRfYnl0ZXN0cmluZ19hcnJheSAoKTsKLS0jZW5kaWYKLS0JCVtWZXJz aW9uIChzaW5jZSA9ICIyLjI2IildCi0tCQlbQ0NvZGUgKGFycmF5X2xlbmd0aF90eXBlID0gInNp emVfdCIpXQotLQkJcHVibGljIHN0cmluZ1tdIGR1cF9ieXRlc3RyaW5nX2FycmF5ICgpOwotLQot LQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMzAiKV0KLS0JCXB1YmxpYyBWYXJpYW50Lm9ianYgKHN0 cmluZ1tdIHZhbHVlKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjMwIildCi0tCQlbQ0NvZGUg KGFycmF5X2xlbmd0aF90eXBlID0gInNpemVfdCIpXQotLSNpZiBWQUxBXzBfMjYKLS0JCXB1Ymxp YyAodW5vd25lZCBzdHJpbmcpW10gZ2V0X29ianYgKCk7Ci0tI2Vsc2UKLS0JCXB1YmxpYyBzdHJp bmcqW10gZ2V0X29ianYgKCk7Ci0tI2VuZGlmCi0tCQlbVmVyc2lvbiAoc2luY2UgPSAiMi4zMCIp XQotLQkJW0NDb2RlIChhcnJheV9sZW5ndGhfdHlwZSA9ICJzaXplX3QiKV0KLS0JCXB1YmxpYyBz dHJpbmdbXSBkdXBfb2JqdiAoKTsKLS0KLS0JCXB1YmxpYyBWYXJpYW50IChzdHJpbmcgZm9ybWF0 LCAuLi4pOwotLQkJLy8gbm90ZTogdGhlIGZ1bmN0aW9uIGNoYW5nZXMgaXRzIGJlaGF2aW91ciB3 aGVuIGVuZF9wdHIgaXMgbnVsbCwgc28gJ291dCBjaGFyIConIGlzIHdyb25nCi0tCQlwdWJsaWMg VmFyaWFudC52YSAoc3RyaW5nIGZvcm1hdCwgY2hhciAqKmVuZF9wdHIsIHZhX2xpc3QgKmFwcCk7 Ci0tCQlwdWJsaWMgdm9pZCBnZXQgKHN0cmluZyBmb3JtYXQsIC4uLik7Ci0tCQlwdWJsaWMgdm9p ZCBnZXRfdmEgKHN0cmluZyBmb3JtYXQsIGNoYXIgKiplbmRfcHRyLCB2YV9saXN0ICphcHApOwot LQotLQkJcHVibGljIFZhcmlhbnQudmFyaWFudCAoVmFyaWFudCB2YWx1ZSk7Ci0tCQlwdWJsaWMg VmFyaWFudC5tYXliZSAoVmFyaWFudFR5cGU/IGNoaWxkX3R5cGUsIFZhcmlhbnQ/IGNoaWxkKTsK LS0JCXB1YmxpYyBWYXJpYW50LmFycmF5IChWYXJpYW50VHlwZT8gY2hpbGRfdHlwZSwgVmFyaWFu dFtdIGNoaWxkcmVuKTsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjMyIildCi0tCQlbQ0NvZGUg KHNpbXBsZV9nZW5lcmljcyA9IHRydWUpXQotLQkJcHVibGljIHN0YXRpYyBWYXJpYW50IG5ld19m aXhlZF9hcnJheTxUPiAoVmFyaWFudFR5cGU/IGVsZW1lbnRfdHlwZSwgW0NDb2RlIChhcnJheV9s ZW5ndGhfdHlwZSA9ICJnc2l6ZSIpXSBUW10gZWxlbWVudHMsIHNpemVfdCBlbGVtZW50X3NpemUp OwotLQkJcHVibGljIFZhcmlhbnQudHVwbGUgKFZhcmlhbnRbXSBjaGlsZHJlbik7Ci0tCQlwdWJs aWMgVmFyaWFudC5kaWN0X2VudHJ5IChWYXJpYW50IGtleSwgVmFyaWFudCB2YWx1ZSk7Ci0tCQlw dWJsaWMgVmFyaWFudCBnZXRfdmFyaWFudCAoKTsKLS0JCXB1YmxpYyBWYXJpYW50PyBnZXRfbWF5 YmUgKCk7Ci0tCi0tCQlwdWJsaWMgc2l6ZV90IG5fY2hpbGRyZW4gKCk7Ci0tCQlwdWJsaWMgVmFy aWFudCBnZXRfY2hpbGRfdmFsdWUgKHNpemVfdCBpbmRleCk7Ci0tCQlwdWJsaWMgdm9pZCBnZXRf Y2hpbGQgKHNpemVfdCBpbmRleCwgc3RyaW5nIGZvcm1hdF9zdHJpbmcsIC4uLik7Ci0tCi0tCQlb VmVyc2lvbiAoc2luY2UgPSAiMi4yOCIpXQotLQkJcHVibGljIFZhcmlhbnQ/IGxvb2t1cF92YWx1 ZSAoc3RyaW5nIGtleSwgVmFyaWFudFR5cGU/IGV4cGVjdGVkX3R5cGUpOwotLQkJW1ZlcnNpb24g KHNpbmNlID0gIjIuMjgiKV0KLS0JCXB1YmxpYyBib29sIGxvb2t1cCAoc3RyaW5nIGtleSwgc3Ry aW5nIGZvcm1hdF9zdHJpbmcsIC4uLik7Ci0tCi0tCQlwdWJsaWMgc2l6ZV90IGdldF9zaXplICgp OwotLQkJcHVibGljIHZvaWQgKmdldF9kYXRhICgpOwotLQkJcHVibGljIHZvaWQgc3RvcmUgKHZv aWQgKmRhdGEpOwotLQotLQkJcHVibGljIHN0cmluZyBwcmludCAoYm9vbCB0eXBlX2Fubm90YXRl KTsKLS0JCXB1YmxpYyBTdHJpbmdCdWlsZGVyIHByaW50X3N0cmluZyAoU3RyaW5nQnVpbGRlcj8g YnVpbGRlciwgYm9vbCB0eXBlX2Fubm90YXRlKTsKLS0KLS0JCXB1YmxpYyB1aW50IGhhc2ggKCk7 Ci0tCQlwdWJsaWMgYm9vbCBlcXVhbCAoVmFyaWFudCBvdGhlcik7Ci0tCi0tCQlwdWJsaWMgVmFy aWFudCBieXRlc3dhcCAoKTsKLS0JCXB1YmxpYyBWYXJpYW50IGdldF9ub3JtYWxfZm9ybSAoKTsK LS0JCXB1YmxpYyBib29sIGlzX25vcm1hbF9mb3JtICgpOwotLQkJW0NDb2RlIChyZXR1cm5zX2Zs b2F0aW5nX3JlZmVyZW5jZSA9IHRydWUsIHNpbXBsZV9nZW5lcmljcyA9IHRydWUpXQotLQkJcHVi bGljIHN0YXRpYyBWYXJpYW50IG5ld19mcm9tX2RhdGE8VD4gKFZhcmlhbnRUeXBlIHR5cGUsIHVj aGFyW10gZGF0YSwgYm9vbCB0cnVzdGVkLCBbQ0NvZGUgKGRlc3Ryb3lfbm90aWZ5X3BvcyA9IDMu OSldIG93bmVkIFQ/IG93bmVyID0gbnVsbCk7Ci0tCi0tCQlbQ0NvZGUgKGNuYW1lID0gImdfdmFy aWFudF9pdGVyX25ldyIpXQotLQkJcHVibGljIFZhcmlhbnRJdGVyIGl0ZXJhdG9yICgpOwotLQot LQkJcHVibGljIHN0YXRpYyBWYXJpYW50IHBhcnNlIChWYXJpYW50VHlwZT8gdHlwZSwgc3RyaW5n IHRleHQsIGNoYXIgKmxpbWl0ID0gbnVsbCwgY2hhciAqKmVuZHB0ciA9IG51bGwpIHRocm93cyBH TGliLlZhcmlhbnRQYXJzZUVycm9yOwotLQkJcHVibGljIFZhcmlhbnQucGFyc2VkIChzdHJpbmcg Zm9ybWF0X3N0cmluZywgLi4uKTsKLS0KLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjM0IildCi0t CQlwdWJsaWMgYm9vbCBjaGVja19mb3JtYXRfc3RyaW5nIChzdHJpbmcgZm9ybWF0X3N0cmluZywg Ym9vbCBjb3B5X29ubHkpOwotLQotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMzYiKV0KLS0JCXB1 YmxpYyBWYXJpYW50LmZyb21fYnl0ZXMgKFZhcmlhbnRUeXBlIHR5cGUsIEJ5dGVzIGJ5dGVzLCBi b29sIHRydXN0ZWQpOwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMzYiKV0KLS0JCXB1YmxpYyBC eXRlcyBnZXRfZGF0YV9hc19ieXRlcyAoKTsKLS0KLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjM4 IildCi0tCQlwdWJsaWMgVmFyaWFudC5wcmludGYgKHN0cmluZyBmb3JtYXRfc3RyaW5nLCAuLi4p OwotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMzgiKV0KLS0JCXB1YmxpYyBWYXJpYW50LnRha2Vf c3RyaW5nIChvd25lZCBzdHJpbmcgc3RyKTsKLS0KLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjQw IildCi0tCQlwdWJsaWMgc3RhdGljIHZvaWQgcGFyc2VfZXJyb3JfcHJpbnRfY29udGV4dCAoR0xp Yi5WYXJpYW50UGFyc2VFcnJvciBlcnJvciwgc3RyaW5nIHNvdXJjZV9zdHIpOwotLQl9Ci0tCi0t CVtWZXJzaW9uIChzaW5jZSA9ICIyLjI0IildCi0tCXB1YmxpYyBlcnJvcmRvbWFpbiBWYXJpYW50 UGFyc2VFcnJvciB7Ci0tCQlGQUlMRUQsCi0tCQlCQVNJQ19UWVBFX0VYUEVDVEVELAotLQkJQ0FO Tk9UX0lORkVSX1RZUEUsCi0tCQlERUZJTklURV9UWVBFX0VYUEVDVEVELAotLQkJSU5QVVRfTk9U X0FUX0VORCwKLS0JCUlOVkFMSURfQ0hBUkFDVEVSLAotLQkJSU5WQUxJRF9GT1JNQVRfU1RSSU5H LAotLQkJSU5WQUxJRF9PQkpFQ1RfUEFUSCwKLS0JCUlOVkFMSURfU0lHTkFUVVJFLAotLQkJSU5W QUxJRF9UWVBFX1NUUklORywKLS0JCU5PX0NPTU1PTl9UWVBFLAotLQkJTlVNQkVSX09VVF9PRl9S QU5HRSwKLS0JCU5VTUJFUl9UT09fQklHLAotLQkJVFlQRV9FUlJPUiwKLS0JCVVORVhQRUNURURf VE9LRU4sCi0tCQlVTktOT1dOX0tFWVdPUkQsCi0tCQlVTlRFUk1JTkFURURfU1RSSU5HX0NPTlNU QU5ULAotLQkJVkFMVUVfRVhQRUNURUQ7Ci0tCQlwdWJsaWMgc3RhdGljIEdMaWIuUXVhcmsgcXVh cmsgKCk7Ci0tCX0KLS0KLS0JW0NvbXBhY3RdCi0tCVtWZXJzaW9uIChzaW5jZSA9ICIyLjI0Iild Ci0tCXB1YmxpYyBjbGFzcyBWYXJpYW50SXRlciB7Ci0tCQlwdWJsaWMgVmFyaWFudEl0ZXIgKFZh cmlhbnQgdmFsdWUpOwotLQkJcHVibGljIHNpemVfdCBuX2NoaWxkcmVuICgpOwotLQkJcHVibGlj IFZhcmlhbnQ/IG5leHRfdmFsdWUgKCk7Ci0tCQlwdWJsaWMgYm9vbCBuZXh0IChzdHJpbmcgZm9y bWF0X3N0cmluZywgLi4uKTsKLS0JfQotLQotLQlbQ29tcGFjdF0KLS0JW1ZlcnNpb24gKHNpbmNl ID0gIjIuMjQiKV0KLS0JW0NDb2RlIChyZWZfZnVuY3Rpb24gPSAiZ192YXJpYW50X2J1aWxkZXJf cmVmIiwgdW5yZWZfZnVuY3Rpb24gPSAiZ192YXJpYW50X2J1aWxkZXJfdW5yZWYiKV0KLS0JcHVi bGljIGNsYXNzIFZhcmlhbnRCdWlsZGVyIHsKLS0JCXB1YmxpYyBWYXJpYW50QnVpbGRlciAoVmFy aWFudFR5cGUgdHlwZSk7Ci0tCQlwdWJsaWMgdm9pZCBvcGVuIChWYXJpYW50VHlwZSB0eXBlKTsK LS0JCXB1YmxpYyB2b2lkIGNsb3NlICgpOwotLQkJcHVibGljIHZvaWQgYWRkX3ZhbHVlIChWYXJp YW50IHZhbHVlKTsKLS0JCXB1YmxpYyB2b2lkIGFkZCAoc3RyaW5nIGZvcm1hdF9zdHJpbmcsIC4u Lik7Ci0tCQlbQ0NvZGUgKHJldHVybnNfZmxvYXRpbmdfcmVmZXJlbmNlID0gdHJ1ZSldCi0tCQlw dWJsaWMgVmFyaWFudCBlbmQgKCk7Ci0tCX0KLS0KLS0JW1ZlcnNpb24gKHNpbmNlID0gIjIuNDAi KV0KLS0JW0NvbXBhY3QsIENDb2RlIChyZWZfZnVuY3Rpb24gPSAiZ192YXJpYW50X2RpY3RfcmVm IiwgdW5yZWZfZnVuY3Rpb24gPSAiZ192YXJpYW50X2RpY3RfdW5yZWYiKV0KLS0JcHVibGljIGNs YXNzIFZhcmlhbnREaWN0IHsKLS0JCXB1YmxpYyBWYXJpYW50RGljdCAoR0xpYi5WYXJpYW50PyBm cm9tX2FzdiA9IG51bGwpOwotLQkJcHVibGljIGJvb2wgbG9va3VwIChzdHJpbmcga2V5LCBzdHJp bmcgZm9ybWF0X3N0cmluZywgLi4uKTsKLS0JCXB1YmxpYyBHTGliLlZhcmlhbnQgbG9va3VwX3Zh bHVlIChzdHJpbmcga2V5LCBHTGliLlZhcmlhbnRUeXBlIGV4cGVjdGVkX3R5cGUpOwotLQkJcHVi bGljIGJvb2wgY29udGFpbnMgKHN0cmluZyBrZXkpOwotLQkJcHVibGljIHZvaWQgaW5zZXJ0IChz dHJpbmcga2V5LCBzdHJpbmcgZm9ybWF0X3N0cmluZywgLi4uKTsKLS0JCXB1YmxpYyB2b2lkIGlu c2VydF92YWx1ZSAoc3RyaW5nIGtleSwgR0xpYi5WYXJpYW50IHZhbHVlKTsKLS0JCXB1YmxpYyBi b29sIHJlbW92ZSAoc3RyaW5nIGtleSk7Ci0tCQlwdWJsaWMgdm9pZCBjbGVhciAoKTsKLS0JCVtD Q29kZSAocmV0dXJuc19mbG9hdGluZ19yZWZlcmVuY2UgPSB0cnVlKV0KLS0JCXB1YmxpYyBHTGli LlZhcmlhbnQgZW5kICgpOwotLQl9Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAiY2hhciIsIGNvbnN0 X2NuYW1lID0gImNvbnN0IGNoYXIiLCBjb3B5X2Z1bmN0aW9uID0gImdfc3RyZHVwIiwgZnJlZV9m dW5jdGlvbiA9ICJnX2ZyZWUiLCBjaGVhZGVyX2ZpbGVuYW1lID0gInN0ZGxpYi5oLHN0cmluZy5o LGdsaWIuaCIsIHR5cGVfaWQgPSAiR19UWVBFX1NUUklORyIsIG1hcnNoYWxsZXJfdHlwZV9uYW1l ID0gIlNUUklORyIsIHBhcmFtX3NwZWNfZnVuY3Rpb24gPSAiZ19wYXJhbV9zcGVjX3N0cmluZyIs IGdldF92YWx1ZV9mdW5jdGlvbiA9ICJnX3ZhbHVlX2dldF9zdHJpbmciLCBzZXRfdmFsdWVfZnVu Y3Rpb24gPSAiZ192YWx1ZV9zZXRfc3RyaW5nIiwgdGFrZV92YWx1ZV9mdW5jdGlvbiA9ICJnX3Zh bHVlX3Rha2Vfc3RyaW5nIiwgdHlwZV9zaWduYXR1cmUgPSAibyIpXQotLQlwdWJsaWMgY2xhc3Mg T2JqZWN0UGF0aCA6IHN0cmluZyB7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImdfc3RyZHVwIildCi0t CQlwdWJsaWMgT2JqZWN0UGF0aCAoc3RyaW5nIHBhdGgpOwotLQl9Ci0tCi0tCVtDQ29kZSAoY25h bWUgPSAiY2hhciIsIGNvbnN0X2NuYW1lID0gImNvbnN0IGNoYXIiLCBjb3B5X2Z1bmN0aW9uID0g Imdfc3RyZHVwIiwgZnJlZV9mdW5jdGlvbiA9ICJnX2ZyZWUiLCBjaGVhZGVyX2ZpbGVuYW1lID0g InN0ZGxpYi5oLHN0cmluZy5oLGdsaWIuaCIsIHR5cGVfaWQgPSAiR19UWVBFX1NUUklORyIsIG1h cnNoYWxsZXJfdHlwZV9uYW1lID0gIlNUUklORyIsIHBhcmFtX3NwZWNfZnVuY3Rpb24gPSAiZ19w YXJhbV9zcGVjX3N0cmluZyIsIGdldF92YWx1ZV9mdW5jdGlvbiA9ICJnX3ZhbHVlX2dldF9zdHJp bmciLCBzZXRfdmFsdWVfZnVuY3Rpb24gPSAiZ192YWx1ZV9zZXRfc3RyaW5nIiwgdGFrZV92YWx1 ZV9mdW5jdGlvbiA9ICJnX3ZhbHVlX3Rha2Vfc3RyaW5nIildCi0tCXB1YmxpYyBjbGFzcyBCdXNO YW1lIDogc3RyaW5nIHsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZ19zdHJkdXAiKV0KLS0JCXB1Ymxp YyBCdXNOYW1lIChzdHJpbmcgYnVzX25hbWUpOwotLQl9Ci0tCi0tCVtDQ29kZSAoY25hbWUgPSAi R19MSUtFTFkiLCBjaGVhZGVyX2ZpbGVuYW1lID0gImdsaWIuaCIpXQotLQlwdWJsaWMgc3RhdGlj IGJvb2wgbGlrZWx5IChib29sIGV4cHJlc3Npb24pOwotLQlbQ0NvZGUgKGNuYW1lID0gIkdfVU5M SUtFTFkiLCBjaGVhZGVyX2ZpbGVuYW1lID0gImdsaWIuaCIpXQotLQlwdWJsaWMgc3RhdGljIGJv b2wgdW5saWtlbHkgKGJvb2wgZXhwcmVzc2lvbik7Ci0tCVtWZXJzaW9uIChzaW5jZSA9ICIyLjIw IildCi0tCVtDQ29kZSAoY25hbWUgPSAiR19TVEFUSUNfQVNTRVJUIiwgY2hlYWRlcl9maWxlbmFt ZSA9ICJnbGliLmgiKV0KLS0JcHVibGljIHN0YXRpYyB2b2lkIHN0YXRpY19hc3NlcnQgKGJvb2wg ZXhwcmVzc2lvbik7Ci0tCi0tCVtDQ29kZSAoc2ltcGxlX2dlbmVyaWNzID0gdHJ1ZSwgY25hbWUg PSAiZ19xc29ydF93aXRoX2RhdGEiKV0KLS0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBfcXNvcnRfd2l0 aF9kYXRhPFQ+IChUW10gZWxlbXMsIHNpemVfdCBzaXplLCBbQ0NvZGUgKHR5cGUgPSAiR0NvbXBh cmVEYXRhRnVuYyIpXSBHTGliLkNvbXBhcmVEYXRhRnVuYzxUPiBjb21wYXJlX2Z1bmMpOwotLQot LQlbQ0NvZGUgKGNuYW1lID0gIl92YWxhX2dfcXNvcnRfd2l0aF9kYXRhIildCi0tCXB1YmxpYyBz dGF0aWMgdm9pZCBxc29ydF93aXRoX2RhdGE8VD4gKFRbXSBlbGVtcywgc2l6ZV90IHNpemUsIFtD Q29kZSAodHlwZSA9ICJHQ29tcGFyZURhdGFGdW5jIildIEdMaWIuQ29tcGFyZURhdGFGdW5jPFQ+ IGNvbXBhcmVfZnVuYykgewotLQkJX3Fzb3J0X3dpdGhfZGF0YTxUKj4gKGVsZW1zLCBzaXplLCAo YSwgYikgPT4gewotLQkJCQlyZXR1cm4gY29tcGFyZV9mdW5jICgqYSwgKmIpOwotLQkJCX0pOwot LQl9Ci0tCi0tCVtWZXJzaW9uIChzaW5jZSA9ICIyLjU0IildCi0tCXB1YmxpYyBlcnJvcmRvbWFp biBOdW1iZXJQYXJzZXJFcnJvciB7Ci0tCQlJTlZBTElELAotLQkJT1VUX09GX0JPVU5EUzsKLS0J CXB1YmxpYyBzdGF0aWMgR0xpYi5RdWFyayBxdWFyayAoKTsKLS0JfQotLQotLQkvKiBVbml4LXNw ZWNpZmljIGZ1bmN0aW9ucy4gQWxsIG9mIHRoZXNlIGhhdmUgdG8gaW5jbHVkZSBnbGliLXVuaXgu aC4gKi8KLS0JbmFtZXNwYWNlIFVuaXggewotLQkJW1ZlcnNpb24gKHNpbmNlID0gIjIuMzAiKV0K LS0JCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJnbGliLXVuaXguaCIsIGNuYW1lID0gImdf dW5peF9zaWduYWxfYWRkX2Z1bGwiKV0KLS0JCXB1YmxpYyBzdGF0aWMgdWludCBzaWduYWxfYWRk IChpbnQgc2lnbnVtLCBvd25lZCBHTGliLlNvdXJjZUZ1bmMgaGFuZGxlciwgW0NDb2RlIChwb3Mg PSAwLjkpXSBpbnQgcHJpb3JpdHkgPSBQcmlvcml0eS5ERUZBVUxUKTsKLS0KLS0JCVtDQ29kZSAo Y2hlYWRlcl9maWxlbmFtZSA9ICJnbGliLXVuaXguaCIsIGNuYW1lID0gIkdTb3VyY2UiKV0KLS0J CXB1YmxpYyBjbGFzcyBTaWduYWxTb3VyY2UgOiBHTGliLlNvdXJjZSB7Ci0tCQkJcHVibGljIFNp Z25hbFNvdXJjZSAoaW50IHNpZ251bSk7Ci0tCQl9Ci0tCi0tCQlbVmVyc2lvbiAoc2luY2UgPSAi Mi4zMCIpXQotLQkJW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImdsaWItdW5peC5oIildCi0t CQlwdWJsaWMgc3RhdGljIGJvb2wgb3Blbl9waXBlIChbQ0NvZGUgKGFycmF5X2xlbmd0aCA9IGZh bHNlLCBhcnJheV9udWxsX3Rlcm1pbmF0ZWQgPSBmYWxzZSldIGludFtdIGZkcywgaW50IGZsYWdz KSB0aHJvd3MgR0xpYi5FcnJvcjsKLS0JCVtWZXJzaW9uIChzaW5jZSA9ICIyLjMwIildCi0tCQlb Q0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAiZ2xpYi11bml4LmgiKV0KLS0JCXB1YmxpYyBzdGF0 aWMgYm9vbCBzZXRfZmRfbm9uYmxvY2tpbmcgKGludCBmZCwgYm9vbCBub25ibG9jaykgdGhyb3dz IEdMaWIuRXJyb3I7Ci0tCX0KLS0KLS0JW0NDb2RlIChjbmFtZSA9ICJHVW5pY29kZVNjcmlwdCIs IGNwcmVmaXggPSAiR19VTklDT0RFX1NDUklQVF8iLCBoYXNfdHlwZV9pZCA9IGZhbHNlKV0KLS0J cHVibGljIGVudW0gVW5pY29kZVNjcmlwdCB7Ci0tCQlJTlZBTElEX0NPREUsCi0tCQlDT01NT04s Ci0tCQlJTkhFUklURUQsCi0tCQlBUkFCSUMsCi0tCQlBUk1FTklBTiwKLS0JCUJFTkdBTEksCi0t CQlCT1BPTU9GTywKLS0JCUNIRVJPS0VFLAotLQkJQ09QVElDLAotLQkJQ1lSSUxMSUMsCi0tCQlE RVNFUkVULAotLQkJREVWQU5BR0FSSSwKLS0JCUVUSElPUElDLAotLQkJR0VPUkdJQU4sCi0tCQlH T1RISUMsCi0tCQlHUkVFSywKLS0JCUdVSkFSQVRJLAotLQkJR1VSTVVLSEksCi0tCQlIQU4sCi0t CQlIQU5HVUwsCi0tCQlIRUJSRVcsCi0tCQlISVJBR0FOQSwKLS0JCUtBTk5BREEsCi0tCQlLQVRB S0FOQSwKLS0JCUtITUVSLAotLQkJTEFPLAotLQkJTEFUSU4sCi0tCQlNQUxBWUFMQU0sCi0tCQlN T05HT0xJQU4sCi0tCQlNWUFOTUFSLAotLQkJT0dIQU0sCi0tCQlPTERfSVRBTElDLAotLQkJT1JJ WUEsCi0tCQlSVU5JQywKLS0JCVNJTkhBTEEsCi0tCQlTWVJJQUMsCi0tCQlUQU1JTCwKLS0JCVRF TFVHVSwKLS0JCVRIQUFOQSwKLS0JCVRIQUksCi0tCQlUSUJFVEFOLAotLQkJQ0FOQURJQU5fQUJP UklHSU5BTCwKLS0JCVlJLAotLQkJVEFHQUxPRywKLS0JCUhBTlVOT08sCi0tCQlCVUhJRCwKLS0J CVRBR0JBTldBLAotLQotLQkJQlJBSUxMRSwKLS0JCUNZUFJJT1QsCi0tCQlMSU1CVSwKLS0JCU9T TUFOWUEsCi0tCQlTSEFWSUFOLAotLQkJTElORUFSX0IsCi0tCQlUQUlfTEUsCi0tCQlVR0FSSVRJ QywKLS0KLS0JCU5FV19UQUlfTFVFLAotLQkJQlVHSU5FU0UsCi0tCQlHTEFHT0xJVElDLAotLQkJ VElGSU5BR0gsCi0tCQlTWUxPVElfTkFHUkksCi0tCQlPTERfUEVSU0lBTiwKLS0JCUtIQVJPU0hU SEksCi0tCi0tCQlVTktOT1dOLAotLQkJQkFMSU5FU0UsCi0tCQlDVU5FSUZPUk0sCi0tCQlQSE9F TklDSUFOLAotLQkJUEhBR1NfUEEsCi0tCQlOS08sCi0tCi0tCQlLQVlBSF9MSSwKLS0JCUxFUENI QSwKLS0JCVJFSkFORywKLS0JCVNVTkRBTkVTRSwKLS0JCVNBVVJBU0hUUkEsCi0tCQlDSEFNLAot LQkJT0xfQ0hJS0ksCi0tCQlWQUksCi0tCQlDQVJJQU4sCi0tCQlMWUNJQU4sCi0tCQlMWURJQU4s Ci0tCi0tCQkvKiBVbmljb2RlLTUuMiBhZGRpdGlvbnMgKi8KLS0JCUFWRVNUQU4sICAgICAgICAg ICAgICAgIC8qIEF2c3QgKi8KLS0JCUJBTVVNLCAgICAgICAgICAgICAgICAgIC8qIEJhbXUgKi8K LS0JCUVHWVBUSUFOX0hJRVJPR0xZUEhTLCAgIC8qIEVneXAgKi8KLS0JCUlNUEVSSUFMX0FSQU1B SUMsICAgICAgIC8qIEFybWkgKi8KLS0JCUlOU0NSSVBUSU9OQUxfUEFITEFWSSwgIC8qIFBobGkg Ki8KLS0JCUlOU0NSSVBUSU9OQUxfUEFSVEhJQU4sIC8qIFBydGkgKi8KLS0JCUpBVkFORVNFLCAg ICAgICAgICAgICAgIC8qIEphdmEgKi8KLS0JCUtBSVRISSwgICAgICAgICAgICAgICAgIC8qIEt0 aGkgKi8KLS0JCUxJU1UsICAgICAgICAgICAgICAgICAgIC8qIExpc3UgKi8KLS0JCU1FRVRFSV9N QVlFSywgICAgICAgICAgIC8qIE10ZWkgKi8KLS0JCU9MRF9TT1VUSF9BUkFCSUFOLCAgICAgIC8q IFNhcmIgKi8KLS0JCU9MRF9UVVJLSUMsICAgICAgICAgICAgIC8qIE9ya2ggKi8KLS0JCVNBTUFS SVRBTiwgICAgICAgICAgICAgIC8qIFNhbXIgKi8KLS0JCVRBSV9USEFNLCAgICAgICAgICAgICAg IC8qIExhbmEgKi8KLS0JCVRBSV9WSUVULCAgICAgICAgICAgICAgIC8qIFRhdnQgKi8KLS0KLS0J CS8qIFVuaWNvZGUtNi4wIGFkZGl0aW9ucyAqLwotLQkJQkFUQUssICAgICAgICAgICAgICAgICAg LyogQmF0ayAqLwotLQkJQlJBSE1JLCAgICAgICAgICAgICAgICAgLyogQnJhaCAqLwotLQkJTUFO REFJQywgICAgICAgICAgICAgICAgLyogTWFuZCAqLwotLQotLQkJLyogVW5pY29kZS02LjEgYWRk aXRpb25zICovCi0tCQlDSEFLTUEsICAgICAgICAgICAgICAgICAvKiBDYWttICovCi0tCQlNRVJP SVRJQ19DVVJTSVZFLCAgICAgICAvKiBNZXJjICovCi0tCQlNRVJPSVRJQ19ISUVST0dMWVBIUywg ICAvKiBNZXJvICovCi0tCQlNSUFPLCAgICAgICAgICAgICAgICAgICAvKiBQbHJkICovCi0tCQlT SEFSQURBLCAgICAgICAgICAgICAgICAvKiBTaHJkICovCi0tCQlTT1JBX1NPTVBFTkcsICAgICAg ICAgICAvKiBTb3JhICovCi0tCQlUQUtSSSwgICAgICAgICAgICAgICAgICAvKiBUYWtyICovCi0t Ci0tCQkvKiBVbmljb2RlIDcuMCBhZGRpdGlvbnMgKi8KLS0JCUJBU1NBX1ZBSCwgICAgICAgICAg ICAgIC8qIEJhc3MgKi8KLS0JCUNBVUNBU0lBTl9BTEJBTklBTiwgICAgIC8qIEFnaGIgKi8KLS0J CURVUExPWUFOLCAgICAgICAgICAgICAgIC8qIER1cGwgKi8KLS0JCUVMQkFTQU4sICAgICAgICAg ICAgICAgIC8qIEVsYmEgKi8KLS0JCUdSQU5USEEsICAgICAgICAgICAgICAgIC8qIEdyYW4gKi8K LS0JCUtIT0pLSSwgICAgICAgICAgICAgICAgIC8qIEtob2ogKi8KLS0JCUtIVURBV0FESSwgICAg ICAgICAgICAgIC8qIFNpbmQgKi8KLS0JCUxJTkVBUl9BLCAgICAgICAgICAgICAgIC8qIExpbmEg Ki8KLS0JCU1BSEFKQU5JLCAgICAgICAgICAgICAgIC8qIE1haGogKi8KLS0JCU1BTklDSEFFQU4s ICAgICAgICAgICAgIC8qIE1hbnUgKi8KLS0JCU1FTkRFX0tJS0FLVUksICAgICAgICAgIC8qIE1l bmQgKi8KLS0JCU1PREksICAgICAgICAgICAgICAgICAgIC8qIE1vZGkgKi8KLS0JCU1STywgICAg ICAgICAgICAgICAgICAgIC8qIE1yb28gKi8KLS0JCU5BQkFUQUVBTiwgICAgICAgICAgICAgIC8q IE5iYXQgKi8KLS0JCU9MRF9OT1JUSF9BUkFCSUFOLCAgICAgIC8qIE5hcmIgKi8KLS0JCU9MRF9Q RVJNSUMsICAgICAgICAgICAgIC8qIFBlcm0gKi8KLS0JCVBBSEFXSF9ITU9ORywgICAgICAgICAg IC8qIEhtbmcgKi8KLS0JCVBBTE1ZUkVORSwgICAgICAgICAgICAgIC8qIFBhbG0gKi8KLS0JCVBB VV9DSU5fSEFVLCAgICAgICAgICAgIC8qIFBhdWMgKi8KLS0JCVBTQUxURVJfUEFITEFWSSwgICAg ICAgIC8qIFBobHAgKi8KLS0JCVNJRERIQU0sICAgICAgICAgICAgICAgIC8qIFNpZGQgKi8KLS0J CVRJUkhVVEEsICAgICAgICAgICAgICAgIC8qIFRpcmggKi8KLS0JCVdBUkFOR19DSVRJLCAgICAg ICAgICAgIC8qIFdhcmEgKi8KLS0KLS0JCS8qIFVuaWNvZGUgOC4wIGFkZGl0aW9ucyAqLwotLQkJ QUhPTSwgICAgICAgICAgICAgICAgICAgLyogQWhvbSAqLwotLQkJQU5BVE9MSUFOX0hJRVJPR0xZ UEhTLCAgLyogSGx1dyAqLwotLQkJSEFUUkFOLCAgICAgICAgICAgICAgICAgLyogSGF0ciAqLwot LQkJTVVMVEFOSSwgICAgICAgICAgICAgICAgLyogTXVsdCAqLwotLQkJT0xEX0hVTkdBUklBTiwg ICAgICAgICAgLyogSHVuZyAqLwotLQkJU0lHTldSSVRJTkcsICAgICAgICAgICAgLyogU2dudyAq LwotLQotLQkJLyogVW5pY29kZSA5LjAgYWRkaXRpb25zICovCi0tCQlBRExBTSwgICAgICAgICAg ICAgICAgICAvKiBBZGxtICovCi0tCQlCSEFJS1NVS0ksICAgICAgICAgICAgICAvKiBCaGtzICov Ci0tCQlNQVJDSEVOLCAgICAgICAgICAgICAgICAvKiBNYXJjICovCi0tCQlORVdBLCAgICAgICAg ICAgICAgICAgICAvKiBOZXdhICovCi0tCQlPU0FHRSwgICAgICAgICAgICAgICAgICAvKiBPc2dl ICovCi0tCQlUQU5HVVQsICAgICAgICAgICAgICAgICAvKiBUYW5nICovCi0tCi0tCQkvKiBVbmlj b2RlIDEwLjAgYWRkaXRpb25zICovCi0tCQlNQVNBUkFNX0dPTkRJLCAgICAgICAgICAvKiBHb25t ICovCi0tCQlOVVNIVSwgICAgICAgICAgICAgICAgICAvKiBOc2h1ICovCi0tCQlTT1lPTUJPLCAg ICAgICAgICAgICAgICAvKiBTb3lvICovCi0tCQlaQU5BQkFaQVJfU1FVQVJFLCAgICAgICAvKiBa YW5iICovCi0tCi0tCQkvKiBVbmljb2RlIDExLjAgYWRkaXRpb25zICovCi0tCQlET0dSQSwgICAg ICAgICAgICAgICAgICAvKiBEb2dyICovCi0tCQlHVU5KQUxBX0dPTkRJLCAgICAgICAgICAvKiBH b25nICovCi0tCQlIQU5JRklfUk9ISU5HWUEsICAgICAgICAvKiBSb2hnICovCi0tCQlNQUtBU0FS LCAgICAgICAgICAgICAgICAvKiBNYWthICovCi0tCQlNRURFRkFJRFJJTiwgICAgICAgICAgICAv KiBNZWRmICovCi0tCQlPTERfU09HRElBTiwgICAgICAgICAgICAvKiBTb2dvICovCi0tCQlTT0dE SUFOOyAgICAgICAgICAgICAgICAvKiBTb2dkICovCi0tCi0tCQlbQ0NvZGUgKGNuYW1lID0gImdf dW5pY29kZV9zY3JpcHRfdG9faXNvMTU5MjQiKV0KLS0JCXB1YmxpYyB1aW50MzIgdG9faXNvMTU5 MjQgKCk7Ci0tCQlbQ0NvZGUgKGNuYW1lID0gImdfdW5pY29kZV9zY3JpcHRfZnJvbV9pc28xNTky NCIpXQotLQkJcHVibGljIHN0YXRpYyBHTGliLlVuaWNvZGVTY3JpcHQgZnJvbV9pc28xNTkyNCAo dWludDMyIGlzbzE1OTI0KTsKLS0JfQotLQotLQlbQ0NvZGUgKGNuYW1lID0gIkdVbmljb2RlVHlw ZSIsIGNwcmVmaXggPSAiR19VTklDT0RFXyIsIGhhc190eXBlX2lkID0gZmFsc2UpXQotLQlwdWJs aWMgZW51bSBVbmljb2RlVHlwZSB7Ci0tCQlDT05UUk9MLAotLQkJRk9STUFULAotLQkJVU5BU1NJ R05FRCwKLS0JCVBSSVZBVEVfVVNFLAotLQkJU1VSUk9HQVRFLAotLQkJTE9XRVJDQVNFX0xFVFRF UiwKLS0JCU1PRElGSUVSX0xFVFRFUiwKLS0JCU9USEVSX0xFVFRFUiwKLS0JCVRJVExFQ0FTRV9M RVRURVIsCi0tCQlVUFBFUkNBU0VfTEVUVEVSLAotLQkJQ09NQklOSU5HX01BUkssCi0tCQlFTkNM T1NJTkdfTUFSSywKLS0JCU5PTl9TUEFDSU5HX01BUkssCi0tCQlERUNJTUFMX05VTUJFUiwKLS0J CUxFVFRFUl9OVU1CRVIsCi0tCQlPVEhFUl9OVU1CRVIsCi0tCQlDT05ORUNUX1BVTkNUVUFUSU9O LAotLQkJREFTSF9QVU5DVFVBVElPTiwKLS0JCUNMT1NFX1BVTkNUVUFUSU9OLAotLQkJRklOQUxf UFVOQ1RVQVRJT04sCi0tCQlJTklUSUFMX1BVTkNUVUFUSU9OLAotLQkJT1RIRVJfUFVOQ1RVQVRJ T04sCi0tCQlPUEVOX1BVTkNUVUFUSU9OLAotLQkJQ1VSUkVOQ1lfU1lNQk9MLAotLQkJTU9ESUZJ RVJfU1lNQk9MLAotLQkJTUFUSF9TWU1CT0wsCi0tCQlPVEhFUl9TWU1CT0wsCi0tCQlMSU5FX1NF UEFSQVRPUiwKLS0JCVBBUkFHUkFQSF9TRVBBUkFUT1IsCi0tCQlTUEFDRV9TRVBBUkFUT1IKLS0J fQotLQotLQlbQ0NvZGUgKGNuYW1lID0gIkdVbmljb2RlQnJlYWtUeXBlIiwgY3ByZWZpeCA9ICJH X1VOSUNPREVfQlJFQUtfIiwgaGFzX3R5cGVfaWQgPSBmYWxzZSldCi0tCXB1YmxpYyBlbnVtIFVu aWNvZGVCcmVha1R5cGUgewotLQkJTUFOREFUT1JZLAotLQkJQ0FSUklBR0VfUkVUVVJOLAotLQkJ TElORV9GRUVELAotLQkJQ09NQklOSU5HX01BUkssCi0tCQlTVVJST0dBVEUsCi0tCQlaRVJPX1dJ RFRIX1NQQUNFLAotLQkJSU5TRVBBUkFCTEUsCi0tCQlOT05fQlJFQUtJTkdfR0xVRSwKLS0JCUNP TlRJTkdFTlQsCi0tCQlTUEFDRSwKLS0JCUFGVEVSLAotLQkJQkVGT1JFLAotLQkJQkVGT1JFX0FO RF9BRlRFUiwKLS0JCUhZUEhFTiwKLS0JCU5PTl9TVEFSVEVSLAotLQkJT1BFTl9QVU5DVFVBVElP TiwKLS0JCUNMT1NFX1BVTkNUVUFUSU9OLAotLQkJUVVPVEFUSU9OLAotLQkJRVhDTEFNQVRJT04s Ci0tCQlJREVPR1JBUEhJQywKLS0JCU5VTUVSSUMsCi0tCQlJTkZJWF9TRVBBUkFUT1IsCi0tCQlT WU1CT0wsCi0tCQlBTFBIQUJFVElDLAotLQkJUFJFRklYLAotLQkJUE9TVEZJWCwKLS0JCUNPTVBM RVhfQ09OVEVYVCwKLS0JCUFNQklHVU9VUywKLS0JCVVOS05PV04sCi0tCQlORVhUX0xJTkUsCi0t CQlXT1JEX0pPSU5FUiwKLS0JCUhBTkdVTF9MX0pBTU8sCi0tCQlIQU5HVUxfVl9KQU1PLAotLQkJ SEFOR1VMX1RfSkFNTywKLS0JCUhBTkdVTF9MVl9TWUxMQUJMRSwKLS0JCUhBTkdVTF9MVlRfU1lM TEFCTEUsCi0tCQlDTE9TRV9QQVJBTlRIRVNJUywKLS0JCUNPTkRJVElPTkFMX0pBUEFORVNFX1NU QVJURVIsCi0tCQlIRUJSRVdfTEVUVEVSLAotLQkJUkVHSU9OQUxfSU5ESUNBVE9SLAotLQkJRU1P SklfQkFTRSwKLS0JCUVNT0pJX01PRElGSUVSLAotLQkJWkVST19XSURUSF9KT0lORVIKLS0JfQot LQotLQlbQ0NvZGUgKGNuYW1lID0gIkdOb3JtYWxpemVNb2RlIiwgY3ByZWZpeCA9ICJHX05PUk1B TElaRV8iLCBoYXNfdHlwZV9pZCA9IGZhbHNlKV0KLS0JcHVibGljIGVudW0gTm9ybWFsaXplTW9k ZSB7Ci0tCQlERUZBVUxULAotLQkJTkZELAotLQkJREVGQVVMVF9DT01QT1NFLAotLQkJTkZDLAot LQkJQUxMLAotLQkJTkZLRCwKLS0JCUFMTF9DT01QT1NFLAotLQkJTkZLQwotLQl9Ci0tfQotZGlm ZiAtLWdpdCBhL3ZhcGkvZ3Rrc291cmNldmlldy0zLjAuZGVwcyBiL3ZhcGkvZ3Rrc291cmNldmll dy0zLjAuZGVwcwotZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAxMzA2YWM0OS4uMDAw MDAwMDAKLS0tLSBhL3ZhcGkvZ3Rrc291cmNldmlldy0zLjAuZGVwcwotKysrIC9kZXYvbnVsbAot QEAgLTEsNyArMCwwIEBACi0tYXRrCi0tZ2RrLTMuMAotLWdkay1waXhidWYtMi4wCi0tZ2lvLTIu MAotLWd0aystMy4wCi0tcGFuZ28KLS1jYWlybwotZGlmZiAtLWdpdCBhL3ZhcGkvZ3Rrc291cmNl dmlldy0zLjAudmFwaSBiL3ZhcGkvZ3Rrc291cmNldmlldy0zLjAudmFwaQotZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0Ci1pbmRleCBmMWI4ZjY2ZS4uMDAwMDAwMDAKLS0tLSBhL3ZhcGkvZ3Rrc291 cmNldmlldy0zLjAudmFwaQotKysrIC9kZXYvbnVsbAotQEAgLTEsOTM3ICswLDAgQEAKLS0vKiBn dGtzb3VyY2V2aWV3LTMuMC52YXBpIGdlbmVyYXRlZCBieSB2YXBpZ2VuLTAuMjgsIGRvIG5vdCBt b2RpZnkuICovCi0tCi0tW0NDb2RlIChjcHJlZml4ID0gIkd0ayIsIGdpcl9uYW1lc3BhY2UgPSAi R3RrU291cmNlIiwgZ2lyX3ZlcnNpb24gPSAiMy4wIiwgbG93ZXJfY2FzZV9jcHJlZml4ID0gImd0 a18iKV0KLS1uYW1lc3BhY2UgR3RrIHsKLS0JbmFtZXNwYWNlIFNvdXJjZVV0aWxzIHsKLS0JCVtD Q29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJndGtzb3VyY2V2aWV3L2d0a3NvdXJjZS5oIildCi0t CQlwdWJsaWMgc3RhdGljIHN0cmluZyBlc2NhcGVfc2VhcmNoX3RleHQgKHN0cmluZyB0ZXh0KTsK LS0JCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJndGtzb3VyY2V2aWV3L2d0a3NvdXJjZS5o IildCi0tCQlwdWJsaWMgc3RhdGljIHN0cmluZyB1bmVzY2FwZV9zZWFyY2hfdGV4dCAoc3RyaW5n IHRleHQpOwotLQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJndGtzb3VyY2V2aWV3 L2d0a3NvdXJjZS5oIiwgdHlwZV9pZCA9ICJndGtfc291cmNlX2J1ZmZlcl9nZXRfdHlwZSAoKSIp XQotLQlbR0lSIChuYW1lID0gIkJ1ZmZlciIpXQotLQlwdWJsaWMgY2xhc3MgU291cmNlQnVmZmVy IDogR3RrLlRleHRCdWZmZXIgewotLQkJW0NDb2RlIChoYXNfY29uc3RydWN0X2Z1bmN0aW9uID0g ZmFsc2UpXQotLQkJcHVibGljIFNvdXJjZUJ1ZmZlciAoR3RrLlRleHRUYWdUYWJsZT8gdGFibGUp OwotLQkJcHVibGljIGJvb2wgYmFja3dhcmRfaXRlcl90b19zb3VyY2VfbWFyayAocmVmIEd0ay5U ZXh0SXRlciBpdGVyLCBzdHJpbmc/IGNhdGVnb3J5KTsKLS0JCXB1YmxpYyB2b2lkIGJlZ2luX25v dF91bmRvYWJsZV9hY3Rpb24gKCk7Ci0tCQlwdWJsaWMgdm9pZCBjaGFuZ2VfY2FzZSAoR3RrLlNv dXJjZUNoYW5nZUNhc2VUeXBlIGNhc2VfdHlwZSwgR3RrLlRleHRJdGVyIHN0YXJ0LCBHdGsuVGV4 dEl0ZXIgZW5kKTsKLS0JCXB1YmxpYyB1bm93bmVkIEd0ay5Tb3VyY2VNYXJrIGNyZWF0ZV9zb3Vy Y2VfbWFyayAoc3RyaW5nPyBuYW1lLCBzdHJpbmcgY2F0ZWdvcnksIEd0ay5UZXh0SXRlciB3aGVy ZSk7Ci0tCQlwdWJsaWMgdm9pZCBlbmRfbm90X3VuZG9hYmxlX2FjdGlvbiAoKTsKLS0JCXB1Ymxp YyB2b2lkIGVuc3VyZV9oaWdobGlnaHQgKEd0ay5UZXh0SXRlciBzdGFydCwgR3RrLlRleHRJdGVy IGVuZCk7Ci0tCQlwdWJsaWMgYm9vbCBmb3J3YXJkX2l0ZXJfdG9fc291cmNlX21hcmsgKHJlZiBH dGsuVGV4dEl0ZXIgaXRlciwgc3RyaW5nPyBjYXRlZ29yeSk7Ci0tCQlbQ0NvZGUgKGFycmF5X2xl bmd0aCA9IGZhbHNlLCBhcnJheV9udWxsX3Rlcm1pbmF0ZWQgPSB0cnVlKV0KLS0JCXB1YmxpYyBz dHJpbmdbXSBnZXRfY29udGV4dF9jbGFzc2VzX2F0X2l0ZXIgKEd0ay5UZXh0SXRlciBpdGVyKTsK LS0JCXB1YmxpYyBib29sIGdldF9oaWdobGlnaHRfbWF0Y2hpbmdfYnJhY2tldHMgKCk7Ci0tCQlw dWJsaWMgYm9vbCBnZXRfaGlnaGxpZ2h0X3N5bnRheCAoKTsKLS0JCXB1YmxpYyBib29sIGdldF9p bXBsaWNpdF90cmFpbGluZ19uZXdsaW5lICgpOwotLQkJcHVibGljIHVub3duZWQgR3RrLlNvdXJj ZUxhbmd1YWdlPyBnZXRfbGFuZ3VhZ2UgKCk7Ci0tCQlwdWJsaWMgaW50IGdldF9tYXhfdW5kb19s ZXZlbHMgKCk7Ci0tCQlwdWJsaWMgR0xpYi5TTGlzdDx3ZWFrIEd0ay5Tb3VyY2VNYXJrPiBnZXRf c291cmNlX21hcmtzX2F0X2l0ZXIgKEd0ay5UZXh0SXRlciBpdGVyLCBzdHJpbmc/IGNhdGVnb3J5 KTsKLS0JCXB1YmxpYyBHTGliLlNMaXN0PHdlYWsgR3RrLlNvdXJjZU1hcms+IGdldF9zb3VyY2Vf bWFya3NfYXRfbGluZSAoaW50IGxpbmUsIHN0cmluZz8gY2F0ZWdvcnkpOwotLQkJcHVibGljIHVu b3duZWQgR3RrLlNvdXJjZVN0eWxlU2NoZW1lPyBnZXRfc3R5bGVfc2NoZW1lICgpOwotLQkJcHVi bGljIHVub3duZWQgR3RrLlNvdXJjZVVuZG9NYW5hZ2VyPyBnZXRfdW5kb19tYW5hZ2VyICgpOwot LQkJcHVibGljIGJvb2wgaXRlcl9iYWNrd2FyZF90b19jb250ZXh0X2NsYXNzX3RvZ2dsZSAocmVm IEd0ay5UZXh0SXRlciBpdGVyLCBzdHJpbmcgY29udGV4dF9jbGFzcyk7Ci0tCQlwdWJsaWMgYm9v bCBpdGVyX2ZvcndhcmRfdG9fY29udGV4dF9jbGFzc190b2dnbGUgKHJlZiBHdGsuVGV4dEl0ZXIg aXRlciwgc3RyaW5nIGNvbnRleHRfY2xhc3MpOwotLQkJcHVibGljIGJvb2wgaXRlcl9oYXNfY29u dGV4dF9jbGFzcyAoR3RrLlRleHRJdGVyIGl0ZXIsIHN0cmluZyBjb250ZXh0X2NsYXNzKTsKLS0J CXB1YmxpYyB2b2lkIGpvaW5fbGluZXMgKEd0ay5UZXh0SXRlciBzdGFydCwgR3RrLlRleHRJdGVy IGVuZCk7Ci0tCQlwdWJsaWMgdm9pZCByZW1vdmVfc291cmNlX21hcmtzIChHdGsuVGV4dEl0ZXIg c3RhcnQsIEd0ay5UZXh0SXRlciBlbmQsIHN0cmluZz8gY2F0ZWdvcnkpOwotLQkJcHVibGljIHZv aWQgc2V0X2hpZ2hsaWdodF9tYXRjaGluZ19icmFja2V0cyAoYm9vbCBoaWdobGlnaHQpOwotLQkJ cHVibGljIHZvaWQgc2V0X2hpZ2hsaWdodF9zeW50YXggKGJvb2wgaGlnaGxpZ2h0KTsKLS0JCXB1 YmxpYyB2b2lkIHNldF9pbXBsaWNpdF90cmFpbGluZ19uZXdsaW5lIChib29sIGltcGxpY2l0X3Ry YWlsaW5nX25ld2xpbmUpOwotLQkJcHVibGljIHZvaWQgc2V0X2xhbmd1YWdlIChHdGsuU291cmNl TGFuZ3VhZ2U/IGxhbmd1YWdlKTsKLS0JCXB1YmxpYyB2b2lkIHNldF9tYXhfdW5kb19sZXZlbHMg KGludCBtYXhfdW5kb19sZXZlbHMpOwotLQkJcHVibGljIHZvaWQgc2V0X3N0eWxlX3NjaGVtZSAo R3RrLlNvdXJjZVN0eWxlU2NoZW1lPyBzY2hlbWUpOwotLQkJcHVibGljIHZvaWQgc2V0X3VuZG9f bWFuYWdlciAoR3RrLlNvdXJjZVVuZG9NYW5hZ2VyPyBtYW5hZ2VyKTsKLS0JCXB1YmxpYyB2b2lk IHNvcnRfbGluZXMgKEd0ay5UZXh0SXRlciBzdGFydCwgR3RrLlRleHRJdGVyIGVuZCwgR3RrLlNv dXJjZVNvcnRGbGFncyBmbGFncywgaW50IGNvbHVtbik7Ci0tCQlbQ0NvZGUgKGhhc19jb25zdHJ1 Y3RfZnVuY3Rpb24gPSBmYWxzZSldCi0tCQlwdWJsaWMgU291cmNlQnVmZmVyLndpdGhfbGFuZ3Vh Z2UgKEd0ay5Tb3VyY2VMYW5ndWFnZSBsYW5ndWFnZSk7Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0K LS0JCXB1YmxpYyBib29sIGNhbl9yZWRvIHsgZ2V0OyB9Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0K LS0JCXB1YmxpYyBib29sIGNhbl91bmRvIHsgZ2V0OyB9Ci0tCQlwdWJsaWMgYm9vbCBoaWdobGln aHRfbWF0Y2hpbmdfYnJhY2tldHMgeyBnZXQ7IHNldDsgfQotLQkJcHVibGljIGJvb2wgaGlnaGxp Z2h0X3N5bnRheCB7IGdldDsgc2V0OyB9Ci0tCQlwdWJsaWMgYm9vbCBpbXBsaWNpdF90cmFpbGlu Z19uZXdsaW5lIHsgZ2V0OyBzZXQgY29uc3RydWN0OyB9Ci0tCQlwdWJsaWMgR3RrLlNvdXJjZUxh bmd1YWdlIGxhbmd1YWdlIHsgZ2V0OyBzZXQ7IH0KLS0JCXB1YmxpYyBpbnQgbWF4X3VuZG9fbGV2 ZWxzIHsgZ2V0OyBzZXQ7IH0KLS0JCXB1YmxpYyBHdGsuU291cmNlU3R5bGVTY2hlbWUgc3R5bGVf c2NoZW1lIHsgZ2V0OyBzZXQ7IH0KLS0JCXB1YmxpYyBHdGsuU291cmNlVW5kb01hbmFnZXIgdW5k b19tYW5hZ2VyIHsgZ2V0OyBzZXQgY29uc3RydWN0OyB9Ci0tCQlwdWJsaWMgdmlydHVhbCBzaWdu YWwgdm9pZCBicmFja2V0X21hdGNoZWQgKEd0ay5UZXh0SXRlciBpdGVyLCBHdGsuU291cmNlQnJh Y2tldE1hdGNoVHlwZSBzdGF0ZSk7Ci0tCQlwdWJsaWMgc2lnbmFsIHZvaWQgaGlnaGxpZ2h0X3Vw ZGF0ZWQgKEd0ay5UZXh0SXRlciBzdGFydCwgR3RrLlRleHRJdGVyIGVuZCk7Ci0tCQlbSGFzRW1p dHRlcl0KLS0JCXB1YmxpYyB2aXJ0dWFsIHNpZ25hbCB2b2lkIHJlZG8gKCk7Ci0tCQlwdWJsaWMg c2lnbmFsIHZvaWQgc291cmNlX21hcmtfdXBkYXRlZCAoR3RrLlRleHRNYXJrIG1hcmspOwotLQkJ W0hhc0VtaXR0ZXJdCi0tCQlwdWJsaWMgdmlydHVhbCBzaWduYWwgdm9pZCB1bmRvICgpOwotLQl9 Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJndGtzb3VyY2V2aWV3L2d0a3NvdXJjZS5o IiwgdHlwZV9pZCA9ICJndGtfc291cmNlX2NvbXBsZXRpb25fZ2V0X3R5cGUgKCkiKV0KLS0JW0dJ UiAobmFtZSA9ICJDb21wbGV0aW9uIildCi0tCXB1YmxpYyBjbGFzcyBTb3VyY2VDb21wbGV0aW9u IDogR0xpYi5PYmplY3QsIEd0ay5CdWlsZGFibGUgewotLQkJW0NDb2RlIChoYXNfY29uc3RydWN0 X2Z1bmN0aW9uID0gZmFsc2UpXQotLQkJcHJvdGVjdGVkIFNvdXJjZUNvbXBsZXRpb24gKCk7Ci0t CQlwdWJsaWMgYm9vbCBhZGRfcHJvdmlkZXIgKEd0ay5Tb3VyY2VDb21wbGV0aW9uUHJvdmlkZXIg cHJvdmlkZXIpIHRocm93cyBHTGliLkVycm9yOwotLQkJcHVibGljIHZvaWQgYmxvY2tfaW50ZXJh Y3RpdmUgKCk7Ci0tCQlwdWJsaWMgdW5vd25lZCBHdGsuU291cmNlQ29tcGxldGlvbkNvbnRleHQg Y3JlYXRlX2NvbnRleHQgKEd0ay5UZXh0SXRlcj8gcG9zaXRpb24pOwotLQkJcHVibGljIHVub3du ZWQgR3RrLlNvdXJjZUNvbXBsZXRpb25JbmZvIGdldF9pbmZvX3dpbmRvdyAoKTsKLS0JCXB1Ymxp YyB1bm93bmVkIEdMaWIuTGlzdDxHdGsuU291cmNlQ29tcGxldGlvblByb3ZpZGVyPiBnZXRfcHJv dmlkZXJzICgpOwotLQkJcHVibGljIHVub3duZWQgR3RrLlNvdXJjZVZpZXc/IGdldF92aWV3ICgp OwotLQkJW1ZlcnNpb24gKGRlcHJlY2F0ZWQgPSB0cnVlLCBkZXByZWNhdGVkX3NpbmNlID0gIjMu OCIpXQotLQkJcHVibGljIHZvaWQgbW92ZV93aW5kb3cgKEd0ay5UZXh0SXRlciBpdGVyKTsKLS0J CVtOb1dyYXBwZXJdCi0tCQlwdWJsaWMgdmlydHVhbCBib29sIHByb3Bvc2FsX2FjdGl2YXRlZCAo R3RrLlNvdXJjZUNvbXBsZXRpb25Qcm92aWRlciBwcm92aWRlciwgR3RrLlNvdXJjZUNvbXBsZXRp b25Qcm9wb3NhbCBwcm9wb3NhbCk7Ci0tCQlwdWJsaWMgYm9vbCByZW1vdmVfcHJvdmlkZXIgKEd0 ay5Tb3VyY2VDb21wbGV0aW9uUHJvdmlkZXIgcHJvdmlkZXIpIHRocm93cyBHTGliLkVycm9yOwot LQkJW0NDb2RlIChjbmFtZSA9ICJndGtfc291cmNlX2NvbXBsZXRpb25fc2hvdyIpXQotLQkJcHVi bGljIGJvb2wgc3RhcnQgKEdMaWIuTGlzdDxHdGsuU291cmNlQ29tcGxldGlvblByb3ZpZGVyPj8g cHJvdmlkZXJzLCBHdGsuU291cmNlQ29tcGxldGlvbkNvbnRleHQgY29udGV4dCk7Ci0tCQlwdWJs aWMgdm9pZCB1bmJsb2NrX2ludGVyYWN0aXZlICgpOwotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0t CQlwdWJsaWMgdWludCBhY2NlbGVyYXRvcnMgeyBnZXQ7IHNldCBjb25zdHJ1Y3Q7IH0KLS0JCVtO b0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIHVpbnQgYXV0b19jb21wbGV0ZV9kZWxheSB7IGdl dDsgc2V0IGNvbnN0cnVjdDsgfQotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMgdWlu dCBwcm9wb3NhbF9wYWdlX3NpemUgeyBnZXQ7IHNldCBjb25zdHJ1Y3Q7IH0KLS0JCVtOb0FjY2Vz c29yTWV0aG9kXQotLQkJcHVibGljIHVpbnQgcHJvdmlkZXJfcGFnZV9zaXplIHsgZ2V0OyBzZXQg Y29uc3RydWN0OyB9Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1YmxpYyBib29sIHJlbWVt YmVyX2luZm9fdmlzaWJpbGl0eSB7IGdldDsgc2V0IGNvbnN0cnVjdDsgfQotLQkJW05vQWNjZXNz b3JNZXRob2RdCi0tCQlwdWJsaWMgYm9vbCBzZWxlY3Rfb25fc2hvdyB7IGdldDsgc2V0IGNvbnN0 cnVjdDsgfQotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMgYm9vbCBzaG93X2hlYWRl cnMgeyBnZXQ7IHNldCBjb25zdHJ1Y3Q7IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVi bGljIGJvb2wgc2hvd19pY29ucyB7IGdldDsgc2V0IGNvbnN0cnVjdDsgfQotLQkJcHVibGljIEd0 ay5Tb3VyY2VWaWV3IHZpZXcgeyBnZXQ7IGNvbnN0cnVjdDsgfQotLQkJcHVibGljIHZpcnR1YWwg c2lnbmFsIHZvaWQgYWN0aXZhdGVfcHJvcG9zYWwgKCk7Ci0tCQlbSGFzRW1pdHRlcl0KLS0JCXB1 YmxpYyB2aXJ0dWFsIHNpZ25hbCB2b2lkIGhpZGUgKCk7Ci0tCQlwdWJsaWMgdmlydHVhbCBzaWdu YWwgdm9pZCBtb3ZlX2N1cnNvciAoR3RrLlNjcm9sbFN0ZXAgc3RlcCwgaW50IG51bSk7Ci0tCQlw dWJsaWMgdmlydHVhbCBzaWduYWwgdm9pZCBtb3ZlX3BhZ2UgKEd0ay5TY3JvbGxTdGVwIHN0ZXAs IGludCBudW0pOwotLQkJcHVibGljIHZpcnR1YWwgc2lnbmFsIHZvaWQgcG9wdWxhdGVfY29udGV4 dCAoR3RrLlNvdXJjZUNvbXBsZXRpb25Db250ZXh0IGNvbnRleHQpOwotLQkJcHVibGljIHZpcnR1 YWwgc2lnbmFsIHZvaWQgc2hvdyAoKTsKLS0JfQotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUg PSAiZ3Rrc291cmNldmlldy9ndGtzb3VyY2UuaCIsIHR5cGVfaWQgPSAiZ3RrX3NvdXJjZV9jb21w bGV0aW9uX2NvbnRleHRfZ2V0X3R5cGUgKCkiKV0KLS0JW0dJUiAobmFtZSA9ICJDb21wbGV0aW9u Q29udGV4dCIpXQotLQlwdWJsaWMgY2xhc3MgU291cmNlQ29tcGxldGlvbkNvbnRleHQgOiBHTGli LkluaXRpYWxseVVub3duZWQgewotLQkJW0NDb2RlIChoYXNfY29uc3RydWN0X2Z1bmN0aW9uID0g ZmFsc2UpXQotLQkJcHJvdGVjdGVkIFNvdXJjZUNvbXBsZXRpb25Db250ZXh0ICgpOwotLQkJcHVi bGljIHZvaWQgYWRkX3Byb3Bvc2FscyAoR3RrLlNvdXJjZUNvbXBsZXRpb25Qcm92aWRlciBwcm92 aWRlciwgR0xpYi5MaXN0PEd0ay5Tb3VyY2VDb21wbGV0aW9uUHJvcG9zYWw+PyBwcm9wb3NhbHMs IGJvb2wgZmluaXNoZWQpOwotLQkJcHVibGljIEd0ay5Tb3VyY2VDb21wbGV0aW9uQWN0aXZhdGlv biBnZXRfYWN0aXZhdGlvbiAoKTsKLS0JCXB1YmxpYyBib29sIGdldF9pdGVyIChvdXQgR3RrLlRl eHRJdGVyIGl0ZXIpOwotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMgR3RrLlNvdXJj ZUNvbXBsZXRpb25BY3RpdmF0aW9uIGFjdGl2YXRpb24geyBnZXQ7IHNldCBjb25zdHJ1Y3Q7IH0K LS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIEd0ay5Tb3VyY2VDb21wbGV0aW9uIGNv bXBsZXRpb24geyBvd25lZCBnZXQ7IGNvbnN0cnVjdDsgfQotLQkJW05vQWNjZXNzb3JNZXRob2Rd Ci0tCQlwdWJsaWMgR3RrLlRleHRJdGVyIGl0ZXIgeyBnZXQ7IHNldDsgfQotLQkJcHVibGljIHZp cnR1YWwgc2lnbmFsIHZvaWQgY2FuY2VsbGVkICgpOwotLQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9m aWxlbmFtZSA9ICJndGtzb3VyY2V2aWV3L2d0a3NvdXJjZS5oIiwgdHlwZV9pZCA9ICJndGtfc291 cmNlX2NvbXBsZXRpb25faW5mb19nZXRfdHlwZSAoKSIpXQotLQlbR0lSIChuYW1lID0gIkNvbXBs ZXRpb25JbmZvIildCi0tCXB1YmxpYyBjbGFzcyBTb3VyY2VDb21wbGV0aW9uSW5mbyA6IEd0ay5X aW5kb3csIEF0ay5JbXBsZW1lbnRvciwgR3RrLkJ1aWxkYWJsZSB7Ci0tCQlbQ0NvZGUgKGhhc19j b25zdHJ1Y3RfZnVuY3Rpb24gPSBmYWxzZSldCi0tCQlwdWJsaWMgU291cmNlQ29tcGxldGlvbklu Zm8gKCk7Ci0tCQlbVmVyc2lvbiAoIGRlcHJlY2F0ZWQgPSB0cnVlLCBkZXByZWNhdGVkX3NpbmNl ID0gIjMuOCIgKV0KLS0JCXB1YmxpYyB1bm93bmVkIEd0ay5XaWRnZXQgZ2V0X3dpZGdldCAoKTsK LS0JCXB1YmxpYyB2b2lkIG1vdmVfdG9faXRlciAoR3RrLlRleHRWaWV3IHZpZXcsIEd0ay5UZXh0 SXRlcj8gaXRlcik7Ci0tCQlbVmVyc2lvbiAoIGRlcHJlY2F0ZWQgPSB0cnVlLCBkZXByZWNhdGVk X3NpbmNlID0gIjMuOCIgKV0KLS0JCXB1YmxpYyB2b2lkIHNldF93aWRnZXQgKEd0ay5XaWRnZXQ/ IHdpZGdldCk7Ci0tCQlbVmVyc2lvbiAoIGRlcHJlY2F0ZWQgPSB0cnVlLCBkZXByZWNhdGVkX3Np bmNlID0gIjMuMTAiICldCi0tCQlwdWJsaWMgdmlydHVhbCBzaWduYWwgdm9pZCBiZWZvcmVfc2hv dyAoKTsKLS0JfQotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAiZ3Rrc291cmNldmlldy9n dGtzb3VyY2UuaCIsIHR5cGVfaWQgPSAiZ3RrX3NvdXJjZV9jb21wbGV0aW9uX2l0ZW1fZ2V0X3R5 cGUgKCkiKV0KLS0JW0dJUiAobmFtZSA9ICJDb21wbGV0aW9uSXRlbSIpXQotLQlwdWJsaWMgY2xh c3MgU291cmNlQ29tcGxldGlvbkl0ZW0gOiBHTGliLk9iamVjdCwgR3RrLlNvdXJjZUNvbXBsZXRp b25Qcm9wb3NhbCB7Ci0tCQlbQ0NvZGUgKGhhc19jb25zdHJ1Y3RfZnVuY3Rpb24gPSBmYWxzZSld Ci0tCQlwdWJsaWMgU291cmNlQ29tcGxldGlvbkl0ZW0gKHN0cmluZyBsYWJlbCwgc3RyaW5nIHRl eHQsIEdkay5QaXhidWY/IGljb24sIHN0cmluZz8gaW5mbyk7Ci0tCQlbQ0NvZGUgKGhhc19jb25z dHJ1Y3RfZnVuY3Rpb24gPSBmYWxzZSldCi0tCQlbVmVyc2lvbiAoIGRlcHJlY2F0ZWQgPSB0cnVl LCBkZXByZWNhdGVkX3NpbmNlID0gIjMuMTAiICldCi0tCQlwdWJsaWMgU291cmNlQ29tcGxldGlv bkl0ZW0uZnJvbV9zdG9jayAoc3RyaW5nPyBsYWJlbCwgc3RyaW5nIHRleHQsIHN0cmluZyBzdG9j aywgc3RyaW5nPyBpbmZvKTsKLS0JCVtDQ29kZSAoaGFzX2NvbnN0cnVjdF9mdW5jdGlvbiA9IGZh bHNlKV0KLS0JCXB1YmxpYyBTb3VyY2VDb21wbGV0aW9uSXRlbS53aXRoX21hcmt1cCAoc3RyaW5n IG1hcmt1cCwgc3RyaW5nIHRleHQsIEdkay5QaXhidWY/IGljb24sIHN0cmluZz8gaW5mbyk7Ci0t CQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1YmxpYyBHTGliLkljb24gZ2ljb24geyBvd25lZCBn ZXQ7IHNldDsgfQotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMgR2RrLlBpeGJ1ZiBp Y29uIHsgb3duZWQgZ2V0OyBzZXQ7IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGlj IHN0cmluZyBpY29uX25hbWUgeyBvd25lZCBnZXQ7IHNldDsgfQotLQkJW05vQWNjZXNzb3JNZXRo b2RdCi0tCQlwdWJsaWMgc3RyaW5nIGluZm8geyBvd25lZCBnZXQ7IHNldDsgfQotLQkJW05vQWNj ZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMgc3RyaW5nIGxhYmVsIHsgb3duZWQgZ2V0OyBzZXQ7IH0K LS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIHN0cmluZyBtYXJrdXAgeyBvd25lZCBn ZXQ7IHNldDsgfQotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMgc3RyaW5nIHRleHQg eyBvd25lZCBnZXQ7IHNldDsgfQotLQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJn dGtzb3VyY2V2aWV3L2d0a3NvdXJjZS5oIiwgdHlwZV9pZCA9ICJndGtfc291cmNlX2NvbXBsZXRp b25fd29yZHNfZ2V0X3R5cGUgKCkiKV0KLS0JW0dJUiAobmFtZSA9ICJDb21wbGV0aW9uV29yZHMi KV0KLS0JcHVibGljIGNsYXNzIFNvdXJjZUNvbXBsZXRpb25Xb3JkcyA6IEdMaWIuT2JqZWN0LCBH dGsuU291cmNlQ29tcGxldGlvblByb3ZpZGVyIHsKLS0JCVtDQ29kZSAoaGFzX2NvbnN0cnVjdF9m dW5jdGlvbiA9IGZhbHNlKV0KLS0JCXB1YmxpYyBTb3VyY2VDb21wbGV0aW9uV29yZHMgKHN0cmlu Zz8gbmFtZSwgR2RrLlBpeGJ1Zj8gaWNvbik7Ci0tCQlwdWJsaWMgdm9pZCByZWdpc3RlciAoR3Rr LlRleHRCdWZmZXIgYnVmZmVyKTsKLS0JCXB1YmxpYyB2b2lkIHVucmVnaXN0ZXIgKEd0ay5UZXh0 QnVmZmVyIGJ1ZmZlcik7Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1YmxpYyBHdGsuU291 cmNlQ29tcGxldGlvbkFjdGl2YXRpb24gYWN0aXZhdGlvbiB7IGdldDsgc2V0IGNvbnN0cnVjdDsg fQotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMgR2RrLlBpeGJ1ZiBpY29uIHsgb3du ZWQgZ2V0OyBzZXQgY29uc3RydWN0OyB9Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1Ymxp YyBpbnQgaW50ZXJhY3RpdmVfZGVsYXkgeyBnZXQ7IHNldCBjb25zdHJ1Y3Q7IH0KLS0JCVtOb0Fj Y2Vzc29yTWV0aG9kXQotLQkJcHVibGljIHVpbnQgbWluaW11bV93b3JkX3NpemUgeyBnZXQ7IHNl dCBjb25zdHJ1Y3Q7IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIHN0cmluZyBu YW1lIHsgb3duZWQgZ2V0OyBzZXQgY29uc3RydWN0OyB9Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0K LS0JCXB1YmxpYyBpbnQgcHJpb3JpdHkgeyBnZXQ7IHNldCBjb25zdHJ1Y3Q7IH0KLS0JCVtOb0Fj Y2Vzc29yTWV0aG9kXQotLQkJcHVibGljIHVpbnQgcHJvcG9zYWxzX2JhdGNoX3NpemUgeyBnZXQ7 IHNldCBjb25zdHJ1Y3Q7IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIHVpbnQg c2Nhbl9iYXRjaF9zaXplIHsgZ2V0OyBzZXQgY29uc3RydWN0OyB9Ci0tCX0KLS0JW0NDb2RlIChj aGVhZGVyX2ZpbGVuYW1lID0gImd0a3NvdXJjZXZpZXcvZ3Rrc291cmNlLmgiLCBjb3B5X2Z1bmN0 aW9uID0gImdfYm94ZWRfY29weSIsIGZyZWVfZnVuY3Rpb24gPSAiZ19ib3hlZF9mcmVlIiwgdHlw ZV9pZCA9ICJndGtfc291cmNlX2VuY29kaW5nX2dldF90eXBlICgpIildCi0tCVtDb21wYWN0XQot LQlbR0lSIChuYW1lID0gIkVuY29kaW5nIildCi0tCXB1YmxpYyBjbGFzcyBTb3VyY2VFbmNvZGlu ZyB7Ci0tCQlwdWJsaWMgR3RrLlNvdXJjZUVuY29kaW5nIGNvcHkgKCk7Ci0tCQlbQ0NvZGUgKGNu YW1lID0gImd0a19zb3VyY2VfZW5jb2RpbmdfZ2V0X2FsbCIpXQotLQkJcHVibGljIHN0YXRpYyBH TGliLlNMaXN0PHdlYWsgR3RrLlNvdXJjZUVuY29kaW5nPiBldF9hbGwgKCk7Ci0tCQlbQ0NvZGUg KGNuYW1lID0gImd0a19zb3VyY2VfZW5jb2RpbmdfZ2V0X2N1cnJlbnQiKV0KLS0JCXB1YmxpYyBz dGF0aWMgdW5vd25lZCBHdGsuU291cmNlRW5jb2RpbmcgZXRfY3VycmVudCAoKTsKLS0JCVtDQ29k ZSAoY25hbWUgPSAiZ3RrX3NvdXJjZV9lbmNvZGluZ19nZXRfZGVmYXVsdF9jYW5kaWRhdGVzIild Ci0tCQlwdWJsaWMgc3RhdGljIEdMaWIuU0xpc3Q8d2VhayBHdGsuU291cmNlRW5jb2Rpbmc+IGV0 X2RlZmF1bHRfY2FuZGlkYXRlcyAoKTsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZ3RrX3NvdXJjZV9l bmNvZGluZ19nZXRfZnJvbV9jaGFyc2V0IildCi0tCQlwdWJsaWMgc3RhdGljIHVub3duZWQgR3Rr LlNvdXJjZUVuY29kaW5nPyBldF9mcm9tX2NoYXJzZXQgKHN0cmluZyBjaGFyc2V0KTsKLS0JCVtD Q29kZSAoY25hbWUgPSAiZ3RrX3NvdXJjZV9lbmNvZGluZ19nZXRfdXRmOCIpXQotLQkJcHVibGlj IHN0YXRpYyB1bm93bmVkIEd0ay5Tb3VyY2VFbmNvZGluZyBldF91dGY4ICgpOwotLQkJcHVibGlj IHZvaWQgZnJlZSAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIHN0cmluZyBnZXRfY2hhcnNldCAoKTsK LS0JCXB1YmxpYyB1bm93bmVkIHN0cmluZyBnZXRfbmFtZSAoKTsKLS0JCXB1YmxpYyBzdHJpbmcg dG9fc3RyaW5nICgpOwotLQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJndGtzb3Vy Y2V2aWV3L2d0a3NvdXJjZS5oIiwgdHlwZV9pZCA9ICJndGtfc291cmNlX2ZpbGVfZ2V0X3R5cGUg KCkiKV0KLS0JW0dJUiAobmFtZSA9ICJGaWxlIildCi0tCXB1YmxpYyBjbGFzcyBTb3VyY2VGaWxl IDogR0xpYi5PYmplY3QgewotLQkJW0NDb2RlIChoYXNfY29uc3RydWN0X2Z1bmN0aW9uID0gZmFs c2UpXQotLQkJcHVibGljIFNvdXJjZUZpbGUgKCk7Ci0tCQlwdWJsaWMgdm9pZCBjaGVja19maWxl X29uX2Rpc2sgKCk7Ci0tCQlwdWJsaWMgR3RrLlNvdXJjZUNvbXByZXNzaW9uVHlwZSBnZXRfY29t cHJlc3Npb25fdHlwZSAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIEd0ay5Tb3VyY2VFbmNvZGluZyBn ZXRfZW5jb2RpbmcgKCk7Ci0tCQlwdWJsaWMgdW5vd25lZCBHTGliLkZpbGUgZ2V0X2xvY2F0aW9u ICgpOwotLQkJcHVibGljIEd0ay5Tb3VyY2VOZXdsaW5lVHlwZSBnZXRfbmV3bGluZV90eXBlICgp OwotLQkJcHVibGljIGJvb2wgaXNfZGVsZXRlZCAoKTsKLS0JCXB1YmxpYyBib29sIGlzX2V4dGVy bmFsbHlfbW9kaWZpZWQgKCk7Ci0tCQlwdWJsaWMgYm9vbCBpc19sb2NhbCAoKTsKLS0JCXB1Ymxp YyBib29sIGlzX3JlYWRvbmx5ICgpOwotLQkJcHVibGljIHZvaWQgc2V0X2xvY2F0aW9uIChHTGli LkZpbGU/IGxvY2F0aW9uKTsKLS0JCXB1YmxpYyBHdGsuU291cmNlQ29tcHJlc3Npb25UeXBlIGNv bXByZXNzaW9uX3R5cGUgeyBnZXQ7IH0KLS0JCXB1YmxpYyBHdGsuU291cmNlRW5jb2RpbmcgZW5j b2RpbmcgeyBnZXQ7IH0KLS0JCXB1YmxpYyBHTGliLkZpbGUgbG9jYXRpb24geyBnZXQ7IHNldCBj b25zdHJ1Y3Q7IH0KLS0JCXB1YmxpYyBHdGsuU291cmNlTmV3bGluZVR5cGUgbmV3bGluZV90eXBl IHsgZ2V0OyB9Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1YmxpYyBib29sIHJlYWRfb25s eSB7IGdldDsgfQotLQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJndGtzb3VyY2V2 aWV3L2d0a3NvdXJjZS5oIiwgdHlwZV9pZCA9ICJndGtfc291cmNlX2ZpbGVfbG9hZGVyX2dldF90 eXBlICgpIildCi0tCVtHSVIgKG5hbWUgPSAiRmlsZUxvYWRlciIpXQotLQlwdWJsaWMgY2xhc3Mg U291cmNlRmlsZUxvYWRlciA6IEdMaWIuT2JqZWN0IHsKLS0JCVtDQ29kZSAoaGFzX2NvbnN0cnVj dF9mdW5jdGlvbiA9IGZhbHNlKV0KLS0JCXB1YmxpYyBTb3VyY2VGaWxlTG9hZGVyIChHdGsuU291 cmNlQnVmZmVyIGJ1ZmZlciwgR3RrLlNvdXJjZUZpbGUgZmlsZSk7Ci0tCQlbQ0NvZGUgKGhhc19j b25zdHJ1Y3RfZnVuY3Rpb24gPSBmYWxzZSldCi0tCQlwdWJsaWMgU291cmNlRmlsZUxvYWRlci5m cm9tX3N0cmVhbSAoR3RrLlNvdXJjZUJ1ZmZlciBidWZmZXIsIEd0ay5Tb3VyY2VGaWxlIGZpbGUs IEdMaWIuSW5wdXRTdHJlYW0gc3RyZWFtKTsKLS0JCXB1YmxpYyB1bm93bmVkIEd0ay5Tb3VyY2VC dWZmZXIgZ2V0X2J1ZmZlciAoKTsKLS0JCXB1YmxpYyBHdGsuU291cmNlQ29tcHJlc3Npb25UeXBl IGdldF9jb21wcmVzc2lvbl90eXBlICgpOwotLQkJcHVibGljIHVub3duZWQgR3RrLlNvdXJjZUVu Y29kaW5nIGdldF9lbmNvZGluZyAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIEd0ay5Tb3VyY2VGaWxl IGdldF9maWxlICgpOwotLQkJcHVibGljIHVub3duZWQgR0xpYi5JbnB1dFN0cmVhbT8gZ2V0X2lu cHV0X3N0cmVhbSAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIEdMaWIuRmlsZT8gZ2V0X2xvY2F0aW9u ICgpOwotLQkJcHVibGljIEd0ay5Tb3VyY2VOZXdsaW5lVHlwZSBnZXRfbmV3bGluZV90eXBlICgp OwotLQkJcHVibGljIGFzeW5jIGJvb2wgbG9hZF9hc3luYyAoaW50IGlvX3ByaW9yaXR5LCBHTGli LkNhbmNlbGxhYmxlPyBjYW5jZWxsYWJsZSwgb3duZWQgR0xpYi5GaWxlUHJvZ3Jlc3NDYWxsYmFj az8gcHJvZ3Jlc3NfY2FsbGJhY2spIHRocm93cyBHTGliLkVycm9yOwotLQkJcHVibGljIHZvaWQg c2V0X2NhbmRpZGF0ZV9lbmNvZGluZ3MgKEdMaWIuU0xpc3Q8R3RrLlNvdXJjZUVuY29kaW5nPiBj YW5kaWRhdGVfZW5jb2RpbmdzKTsKLS0JCXB1YmxpYyBHdGsuU291cmNlQnVmZmVyIGJ1ZmZlciB7 IGdldDsgY29uc3RydWN0OyB9Ci0tCQlwdWJsaWMgR3RrLlNvdXJjZUZpbGUgZmlsZSB7IGdldDsg Y29uc3RydWN0OyB9Ci0tCQlwdWJsaWMgR0xpYi5JbnB1dFN0cmVhbSBpbnB1dF9zdHJlYW0geyBn ZXQ7IGNvbnN0cnVjdDsgfQotLQkJcHVibGljIEdMaWIuRmlsZSBsb2NhdGlvbiB7IGdldDsgY29u c3RydWN0OyB9Ci0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImd0a3NvdXJjZXZp ZXcvZ3Rrc291cmNlLmgiLCB0eXBlX2lkID0gImd0a19zb3VyY2VfZmlsZV9zYXZlcl9nZXRfdHlw ZSAoKSIpXQotLQlbR0lSIChuYW1lID0gIkZpbGVTYXZlciIpXQotLQlwdWJsaWMgY2xhc3MgU291 cmNlRmlsZVNhdmVyIDogR0xpYi5PYmplY3QgewotLQkJW0NDb2RlIChoYXNfY29uc3RydWN0X2Z1 bmN0aW9uID0gZmFsc2UpXQotLQkJcHVibGljIFNvdXJjZUZpbGVTYXZlciAoR3RrLlNvdXJjZUJ1 ZmZlciBidWZmZXIsIEd0ay5Tb3VyY2VGaWxlIGZpbGUpOwotLQkJcHVibGljIHVub3duZWQgR3Rr LlNvdXJjZUJ1ZmZlciBnZXRfYnVmZmVyICgpOwotLQkJcHVibGljIEd0ay5Tb3VyY2VDb21wcmVz c2lvblR5cGUgZ2V0X2NvbXByZXNzaW9uX3R5cGUgKCk7Ci0tCQlwdWJsaWMgdW5vd25lZCBHdGsu U291cmNlRW5jb2RpbmcgZ2V0X2VuY29kaW5nICgpOwotLQkJcHVibGljIHVub3duZWQgR3RrLlNv dXJjZUZpbGUgZ2V0X2ZpbGUgKCk7Ci0tCQlwdWJsaWMgR3RrLlNvdXJjZUZpbGVTYXZlckZsYWdz IGdldF9mbGFncyAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIEdMaWIuRmlsZSBnZXRfbG9jYXRpb24g KCk7Ci0tCQlwdWJsaWMgR3RrLlNvdXJjZU5ld2xpbmVUeXBlIGdldF9uZXdsaW5lX3R5cGUgKCk7 Ci0tCQlwdWJsaWMgYXN5bmMgYm9vbCBzYXZlX2FzeW5jIChpbnQgaW9fcHJpb3JpdHksIEdMaWIu Q2FuY2VsbGFibGU/IGNhbmNlbGxhYmxlLCBvd25lZCBHTGliLkZpbGVQcm9ncmVzc0NhbGxiYWNr PyBwcm9ncmVzc19jYWxsYmFjaykgdGhyb3dzIEdMaWIuRXJyb3I7Ci0tCQlwdWJsaWMgdm9pZCBz ZXRfY29tcHJlc3Npb25fdHlwZSAoR3RrLlNvdXJjZUNvbXByZXNzaW9uVHlwZSBjb21wcmVzc2lv bl90eXBlKTsKLS0JCXB1YmxpYyB2b2lkIHNldF9lbmNvZGluZyAoR3RrLlNvdXJjZUVuY29kaW5n PyBlbmNvZGluZyk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfZmxhZ3MgKEd0ay5Tb3VyY2VGaWxlU2F2 ZXJGbGFncyBmbGFncyk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfbmV3bGluZV90eXBlIChHdGsuU291 cmNlTmV3bGluZVR5cGUgbmV3bGluZV90eXBlKTsKLS0JCVtDQ29kZSAoaGFzX2NvbnN0cnVjdF9m dW5jdGlvbiA9IGZhbHNlKV0KLS0JCXB1YmxpYyBTb3VyY2VGaWxlU2F2ZXIud2l0aF90YXJnZXQg KEd0ay5Tb3VyY2VCdWZmZXIgYnVmZmVyLCBHdGsuU291cmNlRmlsZSBmaWxlLCBHTGliLkZpbGUg dGFyZ2V0X2xvY2F0aW9uKTsKLS0JCXB1YmxpYyBHdGsuU291cmNlQnVmZmVyIGJ1ZmZlciB7IGdl dDsgY29uc3RydWN0OyB9Ci0tCQlwdWJsaWMgR3RrLlNvdXJjZUNvbXByZXNzaW9uVHlwZSBjb21w cmVzc2lvbl90eXBlIHsgZ2V0OyBzZXQgY29uc3RydWN0OyB9Ci0tCQlwdWJsaWMgR3RrLlNvdXJj ZUVuY29kaW5nIGVuY29kaW5nIHsgZ2V0OyBzZXQgY29uc3RydWN0OyB9Ci0tCQlwdWJsaWMgR3Rr LlNvdXJjZUZpbGUgZmlsZSB7IGdldDsgY29uc3RydWN0OyB9Ci0tCQlwdWJsaWMgR3RrLlNvdXJj ZUZpbGVTYXZlckZsYWdzIGZsYWdzIHsgZ2V0OyBzZXQgY29uc3RydWN0OyB9Ci0tCQlwdWJsaWMg R0xpYi5GaWxlIGxvY2F0aW9uIHsgZ2V0OyBjb25zdHJ1Y3Q7IH0KLS0JCXB1YmxpYyBHdGsuU291 cmNlTmV3bGluZVR5cGUgbmV3bGluZV90eXBlIHsgZ2V0OyBzZXQgY29uc3RydWN0OyB9Ci0tCX0K LS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImd0a3NvdXJjZXZpZXcvZ3Rrc291cmNlLmgi LCB0eXBlX2lkID0gImd0a19zb3VyY2VfZ3V0dGVyX2dldF90eXBlICgpIildCi0tCVtHSVIgKG5h bWUgPSAiR3V0dGVyIildCi0tCXB1YmxpYyBjbGFzcyBTb3VyY2VHdXR0ZXIgOiBHTGliLk9iamVj dCB7Ci0tCQlbQ0NvZGUgKGhhc19jb25zdHJ1Y3RfZnVuY3Rpb24gPSBmYWxzZSldCi0tCQlwcm90 ZWN0ZWQgU291cmNlR3V0dGVyICgpOwotLQkJW1ZlcnNpb24gKCBkZXByZWNhdGVkID0gdHJ1ZSwg ZGVwcmVjYXRlZF9zaW5jZSA9ICIzLjEyIiApXQotLQkJcHVibGljIHZvaWQgZ2V0X3BhZGRpbmcg KGludCB4cGFkLCBpbnQgeXBhZCk7Ci0tCQlwdWJsaWMgdW5vd25lZCBHdGsuU291cmNlR3V0dGVy UmVuZGVyZXI/IGdldF9yZW5kZXJlcl9hdF9wb3MgKGludCB4LCBpbnQgeSk7Ci0tCQlbVmVyc2lv biAoIGRlcHJlY2F0ZWQgPSB0cnVlLCBkZXByZWNhdGVkX3NpbmNlID0gIjMuMTIiICldCi0tCQlw dWJsaWMgdW5vd25lZCBHZGsuV2luZG93IGdldF93aW5kb3cgKCk7Ci0tCQlwdWJsaWMgYm9vbCBp bnNlcnQgKEd0ay5Tb3VyY2VHdXR0ZXJSZW5kZXJlciByZW5kZXJlciwgaW50IHBvc2l0aW9uKTsK LS0JCXB1YmxpYyB2b2lkIHF1ZXVlX2RyYXcgKCk7Ci0tCQlwdWJsaWMgdm9pZCByZW1vdmUgKEd0 ay5Tb3VyY2VHdXR0ZXJSZW5kZXJlciByZW5kZXJlcik7Ci0tCQlwdWJsaWMgdm9pZCByZW9yZGVy IChHdGsuU291cmNlR3V0dGVyUmVuZGVyZXIgcmVuZGVyZXIsIGludCBwb3NpdGlvbik7Ci0tCQlb VmVyc2lvbiAoIGRlcHJlY2F0ZWQgPSB0cnVlLCBkZXByZWNhdGVkX3NpbmNlID0gIjMuMTIiICld Ci0tCQlwdWJsaWMgdm9pZCBzZXRfcGFkZGluZyAoaW50IHhwYWQsIGludCB5cGFkKTsKLS0JCVtO b0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIEd0ay5Tb3VyY2VWaWV3IHZpZXcgeyBvd25lZCBn ZXQ7IGNvbnN0cnVjdDsgfQotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMgR3RrLlRl eHRXaW5kb3dUeXBlIHdpbmRvd190eXBlIHsgZ2V0OyBjb25zdHJ1Y3Q7IH0KLS0JCVtWZXJzaW9u ICggZGVwcmVjYXRlZCA9IHRydWUsIGRlcHJlY2F0ZWRfc2luY2UgPSAiMy4xMiIgKV0KLS0JCVtO b0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIGludCB4cGFkIHsgZ2V0OyBzZXQgY29uc3RydWN0 OyB9Ci0tCQlbVmVyc2lvbiAoIGRlcHJlY2F0ZWQgPSB0cnVlLCBkZXByZWNhdGVkX3NpbmNlID0g IjMuMTIiICldCi0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1YmxpYyBpbnQgeXBhZCB7IGdl dDsgc2V0IGNvbnN0cnVjdDsgfQotLQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJn dGtzb3VyY2V2aWV3L2d0a3NvdXJjZS5oIiwgdHlwZV9pZCA9ICJndGtfc291cmNlX2d1dHRlcl9y ZW5kZXJlcl9nZXRfdHlwZSAoKSIpXQotLQlbR0lSIChuYW1lID0gIkd1dHRlclJlbmRlcmVyIild Ci0tCXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBTb3VyY2VHdXR0ZXJSZW5kZXJlciA6IEdMaWIuSW5p dGlhbGx5VW5vd25lZCB7Ci0tCQlbQ0NvZGUgKGhhc19jb25zdHJ1Y3RfZnVuY3Rpb24gPSBmYWxz ZSldCi0tCQlwcm90ZWN0ZWQgU291cmNlR3V0dGVyUmVuZGVyZXIgKCk7Ci0tCQlwdWJsaWMgdmly dHVhbCB2b2lkIGJlZ2luIChDYWlyby5Db250ZXh0IGNyLCBHZGsuUmVjdGFuZ2xlIGJhY2tncm91 bmRfYXJlYSwgR2RrLlJlY3RhbmdsZSBjZWxsX2FyZWEsIEd0ay5UZXh0SXRlciBzdGFydCwgR3Rr LlRleHRJdGVyIGVuZCk7Ci0tCQlbTm9XcmFwcGVyXQotLQkJcHVibGljIHZpcnR1YWwgdm9pZCBj aGFuZ2VfYnVmZmVyIChHdGsuVGV4dEJ1ZmZlciBvbGRfYnVmZmVyKTsKLS0JCVtOb1dyYXBwZXJd Ci0tCQlwdWJsaWMgdmlydHVhbCB2b2lkIGNoYW5nZV92aWV3IChHdGsuVGV4dFZpZXc/IG9sZF92 aWV3KTsKLS0JCXB1YmxpYyB2aXJ0dWFsIHZvaWQgZHJhdyAoQ2Fpcm8uQ29udGV4dCBjciwgR2Rr LlJlY3RhbmdsZSBiYWNrZ3JvdW5kX2FyZWEsIEdkay5SZWN0YW5nbGUgY2VsbF9hcmVhLCBHdGsu VGV4dEl0ZXIgc3RhcnQsIEd0ay5UZXh0SXRlciBlbmQsIEd0ay5Tb3VyY2VHdXR0ZXJSZW5kZXJl clN0YXRlIHN0YXRlKTsKLS0JCXB1YmxpYyB2aXJ0dWFsIHZvaWQgZW5kICgpOwotLQkJcHVibGlj IHZvaWQgZ2V0X2FsaWdubWVudCAob3V0IGZsb2F0IHhhbGlnbiwgb3V0IGZsb2F0IHlhbGlnbik7 Ci0tCQlwdWJsaWMgR3RrLlNvdXJjZUd1dHRlclJlbmRlcmVyQWxpZ25tZW50TW9kZSBnZXRfYWxp Z25tZW50X21vZGUgKCk7Ci0tCQlwdWJsaWMgYm9vbCBnZXRfYmFja2dyb3VuZCAob3V0IEdkay5S R0JBIGNvbG9yKTsKLS0JCXB1YmxpYyB2b2lkIGdldF9wYWRkaW5nIChvdXQgaW50IHhwYWQsIG91 dCBpbnQgeXBhZCk7Ci0tCQlwdWJsaWMgaW50IGdldF9zaXplICgpOwotLQkJcHVibGljIHVub3du ZWQgR3RrLlRleHRWaWV3IGdldF92aWV3ICgpOwotLQkJcHVibGljIGJvb2wgZ2V0X3Zpc2libGUg KCk7Ci0tCQlwdWJsaWMgR3RrLlRleHRXaW5kb3dUeXBlIGdldF93aW5kb3dfdHlwZSAoKTsKLS0J CXB1YmxpYyB2b2lkIHNldF9hbGlnbm1lbnQgKGZsb2F0IHhhbGlnbiwgZmxvYXQgeWFsaWduKTsK LS0JCXB1YmxpYyB2b2lkIHNldF9hbGlnbm1lbnRfbW9kZSAoR3RrLlNvdXJjZUd1dHRlclJlbmRl cmVyQWxpZ25tZW50TW9kZSBtb2RlKTsKLS0JCXB1YmxpYyB2b2lkIHNldF9iYWNrZ3JvdW5kIChH ZGsuUkdCQT8gY29sb3IpOwotLQkJcHVibGljIHZvaWQgc2V0X3BhZGRpbmcgKGludCB4cGFkLCBp bnQgeXBhZCk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfc2l6ZSAoaW50IHNpemUpOwotLQkJcHVibGlj IHZvaWQgc2V0X3Zpc2libGUgKGJvb2wgdmlzaWJsZSk7Ci0tCQlwdWJsaWMgR3RrLlNvdXJjZUd1 dHRlclJlbmRlcmVyQWxpZ25tZW50TW9kZSBhbGlnbm1lbnRfbW9kZSB7IGdldDsgc2V0IGNvbnN0 cnVjdDsgfQotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMgR2RrLlJHQkEgYmFja2dy b3VuZF9yZ2JhIHsgZ2V0OyBzZXQ7IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGlj IGJvb2wgYmFja2dyb3VuZF9zZXQgeyBnZXQ7IHNldCBjb25zdHJ1Y3Q7IH0KLS0JCXB1YmxpYyBp bnQgc2l6ZSB7IGdldDsgc2V0IGNvbnN0cnVjdDsgfQotLQkJcHVibGljIEd0ay5UZXh0VmlldyB2 aWV3IHsgZ2V0OyB9Ci0tCQlwdWJsaWMgYm9vbCB2aXNpYmxlIHsgZ2V0OyBzZXQgY29uc3RydWN0 OyB9Ci0tCQlwdWJsaWMgR3RrLlRleHRXaW5kb3dUeXBlIHdpbmRvd190eXBlIHsgZ2V0OyB9Ci0t CQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1YmxpYyBmbG9hdCB4YWxpZ24geyBnZXQ7IHNldCBj b25zdHJ1Y3Q7IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIGludCB4cGFkIHsg Z2V0OyBzZXQgY29uc3RydWN0OyB9Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1YmxpYyBm bG9hdCB5YWxpZ24geyBnZXQ7IHNldCBjb25zdHJ1Y3Q7IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9k XQotLQkJcHVibGljIGludCB5cGFkIHsgZ2V0OyBzZXQgY29uc3RydWN0OyB9Ci0tCQlbSGFzRW1p dHRlcl0KLS0JCXB1YmxpYyB2aXJ0dWFsIHNpZ25hbCB2b2lkIGFjdGl2YXRlIChHdGsuVGV4dEl0 ZXIgaXRlciwgQ2Fpcm8uUmVjdGFuZ2xlSW50IGFyZWEsIEdkay5FdmVudCBldmVudCk7Ci0tCQlb SGFzRW1pdHRlcl0KLS0JCXB1YmxpYyB2aXJ0dWFsIHNpZ25hbCBib29sIHF1ZXJ5X2FjdGl2YXRh YmxlIChHdGsuVGV4dEl0ZXIgaXRlciwgQ2Fpcm8uUmVjdGFuZ2xlSW50IGFyZWEsIEdkay5FdmVu dCBldmVudCk7Ci0tCQlbSGFzRW1pdHRlcl0KLS0JCXB1YmxpYyB2aXJ0dWFsIHNpZ25hbCB2b2lk IHF1ZXJ5X2RhdGEgKEd0ay5UZXh0SXRlciBzdGFydCwgR3RrLlRleHRJdGVyIGVuZCwgR3RrLlNv dXJjZUd1dHRlclJlbmRlcmVyU3RhdGUgc3RhdGUpOwotLQkJW0hhc0VtaXR0ZXJdCi0tCQlwdWJs aWMgdmlydHVhbCBzaWduYWwgYm9vbCBxdWVyeV90b29sdGlwIChHdGsuVGV4dEl0ZXIgaXRlciwg Q2Fpcm8uUmVjdGFuZ2xlSW50IGFyZWEsIGludCB4LCBpbnQgeSwgR3RrLlRvb2x0aXAgdG9vbHRp cCk7Ci0tCQlbSGFzRW1pdHRlcl0KLS0JCXB1YmxpYyB2aXJ0dWFsIHNpZ25hbCB2b2lkIHF1ZXVl X2RyYXcgKCk7Ci0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImd0a3NvdXJjZXZp ZXcvZ3Rrc291cmNlLmgiLCB0eXBlX2lkID0gImd0a19zb3VyY2VfZ3V0dGVyX3JlbmRlcmVyX3Bp eGJ1Zl9nZXRfdHlwZSAoKSIpXQotLQlbR0lSIChuYW1lID0gIkd1dHRlclJlbmRlcmVyUGl4YnVm IildCi0tCXB1YmxpYyBjbGFzcyBTb3VyY2VHdXR0ZXJSZW5kZXJlclBpeGJ1ZiA6IEd0ay5Tb3Vy Y2VHdXR0ZXJSZW5kZXJlciB7Ci0tCQlbQ0NvZGUgKGhhc19jb25zdHJ1Y3RfZnVuY3Rpb24gPSBm YWxzZSwgdHlwZSA9ICJHdGtTb3VyY2VHdXR0ZXJSZW5kZXJlcioiKV0KLS0JCXB1YmxpYyBTb3Vy Y2VHdXR0ZXJSZW5kZXJlclBpeGJ1ZiAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIEdMaWIuSWNvbiBn ZXRfZ2ljb24gKCk7Ci0tCQlwdWJsaWMgdW5vd25lZCBzdHJpbmcgZ2V0X2ljb25fbmFtZSAoKTsK LS0JCXB1YmxpYyB1bm93bmVkIEdkay5QaXhidWYgZ2V0X3BpeGJ1ZiAoKTsKLS0JCVtWZXJzaW9u ICggZGVwcmVjYXRlZCA9IHRydWUsIGRlcHJlY2F0ZWRfc2luY2UgPSAiMy4xMCIgKV0KLS0JCXB1 YmxpYyB1bm93bmVkIHN0cmluZyBnZXRfc3RvY2tfaWQgKCk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRf Z2ljb24gKEdMaWIuSWNvbj8gaWNvbik7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfaWNvbl9uYW1lIChz dHJpbmc/IGljb25fbmFtZSk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfcGl4YnVmIChHZGsuUGl4YnVm PyBwaXhidWYpOwotLQkJW1ZlcnNpb24gKCBkZXByZWNhdGVkID0gdHJ1ZSwgZGVwcmVjYXRlZF9z aW5jZSA9ICIzLjEwIiApXQotLQkJcHVibGljIHZvaWQgc2V0X3N0b2NrX2lkIChzdHJpbmc/IHN0 b2NrX2lkKTsKLS0JCXB1YmxpYyBHTGliLkljb24gZ2ljb24geyBnZXQ7IHNldDsgfQotLQkJcHVi bGljIHN0cmluZyBpY29uX25hbWUgeyBnZXQ7IHNldDsgfQotLQkJcHVibGljIEdkay5QaXhidWYg cGl4YnVmIHsgZ2V0OyBzZXQ7IH0KLS0JCVtWZXJzaW9uICggZGVwcmVjYXRlZCA9IHRydWUsIGRl cHJlY2F0ZWRfc2luY2UgPSAiMy4xMCIgKV0KLS0JCXB1YmxpYyBzdHJpbmcgc3RvY2tfaWQgeyBn ZXQ7IHNldDsgfQotLQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJndGtzb3VyY2V2 aWV3L2d0a3NvdXJjZS5oIiwgdHlwZV9pZCA9ICJndGtfc291cmNlX2d1dHRlcl9yZW5kZXJlcl90 ZXh0X2dldF90eXBlICgpIildCi0tCVtHSVIgKG5hbWUgPSAiR3V0dGVyUmVuZGVyZXJUZXh0Iild Ci0tCXB1YmxpYyBjbGFzcyBTb3VyY2VHdXR0ZXJSZW5kZXJlclRleHQgOiBHdGsuU291cmNlR3V0 dGVyUmVuZGVyZXIgewotLQkJW0NDb2RlIChoYXNfY29uc3RydWN0X2Z1bmN0aW9uID0gZmFsc2Us IHR5cGUgPSAiR3RrU291cmNlR3V0dGVyUmVuZGVyZXIqIildCi0tCQlwdWJsaWMgU291cmNlR3V0 dGVyUmVuZGVyZXJUZXh0ICgpOwotLQkJcHVibGljIHZvaWQgbWVhc3VyZSAoc3RyaW5nIHRleHQs IG91dCBpbnQgd2lkdGgsIG91dCBpbnQgaGVpZ2h0KTsKLS0JCXB1YmxpYyB2b2lkIG1lYXN1cmVf bWFya3VwIChzdHJpbmcgbWFya3VwLCBvdXQgaW50IHdpZHRoLCBvdXQgaW50IGhlaWdodCk7Ci0t CQlwdWJsaWMgdm9pZCBzZXRfbWFya3VwIChzdHJpbmcgbWFya3VwLCBpbnQgbGVuZ3RoKTsKLS0J CXB1YmxpYyB2b2lkIHNldF90ZXh0IChzdHJpbmcgdGV4dCwgaW50IGxlbmd0aCk7Ci0tCQlbTm9B Y2Nlc3Nvck1ldGhvZF0KLS0JCXB1YmxpYyBzdHJpbmcgbWFya3VwIHsgb3duZWQgZ2V0OyBzZXQg Y29uc3RydWN0OyB9Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1YmxpYyBzdHJpbmcgdGV4 dCB7IG93bmVkIGdldDsgc2V0IGNvbnN0cnVjdDsgfQotLQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9m aWxlbmFtZSA9ICJndGtzb3VyY2V2aWV3L2d0a3NvdXJjZS5oIiwgdHlwZV9pZCA9ICJndGtfc291 cmNlX2xhbmd1YWdlX2dldF90eXBlICgpIildCi0tCVtHSVIgKG5hbWUgPSAiTGFuZ3VhZ2UiKV0K LS0JcHVibGljIGNsYXNzIFNvdXJjZUxhbmd1YWdlIDogR0xpYi5PYmplY3QgewotLQkJW0NDb2Rl IChoYXNfY29uc3RydWN0X2Z1bmN0aW9uID0gZmFsc2UpXQotLQkJcHJvdGVjdGVkIFNvdXJjZUxh bmd1YWdlICgpOwotLQkJW0NDb2RlIChhcnJheV9sZW5ndGggPSBmYWxzZSwgYXJyYXlfbnVsbF90 ZXJtaW5hdGVkID0gdHJ1ZSldCi0tCQlwdWJsaWMgc3RyaW5nW10/IGdldF9nbG9icyAoKTsKLS0J CXB1YmxpYyBib29sIGdldF9oaWRkZW4gKCk7Ci0tCQlwdWJsaWMgdW5vd25lZCBzdHJpbmcgZ2V0 X2lkICgpOwotLQkJcHVibGljIHVub3duZWQgc3RyaW5nPyBnZXRfbWV0YWRhdGEgKHN0cmluZyBu YW1lKTsKLS0JCVtDQ29kZSAoYXJyYXlfbGVuZ3RoID0gZmFsc2UsIGFycmF5X251bGxfdGVybWlu YXRlZCA9IHRydWUpXQotLQkJcHVibGljIHN0cmluZ1tdPyBnZXRfbWltZV90eXBlcyAoKTsKLS0J CXB1YmxpYyB1bm93bmVkIHN0cmluZyBnZXRfbmFtZSAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIHN0 cmluZyBnZXRfc2VjdGlvbiAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIHN0cmluZz8gZ2V0X3N0eWxl X2ZhbGxiYWNrIChzdHJpbmcgc3R5bGVfaWQpOwotLQkJW0NDb2RlIChhcnJheV9sZW5ndGggPSBm YWxzZSwgYXJyYXlfbnVsbF90ZXJtaW5hdGVkID0gdHJ1ZSldCi0tCQlwdWJsaWMgc3RyaW5nW10/ IGdldF9zdHlsZV9pZHMgKCk7Ci0tCQlwdWJsaWMgdW5vd25lZCBzdHJpbmc/IGdldF9zdHlsZV9u YW1lIChzdHJpbmcgc3R5bGVfaWQpOwotLQkJcHVibGljIGJvb2wgaGlkZGVuIHsgZ2V0OyB9Ci0t CQlwdWJsaWMgc3RyaW5nIGlkIHsgZ2V0OyB9Ci0tCQlwdWJsaWMgc3RyaW5nIG5hbWUgeyBnZXQ7 IH0KLS0JCXB1YmxpYyBzdHJpbmcgc2VjdGlvbiB7IGdldDsgfQotLQl9Ci0tCVtDQ29kZSAoY2hl YWRlcl9maWxlbmFtZSA9ICJndGtzb3VyY2V2aWV3L2d0a3NvdXJjZS5oIiwgdHlwZV9pZCA9ICJn dGtfc291cmNlX2xhbmd1YWdlX21hbmFnZXJfZ2V0X3R5cGUgKCkiKV0KLS0JW0dJUiAobmFtZSA9 ICJMYW5ndWFnZU1hbmFnZXIiKV0KLS0JcHVibGljIGNsYXNzIFNvdXJjZUxhbmd1YWdlTWFuYWdl ciA6IEdMaWIuT2JqZWN0IHsKLS0JCVtDQ29kZSAoaGFzX2NvbnN0cnVjdF9mdW5jdGlvbiA9IGZh bHNlKV0KLS0JCXB1YmxpYyBTb3VyY2VMYW5ndWFnZU1hbmFnZXIgKCk7Ci0tCQlwdWJsaWMgc3Rh dGljIHVub3duZWQgR3RrLlNvdXJjZUxhbmd1YWdlTWFuYWdlciBnZXRfZGVmYXVsdCAoKTsKLS0J CXB1YmxpYyB1bm93bmVkIEd0ay5Tb3VyY2VMYW5ndWFnZT8gZ2V0X2xhbmd1YWdlIChzdHJpbmcg aWQpOwotLQkJW0NDb2RlIChhcnJheV9sZW5ndGggPSBmYWxzZSwgYXJyYXlfbnVsbF90ZXJtaW5h dGVkID0gdHJ1ZSldCi0tCQlwdWJsaWMgdW5vd25lZCBzdHJpbmdbXT8gZ2V0X2xhbmd1YWdlX2lk cyAoKTsKLS0JCVtDQ29kZSAoYXJyYXlfbGVuZ3RoID0gZmFsc2UsIGFycmF5X251bGxfdGVybWlu YXRlZCA9IHRydWUpXQotLQkJcHVibGljIHVub3duZWQgc3RyaW5nW10gZ2V0X3NlYXJjaF9wYXRo ICgpOwotLQkJcHVibGljIHVub3duZWQgR3RrLlNvdXJjZUxhbmd1YWdlPyBndWVzc19sYW5ndWFn ZSAoc3RyaW5nPyBmaWxlbmFtZSwgc3RyaW5nPyBjb250ZW50X3R5cGUpOwotLQkJcHVibGljIHZv aWQgc2V0X3NlYXJjaF9wYXRoIChbQ0NvZGUgKGFycmF5X2xlbmd0aCA9IGZhbHNlLCBhcnJheV9u dWxsX3Rlcm1pbmF0ZWQgPSB0cnVlKV0gc3RyaW5nW10/IGRpcnMpOwotLQkJW0NDb2RlIChhcnJh eV9sZW5ndGggPSBmYWxzZSwgYXJyYXlfbnVsbF90ZXJtaW5hdGVkID0gdHJ1ZSldCi0tCQlwdWJs aWMgc3RyaW5nW10gbGFuZ3VhZ2VfaWRzIHsgZ2V0OyB9Ci0tCQlbQ0NvZGUgKGFycmF5X2xlbmd0 aCA9IGZhbHNlLCBhcnJheV9udWxsX3Rlcm1pbmF0ZWQgPSB0cnVlKV0KLS0JCXB1YmxpYyBzdHJp bmdbXSBzZWFyY2hfcGF0aCB7IGdldDsgc2V0OyB9Ci0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2Zp bGVuYW1lID0gImd0a3NvdXJjZXZpZXcvZ3Rrc291cmNlLmgiLCB0eXBlX2lkID0gImd0a19zb3Vy Y2VfbWFwX2dldF90eXBlICgpIildCi0tCVtHSVIgKG5hbWUgPSAiTWFwIildCi0tCXB1YmxpYyBj bGFzcyBTb3VyY2VNYXAgOiBHdGsuU291cmNlVmlldywgQXRrLkltcGxlbWVudG9yLCBHdGsuQnVp bGRhYmxlLCBHdGsuU2Nyb2xsYWJsZSB7Ci0tCQlbQ0NvZGUgKGhhc19jb25zdHJ1Y3RfZnVuY3Rp b24gPSBmYWxzZSwgdHlwZSA9ICJHdGtXaWRnZXQqIildCi0tCQlwdWJsaWMgU291cmNlTWFwICgp OwotLQkJcHVibGljIHVub3duZWQgR3RrLlNvdXJjZVZpZXc/IGdldF92aWV3ICgpOwotLQkJcHVi bGljIHZvaWQgc2V0X3ZpZXcgKEd0ay5Tb3VyY2VWaWV3IHZpZXcpOwotLQkJW05vQWNjZXNzb3JN ZXRob2RdCi0tCQlwdWJsaWMgUGFuZ28uRm9udERlc2NyaXB0aW9uIGZvbnRfZGVzYyB7IG93bmVk IGdldDsgc2V0OyB9Ci0tCQlwdWJsaWMgR3RrLlNvdXJjZVZpZXcgdmlldyB7IGdldDsgc2V0OyB9 Ci0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImd0a3NvdXJjZXZpZXcvZ3Rrc291 cmNlLmgiLCB0eXBlX2lkID0gImd0a19zb3VyY2VfbWFya19nZXRfdHlwZSAoKSIpXQotLQlbR0lS IChuYW1lID0gIk1hcmsiKV0KLS0JcHVibGljIGNsYXNzIFNvdXJjZU1hcmsgOiBHdGsuVGV4dE1h cmsgewotLQkJW0NDb2RlIChoYXNfY29uc3RydWN0X2Z1bmN0aW9uID0gZmFsc2UpXQotLQkJcHVi bGljIFNvdXJjZU1hcmsgKHN0cmluZyBuYW1lLCBzdHJpbmcgY2F0ZWdvcnkpOwotLQkJcHVibGlj IHVub3duZWQgc3RyaW5nIGdldF9jYXRlZ29yeSAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIEd0ay5T b3VyY2VNYXJrPyBuZXh0IChzdHJpbmc/IGNhdGVnb3J5KTsKLS0JCXB1YmxpYyB1bm93bmVkIEd0 ay5Tb3VyY2VNYXJrPyBwcmV2IChzdHJpbmcgY2F0ZWdvcnkpOwotLQkJcHVibGljIHN0cmluZyBj YXRlZ29yeSB7IGdldDsgY29uc3RydWN0OyB9Ci0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVu YW1lID0gImd0a3NvdXJjZXZpZXcvZ3Rrc291cmNlLmgiLCB0eXBlX2lkID0gImd0a19zb3VyY2Vf bWFya19hdHRyaWJ1dGVzX2dldF90eXBlICgpIildCi0tCVtHSVIgKG5hbWUgPSAiTWFya0F0dHJp YnV0ZXMiKV0KLS0JcHVibGljIGNsYXNzIFNvdXJjZU1hcmtBdHRyaWJ1dGVzIDogR0xpYi5PYmpl Y3QgewotLQkJW0NDb2RlIChoYXNfY29uc3RydWN0X2Z1bmN0aW9uID0gZmFsc2UpXQotLQkJcHVi bGljIFNvdXJjZU1hcmtBdHRyaWJ1dGVzICgpOwotLQkJcHVibGljIGJvb2wgZ2V0X2JhY2tncm91 bmQgKG91dCBHZGsuUkdCQSBiYWNrZ3JvdW5kKTsKLS0JCXB1YmxpYyB1bm93bmVkIEdMaWIuSWNv biBnZXRfZ2ljb24gKCk7Ci0tCQlwdWJsaWMgdW5vd25lZCBzdHJpbmcgZ2V0X2ljb25fbmFtZSAo KTsKLS0JCXB1YmxpYyB1bm93bmVkIEdkay5QaXhidWYgZ2V0X3BpeGJ1ZiAoKTsKLS0JCVtWZXJz aW9uICggZGVwcmVjYXRlZCA9IHRydWUsIGRlcHJlY2F0ZWRfc2luY2UgPSAiMy4xMCIgKV0KLS0J CXB1YmxpYyB1bm93bmVkIHN0cmluZyBnZXRfc3RvY2tfaWQgKCk7Ci0tCQlwdWJsaWMgc3RyaW5n IGdldF90b29sdGlwX21hcmt1cCAoR3RrLlNvdXJjZU1hcmsgbWFyayk7Ci0tCQlwdWJsaWMgc3Ry aW5nIGdldF90b29sdGlwX3RleHQgKEd0ay5Tb3VyY2VNYXJrIG1hcmspOwotLQkJcHVibGljIHVu b3duZWQgR2RrLlBpeGJ1ZiByZW5kZXJfaWNvbiAoR3RrLldpZGdldCB3aWRnZXQsIGludCBzaXpl KTsKLS0JCXB1YmxpYyB2b2lkIHNldF9iYWNrZ3JvdW5kIChHZGsuUkdCQSBiYWNrZ3JvdW5kKTsK LS0JCXB1YmxpYyB2b2lkIHNldF9naWNvbiAoR0xpYi5JY29uIGdpY29uKTsKLS0JCXB1YmxpYyB2 b2lkIHNldF9pY29uX25hbWUgKHN0cmluZyBpY29uX25hbWUpOwotLQkJcHVibGljIHZvaWQgc2V0 X3BpeGJ1ZiAoR2RrLlBpeGJ1ZiBwaXhidWYpOwotLQkJW1ZlcnNpb24gKCBkZXByZWNhdGVkID0g dHJ1ZSwgZGVwcmVjYXRlZF9zaW5jZSA9ICIzLjEwIiApXQotLQkJcHVibGljIHZvaWQgc2V0X3N0 b2NrX2lkIChzdHJpbmcgc3RvY2tfaWQpOwotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJs aWMgR2RrLlJHQkEgYmFja2dyb3VuZCB7IGdldDsgc2V0OyB9Ci0tCQlwdWJsaWMgR0xpYi5JY29u IGdpY29uIHsgZ2V0OyBzZXQ7IH0KLS0JCXB1YmxpYyBzdHJpbmcgaWNvbl9uYW1lIHsgZ2V0OyBz ZXQ7IH0KLS0JCXB1YmxpYyBHZGsuUGl4YnVmIHBpeGJ1ZiB7IGdldDsgc2V0OyB9Ci0tCQlbVmVy c2lvbiAoIGRlcHJlY2F0ZWQgPSB0cnVlLCBkZXByZWNhdGVkX3NpbmNlID0gIjMuMTAiICldCi0t CQlwdWJsaWMgc3RyaW5nIHN0b2NrX2lkIHsgZ2V0OyBzZXQ7IH0KLS0JCXB1YmxpYyBzaWduYWwg c3RyaW5nIHF1ZXJ5X3Rvb2x0aXBfbWFya3VwIChHdGsuU291cmNlTWFyayBtYXJrKTsKLS0JCXB1 YmxpYyBzaWduYWwgc3RyaW5nIHF1ZXJ5X3Rvb2x0aXBfdGV4dCAoR3RrLlNvdXJjZU1hcmsgbWFy ayk7Ci0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImd0a3NvdXJjZXZpZXcvZ3Rr c291cmNlLmgiLCB0eXBlX2lkID0gImd0a19zb3VyY2VfcHJpbnRfY29tcG9zaXRvcl9nZXRfdHlw ZSAoKSIpXQotLQlbR0lSIChuYW1lID0gIlByaW50Q29tcG9zaXRvciIpXQotLQlwdWJsaWMgY2xh c3MgU291cmNlUHJpbnRDb21wb3NpdG9yIDogR0xpYi5PYmplY3QgewotLQkJW0NDb2RlIChoYXNf Y29uc3RydWN0X2Z1bmN0aW9uID0gZmFsc2UpXQotLQkJcHVibGljIFNvdXJjZVByaW50Q29tcG9z aXRvciAoR3RrLlNvdXJjZUJ1ZmZlciBidWZmZXIpOwotLQkJcHVibGljIHZvaWQgZHJhd19wYWdl IChHdGsuUHJpbnRDb250ZXh0IGNvbnRleHQsIGludCBwYWdlX25yKTsKLS0JCVtDQ29kZSAoaGFz X2NvbnN0cnVjdF9mdW5jdGlvbiA9IGZhbHNlKV0KLS0JCXB1YmxpYyBTb3VyY2VQcmludENvbXBv c2l0b3IuZnJvbV92aWV3IChHdGsuU291cmNlVmlldyB2aWV3KTsKLS0JCXB1YmxpYyBzdHJpbmcg Z2V0X2JvZHlfZm9udF9uYW1lICgpOwotLQkJcHVibGljIGRvdWJsZSBnZXRfYm90dG9tX21hcmdp biAoR3RrLlVuaXQgdW5pdCk7Ci0tCQlwdWJsaWMgdW5vd25lZCBHdGsuU291cmNlQnVmZmVyIGdl dF9idWZmZXIgKCk7Ci0tCQlwdWJsaWMgc3RyaW5nIGdldF9mb290ZXJfZm9udF9uYW1lICgpOwot LQkJcHVibGljIHN0cmluZyBnZXRfaGVhZGVyX2ZvbnRfbmFtZSAoKTsKLS0JCXB1YmxpYyBib29s IGdldF9oaWdobGlnaHRfc3ludGF4ICgpOwotLQkJcHVibGljIGRvdWJsZSBnZXRfbGVmdF9tYXJn aW4gKEd0ay5Vbml0IHVuaXQpOwotLQkJcHVibGljIHN0cmluZyBnZXRfbGluZV9udW1iZXJzX2Zv bnRfbmFtZSAoKTsKLS0JCXB1YmxpYyBpbnQgZ2V0X25fcGFnZXMgKCk7Ci0tCQlwdWJsaWMgZG91 YmxlIGdldF9wYWdpbmF0aW9uX3Byb2dyZXNzICgpOwotLQkJcHVibGljIGJvb2wgZ2V0X3ByaW50 X2Zvb3RlciAoKTsKLS0JCXB1YmxpYyBib29sIGdldF9wcmludF9oZWFkZXIgKCk7Ci0tCQlwdWJs aWMgdWludCBnZXRfcHJpbnRfbGluZV9udW1iZXJzICgpOwotLQkJcHVibGljIGRvdWJsZSBnZXRf cmlnaHRfbWFyZ2luIChHdGsuVW5pdCB1bml0KTsKLS0JCXB1YmxpYyB1aW50IGdldF90YWJfd2lk dGggKCk7Ci0tCQlwdWJsaWMgZG91YmxlIGdldF90b3BfbWFyZ2luIChHdGsuVW5pdCB1bml0KTsK LS0JCXB1YmxpYyBHdGsuV3JhcE1vZGUgZ2V0X3dyYXBfbW9kZSAoKTsKLS0JCXB1YmxpYyBib29s IHBhZ2luYXRlIChHdGsuUHJpbnRDb250ZXh0IGNvbnRleHQpOwotLQkJcHVibGljIHZvaWQgc2V0 X2JvZHlfZm9udF9uYW1lIChzdHJpbmcgZm9udF9uYW1lKTsKLS0JCXB1YmxpYyB2b2lkIHNldF9i b3R0b21fbWFyZ2luIChkb3VibGUgbWFyZ2luLCBHdGsuVW5pdCB1bml0KTsKLS0JCXB1YmxpYyB2 b2lkIHNldF9mb290ZXJfZm9udF9uYW1lIChzdHJpbmc/IGZvbnRfbmFtZSk7Ci0tCQlwdWJsaWMg dm9pZCBzZXRfZm9vdGVyX2Zvcm1hdCAoYm9vbCBzZXBhcmF0b3IsIHN0cmluZz8gbGVmdCwgc3Ry aW5nPyBjZW50ZXIsIHN0cmluZz8gcmlnaHQpOwotLQkJcHVibGljIHZvaWQgc2V0X2hlYWRlcl9m b250X25hbWUgKHN0cmluZz8gZm9udF9uYW1lKTsKLS0JCXB1YmxpYyB2b2lkIHNldF9oZWFkZXJf Zm9ybWF0IChib29sIHNlcGFyYXRvciwgc3RyaW5nPyBsZWZ0LCBzdHJpbmc/IGNlbnRlciwgc3Ry aW5nPyByaWdodCk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfaGlnaGxpZ2h0X3N5bnRheCAoYm9vbCBo aWdobGlnaHQpOwotLQkJcHVibGljIHZvaWQgc2V0X2xlZnRfbWFyZ2luIChkb3VibGUgbWFyZ2lu LCBHdGsuVW5pdCB1bml0KTsKLS0JCXB1YmxpYyB2b2lkIHNldF9saW5lX251bWJlcnNfZm9udF9u YW1lIChzdHJpbmc/IGZvbnRfbmFtZSk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfcHJpbnRfZm9vdGVy IChib29sIHByaW50KTsKLS0JCXB1YmxpYyB2b2lkIHNldF9wcmludF9oZWFkZXIgKGJvb2wgcHJp bnQpOwotLQkJcHVibGljIHZvaWQgc2V0X3ByaW50X2xpbmVfbnVtYmVycyAodWludCBpbnRlcnZh bCk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfcmlnaHRfbWFyZ2luIChkb3VibGUgbWFyZ2luLCBHdGsu VW5pdCB1bml0KTsKLS0JCXB1YmxpYyB2b2lkIHNldF90YWJfd2lkdGggKHVpbnQgd2lkdGgpOwot LQkJcHVibGljIHZvaWQgc2V0X3RvcF9tYXJnaW4gKGRvdWJsZSBtYXJnaW4sIEd0ay5Vbml0IHVu aXQpOwotLQkJcHVibGljIHZvaWQgc2V0X3dyYXBfbW9kZSAoR3RrLldyYXBNb2RlIHdyYXBfbW9k ZSk7Ci0tCQlwdWJsaWMgc3RyaW5nIGJvZHlfZm9udF9uYW1lIHsgb3duZWQgZ2V0OyBzZXQ7IH0K LS0JCXB1YmxpYyBHdGsuU291cmNlQnVmZmVyIGJ1ZmZlciB7IGdldDsgY29uc3RydWN0OyB9Ci0t CQlwdWJsaWMgc3RyaW5nIGZvb3Rlcl9mb250X25hbWUgeyBvd25lZCBnZXQ7IHNldDsgfQotLQkJ cHVibGljIHN0cmluZyBoZWFkZXJfZm9udF9uYW1lIHsgb3duZWQgZ2V0OyBzZXQ7IH0KLS0JCXB1 YmxpYyBib29sIGhpZ2hsaWdodF9zeW50YXggeyBnZXQ7IHNldDsgfQotLQkJcHVibGljIHN0cmlu ZyBsaW5lX251bWJlcnNfZm9udF9uYW1lIHsgb3duZWQgZ2V0OyBzZXQ7IH0KLS0JCXB1YmxpYyBp bnQgbl9wYWdlcyB7IGdldDsgfQotLQkJcHVibGljIGJvb2wgcHJpbnRfZm9vdGVyIHsgZ2V0OyBz ZXQ7IH0KLS0JCXB1YmxpYyBib29sIHByaW50X2hlYWRlciB7IGdldDsgc2V0OyB9Ci0tCQlwdWJs aWMgdWludCBwcmludF9saW5lX251bWJlcnMgeyBnZXQ7IHNldDsgfQotLQkJcHVibGljIHVpbnQg dGFiX3dpZHRoIHsgZ2V0OyBzZXQ7IH0KLS0JCXB1YmxpYyBHdGsuV3JhcE1vZGUgd3JhcF9tb2Rl IHsgZ2V0OyBzZXQ7IH0KLS0JfQotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAiZ3Rrc291 cmNldmlldy9ndGtzb3VyY2UuaCIsIHR5cGVfaWQgPSAiZ3RrX3NvdXJjZV9zZWFyY2hfY29udGV4 dF9nZXRfdHlwZSAoKSIpXQotLQlbR0lSIChuYW1lID0gIlNlYXJjaENvbnRleHQiKV0KLS0JcHVi bGljIGNsYXNzIFNvdXJjZVNlYXJjaENvbnRleHQgOiBHTGliLk9iamVjdCB7Ci0tCQlbQ0NvZGUg KGhhc19jb25zdHJ1Y3RfZnVuY3Rpb24gPSBmYWxzZSldCi0tCQlwdWJsaWMgU291cmNlU2VhcmNo Q29udGV4dCAoR3RrLlNvdXJjZUJ1ZmZlciBidWZmZXIsIEd0ay5Tb3VyY2VTZWFyY2hTZXR0aW5n cz8gc2V0dGluZ3MpOwotLQkJcHVibGljIGJvb2wgYmFja3dhcmQgKEd0ay5UZXh0SXRlciBpdGVy LCBvdXQgR3RrLlRleHRJdGVyIG1hdGNoX3N0YXJ0LCBvdXQgR3RrLlRleHRJdGVyIG1hdGNoX2Vu ZCk7Ci0tCQlwdWJsaWMgYXN5bmMgYm9vbCBiYWNrd2FyZF9hc3luYyAoR3RrLlRleHRJdGVyIGl0 ZXIsIEdMaWIuQ2FuY2VsbGFibGU/IGNhbmNlbGxhYmxlLCBvdXQgR3RrLlRleHRJdGVyIG1hdGNo X3N0YXJ0LCBvdXQgR3RrLlRleHRJdGVyIG1hdGNoX2VuZCkgdGhyb3dzIEdMaWIuRXJyb3I7Ci0t CQlwdWJsaWMgYm9vbCBmb3J3YXJkIChHdGsuVGV4dEl0ZXIgaXRlciwgb3V0IEd0ay5UZXh0SXRl ciBtYXRjaF9zdGFydCwgb3V0IEd0ay5UZXh0SXRlciBtYXRjaF9lbmQpOwotLQkJcHVibGljIGFz eW5jIGJvb2wgZm9yd2FyZF9hc3luYyAoR3RrLlRleHRJdGVyIGl0ZXIsIEdMaWIuQ2FuY2VsbGFi bGU/IGNhbmNlbGxhYmxlLCBvdXQgR3RrLlRleHRJdGVyIG1hdGNoX3N0YXJ0LCBvdXQgR3RrLlRl eHRJdGVyIG1hdGNoX2VuZCkgdGhyb3dzIEdMaWIuRXJyb3I7Ci0tCQlwdWJsaWMgdW5vd25lZCBH dGsuU291cmNlQnVmZmVyIGdldF9idWZmZXIgKCk7Ci0tCQlwdWJsaWMgYm9vbCBnZXRfaGlnaGxp Z2h0ICgpOwotLQkJcHVibGljIHVub3duZWQgR3RrLlNvdXJjZVN0eWxlIGdldF9tYXRjaF9zdHls ZSAoKTsKLS0JCXB1YmxpYyBpbnQgZ2V0X29jY3VycmVuY2VfcG9zaXRpb24gKEd0ay5UZXh0SXRl ciBtYXRjaF9zdGFydCwgR3RrLlRleHRJdGVyIG1hdGNoX2VuZCk7Ci0tCQlwdWJsaWMgaW50IGdl dF9vY2N1cnJlbmNlc19jb3VudCAoKTsKLS0JCXB1YmxpYyBHTGliLkVycm9yPyBnZXRfcmVnZXhf ZXJyb3IgKCk7Ci0tCQlwdWJsaWMgdW5vd25lZCBHdGsuU291cmNlU2VhcmNoU2V0dGluZ3MgZ2V0 X3NldHRpbmdzICgpOwotLQkJcHVibGljIGJvb2wgcmVwbGFjZSAoR3RrLlRleHRJdGVyIG1hdGNo X3N0YXJ0LCBHdGsuVGV4dEl0ZXIgbWF0Y2hfZW5kLCBzdHJpbmcgcmVwbGFjZSwgaW50IHJlcGxh Y2VfbGVuZ3RoKSB0aHJvd3MgR0xpYi5FcnJvcjsKLS0JCXB1YmxpYyB1aW50IHJlcGxhY2VfYWxs IChzdHJpbmcgcmVwbGFjZSwgaW50IHJlcGxhY2VfbGVuZ3RoKSB0aHJvd3MgR0xpYi5FcnJvcjsK LS0JCXB1YmxpYyB2b2lkIHNldF9oaWdobGlnaHQgKGJvb2wgaGlnaGxpZ2h0KTsKLS0JCXB1Ymxp YyB2b2lkIHNldF9tYXRjaF9zdHlsZSAoR3RrLlNvdXJjZVN0eWxlPyBtYXRjaF9zdHlsZSk7Ci0t CQlwdWJsaWMgdm9pZCBzZXRfc2V0dGluZ3MgKEd0ay5Tb3VyY2VTZWFyY2hTZXR0aW5ncz8gc2V0 dGluZ3MpOwotLQkJcHVibGljIEd0ay5Tb3VyY2VCdWZmZXIgYnVmZmVyIHsgZ2V0OyBjb25zdHJ1 Y3Q7IH0KLS0JCXB1YmxpYyBib29sIGhpZ2hsaWdodCB7IGdldDsgc2V0IGNvbnN0cnVjdDsgfQot LQkJcHVibGljIEd0ay5Tb3VyY2VTdHlsZSBtYXRjaF9zdHlsZSB7IGdldDsgc2V0IGNvbnN0cnVj dDsgfQotLQkJcHVibGljIGludCBvY2N1cnJlbmNlc19jb3VudCB7IGdldDsgfQotLQkJcHVibGlj IEdMaWIuRXJyb3I/IHJlZ2V4X2Vycm9yIHsgb3duZWQgZ2V0OyB9Ci0tCQlwdWJsaWMgR3RrLlNv dXJjZVNlYXJjaFNldHRpbmdzIHNldHRpbmdzIHsgZ2V0OyBzZXQgY29uc3RydWN0OyB9Ci0tCX0K LS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImd0a3NvdXJjZXZpZXcvZ3Rrc291cmNlLmgi LCB0eXBlX2lkID0gImd0a19zb3VyY2Vfc2VhcmNoX3NldHRpbmdzX2dldF90eXBlICgpIildCi0t CVtHSVIgKG5hbWUgPSAiU2VhcmNoU2V0dGluZ3MiKV0KLS0JcHVibGljIGNsYXNzIFNvdXJjZVNl YXJjaFNldHRpbmdzIDogR0xpYi5PYmplY3QgewotLQkJW0NDb2RlIChoYXNfY29uc3RydWN0X2Z1 bmN0aW9uID0gZmFsc2UpXQotLQkJcHVibGljIFNvdXJjZVNlYXJjaFNldHRpbmdzICgpOwotLQkJ cHVibGljIGJvb2wgZ2V0X2F0X3dvcmRfYm91bmRhcmllcyAoKTsKLS0JCXB1YmxpYyBib29sIGdl dF9jYXNlX3NlbnNpdGl2ZSAoKTsKLS0JCXB1YmxpYyBib29sIGdldF9yZWdleF9lbmFibGVkICgp OwotLQkJcHVibGljIHVub3duZWQgc3RyaW5nPyBnZXRfc2VhcmNoX3RleHQgKCk7Ci0tCQlwdWJs aWMgYm9vbCBnZXRfd3JhcF9hcm91bmQgKCk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfYXRfd29yZF9i b3VuZGFyaWVzIChib29sIGF0X3dvcmRfYm91bmRhcmllcyk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRf Y2FzZV9zZW5zaXRpdmUgKGJvb2wgY2FzZV9zZW5zaXRpdmUpOwotLQkJcHVibGljIHZvaWQgc2V0 X3JlZ2V4X2VuYWJsZWQgKGJvb2wgcmVnZXhfZW5hYmxlZCk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRf c2VhcmNoX3RleHQgKHN0cmluZz8gc2VhcmNoX3RleHQpOwotLQkJcHVibGljIHZvaWQgc2V0X3dy YXBfYXJvdW5kIChib29sIHdyYXBfYXJvdW5kKTsKLS0JCXB1YmxpYyBib29sIGF0X3dvcmRfYm91 bmRhcmllcyB7IGdldDsgc2V0IGNvbnN0cnVjdDsgfQotLQkJcHVibGljIGJvb2wgY2FzZV9zZW5z aXRpdmUgeyBnZXQ7IHNldCBjb25zdHJ1Y3Q7IH0KLS0JCXB1YmxpYyBib29sIHJlZ2V4X2VuYWJs ZWQgeyBnZXQ7IHNldCBjb25zdHJ1Y3Q7IH0KLS0JCXB1YmxpYyBzdHJpbmcgc2VhcmNoX3RleHQg eyBnZXQ7IHNldCBjb25zdHJ1Y3Q7IH0KLS0JCXB1YmxpYyBib29sIHdyYXBfYXJvdW5kIHsgZ2V0 OyBzZXQgY29uc3RydWN0OyB9Ci0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImd0 a3NvdXJjZXZpZXcvZ3Rrc291cmNlLmgiLCB0eXBlX2lkID0gImd0a19zb3VyY2Vfc3R5bGVfZ2V0 X3R5cGUgKCkiKV0KLS0JW0dJUiAobmFtZSA9ICJTdHlsZSIpXQotLQlwdWJsaWMgY2xhc3MgU291 cmNlU3R5bGUgOiBHTGliLk9iamVjdCB7Ci0tCQlbQ0NvZGUgKGhhc19jb25zdHJ1Y3RfZnVuY3Rp b24gPSBmYWxzZSldCi0tCQlwcm90ZWN0ZWQgU291cmNlU3R5bGUgKCk7Ci0tCQlwdWJsaWMgR3Rr LlNvdXJjZVN0eWxlIGNvcHkgKCk7Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1YmxpYyBz dHJpbmcgYmFja2dyb3VuZCB7IG93bmVkIGdldDsgY29uc3RydWN0OyB9Ci0tCQlbTm9BY2Nlc3Nv ck1ldGhvZF0KLS0JCXB1YmxpYyBib29sIGJhY2tncm91bmRfc2V0IHsgZ2V0OyBjb25zdHJ1Y3Q7 IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIGJvb2wgYm9sZCB7IGdldDsgY29u c3RydWN0OyB9Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1YmxpYyBib29sIGJvbGRfc2V0 IHsgZ2V0OyBjb25zdHJ1Y3Q7IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIHN0 cmluZyBmb3JlZ3JvdW5kIHsgb3duZWQgZ2V0OyBjb25zdHJ1Y3Q7IH0KLS0JCVtOb0FjY2Vzc29y TWV0aG9kXQotLQkJcHVibGljIGJvb2wgZm9yZWdyb3VuZF9zZXQgeyBnZXQ7IGNvbnN0cnVjdDsg fQotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMgYm9vbCBpdGFsaWMgeyBnZXQ7IGNv bnN0cnVjdDsgfQotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMgYm9vbCBpdGFsaWNf c2V0IHsgZ2V0OyBjb25zdHJ1Y3Q7IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGlj IHN0cmluZyBsaW5lX2JhY2tncm91bmQgeyBvd25lZCBnZXQ7IGNvbnN0cnVjdDsgfQotLQkJW05v QWNjZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMgYm9vbCBsaW5lX2JhY2tncm91bmRfc2V0IHsgZ2V0 OyBjb25zdHJ1Y3Q7IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIFBhbmdvLlVu ZGVybGluZSBwYW5nb191bmRlcmxpbmUgeyBnZXQ7IGNvbnN0cnVjdDsgfQotLQkJW05vQWNjZXNz b3JNZXRob2RdCi0tCQlwdWJsaWMgc3RyaW5nIHNjYWxlIHsgb3duZWQgZ2V0OyBjb25zdHJ1Y3Q7 IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIGJvb2wgc2NhbGVfc2V0IHsgZ2V0 OyBjb25zdHJ1Y3Q7IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIGJvb2wgc3Ry aWtldGhyb3VnaCB7IGdldDsgY29uc3RydWN0OyB9Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0J CXB1YmxpYyBib29sIHN0cmlrZXRocm91Z2hfc2V0IHsgZ2V0OyBjb25zdHJ1Y3Q7IH0KLS0JCVtW ZXJzaW9uICggZGVwcmVjYXRlZCA9IHRydWUsIGRlcHJlY2F0ZWRfc2luY2UgPSAiMy4xOCIgKV0K LS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIGJvb2wgdW5kZXJsaW5lIHsgZ2V0OyBj b25zdHJ1Y3Q7IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIHN0cmluZyB1bmRl cmxpbmVfY29sb3IgeyBvd25lZCBnZXQ7IGNvbnN0cnVjdDsgfQotLQkJW05vQWNjZXNzb3JNZXRo b2RdCi0tCQlwdWJsaWMgYm9vbCB1bmRlcmxpbmVfY29sb3Jfc2V0IHsgZ2V0OyBjb25zdHJ1Y3Q7 IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIGJvb2wgdW5kZXJsaW5lX3NldCB7 IGdldDsgY29uc3RydWN0OyB9Ci0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImd0 a3NvdXJjZXZpZXcvZ3Rrc291cmNlLmgiLCB0eXBlX2lkID0gImd0a19zb3VyY2Vfc3R5bGVfc2No ZW1lX2dldF90eXBlICgpIildCi0tCVtHSVIgKG5hbWUgPSAiU3R5bGVTY2hlbWUiKV0KLS0JcHVi bGljIGNsYXNzIFNvdXJjZVN0eWxlU2NoZW1lIDogR0xpYi5PYmplY3QgewotLQkJW0NDb2RlICho YXNfY29uc3RydWN0X2Z1bmN0aW9uID0gZmFsc2UpXQotLQkJcHJvdGVjdGVkIFNvdXJjZVN0eWxl U2NoZW1lICgpOwotLQkJW0NDb2RlIChhcnJheV9sZW5ndGggPSBmYWxzZSwgYXJyYXlfbnVsbF90 ZXJtaW5hdGVkID0gdHJ1ZSldCi0tCQlwdWJsaWMgdW5vd25lZCBzdHJpbmdbXT8gZ2V0X2F1dGhv cnMgKCk7Ci0tCQlwdWJsaWMgdW5vd25lZCBzdHJpbmc/IGdldF9kZXNjcmlwdGlvbiAoKTsKLS0J CXB1YmxpYyB1bm93bmVkIHN0cmluZz8gZ2V0X2ZpbGVuYW1lICgpOwotLQkJcHVibGljIHVub3du ZWQgc3RyaW5nIGdldF9pZCAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIHN0cmluZyBnZXRfbmFtZSAo KTsKLS0JCXB1YmxpYyB1bm93bmVkIEd0ay5Tb3VyY2VTdHlsZT8gZ2V0X3N0eWxlIChzdHJpbmcg c3R5bGVfaWQpOwotLQkJcHVibGljIHN0cmluZyBkZXNjcmlwdGlvbiB7IGdldDsgfQotLQkJcHVi bGljIHN0cmluZyBmaWxlbmFtZSB7IGdldDsgfQotLQkJcHVibGljIHN0cmluZyBpZCB7IGdldDsg Y29uc3RydWN0OyB9Ci0tCQlwdWJsaWMgc3RyaW5nIG5hbWUgeyBnZXQ7IH0KLS0JfQotLQlbQ0Nv ZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAiZ3Rrc291cmNldmlldy9ndGtzb3VyY2UuaCIsIHR5cGVf aWQgPSAiZ3RrX3NvdXJjZV9zdHlsZV9zY2hlbWVfY2hvb3Nlcl9idXR0b25fZ2V0X3R5cGUgKCki KV0KLS0JW0dJUiAobmFtZSA9ICJTdHlsZVNjaGVtZUNob29zZXJCdXR0b24iKV0KLS0JcHVibGlj IGNsYXNzIFNvdXJjZVN0eWxlU2NoZW1lQ2hvb3NlckJ1dHRvbiA6IEd0ay5CdXR0b24sIEF0ay5J bXBsZW1lbnRvciwgR3RrLkFjdGlvbmFibGUsIEd0ay5BY3RpdmF0YWJsZSwgR3RrLkJ1aWxkYWJs ZSwgR3RrLlNvdXJjZVN0eWxlU2NoZW1lQ2hvb3NlciB7Ci0tCQlbQ0NvZGUgKGhhc19jb25zdHJ1 Y3RfZnVuY3Rpb24gPSBmYWxzZSwgdHlwZSA9ICJHdGtXaWRnZXQqIildCi0tCQlwdWJsaWMgU291 cmNlU3R5bGVTY2hlbWVDaG9vc2VyQnV0dG9uICgpOwotLQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9m aWxlbmFtZSA9ICJndGtzb3VyY2V2aWV3L2d0a3NvdXJjZS5oIiwgdHlwZV9pZCA9ICJndGtfc291 cmNlX3N0eWxlX3NjaGVtZV9jaG9vc2VyX3dpZGdldF9nZXRfdHlwZSAoKSIpXQotLQlbR0lSIChu YW1lID0gIlN0eWxlU2NoZW1lQ2hvb3NlcldpZGdldCIpXQotLQlwdWJsaWMgY2xhc3MgU291cmNl U3R5bGVTY2hlbWVDaG9vc2VyV2lkZ2V0IDogR3RrLkJpbiwgQXRrLkltcGxlbWVudG9yLCBHdGsu QnVpbGRhYmxlLCBHdGsuU291cmNlU3R5bGVTY2hlbWVDaG9vc2VyIHsKLS0JCVtDQ29kZSAoaGFz X2NvbnN0cnVjdF9mdW5jdGlvbiA9IGZhbHNlLCB0eXBlID0gIkd0a1dpZGdldCoiKV0KLS0JCXB1 YmxpYyBTb3VyY2VTdHlsZVNjaGVtZUNob29zZXJXaWRnZXQgKCk7Ci0tCX0KLS0JW0NDb2RlIChj aGVhZGVyX2ZpbGVuYW1lID0gImd0a3NvdXJjZXZpZXcvZ3Rrc291cmNlLmgiLCB0eXBlX2lkID0g Imd0a19zb3VyY2Vfc3R5bGVfc2NoZW1lX21hbmFnZXJfZ2V0X3R5cGUgKCkiKV0KLS0JW0dJUiAo bmFtZSA9ICJTdHlsZVNjaGVtZU1hbmFnZXIiKV0KLS0JcHVibGljIGNsYXNzIFNvdXJjZVN0eWxl U2NoZW1lTWFuYWdlciA6IEdMaWIuT2JqZWN0IHsKLS0JCVtDQ29kZSAoaGFzX2NvbnN0cnVjdF9m dW5jdGlvbiA9IGZhbHNlKV0KLS0JCXB1YmxpYyBTb3VyY2VTdHlsZVNjaGVtZU1hbmFnZXIgKCk7 Ci0tCQlwdWJsaWMgdm9pZCBhcHBlbmRfc2VhcmNoX3BhdGggKHN0cmluZyBwYXRoKTsKLS0JCXB1 YmxpYyB2b2lkIGZvcmNlX3Jlc2NhbiAoKTsKLS0JCXB1YmxpYyBzdGF0aWMgdW5vd25lZCBHdGsu U291cmNlU3R5bGVTY2hlbWVNYW5hZ2VyIGdldF9kZWZhdWx0ICgpOwotLQkJcHVibGljIHVub3du ZWQgR3RrLlNvdXJjZVN0eWxlU2NoZW1lIGdldF9zY2hlbWUgKHN0cmluZyBzY2hlbWVfaWQpOwot LQkJW0NDb2RlIChhcnJheV9sZW5ndGggPSBmYWxzZSwgYXJyYXlfbnVsbF90ZXJtaW5hdGVkID0g dHJ1ZSldCi0tCQlwdWJsaWMgdW5vd25lZCBzdHJpbmdbXT8gZ2V0X3NjaGVtZV9pZHMgKCk7Ci0t CQlbQ0NvZGUgKGFycmF5X2xlbmd0aCA9IGZhbHNlLCBhcnJheV9udWxsX3Rlcm1pbmF0ZWQgPSB0 cnVlKV0KLS0JCXB1YmxpYyB1bm93bmVkIHN0cmluZ1tdIGdldF9zZWFyY2hfcGF0aCAoKTsKLS0J CXB1YmxpYyB2b2lkIHByZXBlbmRfc2VhcmNoX3BhdGggKHN0cmluZyBwYXRoKTsKLS0JCXB1Ymxp YyB2b2lkIHNldF9zZWFyY2hfcGF0aCAoW0NDb2RlIChhcnJheV9sZW5ndGggPSBmYWxzZSwgYXJy YXlfbnVsbF90ZXJtaW5hdGVkID0gdHJ1ZSldIHN0cmluZ1tdPyBwYXRoKTsKLS0JCVtDQ29kZSAo YXJyYXlfbGVuZ3RoID0gZmFsc2UsIGFycmF5X251bGxfdGVybWluYXRlZCA9IHRydWUpXQotLQkJ cHVibGljIHN0cmluZ1tdIHNjaGVtZV9pZHMgeyBnZXQ7IH0KLS0JCVtDQ29kZSAoYXJyYXlfbGVu Z3RoID0gZmFsc2UsIGFycmF5X251bGxfdGVybWluYXRlZCA9IHRydWUpXQotLQkJcHVibGljIHN0 cmluZ1tdIHNlYXJjaF9wYXRoIHsgZ2V0OyBzZXQ7IH0KLS0JfQotLQlbQ0NvZGUgKGNoZWFkZXJf ZmlsZW5hbWUgPSAiZ3Rrc291cmNldmlldy9ndGtzb3VyY2UuaCIsIHR5cGVfaWQgPSAiZ3RrX3Nv dXJjZV92aWV3X2dldF90eXBlICgpIildCi0tCVtHSVIgKG5hbWUgPSAiVmlldyIpXQotLQlwdWJs aWMgY2xhc3MgU291cmNlVmlldyA6IEd0ay5UZXh0VmlldywgQXRrLkltcGxlbWVudG9yLCBHdGsu QnVpbGRhYmxlLCBHdGsuU2Nyb2xsYWJsZSB7Ci0tCQlbQ0NvZGUgKGhhc19jb25zdHJ1Y3RfZnVu Y3Rpb24gPSBmYWxzZSwgdHlwZSA9ICJHdGtXaWRnZXQqIildCi0tCQlwdWJsaWMgU291cmNlVmll dyAoKTsKLS0JCXB1YmxpYyBib29sIGdldF9hdXRvX2luZGVudCAoKTsKLS0JCXB1YmxpYyBHdGsu U291cmNlQmFja2dyb3VuZFBhdHRlcm5UeXBlIGdldF9iYWNrZ3JvdW5kX3BhdHRlcm4gKCk7Ci0t CQlwdWJsaWMgdW5vd25lZCBHdGsuU291cmNlQ29tcGxldGlvbiBnZXRfY29tcGxldGlvbiAoKTsK LS0JCXB1YmxpYyBHdGsuU291cmNlRHJhd1NwYWNlc0ZsYWdzIGdldF9kcmF3X3NwYWNlcyAoKTsK LS0JCXB1YmxpYyB1bm93bmVkIEd0ay5Tb3VyY2VHdXR0ZXIgZ2V0X2d1dHRlciAoR3RrLlRleHRX aW5kb3dUeXBlIHdpbmRvd190eXBlKTsKLS0JCXB1YmxpYyBib29sIGdldF9oaWdobGlnaHRfY3Vy cmVudF9saW5lICgpOwotLQkJcHVibGljIGJvb2wgZ2V0X2luZGVudF9vbl90YWIgKCk7Ci0tCQlw dWJsaWMgaW50IGdldF9pbmRlbnRfd2lkdGggKCk7Ci0tCQlwdWJsaWMgYm9vbCBnZXRfaW5zZXJ0 X3NwYWNlc19pbnN0ZWFkX29mX3RhYnMgKCk7Ci0tCQlwdWJsaWMgdW5vd25lZCBHdGsuU291cmNl TWFya0F0dHJpYnV0ZXMgZ2V0X21hcmtfYXR0cmlidXRlcyAoc3RyaW5nIGNhdGVnb3J5LCBpbnQg cHJpb3JpdHkpOwotLQkJcHVibGljIHVpbnQgZ2V0X3JpZ2h0X21hcmdpbl9wb3NpdGlvbiAoKTsK LS0JCXB1YmxpYyBib29sIGdldF9zaG93X2xpbmVfbWFya3MgKCk7Ci0tCQlwdWJsaWMgYm9vbCBn ZXRfc2hvd19saW5lX251bWJlcnMgKCk7Ci0tCQlwdWJsaWMgYm9vbCBnZXRfc2hvd19yaWdodF9t YXJnaW4gKCk7Ci0tCQlwdWJsaWMgYm9vbCBnZXRfc21hcnRfYmFja3NwYWNlICgpOwotLQkJcHVi bGljIEd0ay5Tb3VyY2VTbWFydEhvbWVFbmRUeXBlIGdldF9zbWFydF9ob21lX2VuZCAoKTsKLS0J CXB1YmxpYyB1aW50IGdldF90YWJfd2lkdGggKCk7Ci0tCQlwdWJsaWMgdWludCBnZXRfdmlzdWFs X2NvbHVtbiAoR3RrLlRleHRJdGVyIGl0ZXIpOwotLQkJcHVibGljIHZvaWQgaW5kZW50X2xpbmVz IChHdGsuVGV4dEl0ZXIgc3RhcnQsIEd0ay5UZXh0SXRlciBlbmQpOwotLQkJcHVibGljIHZvaWQg c2V0X2F1dG9faW5kZW50IChib29sIGVuYWJsZSk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfYmFja2dy b3VuZF9wYXR0ZXJuIChHdGsuU291cmNlQmFja2dyb3VuZFBhdHRlcm5UeXBlIGJhY2tncm91bmRf cGF0dGVybik7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfZHJhd19zcGFjZXMgKEd0ay5Tb3VyY2VEcmF3 U3BhY2VzRmxhZ3MgZmxhZ3MpOwotLQkJcHVibGljIHZvaWQgc2V0X2hpZ2hsaWdodF9jdXJyZW50 X2xpbmUgKGJvb2wgaGlnaGxpZ2h0KTsKLS0JCXB1YmxpYyB2b2lkIHNldF9pbmRlbnRfb25fdGFi IChib29sIGVuYWJsZSk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfaW5kZW50X3dpZHRoIChpbnQgd2lk dGgpOwotLQkJcHVibGljIHZvaWQgc2V0X2luc2VydF9zcGFjZXNfaW5zdGVhZF9vZl90YWJzIChi b29sIGVuYWJsZSk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfbWFya19hdHRyaWJ1dGVzIChzdHJpbmcg Y2F0ZWdvcnksIEd0ay5Tb3VyY2VNYXJrQXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBpbnQgcHJpb3Jp dHkpOwotLQkJcHVibGljIHZvaWQgc2V0X3JpZ2h0X21hcmdpbl9wb3NpdGlvbiAodWludCBwb3Mp OwotLQkJcHVibGljIHZvaWQgc2V0X3Nob3dfbGluZV9tYXJrcyAoYm9vbCBzaG93KTsKLS0JCXB1 YmxpYyB2b2lkIHNldF9zaG93X2xpbmVfbnVtYmVycyAoYm9vbCBzaG93KTsKLS0JCXB1YmxpYyB2 b2lkIHNldF9zaG93X3JpZ2h0X21hcmdpbiAoYm9vbCBzaG93KTsKLS0JCXB1YmxpYyB2b2lkIHNl dF9zbWFydF9iYWNrc3BhY2UgKGJvb2wgc21hcnRfYmFja3NwYWNlKTsKLS0JCXB1YmxpYyB2b2lk IHNldF9zbWFydF9ob21lX2VuZCAoR3RrLlNvdXJjZVNtYXJ0SG9tZUVuZFR5cGUgc21hcnRfaG9t ZV9lbmQpOwotLQkJcHVibGljIHZvaWQgc2V0X3RhYl93aWR0aCAodWludCB3aWR0aCk7Ci0tCQlw dWJsaWMgdm9pZCB1bmluZGVudF9saW5lcyAoR3RrLlRleHRJdGVyIHN0YXJ0LCBHdGsuVGV4dEl0 ZXIgZW5kKTsKLS0JCVtDQ29kZSAoaGFzX2NvbnN0cnVjdF9mdW5jdGlvbiA9IGZhbHNlLCB0eXBl ID0gIkd0a1dpZGdldCoiKV0KLS0JCXB1YmxpYyBTb3VyY2VWaWV3LndpdGhfYnVmZmVyIChHdGsu U291cmNlQnVmZmVyIGJ1ZmZlcik7Ci0tCQlwdWJsaWMgYm9vbCBhdXRvX2luZGVudCB7IGdldDsg c2V0OyB9Ci0tCQlwdWJsaWMgR3RrLlNvdXJjZUJhY2tncm91bmRQYXR0ZXJuVHlwZSBiYWNrZ3Jv dW5kX3BhdHRlcm4geyBnZXQ7IHNldDsgfQotLQkJcHVibGljIEd0ay5Tb3VyY2VDb21wbGV0aW9u IGNvbXBsZXRpb24geyBnZXQ7IH0KLS0JCXB1YmxpYyBHdGsuU291cmNlRHJhd1NwYWNlc0ZsYWdz IGRyYXdfc3BhY2VzIHsgZ2V0OyBzZXQ7IH0KLS0JCXB1YmxpYyBib29sIGhpZ2hsaWdodF9jdXJy ZW50X2xpbmUgeyBnZXQ7IHNldDsgfQotLQkJcHVibGljIGJvb2wgaW5kZW50X29uX3RhYiB7IGdl dDsgc2V0OyB9Ci0tCQlwdWJsaWMgaW50IGluZGVudF93aWR0aCB7IGdldDsgc2V0OyB9Ci0tCQlw dWJsaWMgYm9vbCBpbnNlcnRfc3BhY2VzX2luc3RlYWRfb2ZfdGFicyB7IGdldDsgc2V0OyB9Ci0t CQlwdWJsaWMgdWludCByaWdodF9tYXJnaW5fcG9zaXRpb24geyBnZXQ7IHNldDsgfQotLQkJcHVi bGljIGJvb2wgc2hvd19saW5lX21hcmtzIHsgZ2V0OyBzZXQ7IH0KLS0JCXB1YmxpYyBib29sIHNo b3dfbGluZV9udW1iZXJzIHsgZ2V0OyBzZXQ7IH0KLS0JCXB1YmxpYyBib29sIHNob3dfcmlnaHRf bWFyZ2luIHsgZ2V0OyBzZXQ7IH0KLS0JCXB1YmxpYyBib29sIHNtYXJ0X2JhY2tzcGFjZSB7IGdl dDsgc2V0OyB9Ci0tCQlwdWJsaWMgR3RrLlNvdXJjZVNtYXJ0SG9tZUVuZFR5cGUgc21hcnRfaG9t ZV9lbmQgeyBnZXQ7IHNldDsgfQotLQkJcHVibGljIHVpbnQgdGFiX3dpZHRoIHsgZ2V0OyBzZXQ7 IH0KLS0JCXB1YmxpYyBzaWduYWwgdm9pZCBjaGFuZ2VfY2FzZSAoR3RrLlNvdXJjZUNoYW5nZUNh c2VUeXBlIGNhc2VfdHlwZSk7Ci0tCQlwdWJsaWMgc2lnbmFsIHZvaWQgY2hhbmdlX251bWJlciAo aW50IGNvdW50KTsKLS0JCXB1YmxpYyBzaWduYWwgdm9pZCBqb2luX2xpbmVzICgpOwotLQkJcHVi bGljIHZpcnR1YWwgc2lnbmFsIHZvaWQgbGluZV9tYXJrX2FjdGl2YXRlZCAoR3RrLlRleHRJdGVy IGl0ZXIsIEdkay5FdmVudCBldmVudCk7Ci0tCQlwdWJsaWMgdmlydHVhbCBzaWduYWwgdm9pZCBt b3ZlX2xpbmVzIChib29sIGNvcHksIGludCBzdGVwKTsKLS0JCXB1YmxpYyBzaWduYWwgdm9pZCBt b3ZlX3RvX21hdGNoaW5nX2JyYWNrZXQgKGJvb2wgZXh0ZW5kX3NlbGVjdGlvbik7Ci0tCQlwdWJs aWMgdmlydHVhbCBzaWduYWwgdm9pZCBtb3ZlX3dvcmRzIChpbnQgc3RlcCk7Ci0tCQlwdWJsaWMg dmlydHVhbCBzaWduYWwgdm9pZCByZWRvICgpOwotLQkJcHVibGljIHZpcnR1YWwgc2lnbmFsIHZv aWQgc2hvd19jb21wbGV0aW9uICgpOwotLQkJcHVibGljIHZpcnR1YWwgc2lnbmFsIHZvaWQgdW5k byAoKTsKLS0JfQotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAiZ3Rrc291cmNldmlldy9n dGtzb3VyY2UuaCIsIHR5cGVfaWQgPSAiZ3RrX3NvdXJjZV9jb21wbGV0aW9uX3Byb3Bvc2FsX2dl dF90eXBlICgpIildCi0tCVtHSVIgKG5hbWUgPSAiQ29tcGxldGlvblByb3Bvc2FsIildCi0tCXB1 YmxpYyBpbnRlcmZhY2UgU291cmNlQ29tcGxldGlvblByb3Bvc2FsIDogR0xpYi5PYmplY3Qgewot LQkJcHVibGljIHZpcnR1YWwgYm9vbCBlcXVhbCAoR3RrLlNvdXJjZUNvbXBsZXRpb25Qcm9wb3Nh bCBvdGhlcik7Ci0tCQlwdWJsaWMgYWJzdHJhY3QgdW5vd25lZCBHTGliLkljb24/IGdldF9naWNv biAoKTsKLS0JCXB1YmxpYyB2aXJ0dWFsIHVub3duZWQgR2RrLlBpeGJ1Zj8gZ2V0X2ljb24gKCk7 Ci0tCQlwdWJsaWMgYWJzdHJhY3QgdW5vd25lZCBzdHJpbmc/IGdldF9pY29uX25hbWUgKCk7Ci0t CQlwdWJsaWMgYWJzdHJhY3Qgc3RyaW5nPyBnZXRfaW5mbyAoKTsKLS0JCXB1YmxpYyBhYnN0cmFj dCBzdHJpbmcgZ2V0X2xhYmVsICgpOwotLQkJcHVibGljIGFic3RyYWN0IHN0cmluZyBnZXRfbWFy a3VwICgpOwotLQkJcHVibGljIGFic3RyYWN0IHN0cmluZyBnZXRfdGV4dCAoKTsKLS0JCXB1Ymxp YyB2aXJ0dWFsIHVpbnQgaGFzaCAoKTsKLS0JCVtIYXNFbWl0dGVyXQotLQkJcHVibGljIHZpcnR1 YWwgc2lnbmFsIHZvaWQgY2hhbmdlZCAoKTsKLS0JfQotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5h bWUgPSAiZ3Rrc291cmNldmlldy9ndGtzb3VyY2UuaCIsIHR5cGVfaWQgPSAiZ3RrX3NvdXJjZV9j b21wbGV0aW9uX3Byb3ZpZGVyX2dldF90eXBlICgpIildCi0tCVtHSVIgKG5hbWUgPSAiQ29tcGxl dGlvblByb3ZpZGVyIildCi0tCXB1YmxpYyBpbnRlcmZhY2UgU291cmNlQ29tcGxldGlvblByb3Zp ZGVyIDogR0xpYi5PYmplY3QgewotLQkJcHVibGljIHZpcnR1YWwgYm9vbCBhY3RpdmF0ZV9wcm9w b3NhbCAoR3RrLlNvdXJjZUNvbXBsZXRpb25Qcm9wb3NhbCBwcm9wb3NhbCwgR3RrLlRleHRJdGVy IGl0ZXIpOwotLQkJcHVibGljIHZpcnR1YWwgR3RrLlNvdXJjZUNvbXBsZXRpb25BY3RpdmF0aW9u IGdldF9hY3RpdmF0aW9uICgpOwotLQkJcHVibGljIHZpcnR1YWwgdW5vd25lZCBHTGliLkljb24/ IGdldF9naWNvbiAoKTsKLS0JCXB1YmxpYyB2aXJ0dWFsIHVub3duZWQgR2RrLlBpeGJ1Zj8gZ2V0 X2ljb24gKCk7Ci0tCQlwdWJsaWMgdmlydHVhbCB1bm93bmVkIHN0cmluZz8gZ2V0X2ljb25fbmFt ZSAoKTsKLS0JCXB1YmxpYyB2aXJ0dWFsIHVub3duZWQgR3RrLldpZGdldD8gZ2V0X2luZm9fd2lk Z2V0IChHdGsuU291cmNlQ29tcGxldGlvblByb3Bvc2FsIHByb3Bvc2FsKTsKLS0JCXB1YmxpYyB2 aXJ0dWFsIGludCBnZXRfaW50ZXJhY3RpdmVfZGVsYXkgKCk7Ci0tCQlwdWJsaWMgdmlydHVhbCBz dHJpbmcgZ2V0X25hbWUgKCk7Ci0tCQlwdWJsaWMgdmlydHVhbCBpbnQgZ2V0X3ByaW9yaXR5ICgp OwotLQkJcHVibGljIHZpcnR1YWwgYm9vbCBnZXRfc3RhcnRfaXRlciAoR3RrLlNvdXJjZUNvbXBs ZXRpb25Db250ZXh0IGNvbnRleHQsIEd0ay5Tb3VyY2VDb21wbGV0aW9uUHJvcG9zYWwgcHJvcG9z YWwsIG91dCBHdGsuVGV4dEl0ZXIgaXRlcik7Ci0tCQlwdWJsaWMgdmlydHVhbCBib29sIG1hdGNo IChHdGsuU291cmNlQ29tcGxldGlvbkNvbnRleHQgY29udGV4dCk7Ci0tCQlwdWJsaWMgdmlydHVh bCB2b2lkIHBvcHVsYXRlIChHdGsuU291cmNlQ29tcGxldGlvbkNvbnRleHQgY29udGV4dCk7Ci0t CQlwdWJsaWMgdmlydHVhbCB2b2lkIHVwZGF0ZV9pbmZvIChHdGsuU291cmNlQ29tcGxldGlvblBy b3Bvc2FsIHByb3Bvc2FsLCBHdGsuU291cmNlQ29tcGxldGlvbkluZm8gaW5mbyk7Ci0tCX0KLS0J W0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImd0a3NvdXJjZXZpZXcvZ3Rrc291cmNlLmgiLCB0 eXBlX2lkID0gImd0a19zb3VyY2Vfc3R5bGVfc2NoZW1lX2Nob29zZXJfZ2V0X3R5cGUgKCkiKV0K LS0JW0dJUiAobmFtZSA9ICJTdHlsZVNjaGVtZUNob29zZXIiKV0KLS0JcHVibGljIGludGVyZmFj ZSBTb3VyY2VTdHlsZVNjaGVtZUNob29zZXIgOiBHTGliLk9iamVjdCB7Ci0tCQlwdWJsaWMgYWJz dHJhY3QgdW5vd25lZCBHdGsuU291cmNlU3R5bGVTY2hlbWUgZ2V0X3N0eWxlX3NjaGVtZSAoKTsK LS0JCXB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldF9zdHlsZV9zY2hlbWUgKEd0ay5Tb3VyY2VTdHls ZVNjaGVtZSBzY2hlbWUpOwotLQkJcHVibGljIGFic3RyYWN0IEd0ay5Tb3VyY2VTdHlsZVNjaGVt ZSBzdHlsZV9zY2hlbWUgeyBnZXQ7IHNldDsgfQotLQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxl bmFtZSA9ICJndGtzb3VyY2V2aWV3L2d0a3NvdXJjZS5oIiwgdHlwZV9pZCA9ICJndGtfc291cmNl X3VuZG9fbWFuYWdlcl9nZXRfdHlwZSAoKSIpXQotLQlbR0lSIChuYW1lID0gIlVuZG9NYW5hZ2Vy IildCi0tCXB1YmxpYyBpbnRlcmZhY2UgU291cmNlVW5kb01hbmFnZXIgOiBHTGliLk9iamVjdCB7 Ci0tCQlwdWJsaWMgYWJzdHJhY3Qgdm9pZCBiZWdpbl9ub3RfdW5kb2FibGVfYWN0aW9uICgpOwot LQkJcHVibGljIGFic3RyYWN0IGJvb2wgY2FuX3JlZG8gKCk7Ci0tCQlwdWJsaWMgYWJzdHJhY3Qg Ym9vbCBjYW5fdW5kbyAoKTsKLS0JCXB1YmxpYyBhYnN0cmFjdCB2b2lkIGVuZF9ub3RfdW5kb2Fi bGVfYWN0aW9uICgpOwotLQkJcHVibGljIGFic3RyYWN0IHZvaWQgcmVkbyAoKTsKLS0JCXB1Ymxp YyBhYnN0cmFjdCB2b2lkIHVuZG8gKCk7Ci0tCQlbSGFzRW1pdHRlcl0KLS0JCXB1YmxpYyB2aXJ0 dWFsIHNpZ25hbCB2b2lkIGNhbl9yZWRvX2NoYW5nZWQgKCk7Ci0tCQlbSGFzRW1pdHRlcl0KLS0J CXB1YmxpYyB2aXJ0dWFsIHNpZ25hbCB2b2lkIGNhbl91bmRvX2NoYW5nZWQgKCk7Ci0tCX0KLS0J W0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImd0a3NvdXJjZXZpZXcvZ3Rrc291cmNlLmgiLCBj cHJlZml4ID0gIkdUS19TT1VSQ0VfQkFDS0dST1VORF9QQVRURVJOX1RZUEVfIiwgdHlwZV9pZCA9 ICJndGtfc291cmNlX2JhY2tncm91bmRfcGF0dGVybl90eXBlX2dldF90eXBlICgpIildCi0tCVtH SVIgKG5hbWUgPSAiQmFja2dyb3VuZFBhdHRlcm5UeXBlIildCi0tCXB1YmxpYyBlbnVtIFNvdXJj ZUJhY2tncm91bmRQYXR0ZXJuVHlwZSB7Ci0tCQlOT05FLAotLQkJR1JJRAotLQl9Ci0tCVtDQ29k ZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJndGtzb3VyY2V2aWV3L2d0a3NvdXJjZS5oIiwgY3ByZWZp eCA9ICJHVEtfU09VUkNFX0JSQUNLRVRfTUFUQ0hfIiwgdHlwZV9pZCA9ICJndGtfc291cmNlX2Jy YWNrZXRfbWF0Y2hfdHlwZV9nZXRfdHlwZSAoKSIpXQotLQlbR0lSIChuYW1lID0gIkJyYWNrZXRN YXRjaFR5cGUiKV0KLS0JcHVibGljIGVudW0gU291cmNlQnJhY2tldE1hdGNoVHlwZSB7Ci0tCQlO T05FLAotLQkJT1VUX09GX1JBTkdFLAotLQkJTk9UX0ZPVU5ELAotLQkJRk9VTkQKLS0JfQotLQlb Q0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAiZ3Rrc291cmNldmlldy9ndGtzb3VyY2UuaCIsIGNw cmVmaXggPSAiR1RLX1NPVVJDRV9DSEFOR0VfQ0FTRV8iLCB0eXBlX2lkID0gImd0a19zb3VyY2Vf Y2hhbmdlX2Nhc2VfdHlwZV9nZXRfdHlwZSAoKSIpXQotLQlbR0lSIChuYW1lID0gIkNoYW5nZUNh c2VUeXBlIildCi0tCXB1YmxpYyBlbnVtIFNvdXJjZUNoYW5nZUNhc2VUeXBlIHsKLS0JCUxPV0VS LAotLQkJVVBQRVIsCi0tCQlUT0dHTEUsCi0tCQlUSVRMRQotLQl9Ci0tCVtDQ29kZSAoY2hlYWRl cl9maWxlbmFtZSA9ICJndGtzb3VyY2V2aWV3L2d0a3NvdXJjZS5oIiwgY3ByZWZpeCA9ICJHVEtf U09VUkNFX0NPTVBMRVRJT05fQUNUSVZBVElPTl8iLCB0eXBlX2lkID0gImd0a19zb3VyY2VfY29t cGxldGlvbl9hY3RpdmF0aW9uX2dldF90eXBlICgpIildCi0tCVtGbGFnc10KLS0JW0dJUiAobmFt ZSA9ICJDb21wbGV0aW9uQWN0aXZhdGlvbiIpXQotLQlwdWJsaWMgZW51bSBTb3VyY2VDb21wbGV0 aW9uQWN0aXZhdGlvbiB7Ci0tCQlOT05FLAotLQkJSU5URVJBQ1RJVkUsCi0tCQlVU0VSX1JFUVVF U1RFRAotLQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJndGtzb3VyY2V2aWV3L2d0 a3NvdXJjZS5oIiwgY3ByZWZpeCA9ICJHVEtfU09VUkNFX0NPTVBSRVNTSU9OX1RZUEVfIiwgdHlw ZV9pZCA9ICJndGtfc291cmNlX2NvbXByZXNzaW9uX3R5cGVfZ2V0X3R5cGUgKCkiKV0KLS0JW0dJ UiAobmFtZSA9ICJDb21wcmVzc2lvblR5cGUiKV0KLS0JcHVibGljIGVudW0gU291cmNlQ29tcHJl c3Npb25UeXBlIHsKLS0JCU5PTkUsCi0tCQlHWklQCi0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2Zp bGVuYW1lID0gImd0a3NvdXJjZXZpZXcvZ3Rrc291cmNlLmgiLCBjcHJlZml4ID0gIkdUS19TT1VS Q0VfRFJBV19TUEFDRVNfIiwgdHlwZV9pZCA9ICJndGtfc291cmNlX2RyYXdfc3BhY2VzX2ZsYWdz X2dldF90eXBlICgpIildCi0tCVtGbGFnc10KLS0JW0dJUiAobmFtZSA9ICJEcmF3U3BhY2VzRmxh Z3MiKV0KLS0JcHVibGljIGVudW0gU291cmNlRHJhd1NwYWNlc0ZsYWdzIHsKLS0JCVNQQUNFLAot LQkJVEFCLAotLQkJTkVXTElORSwKLS0JCU5CU1AsCi0tCQlMRUFESU5HLAotLQkJVEVYVCwKLS0J CVRSQUlMSU5HLAotLQkJQUxMCi0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImd0 a3NvdXJjZXZpZXcvZ3Rrc291cmNlLmgiLCBjcHJlZml4ID0gIkdUS19TT1VSQ0VfRklMRV9TQVZF Ul9GTEFHU18iLCB0eXBlX2lkID0gImd0a19zb3VyY2VfZmlsZV9zYXZlcl9mbGFnc19nZXRfdHlw ZSAoKSIpXQotLQlbRmxhZ3NdCi0tCVtHSVIgKG5hbWUgPSAiRmlsZVNhdmVyRmxhZ3MiKV0KLS0J cHVibGljIGVudW0gU291cmNlRmlsZVNhdmVyRmxhZ3MgewotLQkJTk9ORSwKLS0JCUlHTk9SRV9J TlZBTElEX0NIQVJTLAotLQkJSUdOT1JFX01PRElGSUNBVElPTl9USU1FLAotLQkJQ1JFQVRFX0JB Q0tVUAotLQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJndGtzb3VyY2V2aWV3L2d0 a3NvdXJjZS5oIiwgY3ByZWZpeCA9ICJHVEtfU09VUkNFX0dVVFRFUl9SRU5ERVJFUl9BTElHTk1F TlRfTU9ERV8iLCB0eXBlX2lkID0gImd0a19zb3VyY2VfZ3V0dGVyX3JlbmRlcmVyX2FsaWdubWVu dF9tb2RlX2dldF90eXBlICgpIildCi0tCVtHSVIgKG5hbWUgPSAiR3V0dGVyUmVuZGVyZXJBbGln bm1lbnRNb2RlIildCi0tCXB1YmxpYyBlbnVtIFNvdXJjZUd1dHRlclJlbmRlcmVyQWxpZ25tZW50 TW9kZSB7Ci0tCQlDRUxMLAotLQkJRklSU1QsCi0tCQlMQVNUCi0tCX0KLS0JW0NDb2RlIChjaGVh ZGVyX2ZpbGVuYW1lID0gImd0a3NvdXJjZXZpZXcvZ3Rrc291cmNlLmgiLCBjcHJlZml4ID0gIkdU S19TT1VSQ0VfR1VUVEVSX1JFTkRFUkVSX1NUQVRFXyIsIHR5cGVfaWQgPSAiZ3RrX3NvdXJjZV9n dXR0ZXJfcmVuZGVyZXJfc3RhdGVfZ2V0X3R5cGUgKCkiKV0KLS0JW0ZsYWdzXQotLQlbR0lSIChu YW1lID0gIkd1dHRlclJlbmRlcmVyU3RhdGUiKV0KLS0JcHVibGljIGVudW0gU291cmNlR3V0dGVy UmVuZGVyZXJTdGF0ZSB7Ci0tCQlOT1JNQUwsCi0tCQlDVVJTT1IsCi0tCQlQUkVMSVQsCi0tCQlT RUxFQ1RFRAotLQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJndGtzb3VyY2V2aWV3 L2d0a3NvdXJjZS5oIiwgY3ByZWZpeCA9ICJHVEtfU09VUkNFX05FV0xJTkVfVFlQRV8iLCB0eXBl X2lkID0gImd0a19zb3VyY2VfbmV3bGluZV90eXBlX2dldF90eXBlICgpIildCi0tCVtHSVIgKG5h bWUgPSAiTmV3bGluZVR5cGUiKV0KLS0JcHVibGljIGVudW0gU291cmNlTmV3bGluZVR5cGUgewot LQkJTEYsCi0tCQlDUiwKLS0JCUNSX0xGCi0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1l ID0gImd0a3NvdXJjZXZpZXcvZ3Rrc291cmNlLmgiLCBjcHJlZml4ID0gIkdUS19TT1VSQ0VfU01B UlRfSE9NRV9FTkRfIiwgdHlwZV9pZCA9ICJndGtfc291cmNlX3NtYXJ0X2hvbWVfZW5kX3R5cGVf Z2V0X3R5cGUgKCkiKV0KLS0JW0dJUiAobmFtZSA9ICJTbWFydEhvbWVFbmRUeXBlIildCi0tCXB1 YmxpYyBlbnVtIFNvdXJjZVNtYXJ0SG9tZUVuZFR5cGUgewotLQkJRElTQUJMRUQsCi0tCQlCRUZP UkUsCi0tCQlBRlRFUiwKLS0JCUFMV0FZUwotLQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFt ZSA9ICJndGtzb3VyY2V2aWV3L2d0a3NvdXJjZS5oIiwgY3ByZWZpeCA9ICJHVEtfU09VUkNFX1NP UlRfRkxBR1NfIiwgdHlwZV9pZCA9ICJndGtfc291cmNlX3NvcnRfZmxhZ3NfZ2V0X3R5cGUgKCki KV0KLS0JW0ZsYWdzXQotLQlbR0lSIChuYW1lID0gIlNvcnRGbGFncyIpXQotLQlwdWJsaWMgZW51 bSBTb3VyY2VTb3J0RmxhZ3MgewotLQkJTk9ORSwKLS0JCUNBU0VfU0VOU0lUSVZFLAotLQkJUkVW RVJTRV9PUkRFUiwKLS0JCVJFTU9WRV9EVVBMSUNBVEVTCi0tCX0KLS0JW0NDb2RlIChjaGVhZGVy X2ZpbGVuYW1lID0gImd0a3NvdXJjZXZpZXcvZ3Rrc291cmNlLmgiLCBjcHJlZml4ID0gIkdUS19T T1VSQ0VfVklFV19HVVRURVJfUE9TSVRJT05fIiwgdHlwZV9pZCA9ICJndGtfc291cmNlX3ZpZXdf Z3V0dGVyX3Bvc2l0aW9uX2dldF90eXBlICgpIildCi0tCVtHSVIgKG5hbWUgPSAiVmlld0d1dHRl clBvc2l0aW9uIildCi0tCXB1YmxpYyBlbnVtIFNvdXJjZVZpZXdHdXR0ZXJQb3NpdGlvbiB7Ci0t CQlMSU5FUywKLS0JCU1BUktTCi0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImd0 a3NvdXJjZXZpZXcvZ3Rrc291cmNlLmgiLCBjcHJlZml4ID0gIkdUS19TT1VSQ0VfQ09NUExFVElP Tl9FUlJPUl8iKV0KLS0JW0dJUiAobmFtZSA9ICJDb21wbGV0aW9uRXJyb3IiKV0KLS0JcHVibGlj IGVycm9yZG9tYWluIFNvdXJjZUNvbXBsZXRpb25FcnJvciB7Ci0tCQlBTFJFQURZX0JPVU5ELAot LQkJTk9UX0JPVU5EOwotLQkJW0NDb2RlIChjbmFtZSA9ICJndGtfc291cmNlX2NvbXBsZXRpb25f ZXJyb3JfcXVhcmsiKV0KLS0JCXB1YmxpYyBzdGF0aWMgR0xpYi5RdWFyayB1YXJrICgpOwotLQl9 Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJndGtzb3VyY2V2aWV3L2d0a3NvdXJjZS5o IiwgY3ByZWZpeCA9ICJHVEtfU09VUkNFX0ZJTEVfTE9BREVSX0VSUk9SXyIpXQotLQlbR0lSIChu YW1lID0gIkZpbGVMb2FkZXJFcnJvciIpXQotLQlwdWJsaWMgZXJyb3Jkb21haW4gU291cmNlRmls ZUxvYWRlckVycm9yIHsKLS0JCVRPT19CSUcsCi0tCQlFTkNPRElOR19BVVRPX0RFVEVDVElPTl9G QUlMRUQsCi0tCQlDT05WRVJTSU9OX0ZBTExCQUNLOwotLQkJW0NDb2RlIChjbmFtZSA9ICJndGtf c291cmNlX2ZpbGVfbG9hZGVyX2Vycm9yX3F1YXJrIildCi0tCQlwdWJsaWMgc3RhdGljIEdMaWIu UXVhcmsgdWFyayAoKTsKLS0JfQotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAiZ3Rrc291 cmNldmlldy9ndGtzb3VyY2UuaCIsIGNwcmVmaXggPSAiR1RLX1NPVVJDRV9GSUxFX1NBVkVSX0VS Uk9SXyIpXQotLQlbR0lSIChuYW1lID0gIkZpbGVTYXZlckVycm9yIildCi0tCXB1YmxpYyBlcnJv cmRvbWFpbiBTb3VyY2VGaWxlU2F2ZXJFcnJvciB7Ci0tCQlJTlZBTElEX0NIQVJTLAotLQkJRVhU RVJOQUxMWV9NT0RJRklFRDsKLS0JCVtDQ29kZSAoY25hbWUgPSAiZ3RrX3NvdXJjZV9maWxlX3Nh dmVyX2Vycm9yX3F1YXJrIildCi0tCQlwdWJsaWMgc3RhdGljIEdMaWIuUXVhcmsgdWFyayAoKTsK LS0JfQotLX0KLWRpZmYgLS1naXQgYS92YXBpL2xpYnNvdXAtMi40LmRlcHMgYi92YXBpL2xpYnNv dXAtMi40LmRlcHMKLWRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggY2QxMGRmZGUuLjAw MDAwMDAwCi0tLS0gYS92YXBpL2xpYnNvdXAtMi40LmRlcHMKLSsrKyAvZGV2L251bGwKLUBAIC0x ICswLDAgQEAKLS1naW8tMi4wCi1kaWZmIC0tZ2l0IGEvdmFwaS9saWJzb3VwLTIuNC52YXBpIGIv dmFwaS9saWJzb3VwLTIuNC52YXBpCi1kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IGJj YmU3ZDAwLi4wMDAwMDAwMAotLS0tIGEvdmFwaS9saWJzb3VwLTIuNC52YXBpCi0rKysgL2Rldi9u dWxsCi1AQCAtMSwxMzk2ICswLDAgQEAKLS0vKiBsaWJzb3VwLTIuNC52YXBpIGdlbmVyYXRlZCBi eSB2YXBpZ2VuLCBkbyBub3QgbW9kaWZ5LiAqLwotLQotLVtDQ29kZSAoY3ByZWZpeCA9ICJTb3Vw IiwgZ2lyX25hbWVzcGFjZSA9ICJTb3VwIiwgZ2lyX3ZlcnNpb24gPSAiMi40IiwgbG93ZXJfY2Fz ZV9jcHJlZml4ID0gInNvdXBfIildCi0tbmFtZXNwYWNlIFNvdXAgewotLQluYW1lc3BhY2UgRm9y bSB7Ci0tCQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiKV0KLS0J CXB1YmxpYyBzdGF0aWMgR0xpYi5IYXNoVGFibGU8c3RyaW5nLHN0cmluZz4gZGVjb2RlIChzdHJp bmcgZW5jb2RlZF9mb3JtKTsKLS0JCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3Vw L3NvdXAuaCIpXQotLQkJcHVibGljIHN0YXRpYyBHTGliLkhhc2hUYWJsZTxzdHJpbmcsc3RyaW5n PiBkZWNvZGVfbXVsdGlwYXJ0IChTb3VwLk1lc3NhZ2UgbXNnLCBzdHJpbmcgZmlsZV9jb250cm9s X25hbWUsIG91dCBzdHJpbmcgZmlsZW5hbWUsIG91dCBzdHJpbmcgY29udGVudF90eXBlLCBvdXQg U291cC5CdWZmZXIgZmlsZSk7Ci0tCQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291 cC9zb3VwLmgiKV0KLS0JCXB1YmxpYyBzdGF0aWMgc3RyaW5nIGVuY29kZSAoLi4uKTsKLS0JCVtD Q29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIpXQotLQkJcHVibGljIHN0 YXRpYyBzdHJpbmcgZW5jb2RlX2RhdGFsaXN0IChHTGliLkRhdGFsaXN0PHN0cmluZz4gZm9ybV9k YXRhX3NldCk7Ci0tCQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgi KV0KLS0JCXB1YmxpYyBzdGF0aWMgc3RyaW5nIGVuY29kZV9oYXNoIChHTGliLkhhc2hUYWJsZTxz dHJpbmcsc3RyaW5nPiBmb3JtX2RhdGFfc2V0KTsKLS0JCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFt ZSA9ICJsaWJzb3VwL3NvdXAuaCIpXQotLQkJcHVibGljIHN0YXRpYyBzdHJpbmcgZW5jb2RlX3Zh bGlzdCAoc3RyaW5nIGZpcnN0X2ZpZWxkLCB2YV9saXN0IGFyZ3MpOwotLQkJW0NDb2RlIChjaGVh ZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIildCi0tCQlwdWJsaWMgc3RhdGljIFNvdXAu TWVzc2FnZSByZXF1ZXN0X25ldyAoc3RyaW5nIG1ldGhvZCwgc3RyaW5nIHVyaSwgLi4uKTsKLS0J CVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIpXQotLQkJcHVibGlj IHN0YXRpYyBTb3VwLk1lc3NhZ2UgcmVxdWVzdF9uZXdfZnJvbV9kYXRhbGlzdCAoc3RyaW5nIG1l dGhvZCwgc3RyaW5nIHVyaSwgR0xpYi5EYXRhbGlzdDxzdHJpbmc+IGZvcm1fZGF0YV9zZXQpOwot LQkJW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIildCi0tCQlwdWJs aWMgc3RhdGljIFNvdXAuTWVzc2FnZSByZXF1ZXN0X25ld19mcm9tX2hhc2ggKHN0cmluZyBtZXRo b2QsIHN0cmluZyB1cmksIEdMaWIuSGFzaFRhYmxlPHN0cmluZyxzdHJpbmc+IGZvcm1fZGF0YV9z ZXQpOwotLQkJW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIildCi0t CQlwdWJsaWMgc3RhdGljIFNvdXAuTWVzc2FnZSByZXF1ZXN0X25ld19mcm9tX211bHRpcGFydCAo c3RyaW5nIHVyaSwgU291cC5NdWx0aXBhcnQgbXVsdGlwYXJ0KTsKLS0JfQotLQluYW1lc3BhY2Ug WE1MUlBDIHsKLS0JCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIs IGNwcmVmaXggPSAiU09VUF9YTUxSUENfRVJST1JfIildCi0tCQlbR0lSIChuYW1lID0gIlhNTFJQ Q0Vycm9yIildCi0tCQlwdWJsaWMgZXJyb3Jkb21haW4gRXJyb3IgewotLQkJCUFSR1VNRU5UUywK LS0JCQlSRVRWQUwKLS0JCX0KLS0JCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3Vw L3NvdXAuaCIsIGNwcmVmaXggPSAiU09VUF9YTUxSUENfRkFVTFRfIildCi0tCQlbR0lSIChuYW1l ID0gIlhNTFJQQ0ZhdWx0IildCi0tCQlwdWJsaWMgZXJyb3Jkb21haW4gRmF1bHQgewotLQkJCVBB UlNFX0VSUk9SX05PVF9XRUxMX0ZPUk1FRCwKLS0JCQlQQVJTRV9FUlJPUl9VTlNVUFBPUlRFRF9F TkNPRElORywKLS0JCQlQQVJTRV9FUlJPUl9JTlZBTElEX0NIQVJBQ1RFUl9GT1JfRU5DT0RJTkcs Ci0tCQkJU0VSVkVSX0VSUk9SX0lOVkFMSURfWE1MX1JQQywKLS0JCQlTRVJWRVJfRVJST1JfUkVR VUVTVEVEX01FVEhPRF9OT1RfRk9VTkQsCi0tCQkJU0VSVkVSX0VSUk9SX0lOVkFMSURfTUVUSE9E X1BBUkFNRVRFUlMsCi0tCQkJU0VSVkVSX0VSUk9SX0lOVEVSTkFMX1hNTF9SUENfRVJST1IsCi0t CQkJQVBQTElDQVRJT05fRVJST1IsCi0tCQkJU1lTVEVNX0VSUk9SLAotLQkJCVRSQU5TUE9SVF9F UlJPUgotLQkJfQotLQkJW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5o IildCi0tCQlbUHJpbnRmRm9ybWF0XQotLQkJcHVibGljIHN0YXRpYyBzdHJpbmcgYnVpbGRfZmF1 bHQgKGludCBmYXVsdF9jb2RlLCBzdHJpbmcgZmF1bHRfZm9ybWF0LCAuLi4pOwotLQkJW0NDb2Rl IChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIildCi0tCQlwdWJsaWMgc3RhdGlj IHN0cmluZyBidWlsZF9tZXRob2RfY2FsbCAoc3RyaW5nIG1ldGhvZF9uYW1lLCBbQ0NvZGUgKGFy cmF5X2xlbmd0aF9jbmFtZSA9ICJuX3BhcmFtcyIsIGFycmF5X2xlbmd0aF9wb3MgPSAyLjEpXSBH TGliLlZhbHVlW10gQHBhcmFtcyk7Ci0tCQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGli c291cC9zb3VwLmgiKV0KLS0JCXB1YmxpYyBzdGF0aWMgc3RyaW5nIGJ1aWxkX21ldGhvZF9yZXNw b25zZSAoR0xpYi5WYWx1ZSB2YWx1ZSk7Ci0tCQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAi bGlic291cC9zb3VwLmgiKV0KLS0JCXB1YmxpYyBzdGF0aWMgR0xpYi5RdWFyayBlcnJvcl9xdWFy ayAoKTsKLS0JCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIHNl bnRpbmVsID0gIkdfVFlQRV9JTlZBTElEIildCi0tCQlwdWJsaWMgc3RhdGljIGJvb2wgZXh0cmFj dF9tZXRob2RfY2FsbCAoc3RyaW5nIG1ldGhvZF9jYWxsLCBpbnQgbGVuZ3RoLCBvdXQgc3RyaW5n IG1ldGhvZF9uYW1lLCAuLi4pOwotLQkJW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNv dXAvc291cC5oIiwgc2VudGluZWwgPSAiR19UWVBFX0lOVkFMSUQiKV0KLS0JCXB1YmxpYyBzdGF0 aWMgYm9vbCBleHRyYWN0X21ldGhvZF9yZXNwb25zZSAoc3RyaW5nIG1ldGhvZF9yZXNwb25zZSwg aW50IGxlbmd0aCwgLi4uKSB0aHJvd3MgU291cC5YTUxSUEMuRmF1bHQ7Ci0tCQlbQ0NvZGUgKGNo ZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiKV0KLS0JCXB1YmxpYyBzdGF0aWMgR0xp Yi5RdWFyayBmYXVsdF9xdWFyayAoKTsKLS0JCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJs aWJzb3VwL3NvdXAuaCIpXQotLQkJcHVibGljIHN0YXRpYyBib29sIHBhcnNlX21ldGhvZF9jYWxs IChzdHJpbmcgbWV0aG9kX2NhbGwsIGludCBsZW5ndGgsIG91dCBzdHJpbmcgbWV0aG9kX25hbWUs IG91dCBHTGliLlZhbHVlQXJyYXkgQHBhcmFtcyk7Ci0tCQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5h bWUgPSAibGlic291cC9zb3VwLmgiKV0KLS0JCXB1YmxpYyBzdGF0aWMgYm9vbCBwYXJzZV9tZXRo b2RfcmVzcG9uc2UgKHN0cmluZyBtZXRob2RfcmVzcG9uc2UsIGludCBsZW5ndGgsIG91dCBHTGli LlZhbHVlIHZhbHVlKSB0aHJvd3MgU291cC5YTUxSUEMuRmF1bHQ7Ci0tCQlbQ0NvZGUgKGNoZWFk ZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBzZW50aW5lbCA9ICJHX1RZUEVfSU5WQUxJ RCIpXQotLQkJcHVibGljIHN0YXRpYyBTb3VwLk1lc3NhZ2UgcmVxdWVzdF9uZXcgKHN0cmluZyB1 cmksIHN0cmluZyBtZXRob2RfbmFtZSwgLi4uKTsKLS0JCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFt ZSA9ICJsaWJzb3VwL3NvdXAuaCIpXQotLQkJW1ByaW50ZkZvcm1hdF0KLS0JCXB1YmxpYyBzdGF0 aWMgdm9pZCBzZXRfZmF1bHQgKFNvdXAuTWVzc2FnZSBtc2csIGludCBmYXVsdF9jb2RlLCBzdHJp bmcgZmF1bHRfZm9ybWF0LCAuLi4pOwotLQkJW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxp YnNvdXAvc291cC5oIiwgc2VudGluZWwgPSAiR19UWVBFX0lOVkFMSUQiKV0KLS0JCXB1YmxpYyBz dGF0aWMgdm9pZCBzZXRfcmVzcG9uc2UgKFNvdXAuTWVzc2FnZSBtc2csIC4uLik7Ci0tCX0KLS0J W0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgdHlwZV9pZCA9ICJz b3VwX2FkZHJlc3NfZ2V0X3R5cGUgKCkiKV0KLS0JcHVibGljIGNsYXNzIEFkZHJlc3MgOiBHTGli Lk9iamVjdCwgR0xpYi5Tb2NrZXRDb25uZWN0YWJsZSB7Ci0tCQlbQ0NvZGUgKGhhc19jb25zdHJ1 Y3RfZnVuY3Rpb24gPSBmYWxzZSldCi0tCQlwdWJsaWMgQWRkcmVzcyAoc3RyaW5nIG5hbWUsIHVp bnQgcG9ydCk7Ci0tCQlbQ0NvZGUgKGhhc19jb25zdHJ1Y3RfZnVuY3Rpb24gPSBmYWxzZSldCi0t CQlwdWJsaWMgQWRkcmVzcy5hbnkgKFNvdXAuQWRkcmVzc0ZhbWlseSBmYW1pbHksIHVpbnQgcG9y dCk7Ci0tCQlwdWJsaWMgYm9vbCBlcXVhbF9ieV9pcCAoW0NDb2RlICh0eXBlID0gImdjb25zdHBv aW50ZXIiKV0gU291cC5BZGRyZXNzIGFkZHIyKTsKLS0JCXB1YmxpYyBib29sIGVxdWFsX2J5X25h bWUgKFtDQ29kZSAodHlwZSA9ICJnY29uc3Rwb2ludGVyIildIFNvdXAuQWRkcmVzcyBhZGRyMik7 Ci0tCQlbQ0NvZGUgKGhhc19jb25zdHJ1Y3RfZnVuY3Rpb24gPSBmYWxzZSldCi0tCQlwdWJsaWMg QWRkcmVzcy5mcm9tX3NvY2thZGRyICh2b2lkKiBzYSwgaW50IGxlbik7Ci0tCQlwdWJsaWMgR0xp Yi5Tb2NrZXRBZGRyZXNzIGdldF9nc29ja2FkZHIgKCk7Ci0tCQlwdWJsaWMgdW5vd25lZCBzdHJp bmcgZ2V0X25hbWUgKCk7Ci0tCQlwdWJsaWMgdW5vd25lZCBzdHJpbmcgZ2V0X3BoeXNpY2FsICgp OwotLQkJcHVibGljIHVpbnQgZ2V0X3BvcnQgKCk7Ci0tCQlwdWJsaWMgdm9pZCogZ2V0X3NvY2th ZGRyIChpbnQgbGVuKTsKLS0JCXB1YmxpYyB1aW50IGhhc2hfYnlfaXAgKCk7Ci0tCQlwdWJsaWMg dWludCBoYXNoX2J5X25hbWUgKCk7Ci0tCQlwdWJsaWMgYm9vbCBpc19yZXNvbHZlZCAoKTsKLS0J CXB1YmxpYyB2b2lkIHJlc29sdmVfYXN5bmMgKEdMaWIuTWFpbkNvbnRleHQ/IGFzeW5jX2NvbnRl eHQsIEdMaWIuQ2FuY2VsbGFibGU/IGNhbmNlbGxhYmxlLCBTb3VwLkFkZHJlc3NDYWxsYmFjayBj YWxsYmFjayk7Ci0tCQlwdWJsaWMgdWludCByZXNvbHZlX3N5bmMgKEdMaWIuQ2FuY2VsbGFibGU/ IGNhbmNlbGxhYmxlKTsKLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIFNvdXAuQWRk cmVzc0ZhbWlseSBmYW1pbHkgeyBnZXQ7IGNvbnN0cnVjdDsgfQotLQkJcHVibGljIHN0cmluZyBu YW1lIHsgZ2V0OyBjb25zdHJ1Y3Q7IH0KLS0JCXB1YmxpYyBzdHJpbmcgcGh5c2ljYWwgeyBnZXQ7 IH0KLS0JCXB1YmxpYyBpbnQgcG9ydCB7IGdldDsgY29uc3RydWN0OyB9Ci0tCQlbTm9BY2Nlc3Nv ck1ldGhvZF0KLS0JCXB1YmxpYyB2b2lkKiBzb2NrYWRkciB7IGdldDsgY29uc3RydWN0OyB9Ci0t CX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgdHlwZV9p ZCA9ICJzb3VwX2F1dGhfZ2V0X3R5cGUgKCkiKV0KLS0JcHVibGljIGFic3RyYWN0IGNsYXNzIEF1 dGggOiBHTGliLk9iamVjdCB7Ci0tCQlbQ0NvZGUgKGhhc19jb25zdHJ1Y3RfZnVuY3Rpb24gPSBm YWxzZSldCi0tCQlwdWJsaWMgQXV0aCAoR0xpYi5UeXBlIHR5cGUsIFNvdXAuTWVzc2FnZSBtc2cs IHN0cmluZyBhdXRoX2hlYWRlcik7Ci0tCQlwdWJsaWMgdmlydHVhbCB2b2lkIGF1dGhlbnRpY2F0 ZSAoc3RyaW5nIHVzZXJuYW1lLCBzdHJpbmcgcGFzc3dvcmQpOwotLQkJcHVibGljIHZpcnR1YWwg c3RyaW5nIGdldF9hdXRob3JpemF0aW9uIChTb3VwLk1lc3NhZ2UgbXNnKTsKLS0JCXB1YmxpYyB1 bm93bmVkIHN0cmluZyBnZXRfaG9zdCAoKTsKLS0JCXB1YmxpYyBzdHJpbmcgZ2V0X2luZm8gKCk7 Ci0tCQlwdWJsaWMgdmlydHVhbCBHTGliLlNMaXN0PHN0cmluZz4gZ2V0X3Byb3RlY3Rpb25fc3Bh Y2UgKFNvdXAuVVJJIHNvdXJjZV91cmkpOwotLQkJcHVibGljIHVub3duZWQgc3RyaW5nIGdldF9y ZWFsbSAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIHN0cmluZyBnZXRfc2NoZW1lX25hbWUgKCk7Ci0t CQlwdWJsaWMgdmlydHVhbCBib29sIHVwZGF0ZSAoU291cC5NZXNzYWdlIG1zZywgR0xpYi5IYXNo VGFibGU8dm9pZCosdm9pZCo+IGF1dGhfcGFyYW1zKTsKLS0JCXB1YmxpYyBzdHJpbmcgaG9zdCB7 IGdldDsgY29uc3RydWN0OyB9Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1YmxpYyB2aXJ0 dWFsIGJvb2wgaXNfYXV0aGVudGljYXRlZCB7IGdldDsgfQotLQkJW05vQWNjZXNzb3JNZXRob2Rd Ci0tCQlwdWJsaWMgYm9vbCBpc19mb3JfcHJveHkgeyBnZXQ7IGNvbnN0cnVjdDsgfQotLQkJcHVi bGljIHN0cmluZyByZWFsbSB7IGdldDsgY29uc3RydWN0OyB9Ci0tCQlwdWJsaWMgc3RyaW5nIHNj aGVtZV9uYW1lIHsgZ2V0OyB9Ci0tCQlwdWJsaWMgc2lnbmFsIHZvaWQgc2F2ZV9wYXNzd29yZCAo c3RyaW5nIHVzZXJuYW1lLCBzdHJpbmcgcGFzc3dvcmQpOwotLQl9Ci0tCVtDQ29kZSAoY2hlYWRl cl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIHR5cGVfaWQgPSAic291cF9hdXRoX2Jhc2lj X2dldF90eXBlICgpIildCi0tCXB1YmxpYyBjbGFzcyBBdXRoQmFzaWMgOiBTb3VwLkF1dGggewot LQkJW0NDb2RlIChoYXNfY29uc3RydWN0X2Z1bmN0aW9uID0gZmFsc2UpXQotLQkJcHJvdGVjdGVk IEF1dGhCYXNpYyAoKTsKLS0JfQotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291 cC9zb3VwLmgiLCB0eXBlX2lkID0gInNvdXBfYXV0aF9kaWdlc3RfZ2V0X3R5cGUgKCkiKV0KLS0J cHVibGljIGNsYXNzIEF1dGhEaWdlc3QgOiBTb3VwLkF1dGggewotLQkJW0NDb2RlIChoYXNfY29u c3RydWN0X2Z1bmN0aW9uID0gZmFsc2UpXQotLQkJcHJvdGVjdGVkIEF1dGhEaWdlc3QgKCk7Ci0t CX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgdHlwZV9p ZCA9ICJzb3VwX2F1dGhfZG9tYWluX2dldF90eXBlICgpIildCi0tCXB1YmxpYyBhYnN0cmFjdCBj bGFzcyBBdXRoRG9tYWluIDogR0xpYi5PYmplY3QgewotLQkJW0NDb2RlIChoYXNfY29uc3RydWN0 X2Z1bmN0aW9uID0gZmFsc2UpXQotLQkJcHJvdGVjdGVkIEF1dGhEb21haW4gKCk7Ci0tCQlbTm9X cmFwcGVyXQotLQkJcHVibGljIHZpcnR1YWwgc3RyaW5nIGFjY2VwdHMgKFNvdXAuTWVzc2FnZSBt c2csIHN0cmluZyBoZWFkZXIpOwotLQkJcHVibGljIHZvaWQgYWRkX3BhdGggKHN0cmluZyBwYXRo KTsKLS0JCVtDQ29kZSAodmZ1bmNfbmFtZSA9ICJjaGFsbGVuZ2UiKV0KLS0JCXB1YmxpYyB2aXJ0 dWFsIHN0cmluZyBjaGFsbGVuZ2UgKFNvdXAuTWVzc2FnZSBtc2cpOwotLQkJcHVibGljIHZpcnR1 YWwgYm9vbCBjaGVja19wYXNzd29yZCAoU291cC5NZXNzYWdlIG1zZywgc3RyaW5nIHVzZXJuYW1l LCBzdHJpbmcgcGFzc3dvcmQpOwotLQkJcHVibGljIGJvb2wgY292ZXJzIChTb3VwLk1lc3NhZ2Ug bXNnKTsKLS0JCXB1YmxpYyB1bm93bmVkIHN0cmluZyBnZXRfcmVhbG0gKCk7Ci0tCQlwdWJsaWMg dm9pZCByZW1vdmVfcGF0aCAoc3RyaW5nIHBhdGgpOwotLQkJcHVibGljIHZvaWQgc2V0X2ZpbHRl ciAob3duZWQgU291cC5BdXRoRG9tYWluRmlsdGVyIGZpbHRlcik7Ci0tCQlwdWJsaWMgdm9pZCBz ZXRfZ2VuZXJpY19hdXRoX2NhbGxiYWNrIChvd25lZCBTb3VwLkF1dGhEb21haW5HZW5lcmljQXV0 aENhbGxiYWNrIGF1dGhfY2FsbGJhY2spOwotLQkJcHVibGljIGJvb2wgdHJ5X2dlbmVyaWNfYXV0 aF9jYWxsYmFjayAoU291cC5NZXNzYWdlIG1zZywgc3RyaW5nIHVzZXJuYW1lKTsKLS0JCVtOb0Fj Y2Vzc29yTWV0aG9kXQotLQkJcHVibGljIHZvaWQqIGZpbHRlciB7IGdldDsgc2V0OyB9Ci0tCQlb Tm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1YmxpYyB2b2lkKiBmaWx0ZXJfZGF0YSB7IGdldDsgc2V0 OyB9Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1YmxpYyB2b2lkKiBnZW5lcmljX2F1dGhf Y2FsbGJhY2sgeyBnZXQ7IHNldDsgfQotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMg dm9pZCogZ2VuZXJpY19hdXRoX2RhdGEgeyBnZXQ7IHNldDsgfQotLQkJW05vQWNjZXNzb3JNZXRo b2RdCi0tCQlwdWJsaWMgYm9vbCBwcm94eSB7IGdldDsgY29uc3RydWN0OyB9Ci0tCQlwdWJsaWMg c3RyaW5nIHJlYWxtIHsgZ2V0OyBjb25zdHJ1Y3Q7IH0KLS0JfQotLQlbQ0NvZGUgKGNoZWFkZXJf ZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCB0eXBlX2lkID0gInNvdXBfYXV0aF9kb21haW5f YmFzaWNfZ2V0X3R5cGUgKCkiKV0KLS0JcHVibGljIGNsYXNzIEF1dGhEb21haW5CYXNpYyA6IFNv dXAuQXV0aERvbWFpbiB7Ci0tCQlbQ0NvZGUgKGhhc19jb25zdHJ1Y3RfZnVuY3Rpb24gPSBmYWxz ZSwgdHlwZSA9ICJTb3VwQXV0aERvbWFpbioiKV0KLS0JCXB1YmxpYyBBdXRoRG9tYWluQmFzaWMg KHN0cmluZyBvcHRuYW1lMSwgLi4uKTsKLS0JCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRfYXV0aF9j YWxsYmFjayAoU291cC5BdXRoRG9tYWluIGRvbWFpbiwgb3duZWQgU291cC5BdXRoRG9tYWluQmFz aWNBdXRoQ2FsbGJhY2sgY2FsbGJhY2spOwotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJs aWMgdm9pZCogYXV0aF9jYWxsYmFjayB7IGdldDsgc2V0OyB9Ci0tCQlbTm9BY2Nlc3Nvck1ldGhv ZF0KLS0JCXB1YmxpYyB2b2lkKiBhdXRoX2RhdGEgeyBnZXQ7IHNldDsgfQotLQl9Ci0tCVtDQ29k ZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIHR5cGVfaWQgPSAic291cF9h dXRoX2RvbWFpbl9kaWdlc3RfZ2V0X3R5cGUgKCkiKV0KLS0JcHVibGljIGNsYXNzIEF1dGhEb21h aW5EaWdlc3QgOiBTb3VwLkF1dGhEb21haW4gewotLQkJW0NDb2RlIChoYXNfY29uc3RydWN0X2Z1 bmN0aW9uID0gZmFsc2UsIHR5cGUgPSAiU291cEF1dGhEb21haW4qIildCi0tCQlwdWJsaWMgQXV0 aERvbWFpbkRpZ2VzdCAoc3RyaW5nIG9wdG5hbWUxLCAuLi4pOwotLQkJcHVibGljIHN0YXRpYyBz dHJpbmcgZW5jb2RlX3Bhc3N3b3JkIChzdHJpbmcgdXNlcm5hbWUsIHN0cmluZyByZWFsbSwgc3Ry aW5nIHBhc3N3b3JkKTsKLS0JCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRfYXV0aF9jYWxsYmFjayAo U291cC5BdXRoRG9tYWluIGRvbWFpbiwgb3duZWQgU291cC5BdXRoRG9tYWluRGlnZXN0QXV0aENh bGxiYWNrIGNhbGxiYWNrKTsKLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIHZvaWQq IGF1dGhfY2FsbGJhY2sgeyBnZXQ7IHNldDsgfQotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0tCQlw dWJsaWMgdm9pZCogYXV0aF9kYXRhIHsgZ2V0OyBzZXQ7IH0KLS0JfQotLQlbQ0NvZGUgKGNoZWFk ZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCB0eXBlX2lkID0gInNvdXBfYXV0aF9udGxt X2dldF90eXBlICgpIildCi0tCXB1YmxpYyBjbGFzcyBBdXRoTlRMTSA6IFNvdXAuQXV0aCB7Ci0t CQlbQ0NvZGUgKGhhc19jb25zdHJ1Y3RfZnVuY3Rpb24gPSBmYWxzZSldCi0tCQlwcm90ZWN0ZWQg QXV0aE5UTE0gKCk7Ci0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAv c291cC5oIiwgY29weV9mdW5jdGlvbiA9ICJnX2JveGVkX2NvcHkiLCBmcmVlX2Z1bmN0aW9uID0g ImdfYm94ZWRfZnJlZSIsIHR5cGVfaWQgPSAic291cF9idWZmZXJfZ2V0X3R5cGUgKCkiKV0KLS0J W0NvbXBhY3RdCi0tCXB1YmxpYyBjbGFzcyBCdWZmZXIgewotLQkJW0NDb2RlIChhcnJheV9sZW5n dGhfY25hbWUgPSAibGVuZ3RoIiwgYXJyYXlfbGVuZ3RoX3R5cGUgPSAiZ3NpemUiKV0KLS0JCXB1 YmxpYyB1aW50OFtdIGRhdGE7Ci0tCQlwdWJsaWMgc2l6ZV90IGxlbmd0aDsKLS0JCVtDQ29kZSAo aGFzX2NvbnN0cnVjdF9mdW5jdGlvbiA9IGZhbHNlKV0KLS0JCXB1YmxpYyBCdWZmZXIgKFNvdXAu TWVtb3J5VXNlIHVzZSwgW0NDb2RlIChhcnJheV9sZW5ndGhfY25hbWUgPSAibGVuZ3RoIiwgYXJy YXlfbGVuZ3RoX3BvcyA9IDIuMSwgYXJyYXlfbGVuZ3RoX3R5cGUgPSAiZ3NpemUiLCB0eXBlID0g Imdjb25zdHBvaW50ZXIiKV0gdWludDhbXSBkYXRhKTsKLS0JCXB1YmxpYyBTb3VwLkJ1ZmZlciBj b3B5ICgpOwotLQkJcHVibGljIHZvaWQgZnJlZSAoKTsKLS0JCXB1YmxpYyB2b2lkIGdldF9kYXRh IChbQ0NvZGUgKGFycmF5X2xlbmd0aF9jbmFtZSA9ICJsZW5ndGgiLCBhcnJheV9sZW5ndGhfcG9z ID0gMS4xLCBhcnJheV9sZW5ndGhfdHlwZSA9ICJnc2l6ZSIpXSBvdXQgdW5vd25lZCB1aW50OFtd IGRhdGEpOwotLQkJcHVibGljIHZvaWQqIGdldF9vd25lciAoKTsKLS0JCVtDQ29kZSAoaGFzX2Nv bnN0cnVjdF9mdW5jdGlvbiA9IGZhbHNlKV0KLS0JCXB1YmxpYyBCdWZmZXIuc3ViYnVmZmVyIChT b3VwLkJ1ZmZlciBwYXJlbnQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpOwotLQkJW0ND b2RlIChoYXNfY29uc3RydWN0X2Z1bmN0aW9uID0gZmFsc2UpXQotLQkJcHVibGljIEJ1ZmZlci50 YWtlIChbQ0NvZGUgKGFycmF5X2xlbmd0aF9jbmFtZSA9ICJsZW5ndGgiLCBhcnJheV9sZW5ndGhf cG9zID0gMS4xLCBhcnJheV9sZW5ndGhfdHlwZSA9ICJnc2l6ZSIpXSBvd25lZCB1aW50OFtdIGRh dGEpOwotLQkJW0NDb2RlIChoYXNfY29uc3RydWN0X2Z1bmN0aW9uID0gZmFsc2UpXQotLQkJcHVi bGljIEJ1ZmZlci53aXRoX293bmVyIChbQ0NvZGUgKGFycmF5X2xlbmd0aF9jbmFtZSA9ICJsZW5n dGgiLCBhcnJheV9sZW5ndGhfcG9zID0gMS41LCBhcnJheV9sZW5ndGhfdHlwZSA9ICJnc2l6ZSIs IHR5cGUgPSAiZ2NvbnN0cG9pbnRlciIpXSB1aW50OFtdIGRhdGEsIHZvaWQqIG93bmVyLCBHTGli LkRlc3Ryb3lOb3RpZnk/IG93bmVyX2Rub3RpZnkpOwotLQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9m aWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNvcHlfZnVuY3Rpb24gPSAiZ19ib3hlZF9jb3B5 IiwgZnJlZV9mdW5jdGlvbiA9ICJnX2JveGVkX2ZyZWUiLCB0eXBlX2lkID0gInNvdXBfYnl0ZV9h cnJheV9nZXRfdHlwZSAoKSIpXQotLQlbQ29tcGFjdF0KLS0JcHVibGljIGNsYXNzIEJ5dGVBcnJh eSB7Ci0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwg Y29weV9mdW5jdGlvbiA9ICJnX2JveGVkX2NvcHkiLCBmcmVlX2Z1bmN0aW9uID0gImdfYm94ZWRf ZnJlZSIsIHR5cGVfaWQgPSAic291cF9jbGllbnRfY29udGV4dF9nZXRfdHlwZSAoKSIpXQotLQlb Q29tcGFjdF0KLS0JcHVibGljIGNsYXNzIENsaWVudENvbnRleHQgewotLQkJcHVibGljIHVub3du ZWQgU291cC5BZGRyZXNzIGdldF9hZGRyZXNzICgpOwotLQkJcHVibGljIHVub3duZWQgU291cC5B dXRoRG9tYWluIGdldF9hdXRoX2RvbWFpbiAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIHN0cmluZyBn ZXRfYXV0aF91c2VyICgpOwotLQkJcHVibGljIHVub3duZWQgc3RyaW5nIGdldF9ob3N0ICgpOwot LQkJcHVibGljIHVub3duZWQgU291cC5Tb2NrZXQgZ2V0X3NvY2tldCAoKTsKLS0JfQotLQlbQ0Nv ZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiKV0KLS0JW0NvbXBhY3RdCi0t CXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uIHsKLS0JfQotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5h bWUgPSAibGlic291cC9zb3VwLmgiLCB0eXBlX2lkID0gInNvdXBfY29udGVudF9kZWNvZGVyX2dl dF90eXBlICgpIildCi0tCXB1YmxpYyBjbGFzcyBDb250ZW50RGVjb2RlciA6IEdMaWIuT2JqZWN0 LCBTb3VwLlNlc3Npb25GZWF0dXJlIHsKLS0JCVtDQ29kZSAoaGFzX2NvbnN0cnVjdF9mdW5jdGlv biA9IGZhbHNlKV0KLS0JCXByb3RlY3RlZCBDb250ZW50RGVjb2RlciAoKTsKLS0JfQotLQlbQ0Nv ZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCB0eXBlX2lkID0gInNvdXBf Y29udGVudF9zbmlmZmVyX2dldF90eXBlICgpIildCi0tCXB1YmxpYyBjbGFzcyBDb250ZW50U25p ZmZlciA6IEdMaWIuT2JqZWN0LCBTb3VwLlNlc3Npb25GZWF0dXJlIHsKLS0JCVtDQ29kZSAoaGFz X2NvbnN0cnVjdF9mdW5jdGlvbiA9IGZhbHNlKV0KLS0JCXB1YmxpYyBDb250ZW50U25pZmZlciAo KTsKLS0JCVtOb1dyYXBwZXJdCi0tCQlwdWJsaWMgdmlydHVhbCBzaXplX3QgZ2V0X2J1ZmZlcl9z aXplICgpOwotLQkJcHVibGljIHZpcnR1YWwgc3RyaW5nIHNuaWZmIChTb3VwLk1lc3NhZ2UgbXNn LCBTb3VwLkJ1ZmZlciBidWZmZXIsIG91dCBHTGliLkhhc2hUYWJsZTxzdHJpbmcsc3RyaW5nPj8g QHBhcmFtcyk7Ci0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291 cC5oIiwgY29weV9mdW5jdGlvbiA9ICJnX2JveGVkX2NvcHkiLCBmcmVlX2Z1bmN0aW9uID0gImdf Ym94ZWRfZnJlZSIsIHR5cGVfaWQgPSAic291cF9jb29raWVfZ2V0X3R5cGUgKCkiKV0KLS0JW0Nv bXBhY3RdCi0tCXB1YmxpYyBjbGFzcyBDb29raWUgewotLQkJcHVibGljIHdlYWsgc3RyaW5nIGRv bWFpbjsKLS0JCXB1YmxpYyB3ZWFrIFNvdXAuRGF0ZSBleHBpcmVzOwotLQkJcHVibGljIGJvb2wg aHR0cF9vbmx5OwotLQkJcHVibGljIHdlYWsgc3RyaW5nIG5hbWU7Ci0tCQlwdWJsaWMgd2VhayBz dHJpbmcgcGF0aDsKLS0JCXB1YmxpYyBib29sIHNlY3VyZTsKLS0JCXB1YmxpYyB3ZWFrIHN0cmlu ZyB2YWx1ZTsKLS0JCVtDQ29kZSAoaGFzX2NvbnN0cnVjdF9mdW5jdGlvbiA9IGZhbHNlKV0KLS0J CXB1YmxpYyBDb29raWUgKHN0cmluZyBuYW1lLCBzdHJpbmcgdmFsdWUsIHN0cmluZyBkb21haW4s IHN0cmluZyBwYXRoLCBpbnQgbWF4X2FnZSk7Ci0tCQlwdWJsaWMgYm9vbCBhcHBsaWVzX3RvX3Vy aSAoU291cC5VUkkgdXJpKTsKLS0JCXB1YmxpYyBTb3VwLkNvb2tpZSBjb3B5ICgpOwotLQkJcHVi bGljIGJvb2wgZG9tYWluX21hdGNoZXMgKHN0cmluZyBob3N0KTsKLS0JCXB1YmxpYyBib29sIGVx dWFsIChTb3VwLkNvb2tpZSBjb29raWUyKTsKLS0JCXB1YmxpYyB2b2lkIGZyZWUgKCk7Ci0tCQlw dWJsaWMgdW5vd25lZCBzdHJpbmcgZ2V0X2RvbWFpbiAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIFNv dXAuRGF0ZSBnZXRfZXhwaXJlcyAoKTsKLS0JCXB1YmxpYyBib29sIGdldF9odHRwX29ubHkgKCk7 Ci0tCQlwdWJsaWMgdW5vd25lZCBzdHJpbmcgZ2V0X25hbWUgKCk7Ci0tCQlwdWJsaWMgdW5vd25l ZCBzdHJpbmcgZ2V0X3BhdGggKCk7Ci0tCQlwdWJsaWMgYm9vbCBnZXRfc2VjdXJlICgpOwotLQkJ cHVibGljIHVub3duZWQgc3RyaW5nIGdldF92YWx1ZSAoKTsKLS0JCXB1YmxpYyBzdGF0aWMgU291 cC5Db29raWUgcGFyc2UgKHN0cmluZyBoZWFkZXIsIFNvdXAuVVJJIG9yaWdpbik7Ci0tCQlwdWJs aWMgdm9pZCBzZXRfZG9tYWluIChzdHJpbmcgZG9tYWluKTsKLS0JCXB1YmxpYyB2b2lkIHNldF9l eHBpcmVzIChTb3VwLkRhdGUgZXhwaXJlcyk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfaHR0cF9vbmx5 IChib29sIGh0dHBfb25seSk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfbWF4X2FnZSAoaW50IG1heF9h Z2UpOwotLQkJcHVibGljIHZvaWQgc2V0X25hbWUgKHN0cmluZyBuYW1lKTsKLS0JCXB1YmxpYyB2 b2lkIHNldF9wYXRoIChzdHJpbmcgcGF0aCk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfc2VjdXJlIChi b29sIHNlY3VyZSk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfdmFsdWUgKHN0cmluZyB2YWx1ZSk7Ci0t CQlwdWJsaWMgc3RyaW5nIHRvX2Nvb2tpZV9oZWFkZXIgKCk7Ci0tCQlwdWJsaWMgc3RyaW5nIHRv X3NldF9jb29raWVfaGVhZGVyICgpOwotLQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9 ICJsaWJzb3VwL3NvdXAuaCIsIHR5cGVfaWQgPSAic291cF9jb29raWVfamFyX2dldF90eXBlICgp IildCi0tCXB1YmxpYyBjbGFzcyBDb29raWVKYXIgOiBHTGliLk9iamVjdCwgU291cC5TZXNzaW9u RmVhdHVyZSB7Ci0tCQlbQ0NvZGUgKGhhc19jb25zdHJ1Y3RfZnVuY3Rpb24gPSBmYWxzZSldCi0t CQlwdWJsaWMgQ29va2llSmFyICgpOwotLQkJcHVibGljIHZvaWQgYWRkX2Nvb2tpZSAoU291cC5D b29raWUgY29va2llKTsKLS0JCXB1YmxpYyBHTGliLlNMaXN0PFNvdXAuQ29va2llPiBhbGxfY29v a2llcyAoKTsKLS0JCXB1YmxpYyB2b2lkIGRlbGV0ZV9jb29raWUgKFNvdXAuQ29va2llIGNvb2tp ZSk7Ci0tCQlwdWJsaWMgU291cC5Db29raWVKYXJBY2NlcHRQb2xpY3kgZ2V0X2FjY2VwdF9wb2xp Y3kgKCk7Ci0tCQlwdWJsaWMgc3RyaW5nIGdldF9jb29raWVzIChTb3VwLlVSSSB1cmksIGJvb2wg Zm9yX2h0dHApOwotLQkJcHVibGljIHZpcnR1YWwgdm9pZCBzYXZlICgpOwotLQkJcHVibGljIHZv aWQgc2V0X2FjY2VwdF9wb2xpY3kgKFNvdXAuQ29va2llSmFyQWNjZXB0UG9saWN5IHBvbGljeSk7 Ci0tCQlwdWJsaWMgdm9pZCBzZXRfY29va2llIChTb3VwLlVSSSB1cmksIHN0cmluZyBjb29raWUp OwotLQkJcHVibGljIHZvaWQgc2V0X2Nvb2tpZV93aXRoX2ZpcnN0X3BhcnR5IChTb3VwLlVSSSB1 cmksIFNvdXAuVVJJIGZpcnN0X3BhcnR5LCBzdHJpbmcgY29va2llKTsKLS0JCXB1YmxpYyBTb3Vw LkNvb2tpZUphckFjY2VwdFBvbGljeSBhY2NlcHRfcG9saWN5IHsgZ2V0OyBzZXQ7IH0KLS0JCVtO b0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIGJvb2wgcmVhZF9vbmx5IHsgZ2V0OyBjb25zdHJ1 Y3Q7IH0KLS0JCXB1YmxpYyB2aXJ0dWFsIHNpZ25hbCB2b2lkIGNoYW5nZWQgKFNvdXAuQ29va2ll IG9sZF9jb29raWUsIFNvdXAuQ29va2llIG5ld19jb29raWUpOwotLQl9Ci0tCVtDQ29kZSAoY2hl YWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIHR5cGVfaWQgPSAic291cF9jb29raWVf amFyX3RleHRfZ2V0X3R5cGUgKCkiKV0KLS0JcHVibGljIGNsYXNzIENvb2tpZUphclRleHQgOiBT b3VwLkNvb2tpZUphciwgU291cC5TZXNzaW9uRmVhdHVyZSB7Ci0tCQlbQ0NvZGUgKGhhc19jb25z dHJ1Y3RfZnVuY3Rpb24gPSBmYWxzZSwgdHlwZSA9ICJTb3VwQ29va2llSmFyKiIpXQotLQkJcHVi bGljIENvb2tpZUphclRleHQgKHN0cmluZyBmaWxlbmFtZSwgYm9vbCByZWFkX29ubHkpOwotLQkJ W05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMgc3RyaW5nIGZpbGVuYW1lIHsgb3duZWQgZ2V0 OyBjb25zdHJ1Y3Q7IH0KLS0JfQotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291 cC9zb3VwLmgiLCBjb3B5X2Z1bmN0aW9uID0gImdfYm94ZWRfY29weSIsIGZyZWVfZnVuY3Rpb24g PSAiZ19ib3hlZF9mcmVlIiwgdHlwZV9pZCA9ICJzb3VwX2RhdGVfZ2V0X3R5cGUgKCkiKV0KLS0J W0NvbXBhY3RdCi0tCXB1YmxpYyBjbGFzcyBEYXRlIHsKLS0JCXB1YmxpYyBpbnQgZGF5OwotLQkJ cHVibGljIGludCBob3VyOwotLQkJcHVibGljIGludCBtaW51dGU7Ci0tCQlwdWJsaWMgaW50IG1v bnRoOwotLQkJcHVibGljIGludCBvZmZzZXQ7Ci0tCQlwdWJsaWMgaW50IHNlY29uZDsKLS0JCXB1 YmxpYyBib29sIHV0YzsKLS0JCXB1YmxpYyBpbnQgeWVhcjsKLS0JCVtDQ29kZSAoaGFzX2NvbnN0 cnVjdF9mdW5jdGlvbiA9IGZhbHNlKV0KLS0JCXB1YmxpYyBEYXRlIChpbnQgeWVhciwgaW50IG1v bnRoLCBpbnQgZGF5LCBpbnQgaG91ciwgaW50IG1pbnV0ZSwgaW50IHNlY29uZCk7Ci0tCQlwdWJs aWMgU291cC5EYXRlIGNvcHkgKCk7Ci0tCQlwdWJsaWMgdm9pZCBmcmVlICgpOwotLQkJW0NDb2Rl IChoYXNfY29uc3RydWN0X2Z1bmN0aW9uID0gZmFsc2UpXQotLQkJcHVibGljIERhdGUuZnJvbV9u b3cgKGludCBvZmZzZXRfc2Vjb25kcyk7Ci0tCQlbQ0NvZGUgKGhhc19jb25zdHJ1Y3RfZnVuY3Rp b24gPSBmYWxzZSldCi0tCQlwdWJsaWMgRGF0ZS5mcm9tX3N0cmluZyAoc3RyaW5nIGRhdGVfc3Ry aW5nKTsKLS0JCVtDQ29kZSAoaGFzX2NvbnN0cnVjdF9mdW5jdGlvbiA9IGZhbHNlKV0KLS0JCXB1 YmxpYyBEYXRlLmZyb21fdGltZV90IChbQ0NvZGUgKHR5cGUgPSAidGltZV90IildIHRpbWVfdCB3 aGVuKTsKLS0JCXB1YmxpYyBpbnQgZ2V0X2RheSAoKTsKLS0JCXB1YmxpYyBpbnQgZ2V0X2hvdXIg KCk7Ci0tCQlwdWJsaWMgaW50IGdldF9taW51dGUgKCk7Ci0tCQlwdWJsaWMgaW50IGdldF9tb250 aCAoKTsKLS0JCXB1YmxpYyBpbnQgZ2V0X29mZnNldCAoKTsKLS0JCXB1YmxpYyBpbnQgZ2V0X3Nl Y29uZCAoKTsKLS0JCXB1YmxpYyBpbnQgZ2V0X3V0YyAoKTsKLS0JCXB1YmxpYyBpbnQgZ2V0X3ll YXIgKCk7Ci0tCQlwdWJsaWMgYm9vbCBpc19wYXN0ICgpOwotLQkJcHVibGljIHN0cmluZyB0b19z dHJpbmcgKFNvdXAuRGF0ZUZvcm1hdCBmb3JtYXQpOwotLQkJcHVibGljIHRpbWVfdCB0b190aW1l X3QgKCk7Ci0tCQlwdWJsaWMgR0xpYi5UaW1lVmFsIHRvX3RpbWV2YWwgKCk7Ci0tCX0KLS0JW0ND b2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgdHlwZV9pZCA9ICJzb3Vw X2xvZ2dlcl9nZXRfdHlwZSAoKSIpXQotLQlwdWJsaWMgY2xhc3MgTG9nZ2VyIDogR0xpYi5PYmpl Y3QsIFNvdXAuU2Vzc2lvbkZlYXR1cmUgewotLQkJW0NDb2RlIChoYXNfY29uc3RydWN0X2Z1bmN0 aW9uID0gZmFsc2UpXQotLQkJcHVibGljIExvZ2dlciAoU291cC5Mb2dnZXJMb2dMZXZlbCBsZXZl bCwgaW50IG1heF9ib2R5X3NpemUpOwotLQkJcHVibGljIHZvaWQgc2V0X3ByaW50ZXIgKG93bmVk IFNvdXAuTG9nZ2VyUHJpbnRlciBwcmludGVyKTsKLS0JCXB1YmxpYyB2b2lkIHNldF9yZXF1ZXN0 X2ZpbHRlciAob3duZWQgU291cC5Mb2dnZXJGaWx0ZXIgcmVxdWVzdF9maWx0ZXIpOwotLQkJcHVi bGljIHZvaWQgc2V0X3Jlc3BvbnNlX2ZpbHRlciAob3duZWQgU291cC5Mb2dnZXJGaWx0ZXIgcmVz cG9uc2VfZmlsdGVyKTsKLS0JfQotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291 cC9zb3VwLmgiLCB0eXBlX2lkID0gInNvdXBfbWVzc2FnZV9nZXRfdHlwZSAoKSIpXQotLQlwdWJs aWMgY2xhc3MgTWVzc2FnZSA6IEdMaWIuT2JqZWN0IHsKLS0JCXB1YmxpYyB3ZWFrIFNvdXAuTWVz c2FnZUJvZHkgcmVxdWVzdF9ib2R5OwotLQkJcHVibGljIHdlYWsgU291cC5NZXNzYWdlSGVhZGVy cyByZXF1ZXN0X2hlYWRlcnM7Ci0tCQlwdWJsaWMgd2VhayBTb3VwLk1lc3NhZ2VCb2R5IHJlc3Bv bnNlX2JvZHk7Ci0tCQlwdWJsaWMgd2VhayBTb3VwLk1lc3NhZ2VIZWFkZXJzIHJlc3BvbnNlX2hl YWRlcnM7Ci0tCQlbQ0NvZGUgKGhhc19jb25zdHJ1Y3RfZnVuY3Rpb24gPSBmYWxzZSldCi0tCQlw dWJsaWMgTWVzc2FnZSAoc3RyaW5nIG1ldGhvZCwgc3RyaW5nIHVyaV9zdHJpbmcpOwotLQkJcHVi bGljIHVpbnQgYWRkX2hlYWRlcl9oYW5kbGVyIChzdHJpbmcgQHNpZ25hbCwgc3RyaW5nIGhlYWRl ciwgR0xpYi5DYWxsYmFjayBjYWxsYmFjayk7Ci0tCQlwdWJsaWMgdWludCBhZGRfc3RhdHVzX2Nv ZGVfaGFuZGxlciAoc3RyaW5nIEBzaWduYWwsIHVpbnQgc3RhdHVzX2NvZGUsIEdMaWIuQ2FsbGJh Y2sgY2FsbGJhY2spOwotLQkJcHVibGljIHZvaWQgZGlzYWJsZV9mZWF0dXJlIChHTGliLlR5cGUg ZmVhdHVyZV90eXBlKTsKLS0JCVtDQ29kZSAoaGFzX2NvbnN0cnVjdF9mdW5jdGlvbiA9IGZhbHNl KV0KLS0JCXB1YmxpYyBNZXNzYWdlLmZyb21fdXJpIChzdHJpbmcgbWV0aG9kLCBTb3VwLlVSSSB1 cmkpOwotLQkJcHVibGljIHVub3duZWQgU291cC5BZGRyZXNzIGdldF9hZGRyZXNzICgpOwotLQkJ cHVibGljIHVub3duZWQgU291cC5VUkkgZ2V0X2ZpcnN0X3BhcnR5ICgpOwotLQkJcHVibGljIFNv dXAuTWVzc2FnZUZsYWdzIGdldF9mbGFncyAoKTsKLS0JCXB1YmxpYyBTb3VwLkhUVFBWZXJzaW9u IGdldF9odHRwX3ZlcnNpb24gKCk7Ci0tCQlwdWJsaWMgYm9vbCBnZXRfaHR0cHNfc3RhdHVzIChv dXQgdW5vd25lZCBHTGliLlRsc0NlcnRpZmljYXRlIGNlcnRpZmljYXRlLCBvdXQgR0xpYi5UbHND ZXJ0aWZpY2F0ZUZsYWdzIGVycm9ycyk7Ci0tCQlwdWJsaWMgdW5vd25lZCBTb3VwLlVSSSBnZXRf dXJpICgpOwotLQkJcHVibGljIGJvb2wgaXNfa2VlcGFsaXZlICgpOwotLQkJcHVibGljIHZvaWQg c2V0X2NodW5rX2FsbG9jYXRvciAob3duZWQgU291cC5DaHVua0FsbG9jYXRvciBhbGxvY2F0b3Ip OwotLQkJcHVibGljIHZvaWQgc2V0X2ZpcnN0X3BhcnR5IChTb3VwLlVSSSBmaXJzdF9wYXJ0eSk7 Ci0tCQlwdWJsaWMgdm9pZCBzZXRfZmxhZ3MgKFNvdXAuTWVzc2FnZUZsYWdzIGZsYWdzKTsKLS0J CXB1YmxpYyB2b2lkIHNldF9odHRwX3ZlcnNpb24gKFNvdXAuSFRUUFZlcnNpb24gdmVyc2lvbik7 Ci0tCQlwdWJsaWMgdm9pZCBzZXRfcmVkaXJlY3QgKHVpbnQgc3RhdHVzX2NvZGUsIHN0cmluZyBy ZWRpcmVjdF91cmkpOwotLQkJcHVibGljIHZvaWQgc2V0X3JlcXVlc3QgKHN0cmluZyBjb250ZW50 X3R5cGUsIFNvdXAuTWVtb3J5VXNlIHJlcV91c2UsIFtDQ29kZSAoYXJyYXlfbGVuZ3RoX2NuYW1l ID0gInJlcV9sZW5ndGgiLCBhcnJheV9sZW5ndGhfcG9zID0gMy4xLCBhcnJheV9sZW5ndGhfdHlw ZSA9ICJnc2l6ZSIsIHR5cGUgPSAiY2hhcioiKV0gdWludDhbXSByZXFfYm9keSk7Ci0tCQlwdWJs aWMgdm9pZCBzZXRfcmVzcG9uc2UgKHN0cmluZz8gY29udGVudF90eXBlLCBTb3VwLk1lbW9yeVVz ZSByZXNwX3VzZSwgW0NDb2RlIChhcnJheV9sZW5ndGhfY25hbWUgPSAicmVzcF9sZW5ndGgiLCBh cnJheV9sZW5ndGhfcG9zID0gMy4xLCBhcnJheV9sZW5ndGhfdHlwZSA9ICJnc2l6ZSIpXSB1aW50 OFtdIHJlc3BfYm9keSk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfc3RhdHVzICh1aW50IHN0YXR1c19j b2RlKTsKLS0JCXB1YmxpYyB2b2lkIHNldF9zdGF0dXNfZnVsbCAodWludCBzdGF0dXNfY29kZSwg c3RyaW5nIHJlYXNvbl9waHJhc2UpOwotLQkJcHVibGljIHZvaWQgc2V0X3VyaSAoU291cC5VUkkg dXJpKTsKLS0JCXB1YmxpYyBTb3VwLlVSSSBmaXJzdF9wYXJ0eSB7IGdldDsgc2V0OyB9Ci0tCQlw dWJsaWMgU291cC5NZXNzYWdlRmxhZ3MgZmxhZ3MgeyBnZXQ7IHNldDsgfQotLQkJcHVibGljIFNv dXAuSFRUUFZlcnNpb24gaHR0cF92ZXJzaW9uIHsgZ2V0OyBzZXQ7IH0KLS0JCVtOb0FjY2Vzc29y TWV0aG9kXQotLQkJcHVibGljIHN0cmluZyBtZXRob2QgeyBvd25lZCBnZXQ7IHNldDsgfQotLQkJ W05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMgc3RyaW5nIHJlYXNvbl9waHJhc2UgeyBvd25l ZCBnZXQ7IHNldDsgfQotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMgYm9vbCBzZXJ2 ZXJfc2lkZSB7IGdldDsgY29uc3RydWN0OyB9Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1 YmxpYyB1aW50IHN0YXR1c19jb2RlIHsgZ2V0OyBzZXQ7IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9k XQotLQkJcHVibGljIEdMaWIuVGxzQ2VydGlmaWNhdGUgdGxzX2NlcnRpZmljYXRlIHsgb3duZWQg Z2V0OyBzZXQ7IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIEdMaWIuVGxzQ2Vy dGlmaWNhdGVGbGFncyB0bHNfZXJyb3JzIHsgZ2V0OyBzZXQ7IH0KLS0JCXB1YmxpYyBTb3VwLlVS SSB1cmkgeyBnZXQ7IHNldDsgfQotLQkJW0hhc0VtaXR0ZXJdCi0tCQlwdWJsaWMgc2lnbmFsIHZv aWQgY29udGVudF9zbmlmZmVkIChzdHJpbmcgY29udGVudF90eXBlLCBHTGliLkhhc2hUYWJsZTxz dHJpbmcsc3RyaW5nPiBAcGFyYW1zKTsKLS0JCVtIYXNFbWl0dGVyXQotLQkJcHVibGljIHZpcnR1 YWwgc2lnbmFsIHZvaWQgZmluaXNoZWQgKCk7Ci0tCQlbSGFzRW1pdHRlcl0KLS0JCXB1YmxpYyB2 aXJ0dWFsIHNpZ25hbCB2b2lkIGdvdF9ib2R5ICgpOwotLQkJW0hhc0VtaXR0ZXJdCi0tCQlwdWJs aWMgdmlydHVhbCBzaWduYWwgdm9pZCBnb3RfY2h1bmsgKFNvdXAuQnVmZmVyIGNodW5rKTsKLS0J CVtIYXNFbWl0dGVyXQotLQkJcHVibGljIHZpcnR1YWwgc2lnbmFsIHZvaWQgZ290X2hlYWRlcnMg KCk7Ci0tCQlbSGFzRW1pdHRlcl0KLS0JCXB1YmxpYyB2aXJ0dWFsIHNpZ25hbCB2b2lkIGdvdF9p bmZvcm1hdGlvbmFsICgpOwotLQkJcHVibGljIHNpZ25hbCB2b2lkIG5ldHdvcmtfZXZlbnQgKEdM aWIuU29ja2V0Q2xpZW50RXZlbnQgZXZlbnQsIEdMaWIuSU9TdHJlYW0gY29ubmVjdGlvbik7Ci0t CQlbSGFzRW1pdHRlcl0KLS0JCXB1YmxpYyB2aXJ0dWFsIHNpZ25hbCB2b2lkIHJlc3RhcnRlZCAo KTsKLS0JCVtIYXNFbWl0dGVyXQotLQkJcHVibGljIHZpcnR1YWwgc2lnbmFsIHZvaWQgd3JvdGVf Ym9keSAoKTsKLS0JCVtIYXNFbWl0dGVyXQotLQkJcHVibGljIHNpZ25hbCB2b2lkIHdyb3RlX2Jv ZHlfZGF0YSAoU291cC5CdWZmZXIgY2h1bmspOwotLQkJW0hhc0VtaXR0ZXJdCi0tCQlwdWJsaWMg dmlydHVhbCBzaWduYWwgdm9pZCB3cm90ZV9jaHVuayAoKTsKLS0JCVtIYXNFbWl0dGVyXQotLQkJ cHVibGljIHZpcnR1YWwgc2lnbmFsIHZvaWQgd3JvdGVfaGVhZGVycyAoKTsKLS0JCVtIYXNFbWl0 dGVyXQotLQkJcHVibGljIHZpcnR1YWwgc2lnbmFsIHZvaWQgd3JvdGVfaW5mb3JtYXRpb25hbCAo KTsKLS0JfQotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBj b3B5X2Z1bmN0aW9uID0gImdfYm94ZWRfY29weSIsIGZyZWVfZnVuY3Rpb24gPSAiZ19ib3hlZF9m cmVlIiwgdHlwZV9pZCA9ICJzb3VwX21lc3NhZ2VfYm9keV9nZXRfdHlwZSAoKSIpXQotLQlbQ29t cGFjdF0KLS0JcHVibGljIGNsYXNzIE1lc3NhZ2VCb2R5IHsKLS0JCVtDQ29kZSAoYXJyYXlfbGVu Z3RoX2NuYW1lID0gImxlbmd0aCIsIGFycmF5X2xlbmd0aF90eXBlID0gImdpbnQ2NCIpXQotLQkJ cHVibGljIHVpbnQ4W10gZGF0YTsKLS0JCXB1YmxpYyBpbnQ2NCBsZW5ndGg7Ci0tCQlbQ0NvZGUg KGhhc19jb25zdHJ1Y3RfZnVuY3Rpb24gPSBmYWxzZSldCi0tCQlwdWJsaWMgTWVzc2FnZUJvZHkg KCk7Ci0tCQlwdWJsaWMgdm9pZCBhcHBlbmQgKFNvdXAuTWVtb3J5VXNlIHVzZSwgW0NDb2RlIChh cnJheV9sZW5ndGhfY25hbWUgPSAibGVuZ3RoIiwgYXJyYXlfbGVuZ3RoX3BvcyA9IDIuMSwgYXJy YXlfbGVuZ3RoX3R5cGUgPSAiZ3NpemUiKV0gdWludDhbXSBkYXRhKTsKLS0JCXB1YmxpYyB2b2lk IGFwcGVuZF9idWZmZXIgKFNvdXAuQnVmZmVyIGJ1ZmZlcik7Ci0tCQlwdWJsaWMgdm9pZCBhcHBl bmRfdGFrZSAoW0NDb2RlIChhcnJheV9sZW5ndGhfY25hbWUgPSAibGVuZ3RoIiwgYXJyYXlfbGVu Z3RoX3BvcyA9IDEuMSwgYXJyYXlfbGVuZ3RoX3R5cGUgPSAiZ3NpemUiKV0gb3duZWQgdWludDhb XSBkYXRhKTsKLS0JCXB1YmxpYyB2b2lkIGNvbXBsZXRlICgpOwotLQkJcHVibGljIFNvdXAuQnVm ZmVyIGZsYXR0ZW4gKCk7Ci0tCQlwdWJsaWMgdm9pZCBmcmVlICgpOwotLQkJcHVibGljIGJvb2wg Z2V0X2FjY3VtdWxhdGUgKCk7Ci0tCQlwdWJsaWMgU291cC5CdWZmZXIgZ2V0X2NodW5rIChpbnQ2 NCBvZmZzZXQpOwotLQkJcHVibGljIHZvaWQgZ290X2NodW5rIChTb3VwLkJ1ZmZlciBjaHVuayk7 Ci0tCQlwdWJsaWMgdm9pZCBzZXRfYWNjdW11bGF0ZSAoYm9vbCBhY2N1bXVsYXRlKTsKLS0JCXB1 YmxpYyB2b2lkIHRydW5jYXRlICgpOwotLQkJcHVibGljIHZvaWQgd3JvdGVfY2h1bmsgKFNvdXAu QnVmZmVyIGNodW5rKTsKLS0JfQotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291 cC9zb3VwLmgiLCBjb3B5X2Z1bmN0aW9uID0gImdfYm94ZWRfY29weSIsIGZyZWVfZnVuY3Rpb24g PSAiZ19ib3hlZF9mcmVlIiwgdHlwZV9pZCA9ICJzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfdHlw ZSAoKSIpXQotLQlbQ29tcGFjdF0KLS0JcHVibGljIGNsYXNzIE1lc3NhZ2VIZWFkZXJzIHsKLS0J CVtDQ29kZSAoaGFzX2NvbnN0cnVjdF9mdW5jdGlvbiA9IGZhbHNlKV0KLS0JCXB1YmxpYyBNZXNz YWdlSGVhZGVycyAoU291cC5NZXNzYWdlSGVhZGVyc1R5cGUgdHlwZSk7Ci0tCQlwdWJsaWMgdm9p ZCBhcHBlbmQgKHN0cmluZyBuYW1lLCBzdHJpbmcgdmFsdWUpOwotLQkJcHVibGljIHZvaWQgY2xl YW5fY29ubmVjdGlvbl9oZWFkZXJzICgpOwotLQkJcHVibGljIHZvaWQgY2xlYXIgKCk7Ci0tCQlw dWJsaWMgdm9pZCBAZm9yZWFjaCAoU291cC5NZXNzYWdlSGVhZGVyc0ZvcmVhY2hGdW5jIGZ1bmMp OwotLQkJcHVibGljIHZvaWQgZnJlZSAoKTsKLS0JCXB1YmxpYyB2b2lkIGZyZWVfcmFuZ2VzIChT b3VwLlJhbmdlIHJhbmdlcyk7Ci0tCQlwdWJsaWMgdW5vd25lZCBzdHJpbmcgQGdldCAoc3RyaW5n IG5hbWUpOwotLQkJcHVibGljIGJvb2wgZ2V0X2NvbnRlbnRfZGlzcG9zaXRpb24gKG91dCBzdHJp bmcgZGlzcG9zaXRpb24sIG91dCBHTGliLkhhc2hUYWJsZTxzdHJpbmcsc3RyaW5nPiBAcGFyYW1z KTsKLS0JCXB1YmxpYyBpbnQ2NCBnZXRfY29udGVudF9sZW5ndGggKCk7Ci0tCQlwdWJsaWMgYm9v bCBnZXRfY29udGVudF9yYW5nZSAoaW50NjQgc3RhcnQsIGludDY0IGVuZCwgaW50NjQgdG90YWxf bGVuZ3RoKTsKLS0JCXB1YmxpYyB1bm93bmVkIHN0cmluZyBnZXRfY29udGVudF90eXBlIChvdXQg R0xpYi5IYXNoVGFibGU8c3RyaW5nLHN0cmluZz4gQHBhcmFtcyk7Ci0tCQlwdWJsaWMgU291cC5F bmNvZGluZyBnZXRfZW5jb2RpbmcgKCk7Ci0tCQlwdWJsaWMgU291cC5FeHBlY3RhdGlvbiBnZXRf ZXhwZWN0YXRpb25zICgpOwotLQkJcHVibGljIHVub3duZWQgc3RyaW5nIGdldF9saXN0IChzdHJp bmcgbmFtZSk7Ci0tCQlwdWJsaWMgdW5vd25lZCBzdHJpbmcgZ2V0X29uZSAoc3RyaW5nIG5hbWUp OwotLQkJcHVibGljIGJvb2wgZ2V0X3JhbmdlcyAoaW50NjQgdG90YWxfbGVuZ3RoLCBbQ0NvZGUg KGFycmF5X2xlbmd0aF9jbmFtZSA9ICJsZW5ndGgiLCBhcnJheV9sZW5ndGhfcG9zID0gMi4xLCB0 eXBlID0gIlNvdXBSYW5nZSoqIildIG91dCBTb3VwLlJhbmdlW10gcmFuZ2VzKTsKLS0JCXB1Ymxp YyB2b2lkIHJlbW92ZSAoc3RyaW5nIG5hbWUpOwotLQkJcHVibGljIHZvaWQgcmVwbGFjZSAoc3Ry aW5nIG5hbWUsIHN0cmluZyB2YWx1ZSk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfY29udGVudF9kaXNw b3NpdGlvbiAoc3RyaW5nIGRpc3Bvc2l0aW9uLCBHTGliLkhhc2hUYWJsZTxzdHJpbmcsc3RyaW5n Pj8gQHBhcmFtcyk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfY29udGVudF9sZW5ndGggKGludDY0IGNv bnRlbnRfbGVuZ3RoKTsKLS0JCXB1YmxpYyB2b2lkIHNldF9jb250ZW50X3JhbmdlIChpbnQ2NCBz dGFydCwgaW50NjQgZW5kLCBpbnQ2NCB0b3RhbF9sZW5ndGgpOwotLQkJcHVibGljIHZvaWQgc2V0 X2NvbnRlbnRfdHlwZSAoc3RyaW5nIGNvbnRlbnRfdHlwZSwgR0xpYi5IYXNoVGFibGU8c3RyaW5n LHN0cmluZz4/IEBwYXJhbXMpOwotLQkJcHVibGljIHZvaWQgc2V0X2VuY29kaW5nIChTb3VwLkVu Y29kaW5nIGVuY29kaW5nKTsKLS0JCXB1YmxpYyB2b2lkIHNldF9leHBlY3RhdGlvbnMgKFNvdXAu RXhwZWN0YXRpb24gZXhwZWN0YXRpb25zKTsKLS0JCXB1YmxpYyB2b2lkIHNldF9yYW5nZSAoaW50 NjQgc3RhcnQsIGludDY0IGVuZCk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfcmFuZ2VzIChTb3VwLlJh bmdlIHJhbmdlcywgaW50IGxlbmd0aCk7Ci0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1l ID0gImxpYnNvdXAvc291cC5oIildCi0tCVtDb21wYWN0XQotLQlwdWJsaWMgY2xhc3MgTWVzc2Fn ZVF1ZXVlIHsKLS0JfQotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3Vw LmgiKV0KLS0JW0NvbXBhY3RdCi0tCXB1YmxpYyBjbGFzcyBNZXNzYWdlUXVldWVJdGVtIHsKLS0J fQotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBjb3B5X2Z1 bmN0aW9uID0gImdfYm94ZWRfY29weSIsIGZyZWVfZnVuY3Rpb24gPSAiZ19ib3hlZF9mcmVlIiwg dHlwZV9pZCA9ICJzb3VwX211bHRpcGFydF9nZXRfdHlwZSAoKSIpXQotLQlbQ29tcGFjdF0KLS0J cHVibGljIGNsYXNzIE11bHRpcGFydCB7Ci0tCQlbQ0NvZGUgKGhhc19jb25zdHJ1Y3RfZnVuY3Rp b24gPSBmYWxzZSldCi0tCQlwdWJsaWMgTXVsdGlwYXJ0IChzdHJpbmcgbWltZV90eXBlKTsKLS0J CXB1YmxpYyB2b2lkIGFwcGVuZF9mb3JtX2ZpbGUgKHN0cmluZyBjb250cm9sX25hbWUsIHN0cmlu ZyBmaWxlbmFtZSwgc3RyaW5nIGNvbnRlbnRfdHlwZSwgU291cC5CdWZmZXIgYm9keSk7Ci0tCQlw dWJsaWMgdm9pZCBhcHBlbmRfZm9ybV9zdHJpbmcgKHN0cmluZyBjb250cm9sX25hbWUsIHN0cmlu ZyBkYXRhKTsKLS0JCXB1YmxpYyB2b2lkIGFwcGVuZF9wYXJ0IChTb3VwLk1lc3NhZ2VIZWFkZXJz IGhlYWRlcnMsIFNvdXAuQnVmZmVyIGJvZHkpOwotLQkJcHVibGljIHZvaWQgZnJlZSAoKTsKLS0J CVtDQ29kZSAoaGFzX2NvbnN0cnVjdF9mdW5jdGlvbiA9IGZhbHNlKV0KLS0JCXB1YmxpYyBNdWx0 aXBhcnQuZnJvbV9tZXNzYWdlIChTb3VwLk1lc3NhZ2VIZWFkZXJzIGhlYWRlcnMsIFNvdXAuTWVz c2FnZUJvZHkgYm9keSk7Ci0tCQlwdWJsaWMgaW50IGdldF9sZW5ndGggKCk7Ci0tCQlwdWJsaWMg Ym9vbCBnZXRfcGFydCAoaW50IHBhcnQsIG91dCB1bm93bmVkIFNvdXAuTWVzc2FnZUhlYWRlcnMg aGVhZGVycywgb3V0IHVub3duZWQgU291cC5CdWZmZXIgYm9keSk7Ci0tCQlwdWJsaWMgdm9pZCB0 b19tZXNzYWdlIChTb3VwLk1lc3NhZ2VIZWFkZXJzIGRlc3RfaGVhZGVycywgU291cC5NZXNzYWdl Qm9keSBkZXN0X2JvZHkpOwotLQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJz b3VwL3NvdXAuaCIsIHR5cGVfaWQgPSAic291cF9wcm94eV9yZXNvbHZlcl9kZWZhdWx0X2dldF90 eXBlICgpIildCi0tCXB1YmxpYyBjbGFzcyBQcm94eVJlc29sdmVyRGVmYXVsdCA6IEdMaWIuT2Jq ZWN0LCBTb3VwLlByb3h5VVJJUmVzb2x2ZXIsIFNvdXAuU2Vzc2lvbkZlYXR1cmUgewotLQkJW0ND b2RlIChoYXNfY29uc3RydWN0X2Z1bmN0aW9uID0gZmFsc2UpXQotLQkJcHJvdGVjdGVkIFByb3h5 UmVzb2x2ZXJEZWZhdWx0ICgpOwotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMgR0xp Yi5Qcm94eVJlc29sdmVyIGdwcm94eV9yZXNvbHZlciB7IHNldDsgfQotLQl9Ci0tCVtDQ29kZSAo Y2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAtcmVxdWVzdC5oIiwgdHlwZV9pZCA9ICJz b3VwX3JlcXVlc3RfZ2V0X3R5cGUgKCkiKV0KLS0JcHVibGljIGNsYXNzIFJlcXVlc3QgOiBHTGli Lk9iamVjdCB7Ci0tCQlwdWJsaWMgY2xhc3Mgc3RyaW5nW10gc2NoZW1lczsKLS0KLS0JCVtDQ29k ZSAoaGFzX2NvbnN0cnVjdF9mdW5jdGlvbiA9IGZhbHNlKV0KLS0JCXByb3RlY3RlZCBSZXF1ZXN0 ICgpOwotLQotLQkJcHVibGljIHZpcnR1YWwgYm9vbCBjaGVja191cmkoU291cC5VUkkgdXJpKSB0 aHJvd3MgR0xpYi5FcnJvcjsKLS0JCXB1YmxpYyB2aXJ0dWFsIEdMaWIuSW5wdXRTdHJlYW0/IHNl bmQoR0xpYi5DYW5jZWxsYWJsZT8gY2FuY2VsbGFibGUpIHRocm93cyBHTGliLkVycm9yOwotLQkJ cHVibGljIHZpcnR1YWwgdm9pZCBzZW5kX2FzeW5jKEdMaWIuQ2FuY2VsbGFibGU/IGNhbmNlbGxh YmxlLCBHTGliLkFzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaykgdGhyb3dzIEdMaWIuRXJyb3I7 Ci0tCQlwdWJsaWMgdmlydHVhbCBHTGliLklucHV0U3RyZWFtPyBzZW5kX2ZpbmlzaChHTGliLkFz eW5jUmVzdWx0IHJlc3VsdCkgdGhyb3dzIEdMaWIuRXJyb3I7Ci0tCQlwdWJsaWMgdmlydHVhbCBp bnQ2NCBnZXRfY29udGVudF9sZW5ndGgoKTsKLS0JCXB1YmxpYyB2aXJ0dWFsIHVub3duZWQgc3Ry aW5nPyBnZXRfY29udGVudF90eXBlKCk7Ci0tCi0tCQlwdWJsaWMgU291cC5TZXNzaW9uIHNlc3Np b24geyBnZXQ7IH0KLS0JCXB1YmxpYyBTb3VwLlVSSSB1cmkgeyBnZXQ7IH0KLS0JfQotLQlbQ0Nv ZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLXJlcXVlc3Rlci5oIiwgdHlwZV9p ZCA9ICJzb3VwX3JlcXVlc3Rlcl9nZXRfdHlwZSAoKSIpXQotLQlwdWJsaWMgY2xhc3MgUmVxdWVz dGVyIDogR0xpYi5PYmplY3QsIFNvdXAuU2Vzc2lvbkZlYXR1cmUgewotLQkJcHVibGljIFJlcXVl c3RlcigpOwotLQotLQkJcHVibGljIFNvdXAuUmVxdWVzdCByZXF1ZXN0KHN0cmluZyB1cmlfc3Ry aW5nKSB0aHJvd3MgR0xpYi5FcnJvcjsKLS0JCXB1YmxpYyBTb3VwLlJlcXVlc3QgcmVxdWVzdF91 cmkoU291cC5VUkkgdXJpKSB0aHJvd3MgR0xpYi5FcnJvcjsKLS0JfQotLQlbQ0NvZGUgKGNoZWFk ZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCB0eXBlX2lkID0gInNvdXBfc2VydmVyX2dl dF90eXBlICgpIildCi0tCXB1YmxpYyBjbGFzcyBTZXJ2ZXIgOiBHTGliLk9iamVjdCB7Ci0tCQlb Q0NvZGUgKGhhc19jb25zdHJ1Y3RfZnVuY3Rpb24gPSBmYWxzZSldCi0tCQlwdWJsaWMgU2VydmVy IChzdHJpbmcgb3B0bmFtZTEsIC4uLik7Ci0tCQlwdWJsaWMgdm9pZCBhZGRfYXV0aF9kb21haW4g KFNvdXAuQXV0aERvbWFpbiBhdXRoX2RvbWFpbik7Ci0tCQlwdWJsaWMgdm9pZCBhZGRfaGFuZGxl ciAoc3RyaW5nPyBwYXRoLCBvd25lZCBTb3VwLlNlcnZlckNhbGxiYWNrIGNhbGxiYWNrKTsKLS0J CXB1YmxpYyB2b2lkIGRpc2Nvbm5lY3QgKCk7Ci0tCQlwdWJsaWMgdW5vd25lZCBHTGliLk1haW5D b250ZXh0IGdldF9hc3luY19jb250ZXh0ICgpOwotLQkJcHVibGljIHVub3duZWQgU291cC5Tb2Nr ZXQgZ2V0X2xpc3RlbmVyICgpOwotLQkJcHVibGljIHVpbnQgZ2V0X3BvcnQgKCk7Ci0tCQlwdWJs aWMgYm9vbCBpc19odHRwcyAoKTsKLS0JCXB1YmxpYyB2b2lkIHBhdXNlX21lc3NhZ2UgKFNvdXAu TWVzc2FnZSBtc2cpOwotLQkJcHVibGljIHZvaWQgcXVpdCAoKTsKLS0JCXB1YmxpYyB2b2lkIHJl bW92ZV9hdXRoX2RvbWFpbiAoU291cC5BdXRoRG9tYWluIGF1dGhfZG9tYWluKTsKLS0JCXB1Ymxp YyB2b2lkIHJlbW92ZV9oYW5kbGVyIChzdHJpbmcgcGF0aCk7Ci0tCQlwdWJsaWMgdm9pZCBydW4g KCk7Ci0tCQlwdWJsaWMgdm9pZCBydW5fYXN5bmMgKCk7Ci0tCQlwdWJsaWMgdm9pZCB1bnBhdXNl X21lc3NhZ2UgKFNvdXAuTWVzc2FnZSBtc2cpOwotLQkJcHVibGljIEdMaWIuTWFpbkNvbnRleHQg YXN5bmNfY29udGV4dCB7IGdldDsgb3duZWQgY29uc3RydWN0OyB9Ci0tCQlbTm9BY2Nlc3Nvck1l dGhvZF0KLS0JCXB1YmxpYyBTb3VwLkFkZHJlc3MgQGludGVyZmFjZSB7IG93bmVkIGdldDsgY29u c3RydWN0OyB9Ci0tCQlwdWJsaWMgdWludCBwb3J0IHsgZ2V0OyBjb25zdHJ1Y3Q7IH0KLS0JCVtO b0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIGJvb2wgcmF3X3BhdGhzIHsgZ2V0OyBjb25zdHJ1 Y3Q7IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIHN0cmluZyBzZXJ2ZXJfaGVh ZGVyIHsgb3duZWQgZ2V0OyBzZXQgY29uc3RydWN0OyB9Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0K LS0JCXB1YmxpYyBzdHJpbmcgc3NsX2NlcnRfZmlsZSB7IG93bmVkIGdldDsgY29uc3RydWN0OyB9 Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1YmxpYyBzdHJpbmcgc3NsX2tleV9maWxlIHsg b3duZWQgZ2V0OyBjb25zdHJ1Y3Q7IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGlj IEdMaWIuVGxzQ2VydGlmaWNhdGUgdGxzX2NlcnRpZmljYXRlIHsgb3duZWQgZ2V0OyBjb25zdHJ1 Y3Q7IH0KLS0JCXB1YmxpYyB2aXJ0dWFsIHNpZ25hbCB2b2lkIHJlcXVlc3RfYWJvcnRlZCAoU291 cC5NZXNzYWdlIG1zZywgU291cC5DbGllbnRDb250ZXh0IGNsaWVudCk7Ci0tCQlwdWJsaWMgdmly dHVhbCBzaWduYWwgdm9pZCByZXF1ZXN0X2ZpbmlzaGVkIChTb3VwLk1lc3NhZ2UgbXNnLCBTb3Vw LkNsaWVudENvbnRleHQgY2xpZW50KTsKLS0JCXB1YmxpYyB2aXJ0dWFsIHNpZ25hbCB2b2lkIHJl cXVlc3RfcmVhZCAoU291cC5NZXNzYWdlIG1zZywgU291cC5DbGllbnRDb250ZXh0IGNsaWVudCk7 Ci0tCQlwdWJsaWMgdmlydHVhbCBzaWduYWwgdm9pZCByZXF1ZXN0X3N0YXJ0ZWQgKFNvdXAuTWVz c2FnZSBtc2csIFNvdXAuQ2xpZW50Q29udGV4dCBjbGllbnQpOwotLQl9Ci0tCVtDQ29kZSAoY2hl YWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIHR5cGVfaWQgPSAic291cF9zZXNzaW9u X2dldF90eXBlICgpIildCi0tCXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBTZXNzaW9uIDogR0xpYi5P YmplY3QgewotLQkJW0NDb2RlIChoYXNfY29uc3RydWN0X2Z1bmN0aW9uID0gZmFsc2UpXQotLQkJ cHJvdGVjdGVkIFNlc3Npb24gKCk7Ci0tCQlwdWJsaWMgdm9pZCBhYm9ydCAoKTsKLS0JCXB1Ymxp YyB2b2lkIGFkZF9mZWF0dXJlIChTb3VwLlNlc3Npb25GZWF0dXJlIGZlYXR1cmUpOwotLQkJcHVi bGljIHZvaWQgYWRkX2ZlYXR1cmVfYnlfdHlwZSAoR0xpYi5UeXBlIGZlYXR1cmVfdHlwZSk7Ci0t CQlbTm9XcmFwcGVyXQotLQkJcHVibGljIHZpcnR1YWwgdm9pZCBhdXRoX3JlcXVpcmVkIChTb3Vw Lk1lc3NhZ2UgbXNnLCBTb3VwLkF1dGggYXV0aCwgYm9vbCByZXRyeWluZyk7Ci0tCQlwdWJsaWMg dmlydHVhbCB2b2lkIGNhbmNlbF9tZXNzYWdlIChTb3VwLk1lc3NhZ2UgbXNnLCB1aW50IHN0YXR1 c19jb2RlKTsKLS0JCVtOb1dyYXBwZXJdCi0tCQlwdWJsaWMgdmlydHVhbCB2b2lkIGZsdXNoX3F1 ZXVlICgpOwotLQkJcHVibGljIHVub3duZWQgR0xpYi5NYWluQ29udGV4dCBnZXRfYXN5bmNfY29u dGV4dCAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIFNvdXAuU2Vzc2lvbkZlYXR1cmUgZ2V0X2ZlYXR1 cmUgKEdMaWIuVHlwZSBmZWF0dXJlX3R5cGUpOwotLQkJcHVibGljIHVub3duZWQgU291cC5TZXNz aW9uRmVhdHVyZSBnZXRfZmVhdHVyZV9mb3JfbWVzc2FnZSAoR0xpYi5UeXBlIGZlYXR1cmVfdHlw ZSwgU291cC5NZXNzYWdlIG1zZyk7Ci0tCQlwdWJsaWMgR0xpYi5TTGlzdDxTb3VwLlNlc3Npb25G ZWF0dXJlPiBnZXRfZmVhdHVyZXMgKEdMaWIuVHlwZSBmZWF0dXJlX3R5cGUpOwotLQkJW05vV3Jh cHBlcl0KLS0JCXB1YmxpYyB2aXJ0dWFsIHZvaWQga2ljayAoKTsKLS0JCXB1YmxpYyB2b2lkIHBh dXNlX21lc3NhZ2UgKFNvdXAuTWVzc2FnZSBtc2cpOwotLQkJcHVibGljIHZvaWQgcHJlcGFyZV9m b3JfdXJpIChTb3VwLlVSSSB1cmkpOwotLQkJcHVibGljIHZpcnR1YWwgdm9pZCBxdWV1ZV9tZXNz YWdlIChvd25lZCBTb3VwLk1lc3NhZ2UgbXNnLCBTb3VwLlNlc3Npb25DYWxsYmFjaz8gY2FsbGJh Y2spOwotLQkJcHVibGljIGJvb2wgcmVkaXJlY3RfbWVzc2FnZSAoU291cC5NZXNzYWdlIG1zZyk7 Ci0tCQlwdWJsaWMgdm9pZCByZW1vdmVfZmVhdHVyZSAoU291cC5TZXNzaW9uRmVhdHVyZSBmZWF0 dXJlKTsKLS0JCXB1YmxpYyB2b2lkIHJlbW92ZV9mZWF0dXJlX2J5X3R5cGUgKEdMaWIuVHlwZSBm ZWF0dXJlX3R5cGUpOwotLQkJcHVibGljIHZpcnR1YWwgdm9pZCByZXF1ZXVlX21lc3NhZ2UgKFNv dXAuTWVzc2FnZSBtc2cpOwotLQkJcHVibGljIHZpcnR1YWwgdWludCBzZW5kX21lc3NhZ2UgKFNv dXAuTWVzc2FnZSBtc2cpOwotLQkJcHVibGljIHZvaWQgdW5wYXVzZV9tZXNzYWdlIChTb3VwLk1l c3NhZ2UgbXNnKTsKLS0JCXB1YmxpYyBib29sIHdvdWxkX3JlZGlyZWN0IChTb3VwLk1lc3NhZ2Ug bXNnKTsKLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIHN0cmluZyBhY2NlcHRfbGFu Z3VhZ2UgeyBvd25lZCBnZXQ7IHNldDsgfQotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJs aWMgYm9vbCBhY2NlcHRfbGFuZ3VhZ2VfYXV0byB7IGdldDsgc2V0OyB9Ci0tCQlwdWJsaWMgR0xp Yi5NYWluQ29udGV4dCBhc3luY19jb250ZXh0IHsgZ2V0OyBvd25lZCBjb25zdHJ1Y3Q7IH0KLS0J CVtDQ29kZSAoYXJyYXlfbGVuZ3RoID0gZmFsc2UsIGFycmF5X251bGxfdGVybWluYXRlZCA9IHRy dWUpXQotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMgc3RyaW5nW10gaHR0cF9hbGlh c2VzIHsgb3duZWQgZ2V0OyBzZXQ7IH0KLS0JCVtDQ29kZSAoYXJyYXlfbGVuZ3RoID0gZmFsc2Us IGFycmF5X251bGxfdGVybWluYXRlZCA9IHRydWUpXQotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0t CQlwdWJsaWMgc3RyaW5nW10gaHR0cHNfYWxpYXNlcyB7IG93bmVkIGdldDsgc2V0OyB9Ci0tCQlb Tm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1YmxpYyB1aW50IGlkbGVfdGltZW91dCB7IGdldDsgc2V0 OyB9Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1YmxpYyBpbnQgbWF4X2Nvbm5zIHsgZ2V0 OyBzZXQ7IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIGludCBtYXhfY29ubnNf cGVyX2hvc3QgeyBnZXQ7IHNldDsgfQotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMg U291cC5VUkkgcHJveHlfdXJpIHsgb3duZWQgZ2V0OyBzZXQ7IH0KLS0JCVtOb0FjY2Vzc29yTWV0 aG9kXQotLQkJcHVibGljIHN0cmluZyBzc2xfY2FfZmlsZSB7IG93bmVkIGdldDsgc2V0OyB9Ci0t CQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1YmxpYyBib29sIHNzbF9zdHJpY3QgeyBnZXQ7IHNl dDsgfQotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMgYm9vbCBzc2xfdXNlX3N5c3Rl bV9jYV9maWxlIHsgZ2V0OyBzZXQ7IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGlj IHVpbnQgdGltZW91dCB7IGdldDsgc2V0OyB9Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1 YmxpYyBHTGliLlRsc0RhdGFiYXNlIHRsc19kYXRhYmFzZSB7IG93bmVkIGdldDsgc2V0OyB9Ci0t CQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1YmxpYyBib29sIHVzZV9udGxtIHsgZ2V0OyBzZXQ7 IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIGJvb2wgdXNlX3RocmVhZF9jb250 ZXh0IHsgZ2V0OyBzZXQ7IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIHN0cmlu ZyB1c2VyX2FnZW50IHsgb3duZWQgZ2V0OyBzZXQ7IH0KLS0JCXB1YmxpYyB2aXJ0dWFsIHNpZ25h bCB2b2lkIGF1dGhlbnRpY2F0ZSAoU291cC5NZXNzYWdlIG1zZywgU291cC5BdXRoIGF1dGgsIGJv b2wgcmV0cnlpbmcpOwotLQkJcHVibGljIHNpZ25hbCB2b2lkIGNvbm5lY3Rpb25fY3JlYXRlZCAo R0xpYi5PYmplY3QgY29ubmVjdGlvbik7Ci0tCQlwdWJsaWMgc2lnbmFsIHZvaWQgcmVxdWVzdF9x dWV1ZWQgKFNvdXAuTWVzc2FnZSBtc2cpOwotLQkJcHVibGljIHZpcnR1YWwgc2lnbmFsIHZvaWQg cmVxdWVzdF9zdGFydGVkIChTb3VwLk1lc3NhZ2UgbXNnLCBTb3VwLlNvY2tldCBzb2NrZXQpOwot LQkJcHVibGljIHNpZ25hbCB2b2lkIHJlcXVlc3RfdW5xdWV1ZWQgKFNvdXAuTWVzc2FnZSBtc2cp OwotLQkJcHVibGljIHNpZ25hbCB2b2lkIHR1bm5lbGluZyAoR0xpYi5PYmplY3QgY29ubmVjdGlv bik7Ci0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwg dHlwZV9pZCA9ICJzb3VwX3Nlc3Npb25fYXN5bmNfZ2V0X3R5cGUgKCkiKV0KLS0JcHVibGljIGNs YXNzIFNlc3Npb25Bc3luYyA6IFNvdXAuU2Vzc2lvbiB7Ci0tCQlbQ0NvZGUgKGhhc19jb25zdHJ1 Y3RfZnVuY3Rpb24gPSBmYWxzZSwgdHlwZSA9ICJTb3VwU2Vzc2lvbioiKV0KLS0JCXB1YmxpYyBT ZXNzaW9uQXN5bmMgKCk7Ci0tCQlbQ0NvZGUgKGhhc19jb25zdHJ1Y3RfZnVuY3Rpb24gPSBmYWxz ZSwgdHlwZSA9ICJTb3VwU2Vzc2lvbioiKV0KLS0JCXB1YmxpYyBTZXNzaW9uQXN5bmMud2l0aF9v cHRpb25zIChzdHJpbmcgb3B0bmFtZTEsIC4uLik7Ci0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2Zp bGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgdHlwZV9pZCA9ICJzb3VwX3Nlc3Npb25fc3luY19n ZXRfdHlwZSAoKSIpXQotLQlwdWJsaWMgY2xhc3MgU2Vzc2lvblN5bmMgOiBTb3VwLlNlc3Npb24g ewotLQkJW0NDb2RlIChoYXNfY29uc3RydWN0X2Z1bmN0aW9uID0gZmFsc2UsIHR5cGUgPSAiU291 cFNlc3Npb24qIildCi0tCQlwdWJsaWMgU2Vzc2lvblN5bmMgKCk7Ci0tCQlbQ0NvZGUgKGhhc19j b25zdHJ1Y3RfZnVuY3Rpb24gPSBmYWxzZSwgdHlwZSA9ICJTb3VwU2Vzc2lvbioiKV0KLS0JCXB1 YmxpYyBTZXNzaW9uU3luYy53aXRoX29wdGlvbnMgKHN0cmluZyBvcHRuYW1lMSwgLi4uKTsKLS0J fQotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCB0eXBlX2lk ID0gInNvdXBfc29ja2V0X2dldF90eXBlICgpIildCi0tCXB1YmxpYyBjbGFzcyBTb2NrZXQgOiBH TGliLk9iamVjdCB7Ci0tCQlbQ0NvZGUgKGhhc19jb25zdHJ1Y3RfZnVuY3Rpb24gPSBmYWxzZSld Ci0tCQlwdWJsaWMgU29ja2V0IChzdHJpbmcgb3B0bmFtZTEsIC4uLik7Ci0tCQlwdWJsaWMgdm9p ZCBjb25uZWN0X2FzeW5jIChHTGliLkNhbmNlbGxhYmxlPyBjYW5jZWxsYWJsZSwgU291cC5Tb2Nr ZXRDYWxsYmFjayBjYWxsYmFjayk7Ci0tCQlwdWJsaWMgdWludCBjb25uZWN0X3N5bmMgKEdMaWIu Q2FuY2VsbGFibGU/IGNhbmNlbGxhYmxlKTsKLS0JCXB1YmxpYyB2b2lkIGRpc2Nvbm5lY3QgKCk7 Ci0tCQlwdWJsaWMgaW50IGdldF9mZCAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIFNvdXAuQWRkcmVz cyBnZXRfbG9jYWxfYWRkcmVzcyAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIFNvdXAuQWRkcmVzcyBn ZXRfcmVtb3RlX2FkZHJlc3MgKCk7Ci0tCQlwdWJsaWMgYm9vbCBpc19jb25uZWN0ZWQgKCk7Ci0t CQlwdWJsaWMgYm9vbCBpc19zc2wgKCk7Ci0tCQlwdWJsaWMgYm9vbCBsaXN0ZW4gKCk7Ci0tCQlw dWJsaWMgU291cC5Tb2NrZXRJT1N0YXR1cyByZWFkIChbQ0NvZGUgKGFycmF5X2xlbmd0aF9jbmFt ZSA9ICJsZW4iLCBhcnJheV9sZW5ndGhfcG9zID0gMS41LCBhcnJheV9sZW5ndGhfdHlwZSA9ICJn c2l6ZSIsIHR5cGUgPSAiZ3BvaW50ZXIiKV0gdWludDhbXSBidWZmZXIsIG91dCBzaXplX3QgbnJl YWQsIEdMaWIuQ2FuY2VsbGFibGU/IGNhbmNlbGxhYmxlKSB0aHJvd3MgR0xpYi5FcnJvcjsKLS0J CXB1YmxpYyBTb3VwLlNvY2tldElPU3RhdHVzIHJlYWRfdW50aWwgKFtDQ29kZSAoYXJyYXlfbGVu Z3RoX2NuYW1lID0gImxlbiIsIGFycmF5X2xlbmd0aF9wb3MgPSAxLjUsIGFycmF5X2xlbmd0aF90 eXBlID0gImdzaXplIiwgdHlwZSA9ICJncG9pbnRlciIpXSB1aW50OFtdIGJ1ZmZlciwgdm9pZCog Ym91bmRhcnksIHNpemVfdCBib3VuZGFyeV9sZW4sIG91dCBzaXplX3QgbnJlYWQsIGJvb2wgZ290 X2JvdW5kYXJ5LCBHTGliLkNhbmNlbGxhYmxlPyBjYW5jZWxsYWJsZSkgdGhyb3dzIEdMaWIuRXJy b3I7Ci0tCQlwdWJsaWMgYm9vbCBzdGFydF9wcm94eV9zc2wgKHN0cmluZyBzc2xfaG9zdCwgR0xp Yi5DYW5jZWxsYWJsZT8gY2FuY2VsbGFibGUpOwotLQkJcHVibGljIGJvb2wgc3RhcnRfc3NsIChH TGliLkNhbmNlbGxhYmxlPyBjYW5jZWxsYWJsZSk7Ci0tCQlwdWJsaWMgU291cC5Tb2NrZXRJT1N0 YXR1cyB3cml0ZSAoW0NDb2RlIChhcnJheV9sZW5ndGhfY25hbWUgPSAibGVuIiwgYXJyYXlfbGVu Z3RoX3BvcyA9IDEuNSwgYXJyYXlfbGVuZ3RoX3R5cGUgPSAiZ3NpemUiLCB0eXBlID0gImdjb25z dHBvaW50ZXIiKV0gdWludDhbXSBidWZmZXIsIG91dCBzaXplX3Qgbndyb3RlLCBHTGliLkNhbmNl bGxhYmxlPyBjYW5jZWxsYWJsZSkgdGhyb3dzIEdMaWIuRXJyb3I7Ci0tCQlbTm9BY2Nlc3Nvck1l dGhvZF0KLS0JCXB1YmxpYyBHTGliLk1haW5Db250ZXh0IGFzeW5jX2NvbnRleHQgeyBvd25lZCBn ZXQ7IGNvbnN0cnVjdDsgfQotLQkJcHVibGljIGJvb2wgY2xlYW5fZGlzcG9zZSB7IGNvbnN0cnVj dDsgfQotLQkJW05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMgYm9vbCBpc19zZXJ2ZXIgeyBn ZXQ7IH0KLS0JCXB1YmxpYyBTb3VwLkFkZHJlc3MgbG9jYWxfYWRkcmVzcyB7IGdldDsgY29uc3Ry dWN0OyB9Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1YmxpYyBib29sIG5vbl9ibG9ja2lu ZyB7IGdldDsgc2V0OyB9Ci0tCQlwdWJsaWMgU291cC5BZGRyZXNzIHJlbW90ZV9hZGRyZXNzIHsg Z2V0OyBjb25zdHJ1Y3Q7IH0KLS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIHZvaWQq IHNzbF9jcmVkcyB7IGdldDsgc2V0OyB9Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1Ymxp YyBib29sIHNzbF9mYWxsYmFjayB7IGdldDsgY29uc3RydWN0OyB9Ci0tCQlbTm9BY2Nlc3Nvck1l dGhvZF0KLS0JCXB1YmxpYyBib29sIHNzbF9zdHJpY3QgeyBnZXQ7IGNvbnN0cnVjdDsgfQotLQkJ W05vQWNjZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMgdWludCB0aW1lb3V0IHsgZ2V0OyBzZXQ7IH0K LS0JCVtOb0FjY2Vzc29yTWV0aG9kXQotLQkJcHVibGljIEdMaWIuVGxzQ2VydGlmaWNhdGUgdGxz X2NlcnRpZmljYXRlIHsgb3duZWQgZ2V0OyB9Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1 YmxpYyBHTGliLlRsc0NlcnRpZmljYXRlRmxhZ3MgdGxzX2Vycm9ycyB7IGdldDsgfQotLQkJW05v QWNjZXNzb3JNZXRob2RdCi0tCQlwdWJsaWMgYm9vbCB0cnVzdGVkX2NlcnRpZmljYXRlIHsgZ2V0 OyB9Ci0tCQlbTm9BY2Nlc3Nvck1ldGhvZF0KLS0JCXB1YmxpYyBib29sIHVzZV90aHJlYWRfY29u dGV4dCB7IGdldDsgY29uc3RydWN0OyB9Ci0tCQlwdWJsaWMgdmlydHVhbCBzaWduYWwgdm9pZCBk aXNjb25uZWN0ZWQgKCk7Ci0tCQlwdWJsaWMgc2lnbmFsIHZvaWQgZXZlbnQgKEdMaWIuU29ja2V0 Q2xpZW50RXZlbnQgZXZlbnQsIEdMaWIuSU9TdHJlYW0gY29ubmVjdGlvbik7Ci0tCQlwdWJsaWMg dmlydHVhbCBzaWduYWwgdm9pZCBuZXdfY29ubmVjdGlvbiAoU291cC5Tb2NrZXQgYXJnMSk7Ci0t CQlwdWJsaWMgdmlydHVhbCBzaWduYWwgdm9pZCByZWFkYWJsZSAoKTsKLS0JCXB1YmxpYyB2aXJ0 dWFsIHNpZ25hbCB2b2lkIHdyaXRhYmxlICgpOwotLQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxl bmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNvcHlfZnVuY3Rpb24gPSAiZ19ib3hlZF9jb3B5Iiwg ZnJlZV9mdW5jdGlvbiA9ICJnX2JveGVkX2ZyZWUiLCB0eXBlX2lkID0gInNvdXBfdXJpX2dldF90 eXBlICgpIildCi0tCVtDb21wYWN0XQotLQlwdWJsaWMgY2xhc3MgVVJJIHsKLS0JCXB1YmxpYyB3 ZWFrIHN0cmluZyBmcmFnbWVudDsKLS0JCXB1YmxpYyB3ZWFrIHN0cmluZyBob3N0OwotLQkJcHVi bGljIHdlYWsgc3RyaW5nIHBhc3N3b3JkOwotLQkJcHVibGljIHdlYWsgc3RyaW5nIHBhdGg7Ci0t CQlwdWJsaWMgdWludCBwb3J0OwotLQkJcHVibGljIHdlYWsgc3RyaW5nIHF1ZXJ5OwotLQkJcHVi bGljIHdlYWsgc3RyaW5nIHNjaGVtZTsKLS0JCXB1YmxpYyB3ZWFrIHN0cmluZyB1c2VyOwotLQkJ W0NDb2RlIChoYXNfY29uc3RydWN0X2Z1bmN0aW9uID0gZmFsc2UpXQotLQkJcHVibGljIFVSSSAo c3RyaW5nIHVyaV9zdHJpbmcpOwotLQkJcHVibGljIFNvdXAuVVJJIGNvcHkgKCk7Ci0tCQlwdWJs aWMgU291cC5VUkkgY29weV9ob3N0ICgpOwotLQkJcHVibGljIHN0YXRpYyBzdHJpbmcgZGVjb2Rl IChzdHJpbmcgcGFydCk7Ci0tCQlwdWJsaWMgc3RhdGljIHN0cmluZyBlbmNvZGUgKHN0cmluZyBw YXJ0LCBzdHJpbmc/IGVzY2FwZV9leHRyYSk7Ci0tCQlwdWJsaWMgYm9vbCBlcXVhbCAoU291cC5V UkkgdXJpMik7Ci0tCQlwdWJsaWMgdm9pZCBmcmVlICgpOwotLQkJcHVibGljIHVub3duZWQgc3Ry aW5nIGdldF9mcmFnbWVudCAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIHN0cmluZyBnZXRfaG9zdCAo KTsKLS0JCXB1YmxpYyB1bm93bmVkIHN0cmluZyBnZXRfcGFzc3dvcmQgKCk7Ci0tCQlwdWJsaWMg dW5vd25lZCBzdHJpbmcgZ2V0X3BhdGggKCk7Ci0tCQlwdWJsaWMgdWludCBnZXRfcG9ydCAoKTsK LS0JCXB1YmxpYyB1bm93bmVkIHN0cmluZyBnZXRfcXVlcnkgKCk7Ci0tCQlwdWJsaWMgdW5vd25l ZCBzdHJpbmcgZ2V0X3NjaGVtZSAoKTsKLS0JCXB1YmxpYyB1bm93bmVkIHN0cmluZyBnZXRfdXNl ciAoKTsKLS0JCXB1YmxpYyBib29sIGhvc3RfZXF1YWwgKFNvdXAuVVJJIHYyKTsKLS0JCXB1Ymxp YyB1aW50IGhvc3RfaGFzaCAoKTsKLS0JCXB1YmxpYyBzdGF0aWMgc3RyaW5nIG5vcm1hbGl6ZSAo c3RyaW5nIHBhcnQsIHN0cmluZyB1bmVzY2FwZV9leHRyYSk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRf ZnJhZ21lbnQgKHN0cmluZz8gZnJhZ21lbnQpOwotLQkJcHVibGljIHZvaWQgc2V0X2hvc3QgKHN0 cmluZz8gaG9zdCk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfcGFzc3dvcmQgKHN0cmluZz8gcGFzc3dv cmQpOwotLQkJcHVibGljIHZvaWQgc2V0X3BhdGggKHN0cmluZyBwYXRoKTsKLS0JCXB1YmxpYyB2 b2lkIHNldF9wb3J0ICh1aW50IHBvcnQpOwotLQkJcHVibGljIHZvaWQgc2V0X3F1ZXJ5IChzdHJp bmc/IHF1ZXJ5KTsKLS0JCXB1YmxpYyB2b2lkIHNldF9xdWVyeV9mcm9tX2ZpZWxkcyAoLi4uKTsK LS0JCXB1YmxpYyB2b2lkIHNldF9xdWVyeV9mcm9tX2Zvcm0gKEdMaWIuSGFzaFRhYmxlPHN0cmlu ZyxzdHJpbmc+IGZvcm0pOwotLQkJcHVibGljIHZvaWQgc2V0X3NjaGVtZSAoc3RyaW5nIHNjaGVt ZSk7Ci0tCQlwdWJsaWMgdm9pZCBzZXRfdXNlciAoc3RyaW5nPyB1c2VyKTsKLS0JCXB1YmxpYyBz dHJpbmcgdG9fc3RyaW5nIChib29sIGp1c3RfcGF0aF9hbmRfcXVlcnkpOwotLQkJcHVibGljIGJv b2wgdXNlc19kZWZhdWx0X3BvcnQgKCk7Ci0tCQlbQ0NvZGUgKGhhc19jb25zdHJ1Y3RfZnVuY3Rp b24gPSBmYWxzZSldCi0tCQlwdWJsaWMgVVJJLndpdGhfYmFzZSAoU291cC5VUkkgQGJhc2UsIHN0 cmluZyB1cmlfc3RyaW5nKTsKLS0JfQotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGli c291cC9zb3VwLmgiLCB0eXBlX2NuYW1lID0gIlNvdXBQcm94eVJlc29sdmVySW50ZXJmYWNlIiwg dHlwZV9pZCA9ICJzb3VwX3Byb3h5X3Jlc29sdmVyX2dldF90eXBlICgpIildCi0tCVtWZXJzaW9u ICggZGVwcmVjYXRlZCA9IHRydWUsIHJlcGxhY2VtZW50ID0gIlNvdXAuUHJveHlVUklSZXNvbHZl ciIgKV0KLS0JcHVibGljIGludGVyZmFjZSBQcm94eVJlc29sdmVyIDogU291cC5TZXNzaW9uRmVh dHVyZSwgR0xpYi5PYmplY3QgewotLQkJcHVibGljIGFic3RyYWN0IHZvaWQgZ2V0X3Byb3h5X2Fz eW5jIChTb3VwLk1lc3NhZ2UgbXNnLCBHTGliLk1haW5Db250ZXh0IGFzeW5jX2NvbnRleHQsIEdM aWIuQ2FuY2VsbGFibGU/IGNhbmNlbGxhYmxlLCBTb3VwLlByb3h5UmVzb2x2ZXJDYWxsYmFjayBj YWxsYWJhY2spOwotLQkJcHVibGljIGFic3RyYWN0IHVpbnQgZ2V0X3Byb3h5X3N5bmMgKFNvdXAu TWVzc2FnZSBtc2csIEdMaWIuQ2FuY2VsbGFibGU/IGNhbmNlbGxhYmxlLCBvdXQgdW5vd25lZCBT b3VwLkFkZHJlc3MgYWRkcik7Ci0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxp YnNvdXAvc291cC5oIiwgdHlwZV9jbmFtZSA9ICJTb3VwUHJveHlVUklSZXNvbHZlckludGVyZmFj ZSIsIHR5cGVfaWQgPSAic291cF9wcm94eV91cmlfcmVzb2x2ZXJfZ2V0X3R5cGUgKCkiKV0KLS0J cHVibGljIGludGVyZmFjZSBQcm94eVVSSVJlc29sdmVyIDogR0xpYi5PYmplY3QgewotLQkJcHVi bGljIGFic3RyYWN0IHZvaWQgZ2V0X3Byb3h5X3VyaV9hc3luYyAoU291cC5VUkkgdXJpLCBHTGli Lk1haW5Db250ZXh0PyBhc3luY19jb250ZXh0LCBHTGliLkNhbmNlbGxhYmxlPyBjYW5jZWxsYWJs ZSwgU291cC5Qcm94eVVSSVJlc29sdmVyQ2FsbGJhY2sgY2FsbGJhY2spOwotLQkJcHVibGljIGFi c3RyYWN0IHVpbnQgZ2V0X3Byb3h5X3VyaV9zeW5jIChTb3VwLlVSSSB1cmksIEdMaWIuQ2FuY2Vs bGFibGU/IGNhbmNlbGxhYmxlLCBvdXQgU291cC5VUkkgcHJveHlfdXJpKTsKLS0JfQotLQlbQ0Nv ZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCB0eXBlX2NuYW1lID0gIlNv dXBTZXNzaW9uRmVhdHVyZUludGVyZmFjZSIsIHR5cGVfaWQgPSAic291cF9zZXNzaW9uX2ZlYXR1 cmVfZ2V0X3R5cGUgKCkiKV0KLS0JcHVibGljIGludGVyZmFjZSBTZXNzaW9uRmVhdHVyZSA6IEdM aWIuT2JqZWN0IHsKLS0JCXB1YmxpYyBhYnN0cmFjdCBib29sIGFkZF9mZWF0dXJlIChHTGliLlR5 cGUgdHlwZSk7Ci0tCQlwdWJsaWMgYWJzdHJhY3Qgdm9pZCBhdHRhY2ggKFNvdXAuU2Vzc2lvbiBz ZXNzaW9uKTsKLS0JCXB1YmxpYyBhYnN0cmFjdCB2b2lkIGRldGFjaCAoU291cC5TZXNzaW9uIHNl c3Npb24pOwotLQkJcHVibGljIGFic3RyYWN0IGJvb2wgaGFzX2ZlYXR1cmUgKEdMaWIuVHlwZSB0 eXBlKTsKLS0JCXB1YmxpYyBhYnN0cmFjdCBib29sIHJlbW92ZV9mZWF0dXJlIChHTGliLlR5cGUg dHlwZSk7Ci0tCQlbTm9XcmFwcGVyXQotLQkJcHVibGljIGFic3RyYWN0IHZvaWQgcmVxdWVzdF9x dWV1ZWQgKFNvdXAuU2Vzc2lvbiBzZXNzaW9uLCBTb3VwLk1lc3NhZ2UgbXNnKTsKLS0JCVtOb1dy YXBwZXJdCi0tCQlwdWJsaWMgYWJzdHJhY3Qgdm9pZCByZXF1ZXN0X3N0YXJ0ZWQgKFNvdXAuU2Vz c2lvbiBzZXNzaW9uLCBTb3VwLk1lc3NhZ2UgbXNnLCBTb3VwLlNvY2tldCBzb2NrZXQpOwotLQkJ W05vV3JhcHBlcl0KLS0JCXB1YmxpYyBhYnN0cmFjdCB2b2lkIHJlcXVlc3RfdW5xdWV1ZWQgKFNv dXAuU2Vzc2lvbiBzZXNzaW9uLCBTb3VwLk1lc3NhZ2UgbXNnKTsKLS0JfQotLQlbQ0NvZGUgKGNo ZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBoYXNfdHlwZV9pZCA9IGZhbHNlKV0K LS0JcHVibGljIHN0cnVjdCBNZXNzYWdlSGVhZGVyc0l0ZXIgewotLQkJcHVibGljIHZvaWQgaW5p dCAoU291cC5NZXNzYWdlSGVhZGVycyBoZHJzKTsKLS0JCXB1YmxpYyBib29sIG5leHQgKG91dCB1 bm93bmVkIHN0cmluZyBuYW1lLCBvdXQgdW5vd25lZCBzdHJpbmcgdmFsdWUpOwotLQl9Ci0tCVtD Q29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGhhc190eXBlX2lkID0g ZmFsc2UpXQotLQlwdWJsaWMgc3RydWN0IFJhbmdlIHsKLS0JCXB1YmxpYyBpbnQ2NCBzdGFydDsK LS0JCXB1YmxpYyBpbnQ2NCBlbmQ7Ci0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0g ImxpYnNvdXAvc291cC5oIiwgY3ByZWZpeCA9ICJTT1VQX0FERFJFU1NfRkFNSUxZXyIpXQotLQlw dWJsaWMgZW51bSBBZGRyZXNzRmFtaWx5IHsKLS0JCUlOVkFMSUQsCi0tCQlJUFY0LAotLQkJSVBW NgotLQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNw cmVmaXggPSAiU09VUF9DQUNIRV9SRVNQT05TRV8iKV0KLS0JcHVibGljIGVudW0gQ2FjaGVSZXNw b25zZSB7Ci0tCQlGUkVTSCwKLS0JCU5FRURTX1ZBTElEQVRJT04sCi0tCQlTVEFMRQotLQl9Ci0t CVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNwcmVmaXggPSAi U09VUF9DQUNIRV8iKV0KLS0JcHVibGljIGVudW0gQ2FjaGVUeXBlIHsKLS0JCVNJTkdMRV9VU0VS LAotLQkJU0hBUkVECi0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAv c291cC5oIiwgY3ByZWZpeCA9ICJTT1VQX0NBQ0hFXyIpXQotLQlbRmxhZ3NdCi0tCXB1YmxpYyBl bnVtIENhY2hlYWJpbGl0eSB7Ci0tCQlDQUNIRUFCTEUsCi0tCQlVTkNBQ0hFQUJMRSwKLS0JCUlO VkFMSURBVEVTLAotLQkJVkFMSURBVEVTCi0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1l ID0gImxpYnNvdXAvc291cC5oIiwgY3ByZWZpeCA9ICJTT1VQX0NPTk5FQ1RJT05fIildCi0tCXB1 YmxpYyBlbnVtIENvbm5lY3Rpb25TdGF0ZSB7Ci0tCQlORVcsCi0tCQlDT05ORUNUSU5HLAotLQkJ SURMRSwKLS0JCUlOX1VTRSwKLS0JCVJFTU9URV9ESVNDT05ORUNURUQsCi0tCQlESVNDT05ORUNU RUQKLS0JfQotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBj cHJlZml4ID0gIlNPVVBfQ09PS0lFX0pBUl9BQ0NFUFRfIildCi0tCXB1YmxpYyBlbnVtIENvb2tp ZUphckFjY2VwdFBvbGljeSB7Ci0tCQlBTFdBWVMsCi0tCQlORVZFUiwKLS0JCU5PX1RISVJEX1BB UlRZCi0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwg Y3ByZWZpeCA9ICJTT1VQX0RBVEVfIildCi0tCXB1YmxpYyBlbnVtIERhdGVGb3JtYXQgewotLQkJ SFRUUCwKLS0JCUNPT0tJRSwKLS0JCVJGQzI4MjIsCi0tCQlJU084NjAxX0NPTVBBQ1QsCi0tCQlJ U084NjAxX0ZVTEwsCi0tCQlJU084NjAxLAotLQkJSVNPODYwMV9YTUxSUEMKLS0JfQotLQlbQ0Nv ZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBjcHJlZml4ID0gIlNPVVBf RU5DT0RJTkdfIildCi0tCXB1YmxpYyBlbnVtIEVuY29kaW5nIHsKLS0JCVVOUkVDT0dOSVpFRCwK LS0JCU5PTkUsCi0tCQlDT05URU5UX0xFTkdUSCwKLS0JCUVPRiwKLS0JCUNIVU5LRUQsCi0tCQlC WVRFUkFOR0VTCi0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291 cC5oIiwgY3ByZWZpeCA9ICJTT1VQX0VYUEVDVEFUSU9OXyIpXQotLQlbRmxhZ3NdCi0tCXB1Ymxp YyBlbnVtIEV4cGVjdGF0aW9uIHsKLS0JCVVOUkVDT0dOSVpFRCwKLS0JCUNPTlRJTlVFCi0tCX0K LS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY3ByZWZpeCA9 ICJTT1VQX0hUVFBfIildCi0tCXB1YmxpYyBlbnVtIEhUVFBWZXJzaW9uIHsKLS0JCUAxXzAsCi0t CQlAMV8xCi0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5o IiwgY3ByZWZpeCA9ICJTT1VQX1NUQVRVU18iKV0KLS0JcHVibGljIGVudW0gS25vd25TdGF0dXND b2RlIHsKLS0JCU5PTkUsCi0tCQlDQU5DRUxMRUQsCi0tCQlDQU5UX1JFU09MVkUsCi0tCQlDQU5U X1JFU09MVkVfUFJPWFksCi0tCQlDQU5UX0NPTk5FQ1QsCi0tCQlDQU5UX0NPTk5FQ1RfUFJPWFks Ci0tCQlTU0xfRkFJTEVELAotLQkJSU9fRVJST1IsCi0tCQlNQUxGT1JNRUQsCi0tCQlUUllfQUdB SU4sCi0tCQlUT09fTUFOWV9SRURJUkVDVFMsCi0tCQlUTFNfRkFJTEVELAotLQkJQ09OVElOVUUs Ci0tCQlTV0lUQ0hJTkdfUFJPVE9DT0xTLAotLQkJUFJPQ0VTU0lORywKLS0JCU9LLAotLQkJQ1JF QVRFRCwKLS0JCUFDQ0VQVEVELAotLQkJTk9OX0FVVEhPUklUQVRJVkUsCi0tCQlOT19DT05URU5U LAotLQkJUkVTRVRfQ09OVEVOVCwKLS0JCVBBUlRJQUxfQ09OVEVOVCwKLS0JCU1VTFRJX1NUQVRV UywKLS0JCU1VTFRJUExFX0NIT0lDRVMsCi0tCQlNT1ZFRF9QRVJNQU5FTlRMWSwKLS0JCUZPVU5E LAotLQkJTU9WRURfVEVNUE9SQVJJTFksCi0tCQlTRUVfT1RIRVIsCi0tCQlOT1RfTU9ESUZJRUQs Ci0tCQlVU0VfUFJPWFksCi0tCQlOT1RfQVBQRUFSSU5HX0lOX1RISVNfUFJPVE9DT0wsCi0tCQlU RU1QT1JBUllfUkVESVJFQ1QsCi0tCQlCQURfUkVRVUVTVCwKLS0JCVVOQVVUSE9SSVpFRCwKLS0J CVBBWU1FTlRfUkVRVUlSRUQsCi0tCQlGT1JCSURERU4sCi0tCQlOT1RfRk9VTkQsCi0tCQlNRVRI T0RfTk9UX0FMTE9XRUQsCi0tCQlOT1RfQUNDRVBUQUJMRSwKLS0JCVBST1hZX0FVVEhFTlRJQ0FU SU9OX1JFUVVJUkVELAotLQkJUFJPWFlfVU5BVVRIT1JJWkVELAotLQkJUkVRVUVTVF9USU1FT1VU LAotLQkJQ09ORkxJQ1QsCi0tCQlHT05FLAotLQkJTEVOR1RIX1JFUVVJUkVELAotLQkJUFJFQ09O RElUSU9OX0ZBSUxFRCwKLS0JCVJFUVVFU1RfRU5USVRZX1RPT19MQVJHRSwKLS0JCVJFUVVFU1Rf VVJJX1RPT19MT05HLAotLQkJVU5TVVBQT1JURURfTUVESUFfVFlQRSwKLS0JCVJFUVVFU1RFRF9S QU5HRV9OT1RfU0FUSVNGSUFCTEUsCi0tCQlJTlZBTElEX1JBTkdFLAotLQkJRVhQRUNUQVRJT05f RkFJTEVELAotLQkJVU5QUk9DRVNTQUJMRV9FTlRJVFksCi0tCQlMT0NLRUQsCi0tCQlGQUlMRURf REVQRU5ERU5DWSwKLS0JCUlOVEVSTkFMX1NFUlZFUl9FUlJPUiwKLS0JCU5PVF9JTVBMRU1FTlRF RCwKLS0JCUJBRF9HQVRFV0FZLAotLQkJU0VSVklDRV9VTkFWQUlMQUJMRSwKLS0JCUdBVEVXQVlf VElNRU9VVCwKLS0JCUhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVELAotLQkJSU5TVUZGSUNJRU5U X1NUT1JBR0UsCi0tCQlOT1RfRVhURU5ERUQKLS0JfQotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5h bWUgPSAibGlic291cC9zb3VwLmgiLCBjcHJlZml4ID0gIlNPVVBfTE9HR0VSX0xPR18iKV0KLS0J cHVibGljIGVudW0gTG9nZ2VyTG9nTGV2ZWwgewotLQkJTk9ORSwKLS0JCU1JTklNQUwsCi0tCQlI RUFERVJTLAotLQkJQk9EWQotLQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJz b3VwL3NvdXAuaCIsIGNwcmVmaXggPSAiU09VUF9NRU1PUllfIildCi0tCXB1YmxpYyBlbnVtIE1l bW9yeVVzZSB7Ci0tCQlTVEFUSUMsCi0tCQlUQUtFLAotLQkJQ09QWSwKLS0JCVRFTVBPUkFSWQot LQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNwcmVm aXggPSAiU09VUF9NRVNTQUdFXyIpXQotLQlbRmxhZ3NdCi0tCXB1YmxpYyBlbnVtIE1lc3NhZ2VG bGFncyB7Ci0tCQlOT19SRURJUkVDVCwKLS0JCUNBTl9SRUJVSUxELAotLQkJT1ZFUldSSVRFX0NI VU5LUywKLS0JCUNPTlRFTlRfREVDT0RFRCwKLS0JCUNFUlRJRklDQVRFX1RSVVNURUQsCi0tCQlO RVdfQ09OTkVDVElPTgotLQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3Vw L3NvdXAuaCIsIGNwcmVmaXggPSAiU09VUF9NRVNTQUdFX0hFQURFUlNfIildCi0tCXB1YmxpYyBl bnVtIE1lc3NhZ2VIZWFkZXJzVHlwZSB7Ci0tCQlSRVFVRVNULAotLQkJUkVTUE9OU0UsCi0tCQlN VUxUSVBBUlQKLS0JfQotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3Vw LmgiLCBjcHJlZml4ID0gIlNPVVBfUkVRVUVTVEVSX0VSUk9SXyIpXQotLQlwdWJsaWMgZW51bSBS ZXF1ZXN0ZXJFcnJvciB7Ci0tCQlCQURfVVJJLAotLQkJVU5TVVBQT1JURURfVVJJX1NDSEVNRQot LQl9Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNwcmVm aXggPSAiU09VUF9TT0NLRVRfIildCi0tCXB1YmxpYyBlbnVtIFNvY2tldElPU3RhdHVzIHsKLS0J CU9LLAotLQkJV09VTERfQkxPQ0ssCi0tCQlFT0YsCi0tCQlFUlJPUgotLQl9Ci0tCVtDQ29kZSAo Y2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIpXQotLQlwdWJsaWMgZXJyb3Jkb21h aW4gU1NMRXJyb3IgewotLQkJSEFORFNIQUtFX05FRURTX1JFQUQsCi0tCQlIQU5EU0hBS0VfTkVF RFNfV1JJVEUsCi0tCQlDRVJUSUZJQ0FURSwKLS0JCUhBTkRTSEFLRV9GQUlMRUQ7Ci0tCQlwdWJs aWMgc3RhdGljIEdMaWIuUXVhcmsgcXVhcmsgKCk7Ci0tCX0KLS0JW0NDb2RlIChjaGVhZGVyX2Zp bGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgaW5zdGFuY2VfcG9zID0gMi45KV0KLS0JcHVibGlj IGRlbGVnYXRlIHZvaWQgQWRkcmVzc0NhbGxiYWNrIChTb3VwLkFkZHJlc3MgYWRkciwgdWludCBz dGF0dXMpOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBp bnN0YW5jZV9wb3MgPSA0LjkpXQotLQlwdWJsaWMgZGVsZWdhdGUgYm9vbCBBdXRoRG9tYWluQmFz aWNBdXRoQ2FsbGJhY2sgKFNvdXAuQXV0aERvbWFpbiBkb21haW4sIFNvdXAuTWVzc2FnZSBtc2cs IHN0cmluZyB1c2VybmFtZSwgc3RyaW5nIHBhc3N3b3JkKTsKLS0JW0NDb2RlIChjaGVhZGVyX2Zp bGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgaW5zdGFuY2VfcG9zID0gMy45KV0KLS0JcHVibGlj IGRlbGVnYXRlIHN0cmluZyBBdXRoRG9tYWluRGlnZXN0QXV0aENhbGxiYWNrIChTb3VwLkF1dGhE b21haW4gZG9tYWluLCBTb3VwLk1lc3NhZ2UgbXNnLCBzdHJpbmcgdXNlcm5hbWUpOwotLQlbQ0Nv ZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBpbnN0YW5jZV9wb3MgPSAy LjkpXQotLQlwdWJsaWMgZGVsZWdhdGUgYm9vbCBBdXRoRG9tYWluRmlsdGVyIChTb3VwLkF1dGhE b21haW4gZG9tYWluLCBTb3VwLk1lc3NhZ2UgbXNnKTsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVu YW1lID0gImxpYnNvdXAvc291cC5oIiwgaW5zdGFuY2VfcG9zID0gMy45KV0KLS0JcHVibGljIGRl bGVnYXRlIGJvb2wgQXV0aERvbWFpbkdlbmVyaWNBdXRoQ2FsbGJhY2sgKFNvdXAuQXV0aERvbWFp biBkb21haW4sIFNvdXAuTWVzc2FnZSBtc2csIHN0cmluZyB1c2VybmFtZSk7Ci0tCVtDQ29kZSAo Y2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGluc3RhbmNlX3BvcyA9IDIuOSld Ci0tCXB1YmxpYyBkZWxlZ2F0ZSBTb3VwLkJ1ZmZlciBDaHVua0FsbG9jYXRvciAoU291cC5NZXNz YWdlIG1zZywgc2l6ZV90IG1heF9sZW4pOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAi bGlic291cC9zb3VwLmgiLCBpbnN0YW5jZV9wb3MgPSAyLjkpXQotLQlwdWJsaWMgZGVsZWdhdGUg U291cC5Mb2dnZXJMb2dMZXZlbCBMb2dnZXJGaWx0ZXIgKFNvdXAuTG9nZ2VyIGxvZ2dlciwgU291 cC5NZXNzYWdlIG1zZyk7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3Nv dXAuaCIsIGluc3RhbmNlX3BvcyA9IDQuOSldCi0tCXB1YmxpYyBkZWxlZ2F0ZSB2b2lkIExvZ2dl clByaW50ZXIgKFNvdXAuTG9nZ2VyIGxvZ2dlciwgU291cC5Mb2dnZXJMb2dMZXZlbCBsZXZlbCwg Y2hhciBkaXJlY3Rpb24sIHN0cmluZyBkYXRhKTsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1l ID0gImxpYnNvdXAvc291cC5oIiwgaW5zdGFuY2VfcG9zID0gMi45KV0KLS0JcHVibGljIGRlbGVn YXRlIHZvaWQgTWVzc2FnZUhlYWRlcnNGb3JlYWNoRnVuYyAoc3RyaW5nIG5hbWUsIHN0cmluZyB2 YWx1ZSk7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIpXQot LQlwdWJsaWMgZGVsZWdhdGUgdm9pZCBQcm94eVJlc29sdmVyQ2FsbGJhY2sgKFNvdXAuUHJveHlS ZXNvbHZlciBwMSwgU291cC5NZXNzYWdlIHAyLCB1aW50IHAzLCBTb3VwLkFkZHJlc3MgcDQpOwot LQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBoYXNfdGFyZ2V0 ID0gZmFsc2UpXQotLQlwdWJsaWMgZGVsZWdhdGUgdm9pZCBQcm94eVVSSVJlc29sdmVyQ2FsbGJh Y2sgKFNvdXAuUHJveHlVUklSZXNvbHZlciByZXNvbHZlciwgdWludCBzdGF0dXMsIFNvdXAuVVJJ IHByb3h5X3VyaSk7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAu aCIsIGluc3RhbmNlX3BvcyA9IDUuOSldCi0tCXB1YmxpYyBkZWxlZ2F0ZSB2b2lkIFNlcnZlckNh bGxiYWNrIChTb3VwLlNlcnZlciBzZXJ2ZXIsIFNvdXAuTWVzc2FnZSBtc2csIHN0cmluZyBwYXRo LCBHTGliLkhhc2hUYWJsZTxzdHJpbmcsc3RyaW5nPj8gcXVlcnksIFNvdXAuQ2xpZW50Q29udGV4 dCBjbGllbnQpOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgi LCBpbnN0YW5jZV9wb3MgPSAyLjkpXQotLQlwdWJsaWMgZGVsZWdhdGUgdm9pZCBTZXNzaW9uQ2Fs bGJhY2sgKFNvdXAuU2Vzc2lvbiBzZXNzaW9uLCBTb3VwLk1lc3NhZ2UgbXNnKTsKLS0JW0NDb2Rl IChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgaW5zdGFuY2VfcG9zID0gMi45 KV0KLS0JcHVibGljIGRlbGVnYXRlIHZvaWQgU29ja2V0Q2FsbGJhY2sgKFNvdXAuU29ja2V0IHNv Y2ssIHVpbnQgc3RhdHVzKTsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAv c291cC5oIiwgY25hbWUgPSAiU09VUF9BRERSRVNTX0FOWV9QT1JUIildCi0tCXB1YmxpYyBjb25z dCBpbnQgQUREUkVTU19BTllfUE9SVDsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxp YnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9BRERSRVNTX0ZBTUlMWSIpXQotLQlwdWJsaWMg Y29uc3Qgc3RyaW5nIEFERFJFU1NfRkFNSUxZOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUg PSAibGlic291cC9zb3VwLmgiLCBjbmFtZSA9ICJTT1VQX0FERFJFU1NfTkFNRSIpXQotLQlwdWJs aWMgY29uc3Qgc3RyaW5nIEFERFJFU1NfTkFNRTsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1l ID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9BRERSRVNTX1BIWVNJQ0FMIildCi0t CXB1YmxpYyBjb25zdCBzdHJpbmcgQUREUkVTU19QSFlTSUNBTDsKLS0JW0NDb2RlIChjaGVhZGVy X2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9BRERSRVNTX1BPUlQi KV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBBRERSRVNTX1BPUlQ7Ci0tCVtDQ29kZSAoY2hlYWRl cl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfQUREUkVTU19TT0NL QUREUiIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5nIEFERFJFU1NfU09DS0FERFI7Ci0tCVtDQ29k ZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfQVVU SF9ET01BSU5fQUREX1BBVEgiKV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBBVVRIX0RPTUFJTl9B RERfUEFUSDsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwg Y25hbWUgPSAiU09VUF9BVVRIX0RPTUFJTl9CQVNJQ19BVVRIX0NBTExCQUNLIildCi0tCXB1Ymxp YyBjb25zdCBzdHJpbmcgQVVUSF9ET01BSU5fQkFTSUNfQVVUSF9DQUxMQkFDSzsKLS0JW0NDb2Rl IChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9BVVRI X0RPTUFJTl9CQVNJQ19BVVRIX0RBVEEiKV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBBVVRIX0RP TUFJTl9CQVNJQ19BVVRIX0RBVEE7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJz b3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfQVVUSF9ET01BSU5fQkFTSUNfSCIpXQotLQlwdWJs aWMgY29uc3QgaW50IEFVVEhfRE9NQUlOX0JBU0lDX0g7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxl bmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfQVVUSF9ET01BSU5fRElHRVNU X0FVVEhfQ0FMTEJBQ0siKV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBBVVRIX0RPTUFJTl9ESUdF U1RfQVVUSF9DQUxMQkFDSzsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAv c291cC5oIiwgY25hbWUgPSAiU09VUF9BVVRIX0RPTUFJTl9ESUdFU1RfQVVUSF9EQVRBIildCi0t CXB1YmxpYyBjb25zdCBzdHJpbmcgQVVUSF9ET01BSU5fRElHRVNUX0FVVEhfREFUQTsKLS0JW0ND b2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9B VVRIX0RPTUFJTl9ESUdFU1RfSCIpXQotLQlwdWJsaWMgY29uc3QgaW50IEFVVEhfRE9NQUlOX0RJ R0VTVF9IOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBj bmFtZSA9ICJTT1VQX0FVVEhfRE9NQUlOX0ZJTFRFUiIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5n IEFVVEhfRE9NQUlOX0ZJTFRFUjsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNv dXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9BVVRIX0RPTUFJTl9GSUxURVJfREFUQSIpXQotLQlw dWJsaWMgY29uc3Qgc3RyaW5nIEFVVEhfRE9NQUlOX0ZJTFRFUl9EQVRBOwotLQlbQ0NvZGUgKGNo ZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBjbmFtZSA9ICJTT1VQX0FVVEhfRE9N QUlOX0dFTkVSSUNfQVVUSF9DQUxMQkFDSyIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5nIEFVVEhf RE9NQUlOX0dFTkVSSUNfQVVUSF9DQUxMQkFDSzsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1l ID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9BVVRIX0RPTUFJTl9HRU5FUklDX0FV VEhfREFUQSIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5nIEFVVEhfRE9NQUlOX0dFTkVSSUNfQVVU SF9EQVRBOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBj bmFtZSA9ICJTT1VQX0FVVEhfRE9NQUlOX0giKV0KLS0JcHVibGljIGNvbnN0IGludCBBVVRIX0RP TUFJTl9IOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBj bmFtZSA9ICJTT1VQX0FVVEhfRE9NQUlOX1BST1hZIildCi0tCXB1YmxpYyBjb25zdCBzdHJpbmcg QVVUSF9ET01BSU5fUFJPWFk7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3Vw L3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfQVVUSF9ET01BSU5fUkVBTE0iKV0KLS0JcHVibGljIGNv bnN0IHN0cmluZyBBVVRIX0RPTUFJTl9SRUFMTTsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1l ID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9BVVRIX0RPTUFJTl9SRU1PVkVfUEFU SCIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5nIEFVVEhfRE9NQUlOX1JFTU9WRV9QQVRIOwotLQlb Q0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBjbmFtZSA9ICJTT1VQ X0FVVEhfSCIpXQotLQlwdWJsaWMgY29uc3QgaW50IEFVVEhfSDsKLS0JW0NDb2RlIChjaGVhZGVy X2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9BVVRIX0hPU1QiKV0K LS0JcHVibGljIGNvbnN0IHN0cmluZyBBVVRIX0hPU1Q7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxl bmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfQVVUSF9JU19BVVRIRU5USUNB VEVEIildCi0tCXB1YmxpYyBjb25zdCBzdHJpbmcgQVVUSF9JU19BVVRIRU5USUNBVEVEOwotLQlb Q0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBjbmFtZSA9ICJTT1VQ X0FVVEhfSVNfRk9SX1BST1hZIildCi0tCXB1YmxpYyBjb25zdCBzdHJpbmcgQVVUSF9JU19GT1Jf UFJPWFk7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNu YW1lID0gIlNPVVBfQVVUSF9SRUFMTSIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5nIEFVVEhfUkVB TE07Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1l ID0gIlNPVVBfQVVUSF9TQ0hFTUVfTkFNRSIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5nIEFVVEhf U0NIRU1FX05BTUU7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAu aCIsIGNuYW1lID0gIlNPVVBfQ0FDSEVfSCIpXQotLQlwdWJsaWMgY29uc3QgaW50IENBQ0hFX0g7 Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0g IlNPVVBfQ0hBUl9IVFRQX0NUTCIpXQotLQlwdWJsaWMgY29uc3QgaW50IENIQVJfSFRUUF9DVEw7 Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0g IlNPVVBfQ0hBUl9IVFRQX1NFUEFSQVRPUiIpXQotLQlwdWJsaWMgY29uc3QgaW50IENIQVJfSFRU UF9TRVBBUkFUT1I7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAu aCIsIGNuYW1lID0gIlNPVVBfQ0hBUl9VUklfR0VOX0RFTElNUyIpXQotLQlwdWJsaWMgY29uc3Qg aW50IENIQVJfVVJJX0dFTl9ERUxJTVM7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJs aWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfQ0hBUl9VUklfUEVSQ0VOVF9FTkNPREVEIild Ci0tCXB1YmxpYyBjb25zdCBpbnQgQ0hBUl9VUklfUEVSQ0VOVF9FTkNPREVEOwotLQlbQ0NvZGUg KGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBjbmFtZSA9ICJTT1VQX0NIQVJf VVJJX1NVQl9ERUxJTVMiKV0KLS0JcHVibGljIGNvbnN0IGludCBDSEFSX1VSSV9TVUJfREVMSU1T OwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBjbmFtZSA9 ICJTT1VQX0NPTlRFTlRfREVDT0RFUl9IIildCi0tCXB1YmxpYyBjb25zdCBpbnQgQ09OVEVOVF9E RUNPREVSX0g7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIs IGNuYW1lID0gIlNPVVBfQ09OVEVOVF9TTklGRkVSX0giKV0KLS0JcHVibGljIGNvbnN0IGludCBD T05URU5UX1NOSUZGRVJfSDsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAv c291cC5oIiwgY25hbWUgPSAiU09VUF9DT09LSUVfSCIpXQotLQlwdWJsaWMgY29uc3QgaW50IENP T0tJRV9IOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBj bmFtZSA9ICJTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX1BPTElDWSIpXQotLQlwdWJsaWMgY29uc3Qg c3RyaW5nIENPT0tJRV9KQVJfQUNDRVBUX1BPTElDWTsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVu YW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9DT09LSUVfSkFSX0giKV0KLS0J cHVibGljIGNvbnN0IGludCBDT09LSUVfSkFSX0g7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFt ZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfQ09PS0lFX0pBUl9SRUFEX09OTFki KV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBDT09LSUVfSkFSX1JFQURfT05MWTsKLS0JW0NDb2Rl IChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9DT09L SUVfSkFSX1RFWFRfRklMRU5BTUUiKV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBDT09LSUVfSkFS X1RFWFRfRklMRU5BTUU7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3Nv dXAuaCIsIGNuYW1lID0gIlNPVVBfQ09PS0lFX0pBUl9URVhUX0giKV0KLS0JcHVibGljIGNvbnN0 IGludCBDT09LSUVfSkFSX1RFWFRfSDsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxp YnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9DT09LSUVfTUFYX0FHRV9PTkVfREFZIildCi0t CXB1YmxpYyBjb25zdCBpbnQgQ09PS0lFX01BWF9BR0VfT05FX0RBWTsKLS0JW0NDb2RlIChjaGVh ZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9DT09LSUVfTUFY X0FHRV9PTkVfSE9VUiIpXQotLQlwdWJsaWMgY29uc3QgaW50IENPT0tJRV9NQVhfQUdFX09ORV9I T1VSOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBjbmFt ZSA9ICJTT1VQX0NPT0tJRV9NQVhfQUdFX09ORV9XRUVLIildCi0tCXB1YmxpYyBjb25zdCBpbnQg Q09PS0lFX01BWF9BR0VfT05FX1dFRUs7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJs aWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfQ09PS0lFX01BWF9BR0VfT05FX1lFQVIiKV0K LS0JcHVibGljIGNvbnN0IGludCBDT09LSUVfTUFYX0FHRV9PTkVfWUVBUjsKLS0JW0NDb2RlIChj aGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9EQVRFX0gi KV0KLS0JcHVibGljIGNvbnN0IGludCBEQVRFX0g7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFt ZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfRk9STV9IIildCi0tCXB1YmxpYyBj b25zdCBpbnQgRk9STV9IOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9z b3VwLmgiLCBjbmFtZSA9ICJTT1VQX0ZPUk1fTUlNRV9UWVBFX01VTFRJUEFSVCIpXQotLQlwdWJs aWMgY29uc3Qgc3RyaW5nIEZPUk1fTUlNRV9UWVBFX01VTFRJUEFSVDsKLS0JW0NDb2RlIChjaGVh ZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9GT1JNX01JTUVf VFlQRV9VUkxFTkNPREVEIildCi0tCXB1YmxpYyBjb25zdCBzdHJpbmcgRk9STV9NSU1FX1RZUEVf VVJMRU5DT0RFRDsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5o IiwgY25hbWUgPSAiU09VUF9IRUFERVJTX0giKV0KLS0JcHVibGljIGNvbnN0IGludCBIRUFERVJT X0g7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1l ID0gIlNPVVBfTE9HR0VSX0giKV0KLS0JcHVibGljIGNvbnN0IGludCBMT0dHRVJfSDsKLS0JW0ND b2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9N RVNTQUdFX0JPRFlfSCIpXQotLQlwdWJsaWMgY29uc3QgaW50IE1FU1NBR0VfQk9EWV9IOwotLQlb Q0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBjbmFtZSA9ICJTT1VQ X01FU1NBR0VfRklSU1RfUEFSVFkiKV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBNRVNTQUdFX0ZJ UlNUX1BBUlRZOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgi LCBjbmFtZSA9ICJTT1VQX01FU1NBR0VfRkxBR1MiKV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBN RVNTQUdFX0ZMQUdTOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3Vw LmgiLCBjbmFtZSA9ICJTT1VQX01FU1NBR0VfSCIpXQotLQlwdWJsaWMgY29uc3QgaW50IE1FU1NB R0VfSDsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25h bWUgPSAiU09VUF9NRVNTQUdFX0hFQURFUlNfSCIpXQotLQlwdWJsaWMgY29uc3QgaW50IE1FU1NB R0VfSEVBREVSU19IOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3Vw LmgiLCBjbmFtZSA9ICJTT1VQX01FU1NBR0VfSFRUUF9WRVJTSU9OIildCi0tCXB1YmxpYyBjb25z dCBzdHJpbmcgTUVTU0FHRV9IVFRQX1ZFUlNJT047Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFt ZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfTUVTU0FHRV9NRVRIT0QiKV0KLS0J cHVibGljIGNvbnN0IHN0cmluZyBNRVNTQUdFX01FVEhPRDsKLS0JW0NDb2RlIChjaGVhZGVyX2Zp bGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9NRVNTQUdFX1JFQVNPTl9Q SFJBU0UiKV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBNRVNTQUdFX1JFQVNPTl9QSFJBU0U7Ci0t CVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNP VVBfTUVTU0FHRV9SRVFVRVNUX0JPRFkiKV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBNRVNTQUdF X1JFUVVFU1RfQk9EWTsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291 cC5oIiwgY25hbWUgPSAiU09VUF9NRVNTQUdFX1JFUVVFU1RfSEVBREVSUyIpXQotLQlwdWJsaWMg Y29uc3Qgc3RyaW5nIE1FU1NBR0VfUkVRVUVTVF9IRUFERVJTOwotLQlbQ0NvZGUgKGNoZWFkZXJf ZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBjbmFtZSA9ICJTT1VQX01FU1NBR0VfUkVTUE9O U0VfQk9EWSIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5nIE1FU1NBR0VfUkVTUE9OU0VfQk9EWTsK LS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAi U09VUF9NRVNTQUdFX1JFU1BPTlNFX0hFQURFUlMiKV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBN RVNTQUdFX1JFU1BPTlNFX0hFQURFUlM7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJs aWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfTUVTU0FHRV9TRVJWRVJfU0lERSIpXQotLQlw dWJsaWMgY29uc3Qgc3RyaW5nIE1FU1NBR0VfU0VSVkVSX1NJREU7Ci0tCVtDQ29kZSAoY2hlYWRl cl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfTUVTU0FHRV9TVEFU VVNfQ09ERSIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5nIE1FU1NBR0VfU1RBVFVTX0NPREU7Ci0t CVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNP VVBfTUVTU0FHRV9UTFNfQ0VSVElGSUNBVEUiKV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBNRVNT QUdFX1RMU19DRVJUSUZJQ0FURTsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNv dXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9NRVNTQUdFX1RMU19FUlJPUlMiKV0KLS0JcHVibGlj IGNvbnN0IHN0cmluZyBNRVNTQUdFX1RMU19FUlJPUlM7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxl bmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfTUVTU0FHRV9VUkkiKV0KLS0J cHVibGljIGNvbnN0IHN0cmluZyBNRVNTQUdFX1VSSTsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVu YW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9NRVRIT0RfSCIpXQotLQlwdWJs aWMgY29uc3QgaW50IE1FVEhPRF9IOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGli c291cC9zb3VwLmgiLCBjbmFtZSA9ICJTT1VQX01JU0NfSCIpXQotLQlwdWJsaWMgY29uc3QgaW50 IE1JU0NfSDsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwg Y25hbWUgPSAiU09VUF9NVUxUSVBBUlRfSCIpXQotLQlwdWJsaWMgY29uc3QgaW50IE1VTFRJUEFS VF9IOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBjbmFt ZSA9ICJTT1VQX1BBU1NXT1JEX01BTkFHRVJfSCIpXQotLQlwdWJsaWMgY29uc3QgaW50IFBBU1NX T1JEX01BTkFHRVJfSDsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291 cC5oIiwgY25hbWUgPSAiU09VUF9QUk9YWV9SRVNPTFZFUl9ERUZBVUxUX0giKV0KLS0JcHVibGlj IGNvbnN0IGludCBQUk9YWV9SRVNPTFZFUl9ERUZBVUxUX0g7Ci0tCVtDQ29kZSAoY2hlYWRlcl9m aWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfUFJPWFlfVVJJX1JFU09M VkVSX0giKV0KLS0JcHVibGljIGNvbnN0IGludCBQUk9YWV9VUklfUkVTT0xWRVJfSDsKLS0JW0ND b2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9S RVFVRVNURVJfSCIpXQotLQlwdWJsaWMgY29uc3QgaW50IFJFUVVFU1RFUl9IOwotLQlbQ0NvZGUg KGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBjbmFtZSA9ICJTT1VQX1JFUVVF U1RfREFUQV9IIildCi0tCXB1YmxpYyBjb25zdCBpbnQgUkVRVUVTVF9EQVRBX0g7Ci0tCVtDQ29k ZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfUkVR VUVTVF9GSUxFX0giKV0KLS0JcHVibGljIGNvbnN0IGludCBSRVFVRVNUX0ZJTEVfSDsKLS0JW0ND b2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9S RVFVRVNUX0giKV0KLS0JcHVibGljIGNvbnN0IGludCBSRVFVRVNUX0g7Ci0tCVtDQ29kZSAoY2hl YWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfUkVRVUVTVF9I VFRQX0giKV0KLS0JcHVibGljIGNvbnN0IGludCBSRVFVRVNUX0hUVFBfSDsKLS0JW0NDb2RlIChj aGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9SRVFVRVNU X1NFU1NJT04iKV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBSRVFVRVNUX1NFU1NJT047Ci0tCVtD Q29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBf UkVRVUVTVF9VUkkiKV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBSRVFVRVNUX1VSSTsKLS0JW0ND b2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9T RVJWRVJfQVNZTkNfQ09OVEVYVCIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5nIFNFUlZFUl9BU1lO Q19DT05URVhUOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgi LCBjbmFtZSA9ICJTT1VQX1NFUlZFUl9IIildCi0tCXB1YmxpYyBjb25zdCBpbnQgU0VSVkVSX0g7 Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0g IlNPVVBfU0VSVkVSX0lOVEVSRkFDRSIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5nIFNFUlZFUl9J TlRFUkZBQ0U7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIs IGNuYW1lID0gIlNPVVBfU0VSVkVSX1BPUlQiKV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBTRVJW RVJfUE9SVDsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwg Y25hbWUgPSAiU09VUF9TRVJWRVJfUkFXX1BBVEhTIildCi0tCXB1YmxpYyBjb25zdCBzdHJpbmcg U0VSVkVSX1JBV19QQVRIUzsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAv c291cC5oIiwgY25hbWUgPSAiU09VUF9TRVJWRVJfU0VSVkVSX0hFQURFUiIpXQotLQlwdWJsaWMg Y29uc3Qgc3RyaW5nIFNFUlZFUl9TRVJWRVJfSEVBREVSOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmls ZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBjbmFtZSA9ICJTT1VQX1NFUlZFUl9TU0xfQ0VSVF9G SUxFIildCi0tCXB1YmxpYyBjb25zdCBzdHJpbmcgU0VSVkVSX1NTTF9DRVJUX0ZJTEU7Ci0tCVtD Q29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBf U0VSVkVSX1NTTF9LRVlfRklMRSIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5nIFNFUlZFUl9TU0xf S0VZX0ZJTEU7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIs IGNuYW1lID0gIlNPVVBfU0VSVkVSX1RMU19DRVJUSUZJQ0FURSIpXQotLQlwdWJsaWMgY29uc3Qg c3RyaW5nIFNFUlZFUl9UTFNfQ0VSVElGSUNBVEU7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFt ZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfU0VTU0lPTl9BQ0NFUFRfTEFOR1VB R0UiKV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBTRVNTSU9OX0FDQ0VQVF9MQU5HVUFHRTsKLS0J W0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09V UF9TRVNTSU9OX0FDQ0VQVF9MQU5HVUFHRV9BVVRPIildCi0tCXB1YmxpYyBjb25zdCBzdHJpbmcg U0VTU0lPTl9BQ0NFUFRfTEFOR1VBR0VfQVVUTzsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1l ID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9TRVNTSU9OX0FTWU5DX0NPTlRFWFQi KV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBTRVNTSU9OX0FTWU5DX0NPTlRFWFQ7Ci0tCVtDQ29k ZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfU0VT U0lPTl9BU1lOQ19IIildCi0tCXB1YmxpYyBjb25zdCBpbnQgU0VTU0lPTl9BU1lOQ19IOwotLQlb Q0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBjbmFtZSA9ICJTT1VQ X1NFU1NJT05fRkVBVFVSRV9IIildCi0tCXB1YmxpYyBjb25zdCBpbnQgU0VTU0lPTl9GRUFUVVJF X0g7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1l ID0gIlNPVVBfU0VTU0lPTl9IIildCi0tCXB1YmxpYyBjb25zdCBpbnQgU0VTU0lPTl9IOwotLQlb Q0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBjbmFtZSA9ICJTT1VQ X1NFU1NJT05fSFRUUFNfQUxJQVNFUyIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5nIFNFU1NJT05f SFRUUFNfQUxJQVNFUzsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291 cC5oIiwgY25hbWUgPSAiU09VUF9TRVNTSU9OX0hUVFBfQUxJQVNFUyIpXQotLQlwdWJsaWMgY29u c3Qgc3RyaW5nIFNFU1NJT05fSFRUUF9BTElBU0VTOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5h bWUgPSAibGlic291cC9zb3VwLmgiLCBjbmFtZSA9ICJTT1VQX1NFU1NJT05fSURMRV9USU1FT1VU IildCi0tCXB1YmxpYyBjb25zdCBzdHJpbmcgU0VTU0lPTl9JRExFX1RJTUVPVVQ7Ci0tCVtDQ29k ZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfU0VT U0lPTl9NQVhfQ09OTlMiKV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBTRVNTSU9OX01BWF9DT05O UzsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUg PSAiU09VUF9TRVNTSU9OX01BWF9DT05OU19QRVJfSE9TVCIpXQotLQlwdWJsaWMgY29uc3Qgc3Ry aW5nIFNFU1NJT05fTUFYX0NPTk5TX1BFUl9IT1NUOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5h bWUgPSAibGlic291cC9zb3VwLmgiLCBjbmFtZSA9ICJTT1VQX1NFU1NJT05fUFJPWFlfVVJJIild Ci0tCXB1YmxpYyBjb25zdCBzdHJpbmcgU0VTU0lPTl9QUk9YWV9VUkk7Ci0tCVtDQ29kZSAoY2hl YWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfU0VTU0lPTl9T U0xfQ0FfRklMRSIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5nIFNFU1NJT05fU1NMX0NBX0ZJTEU7 Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0g IlNPVVBfU0VTU0lPTl9TU0xfU1RSSUNUIildCi0tCXB1YmxpYyBjb25zdCBzdHJpbmcgU0VTU0lP Tl9TU0xfU1RSSUNUOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3Vw LmgiLCBjbmFtZSA9ICJTT1VQX1NFU1NJT05fU1NMX1VTRV9TWVNURU1fQ0FfRklMRSIpXQotLQlw dWJsaWMgY29uc3Qgc3RyaW5nIFNFU1NJT05fU1NMX1VTRV9TWVNURU1fQ0FfRklMRTsKLS0JW0ND b2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9T RVNTSU9OX1NZTkNfSCIpXQotLQlwdWJsaWMgY29uc3QgaW50IFNFU1NJT05fU1lOQ19IOwotLQlb Q0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBjbmFtZSA9ICJTT1VQ X1NFU1NJT05fVElNRU9VVCIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5nIFNFU1NJT05fVElNRU9V VDsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUg PSAiU09VUF9TRVNTSU9OX1RMU19EQVRBQkFTRSIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5nIFNF U1NJT05fVExTX0RBVEFCQVNFOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291 cC9zb3VwLmgiLCBjbmFtZSA9ICJTT1VQX1NFU1NJT05fVVNFUl9BR0VOVCIpXQotLQlwdWJsaWMg Y29uc3Qgc3RyaW5nIFNFU1NJT05fVVNFUl9BR0VOVDsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVu YW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9TRVNTSU9OX1VTRV9OVExNIild Ci0tCXB1YmxpYyBjb25zdCBzdHJpbmcgU0VTU0lPTl9VU0VfTlRMTTsKLS0JW0NDb2RlIChjaGVh ZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9TRVNTSU9OX1VT RV9USFJFQURfQ09OVEVYVCIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5nIFNFU1NJT05fVVNFX1RI UkVBRF9DT05URVhUOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3Vw LmgiLCBjbmFtZSA9ICJTT1VQX1NPQ0tFVF9BU1lOQ19DT05URVhUIildCi0tCXB1YmxpYyBjb25z dCBzdHJpbmcgU09DS0VUX0FTWU5DX0NPTlRFWFQ7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFt ZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfU09DS0VUX0ZMQUdfTk9OQkxPQ0tJ TkciKV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBTT0NLRVRfRkxBR19OT05CTE9DS0lORzsKLS0J W0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09V UF9TT0NLRVRfSCIpXQotLQlwdWJsaWMgY29uc3QgaW50IFNPQ0tFVF9IOwotLQlbQ0NvZGUgKGNo ZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBjbmFtZSA9ICJTT1VQX1NPQ0tFVF9J U19TRVJWRVIiKV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBTT0NLRVRfSVNfU0VSVkVSOwotLQlb Q0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBjbmFtZSA9ICJTT1VQ X1NPQ0tFVF9MT0NBTF9BRERSRVNTIildCi0tCXB1YmxpYyBjb25zdCBzdHJpbmcgU09DS0VUX0xP Q0FMX0FERFJFU1M7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAu aCIsIGNuYW1lID0gIlNPVVBfU09DS0VUX1JFTU9URV9BRERSRVNTIildCi0tCXB1YmxpYyBjb25z dCBzdHJpbmcgU09DS0VUX1JFTU9URV9BRERSRVNTOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5h bWUgPSAibGlic291cC9zb3VwLmgiLCBjbmFtZSA9ICJTT1VQX1NPQ0tFVF9TU0xfQ1JFREVOVElB TFMiKV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBTT0NLRVRfU1NMX0NSRURFTlRJQUxTOwotLQlb Q0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBjbmFtZSA9ICJTT1VQ X1NPQ0tFVF9TU0xfRkFMTEJBQ0siKV0KLS0JcHVibGljIGNvbnN0IHN0cmluZyBTT0NLRVRfU1NM X0ZBTExCQUNLOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgi LCBjbmFtZSA9ICJTT1VQX1NPQ0tFVF9TU0xfU1RSSUNUIildCi0tCXB1YmxpYyBjb25zdCBzdHJp bmcgU09DS0VUX1NTTF9TVFJJQ1Q7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJz b3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfU09DS0VUX1RJTUVPVVQiKV0KLS0JcHVibGljIGNv bnN0IHN0cmluZyBTT0NLRVRfVElNRU9VVDsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0g ImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9TT0NLRVRfVExTX0NFUlRJRklDQVRFIild Ci0tCXB1YmxpYyBjb25zdCBzdHJpbmcgU09DS0VUX1RMU19DRVJUSUZJQ0FURTsKLS0JW0NDb2Rl IChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9TT0NL RVRfVExTX0VSUk9SUyIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5nIFNPQ0tFVF9UTFNfRVJST1JT OwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBjbmFtZSA9 ICJTT1VQX1NPQ0tFVF9UUlVTVEVEX0NFUlRJRklDQVRFIildCi0tCXB1YmxpYyBjb25zdCBzdHJp bmcgU09DS0VUX1RSVVNURURfQ0VSVElGSUNBVEU7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFt ZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0gIlNPVVBfU09DS0VUX1VTRV9USFJFQURfQ09O VEVYVCIpXQotLQlwdWJsaWMgY29uc3Qgc3RyaW5nIFNPQ0tFVF9VU0VfVEhSRUFEX0NPTlRFWFQ7 Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIGNuYW1lID0g IlNPVVBfU1RBVFVTX0giKV0KLS0JcHVibGljIGNvbnN0IGludCBTVEFUVVNfSDsKLS0JW0NDb2Rl IChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9UWVBF U19IIildCi0tCXB1YmxpYyBjb25zdCBpbnQgVFlQRVNfSDsKLS0JW0NDb2RlIChjaGVhZGVyX2Zp bGVuYW1lID0gImxpYnNvdXAvc291cC5oIiwgY25hbWUgPSAiU09VUF9VUklfSCIpXQotLQlwdWJs aWMgY29uc3QgaW50IFVSSV9IOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291 cC9zb3VwLmgiLCBjbmFtZSA9ICJTT1VQX1ZBTFVFX1VUSUxTX0giKV0KLS0JcHVibGljIGNvbnN0 IGludCBWQUxVRV9VVElMU19IOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291 cC9zb3VwLmgiLCBjbmFtZSA9ICJTT1VQX1hNTFJQQ19IIildCi0tCXB1YmxpYyBjb25zdCBpbnQg WE1MUlBDX0g7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIp XQotLQlwdWJsaWMgc3RhdGljIHVub3duZWQgR0xpYi5UaW1lb3V0U291cmNlIGFkZF9jb21wbGV0 aW9uIChHTGliLk1haW5Db250ZXh0PyBhc3luY19jb250ZXh0LCBHTGliLlNvdXJjZUZ1bmMgZnVu Y3Rpb24pOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiKV0K LS0JcHVibGljIHN0YXRpYyB1bm93bmVkIEdMaWIuVGltZW91dFNvdXJjZSBhZGRfaWRsZSAoR0xp Yi5NYWluQ29udGV4dD8gYXN5bmNfY29udGV4dCwgR0xpYi5Tb3VyY2VGdW5jIGZ1bmN0aW9uKTsK LS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIildCi0tCXB1Ymxp YyBzdGF0aWMgdW5vd25lZCBHTGliLlRpbWVvdXRTb3VyY2UgYWRkX2lvX3dhdGNoIChHTGliLk1h aW5Db250ZXh0PyBhc3luY19jb250ZXh0LCBHTGliLklPQ2hhbm5lbCBjaGFuLCBHTGliLklPQ29u ZGl0aW9uIGNvbmRpdGlvbiwgR0xpYi5JT0Z1bmMgZnVuY3Rpb24pOwotLQlbQ0NvZGUgKGNoZWFk ZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiKV0KLS0JcHVibGljIHN0YXRpYyB1bm93bmVk IEdMaWIuVGltZW91dFNvdXJjZSBhZGRfdGltZW91dCAoR0xpYi5NYWluQ29udGV4dD8gYXN5bmNf Y29udGV4dCwgdWludCBpbnRlcnZhbCwgR0xpYi5Tb3VyY2VGdW5jIGZ1bmN0aW9uKTsKLS0JW0ND b2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIildCi0tCXB1YmxpYyBzdGF0 aWMgR0xpYi5TTGlzdDxTb3VwLkNvb2tpZT4gY29va2llc19mcm9tX3JlcXVlc3QgKFNvdXAuTWVz c2FnZSBtc2cpOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgi KV0KLS0JcHVibGljIHN0YXRpYyBHTGliLlNMaXN0PFNvdXAuQ29va2llPiBjb29raWVzX2Zyb21f cmVzcG9uc2UgKFNvdXAuTWVzc2FnZSBtc2cpOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUg PSAibGlic291cC9zb3VwLmgiKV0KLS0JcHVibGljIHN0YXRpYyBzdHJpbmcgY29va2llc190b19j b29raWVfaGVhZGVyIChHTGliLlNMaXN0PFNvdXAuQ29va2llPiBjb29raWVzKTsKLS0JW0NDb2Rl IChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIildCi0tCXB1YmxpYyBzdGF0aWMg dm9pZCBjb29raWVzX3RvX3JlcXVlc3QgKEdMaWIuU0xpc3Q8U291cC5Db29raWU+IGNvb2tpZXMs IFNvdXAuTWVzc2FnZSBtc2cpOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291 cC9zb3VwLmgiKV0KLS0JcHVibGljIHN0YXRpYyB2b2lkIGNvb2tpZXNfdG9fcmVzcG9uc2UgKEdM aWIuU0xpc3Q8U291cC5Db29raWU+IGNvb2tpZXMsIFNvdXAuTWVzc2FnZSBtc2cpOwotLQlbQ0Nv ZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiKV0KLS0JW1ZlcnNpb24gKCBk ZXByZWNhdGVkID0gdHJ1ZSwgcmVwbGFjZW1lbnQgPSAiRm9ybS5kZWNvZGUiLCBkZXByZWNhdGVk X3NpbmNlID0gInZhbGEtMC4xMiIgKV0KLS0JcHVibGljIHN0YXRpYyBHTGliLkhhc2hUYWJsZTxz dHJpbmcsc3RyaW5nPiBmb3JtX2RlY29kZSAoc3RyaW5nIGVuY29kZWRfZm9ybSk7Ci0tCVtDQ29k ZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIpXQotLQlbVmVyc2lvbiAoIGRl cHJlY2F0ZWQgPSB0cnVlLCByZXBsYWNlbWVudCA9ICJGb3JtLmRlY29kZV9tdWx0aXBhcnQiLCBk ZXByZWNhdGVkX3NpbmNlID0gInZhbGEtMC4xMiIgKV0KLS0JcHVibGljIHN0YXRpYyBHTGliLkhh c2hUYWJsZTxzdHJpbmcsc3RyaW5nPiBmb3JtX2RlY29kZV9tdWx0aXBhcnQgKFNvdXAuTWVzc2Fn ZSBtc2csIHN0cmluZyBmaWxlX2NvbnRyb2xfbmFtZSwgb3V0IHN0cmluZyBmaWxlbmFtZSwgb3V0 IHN0cmluZyBjb250ZW50X3R5cGUsIG91dCBTb3VwLkJ1ZmZlciBmaWxlKTsKLS0JW0NDb2RlIChj aGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIildCi0tCVtWZXJzaW9uICggZGVwcmVj YXRlZCA9IHRydWUsIHJlcGxhY2VtZW50ID0gIkZvcm0uZW5jb2RlIiwgZGVwcmVjYXRlZF9zaW5j ZSA9ICJ2YWxhLTAuMTIiICldCi0tCXB1YmxpYyBzdGF0aWMgc3RyaW5nIGZvcm1fZW5jb2RlICgu Li4pOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiKV0KLS0J W1ZlcnNpb24gKCBkZXByZWNhdGVkID0gdHJ1ZSwgcmVwbGFjZW1lbnQgPSAiRm9ybS5lbmNvZGVf ZGF0YWxpc3QiLCBkZXByZWNhdGVkX3NpbmNlID0gInZhbGEtMC4xMiIgKV0KLS0JcHVibGljIHN0 YXRpYyBzdHJpbmcgZm9ybV9lbmNvZGVfZGF0YWxpc3QgKHZvaWQqIGZvcm1fZGF0YV9zZXQpOwot LQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiKV0KLS0JW1ZlcnNp b24gKCBkZXByZWNhdGVkID0gdHJ1ZSwgcmVwbGFjZW1lbnQgPSAiRm9ybS5lbmNvZGVfaGFzaCIs IGRlcHJlY2F0ZWRfc2luY2UgPSAidmFsYS0wLjEyIiApXQotLQlwdWJsaWMgc3RhdGljIHN0cmlu ZyBmb3JtX2VuY29kZV9oYXNoIChHTGliLkhhc2hUYWJsZTxzdHJpbmcsc3RyaW5nPiBmb3JtX2Rh dGFfc2V0KTsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIild Ci0tCVtWZXJzaW9uICggZGVwcmVjYXRlZCA9IHRydWUsIGRlcHJlY2F0ZWRfc2luY2UgPSAidmFs YS0wLjEyIiApXQotLQlwdWJsaWMgc3RhdGljIHN0cmluZyBmb3JtX2VuY29kZV92YWxpc3QgKHN0 cmluZyBmaXJzdF9maWVsZCwgdm9pZCogYXJncyk7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFt ZSA9ICJsaWJzb3VwL3NvdXAuaCIpXQotLQlbVmVyc2lvbiAoIGRlcHJlY2F0ZWQgPSB0cnVlLCBy ZXBsYWNlbWVudCA9ICJGb3JtLnJlcXVlc3RfbmV3IiwgZGVwcmVjYXRlZF9zaW5jZSA9ICJ2YWxh LTAuMTIiICldCi0tCXB1YmxpYyBzdGF0aWMgU291cC5NZXNzYWdlIGZvcm1fcmVxdWVzdF9uZXcg KHN0cmluZyBtZXRob2QsIHN0cmluZyB1cmksIC4uLik7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxl bmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIpXQotLQlbVmVyc2lvbiAoIGRlcHJlY2F0ZWQgPSB0cnVl LCByZXBsYWNlbWVudCA9ICJGb3JtLnJlcXVlc3RfbmV3X2Zyb21fZGF0YWxpc3QiLCBkZXByZWNh dGVkX3NpbmNlID0gInZhbGEtMC4xMiIgKV0KLS0JcHVibGljIHN0YXRpYyBTb3VwLk1lc3NhZ2Ug Zm9ybV9yZXF1ZXN0X25ld19mcm9tX2RhdGFsaXN0IChzdHJpbmcgbWV0aG9kLCBzdHJpbmcgdXJp LCB2b2lkKiBmb3JtX2RhdGFfc2V0KTsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxp YnNvdXAvc291cC5oIildCi0tCVtWZXJzaW9uICggZGVwcmVjYXRlZCA9IHRydWUsIHJlcGxhY2Vt ZW50ID0gIkZvcm0ucmVxdWVzdF9uZXdfZnJvbV9oYXNoIiwgZGVwcmVjYXRlZF9zaW5jZSA9ICJ2 YWxhLTAuMTIiICldCi0tCXB1YmxpYyBzdGF0aWMgU291cC5NZXNzYWdlIGZvcm1fcmVxdWVzdF9u ZXdfZnJvbV9oYXNoIChzdHJpbmcgbWV0aG9kLCBzdHJpbmcgdXJpLCBHTGliLkhhc2hUYWJsZTxz dHJpbmcsc3RyaW5nPiBmb3JtX2RhdGFfc2V0KTsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1l ID0gImxpYnNvdXAvc291cC5oIildCi0tCVtWZXJzaW9uICggZGVwcmVjYXRlZCA9IHRydWUsIHJl cGxhY2VtZW50ID0gIkZvcm0ucmVxdWVzdF9uZXdfZnJvbV9tdWx0aXBhcnQiLCBkZXByZWNhdGVk X3NpbmNlID0gInZhbGEtMC4xMiIgKV0KLS0JcHVibGljIHN0YXRpYyBTb3VwLk1lc3NhZ2UgZm9y bV9yZXF1ZXN0X25ld19mcm9tX211bHRpcGFydCAoc3RyaW5nIHVyaSwgU291cC5NdWx0aXBhcnQg bXVsdGlwYXJ0KTsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5o IildCi0tCXB1YmxpYyBzdGF0aWMgYm9vbCBoZWFkZXJfY29udGFpbnMgKHN0cmluZyBoZWFkZXIs IHN0cmluZyB0b2tlbik7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3Nv dXAuaCIpXQotLQlwdWJsaWMgc3RhdGljIHZvaWQgaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoR0xp Yi5IYXNoVGFibGU8c3RyaW5nLHN0cmluZz4gcGFyYW1fbGlzdCk7Ci0tCVtDQ29kZSAoY2hlYWRl cl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIpXQotLQlwdWJsaWMgc3RhdGljIHZvaWQgaGVh ZGVyX2dfc3RyaW5nX2FwcGVuZF9wYXJhbSAoR0xpYi5TdHJpbmdCdWlsZGVyIHN0cmluZywgc3Ry aW5nIG5hbWUsIHN0cmluZyB2YWx1ZSk7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJs aWJzb3VwL3NvdXAuaCIpXQotLQlwdWJsaWMgc3RhdGljIHZvaWQgaGVhZGVyX2dfc3RyaW5nX2Fw cGVuZF9wYXJhbV9xdW90ZWQgKEdMaWIuU3RyaW5nQnVpbGRlciBzdHJpbmcsIHN0cmluZyBuYW1l LCBzdHJpbmcgdmFsdWUpOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9z b3VwLmgiKV0KLS0JcHVibGljIHN0YXRpYyBHTGliLlNMaXN0PHN0cmluZz4gaGVhZGVyX3BhcnNl X2xpc3QgKHN0cmluZyBoZWFkZXIpOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGli c291cC9zb3VwLmgiKV0KLS0JcHVibGljIHN0YXRpYyBHTGliLkhhc2hUYWJsZTxzdHJpbmcsc3Ry aW5nPiBoZWFkZXJfcGFyc2VfcGFyYW1fbGlzdCAoc3RyaW5nIGhlYWRlcik7Ci0tCVtDQ29kZSAo Y2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIpXQotLQlwdWJsaWMgc3RhdGljIEdM aWIuU0xpc3Q8c3RyaW5nPiBoZWFkZXJfcGFyc2VfcXVhbGl0eV9saXN0IChzdHJpbmcgaGVhZGVy LCBvdXQgR0xpYi5TTGlzdDxzdHJpbmc+IHVuYWNjZXB0YWJsZSk7Ci0tCVtDQ29kZSAoY2hlYWRl cl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIpXQotLQlwdWJsaWMgc3RhdGljIEdMaWIuSGFz aFRhYmxlPHN0cmluZyxzdHJpbmc+IGhlYWRlcl9wYXJzZV9zZW1pX3BhcmFtX2xpc3QgKHN0cmlu ZyBoZWFkZXIpOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgi KV0KLS0JcHVibGljIHN0YXRpYyBib29sIGhlYWRlcnNfcGFyc2UgKHN0cmluZyBzdHIsIGludCBs ZW4sIFNvdXAuTWVzc2FnZUhlYWRlcnMgZGVzdCk7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFt ZSA9ICJsaWJzb3VwL3NvdXAuaCIpXQotLQlwdWJsaWMgc3RhdGljIHVpbnQgaGVhZGVyc19wYXJz ZV9yZXF1ZXN0IChzdHJpbmcgc3RyLCBpbnQgbGVuLCBTb3VwLk1lc3NhZ2VIZWFkZXJzIHJlcV9o ZWFkZXJzLCBvdXQgc3RyaW5nIHJlcV9tZXRob2QsIG91dCBzdHJpbmcgcmVxX3BhdGgsIG91dCBT b3VwLkhUVFBWZXJzaW9uIHZlcik7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJz b3VwL3NvdXAuaCIpXQotLQlwdWJsaWMgc3RhdGljIGJvb2wgaGVhZGVyc19wYXJzZV9yZXNwb25z ZSAoc3RyaW5nIHN0ciwgaW50IGxlbiwgU291cC5NZXNzYWdlSGVhZGVycyBoZWFkZXJzLCBvdXQg U291cC5IVFRQVmVyc2lvbiB2ZXIsIG91dCB1aW50IHN0YXR1c19jb2RlLCBvdXQgc3RyaW5nIHJl YXNvbl9waHJhc2UpOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3Vw LmgiKV0KLS0JcHVibGljIHN0YXRpYyBib29sIGhlYWRlcnNfcGFyc2Vfc3RhdHVzX2xpbmUgKHN0 cmluZyBzdGF0dXNfbGluZSwgb3V0IFNvdXAuSFRUUFZlcnNpb24gdmVyLCBvdXQgdWludCBzdGF0 dXNfY29kZSwgb3V0IHN0cmluZyByZWFzb25fcGhyYXNlKTsKLS0JW0NDb2RlIChjaGVhZGVyX2Zp bGVuYW1lID0gImxpYnNvdXAvc291cC5oIildCi0tCXB1YmxpYyBzdGF0aWMgR0xpYi5RdWFyayBo dHRwX2Vycm9yX3F1YXJrICgpOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291 cC9zb3VwLmgiKV0KLS0JW1ZlcnNpb24gKCBkZXByZWNhdGVkID0gdHJ1ZSwgcmVwbGFjZW1lbnQg PSAiU1NMRXJyb3IucXVhcmsiLCBkZXByZWNhdGVkX3NpbmNlID0gInZhbGEtMC4xNCIgKV0KLS0J cHVibGljIHN0YXRpYyBHTGliLlF1YXJrIHNzbF9lcnJvcl9xdWFyayAoKTsKLS0JW0NDb2RlIChj aGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIildCi0tCXB1YmxpYyBzdGF0aWMgdW5v d25lZCBzdHJpbmcgc3RhdHVzX2dldF9waHJhc2UgKHVpbnQgc3RhdHVzX2NvZGUpOwotLQlbQ0Nv ZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiKV0KLS0JcHVibGljIHN0YXRp YyB1aW50IHN0YXR1c19wcm94aWZ5ICh1aW50IHN0YXR1c19jb2RlKTsKLS0JW0NDb2RlIChjaGVh ZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIildCi0tCXB1YmxpYyBzdGF0aWMgYm9vbCBz dHJfY2FzZV9lcXVhbCAodm9pZCogdjEsIHZvaWQqIHYyKTsKLS0JW0NDb2RlIChjaGVhZGVyX2Zp bGVuYW1lID0gImxpYnNvdXAvc291cC5oIildCi0tCXB1YmxpYyBzdGF0aWMgdWludCBzdHJfY2Fz ZV9oYXNoICh2b2lkKiBrZXkpOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291 cC9zb3VwLmgiKV0KLS0JcHVibGljIHN0YXRpYyB2b2lkIHZhbHVlX2FycmF5X2FwcGVuZCAoR0xp Yi5WYWx1ZUFycmF5IGFycmF5LCBHTGliLlR5cGUgdHlwZSwgLi4uKTsKLS0JW0NDb2RlIChjaGVh ZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5oIildCi0tCXB1YmxpYyBzdGF0aWMgdm9pZCB2 YWx1ZV9hcnJheV9hcHBlbmRfdmFscyAoR0xpYi5WYWx1ZUFycmF5IGFycmF5LCAuLi4pOwotLQlb Q0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiKV0KLS0JcHVibGljIHN0 YXRpYyBHTGliLlZhbHVlQXJyYXkgdmFsdWVfYXJyYXlfZnJvbV9hcmdzICh2YV9saXN0IGFyZ3Mp OwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiKV0KLS0JcHVi bGljIHN0YXRpYyBib29sIHZhbHVlX2FycmF5X2dldF9udGggKEdMaWIuVmFsdWVBcnJheSBhcnJh eSwgdWludCBpbmRleF8sIEdMaWIuVHlwZSB0eXBlLCAuLi4pOwotLQlbQ0NvZGUgKGNoZWFkZXJf ZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiKV0KLS0JcHVibGljIHN0YXRpYyB2b2lkIHZhbHVl X2FycmF5X2luc2VydCAoR0xpYi5WYWx1ZUFycmF5IGFycmF5LCB1aW50IGluZGV4XywgR0xpYi5U eXBlIHR5cGUsIC4uLik7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3Nv dXAuaCIpXQotLQlwdWJsaWMgc3RhdGljIEdMaWIuVmFsdWVBcnJheSB2YWx1ZV9hcnJheV9uZXcg KCk7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIpXQotLQlw dWJsaWMgc3RhdGljIEdMaWIuVmFsdWVBcnJheSB2YWx1ZV9hcnJheV9uZXdfd2l0aF92YWxzICgu Li4pOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiKV0KLS0J cHVibGljIHN0YXRpYyBib29sIHZhbHVlX2FycmF5X3RvX2FyZ3MgKEdMaWIuVmFsdWVBcnJheSBh cnJheSwgdmFfbGlzdCBhcmdzKTsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNv dXAvc291cC5oIildCi0tCXB1YmxpYyBzdGF0aWMgdm9pZCB2YWx1ZV9oYXNoX2luc2VydCAoR0xp Yi5IYXNoVGFibGU8c3RyaW5nLEdMaWIuVmFsdWU/PiBoYXNoLCBzdHJpbmcga2V5LCBHTGliLlR5 cGUgdHlwZSwgLi4uKTsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291 cC5oIildCi0tCXB1YmxpYyBzdGF0aWMgdm9pZCB2YWx1ZV9oYXNoX2luc2VydF92YWxzIChHTGli Lkhhc2hUYWJsZTxzdHJpbmcsR0xpYi5WYWx1ZT8+IGhhc2gsIC4uLik7Ci0tCVtDQ29kZSAoY2hl YWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIpXQotLQlwdWJsaWMgc3RhdGljIHZvaWQg dmFsdWVfaGFzaF9pbnNlcnRfdmFsdWUgKEdMaWIuSGFzaFRhYmxlPHN0cmluZyxHTGliLlZhbHVl Pz4gaGFzaCwgc3RyaW5nIGtleSwgR0xpYi5WYWx1ZSB2YWx1ZSk7Ci0tCVtDQ29kZSAoY2hlYWRl cl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIpXQotLQlwdWJsaWMgc3RhdGljIGJvb2wgdmFs dWVfaGFzaF9sb29rdXAgKEdMaWIuSGFzaFRhYmxlPHN0cmluZyxHTGliLlZhbHVlPz4gaGFzaCwg c3RyaW5nIGtleSwgR0xpYi5UeXBlIHR5cGUsIC4uLik7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxl bmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIpXQotLQlwdWJsaWMgc3RhdGljIGJvb2wgdmFsdWVfaGFz aF9sb29rdXBfdmFscyAoR0xpYi5IYXNoVGFibGU8c3RyaW5nLEdMaWIuVmFsdWU/PiBoYXNoLCAu Li4pOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiKV0KLS0J cHVibGljIHN0YXRpYyBHTGliLkhhc2hUYWJsZTxzdHJpbmcsR0xpYi5WYWx1ZT8+IHZhbHVlX2hh c2hfbmV3ICgpOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgi KV0KLS0JcHVibGljIHN0YXRpYyBHTGliLkhhc2hUYWJsZTxzdHJpbmcsR0xpYi5WYWx1ZT8+IHZh bHVlX2hhc2hfbmV3X3dpdGhfdmFscyAoLi4uKTsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1l ID0gImxpYnNvdXAvc291cC5oIildCi0tCVtWZXJzaW9uICggZGVwcmVjYXRlZCA9IHRydWUsIHJl cGxhY2VtZW50ID0gIlhNTFJQQy5idWlsZF9mYXVsdCIsIGRlcHJlY2F0ZWRfc2luY2UgPSAidmFs YS0wLjEyIiApXQotLQlbUHJpbnRmRm9ybWF0XQotLQlwdWJsaWMgc3RhdGljIHVub3duZWQgc3Ry aW5nIHhtbHJwY19idWlsZF9mYXVsdCAoaW50IGZhdWx0X2NvZGUsIHN0cmluZyBmYXVsdF9mb3Jt YXQsIC4uLik7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIp XQotLQlbVmVyc2lvbiAoIGRlcHJlY2F0ZWQgPSB0cnVlLCByZXBsYWNlbWVudCA9ICJYTUxSUEMu YnVpbGRfbWV0aG9kX2NhbGwiLCBkZXByZWNhdGVkX3NpbmNlID0gInZhbGEtMC4xMiIgKV0KLS0J cHVibGljIHN0YXRpYyB1bm93bmVkIHN0cmluZyB4bWxycGNfYnVpbGRfbWV0aG9kX2NhbGwgKHN0 cmluZyBtZXRob2RfbmFtZSwgR0xpYi5WYWx1ZVtdIEBwYXJhbXMpOwotLQlbQ0NvZGUgKGNoZWFk ZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiKV0KLS0JW1ZlcnNpb24gKCBkZXByZWNhdGVk ID0gdHJ1ZSwgcmVwbGFjZW1lbnQgPSAiWE1MUlBDLmJ1aWxkX21ldGhvZF9yZXNwb25zZSIsIGRl cHJlY2F0ZWRfc2luY2UgPSAidmFsYS0wLjEyIiApXQotLQlwdWJsaWMgc3RhdGljIHVub3duZWQg c3RyaW5nIHhtbHJwY19idWlsZF9tZXRob2RfcmVzcG9uc2UgKEdMaWIuVmFsdWUgdmFsdWUpOwot LQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiKV0KLS0JW1ZlcnNp b24gKCBkZXByZWNhdGVkID0gdHJ1ZSwgcmVwbGFjZW1lbnQgPSAiWE1MUlBDLmVycm9yX3F1YXJr IiwgZGVwcmVjYXRlZF9zaW5jZSA9ICJ2YWxhLTAuMTIiICldCi0tCXB1YmxpYyBzdGF0aWMgR0xp Yi5RdWFyayB4bWxycGNfZXJyb3JfcXVhcmsgKCk7Ci0tCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFt ZSA9ICJsaWJzb3VwL3NvdXAuaCIsIHNlbnRpbmVsID0gIkdfVFlQRV9JTlZBTElEIildCi0tCVtW ZXJzaW9uICggZGVwcmVjYXRlZCA9IHRydWUsIHJlcGxhY2VtZW50ID0gIlhNTFJQQy5leHRyYWN0 X21ldGhvZF9jYWxsIiwgZGVwcmVjYXRlZF9zaW5jZSA9ICJ2YWxhLTAuMTIiICldCi0tCXB1Ymxp YyBzdGF0aWMgYm9vbCB4bWxycGNfZXh0cmFjdF9tZXRob2RfY2FsbCAoc3RyaW5nIG1ldGhvZF9j YWxsLCBpbnQgbGVuZ3RoLCBvdXQgdW5vd25lZCBzdHJpbmcgbWV0aG9kX25hbWUsIC4uLik7Ci0t CVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIsIHNlbnRpbmVsID0g IkdfVFlQRV9JTlZBTElEIildCi0tCVtWZXJzaW9uICggZGVwcmVjYXRlZCA9IHRydWUsIHJlcGxh Y2VtZW50ID0gIlhNTFJQQy5leHRyYWN0X21ldGhvZF9yZXNwb25zZSIsIGRlcHJlY2F0ZWRfc2lu Y2UgPSAidmFsYS0wLjEyIiApXQotLQlwdWJsaWMgc3RhdGljIGJvb2wgeG1scnBjX2V4dHJhY3Rf bWV0aG9kX3Jlc3BvbnNlIChzdHJpbmcgbWV0aG9kX3Jlc3BvbnNlLCBpbnQgbGVuZ3RoLCAuLi4p IHRocm93cyBHTGliLkVycm9yOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291 cC9zb3VwLmgiKV0KLS0JW1ZlcnNpb24gKCBkZXByZWNhdGVkID0gdHJ1ZSwgcmVwbGFjZW1lbnQg PSAiWE1MUlBDLmZhdWx0X3F1YXJrIiwgZGVwcmVjYXRlZF9zaW5jZSA9ICJ2YWxhLTAuMTIiICld Ci0tCXB1YmxpYyBzdGF0aWMgR0xpYi5RdWFyayB4bWxycGNfZmF1bHRfcXVhcmsgKCk7Ci0tCVtD Q29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJzb3VwL3NvdXAuaCIpXQotLQlbVmVyc2lvbiAo IGRlcHJlY2F0ZWQgPSB0cnVlLCByZXBsYWNlbWVudCA9ICJYTUxSUEMucGFyc2VfbWV0aG9kX2Nh bGwiLCBkZXByZWNhdGVkX3NpbmNlID0gInZhbGEtMC4xMiIgKV0KLS0JcHVibGljIHN0YXRpYyBi b29sIHhtbHJwY19wYXJzZV9tZXRob2RfY2FsbCAoc3RyaW5nIG1ldGhvZF9jYWxsLCBpbnQgbGVu Z3RoLCBvdXQgdW5vd25lZCBzdHJpbmcgbWV0aG9kX25hbWUsIG91dCB1bm93bmVkIEdMaWIuVmFs dWVBcnJheSBAcGFyYW1zKTsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAv c291cC5oIildCi0tCVtWZXJzaW9uICggZGVwcmVjYXRlZCA9IHRydWUsIHJlcGxhY2VtZW50ID0g IlhNTFJQQy5wYXJzZV9tZXRob2RfcmVzcG9uc2UiLCBkZXByZWNhdGVkX3NpbmNlID0gInZhbGEt MC4xMiIgKV0KLS0JcHVibGljIHN0YXRpYyBib29sIHhtbHJwY19wYXJzZV9tZXRob2RfcmVzcG9u c2UgKHN0cmluZyBtZXRob2RfcmVzcG9uc2UsIGludCBsZW5ndGgsIEdMaWIuVmFsdWUgdmFsdWUp IHRocm93cyBHTGliLkVycm9yOwotLQlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291 cC9zb3VwLmgiLCBzZW50aW5lbCA9ICJHX1RZUEVfSU5WQUxJRCIpXQotLQlbVmVyc2lvbiAoIGRl cHJlY2F0ZWQgPSB0cnVlLCByZXBsYWNlbWVudCA9ICJYTUxSUEMucmVxdWVzdF9uZXciLCBkZXBy ZWNhdGVkX3NpbmNlID0gInZhbGEtMC4xMiIgKV0KLS0JcHVibGljIHN0YXRpYyB1bm93bmVkIFNv dXAuTWVzc2FnZSB4bWxycGNfcmVxdWVzdF9uZXcgKHN0cmluZyB1cmksIHN0cmluZyBtZXRob2Rf bmFtZSwgLi4uKTsKLS0JW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYnNvdXAvc291cC5o IildCi0tCVtWZXJzaW9uICggZGVwcmVjYXRlZCA9IHRydWUsIHJlcGxhY2VtZW50ID0gIlhNTFJQ Qy5zZXRfZmF1bHQiLCBkZXByZWNhdGVkX3NpbmNlID0gInZhbGEtMC4xMiIgKV0KLS0JW1ByaW50 ZkZvcm1hdF0KLS0JcHVibGljIHN0YXRpYyB2b2lkIHhtbHJwY19zZXRfZmF1bHQgKFNvdXAuTWVz c2FnZSBtc2csIGludCBmYXVsdF9jb2RlLCBzdHJpbmcgZmF1bHRfZm9ybWF0LCAuLi4pOwotLQlb Q0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGlic291cC9zb3VwLmgiLCBzZW50aW5lbCA9ICJH X1RZUEVfSU5WQUxJRCIpXQotLQlbVmVyc2lvbiAoIGRlcHJlY2F0ZWQgPSB0cnVlLCByZXBsYWNl bWVudCA9ICJYTUxSUEMuc2V0X3Jlc3BvbnNlIiwgZGVwcmVjYXRlZF9zaW5jZSA9ICJ2YWxhLTAu MTIiICldCi0tCXB1YmxpYyBzdGF0aWMgdm9pZCB4bWxycGNfc2V0X3Jlc3BvbnNlIChTb3VwLk1l c3NhZ2UgbXNnLCAuLi4pOwotLX0KLS0tIAotR2l0TGFiCi0KZGlmZiAtLWdpdCBhL3NyY3BrZ3Mv Z2l0Zy90ZW1wbGF0ZSBiL3NyY3BrZ3MvZ2l0Zy90ZW1wbGF0ZQppbmRleCBiZjEwZDQzNWJhZWYu LmI3NTc5ODIxNDIyMyAxMDA2NDQKLS0tIGEvc3JjcGtncy9naXRnL3RlbXBsYXRlCisrKyBiL3Ny Y3BrZ3MvZ2l0Zy90ZW1wbGF0ZQpAQCAtMSwxNyArMSwxOCBAQAogIyBUZW1wbGF0ZSBmaWxlIGZv ciAnZ2l0ZycKIHBrZ25hbWU9Z2l0ZwotdmVyc2lvbj0zLjMyLjEKLXJldmlzaW9uPTUKK3ZlcnNp b249NDEKK3JldmlzaW9uPTEKIGJ1aWxkX3N0eWxlPW1lc29uCiBidWlsZF9oZWxwZXI9InFlbXUi Ci1ob3N0bWFrZWRlcGVuZHM9ImludGx0b29sIGdldHRleHQgZ2xpYi1kZXZlbCBnb2JqZWN0LWlu dHJvc3BlY3Rpb24gcGtnLWNvbmZpZyB2YWxhIgotbWFrZWRlcGVuZHM9Imd0a3NvdXJjZXZpZXct ZGV2ZWwgbGliZ2l0Mi1nbGliLWRldmVsIGxpYmdlZTA4LWRldmVsIGd0a3NwZWxsMy1kZXZlbAot IHdlYmtpdDJndGstZGV2ZWwgbGlicGVhcy1kZXZlbCBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFz LWRldmVsIGxpYnNlY3JldC1kZXZlbAotIGxpYmRhenpsZS1kZXZlbCBsaWJzb3VwLWRldmVsIgor aG9zdG1ha2VkZXBlbmRzPSJnZXR0ZXh0IGdsaWItZGV2ZWwgZ29iamVjdC1pbnRyb3NwZWN0aW9u IHBrZy1jb25maWcgdmFsYSIKK21ha2VkZXBlbmRzPSJsaWJnZWUwOC1kZXZlbCBsaWJnbGliLWRl dmVsIGd0ayszLWRldmVsIGdzcGVsbC1kZXZlbAorIGd0a3NvdXJjZXZpZXc0LWRldmVsIGxpYmdp dDItZ2xpYi1kZXZlbCBsaWJwZWFzLWRldmVsIGxpYnNlY3JldC1kZXZlbAorIGxpYnhtbDItZGV2 ZWwgbGliZGF6emxlLWRldmVsIGpzb24tZ2xpYi1kZXZlbCBnc2V0dGluZ3MtZGVza3RvcC1zY2hl bWFzLWRldmVsIgogZGVwZW5kcz0iZ2l0Igogc2hvcnRfZGVzYz0iR2l0IHJlcG9zaXRvcnkgdmll d2VyIGZvciBHVEsrL0dOT01FIgogbWFpbnRhaW5lcj0iRW5ubyBCb2xhbmQgPGdvdHRveEB2b2lk bGludXgub3JnPiIKIGxpY2Vuc2U9IkdQTC0yLjAtb3ItbGF0ZXIiCiBob21lcGFnZT0iaHR0cHM6 Ly93aWtpLmdub21lLm9yZy9BcHBzL0dpdGciCi1kaXN0ZmlsZXM9IiR7R05PTUVfU0lURX0vJHtw a2duYW1lfS8ke3ZlcnNpb24lLip9LyR7cGtnbmFtZX0tJHt2ZXJzaW9ufS50YXIueHoiCi1jaGVj a3N1bT0yNGE0YWFiZjhhNDJhYTJlNzgzZTFmYjU5OTZlYmIzYzJhODJhMDFiOTY4OTI2OWYxMzI5 NTE3ZWYxMjRlZjVhCitjaGFuZ2Vsb2c9Imh0dHBzOi8vZ2l0bGFiLmdub21lLm9yZy9HTk9NRS9n aXRnLy0vcmF3L21hc3Rlci9ORVdTIgorZGlzdGZpbGVzPSIke0dOT01FX1NJVEV9LyR7cGtnbmFt ZX0vJHt2ZXJzaW9ufS8ke3BrZ25hbWV9LSR7dmVyc2lvbn0udGFyLnh6IgorY2hlY2tzdW09N2Zi NjFiOWZiMTBmYmFhNTQ4ZDIzZDcwNjViYWJkNzJhZDYzZTYyMWRlNTU4NDBjMDY1Y2U2ZTM5ODZj NDYyOQo= --===============5253650492069075903==--